From 067c69928ce6d3d3ed5710fd9652af7b3380dcd5 Mon Sep 17 00:00:00 2001 From: cjs <2216046164@qq.com> Date: 星期二, 20 五月 2025 14:10:38 +0800 Subject: [PATCH] cjs --- HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs | 1380 +++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 1,056 insertions(+), 324 deletions(-) diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs index 231f3a1..af9ada7 100644 --- a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs +++ b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs @@ -1,5 +1,7 @@ 锘縰sing HH.WCS.Mobox3.NFLZ.core; +using HH.WCS.Mobox3.NFLZ.device; using HH.WCS.Mobox3.NFLZ.dispatch; +using HH.WCS.Mobox3.NFLZ.models; using HH.WCS.Mobox3.NFLZ.util; using HH.WCS.Mobox3.NFLZ.wms; using Newtonsoft.Json; @@ -9,11 +11,14 @@ using System.Linq; using System.Security.Cryptography; using static HH.WCS.Mobox3.NFLZ.api.OtherModel; +using static HH.WCS.Mobox3.NFLZ.dispatch.NDC; +using static HH.WCS.Mobox3.NFLZ.wms.WMSHelper.AddChangeModel; namespace HH.WCS.Mobox3.NFLZ.process { internal class TaskProcess { + private static HttpHelper httpHelper = new HttpHelper(); #region 浠诲姟鐩稿叧 //--------------------------------------------------浠诲姟鐩稿叧-------------------------------------------------- /// <summary> @@ -72,25 +77,115 @@ /// <param name="extData"></param> internal static void OperateReq(string no, int state, string forkliftNo, string extData) { - if (state == 1101) + LogHelper.Info($"鏀跺埌瀹夊叏璇锋眰淇″彿锛歿state},浠诲姟鍙凤細{no}"); + var mst = WCSHelper.GetTask(no); + if (mst != null) { - //璇锋眰鍙栬揣锛�+ if (state == 1101) + { + //鍙栬揣璇锋眰锛屽厑璁歌繘鍏ュ彇璐э紝淇敼鍙傛暟18涓�101 + DeviceProcess.quliao(mst); + } + if (state == 1103) + { + DeviceProcess.Xieliao(mst); + } + if (state == 1102 || state == 1104) + { + sendSing(mst, state); + } } - if (state == 1102) + } + + internal static void sendSing(WCSTask wmsTask, int state = 0) + { + LogHelper.Info($"鏀跺埌浠诲姟{wmsTask.S_CODE}淇″彿{state},绫诲瀷{wmsTask.S_TYPE}"); + int devType = wmsTask.S_TYPE == "鎴愬搧涓嬬嚎" ? 14 : 19; + var plc = Settings.deviceInfos.Where(a => a.deviceType == devType).FirstOrDefault(); + if (plc != null) { - //璇锋眰鍗歌揣锛�- //鏍规嵁缁堢偣鍒ゆ柇锛屾槸cb02鐨勫叆鍙o紝鍒ゆ柇鍐呭瓨涓姸鎬侊紙瑕佺姸鎬佹椂闂达級锛屽厑璁稿嵏璐э紝閫氱煡agv鏀瑰弬鏁�- var dic = new Dictionary<string, string>(); - //< Req >< Order No = 'TN2302020002' ParamNo = '18' Param1 = '12' /></ Req > - dic.Add("No", no); - dic.Add("ParamNo", "8"); - dic.Add("Param1", "1"); - NDC.ChangeOrder(dic); - //鏀瑰畬鍙傛暟杞﹀瓙灏变細鑷繁鍗歌揣 + if (wmsTask.S_TYPE == "鎴愬搧涓嬬嚎") + { + if (state == 1101) + { + PlcHelper.SendHex(plc.address, "3F00110D0A"); + } + if (state == 1102) + { + PlcHelper.SendHex(plc.address, "3F00100d0a"); + } + } + if (wmsTask.S_TYPE == "鏍堟澘涓婄嚎") + { + if (state == 1103) + { + PlcHelper.SendHex(plc.address, "3F00210d0a"); + } + if (state == 1104 || state == -1) + { + PlcHelper.SendHex(plc.address, "3F00200d0a"); + } + } + if (wmsTask.S_TYPE.Contains("绌烘墭涓婄嚎") || wmsTask.S_TYPE.Contains("婊℃墭涓婄嚎") || wmsTask.S_TYPE.Contains("绌烘墭涓嬬嚎") || wmsTask.S_TYPE.Contains("婊℃墭涓嬬嚎")) + { + LogHelper.Info($"{wmsTask.S_TYPE}鍙栨秷鍐欏叆澶嶄綅淇″彿"); + writeSignal(wmsTask); + } } - if (state == 1103) + else LogHelper.Info("鍐滃か涓存睙-L6杈撻�绾�鏈厤缃�); + } + + public static void writeSignal(WCSTask mst, int state = 0) + { + if (mst.S_TYPE.Contains("绌烘墭涓婄嚎")) { - //澶ч搧妗嗗弶璧颁互鍚庨�鐭ワ紝鎴戜滑瑕侀�鐭ヨ緭閫佺嚎 + LogHelper.Info($"{mst.S_TYPE}鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙�); + //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙h繕鏄疊鍙�+ var locCode = mst.S_END_LOC; + var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault(); + if (devInfo != null) + { + var signal = devInfo.TN_Location[0] == mst.S_END_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A"; + if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}"); + } + else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_END_LOC}"); + } + if (mst.S_TYPE.Contains("婊℃墭涓婄嚎")) + { + LogHelper.Info($"{mst.S_TYPE}鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙�); + var locCode = mst.S_END_LOC; + var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault(); + if (devInfo != null) + { + var signal = "3F 00 10 0D 0A"; + if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}"); + } + else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_END_LOC}"); + } + if (mst.S_TYPE.Contains("绌烘墭涓嬬嚎")) + { + LogHelper.Info($"{mst.S_TYPE}鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙�); + var locCode = mst.S_START_LOC; + var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault(); + if (devInfo != null) + { + var signal = "3F 00 12 22 00 0D 0A"; + if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}"); + } + else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_END_LOC}"); + } + if (mst.S_TYPE.Contains("婊℃墭涓嬬嚎")) + { + LogHelper.Info($"{mst.S_TYPE}鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙�); + //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙h繕鏄疊鍙�+ var locCode = mst.S_START_LOC; + var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault(); + if (devInfo != null) + { + var signal = devInfo.TN_Location[0] == mst.S_START_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A"; + if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}"); + } + else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_START_LOC}"); } } @@ -156,168 +251,95 @@ /// <exception cref="NotImplementedException"></exception> public static void EmptyTask(WCSTask mst) { - ////鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ユ�浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鎬ヤ骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭 - //var db = new SqlHelper<object>().GetInstance(); - //Location startLoca = null; - //bool result = false; - // - //if (mst.S_TYPE.Contains("婊℃墭涓嬬嚎")) - //{ - // LogHelper.Info($"绌烘墭浠诲姟鐢熸垚澶勭悊锛屼换鍔$被鍨嬶細{mst.S_TYPE}"); - // startLoca = getMStartLoc1(db, startLoca, "鐡跺澂"); - // #region - // - // if (startLoca != null) - // { - // LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca)); - // var startArea = startLoca.S_AREA_CODE; - // string taskType = ""; - // if (mst.S_TYPE == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級") taskType = "娉ㄥ鍗充骇绌烘墭涓婄嚎锛堢摱鍧級"; - // if (mst.S_TYPE == "娉ㄥ搴撳瓨婊℃墭涓嬬嚎锛堢摱鍧級") taskType = "娉ㄥ搴撳瓨绌烘墭涓婄嚎锛堢摱鍧級"; - // int startLayer = startLoca.N_CURRENT_NUM; - // var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_LOC_CODE).First(); - // if (cntrInfo != null) - // { - // string cntr = cntrInfo.S_CNTR_CODE; - // result = IntensiveArea.LinJiangCreateTransport(startArea, startLoca.S_LOC_CODE, mst.S_START_LOC, taskType, cntr, 1, 1, mst.S_SRC_SYS, startLoca.N_ROW, 1, 1); - // if (result) LogHelper.Info($"{taskType}锛歿mst.S_SRC_SYS} 褰撳墠浣嶇疆{mst.S_START_LOC} 浠诲姟鍒涘缓鎴愬姛", "娉ㄥ鏈虹┖鎵樹笂绾�); - // } - // else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_LOC_CODE}"); - // } - //} - // - //if (mst.S_TYPE.Contains("绌烘墭涓嬬嚎")) - //{ - // LogHelper.Info($"婊℃墭浠诲姟鐢熸垚澶勭悊锛屼换鍔$被鍨嬶細{mst.S_TYPE}"); - // string startArea = ""; - // bool flage = false; - // string jbw = ""; - // string mk = ""; - // string machine = ""; - // LinjiangBCPWorkOrder bcpW = null; - // if (mst.S_TYPE.Contains("鐡跺澂")) - // { - // jbw = "鐡跺澂鎺ラ┏浣�; - // mk = "鐡跺澂婊℃墭鍑哄簱鎺ラ┏浣�; - // machine = "鐡跺澂缈绘枟鏈�; - // bcpW = db.Queryable<LinjiangBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鍐滃か涓存睙-鐡跺澂缈绘枟鏈�)).First(); - // } - // else - // { - // jbw = "鐡剁洊鎺ラ┏浣�; - // mk = "鐡剁洊婊℃墭"; - // bcpW = db.Queryable<LinjiangBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鍐滃か涓存睙-鐡剁洊缈绘枟鏈�)).First(); - // } - // - // if (bcpW.S_UsingNow == "Y") - // { - // LogHelper.Info("鍗充骇鍗崇敤宸ュ崟"); - // //鍗充骇鍗崇敤鍦ㄨ捣鐐逛负绾胯竟 - // var bcpInfo = Settings.GetLinJiangBCPAreaList().Where(a => a.AreaName == jbw && a.Enable == "1").FirstOrDefault(); - // if (bcpInfo != null) - // { - // startArea = bcpInfo.AreaNo; - // } - // } - // else - // { - // LogHelper.Info("闈炲嵆浜у嵆鐢ㄥ伐鍗�); - // //闈炲嵆浜у嵆鐢ㄨ捣鐐逛负搴撳尯 - // var bcpInfo = Settings.GetLinJiangBCPAreaList().Where(a => a.AreaName == mk && a.Enable == "1").FirstOrDefault(); - // if (bcpInfo != null) - // { - // startArea = bcpInfo.AreaNo; - // } - // } - // - // if (bcpW.S_UsingNow == "Y") - // { - // bool action = false; - // if (jbw == "鐡跺澂鎺ラ┏浣�) - // { - // flage = true; - // action = DeviceProcess.queryBCPFDJRow(db, ref startLoca); - // } - // LogHelper.Info($"鍗充骇鍗崇敤搴撳尯鏌ユ壘"); - // if (startLoca == null) - // { - // startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea, machine); - // //startLoca = db.Queryable<Location>().Where(a => a.S_AREA_CODE == startArea && a.N_CURRENT_NUM != 0 && a.S_LOCK_STATE == "鏃�).First(); - // //startLoca = TempleteOverExtendService.GetLocation(startArea, workInfo.S_ItemCode, "", false); - // if (startLoca == null) - // { - // flage = false; - // if (jbw == "鐡跺澂鎺ラ┏浣�) - // { - // LogHelper.Info($"鍗充骇鍗崇敤搴撳尯鏈壘鍒版弧鎵橈紝鍘绘弧鎵樺簱鍖烘煡鎵�); - // - // //鍗充骇鍗崇敤搴撳尯鏃犳弧鎵橈紝鍘婚潪鍗充骇鍗崇敤搴撳尯鏌ヨ - // LogHelper.Info($"mk:{mk}"); - // startArea = Settings.GetLinJiangBCPAreaList().Where(a => a.AreaName == mk && a.Enable == "1").FirstOrDefault().AreaNo; - // LogHelper.Info($"startArea:{startArea}"); - // //startLoca = TempleteOverExtendService.GetLocation(startArea, workInfo.S_ItemCode, "", false, true, true); - // startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea); - // } - // } - // else - // { - // if (action) - // { - // CPXXTable table = new CPXXTable - // { - // S_AREA_CODE = startArea, - // S_ROW = startLoca.N_ROW, - // S_TASK_TYPE = "鐡跺澂娉ㄥ鏈� - // }; - // db.Insertable(table).ExecuteCommand(); - // } - // } - // } - // } - // else - // { - // startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea); - // } - // - // if (startLoca != null) - // { - // LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca)); - // string taskType = ""; - // if (mst.S_TYPE == "缈绘枟鏈哄嵆浜х┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄嵆浜ф弧鎵樹笂绾匡紙鐡跺澂锛�; - // if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡跺澂锛�; - // if (mst.S_TYPE == "缈绘枟鏈哄嵆浜х┖鎵樹笅绾匡紙鐡剁洊锛�) taskType = "缈绘枟鏈哄嵆浜ф弧鎵樹笂绾匡紙鐡剁洊锛�; - // if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡剁洊锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡剁洊锛�; - // int startLayer = startLoca.N_CURRENT_NUM; - // var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_LOC_CODE).First(); - // if (cntrInfo != null) - // { - // string cntr = cntrInfo.S_CNTR_CODE; - // if (flage) - // { - // result = TaskHelper.LinJiangCreateTask("", startLoca.S_LOC_CODE, mst.S_START_LOC, taskType, 1, cntr, mst.S_SRC_SYS); - // if (result) - // { - // LocationHelper.LockLoc(startLoca.S_LOC_CODE, "鍑哄簱閿�); - // LocationHelper.LockLoc(mst.S_START_LOC, "鍏ュ簱閿�); - // var rowInfo = db.Queryable<RowLock>().Where(a => a.S_AREA_CODE == startArea && a.N_ROW == startLoca.N_ROW).First(); - // if (rowInfo != null) - // { - // rowInfo.S_LOCK_STATE = "鍗充骇鍑哄簱閿�; - // db.Updateable(rowInfo).UpdateColumns(a => new { a.S_LOCK_STATE }).ExecuteCommand(); - // } - // } - // } - // else - // { - // int pri = 1; - // if (taskType.Contains("鐡剁洊")) pri = 10; - // result = IntensiveArea.LinJiangCreateTransport(startArea, startLoca.S_LOC_CODE, mst.S_START_LOC, taskType, cntr, 1, 1, mst.S_SRC_SYS, startLoca.N_ROW, 1, pri); - // } - // if (result) LogHelper.Info($"{taskType}锛歿mst.S_SRC_SYS} 褰撳墠浣嶇疆{mst.S_START_LOC} 浠诲姟鍒涘缓鎴愬姛", "缈绘枟鏈烘弧鎵樹笂绾�); - // } - // else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_LOC_CODE}"); - // } - //} + //鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ユ�浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鎬ヤ骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭 + var db = new SqlHelper<object>().GetInstance(); + Location startLoca = null; + + if (mst.S_TYPE.Contains("婊℃墭涓嬬嚎")) + { + LogHelper.Info($"绌烘墭浠诲姟鐢熸垚澶勭悊锛屼换鍔$被鍨嬶細{mst.S_TYPE}"); + var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂绌烘墭" && a.enable == 1).First(); + if(areaInfo != null) + { + startLoca = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_COL).First(); + if (startLoca != null) + { + LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca)); + string taskType = ""; + if (mst.S_TYPE == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級") taskType = "娉ㄥ鍗充骇绌烘墭涓婄嚎锛堢摱鍧級"; + if (mst.S_TYPE == "娉ㄥ搴撳瓨婊℃墭涓嬬嚎锛堢摱鍧級") taskType = "娉ㄥ搴撳瓨绌烘墭涓婄嚎锛堢摱鍧級"; + var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_CODE).First(); + if (cntrInfo != null) + { + WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "鍑哄簱", taskType, cntrInfo.S_CNTR_CODE); + } + else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_CODE}"); + } + } + else + { + LogHelper.Info($"鐡跺澂绌烘墭鏈厤缃�); + } + } + + if (mst.S_TYPE.Contains("绌烘墭涓嬬嚎")) + { + LogHelper.Info($"婊℃墭浠诲姟鐢熸垚澶勭悊锛屼换鍔$被鍨嬶細{mst.S_TYPE}"); + string startArea = ""; + LinZhiBCPWorkOrder bcpW = null; + if (mst.S_TYPE.Contains("鐡跺澂")) + { + bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鍐滃か鏋楄姖-鐡跺澂缈绘枟鏈�) && a.S_WorkState == "鎵ц涓�).First(); + } + else + { + bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鍐滃か鏋楄姖-鐡剁洊缈绘枟鏈�) && a.S_WorkState == "鎵ц涓�).First(); + } + + if (mst.S_TYPE.Contains("鐡剁洊")) + { + //鐡剁洊鏃犲嵆浜у嵆鐢ㄥ拰闈炲嵆浜у嵆鐢�+ var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault(); + if (bcpInfo != null) + { + startLoca = DeviceProcess.getFDSXArea(db, bcpW, bcpInfo.areaCode); + } + } + else + { + if (bcpW.S_UsingNow == "Y") + { + LogHelper.Info($"鐡跺澂鍗充骇鍗崇敤A搴撳尯鏌ユ壘"); + startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇鍗崇敤A" && a.enable == 1).FirstOrDefault().areaCode; + startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea); + if (startLoca == null) + { + LogHelper.Info($"鐡跺澂鍗充骇鍗崇敤A搴撳尯鏈壘鍒版弧鎵橈紝鍘荤摱鍧嵆浜у嵆鐢˙搴撳尯鏌ユ壘"); + startLoca = TaskProcess.BCPInOrOut(db, true, "鐡跺澂鍗充骇鍗崇敤B", bcpW.S_ItemCode); + } + } + else + { + startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault().areaCode; + startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea); + } + } + + if (startLoca != null) + { + LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca)); + string taskType = ""; + if (mst.S_TYPE == "缈绘枟鏈哄嵆浜х┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄嵆浜ф弧鎵樹笂绾匡紙鐡跺澂锛�; + if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡跺澂锛�; + if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡剁洊锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡剁洊锛�; + var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_CODE).First(); + if (cntrInfo != null) + { + WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "鍑哄簱", taskType, cntrInfo.S_CNTR_CODE); + } + else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_CODE}"); + } + } } private static void claimGoodsTime(WCSTask mst, int state) @@ -513,47 +535,239 @@ internal static bool SendTask(WCSTask mst) { var result = false; - var start = "0"; var end = "0"; - var taskType = mst.S_TYPE.Trim(); + var db = new SqlHelper<object>().GetInstance(); if (mst.N_B_STATE == 0) { - //if (mst.S_SCHEDULE_TYPE == "NDC") { - // start = LocationHelper.GetAgvSite(mst.S_START_LOC); - // end = LocationHelper.GetAgvSite(mst.S_END_LOC); - // - // - // Console.WriteLine($"SendTask {mst.S_CODE}"); - // Console.WriteLine("start=" + start); - // Console.WriteLine("end= " + end); - // var dic = new Dictionary<string, string>(); - // dic.Add("Pri", mst.N_PRIORITY.ToString()); - // dic.Add("From", start.ToString()); - // dic.Add("To", end.ToString()); - // dic.Add("No", mst.S_CODE.Trim());// dic.Add("Ext1", "1"); dic.Add("Ext2", "CALLADDAGV"); dic.Add("N_CNTR_COUNT", ""); - // var res = NDC.AddNewOrder(1, dic); - // if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009)) { - // //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇 - mst.N_B_STATE = 1; - WCSHelper.UpdateStatus(mst, "宸叉帹閫�); - result = true; - // } - // } - // else if (mst.S_SCHEDULE_TYPE == "WCS") { - // //璋冪涓夋柟鎺ュ彛 - // var model = new HanAo.TaskInfoModel - // { - // requestPk = mst.S_CODE, - // frmPos = mst.S_START_LOC, - // toPos = mst.S_END_LOC, - // trkType = mst.S_OP_NAME == "鍏ュ簱" ? "1" : "2", - // contNo = mst.S_CNTR_CODE - // }; - // //if (HanAo.CreateOrder(model)) { - // mst.N_B_STATE = 1; - // WCSHelper.UpdateStatus(mst); - // //} - // } + try + { + int TsNo = 1;//涓嬪彂浠诲姟绫诲瀷锛氶粯璁�1 鍧洊-6 鎴愬搧浠诲姟-5 + var Extend1 = "0";//鍙栬揣绔欑偣 + var Extend2 = "0";//鍗歌揣绔欑偣 + string Extend3 = "";//鍔熻兘鐮� 16杩涘埗杞�0杩涘埗 + string Extend4 = "";//鍧洊锛氭墭鐩樼被鍨�鍗充骇鍗崇敤1锛岄潪鍗充骇鍗崇敤2 涓嶅尯鍒嗕负1 鎴愬搧锛氬彇鍗歌揣灞傛暟(鍏堝崟鐙浆鎹负16杩涘埗锛屽啀鎷兼帴杞崲涓�0杩涘埗) + string Extend5 = "";//鐗╂枡楂樺害(鍝佺浉) 鏍规嵁宸ュ崟鐗╂枡鍒扮墿鏂欒〃鑾峰彇涓嬪彂TS鐨勭墿鏂欓珮搴�+ string Extend6 = "";//鎵樼洏鐗堝瀷 澶囨敞锛氬皬鏉�1锛岄泦鍖栨澘 2锛屽皬鏉胯秴鎵�3锛岄泦鍖栨澘瓒呮墭 4 鏍规嵁宸ュ崟鐗堝瀷杞崲涓哄搴旂殑鍊�+ string Extend7 = "";//璧风偣鍒�+ string Extend8 = "";//缁堢偣鍒�+ int startLayer = mst.N_START_LAYER;// 璧风偣鍙栬揣灞傛暟 + int endLayer = mst.N_END_LAYER;// 缁堢偣鍗歌揣灞傛暟 + string workNo = mst.S_EQ_TASK_CODE;// 宸ュ崟鍙�+ string trayType = mst.S_NOTE;//鎵樼洏绫诲瀷-鏍规嵁鍚勮嚜鐜板満鎯呭喌鑾峰彇 + var taskType = mst.S_TYPE;// 浠诲姟绫诲瀷 + // 鑾峰彇璧风粓鐐圭殑AGV绔欑偣 鏌ヨ 鎵╁睍璐т綅琛�S_PICKUP_POINT-鐐逛綅灞傛暟 S_LOC_CODE-璐т綅缂栫爜 GetAgvSite-鏍囧噯鑾峰彇鎵╁睍璐т綅琛ㄦ暟鎹殑鏂规硶 + //Extend1 = LocationHelper.GetAgvSite(mst.S_START_LOC, startLayer.ToString()); + //Extend2 = LocationHelper.GetAgvSite(mst.S_END_LOC, endLayer.ToString()); + //浜屾湡鎴愬搧浠诲姟绫诲瀷(灏�鎴愬搧杞﹂棿 浠诲姟绫诲瀷鍔犲叆鍒版鏁扮粍涓紝鍗冲彲鏍规嵁 浠诲姟绫诲瀷 鍖哄垎杞﹂棿锛屽苟鑾峰彇瀵瑰簲鐨凾S鍙傛暟) + string[] ConveryTaskList = new string[] { "鎴愬搧涓嬬嚎", "鏍堟澘涓婄嚎", "闆跺ご涓嬬嚎" }; + if (ConveryTaskList.Contains(taskType) || taskType.Contains("绉诲簱")) + { + //TsNo = 5; + // + //if (taskType.Contains("鏍堟澘涓婄嚎")) + //{ + // Extend1 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE; + // Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC && a.N_LAYER == mst.N_END_LAYER).First().S_AGV_SITE; + // + // var startLoc = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC).First(); + // var endLoc = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC).First(); + // int startCol = int.Parse(startLoc.N_COL.ToString()); + // int endCol = int.Parse(endLoc.N_COL.ToString()); + // Extend7 = (startCol - 1).ToString(); + // Extend8 = (endCol - 1).ToString(); + //} + //else + //{ + // // 鎴愬搧浠诲姟涓嬪彂鍙傛暟鑾峰彇 + // + // var startLoc = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC).First(); + // var endLoc = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC).First(); + // int startCol = int.Parse(startLoc.N_COL.ToString()); + // int endCol = int.Parse(endLoc.N_COL.ToString()); + // var startLocInfo = db.Queryable<SegmentTable>().Where(a => a.S_AREA_CODE == startLoc.S_AREA_CODE && a.N_ROW == startLoc.N_ROW && a.S_START_COL <= startCol && a.S_END_COL >= startCol).First(); + // var endLocInfo = db.Queryable<SegmentTable>().Where(a => a.S_AREA_CODE == endLoc.S_AREA_CODE && a.N_ROW == endLoc.N_ROW && a.S_START_COL <= endCol && a.S_END_COL >= endCol).First(); + // + // if (startLocInfo != null) + // { + // Extend1 = mst.N_START_LAYER == 1 ? int.Parse(startLocInfo.S_First_Bit) : int.Parse(startLocInfo.S_Second_Bit); + // if (trayType.Contains("闆嗗寲鏉�)) Extend1 = Extend1 + 2; + // + // Extend7 = (startCol - startLocInfo.S_START_COL).ToString(); + // } + // else LogHelper.Info($"浠诲姟寮傚父锛歿mst.S_CODE},鑷敱绾挎琛ㄦ棤鍙敤璧风偣璐т綅鏁版嵁銆傝捣鐐硅揣浣嶇紪鐮侊細{mst.S_START_LOC}"); + // if (endLocInfo != null) + // { + // Extend2 = mst.N_END_LAYER == 1 ? int.Parse(endLocInfo.S_First_Bit) : int.Parse(endLocInfo.S_Second_Bit); + // Extend8 = (endCol - endLocInfo.S_START_COL).ToString(); + // } + // else LogHelper.Info($"浠诲姟寮傚父锛歿mst.S_CODE},鑷敱绾挎琛ㄦ棤鍙敤缁堢偣璐т綅鏁版嵁銆傜粓鐐硅揣浣嶇紪鐮侊細{mst.S_END_LOC}"); + // + // // 鍏朵粬鍔熻兘鐮佸彲浠ユ牴鎹换鍔$被鍨嬭嚜琛屾坊鍔�姝ゅ浠呯ず渚�绉诲簱 鍔熻兘鐮佽幏鍙栨柟寮忥紝濡傛灉鏈夋洿濂界殑鏂瑰紡锛屽彲浠ヨ嚜琛屼慨鏀� + // if (taskType.Contains("绉诲簱")) Extend3 = Convert.ToInt32("20", 16).ToString(); + // + //} + // + ////// 鑾峰彇鎴愬搧宸ュ崟鏁版嵁(鏌ヨ 鎴愬搧宸ュ崟琛�f + //if (taskType.Contains("绉诲簱")) + //{ + // var workInfo = db.Queryable<YiKuWorkOrder>().Where(a => a.S_WorkNo == workNo).First(); + // if (workInfo != null) + // { + // LogHelper.Info($"{workInfo.S_ORDER_TYPE}"); + // // 鑾峰彇涓嬪彂TS鐗╂枡灞傛暟鏁版嵁(鏌ヨ 鐗╂枡琛� + // if (workInfo.S_ORDER_TYPE.Contains("绉诲簱")) + // { + // LogHelper.Info($"鐗╂枡缂栫爜锛歿mst.S_ITEM_CODE},鏍堟澘绫诲瀷锛歿trayType},鐗╂枡瑙勬牸锛歿workInfo.S_ItemLayer}"); + // var itemInfo1 = db.Queryable<ItemRel>().Where(a => a.S_ITEM_CODE == mst.S_ITEM_CODE && a.S_TRAY_TYPE == trayType && a.S_ITEM_MODEL == workInfo.S_ItemLayer).First(); + // if (itemInfo1 != null) + // { + // Extend5 = itemInfo1.S_ITEM_LAYER; + // } + // else + // { + // LogHelper.Info($"鐗╂枡琛ㄦ湭缁存姢淇℃伅锛岀墿鏂欑紪鐮侊細{mst.S_ITEM_CODE},鏍堟澘绫诲瀷锛歿trayType},鐗╂枡瑙勬牸锛歿workInfo.S_ItemLayer}"); + // } + // //if (workInfo.S_ORDER_TYPE == "鏃犵爜鍏ュ簱" && endLayer == 1) Extend5 = ""; + // } + // + // // 鏍规嵁宸ュ崟涓墭鐩樼被鍨嬭浆鎹负瀵瑰簲鐨勪笅鍙慣S鍙傛暟鏁版嵁 + // LogHelper.Info($"S_TRAY_TYPE:{trayType}"); + // LogHelper.Info($"Extend5:{Extend5}"); + // int x = 0; + // if (trayType == "灏忔澘") x = 1; + // if (trayType == "闆嗗寲鏉�) x = 2; + // if (trayType == "灏忔澘瓒呮墭") x = 3; + // if (trayType == "闆嗗寲鏉胯秴鎵�) x = 4; + // + // Extend6 = x.ToString(); + // + // } + //} + //else + //{ + // var workInfo = db.Queryable<LinJiangWorkOrder>().Where(a => a.S_WorkNo == workNo).First(); + // if (workInfo != null) + // { + // LogHelper.Info($"{workInfo.S_ORDER_TYPE}"); + // // 鑾峰彇涓嬪彂TS鐗╂枡灞傛暟鏁版嵁(鏌ヨ 鐗╂枡琛� + // if (workInfo.S_ORDER_TYPE.Contains("涓嬬嚎") || workInfo.S_ORDER_TYPE == "鏃犵爜鍏ュ簱") + // { + // var itemInfo1 = db.Queryable<ItemRel>().Where(a => a.S_ITEM_CODE == workInfo.S_ItemCode && a.S_TRAY_TYPE == trayType && a.S_ITEM_MODEL == workInfo.S_ItemLayer).First(); + // if (itemInfo1 != null) + // { + // Extend5 = itemInfo1.S_ITEM_LAYER; + // } + // //if (workInfo.S_ORDER_TYPE == "鏃犵爜鍏ュ簱" && endLayer == 1) Extend5 = ""; + // } + // + // // 鏍规嵁宸ュ崟涓墭鐩樼被鍨嬭浆鎹负瀵瑰簲鐨勪笅鍙慣S鍙傛暟鏁版嵁 + // LogHelper.Info($"S_TRAY_TYPE:{trayType}"); + // int x = 0; + // if (trayType == "灏忔澘") x = 1; + // if (trayType == "闆嗗寲鏉�) x = 2; + // if (trayType == "灏忔澘瓒呮墭") x = 3; + // if (trayType == "闆嗗寲鏉胯秴鎵�) x = 4; + // + // Extend6 = x.ToString(); + // + // } + //} + // + //// 鑾峰彇 浠诲姟鍙傛暟4 DATA 鏁版嵁 + //string startLayerValue = Convert.ToString(startLayer, 16).ToUpper(); + //string endLayerValue = Convert.ToString(endLayer, 16).ToUpper(); + ////Extend4 = Convert.ToInt32(startLayerValue + endLayerValue, 16).ToString(); + //Extend4 = ((startLayer * 16) + endLayer).ToString(); + } + else + { + TsNo = 1; + // 鍧洊浠诲姟涓嬪彂鍙傛暟鑾峰彇 + // 鑾峰彇璧风粓鐐圭殑AGV绔欑偣 + Extend1 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE; + Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC && a.N_LAYER == mst.N_END_LAYER).First().S_AGV_SITE; + Extend3 = "0"; + // 鑾峰彇 浠诲姟鍙傛暟4 DATA 鏁版嵁 + string startLayerValue = Convert.ToString(startLayer, 16).ToUpper(); + string endLayerValue = Convert.ToString(endLayer, 16).ToUpper(); + //Extend4 = Convert.ToInt32(startLayerValue + endLayerValue, 16).ToString(); + Extend4 = ((startLayer * 16) + endLayer).ToString(); + //Extend4 = db.Queryable<LinjiangBCPWorkOrder>().Where(a => a.S_WorkNo == workNo).First().S_UsingNow == "N" ? "2" : "1"; + + //鐡跺澂娉ㄥ鏈虹珯鐐规牴鎹厤缃枃浠惰幏鍙�+ if (taskType.Contains("娉ㄥ") && taskType.Contains("鐡跺澂")) + { + var devInfo = Settings.deviceInfos.Where(a => (a.TN_Location.Contains(mst.S_START_LOC) || a.TN_Location.Contains(mst.S_END_LOC)) && a.enable == 1).FirstOrDefault(); + string machine = (devInfo.TN_Location[0] == mst.S_START_LOC || devInfo.TN_Location[0] == mst.S_END_LOC) ? "A" : "B"; + string machineTwo = devInfo.deviceName.Split('-')[1] + machine; + LogHelper.Info($"鏈哄彴锛歿machineTwo}"); + var siteInfo = Settings.pPZSJSites.Where(a => a.siteName == machineTwo && a.enable == 1).FirstOrDefault(); + if (siteInfo != null) + { + if (taskType.Contains("绌烘墭涓婄嚎")) + { + //鏀瑰彉缁堢偣绔欑偣 + Extend2 = siteInfo.site[1]; + } + else + { + //鏀瑰彉璧风偣绔欑偣 + Extend1 = siteInfo.site[0]; + } + } + else LogHelper.Info("閰嶇疆鏂囦欢鏈厤缃摱鍧敞濉戞満绔欑偣"); + } + } + + Console.WriteLine($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}"); + LogHelper.Info($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}"); + bool action = true; + var dic = new Dictionary<string, string>(); + //var dic1 = new Dictionary<string, string>(); + //dic.Add("Pri", mst.N_PRIORITY.ToString()); + //dic.Add("No", mst.S_CODE.Trim()); + dic.Add("From", Extend1); + dic.Add("To", Extend2); + dic.Add("Func", Extend3); + dic.Add("Data", Extend4); + + if (ConveryTaskList.Contains(taskType) || taskType.Contains("绉诲簱")) + { + dic.Add("ItemHeight", Extend5); + dic.Add("CntrType", Extend6); + dic.Add("FromCol", Extend7); + dic.Add("ToCol", Extend8); + if (taskType.Contains("绉诲簱") || taskType.Contains("鎴愬搧涓嬬嚎") || taskType.Contains("闆跺ご涓嬬嚎")) + { + LogHelper.Info($"绉诲簱锛欵xtend5:{Extend5},Extend6:{Extend6},Extend7:{Extend7},Extend8:{Extend8},"); + if (Extend5 == "" || Extend6 == "" || Extend7 == "" || Extend8 == "") + { + action = false; + } + } + } + + if (action) + { + var res = new AGVResult(); + res = NDC.AddNewOrderNew(TsNo,mst.N_PRIORITY,mst.S_CODE, dic); + + if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009)) + { + mst.N_B_STATE = 1; + WCSHelper.UpdateStatus(mst, "宸叉帹閫�); + result = true; + } + } + } + catch (Exception ex) + { + LogHelper.Error($"SendTaskStandard Error:{ex.Message}", ex); + } + + //mst.N_B_STATE = 1; + //WCSHelper.UpdateStatus(mst, "宸叉帹閫�); + //result = true; } return result; } @@ -614,48 +828,43 @@ /// 鍗婃垚鍝佸嚭鍏ュ簱 /// </summary> /// <param name="db"></param> - /// <param name="action">true:鍏ュ簱 false:鍑哄簱</param> - /// <param name="startCode"></param> + /// <param name="action"></param> + /// <param name="areaName"></param> + /// <param name="itemCode"></param> /// <returns></returns> - public static Location BCPInOrOut(SqlSugarClient db, bool action, string startCode = "", string areaName = "", LinZhiBCPWorkOrder workInfo = null) + public static Location BCPInOrOut(SqlSugarClient db, bool action, string areaName,string itemCode) { Location result = null; if (action) { - var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startCode).First(); - var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First(); - if (itemInfo != null) + //鐡剁洊搴撳尯锛屼袱灞傚瘑闆嗗瀷搴撳尯 绌烘弧鍦ㄥ悓涓�釜搴撳尯锛岄渶瑕佸尯鍒嗕笉鍚屾帓 + var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First(); + if (areaInfo != null) { - //鐡剁洊搴撳尯锛屼袱灞傚瘑闆嗗瀷搴撳尯 绌烘弧鍦ㄥ悓涓�釜搴撳尯锛岄渶瑕佸尯鍒嗕笉鍚屾帓 - var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First(); - if (areaInfo != null) + //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷 + LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿areaInfo.areaCode},itemCode:{itemCode}", "WMSAlgoRithm"); + try { - //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷 - LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿areaInfo.areaCode},itemCode:{itemInfo.S_ITEM_CODE},itemBatch:{itemInfo.S_BATCH_NO}", "WMSAlgoRithm"); - try + if (result == null) { - if (result == null) + var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL) + .PartitionBy(a => a.N_ROW).Take(1) + .ToList(); + if (locInfo.Count > 0) { - var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL) - .PartitionBy(a => a.N_ROW).Take(1) - .ToList(); - if (locInfo.Count > 0) + foreach (var a in locInfo) { - foreach (var a in locInfo) + //鍘绘帀褰撳墠璐т綅鏈夐攣锛屾垨鑰呬负绌烘墭鐨勮揣浣�+ if (a.S_LOCK_STATE == "鏃�) { - string itemCode = ""; + string endItemCode = ""; var endCntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First(); if (endCntrInfo != null) { var endItemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == endCntrInfo.S_CNTR_CODE).First(); if (endItemInfo != null) { - itemCode = endItemInfo.S_ITEM_CODE; - } - else - { - LogHelper.Info($"缁堢偣璐т綅鏈粦瀹氱墿鏂欎俊鎭�); - continue; + endItemCode = endItemInfo.S_ITEM_CODE; } } else @@ -663,89 +872,80 @@ LogHelper.Info($"缁堢偣璐т綅鏈粦瀹氭墭鐩樹俊鎭�); continue; } - - //鍘绘帀褰撳墠璐т綅鏈夐攣锛屾垨鑰呬负绌烘墭鐨勮揣浣�- if (a.S_LOCK_STATE == "鏃�) + //鍒ゆ柇鏄惁鍜屽綋鍓嶈揣浣嶇殑鐗╂枡缂栫爜鐩稿悓 + if (itemCode == endItemCode) { - //鍒ゆ柇鏄惁鍜屽綋鍓嶈揣浣嶇殑鐗╂枡缂栫爜鐩稿悓 - if (itemCode == itemInfo.S_ITEM_CODE) + //鏌ヨ褰撳墠鎺掓槸鍚﹀彲鍏ワ紙鍒ゆ柇鏄槸鍚︽湁鍏ュ簱閿佸拰鍑哄簱閿侊級 + var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First(); + if (lockInfo == null) { - //鏌ヨ褰撳墠鎺掓槸鍚﹀彲鍏ワ紙鍒ゆ柇鏄槸鍚︽湁鍏ュ簱閿佸拰鍑哄簱閿侊級 - var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First(); - if (lockInfo == null) + //褰撳墠鎺掓棤浠诲姟 + if (a.N_CURRENT_NUM < a.N_CAPACITY) result = a; + else { - //褰撳墠鎺掓棤浠诲姟 - if (a.N_CURRENT_NUM < a.N_CAPACITY) result = a; - else + //鏌ヨ鍚庨潰褰撳墠璐т綅鍚庝竴涓�+ result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW > a.N_ROW && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First(); + } + if (result != null) + { + break; + } + } + } + } + } + } + if (result == null) + { + //todo 杩橀渶瑕佸垽鏂攣 + #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓 + LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅銆�, "WMSAlgoRithm"); + //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪 + var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList(); + //2.1 閫変竴涓┖鎺�+ if (list.Count > 0) + { + LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅鏁伴噺涓猴細{list.Count}銆�, "WMSAlgoRithm"); + for (int i = 0; i < list.Count; i++) + { + LogHelper.Info($"鍏ュ簱绠楁硶07:鑾峰彇绌烘帓璐т綅锛氳揣浣嶇紪鐮侊細{list[i].S_CODE.Trim()},褰撳墠鏁伴噺锛歿list[i].N_CURRENT_NUM},鎺掑彿锛歿list[i].N_ROW},搴撳尯缂栫爜锛歿list[i].S_AREA_CODE.Trim()}", "WMSAlgoRithm"); + if (list[i].S_LOCK_STATE.Trim().Contains("鏃�)) + { + //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡 + int row = list[i].N_ROW; + string areaCode = list[i].S_AREA_CODE.Trim(); + var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaCode && b.N_ROW == row && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First(); + if (lockInfo == null) + { + var locInfo1 = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaCode && a.N_ROW == row).Select(a => new { sum = SqlFunc.AggregateSum(a.N_CURRENT_NUM) }).First(); + if (locInfo1 != null) + { + LogHelper.Info($"{locInfo1.sum},row:{row}"); + if (locInfo1.sum == 0) { - //鏌ヨ鍚庨潰褰撳墠璐т綅鍚庝竴涓�- result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW > a.N_ROW && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First(); - } - if (result != null) - { + //绌烘帓 + result = list[i]; break; } } + else LogHelper.Info("鏈壘鍒拌鎺�); } - } - } - } - if (result == null) - { - //todo 杩橀渶瑕佸垽鏂攣 - #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓 - LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅銆�, "WMSAlgoRithm"); - //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪 - var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList(); - //2.1 閫変竴涓┖鎺�- if (list.Count > 0) - { - LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅鏁伴噺涓猴細{list.Count}銆�, "WMSAlgoRithm"); - for (int i = 0; i < list.Count; i++) - { - LogHelper.Info($"鍏ュ簱绠楁硶07:鑾峰彇绌烘帓璐т綅锛氳揣浣嶇紪鐮侊細{list[i].S_CODE.Trim()},褰撳墠鏁伴噺锛歿list[i].N_CURRENT_NUM},鎺掑彿锛歿list[i].N_ROW},搴撳尯缂栫爜锛歿list[i].S_AREA_CODE.Trim()}", "WMSAlgoRithm"); - if (list[i].S_LOCK_STATE.Trim().Contains("鏃�)) + else { - //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡 - int row = list[i].N_ROW; - string areaCode = list[i].S_AREA_CODE.Trim(); - var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaCode && b.N_ROW == row && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First(); - if (lockInfo == null) - { - var locInfo1 = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaCode && a.N_ROW == row).Select(a => new { sum = SqlFunc.AggregateSum(a.N_CURRENT_NUM) }).First(); - if (locInfo1 != null) - { - LogHelper.Info($"{locInfo1.sum},row:{row}"); - if (locInfo1.sum == 0) - { - //绌烘帓 - result = list[i]; - break; - } - } - else LogHelper.Info("鏈壘鍒拌鎺�); - } - else - { - LogHelper.Info("璇ユ帓鏈夐攣"); - } + LogHelper.Info("璇ユ帓鏈夐攣"); } } } - else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{areaInfo.areaCode}"); - #endregion } + else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{areaInfo.areaCode}"); + #endregion } } - catch (Exception ex) - { - Console.WriteLine("GetLocationIn:" + ex.Message + ex.StackTrace); - LogHelper.Error("GetLocationIn:" + ex.Message, ex); - } } - else + catch (Exception ex) { - LogHelper.Info($"鍏ュ簱浠诲姟 鐡剁洊搴撳尯鏈厤缃�); + Console.WriteLine("GetLocationIn:" + ex.Message + ex.StackTrace); + LogHelper.Error("GetLocationIn:" + ex.Message, ex); } } else @@ -755,20 +955,6 @@ } else { - string itemCode = ""; - if (string.IsNullOrEmpty(startCode)) - { - var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startCode).First(); - var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First(); - if(itemInfo != null) - { - itemCode = itemInfo.S_ITEM_CODE; - } - } - if (workInfo != null) - { - itemCode = workInfo.S_ItemCode; - } var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault(); if(areaInfo != null) { @@ -782,12 +968,17 @@ var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First(); if(cntrInfo != null) { + string endItemCode = ""; var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First(); if(itemInfo != null && itemInfo.S_ITEM_CODE == itemCode) { + endItemCode = itemInfo.S_ITEM_CODE; + } + if(endItemCode == itemCode) + { //鍒ゆ柇褰撳墠鎺掓湁鏃犻攣 var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First(); - if(lockInfo == null) + if (lockInfo == null) { result = a; break; @@ -832,7 +1023,7 @@ /// <param name="taskName"></param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> - internal static Location BCPFullOut(SqlSugarClient db, string taskName, string S_START_LOC) + internal static Location BCPFullOut(SqlSugarClient db, string taskName, string itemCode) { Location result = null; @@ -852,11 +1043,11 @@ } if (result == null) { - result = TaskProcess.BCPInOrOut(db, true, S_START_LOC, "鐡跺澂鍗充骇鍗崇敤B"); + result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂鍗充骇鍗崇敤B", itemCode); } if(result == null) { - result = TaskProcess.BCPInOrOut(db, true, S_START_LOC,"鐡跺澂搴撳尯"); + result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", itemCode); } } @@ -876,7 +1067,7 @@ } if (result == null) { - result = TaskProcess.BCPInOrOut(db, true, S_START_LOC, "鐡跺澂搴撳尯"); + result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", itemCode); } } return result; @@ -909,5 +1100,546 @@ } return result; } + + /// <summary> + /// 鍗婃垚鍝佺Щ搴�+ /// </summary> + /// <param name="action">true - 宸ュ崟寮�惎 false - 宸ュ崟鍏抽棴</param> + /// <param name="machine">璁惧</param> + internal static void BCPYiKu(bool action, string machine) + { + var db = new SqlHelper<object>().GetInstance(); + Location startLoc = null; + Location endLoc = null; + if (action) + { + if(machine == "鐡跺澂缈绘枟鏈�) + { + //鐡跺澂缈绘枟鏈�+ //寮�惎锛屽垽鏂伐鍗曠被鍨嬶紝鏍规嵁宸ュ崟绫诲瀷琛ュ厖瀵瑰簲鐨勫簱鍖�鍗充骇鍗崇敤涓嶈ˉ鍏�+ var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault(); + if (areaInfo != null) + { + var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "鍐滃か鏋楄姖-鐡舵壒缈绘枟鏈� && a.S_WorkState == "鎵ц涓�).First(); + if (workInfo.S_UsingNow == "N") + { + startLoc = TaskProcess.BCPInOrOut(db, false, "鐡跺澂搴撳尯", workInfo.S_ItemCode); + endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_COL).First(); + } + } + else + { + LogHelper.Info("鐡跺澂闈炲嵆浜у嵆鐢ㄦ湭閰嶇疆"); + } + + } + if (machine == "鐡跺澂娉ㄥ鏈�) + { + //寮�惎锛屾煡璇�鐡跺澂绌烘墭 鏄惁绌烘墭鏁伴噺澶т簬3鎵橈紝濡傛灉涓嶅ぇ浜庯紝鍒欒ˉ绌烘墭 + var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂绌烘墭" && a.enable == 1).FirstOrDefault(); + if(areaInfo != null) + { + var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).ToList(); + if(locList.Count > 2) + { + LogHelper.Info("鐡跺澂绌烘墭 琛ョ┖鎵�); + startLoc = TaskProcess.BCPInOrOut(db, false, "鐡跺澂搴撳尯",""); + endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_COL).First(); + } + } + else + { + LogHelper.Info("鐡跺澂绌烘墭鏈厤缃�); + } + + } + if (machine == "鐡剁洊缈绘枟鏈�) + { + //寮�惎锛屾煡璇�鐡剁洊闈炴�浜ф�鐢�鐗╂枡鏄惁婊★紝涓嶆弧鍒欒ˉ鍏呯墿鏂�+ var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault(); + if (areaInfo != null) + { + var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).First(); + if(locInfo != null) + { + LogHelper.Info("鐡剁洊闈炲嵆浜у嵆鐢�琛ユ弧鎵�); + var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "鍐滃か鏋楄姖-鐡剁洊缈绘枟鏈� && a.S_WorkState == "鎵ц涓�).First(); + startLoc = TaskProcess.BCPInOrOut(db, false, "鐡剁洊搴撳尯", workInfo.S_ItemCode); + endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_COL).First(); + } + } + else + { + LogHelper.Info("鐡剁洊闈炲嵆浜у嵆鐢ㄦ湭閰嶇疆"); + } + } + } + else + { + if (machine == "鐡跺澂缈绘枟鏈�) + { + //鍏抽棴锛屾煡璇�鐡跺澂闈炲嵆浜у嵆鐢�鐡跺澂鍗充骇鍗崇敤A 鐡跺澂鍗充骇鍗崇敤B 鏄惁鏈夌墿鏂欙紝鏈夊垯鍏ュ簱 + var areaList = Settings.areaInfos.Where(a => (a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� || a.areaName == "鐡跺澂鍗充骇鍗崇敤A") && a.enable == 1).ToList(); + if (areaList.Count > 0) + { + foreach(var a in areaList) + { + startLoc = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.areaCode && b.N_CURRENT_NUM > 0 && b.S_LOCK_STATE == "鏃�).Includes(b => b.LocCntrRel).First(); + if (startLoc != null) break; + } + } + if (startLoc == null) + { + var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇鍗崇敤B" && a.enable == 1).FirstOrDefault(); + if(areaInfo != null) + { + var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList(); + if(locInfo.Count > 0) + { + foreach(var a in locInfo) + { + int row = a.N_ROW; + var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First(); + if(lockInfo == null) + { + startLoc = a; + } + } + } + } + } + if(startLoc != null) + { + if (startLoc.LocCntrRel != null) + { + var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == startLoc.LocCntrRel.S_CNTR_CODE).First(); + if (itemInfo != null) + { + endLoc = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", itemInfo.S_ITEM_CODE); + } + } + } + } + if (machine == "鐡跺澂娉ㄥ鏈�) + { + //鍏抽棴锛屾煡璇�鐡跺澂绌烘墭 鏄惁鏈夌┖鎵橈紝鏈夊垯鍏ュ簱 + var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂绌烘墭" && a.enable == 1).FirstOrDefault(); + if (areaInfo != null) + { + startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).Includes(a => a.LocCntrRel).First(); + if(startLoc != null) + { + endLoc = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", ""); + } + } + } + if (machine == "鐡剁洊缈绘枟鏈�) + { + //鍏抽棴锛�1銆佹煡璇�鐡剁洊绌烘墭 鏄惁杩樻湁鎵樼洏锛屾湁鍒欏叆搴� 2銆佹煡璇㈢摱鐩栭潪鍗充骇鍗崇敤 鏄惁鏈夌墿鏂欙紝 鏈夊垯鍏ュ簱 + //鍏抽棴锛屾煡璇�鐡跺澂绌烘墭 鏄惁鏈夌┖鎵橈紝鏈夊垯鍏ュ簱 + + //鏌ヨ绌烘墭搴撳尯 + var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊绌烘墭" && a.enable == 1).FirstOrDefault(); + if (areaInfo != null) + { + startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).Includes(a => a.LocCntrRel).First(); + if (startLoc != null) + { + endLoc = TaskProcess.BCPInOrOut(db, true, "鐡剁洊搴撳尯", ""); + } + } + + //鏌ヨ婊℃墭搴撳尯 + if(startLoc == null) + { + areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault(); + if (areaInfo != null) + { + startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).Includes(a => a.LocCntrRel).First(); + if (startLoc != null) + { + if(startLoc.LocCntrRel != null) + { + var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == startLoc.LocCntrRel.S_CNTR_CODE).First(); + if(itemInfo != null) + { + endLoc = TaskProcess.BCPInOrOut(db, true, "鐡剁洊搴撳尯", itemInfo.S_ITEM_CODE); + } + } + } + } + } + } + } + + if (startLoc != null && endLoc != null) + { + WMSHelper.CreateOpTask(startLoc.S_CODE, endLoc.S_CODE, "鍏ュ簱", "鍗婃垚鍝佺Щ搴�, startLoc.LocCntrRel.S_CNTR_CODE); + } + } + + /// <summary> + /// 浠诲姟淇℃伅鎺ュ彛--姹夊拰浠诲姟姣忎釜鐘舵�杩涜瀹炴椂涓婁紶(鍖呮嫭浠诲姟鍒涘缓鏃讹紝涓婃姤 8) + /// </summary> + /// <param name="wmsTask"></param> + internal static void GeneralInterFaceFunc(WCSTask wmsTask, string taskStatus, string forkliftNo = "") + { + string msg = ""; + var req = new SimpleResult(); + var db = new SqlHelper<object>().GetInstance(); + ///鍚屼竴鏉′换鍔″悓绉嶇姸鎬佸彧涓婃姤涓� + ///鏌ヨ浠诲姟鍔ㄤ綔琛紝鏈変换鍔$浉鍚屽苟涓斾换鍔$姸鎬佺浉鍚岀殑锛屽氨涓嶄笂鎶ワ紙浠诲姟鐘舵�涓�杩樿鏌ヨ杞﹀彿鏄惁瀛樺湪锛�+ bool flage = false; + var no = wmsTask.S_CODE; + var code = int.Parse(taskStatus); + if (taskStatus == "1") + { + if (forkliftNo != "0") + { + if (db.Queryable<TaskAction>().Count(a => a.S_TASK_CODE.Trim() == no.Trim() && a.N_ACTION_CODE == code) == 2) + { + wmsTask.S_EQ_NO = forkliftNo; + flage = true; + } + } + } + else + { + flage = true; + } + + if (flage) + { + if (WCSHelper.CheckActionRecordExist(wmsTask.S_CODE, 4) && taskStatus == "7") taskStatus = "2"; + try + { + //鑾峰彇涓婃姤鎺ュ彛鐨刄RL + var url = Settings.thirdPartyUrls.Where(a => a.UrlNo == "1" && a.enable == 1).FirstOrDefault(); + LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},鑾峰彇URL锛歿url}", "ThirdSystemLog"); + //浠诲姟绫诲瀷鏁版嵁澶勭悊 + string taskType = ""; + var taskTypeInfo = db.Queryable<TaskTypeConvTable>().Where(a => a.taskTypeName == wmsTask.S_TYPE).First(); + if (taskTypeInfo != null) taskType = taskTypeInfo.taskType; + LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},浠诲姟绫诲瀷鏁版嵁澶勭悊锛歿taskType}", "ThirdSystemLog"); + + //鎵樼洏鐗╂枡鏁版嵁澶勭悊 + List<string> cntrList = new List<string>(wmsTask.S_CNTR_CODE.Split(','));//鑾峰彇鎵樼洏鏁版嵁 + string itemCode = "";//鐗╂枡缂栫爜 + itemCode = GeneralInterFaceGetItemCodeFunc(wmsTask, db, cntrList, itemCode); + LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},鐗╂枡缂栫爜锛歿itemCode}", "ThirdSystemLog"); + List<asnReferenceDModel> asnReferenceList = new List<asnReferenceDModel> { };//鎵樼爜鏁扮粍 + GeneralInterFaceGetTrayCodeFunc(wmsTask, db, asnReferenceList, cntrList); + LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},鑾峰彇鎵樼洏鏁版嵁锛歿JsonConvert.SerializeObject(asnReferenceList)}", "ThirdSystemLog"); + + //AGV璁惧淇℃伅澶勭悊 + string equipmentCode = ""; + string orgCode = ""; + string orgName = ""; + string proxyInterfaceCode = "0050"; + GeneralInterFaceGetAgvDeviceInfoFunc(wmsTask, db, ref equipmentCode, ref orgCode, ref orgName, ref proxyInterfaceCode); + LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},equipmentCode锛歿equipmentCode},orgCode锛歿orgCode},orgName:{orgName},proxyInterfaceCode:{proxyInterfaceCode}", "ThirdSystemLog"); + + LogHelper.Info($"wmstask.t_start_time锛歿wmsTask.T_START_TIME}"); + if (DateTime.MinValue == wmsTask.T_START_TIME) + { + wmsTask.T_START_TIME = null; + } + + DateTime dateTime = taskStatus == "1" ? Convert.ToDateTime(wmsTask.T_START_TIME).AddHours(-8) : taskStatus == "2" || taskStatus == "7" ? Convert.ToDateTime(wmsTask.T_END_TIME).AddHours(-8) : taskStatus == "8" ? Convert.ToDateTime(wmsTask.T_CREATE).AddHours(-8) : DateTime.UtcNow; + string createTime = GetTimeStamp(wmsTask.T_CREATE.AddHours(-8), 1, 2); + string startTime = ""; + //鍦–#涓紝浣跨敤DateTimeOffset.UtcNow.ToUnixTimeSeconds()鏂规硶鑾峰彇Unix鏃堕棿鎴虫椂锛屽彲鑳戒細澶氬嚭涓�釜姣銆傝繖鏄洜涓篣nix鏃堕棿鎴虫槸浠ョ涓哄崟浣嶇殑锛岃�DateTimeOffset.UtcNow杩斿洖鐨勬槸UTC鏃堕棿锛屽叾绮惧害涓�00绾崇銆�+ if (wmsTask.S_WORK_MODE != "agv" && !string.IsNullOrEmpty(wmsTask.S_WORK_MODE)) startTime = wmsTask.S_WORK_MODE; + else + { + startTime = wmsTask.T_START_TIME == null ? null : GetTimeStamp(Convert.ToDateTime(wmsTask.T_START_TIME).AddHours(-8), 1, 2); + if (startTime != null) + { + wmsTask.S_WORK_MODE = startTime; + db.Updateable(wmsTask).UpdateColumns(a => new { a.S_WORK_MODE }).ExecuteCommand(); + } + } + + string endTime = wmsTask.T_END_TIME == null ? null : GetTimeStamp(Convert.ToDateTime(wmsTask.T_END_TIME).AddHours(-8), 1, 2); + string businessTime = taskStatus == "1" ? startTime : taskStatus == "2" || taskStatus == "7" ? endTime : taskStatus == "8" ? createTime : GetTimeStamp(dateTime, 1, 2); + string dt = wmsTask.T_START_TIME == null ? null : Convert.ToDateTime(wmsTask.T_START_TIME).AddHours(-8).ToString(); + string mill = wmsTask.T_START_TIME == null ? null : Convert.ToDateTime(wmsTask.T_START_TIME).AddHours(-8).Millisecond.ToString(); + LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},浠诲姟寮�鏃堕棿锛歿wmsTask.T_START_TIME}锛屼换鍔¤浆鎹㈠悗鏃堕棿锛歿dt}锛屼换鍔″彿姣鏃堕棿锛歿mill}锛岃浆鎹㈠悗鏃堕棿锛歿startTime}", "ThirdSystemLog"); + + string sendMsg = JsonConvert.SerializeObject(new + { + taskCode = wmsTask.S_CODE,//浠诲姟缂栫爜 + taskStatus = taskStatus,//浠诲姟鐘舵�-浠诲姟鍒涘缓鎴愬姛浼犺緭 8 + taskType = taskType,//浠诲姟绫诲瀷-闇�鏍规嵁 閰嶇疆琛ㄦ暟鎹繘琛岃浆鎹紝杞崲涓篗ES鐨勪换鍔$被鍨�+ createTime = createTime,//闇�浆鎹负 鏃堕棿鎴� wmsTask.T_CREATE + startTime = startTime,//闇�浆鎹负 鏃堕棿鎴�wmsTask.T_START_TIME + endTime = endTime,//闇�浆鎹负 鏃堕棿鎴�wmsTask.T_END_TIME + businessTime = businessTime,//褰撳墠浠诲姟鏃堕棿-闇�浆鎹负 鏃堕棿鎴� DateTime.Now + startAddress = wmsTask.S_START_LOC,//璧风偣 + endAddress = wmsTask.S_END_LOC,//缁堢偣 + equipmentNo = wmsTask.S_EQ_NO,//杞﹁締缂栧彿 + equipmentCode = equipmentCode,//杞﹁締閾墝-闇�鏍规嵁 閰嶇疆琛ㄦ暟鎹紝閫氳繃 杞﹁締缂栧彿浠ュ強宸ュ巶缂栫爜 鏌ヨ瀵瑰簲杞﹁締閾墝 + orgCode = Settings.FactoryCode,//宸ュ巶缂栫爜 + orgName = Settings.FactoryName,//宸ュ巶鍚嶇О + sku = itemCode,//鐗╂枡缂栫爜 + asnReferenceDList = asnReferenceList,//鎵樼爜鏁扮粍 姝ゆ鍙夎溅鍙夌殑鎵樼洏鍠风爜锛�涓�鍙夎締杞︼紝鏈変袱涓紪鐮� 浜х嚎涓嬬嚎涓旈潪鏃犵爜妯″紡鏃朵紶杈�+ appliactionId = "MOBOX" + //proxyInterfaceCode = proxyInterfaceCode //鎺ュ彛鍞竴鏍囪瘑鐮�鍥哄畾鍊硷細0050 + }); + //http://yst-open-zuul-qa.idc.yst.com.cn/proxy/v1/ + req = FuLeWebPost(sendMsg, "generalInterface", url.Url, true);//YKRWSD AreaRowLockState + + if (req != null && req.success) msg = $"GeneralInterFaceFunc:杩斿洖浠诲姟鐘舵�鎴愬姛:{JsonConvert.SerializeObject(req)}锛�; + else msg = $"GeneralInterFaceFunc:杩斿洖浠诲姟鐘舵�澶辫触:{JsonConvert.SerializeObject(req)}锛�; + } + catch (Exception ex) + { + msg = $"GeneralInterFaceFunc Error:TaskInfo:{JsonConvert.SerializeObject(wmsTask)},TaskState:{taskStatus},ErrorMsg:{ex.Message}"; + } + } + + LogHelper.Info(msg, "ThirdSystemLog"); + } + + /// <summary> + /// FuLeWebPost + /// </summary> + /// <param name="param">鍙戦�鍐呭</param> + /// <param name="postName">鎺ュ彛鍚嶇О</param> + /// <param name="Par1">鎵╁睍鍙傛暟</param> + /// <returns></returns> + public static SimpleResult FuLeWebPost(string param, string postName, string Par1 = "", bool extend = false) + { + string msg = ""; string feedback = ""; + SimpleResult result = new SimpleResult(); + try + { + string webAPIUrl = ""; + var httpVerify = new Settings.httpApiVerify(); + if (extend) httpVerify = Settings.httpApiVerifys.Where(a => a.VerifyNo == "2" && a.Project == Settings.ProjectName && a.enable == 1).FirstOrDefault(); + else httpVerify = Settings.httpApiVerifys.Where(a => a.VerifyNo == "1" && a.Project == Settings.ProjectName && a.enable == 1).FirstOrDefault(); + if (httpVerify != null) + { + //閲囩敤鎺ュ彛鍔犲瘑鏂瑰紡杩涜浼犺緭 + webAPIUrl = $"{Par1}{postName}"; + string TokenMsg = ""; + string timestamp = DateTime.Now.ToString("s").Replace("T", " "); + TokenMsg = httpVerify.Extend[0] + "from" + httpVerify.Extend[1] + "timestamp" + timestamp; + LogHelper.Info($"銆怓uLe Post {postName}銆戯細鍔犲瘑鍓嶆槑鏂囷細{TokenMsg}", "ThirdSystemLog"); + string TokenMsgEncrypt = CryptoDecryptHelper.GetMd5FromString(TokenMsg); + LogHelper.Info($"銆怓uLe Post {postName}銆戯細鍔犲瘑鍚庡瘑鏂囷細{TokenMsgEncrypt}", "ThirdSystemLog"); + feedback = httpHelper.WebPost(webAPIUrl, param, "application/json", TokenMsgEncrypt, timestamp,"", extend); + } + else + { + //鏍囧噯浼犺緭鏂瑰紡浼犺緭 + webAPIUrl = $"{Par1}{postName}" + "&warehouseId=FLUXWMSDB"; + feedback = httpHelper.WebPost(webAPIUrl, param); + } + + if (!string.IsNullOrEmpty(feedback)) + { + LogHelper.Info(JsonConvert.SerializeObject(feedback)); + msg = $"銆怓uLe Post {postName}銆慦ebUrl={webAPIUrl};param={param} ;return={feedback}"; + var req = JsonConvert.DeserializeObject<SimpleResult>(feedback); + if (req.success) + { + result.success = true; + msg = $"銆怓uLe Post {postName}銆憇uccess锛�WebUrl={webAPIUrl};param={param};return={feedback}"; + } + else + { + if (!string.IsNullOrEmpty(req.errMsg)) msg = $"銆怓uLe Post {postName}銆慺ail锛乪rr={req.errMsg};WebUrl={webAPIUrl} ;param={param};return={feedback}"; + else msg = $"銆怓uLe Post {postName}銆慺ail锛乪rr={req.message};WebUrl={webAPIUrl} ;param={param};return={feedback}"; + } + } + else + { + string errMsg = "can't find the address"; + msg = $"銆怓uLe Post {postName}銆慺ail锛乪rr={errMsg};WebUrl={webAPIUrl} ;param={param}"; + } + var db = new SqlHelper<object>().GetInstance(); + var RepeatUrl = db.Queryable<HttpRepeatSend>().Where(a => a.SendMsg == param && a.UrlName == postName && a.Url == Par1).First(); + if (result.success) + { + if (RepeatUrl != null) db.Deleteable<HttpRepeatSend>().Where(a => a.SendMsg == param && a.UrlName == postName && a.Url == Par1).ExecuteCommand(); + } + else + { + if (RepeatUrl == null) + { + var RepeatInfo = new HttpRepeatSend() + { + SendMsg = param, + UrlName = postName, + Url = Par1, + SendNum = 5 + }; + db.Insertable(RepeatInfo).ExecuteCommand(); + } + else + { + if (RepeatUrl.SendNum == 1) db.Deleteable<HttpRepeatSend>().Where(a => a.SendMsg == param && a.UrlName == postName && a.Url == Par1).ExecuteCommand(); + else + { + RepeatUrl.SendNum = RepeatUrl.SendNum - 1; + db.Updateable(RepeatUrl).UpdateColumns(a => new { a.SendNum }).ExecuteCommand(); + } + } + } + } + catch (Exception ex) + { + msg = $"銆怓uLe Post {postName}銆慺ail锛乪rr={ex.Message}"; + } + LogHelper.Info(msg, "ThirdSystemLog"); + return result; + } + /// <summary> + /// 鎺ュ彛鐘舵�鍥炴姤澶勭悊 + /// </summary> + public class SimpleResult + { + public bool success { get; set; } + public int errCode { get; set; } + public string errMsg { get; set; } = ""; + + /// <summary> + /// 娣冲畨浜屾湡-鍝嶅簲鏁版嵁 + /// </summary> + public Object data { get; set; } + /// <summary> + /// 娣冲畨浜屾湡-鍝嶅簲缂栫爜 + /// </summary> + public string code { get; set; } + /// <summary> + /// 娣冲畨浜屾湡-鍝嶅簲淇℃伅 + /// </summary> + public string message { get; set; } + /// <summary> + /// 娣冲畨浜屾湡-鍝嶅簲淇℃伅绫诲瀷 + /// </summary> + public string messageType { get; set; } + /// <summary> + /// 娣冲畨浜屾湡-寮傚父 + /// </summary> + public Exception exception { get; set; } + } + + /// <summary> + /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇鏃堕棿鎴�+ /// </summary> + /// <param name="DataBitType">鏁版嵁浣嶆暟锛氬�锛�2|64 鍚箟锛�2浣峾64浣�/param> + /// <param name="TimeType">鑾峰彇鏃堕棿绫诲瀷锛氬�锛�|2 鍚箟锛�-绉掔骇 2-姣绾�/param> + /// <param name="TimeUtcType">鑾峰彇鏃堕棿Utc绫诲瀷锛氬�锛�|2 鍚箟锛�-鏈湴鏃堕棿 2-Utc鏃堕棿</param> + /// <returns></returns> + public static string GetTimeStamp(DateTime dateTime, int DataBitType, int TimeType) + { + string timeStamp = ""; + + //鏃堕棿鎴虫墦鍗�+ TimeSpan ts = dateTime - new DateTime(1970, 1, 1, 0, 0, 0, 0);//鏃堕棿鎴宠幏鍙�+ double tsTime = TimeType == 1 ? ts.TotalSeconds : ts.TotalMilliseconds;//绉掔骇|姣绾ф椂闂磋幏鍙�+ + string TimeTypeInfo = TimeType == 1 ? "绉掔骇" : "姣绾�; + timeStamp = DataBitType == 32 ? Convert.ToInt32(tsTime).ToString() : Convert.ToInt64(tsTime).ToString(); + + //double result = 0; + //result = DataBitType == 32 ? Convert.ToInt32(tsTime) : Convert.ToInt64(tsTime); + + return timeStamp; + } + + /// <summary> + /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇AGV璁惧淇℃伅鏁版嵁 + /// </summary> + /// <param name="wmsTask"></param> + /// <param name="db"></param> + /// <param name="equipmentCode"></param> + /// <param name="orgCode"></param> + /// <param name="orgName"></param> + /// <param name="proxyInterfaceCode"></param> + private static void GeneralInterFaceGetAgvDeviceInfoFunc(WCSTask wmsTask, SqlSugarClient db, ref string equipmentCode, ref string orgCode, ref string orgName, ref string proxyInterfaceCode) + { + if (!string.IsNullOrEmpty(wmsTask.S_EQ_NO)) + { + var agvDeviceInfo = db.Queryable<AGVDeviceDataTable>().Where(a => a.equipmentNo == wmsTask.S_EQ_NO && a.orgCode == Settings.FactoryCode).First(); + if (agvDeviceInfo != null) + { + equipmentCode = agvDeviceInfo.equipmentCode; + orgCode = agvDeviceInfo.orgCode; + orgName = agvDeviceInfo.orgName; + proxyInterfaceCode = agvDeviceInfo.proxyInterfaceCode; + } + } + } + + /// <summary> + /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇鎵樼洏鏁版嵁 + /// </summary> + /// <param name="wmsTask"></param> + private static void GeneralInterFaceGetTrayCodeFunc(WCSTask wmsTask, SqlSugarClient db, List<asnReferenceDModel> asnReferenceList, List<string> cntrList) + { + //string SrcNo = wmsTask.S_SRC_NO?.Trim(); + // + ////鏍规嵁浠诲姟涓瓨鏀剧殑宸ュ崟鍙凤紝鑾峰彇宸ュ崟绫诲瀷--鍥犱负娣冲畨 婊℃墭涓嬬嚎浠诲姟鍖呭惈 涓嬬嚎 鍊硷紝鍥犳澶氬垽鏂竴姝ワ紝鍑忓皯宸ュ崟琛ㄧ殑鏌ヨ + //if (!string.IsNullOrEmpty(SrcNo) && wmsTask.S_TYPE.Contains("涓嬬嚎")) + //{ + // var workInfo = db.Queryable<LinZhiWorkOrder>().Where(a => a.S_WorkNo == SrcNo).First(); + // if (workInfo != null) + // { + // if (workInfo.S_ORDER_TYPE.Trim() != "鏃犵爜鍏ュ簱") + // { + // + // if (cntrList.Count > 0) + // { + // cntrList.ForEach(a => + // { + // if (!string.IsNullOrEmpty(a)) + // asnReferenceList.Add(new asnReferenceDModel { asnReferenceD = a }); + // }); + // } + // } + // } + //} + } + + public class asnReferenceDModel + { + public string asnReferenceD { get; set; } + } + + /// <summary> + /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇鐗╂枡缂栫爜 + /// </summary> + /// <param name="wmsTask"></param> + private static string GeneralInterFaceGetItemCodeFunc(WCSTask wmsTask, SqlSugarClient db, List<string> cntrList, string itemCode) + { + if (cntrList.Count > 0) + { + //string SrcNo = wmsTask.S_SRC_NO?.Trim(); + //// 鍐滃か缃戠涓嬪彂鐨勫伐鍗曪紝鐗╂枡鑾峰彇鏂瑰紡 + //if (!string.IsNullOrEmpty(SrcNo) && wmsTask.S_TYPE.Contains("涓嬬嚎")) + //{ + // var workInfo = db.Queryable<LinZhiWorkOrder>().Where(a => a.S_WorkNo == SrcNo).First(); + // if (workInfo != null) itemCode = workInfo.S_ItemCode; + //} + //// 鍏朵粬鐨勪汉宸ュ缓绔嬬殑宸ュ崟锛岀墿鏂欒幏鍙栨柟寮�+ //else + //{ + // var cntrItemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrList[0]).First(); + // if (cntrItemInfo != null) + // { + // //姝ゅ鏌ヨ 鐗╂枡琛紝浠呴檺娣冲畨鑾峰彇MES鐗╂枡浣跨敤锛屽叾浠栧伐鍘傚彲鑷娉ㄩ噴锛涘洜娣冲畨鍏ュ簱鐗╂枡鏄娇鐢�鐗╂枡鍚嶇О+鐗╂枡灞傛暟 鎷兼帴鑰屾垚锛屽洜姝ら渶瑕�閫氳繃鐗╂枡琛ㄨ浆鎹负 MES 鐨勭墿鏂欑紪鐮�+ // //var itemInfo = db.Queryable<ItemRel>().Where(a => a.S_ITEM_NAME == cntrItemInfo.S_ITEM_CODE).First(); + // //if (itemInfo != null) itemCode = itemInfo.S_ITEM_CODE; + // itemCode = cntrItemInfo.S_ITEM_CODE; + // } + //} + } + + return itemCode; + } + } } -- Gitblit v1.9.1