From 8f4a61cd54143a85720b0c76cdd4e127ef0c6420 Mon Sep 17 00:00:00 2001 From: cjs <2216046164@qq.com> Date: 星期三, 25 六月 2025 17:17:18 +0800 Subject: [PATCH] 123 --- HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs | 2116 +++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 1,427 insertions(+), 689 deletions(-) diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs index af9ada7..787df20 100644 --- a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs +++ b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs @@ -5,13 +5,15 @@ 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.NDC; +using static HH.WCS.Mobox3.NFLZ.dispatch.NDCApi; using static HH.WCS.Mobox3.NFLZ.wms.WMSHelper.AddChangeModel; namespace HH.WCS.Mobox3.NFLZ.process @@ -33,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); } } @@ -100,39 +102,43 @@ 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) + if(wmsTask.S_TYPE == "鎴愬搧涓嬬嚎" || wmsTask.S_TYPE == "鏍堟澘涓婄嚎") { - if (wmsTask.S_TYPE == "鎴愬搧涓嬬嚎") + int devType = wmsTask.S_TYPE == "鎴愬搧涓嬬嚎" ? 1 : 2; + var plc = Settings.deviceInfos.Where(a => a.deviceType == devType).FirstOrDefault(); + if (plc != null) { - if (state == 1101) + if (wmsTask.S_TYPE == "鎴愬搧涓嬬嚎") { - PlcHelper.SendHex(plc.address, "3F00110D0A"); + if (state == 1101) + { + PlcHelper.SendHex(plc.address, "3F00110D0A"); + } + if (state == 1102) + { + PlcHelper.SendHex(plc.address, "3F00100d0a"); + } } - if (state == 1102) + if (wmsTask.S_TYPE == "鏍堟澘涓婄嚎") { - PlcHelper.SendHex(plc.address, "3F00100d0a"); + if (state == 1103) + { + PlcHelper.SendHex(plc.address, "3F00210d0a"); + } + if (state == 1104 || state == -1) + { + PlcHelper.SendHex(plc.address, "3F00200d0a"); + } } + } - 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); - } + else LogHelper.Info("鍐滃か鏋楄姖-L6杈撻�绾�鏈厤缃�); } - else LogHelper.Info("鍐滃か涓存睙-L6杈撻�绾�鏈厤缃�); + else + { + LogHelper.Info($"{wmsTask.S_TYPE}鍐欏叆澶嶄綅淇″彿"); + writeSignal(wmsTask, state); + } } public static void writeSignal(WCSTask mst, int state = 0) @@ -140,15 +146,18 @@ 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) + if(state == 6) { - 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}"); + //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙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}"); } - else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_END_LOC}"); } if (mst.S_TYPE.Contains("婊℃墭涓婄嚎")) { @@ -157,7 +166,8 @@ var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault(); if (devInfo != null) { - var signal = "3F 00 10 0D 0A"; + 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}"); @@ -169,7 +179,8 @@ var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault(); if (devInfo != null) { - var signal = "3F 00 12 22 00 0D 0A"; + 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}"); @@ -177,15 +188,18 @@ 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) + if(state == 4) { - 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}"); + //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙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}"); } - else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_START_LOC}"); } } @@ -198,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> @@ -258,10 +684,11 @@ if (mst.S_TYPE.Contains("婊℃墭涓嬬嚎")) { LogHelper.Info($"绌烘墭浠诲姟鐢熸垚澶勭悊锛屼换鍔$被鍨嬶細{mst.S_TYPE}"); - var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂绌烘墭" && a.enable == 1).First(); + 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_COL).First(); + 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)); @@ -287,19 +714,12 @@ 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(); - } - + 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(); + var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜ф弧妗� && a.enable == 1).FirstOrDefault(); if (bcpInfo != null) { startLoca = DeviceProcess.getFDSXArea(db, bcpW, bcpInfo.areaCode); @@ -309,18 +729,15 @@ { if (bcpW.S_UsingNow == "Y") { - LogHelper.Info($"鐡跺澂鍗充骇鍗崇敤A搴撳尯鏌ユ壘"); - startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇鍗崇敤A" && a.enable == 1).FirstOrDefault().areaCode; + LogHelper.Info($"鐡跺澂鍗充骇婊℃ 鏌ユ壘"); + startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && 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; + 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); } } @@ -335,7 +752,7 @@ 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); + WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "鍑哄簱", taskType, cntrInfo.S_CNTR_CODE,"","",bcpW.S_WorkNo); } else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_CODE}"); } @@ -551,7 +968,7 @@ string Extend8 = "";//缁堢偣鍒� int startLayer = mst.N_START_LAYER;// 璧风偣鍙栬揣灞傛暟 int endLayer = mst.N_END_LAYER;// 缁堢偣鍗歌揣灞傛暟 - string workNo = mst.S_EQ_TASK_CODE;// 宸ュ崟鍙�+ string workNo = mst.S_WORK_NO;// 宸ュ崟鍙� string trayType = mst.S_NOTE;//鎵樼洏绫诲瀷-鏍规嵁鍚勮嚜鐜板満鎯呭喌鑾峰彇 var taskType = mst.S_TYPE;// 浠诲姟绫诲瀷 @@ -562,130 +979,143 @@ 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(); + 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 && 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; + 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_START_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(); @@ -722,21 +1152,43 @@ 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); - + //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("ItemHeight", Extend5); - dic.Add("CntrType", Extend6); - dic.Add("FromCol", Extend7); - dic.Add("ToCol", Extend8); + 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},"); @@ -746,13 +1198,13 @@ } } } - if (action) { - var res = new AGVResult(); - res = NDC.AddNewOrderNew(TsNo,mst.N_PRIORITY,mst.S_CODE, dic); + 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.Res.ErrCode == 0 || res.Res.ErrCode == 50009)) + if (res != null && (res.err_code == 0 || res.err_code == 50009)) { mst.N_B_STATE = 1; WCSHelper.UpdateStatus(mst, "宸叉帹閫�); @@ -838,181 +1290,249 @@ if (action) { //鐡剁洊搴撳尯锛屼袱灞傚瘑闆嗗瀷搴撳尯 绌烘弧鍦ㄥ悓涓�釜搴撳尯锛岄渶瑕佸尯鍒嗕笉鍚屾帓 - var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First(); - if (areaInfo != null) + var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderByDescending(a => a.pri).ToList(); + if (areaInfo.Count > 0) { - //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷 - LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿areaInfo.areaCode},itemCode:{itemCode}", "WMSAlgoRithm"); - try + foreach(var it in areaInfo) { - if (result == null) + //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷 + LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿it.areaCode},itemCode:{itemCode}"); + try { - 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) - { - //鍘绘帀褰撳墠璐т綅鏈夐攣锛屾垨鑰呬负绌烘墭鐨勮揣浣�- 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; - } - //鍒ゆ柇鏄惁鍜屽綋鍓嶈揣浣嶇殑鐗╂枡缂栫爜鐩稿悓 - 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(); - if (lockInfo == null) - { - //褰撳墠鎺掓棤浠诲姟 - 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) + 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($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅鏁伴噺涓猴細{list.Count}銆�, "WMSAlgoRithm"); - for (int i = 0; i < list.Count; i++) + LogHelper.Info($"鍏ュ簱绠楁硶02:鏌ヨ鍒板彲鍏ヨ揣浣嶇殑鏁伴噺涓猴細{locInfo.Count}"); + foreach (var a in locInfo) { - 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("鏃�)) + LogHelper.Info($"鍏ュ簱绠楁硶03:鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}锛屽綋鍓嶆暟閲忥細{a.N_CURRENT_NUM}"); + //鍘绘帀褰撳墠璐т綅鏈夐攣锛屾垨鑰呬负绌烘墭鐨勮揣浣�+ if (a.S_LOCK_STATE == "鏃�) { - //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡 - 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) + string endItemCode = ""; + var endCntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First(); + if (endCntrInfo != 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) + var endItemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == endCntrInfo.S_CNTR_CODE).First(); + if (endItemInfo != null) { - LogHelper.Info($"{locInfo1.sum},row:{row}"); - if (locInfo1.sum == 0) - { - //绌烘帓 - result = list[i]; - break; - } + endItemCode = endItemInfo.S_ITEM_CODE; } - else LogHelper.Info("鏈壘鍒拌鎺�); } else { - LogHelper.Info("璇ユ帓鏈夐攣"); + LogHelper.Info($"缁堢偣璐т綅鏈粦瀹氭墭鐩樹俊鎭�); + continue; + } + LogHelper.Info($"鍏ュ簱绠楁硶04:鏌ヨ鍒板綋鍓嶈揣浣嶇粦瀹氱殑鐗╂枡缂栫爜涓�{endItemCode}"); + //鍒ゆ柇鏄惁鍜屽綋鍓嶈揣浣嶇殑鐗╂枡缂栫爜鐩稿悓 + 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(); + if (lockInfo == null) + { + //褰撳墠鎺掓棤浠诲姟 + 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; + } + } + else + { + LogHelper.Info($"鍏ュ簱绠楁硶05:鏌ヨ鍒板綋鍓嶆帓鏈夐攣锛屾帓鍙凤細{a.N_ROW}"); + + } } } } } - else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{areaInfo.areaCode}"); - #endregion + else + { + LogHelper.Info($"鍏ュ簱绠楁硶02:鏈煡璇㈠埌鍙叆璐т綅"); + } + if (result == null) + { + //todo 杩橀渶瑕佸垽鏂攣 + #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓 + LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅銆�, "WMSAlgoRithm"); + //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪 + 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) + { + 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 = list[i]; + break; + } + } + else LogHelper.Info("鏈壘鍒拌鎺�); + } + else + { + LogHelper.Info("璇ユ帓鏈夐攣"); + } + } + } + } + else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{it.areaCode}"); + #endregion + } + + if(result != null) + { + break; + } } } + catch (Exception ex) + { + Console.WriteLine("GetLocationIn:" + ex.Message + ex.StackTrace); + LogHelper.Error("GetLocationIn:" + ex.Message, ex); + } } - catch (Exception ex) - { - Console.WriteLine("GetLocationIn:" + ex.Message + ex.StackTrace); - LogHelper.Error("GetLocationIn:" + ex.Message, ex); - } + } else { - LogHelper.Info($"鍏ュ簱浠诲姟 璧风偣璐т綅鏈粦瀹氱墿鏂欎俊鎭�); + LogHelper.Info($"鍏ュ簱浠诲姟锛歿areaName}鏈厤缃�); } } else { - var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault(); - if(areaInfo != null) + var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderByDescending(a => a.pri).ToList(); + if(areaInfo.Count > 0) + { + foreach(var it in areaInfo) + { + 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; + } + } + else + { + LogHelper.Info("鐡跺澂鍗充骇绌烘鏈厤缃�); + } + } + 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) - { - 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) - { - 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; } @@ -1027,49 +1547,60 @@ { 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, "鐡跺澂鍗充骇鍗崇敤B", itemCode); + result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂鍗充骇婊℃缂撳瓨", itemCode); } if(result == null) { - result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", itemCode); + 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, "鐡跺澂搴撳尯", itemCode); + result = locInfo; + } + else + { + LogHelper.Info("鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鍧叆搴撴帴椹充綅鏆傛椂鏈煡璇㈠埌鍙敤璐т綅"); } } + else + { + LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鍧叆搴撴帴椹�鏈厤缃�); + } + return result; } @@ -1083,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; } @@ -1098,307 +1629,8 @@ { LogHelper.Info($"{endAreaName}鏈厤缃�); } + 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> @@ -1527,30 +1759,6 @@ } /// <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> @@ -1604,11 +1812,6 @@ //} } - public class asnReferenceDModel - { - public string asnReferenceD { get; set; } - } - /// <summary> /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇鐗╂枡缂栫爜 /// </summary> @@ -1641,5 +1844,540 @@ 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