From 1a0c5192cd1269a1aa2c0af94fc2bcb5fcc9a056 Mon Sep 17 00:00:00 2001 From: cjs <2216046164@qq.com> Date: 星期四, 26 六月 2025 17:16:11 +0800 Subject: [PATCH] 111 --- HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs | 2130 ++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 1,800 insertions(+), 330 deletions(-) diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs index 231f3a1..8bf9e63 100644 --- a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs +++ b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs @@ -1,19 +1,26 @@ 锘縰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; +using Newtonsoft.Json.Linq; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; +using System.Xml.Linq; using static HH.WCS.Mobox3.NFLZ.api.OtherModel; +using static HH.WCS.Mobox3.NFLZ.dispatch.NDCApi; +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> @@ -28,13 +35,13 @@ { Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}"); LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}"); - LocationHelper.UnBindingLoc(mst.S_START_LOC, mst.S_CNTR_CODE.Split(',').ToList()); + LocationHelper.UnBindingLoc(mst.S_START_LOC, mst.S_CNTR_CODE.Split(',').ToList(),mst.S_TYPE); } else { Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}"); LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}"); - LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList()); + LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList(),mst.S_TYPE); } } @@ -72,25 +79,127 @@ /// <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}"); + if(wmsTask.S_TYPE == "鎴愬搧涓嬬嚎" || wmsTask.S_TYPE == "鏍堟澘涓婄嚎") { - //璇锋眰鍗歌揣锛�- //鏍规嵁缁堢偣鍒ゆ柇锛屾槸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); - //鏀瑰畬鍙傛暟杞﹀瓙灏变細鑷繁鍗歌揣 + int devType = wmsTask.S_TYPE == "鎴愬搧涓嬬嚎" ? 1 : 2; + var plc = Settings.deviceInfos.Where(a => a.deviceType == devType).FirstOrDefault(); + if (plc != null) + { + 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"); + } + } + + } + else LogHelper.Info("鍐滃か鏋楄姖-L6杈撻�绾�鏈厤缃�); } - if (state == 1103) + else { - //澶ч搧妗嗗弶璧颁互鍚庨�鐭ワ紝鎴戜滑瑕侀�鐭ヨ緭閫佺嚎 + LogHelper.Info($"{wmsTask.S_TYPE}鍐欏叆澶嶄綅淇″彿"); + writeSignal(wmsTask, state); + } + } + + public static void writeSignal(WCSTask mst, int state = 0) + { + if (mst.S_TYPE.Contains("绌烘墭涓婄嚎")) + { + LogHelper.Info($"{mst.S_TYPE}鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙�); + if(state == 6) + { + //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙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 12 21 0D 0A"; + if (state == 1104) signal = "3F 00 10 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_START_LOC; + var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault(); + if (devInfo != null) + { + var signal = "3F 00 12 21 0D 0A"; + if (state == 1102) signal = "3F 00 10 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}鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙�); + if(state == 4) + { + //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙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}"); + } } } @@ -103,12 +212,424 @@ internal static void ThirdReportStatus(WCSTask mst, int state, string forkliftNo) { + if (state == 2) + { + TaskProcess.TASK_STATUSFunc(mst); + } + } + #region 瀵屽嫆娴佺▼澶勭悊 + /// <summary> + /// 浠诲姟瀹屾垚鐘舵�鍥炴姤--1.姝e父浠诲姟瀹屾垚鍥炴姤 2.绉诲簱浠诲姟瀹屾垚鍥炴姤 + /// </summary> + /// <param name="JsonData"></param> + /// <returns></returns> + internal static void TASK_STATUSFunc(WCSTask wmsTask) + { + string msg = ""; List<string> trayList = new List<string>(); + var req = new SimpleResult(); + var StartInfo = new SqlHelper<Location>().GetInstance().Queryable<Location>().Where(a => a.S_CODE == wmsTask.S_START_LOC.Trim()).First(); + var EndInfo = new SqlHelper<Location>().GetInstance().Queryable<Location>().Where(a => a.S_CODE == wmsTask.S_END_LOC.Trim()).First(); + List<string> taskTrayList = new List<string>(wmsTask.S_CNTR_CODE.Trim().Split(',')); + taskTrayList.ForEach(a => + { + if (!string.IsNullOrEmpty(a)) trayList.Add(a.Replace(",", "")); + }); + string[] trayInfo = trayList.ToArray(); + var url = Settings.thirdPartyUrls.Where(a => a.UrlNo == "2" && a.enable == 1).FirstOrDefault(); + if (wmsTask.S_TYPE.Contains("绉诲簱")) + { + //绉诲簱浠诲姟 瀹屾垚鍥炴姤 + var httpVerify = Settings.httpApiVerifys.Where(a => a.VerifyNo == "1" && a.Project == Settings.ProjectName && a.enable == 1).FirstOrDefault(); + if (httpVerify != null) + { + var startRow = StartInfo.S_ROW.Trim(); + var endRow = EndInfo.S_ROW.Trim(); + var FLStartRow = new SqlHelper<Object>().GetInstance().Queryable<RowComparsionTable>().Where(a => a.S_LJ_ROW == startRow).First(); + var FLEndRow = new SqlHelper<Object>().GetInstance().Queryable<RowComparsionTable>().Where(a => a.S_LJ_ROW == endRow).First(); + if (FLStartRow != null && FLEndRow != null) + { + string sendMsg = JsonConvert.SerializeObject(new + { + startAreaNo = FLStartRow.S_FL_ROW.Trim(), + endAreaNo = FLEndRow.S_FL_ROW.Trim(), + trayInfo = trayInfo, + repoNo = "LJ02" + }); + LogHelper.Info("sendMsg secusess:" + JsonConvert.SerializeObject(sendMsg)); + req = FuLeWebPost(sendMsg, "yikuTaskStatus ", url.Url);//YKRWSD AreaRowLockState + } + } + else + { + AnalysisCompleteModel model = new AnalysisCompleteModel(); + model.TrayInfo = trayInfo; + model.StartAreaNo = StartInfo.S_ROW.Trim().Replace("-XB", ""); + model.EndAreaNo = EndInfo.S_ROW.Trim().Replace("-XB", ""); + string sendMsg = JsonConvert.SerializeObject(model); + req = FuLeWebPost(sendMsg, "YKRWWC", url.Url);//YKRWWC YIKUTASK_STATUS + } + } + else if (wmsTask.S_TYPE.Contains("涓嬬嚎")) + { + var db = new SqlHelper<object>().GetInstance(); + string SrcNo = wmsTask.S_WORK_NO?.Trim(); + var workInfo = db.Queryable<LinZhiWorkOrder>().Where(a => a.S_WorkNo == SrcNo).First(); + if (workInfo != null) + { + if (workInfo.S_ORDER_TYPE.Trim() != "鏃犵爜鍏ュ簱") + { + //浜х嚎涓嬬嚎 瀹屾垚鍥炴姤 + var httpVerify = Settings.httpApiVerifys.Where(a => a.VerifyNo == "2" && a.Project == Settings.ProjectName && a.enable == 1).FirstOrDefault(); + if (httpVerify != null) + { + var endRow = EndInfo.S_ROW.Trim(); + var FLEndRow = new SqlHelper<Object>().GetInstance().Queryable<RowComparsionTable>().Where(a => a.S_LJ_ROW == endRow).First(); + if (FLEndRow != null) + { + string sendMsg = JsonConvert.SerializeObject(new + { + trayInfo = trayInfo, + workNo = wmsTask.S_WORK_NO.Trim(), + repoNo = "LJ02", + areaLoca = FLEndRow.S_FL_ROW, + }); + LogHelper.Info("sendMsg secucess:" + JsonConvert.SerializeObject(sendMsg)); + req = FuLeWebPost(sendMsg, "proTaskStatus", url.Url); //AreaRowLockState + } + } + else + { + ProCompleteModel model = new ProCompleteModel(); + model.TrayInfo = trayInfo; + model.WorkNo = wmsTask.S_WORK_NO.Trim(); + model.AreaLoca = EndInfo.S_ROW.Trim().Replace("-XB", ""); + string sendMsg = JsonConvert.SerializeObject(model); + req = FuLeWebPost(sendMsg, "WGHB", url.Url);//WGHB PROTASK_STATUS + } + } + } + } + + if (req != null && req.success) msg = $"TASK_STATUS:杩斿洖浠诲姟鐘舵�鎴愬姛:{JsonConvert.SerializeObject(req)}锛�; + else msg = $"TASK_STATUS:杩斿洖浠诲姟鐘舵�澶辫触:{JsonConvert.SerializeObject(req)}锛�; + LogHelper.Info(msg, "ThirdSystemLog"); + } + + /// <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"); + } + public class ProCompleteModel + { + /// <summary> + /// 浠撳簱缂栫爜 + /// </summary> + public string StockNo { get; set; } = "CK001"; + public string[] TrayInfo { get; set; } + public string WorkNo { get; set; } + public string AreaLoca { get; set; } + } + public class AnalysisCompleteModel + { + /// <summary> + /// 浠撳簱缂栫爜 + /// </summary> + public string StockNo { get; set; } = "CK001"; + public string[] TrayInfo { get; set; } + public string StartAreaNo { get; set; } + public string EndAreaNo { get; set; } + } + + /// <summary> + /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇鐗╂枡缂栫爜 + /// </summary> + /// <param name="wmsTask"></param> + private static string GeneralInterFaceGetItemCodeFunc(WMSTask 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<LinJiangWorkOrder>().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; + } + /// <summary> + /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇鎵樼洏鏁版嵁 + /// </summary> + /// <param name="wmsTask"></param> + private static void GeneralInterFaceGetTrayCodeFunc(WMSTask 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<LinJiangWorkOrder>().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 }); + // }); + // } + // } + // } + //} + } + /// <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(WMSTask wmsTask, SqlSugarClient db, ref string equipmentCode, ref string orgCode, ref string orgName, ref string proxyInterfaceCode) + { + //if (!string.IsNullOrEmpty(wmsTask.S_AGV_NO)) + //{ + // var agvDeviceInfo = db.Queryable<AGVDeviceDataTable>().Where(a => a.equipmentNo == wmsTask.S_AGV_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="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; } + public class asnReferenceDModel + { + public string asnReferenceD { get; set; } + } - + /// <summary> + /// 搴撲綅閿佸畾瑙i攣鍥炴姤-绉诲簱浠诲姟閿佸畾瑙i攣搴撲綅 + /// </summary> + /// <param name="AreaRow">搴撲綅鍙�澶氫釜搴撲綅鍙风敤鑻辨枃閫楀彿闅斿紑</param> + /// <param name="state">true-閿佸畾搴撲綅 false-瑙i攣搴撲綅</param> + internal static void AreaRowLockState(string AreaRow, bool state = true) + { + string msg = ""; List<string> areaList = new List<string>(); + var req = new SimpleResult(); + List<string> taskAreaList = new List<string>(AreaRow.Split(',')); + taskAreaList.ForEach(a => + { + if (!string.IsNullOrEmpty(a)) areaList.Add(a); + }); + string[] AreaInfo = areaList.ToArray(); + var url = Settings.thirdPartyUrls.Where(a => a.UrlNo == "2" && a.enable == 1).FirstOrDefault(); + var httpVerify = Settings.httpApiVerifys.Where(a => a.VerifyNo == "1" && a.Project == Settings.ProjectName && a.enable == 1).FirstOrDefault(); + if (httpVerify != null) + { + string sendMsg = JsonConvert.SerializeObject(new + { + areaNum = AreaInfo, + repoNo = "LJ02", + areaLock = state ? "1" : "2" + }); + LogHelper.Info("sendMsg:" + JsonConvert.SerializeObject(sendMsg)); + req = FuLeWebPost(sendMsg, "areaRowLockState", url.Url);//YKRWSD AreaRowLockState + } + else + { + AreaRowLockStateModel model = new AreaRowLockStateModel(); + model.AreaNum = AreaInfo; + model.AreaLock = state ? "1" : "2"; + string sendMsg = JsonConvert.SerializeObject(model); + req = FuLeWebPost(sendMsg, "YKRWSD", url.Url);//YKRWSD AreaRowLockState + } + + if (req != null && req.success) msg = $"YKRWSD:杩斿洖搴撲綅鐘舵�鎴愬姛:{JsonConvert.SerializeObject(req)}锛�; + else msg = $"YKRWSD:杩斿洖搴撲綅鐘舵�澶辫触:{JsonConvert.SerializeObject(req)}锛�; + LogHelper.Info(msg, "ThirdSystemLog"); + } + public class AreaRowLockStateModel + { + /// <summary> + /// 浠撳簱缂栫爜 + /// </summary> + public string StockNo { get; set; } = "CK001"; + public string[] AreaNum { get; set; } + /// <summary> + /// 搴撲綅閿佸畾鐘舵�--1-閿佸畾 2-瑙i攣 + /// </summary> + public string AreaLock { get; set; } + } + #endregion + + + + /// <summary> /// 浠诲姟鎷︽埅 /// </summary> @@ -156,168 +677,86 @@ /// <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}"); + string areaName = mst.S_TYPE.Contains("搴撳瓨") ? "鐡跺澂闈炲嵆浜х┖妗� : "鐡跺澂鍗充骇绌烘"; + var areaInfo = Settings.areaInfos.Where(a => a.areaName == 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_ROW).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; + bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_WorkNo == mst.S_WORK_NO && a.S_WorkState == "鎵ц涓�).First(); + LogHelper.Info($"婊℃墭浠诲姟鐢熸垚澶勭悊,宸ュ崟锛歿JsonConvert.SerializeObject(bcpW)}"); + 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($"鐡跺澂鍗充骇婊℃ 鏌ユ壘"); + startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && a.enable == 1).FirstOrDefault().areaCode; + startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea); + } + else + { + LogHelper.Info($"鐡跺澂缈绘枟鏈洪潪鍗充骇婊℃ 鏌ユ壘"); + string areaName = bcpW.S_PLineNo.Split('-')[1].Substring(0, 1) + "鍙风摱鍧炕鏂楁満闈炲嵆浜ф弧妗�; + startArea = Settings.areaInfos.Where(a => a.areaName == 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,"","",bcpW.S_WorkNo); + } + else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_CODE}"); + } + } } private static void claimGoodsTime(WCSTask mst, int state) @@ -513,47 +952,274 @@ 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_WORK_NO;// 宸ュ崟鍙�+ 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.S_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.S_ROW && a.S_START_COL <= endCol && a.S_END_COL >= endCol).First(); + + if (startLocInfo != null) + { + Extend1 = mst.N_START_LAYER == 1 ? startLocInfo.S_First_Bit : 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 ? endLocInfo.S_First_Bit : 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(); + + } + + // 鑾峰彇鎴愬搧宸ュ崟鏁版嵁(鏌ヨ 鎴愬搧宸ュ崟琛� + 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<LinZhiWorkOrder>().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).First().S_AGV_SITE; + Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC).First().S_AGV_SITE; + if (mst.N_START_LAYER > 1) + { + Extend1 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE; + } + if (mst.N_END_LAYER > 1) + { + Extend2 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_END_LOC && a.N_LAYER == mst.N_END_LAYER).First().S_AGV_SITE; + } + if(mst.S_TYPE == "鐡跺澂闈炴�浜цˉ婊℃" || mst.S_TYPE == "鐡剁洊闈炴�浜цˉ婊℃" || mst.S_TYPE == "鐡跺澂闈炴�浜цˉ绌烘" || mst.S_TYPE == "鐡剁洊闈炴�浜цˉ绌烘" || mst.S_TYPE == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級") + { + Extend2 = Settings.dXSites.Where(it => it.loc == mst.S_END_LOC).First().site.ToString(); + } + + 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; + // } + // } + //} + var dic = new List<param> + { + new param() { name = "From", value = Extend1 }, + new param() { name = "To", value = Extend2 }, + new param() { name = "Func", value = Extend3 }, + new param() { name = "Data", value = Extend4 } + }; + if (ConveryTaskList.Contains(taskType) || taskType.Contains("绉诲簱")) + { + dic.Add(new param(){name = "ItemHeight", value = Extend5}); + dic.Add(new param(){name = "CntrType", value = Extend6}); + dic.Add(new param(){name = "FromCol", value = Extend7}); + dic.Add(new param(){name = "ToCol", value = 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 AgvApiResult(); + //res = NDC.AddNewOrderNew(TsNo,mst.N_PRIORITY,mst.S_CODE, dic); + res = NDCApi.AddOrderNew(TsNo, mst.N_PRIORITY, mst.S_CODE,dic); + + if (res != null && (res.err_code == 0 || res.err_code == 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,61 +1280,57 @@ /// 鍗婃垚鍝佸嚭鍏ュ簱 /// </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.Contains(areaName) && a.enable == 1).OrderByDescending(a => a.pri).ToList(); + if (areaInfo.Count > 0) { - //鐡剁洊搴撳尯锛屼袱灞傚瘑闆嗗瀷搴撳尯 绌烘弧鍦ㄥ悓涓�釜搴撳尯锛岄渶瑕佸尯鍒嗕笉鍚屾帓 - var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First(); - if (areaInfo != null) + foreach(var it in areaInfo) { //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷 - LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿areaInfo.areaCode},itemCode:{itemInfo.S_ITEM_CODE},itemBatch:{itemInfo.S_BATCH_NO}", "WMSAlgoRithm"); + LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿it.areaCode},itemCode:{itemCode}"); try { 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) + var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.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) { + LogHelper.Info($"鍏ュ簱绠楁硶02:鏌ヨ鍒板彲鍏ヨ揣浣嶇殑鏁伴噺涓猴細{locInfo.Count}"); foreach (var a in locInfo) { - string itemCode = ""; - 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; - } - } - else - { - LogHelper.Info($"缁堢偣璐т綅鏈粦瀹氭墭鐩樹俊鎭�); - continue; - } - + LogHelper.Info($"鍏ュ簱绠楁硶03:鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}锛屽綋鍓嶆暟閲忥細{a.N_CURRENT_NUM}"); //鍘绘帀褰撳墠璐т綅鏈夐攣锛屾垨鑰呬负绌烘墭鐨勮揣浣� if (a.S_LOCK_STATE == "鏃�) { + 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) + { + endItemCode = endItemInfo.S_ITEM_CODE; + } + } + else + { + LogHelper.Info($"缁堢偣璐т綅鏈粦瀹氭墭鐩樹俊鎭�); + continue; + } + LogHelper.Info($"鍏ュ簱绠楁硶04:鏌ヨ鍒板綋鍓嶈揣浣嶇粦瀹氱殑鐗╂枡缂栫爜涓�{endItemCode}"); //鍒ゆ柇鏄惁鍜屽綋鍓嶈揣浣嶇殑鐗╂枡缂栫爜鐩稿悓 - if (itemCode == itemInfo.S_ITEM_CODE) + if (itemCode == endItemCode) { //鏌ヨ褰撳墠鎺掓槸鍚﹀彲鍏ワ紙鍒ゆ柇鏄槸鍚︽湁鍏ュ簱閿佸拰鍑哄簱閿侊級 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(); @@ -686,9 +1348,18 @@ break; } } + else + { + LogHelper.Info($"鍏ュ簱绠楁硶05:鏌ヨ鍒板綋鍓嶆帓鏈夐攣锛屾帓鍙凤細{a.N_ROW}"); + + } } } } + } + else + { + LogHelper.Info($"鍏ュ簱绠楁硶02:鏈煡璇㈠埌鍙叆璐т綅"); } if (result == null) { @@ -696,7 +1367,7 @@ #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(); + var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.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) { @@ -732,8 +1403,13 @@ } } } - else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{areaInfo.areaCode}"); + else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{it.areaCode}"); #endregion + } + + if(result != null) + { + break; } } } @@ -743,85 +1419,120 @@ LogHelper.Error("GetLocationIn:" + ex.Message, ex); } } - else - { - LogHelper.Info($"鍏ュ簱浠诲姟 鐡剁洊搴撳尯鏈厤缃�); - } + } else { - LogHelper.Info($"鍏ュ簱浠诲姟 璧风偣璐т綅鏈粦瀹氱墿鏂欎俊鎭�); + LogHelper.Info($"鍏ュ簱浠诲姟锛歿areaName}鏈厤缃�); } } else { - string itemCode = ""; - if (string.IsNullOrEmpty(startCode)) + var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderByDescending(a => a.pri).ToList(); + if(areaInfo.Count > 0) { - 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) + foreach(var it in areaInfo) { - itemCode = itemInfo.S_ITEM_CODE; + LogHelper.Info($"鍑哄簱绠楁硶01:area锛歿it.areaName},itemCode:{itemCode}"); + var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.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 (locList.Count > 0) + { + LogHelper.Info($"鍑哄簱绠楁硶02:鏌ヨ鍒板彲鍑鸿揣浣嶆暟閲忥細{locList.Count}"); + foreach (var a in locList) + { + LogHelper.Info($"鍑哄簱绠楁硶03:鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}"); + if (a.S_LOCK_STATE == "鏃�) + { + var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First(); + if (cntrInfo != null) + { + LogHelper.Info($"鍑哄簱绠楁硶04:褰撳墠璐т綅缁戝畾鐨勬墭鐩樼爜涓猴細{cntrInfo.S_CNTR_CODE}"); + 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 == it.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First(); + if (lockInfo == null) + { + result = a; + break; + } + else + { + LogHelper.Info($"鍑哄簱绠楁硶05:褰撳墠鎺掓湁閿侊紝璐т綅鍙凤細{lockInfo.S_CODE}"); + } + } + } + } + } + } + if(result != null) + { + break; + } + } + + } + else + { + LogHelper.Info($"鍑哄簱绠楁硶01锛歿areaName}鏈厤缃�); + } + } + return result; + } + + internal static Location getMStartLoc(SqlSugarClient db, string usingNow) + { + Location result = null; + if(usingNow == "Y") + { + //鍗充骇鍗崇敤 + 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 > 0 && a.S_LOCK_STATE == "鏃�).Includes(a => a.LocCntrRel).First(); + if (locInfo != null) + { + result = locInfo; } } - if (workInfo != null) + else { - itemCode = workInfo.S_ItemCode; + LogHelper.Info("鐡跺澂鍗充骇绌烘鏈厤缃�); } - var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault(); - if(areaInfo != null) + } + else + { + //闈炲嵆浜у嵆鐢�+ 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).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList(); if(locList.Count > 0) { foreach(var a in locList) { - if(a.S_LOCK_STATE == "鏃�) + int row = a.N_ROW; + var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_ROW == row && b.S_LOCK_STATE.Contains("閿�)).First(); + if(lockInfo == null) { - var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First(); - if(cntrInfo != null) - { - var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First(); - if(itemInfo != null && itemInfo.S_ITEM_CODE == 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) - { - result = a; - break; - } - } - } + result = a; + break; } } } } else { - LogHelper.Info($"{areaName}鏈厤缃�); + LogHelper.Info("鐡跺澂闈炲嵆浜х┖妗嗘湭閰嶇疆"); } } - return result; - } - - internal static Location getMStartLoc(SqlSugarClient db) - { - Location result = null; - 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 > 0 && a.S_LOCK_STATE == "鏃�).Includes(a => a.LocCntrRel).First(); - if(locInfo != null) - { - result = locInfo; - } - } - else - { - LogHelper.Info("鐡跺澂娉ㄥ鏈虹┖鎵樻湭閰嶇疆"); - } + return result; } @@ -832,53 +1543,64 @@ /// <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; + LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱被鍨嬶細{taskName}锛岀墿鏂欑紪鐮侊細{itemCode}"); if (taskName.Contains("鍗充骇")) { - //鍗充骇鍗崇敤宸ュ崟锛屼笅绾垮埌鍗充骇鍗崇敤搴撳尯 - //鍗充骇鍗崇敤搴撳尯鏈変袱涓嚎杈瑰簱锛屽鏋滃嵆浜у嵆鐢ˋ搴撳尯婊★紝鍒欐斁鍒板嵆浜у嵆鐢˙搴撳尯,鑻ュ嵆浜у嵆鐢ㄥ簱鍖洪兘婊★紝鍒欐斁鍒扮摱鍧簱鍖�- var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇鍗崇敤A" && a.enable == 1).FirstOrDefault(); + //娉ㄥ鏈烘�浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅 + 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 == "鏃�).OrderBy(a => a.N_COL).First(); + var locInfo = 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_ROW).First(); if(locInfo != null) { result = locInfo; } - + } + else + { + LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鍧嵆浜ф弧妗�鏈厤缃�); } if (result == null) { - result = TaskProcess.BCPInOrOut(db, true, S_START_LOC, "鐡跺澂鍗充骇鍗崇敤B"); + result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂鍗充骇婊℃缂撳瓨", itemCode); } if(result == null) { - result = TaskProcess.BCPInOrOut(db, true, S_START_LOC,"鐡跺澂搴撳尯"); + result = getJBLoc(db, result); } - } else { - //闈炲嵆浜у嵆鐢ㄥ伐鍗曪紝涓嬬嚎鍒伴潪鍗充骇鍗崇敤搴撳尯 - //闈炲嵆浜у嵆鐢ㄥ簱鍖哄彧鏈変竴涓嚎杈瑰簱锛屽鏋滅嚎杈瑰簱婊★紝鍒欐斁鍒扮摱鍧簱鍖�- 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 == "鏃�).OrderBy(a => a.N_COL).First(); - if (locInfo != null) - { - result = locInfo; - } + result = getJBLoc(db, result); + } + return result; + } - } - if (result == null) + private static Location getJBLoc(SqlSugarClient db, Location result) + { + //娉ㄥ鏈洪潪鍗充骇鍗崇敤涓嬬嚎锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅 + 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 == "鏃�).OrderBy(a => a.N_COL).First(); + if (locInfo != null) { - result = TaskProcess.BCPInOrOut(db, true, S_START_LOC, "鐡跺澂搴撳尯"); + result = locInfo; + } + else + { + LogHelper.Info("鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鍧叆搴撴帴椹充綅鏆傛椂鏈煡璇㈠埌鍙敤璐т綅"); } } + else + { + LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鍧叆搴撴帴椹�鏈厤缃�); + } + return result; } @@ -892,13 +1614,13 @@ internal static Location BCPEmptyOut(SqlSugarClient db, string taskName) { Location result = null; - //缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡剁洊锛�- string endAreaName = taskName.Contains("鐡剁洊") ? "鐡剁洊绌烘墭" : "鐡跺澂绌烘墭"; + + string endAreaName = taskName.Contains("鐡剁洊") ? "鐡剁洊闈炲嵆浜х┖妗� : taskName.Contains("搴撳瓨") ? "鐡跺澂闈炲嵆浜х┖妗� : "鐡跺澂鍗充骇绌烘"; var areaInfo = Settings.areaInfos.Where(a => a.areaName == endAreaName && a.enable == 1).FirstOrDefault(); - if(areaInfo != null) + if (areaInfo != null) { - var locInfo = 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(locInfo != 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 == "鏃�).OrderBy(a => a.N_ROW).First(); + if (locInfo != null) { result = locInfo; } @@ -907,7 +1629,755 @@ { LogHelper.Info($"{endAreaName}鏈厤缃�); } + return result; } + + /// <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> + /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇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 }); + // }); + // } + // } + // } + //} + } + + /// <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; + } + + /// <summary> + /// 缁戝畾璐т綅瀹瑰櫒琛�+ /// </summary> + /// <param name="cntr"></param> + /// <returns></returns> + internal static bool BindLocCntr(string loc, string cntr, string itemCode, string batchNo, string deviceName = "", string itemlayer = "") + { + LogHelper.Info($"缁戝畾璐т綅瀹瑰櫒琛�loc:{loc},cntr:{cntr}"); + bool result = true; + List<string> list = new List<string>(cntr.Split(',')); + var db = new SqlHelper<object>().GetInstance(); + list.ForEach(it => + { + if (!string.IsNullOrEmpty(it)) + { + string cntrCode = it.Trim(); + var Cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == loc && a.S_CNTR_CODE == cntrCode).First(); + if (Cntr == null) + { + var cir = new LocCntrRel { S_LOC_CODE = loc, S_CNTR_CODE = cntrCode, S_SRC = deviceName }; + if (db.Insertable<LocCntrRel>(cir).ExecuteCommand() > 0) LogHelper.Info($"璐т綅瀹瑰櫒琛ㄧ粦瀹氭垚鍔燂紝璐т綅鍙凤細{loc}锛屾墭鐩樺彿锛歿cntrCode}"); + BindCntrItem(cntrCode, itemCode, batchNo, itemlayer); + } + } + }); + //1.0 鏌ヨ揣浣嶅鍣ㄨ〃 + return result; + } + + /// <summary> + /// 缁戝畾瀹瑰櫒鐗╂枡琛�+ /// </summary> + /// <param name="itemCode"></param> + /// <param name="batchNo"></param> + /// <param name="qty"></param> + /// <returns></returns> + internal static bool BindCntrItem(string trayCode, string itemCode, string batchNo, string itemlayer = "") + { + LogHelper.Info($"缁戝畾瀹瑰櫒鐗╂枡琛�trayCode:{trayCode}"); + var res = false; + var db = new SqlHelper<object>().GetInstance(); + try + { + db.BeginTran(); + //db.Updateable(cntr).UpdateColumns(it => new { it.S_DEST }).ExecuteCommand(); + //1.灏嗗師鏈夊鍣ㄧ墿鏂欎俊鎭垹闄�+ //db.Deleteable<CntrItemRel>().Where(it => it.S_CNTR_CODE == cntr.S_CNTR_CODE.Trim()).ExecuteCommand(); + //2.鎻掑叆鏂扮殑瀹瑰櫒鐗╂枡淇℃伅锛堝鍣ㄥ彿涓嶅彉锛�+ var info = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE.Trim() == trayCode.Trim()).First(); + if (info == null) + { + var cir = new CntrItemRel { S_CNTR_CODE = trayCode, S_BATCH_NO = batchNo, S_ITEM_CODE = itemCode, S_ITEM_MODEL = itemlayer }; + if (db.Insertable<CntrItemRel>(cir).ExecuteCommand() > 0) LogHelper.Info($"瀹瑰櫒鐗╂枡琛ㄧ粦瀹氭垚鍔燂紝鎵樼洏鍙凤細{trayCode},鐗╂枡缂栫爜锛歿itemCode},鐗╂枡灞傛暟锛歿itemlayer}"); + } + + + db.Ado.CommitTran(); + res = true; + } + catch (Exception ex) + { + LogHelper.Info($"ex:{ex}"); + db.Ado.RollbackTran(); + } + return res; + } + + /// <summary> + /// 鏍囧噯鍑哄叆搴撳鐞�+ /// </summary> + /// <param name="bit">璧风偣鐐逛綅 鎴�缁堢偣鐐逛綅</param> + /// <param name="taskType">浠诲姟绫诲瀷</param> + /// <param name="trayCode">鎵樼洏缂栫爜</param> + /// <param name="areaCode">搴撳尯缂栫爜</param> + /// <param name="itemCode">鐗╂枡缂栫爜</param> + /// <param name="batchNo">鎵规鍙�/param> + /// <param name="itemLayer">鐗╂枡灞傛暟</param> + /// <param name="itemTrayType">鐗╂枡鎵樼洏绫诲瀷</param> + /// <param name="actionType">鍔ㄤ綔绫诲瀷 True-鍏ュ簱 False-鍑哄簱</param> + /// <returns></returns> + internal static bool LinZhiPlcTask(string bit, string taskType, string trayCode, string areaCode, string itemCode, string batchNo, string itemLayer, string itemTrayType, string deviceName, bool actionType, string workNo = "") + { + var result = false; + var db = new SqlHelper<object>().GetInstance(); + if (actionType) + { + LogHelper.Info($"鎴愬搧鍏ュ簱绠楁硶鍖归厤缁堢偣锛屼骇绾垮彿={deviceName},搴撳尯={areaCode},鐗╂枡缂栫爜={itemCode},鎵规鍙�{batchNo}", "杈撻�绾�); + //1.浠诲姟鍒涘缓锛氶攣瀹氳捣鐐癸紝缁堢偣锛岀粓鐐规帓鍙�鎺掗攣瀹氳〃锛堜换鍔″畬鎴愯В閿侊級锛�+ // 浠诲姟鏁版嵁鎼哄甫-鎵樼洏鐮�渚夸簬鍥炴姤)--涓や釜鎵樼洏鐮佸瓨鍏ヤ换鍔¤〃 WMSTask 鐨�鎵樼洏瀛楁 S_CNTRS + // 鐗╂枡灞傛暟(NDC涓嬪彂蹇呰鍙傛暟) --璧风偣灞傛暟 N_START_LAYER 锛氶粯璁や负1 + // --缁堢偣灞傛暟 N_END_LAYER 锛氳幏鍙�璐т綅琛�缁堢偣璐т綅淇℃伅 N_CAPACITY + 1 + //2.鎻掑叆 褰撳墠鎺掑彿銆佷骇绾垮彿 鑷�鑷姩绉诲簱涓棿琛紝绛夊緟宸ュ崟瀹屾垚鍗宠繘琛�鑷姩绉诲簱 + var info = db.Queryable<ItemRel>().Where(a => a.S_ITEM_CODE == itemCode && a.S_TRAY_TYPE == itemTrayType).First(); + if (info != null) + { + var endLocation = GetLocationIn(areaCode, itemCode, batchNo); + if (endLocation != null) + { + var layer = endLocation.N_CURRENT_NUM + 1; + //DaMingShanAnalysisMoveLib model = new DaMingShanAnalysisMoveLib { RowNo = endLocation.N_ROW, Batch = batchNo, DeviceName = deviceName }; + //WCSHelper.DaMingShanInsertAnalysisMoveLib(model); + result = LinZhiCreateTransport(areaCode, bit, endLocation.S_CODE, taskType, trayCode, 1, layer, deviceName, endLocation.S_ROW, 1, 1, itemTrayType, workNo, batchNo, itemCode); + } + //else //Console.WriteLine($"MoboxHelperCreateTask: 鏈壘鍒扮粓鐐硅揣浣�); + } + else LogHelper.Info($"鐗╂枡琛ㄦ湭鍖归厤鍒扮墿鏂欎俊鎭紝鐗╂枡缂栫爜锛歿itemCode}锛屾墭鐩樼被鍨嬶細{itemTrayType}"); + } + else + { + //Location startLocation = null; + //string cntrs = ""; + //if (taskType == "鏍堟澘涓婄嚎") + //{ + // startLocation = GetLocationOutByRow(areaCode, itemTrayType); + // cntrs = startLocation.LocCntrRel.S_CNTR_CODE; + //} + //else + //{ + // startLocation = GetLocationOut(areaCode, itemCode, batchNo, itemLayer); + //} + //if (startLocation != null) + //{ + // var startLayer = startLocation.N_LAYER; + // var taskNo = DateTime.Now.Ticks.ToString(); + // //涓存睙鍙渶瑕佷竴涓竴鎷�+ // //var carryCount = startLocation.N_CURRENT_NUM > 3 ? startLocation.N_CURRENT_NUM - 3 : startLocation.N_CURRENT_NUM; + // //鍑哄簱瑕佷粠璧风偣鑾峰彇鎵樼洏 + // if (cntrs != "") + // { + // var cntrList = LocationHelper.GetLocCntr(startLocation.S_LOC_CODE); + // //涓存睙涓�釜鎵樼洏涓�涓�釜 璐т綅褰撳墠瀹归噺 + // if (cntrList.Count == startLocation.N_CURRENT_NUM) + // { + // var trayInfo = cntrList.OrderByDescending(a => a.T_CREATE).Skip(1).ToList(); + // trayInfo.ForEach(a => + // { + // cntrs = cntrs + "," + a.S_CNTR_CODE.Trim(); + // }); + // LogHelper.Info($"cntr:{cntrs}"); + // result = LinJiangCreateTransport(areaCode, startLocation.S_LOC_CODE, bit, taskType, cntrs, startLayer, 1, deviceName, startLocation.N_ROW, 1, 1, itemTrayType); + // } + // else + // { + // Console.WriteLine($"璧风偣鎵樼洏鏁伴噺鍜岃揣浣嶅鍣ㄨ〃涓嶇鍚堬紝璇锋鏌ャ�璐т綅琛ㄣ�鍜屻�璐т綅瀹瑰櫒琛ㄣ�"); + // LogHelper.Info($"璧风偣鎵樼洏鏁伴噺鍜岃揣浣嶅鍣ㄨ〃涓嶇鍚堬紝璇锋鏌ャ�璐т綅琛ㄣ�鍜屻�璐т綅瀹瑰櫒琛ㄣ�"); + // } + // } + //} + //else LogHelper.Info($"瀵瑰簲鎴愬搧绌烘墭搴撳尯鏈壘鍒板悎閫傜┖鎵橈紝搴撳尯缂栫爜锛歿areaCode},鎵樼洏绫诲瀷锛歿itemTrayType}"); + } + return result; + } + + /// <summary> + /// 鍒涘缓鎼繍浠诲姟 + /// </summary> + /// <param name="start"></param> + /// <param name="end"></param> + /// <param name="taskType"></param> + /// <param name="cntrs"></param> + /// <param name="startLayer"></param> + /// <param name="endLayer"></param> + /// <param name="trayCarryCount"></param> + /// <param name="priority"></param> + /// <returns></returns> + public static bool LinZhiCreateTransport(string areaCode, string start, string end, string taskType, string cntrs, int startLayer, int endLayer, string deviceName, string row, int trayCarryCount = 1, int priority = 1, string trayType = "", string workNo = "", string batch = "", string itemcode = "") + { + var db = new SqlHelper<object>().GetInstance(); + var result = false; + var taskNo = DateTime.Now.Ticks.ToString(); + //var res = TaskHelper.LinJiangCreateTask(taskNo, start.Trim(), end.Trim(), taskType, priority, cntrs, deviceName, trayCarryCount, startLayer, endLayer, trayType, workNo, batch, itemcode); + var res = WMSHelper.CreateOpTask(start, end, "鍏ュ簱", taskType, cntrs, trayType, workNo,itemcode); + if (res) + { + try + { + LogHelper.Info($"{taskType}浠诲姟鍒涘缓鎴愬姛锛岃捣鐐癸細{start}锛岀粓鐐癸細{end}锛屾墭鐩樺彿锛歿cntrs}锛屾帓鍙凤細{row}锛屽簱鍖虹紪鐮侊細{areaCode}"); + result = true; + //浠诲姟鍒涘缓鎴愬姛锛岃捣鐐硅揣浣嶅嚭搴撻攣瀹氾紝缁堢偣璐т綅鍏ュ簱閿佸畾 + LocationHelper.LockLoc(start, 2); + LocationHelper.LockLoc(end, 1); + + //鎺掗攣瀹�+ var Sinfo = db.Queryable<Location>().Where(a => a.S_CODE == start).First(); + var Einfo = db.Queryable<Location>().Where(a => a.S_CODE == end).First(); + if (Sinfo != null && Einfo != null) + { + string startRow = string.IsNullOrEmpty(Sinfo.S_ROW) ? "" : Sinfo.S_ROW.Trim(); + string sArea = string.IsNullOrEmpty(Sinfo.S_AREA_CODE) ? "" : Sinfo.S_AREA_CODE; + string endRow = string.IsNullOrEmpty(Einfo.S_ROW) ? "" : Einfo.S_ROW.Trim(); + string eArea = string.IsNullOrEmpty(Einfo.S_AREA_CODE) ? "" : Einfo.S_AREA_CODE; + LockRow(startRow, endRow, sArea, eArea, taskType, taskNo); + + if (taskType == "鎴愬搧涓嬬嚎") + { + //鐢熶骇涓嬬嚎浠诲姟鐢熸垚鎴愬姛锛屽垹闄よ澶囦笅绾挎椂闂存暟鎹�+ db.Deleteable<LinZhiDeviceState>().Where(a => a.DeviceName.Trim() == deviceName).ExecuteCommand(); + } + } + } + catch (Exception ex) + { + LogHelper.Error(ex.Message, ex); + } + + } + return result; + } + + /// <summary> + /// 浠诲姟鍒涘缓鏃堕攣瀹氭帓 + /// </summary> + /// <param name="startRow"></param> + /// <param name="endRow"></param> + public static void LockRow(string startRow, string endRow, string SArea, string EArea, string taskType, string taskNo) + { + string startRowXB = startRow + ""; + string endRowXB = endRow + ""; + string SAreaXB = SArea + ""; + string EAreaXB = EArea + ""; + var db = new SqlHelper<object>().GetInstance(); + string LockRow = ""; + var Srow = db.Queryable<RowLock>().Where(a => a.S_ROW == startRow && a.S_AREA_CODE == SArea).First(); + if (Srow != null && !Srow.S_LOCK_STATE.Trim().Contains("閿�)) + { + Srow.S_LOCK_STATE = "鍑哄簱閿�; + db.Updateable(Srow).UpdateColumns(it => new { it.S_LOCK_STATE }).ExecuteCommand(); + LogHelper.Info($"浠诲姟鍒涘缓鎴愬姛锛歍askNo:{taskNo}.鍑哄簱閿佸畾锛氳捣鐐瑰簱鍖猴細{SArea},璧风偣鎺掞細{startRow}", "WMSAlgoRithm"); + LockRow = LockRow + Srow.S_ROW.Trim().Replace("-XB", "") + ","; + } + var Erow = db.Queryable<RowLock>().Where(a => a.S_ROW == endRow && a.S_AREA_CODE == EArea).First(); + if (Erow != null && !Erow.S_LOCK_STATE.Trim().Contains("閿�)) + { + Erow.S_LOCK_STATE = "鍏ュ簱閿�; + db.Updateable(Erow).UpdateColumns(it => new { it.S_LOCK_STATE }).ExecuteCommand(); + LogHelper.Info($"浠诲姟鍒涘缓鎴愬姛锛歍askNo:{taskNo}.鍏ュ簱閿佸畾锛氳捣鐐瑰簱鍖猴細{EArea},璧风偣鎺掞細{endRow}", "WMSAlgoRithm"); + LockRow = LockRow + Erow.S_ROW.Trim().Replace("-XB", "") + ","; + } + if (!string.IsNullOrEmpty(LockRow) && taskType.Contains("绉诲簱")) TaskProcess.AreaRowLockState(LockRow);//绉诲簱浠诲姟 鍥炴姤瀵屽嫆搴撲綅閿佸畾 + } + + /// <summary> + /// 鏍规嵁搴撳尯鍜岀墿鏂欒幏鍙栧叆搴撶殑璐т綅锛堝爢鍙犲厛鑰冭檻鏍囧噯鐨勶紝瀹归噺閮芥槸涓�牱鐨勶紝渚嬪鍧囧窞閮芥槸3+3锛涗笉鑰冭檻宄ㄧ湁灞遍潪鏍�+2鍜�+1鍚屾椂瀛樺湪锛�+ /// </summary> + /// <param name="area"></param> + /// <param name="itemCode">濡傛灉itemCode鏄┖琛ㄧず绌哄鍣�/param> + /// <param name="standardCarryQty">鏍囧噯鎼繍鏁伴噺</param> + /// <returns></returns> + public static Location GetLocationIn(string area, string itemCode, string itemBatch) + { + //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷 + LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿area},itemCode:{itemCode},itemBatch:{itemBatch}", "WMSAlgoRithm"); + Location result = null; + //itemCode = itemCode + itemLayer; + try + { + var db = new SqlHelper<object>().GetInstance(); + + //鎴愬搧鍏ュ簱绠楁硶锛屼笅绾跨殑鎺掍紭鍏堟煡璇箣鍓嶄笅绾跨殑鎺�+ bool action = queryRow(db, area, itemCode, itemBatch, ref result); + if (result == null) + { + //1.0 鑾峰彇姣忎竴鎺掓渶澶х殑鍒�+ //1.1 鍒ゆ柇褰撳墠鏁伴噺鏄笉鏄弧鐨勶紝濡傛灉鏄弧鐨勫苟涓旀槸鏈�ぇ鍒楋紝闇�鎺掗櫎 + var listMaxCol = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.S_ROW).ToList(); + //1.1 鏌ュ埌鎵�湁鏈夊鍣ㄧ殑鎺� + var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0 && a.S_AREA_CODE == area).Includes(a => a.LocCntrRel).OrderBy(a => a.S_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); + if (list.Count > 0) + { + LogHelper.Info($"鍏ュ簱绠楁硶03:鏌ュ埌鎵�湁鏈夊鍣ㄧ殑鎺�鏁伴噺锛歿list.Count}", "WMSAlgoRithm"); + for (int i = list.Count - 1; i >= 0; i--) + { + //鎺掗櫎宸茬粡閿佸畾鐨勮揣浣�鍜�鏀炬弧浜嗕笖鏄渶澶у垪鐨勮揣浣� N_CAPACITY-璐т綅鏈�ぇ瀹归噺 + //鎺掗櫎宸查攣瀹氱殑鎺�+ LogHelper.Info($"鍏ュ簱绠楁硶04-{i}:[鍒ゆ柇褰撳墠鎺掓槸鍚﹀厑璁镐娇鐢╙.鎺掑彿锛歿list[i].S_ROW.Trim()},鍒楀彿锛歿list[i].N_COL}," + + $"璐т綅缂栫爜锛歿list[i].S_CODE.Trim()},璐т綅鐘舵�锛歿list[i].S_LOCK_STATE.Trim()},褰撳墠鏁伴噺锛歿list[i].N_CURRENT_NUM},鏈�ぇ鏁伴噺锛歿list[i].N_CAPACITY}", "WMSAlgoRithm"); + var rowInfo = db.Queryable<RowLock>().Where(a => a.S_AREA_CODE == area && a.S_ROW == list[i].S_ROW.Trim()).First(); + LogHelper.Info($"鎺掑彿锛歿list[i].S_ROW},閿佺姸鎬侊細{rowInfo.S_LOCK_STATE}"); + + //鍒ゆ柇褰撳墠搴撳尯褰撳墠鎺掓槸鍚︽湁璐т綅鏈夐攣 + var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.S_ROW == list[i].S_ROW && a.S_LOCK_STATE != "鏃�).First(); + if (locInfo != null || rowInfo.S_LOCK_STATE.Trim() != "鏃� || list[i].S_LOCK_STATE.Trim() != "鏃� || (list[i].N_CURRENT_NUM == list[i].N_CAPACITY && listMaxCol.Count(a => a.S_CODE == list[i].S_CODE) > 0)) + { + LogHelper.Info($"鍏ュ簱绠楁硶04-{i}:[鎺掗櫎宸茬粡閿佸畾鐨勮揣浣嶅拰鏀炬弧浜嗕笖鏄渶澶у垪鐨勮揣浣峕.鎺掑彿:{list[i].S_ROW},鎺掔姸鎬侊細{rowInfo.S_LOCK_STATE.Trim()},璐т綅褰撳墠鏁伴噺锛歿list[i].N_CURRENT_NUM}", "WMSAlgoRithm"); + list.Remove(list[i]); + } + } + if (list.Count > 0) + { + //1.3 閬嶅巻鍒ゆ柇鐗╂枡绫诲瀷鏄惁鐩稿悓 + for (int i = 0; i < list.Count; i++) + { + //todo 杩橀渶瑕佸垽鏂攣 + #region 绌哄鍣ㄦ垨鑰呮弧瀹瑰櫒鍒ゆ柇 ,濡傛灉鏄┖瀹瑰櫒 瀹瑰櫒鐗╂枡淇℃伅涓虹┖ + if (list[i].LocCntrRel != null) + { + LogHelper.Info("鍏ュ簱绠楁硶04:鏍规嵁鐗╂枡鑾峰彇鍙敤璐т綅銆俰temCode=" + itemCode, "WMSAlgoRithm"); + queryItemInfo(db, list[i], area, itemCode, itemBatch, ref result); + if (result != null) + { + if (action) + { + //灏嗗綋鍓嶈揣浣嶆帓鍜屽垪鎻掑叆涓棿琛�+ CPXXTable table = new CPXXTable + { + S_AREA_CODE = area, + S_ROW = list[i].S_ROW, + S_TASK_TYPE = "鎴愬搧", + + }; + db.Insertable(table).ExecuteCommand(); + } + break; + } + } + else LogHelper.Info("鍏ュ簱绠楁硶05:璐т綅瀹瑰櫒鐗╂枡淇℃伅涓虹┖", "WMSAlgoRithm"); + #endregion + } + } + } + if (result == null) + { + //todo 杩橀渶瑕佸垽鏂攣 + #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓 + LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅銆�, "WMSAlgoRithm"); + //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪 + list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area).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("鏃�)) + { + //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡 + string row = list[i].S_ROW.Trim(); + string areaCode = list[i].S_AREA_CODE.Trim(); + var rowLock = db.Queryable<RowLock>().Where(a => a.S_ROW == row && a.S_LOCK_STATE.Contains("閿�)).First(); + if (rowLock == null) + { + //var rowSumInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == row).Select(a => new { sum = SqlFunc.AggregateSum(a.N_CURRENT_NUM) }).First(); + //if (rowSumInfo.sum == 0) + //{ + //涓夋鏍¢獙 褰撳墠鎺掓墍瀵瑰簲鐨勫彟涓�増浣嶇殑鎺掍负绌烘帓 + //bool DxEmptyCont = JYThreeDxEmptyFunc(area, db, row); + var locInfo = db.Queryable<Location>().Where(a => a.S_ROW == row).Select(a => new { sum = SqlFunc.AggregateSum(a.N_CURRENT_NUM) }).First(); + if (locInfo != null) + { + LogHelper.Info($"{locInfo.sum},row:{row}"); + if (locInfo.sum == 0) + { + //绌烘帓 + result = list[i]; + + if (action) + { + //灏嗗綋鍓嶈揣浣嶆帓鍜屽垪鎻掑叆涓棿琛�+ CPXXTable table = new CPXXTable + { + S_AREA_CODE = area, + S_ROW = list[i].S_ROW, + //S_TASK_TYPE = "鎴愬搧", + + }; + db.Insertable(table).ExecuteCommand(); + } + break; + } + } + else LogHelper.Info("鏈壘鍒拌鎺�); + } + else LogHelper.Info("鎺掗攣宸蹭笂閿�); + } + } + } + else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{area}"); + #endregion + } + } + } + catch (Exception ex) + { + Console.WriteLine("GetLocationIn:" + ex.Message + ex.StackTrace); + LogHelper.Error("GetLocationIn:" + ex.Message, ex); + } + return result; + } + + private static bool queryRow(SqlSugarClient db, string area, string itemCode, string itemBatch, ref Location result) + { + bool action = false; + LogHelper.Info("鎴愬搧涓嬬嚎鏌ヨ浼樺厛涓嬬嚎鎺掕〃"); + try + { + //1銆佹煡璇腑闂磋〃鏄惁鏈夊�锛屾湁鍊硷紝鍒欐煡璇腑闂磋〃鎸囧畾鎺掔殑鍙敤璐т綅锛屽綋涓棿琛ㄦ寚瀹氭帓鏌ヤ笉鍒板彲鐢ㄨ揣浣嶇殑鏃跺�锛岃繘鍏ョ畻娉�+ //2銆佽嫢娌″�锛岃繘鍏ョ畻娉曪紝鏌ヨ鍒板彲鐢ㄨ揣浣嶏紝灏嗗彲鐢ㄨ揣浣嶇殑鎺掕褰曞埌涓棿琛�+ //var cpxxInfo = db.Queryable<CPXXTable>().Where(a => a.S_TASK_TYPE == "鎴愬搧").First(); + var cpxxInfo = db.Queryable<CPXXTable>().Where(a => a.S_TASK_TYPE == "鎴愬搧").First(); + if (cpxxInfo != null) + { + LogHelper.Info($"褰撳墠搴撳尯缂栫爜锛歿cpxxInfo.S_AREA_CODE}锛屾帓鍙凤細{cpxxInfo.S_ROW}"); + //鏌ヨ褰撳墠鎺掓槸鍚︽湁鎺掗攣 + var rowInfo = db.Queryable<RowLock>().Where(a => a.S_AREA_CODE == cpxxInfo.S_AREA_CODE && a.S_ROW == cpxxInfo.S_ROW).First(); + if (rowInfo != null) + { + LogHelper.Info($"閿佺姸鎬�{rowInfo.S_LOCK_STATE}"); + if (rowInfo.S_LOCK_STATE == "鏃�) + { + LogHelper.Info($"aaa"); + //鏌ヨ褰撳墠鎺掓槸鍚︽湁璐т綅閿�+ var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == cpxxInfo.S_AREA_CODE && a.S_ROW == cpxxInfo.S_ROW && a.S_LOCK_STATE != "鏃�).First(); + if (locInfo == null) + { + LogHelper.Info($"bbb"); + //鏌ヨ褰撳墠鎺掓渶澶ф帓鏄惁涓烘弧璐т綅 + var locInfo1 = db.Queryable<Location>().Where(a => a.S_AREA_CODE == cpxxInfo.S_AREA_CODE && a.S_ROW == cpxxInfo.S_ROW).OrderByDescending(a => a.N_COL).First(); + if (locInfo1 != null && locInfo1.N_CURRENT_NUM != locInfo1.N_CAPACITY) + { + LogHelper.Info($"ccc"); + //鏌ヨ褰撳墠鎺掓渶澶х殑鍙敤璐т綅 骞跺垽鏂槸鍚︽槸鏈�ぇ鍒�+ var endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == cpxxInfo.S_AREA_CODE && a.S_ROW == cpxxInfo.S_ROW && a.N_CURRENT_NUM > 0).OrderByDescending(a => a.N_COL).Includes(a => a.LocCntrRel).First(); + if (endLoc != null) + { + LogHelper.Info($"ddd"); + queryItemInfo(db, endLoc, area, itemCode, itemBatch, ref result); + if (result == null) + { + LogHelper.Info($"fff"); + //娓呴櫎涓棿琛ㄤ俊鎭�+ db.Deleteable<CPXXTable>().Where(a => a.S_ROW == cpxxInfo.S_ROW).ExecuteCommand(); + action = true; + } + else + { + //鍒ゆ柇褰撳墠璐т綅鏄惁鏈夊嵏璐у畬鎴愪箣鍓嶇殑浠诲姟 + string loc = result.S_CODE; + var taskInfo = db.Queryable<WMSTask>().Where(a => a.S_END_LOC == loc && a.S_B_STATE != "瀹屾垚" && a.S_B_STATE != "鍙栨秷" && a.S_B_STATE != "鍗歌揣瀹屾垚").First(); + LogHelper.Info("鏄惁鏈夊綋鍓嶈揣浣嶄换鍔★細" + JsonConvert.SerializeObject(taskInfo)); + if (taskInfo != null) result = null; + + } + } + } + else + { + //娓呴櫎涓棿琛ㄤ俊鎭�+ db.Deleteable<CPXXTable>().Where(a => a.S_ROW == cpxxInfo.S_ROW).ExecuteCommand(); + action = true; + } + } + } + else if (rowInfo.S_LOCK_STATE == "閿佸畾") + { + //娓呴櫎涓棿琛ㄤ俊鎭�+ db.Deleteable<CPXXTable>().Where(a => a.S_ROW == cpxxInfo.S_ROW).ExecuteCommand(); + action = true; + LogHelper.Info($"queryRow锛氳鎺掓湁閿侊紝搴撳尯缂栫爜锛歿cpxxInfo.S_AREA_CODE}锛屾帓鍙凤細{cpxxInfo.S_ROW}锛岄攣鐘舵�:{rowInfo.S_LOCK_STATE}"); + } + else + { + LogHelper.Info($"queryRow锛氳鎺掓湁閿侊紝搴撳尯缂栫爜锛歿cpxxInfo.S_AREA_CODE}锛屾帓鍙凤細{cpxxInfo.S_ROW}锛岄攣鐘舵�:{rowInfo.S_LOCK_STATE}"); + } + + } + else LogHelper.Info($"queryRow锛氳鎺掓湭鎵惧簱鍖虹紪鐮侊細{cpxxInfo.S_AREA_CODE}锛屾帓鍙凤細{cpxxInfo.S_ROW}"); + } + else action = true; + } + catch (Exception ex) + { + LogHelper.Error("queryRow:" + ex.Message, ex); + } + + return action; + } + + private static void queryItemInfo(SqlSugarClient db, Location loc, string area, string itemCode, string itemBatch, ref Location result) + { + string cntrCode = loc.LocCntrRel.S_CNTR_CODE; + var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrCode).First(); + + if ((itemCode != null && itemInfo != null && itemInfo.S_ITEM_CODE.Trim() == itemCode) || (itemCode == null && itemInfo == null)) + { + LogHelper.Info("鐗╂枡缂栫爜鍖归厤鎴愬姛"); + LogHelper.Info($"{itemInfo.S_BATCH_NO}"); + //鐩稿悓鐗╂枡 鐩稿悓鎵规 + if (itemInfo.S_BATCH_NO.Trim() == itemBatch.Trim()) + { + LogHelper.Info("鎵规鍙峰尮閰嶆垚鍔�); + //褰撳墠鏁伴噺灏忎簬褰撳墠瀹归噺 + if (loc.N_CURRENT_NUM < loc.N_CAPACITY) + { + string locCode = loc.S_CODE.Trim(); + var trayInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == locCode).ToList(); + if (trayInfo.Count() % 2 == 0) + { + result = loc; + string code11 = result.S_CODE; + var taskINfo = db.Queryable<WMSTask>().Where(a => a.S_END_LOC == code11 && a.S_B_STATE == "鍙栬揣瀹屾垚").First(); + if (taskINfo != null) + { + result = null; + } + + LogHelper.Info($"鍏ュ簱绠楁硶05:褰撳墠璐т綅鍙敤锛岃幏鍙栧綋鍓嶈揣浣嶃�褰撳墠璐т綅锛歿loc.S_CODE.Trim()}.", "WMSAlgoRithm"); + } + else + { + //1.33 涓嶆弧瓒冲垯閫夋嫨鍚庝竴鍒楋紝鍚庝竴鍒楄偗瀹氭槸绌鸿揣浣�+ result = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == loc.N_ROW && a.N_COL > loc.N_COL).OrderBy(a => a.N_COL).First(); + if (result.S_LOCK_STATE != "鏃�) result = null; + LogHelper.Info($"鍏ュ簱绠楁硶05:褰撳墠璐т綅鎵樼洏鏁伴噺鍙眰浣�锛岃幏鍙栧悗涓�垪璐т綅銆傚綋鍓嶈揣浣嶏細{loc.S_CODE.Trim()}锛屾墭鐩樻暟閲忥細{trayInfo.Count()}.", "WMSAlgoRithm"); + } + } + else + { + //褰撳墠璐т綅婊′簡锛屾瘮浠朿ol澶т竴浣嶇殑璐т綅锛屽悗涓�垪鑲畾鏄┖璐т綅 + result = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == loc.N_ROW && a.N_COL > loc.N_COL).OrderBy(a => a.N_COL).First(); + //if (result.S_LOCK_STATE != "鏃�) result = null; + LogHelper.Info($"鍏ュ簱绠楁硶05:褰撳墠璐т綅宸叉弧锛岃幏鍙栧悗涓�垪绌轰綅銆傚綋鍓嶈揣浣嶏細{loc.S_CODE.Trim()}.", "WMSAlgoRithm"); + } + } + //鐩稿悓鐗╂枡 涓嶅悓鎵规鍙�锛岄渶闂撮殧涓�釜璐т綅 col-1 + else + { + result = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == loc.N_ROW && a.N_COL - 1 > loc.N_COL).OrderBy(a => a.N_COL).First(); + //if (result.S_LOCK_STATE != "鏃�) result = null; + LogHelper.Info($"鍏ュ簱绠楁硶05:鐩稿悓鐗╂枡 涓嶅悓鎵规鍙�锛岄渶闂撮殧涓�釜璐т綅,褰撳墠璐т綅锛歿loc.S_CODE.Trim()}.", "WMSAlgoRithm"); + } + } + } + + } } -- Gitblit v1.9.1