From 4ad0c3cfa27e9562217e517d62173bf97759f68e Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期五, 02 八月 2024 21:12:52 +0800 Subject: [PATCH] 增加工单生产判断 --- Tiger.Business.MES/Transaction/PackingNode.cs | 514 ++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 347 insertions(+), 167 deletions(-) diff --git a/Tiger.Business.MES/Transaction/PackingNode.cs b/Tiger.Business.MES/Transaction/PackingNode.cs index 0ef8263..5a3b770 100644 --- a/Tiger.Business.MES/Transaction/PackingNode.cs +++ b/Tiger.Business.MES/Transaction/PackingNode.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using Tiger.Model; using Tiger.Model.Entitys.MES.Position; +using Tiger.Business.MES.WorkAction; namespace Tiger.Business.MES.Transaction { @@ -26,7 +27,14 @@ } #region Propertys & Variables - + /// <summary> + /// 宸ュ簭褰撳墠鎵ц鐨勬寚浠や唬鐮侊紝鍖呮嫭锛�<br/> + /// {null or ""}锛氬伐搴忕┖闂诧紝鎸囦护涓虹┖鍒欒涓哄伐搴忔病鏈夋墽琛屼换浣曟寚浠�<br/> + /// NodeSubmit锛氫骇鍝佽繃绔欙紝姝e父浜у搧杩囩珯閫昏緫<br/> + /// PkgSubmit锛氭墜鍔ㄧ粨鏉熷寘瑁咃紝鎵嬪姩淇濆瓨鏆傚瓨鐨勫寘瑁呮暟鎹�<br/> + /// </summary> + public string NodeCmd { get; set; } + public PackingAction TempPkgAction { get; set; } #endregion Propertys & Variables #region Functions @@ -35,122 +43,162 @@ /// </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()) + //PkgSubmit锛氭墜鍔ㄧ粨鏉熷寘瑁咃紝鎵嬪姩淇濆瓨鏆傚瓨鐨勫寘瑁呮暟鎹� + if (NodeCmd == "PkgSubmit") { - //鍏堝垽鏂綋鍓嶅伐鍗曚笉涓虹┖涓斿綋鍓嶅矖浣嶅湪褰撳墠宸ュ崟鏄笉鏄绔欙紝濡傛灉鏄垯涓嶅厑璁稿彉鏇村綋鍓嶅伐鍗曪紝灏濊瘯鎶婃潯鐮佺粦瀹氬埌褰撳墠宸ュ崟 - if (!CurBatch.IsNullOrEmpty() && CurBatch.IsFirstNode(PostCode)) - { - action = ScanSn(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(); - //鏌ユ壘鍒版潯鐮佸凡缁戝畾鐨勫伐鍗� - if (!wosn.IsNullOrEmpty()) - { - if (CurBatch?.Batch?.ORDER_NO != wosn.Batch.ORDER_NO) - { - //鏉$爜宸茬粦瀹氱殑宸ュ崟涓嶇瓑浜庡綋鍓嶅伐鍗曞垯閲嶆柊閫夋嫨宸ュ崟 - var result = await SelectOrder(new() { AuthOption = input.AuthOption, OrderNo = wosn.Batch.ORDER_NO }); - if (!result.IsSuccessed) - { - action = result; - return action; - } - } - //鏉$爜杩囩珯 - action = ScanSn(action, input); - return action; - } - //鏌ユ壘涓嶅埌鏉$爜宸茬粦瀹氱殑宸ュ崟 - else - { - //娌℃湁褰撳墠宸ュ崟锛屽垯鍏堥�夋嫨宸ュ崟鍚庡啀鎵弿鏉$爜 - if (CurBatch.IsNullOrEmpty()) - { - action.IsSuccessed = false; - action.LocaleMsg = new($"鏈�夋嫨宸ュ崟锛岃鍏堥�夋嫨瑕佺敓浜х殑宸ュ崟"); - //action.LocaleMsg = new("MES.Transaction.PackingNode.Submit.NotSelectOrderException"); - return action; - } - //鏈夊綋鍓嶅伐鍗曚笖涓嶆槸鎶曞叆锛屽垯鎻愮ず鏉$爜鏈姇鍏ョ敓浜э紝璇峰厛鍘婚绔欐壂鎻� - else - { - action.IsSuccessed = false; - action.LocaleMsg = new($"鏉$爜[{input.SN}]灏氭湭鎶曞叆鐢熶骇锛岃鍏堝幓棣栫珯鎵弿", input.SN); - //action.LocaleMsg = new("MES.Transaction.PackingNode.Submit.NotInputException", input.SN); - return action; - } - } - } - } - //瀹屾垚绗竴姝ワ紝鍚庡紑濮嬫墽琛屽綋鍓嶅伐搴忕殑琛屼负鍒楄〃 - else if(Steps.First().IsFinished && !IsFinishAllSteps) - { - //var curStep = Steps.Where(q => !q.IsFinished).OrderBy(q => q.Sequence).First(); - var curStep = Steps.Where(q => q.ID == input.StepID).FirstOrDefault(); - if (!curStep.IsNullOrEmpty()) + action = TempPkgAction.Submit(input); + //濡傛灉琛屼负琚爣璁版垚宸插畬鎴愶紝鍒欓噸缃伐搴� + if (TempPkgAction.IsFinished) { - var result = curStep.Submit(input); - result.Data.StepID = curStep.ID; - result.Data.IsFinished = IsFinishAllSteps; - result.Data.CurStep = CurStep; - if (IsFinishAllSteps) - { - return DoIfFinishAllSteps(result.ToApiAction()); - } - return result.ToApiAction(); + ResetNode(); } + return action; } - //娌℃湁鍙墽琛岀殑宸ユ - ResetSteps(); - action.IsSuccessed = false; - action.LocaleMsg = new($"宀椾綅[{CurPosition.POST_CODE}]宸ユ鎵ц寮傚父锛岃閲嶆柊鎵弿浜у搧鏉$爜", CurPosition.POST_CODE); - //action.LocaleMsg = new("MES.Transaction.PackingNode.Submit.WorkStepException", CurPosition.POST_CODE); + //NodeSubmit锛氫骇鍝佽繃绔欙紝姝e父浜у搧杩囩珯閫昏緫 + else + { + NodeCmd = "NodeSubmit"; + //宸ユ鍒楄〃涓虹┖鎴栬�呭伐搴忚妭鐐瑰伐姝ユ湁鏈畬鎴愭椂锛屼紭鍏堝畬鎴愬伐搴忚妭鐐瑰伐姝� + if (Steps.IsNullOrEmpty() || !IsFinishNodeSteps) + { + //鍏堝垽鏂綋鍓嶅伐鍗曚笉涓虹┖涓斿綋鍓嶅矖浣嶅湪褰撳墠宸ュ崟鏄笉鏄绔欙紝濡傛灉鏄垯涓嶅厑璁稿彉鏇村綋鍓嶅伐鍗曪紝灏濊瘯鎶婃潯鐮佺粦瀹氬埌褰撳墠宸ュ崟 + if (!CurBatch.IsNullOrEmpty() && CurBatch.IsFirstNode(PostCode)) + { + action = NodeSubmit(action, input); + return action; + } + //褰撳墠宀椾綅鍦ㄥ綋鍓嶅伐鍗曚笉鏄绔欙紝鍒欐煡鎵炬潯鐮佸凡缁戝畾鐨勫伐鍗曞綋浣滃綋鍓嶅伐鍗� + else + { + 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).Select((q, s) => new { Batch = q, SN = s }).First(); + + //鏌ユ壘鍒版潯鐮佸凡缁戝畾鐨勫伐鍗� + if (!wosn.IsNullOrEmpty()) + { + if (wosn.Batch.ACT_LINE != CurLine.LINE_CODE) + { + action.IsSuccessed = false; + //action.LocaleMsg = new($"鏉$爜[{0}]宸插湪浜х嚎[{1}]鎶曞叆鐢熶骇锛岃鍦ㄦ纭矖浣嶆壂鎻�"); + action.LocaleMsg = new("MES.Transaction.PackingNode.Submit.NotCorrectLine", input.SN, wosn.Batch.ACT_LINE); + return action; + } + else + { + if (CurBatch?.Batch?.ORDER_NO != wosn.Batch.ORDER_NO) + { + //鏉$爜宸茬粦瀹氱殑宸ュ崟涓嶇瓑浜庡綋鍓嶅伐鍗曞垯閲嶆柊閫夋嫨宸ュ崟 + var result = await SelectOrder(new() { AuthOption = input.AuthOption, OrderNo = wosn.Batch.ORDER_NO }); + if (!result.IsSuccessed) + { + action.IsSuccessed = result.IsSuccessed; + action.LocaleMsg = result.LocaleMsg; + return action; + } + } + //鏉$爜杩囩珯 + action = NodeSubmit(action, input); + return action; + } + } + //鏌ユ壘涓嶅埌鏉$爜宸茬粦瀹氱殑宸ュ崟 + else + { + //娌℃湁褰撳墠宸ュ崟锛屽垯鍏堥�夋嫨宸ュ崟鍚庡啀鎵弿鏉$爜 + if (CurBatch.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = new($"鏈�夋嫨宸ュ崟锛岃鍏堥�夋嫨瑕佺敓浜х殑宸ュ崟"); + action.LocaleMsg = new("MES.Transaction.PackingNode.Submit.NotSelectOrderException"); + return action; + } + //鏈夊綋鍓嶅伐鍗曚笖涓嶆槸鎶曞叆锛屽垯鎻愮ず鏉$爜鏈姇鍏ョ敓浜э紝璇峰厛鍘婚绔欐壂鎻� + else + { + action.IsSuccessed = false; + //action.LocaleMsg = new($"鏉$爜[{input.SN}]灏氭湭鎶曞叆鐢熶骇锛岃鍏堝幓棣栫珯鎵弿", input.SN); + action.LocaleMsg = new("MES.Transaction.PackingNode.Submit.NotInputException", input.SN); + return action; + } + } + } + } + //瀹屾垚宸ュ簭鑺傜偣宸ユ鍚庯紝鍚庡紑濮嬫墽琛屽綋鍓嶅伐搴忕殑琛屼负宸ユ + else if (IsFinishNodeSteps && !IsFinishAllSteps) + { + var submitStep = Steps.Where(q => q.ID == input.CurStepID && !q.IsFinished).FirstOrDefault(); + if (submitStep.IsNullOrEmpty()) + { + 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.SetValue(CurBatch, CurStep, CurStep?.ID, IsFinishAllSteps); + } + } + //濡傛灉鎵�鏈夊伐姝ラ兘瀹屾垚 + if (IsFinishAllSteps) + { + return DoIfFinishAllSteps(result); + } + return result; + } + } + //娌℃湁鍙墽琛岀殑宸ユ + ResetNode(); + action.IsSuccessed = false; + //action.LocaleMsg = new($"宀椾綅[{CurPosition.POST_CODE}]宸ユ鎵ц寮傚父锛岃閲嶆柊鎵弿浜у搧鏉$爜", CurPosition.POST_CODE); + action.LocaleMsg = new("MES.Transaction.PackingNode.Submit.WorkStepException", CurPosition.POST_CODE); + } } catch (Exception ex) { - action.CatchExceptionWithLog(ex, $"鍖呰宸ュ簭锛氭壂鎻忎骇鍝佹潯鐮佸紓甯�"); + action.CatchExceptionWithLog(ex, $"鍖呰宸ュ簭锛氭彁浜ゆ搷浣滄暟鎹紓甯�"); } return action; } /// <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.CheckCanProduce(curNode); + 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(), @@ -164,96 +212,167 @@ 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}]杩囩珯鎴愬姛锛岀姸鎬乕{wipSN.STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()}]"); - - //鍒濆鍖栧伐姝ュ垪琛� - Steps.Clear(); - var curStep = new Biz.WorkStep(curNode.ID, Biz.WorkStep.Types.Node) { - Sequence = Steps.Count + 1, - Node = curNode, - DBSubmitAction = () => + //褰撳伐姝ュ垪琛ㄤ负绌猴紝鍒欐墽琛屽綋鍓嶅伐搴忕殑蹇呰閫昏緫褰撲綔绗竴涓伐搴忚妭鐐癸紝瀹屾垚鍚庢寜闇�姹傚垱寤哄悗缁殑宸ユ鍒楄〃 + if (Steps.IsNullOrEmpty()) + { + //缁戝畾鏉$爜鍒板伐鍗� + 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(), + }); + } + 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; + + //鏉$爜杩囩珯 + 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()) { - var db = GetCommitDB(); - db.Storageable(woSN, UserCode).ExecuteCommand(); - db.Storageable(wipSN, UserCode).ExecuteCommand(); - db.Storageable(wipSnHis, UserCode).ExecuteCommand(); + wipSN.SFTS_CODE = curShiftPeriod.ShiftSys.SFTS_CODE; + wipSN.SFT_CODE = curShiftPeriod.Shift.SFT_CODE; + wipSN.PRD_CODE = curShiftPeriod.Period.PRD_CODE; } - }; - Steps.Add(curStep); - - //濡傛灉褰撳墠宸ュ簭鑺傜偣鏈夎涓哄垯娣诲姞鍒板伐姝ュ垪琛� - 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) + 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}]杩囩珯鎴愬姛锛岀姸鎬乕{wipSN.STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()}]"); + + //鍒濆鍖栧伐姝ュ垪琛� + Steps.Clear(); + var curStep = new Biz.WorkStep(IWorkStep.Types.Node, this) { - Sequence = Steps.Count + 1, - Node = curNode, - NodeAct = act, - Setting = CurBatch.ActionSets.FirstOrDefault(q => q.ACT_ID == act.ID), - }); + Sequence = Steps.Count + 1, + Node = curNode, + DBSubmitAction = () => + { + var db = GetCommitDB(); + db.Storageable(woSN, UserCode).ExecuteCommand(); + db.Storageable(wipSN, UserCode).ExecuteCommand(); + db.Storageable(CurWipSNHis, UserCode).ExecuteCommand(); + //濡傛灉鏄姇鍏ョ珯 + if (curNode.IS_INPUT == "Y") + { + db.Updateable<BIZ_MES_WO>().SetColumns(q => q.INPUT_QTY == q.INPUT_QTY + 1).Where(q => q.ORDER_NO == CurBatch.WO.ORDER_NO).ExecuteCommand(); + db.Updateable<BIZ_MES_WO_BATCH>().SetColumns(q => q.INPUT_QTY == q.INPUT_QTY + 1).Where(q => q.BATCH_NO == CurBatch.Batch.BATCH_NO).ExecuteCommand(); + } + //濡傛灉鏄骇鍑虹珯 + if (curNode.IS_OUTPUT == "Y") + { + db.Updateable<BIZ_MES_WO>().SetColumns(q => q.OUTPUT_QTY == q.OUTPUT_QTY + 1).Where(q => q.ORDER_NO == CurBatch.WO.ORDER_NO).ExecuteCommand(); + db.Updateable<BIZ_MES_WO_BATCH>().SetColumns(q => q.OUTPUT_QTY == q.OUTPUT_QTY + 1).Where(q => q.BATCH_NO == CurBatch.Batch.BATCH_NO).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.SetValue(CurBatch, CurStep, next.ID, IsFinishAllSteps); + + //鏍规嵁宸ュ簭鑺傜偣宸ユ鐨勫簭鍙疯繑鍥炵浉搴旂殑鎿嶄綔鎻愮ず + switch (next.Sequence) + { + case 2: + //action.LocaleMsg = new($"璇锋墽琛岀浜屾"); + result.LocaleMsg = new("MES.Transaction.CollectNode.绗簩姝ユ搷浣滄彁绀�"); + break; + default: + break; + } + } + //宸插畬鎴愭墍鏈夊伐搴忚妭鐐瑰伐姝ワ紝寮�濮嬫墽琛岃涓哄伐姝� + else + { + result = BeginNextActionStep(input); + } + return result; } //宸插畬鎴愭墍鏈夊伐姝� else { + action.Data.SetValue(CurBatch, CurStep, "", IsFinishAllSteps); action = DoIfFinishAllSteps(action); } } catch (Exception ex) { - ResetSteps(); - action.CatchExceptionWithLog(ex, $"鍖呰宸ュ簭锛氭壂鎻忎骇鍝佹潯鐮佸紓甯�"); + ResetNode(); + action.CatchExceptionWithLog(ex, $"鍖呰宸ュ簭锛氬伐搴忚妭鐐瑰伐姝ユ彁浜ゆ暟鎹紓甯�"); } return action; } @@ -263,7 +382,7 @@ /// </summary> /// <param name="action"></param> /// <returns></returns> - public ApiAction DoIfFinishAllSteps(ApiAction action) + public ApiAction<SubmitOutput> DoIfFinishAllSteps(ApiAction<SubmitOutput> action) { //淇濆瓨鏁版嵁搴� var dbTran = GetCommitDB().UseTran(() => @@ -279,12 +398,73 @@ throw dbTran.ErrorException; } //淇濆瓨鎴愬姛锛岃繑鍥炶繃绔欐秷鎭� - action.LocaleMsg = new($"宸ュ崟[{CurWipSN.WORK_ORDER}]鐨勬潯鐮乕{CurWipSN.SN}]鍦ㄥ矖浣峓{CurWipSN.POST_CODE}]宸ュ簭[{CurWipSN.NODE_NAME}]杩囩珯鎴愬姛锛岀姸鎬乕{CurWipSN.STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()}]", CurWipSN.WORK_ORDER, CurWipSN.SN, CurWipSN.POST_CODE, CurWipSN.NODE_NAME, CurWipSN.STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()); - //action.LocaleMsg = new("MES.Transaction.PackingNode.ScanSn.PassSuccess", CurWipSN.WORK_ORDER, CurWipSN.SN, CurWipSN.POST_CODE, CurWipSN.NODE_NAME CurWipSN.STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()); + //action.LocaleMsg = new($"宸ュ崟[{CurWipSN.WORK_ORDER}]鐨勬潯鐮乕{CurWipSN.SN}]鍦ㄥ矖浣峓{CurWipSN.POST_CODE}]宸ュ簭[{CurWipSN.NODE_NAME}]杩囩珯鎴愬姛锛岀姸鎬乕{CurWipSN.STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()}]", CurWipSN.WORK_ORDER, CurWipSN.SN, CurWipSN.POST_CODE, CurWipSN.NODE_NAME, CurWipSN.STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()); + action.LocaleMsg = new("MES.Transaction.PackingNode.ScanSn.PassSuccess", CurWipSN.WORK_ORDER, CurWipSN.SN, CurWipSN.POST_CODE, CurWipSN.NODE_NAME, CurWipSN.STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()); + //閲嶇疆宸ュ簭 + ResetNode(); return action; } + + /// <summary> + /// 鍖呰宸ュ簭锛氭墜鍔ㄧ粨鏉熷寘瑁� + /// </summary> + /// <returns></returns> + public async Task<ApiAction<SubmitOutput>> CompletePkg() + { + var action = new ApiAction<SubmitOutput>(new SubmitOutput()); + try + { + //PkgSubmit锛氭墜鍔ㄧ粨鏉熷寘瑁咃紝淇濆瓨鏆傚瓨鐨勫寘瑁呮暟鎹� + if (NodeCmd.IsNullOrEmpty("PkgSubmit") == "PkgSubmit") + { + if (Context.ContainsKey("CurPackage")) + { + NodeCmd = "PkgSubmit"; + + TempPkgAction = new PackingAction(); + TempPkgAction.Init(null, this, null, null); + action = TempPkgAction.Submit(null); + } + else + { + action.IsSuccessed = false; + //action.LocaleMsg = new($"鎵句笉鍒版殏瀛樼殑鍖呰鏁版嵁锛屾棤闇�鎵嬪姩缁撴潫鍖呰"); + action.LocaleMsg = new("MES.Transaction.PackingNode.NoCurPackage"); + } + } + //宸ュ簭澶勪簬鍏朵粬鍛戒护妯″紡锛屼笉鍏佽鎵嬪姩缁撴潫鍖呰 + else + { + switch (NodeCmd) + { + case "NodeSubmit": + action.IsSuccessed = false; + //action.LocaleMsg = new($"姝e湪杩涜鏉$爜[{CurWipSN.SN}]鐨勮繃绔欎笟鍔★紝涓嶅厑璁告墜鍔ㄧ粨鏉熷寘瑁�"); + action.LocaleMsg = new("MES.Transaction.PackingNode.WorkingOnNodeSubmit", CurWipSN.SN); + break; + default: + break; + } + } + } + catch (Exception ex) + { + action.CatchExceptionWithLog(ex, $"鍖呰宸ュ簭锛氭墜鍔ㄧ粨鏉熷寘瑁呭紓甯�"); + } + return action; + } + #endregion Functions + /// <summary> + /// 閲嶇疆褰撳墠宸ユ锛屾湁闇�瑕佸垯閲嶅啓姝ゆ柟娉� + /// </summary> + public override void ResetNode() + { + base.ResetNode(); + NodeCmd = null; + } + public override bool Close(bool needSaveHistoryLog = false) { //needSaveHistoryLog = true; -- Gitblit v1.9.3