From 0c2a5ba3e7e2334f1cd69a66cc60cc0be0e4129c Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期二, 30 七月 2024 22:34:39 +0800 Subject: [PATCH] 包装工序功能以及一些一直问题的优化 --- Tiger.Business.MES/Transaction/TestNode.cs | 293 ++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 191 insertions(+), 102 deletions(-) diff --git a/Tiger.Business.MES/Transaction/TestNode.cs b/Tiger.Business.MES/Transaction/TestNode.cs index 69592af..80ca242 100644 --- a/Tiger.Business.MES/Transaction/TestNode.cs +++ b/Tiger.Business.MES/Transaction/TestNode.cs @@ -35,26 +35,27 @@ /// </summary> /// <param name="input"></param> /// <returns></returns> - public async Task<ApiAction> Submit(SubmitInput input) + public async Task<ApiAction<SubmitOutput>> Submit(SubmitInput input) { - var action = new ApiAction(); + var action = new ApiAction<SubmitOutput>(new SubmitOutput()); try { - //宸ユ鍒楄〃涓虹┖鏃讹紝璁や负闇�瑕佸厛鎵弿杩囩珯鏉$爜 - if (Steps.IsNullOrEmpty()) + //宸ユ鍒楄〃涓虹┖鎴栬�呭伐搴忚妭鐐瑰伐姝ユ湁鏈畬鎴愭椂锛屼紭鍏堝畬鎴愬伐搴忚妭鐐瑰伐姝� + if (Steps.IsNullOrEmpty() || !IsFinishNodeSteps) { //鍏堝垽鏂綋鍓嶅伐鍗曚笉涓虹┖涓斿綋鍓嶅矖浣嶅湪褰撳墠宸ュ崟鏄笉鏄绔欙紝濡傛灉鏄垯涓嶅厑璁稿彉鏇村綋鍓嶅伐鍗曪紝灏濊瘯鎶婃潯鐮佺粦瀹氬埌褰撳墠宸ュ崟 if (!CurBatch.IsNullOrEmpty() && CurBatch.IsFirstNode(PostCode)) { - action = ScanSn(action, input); + action = NodeSubmit(action, input); return action; } //褰撳墠宀椾綅鍦ㄥ綋鍓嶅伐鍗曚笉鏄绔欙紝鍒欐煡鎵炬潯鐮佸凡缁戝畾鐨勫伐鍗曞綋浣滃綋鍓嶅伐鍗� else { - var wosn = Biz.Db.Queryable<BIZ_MES_WO_BATCH, BIZ_MES_WO_SN>((b, s) => new JoinQueryInfos(JoinType.Inner, b.ORDER_NO == s.WORK_ORDER)).ByAuth(input.AuthOption) - .Where((b, s) => s.SN == input.SN && b.ACT_LINE == CurLine.LINE_CODE && (b.STATUS == BIZ_MES_WO_BATCH.STATUSs.Release.GetValue() || b.STATUS == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue())) - .Select((b, s) => new { Batch = b, SN = s }).First(); + var wosn = Biz.Db.Queryable<BIZ_MES_WO_BATCH, BIZ_MES_WO_SN>((q, s) => new JoinQueryInfos(JoinType.Inner, q.ORDER_NO == s.WORK_ORDER)) + .ByAuth(input.AuthOption) + .Where((q, s) => s.SN == input.SN && q.ACT_LINE == CurLine.LINE_CODE && (q.STATUS == BIZ_MES_WO_BATCH.STATUSs.Release.GetValue() || q.STATUS == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue())) + .Select((q, s) => new { Batch = q, SN = s }).First(); //鏌ユ壘鍒版潯鐮佸凡缁戝畾鐨勫伐鍗� if (!wosn.IsNullOrEmpty()) { @@ -64,12 +65,13 @@ var result = await SelectOrder(new() { AuthOption = input.AuthOption, OrderNo = wosn.Batch.ORDER_NO }); if (!result.IsSuccessed) { - action = result; + action.IsSuccessed = result.IsSuccessed; + action.LocaleMsg = result.LocaleMsg; return action; } } //鏉$爜杩囩珯 - action = ScanSn(action, input); + action = NodeSubmit(action, input); return action; } //鏌ユ壘涓嶅埌鏉$爜宸茬粦瀹氱殑宸ュ崟 @@ -95,20 +97,47 @@ } } //瀹屾垚绗竴姝ワ紝鍚庡紑濮嬫墽琛屽綋鍓嶅伐搴忕殑琛屼负鍒楄〃 - else if (Steps.First().IsFinished && !IsFinishAllSteps) + //瀹屾垚宸ュ簭鑺傜偣宸ユ鍚庯紝鍚庡紑濮嬫墽琛屽綋鍓嶅伐搴忕殑琛屼负宸ユ + else if (IsFinishNodeSteps && !IsFinishAllSteps) { - var curStep = Steps.Where(q => q.ID == input.StepID).FirstOrDefault(); - if (!curStep.IsNullOrEmpty()) + var submitStep = Steps.Where(q => q.ID == input.CurStepID && !q.IsFinished).FirstOrDefault(); + if (submitStep.IsNullOrEmpty()) { - var result = curStep.Submit(input); - result.Data.StepID = curStep.ID; - result.Data.IsFinished = IsFinishAllSteps; - result.Data.CurStep = CurStep; + action = BeginNextActionStep(input); + return action; + } + else + { + var result = submitStep.Submit(input); + //濡傛灉褰撳墠宸ユ宸插畬鎴愶紝寮�濮嬫墽琛屼笅涓�宸ユ + if (result.IsSuccessed && submitStep.IsFinished) + { + result = BeginNextActionStep(input); + } + //濡傛灉褰撳墠宸ユ鏈畬鎴� + else + { + //琛屼负鎵ц鍑洪敊锛屽伐姝ヨ閲嶇疆 + if (Steps.IsNullOrEmpty()) + { + result.LocaleMsg = new(Biz.T(result.LocaleMsg, input.Locale) + Biz.T(Biz.L("MES.Transaction.Position.RescanSN"), input.Locale)); + } + else + { + result.Data.IsFinished = IsFinishAllSteps; + result.Data.CurWO = CurBatch.WO.ORDER_NO; + result.Data.CurBatch = CurBatch.Batch.BATCH_NO; + result.Data.CurNode = CurStep?.NodeAct.ACT_NAME; + result.Data.StepActCode = CurStep?.NodeAct.ACT_CODE; + result.Data.NextStepID = CurStep?.ID; + } + } + //濡傛灉鎵�鏈夊伐姝ラ兘瀹屾垚 if (IsFinishAllSteps) { - return DoIfFinishAllSteps(result.ToApiAction()); + return DoIfFinishAllSteps(result); } - return result.ToApiAction(); + return result; } } //娌℃湁鍙墽琛岀殑宸ユ @@ -125,31 +154,24 @@ } /// <summary> - /// 鎵弿杩囩珯鏉$爜 + /// 宸ュ簭鑺傜偣宸ユ鎻愪氦鏁版嵁 /// </summary> /// <param name="action"></param> /// <param name="input"></param> /// <returns></returns> - public ApiAction ScanSn(ApiAction action, SubmitInput input) + public ApiAction<SubmitOutput> NodeSubmit(ApiAction<SubmitOutput> action, SubmitInput input) { try { - //缁戝畾鏉$爜鍒板伐鍗� - if (!CurBatch.WoSNs.Any(q => q.SN == input.SN)) - { - CurBatch.WoSNs.Add(new() - { - WORK_ORDER = CurBatch.Batch.ORDER_NO, - SN = input.SN, - STATUS = BIZ_MES_WO_SN.STATUSs.NotInput.GetValue(), - BATCH_NO = CurBatch.Batch.BATCH_NO, - }); - } - var woSN = CurBatch.WoSNs.FirstOrDefault(q => q.SN == input.SN); var curNode = CurBatch.GetNode(PostCode); - - //鏉$爜杩囩珯 - var wipSN = Biz.Db.Queryable<MES_WIP_DATA>().First(q => q.SN == input.SN && q.BATCH_NO == CurBatch.Batch.BATCH_NO) ?? new MES_WIP_DATA() + //鍒ゆ柇宸ュ崟瀹炴椂鐘舵�佸垽鏂� + var woStatus = CurBatch.CheckStatus(); + if (!woStatus.IsSuccessed) + { + return woStatus; + } + //闈炴硶杩囩珯闃插憜锛氳繘鍏ュ伐搴忔椂瑕佸鍔犲垽鏂潯鐮佹槸鍚︽寜娴佺▼杩囩珯 + var wipSN = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().First(q => q.SN == input.SN && q.WORK_ORDER == CurBatch.WO.ORDER_NO) ?? new MES_WIP_DATA() { SN = input.SN, STATUS = MES_WIP_DATA.STATUSs.Init.GetValue(), @@ -163,90 +185,157 @@ DFT_FLAG = "N", DFT_COUNT = 0, }; - wipSN.AUTH_PROD = CurLine.LINE_CODE; - wipSN.STATUS = wipSN.STATUS > 0 ? MES_WIP_DATA.STATUSs.OK.GetValue() : wipSN.STATUS; - wipSN.ROT_CODE = CurBatch.WO.ROUTE_CODE; - wipSN.NODE_ID = curNode.ID; - wipSN.NODE_NAME = curNode.NODE_NAME; - wipSN.FTY_CODE = CurFactory.FTY_CODE; - wipSN.WS_CODE = CurWorkshop.WS_CODE; - wipSN.LINE_CODE = CurLine.LINE_CODE; - wipSN.POST_CODE = CurPosition.POST_CODE; - wipSN.OPER_CODE = curNode.OPER_CODE; - wipSN.SEGMENT = curNode.SEGMENT; - wipSN.OPERATION_TIME = DateTime.Now; - wipSN.SFTS_CODE = CurLine.SFTS_CODE; - //wipSN.SFT_CODE = CurBatch.WO.ROUTE_CODE; - //wipSN.PRD_CODE = CurBatch.WO.ROUTE_CODE; - CurBatch.StartWorking(UserCode); - - //濡傛灉鏄姇鍏ョ珯 - if (curNode.IS_INPUT == "Y") + var canGotoNext = CurBatch.CanGotoNext(input, wipSN, curNode); + if (!canGotoNext.IsSuccessed) { - woSN.STATUS = BIZ_MES_WO_SN.STATUSs.Inputed.GetValue(); - wipSN.STATUS = MES_WIP_DATA.STATUSs.Input.GetValue(); - wipSN.INLINE_DATE = DateTime.Now; - } - //濡傛灉鏄骇鍑虹珯 - if (curNode.IS_OUTPUT == "Y") - { - woSN.STATUS = BIZ_MES_WO_SN.STATUSs.Finished.GetValue(); - wipSN.STATUS = MES_WIP_DATA.STATUSs.Finished.GetValue(); - wipSN.OUTLINE_DATE = DateTime.Now; - } - //濡傛灉鏈夋彁浜や笉鑹� - if (!input.DFT_CODE.IsNullOrEmpty()) - { - wipSN.STATUS = MES_WIP_DATA.STATUSs.NG.GetValue(); - wipSN.DFT_FLAG = "Y"; - wipSN.DFT_COUNT++; - wipSN.DFT_CODE = input.DFT_CODE; + return canGotoNext; } - var wipSnHis = new MES_WIP_HIS(CurWipSN = wipSN, $"宸ュ崟[{wipSN.WORK_ORDER}]鏉$爜[{wipSN.SN}]鍦ㄥ矖浣峓{wipSN.POST_CODE}]杩囩珯宸ュ簭[{wipSN.NODE_NAME}]鎴愬姛"); - - //鍒濆鍖栧伐姝ュ垪琛� - Steps.Clear(); - var curStep = new Biz.WorkStep(curNode.ID, Biz.WorkStep.Types.Node) + //褰撳伐姝ュ垪琛ㄤ负绌猴紝鍒欐墽琛屽綋鍓嶅伐搴忕殑蹇呰閫昏緫褰撲綔绗竴涓伐搴忚妭鐐癸紝瀹屾垚鍚庢寜闇�姹傚垱寤哄悗缁殑宸ユ鍒楄〃 + if (Steps.IsNullOrEmpty()) { - Sequence = Steps.Count + 1, - Node = curNode, - DBSubmitAction = () => + //缁戝畾鏉$爜鍒板伐鍗� + if (!CurBatch.WoSNs.Any(q => q.SN == input.SN)) { - var db = GetCommitDB(); - db.Storageable(woSN, UserCode).ExecuteCommand(); - db.Storageable(wipSN, UserCode).ExecuteCommand(); - db.Storageable(wipSnHis, UserCode).ExecuteCommand(); + CurBatch.WoSNs.Add(new() + { + WORK_ORDER = CurBatch.Batch.ORDER_NO, + SN = input.SN, + STATUS = BIZ_MES_WO_SN.STATUSs.NotInput.GetValue(), + }); } - }; - Steps.Add(curStep); + var woSN = CurBatch.WoSNs.First(q => q.SN == input.SN); + woSN.AUTH_ORG = CurBatch.WO.AUTH_ORG; + woSN.AUTH_PROD = CurLine.LINE_CODE; + woSN.BATCH_NO = CurBatch.Batch.BATCH_NO; - //濡傛灉褰撳墠宸ュ簭鑺傜偣鏈夎涓哄垯娣诲姞鍒板伐姝ュ垪琛� - var acts = CurBatch.NodeActs.Where(q => q.NODE_ID == curNode.ID).ToList(); - foreach (var act in acts) - { - Steps.Add(new Biz.WorkStep(act.ID, Biz.WorkStep.Types.Action) + //鏉$爜杩囩珯 + wipSN.AUTH_ORG = CurBatch.WO.AUTH_ORG; + wipSN.AUTH_PROD = CurLine.LINE_CODE; + wipSN.STATUS = wipSN.STATUS > 0 ? MES_WIP_DATA.STATUSs.OK.GetValue() : wipSN.STATUS; + wipSN.ROT_CODE = CurBatch.WO.ROUTE_CODE; + wipSN.NODE_ID = curNode.ID; + wipSN.NODE_NAME = curNode.NODE_NAME; + wipSN.FTY_CODE = CurFactory.FTY_CODE; + wipSN.WS_CODE = CurWorkshop.WS_CODE; + wipSN.LINE_CODE = CurLine.LINE_CODE; + wipSN.POST_CODE = CurPosition.POST_CODE; + wipSN.OPER_CODE = curNode.OPER_CODE; + wipSN.SEGMENT = curNode.SEGMENT; + wipSN.OPERATION_TIME = DateTime.Now; + var curShiftPeriod = GetShiftPeriodForNow(); + if (!curShiftPeriod.IsNullOrEmpty()) { + wipSN.SFTS_CODE = curShiftPeriod.ShiftSys.SFTS_CODE; + wipSN.SFT_CODE = curShiftPeriod.Shift.SFT_CODE; + wipSN.PRD_CODE = curShiftPeriod.Period.PRD_CODE; + } + CurBatch.StartWorking(UserCode); + + //濡傛灉鏄姇鍏ョ珯 + if (curNode.IS_INPUT == "Y") + { + woSN.STATUS = BIZ_MES_WO_SN.STATUSs.Inputed.GetValue(); + wipSN.STATUS = MES_WIP_DATA.STATUSs.Input.GetValue(); + wipSN.INLINE_DATE = DateTime.Now; + } + //濡傛灉鏄骇鍑虹珯 + if (curNode.IS_OUTPUT == "Y") + { + woSN.STATUS = BIZ_MES_WO_SN.STATUSs.Finished.GetValue(); + wipSN.STATUS = MES_WIP_DATA.STATUSs.Finished.GetValue(); + wipSN.OUTLINE_DATE = DateTime.Now; + } + //濡傛灉鏈夋彁浜や笉鑹� + if (!input.DFT_CODE.IsNullOrEmpty()) + { + wipSN.STATUS = MES_WIP_DATA.STATUSs.NG.GetValue(); + wipSN.DFT_FLAG = "Y"; + wipSN.DFT_COUNT++; + wipSN.DFT_CODE = input.DFT_CODE; + } + + CurWipSNHis = new MES_WIP_HIS(CurWipSN = wipSN, $"宸ュ崟[{wipSN.WORK_ORDER}]鏉$爜[{wipSN.SN}]鍦ㄥ矖浣峓{wipSN.POST_CODE}]杩囩珯宸ュ簭[{wipSN.NODE_NAME}]鎴愬姛"); + + //鍒濆鍖栧伐姝ュ垪琛� + Steps.Clear(); + var curStep = new Biz.WorkStep(IWorkStep.Types.Node, this) + { + NodeID = curNode.ID, Sequence = Steps.Count + 1, Node = curNode, - NodeAct = act, - Setting = CurBatch.ActionSets.FirstOrDefault(q => q.ACT_ID == act.ID), - }); + DBSubmitAction = () => + { + var db = GetCommitDB(); + db.Storageable(woSN, UserCode).ExecuteCommand(); + db.Storageable(wipSN, UserCode).ExecuteCommand(); + db.Storageable(CurWipSNHis, UserCode).ExecuteCommand(); + } + }; + Steps.Add(curStep); + + //鏈夐渶瑕佺敤鎴锋彁浜や俊鎭垯娣诲姞宸ュ簭鑺傜偣鐨勫叾浠栧伐姝� + + //鏈�鍚庢坊鍔犲綋鍓嶅伐搴忕殑琛屼负宸ユ + GenerateSteps(curStep); + + //瀹屾垚绗竴涓伐搴忚妭鐐瑰伐姝� + curStep.IsFinished = true; + CurStep = curStep; + } + else if (!IsFinishNodeSteps) + { + var curStep = Steps.Where(q => q.Type == IWorkStep.Types.Node && !q.IsFinished).OrderBy(q => q.Sequence).First(); + + //瀹屾垚褰撳墠宸ュ簭鑺傜偣宸ユ + curStep.IsFinished = true; + CurStep = curStep; } //鏈畬鎴愭墍鏈夊伐姝� if (!IsFinishAllSteps) { - var next = Steps.Where(q => !q.IsFinished).OrderBy(q => q.Sequence).First(); - var result = next.Begin(this); - result.Data.StepID = next.ID; - result.Data.IsFinished = IsFinishAllSteps; - result.Data.CurStep = CurStep; - return result.ToApiAction(); + var result = new ApiAction<SubmitOutput>(new SubmitOutput()); + //鏈畬鎴愭墍鏈夊伐搴忚妭鐐瑰伐姝� + if (!IsFinishNodeSteps) + { + var next = Steps.Where(q => q.Type == IWorkStep.Types.Node && !q.IsFinished).OrderBy(q => q.Sequence).First(); + //璁剧疆鍚庣画鍙墽琛岀殑宸ユ鍒楄〃 + NextSteps.Clear(); + NextSteps.Add(next); + //鏍规嵁鍚庣画宸ユ杩斿洖ApiAction + result.Data.IsFinished = IsFinishAllSteps; + result.Data.CurWO = CurBatch.WO.ORDER_NO; + result.Data.CurBatch = CurBatch.Batch.BATCH_NO; + result.Data.CurNode = CurStep?.Node.NODE_NAME; + result.Data.NextStepID = next.ID; + + //鏍规嵁宸ュ簭鑺傜偣宸ユ鐨勫簭鍙疯繑鍥炵浉搴旂殑鎿嶄綔鎻愮ず + switch (next.Sequence) + { + case 2: + //action.LocaleMsg = new($"璇锋墽琛岀浜屾"); + result.LocaleMsg = new("MES.Transaction.TestNode.绗簩姝ユ搷浣滄彁绀�"); + break; + default: + break; + } + } + //宸插畬鎴愭墍鏈夊伐搴忚妭鐐瑰伐姝ワ紝寮�濮嬫墽琛岃涓哄伐姝� + else + { + result = BeginNextActionStep(input); + } + return result; } //宸插畬鎴愭墍鏈夊伐姝� else { + action.Data.IsFinished = IsFinishAllSteps; + action.Data.CurWO = CurBatch.WO.ORDER_NO; + action.Data.CurBatch = CurBatch.Batch.BATCH_NO; + action.Data.CurNode = CurStep?.Node.NODE_NAME; + action.Data.NextStepID = ""; action = DoIfFinishAllSteps(action); } } @@ -263,7 +352,7 @@ /// </summary> /// <param name="action"></param> /// <returns></returns> - public ApiAction DoIfFinishAllSteps(ApiAction action) + public ApiAction<SubmitOutput> DoIfFinishAllSteps(ApiAction<SubmitOutput> action) { //淇濆瓨鏁版嵁搴� var dbTran = GetCommitDB().UseTran(() => -- Gitblit v1.9.3