From 8b49746337d1ddce30588e60b38d31c26a16445a Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期四, 28 十一月 2024 00:42:42 +0800 Subject: [PATCH] 优化了一些已知问题 --- Tiger.Business.MES/Transaction/YadaPacking.cs | 123 ++++++++++++++++++++++++++++++++++------ 1 files changed, 103 insertions(+), 20 deletions(-) diff --git a/Tiger.Business.MES/Transaction/YadaPacking.cs b/Tiger.Business.MES/Transaction/YadaPacking.cs index ed0cf70..0f68338 100644 --- a/Tiger.Business.MES/Transaction/YadaPacking.cs +++ b/Tiger.Business.MES/Transaction/YadaPacking.cs @@ -11,6 +11,8 @@ using Tiger.Model; using Tiger.Model.Entitys.MES.Position; using Tiger.Business.MES.WorkAction; +using Tiger.Model.MES.Yada; +using System.Data; namespace Tiger.Business.MES.Transaction { @@ -22,6 +24,7 @@ public new IYadaPacking Init(string id, string apiHost, string userCode, string postCode) { base.Init(id, apiHost, userCode, postCode); + U9CDB = Biz.DataSource["YadaU9C"].Client; Logger.Console.Info($"User[{userCode}] start a {this.GetType().Name}[{postCode}] Transaction[ID: {TransID}]"); return this; } @@ -37,6 +40,10 @@ public PackingAction TempPkgAction { get; set; } public bool IsPrintCustomerLabel { get; set; } public string ShippingOrder { get; set; } + public DateTime curtime = DateTime.Now; + public DateTime prevtime = DateTime.Now; + + public DbClient U9CDB { get; set; } #endregion Propertys & Variables #region Functions @@ -47,6 +54,7 @@ /// <returns></returns> public async Task<ApiAction<SubmitOutput>> Submit(SubmitInput input) { + curtime = prevtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 1 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; var action = new ApiAction<SubmitOutput>(new SubmitOutput()); try { @@ -58,16 +66,17 @@ // action.IsSuccessed = false; // action.LocaleMsg = new($"鍖呰鏁伴噺[{input.Qty}]涓嶆纭紝璇烽噸鏂拌緭鍏ユ暟閲忓悗缁х画鍖呰鎿嶄綔"); // //action.LocaleMsg = new("MES.Transaction.PackingNode.Submit.QtyError", input.Qty); - // return action; + // return SetOutPutMqttMsg(action, input.Locale); //} if (input.Options.ContainsKey("IsPrintCustomerLabel")) { IsPrintCustomerLabel = input.Options["IsPrintCustomerLabel"].ToBoolean(); } - if (input.Options.ContainsKey("ShippingOrder")) - { - ShippingOrder = IsPrintCustomerLabel ? input.Options["ShippingOrder"].ToString() : ""; - } + + //if (input.Options.ContainsKey("ShippingOrder")) + //{ + // ShippingOrder = IsPrintCustomerLabel ? input.Options["ShippingOrder"].ToString() : ""; + //} //PkgSubmit锛氭墜鍔ㄧ粨鏉熷寘瑁咃紝鎵嬪姩淇濆瓨鏆傚瓨鐨勫寘瑁呮暟鎹� if (NodeCmd == "PkgSubmit") { @@ -85,16 +94,16 @@ //宸ユ鍒楄〃涓虹┖鎴栬�呭伐搴忚妭鐐瑰伐姝ユ湁鏈畬鎴愭椂锛屼紭鍏堝畬鎴愬伐搴忚妭鐐瑰伐姝� if (Steps.IsNullOrEmpty() || !IsFinishNodeSteps) { - var wosns = Biz.Db.Queryable<BIZ_MES_WO_BATCH, BIZ_MES_WO_SN>((q, s) => new JoinQueryInfos(JoinType.Inner, q.ORDER_NO == s.WORK_ORDER && q.BATCH_NO == s.BATCH_NO)) + var wosns = MainDB.Queryable<BIZ_MES_WO_BATCH, BIZ_MES_WO_SN>((q, s) => new JoinQueryInfos(JoinType.Inner, q.ORDER_NO == s.WORK_ORDER && q.BATCH_NO == s.BATCH_NO)) .ByAuth(input.AuthOption)//.Where((q, s) => s.STATUS < BIZ_MES_WO_SN.STATUSs.Finished.GetValue()) .Where((q, s) => s.SN == input.SN || s.FLOW_SN == input.SN || s.TRAY_SN == input.SN).Select((q, s) => new { Batch = q, SN = s }).ToList(); - + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 2 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; //鍏堝垽鏂綋鍓嶅伐鍗曚笉涓虹┖涓斿綋鍓嶅矖浣嶅湪褰撳墠宸ュ崟鏄笉鏄绔欙紝濡傛灉鏄垯涓嶅厑璁稿彉鏇村綋鍓嶅伐鍗曪紝灏濊瘯鎶婃潯鐮佺粦瀹氬埌褰撳墠宸ュ崟 if (!CurBatch.IsNullOrEmpty() && CurBatch.IsFirstNode(PostCode)) { //鏇存柊CurBatch CurBatch?.Update(); - + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 3 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; var wosn = wosns.FirstOrDefault(q => q.Batch.ORDER_NO == CurBatch.WO.ORDER_NO && (q.SN.STATUS == BIZ_MES_WO_SN.STATUSs.Finished.GetValue() || q.SN.STATUS == BIZ_MES_WO_SN.STATUSs.Scrap.GetValue())); if (!wosn.IsNullOrEmpty()) { @@ -108,6 +117,7 @@ { //鎻愪氦鏁版嵁 action = NodeSubmit(action, input); + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 4 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; //鏇存柊宸ュ簭淇℃伅 if (!action.IsSuccessed) { @@ -135,7 +145,7 @@ action.IsSuccessed = false; //action.LocaleMsg = new($"鏉$爜[{0}]鏄浇鍏锋潯鐮侊紝璇锋壂鎻忚浇鍏蜂腑鐨勪骇鍝佹潯鐮佺户缁寘瑁呮搷浣�"); action.LocaleMsg = new("MES.Transaction.PackingNode.Submit.OnlyMinPackage", input.SN); - return action; + return SetOutPutMqttMsg(action, input.Locale); } var curPkg = Context.ContainsKey("CurPackage") ? Context["CurPackage"] as WipPkg : null; if (!curPkg.IsNullOrEmpty() && !curPkg.IsFinished && curPkg.WorkBatch != curSNs.First().Batch.BATCH_NO) @@ -145,7 +155,7 @@ action.IsSuccessed = false; //action.LocaleMsg = new($"姝e湪鍖呰宸ュ崟鎵规[{0}]鐨勪骇鍝侊紝璇峰厛瀹屾垚褰撳墠鍖呰鍚庡啀鎵弿鍏朵粬鎵规[{1}]鐨勪骇鍝乕{2}]"); action.LocaleMsg = new("MES.Transaction.PackingNode.Submit.BatchError", curPkg.WorkBatch, curSNs.First().Batch.BATCH_NO, input.SN); - return action; + return SetOutPutMqttMsg(action, input.Locale); } if (curSNs.First().Batch.ACT_LINE != CurLine.LINE_CODE) { @@ -167,7 +177,7 @@ action.Data.OperInfo = new(); action.IsSuccessed = result.IsSuccessed; action.LocaleMsg = result.LocaleMsg; - return action; + return SetOutPutMqttMsg(action, input.Locale); } } //鏇存柊CurBatch @@ -228,20 +238,23 @@ { //鏇存柊CurBatch CurBatch?.Update(); - + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 5 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; var submitStep = Steps.Where(q => q.ID == input.CurStepID && !q.IsFinished).FirstOrDefault(); //濡傛灉瀹㈡埛绔繑鍥炵殑褰撳墠宸ユID鎵句笉鍒版湭瀹屾垚鐨勮涓哄伐姝ワ紝鍒欑洿鎺ュ紑濮嬩笅涓�涓涓哄伐姝� if (submitStep.IsNullOrEmpty()) { action = BeginNextActionStep(input); + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 6 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; } else { action = submitStep.Submit(input); + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 7 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; //濡傛灉褰撳墠宸ユ宸插畬鎴愶紝寮�濮嬫墽琛屼笅涓�宸ユ if (action.IsSuccessed && submitStep.IsFinished) { action = BeginNextActionStep(input); + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 8 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; } //濡傛灉褰撳墠宸ユ鏈畬鎴� else @@ -286,7 +299,8 @@ //action.CatchExceptionWithLog(ex, $"鍖呰宸ュ簭锛氭彁浜ゆ搷浣滄暟鎹紓甯�"); action.CatchExceptionWithLog(ex, Biz.L("MES.Transaction.PackingNode.SubmitException")); } - return action; + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 9 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; + return SetOutPutMqttMsg(action, input.Locale); } /// <summary> @@ -297,6 +311,7 @@ /// <returns></returns> public ApiAction<SubmitOutput> NodeSubmit(ApiAction<SubmitOutput> action, SubmitInput input) { + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 10 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; var curNode = CurBatch.GetNode(PostCode); try { @@ -323,7 +338,7 @@ return woStatus; } - var wipSNs = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN).Where(q => q.FINISHED_FLAG != "Y").ToList(); + var wipSNs = MainDB.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN).Where(q => q.FINISHED_FLAG != "Y").ToList(); if (wipSNs.IsNullOrEmpty()) { var wipSN = new MES_WIP_DATA() @@ -380,7 +395,51 @@ //璁剧疆褰撳墠鎸囦护涓烘甯镐骇鍝佽繃绔� NodeCmd = "NodeSubmit"; + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 11 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; + //鑾峰彇鍑鸿揣鐘舵�� + var ship = U9CDB.Queryable<mes_ShipList>().Where(q => q.MoDoc == CurBatch.WO.ORDER_NO && q.Status == 2 && SqlFunc.DateIsSame(q.BusinessDate, DateTime.Now)).First(); + int CurShipQty = 0; + int WaitShipmentCarton = 0; + int WaitShipment = 0; + if (ship.IsNullOrEmpty()) { IsPrintCustomerLabel = false; } else + { + CurShipQty = ship.ShipQty; + IsPrintCustomerLabel = true; + SugarParameter[] pars = MainDB.Ado.GetParameters(new { BATCH = CurBatch.Batch.BATCH_NO, NodeIdOrName = curNode.NODE_NAME }); + var list = MainDB.Ado.UseStoredProcedure().GetDataTable("SP_MES_GET_NODE_BATCH_COUNT", pars).AsEnumerable().ToList(); + if (!list.IsNullOrEmpty()) + { + var batchCount = list.Where(q => q["ProdDate"].ToString() == "Whole").FirstOrDefault(); + WaitShipmentCarton = batchCount["WaitShipmentCarton"].ToInt32(); + WaitShipment = batchCount["WaitShipment"].ToInt32(); + IsPrintCustomerLabel = batchCount.IsNullOrEmpty() ? IsPrintCustomerLabel : batchCount["WaitShipment"].ToInt32() >= ship.ShipQty ? false : true; + } + } + ShippingOrder = IsPrintCustomerLabel ? ship?.ShipDoc ?? "" : ""; + //缂撳瓨鍑鸿揣鏁伴噺 + Context.SetOrAdd("CurShipQty", CurShipQty); + //if (Context.ContainsKey("CurShipQty")) + //{ + // Context["CurShipQty"] = CurShipQty; + //} + //else + //{ + // Context.Add("CurShipQty", CurShipQty); + //} + //缂撳瓨鍑鸿揣绠辨暟 + Context.SetOrAdd("CurWaitShipmentCarton", WaitShipmentCarton); + Context.SetOrAdd("CurWaitShipment", WaitShipment); + //if (Context.ContainsKey("CurWaitShipmentCarton")) + //{ + // Context["CurWaitShipmentCarton"] = WaitShipmentCarton; + //} + //else + //{ + // Context.Add("CurWaitShipmentCarton", WaitShipmentCarton); + //} + + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 12 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; //缁戝畾鏉$爜鍒板伐鍗� foreach (var wipSN in wipSNs) { @@ -424,6 +483,7 @@ wipSN.SEGMENT = curNode.SEGMENT; wipSN.OPERATION_TIME = DateTime.Now; wipSN.SHIPPING_ORDER = ShippingOrder; + wipSN.UNBIND_FLAG = "N"; var curShiftPeriod = GetShiftPeriodForNow(); if (!curShiftPeriod.IsNullOrEmpty()) { @@ -523,6 +583,7 @@ var _curNodeSetting = curNodeSetting.Clone(); var _Batch = CurBatch.Batch.Clone(); + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 13 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; //鍒濆鍖栧伐姝ュ垪琛� Steps.Clear(); var curStep = new WorkStep(IWorkStep.NodeTypes.Node, this) @@ -646,6 +707,7 @@ //action.CatchExceptionWithLog(ex, $"{curNode.NODE_NAME}锛氬伐搴忚妭鐐瑰伐姝ユ彁浜ゆ暟鎹紓甯革紝璇锋鏌ュ伐搴忚妭鐐硅缃�"); action.CatchExceptionWithLog(ex, Biz.L("MES.Transaction.PackingNode.NodeSubmitException", curNode.NODE_NAME)); } + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 13.1 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; return action; } @@ -659,6 +721,7 @@ var curPkg = Context.ContainsKey("CurPackage") ? Context["CurPackage"] as WipPkg : null; var operInfo = SetOperNodeInfo(CurOperInfo(locale)); Action endAction = null; + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 14 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; //濡傛灉褰撳墠鏉$爜宸茬粡璧板埌娴佺▼缁堢偣鍒欒褰曟潯鐮佸畬宸� if (operInfo.IsReachedEndNode) @@ -726,7 +789,7 @@ //淇濆瓨鏁版嵁搴� SaveStepsCommitActionToDB(endAction); - + //淇濆瓨鎴愬姛锛岃繑鍥炶繃绔欐秷鎭� operInfo.InputQty += CurWipSNs.Count; action.Data.Data = new PackingActionOutput() { PkgInfo = curPkg }; @@ -743,7 +806,7 @@ //閲嶇疆宸ュ簭 ResetNode(); - + curtime = DateTime.Now; Logger.Console.Info($"{CurSN} : ***** 15 : {(curtime - prevtime).TotalSeconds}s", ConsoleColor.Green); prevtime = curtime; return action; } @@ -843,7 +906,7 @@ action.IsSuccessed = false; //action.LocaleMsg = new($"鍑鸿揣鏁伴噺璁惧畾涓篬{0}]锛岀洰鍓嶅寘瑁呬簡[{1}]锛屽寘瑁呭熬鏁扮殑鏁伴噺蹇呴渶鏄痆{2}]锛岃瑁呭鏁伴噺鍚庡啀缁撴潫鍖呰"); action.LocaleMsg = new("MES.Transaction.PackingNode.NotMatchShipQty", shipQty, curQty, shipQty % ruleQty); - return action; + return SetOutPutMqttMsg(action); } NodeCmd = "PkgSubmit"; @@ -876,7 +939,7 @@ action.CatchExceptionWithLog(ex, $"鍖呰宸ュ簭锛氭墜鍔ㄧ粨鏉熷寘瑁呭紓甯�"); NodeCmd = null; } - return action; + return SetOutPutMqttMsg(action); } /// <summary> @@ -890,8 +953,8 @@ try { var CurPkg = Context.ContainsKey("CurPackage") ? Context["CurPackage"] as WipPkg : null; - var LabelPV = Biz.Db.Queryable<BAS_LABEL_PV>().ToList(); - var label = CurPkg.Item.LABEL_CODE.IsNullOrEmpty() ? null : Biz.Db.Queryable<BAS_LABEL_TEMP>().Where(q => q.LABEL_CODE == CurPkg.Item.LABEL_CODE).IncludesAllFirstLayer().First(); + var LabelPV = MainDB.Queryable<BAS_LABEL_PV>().ToList(); + var label = CurPkg.Item.LABEL_CODE.IsNullOrEmpty() ? null : MainDB.Queryable<BAS_LABEL_TEMP>().Where(q => q.LABEL_CODE == CurPkg.Item.LABEL_CODE).IncludesAllFirstLayer().First(); var printLb = SetLabelVariables(LabelPV, label, new PackingAction(), CurPkg); action.Data = new PackingActionOutput() { @@ -907,6 +970,26 @@ return action; } + /// <summary> + /// 鑾峰彇鏄惁鎵撳嵃瀹㈡埛鏍囩杩樻槸鍏ュ簱鏍囩 + /// </summary> + /// <returns></returns> + public async Task<ApiAction<ShipingInfo>> GetIsCustomerLabelAndShipQty() + { + var action = new ApiAction<ShipingInfo>(); + try + { + action.Data = new ShipingInfo() { + IsPrintCustomerLabel= IsPrintCustomerLabel, + ShipQty =Context.GetOrDefault("CurWaitShipment").ToInt32()>= Context.GetOrDefault("CurShipQty").ToInt32()? CurBatch.Batch.PLAN_QTY - Context.GetOrDefault("CurShipQty").ToInt32(): Context.GetOrDefault("CurShipQty").ToInt32() }; + } + catch (Exception ex) + { + action.CatchExceptionWithLog(ex, $"鍖呰宸ュ簭锛氳幏鍙栨槸鍚︽墦鍗板鎴锋爣绛捐繕鏄叆搴撴爣绛惧紓甯�"); + } + return action; + } + #endregion Functions /// <summary> -- Gitblit v1.9.3