From a7496b3785a33c14079b859c88b91a537c454cd5 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期二, 06 八月 2024 20:03:49 +0800
Subject: [PATCH] 增加不良记录的保存

---
 Tiger.Business/DbCache/CodeRuleCache.cs       |   14 ++++
 Tiger.Api/Language.db                         |    0 
 Tiger.Business.MES/Transaction/CollectNode.cs |   39 +++++++++++++
 Tiger.Business.MES/Transaction/PackingNode.cs |   39 +++++++++++++
 Tiger.Business.MES/Transaction/Position.cs    |    6 +
 Tiger.Business/MES/Biz.WorkBatch.cs           |    1 
 Tiger.IBusiness/MES/IWorkBatch.cs             |    1 
 Tiger.Business.MES/Transaction/TestNode.cs    |   39 +++++++++++++
 8 files changed, 136 insertions(+), 3 deletions(-)

diff --git a/Tiger.Api/Language.db b/Tiger.Api/Language.db
index 64f8461..cc2a817 100644
--- a/Tiger.Api/Language.db
+++ b/Tiger.Api/Language.db
Binary files differ
diff --git a/Tiger.Business.MES/Transaction/CollectNode.cs b/Tiger.Business.MES/Transaction/CollectNode.cs
index 9954d76..0172f0e 100644
--- a/Tiger.Business.MES/Transaction/CollectNode.cs
+++ b/Tiger.Business.MES/Transaction/CollectNode.cs
@@ -273,6 +273,40 @@
                             wipSN.DFT_FLAG = "Y";
                             wipSN.DFT_COUNT++;
                             wipSN.DFT_CODE = input.DFT_CODE;
+                            var dft = CurBatch.Defects.FirstOrDefault(q => q.DFT_CODE == wipSN.DFT_CODE);
+                            var defect = new MES_WIP_DFT()
+                            {
+                                AUTH_ORG = wipSN.AUTH_ORG,
+                                AUTH_PROD = wipSN.LINE_CODE,
+                                SN = wipSN.SN,
+                                STATUS = MES_WIP_DFT.STATUSs.WaitHandle.GetValue(),
+                                ITEM_CODE = wipSN.ITEM_CODE,
+                                WORK_ORDER = wipSN.WORK_ORDER,
+                                BATCH_NO = wipSN.BATCH_NO,
+                                ROT_CODE = wipSN.ROT_CODE,
+                                NODE_ID = wipSN.NODE_ID,
+                                NODE_NAME = wipSN.NODE_NAME,
+                                FTY_CODE = wipSN.FTY_CODE,
+                                WS_CODE = wipSN.WS_CODE,
+                                LINE_CODE = wipSN.LINE_CODE,
+                                POST_CODE = wipSN.POST_CODE,
+                                OPER_CODE = wipSN.OPER_CODE,
+                                SEGMENT = wipSN.SEGMENT,
+                                DFT_CODE = dft.DFT_CODE,
+                                DFT_NAME = dft.DFT_NAME,
+                                DFT_LEVEL = dft.DFT_LEVEL,
+                                TRAY_SN = wipSN.TRAY_SN,
+                                CONTAINER_SN = wipSN.CONTAINER_SN,
+                                PALLET_SN = wipSN.PALLET_SN,
+                                INV_FLAG = wipSN.INV_FLAG,
+                                OPERATION_TIME = DateTime.Now,
+                                SFTS_CODE = wipSN.SFTS_CODE,
+                                SFT_CODE = wipSN.SFT_CODE,
+                                PRD_CODE = wipSN.PRD_CODE,
+                                OBA_BATCH = wipSN.OBA_BATCH,
+                                LOCK_BATCH = wipSN.LOCK_BATCH,
+                            };
+                            CurDefects.Add(defect);
                         }
                     }
 
@@ -299,6 +333,11 @@
                             db.Storageable(woSNs, UserCode).ExecuteCommand();
                             db.Storageable(wipSNs, UserCode).ExecuteCommand();
                             db.Storageable(CurWipSNHiss, UserCode).ExecuteCommand();
+                            //濡傛灉鏈変笉鑹垯淇濆瓨
+                            if (CurDefects.Any())
+                            {
+                                db.Storageable(CurDefects, UserCode).ExecuteCommand();
+                            }
                             //濡傛灉鏄姇鍏ョ珯
                             if (curNode.IS_INPUT == "Y")
                             {
diff --git a/Tiger.Business.MES/Transaction/PackingNode.cs b/Tiger.Business.MES/Transaction/PackingNode.cs
index 1d3f193..1ba8aed 100644
--- a/Tiger.Business.MES/Transaction/PackingNode.cs
+++ b/Tiger.Business.MES/Transaction/PackingNode.cs
@@ -304,6 +304,40 @@
                             wipSN.DFT_FLAG = "Y";
                             wipSN.DFT_COUNT++;
                             wipSN.DFT_CODE = input.DFT_CODE;
+                            var dft = CurBatch.Defects.FirstOrDefault(q => q.DFT_CODE == wipSN.DFT_CODE);
+                            var defect = new MES_WIP_DFT()
+                            {
+                                AUTH_ORG = wipSN.AUTH_ORG,
+                                AUTH_PROD = wipSN.LINE_CODE,
+                                SN = wipSN.SN,
+                                STATUS = MES_WIP_DFT.STATUSs.WaitHandle.GetValue(),
+                                ITEM_CODE = wipSN.ITEM_CODE,
+                                WORK_ORDER = wipSN.WORK_ORDER,
+                                BATCH_NO = wipSN.BATCH_NO,
+                                ROT_CODE = wipSN.ROT_CODE,
+                                NODE_ID = wipSN.NODE_ID,
+                                NODE_NAME = wipSN.NODE_NAME,
+                                FTY_CODE = wipSN.FTY_CODE,
+                                WS_CODE = wipSN.WS_CODE,
+                                LINE_CODE = wipSN.LINE_CODE,
+                                POST_CODE = wipSN.POST_CODE,
+                                OPER_CODE = wipSN.OPER_CODE,
+                                SEGMENT = wipSN.SEGMENT,
+                                DFT_CODE = dft.DFT_CODE,
+                                DFT_NAME = dft.DFT_NAME,
+                                DFT_LEVEL = dft.DFT_LEVEL,
+                                TRAY_SN = wipSN.TRAY_SN,
+                                CONTAINER_SN = wipSN.CONTAINER_SN,
+                                PALLET_SN = wipSN.PALLET_SN,
+                                INV_FLAG = wipSN.INV_FLAG,
+                                OPERATION_TIME = DateTime.Now,
+                                SFTS_CODE = wipSN.SFTS_CODE,
+                                SFT_CODE = wipSN.SFT_CODE,
+                                PRD_CODE = wipSN.PRD_CODE,
+                                OBA_BATCH = wipSN.OBA_BATCH,
+                                LOCK_BATCH = wipSN.LOCK_BATCH,
+                            };
+                            CurDefects.Add(defect);
                         }
                     }
 
@@ -330,6 +364,11 @@
 	                        db.Storageable(woSNs, UserCode).ExecuteCommand();
 	                        db.Storageable(wipSNs, UserCode).ExecuteCommand();
 	                        db.Storageable(CurWipSNHiss, UserCode).ExecuteCommand();
+                            //濡傛灉鏈変笉鑹垯淇濆瓨
+                            if (CurDefects.Any())
+                            {
+                                db.Storageable(CurDefects, UserCode).ExecuteCommand();
+                            }
                             //濡傛灉鏄姇鍏ョ珯
                             if (curNode.IS_INPUT == "Y")
                             {
diff --git a/Tiger.Business.MES/Transaction/Position.cs b/Tiger.Business.MES/Transaction/Position.cs
index d875020..483e3c8 100644
--- a/Tiger.Business.MES/Transaction/Position.cs
+++ b/Tiger.Business.MES/Transaction/Position.cs
@@ -58,6 +58,7 @@
         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 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; }
@@ -175,9 +176,10 @@
         public virtual void ResetNode()
         {
             Steps.Clear();
-            CurWipSNs = new();
-            CurWipSNHiss = new();
+            CurWipSNs.Clear();
+            CurWipSNHiss.Clear();
             CurStep = null;
+            CurDefects.Clear();
         }
 
         /// <summary>
diff --git a/Tiger.Business.MES/Transaction/TestNode.cs b/Tiger.Business.MES/Transaction/TestNode.cs
index e44b3a3..b7a3c03 100644
--- a/Tiger.Business.MES/Transaction/TestNode.cs
+++ b/Tiger.Business.MES/Transaction/TestNode.cs
@@ -274,6 +274,40 @@
                             wipSN.DFT_FLAG = "Y";
                             wipSN.DFT_COUNT++;
                             wipSN.DFT_CODE = input.DFT_CODE;
+                            var dft = CurBatch.Defects.FirstOrDefault(q => q.DFT_CODE == wipSN.DFT_CODE);
+                            var defect = new MES_WIP_DFT()
+                            {
+                                AUTH_ORG = wipSN.AUTH_ORG,
+                                AUTH_PROD = wipSN.LINE_CODE,
+                                SN = wipSN.SN,
+                                STATUS = MES_WIP_DFT.STATUSs.WaitHandle.GetValue(),
+                                ITEM_CODE = wipSN.ITEM_CODE,
+                                WORK_ORDER = wipSN.WORK_ORDER,
+                                BATCH_NO = wipSN.BATCH_NO,
+                                ROT_CODE = wipSN.ROT_CODE,
+                                NODE_ID = wipSN.NODE_ID,
+                                NODE_NAME = wipSN.NODE_NAME,
+                                FTY_CODE = wipSN.FTY_CODE,
+                                WS_CODE = wipSN.WS_CODE,
+                                LINE_CODE = wipSN.LINE_CODE,
+                                POST_CODE = wipSN.POST_CODE,
+                                OPER_CODE = wipSN.OPER_CODE,
+                                SEGMENT = wipSN.SEGMENT,
+                                DFT_CODE = dft.DFT_CODE,
+                                DFT_NAME = dft.DFT_NAME,
+                                DFT_LEVEL = dft.DFT_LEVEL,
+                                TRAY_SN = wipSN.TRAY_SN,
+                                CONTAINER_SN = wipSN.CONTAINER_SN,
+                                PALLET_SN = wipSN.PALLET_SN,
+                                INV_FLAG = wipSN.INV_FLAG,
+                                OPERATION_TIME = DateTime.Now,
+                                SFTS_CODE = wipSN.SFTS_CODE,
+                                SFT_CODE = wipSN.SFT_CODE,
+                                PRD_CODE = wipSN.PRD_CODE,
+                                OBA_BATCH = wipSN.OBA_BATCH,
+                                LOCK_BATCH = wipSN.LOCK_BATCH,
+                            };
+                            CurDefects.Add(defect);
                         }
                     }
 
@@ -300,6 +334,11 @@
                             db.Storageable(woSNs, UserCode).ExecuteCommand();
                             db.Storageable(wipSNs, UserCode).ExecuteCommand();
                             db.Storageable(CurWipSNHiss, UserCode).ExecuteCommand();
+                            //濡傛灉鏈変笉鑹垯淇濆瓨
+                            if (CurDefects.Any())
+                            {
+                                db.Storageable(CurDefects, UserCode).ExecuteCommand();
+                            }
                             //濡傛灉鏄姇鍏ョ珯
                             if (curNode.IS_INPUT == "Y")
                             {
diff --git a/Tiger.Business/DbCache/CodeRuleCache.cs b/Tiger.Business/DbCache/CodeRuleCache.cs
index 4ee42d4..ca64461 100644
--- a/Tiger.Business/DbCache/CodeRuleCache.cs
+++ b/Tiger.Business/DbCache/CodeRuleCache.cs
@@ -4,6 +4,7 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
+using System.Data;
 using System.Data.Entity;
 using System.Linq;
 using System.Text;
@@ -374,10 +375,21 @@
                     his.RULE_ID = rule.ID;
                     his.GEN_CODE = string.Concat(rule.Details.OrderBy(q => q.RULE_SEQ).Select(q => q.CodeValue));
                     his.GEN_DATE = DateTime.Now;
-                    Biz.Db.Insertable(his).ExecuteCommand();
+                    try
+                    {
+                    	Biz.Db.Insertable(his).ExecuteCommand();
+                    }
+                    catch (System.Exception ex)
+                    {
+                        throw new DataException(his.GEN_CODE, ex);
+                    }
                     result.Data = his.GEN_CODE;
                 }
             }
+            catch (DataException ex)
+            {
+                result.CatchExceptionWithLog(ex.InnerException, Biz.L("BAS.CodeRule.GenerateSnHisException", ruleCode, ex.Message));
+            }
             catch (System.Exception ex)
             {
                 result.CatchExceptionWithLog(ex, Biz.L("BAS.CodeRule.GenerateException", ruleCode, string.Join(", ", args)));
diff --git a/Tiger.Business/MES/Biz.WorkBatch.cs b/Tiger.Business/MES/Biz.WorkBatch.cs
index c4445af..77a846b 100644
--- a/Tiger.Business/MES/Biz.WorkBatch.cs
+++ b/Tiger.Business/MES/Biz.WorkBatch.cs
@@ -41,6 +41,7 @@
             public List<MES_WO_NODE_POST> NodePosts { get; set; }
             public List<MES_WO_NODE_DFTG> NodeDftgs { get; set; }
             public List<BAS_DEFECT_GRP> DefectGroups { get; set; }
+            public List<BAS_DEFECT> Defects => DefectGroups.SelectMany(q => q.Defects).ToList();
             /// <summary>
             /// 浜嬪姟閿�
             /// </summary>
diff --git a/Tiger.IBusiness/MES/IWorkBatch.cs b/Tiger.IBusiness/MES/IWorkBatch.cs
index bd0d05f..7db63f6 100644
--- a/Tiger.IBusiness/MES/IWorkBatch.cs
+++ b/Tiger.IBusiness/MES/IWorkBatch.cs
@@ -25,6 +25,7 @@
         public List<MES_WO_NODE_POST> NodePosts { get; set; }
         public List<MES_WO_NODE_DFTG> NodeDftgs { get; set; }
         public List<BAS_DEFECT_GRP> DefectGroups { get; set; }
+        public List<BAS_DEFECT> Defects { get; }
 
         /// <summary>
         /// 宸ュ崟寮�宸�

--
Gitblit v1.9.3