前端页面

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title></title>
</head>
<body>
    <div>
        @using (Html.BeginForm("SinglePrintOrder", "Order", FormMethod.Post))
        {<div>@Html.TextBox("id")<input type="submit" value="提交" /></div>}
    </div>
</body>
</html>

后端逻辑

public ActionResult SinglePrintOrder(int id)
        {
            using (var entity = new YXXEntities())
            {
                var order = entity.TOrder.FirstOrDefault(p => p.POrderId == id);
                try
                {
                    var sb=new StringBuilder();
                    if (order == null)
                    {
                        return Json(new {ok = false, msg = "订单无效!"});
                    }
                    //获得与之匹配的FSN和FKey的那条数据
                    var printSets = entity.TPrintSet.Where(p =>
                        p.FType == 2 && //云端配置
                        p.FState == 1);//&& p.KStoreId == order.KStoreId);
                    if (!printSets.Any())
                    {
                        return Json(new { ok = false, msg = "查找不到打印配置!" });
                    }
                    #region 单个查询
                    //这个是商品详情
                    //var singleProduct = (from od in entity.TOrderDetail
                    //    //匹配打印规格
                    //    join ps in entity.TProductSpec on od.KProductSpecId equals ps.PProductSpecId//检验打印OrderDetail的外键的和他的规格相对应TProductSpec的主键是否相等
                    //    join p in entity.TProduct on ps.KProductId equals p.PProductId
                    //    //检查是否被打印,并且od.KOrderId==传进来的id
                    //    where (od.FIsPrint != true || !od.FIsPrint.Value) && od.KOrderId == id
                    //    select new { p.KPrintSetId, ps.FSpecName, ps.FSpecName2, ps.FSpecName3, ps.FPrice, p.FName, od.FCount, ps.KProductId }).ToList();
                    var singleProduct = entity.TProduct.Join(
                        entity.TProductSpec, 
                        p => p.PProductId,
                        ps => ps.PProductSpecId,
                        (p, ps) => new
                        {
                            p.KPrintSetId,
                            p.FName,
                            ps.FSpecName,
                            ps.FSpecName2,
                            ps.FSpecName3,
                            ps.FPrice,
                            ps.KProductId
                        });
                    #endregion
                    //#region 多个查询
                    //var products = (from od in entity.TOrderDetail
                    //                    //每次点单数据库就会增加一个OrderDetail,查出这条OrderDetail
                    //                join ps in entity.TProductSpec on od.KProductSpecId equals ps.PProductSpecId
                    //                //检验打印OrderDetail的外键的和他的规格相对应TProductSpec的主键是否相等
                    //                join p in entity.TProduct on ps.KProductId equals p.PProductId
                    //                //todo:如果说打印有问题,那么就是这里
                    //                //todo:连接TProduct表检查打印规格表TProductSpec的外键KProductId和这个打印产品的主键是否相等
                    //                where (od.FIsPrint != true || !od.FIsPrint.Value) && od.KOrderId == order.POrderId
                    //                //检查order表里的主键和OrderDetail是否相等
                    //                select new { p.KPrintSetId, ps.FSpecName, ps.FSpecName2, ps.FSpecName3, ps.FPrice, p.FName, od.FCount, ps.KProductId }).ToList(); 
                    //#endregion
                    var storeName = entity.TStore.Single(p => p.PStoreId == id).FName;
                    var regionTable =
                        entity.TRegionTable.SingleOrDefault(p => p.PRegionTableId == order.KRegionTableId);
                    var userAddress =
                        entity.TUserAddress.SingleOrDefault(p => p.PUserAddressId == order.KUserAddressId);
                    //遍历打印机
                    foreach (var printSet in printSets)
                    {
                        sb.Append($"<CB>{storeName}</CB><BR>");
                        if (order.FSort != null)
                        {
                            sb.Append($"<CB>序号:{order.FSort}</CB><BR>");
                        }
                        if (regionTable != null)
                        {
                            sb.Append($"<CB>{regionTable.FName}</CB><BR>");
                        }

                        if (printSet.FSpec == 1)//打印纸张 80规格
                        {
                            sb.Append("名称                          数量  单价<BR>");
                            sb.Append("--------------------------------------------<BR>");
                        }
                        else
                        {
                            sb.Append("名称                 数量 单价<BR>");
                            sb.Append("------------------------------<BR>");
                        }
                        var productPrintSet = entity.TProductPrintSet.Where(p => p.KPrintSetId == printSet.PPrintSetId).Select(p => p.KProductId);
                        //var pros = singleProduct.Where(p => productPrintSet.Contains(p.KProductId)).ToList();
                        var pro = singleProduct.FirstOrDefault(p => p.KProductId == id);
                        //foreach (var pro in pros)
                        //{
                            sb.Append(pro.FName + "[" + pro.FSpecName);
                            if (!String.IsNullOrWhiteSpace(pro.FSpecName2))
                            {
                                sb.Append(" " + pro.FSpecName2);
                            }

                            if (!String.IsNullOrWhiteSpace(pro.FSpecName3))
                            {
                                sb.Append(" " + pro.FSpecName3);
                            }
                            sb.Append("]<BR>");
                            if (printSet.FSpec == 1)
                            {
                                //sb.Append($"<RIGHT>{pro.FPrice}  {pro.FCount}  {pro.FPrice * pro.FCount}   </RIGHT> <BR>");
                                sb.Append($"<RIGHT>  1  {pro.FPrice}   </RIGHT> <BR>");
                            }
                            else
                            {
                                //sb.Append($"<RIGHT>{pro.FPrice} {pro.FCount} {pro.FPrice * pro.FCount} </RIGHT> <BR>");
                                sb.Append($"<RIGHT> 1 {pro.FPrice} </RIGHT> <BR>");
                            }
                        //}
                        if (printSet.FSpec == 1)
                        {
                            sb.Append("--------------------------------------------<BR>");
                        }
                        else
                        {
                            sb.Append("-----------------------------<BR>");
                        }
                        //sb.Append($"合计:{pros.Sum(p => p.FCount * p.FPrice)}<BR>");
                        sb.Append($"备注:{order.FRemark}<BR>");
                        if (userAddress != null)
                        {
                            sb.Append($"送货地址:{userAddress.FProvince}{userAddress.FCity}{userAddress.FRegion}{userAddress.FAddress}<BR>");
                            sb.Append($"联系电话:{userAddress.FPhone}<BR>");
                            sb.Append($"收货人:{userAddress.FReceiveName}<BR>");
                        }

                        sb.Append($"时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}<BR>");
                        sb.Append($"订单号:{order.FOrderNo}<BR>");
                        if (pro != null )//&& pro.Any())
                        {
                            LogHelper.WriteError(typeof(UserInfo), "打印产品" + pro + "\n");
                            PrintAPI.PrintContent(printSet.FSN, sb.ToString());
                            var sbtest = sb.ToString();
                        }
                        sb.Clear();
                    }
                    var orderDetail = entity.TOrderDetail.Where(p => p.KOrderId == id).ToList();
                    orderDetail.ForEach(p => p.FIsPrint = true);
                    orderDetail.ForEach(p => entity.Entry(p).State = System.Data.Entity.EntityState.Modified);
                    entity.SaveChanges();
                    order.FIsPrint = true;
                    entity.Entry(order).State = System.Data.Entity.EntityState.Modified;
                    return Json(new { ok = true, msg = "打印成功!" });
                }
                catch (Exception e)
                {
                    LogHelper.WriteError(typeof(UserInfo), "打印出错" + e.Message + "\n" + e.StackTrace);
                    return Json(new { ok = false, msg = "打印出错!" });
                }
            }
        }

        public ActionResult TestSinglePrintOrder()
        {
            return View();
        }