From 2c453c7fdbe6cdf81353b129023a3d35f982821d Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期四, 07 十一月 2024 00:55:22 +0800 Subject: [PATCH] 重打更新 --- Tiger.Business.MES/WorkAction/PackingAction.cs | 767 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 575 insertions(+), 192 deletions(-) diff --git a/Tiger.Business.MES/WorkAction/PackingAction.cs b/Tiger.Business.MES/WorkAction/PackingAction.cs index 0beec16..45d96aa 100644 --- a/Tiger.Business.MES/WorkAction/PackingAction.cs +++ b/Tiger.Business.MES/WorkAction/PackingAction.cs @@ -1,10 +1,12 @@ -锘縰sing Rhea.Common; +锘縰sing Microsoft.CodeAnalysis.Differencing; +using Rhea.Common; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tiger.Business.MES.Transaction; using Tiger.IBusiness; using Tiger.IBusiness.MES.WorkAction; using Tiger.Model; @@ -23,18 +25,20 @@ public MES_WO_ACTION Setting { get; set; } #endregion public BAS_PKG_RULE PkgRule { get; set; } + public BAS_PKG_PROD PkgProd { get; set; } public WipPkg CurPkg { get; set; } public WipPkgItem CurPkgItem { get; set; } public PackingActionOutput CurCmd { get; set; } public int PrintTimes = 0; - public Dictionary<int, BAS_LABEL_TEMP> LabelDic { get; set; } = new(); + 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 /// <summary> - /// 鍒濆鍖栧伐搴忚涓� + /// 鍒濆鍖栧伐搴忚涓�(姝e父鏉$爜杩囩珯) /// </summary> /// <returns></returns> public void Init(IWorkStep curStep, IPosition position, MES_WO_NODE_ACT nodeAct, MES_WO_ACTION setting) @@ -45,36 +49,34 @@ NodeAct = nodeAct; Setting = setting; #endregion - //鎵嬪姩缁撴潫鍖呰涓撶敤锛屼复鏃舵墽琛岃涓� - if (setting.IsNullOrEmpty()) - { - PkgRule = Biz.Db.Queryable<BAS_PKG_RULE>().Where(q => q.RULE_CODE == setting.PKG_CODE).IncludesAllFirstLayer().IncludesAllSecondLayer(q => q.Details).First(); - } + //姝e父鏉$爜杩囩珯鎵ц鍖呰琛屼负 - else - { - PkgRule = Biz.Db.Queryable<BAS_PKG_RULE>().Where(q => q.RULE_CODE == setting.PKG_CODE).IncludesAllFirstLayer().IncludesAllSecondLayer(q => q.Details).First(); - } + PkgRule = Biz.Db.Queryable<BAS_PKG_RULE>().Where(q => q.RULE_CODE == setting.PKG_CODE).IncludesAllFirstLayer().IncludesAllSecondLayer(q => q.Details).First(); + //鏍规嵁琛屼负璁剧疆鑾峰彇澶氬眰鍖呰鐨勬爣绛炬墦鍗版ā鏉垮瓧鍏� - var codes = (Setting.OPTION_1?? "").JsonToObject<List<WipPkgItem>>(); + var codes = (Setting.OPTION_1 ?? "").JsonToObject<List<WipPkgItem>>() ?? new List<WipPkgItem>(); foreach (var code in codes) { var label = code.LABEL_CODE.IsNullOrEmpty() ? null : Biz.Db.Queryable<BAS_LABEL_TEMP>().Where(q => q.LABEL_CODE == code.LABEL_CODE).IncludesAllFirstLayer().First(); LabelDic.Add(code.PKG_LEVEL, label); } LabelPV = Biz.Db.Queryable<BAS_LABEL_PV>().ToList(); - //濡傛灉宸ュ簭涓婁笅鏂囦腑娌℃湁鍖呰璁板綍鍒欐柊寤轰竴涓紝鏈夊垯鑾峰彇褰撳墠鐨勫寘瑁呰褰� - if (CurPosition.Context.ContainsKey("CurPackage") && !CurPosition.Context["CurPackage"].IsNullOrEmpty()) + + //濡傛灉宸ュ簭涓婁笅鏂囦腑娌℃湁鍖呰璁板綍鍒欐柊寤轰竴涓紝鏈変笖鏈寘瑁呭畬鎴愬垯鑾峰彇褰撳墠鐨勫寘瑁呰褰� + if (CurPosition.Context.ContainsKey("CurPackage") && !CurPosition.Context["CurPackage"].IsNullOrEmpty() && !(CurPosition.Context["CurPackage"] as WipPkg).IsFinished) { CurPkg = (CurPosition.Context["CurPackage"] as WipPkg).Clone(); - } + } else { var max = PkgRule.Details.OrderByDescending(q => q.PKG_LEVEL).First(); - CurPkg = new WipPkg() - { - RULE_CODE = PkgRule.RULE_CODE, + CurPkg = new WipPkg() + { + WorkBatch = CurPosition.WorkBatch.Batch.BATCH_NO, + RULE_CODE = PkgRule.RULE_CODE, RULE_NAME = PkgRule.RULE_NAME, + PROD_CODE = CurPosition.WorkBatch.WO.ITEM_CODE, + CustSN = Biz.Db.Queryable<MES_CUST_SN>().Where(q => q.FLOW_SN == CurPosition.CurWipSNs.First().FLOW_SN).First(), Item = new WipPkgItem() { PKG_CODE = max.PKG_CODE, @@ -82,7 +84,8 @@ IS_MIN_PKG = max.PkgType.IS_MIN_PKG, PKG_LEVEL = max.PKG_LEVEL, PKG_QTY = max.PKG_QTY, - LABEL_CODE = LabelDic[max.PKG_LEVEL]?.LABEL_CODE, + LABEL_CODE = LabelDic.Count > max.PKG_LEVEL ? LabelDic[max.PKG_LEVEL]?.LABEL_CODE : null, + SN = CurPosition.GenerateSN(max.SN_RULE, this), } }; WipPkgItem child = null; @@ -97,7 +100,8 @@ IS_MIN_PKG = dtl.PkgType.IS_MIN_PKG, PKG_LEVEL = dtl.PKG_LEVEL, PKG_QTY = dtl.PKG_QTY, - LABEL_CODE = LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE, + LABEL_CODE = LabelDic.Count > dtl.PKG_LEVEL ? LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE : null, + SN = CurPosition.GenerateSN(dtl.SN_RULE, this), }; if (!child.IsNullOrEmpty()) { @@ -110,8 +114,54 @@ { CurPkg.Item.Items.Add(child); } - + + //鍒犻櫎宸ュ簭涓婁笅鏂囦腑鐨勫寘瑁呰褰� + if (CurPosition.Context.ContainsKey("CurPackage")) + { + CurPosition.Context.Remove("CurPackage"); + CurPosition.Context.Remove("CurLabelDic"); + } } + //鑾峰彇鏄惁鍖呰瀹屽悗闇�瑕佺О閲� + CurPkg.NeedWeighing = Setting.OPTION_2 == "Y"; + //鑾峰彇鍖呰瑙勫垯鐨勭О閲嶈寖鍥� + PkgProd = Biz.Db.Queryable<BAS_PKG_PROD>().Where(q => q.PKG_RULE_ID == PkgRule.ID && q.ITEM_CODE == CurPosition.WorkBatch.WO.ITEM_CODE).First(); + + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("璁板綍鍖呰鏁版嵁")); + } + + /// <summary> + /// 鍒濆鍖栧伐搴忚涓�(鎵嬪姩缁撴潫鍖呰涓撶敤) + /// </summary> + /// <returns></returns> + public void Init(IPosition position) + { + #region 鍥哄畾鍐欐硶锛岀粰榛樿鍙橀噺璧嬪�� + CurStep = null; + CurPosition = position; + NodeAct = null; + Setting = null; + #endregion + //鑾峰彇褰撳墠鐨勫寘瑁呰褰� + if (CurPosition.Context.ContainsKey("CurPackage") && !CurPosition.Context["CurPackage"].IsNullOrEmpty()) + { + CurPkg = (CurPosition.Context["CurPackage"] as WipPkg).Clone(); + } + else + { + throw new Exception("鎵句笉鍒板寘瑁呮暟鎹紝璇烽噸鏂版壂鎻忛渶瑕佸寘瑁呯殑浜у搧"); + } + //鎵嬪姩缁撴潫鍖呰涓撶敤锛屼复鏃舵墽琛岃涓� + PkgRule = Biz.Db.Queryable<BAS_PKG_RULE>().Where(q => q.RULE_CODE == CurPkg.RULE_CODE).IncludesAllFirstLayer().IncludesAllSecondLayer(q => q.Details).First(); + + //鏍规嵁琛屼负璁剧疆鑾峰彇澶氬眰鍖呰鐨勬爣绛炬墦鍗版ā鏉垮瓧鍏� + LabelDic = CurPosition.Context["CurLabelDic"] as Dictionary<int, BAS_LABEL_TEMP>; + LabelPV = Biz.Db.Queryable<BAS_LABEL_PV>().ToList(); + //鑾峰彇鍖呰瑙勫垯鐨勭О閲嶈寖鍥� + PkgProd = Biz.Db.Queryable<BAS_PKG_PROD>().Where(q => q.PKG_RULE_ID == PkgRule.ID && q.ITEM_CODE == CurPkg.PROD_CODE).First(); + //鎶� + + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("璁板綍鍖呰鏁版嵁")); } /// <summary> @@ -146,8 +196,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() { @@ -161,21 +223,31 @@ 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"; data.PkgLevel = min.PKG_LEVEL; data.PrintLable = LabelDic[min.PKG_LEVEL]; + data.RealPrint = data.PkgLevel != CurPkg.Item.PKG_LEVEL || CurPosition is not YadaPacking || (CurPosition as YadaPacking).IsPrintCustomerLabel; + //鎵嬪姩缁撴潫鍖呰鏃讹紝濡傛灉鏄疪ealPrint涓篺alse锛屽垯杩斿洖褰撳墠鍖呰淇℃伅鐨勫叆搴撴爣绛惧苟鎵撳嵃 + if (IsManually && !data.RealPrint && !CurPkg.InStoreLabel.IsNullOrEmpty()) + { + data.RealPrint = true; + data.PrintLable = CurPkg.InStoreLabel; + } 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}]"); action.LocaleMsg = new Locale("MES.WorkAction.PackingAction.BeginPrint", PrintTimes, min.PKG_LEVEL, min.PkgType.PKG_NAME, LabelDic[min.PKG_LEVEL]?.LABEL_CODE, LabelDic[min.PKG_LEVEL].LABEL_NAME); } //濡傛灉杩斿洖鎴愬姛鍒欒涓哄綋鍓嶈涓哄彲浠ュ紑濮嬫墽琛岋紝鍚﹀垯杩斿洖澶辫触 - action.IsSuccessed = true; + //action.IsSuccessed = true; return action; } @@ -194,22 +266,39 @@ case "Scan": if (CurCmd.IsNullOrEmpty() || CurCmd.ExecCode == "Scan" || (CurCmd.ExecCode == "Print" && CurCmd.PkgLevel == pInput.PkgLevel)) { - //瀹㈡埛绔壂鎻忔垚鍔� - if (pInput.IsFinish) - { - CurCmd = null; - PrintTimes = 0; - action = SavePkgData(input, action); - } //瀹㈡埛绔壂鎻忓け璐� - else + if (!pInput.IsFinish || pInput.PkgSN.IsNullOrEmpty()) { var dtl = PkgRule.Details.First(q => q.PKG_LEVEL == pInput.PkgLevel); + CurStep?.SetStatusMessage(StepStatus.Error, Biz.L("鎵弿閿欒")); + action.Data.ShortMsg = new("鎵弿閿欒", ShortMessage.Types.Error); 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; } + //楠岃瘉褰撳墠鍖呰鏉$爜鏄惁宸茬粡琚壂鎻忚繃 + if (CurPosition.GetPackageList(CurPkg.Item).Any(q => q.SN == pInput.PkgSN)) + { + var dtl = PkgRule.Details.First(q => q.PKG_LEVEL == pInput.PkgLevel); + CurStep?.SetStatusMessage(StepStatus.Error, Biz.L("鎵弿閿欒")); + action.Data.ShortMsg = new("鎵弿閿欒", ShortMessage.Types.Error); + 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); + //} } break; //Print锛氭墦鍗帮紝鎵撳嵃褰撳墠鍖呰灞傜骇鐨勬爣绛� @@ -226,10 +315,12 @@ data.ExecCode = "Scan"; data.PkgLevel = dtl.PKG_LEVEL; CurCmd = data; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("鎵弿鏍囩")); action.Data.Data = data; + action.Data.ShortMsg = new("鎵弿鏍囩", ShortMessage.Types.Normal); //action.LocaleMsg = new($"璇锋壂鎻忕{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛炬潯鐮�"); action.LocaleMsg = new("MES.WorkAction.PackingAction.PleaseScanLabel", dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME); - } + } //瀹㈡埛绔墦鍗板け璐� else { @@ -237,7 +328,9 @@ if (PrintTimes < 3 && !CurCmd.IsNullOrEmpty()) { PrintTimes++; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("閲嶆柊鎵撳嵃")); action.Data.Data = CurCmd; + action.Data.ShortMsg = new("閲嶆柊鎵撳嵃", ShortMessage.Types.Normal); //action.LocaleMsg = new Locale($"寮�濮媨PrintTimes}娆℃墦鍗扮{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛綶{LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE}: {LabelDic[dtl.PKG_LEVEL].LABEL_NAME}]"); 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); } @@ -245,11 +338,98 @@ { CurCmd = null; PrintTimes = 0; + CurStep?.SetStatusMessage(StepStatus.Error, Biz.L("鎵撳嵃澶辫触")); + action.Data.ShortMsg = new("鎵撳嵃澶辫触", ShortMessage.Types.Failed); action.IsSuccessed = false; //action.LocaleMsg = new($"灏濊瘯绗瑊PrintTimes}娆℃墦鍗扮{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛綶{LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE}: {LabelDic[dtl.PKG_LEVEL].LABEL_NAME}]澶辫触锛屽伐搴忓凡閲嶇疆锛岃閲嶆柊鎵弿杩涚珯浜у搧鏉$爜"); action.LocaleMsg = new("MES.WorkAction.PackingAction.PrintFail3Times", PrintTimes, dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME, LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE, LabelDic[dtl.PKG_LEVEL].LABEL_NAME); CurPosition.ResetNode(); } + } + } + break; + // Weighing锛氱О閲嶏紝瀹屾垚鍖呰鍚庡鏁翠釜鍖呰鎴愮О閲� + case "Weighing": + if (CurCmd.ExecCode == "Weighing") + { + if (!pInput.WeightInfo.IsNullOrEmpty() && pInput.WeightInfo.Weight > 0) + { + //楠岃瘉閲嶉噺鏁版嵁鏄惁绗﹀悎璁剧疆濂界殑閲嶉噺鑼冨洿 + 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("閲嶉噺瓒呴檺")); + action.Data.Data = CurCmd; + action.Data.ShortMsg = new("閲嶉噺瓒呴檺", ShortMessage.Types.Failed); + //action.LocaleMsg = new($"澶栧寘瑁呴噸閲廩{0}]瓒呭嚭浜у搧[{1}]鍦ㄥ寘瑁呰鍒橻{2}]涓殑棰勮鑼冨洿[{3} - {4}]锛岃澶勭悊鍚庨噸鏂颁笂绉扮О閲�"); + action.LocaleMsg = new("MES.WorkAction.PackingAction.PackageOverWeight", pInput.WeightInfo.Weight + pInput.WeightInfo.Unit.IsNullOrEmpty("", " " + pInput.WeightInfo.Unit), CurPosition.WorkBatch.WO.ITEM_CODE, PkgRule.RULE_NAME, PkgProd.MIN_WEIGHT + PkgProd.MIN_UNIT.IsNullOrEmpty("", " " + PkgProd.MIN_UNIT), PkgProd.MAX_WEIGHT + PkgProd.MAX_UNIT.IsNullOrEmpty("", " " + PkgProd.MAX_UNIT)); + return action; + } + + CurCmd = null; + PrintTimes = 0; + CurPkg.WeightInfo.Weight = pInput.WeightInfo.Weight; + CurPkg.WeightInfo.Unit = pInput.WeightInfo.Unit; + CurPkg.NeedWeighing = false; + + //绉伴噸鎴愬姛锛岀户缁涓� + var dtl = PkgRule.Details.FirstOrDefault(q => q.PKG_LEVEL == FinishLevel + 1); + //鏈�澶栧眰鍖呰宸插鐞嗗畬鎴愬垯鐩存帴缁撴潫琛屼负 + if (CurPkg.Item.PKG_LEVEL == FinishLevel) + { + action = End(input); + } + //鏈�澶栧眰鍖呰鏈墦鍗版壂鎻忓垯缁х画 + else + { + //濡傛灉涓虹┖鍒欎笉闇�瑕佹墦鍗� + if (LabelDic[dtl.PKG_LEVEL].IsNullOrEmpty()) + { + var data = new PackingActionOutput() { PkgInfo = CurPkg }; + data.ExecCode = "Scan"; + data.PkgLevel = dtl.PKG_LEVEL; + CurCmd = data; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("鎵弿鏍囩")); + action.Data.Data = data; + action.Data.ShortMsg = new("鎵弿鏍囩", ShortMessage.Types.Normal); + //action.LocaleMsg = new($"璇锋壂鎻忕{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛炬潯鐮�"); + action.LocaleMsg = new("MES.WorkAction.PackingAction.PleaseScanLabel", dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME); + } + else + { + //璁剧疆鎵撳嵃鍙橀噺鍊� + LabelDic[dtl.PKG_LEVEL] = CurPosition.SetLabelVariables(LabelPV, LabelDic[dtl.PKG_LEVEL], this); + + var data = new PackingActionOutput() { PkgInfo = CurPkg }; + data.ExecCode = "Print"; + data.PkgLevel = dtl.PKG_LEVEL; + data.PrintLable = LabelDic[dtl.PKG_LEVEL]; + data.RealPrint = data.PkgLevel != CurPkg.Item.PKG_LEVEL || CurPosition is not YadaPacking || (CurPosition as YadaPacking).IsPrintCustomerLabel; + //鎵嬪姩缁撴潫鍖呰鏃讹紝濡傛灉鏄疪ealPrint涓篺alse锛屽垯杩斿洖褰撳墠鍖呰淇℃伅鐨勫叆搴撴爣绛惧苟鎵撳嵃 + if (IsManually && !data.RealPrint && !CurPkg.InStoreLabel.IsNullOrEmpty()) + { + data.RealPrint = true; + data.PrintLable = CurPkg.InStoreLabel; + } + CurCmd = data; + PrintTimes++; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("鎵撳嵃鏍囩")); + action.Data.Data = data; + action.Data.ShortMsg = new("鎵撳嵃鏍囩", ShortMessage.Types.Normal); + //action.LocaleMsg = new Locale($"寮�濮嬬{PrintTimes}娆℃墦鍗扮{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛綶{LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE}: {LabelDic[dtl.PKG_LEVEL].LABEL_NAME}]"); + 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 + { + action.IsSuccessed = false; + CurStep?.SetStatusMessage(StepStatus.Error, Biz.L("绉伴噸澶辫触")); + action.Data.Data = CurCmd; + action.Data.ShortMsg = new("绉伴噸澶辫触", ShortMessage.Types.Failed); + //action.LocaleMsg = new($"澶栧寘瑁呯О閲嶆暟鎹紓甯革紝璇烽噸鏂颁笂绉扮О閲�"); + action.LocaleMsg = new("MES.WorkAction.PackingAction.PleaseWeighingAgain"); + return action; } } break; @@ -259,7 +439,23 @@ { CurCmd = null; PrintTimes = 0; - action = End(); + //鎵撳嵃鍚庣О閲� + if (CurPkg.NeedWeighing) + { + var data = new PackingActionOutput() { PkgInfo = CurPkg }; + data.ExecCode = "Weighing"; + data.PkgLevel = CurPkgItem.PKG_LEVEL; + CurCmd = data; + CurStep?.SetStatusMessage(StepStatus.Success, Biz.L("鍖呰鎴愬姛")); + action.Data.Data = data; + action.Data.ShortMsg = new("鍖呰鎴愬姛", ShortMessage.Types.Success); + //action.LocaleMsg = new($"璇锋妸鍖呰[{CurPkgItem.Package.SN}]涓婄О绉伴噸"); + action.LocaleMsg = new("MES.WorkAction.PackingAction.PleaseWeighing", CurPkgItem.Package.SN); + } + else + { + action = End(input); + } } break; // 鎵嬪姩缁撴潫鍖呰锛屼繚瀛樻殏瀛樼殑鍖呰鏁版嵁 @@ -278,29 +474,52 @@ //鎵嬪姩缁撴潫鍖呰榛樿浠庣浜屽眰鍖呰寮�濮嬮獙璇� 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"; data.PkgLevel = dtl.PKG_LEVEL; CurCmd = data; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("鎵弿鏍囩")); action.Data.Data = data; + action.Data.ShortMsg = new("鎵弿鏍囩", ShortMessage.Types.Normal); //action.LocaleMsg = new($"璇锋壂鎻忕{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛炬潯鐮�"); action.LocaleMsg = new("MES.WorkAction.PackingAction.PleaseScanLabel", dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME); } 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"; data.PkgLevel = dtl.PKG_LEVEL; data.PrintLable = LabelDic[dtl.PKG_LEVEL]; + data.RealPrint = data.PkgLevel != CurPkg.Item.PKG_LEVEL || CurPosition is not YadaPacking || (CurPosition as YadaPacking).IsPrintCustomerLabel; + //鎵嬪姩缁撴潫鍖呰鏃讹紝濡傛灉鏄疪ealPrint涓篺alse锛屽垯杩斿洖褰撳墠鍖呰淇℃伅鐨勫叆搴撴爣绛惧苟鎵撳嵃 + if (IsManually && !data.RealPrint && !CurPkg.InStoreLabel.IsNullOrEmpty()) + { + data.RealPrint = true; + data.PrintLable = CurPkg.InStoreLabel; + } CurCmd = data; PrintTimes++; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("鎵撳嵃鏍囩")); 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}]"); 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); } @@ -311,7 +530,7 @@ } //濡傛灉琛屼负璁剧疆涓哄嚭閿欓渶瑕侀噸缃伐搴忔搷浣� - if (!action.IsSuccessed && NodeAct.NEED_RESET == "Y") + if (!action.IsSuccessed && NodeAct?.NEED_RESET == "Y") { CurPosition.ResetNode(); } @@ -338,44 +557,81 @@ PKG_LEVEL = dtl.PKG_LEVEL, PKG_QTY = dtl.PKG_QTY, LABEL_CODE = LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE, + SN = CurPosition.GenerateSN(dtl.SN_RULE, this).IsNullOrEmpty(pInput.PkgSN), IsFinished = true, - Package = 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 = CurPosition.CurWipSNs.First().ITEM_CODE, - QTY = CurPosition.CurWipSNs.First().QTY, - UNIT = dtl.PkgType.PKG_NAME, - WORK_ORDER = CurPosition.CurWipSNs.First().WORK_ORDER, - BATCH_NO = CurPosition.CurWipSNs.First().BATCH_NO, - ROT_CODE = CurPosition.CurWipSNs.First().ROT_CODE, - NODE_ID = CurPosition.CurWipSNs.First().NODE_ID, - NODE_NAME = CurPosition.CurWipSNs.First().NODE_NAME, - FTY_CODE = CurPosition.CurWipSNs.First().FTY_CODE, - WS_CODE = CurPosition.CurWipSNs.First().WS_CODE, - LINE_CODE = CurPosition.CurWipSNs.First().LINE_CODE, - POST_CODE = CurPosition.CurWipSNs.First().POST_CODE, - OPER_CODE = CurPosition.CurWipSNs.First().OPER_CODE, - SEGMENT = CurPosition.CurWipSNs.First().SEGMENT, - } }; + + CurPkgItem.Package = Biz.Db.Queryable<MES_WIP_PKG>().Where(q => q.SN == CurPkgItem.SN && q.AUTH_ORG == CurPosition.WorkBatch.WO.AUTH_ORG).First() ?? new() + { + AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG, + AUTH_PROD = CurPosition.CurLine.LINE_CODE, + SN = CurPkgItem.SN, + }; + CurPkgItem.Package.WIP_ID = CurPosition.CurWipSNs.Count == 1 ? CurPosition.CurWipSNs.First().ID : null; + CurPkgItem.Package.PKG_TYPE = dtl.PkgType.PKG_NAME; + CurPkgItem.Package.ITEM_CODE = CurPosition.CurWipSNs.First().ITEM_CODE; + CurPkgItem.Package.QTY = CurPosition.CurWipSNs.First().QTY; + CurPkgItem.Package.UNIT = dtl.PkgType.PKG_NAME; + CurPkgItem.Package.WORK_ORDER = CurPosition.CurWipSNs.First().WORK_ORDER; + CurPkgItem.Package.BATCH_NO = CurPosition.CurWipSNs.First().BATCH_NO; + CurPkgItem.Package.ROT_CODE = CurPosition.CurWipSNs.First().ROT_CODE; + CurPkgItem.Package.NODE_ID = CurPosition.CurWipSNs.First().NODE_ID; + CurPkgItem.Package.NODE_NAME = CurPosition.CurWipSNs.First().NODE_NAME; + CurPkgItem.Package.FTY_CODE = CurPosition.CurWipSNs.First().FTY_CODE; + CurPkgItem.Package.WS_CODE = CurPosition.CurWipSNs.First().WS_CODE; + CurPkgItem.Package.LINE_CODE = CurPosition.CurWipSNs.First().LINE_CODE; + CurPkgItem.Package.POST_CODE = CurPosition.CurWipSNs.First().POST_CODE; + CurPkgItem.Package.OPER_CODE = CurPosition.CurWipSNs.First().OPER_CODE; + CurPkgItem.Package.SEGMENT = CurPosition.CurWipSNs.First().SEGMENT; + CurPkgItem.Package.ACT_ID = NodeAct.ID; + CurPkgItem.Package.ACT_NAME = NodeAct.ACT_NAME; + CurPkgItem.Package.FLOW_SN = CurPosition.CurWipSNs.First().FLOW_SN; 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 + else { //瀹㈡埛绔彁浜ょ殑鍖呰灞傜骇绛変簬褰撳墠澶勭悊鐨勫寘瑁呭眰绾� 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, + SN = CurPkgItem.SN.IsNullOrEmpty(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, + SN = CurPkgItem.SN.IsNullOrEmpty(pInput.PkgSN), PKG_TYPE = dtl.PkgType.PKG_NAME, ITEM_CODE = CurPosition.CurWipSNs.First().ITEM_CODE, QTY = CurPkgItem.Items.Sum(q => q.Package.QTY), @@ -391,6 +647,9 @@ POST_CODE = CurPosition.CurWipSNs.First().POST_CODE, OPER_CODE = CurPosition.CurWipSNs.First().OPER_CODE, SEGMENT = CurPosition.CurWipSNs.First().SEGMENT, + ACT_ID = NodeAct.ID, + ACT_NAME = NodeAct.ACT_NAME, + FLOW_SN = CurPosition.CurWipSNs.First().FLOW_SN, }; FinishLevel++; //瀹屾垚鍖呰鐨勫眰绾у皬浜庢渶澶栧眰鍖呰灞傜骇 @@ -402,7 +661,7 @@ //鏈�澶栧眰鍖呰宸茬粡瀹屾垚鍖呰锛屼繚瀛樺寘瑁呮暟鎹埌鏁版嵁搴� else { - action = SaveToDB(); + action = CompletePkg(); } } //褰撳墠澶勭悊鐨勫寘瑁呭眰绾у凡缁忓鐞嗗畬锛岀户缁線涓婁繚瀛� @@ -424,6 +683,7 @@ PKG_LEVEL = nextDtl.PKG_LEVEL, PKG_QTY = nextDtl.PKG_QTY, LABEL_CODE = LabelDic[nextDtl.PKG_LEVEL]?.LABEL_CODE, + SN = CurPosition.GenerateSN(nextDtl.SN_RULE, this), }; curItem.Items.Add(next); } @@ -432,49 +692,78 @@ //娣诲姞褰撳墠鐨勫寘瑁呮槑缁嗗埌涓婁竴灞傚寘瑁呯殑鏄庣粏鍒楄〃 if (!curItem.Items.Contains(CurPkgItem)) { - curItem.Items.Add(CurPkgItem); + curItem.Items.Add(CurPkgItem); } 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) { - //琛屼负璁惧畾鐨凮PTION_1-9鏄寘瑁呬笉鍚屽眰绾х殑鏍囩妯℃澘浠g爜锛屽鏋滀负绌哄垯涓嶉渶瑕佹墦鍗� - if (LabelDic[dtl.PKG_LEVEL].IsNullOrEmpty()) + //鎵撳嵃鍓嶇О閲嶏細濡傛灉褰撳墠鐨勫寘瑁呮槑缁嗙殑涓婁竴灞傚寘瑁呭璞℃槸鏈�澶栧眰鍖呰涓旈渶瑕佺О閲嶆椂锛屽厛绉伴噸锛屽悎鏍煎悗鍦ㄥ彂鍗版垨鑰呮壂鎻忔渶澶栧眰鍖呰鏍囩 + if (CurPkgItem.PKG_LEVEL == CurPkg.Item.PKG_LEVEL && CurPkg.NeedWeighing) { var data = new PackingActionOutput() { PkgInfo = CurPkg }; - data.ExecCode = "Scan"; - data.PkgLevel = dtl.PKG_LEVEL; + data.ExecCode = "Weighing"; + data.PkgLevel = CurPkgItem.PKG_LEVEL; CurCmd = data; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("涓婄О绉伴噸")); action.Data.Data = data; - //action.LocaleMsg = new($"璇锋壂鎻忕{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛炬潯鐮�"); - action.LocaleMsg = new("MES.WorkAction.PackingAction.PleaseScanLabel", dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME); + action.Data.ShortMsg = new("涓婄О绉伴噸", ShortMessage.Types.Success); + //action.LocaleMsg = new($"璇锋妸澶栧寘瑁呬笂绉扮О閲�"); + action.LocaleMsg = new("MES.WorkAction.PackingAction.PleaseWeighing"); } else { - //璁剧疆鎵撳嵃鍙橀噺鍊� - LabelDic[dtl.PKG_LEVEL] = CurPosition.SetLabelVariables(LabelPV, LabelDic[dtl.PKG_LEVEL]); + //濡傛灉涓虹┖鍒欎笉闇�瑕佹墦鍗� + if (LabelDic[dtl.PKG_LEVEL].IsNullOrEmpty()) + { + var data = new PackingActionOutput() { PkgInfo = CurPkg }; + data.ExecCode = "Scan"; + data.PkgLevel = dtl.PKG_LEVEL; + CurCmd = data; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("鎵弿鏍囩")); + action.Data.Data = data; + action.Data.ShortMsg = new("鎵弿鏍囩", ShortMessage.Types.Normal); + //action.LocaleMsg = new($"璇锋壂鎻忕{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛炬潯鐮�"); + action.LocaleMsg = new("MES.WorkAction.PackingAction.PleaseScanLabel", dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME); + } + else + { + //璁剧疆鎵撳嵃鍙橀噺鍊� + LabelDic[dtl.PKG_LEVEL] = CurPosition.SetLabelVariables(LabelPV, LabelDic[dtl.PKG_LEVEL], this); - var data = new PackingActionOutput() { PkgInfo = CurPkg }; - data.ExecCode = "Print"; - data.PkgLevel = dtl.PKG_LEVEL; - data.PrintLable = LabelDic[dtl.PKG_LEVEL]; - CurCmd = data; - PrintTimes++; - action.Data.Data = data; - //action.LocaleMsg = new Locale($"寮�濮嬬{PrintTimes}娆℃墦鍗扮{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛綶{LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE}: {LabelDic[dtl.PKG_LEVEL].LABEL_NAME}]"); - 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); + var data = new PackingActionOutput() { PkgInfo = CurPkg }; + data.ExecCode = "Print"; + data.PkgLevel = dtl.PKG_LEVEL; + data.PrintLable = LabelDic[dtl.PKG_LEVEL]; + data.RealPrint = data.PkgLevel != CurPkg.Item.PKG_LEVEL || CurPosition is not YadaPacking || (CurPosition as YadaPacking).IsPrintCustomerLabel; + //鎵嬪姩缁撴潫鍖呰鏃讹紝濡傛灉鏄疪ealPrint涓篺alse锛屽垯杩斿洖褰撳墠鍖呰淇℃伅鐨勫叆搴撴爣绛惧苟鎵撳嵃 + if (IsManually && !data.RealPrint && !CurPkg.InStoreLabel.IsNullOrEmpty()) + { + data.RealPrint = true; + data.PrintLable = CurPkg.InStoreLabel; + } + CurCmd = data; + PrintTimes++; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("鎵撳嵃鏍囩")); + action.Data.Data = data; + action.Data.ShortMsg = new("鎵撳嵃鏍囩", ShortMessage.Types.Normal); + //action.LocaleMsg = new Locale($"寮�濮嬬{PrintTimes}娆℃墦鍗扮{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛綶{LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE}: {LabelDic[dtl.PKG_LEVEL].LABEL_NAME}]"); + 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 { - action = End(); + action = End(input); } } //鏁版嵁寮傚父 else { + CurStep?.SetStatusMessage(StepStatus.Error, Biz.L("鍖呰閿欒")); + action.Data.ShortMsg = new("鍖呰閿欒", ShortMessage.Types.Error); var pdtl = PkgRule.Details.First(q => q.PKG_LEVEL == pInput.PkgLevel); action.IsSuccessed = false; //action.LocaleMsg = new($"瀹㈡埛绔彁浜ょ殑鍖呰灞傜骇[{pdtl.PKG_LEVEL}]({pdtl.PkgType.PKG_NAME})鏁版嵁涓嶆槸姝e湪澶勭悊鐨勫寘瑁呭眰绾{dtl.PKG_LEVEL}]({dtl.PkgType.PKG_NAME})锛屽伐搴忓凡閲嶇疆锛岃閲嶆柊鎵弿杩涚珯浜у搧鏉$爜"); @@ -485,6 +774,8 @@ } catch (System.Exception ex) { + CurStep?.SetStatusMessage(StepStatus.Error, Biz.L("鍖呰寮傚父")); + action.Data.ShortMsg = new("鍖呰寮傚父", ShortMessage.Types.Exception); var dtl = PkgRule.Details.First(q => q.PKG_LEVEL == pInput.PkgLevel); action.CatchExceptionWithLog(ex, $"鍖呰琛屼负锛氭壂鎻忕{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛炬潯鐮乕{input.SN}]鍚庝繚瀛樻暟鎹け璐�"); action.IsSuccessed = false; @@ -495,61 +786,25 @@ return action; } - private List<MES_WIP_PKG> GetPackageList(WipPkgItem parent) - { - List<MES_WIP_PKG> list = new() { parent.Package }; - foreach (var item in parent.Items) - { - item.Package.PARENT_SN = parent.Package.SN; - list.AddRange(GetPackageList(item)); - } - return list; - } - - public ApiAction<SubmitOutput> SaveToDB() + public ApiAction<SubmitOutput> CompletePkg() { var action = new ApiAction<SubmitOutput>(new SubmitOutput()); - - var pkgList = GetPackageList(CurPkg.Item); - - //鍖呰淇℃伅淇濆瓨鍒板湪鍒跺搧淇℃伅琛� - foreach (var wipSN in CurPosition.CurWipSNs) - { - wipSN.TRAY_SN = CurPkg.Item.Package.SN; - wipSN.CARTON_SN = CurPkg.Item.Package.SN; - } - //鍖呰淇℃伅淇濆瓨鍒板伐鍗曟潯鐮佹槑缁嗚〃 - var woSNs = CurPosition.WorkBatch.WoSNs.Where(q => CurPosition.CurWipSNs.Any(w => q.SN == w.SN)).ToList(); - foreach (var woSN in woSNs) - { - woSN.TRAY_SN = CurPkg.Item.Package.SN; - woSN.OUTER_SN = CurPkg.Item.Package.SN; - } - - //淇濆瓨鏁版嵁搴� - var db = Biz.Db; - var dbTran = db.UseTran(() => - { - db.Insertable(pkgList, CurPosition.UserCode).ExecuteCommand(); - }); - if (!dbTran.IsSuccess) - { - throw dbTran.ErrorException; - } var data = new PackingActionOutput() { PkgInfo = CurPkg }; data.ExecCode = "Complete"; data.PkgLevel = CurPkg.Item.PKG_LEVEL; CurCmd = data; + CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("淇濆瓨鍖呰鏁版嵁")); action.Data.Data = data; + action.Data.ShortMsg = new("淇濆瓨鍖呰鏁版嵁", ShortMessage.Types.Normal); //action.LocaleMsg = new($"绗瑊CurPkg.Item.PKG_LEVEL}灞傚寘瑁匸{CurPkg.Item.PKG_NAME}]宸茬粡鍏ㄩ儴瀹屾垚锛屼繚瀛樺寘瑁呮暟鎹�"); action.LocaleMsg = new("MES.WorkAction.PackingAction.PackageComplete", CurPkg.Item.PKG_LEVEL, CurPkg.Item.PKG_NAME); //鎵嬪姩缁撴潫鍖呰鍒欐爣璁拌涓哄畬鎴� - if (CurStep.IsNullOrEmpty()) - { - IsFinished = true; - } + //if (IsManually) + //{ + // IsFinished = true; + //} return action; } @@ -558,83 +813,211 @@ /// 缁撴潫鎵ц宸ュ簭琛屼负 /// </summary> /// <returns></returns> - public ApiAction<SubmitOutput> End() + public ApiAction<SubmitOutput> End(SubmitInput input) { var action = new ApiAction<SubmitOutput>(new SubmitOutput()); - //璁板綍琛屼负鎿嶄綔璁板綍 - var wipActs = new List<MES_WIP_ACT>(); - foreach (var wipSn in CurPosition.CurWipSNs) - { - var wipAct = new MES_WIP_ACT() - { - AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG, - AUTH_PROD = CurPosition.CurLine.LINE_CODE, - HIS_ID = CurPosition.CurWipSNHiss.First(q => q.SN == wipSn.SN).ID, - SN = wipSn.SN, - STATUS = wipSn.STATUS, - ITEM_CODE = wipSn.ITEM_CODE, - WORK_ORDER = wipSn.WORK_ORDER, - BATCH_NO = wipSn.BATCH_NO, - ROT_CODE = wipSn.ROT_CODE, - NODE_ID = wipSn.NODE_ID, - NODE_NAME = wipSn.NODE_NAME, - ACT_ID = NodeAct.ID, - ACT_NAME = NodeAct.ACT_NAME, - FTY_CODE = wipSn.FTY_CODE, - WS_CODE = wipSn.WS_CODE, - LINE_CODE = wipSn.LINE_CODE, - POST_CODE = wipSn.POST_CODE, - OPER_CODE = wipSn.OPER_CODE, - SEGMENT = wipSn.SEGMENT, - TRAY_SN = wipSn.TRAY_SN, - OPERATION_TIME = DateTime.Now, - SFTS_CODE = wipSn.SFTS_CODE, - SFT_CODE = wipSn.SFT_CODE, - PRD_CODE = wipSn.PRD_CODE, - ACT_TYPE = NodeAct.ACT_TYPE, - ACT_SN = wipSn.SN, - ACT_RESULT = "Y", - TRACE_INFO = $"浜у搧鏉$爜[{string.Join("锛�", CurPosition.CurSN)}]鍖呰瀹屾垚", - }; - wipActs.Add(wipAct); - } - //var woSNs = CurPosition.WorkBatch.WoSNs.Where(q => CurPosition.CurWipSNs.Any(w => q.SN == w.SN)).ToList(); - - //淇濆瓨鏁版嵁 - CurStep.DBSubmitAction = () => - { - var db = CurPosition.GetCommitDB(); - db.Storageable(wipActs, CurPosition.UserCode).ExecuteCommand(); - //db.Storageable(CurPosition.CurWipSNs, CurPosition.UserCode).ExecuteCommand(); - //db.Storageable(woSNs, CurPosition.UserCode).ExecuteCommand(); - }; - + //璁板綍澶栧寘瑁呯殑绉伴噸鏁版嵁 if (CurPkg.IsFinished) { - //鏈�澶栧眰鍖呰宸茬粡瀹屾垚鍖呰锛屽垯鎶婂伐搴忎腑鏆傚瓨鏍囪璁句负false锛岀粺涓�鎻愪氦鍖呰鍐呬骇鍝佺殑杩囩珯璁板綍 - CurPosition.NeedTemporaryStoreDBCommitAction = false; - //鍒犻櫎宸ュ簭涓婁笅鏂囦腑鐨勫寘瑁呰褰� - CurPosition.Context.Remove("CurPackage"); + CurPkg.Item.Package.WEIGHT = CurPkg.WeightInfo.Weight; + CurPkg.Item.Package.WEIGHT_UNIT = CurPkg.WeightInfo.Unit; + } + + //涓嶆槸鎵嬪姩缁撴潫鍖呰鍒欎繚瀛樿涓烘搷浣滆褰� + if (!IsManually) + { + //璁板綍琛屼负鎿嶄綔璁板綍 + var wipActs = new List<MES_WIP_ACT>(); + foreach (var wipSn in CurPosition.CurWipSNs) + { + + var wipAct = new MES_WIP_ACT() + { + AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG, + AUTH_PROD = CurPosition.CurLine.LINE_CODE, + WIP_ID = wipSn.ID, + HIS_ID = CurPosition.CurWipSNHiss.First(q => q.SN == wipSn.SN).ID, + SN = wipSn.SN, + STATUS = wipSn.STATUS, + ITEM_CODE = wipSn.ITEM_CODE, + WORK_ORDER = wipSn.WORK_ORDER, + BATCH_NO = wipSn.BATCH_NO, + ROT_CODE = wipSn.ROT_CODE, + NODE_ID = wipSn.NODE_ID, + NODE_NAME = wipSn.NODE_NAME, + ACT_ID = NodeAct.ID, + ACT_NAME = NodeAct.ACT_NAME, + FTY_CODE = wipSn.FTY_CODE, + WS_CODE = wipSn.WS_CODE, + LINE_CODE = wipSn.LINE_CODE, + POST_CODE = wipSn.POST_CODE, + OPER_CODE = wipSn.OPER_CODE, + SEGMENT = wipSn.SEGMENT, + FLOW_SN = wipSn.FLOW_SN, + TRAY_SN = wipSn.TRAY_SN, + INNER_SN = wipSn.INNER_SN, + CARTON_SN = wipSn.CARTON_SN, + PALLET_SN = wipSn.PALLET_SN, + OPERATION_TIME = DateTime.Now, + SFTS_CODE = wipSn.SFTS_CODE, + SFT_CODE = wipSn.SFT_CODE, + PRD_CODE = wipSn.PRD_CODE, + ACT_TYPE = NodeAct.ACT_TYPE, + ACT_SN = wipSn.SN, + ACT_RESULT = "Y", + ACT_VALUE_1 = CurPkg.IsFinished ? "Y" : "N", + ACT_VALUE_2 = CurPkg.ToJson(), + ACT_VALUE_3 = CurPkg.IsFinished ? LabelDic[CurPkg.Item.PKG_LEVEL].ToJson() : "", + ACT_VALUE_4 = "Customer", + ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(), + TRACE_INFO = $"浜у搧鏉$爜[{string.Join("锛�", CurPosition.CurSN)}]鍖呰瀹屾垚", + }; + wipActs.Add(wipAct); + } + + //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� + var _wipActs = wipActs.Clone(); + var _pkgList = CurPkg.IsFinished ? CurPosition.GetPackageList(CurPkg.Item) : new(); + //淇濆瓨鏁版嵁 + CurStep.DBSubmitAction = () => + { + var db = CurPosition.GetCommitDB(); + if (_wipActs.Any()) + { + db.Storageable(_wipActs, CurPosition.UserCode).ExecuteCommand(); + } + if (_pkgList.Any()) + { + db.Storageable(_pkgList, CurPosition.UserCode).ExecuteCommand(); + var wipIDs = _pkgList.Where(q => !q.WIP_ID.IsNullOrEmpty()).Select(q => q.WIP_ID).ToList(); + var nodeID = _pkgList.First().NODE_ID; + var actID = _pkgList.First().ACT_ID; + var wo = _pkgList.First().WORK_ORDER; + //鍖呰淇℃伅淇濆瓨鍒板湪鍒跺搧淇℃伅琛� + db.Updateable<MES_WIP_DATA>(CurPosition.UserCode) + .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) + .SetColumns(q => q.INNER_SN == q.CARTON_SN) + .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN) + .Where(q => q.WORK_ORDER == wo && wipIDs.Contains(q.ID)) + .ExecuteCommand(); + //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц繃绋嬭褰� + db.Updateable<MES_WIP_HIS>(CurPosition.UserCode) + .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) + .SetColumns(q => q.INNER_SN == q.CARTON_SN) + .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN) + .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && wipIDs.Contains(q.WIP_ID)) + .ExecuteCommand(); + //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц涓鸿褰� + db.Updateable<MES_WIP_ACT>(CurPosition.UserCode) + .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) + .SetColumns(q => q.INNER_SN == q.CARTON_SN) + .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN) + .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && q.ACT_ID == actID && wipIDs.Contains(q.WIP_ID)) + .ExecuteCommand(); + //鍖呰淇℃伅淇濆瓨鍒板伐鍗曟潯鐮佹槑缁嗚〃 + db.Updateable<BIZ_MES_WO_SN>(CurPosition.UserCode) + .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) + .SetColumns(q => q.OUTER_SN == CurPkg.Item.Package.SN) + .Where(q => q.WORK_ORDER == wo && wipIDs.Contains(q.WIP_ID)) + .ExecuteCommand(); + } + }; } else { - //鏈�澶栧眰鍖呰鏈畬鎴愬寘瑁咃紝鍒欐妸宸ュ簭涓殏瀛樻爣璁拌涓簍rue锛屽緟鍏ㄩ儴鍖呰瀹屾垚鍐嶇粺涓�鎻愪氦鍖呰鍐呬骇鍝佺殑杩囩珯璁板綍 - CurPosition.NeedTemporaryStoreDBCommitAction = true; - //濡傛灉宸ュ簭涓婁笅鏂囦腑娌℃湁鍖呰璁板綍鍒欐柊寤轰竴涓� - if (CurPosition.Context.ContainsKey("CurPackage")) + if (CurPkg.IsFinished) { - CurPosition.Context["CurPackage"] = CurPkg; - } - else - { - CurPosition.Context.Add("CurPackage", CurPkg); + var _pkgList = CurPosition.GetPackageList(CurPkg.Item).Clone(); + var _lastWipID = CurPosition.LastWipSNs?.FirstOrDefault()?.ID; + + //鏈�澶栧眰鍖呰宸茬粡瀹屾垚鍖呰锛屽垯鎶婂伐搴忎腑鏆傚瓨鏍囪璁句负false锛岀粺涓�鎻愪氦鍖呰鍐呬骇鍝佺殑杩囩珯璁板綍 + CurPosition.NeedTemporaryStoreDBCommitAction = false; + //淇濆瓨鏁版嵁 + CurPosition.SaveStepsCommitActionToDB(() => + { + var db = CurPosition.GetCommitDB(); + if (_pkgList.Any()) + { + db.Storageable(_pkgList, CurPosition.UserCode).ExecuteCommand(); + var wipIDs = _pkgList.Where(q => !q.WIP_ID.IsNullOrEmpty()).Select(q => q.WIP_ID).ToList(); + var nodeID = _pkgList.First(q => !q.WIP_ID.IsNullOrEmpty()).NODE_ID; + var actID = _pkgList.First(q => !q.WIP_ID.IsNullOrEmpty()).ACT_ID; + var wo = _pkgList.First(q => !q.WIP_ID.IsNullOrEmpty()).WORK_ORDER; + //鍖呰淇℃伅淇濆瓨鍒板湪鍒跺搧淇℃伅琛� + db.Updateable<MES_WIP_DATA>(CurPosition.UserCode) + .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) + .SetColumns(q => q.INNER_SN == q.CARTON_SN) + .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN) + .Where(q => q.WORK_ORDER == wo && wipIDs.Contains(q.ID)) + .ExecuteCommand(); + //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц繃绋嬭褰� + var endOperCode = CurPkg.IsReachedEndNode ? "EndNode" : "NotReachedEndNode"; + db.Updateable<MES_WIP_HIS>(CurPosition.UserCode) + .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) + .SetColumns(q => q.INNER_SN == q.CARTON_SN) + .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN) + .Where(q => q.WORK_ORDER == wo && (q.NODE_ID == nodeID || q.OPER_CODE == endOperCode) && wipIDs.Contains(q.WIP_ID)) + .ExecuteCommand(); + //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц涓鸿褰� + db.Updateable<MES_WIP_ACT>(CurPosition.UserCode) + .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) + .SetColumns(q => q.INNER_SN == q.CARTON_SN) + .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN) + .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && q.ACT_ID == actID && wipIDs.Contains(q.WIP_ID)) + .ExecuteCommand(); + db.Updateable<MES_WIP_ACT>(CurPosition.UserCode) + .SetColumns(q => q.ACT_VALUE_1 == (CurPkg.IsFinished ? "Y" : "N")) + .SetColumns(q => q.ACT_VALUE_2 == CurPkg.ToJson()) + .SetColumns(q => q.ACT_VALUE_3 == (CurPkg.IsFinished ? LabelDic[CurPkg.Item.PKG_LEVEL].ToJson() : "")) + .SetColumns(q => q.ACT_VALUE_4 == "Customer") + .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && q.ACT_ID == actID && q.WIP_ID == _lastWipID) + .ExecuteCommand(); + var InStoreLabel = CurPkg.IsFinished ? CurPkg.InStoreLabel?.ToJson() : ""; + db.Updateable<MES_WIP_ACT>(CurPosition.UserCode) + .SetColumns(q => q.ACT_VALUE_1 == (CurPkg.IsFinished ? "Y" : "N")) + .SetColumns(q => q.ACT_VALUE_2 == CurPkg.ToJson()) + .SetColumns(q => q.ACT_VALUE_3 == InStoreLabel) + .SetColumns(q => q.ACT_VALUE_4 == "InStore") + .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && q.ACT_ID == CurPkg.InStoreActID && q.WIP_ID == _lastWipID) + .ExecuteCommand(); + //鍖呰淇℃伅淇濆瓨鍒板伐鍗曟潯鐮佹槑缁嗚〃 + db.Updateable<BIZ_MES_WO_SN>(CurPosition.UserCode) + .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) + .SetColumns(q => q.OUTER_SN == CurPkg.Item.Package.SN) + .Where(q => q.WORK_ORDER == wo && wipIDs.Contains(q.WIP_ID)) + .ExecuteCommand(); + } + }); + //濡傛灉褰撳墠鏉$爜宸茬粡瀹屽伐锛屾鏌ュ綋鍓嶅伐鍗曟壒娆″拰宸ュ崟鏄惁瀹屽伐 + //if (CurPkg.IsReachedEndNode) + { + CurPosition.WorkBatch.CheckIsComplete(CurPosition.UserCode); + } } } - IsFinished = true; - action.LocaleMsg = new($"浜у搧鏉$爜[{CurPosition.CurSN}]鍖呰瀹屾垚"); + //鏈�澶栧眰鍖呰宸茬粡瀹屾垚鍖呰锛屽垯鎶婂伐搴忎腑鏆傚瓨鏍囪璁句负false锛岀粺涓�鎻愪氦鍖呰鍐呬骇鍝佺殑杩囩珯璁板綍 + //鏈�澶栧眰鍖呰鏈畬鎴愬寘瑁咃紝鍒欐妸宸ュ簭涓殏瀛樻爣璁拌涓簍rue锛屽緟鍏ㄩ儴鍖呰瀹屾垚鍐嶇粺涓�鎻愪氦鍖呰鍐呬骇鍝佺殑杩囩珯璁板綍 + CurPosition.NeedTemporaryStoreDBCommitAction = !CurPkg.IsFinished; + //濡傛灉宸ュ簭涓婁笅鏂囦腑娌℃湁鍖呰璁板綍鍒欐柊寤轰竴涓� + if (CurPosition.Context.ContainsKey("CurPackage")) + { + CurPosition.Context["CurPackage"] = CurPkg; + CurPosition.Context["CurLabelDic"] = LabelDic; + } + else + { + CurPosition.Context.Add("CurPackage", CurPkg); + CurPosition.Context.Add("CurLabelDic", LabelDic); + } + //action.LocaleMsg = new($"鏉$爜[{CurPosition.CurSN}]鍖呰瀹屾垚"); action.LocaleMsg = new("MES.WorkAction.PackingAction.PackingSuccess", CurPosition.CurSN); + + IsFinished = true; + CurStep?.SetStatusMessage(StepStatus.Finished, Biz.L("鍖呰瀹屾垚")); + action.Data.ShortMsg = new("鍖呰瀹屾垚", ShortMessage.Types.Success); + return action; } -- Gitblit v1.9.3