服务端的TigerApi 框架,基于.NET6 2024 版本
Ben Lin
2025-01-03 9e70e03376aa1d7b86baef15e2ddfe3641fc0cb8
优化代码结构,改进打印和计划处理逻辑

在 `BIZ_MES_WO.cs` 文件中:
* 移除了重复查询,将查询操作移到条件判断中。
* 优化生成打印实体的逻辑,减少重复代码。
* 增加对 `printJson` 的 `Items` 属性的检查。
* 修改打印实体的分页逻辑,增加辅助变量。

在 `ImportWoPlan.cs` 文件中:
* 修改 `wo.PLAN_DATE` 的赋值逻辑,避免异常。
* 增加对 `_wo` 和 `_batchs` 的查询及异常处理。
* 修改 `_woBatch` 的查询逻辑,避免重复查询。
已修改2个文件
147 ■■■■■ 文件已修改
Tiger.Business.MES/BIZ/BIZ_MES_WO.cs 133 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/BIZ/ImportWoPlan.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/BIZ/BIZ_MES_WO.cs
@@ -789,76 +789,83 @@
            {
                DbClient db = Biz.DataSource["YadaU9C"].Client;
                var moPickLists = db.Queryable<mes_MOPickList>().Where(q => q.MoDocNo == code).OrderBy(q => q.DocLineNO).ToList();
                var ids = moPickLists.Select(x => SqlFunc.ToString(x.ItemMaster)).ToList();
                var items = Biz.Db.Queryable<BAS_ITEM>().Where(q => ids.Contains(q.ID)).IncludesAllFirstLayer().ToList();
                var wo = await Biz.Db.Queryable<BIZ_MES_WO>().Where(q => q.ORDER_NO == code).IncludesAllFirstLayer().FirstAsync();
                SugarParameter[] pars = Biz.Db.Ado.GetParameters(new { WO = code });
                var routeList = Biz.Db.Ado.UseStoredProcedure().SqlQuery<V_MES_WO_PTREE>("SP_MES_GET_WO_PTREE", pars);//返回List
                var routeStr = string.Join("->", routeList.Where(q => q.type == "Node" && q.name != "完工").OrderBy(x=>x.seq).Select(q=>q.name).ToList());
                List<WoFlowCardPrintJson> woFlowCardPrintJson = new();
                //生成打印实体
                int i = 1;
                string Model = moPickLists.Where(q => q.IssueStyleName == "推式").First()?.ItemModel;
                string MoRemark = moPickLists[0]?.MoRemark;
                string SoRemark = moPickLists[0]?.SoRemark;
                string Customer = moPickLists[0]?.Customer;
                string DemandCode = moPickLists[0]?.DemandCode;
                WoFlowCardPrintJson printJson = new()
                if (moPickLists.Count>0)
                {
                    ID = Guid.NewGuid().ToString("N"),
                    OrderNo = code,
                    Status = wo.STATUS.GetEnum<BIZ_MES_WO.STATUSs>().GetDesc(),
                    Model = Model,
                    ItemCode = wo.ITEM_CODE,
                    ItemDesc = wo.ItemInfo?.ITEM_DESC,
                    SapCode = wo.ItemInfo?.ExtInfo?.SapCode,
                    Qty = wo.PLAN_QTY,
                    SoRemark = wo.SALES_REMARK,
                    MoRemark= MoRemark,
                    Customer = Customer,
                    DemandCode= DemandCode,
                    RouteStr = routeStr,
                    Items = new() { }
                };
                foreach (var item in moPickLists)
                {
                    PrintWoPickList list = new()
                    var ids = moPickLists.Select(x => SqlFunc.ToString(x.ItemMaster)).ToList();
                    var items = Biz.Db.Queryable<BAS_ITEM>().Where(q => ids.Contains(q.ID)).IncludesAllFirstLayer().ToList();
                    var wo = await Biz.Db.Queryable<BIZ_MES_WO>().Where(q => q.ORDER_NO == code).IncludesAllFirstLayer().FirstAsync();
                    SugarParameter[] pars = Biz.Db.Ado.GetParameters(new { WO = code });
                    var routeList = Biz.Db.Ado.UseStoredProcedure().SqlQuery<V_MES_WO_PTREE>("SP_MES_GET_WO_PTREE", pars);//返回List
                    var routeStr = string.Join("->", routeList.Where(q => q.type == "Node" && q.name != "完工").OrderBy(x => x.seq).Select(q => q.name).ToList());
                    //生成打印实体
                    int i = 1;
                    int n = 1;
                    string Model = moPickLists.Where(q => q.IssueStyleName == "推式").FirstOrDefault()?.ItemModel;
                    string MoRemark = moPickLists[0]?.MoRemark;
                    string SoRemark = moPickLists[0]?.SoRemark;
                    string Customer = moPickLists[0]?.Customer;
                    string DemandCode = moPickLists[0]?.DemandCode;
                    WoFlowCardPrintJson printJson = new()
                    {
                        LineNo = item.DocLineNO,
                        SapCode = item.SapCode,
                        ItemCode = item.Code,
                        ItemDesc = items.Where(q => q.ID == SqlFunc.ToString(item.ItemMaster)).FirstOrDefault()?.ITEM_DESC,
                        PickQty = item.ActualReqQty,
                        LineRemark = item.Remark,
                        WhCode = item.InventoryInfoCode,
                        WhCode07 = item.PictureCode,
                        Method = item.IssueStyleName,
                        ID = Guid.NewGuid().ToString("N"),
                        OrderNo = code,
                        Status = wo.STATUS.GetEnum<BIZ_MES_WO.STATUSs>().GetDesc(),
                        Model = Model,
                        ItemCode = wo.ITEM_CODE,
                        ItemDesc = wo.ItemInfo?.ITEM_DESC,
                        SapCode = wo.ItemInfo?.ExtInfo?.SapCode,
                        Qty = wo.PLAN_QTY,
                        SoRemark = SoRemark,
                        MoRemark = MoRemark,
                        Customer = Customer,
                        DemandCode = DemandCode,
                        RouteStr = routeStr,
                        Items = new() { }
                    };
                    printJson.Items.Add(list);
                    if (i % 11 == 0)
                    foreach (var item in moPickLists)
                    {
                        PrintWoPickList list = new()
                        {
                            LineNo = item.DocLineNO,
                            SapCode = item.SapCode,
                            ItemCode = item.Code,
                            ItemDesc = items.Where(q => q.ID == SqlFunc.ToString(item.ItemMaster)).FirstOrDefault()?.ITEM_DESC,
                            PickQty = item.ActualReqQty,
                            LineRemark = item.Remark,
                            WhCode = item.InventoryInfoCode,
                            WhCode07 = item.PictureCode,
                            Method = item.IssueStyleName,
                        };
                        printJson.Items.Add(list);
                        if (i == 8 || n % 11 == 0)
                        {
                            if (i == 8) { n = 0; }
                            woFlowCardPrintJson.Add(printJson);
                            printJson = new()
                            {
                                ID = Guid.NewGuid().ToString("N"),
                                OrderNo = code,
                                ItemCode = wo.ITEM_CODE,
                                ItemDesc = wo.ItemInfo?.ITEM_DESC,
                                SapCode = wo.ItemInfo?.ExtInfo?.SapCode,
                                Qty = wo.PLAN_QTY,
                                Model = Model,
                                MoRemark = MoRemark,
                                SoRemark = SoRemark,
                                Customer = Customer,
                                DemandCode = DemandCode,
                                RouteStr = routeStr,
                                Items = new() { }
                            };
                        }
                        i++;
                        n++;
                    }
                    if (printJson.Items.Count > 0)
                    {
                        woFlowCardPrintJson.Add(printJson);
                        printJson = new()
                        {
                            ID = Guid.NewGuid().ToString("N"),
                            OrderNo = code,
                            ItemCode = wo.ITEM_CODE,
                            ItemDesc = wo.ItemInfo?.ITEM_DESC,
                            SapCode = wo.ItemInfo?.ExtInfo?.SapCode,
                            Qty = wo.PLAN_QTY,
                            Model = Model,
                            MoRemark = MoRemark,
                            Customer = Customer,
                            DemandCode = DemandCode,
                            RouteStr = routeStr,
                            Items = new() { }
                        };
                    }
                    i++;
                }
                if (printJson.Items.Count > 0 )
                {
                    woFlowCardPrintJson.Add(printJson);
                }
                action.Data = woFlowCardPrintJson;
            }
Tiger.Business.MES/BIZ/ImportWoPlan.cs
@@ -61,7 +61,7 @@
                        BIZ_MES_WO wo = Biz.Db.Queryable<BIZ_MES_WO>().Where(x => x.ORDER_NO == item.ORDER_NO).First();
                        if (wo != null)
                        {
                            wo.PLAN_DATE += wo.PLAN_DATE.Contains(item.PLAN_DATE.ToString("yyyy-MM-dd")) ? "" : $",{item.PLAN_DATE.ToString("yyyy-MM-dd")}";
                            wo.PLAN_DATE = (wo.PLAN_DATE ?? "") + ((wo.PLAN_DATE ?? "").Contains(item.PLAN_DATE.ToString("yyyy-MM-dd")) ? "" : $",{item.PLAN_DATE.ToString("yyyy-MM-dd")}");
                            item.ITEM_CODE = wo.ITEM_CODE;
                            item.CUST_CODE = wo.CUST_CODE;
                            woList.Add(wo);
@@ -150,7 +150,17 @@
                            item.VALIDATION_TYPE = "异常";
                            item.VALIDATION_RESULT += $"计划数量为空; ";
                        }
                        var _woBatch = await Biz.Db.Queryable<BIZ_MES_WO_BATCH>().Where(x => x.ORDER_NO == item.ORDER_NO && SqlFunc.DateIsSame(x.PLAN_DATE, item.PLAN_DATE) && BIZ_MES_WO_BATCH.STATUSs.Init.GetValue() < x.STATUS && x.STATUS < BIZ_MES_WO_BATCH.STATUSs.Closed.GetValue()).FirstAsync();
                        var _wo = await Biz.Db.Queryable<BIZ_MES_WO>().Where(x => x.ORDER_NO == item.ORDER_NO).FirstAsync();
                        var _batchs = await Biz.Db.Queryable<BIZ_MES_WO_BATCH>().Where(x => x.ORDER_NO == item.ORDER_NO).ToListAsync();
                        if (_batchs.Count > 0)
                        {
                            if ((_batchs.Sum(x => x.PLAN_QTY) + item.PLAN_QTY > _wo.PLAN_QTY) || item.PLAN_QTY > _wo.PLAN_QTY)
                            {
                                item.VALIDATION_TYPE = "异常";
                                item.VALIDATION_RESULT += $"工单下发的数量超过工单计划数量,不能下发!";
                            }
                        }
                        var _woBatch = _batchs.Where(x => x.ORDER_NO == item.ORDER_NO && SqlFunc.DateIsSame(x.PLAN_DATE, item.PLAN_DATE) && BIZ_MES_WO_BATCH.STATUSs.Init.GetValue() < x.STATUS && x.STATUS < BIZ_MES_WO_BATCH.STATUSs.Closed.GetValue()).FirstOrDefault();
                        if (!_woBatch.IsNullOrEmpty())
                        {
                            item.VALIDATION_TYPE = "异常";