From 94f78e8c3fa502bc52eba2b88d45d5813609036c Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期五, 13 九月 2024 10:26:48 +0800
Subject: [PATCH] 优化工单缓存对象更新逻辑

---
 Tiger.Business.MES/Transaction/Position.cs |   94 ++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 77 insertions(+), 17 deletions(-)

diff --git a/Tiger.Business.MES/Transaction/Position.cs b/Tiger.Business.MES/Transaction/Position.cs
index 720f86b..bf6a941 100644
--- a/Tiger.Business.MES/Transaction/Position.cs
+++ b/Tiger.Business.MES/Transaction/Position.cs
@@ -56,14 +56,14 @@
         public WorkBatch CurBatch { get; set; }
         public IWorkBatch WorkBatch => CurBatch;
         public List<MES_WIP_DATA> CurWipSNs { get; set; } = new();
-        public string CurSN => CurWipSNs.Any() ? (CurWipSNs.First().TRAY_SN.IsNullOrEmpty() ? CurWipSNs.First().SN : CurWipSNs.First().TRAY_SN) : "";
+        public string CurSN => (CurWipSNs.Any() ? (CurWipSNs.First().TRAY_SN.IsNullOrEmpty() ? CurWipSNs.First().SN : CurWipSNs.First().TRAY_SN) : "");
         public List<MES_WIP_HIS> CurWipSNHiss { get; set; } = new();
         public List<MES_WIP_DFT> CurDefects { get; set; } = new();
         public Dictionary<string, object> Context { get; set; } = new();
         public List<WorkStep> Steps { get; set; } = new();
         public WorkStep CurStep { get; set; }
         public List<WorkStep> NextSteps { get; set; } = new();
-        public bool IsFinishNodeSteps => !Steps.Any(q => q.Type == IWorkStep.Types.Node && !q.IsFinished);
+        public bool IsFinishNodeSteps => !Steps.Any(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished);
         public bool IsFinishAllSteps => !Steps.Any() || !Steps.Any(q => !q.IsFinished);
         //public int CurStep => Steps.Where(q => !q.IsFinished).OrderBy(q => q.Sequence).FirstOrDefault()?.Sequence ?? 0;
         private DbClient CommitDB;
@@ -71,8 +71,10 @@
         /// 鏄惁闇�瑕佷复鏃跺瓨鍌ㄦ暟鎹簱鎻愪氦鎿嶄綔锛屽緟闇�瑕佺殑鏃跺�欏啀鎻愪氦
         /// </summary>
         public bool NeedTemporaryStoreDBCommitAction { get; set; } = false;
-        protected List<Action> DBCommitList { get; set; } = new();
-
+        protected Dictionary<string, List<Action>> DBCommitList { get; set; } = new();
+        protected List<Position> NodeCommitList { get; set; } = new();
+        protected Dictionary<string, OperInfo> OperInfoDic { get; set; } = new();
+        //protected OperInfo CurOperInfo { get; set; }
         #endregion Propertys & Variables
 
         #region Functions
@@ -120,10 +122,22 @@
                         action.LocaleMsg = new("MES.Transaction.Position.SelectOrder.LineException", input.OrderNo, CurLine.LINE_CODE);
                         return action;
                     }
+                    if (batch.STATUS != BIZ_MES_WO_BATCH.STATUSs.Release.GetValue() && batch.STATUS != BIZ_MES_WO_BATCH.STATUSs.Working.GetValue())
+                    {
+                        action.IsSuccessed = false;
+                        //action.LocaleMsg = new($"宸ュ崟[{input.OrderNo}]鐘舵�乕{wo.STATUS.GetEnum<BIZ_MES_WO_BATCH.STATUSs>().GetName()}]涓嶈兘鐢熶骇");
+                        action.LocaleMsg = new("MES.Transaction.Position.SelectOrder.StatusException", input.OrderNo, batch.STATUS.GetEnum<BIZ_MES_WO_BATCH.STATUSs>().GetName());
+                        return action;
+                    }
                     var wb = new WorkBatch(input.OrderNo).Init(CurLine.LINE_CODE);
                     WoContext.WoBatchDic.Add(wb.Batch.BATCH_NO, wb);
                 }
                 CurBatch = WoContext.GetBatch(input.OrderNo, CurLine.LINE_CODE);
+                if (!OperInfoDic.ContainsKey(CurBatch.Batch.BATCH_NO))
+                {
+                    OperInfoDic.Add(CurBatch.Batch.BATCH_NO, new());
+                }
+                
                 action.Data = new { WorkOrder = CurBatch.WO, Bacth = CurBatch.Batch };
             }
             catch (Exception ex)
@@ -183,6 +197,26 @@
         }
 
         /// <summary>
+        /// 璁剧疆褰撳墠鏉$爜鐨勫伐搴忎俊鎭�
+        /// </summary>
+        public OperInfo SetOperNodeInfo(OperInfo info, string locale)
+        {
+            if (CurWipSNs.Any())
+            {
+                info.CurNode = CurWipSNs.First().NODE_NAME;
+                info.NextNode = string.Join(",", CurBatch.GetNextNodes(CurWipSNs.First()).Select(q => q.NODE_NAME));
+                info.StepsInfo = Steps.Select(q => q.GetInfo(locale)).ToList();
+            }
+            else
+            {
+                info.CurNode = "   鈥�   ";
+                info.NextNode = "   鈥�   ";
+                info.StepsInfo = new();
+            }
+            return info;
+        }
+
+        /// <summary>
         /// 鐢熸垚浼犲叆宸ユ鍚庣画鐨勮涓哄埌宸ユ鍒楄〃
         /// </summary>
         /// <param name="parent"></param>
@@ -224,12 +258,14 @@
                 }
                 else
                 {
-                    var next = new WorkStep(IWorkStep.Types.Action, this)
+                    var next = new WorkStep(IWorkStep.NodeTypes.Action, this)
                     {
+                        Name = act.ACT_NAME,
                         Sequence = parent.Sequence + 1,
                         Node = parent.Node,
+                        OperSetting = CurBatch.NodeSets.FirstOrDefault(q => q.NODE_ID == parent.Node.ID),
                         NodeAct = act,
-                        Setting = CurBatch.ActionSets.FirstOrDefault(q => q.ACT_ID == act.ID),
+                        ActSetting = CurBatch.ActionSets.FirstOrDefault(q => q.ACT_ID == act.ID),
                     };
                     next.Init();
                     next.PrepNodeIDs.Add(parent.NodeID);
@@ -335,10 +371,12 @@
         protected void SaveStepsCommitActionToDB()
         {
             //淇濆瓨宸ユ鐨勬暟鎹簱鎻愪氦鎿嶄綔鍒版彁浜ゆ搷浣滃垪琛�
+            var commitList = new List<Action>();
             foreach (var step in Steps.OrderBy(q => q.Sequence))
             {
-                DBCommitList.Add(step.DBSubmitAction);
+                commitList.Add(step.DBSubmitAction);
             }
+            DBCommitList.Add(CurSN, commitList);
             //濡傛灉涓嶉渶瑕佷复鏃跺瓨鍌ㄦ暟鎹簱鎻愪氦鎿嶄綔锛屽垯鎶婃彁浜ゆ搷浣滃垪琛ㄦ彁浜ゅ埌鏁版嵁搴�
             if (!NeedTemporaryStoreDBCommitAction)
             {
@@ -346,15 +384,18 @@
                 NeedTemporaryStoreDBCommitAction = false;
 
                 var dbTran = GetCommitDB().UseTran(() =>
-	            {
-	                //鍦ㄥ悓涓�涓簨鍔′腑淇濆瓨鎵�鏈夊伐姝ョ殑鏁版嵁
-	                foreach (var action in DBCommitList)
-	                {
-                        action.Invoke();
-	                }
-	            });
-	            if (dbTran.IsSuccess)
-	            {
+                {
+                    //鍦ㄥ悓涓�涓簨鍔′腑淇濆瓨鎵�鏈夊伐姝ョ殑鏁版嵁
+                    foreach (var wipSn in DBCommitList.Keys)
+                    {
+                        foreach (var action in DBCommitList[wipSn])
+                        {
+                            action.Invoke();
+                        }
+                    }
+                });
+                if (dbTran.IsSuccess)
+                {
                     //淇濆瓨鎴愬姛鍒欐竻绌烘彁浜ゆ搷浣滃垪琛�
                     DBCommitList.Clear();
                 }
@@ -363,6 +404,23 @@
                     //鎶涘嚭寮傚父
                     throw dbTran.ErrorException;
                 }
+            }
+        }
+
+        protected void DoSaveToDB()
+        {
+            var dbTran = GetCommitDB().UseTran(() =>
+            {
+                //鍦ㄥ悓涓�涓簨鍔′腑淇濆瓨鎵�鏈夊伐姝ョ殑鏁版嵁
+                foreach (var step in Steps.OrderBy(q => q.Sequence))
+                {
+                    step.DBSubmitAction.Invoke();
+                }
+            });
+            if (!dbTran.IsSuccess)
+            {
+                //鎶涘嚭寮傚父
+                throw dbTran.ErrorException;
             }
         }
 
@@ -457,7 +515,9 @@
                             switch (pv.VAR_METHOD)
                             {
                                 case "GetCartonGenerate":
-                                    return Biz.CodeRule[lv.BARCODE_RULE].Generate($"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString();
+                                    return Biz.CodeRule[lv.BARCODE_RULE ?? ""]?.Generate($"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString() ?? "";
+                                case "GetHW21SNGenerate":
+                                    return Biz.CodeRule[lv.BARCODE_RULE ?? ""]?.Generate("SN:","05").Data.ToString() ?? "";
                                 default:
                                     return "";
                             }

--
Gitblit v1.9.3