From 922bb885bfaf59610dae78e6ede5f53f21984833 Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期三, 13 十一月 2024 09:56:16 +0800 Subject: [PATCH] 所有工序增加产品被判断不良后下线 --- Tiger.Business.MES/Transaction/YadaPacking.cs | 79 +++++++++++++ Tiger.Business.MES/Transaction/CollectNode.cs | 79 +++++++++++++ Tiger.Business.MES/Transaction/PackingNode.cs | 79 +++++++++++++ Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN.cs | 71 +++++------ 4 files changed, 269 insertions(+), 39 deletions(-) diff --git a/Tiger.Business.MES/Transaction/CollectNode.cs b/Tiger.Business.MES/Transaction/CollectNode.cs index 30f4805..8f0a3fa 100644 --- a/Tiger.Business.MES/Transaction/CollectNode.cs +++ b/Tiger.Business.MES/Transaction/CollectNode.cs @@ -425,8 +425,16 @@ OBA_BATCH = wipSN.OBA_BATCH, LOCK_BATCH = wipSN.LOCK_BATCH, }; + wipSN.Defects.Add(defect); CurDefects.Add(defect); } + } + + //浜у搧琚垽鏂笉鑹悗涓嬬嚎锛屽苟浠庡伐鍗曚腑绉婚櫎姝e湪鐢熶骇鐨勬潯鐮� + if (CurDefects.Any() && curNodeSetting.IF_DFT_OFFLINE == "Y") + { + woStatus.Data.ShortMsg = new("浜у搧涓嬬嚎", ShortMessage.Types.Error); + return OfflineIfDefect(action, wipSNs, input.Locale); } //宸ュ崟寮�宸� @@ -634,7 +642,7 @@ SaveStepsCommitActionToDB(endAction); //淇濆瓨鎴愬姛锛岃繑鍥炶繃绔欐秷鎭� - CurOperInfo(locale).InputQty += CurWipSNs.Count; + operInfo.InputQty += CurWipSNs.Count; action.Data.OperInfo = operInfo; action.Data.ShortMsg = new(CurWipSNs.Any(q => q.DFT_FLAG == "Y") ? "涓嶈壇杩囩珯" : "鑹搧杩囩珯", ShortMessage.Types.Success); //action.LocaleMsg = new($"宸ュ崟[{CurWipSN.WORK_ORDER}]鐨勬潯鐮乕{CurWipSN.SN}]鍦ㄥ矖浣峓{CurWipSN.POST_CODE}]宸ュ簭[{CurWipSN.NODE_NAME}]杩囩珯鎴愬姛锛岀姸鎬乕{CurWipSN.STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()}]"); @@ -651,6 +659,75 @@ ResetNode(); return action; } + + /// <summary> + /// 浜у搧琚垽鏂笉鑹悗涓嬬嚎 + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + public ApiAction<SubmitOutput> OfflineIfDefect(ApiAction<SubmitOutput> action, List<MES_WIP_DATA> wipSNs, string locale) + { + var operInfo = SetOperNodeInfo(CurOperInfo(locale)); + operInfo.CurNode = wipSNs.FirstOrDefault()?.NODE_NAME; + operInfo.NextNode = "涓嬬嚎閫�搴�"; + + //鏇存柊宸ュ崟鏉$爜鏄庣粏淇℃伅 + var woSNs = CurBatch.WoSNs.Where(q => wipSNs.Any(w => q.WIP_ID == w.ID)).ToList(); + foreach (var woSN in woSNs) + { + woSN.STATUS = BIZ_MES_WO_SN.STATUSs.Offline.GetValue(); + } + + //鏉$爜涓嬬嚎 + foreach (var wipSN in wipSNs) + { + wipSN.STATUS = MES_WIP_DATA.STATUSs.Offline.GetValue(); + wipSN.UNBIND_FLAG = "Y"; + } + + var wipHiss = new List<MES_WIP_HIS>(); + foreach (var wipSN in wipSNs) + { + var his = new MES_WIP_HIS(wipSN, $"宸ュ崟[{wipSN.WORK_ORDER}]鏉$爜[{wipSN.SN}]鍦ㄥ矖浣峓{wipSN.POST_CODE}]宸ュ簭[{wipSN.NODE_NAME}]鍥犱笉鑹痆{wipSN.Defects.FirstOrDefault()?.DFT_NAME}]涓嬬嚎锛圱ransId锛� {TransID} 锛�"); + wipSN.History.Add(his); + wipHiss.Add(his); + } + + //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� + var _woSns = woSNs.Clone(); + var _wipSns = wipSNs.Clone(); + var _wipHiss = wipHiss.Clone(); + var _defect = CurDefects.Clone(); + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = GetCommitDB(); + //淇濆瓨鏁版嵁搴� + var dbTran = db.UseTran(() => + { + //鏁版嵁淇濆瓨閫昏緫 + db.Storageable(_woSns, UserCode).ExecuteCommand(); + db.Storageable(_wipSns, UserCode).ExecuteCommand(); + db.Storageable(_wipHiss, UserCode).ExecuteCommand(); + db.Storageable(_defect, UserCode).ExecuteCommand(); + }); + if (!dbTran.IsSuccess) + { + //鎶涘嚭寮傚父 + throw dbTran.ErrorException; + } + + //浠庡伐鍗曚腑绉婚櫎姝e湪鐢熶骇鐨勬潯鐮� + CurBatch.RemoveWipSn(wipSNs, UserCode); + + //淇濆瓨鎴愬姛锛岃繑鍥炶繃绔欐秷鎭� + action.Data.OperInfo = operInfo; + action.Data.ShortMsg = new("涓嬬嚎閫�搴�", ShortMessage.Types.Warning); + //action.LocaleMsg = new($"宸ュ崟[0]鐨勬潯鐮乕1]鍦ㄥ矖浣峓2]宸ュ簭[3]鍥犱笉鑹痆4]涓嬬嚎锛岀姸鎬乕5]"); + action.LocaleMsg = new("MES.Transaction.TestNode.OfflineIfDefect", wipSNs.First().WORK_ORDER, CurSN, wipSNs.First().POST_CODE, wipSNs.First().NODE_NAME, wipSNs.First().Defects.FirstOrDefault()?.DFT_NAME, wipSNs.First().STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()); + + //閲嶇疆宸ュ簭 + ResetNode(); + return action; + } #endregion Functions public override bool Close(bool needSaveHistoryLog = false) diff --git a/Tiger.Business.MES/Transaction/PackingNode.cs b/Tiger.Business.MES/Transaction/PackingNode.cs index 056f873..c6dde95 100644 --- a/Tiger.Business.MES/Transaction/PackingNode.cs +++ b/Tiger.Business.MES/Transaction/PackingNode.cs @@ -470,8 +470,16 @@ OBA_BATCH = wipSN.OBA_BATCH, LOCK_BATCH = wipSN.LOCK_BATCH, }; + wipSN.Defects.Add(defect); CurDefects.Add(defect); } + } + + //浜у搧琚垽鏂笉鑹悗涓嬬嚎锛屽苟浠庡伐鍗曚腑绉婚櫎姝e湪鐢熶骇鐨勬潯鐮� + if (CurDefects.Any() && curNodeSetting.IF_DFT_OFFLINE == "Y") + { + woStatus.Data.ShortMsg = new("浜у搧涓嬬嚎", ShortMessage.Types.Error); + return OfflineIfDefect(action, wipSNs, input.Locale); } //宸ュ崟寮�宸� @@ -699,7 +707,7 @@ SaveStepsCommitActionToDB(endAction); //淇濆瓨鎴愬姛锛岃繑鍥炶繃绔欐秷鎭� - CurOperInfo(locale).InputQty += CurWipSNs.Count; + operInfo.InputQty += CurWipSNs.Count; action.Data.Data = new PackingActionOutput() { PkgInfo = curPkg }; action.Data.OperInfo = operInfo; action.Data.ShortMsg = new(CurWipSNs.Any(q => q.DFT_FLAG == "Y") ? "涓嶈壇杩囩珯" : "鑹搧杩囩珯", ShortMessage.Types.Success); @@ -719,6 +727,75 @@ } /// <summary> + /// 浜у搧琚垽鏂笉鑹悗涓嬬嚎 + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + public ApiAction<SubmitOutput> OfflineIfDefect(ApiAction<SubmitOutput> action, List<MES_WIP_DATA> wipSNs, string locale) + { + var operInfo = SetOperNodeInfo(CurOperInfo(locale)); + operInfo.CurNode = wipSNs.FirstOrDefault()?.NODE_NAME; + operInfo.NextNode = "涓嬬嚎閫�搴�"; + + //鏇存柊宸ュ崟鏉$爜鏄庣粏淇℃伅 + var woSNs = CurBatch.WoSNs.Where(q => wipSNs.Any(w => q.WIP_ID == w.ID)).ToList(); + foreach (var woSN in woSNs) + { + woSN.STATUS = BIZ_MES_WO_SN.STATUSs.Offline.GetValue(); + } + + //鏉$爜涓嬬嚎 + foreach (var wipSN in wipSNs) + { + wipSN.STATUS = MES_WIP_DATA.STATUSs.Offline.GetValue(); + wipSN.UNBIND_FLAG = "Y"; + } + + var wipHiss = new List<MES_WIP_HIS>(); + foreach (var wipSN in wipSNs) + { + var his = new MES_WIP_HIS(wipSN, $"宸ュ崟[{wipSN.WORK_ORDER}]鏉$爜[{wipSN.SN}]鍦ㄥ矖浣峓{wipSN.POST_CODE}]宸ュ簭[{wipSN.NODE_NAME}]鍥犱笉鑹痆{wipSN.Defects.FirstOrDefault()?.DFT_NAME}]涓嬬嚎锛圱ransId锛� {TransID} 锛�"); + wipSN.History.Add(his); + wipHiss.Add(his); + } + + //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� + var _woSns = woSNs.Clone(); + var _wipSns = wipSNs.Clone(); + var _wipHiss = wipHiss.Clone(); + var _defect = CurDefects.Clone(); + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = GetCommitDB(); + //淇濆瓨鏁版嵁搴� + var dbTran = db.UseTran(() => + { + //鏁版嵁淇濆瓨閫昏緫 + db.Storageable(_woSns, UserCode).ExecuteCommand(); + db.Storageable(_wipSns, UserCode).ExecuteCommand(); + db.Storageable(_wipHiss, UserCode).ExecuteCommand(); + db.Storageable(_defect, UserCode).ExecuteCommand(); + }); + if (!dbTran.IsSuccess) + { + //鎶涘嚭寮傚父 + throw dbTran.ErrorException; + } + + //浠庡伐鍗曚腑绉婚櫎姝e湪鐢熶骇鐨勬潯鐮� + CurBatch.RemoveWipSn(wipSNs, UserCode); + + //淇濆瓨鎴愬姛锛岃繑鍥炶繃绔欐秷鎭� + action.Data.OperInfo = operInfo; + action.Data.ShortMsg = new("涓嬬嚎閫�搴�", ShortMessage.Types.Warning); + //action.LocaleMsg = new($"宸ュ崟[0]鐨勬潯鐮乕1]鍦ㄥ矖浣峓2]宸ュ簭[3]鍥犱笉鑹痆4]涓嬬嚎锛岀姸鎬乕5]"); + action.LocaleMsg = new("MES.Transaction.TestNode.OfflineIfDefect", wipSNs.First().WORK_ORDER, CurSN, wipSNs.First().POST_CODE, wipSNs.First().NODE_NAME, wipSNs.First().Defects.FirstOrDefault()?.DFT_NAME, wipSNs.First().STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()); + + //閲嶇疆宸ュ簭 + ResetNode(); + return action; + } + + /// <summary> /// 鍖呰宸ュ簭锛氭墜鍔ㄧ粨鏉熷寘瑁� /// </summary> /// <returns></returns> diff --git a/Tiger.Business.MES/Transaction/YadaPacking.cs b/Tiger.Business.MES/Transaction/YadaPacking.cs index e1fef5d..dc47684 100644 --- a/Tiger.Business.MES/Transaction/YadaPacking.cs +++ b/Tiger.Business.MES/Transaction/YadaPacking.cs @@ -484,8 +484,16 @@ OBA_BATCH = wipSN.OBA_BATCH, LOCK_BATCH = wipSN.LOCK_BATCH, }; + wipSN.Defects.Add(defect); CurDefects.Add(defect); } + } + + //浜у搧琚垽鏂笉鑹悗涓嬬嚎锛屽苟浠庡伐鍗曚腑绉婚櫎姝e湪鐢熶骇鐨勬潯鐮� + if (CurDefects.Any() && curNodeSetting.IF_DFT_OFFLINE == "Y") + { + woStatus.Data.ShortMsg = new("浜у搧涓嬬嚎", ShortMessage.Types.Error); + return OfflineIfDefect(action, wipSNs, input.Locale); } //宸ュ崟寮�宸� @@ -713,7 +721,7 @@ SaveStepsCommitActionToDB(endAction); //淇濆瓨鎴愬姛锛岃繑鍥炶繃绔欐秷鎭� - CurOperInfo(locale).InputQty += CurWipSNs.Count; + operInfo.InputQty += CurWipSNs.Count; action.Data.Data = new PackingActionOutput() { PkgInfo = curPkg }; action.Data.OperInfo = operInfo; action.Data.ShortMsg = new(CurWipSNs.Any(q => q.DFT_FLAG == "Y") ? "涓嶈壇杩囩珯" : "鑹搧杩囩珯", ShortMessage.Types.Success); @@ -733,6 +741,75 @@ } /// <summary> + /// 浜у搧琚垽鏂笉鑹悗涓嬬嚎 + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + public ApiAction<SubmitOutput> OfflineIfDefect(ApiAction<SubmitOutput> action, List<MES_WIP_DATA> wipSNs, string locale) + { + var operInfo = SetOperNodeInfo(CurOperInfo(locale)); + operInfo.CurNode = wipSNs.FirstOrDefault()?.NODE_NAME; + operInfo.NextNode = "涓嬬嚎閫�搴�"; + + //鏇存柊宸ュ崟鏉$爜鏄庣粏淇℃伅 + var woSNs = CurBatch.WoSNs.Where(q => wipSNs.Any(w => q.WIP_ID == w.ID)).ToList(); + foreach (var woSN in woSNs) + { + woSN.STATUS = BIZ_MES_WO_SN.STATUSs.Offline.GetValue(); + } + + //鏉$爜涓嬬嚎 + foreach (var wipSN in wipSNs) + { + wipSN.STATUS = MES_WIP_DATA.STATUSs.Offline.GetValue(); + wipSN.UNBIND_FLAG = "Y"; + } + + var wipHiss = new List<MES_WIP_HIS>(); + foreach (var wipSN in wipSNs) + { + var his = new MES_WIP_HIS(wipSN, $"宸ュ崟[{wipSN.WORK_ORDER}]鏉$爜[{wipSN.SN}]鍦ㄥ矖浣峓{wipSN.POST_CODE}]宸ュ簭[{wipSN.NODE_NAME}]鍥犱笉鑹痆{wipSN.Defects.FirstOrDefault()?.DFT_NAME}]涓嬬嚎锛圱ransId锛� {TransID} 锛�"); + wipSN.History.Add(his); + wipHiss.Add(his); + } + + //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� + var _woSns = woSNs.Clone(); + var _wipSns = wipSNs.Clone(); + var _wipHiss = wipHiss.Clone(); + var _defect = CurDefects.Clone(); + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = GetCommitDB(); + //淇濆瓨鏁版嵁搴� + var dbTran = db.UseTran(() => + { + //鏁版嵁淇濆瓨閫昏緫 + db.Storageable(_woSns, UserCode).ExecuteCommand(); + db.Storageable(_wipSns, UserCode).ExecuteCommand(); + db.Storageable(_wipHiss, UserCode).ExecuteCommand(); + db.Storageable(_defect, UserCode).ExecuteCommand(); + }); + if (!dbTran.IsSuccess) + { + //鎶涘嚭寮傚父 + throw dbTran.ErrorException; + } + + //浠庡伐鍗曚腑绉婚櫎姝e湪鐢熶骇鐨勬潯鐮� + CurBatch.RemoveWipSn(wipSNs, UserCode); + + //淇濆瓨鎴愬姛锛岃繑鍥炶繃绔欐秷鎭� + action.Data.OperInfo = operInfo; + action.Data.ShortMsg = new("涓嬬嚎閫�搴�", ShortMessage.Types.Warning); + //action.LocaleMsg = new($"宸ュ崟[0]鐨勬潯鐮乕1]鍦ㄥ矖浣峓2]宸ュ簭[3]鍥犱笉鑹痆4]涓嬬嚎锛岀姸鎬乕5]"); + action.LocaleMsg = new("MES.Transaction.TestNode.OfflineIfDefect", wipSNs.First().WORK_ORDER, CurSN, wipSNs.First().POST_CODE, wipSNs.First().NODE_NAME, wipSNs.First().Defects.FirstOrDefault()?.DFT_NAME, wipSNs.First().STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()); + + //閲嶇疆宸ュ簭 + ResetNode(); + return action; + } + + /// <summary> /// 鍖呰宸ュ簭锛氭墜鍔ㄧ粨鏉熷寘瑁� /// </summary> /// <returns></returns> diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN.cs index e24b9ed..99b315c 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN.cs @@ -10,103 +10,99 @@ /// 瀹炰綋锛氬畬宸ュ叆搴撳崟(ERP) /// </summary> [Description("Primary:ID")] + [DisplayName("瀹屽伐鍏ュ簱鍗�(ERP)")] [Serializable] [SugarTable("BIZ_ERP_PROD_IN")] public class BIZ_ERP_PROD_IN : DbEntityWithAuth { #region 鏋勯�犲嚱鏁� - /// <summary> /// 瀹炰綋锛氬畬宸ュ叆搴撳崟(ERP) /// </summary> - public BIZ_ERP_PROD_IN() - { } - - #endregion 鏋勯�犲嚱鏁� + public BIZ_ERP_PROD_IN() { } + #endregion #region 鍏叡灞炴�� - /// <summary> /// 鍗曟嵁鍙风爜 /// </summary> + [DisplayName("鍗曟嵁鍙风爜")] public string BILLCODE { get; set; } - /// <summary> /// 鍗曟嵁鏃堕棿 /// </summary> + [DisplayName("鍗曟嵁鏃堕棿")] public DateTime BILLDATE { get; set; } = DateTime.MinValue; - /// <summary> - /// 鍗曟嵁鐘舵�� + /// 鍗曟嵁鐘舵��(0INIT鏂板|1AUDITED宸插鏍竱2WORKING浣滀笟涓瓅3COMPLETE瀹屾垚) /// </summary> + [DisplayName("鍗曟嵁鐘舵��(0INIT鏂板|1AUDITED宸插鏍竱2WORKING浣滀笟涓瓅3COMPLETE瀹屾垚)")] public int STATUS { get; set; } /// <summary> /// 鏈哄瀷(鏉ユ簮锛歍100) /// </summary> + [DisplayName("鏈哄瀷(鏉ユ簮锛歍100)")] public string ITEM_MODEL { get; set; } /// <summary> /// 涓氬姟绫诲瀷 /// </summary> + [DisplayName("涓氬姟绫诲瀷")] public string BIZTYPE { get; set; } - /// <summary> - /// 浠撳簱浠g爜 + /// 浠撳簱缂栫爜 /// </summary> + [DisplayName("浠撳簱缂栫爜")] public string WAREHOUSECODE { get; set; } - /// <summary> /// 鏉ユ簮绫诲瀷 /// </summary> + [DisplayName("鏉ユ簮绫诲瀷")] public int SOURCETYPE { get; set; } - /// <summary> - /// 鏉ユ簮浠g爜 + /// 鏉ユ簮缂栫爜 /// </summary> + [DisplayName("鏉ユ簮缂栫爜")] public string SOURCECODE { get; set; } - /// <summary> /// 澶囨敞 /// </summary> + [DisplayName("澶囨敞")] public string REMARK { get; set; } - /// <summary> - /// ERP鍗曟嵁浠g爜 + /// ERP鍗曟嵁鍙风爜 /// </summary> + [DisplayName("ERP鍗曟嵁鍙风爜")] public string ERP_BILL_CODE { get; set; } - /// <summary> /// -1:鏈鐞嗭紝0:鍚屾澶勭悊瀹岋紝>0:鍚屾澶勭悊澶辫触娆℃暟 /// </summary> + [DisplayName("-1:鏈鐞嗭紝0:鍚屾澶勭悊瀹岋紝>0:鍚屾澶勭悊澶辫触娆℃暟")] public int HANDLED { get; set; } - /// <summary> /// 鏈�鍚庝竴娆″悓姝ュ鐞嗘棩鏈� /// </summary> + [DisplayName("鏈�鍚庝竴娆″悓姝ュ鐞嗘棩鏈�")] public DateTime HANDLED_DATE { get; set; } = DateTime.MinValue; - /// <summary> /// 杩囪处鎻愪氦鐨凧SON /// </summary> + [DisplayName("杩囪处鎻愪氦鐨凧SON")] public string COMMIT_JSON { get; set; } - /// <summary> /// 杩囪处鎻愪氦鐨勮繑鍥炰俊鎭� /// </summary> + [DisplayName("杩囪处鎻愪氦鐨勮繑鍥炰俊鎭�")] public string COMMIT_MSG { get; set; } - - #endregion 鍏叡灞炴�� + #endregion #region 铏氭嫙灞炴�� - /*渚嬪瓙 [SugarColumn(IsIgnore = true)] public string FieldName { get; set; } */ - - #endregion 铏氭嫙灞炴�� + #endregion #region 澶栭敭灞炴�� - /*渚嬪瓙 //涓�瀵逛竴澶栭敭瀵艰埅 [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//涓�瀵逛竴 ClassAId鏄疊IZ_ERP_PROD_IN绫婚噷闈㈢殑澶栭敭ID瀛楁 @@ -134,7 +130,6 @@ #endregion 澶栭敭灞炴�� #region 鏋氫妇鍙橀噺 - /*渚嬪瓙 public enum FieldNames { @@ -145,21 +140,25 @@ } */ + /// <summary> + /// 鏋氫妇锛氬崟鎹姸鎬�(0INIT鏂板|1AUDITED宸插鏍竱2WORKING浣滀笟涓瓅3COMPLETE瀹屾垚) + /// </summary> public enum STATUSs { [Description("鏂板")] - INIT, - + INIT = 0, [Description("宸插鏍�")] - AUDITED, - + AUDITED = 1, [Description("浣滀笟涓�")] - WORKING, - + WORKING = 2, [Description("瀹屾垚")] - COMPLETE + COMPLETE = 3, } + #endregion - #endregion 鏋氫妇鍙橀噺 + #region 鍏叡鏂规硶 + + #endregion + }//endClass } \ No newline at end of file -- Gitblit v1.9.3