From 545bc1c267a939cf3259afcda1ba60feedd7e7eb Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期五, 11 十月 2024 20:15:25 +0800 Subject: [PATCH] 更新工序自动更新工单状态 --- Tiger.Business.MES/WorkAction/PackingAction.cs | 136 +++++++++++++++++++++++++++++++++++--------- 1 files changed, 107 insertions(+), 29 deletions(-) diff --git a/Tiger.Business.MES/WorkAction/PackingAction.cs b/Tiger.Business.MES/WorkAction/PackingAction.cs index 09fad06..b296a5a 100644 --- a/Tiger.Business.MES/WorkAction/PackingAction.cs +++ b/Tiger.Business.MES/WorkAction/PackingAction.cs @@ -1,4 +1,5 @@ -锘縰sing Rhea.Common; +锘縰sing Microsoft.CodeAnalysis.Differencing; +using Rhea.Common; using SqlSugar; using System; using System.Collections.Generic; @@ -31,6 +32,7 @@ public Dictionary<int, BAS_LABEL_TEMP> LabelDic { get; set; } = new(); public List<BAS_LABEL_PV> LabelPV { get; set; } = new(); public int FinishLevel = 0; + private bool IsManually => CurStep.IsNullOrEmpty(); #endregion Propertys & Variables #region Functions @@ -181,8 +183,20 @@ action.LocaleMsg = GetBeginMsg(); var min = PkgRule.Details.OrderBy(q => q.PKG_LEVEL).First(); + if (min.PKG_LEVEL == CurPkg.Item.PKG_LEVEL && CurPkg.NeedWeighing) + { + var data = new PackingActionOutput() { PkgInfo = CurPkg }; + data.ExecCode = "Weighing"; + data.PkgLevel = min.PKG_LEVEL; + CurCmd = data; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("涓婄О绉伴噸")); + action.Data.Data = data; + action.Data.ShortMsg = new("涓婄О绉伴噸", ShortMessage.Types.Success); + //action.LocaleMsg = new($"璇锋妸澶栧寘瑁呬笂绉扮О閲�"); + action.LocaleMsg = new("MES.WorkAction.PackingAction.PleaseWeighing"); + } //鏍规嵁鍖呰涓嶅悓灞傜骇鐨勬爣绛炬ā鏉夸唬鐮侊紝濡傛灉涓虹┖鍒欎笉闇�瑕佹墦鍗� - if (LabelDic[min.PKG_LEVEL].IsNullOrEmpty()) + else if (LabelDic[min.PKG_LEVEL].IsNullOrEmpty()) { input.Data = new PackingActionInput() { @@ -196,7 +210,7 @@ else { //璁剧疆鎵撳嵃鍙橀噺鍊� - LabelDic[min.PKG_LEVEL] = CurPosition.SetLabelVariables(LabelPV, LabelDic[min.PKG_LEVEL]); + LabelDic[min.PKG_LEVEL] = CurPosition.SetLabelVariables(LabelPV, LabelDic[min.PKG_LEVEL], this); var data = new PackingActionOutput() { PkgInfo = CurPkg }; data.ExecCode = "Print"; @@ -205,6 +219,7 @@ CurCmd = data; PrintTimes++; CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("鎵撳嵃鏍囩")); + action.IsSuccessed = true; action.Data.Data = data; action.Data.ShortMsg = new("鎵撳嵃鏍囩", ShortMessage.Types.Normal); //action.LocaleMsg = new Locale($"寮�濮嬬{PrintTimes}娆℃墦鍗扮{min.PKG_LEVEL}灞傚寘瑁匸{min.PkgType.PKG_NAME}]鐨勬爣绛綶{LabelDic[min.PKG_LEVEL]?.LABEL_CODE}: {LabelDic[min.PKG_LEVEL].LABEL_NAME}]"); @@ -212,7 +227,7 @@ } //濡傛灉杩斿洖鎴愬姛鍒欒涓哄綋鍓嶈涓哄彲浠ュ紑濮嬫墽琛岋紝鍚﹀垯杩斿洖澶辫触 - action.IsSuccessed = true; + //action.IsSuccessed = true; return action; } @@ -240,6 +255,7 @@ action.IsSuccessed = false; //action.LocaleMsg = new($"鏉$爜鎵弿澶辫触锛岃閲嶆柊鎵弿绗瑊dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛炬潯鐮�"); action.LocaleMsg = new("MES.WorkAction.PackingAction.ScanFail", dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME); + CurPosition.ResetNode(); return action; } //楠岃瘉褰撳墠鍖呰鏉$爜鏄惁宸茬粡琚壂鎻忚繃 @@ -251,17 +267,18 @@ action.IsSuccessed = false; //action.LocaleMsg = new($"鏉$爜[{pInput.PkgSN}]鏃犻渶閲嶅鎵弿锛岃鎵弿绗瑊dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛炬潯鐮�"); action.LocaleMsg = new("MES.WorkAction.PackingAction.ScanRepeat", pInput.PkgSN, dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME); + CurPosition.ResetNode(); return action; } //瀹㈡埛绔壂鎻忔垚鍔� CurCmd = null; PrintTimes = 0; action = SavePkgData(input, action); - if (action.IsSuccessed) - { - CurStep?.SetStatusMessage(StepStatus.Success, Biz.L("鎵弿鎴愬姛")); - action.Data.ShortMsg = new("鎵弿鎴愬姛", ShortMessage.Types.Success); - } + //if (action.IsSuccessed) + //{ + // CurStep?.SetStatusMessage(StepStatus.Success, Biz.L("鎵弿鎴愬姛")); + // action.Data.ShortMsg = new("鎵弿鎴愬姛", ShortMessage.Types.Success); + //} } break; //Print锛氭墦鍗帮紝鎵撳嵃褰撳墠鍖呰灞傜骇鐨勬爣绛� @@ -318,7 +335,7 @@ if (!pInput.WeightInfo.IsNullOrEmpty() && pInput.WeightInfo.Weight > 0) { //楠岃瘉閲嶉噺鏁版嵁鏄惁绗﹀悎璁剧疆濂界殑閲嶉噺鑼冨洿 - if (!PkgProd.IsNullOrEmpty() && (pInput.WeightInfo.Weight < PkgProd.MIN_WEIGHT || PkgProd.MIN_WEIGHT < pInput.WeightInfo.Weight)) + if (!PkgProd.IsNullOrEmpty() && ((pInput.WeightInfo.Weight < PkgProd.MIN_WEIGHT && !IsManually) || PkgProd.MAX_WEIGHT < pInput.WeightInfo.Weight)) { action.IsSuccessed = false; CurStep?.SetStatusMessage(StepStatus.Error, Biz.L("閲嶉噺瓒呴檺")); @@ -361,7 +378,7 @@ else { //璁剧疆鎵撳嵃鍙橀噺鍊� - LabelDic[dtl.PKG_LEVEL] = CurPosition.SetLabelVariables(LabelPV, LabelDic[dtl.PKG_LEVEL]); + LabelDic[dtl.PKG_LEVEL] = CurPosition.SetLabelVariables(LabelPV, LabelDic[dtl.PKG_LEVEL], this); var data = new PackingActionOutput() { PkgInfo = CurPkg }; data.ExecCode = "Print"; @@ -376,8 +393,6 @@ action.LocaleMsg = new Locale("MES.WorkAction.PackingAction.BeginPrint", PrintTimes, dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME, LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE, LabelDic[dtl.PKG_LEVEL].LABEL_NAME); } } - - } else { @@ -432,8 +447,20 @@ //鎵嬪姩缁撴潫鍖呰榛樿浠庣浜屽眰鍖呰寮�濮嬮獙璇� var dtl = PkgRule.Details.First(q => q.PKG_LEVEL == 2); - //琛屼负璁惧畾鐨凮PTION_1-9鏄寘瑁呬笉鍚屽眰绾х殑鏍囩妯℃澘浠g爜锛屽鏋滀负绌哄垯涓嶉渶瑕佹墦鍗� - if (LabelDic[dtl.PKG_LEVEL].IsNullOrEmpty()) + if (dtl.PKG_LEVEL == CurPkg.Item.PKG_LEVEL && CurPkg.NeedWeighing) + { + var data = new PackingActionOutput() { PkgInfo = CurPkg }; + data.ExecCode = "Weighing"; + data.PkgLevel = dtl.PKG_LEVEL; + CurCmd = data; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("涓婄О绉伴噸")); + action.Data.Data = data; + action.Data.ShortMsg = new("涓婄О绉伴噸", ShortMessage.Types.Success); + //action.LocaleMsg = new($"璇锋妸澶栧寘瑁呬笂绉扮О閲�"); + action.LocaleMsg = new("MES.WorkAction.PackingAction.PleaseWeighing"); + } + //鏍规嵁鍖呰涓嶅悓灞傜骇鐨勬爣绛炬ā鏉夸唬鐮侊紝濡傛灉涓虹┖鍒欎笉闇�瑕佹墦鍗� + else if (LabelDic[dtl.PKG_LEVEL].IsNullOrEmpty()) { var data = new PackingActionOutput() { PkgInfo = CurPkg }; data.ExecCode = "Scan"; @@ -448,7 +475,7 @@ else { //璁剧疆鎵撳嵃鍙橀噺鍊� - LabelDic[dtl.PKG_LEVEL] = CurPosition.SetLabelVariables(LabelPV, LabelDic[dtl.PKG_LEVEL]); + LabelDic[dtl.PKG_LEVEL] = CurPosition.SetLabelVariables(LabelPV, LabelDic[dtl.PKG_LEVEL], this); var data = new PackingActionOutput() { PkgInfo = CurPkg }; data.ExecCode = "Print"; @@ -522,7 +549,18 @@ CurPkgItem.Package.OPER_CODE = CurPosition.CurWipSNs.First().OPER_CODE; CurPkgItem.Package.SEGMENT = CurPosition.CurWipSNs.First().SEGMENT; FinishLevel++; - action = SavePkgData(input, action); + //瀹屾垚鍖呰鐨勫眰绾у皬浜庢渶澶栧眰鍖呰灞傜骇 + if (FinishLevel < PkgRule.Details.Max(q => q.PKG_LEVEL)) + { + //褰撳墠澶勭悊鐨勫寘瑁呭眰绾у凡缁忓鐞嗗畬锛岀户缁線涓婁繚瀛� + action = SavePkgData(input, action); + } + //鏈�澶栧眰鍖呰宸茬粡瀹屾垚鍖呰锛屼繚瀛樺寘瑁呮暟鎹埌鏁版嵁搴� + else + { + CurPkg.Item = CurPkgItem; + action = CompletePkg(); + } } //澶勭悊鍏朵粬鍖呰灞傜骇鏁版嵁 else @@ -531,7 +569,27 @@ if (pInput.PkgLevel == dtl.PKG_LEVEL) { CurPkgItem.IsFinished = true; - CurPkgItem.Package = new() + CurPkgItem.Package = IsManually ? new() + { + AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG, + AUTH_PROD = CurPosition.CurLine.LINE_CODE, + SN = pInput.PkgSN, + PKG_TYPE = dtl.PkgType.PKG_NAME, + ITEM_CODE = CurPkgItem.Items.First().Package.ITEM_CODE, + QTY = CurPkgItem.Items.Sum(q => q.Package.QTY), + UNIT = dtl.PkgType.PKG_NAME, + WORK_ORDER = CurPkgItem.Items.First().Package.WORK_ORDER, + BATCH_NO = CurPkgItem.Items.First().Package.BATCH_NO, + ROT_CODE = CurPkgItem.Items.First().Package.ROT_CODE, + NODE_ID = CurPkgItem.Items.First().Package.NODE_ID, + NODE_NAME = CurPkgItem.Items.First().Package.NODE_NAME, + FTY_CODE = CurPkgItem.Items.First().Package.FTY_CODE, + WS_CODE = CurPkgItem.Items.First().Package.WS_CODE, + LINE_CODE = CurPkgItem.Items.First().Package.LINE_CODE, + POST_CODE = CurPkgItem.Items.First().Package.POST_CODE, + OPER_CODE = CurPkgItem.Items.First().Package.OPER_CODE, + SEGMENT = CurPkgItem.Items.First().Package.SEGMENT, + } : new() { AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG, AUTH_PROD = CurPosition.CurLine.LINE_CODE, @@ -597,7 +655,7 @@ CurPkgItem = curItem; //娣诲姞鏄庣粏鍚庡垽鏂綋鍓嶅寘瑁呭眰绾х殑鏄庣粏鏁伴噺鏄惁绛変簬鍖呰鏁伴噺锛岃嫢鐩哥瓑鍒欐爣璁板綋鍓嶅寘瑁呭眰绾т负瀹屾垚骞跺皾璇曟墦鍗版爣绛� - if (CurPkgItem.Items.Count(q => q.IsFinished) == CurPkgItem.PKG_QTY || CurStep.IsNullOrEmpty()) + if (CurPkgItem.Items.Count(q => q.IsFinished) == CurPkgItem.PKG_QTY || IsManually) { //鎵撳嵃鍓嶇О閲嶏細濡傛灉褰撳墠鐨勫寘瑁呮槑缁嗙殑涓婁竴灞傚寘瑁呭璞℃槸鏈�澶栧眰鍖呰涓旈渶瑕佺О閲嶆椂锛屽厛绉伴噸锛屽悎鏍煎悗鍦ㄥ彂鍗版垨鑰呮壂鎻忔渶澶栧眰鍖呰鏍囩 if (CurPkgItem.PKG_LEVEL == CurPkg.Item.PKG_LEVEL && CurPkg.NeedWeighing) @@ -630,7 +688,7 @@ else { //璁剧疆鎵撳嵃鍙橀噺鍊� - LabelDic[dtl.PKG_LEVEL] = CurPosition.SetLabelVariables(LabelPV, LabelDic[dtl.PKG_LEVEL]); + LabelDic[dtl.PKG_LEVEL] = CurPosition.SetLabelVariables(LabelPV, LabelDic[dtl.PKG_LEVEL], this); var data = new PackingActionOutput() { PkgInfo = CurPkg }; data.ExecCode = "Print"; @@ -694,6 +752,27 @@ return list; } + public List<MES_WIP_PKG> GetMinPackageList(WipPkgItem parent) + { + List<MES_WIP_PKG> list = new(); + if (parent.Items.Any()) + { + foreach (var item in parent.Items) + { + item.Package.PARENT_SN = parent.Package?.SN; + list.AddRange(GetMinPackageList(item)); + } + } + else + { + if (!parent.Package.IsNullOrEmpty()) + { + list.Add(parent.Package); + } + } + return list; + } + public ApiAction<SubmitOutput> CompletePkg() { var action = new ApiAction<SubmitOutput>(new SubmitOutput()); @@ -709,7 +788,7 @@ action.LocaleMsg = new("MES.WorkAction.PackingAction.PackageComplete", CurPkg.Item.PKG_LEVEL, CurPkg.Item.PKG_NAME); //鎵嬪姩缁撴潫鍖呰鍒欐爣璁拌涓哄畬鎴� - //if (CurStep.IsNullOrEmpty()) + //if (IsManually) //{ // IsFinished = true; //} @@ -733,7 +812,7 @@ } //涓嶆槸鎵嬪姩缁撴潫鍖呰鍒欎繚瀛樿涓烘搷浣滆褰� - if (!CurStep.IsNullOrEmpty()) + if (!IsManually) { //璁板綍琛屼负鎿嶄綔璁板綍 var wipActs = new List<MES_WIP_ACT>(); @@ -773,6 +852,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); @@ -814,10 +894,13 @@ else { var _pkgList = CurPkg.IsFinished ? GetPackageList(CurPkg.Item) : new(); + + //鏈�澶栧眰鍖呰宸茬粡瀹屾垚鍖呰锛屽垯鎶婂伐搴忎腑鏆傚瓨鏍囪璁句负false锛岀粺涓�鎻愪氦鍖呰鍐呬骇鍝佺殑杩囩珯璁板綍 + CurPosition.NeedTemporaryStoreDBCommitAction = false; //淇濆瓨鏁版嵁 - var db = Biz.Db; - var dbTran = db.UseTran(() => + CurPosition.SaveStepsCommitActionToDB(() => { + var db = CurPosition.GetCommitDB(); if (_pkgList.Any()) { db.Storageable(_pkgList, CurPosition.UserCode).ExecuteCommand(); @@ -839,11 +922,6 @@ } } }); - if (!dbTran.IsSuccess) - { - //鎶涘嚭寮傚父 - throw dbTran.ErrorException; - } } if (CurPkg.IsFinished) -- Gitblit v1.9.3