From d66d362ee6d76f02331e56df1fdec1c2114c9f3e Mon Sep 17 00:00:00 2001 From: zxx <Zxx@HanInfo> Date: 星期三, 16 七月 2025 17:31:41 +0800 Subject: [PATCH] 1 --- HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/api/WmsController.cs | 8 HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/dispatch/GZRobot.cs | 66 ++++++ HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/Container.cs | 1 HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/process/TaskProcess.cs | 334 ++++++++++++++++++++++++++++++--- HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/HH.WCS.XiaoMi.csproj | 1 HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/CntrItemDetail.cs | 3 HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/bigMaterial.cs | 1 HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/wms/ContainerHelper.cs | 4 HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/dispatch/RcsHelper.cs | 10 HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/core/WMSCore.cs | 78 +++--- HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/smallMaterial.cs | 4 HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/wms/WCSHelper.cs | 9 HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/util/HttpHelper.cs | 40 ++++ HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/sensorSmallMaterial.cs | 32 +++ 14 files changed, 505 insertions(+), 86 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/HH.WCS.XiaoMi.csproj b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/HH.WCS.XiaoMi.csproj index 04e3936..75c6362 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/HH.WCS.XiaoMi.csproj +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/HH.WCS.XiaoMi.csproj @@ -221,6 +221,7 @@ <Compile Include="dispatch\XMWcsHelper.cs" /> <Compile Include="models\LocFrameRel.cs" /> <Compile Include="models\bigMaterial.cs" /> + <Compile Include="models\sensorSmallMaterial.cs" /> <Compile Include="models\smallMaterial.cs" /> <Compile Include="models\AutoRepairEmptyTray.cs" /> <Compile Include="models\TN_ISUSING.cs" /> diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/api/WmsController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/api/WmsController.cs index 3dc0b70..7f62a82 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/api/WmsController.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/api/WmsController.cs @@ -41,6 +41,14 @@ LogHelper.Info("smallMaterial 杩斿洖锛� + JsonConvert.SerializeObject(res), "WMSAPI"); return res; } + [HttpPost] + public TaskResponse sensorSmallMaterial(sensorSmallMaterial model) + { + LogHelper.Info("sensorSmallMaterial 鍙傛暟锛� + JsonConvert.SerializeObject(model), "WMSAPI"); + var res = TaskProcess.sensorSmallMaterial(model); + LogHelper.Info("sensorSmallMaterial 杩斿洖锛� + JsonConvert.SerializeObject(res), "WMSAPI"); + return res; + } } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/core/WMSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/core/WMSCore.cs index ab3d537..13ad006 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/core/WMSCore.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/core/WMSCore.cs @@ -324,48 +324,48 @@ //} - /// <summary> - /// 澶т欢鍖哄埌鍖�鍛煎彨绌虹 - /// </summary> - /// <param name="model"></param> - /// <returns></returns> - public static void bigMateriala2a() - { - var db = new SqlHelper<Location>().GetInstance(); - try - { - var startLoc = new Location(); - var endLoc = new Location(); - var endReservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "").FirstOrDefault(); - endLoc =TaskProcess.InWorkTransport(endReservoirs.areaCode); - if (endLoc != null) - { - var startReservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "").FirstOrDefault(); - startLoc = TaskProcess.OutWorkTransport(startReservoirs.areaCode); - var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First(); - //鍒涘缓浠诲姟 - LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}", "鑷姩琛ョ┖绠�); - var res = TaskProcess.CreateTransport(startLoc.S_CODE, endLoc.S_CODE, "鑷姩琛ョ┖绠�, locCntrRel.S_CNTR_CODE, 1, 1); - if (res) - { - LogHelper.Info($"璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}浠诲姟鍒涘缓鎴愬姛"); - } - else - { - LogHelper.Info($"璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}浠诲姟鍒涘缓澶辫触"); - } - } + ///// <summary> + ///// 澶т欢鍖哄埌鍖�鍛煎彨绌虹 + ///// </summary> + ///// <param name="model"></param> + ///// <returns></returns> + //public static void bigMateriala2a() + //{ + // var db = new SqlHelper<Location>().GetInstance(); + // try + // { + // var startLoc = new Location(); + // var endLoc = new Location(); + // var endReservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "").FirstOrDefault(); + // endLoc =TaskProcess.InWorkTransport(endReservoirs.areaCode); + // if (endLoc != null) + // { + // var startReservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "").FirstOrDefault(); + // startLoc = TaskProcess.OutWorkTransport(startReservoirs.areaCode); + // var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First(); + // //鍒涘缓浠诲姟 + // LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}", "鑷姩琛ョ┖绠�); + // var res = TaskProcess.CreateTransport(startLoc.S_CODE, endLoc.S_CODE, "鑷姩琛ョ┖绠�, locCntrRel.S_CNTR_CODE, 1, 1); + // if (res) + // { + // LogHelper.Info($"璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}浠诲姟鍒涘缓鎴愬姛"); + // } + // else + // { + // LogHelper.Info($"璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}浠诲姟鍒涘缓澶辫触"); + // } + // } - } - catch (Exception ex) - { - Console.WriteLine("bigMateriala2a:" + ex.Message + ex.StackTrace); - LogHelper.Error("bigMateriala2a:" + ex.Message, ex); - throw; - } + // } + // catch (Exception ex) + // { + // Console.WriteLine("bigMateriala2a:" + ex.Message + ex.StackTrace); + // LogHelper.Error("bigMateriala2a:" + ex.Message, ex); + // throw; + // } - } + //} /// <summary> diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/dispatch/GZRobot.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/dispatch/GZRobot.cs index 03e4151..4fc5e9a 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/dispatch/GZRobot.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/dispatch/GZRobot.cs @@ -1,11 +1,13 @@ 锘縰sing HH.WCS.XiaoMi.api; using HH.WCS.XiaoMi.core; using HH.WCS.XiaoMi.LISTA.dispatch; +using HH.WCS.XiaoMi.process; using HH.WCS.XiaoMi.util; using HH.WCS.XiaoMi.wms; using Newtonsoft.Json; using System; using System.Collections.Generic; +using System.ComponentModel; using static HH.WCS.XiaoMi.api.ApiModel; using static HH.WCS.XiaoMi.LISTA.dispatch.XMWcsHelper; @@ -249,14 +251,72 @@ { //2琛ㄧず鐢宠鐩爣搴撲綅 var apply = new ApplyModel() { wcsTaskCode = wcsTask.S_WORKSHOP_NO }; - var end = XMWcsHelper.GetPositionApply(apply); - if (!string.IsNullOrEmpty(end.body.pointCode)) + + #region 鍐欐娴嬭瘯鐢�+ if (!string.IsNullOrEmpty("HC43")) { result.resultCode = 0; result.msg = "鐩爣搴撲綅宸茬敵璇�; - result.orderData = end.body.pointCode; + result.orderData = "HC43"; + //浠诲姟琛ㄨˉ涓�+ var db = new SqlHelper<WCSTask>().GetInstance(); + var task = db.Queryable<WCSTask>().Where(a => a.S_CODE == model.orderName).First(); + LogHelper.Info($"task鍙傛暟======={JsonConvert.SerializeObject(task)}"); + var endLoc = LocationHelper.GetLocation("HC43"); + LogHelper.Info($"endLoc鍙傛暟======={JsonConvert.SerializeObject(endLoc)}"); + task.S_END_LOC = "HC43"; + task.S_END_AREA = endLoc.S_AREA_CODE; + var res = db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_END_AREA }).ExecuteCommand() > 0; + //閿佷綇缁堢偣璐т綅 + LogHelper.Info($"task2鍙傛暟======={JsonConvert.SerializeObject(task)}"); + LocationHelper.LockLoc("HC43", 1); + if (!res) + { + result.resultCode = 1; + result.success = false; + result.msg = $"缁堢偣搴撲綅{task.S_END_LOC}鏇存柊澶辫触"; + } + LogHelper.Info($"result鍙傛暟======={JsonConvert.SerializeObject(result)}"); return result; } + #endregion + + //var db = new SqlHelper<Object>().GetInstance(); + //var end = XMWcsHelper.GetPositionApply(apply); + //string endPointCode = null; + //if (end.body.targetType.Equals("AREA")) { + // var endLoc1 =TaskProcess.InWorkTransport(end.body.pointCode); + // if (endLoc1!=null) + // { + // //濡傛灉娌℃壘鍒板氨绛夌涓�潯 + // endPointCode = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == end.body.pointCode).OrderByDescending(a => a.N_ROW).ToList()[0].S_CODE; + // } + //} else if (end.body.targetType.Equals("STATION")) { + // endPointCode= end.body.pointCode; + //} + + //if (!string.IsNullOrEmpty(endPointCode)) + //{ + // result.resultCode = 0; + // result.msg = "鐩爣搴撲綅宸茬敵璇�; + // result.orderData = endPointCode; + // //浠诲姟琛ㄨˉ涓�+ // var task = db.Queryable<WCSTask>().Where(a => a.S_CODE == model.orderName).First(); + // var endLoc = LocationHelper.GetLocation(endPointCode); + // task.S_END_LOC = endPointCode; + // task.S_END_AREA = endLoc.S_AREA_CODE; + // var res = db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_END_AREA }).ExecuteCommand() > 0; + // //閿佷綇缁堢偣璐т綅 + // LocationHelper.LockLoc(endPointCode, 1); + // if (!res) + // { + // result.resultCode = 1; + // result.success = false; + // result.msg = $"缁堢偣搴撲綅{task.S_END_LOC}鏇存柊澶辫触"; + // } + // return result; + //} + else { result.resultCode = 1; diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/dispatch/RcsHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/dispatch/RcsHelper.cs index a796d4c..1046d0c 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/dispatch/RcsHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/dispatch/RcsHelper.cs @@ -37,7 +37,8 @@ { var db = new SqlHelper<WCSTask>().GetInstance(); //瀛樿鍗曞彿 - var task = db.Queryable<WCSTask>().Where(a => a.S_CODE == model.ts_name).First(); + var task = db.Queryable<WCSTask>().Where(a => a.S_CODE == model.order_name).First(); + LogHelper.Info($"CreateAntsOrder task鍙傛暟==========={JsonConvert.SerializeObject(task)}"); task.S_WORKSHOP_NO = dataResult.data[0].in_order_id; var res = db.Updateable(task).UpdateColumns(it => it.S_WORKSHOP_NO).ExecuteCommand() > 0; if (res) @@ -118,7 +119,8 @@ bool result = false; string msg = ""; var request = JsonConvert.SerializeObject(model); - var response = apiHelper.Post(baseUrl + ":9002/wcs-admin/api/cancel", request); + //var response = apiHelper.Post(baseUrl + ":9002/wcs-admin/api/cancel", request); + var response = apiHelper.Put(baseUrl + ":2000/api/om/order/order-command", request); msg = $"[hanao-CancelOrder] request={request};response={response}"; Console.WriteLine(msg); if (response != "") @@ -276,11 +278,11 @@ /// <summary> /// /// </summary> - public string order_id { get; set; } + public string order_name { get; set; } /// <summary> /// /// </summary> - public string order_command_type_id { get; set; } + public int order_command_type_id { get; set; } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/CntrItemDetail.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/CntrItemDetail.cs index b3a66d9..61b9eee 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/CntrItemDetail.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/CntrItemDetail.cs @@ -16,6 +16,7 @@ public string S_SERIAL_NO { get; set; } public string S_ITEM_CODE { get; set; } public string S_ITEM_NAME { get; set; } = ""; + // public string S_ITEM_SPEC { get; set; } public string S_ITEM_STATE { get; set; } = "合格"; /// <summary> @@ -33,6 +34,8 @@ public float F_QTY { get; set; } public string S_UOM { get; set; } = "kg"; public string S_CNTR_CODE { get; set; } + + //箱子型号用 public string S_BS_TYPE { get; set; } = ""; public string S_BS_NO { get; set; } = ""; diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/Container.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/Container.cs index 19283ca..b0ca321 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/Container.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/Container.cs @@ -10,6 +10,7 @@ public string S_CODE { get; set; } public string S_TYPE { get; set; } + //用作箱子类型 public string S_SPEC { get; set; } public float F_WEIGHT { get; set; } public float F_LOAD_WEIGHT { get; set; } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/bigMaterial.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/bigMaterial.cs index 4a1bd12..f67c9c2 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/bigMaterial.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/bigMaterial.cs @@ -28,6 +28,7 @@ public string BatchNo { get; set; } public string issueMode { get; set; } public int num { get; set; } + public string boxType { get; set; } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/sensorSmallMaterial.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/sensorSmallMaterial.cs new file mode 100644 index 0000000..034ab00 --- /dev/null +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/sensorSmallMaterial.cs @@ -0,0 +1,32 @@ +using HH.WCS.XiaoMi.models; +using SqlSugar; +using System; +using System.Collections.Generic; + +namespace HH.WCS.XiaoMi +{ + public class sensorSmallMaterial : BaseModel + { + //料架编号 + public string rackNumber { get; set; } + //配送路径 + public string shippingRoute { get; set; } + //任务编号 + public string taskID { get; set; } + // + public string order_name { get; set; } + //截止时间 + public DateTime dead_line { get; set; } + //脚本名称 + public string ts_name { get; set; } + //创建者名称 + public string createdName { get; set; } + //订单优先级 + public string priority { get; set; } + //TS订单参数 + public Parameters parameters { get; set; } + + } + + +} diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/smallMaterial.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/smallMaterial.cs index 69f0fcc..8685043 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/smallMaterial.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/models/smallMaterial.cs @@ -46,8 +46,6 @@ } public class Parameters { - //任务号 - public string BatchNo { get; set; } //起点 public string src { get; set; } //起点缓存区 @@ -58,6 +56,8 @@ public string dst_area { get; set; } //零件类 public string sku { get; set; } + //任务号 + public string BatchNo { get; set; } //起点缓存区发料方式 public string issueMode { get; set; } //数量 diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/process/TaskProcess.cs index 943814b..6e250bf 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/process/TaskProcess.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/process/TaskProcess.cs @@ -29,6 +29,7 @@ using System.Threading.Tasks; using HH.WCS.XiaoMi.LISTA.dispatch; using static HH.WCS.XiaoMi.LISTA.dispatch.RcsHelper; +using System.Diagnostics; namespace HH.WCS.XiaoMi.process { @@ -124,8 +125,8 @@ CacheBitCancelUpdate(mst); ////灏忕背璁㈠崟鍙栨秷 //CancelModel cancelModel = new CancelModel(); - //cancelModel.order_id = mst.S_WORKSHOP_NO; - //cancelModel.order_command_type_id = "2"; + //cancelModel.order_name = mst.S_CODE; + //cancelModel.order_command_type_id = 2; //RcsHelper.CancelOrder(cancelModel); } @@ -386,7 +387,7 @@ model.order_name = mst.S_CODE; model.priority = 1; model.dead_line = DateTime.Now.ToString(); - model.ts_name = mst.S_TYPE; + model.ts_name = "p2p"; model.parameters = parme; //model.parameters = new AntsParasModel { // src = mst.S_START_LOC, @@ -524,7 +525,10 @@ result = true; //浠诲姟鍒涘缓鎴愬姛锛岃捣鐐硅揣浣嶅嚭搴撻攣瀹氾紝缁堢偣璐т綅鍏ュ簱閿佸畾 LocationHelper.LockLoc(start, 2); - LocationHelper.LockLoc(end, 1); + if (end!=null&& end != "") + { + LocationHelper.LockLoc(end, 1); + } } return result; } @@ -857,7 +861,7 @@ /// <summary> - /// 鍑哄簱绠楁硶 + /// 鍑哄簱绠楁硶 鍏堣繘鍏堝嚭 /// </summary> /// <param name="area">搴撳尯</param> /// <returns></returns> @@ -896,6 +900,108 @@ LogHelper.Error("OutWorkTransport:" + ex.Message, ex); } return result; + } + + /// <summary> + /// 灏忕背鍑哄簱绠楁硶 鍏堣繘鍏堝嚭 + /// </summary> + /// <param name="area">搴撳尯</param> + /// <returns></returns> + public static Location OutWorkTransportXm(string area, string issueMode) + { + Location result = null; + try + { + var db = new SqlHelper<Object>().GetInstance(); + + // 鑾峰彇鎵�湁绗﹀悎鏉′欢鐨勮揣浣�+ var query = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area); + + // 鏍规嵁鍙戞枡鏂瑰紡搴旂敤涓嶅悓鐨勭瓫閫夊拰鎺掑簭閫昏緫 + switch (issueMode) + { + case "9": // 鍙戞弧绠憋紝鏁伴噺澶т簬0鐨勫厛杩涘厛鍑�+ query = query.Where(a => a.N_CURRENT_NUM > 0); + var list9 = query.ToList() + .OrderBy(s => s.T_CREATE) // 鍏堣繘鍏堝嚭 + .ToList(); + result = GetFirstAvailableLocation(list9); + break; + + case "0": // 鍙戠┖绠憋紝鏁伴噺=0鐨勫厛杩涘厛鍑�+ query = query.Where(a => a.N_CURRENT_NUM == 0); + var list0 = query.ToList() + .OrderBy(s => s.T_CREATE) // 鍏堣繘鍏堝嚭 + .ToList(); + result = GetFirstAvailableLocation(list0); + break; + + case "8": // 绠卞瓙鍨嬪彿浼樺厛绾э細娈嬬>绌虹锛堟畫鍐呰‖锛�婊$>绌虹>绌虹锛堟弧鍐呰‖锛�鍏跺畠 + var list8 = query.ToList() + .OrderBy(s => GetBoxTypePriority(s,new[] { "2", "4", "1", "3", "5" })) // 鎸夋寚瀹氫紭鍏堢骇鎺掑簭 + .ThenBy(s => s.T_CREATE) // 鐩稿悓浼樺厛绾ф寜鍏堣繘鍏堝嚭 + .ToList(); + result = GetFirstAvailableLocation(list8); + break; + + case "1": // 绠卞瓙鍨嬪彿浼樺厛绾э細娈嬬>绌虹锛堟畫鍐呰‖锛�绌虹>绌虹锛堟弧鍐呰‖锛�婊$>鍏跺畠 + var list1 = query.ToList() + .OrderBy(s => GetBoxTypePriority(s,new[] { "2", "4", "3", "5", "1" })) // 鎸夋寚瀹氫紭鍏堢骇鎺掑簭 + .ThenBy(s => s.T_CREATE) // 鐩稿悓浼樺厛绾ф寜鍏堣繘鍏堝嚭 + .ToList(); + result = GetFirstAvailableLocation(list1); + break; + + default: // 涓嶅~-鎸夊厛杩涘厛鍑�+ var listDefault = query.ToList() + .OrderBy(s => s.T_CREATE) // 鍏堣繘鍏堝嚭 + .ToList(); + result = GetFirstAvailableLocation(listDefault); + break; + } + } + catch (Exception ex) + { + Console.WriteLine("OutWorkTransport:" + ex.Message + ex.StackTrace); + LogHelper.Error("OutWorkTransport:" + ex.Message, ex); + } + return result; + } + + // 杈呭姪鏂规硶锛氭牴鎹瀛愬瀷鍙疯幏鍙栦紭鍏堢骇 + private static int GetBoxTypePriority(Location location, string[] priorityOrder) + { + var db = new SqlHelper<Object>().GetInstance(); + var locCntrRel = db.Queryable<LocCntrRel>().Where(s => s.S_LOC_CODE == location.S_CODE).First(); + if (locCntrRel != null) + { + var container = db.Queryable<Container>().Where(c => c.S_CODE == locCntrRel.S_CNTR_CODE).First(); + if (container != null) + { + // 鏌ユ壘绠卞瓙鍨嬪彿鍦ㄤ紭鍏堢骇鏁扮粍涓殑浣嶇疆 + var index = Array.IndexOf(priorityOrder, container.S_SPEC); + return index >= 0 ? index : priorityOrder.Length; // 涓嶅湪浼樺厛绾у垪琛ㄤ腑鐨勬帓鍦ㄦ渶鍚�+ } + } + return priorityOrder.Length; // 娌℃湁鍏宠仈瀹瑰櫒鐨勬帓鍦ㄦ渶鍚�+ } + + // 杈呭姪鏂规硶锛氳幏鍙栫涓�釜鍙敤鐨勮揣浣�+ private static Location GetFirstAvailableLocation(List<Location> locations) + { + var db = new SqlHelper<Object>().GetInstance(); + foreach (var location in locations) + { + if (location.N_LOCK_STATE == 0) // 鍒ゆ柇璐т綅鏄惁琚攣浣�+ { + var locCntrRel = db.Queryable<LocCntrRel>().Where(s => s.S_LOC_CODE == location.S_CODE).First(); + if (locCntrRel != null) // 鍒ゆ柇鏄惁鏈夋墭鐩�+ { + return location; + } + } + } + return null; } /// <summary> /// WMS鍑哄簱杞繍 @@ -1020,6 +1126,15 @@ var startLoc = new Location(); string endLocStr = null; string Message = null; + //鏍¢獙浠诲姟缂栧彿鏄惁瀛樺湪 + if (repeatTaskCode(model.order_name)) + { + Message = model.order_name+"浠诲姟缂栧彿宸插瓨鍦�; + return new TaskResponse + { + header = new ResponseHead { code = 0, desc = Message } + }; + } switch (model.ts_name) { case "p2p": @@ -1027,6 +1142,10 @@ if (startLoc == null || startLoc.N_LOCK_STATE != 0 || startLoc.C_ENABLE != "Y") { Message = $"{model.parameters.src}搴撲綅宸茶閿佸畾!"; + return new TaskResponse + { + header = new ResponseHead { code = 0, desc = Message } + }; } endLocStr = model.parameters.dst; @@ -1036,6 +1155,10 @@ if (startLoc == null || startLoc.N_LOCK_STATE != 0 || startLoc.C_ENABLE != "Y") { Message = $"{model.parameters.src}搴撲綅宸茶閿佸畾!"; + return new TaskResponse + { + header = new ResponseHead { code = 0, desc = Message } + }; } var endLoc = InWorkTransport(model.parameters.dst_area); if (endLoc == null) @@ -1046,19 +1169,27 @@ } break; case "a2p": - startLoc = OutWorkTransport(model.parameters.src_area); + startLoc = OutWorkTransportXm(model.parameters.src_area, model.parameters.issueMode); if (startLoc == null) { Message = $"{model.parameters.dst}搴撳尯娌℃湁鍙嚭璐т綅!"; + return new TaskResponse + { + header = new ResponseHead { code = 0, desc = Message } + }; } endLocStr = model.parameters.dst; break; case "a2a": - startLoc = OutWorkTransport(model.parameters.src_area); + startLoc = OutWorkTransportXm(model.parameters.src_area,model.parameters.issueMode); if (startLoc == null) { Message = $"{model.parameters.src}搴撳尯娌℃湁鍙嚭璐т綅!"; + return new TaskResponse + { + header = new ResponseHead { code = 0, desc = Message } + }; } var endLoc1 = InWorkTransport(model.parameters.dst_area); if (endLoc1 == null) @@ -1069,10 +1200,26 @@ } break; case "p2u": - startLoc = OutWorkTransport(model.parameters.src); + startLoc = db.Queryable<Location>().Where(a => a.S_CODE == model.parameters.src).First(); + if (startLoc == null || startLoc.N_LOCK_STATE != 0 || startLoc.C_ENABLE != "Y") + { + Message = $"{model.parameters.src}搴撲綅宸茶閿佸畾!"; + return new TaskResponse + { + header = new ResponseHead { code = 0, desc = Message } + }; + } + endLocStr = ""; + break; + case "a2u": + startLoc = OutWorkTransportXm(model.parameters.src, model.parameters.issueMode); if (startLoc == null) { Message = $"{model.parameters.src}搴撳尯娌℃湁鍙嚭璐т綅!"; + return new TaskResponse + { + header = new ResponseHead { code = 0, desc = Message } + }; } endLocStr = ""; break; @@ -1082,29 +1229,14 @@ //鍒涘缓鎵樼洏璐т綅缁戝畾鍏崇郴 string trayCode = ContainerHelper.GenerateCntrNo(); //缁戝畾璧风偣璐т綅(浜х嚎)鍜岀墿鏂�- ContainerHelper.BindLocCntrsXm(startLoc.S_CODE, trayCode, model.parameters.sku, "", model.parameters.BatchNo, model.parameters.issueMode, model.parameters.num); + ContainerHelper.BindLocCntrsXm(startLoc.S_CODE, trayCode, model.parameters.sku, "", model.parameters.BatchNo, model.parameters.issueMode, model.parameters.num, model.parameters.boxType); var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First(); //鍒涘缓浠诲姟 LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLocStr}", "澶т欢"); var res = TaskProcess.CreateTransportDj(startLoc.S_CODE, endLocStr, "澶т欢", locCntrRel.S_CNTR_CODE, model.order_name, 1, 1); - if (!res) - { - return new TaskResponse - { - header = new ResponseHead { code = 1, desc = Message } - }; - - } var result = new TaskResponse(); - if (Message != null) - { - result = new TaskResponse - { - header = new ResponseHead { code = 0, desc = Message } - }; - } - else + if (res) { result = new TaskResponse { @@ -1113,10 +1245,17 @@ { msg = "success", app_name = "Guozi client", - data = new List<ResponseData> { new ResponseData { in_order_id = model.taskID } }, + data = new List<ResponseData> { new ResponseData { in_order_id = model.order_name } }, version = "" } }; + } + else { + Message = $"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLocStr}澶辫触"; + result = new TaskResponse + { + header = new ResponseHead { code = 0, desc = Message } + }; } return result; @@ -1155,6 +1294,15 @@ //鎵緋2a鐨勪换鍔$紪鐮� var order_name = model.taskList.Find(s=>s.ts_name=="p2a").order_name; + //鏍¢獙浠诲姟缂栧彿鏄惁瀛樺湪 + if (repeatTaskCode(order_name)) + { + Message = order_name + "浠诲姟缂栧彿宸插瓨鍦�; + return new TaskResponse + { + header = new ResponseHead { code = 0, desc = Message } + }; + } //鍒涘缓浠诲姟 LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}", "灏忎欢閫氱敤杞﹀瀷"); var res = TaskProcess.CreateTransportDj(startLoc.S_CODE, endLoc.S_CODE, "灏忎欢閫氱敤杞﹀瀷", model.rackNumber, order_name, 1, 1); @@ -1162,15 +1310,25 @@ { return new TaskResponse { - header = new ResponseHead { code = 0, desc = "鑷姩涓婄嚎浠诲姟鍒涘缓澶辫触" } + header = new ResponseHead { code = 0, desc = $"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}澶辫触" } }; } } + var result = new TaskResponse(); //鏂欐灦涓婄殑鎵樼洏鍒版寚瀹氱殑宸ヤ綅 foreach (var tasklist in model.taskList) { if (tasklist.ts_name == "p2p") { + //鏍¢獙浠诲姟缂栧彿鏄惁瀛樺湪 + if (repeatTaskCode(tasklist.order_name)) + { + Message = tasklist.order_name + "浠诲姟缂栧彿宸插瓨鍦�; + return new TaskResponse + { + header = new ResponseHead { code = 0, desc = Message } + }; + } //鍏堢粦瀹氭枡鏋跺拰鏂欑浣� ContainerHelper.BindLocCntrsXmLj(tasklist.rackPosition, model.rackNumber); @@ -1187,24 +1345,133 @@ //鍒涘缓鎵樼洏璐т綅缁戝畾鍏崇郴 string trayCode = ContainerHelper.GenerateCntrNo(); //缁戝畾璧风偣璐т綅(浜х嚎)鍜岀墿鏂�- ContainerHelper.BindLocCntrsXm(startloc.S_CODE, trayCode, tasklist.parameters.sku, "", tasklist.parameters.BatchNo, tasklist.parameters.issueMode, tasklist.parameters.num); + ContainerHelper.BindLocCntrsXm(startloc.S_CODE, trayCode, tasklist.parameters.sku, "", tasklist.parameters.BatchNo, tasklist.parameters.issueMode, tasklist.parameters.num,""); var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startloc.S_CODE).First(); //鍒涘缓浠诲姟 LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startloc.S_CODE}缁堢偣:{endlocstr}", "inbound"); var res = TaskProcess.CreateTransportDj(startloc.S_CODE, endlocstr, "inbound", locCntrRel.S_CNTR_CODE, tasklist.order_name, 1, 1); - if (!res) + + if (res) { - return new TaskResponse + result = new TaskResponse { - header = new ResponseHead { code = 1, desc = Message } + header = new ResponseHead { code = 200, desc = "SUCCESS" }, + body = new ResponseBody + { + msg = "success", + app_name = "Guozi client", + data = new List<ResponseData> { new ResponseData { in_order_id = tasklist.order_name } }, + version = "" + } }; - + } + else + { + Message = $"鍒涘缓浠诲姟 璧风偣:{startloc.S_CODE}缁堢偣:{endlocstr}澶辫触"; + result = new TaskResponse + { + header = new ResponseHead { code = 0, desc = Message } + }; } } } + return result; + } + catch (Exception ex) + { + Console.WriteLine("smallMaterial:" + ex.Message + ex.StackTrace); + LogHelper.Error("smallMaterial:" + ex.Message, ex); + throw; + } + } + //浠诲姟鍙烽噸澶嶅垽鏂�+ private static bool repeatTaskCode(string orderName) { + var db = new SqlHelper<WCSTask>().GetInstance(); + var result = db.Queryable<WCSTask>().Where(a => a.S_CODE == orderName).Count(); + return result > 0; + + } + + //浼犳劅鍣ㄥ皬浠�+ public static TaskResponse sensorSmallMaterial(sensorSmallMaterial model) + { + var db = new SqlHelper<Location>().GetInstance(); + try + { + string Message = null; + + + + ////鎷嗗垎鎴愪袱鏉′换鍔★紝涓�潯鏄枡鏋跺埌鎸囧畾鐨勭紦瀛樺尯锛屼簩鏄枡鏋朵笂鐨勬墭鐩樺埌鎸囧畾鐨勫伐浣嶏紙灏忕背wcs浼狅級涓�澶�+ //var startLoc = db.Queryable<Location>().Where(a => a.S_CODE == model.taskList[0].parameters.src).First(); + //if (startLoc == null || startLoc.N_LOCK_STATE != 0) + //{ + // return new TaskResponse + // { + // header = new ResponseHead { code = 0, desc = $"{model.taskList[0].parameters.src}搴撲綅宸茶閿佸畾!" } + // }; + //} + //var endLoc = TaskProcess.InWorkTransport(model.shippingRoute); + //if (endLoc != null) + //{ + // ////鍒涘缓鍒扮紦瀛樺尯浠诲姟 + // //var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First(); + + // //鎵緋2a鐨勪换鍔$紪鐮�+ // var order_name = model.taskList.Find(s => s.ts_name == "p2a").order_name; + // //鍒涘缓浠诲姟 + // LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}", "灏忎欢閫氱敤杞﹀瀷"); + // var res = TaskProcess.CreateTransportDj(startLoc.S_CODE, endLoc.S_CODE, "灏忎欢閫氱敤杞﹀瀷", model.rackNumber, order_name, 1, 1); + // if (!res) + // { + // return new TaskResponse + // { + // header = new ResponseHead { code = 0, desc = "鑷姩涓婄嚎浠诲姟鍒涘缓澶辫触" } + // }; + // } + //} + ////鏂欐灦涓婄殑鎵樼洏鍒版寚瀹氱殑宸ヤ綅 + //foreach (var tasklist in model.taskList) + //{ + // if (tasklist.ts_name == "p2p") + // { + // //鍏堢粦瀹氭枡鏋跺拰鏂欑浣�+ // ContainerHelper.BindLocCntrsXmLj(tasklist.rackPosition, model.rackNumber); + + // var startloc = db.Queryable<Location>().Where(a => a.S_CODE == tasklist.rackPosition).First(); + // if (startloc == null || startloc.N_LOCK_STATE != 0) + // { + // return new TaskResponse + // { + // header = new ResponseHead { code = 0, desc = $"{startloc.S_CODE}搴撲綅宸茶閿佸畾!" } + // }; + // } + // var endlocstr = tasklist.parameters.dst; + + // //鍒涘缓鎵樼洏璐т綅缁戝畾鍏崇郴 + // string trayCode = ContainerHelper.GenerateCntrNo(); + // //缁戝畾璧风偣璐т綅(浜х嚎)鍜岀墿鏂�+ // ContainerHelper.BindLocCntrsXm(startloc.S_CODE, trayCode, tasklist.parameters.sku, "", tasklist.parameters.BatchNo, tasklist.parameters.issueMode, tasklist.parameters.num); + + // var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startloc.S_CODE).First(); + // //鍒涘缓浠诲姟 + // LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startloc.S_CODE}缁堢偣:{endlocstr}", "inbound"); + // var res = TaskProcess.CreateTransportDj(startloc.S_CODE, endlocstr, "inbound", locCntrRel.S_CNTR_CODE, tasklist.order_name, 1, 1); + // if (!res) + // { + // return new TaskResponse + // { + // header = new ResponseHead { code = 1, desc = Message } + // }; + + // } + + // } + + //} var result = new TaskResponse(); if (Message != null) { @@ -1222,7 +1489,7 @@ { msg = "success", app_name = "Guozi client", - data = new List<ResponseData> { new ResponseData { in_order_id = model.taskList[0].taskID } }, + data = new List<ResponseData> { new ResponseData { in_order_id = model.taskID } }, version = "" } }; @@ -1239,7 +1506,6 @@ throw; } } - } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/util/HttpHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/util/HttpHelper.cs index 05b5941..47b6c9d 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/util/HttpHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/util/HttpHelper.cs @@ -129,6 +129,46 @@ } } + public string Put(string url, string putData, string contentType = "application/json", string sessionId = "") + { + Console.WriteLine(url); + WebRequest request = WebRequest.Create(url); + request.Method = "PUT"; + byte[] byteArray = Encoding.UTF8.GetBytes(putData); + request.ContentType = contentType; + request.ContentLength = byteArray.Length; + request.Timeout = 3000; + if (sessionId != "") + { + request.Headers.Set("ASP.NET_SessionId", sessionId); + } + StreamReader reader = null; + Stream stream = null; + WebResponse rsp = null; + try + { + stream = request.GetRequestStream(); + stream.Write(byteArray, 0, byteArray.Length); + stream.Close(); + rsp = request.GetResponse(); + stream = rsp.GetResponseStream(); + reader = new StreamReader(stream); + return reader.ReadToEnd(); + } + catch (Exception ex) + { + Console.WriteLine($"{url} err={ex.Message}"); + return ""; + } + finally + { + // 閲婃斁璧勬簮 + if (reader != null) reader.Close(); + if (stream != null) stream.Close(); + if (rsp != null) rsp.Close(); + } + + } public string Post(string url, Dictionary<string, string> dic) { diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/wms/ContainerHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/wms/ContainerHelper.cs index d350e92..7fec69c 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/wms/ContainerHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/wms/ContainerHelper.cs @@ -581,7 +581,7 @@ /// </summary> /// <param name="cntr"></param> /// <returns></returns> - internal static bool BindLocCntrsXm(string loc, string cntr, string itemCode, string itemName, string BatchNo, string issueMode, int num) + internal static bool BindLocCntrsXm(string loc, string cntr, string itemCode, string itemName, string BatchNo, string issueMode, int num, string boxType) { bool result = true; List<string> list = new List<string>(cntr.Split(',')); @@ -594,7 +594,7 @@ if (db.Queryable<LocCntrRel>().Count(a => a.S_CNTR_CODE.Trim() == cntrCode) == 0) { var cir = new LocCntrRel { S_LOC_CODE = loc, S_CNTR_CODE = cntrCode }; - var con = new Container { S_CODE = cntrCode, N_DETAIL_COUNT = 1, C_FULL = "2" };//榛樿婊�涓诲姩缁戝畾鏈嶅姟鐢�+ var con = new Container { S_CODE = cntrCode, N_DETAIL_COUNT = 1, S_SPEC = boxType, C_FULL = "2" };//榛樿婊�涓诲姩缁戝畾鏈嶅姟鐢� db.Insertable<LocCntrRel>(cir).ExecuteCommand(); db.Insertable<Container>(con).ExecuteCommand(); if (!string.IsNullOrEmpty(itemCode)) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/wms/WCSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/wms/WCSHelper.cs index 5ce86b3..e9c99ed 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/wms/WCSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/wms/WCSHelper.cs @@ -124,13 +124,18 @@ internal static bool CreateTaskDj(string no, string from, string to, string taskType, int pri, string cntrInfo,string orderName, int cntrCount = 1, int startLayer = 1, int endLayer = 1) { var fromLoc = LocationHelper.GetLocation(from); - var endLoc = LocationHelper.GetLocation(to); + //鍥犱负鏈夌偣鍒版湭鐭ョ殑鎯呭喌 + string endLocAreaStr = null; + if (to!=null && to != "") + { + endLocAreaStr = LocationHelper.GetLocation(to).S_AREA_CODE; + } WCSTask TN_Task = new WCSTask() { //S_CODE = GenerateTaskNo(), S_CODE = orderName, S_START_AREA = fromLoc.S_AREA_CODE, - S_END_AREA = endLoc.S_AREA_CODE, + S_END_AREA = endLocAreaStr, S_START_LOC = from, S_END_LOC = to, S_TYPE = taskType, -- Gitblit v1.9.1