From 0fdb04b7c451d7c59b226c25425722afd3364916 Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期三, 25 九月 2024 16:37:52 +0800 Subject: [PATCH] 优化工序和行为逻辑 --- Tiger.Business.MES/WorkAction/ThreeInOne.cs | 1 Tiger.Business.MES/Common/WorkStep.cs | 17 + Tiger.Business.MES/Transaction/CollectNode.cs | 146 ++++++++------- Tiger.Business.MES/WorkAction/Assembly.cs | 1 Tiger.Business.MES/WorkAction/Weighing.cs | 1 Tiger.IBusiness/Common/IStep.cs | 5 Tiger.Business.MES/Transaction/PackingNode.cs | 146 ++++++++------- Tiger.Business.MES/Transaction/Position.cs | 7 Tiger.Business.MES/Transaction/TestNode.cs | 146 ++++++++------- Tiger.Business.MES/WorkAction/PackageInputCheck.cs | 1 Tiger.Business.MES/WorkAction/IPQC.cs | 1 Tiger.Model.Net/Entitys/MES/MES_WIP_ACT.cs | 5 Tiger.Model.Net/Entitys/MES/MES_WIP_HIS.cs | 5 Tiger.Business.MES/WorkAction/YadaAssembly.cs | 1 Tiger.Business.MES/WorkAction/PackingAction.cs | 1 Tiger.Business.MES/WorkAction/PrintLabel.cs | 1 Tiger.Business.MES/WorkAction/VerifyCustomSN.cs | 1 Tiger.Business.MES/WorkAction/WipExtInfo.cs | 1 18 files changed, 288 insertions(+), 199 deletions(-) diff --git a/Tiger.Business.MES/Common/WorkStep.cs b/Tiger.Business.MES/Common/WorkStep.cs index 581fbd3..3ca316e 100644 --- a/Tiger.Business.MES/Common/WorkStep.cs +++ b/Tiger.Business.MES/Common/WorkStep.cs @@ -28,6 +28,9 @@ #region Propertys & Variables public string ID { get; set; } = Guid.NewGuid().ToString("N"); public string Name { get; set; } + private DateTime BeginAt; + private DateTime EndAt; + public TimeSpan ElapsedTime => EndAt - BeginAt; public IWorkStep.NodeTypes NodeType { get; set; } public MES_WO_NODE Node { get; set; } public MES_WO_OPER OperSetting { get; set; } @@ -75,6 +78,7 @@ /// <returns></returns> public ApiAction<SubmitOutput> TryBegin(SubmitInput input) { + BeginAt = DateTime.Now; return CurAction.TryBegin(input); } @@ -103,7 +107,18 @@ /// <returns></returns> public ApiAction<SubmitOutput> End(SubmitInput input) { - return CurAction.End(input); + var result = CurAction.End(input); + EndAt = DateTime.Now; + return result; + } + + /// <summary> + /// 鑾峰彇宸ユ褰撳墠鑰楁椂 + /// </summary> + /// <returns></returns> + public TimeSpan GetElapsedTime() + { + return DateTime.Now - BeginAt; } /// <summary> diff --git a/Tiger.Business.MES/Transaction/CollectNode.cs b/Tiger.Business.MES/Transaction/CollectNode.cs index 027165c..8eda39e 100644 --- a/Tiger.Business.MES/Transaction/CollectNode.cs +++ b/Tiger.Business.MES/Transaction/CollectNode.cs @@ -212,71 +212,72 @@ var curNode = CurBatch.GetNode(PostCode); try { - //鍒ゆ柇宸ュ崟瀹炴椂鐘舵�佸垽鏂槸鍚﹀彲浠ョ敓浜� - var woStatus = CurBatch.CheckCanProduce(curNode); - if (!woStatus.IsSuccessed) - { - woStatus.Data.ShortMsg = new("宸ュ崟寮傚父", ShortMessage.Types.Error); - return woStatus; - } - - var wipSNs = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN).ToList(); - if (wipSNs.IsNullOrEmpty()) - { - var wipSN = new MES_WIP_DATA() - { - SN = input.SN, - FLOW_SN = input.SN, - STATUS = MES_WIP_DATA.STATUSs.Init.GetValue(), - ITEM_CODE = CurBatch.WO.ITEM_CODE, - WORK_ORDER = CurBatch.Batch.ORDER_NO, - BATCH_NO = CurBatch.Batch.BATCH_NO, - FTY_CODE = CurFactory.FTY_CODE, - WS_CODE = CurWorkshop.WS_CODE, - LINE_CODE = CurLine.LINE_CODE, - POST_CODE = CurPosition.POST_CODE, - HOLD_FLAG = "N", - REWORK_FLAG = CurBatch.WO.ORDER_TYPE == BIZ_MES_WO.ORDER_TYPEs.Rework.GetValue() ? "Y" : "N", - FINISHED_FLAG = "N", - INV_FLAG = "N", - DFT_FLAG = "N", - DFT_COUNT = 0, - }; - wipSNs.Add(wipSN); - } - - //濡傛灉鏉$爜涓嶆槸褰撳墠宸ュ崟鎴栬�呬骇绾跨殑鍒欐姤閿� - if (wipSNs.Any(q => q.WORK_ORDER != CurBatch.WO.ORDER_NO || q.LINE_CODE != CurLine.LINE_CODE)) - { - if (wipSNs.First().LINE_CODE == CurLine.LINE_CODE) - { - action.Data.ShortMsg = new("宸ュ崟閿欒", ShortMessage.Types.Error); - action.IsSuccessed = false; - //action.LocaleMsg = new($"浜у搧[{CurSN}]涓嶅睘浜庡綋鍓嶅伐鍗曪紝璇峰垏鎹㈠埌宸ュ崟[{wipSNs.First().WORK_ORDER}]鍚庡啀鎵弿"); - action.LocaleMsg = new("MES.Transaction.CollectNode.NodeSubmit.WoError", input.SN, wipSNs.First().WORK_ORDER); - return action; - } - else - { - action.Data.ShortMsg = new("浜х嚎閿欒", ShortMessage.Types.Error); - action.IsSuccessed = false; - //action.LocaleMsg = new($"浜у搧[{CurSN}]宸插湪浜х嚎[{wipSNs.First().LINE_CODE}]鎶曚骇锛岃鍒颁骇绾縖{wipSNs.First().LINE_CODE}]鎵弿"); - action.LocaleMsg = new("MES.Transaction.CollectNode.NodeSubmit.LineError", input.SN, wipSNs.First().LINE_CODE); - return action; - } - } - - //闈炴硶杩囩珯闃插憜锛氳繘鍏ュ伐搴忔椂瑕佸鍔犲垽鏂潯鐮佹槸鍚︽寜娴佺▼杩囩珯 - var canGotoNext = CurBatch.CanGotoNext(input, wipSNs.First(), curNode); - if (!canGotoNext.IsSuccessed) - { - woStatus.Data.ShortMsg = new("杩涚珯閿欒", ShortMessage.Types.Error); - return canGotoNext; - } - //褰撳伐姝ュ垪琛ㄤ负绌猴紝鍒欐墽琛屽綋鍓嶅伐搴忕殑蹇呰閫昏緫褰撲綔绗竴涓伐搴忚妭鐐癸紝瀹屾垚鍚庢寜闇�姹傚垱寤哄悗缁殑宸ユ鍒楄〃 if (Steps.IsNullOrEmpty()) { + BeginAt = DateTime.Now; + //鍒ゆ柇宸ュ崟瀹炴椂鐘舵�佸垽鏂槸鍚﹀彲浠ョ敓浜� + var woStatus = CurBatch.CheckCanProduce(curNode); + if (!woStatus.IsSuccessed) + { + woStatus.Data.ShortMsg = new("宸ュ崟寮傚父", ShortMessage.Types.Error); + return woStatus; + } + + var wipSNs = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN).ToList(); + if (wipSNs.IsNullOrEmpty()) + { + var wipSN = new MES_WIP_DATA() + { + SN = input.SN, + FLOW_SN = input.SN, + STATUS = MES_WIP_DATA.STATUSs.Init.GetValue(), + ITEM_CODE = CurBatch.WO.ITEM_CODE, + WORK_ORDER = CurBatch.Batch.ORDER_NO, + BATCH_NO = CurBatch.Batch.BATCH_NO, + FTY_CODE = CurFactory.FTY_CODE, + WS_CODE = CurWorkshop.WS_CODE, + LINE_CODE = CurLine.LINE_CODE, + POST_CODE = CurPosition.POST_CODE, + HOLD_FLAG = "N", + REWORK_FLAG = CurBatch.WO.ORDER_TYPE == BIZ_MES_WO.ORDER_TYPEs.Rework.GetValue() ? "Y" : "N", + FINISHED_FLAG = "N", + INV_FLAG = "N", + DFT_FLAG = "N", + DFT_COUNT = 0, + }; + wipSNs.Add(wipSN); + } + + //濡傛灉鏉$爜涓嶆槸褰撳墠宸ュ崟鎴栬�呬骇绾跨殑鍒欐姤閿� + if (wipSNs.Any(q => q.WORK_ORDER != CurBatch.WO.ORDER_NO || q.LINE_CODE != CurLine.LINE_CODE)) + { + if (wipSNs.First().LINE_CODE == CurLine.LINE_CODE) + { + action.Data.ShortMsg = new("宸ュ崟閿欒", ShortMessage.Types.Error); + action.IsSuccessed = false; + //action.LocaleMsg = new($"浜у搧[{CurSN}]涓嶅睘浜庡綋鍓嶅伐鍗曪紝璇峰垏鎹㈠埌宸ュ崟[{wipSNs.First().WORK_ORDER}]鍚庡啀鎵弿"); + action.LocaleMsg = new("MES.Transaction.CollectNode.NodeSubmit.WoError", input.SN, wipSNs.First().WORK_ORDER); + return action; + } + else + { + action.Data.ShortMsg = new("浜х嚎閿欒", ShortMessage.Types.Error); + action.IsSuccessed = false; + //action.LocaleMsg = new($"浜у搧[{CurSN}]宸插湪浜х嚎[{wipSNs.First().LINE_CODE}]鎶曚骇锛岃鍒颁骇绾縖{wipSNs.First().LINE_CODE}]鎵弿"); + action.LocaleMsg = new("MES.Transaction.CollectNode.NodeSubmit.LineError", input.SN, wipSNs.First().LINE_CODE); + return action; + } + } + + //闈炴硶杩囩珯闃插憜锛氳繘鍏ュ伐搴忔椂瑕佸鍔犲垽鏂潯鐮佹槸鍚︽寜娴佺▼杩囩珯 + var canGotoNext = CurBatch.CanGotoNext(input, wipSNs.First(), curNode); + if (!canGotoNext.IsSuccessed) + { + woStatus.Data.ShortMsg = new("杩涚珯閿欒", ShortMessage.Types.Error); + return canGotoNext; + } + //缁戝畾鏉$爜鍒板伐鍗� foreach (var wipSN in wipSNs) { @@ -470,10 +471,23 @@ { var curStep = Steps.Where(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished).OrderBy(q => q.Sequence).First(); - //瀹屾垚褰撳墠宸ュ簭鑺傜偣宸ユ - curStep.IsFinished = true; - curStep.Status = StepStatus.Finished; - CurStep = curStep; + //鏍规嵁宸ュ簭鑺傜偣宸ユ鐨勫簭鍙峰鐞嗙浉搴斿伐姝ョ殑澶勭悊閫昏緫 + switch (curStep.Sequence) + { + case 2: + { + //绗簩宸ユ鐨勫鐞嗛�昏緫 + + + //瀹屾垚褰撳墠宸ュ簭鑺傜偣宸ユ + curStep.IsFinished = true; + curStep.Status = StepStatus.Finished; + CurStep = curStep; + } + break; + default: + break; + } } //鏈畬鎴愭墍鏈夊伐姝� diff --git a/Tiger.Business.MES/Transaction/PackingNode.cs b/Tiger.Business.MES/Transaction/PackingNode.cs index 3228fdd..4847720 100644 --- a/Tiger.Business.MES/Transaction/PackingNode.cs +++ b/Tiger.Business.MES/Transaction/PackingNode.cs @@ -253,71 +253,72 @@ var curNode = CurBatch.GetNode(PostCode); try { - //鍒ゆ柇宸ュ崟瀹炴椂鐘舵�佸垽鏂槸鍚﹀彲浠ョ敓浜� - var woStatus = CurBatch.CheckCanProduce(curNode); - if (!woStatus.IsSuccessed) - { - woStatus.Data.ShortMsg = new("宸ュ崟寮傚父", ShortMessage.Types.Error); - return woStatus; - } - - var wipSNs = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN).ToList(); - if (wipSNs.IsNullOrEmpty()) - { - var wipSN = new MES_WIP_DATA() - { - SN = input.SN, - FLOW_SN = input.SN, - STATUS = MES_WIP_DATA.STATUSs.Init.GetValue(), - ITEM_CODE = CurBatch.WO.ITEM_CODE, - WORK_ORDER = CurBatch.Batch.ORDER_NO, - BATCH_NO = CurBatch.Batch.BATCH_NO, - FTY_CODE = CurFactory.FTY_CODE, - WS_CODE = CurWorkshop.WS_CODE, - LINE_CODE = CurLine.LINE_CODE, - POST_CODE = CurPosition.POST_CODE, - HOLD_FLAG = "N", - REWORK_FLAG = CurBatch.WO.ORDER_TYPE == BIZ_MES_WO.ORDER_TYPEs.Rework.GetValue() ? "Y" : "N", - FINISHED_FLAG = "N", - INV_FLAG = "N", - DFT_FLAG = "N", - DFT_COUNT = 0, - }; - wipSNs.Add(wipSN); - } - - //濡傛灉鏉$爜涓嶆槸褰撳墠宸ュ崟鎴栬�呬骇绾跨殑鍒欐姤閿� - if (wipSNs.Any(q => q.WORK_ORDER != CurBatch.WO.ORDER_NO || q.LINE_CODE != CurLine.LINE_CODE)) - { - if (wipSNs.First().LINE_CODE == CurLine.LINE_CODE) - { - action.Data.ShortMsg = new("宸ュ崟閿欒", ShortMessage.Types.Error); - action.IsSuccessed = false; - //action.LocaleMsg = new($"浜у搧[{CurSN}]涓嶅睘浜庡綋鍓嶅伐鍗曪紝璇峰垏鎹㈠埌宸ュ崟[{wipSNs.First().WORK_ORDER}]鍚庡啀鎵弿"); - action.LocaleMsg = new("MES.Transaction.PackingNode.NodeSubmit.WoError", input.SN, wipSNs.First().WORK_ORDER); - return action; - } - else - { - action.Data.ShortMsg = new("浜х嚎閿欒", ShortMessage.Types.Error); - action.IsSuccessed = false; - //action.LocaleMsg = new($"浜у搧[{CurSN}]宸插湪浜х嚎[{wipSNs.First().LINE_CODE}]鎶曚骇锛岃鍒颁骇绾縖{wipSNs.First().LINE_CODE}]鎵弿"); - action.LocaleMsg = new("MES.Transaction.PackingNode.NodeSubmit.LineError", input.SN, wipSNs.First().LINE_CODE); - return action; - } - } - - //闈炴硶杩囩珯闃插憜锛氳繘鍏ュ伐搴忔椂瑕佸鍔犲垽鏂潯鐮佹槸鍚︽寜娴佺▼杩囩珯 - var canGotoNext = CurBatch.CanGotoNext(input, wipSNs.First(), curNode); - if (!canGotoNext.IsSuccessed) - { - woStatus.Data.ShortMsg = new("杩涚珯閿欒", ShortMessage.Types.Error); - return canGotoNext; - } - //褰撳伐姝ュ垪琛ㄤ负绌猴紝鍒欐墽琛屽綋鍓嶅伐搴忕殑蹇呰閫昏緫褰撲綔绗竴涓伐搴忚妭鐐癸紝瀹屾垚鍚庢寜闇�姹傚垱寤哄悗缁殑宸ユ鍒楄〃 if (Steps.IsNullOrEmpty()) { + BeginAt = DateTime.Now; + //鍒ゆ柇宸ュ崟瀹炴椂鐘舵�佸垽鏂槸鍚﹀彲浠ョ敓浜� + var woStatus = CurBatch.CheckCanProduce(curNode); + if (!woStatus.IsSuccessed) + { + woStatus.Data.ShortMsg = new("宸ュ崟寮傚父", ShortMessage.Types.Error); + return woStatus; + } + + var wipSNs = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN).ToList(); + if (wipSNs.IsNullOrEmpty()) + { + var wipSN = new MES_WIP_DATA() + { + SN = input.SN, + FLOW_SN = input.SN, + STATUS = MES_WIP_DATA.STATUSs.Init.GetValue(), + ITEM_CODE = CurBatch.WO.ITEM_CODE, + WORK_ORDER = CurBatch.Batch.ORDER_NO, + BATCH_NO = CurBatch.Batch.BATCH_NO, + FTY_CODE = CurFactory.FTY_CODE, + WS_CODE = CurWorkshop.WS_CODE, + LINE_CODE = CurLine.LINE_CODE, + POST_CODE = CurPosition.POST_CODE, + HOLD_FLAG = "N", + REWORK_FLAG = CurBatch.WO.ORDER_TYPE == BIZ_MES_WO.ORDER_TYPEs.Rework.GetValue() ? "Y" : "N", + FINISHED_FLAG = "N", + INV_FLAG = "N", + DFT_FLAG = "N", + DFT_COUNT = 0, + }; + wipSNs.Add(wipSN); + } + + //濡傛灉鏉$爜涓嶆槸褰撳墠宸ュ崟鎴栬�呬骇绾跨殑鍒欐姤閿� + if (wipSNs.Any(q => q.WORK_ORDER != CurBatch.WO.ORDER_NO || q.LINE_CODE != CurLine.LINE_CODE)) + { + if (wipSNs.First().LINE_CODE == CurLine.LINE_CODE) + { + action.Data.ShortMsg = new("宸ュ崟閿欒", ShortMessage.Types.Error); + action.IsSuccessed = false; + //action.LocaleMsg = new($"浜у搧[{CurSN}]涓嶅睘浜庡綋鍓嶅伐鍗曪紝璇峰垏鎹㈠埌宸ュ崟[{wipSNs.First().WORK_ORDER}]鍚庡啀鎵弿"); + action.LocaleMsg = new("MES.Transaction.PackingNode.NodeSubmit.WoError", input.SN, wipSNs.First().WORK_ORDER); + return action; + } + else + { + action.Data.ShortMsg = new("浜х嚎閿欒", ShortMessage.Types.Error); + action.IsSuccessed = false; + //action.LocaleMsg = new($"浜у搧[{CurSN}]宸插湪浜х嚎[{wipSNs.First().LINE_CODE}]鎶曚骇锛岃鍒颁骇绾縖{wipSNs.First().LINE_CODE}]鎵弿"); + action.LocaleMsg = new("MES.Transaction.PackingNode.NodeSubmit.LineError", input.SN, wipSNs.First().LINE_CODE); + return action; + } + } + + //闈炴硶杩囩珯闃插憜锛氳繘鍏ュ伐搴忔椂瑕佸鍔犲垽鏂潯鐮佹槸鍚︽寜娴佺▼杩囩珯 + var canGotoNext = CurBatch.CanGotoNext(input, wipSNs.First(), curNode); + if (!canGotoNext.IsSuccessed) + { + woStatus.Data.ShortMsg = new("杩涚珯閿欒", ShortMessage.Types.Error); + return canGotoNext; + } + //缁戝畾鏉$爜鍒板伐鍗� foreach (var wipSN in wipSNs) { @@ -511,10 +512,23 @@ { var curStep = Steps.Where(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished).OrderBy(q => q.Sequence).First(); - //瀹屾垚褰撳墠宸ュ簭鑺傜偣宸ユ - curStep.IsFinished = true; - curStep.Status = StepStatus.Finished; - CurStep = curStep; + //鏍规嵁宸ュ簭鑺傜偣宸ユ鐨勫簭鍙峰鐞嗙浉搴斿伐姝ョ殑澶勭悊閫昏緫 + switch (curStep.Sequence) + { + case 2: + { + //绗簩宸ユ鐨勫鐞嗛�昏緫 + + + //瀹屾垚褰撳墠宸ュ簭鑺傜偣宸ユ + curStep.IsFinished = true; + curStep.Status = StepStatus.Finished; + CurStep = curStep; + } + break; + default: + break; + } } //鏈畬鎴愭墍鏈夊伐姝� diff --git a/Tiger.Business.MES/Transaction/Position.cs b/Tiger.Business.MES/Transaction/Position.cs index 2ae001a..11eba06 100644 --- a/Tiger.Business.MES/Transaction/Position.cs +++ b/Tiger.Business.MES/Transaction/Position.cs @@ -48,6 +48,9 @@ #region Propertys & Variables public string UserCode { get; set; } public string PostCode { get; set; } + protected DateTime BeginAt; + protected DateTime EndAt; + public TimeSpan ElapsedTime => EndAt - BeginAt; public MES_FACTORY CurFactory { get; set; } public MES_WORKSHOP CurWorkshop { get; set; } public MES_LINE CurLine { get; set; } @@ -415,6 +418,10 @@ action.Invoke(); } } + //璁板綍宸ュ簭鑰楁椂 + EndAt = DateTime.Now; + var ids = CurWipSNHiss.Select(q => q.ID).ToList(); + GetCommitDB().Updateable<MES_WIP_HIS>().SetColumns(q => q.ELAPSED_TIME == ElapsedTime.TotalMilliseconds.ToInt64()).Where(q => ids.Contains(q.ID)).ExecuteCommand(); }); if (dbTran.IsSuccess) { diff --git a/Tiger.Business.MES/Transaction/TestNode.cs b/Tiger.Business.MES/Transaction/TestNode.cs index 9934de1..45f7ebe 100644 --- a/Tiger.Business.MES/Transaction/TestNode.cs +++ b/Tiger.Business.MES/Transaction/TestNode.cs @@ -212,71 +212,72 @@ var curNode = CurBatch.GetNode(PostCode); try { - //鍒ゆ柇宸ュ崟瀹炴椂鐘舵�佸垽鏂槸鍚﹀彲浠ョ敓浜� - var woStatus = CurBatch.CheckCanProduce(curNode); - if (!woStatus.IsSuccessed) - { - woStatus.Data.ShortMsg = new("宸ュ崟寮傚父", ShortMessage.Types.Error); - return woStatus; - } - - var wipSNs = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN).ToList(); - if (wipSNs.IsNullOrEmpty()) - { - var wipSN = new MES_WIP_DATA() - { - SN = input.SN, - FLOW_SN = input.SN, - STATUS = MES_WIP_DATA.STATUSs.Init.GetValue(), - ITEM_CODE = CurBatch.WO.ITEM_CODE, - WORK_ORDER = CurBatch.Batch.ORDER_NO, - BATCH_NO = CurBatch.Batch.BATCH_NO, - FTY_CODE = CurFactory.FTY_CODE, - WS_CODE = CurWorkshop.WS_CODE, - LINE_CODE = CurLine.LINE_CODE, - POST_CODE = CurPosition.POST_CODE, - HOLD_FLAG = "N", - REWORK_FLAG = CurBatch.WO.ORDER_TYPE == BIZ_MES_WO.ORDER_TYPEs.Rework.GetValue() ? "Y" : "N", - FINISHED_FLAG = "N", - INV_FLAG = "N", - DFT_FLAG = "N", - DFT_COUNT = 0, - }; - wipSNs.Add(wipSN); - } - - //濡傛灉鏉$爜涓嶆槸褰撳墠宸ュ崟鎴栬�呬骇绾跨殑鍒欐姤閿� - if (wipSNs.Any(q => q.WORK_ORDER != CurBatch.WO.ORDER_NO || q.LINE_CODE != CurLine.LINE_CODE)) - { - if (wipSNs.First().LINE_CODE == CurLine.LINE_CODE) - { - action.Data.ShortMsg = new("宸ュ崟閿欒", ShortMessage.Types.Error); - action.IsSuccessed = false; - //action.LocaleMsg = new($"浜у搧[{CurSN}]涓嶅睘浜庡綋鍓嶅伐鍗曪紝璇峰垏鎹㈠埌宸ュ崟[{wipSNs.First().WORK_ORDER}]鍚庡啀鎵弿"); - action.LocaleMsg = new("MES.Transaction.TestNode.NodeSubmit.WoError", input.SN, wipSNs.First().WORK_ORDER); - return action; - } - else - { - action.Data.ShortMsg = new("浜х嚎閿欒", ShortMessage.Types.Error); - action.IsSuccessed = false; - //action.LocaleMsg = new($"浜у搧[{CurSN}]宸插湪浜х嚎[{wipSNs.First().LINE_CODE}]鎶曚骇锛岃鍒颁骇绾縖{wipSNs.First().LINE_CODE}]鎵弿"); - action.LocaleMsg = new("MES.Transaction.TestNode.NodeSubmit.LineError", input.SN, wipSNs.First().LINE_CODE); - return action; - } - } - - //闈炴硶杩囩珯闃插憜锛氳繘鍏ュ伐搴忔椂瑕佸鍔犲垽鏂潯鐮佹槸鍚︽寜娴佺▼杩囩珯 - var canGotoNext = CurBatch.CanGotoNext(input, wipSNs.First(), curNode); - if (!canGotoNext.IsSuccessed) - { - woStatus.Data.ShortMsg = new("杩涚珯閿欒", ShortMessage.Types.Error); - return canGotoNext; - } - //褰撳伐姝ュ垪琛ㄤ负绌猴紝鍒欐墽琛屽綋鍓嶅伐搴忕殑蹇呰閫昏緫褰撲綔绗竴涓伐搴忚妭鐐癸紝瀹屾垚鍚庢寜闇�姹傚垱寤哄悗缁殑宸ユ鍒楄〃 if (Steps.IsNullOrEmpty()) { + BeginAt = DateTime.Now; + //鍒ゆ柇宸ュ崟瀹炴椂鐘舵�佸垽鏂槸鍚﹀彲浠ョ敓浜� + var woStatus = CurBatch.CheckCanProduce(curNode); + if (!woStatus.IsSuccessed) + { + woStatus.Data.ShortMsg = new("宸ュ崟寮傚父", ShortMessage.Types.Error); + return woStatus; + } + + var wipSNs = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN).ToList(); + if (wipSNs.IsNullOrEmpty()) + { + var wipSN = new MES_WIP_DATA() + { + SN = input.SN, + FLOW_SN = input.SN, + STATUS = MES_WIP_DATA.STATUSs.Init.GetValue(), + ITEM_CODE = CurBatch.WO.ITEM_CODE, + WORK_ORDER = CurBatch.Batch.ORDER_NO, + BATCH_NO = CurBatch.Batch.BATCH_NO, + FTY_CODE = CurFactory.FTY_CODE, + WS_CODE = CurWorkshop.WS_CODE, + LINE_CODE = CurLine.LINE_CODE, + POST_CODE = CurPosition.POST_CODE, + HOLD_FLAG = "N", + REWORK_FLAG = CurBatch.WO.ORDER_TYPE == BIZ_MES_WO.ORDER_TYPEs.Rework.GetValue() ? "Y" : "N", + FINISHED_FLAG = "N", + INV_FLAG = "N", + DFT_FLAG = "N", + DFT_COUNT = 0, + }; + wipSNs.Add(wipSN); + } + + //濡傛灉鏉$爜涓嶆槸褰撳墠宸ュ崟鎴栬�呬骇绾跨殑鍒欐姤閿� + if (wipSNs.Any(q => q.WORK_ORDER != CurBatch.WO.ORDER_NO || q.LINE_CODE != CurLine.LINE_CODE)) + { + if (wipSNs.First().LINE_CODE == CurLine.LINE_CODE) + { + action.Data.ShortMsg = new("宸ュ崟閿欒", ShortMessage.Types.Error); + action.IsSuccessed = false; + //action.LocaleMsg = new($"浜у搧[{CurSN}]涓嶅睘浜庡綋鍓嶅伐鍗曪紝璇峰垏鎹㈠埌宸ュ崟[{wipSNs.First().WORK_ORDER}]鍚庡啀鎵弿"); + action.LocaleMsg = new("MES.Transaction.TestNode.NodeSubmit.WoError", input.SN, wipSNs.First().WORK_ORDER); + return action; + } + else + { + action.Data.ShortMsg = new("浜х嚎閿欒", ShortMessage.Types.Error); + action.IsSuccessed = false; + //action.LocaleMsg = new($"浜у搧[{CurSN}]宸插湪浜х嚎[{wipSNs.First().LINE_CODE}]鎶曚骇锛岃鍒颁骇绾縖{wipSNs.First().LINE_CODE}]鎵弿"); + action.LocaleMsg = new("MES.Transaction.TestNode.NodeSubmit.LineError", input.SN, wipSNs.First().LINE_CODE); + return action; + } + } + + //闈炴硶杩囩珯闃插憜锛氳繘鍏ュ伐搴忔椂瑕佸鍔犲垽鏂潯鐮佹槸鍚︽寜娴佺▼杩囩珯 + var canGotoNext = CurBatch.CanGotoNext(input, wipSNs.First(), curNode); + if (!canGotoNext.IsSuccessed) + { + woStatus.Data.ShortMsg = new("杩涚珯閿欒", ShortMessage.Types.Error); + return canGotoNext; + } + //缁戝畾鏉$爜鍒板伐鍗� foreach (var wipSN in wipSNs) { @@ -470,10 +471,23 @@ { var curStep = Steps.Where(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished).OrderBy(q => q.Sequence).First(); - //瀹屾垚褰撳墠宸ュ簭鑺傜偣宸ユ - curStep.IsFinished = true; - curStep.Status = StepStatus.Finished; - CurStep = curStep; + //鏍规嵁宸ュ簭鑺傜偣宸ユ鐨勫簭鍙峰鐞嗙浉搴斿伐姝ョ殑澶勭悊閫昏緫 + switch (curStep.Sequence) + { + case 2: + { + //绗簩宸ユ鐨勫鐞嗛�昏緫 + + + //瀹屾垚褰撳墠宸ュ簭鑺傜偣宸ユ + curStep.IsFinished = true; + curStep.Status = StepStatus.Finished; + CurStep = curStep; + } + break; + default: + break; + } } //鏈畬鎴愭墍鏈夊伐姝� diff --git a/Tiger.Business.MES/WorkAction/Assembly.cs b/Tiger.Business.MES/WorkAction/Assembly.cs index d184442..e5b0ed7 100644 --- a/Tiger.Business.MES/WorkAction/Assembly.cs +++ b/Tiger.Business.MES/WorkAction/Assembly.cs @@ -352,6 +352,7 @@ ACT_SN = wipSn.SN, ACT_VALUE_1 = CurAssembly.ToJson(), ACT_RESULT = "Y", + ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(), TRACE_INFO = $"浠ヤ笅鐗╂枡涓婃枡瀹屾垚锛歿string.Join(",", CurAssembly.Items.Select(q => $"{q.ItemInfo.ITEM_NAME}({q.ItemInfo.ITEM_CODE})"))}", }; wipActs.Add(wipAct); diff --git a/Tiger.Business.MES/WorkAction/IPQC.cs b/Tiger.Business.MES/WorkAction/IPQC.cs index f2f42b2..8e423ab 100644 --- a/Tiger.Business.MES/WorkAction/IPQC.cs +++ b/Tiger.Business.MES/WorkAction/IPQC.cs @@ -161,6 +161,7 @@ ACT_VALUE_4 = "", ACT_VALUE_5 = "", ACT_RESULT = "Y", + ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(), TRACE_INFO = $"鎵ц鎴愬姛", }; wipActs.Add(wipAct); diff --git a/Tiger.Business.MES/WorkAction/PackageInputCheck.cs b/Tiger.Business.MES/WorkAction/PackageInputCheck.cs index c924b92..d75cb28 100644 --- a/Tiger.Business.MES/WorkAction/PackageInputCheck.cs +++ b/Tiger.Business.MES/WorkAction/PackageInputCheck.cs @@ -246,6 +246,7 @@ ACT_TYPE = NodeAct.ACT_TYPE, ACT_SN = wipSn.SN, ACT_RESULT = "Y", + ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(), TRACE_INFO = $"鏉$爜[{wipSn.SN}]鍙互鍦ㄥ伐鍗昜{wipSn.WORK_ORDER}]鎶曟枡鐢熶骇锛屽叾涓璘9妫�鏌ヨ�楁椂{U9Cost:0.0000}绉�", }; wipActs.Add(wipAct); diff --git a/Tiger.Business.MES/WorkAction/PackingAction.cs b/Tiger.Business.MES/WorkAction/PackingAction.cs index 3a074e2..789e0be 100644 --- a/Tiger.Business.MES/WorkAction/PackingAction.cs +++ b/Tiger.Business.MES/WorkAction/PackingAction.cs @@ -827,6 +827,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); diff --git a/Tiger.Business.MES/WorkAction/PrintLabel.cs b/Tiger.Business.MES/WorkAction/PrintLabel.cs index 7090d81..a818341 100644 --- a/Tiger.Business.MES/WorkAction/PrintLabel.cs +++ b/Tiger.Business.MES/WorkAction/PrintLabel.cs @@ -155,6 +155,7 @@ ACT_VALUE_1 = Label.LABEL_CODE, ACT_VALUE_2 = Label.Variables.ToJson(), ACT_RESULT = "Y", + ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(), TRACE_INFO = $"鏍囩{Label.LABEL_NAME}[{Label.LABEL_CODE}]鎵撳嵃鎴愬姛", }; wipActs.Add(wipAct); diff --git a/Tiger.Business.MES/WorkAction/ThreeInOne.cs b/Tiger.Business.MES/WorkAction/ThreeInOne.cs index a20e632..dcb9985 100644 --- a/Tiger.Business.MES/WorkAction/ThreeInOne.cs +++ b/Tiger.Business.MES/WorkAction/ThreeInOne.cs @@ -381,6 +381,7 @@ ACT_VALUE_1 = Label.LABEL_CODE, ACT_VALUE_2 = Label.Variables.ToJson(), ACT_RESULT = "Y", + ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(), TRACE_INFO = $"鍘傚唴鏉$爜[{FlowCSN.FLOW_SN}]缁戝畾瀹㈡埛鏉$爜[{FlowCSN.CUST_SN}]鎴愬姛", }; wipActs.Add(wipAct); diff --git a/Tiger.Business.MES/WorkAction/VerifyCustomSN.cs b/Tiger.Business.MES/WorkAction/VerifyCustomSN.cs index 5e1aab4..1f273c6 100644 --- a/Tiger.Business.MES/WorkAction/VerifyCustomSN.cs +++ b/Tiger.Business.MES/WorkAction/VerifyCustomSN.cs @@ -180,6 +180,7 @@ ACT_TYPE = NodeAct.ACT_TYPE, ACT_SN = wipSn.SN, ACT_RESULT = "Y", + ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(), TRACE_INFO = $"浜у搧[{CurPosition.CurSN}]楠岃瘉閫氳繃", }; wipActs.Add(wipAct); diff --git a/Tiger.Business.MES/WorkAction/Weighing.cs b/Tiger.Business.MES/WorkAction/Weighing.cs index 1851b67..091f1a0 100644 --- a/Tiger.Business.MES/WorkAction/Weighing.cs +++ b/Tiger.Business.MES/WorkAction/Weighing.cs @@ -184,6 +184,7 @@ ACT_TYPE = NodeAct.ACT_TYPE, ACT_SN = wipSn.SN, ACT_RESULT = "Y", + ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(), TRACE_INFO = $"鏉$爜[{CurPosition.CurSN}]绉伴噸鏁版嵁[{CurPkg.WEIGHT} {CurPkg.WEIGHT_UNIT}]淇濆瓨鎴愬姛", }; wipActs.Add(wipAct); diff --git a/Tiger.Business.MES/WorkAction/WipExtInfo.cs b/Tiger.Business.MES/WorkAction/WipExtInfo.cs index ebe7ec5..6f3aa22 100644 --- a/Tiger.Business.MES/WorkAction/WipExtInfo.cs +++ b/Tiger.Business.MES/WorkAction/WipExtInfo.cs @@ -208,6 +208,7 @@ ACT_SN = wipSn.SN, ACT_VALUE_1 = CurWipExt.ToJson(), ACT_RESULT = "Y", + ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(), TRACE_INFO = $"浜у搧[{CurPosition.CurSN}]缁戝畾[{ExtInfo.FIELD_NAME}]鏍囩鏉$爜[{CurWipExt.GetType().GetProperty($"FIELD_{ExtInfo.SEQ.ToString("00")}")?.GetValue(CurWipExt)?.ToString()}]淇濆瓨鎴愬姛", }; wipActs.Add(wipAct); diff --git a/Tiger.Business.MES/WorkAction/YadaAssembly.cs b/Tiger.Business.MES/WorkAction/YadaAssembly.cs index 6f9e879..3168265 100644 --- a/Tiger.Business.MES/WorkAction/YadaAssembly.cs +++ b/Tiger.Business.MES/WorkAction/YadaAssembly.cs @@ -367,6 +367,7 @@ ACT_SN = wipSn.SN, ACT_VALUE_1 = CurAssembly.ToJson(), ACT_RESULT = "Y", + ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(), TRACE_INFO = $"浠ヤ笅鐗╂枡涓婃枡瀹屾垚锛歿string.Join(",", CurAssembly.Items.Select(q => $"{q.ItemInfo.ITEM_NAME}({q.ItemInfo.ITEM_CODE})"))}", }; wipActs.Add(wipAct); diff --git a/Tiger.IBusiness/Common/IStep.cs b/Tiger.IBusiness/Common/IStep.cs index ec2bde1..f2a7454 100644 --- a/Tiger.IBusiness/Common/IStep.cs +++ b/Tiger.IBusiness/Common/IStep.cs @@ -56,6 +56,11 @@ /// </summary> /// <returns></returns> public abstract ApiAction<OutputT> End(InputT input); + /// <summary> + /// 鑾峰彇宸ユ褰撳墠鑰楁椂 + /// </summary> + /// <returns></returns> + public TimeSpan GetElapsedTime(); #endregion Functions } diff --git a/Tiger.Model.Net/Entitys/MES/MES_WIP_ACT.cs b/Tiger.Model.Net/Entitys/MES/MES_WIP_ACT.cs index ac6713f..69ea248 100644 --- a/Tiger.Model.Net/Entitys/MES/MES_WIP_ACT.cs +++ b/Tiger.Model.Net/Entitys/MES/MES_WIP_ACT.cs @@ -204,6 +204,11 @@ [DisplayName("澶囨敞")] public string REMARK { get; set; } /// <summary> + /// 鎿嶄綔鑰楁椂(s) + /// </summary> + [DisplayName("鎿嶄綔鑰楁椂(ms)")] + public long ELAPSED_TIME { get; set; } = 0; + /// <summary> /// 杩芥函淇℃伅 /// </summary> [DisplayName("杩芥函淇℃伅")] diff --git a/Tiger.Model.Net/Entitys/MES/MES_WIP_HIS.cs b/Tiger.Model.Net/Entitys/MES/MES_WIP_HIS.cs index a3e3f33..d38e16b 100644 --- a/Tiger.Model.Net/Entitys/MES/MES_WIP_HIS.cs +++ b/Tiger.Model.Net/Entitys/MES/MES_WIP_HIS.cs @@ -292,6 +292,11 @@ [DisplayName("澶囨敞")] public string REMARK { get; set; } /// <summary> + /// 鎿嶄綔鑰楁椂(s) + /// </summary> + [DisplayName("鎿嶄綔鑰楁椂(ms)")] + public long ELAPSED_TIME { get; set; } = 0; + /// <summary> /// 杩芥函淇℃伅 /// </summary> [DisplayName("杩芥函淇℃伅")] -- Gitblit v1.9.3