From 976d3ae1547b896cc5c7875408c09616d5c2ee55 Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期二, 26 十一月 2024 20:51:17 +0800 Subject: [PATCH] 箱数更新 --- Tiger.Business.MES/WorkAction/PackingAction.cs | 132 ++++++++++++++++++++++++++++--------------- 1 files changed, 85 insertions(+), 47 deletions(-) diff --git a/Tiger.Business.MES/WorkAction/PackingAction.cs b/Tiger.Business.MES/WorkAction/PackingAction.cs index 4e0bfd3..34d5977 100644 --- a/Tiger.Business.MES/WorkAction/PackingAction.cs +++ b/Tiger.Business.MES/WorkAction/PackingAction.cs @@ -6,6 +6,7 @@ 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; @@ -83,7 +84,7 @@ IS_MIN_PKG = max.PkgType.IS_MIN_PKG, PKG_LEVEL = max.PKG_LEVEL, PKG_QTY = max.PKG_QTY, - LABEL_CODE = LabelDic.Count > max.PKG_LEVEL ? LabelDic[max.PKG_LEVEL]?.LABEL_CODE : null, + LABEL_CODE = LabelDic.Count >= max.PKG_LEVEL ? LabelDic[max.PKG_LEVEL]?.LABEL_CODE : null, SN = CurPosition.GenerateSN(max.SN_RULE, this), } }; @@ -99,7 +100,7 @@ IS_MIN_PKG = dtl.PkgType.IS_MIN_PKG, PKG_LEVEL = dtl.PKG_LEVEL, PKG_QTY = dtl.PKG_QTY, - LABEL_CODE = LabelDic.Count > dtl.PKG_LEVEL ? LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE : null, + LABEL_CODE = LabelDic.Count >= dtl.PKG_LEVEL ? LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE : null, SN = CurPosition.GenerateSN(dtl.SN_RULE, this), }; if (!child.IsNullOrEmpty()) @@ -228,6 +229,13 @@ 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("鎵撳嵃鏍囩")); @@ -369,6 +377,7 @@ //鏈�澶栧眰鍖呰宸插鐞嗗畬鎴愬垯鐩存帴缁撴潫琛屼负 if (CurPkg.Item.PKG_LEVEL == FinishLevel) { + CurPkg.Item.WipSNs = CurPosition.CurWipSNs.ToDictionary(k => k.ID, v => v.SN); action = End(input); } //鏈�澶栧眰鍖呰鏈墦鍗版壂鎻忓垯缁х画 @@ -396,6 +405,13 @@ 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("鎵撳嵃鏍囩")); @@ -493,6 +509,13 @@ 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("鎵撳嵃鏍囩")); @@ -548,7 +571,7 @@ 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.QTY = CurPosition.CurWipSNs.Sum(q => q.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; @@ -562,7 +585,11 @@ 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; + + CurPkgItem.WipSNs = CurPosition.CurWipSNs.ToDictionary(k => k.ID, v => v.SN); + FinishLevel++; //瀹屾垚鍖呰鐨勫眰绾у皬浜庢渶澶栧眰鍖呰灞傜骇 if (FinishLevel < PkgRule.Details.Max(q => q.PKG_LEVEL)) @@ -604,6 +631,8 @@ POST_CODE = CurPkgItem.Items.First().Package.POST_CODE, OPER_CODE = CurPkgItem.Items.First().Package.OPER_CODE, SEGMENT = CurPkgItem.Items.First().Package.SEGMENT, + ACT_ID = CurPkgItem.Items.First().Package.ACT_ID, + ACT_NAME = CurPkgItem.Items.First().Package.ACT_NAME, } : new() { AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG, @@ -625,6 +654,7 @@ 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++; @@ -712,6 +742,13 @@ 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("鎵撳嵃鏍囩")); @@ -753,27 +790,6 @@ CurPosition.ResetNode(); } return action; - } - - 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() @@ -856,6 +872,10 @@ 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)}]鍖呰瀹屾垚", }; @@ -864,7 +884,8 @@ //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� var _wipActs = wipActs.Clone(); - var _pkgList = CurPkg.IsFinished ? CurPosition.GetPackageList(CurPkg.Item) : new(); + var _pkgList = CurPkg.IsFinished ? CurPosition.GetPackageList(CurPkg.Item).Clone() : new(); + var _wipIDs = CurPkg.IsFinished ? CurPkg.Item.GetWipSnList().Select(q => q.Key).ToList().Clone() : new(); //淇濆瓨鏁版嵁 CurStep.DBSubmitAction = () => { @@ -876,36 +897,36 @@ 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 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>() + 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)) + .Where(q => q.WORK_ORDER == wo && _wipIDs.Contains(q.ID)) .ExecuteCommand(); //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц繃绋嬭褰� - db.Updateable<MES_WIP_HIS>() + 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)) + .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && _wipIDs.Contains(q.WIP_ID)) .ExecuteCommand(); //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц涓鸿褰� - db.Updateable<MES_WIP_ACT>() + 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)) + .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>() + 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)) + .Where(q => q.WORK_ORDER == wo && _wipIDs.Contains(q.WIP_ID)) .ExecuteCommand(); } }; @@ -915,6 +936,8 @@ if (CurPkg.IsFinished) { var _pkgList = CurPosition.GetPackageList(CurPkg.Item).Clone(); + var _wipIDs = CurPkg.Item.GetWipSnList().Select(q => q.Key).ToList().Clone(); + var _lastWipID = CurPosition.LastWipSNs?.FirstOrDefault()?.ID; //鏈�澶栧眰鍖呰宸茬粡瀹屾垚鍖呰锛屽垯鎶婂伐搴忎腑鏆傚瓨鏍囪璁句负false锛岀粺涓�鎻愪氦鍖呰鍐呬骇鍝佺殑杩囩珯璁板綍 CurPosition.NeedTemporaryStoreDBCommitAction = false; @@ -925,42 +948,57 @@ 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; + //var wipIDs = _pkgList.Where(q => !q.WIP_ID.IsNullOrEmpty()).Select(q => q.WIP_ID).ToList(); + var nodeID = _pkgList.First(q => !q.NODE_ID.IsNullOrEmpty()).NODE_ID; + var actID = _pkgList.First(q => !q.ACT_ID.IsNullOrEmpty()).ACT_ID; + var wo = _pkgList.First(q => !q.WORK_ORDER.IsNullOrEmpty()).WORK_ORDER; //鍖呰淇℃伅淇濆瓨鍒板湪鍒跺搧淇℃伅琛� - db.Updateable<MES_WIP_DATA>() + 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)) + .Where(q => q.WORK_ORDER == wo && _wipIDs.Contains(q.ID)) .ExecuteCommand(); //鍖呰淇℃伅淇濆瓨鍒扮敓浜ц繃绋嬭褰� var endOperCode = CurPkg.IsReachedEndNode ? "EndNode" : "NotReachedEndNode"; - db.Updateable<MES_WIP_HIS>() + 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)) + .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>() + 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)) + .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>() + 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)) + .Where(q => q.WORK_ORDER == wo && _wipIDs.Contains(q.WIP_ID)) .ExecuteCommand(); } }); //濡傛灉褰撳墠鏉$爜宸茬粡瀹屽伐锛屾鏌ュ綋鍓嶅伐鍗曟壒娆″拰宸ュ崟鏄惁瀹屽伐 - if (CurPkg.IsReachedEndNode) + //if (CurPkg.IsReachedEndNode) { CurPosition.WorkBatch.CheckIsComplete(CurPosition.UserCode); } -- Gitblit v1.9.3