From 76e5a482a1be93af036ff6d75d367c7401810682 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期一, 14 十月 2024 17:04:27 +0800
Subject: [PATCH] 增加雅达生产报工行为(缺报工逻辑)

---
 Tiger.Business.MES/WorkAction/PackingAction.cs |  175 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 134 insertions(+), 41 deletions(-)

diff --git a/Tiger.Business.MES/WorkAction/PackingAction.cs b/Tiger.Business.MES/WorkAction/PackingAction.cs
index e5b807a..bdc2ef7 100644
--- a/Tiger.Business.MES/WorkAction/PackingAction.cs
+++ b/Tiger.Business.MES/WorkAction/PackingAction.cs
@@ -1,4 +1,5 @@
-锘縰sing Rhea.Common;
+锘縰sing Microsoft.CodeAnalysis.Differencing;
+using Rhea.Common;
 using SqlSugar;
 using System;
 using System.Collections.Generic;
@@ -218,6 +219,7 @@
                 CurCmd = data;
                 PrintTimes++;
                 CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("鎵撳嵃鏍囩"));
+                action.IsSuccessed = true;
                 action.Data.Data = data;
                 action.Data.ShortMsg = new("鎵撳嵃鏍囩", ShortMessage.Types.Normal);
                 //action.LocaleMsg = new Locale($"寮�濮嬬{PrintTimes}娆℃墦鍗扮{min.PKG_LEVEL}灞傚寘瑁匸{min.PkgType.PKG_NAME}]鐨勬爣绛綶{LabelDic[min.PKG_LEVEL]?.LABEL_CODE}: {LabelDic[min.PKG_LEVEL].LABEL_NAME}]");
@@ -225,7 +227,7 @@
             }
 
             //濡傛灉杩斿洖鎴愬姛鍒欒涓哄綋鍓嶈涓哄彲浠ュ紑濮嬫墽琛岋紝鍚﹀垯杩斿洖澶辫触
-            action.IsSuccessed = true;
+            //action.IsSuccessed = true;
             return action;
         }
 
@@ -253,6 +255,7 @@
                             action.IsSuccessed = false;
                             //action.LocaleMsg = new($"鏉$爜鎵弿澶辫触锛岃閲嶆柊鎵弿绗瑊dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛炬潯鐮�");
                             action.LocaleMsg = new("MES.WorkAction.PackingAction.ScanFail", dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME);
+                            CurPosition.ResetNode();
                             return action;
                         }
                         //楠岃瘉褰撳墠鍖呰鏉$爜鏄惁宸茬粡琚壂鎻忚繃
@@ -264,17 +267,18 @@
                             action.IsSuccessed = false;
                             //action.LocaleMsg = new($"鏉$爜[{pInput.PkgSN}]鏃犻渶閲嶅鎵弿锛岃鎵弿绗瑊dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛炬潯鐮�");
                             action.LocaleMsg = new("MES.WorkAction.PackingAction.ScanRepeat", pInput.PkgSN, dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME);
+                            CurPosition.ResetNode();
                             return action;
                         }
                         //瀹㈡埛绔壂鎻忔垚鍔�
                         CurCmd = null;
                         PrintTimes = 0;
                         action = SavePkgData(input, action);
-                        if (action.IsSuccessed)
-                        {
-                            CurStep?.SetStatusMessage(StepStatus.Success, Biz.L("鎵弿鎴愬姛"));
-                            action.Data.ShortMsg = new("鎵弿鎴愬姛", ShortMessage.Types.Success);
-                        }
+                        //if (action.IsSuccessed)
+                        //{
+                        //    CurStep?.SetStatusMessage(StepStatus.Success, Biz.L("鎵弿鎴愬姛"));
+                        //    action.Data.ShortMsg = new("鎵弿鎴愬姛", ShortMessage.Types.Success);
+                        //}
                     }
                     break;
                 //Print锛氭墦鍗帮紝鎵撳嵃褰撳墠鍖呰灞傜骇鐨勬爣绛�
@@ -443,8 +447,20 @@
 
                         //鎵嬪姩缁撴潫鍖呰榛樿浠庣浜屽眰鍖呰寮�濮嬮獙璇�
                         var dtl = PkgRule.Details.First(q => q.PKG_LEVEL == 2);
-                        //琛屼负璁惧畾鐨凮PTION_1-9鏄寘瑁呬笉鍚屽眰绾х殑鏍囩妯℃澘浠g爜锛屽鏋滀负绌哄垯涓嶉渶瑕佹墦鍗�
-                        if (LabelDic[dtl.PKG_LEVEL].IsNullOrEmpty())
+                        if (dtl.PKG_LEVEL == CurPkg.Item.PKG_LEVEL && CurPkg.NeedWeighing)
+                        {
+                            var data = new PackingActionOutput() { PkgInfo = CurPkg };
+                            data.ExecCode = "Weighing";
+                            data.PkgLevel = dtl.PKG_LEVEL;
+                            CurCmd = data;
+                            CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("涓婄О绉伴噸"));
+                            action.Data.Data = data;
+                            action.Data.ShortMsg = new("涓婄О绉伴噸", ShortMessage.Types.Success);
+                            //action.LocaleMsg = new($"璇锋妸澶栧寘瑁呬笂绉扮О閲�");
+                            action.LocaleMsg = new("MES.WorkAction.PackingAction.PleaseWeighing");
+                        }
+                        //鏍规嵁鍖呰涓嶅悓灞傜骇鐨勬爣绛炬ā鏉夸唬鐮侊紝濡傛灉涓虹┖鍒欎笉闇�瑕佹墦鍗�
+                        else if (LabelDic[dtl.PKG_LEVEL].IsNullOrEmpty())
                         {
                             var data = new PackingActionOutput() { PkgInfo = CurPkg };
                             data.ExecCode = "Scan";
@@ -553,7 +569,27 @@
                     if (pInput.PkgLevel == dtl.PKG_LEVEL)
                     {
                         CurPkgItem.IsFinished = true;
-                        CurPkgItem.Package = new()
+                        CurPkgItem.Package = IsManually ? new()
+                        {
+                            AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
+                            AUTH_PROD = CurPosition.CurLine.LINE_CODE,
+                            SN = pInput.PkgSN,
+                            PKG_TYPE = dtl.PkgType.PKG_NAME,
+                            ITEM_CODE = CurPkgItem.Items.First().Package.ITEM_CODE,
+                            QTY = CurPkgItem.Items.Sum(q => q.Package.QTY),
+                            UNIT = dtl.PkgType.PKG_NAME,
+                            WORK_ORDER = CurPkgItem.Items.First().Package.WORK_ORDER,
+                            BATCH_NO = CurPkgItem.Items.First().Package.BATCH_NO,
+                            ROT_CODE = CurPkgItem.Items.First().Package.ROT_CODE,
+                            NODE_ID = CurPkgItem.Items.First().Package.NODE_ID,
+                            NODE_NAME = CurPkgItem.Items.First().Package.NODE_NAME,
+                            FTY_CODE = CurPkgItem.Items.First().Package.FTY_CODE,
+                            WS_CODE = CurPkgItem.Items.First().Package.WS_CODE,
+                            LINE_CODE = CurPkgItem.Items.First().Package.LINE_CODE,
+                            POST_CODE = CurPkgItem.Items.First().Package.POST_CODE,
+                            OPER_CODE = CurPkgItem.Items.First().Package.OPER_CODE,
+                            SEGMENT = CurPkgItem.Items.First().Package.SEGMENT,
+                        } : new()
                         {
                             AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
                             AUTH_PROD = CurPosition.CurLine.LINE_CODE,
@@ -716,6 +752,27 @@
             return list;
         }
 
+        public List<MES_WIP_PKG> GetMinPackageList(WipPkgItem parent)
+        {
+            List<MES_WIP_PKG> list = new();
+            if (parent.Items.Any())
+            {
+	            foreach (var item in parent.Items)
+	            {
+	                item.Package.PARENT_SN = parent.Package?.SN;
+	                list.AddRange(GetMinPackageList(item));
+	            }
+            } 
+            else
+            {
+                if (!parent.Package.IsNullOrEmpty())
+                {
+                    list.Add(parent.Package);
+                }
+            }
+            return list;
+        }
+
         public ApiAction<SubmitOutput> CompletePkg()
         {
             var action = new ApiAction<SubmitOutput>(new SubmitOutput());
@@ -761,6 +818,7 @@
                 var wipActs = new List<MES_WIP_ACT>();
                 foreach (var wipSn in CurPosition.CurWipSNs)
                 {
+
                     var wipAct = new MES_WIP_ACT()
                     {
                         AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
@@ -795,6 +853,7 @@
                         ACT_TYPE = NodeAct.ACT_TYPE,
                         ACT_SN = wipSn.SN,
                         ACT_RESULT = "Y",
+                        ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(),
                         TRACE_INFO = $"浜у搧鏉$爜[{string.Join("锛�", CurPosition.CurSN)}]鍖呰瀹屾垚",
                     };
                     wipActs.Add(wipAct);
@@ -821,13 +880,27 @@
                                 .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.SN == pkg.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.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.ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID && q.ACT_ID == NodeAct.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.SN == pkg.SN)
+                                .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID)
                                 .ExecuteCommand();
                         }
                     }
@@ -835,36 +908,56 @@
             }
             else
             {
-                var _pkgList = CurPkg.IsFinished ? GetPackageList(CurPkg.Item) : new();
-                //淇濆瓨鏁版嵁
-                var db = Biz.Db;
-                var dbTran = db.UseTran(() =>
+                if (CurPkg.IsFinished)
                 {
-                    if (_pkgList.Any())
-                    {
-                        db.Storageable(_pkgList, CurPosition.UserCode).ExecuteCommand();
-                        foreach (var pkg in _pkgList)
-                        {
-                            //鍖呰淇℃伅淇濆瓨鍒板湪鍒跺搧淇℃伅琛�
-                            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.SN == pkg.SN)
-                                .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.SN == pkg.SN)
-                                .ExecuteCommand();
-                        }
-                    }
-                });
-                if (!dbTran.IsSuccess)
-                {
-                    //鎶涘嚭寮傚父
-                    throw dbTran.ErrorException;
+	                var _pkgList = GetPackageList(CurPkg.Item);
+	               
+	                //鏈�澶栧眰鍖呰宸茬粡瀹屾垚鍖呰锛屽垯鎶婂伐搴忎腑鏆傚瓨鏍囪璁句负false锛岀粺涓�鎻愪氦鍖呰鍐呬骇鍝佺殑杩囩珯璁板綍
+	                CurPosition.NeedTemporaryStoreDBCommitAction = false;
+	                //淇濆瓨鏁版嵁
+	                CurPosition.SaveStepsCommitActionToDB(() =>
+	                {
+	                    var db = CurPosition.GetCommitDB();
+	                    if (_pkgList.Any())
+	                    {
+	                        db.Storageable(_pkgList, CurPosition.UserCode).ExecuteCommand();
+	                        foreach (var pkg in _pkgList)
+	                        {
+	                            //鍖呰淇℃伅淇濆瓨鍒板湪鍒跺搧淇℃伅琛�
+	                            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.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.ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID && q.ACT_ID == NodeAct.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();
+	                        }
+	                    }
+	                });
+	                //濡傛灉褰撳墠鏉$爜宸茬粡瀹屽伐锛屾鏌ュ綋鍓嶅伐鍗曟壒娆″拰宸ュ崟鏄惁瀹屽伐
+	                if (CurPkg.IsReachedEndNode)
+	                {
+	                    CurPosition.WorkBatch.CheckIsComplete(CurPosition.UserCode);
+	                }
                 }
             }
 

--
Gitblit v1.9.3