From 666a8c8ed399c6e74b2f307bf6649b32a0fdb3e1 Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期三, 23 十月 2024 21:32:31 +0800
Subject: [PATCH] 添加工单工艺路线优化

---
 Tiger.Business.MES/WorkAction/PackingAction.cs |  144 +++++++++++++++++++++++++----------------------
 1 files changed, 77 insertions(+), 67 deletions(-)

diff --git a/Tiger.Business.MES/WorkAction/PackingAction.cs b/Tiger.Business.MES/WorkAction/PackingAction.cs
index ab7c1f1..b16ca05 100644
--- a/Tiger.Business.MES/WorkAction/PackingAction.cs
+++ b/Tiger.Business.MES/WorkAction/PackingAction.cs
@@ -74,7 +74,8 @@
                     WorkBatch = CurPosition.WorkBatch.Batch.BATCH_NO,
                     RULE_CODE = PkgRule.RULE_CODE,
                     RULE_NAME = PkgRule.RULE_NAME,
-                    ITEM_CODE = CurPosition.WorkBatch.WO.ITEM_CODE,
+                    PROD_CODE = CurPosition.WorkBatch.WO.ITEM_CODE,
+                    CustSN = Biz.Db.Queryable<MES_CUST_SN>().Where(q => q.FLOW_SN == CurPosition.CurWipSNs.First().FLOW_SN).First(),
                     Item = new WipPkgItem()
                     {
                         PKG_CODE = max.PKG_CODE,
@@ -83,6 +84,7 @@
                         PKG_LEVEL = max.PKG_LEVEL,
                         PKG_QTY = max.PKG_QTY,
                         LABEL_CODE = LabelDic.Count > max.PKG_LEVEL ? LabelDic[max.PKG_LEVEL]?.LABEL_CODE : null,
+                        SN = CurPosition.GenerateSN(max.SN_RULE, this),
                     }
                 };
                 WipPkgItem child = null;
@@ -98,6 +100,7 @@
                             PKG_LEVEL = dtl.PKG_LEVEL,
                             PKG_QTY = dtl.PKG_QTY,
                             LABEL_CODE = LabelDic.Count > dtl.PKG_LEVEL ? LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE : null,
+                            SN = CurPosition.GenerateSN(dtl.SN_RULE, this),
                         };
                         if (!child.IsNullOrEmpty())
                         {
@@ -154,7 +157,8 @@
             LabelDic = CurPosition.Context["CurLabelDic"] as Dictionary<int, BAS_LABEL_TEMP>;
             LabelPV = Biz.Db.Queryable<BAS_LABEL_PV>().ToList();
             //鑾峰彇鍖呰瑙勫垯鐨勭О閲嶈寖鍥�
-            PkgProd = Biz.Db.Queryable<BAS_PKG_PROD>().Where(q => q.PKG_RULE_ID == PkgRule.ID && q.ITEM_CODE == CurPkg.ITEM_CODE).First();
+            PkgProd = Biz.Db.Queryable<BAS_PKG_PROD>().Where(q => q.PKG_RULE_ID == PkgRule.ID && q.ITEM_CODE == CurPkg.PROD_CODE).First();
+            //鎶�
 
             CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("璁板綍鍖呰鏁版嵁"));
         }
@@ -531,14 +535,15 @@
                         PKG_LEVEL = dtl.PKG_LEVEL,
                         PKG_QTY = dtl.PKG_QTY,
                         LABEL_CODE = LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE,
+                        SN = CurPosition.GenerateSN(dtl.SN_RULE, this).IsNullOrEmpty(pInput.PkgSN),
                         IsFinished = true,
                     };
 
-                    CurPkgItem.Package = Biz.Db.Queryable<MES_WIP_PKG>().Where(q => q.SN == pInput.PkgSN && q.AUTH_ORG == CurPosition.WorkBatch.WO.AUTH_ORG).First() ?? new()
+                    CurPkgItem.Package = Biz.Db.Queryable<MES_WIP_PKG>().Where(q => q.SN == CurPkgItem.SN && q.AUTH_ORG == CurPosition.WorkBatch.WO.AUTH_ORG).First() ?? new()
                     {
                         AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
                         AUTH_PROD = CurPosition.CurLine.LINE_CODE,
-                        SN = pInput.PkgSN,
+                        SN = CurPkgItem.SN,
                     };
                     CurPkgItem.Package.WIP_ID = CurPosition.CurWipSNs.Count == 1 ? CurPosition.CurWipSNs.First().ID : null;
                     CurPkgItem.Package.PKG_TYPE = dtl.PkgType.PKG_NAME;
@@ -557,6 +562,7 @@
                     CurPkgItem.Package.OPER_CODE = CurPosition.CurWipSNs.First().OPER_CODE;
                     CurPkgItem.Package.SEGMENT = CurPosition.CurWipSNs.First().SEGMENT;
                     CurPkgItem.Package.ACT_ID = NodeAct.ID;
+                    CurPkgItem.Package.FLOW_SN = CurPosition.CurWipSNs.First().FLOW_SN;
                     FinishLevel++;
                     //瀹屾垚鍖呰鐨勫眰绾у皬浜庢渶澶栧眰鍖呰灞傜骇
                     if (FinishLevel < PkgRule.Details.Max(q => q.PKG_LEVEL))
@@ -582,7 +588,7 @@
                         {
                             AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
                             AUTH_PROD = CurPosition.CurLine.LINE_CODE,
-                            SN = pInput.PkgSN,
+                            SN = CurPkgItem.SN.IsNullOrEmpty(pInput.PkgSN),
                             PKG_TYPE = dtl.PkgType.PKG_NAME,
                             ITEM_CODE = CurPkgItem.Items.First().Package.ITEM_CODE,
                             QTY = CurPkgItem.Items.Sum(q => q.Package.QTY),
@@ -602,7 +608,7 @@
                         {
                             AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
                             AUTH_PROD = CurPosition.CurLine.LINE_CODE,
-                            SN = pInput.PkgSN,
+                            SN = CurPkgItem.SN.IsNullOrEmpty(pInput.PkgSN),
                             PKG_TYPE = dtl.PkgType.PKG_NAME,
                             ITEM_CODE = CurPosition.CurWipSNs.First().ITEM_CODE,
                             QTY = CurPkgItem.Items.Sum(q => q.Package.QTY),
@@ -619,6 +625,7 @@
                             OPER_CODE = CurPosition.CurWipSNs.First().OPER_CODE,
                             SEGMENT = CurPosition.CurWipSNs.First().SEGMENT,
                             ACT_ID = NodeAct.ID,
+                            FLOW_SN = CurPosition.CurWipSNs.First().FLOW_SN,
                         };
                         FinishLevel++;
                         //瀹屾垚鍖呰鐨勫眰绾у皬浜庢渶澶栧眰鍖呰灞傜骇
@@ -652,6 +659,7 @@
                                     PKG_LEVEL = nextDtl.PKG_LEVEL,
                                     PKG_QTY = nextDtl.PKG_QTY,
                                     LABEL_CODE = LabelDic[nextDtl.PKG_LEVEL]?.LABEL_CODE,
+                                    SN = CurPosition.GenerateSN(nextDtl.SN_RULE, this),
                                 };
                                 curItem.Items.Add(next);
                             }
@@ -868,36 +876,37 @@
                     if (_pkgList.Any())
                     {
                         db.Storageable(_pkgList, CurPosition.UserCode).ExecuteCommand();
-                        foreach (var pkg in _pkgList.Where(q => !q.WIP_ID.IsNullOrEmpty()))
-                        {
-                            //鍖呰淇℃伅淇濆瓨鍒板湪鍒跺搧淇℃伅琛�
-                            db.Updateable<MES_WIP_DATA>()
-                                .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
-                                .SetColumns(q => q.INNER_SN == q.CARTON_SN)
-                                .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
-                                .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.ID == pkg.WIP_ID)
-                                .ExecuteCommand();
-                            //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц繃绋嬭褰�
-                            db.Updateable<MES_WIP_HIS>()
-                                .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
-                                .SetColumns(q => q.INNER_SN == q.CARTON_SN)
-                                .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
-                                .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID)
-                                .ExecuteCommand();
-                            //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц涓鸿褰�
-                            db.Updateable<MES_WIP_ACT>()
-                                .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
-                                .SetColumns(q => q.INNER_SN == q.CARTON_SN)
-                                .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
-                                .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID && q.ACT_ID == pkg.ACT_ID)
-                                .ExecuteCommand();
-                            //鍖呰淇℃伅淇濆瓨鍒板伐鍗曟潯鐮佹槑缁嗚〃
-                            db.Updateable<BIZ_MES_WO_SN>()
-                                .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
-                                .SetColumns(q => q.OUTER_SN == CurPkg.Item.Package.SN)
-                                .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID)
-                                .ExecuteCommand();
-                        }
+                        var wipIDs = _pkgList.Where(q => !q.WIP_ID.IsNullOrEmpty()).Select(q => q.WIP_ID).ToList();
+                        var nodeID = _pkgList.First().NODE_ID;
+                        var actID = _pkgList.First().ACT_ID;
+                        var wo = _pkgList.First().WORK_ORDER;
+                        //鍖呰淇℃伅淇濆瓨鍒板湪鍒跺搧淇℃伅琛�
+                        db.Updateable<MES_WIP_DATA>()
+                            .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
+                            .SetColumns(q => q.INNER_SN == q.CARTON_SN)
+                            .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
+                            .Where(q => q.WORK_ORDER == wo && wipIDs.Contains(q.ID))
+                            .ExecuteCommand();
+                        //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц繃绋嬭褰�
+                        db.Updateable<MES_WIP_HIS>()
+                            .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
+                            .SetColumns(q => q.INNER_SN == q.CARTON_SN)
+                            .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
+                            .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && wipIDs.Contains(q.WIP_ID))
+                            .ExecuteCommand();
+                        //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц涓鸿褰�
+                        db.Updateable<MES_WIP_ACT>()
+                            .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
+                            .SetColumns(q => q.INNER_SN == q.CARTON_SN)
+                            .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
+                            .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && q.ACT_ID == actID && wipIDs.Contains(q.WIP_ID))
+                            .ExecuteCommand();
+                        //鍖呰淇℃伅淇濆瓨鍒板伐鍗曟潯鐮佹槑缁嗚〃
+                        db.Updateable<BIZ_MES_WO_SN>()
+                            .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
+                            .SetColumns(q => q.OUTER_SN == CurPkg.Item.Package.SN)
+                            .Where(q => q.WORK_ORDER == wo && wipIDs.Contains(q.WIP_ID))
+                            .ExecuteCommand();
                     }
                 };
             }
@@ -916,37 +925,38 @@
                         if (_pkgList.Any())
                         {
                             db.Storageable(_pkgList, CurPosition.UserCode).ExecuteCommand();
-                            foreach (var pkg in _pkgList.Where(q => !q.WIP_ID.IsNullOrEmpty()))
-                            {
-                                //鍖呰淇℃伅淇濆瓨鍒板湪鍒跺搧淇℃伅琛�
-                                db.Updateable<MES_WIP_DATA>()
-                                    .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
-                                    .SetColumns(q => q.INNER_SN == q.CARTON_SN)
-                                    .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
-                                    .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.ID == pkg.WIP_ID)
-                                    .ExecuteCommand();
-                                //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц繃绋嬭褰�
-                                var endOperCode = CurPkg.IsReachedEndNode ? "EndNode" : "NotReachedEndNode";
-                                db.Updateable<MES_WIP_HIS>()
-                                    .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
-                                    .SetColumns(q => q.INNER_SN == q.CARTON_SN)
-                                    .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
-                                    .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID && (q.NODE_ID == pkg.NODE_ID || q.OPER_CODE == endOperCode))
-                                    .ExecuteCommand();
-                                //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц涓鸿褰�
-                                db.Updateable<MES_WIP_ACT>()
-                                    .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
-                                    .SetColumns(q => q.INNER_SN == q.CARTON_SN)
-                                    .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
-                                    .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID && q.ACT_ID == pkg.ACT_ID)
-                                    .ExecuteCommand();
-                                //鍖呰淇℃伅淇濆瓨鍒板伐鍗曟潯鐮佹槑缁嗚〃
-                                db.Updateable<BIZ_MES_WO_SN>()
-                                    .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
-                                    .SetColumns(q => q.OUTER_SN == CurPkg.Item.Package.SN)
-                                    .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID)
-                                    .ExecuteCommand();
-                            }
+                            var wipIDs = _pkgList.Where(q => !q.WIP_ID.IsNullOrEmpty()).Select(q => q.WIP_ID).ToList();
+                            var nodeID = _pkgList.First().NODE_ID;
+                            var actID = _pkgList.First().ACT_ID;
+                            var wo = _pkgList.First().WORK_ORDER;
+                            //鍖呰淇℃伅淇濆瓨鍒板湪鍒跺搧淇℃伅琛�
+                            db.Updateable<MES_WIP_DATA>()
+                                .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
+                                .SetColumns(q => q.INNER_SN == q.CARTON_SN)
+                                .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
+                                .Where(q => q.WORK_ORDER == wo && wipIDs.Contains(q.ID))
+                                .ExecuteCommand();
+                            //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц繃绋嬭褰�
+                            var endOperCode = CurPkg.IsReachedEndNode ? "EndNode" : "NotReachedEndNode";
+                            db.Updateable<MES_WIP_HIS>()
+                                .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
+                                .SetColumns(q => q.INNER_SN == q.CARTON_SN)
+                                .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
+                                .Where(q => q.WORK_ORDER == wo && (q.NODE_ID == nodeID || q.OPER_CODE == endOperCode) && wipIDs.Contains(q.WIP_ID))
+                                .ExecuteCommand();
+                            //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц涓鸿褰�
+                            db.Updateable<MES_WIP_ACT>()
+                                .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
+                                .SetColumns(q => q.INNER_SN == q.CARTON_SN)
+                                .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
+                                .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && q.ACT_ID == actID && wipIDs.Contains(q.WIP_ID))
+                                .ExecuteCommand();
+                            //鍖呰淇℃伅淇濆瓨鍒板伐鍗曟潯鐮佹槑缁嗚〃
+                            db.Updateable<BIZ_MES_WO_SN>()
+                                .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
+                                .SetColumns(q => q.OUTER_SN == CurPkg.Item.Package.SN)
+                                .Where(q => q.WORK_ORDER == wo && wipIDs.Contains(q.WIP_ID))
+                                .ExecuteCommand();
                         }
                     });
                     //濡傛灉褰撳墠鏉$爜宸茬粡瀹屽伐锛屾鏌ュ綋鍓嶅伐鍗曟壒娆″拰宸ュ崟鏄惁瀹屽伐

--
Gitblit v1.9.3