From 9fe67118a220448d5d9647733d6c8308f069e4da Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期日, 13 十月 2024 16:05:23 +0800
Subject: [PATCH] 增加工艺路线必须要有结束节点,及其流程相应优化 增加工单批次自动关单 增加判断条码是未投入生产还是已经完工产出

---
 Tiger.Business.MES/Common/WorkBatch.cs |   66 ++++++++++++++++++++++++++++----
 1 files changed, 57 insertions(+), 9 deletions(-)

diff --git a/Tiger.Business.MES/Common/WorkBatch.cs b/Tiger.Business.MES/Common/WorkBatch.cs
index cbfdad6..214a269 100644
--- a/Tiger.Business.MES/Common/WorkBatch.cs
+++ b/Tiger.Business.MES/Common/WorkBatch.cs
@@ -62,20 +62,26 @@
 
         public void Update()
         {
-            WO = Biz.Db.Queryable<BIZ_MES_WO>().Where(q => q.ORDER_NO == OrderNo).IncludesAllFirstLayer().First();
-            Batch = Biz.Db.Queryable<BIZ_MES_WO_BATCH>().Where(q => q.BATCH_NO == Batch.BATCH_NO).First();
-            if (WoContext.WoBatchDic.ContainsKey(Batch.BATCH_NO))
+            var wo = Biz.Db.Queryable<BIZ_MES_WO>().Where(q => q.ORDER_NO == OrderNo).IncludesAllFirstLayer().First();
+            var batch = Biz.Db.Queryable<BIZ_MES_WO_BATCH>().Where(q => q.BATCH_NO == Batch.BATCH_NO).First();
+            if (WoContext.WoBatchDic.ContainsKey(batch.BATCH_NO))
             {
-                if (WO.STATUS > BIZ_MES_WO.STATUSs.Working.GetValue() || Batch.STATUS > BIZ_MES_WO_BATCH.STATUSs.Working.GetValue())
+                if (wo.STATUS > BIZ_MES_WO.STATUSs.Working.GetValue() || batch.STATUS > BIZ_MES_WO_BATCH.STATUSs.Working.GetValue())
                 {
                     WoContext.WoBatchDic.Remove(Batch.BATCH_NO);
+                }
+                else if(wo.UPDATE_TIME > WO.UPDATE_TIME || batch.UPDATE_TIME > Batch.UPDATE_TIME)
+                {
+                    GetBatchInfo();
                 }
             }
             else
             {
                 GetBatchInfo();
-                WoContext.WoBatchDic.Add(Batch.BATCH_NO, this);
+                WoContext.WoBatchDic.Add(batch.BATCH_NO, this);
             }
+            WO = wo;
+            Batch = batch;
         }
 
         private void GetBatchInfo()
@@ -99,7 +105,7 @@
         }
 
         /// <summary>
-        /// 娣诲姞鑺傜偣鐨勪笅涓�涓涓哄埌宸ユ鍒楄〃
+        /// 閫掑綊閬嶅巻宸ュ簭鑺傜偣锛岀粰涓嬬骇宸ュ簭鑺傜偣鎺掑簭鍜屾暣鐞嗗墠缃伐搴�
         /// </summary>
         /// <param name="parent"></param>
         private void NodeSorting(MES_WO_NODE parent)
@@ -231,6 +237,48 @@
         }
 
         /// <summary>
+        /// 妫�鏌ュ伐鍗曟槸鍚﹀畬宸ワ紝宸插畬宸ュ垯淇敼鐩稿簲鐘舵�佸苟璁板綍鍒版暟鎹簱
+        /// </summary>
+        /// <param name="user"></param>
+        /// <returns></returns>
+        public async Task<bool> CheckIsComplete(string user)
+        {
+            var woSNs = Biz.Db.Queryable<BIZ_MES_WO_SN>().Where(q => q.WORK_ORDER == OrderNo).ToList();
+
+            //鍒ゆ柇褰撳墠宸ュ崟鎵规鏄惁宸插畬宸�
+            if (!woSNs.Any(q => q.BATCH_NO == Batch.BATCH_NO && q.STATUS < BIZ_MES_WO_SN.STATUSs.Finished.GetValue()) && 
+                 woSNs.Count(q => q.BATCH_NO == Batch.BATCH_NO && q.STATUS == BIZ_MES_WO_SN.STATUSs.Finished.GetValue()) == Batch.PLAN_QTY)
+            {
+                Batch.STATUS = BIZ_MES_WO_BATCH.STATUSs.Closed.GetValue();
+                Batch.ACT_END_TIME = DateTime.Now;
+            }
+
+            //鍒ゆ柇褰撳墠宸ュ崟鏄惁宸插畬宸�
+            if (!woSNs.Any(q => q.STATUS < BIZ_MES_WO_SN.STATUSs.Finished.GetValue()) && 
+                 woSNs.Count(q => q.STATUS == BIZ_MES_WO_SN.STATUSs.Finished.GetValue()) == WO.PLAN_QTY)
+            {
+                WO.STATUS = BIZ_MES_WO.STATUSs.Closed.GetValue();
+                WO.ACT_END_TIME = DateTime.Now;
+            }
+
+            //淇濆瓨鏁版嵁搴�
+            var db = Biz.Db;
+            var dbTran = db.UseTran(() =>
+            {
+                db.Updateable(WO, user).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.ACT_END_TIME }).ExecuteCommand();
+                db.Updateable(Batch, user).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.ACT_END_TIME }).ExecuteCommand();
+            });
+            if (!dbTran.IsSuccess)
+            {
+                //throw dbTran.ErrorException;
+                Logger.Default.Fatal(dbTran.ErrorException, $"妫�鏌ュ伐鍗曟壒娆{Batch.BATCH_NO}]鏄惁瀹屽伐寮傚父");
+                return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
         /// 鏍规嵁宀椾綅缂栫爜鍒ゆ柇鏄笉鏄绔�
         /// </summary>
         /// <param name="postCode"></param>
@@ -346,7 +394,7 @@
                     }
 
                     //濡傛灉褰撳墠宸ュ簭鏈夊繀椤绘墽琛岀殑鍚庣画宸ュ簭锛屽垯鎶ラ敊
-                    if (nextNodes.Any(q => NodeSets.Any(s => s.NODE_ID == q.ID && s.IS_ACTIVE == "Y" && s.CAN_SKIP != "Y")))
+                    if (nextNodes.Any(q => q.OPER_CODE != "EndNode" && NodeSets.Any(s => s.NODE_ID == q.ID && s.IS_ACTIVE == "Y" && s.CAN_SKIP != "Y")))
                     {
                         action.IsSuccessed = false;
                         action.Data.SetValue(this, null);
@@ -391,7 +439,7 @@
         }
 
         /// <summary>
-        /// 娣诲姞鑺傜偣鐨勪笅涓�涓彲鎵ц鑺傜偣
+        /// 鑾峰彇鑺傜偣鐨勪笅涓�涓彲鎵ц鑺傜偣锛堟帓闄ゆ湁鍓嶇疆宸ュ簭鏈畬鎴愮殑鑺傜偣锛�
         /// </summary>
         /// <param name="parent"></param>
         /// <param name="wipSN">褰撳墠鐨勬潯鐮佽繃绔欒褰曪紝闇�瑕佸鑸煡璇㈢敓浜ц繃绋嬭褰曚俊鎭�</param>
@@ -426,7 +474,7 @@
         }
 
         /// <summary>
-        /// 鏍规嵁浼犲叆鐨勬潯鐮佽繑鍥炰笅涓�绔欏彲杩涘叆杩涘叆鐨勭洰鏍囧伐搴�
+        /// 鏍规嵁浼犲叆鐨勬潯鐮佽繑鍥炰笅涓�绔欏彲杩涘叆鐨勭洰鏍囧伐搴�
         /// </summary>
         /// <param name="wipSN">褰撳墠鐨勬潯鐮佽繃绔欒褰曪紝闇�瑕佸鑸煡璇㈢敓浜ц繃绋嬭褰曞拰鐢熶骇涓嶈壇璁板綍淇℃伅</param>
         /// <returns></returns>

--
Gitblit v1.9.3