From 72080a2270d06efe6c9d44fbb82e7edf28d14f05 Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期四, 08 八月 2024 11:35:08 +0800 Subject: [PATCH] 包装行为增加已扫条码验证,不允许重复扫描 --- Tiger.Business.MES/WorkAction/PackingAction.cs | 219 ++++++++++++++++++++++++++++++------------------------ 1 files changed, 122 insertions(+), 97 deletions(-) diff --git a/Tiger.Business.MES/WorkAction/PackingAction.cs b/Tiger.Business.MES/WorkAction/PackingAction.cs index 094982a..9ba0268 100644 --- a/Tiger.Business.MES/WorkAction/PackingAction.cs +++ b/Tiger.Business.MES/WorkAction/PackingAction.cs @@ -56,18 +56,13 @@ PkgRule = Biz.Db.Queryable<BAS_PKG_RULE>().Where(q => q.RULE_CODE == setting.PKG_CODE).IncludesAllFirstLayer().IncludesAllSecondLayer(q => q.Details).First(); } //鏍规嵁琛屼负璁剧疆鑾峰彇澶氬眰鍖呰鐨勬爣绛炬墦鍗版ā鏉垮瓧鍏� - //for (int i = 1; i < 10; i++) - //{ - // var code = Setting.GetType().GetProperty($"OPTION_{i}")?.GetValue(Setting)?.ToString() ?? ""; - // var label = code.IsNullOrEmpty() ? null : Biz.Db.Queryable<BAS_LABEL_TEMP>().Where(q => q.LABEL_CODE == code).IncludesAllFirstLayer().First(); - // LabelDic.Add(i, label); - //} var codes = (Setting.OPTION_1?? "").JsonToObject<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()) { @@ -129,7 +124,7 @@ //琛屼负璁惧畾鐨凮PTION_1鏄涓�灞傚寘瑁呯殑鏍囩妯℃澘浠g爜锛屽鏋滀负绌哄垯涓嶉渶瑕佹墦鍗� if (LabelDic[min.PKG_LEVEL].IsNullOrEmpty()) { - var msg = new Locale("MES.WorkAction.PackingAction.BeginMsg", min.PKG_LEVEL, min.PkgType.PKG_NAME, CurPosition.CurWipSN.SN); + var msg = new Locale("MES.WorkAction.PackingAction.BeginMsg", min.PKG_LEVEL, min.PkgType.PKG_NAME, CurPosition.CurSN); //var msg = new Locale($"宸叉壂鎻忕{dtl.PKG_LEVEL}灞傚寘瑁匸{dtl.PkgType.PKG_NAME}]鐨勬爣绛炬潯鐮乕{CurPosition.CurWipSN.SN}]"); return msg; } @@ -151,7 +146,7 @@ action.LocaleMsg = GetBeginMsg(); var min = PkgRule.Details.OrderBy(q => q.PKG_LEVEL).First(); - //琛屼负璁惧畾鐨凮PTION_1-9鏄寘瑁呬笉鍚屽眰绾х殑鏍囩妯℃澘浠g爜锛屽鏋滀负绌哄垯涓嶉渶瑕佹墦鍗� + //鏍规嵁鍖呰涓嶅悓灞傜骇鐨勬爣绛炬ā鏉夸唬鐮侊紝濡傛灉涓虹┖鍒欎笉闇�瑕佹墦鍗� if (LabelDic[min.PKG_LEVEL].IsNullOrEmpty()) { input.Data = new PackingActionInput() @@ -159,7 +154,7 @@ ExecCode = "Scan", IsFinish = true, PkgLevel = min.PKG_LEVEL, - PkgSN = CurPosition.CurWipSN.SN, + PkgSN = CurPosition.CurSN, }.ToJson(); action = Submit(input); } @@ -199,15 +194,8 @@ 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); action.IsSuccessed = false; @@ -215,6 +203,19 @@ action.LocaleMsg = new("MES.WorkAction.PackingAction.ScanFail", dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME); return action; } + //楠岃瘉褰撳墠鍖呰鏉$爜鏄惁宸茬粡琚壂鎻忚繃 + if (GetPackageList(CurPkg.Item).Any(q => q.SN == pInput.PkgSN)) + { + var dtl = PkgRule.Details.First(q => q.PKG_LEVEL == pInput.PkgLevel); + 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); + return action; + } + //瀹㈡埛绔壂鎻忔垚鍔� + CurCmd = null; + PrintTimes = 0; + action = SavePkgData(input, action); } break; //Print锛氭墦鍗帮紝鎵撳嵃褰撳墠鍖呰灞傜骇鐨勬爣绛� @@ -350,20 +351,20 @@ AUTH_PROD = CurPosition.CurLine.LINE_CODE, SN = pInput.PkgSN, PKG_TYPE = dtl.PkgType.PKG_NAME, - ITEM_CODE = CurPosition.CurWipSN.ITEM_CODE, - QTY = CurPosition.CurWipSN.QTY, + ITEM_CODE = CurPosition.CurWipSNs.First().ITEM_CODE, + QTY = CurPosition.CurWipSNs.First().QTY, UNIT = dtl.PkgType.PKG_NAME, - WORK_ORDER = CurPosition.CurWipSN.WORK_ORDER, - BATCH_NO = CurPosition.CurWipSN.BATCH_NO, - ROT_CODE = CurPosition.CurWipSN.ROT_CODE, - NODE_ID = CurPosition.CurWipSN.NODE_ID, - NODE_NAME = CurPosition.CurWipSN.NODE_NAME, - FTY_CODE = CurPosition.CurWipSN.FTY_CODE, - WS_CODE = CurPosition.CurWipSN.WS_CODE, - LINE_CODE = CurPosition.CurWipSN.LINE_CODE, - POST_CODE = CurPosition.CurWipSN.POST_CODE, - OPER_CODE = CurPosition.CurWipSN.OPER_CODE, - SEGMENT = CurPosition.CurWipSN.SEGMENT, + 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, } }; FinishLevel++; @@ -382,20 +383,20 @@ AUTH_PROD = CurPosition.CurLine.LINE_CODE, SN = pInput.PkgSN, PKG_TYPE = dtl.PkgType.PKG_NAME, - ITEM_CODE = CurPosition.CurWipSN.ITEM_CODE, + ITEM_CODE = CurPosition.CurWipSNs.First().ITEM_CODE, QTY = CurPkgItem.Items.Sum(q => q.Package.QTY), UNIT = dtl.PkgType.PKG_NAME, - WORK_ORDER = CurPosition.CurWipSN.WORK_ORDER, - BATCH_NO = CurPosition.CurWipSN.BATCH_NO, - ROT_CODE = CurPosition.CurWipSN.ROT_CODE, - NODE_ID = CurPosition.CurWipSN.NODE_ID, - NODE_NAME = CurPosition.CurWipSN.NODE_NAME, - FTY_CODE = CurPosition.CurWipSN.FTY_CODE, - WS_CODE = CurPosition.CurWipSN.WS_CODE, - LINE_CODE = CurPosition.CurWipSN.LINE_CODE, - POST_CODE = CurPosition.CurWipSN.POST_CODE, - OPER_CODE = CurPosition.CurWipSN.OPER_CODE, - SEGMENT = CurPosition.CurWipSN.SEGMENT, + 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, }; FinishLevel++; //瀹屾垚鍖呰鐨勫眰绾у皬浜庢渶澶栧眰鍖呰灞傜骇 @@ -407,7 +408,7 @@ //鏈�澶栧眰鍖呰宸茬粡瀹屾垚鍖呰锛屼繚瀛樺寘瑁呮暟鎹埌鏁版嵁搴� else { - action = SaveToDB(); + action = CompletePkg(); } } //褰撳墠澶勭悊鐨勫寘瑁呭眰绾у凡缁忓鐞嗗畬锛岀户缁線涓婁繚瀛� @@ -511,25 +512,9 @@ return list; } - public ApiAction<SubmitOutput> SaveToDB() + public ApiAction<SubmitOutput> CompletePkg() { var action = new ApiAction<SubmitOutput>(new SubmitOutput()); - - var pkgList = GetPackageList(CurPkg.Item); - - //淇濆瓨鏁版嵁搴� - var db = Biz.Db; - var dbTran = db.UseTran(() => - { - db.Insertable(pkgList, CurPosition.UserCode).ExecuteCommand(); - }); - if (!dbTran.IsSuccess) - { - throw dbTran.ErrorException; - } - - //鍒犻櫎宸ュ簭涓婁笅鏂囦腑鐨勫寘瑁呰褰� - CurPosition.Context.Remove("CurPackage"); var data = new PackingActionOutput() { PkgInfo = CurPkg }; data.ExecCode = "Complete"; @@ -557,58 +542,98 @@ var action = new ApiAction<SubmitOutput>(new SubmitOutput()); //璁板綍琛屼负鎿嶄綔璁板綍 - var wipAct = new MES_WIP_ACT() + var wipActs = new List<MES_WIP_ACT>(); + foreach (var wipSn in CurPosition.CurWipSNs) { - AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG, - AUTH_PROD = CurPosition.CurLine.LINE_CODE, - HIS_ID = CurPosition.CurWipSNHis.ID, - SN = CurPosition.CurWipSN.SN, - STATUS = CurPosition.CurWipSN.STATUS, - ITEM_CODE = CurPosition.CurWipSN.ITEM_CODE, - WORK_ORDER = CurPosition.CurWipSN.WORK_ORDER, - BATCH_NO = CurPosition.CurWipSN.BATCH_NO, - ROT_CODE = CurPosition.CurWipSN.ROT_CODE, - NODE_ID = CurPosition.CurWipSN.NODE_ID, - NODE_NAME = CurPosition.CurWipSN.NODE_NAME, - ACT_ID = NodeAct.ID, - ACT_NAME = NodeAct.ACT_NAME, - FTY_CODE = CurPosition.CurWipSN.FTY_CODE, - WS_CODE = CurPosition.CurWipSN.WS_CODE, - LINE_CODE = CurPosition.CurWipSN.LINE_CODE, - POST_CODE = CurPosition.CurWipSN.POST_CODE, - OPER_CODE = CurPosition.CurWipSN.OPER_CODE, - SEGMENT = CurPosition.CurWipSN.SEGMENT, - TRAY_SN = CurPosition.CurWipSN.TRAY_SN, - OPERATION_TIME = DateTime.Now, - SFTS_CODE = CurPosition.CurWipSN.SFTS_CODE, - SFT_CODE = CurPosition.CurWipSN.SFT_CODE, - PRD_CODE = CurPosition.CurWipSN.PRD_CODE, - ACT_TYPE = NodeAct.ACT_TYPE, - ACT_SN = CurPosition.CurWipSN.SN, - ACT_RESULT = "Y", - TRACE_INFO = $"浜у搧鏉$爜[{CurPosition.CurWipSN.SN}]鍖呰瀹屾垚", - }; + 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); + } + //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� + var _wipActs = wipActs.Clone(); + var _pkgList = CurPkg.IsFinished ? GetPackageList(CurPkg.Item) : new(); //淇濆瓨鏁版嵁 CurStep.DBSubmitAction = () => { var db = CurPosition.GetCommitDB(); - db.Storageable(wipAct, CurPosition.UserCode).ExecuteCommand(); + db.Storageable(_wipActs, CurPosition.UserCode).ExecuteCommand(); + if (_pkgList.Any()) + { + db.Insertable(_pkgList, CurPosition.UserCode).ExecuteCommand(); + foreach (var pkg in _pkgList) + { + //鍖呰淇℃伅淇濆瓨鍒板湪鍒跺搧淇℃伅琛� + db.Updateable<MES_WIP_DATA>() + .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) + .SetColumns(q => q.CONTAINER_SN == q.CARTON_SN) + .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN) + .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.SN == pkg.SN) + .ExecuteCommand(); + //鍖呰淇℃伅淇濆瓨鍒板伐鍗曟潯鐮佹槑缁嗚〃 + db.Updateable<BIZ_MES_WO_SN>() + .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) + .SetColumns(q => q.OUTER_SN == CurPkg.Item.Package.SN) + .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.SN == pkg.SN) + .ExecuteCommand(); + } + } }; - //濡傛灉宸ュ簭涓婁笅鏂囦腑娌℃湁鍖呰璁板綍鍒欐柊寤轰竴涓� - if (CurPosition.Context.ContainsKey("CurPackage")) + if (CurPkg.IsFinished) { - CurPosition.Context["CurPackage"] = CurPkg; + //鏈�澶栧眰鍖呰宸茬粡瀹屾垚鍖呰锛屽垯鎶婂伐搴忎腑鏆傚瓨鏍囪璁句负false锛岀粺涓�鎻愪氦鍖呰鍐呬骇鍝佺殑杩囩珯璁板綍 + CurPosition.NeedTemporaryStoreDBCommitAction = false; + //鍒犻櫎宸ュ簭涓婁笅鏂囦腑鐨勫寘瑁呰褰� + CurPosition.Context.Remove("CurPackage"); } else { - CurPosition.Context.Add("CurPackage", CurPkg); + //鏈�澶栧眰鍖呰鏈畬鎴愬寘瑁咃紝鍒欐妸宸ュ簭涓殏瀛樻爣璁拌涓簍rue锛屽緟鍏ㄩ儴鍖呰瀹屾垚鍐嶇粺涓�鎻愪氦鍖呰鍐呬骇鍝佺殑杩囩珯璁板綍 + CurPosition.NeedTemporaryStoreDBCommitAction = true; + //濡傛灉宸ュ簭涓婁笅鏂囦腑娌℃湁鍖呰璁板綍鍒欐柊寤轰竴涓� + if (CurPosition.Context.ContainsKey("CurPackage")) + { + CurPosition.Context["CurPackage"] = CurPkg; + } + else + { + CurPosition.Context.Add("CurPackage", CurPkg); + } } IsFinished = true; - action.LocaleMsg = new($"浜у搧鏉$爜[{CurPosition.CurWipSN.SN}]鍖呰瀹屾垚"); - action.LocaleMsg = new("MES.WorkAction.PackingAction.PackingSuccess", CurPosition.CurWipSN.SN); + action.LocaleMsg = new($"浜у搧鏉$爜[{CurPosition.CurSN}]鍖呰瀹屾垚"); + action.LocaleMsg = new("MES.WorkAction.PackingAction.PackingSuccess", CurPosition.CurSN); return action; } -- Gitblit v1.9.3