From bb0b78e7ef5317a38adc18a648e41aa8cc4711bc Mon Sep 17 00:00:00 2001 From: zhaowc <526854230@qq.com> Date: 星期四, 24 七月 2025 15:54:22 +0800 Subject: [PATCH] 程序修改 --- HTML/js/public.js | 6 Wms/WMS.BLL/BllTransServer/RcsServer.cs | 92 +++--- Wms/WMS.Entity/DataEntity/DataStockDetail.cs | 2 Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs | 362 +++++++++++++++++++-------- HTML/views/HouseWithinSetting/HopperTransport.html | 123 ++++++++ Wms/WMS.DAL/Common.cs | 6 HTML/.vscode/settings.json | 2 HTML/views/StatisticalReport/BoxInfor.html | 6 Wms/Utility/Tools/RcsHelper.cs | 31 + Wms/Wms/Properties/launchSettings.json | 4 Wms/Wms/appsettings.json | 4 Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs | 2 Wms/Model/InterFaceModel/HttpModel.cs | 19 + Wms/WMS.BLL/SysServer/PalletsServer.cs | 1 Wms/Wms/Controllers/DownApiController.cs | 79 ++++- 15 files changed, 527 insertions(+), 212 deletions(-) diff --git a/HTML/.vscode/settings.json b/HTML/.vscode/settings.json index 155422b..a0de46f 100644 --- a/HTML/.vscode/settings.json +++ b/HTML/.vscode/settings.json @@ -1,3 +1,3 @@ { - "liveServer.settings.port": 5503 + "liveServer.settings.port": 5504 } \ No newline at end of file diff --git a/HTML/js/public.js b/HTML/js/public.js index ed629a9..d299da4 100644 --- a/HTML/js/public.js +++ b/HTML/js/public.js @@ -1,9 +1,9 @@ //var IP = "http://47.104.149.73:1991";//鎺ュ彛IP // var IP = "http://172.16.71.101:8082/";//鎺ュ彛IP -//var IP = "http://localhost:13243/api"; -var IP = "http://localhost:50515/api"; //鏈湴 +//var IP = "http://192.168.10.203:8090/api"; +// var IP = "https://localhost:44323/api"; //鏈湴 //var IP = "http://172.16.105.10:8086/api"; -// var IP = "http://localhost:44318/api"; +var IP = "http://localhost:58787/api"; //var IP = "http://192.168.1.6:8017"; //var IP = "http://192.168.1.226:8086"; // var IP = "http://192.168.62.200:8888/api"; //bkl鏈嶅姟鍣� diff --git a/HTML/views/HouseWithinSetting/HopperTransport.html b/HTML/views/HouseWithinSetting/HopperTransport.html index 6c075df..34badbf 100644 --- a/HTML/views/HouseWithinSetting/HopperTransport.html +++ b/HTML/views/HouseWithinSetting/HopperTransport.html @@ -50,6 +50,7 @@ <ul class="layui-tab-title" id="tab"> <li class="layui-this">鍙枡</li> <li>鍙溅</li> + <li>杞﹂棿鍒拌溅闂�</li> </ul> <div class="layui-tab-content"> @@ -70,7 +71,7 @@ <div class="layui-form-item"> <label class="layui-form-label" style="width: 80px;">鍖哄煙</label> <div class="layui-input-block"> - <select id="AreaSelect" name="AreaSelect" lay-filter="AreaSelect" lay-search> + <select id="AreaSelect" name="AreaSelect" lay-filter="AreaSelect" > <option value=""></option> </select> @@ -80,7 +81,7 @@ <div class="layui-form-item"> <label class="layui-form-label" style="width: 80px;">鐩爣浣嶇疆</label> <div class="layui-input-block"> - <select id="LocateSelect" name="LocateSelect" lay-filter="LocateSelect" lay-search> + <select id="LocateSelect" name="LocateSelect" lay-filter="LocateSelect" > <option value=""></option> </select> </div> @@ -88,7 +89,7 @@ <div class="layui-form-item"> <label class="layui-form-label" style="width: 80px;">妗剁被鍨�</label> <div class="layui-input-block"> - <select id="PalletStatus" name="PalletStatus" lay-filter="PalletStatus" lay-search> + <select id="PalletStatus" name="PalletStatus" lay-filter="PalletStatus" > <option value=""></option> <option value="0">鍑�妗�</option> <option value="2">婊℃《</option> @@ -99,7 +100,7 @@ <div class="layui-form-item" id="StandardDiv"> <label class="layui-form-label" style="width: 80px;">瑙勬牸</label> <div class="layui-input-block"> - <select name="Standard" lay-filter="Standard" lay-search> + <select name="Standard" lay-filter="Standard" > <option value="400L">400L</option> <option value="800L">800L</option> <option value="1000L">1000L</option> @@ -109,7 +110,7 @@ <div class="layui-form-item" id="SkuSelectDiv"> <label class="layui-form-label" style="width: 80px;">鐗╂枡</label> <div class="layui-input-block"> - <select id="SkuSelect" name="SkuSelect" lay-filter="SkuSelect" lay-search> + <select id="SkuSelect" name="SkuSelect" lay-filter="SkuSelect" > <option value=""></option> </select> </div> @@ -117,7 +118,7 @@ <div class="layui-form-item" id="LotNoSelectDiv"> <label class="layui-form-label" style="width: 80px;">鎵规</label> <div class="layui-input-block"> - <select id="LotNoSelect" name="LotNoSelect" lay-filter="LotNoSelect" lay-search> + <select id="LotNoSelect" name="LotNoSelect" lay-filter="LotNoSelect" > <option value=""></option> </select> </div> @@ -141,7 +142,7 @@ <div class="layui-form-item"> <label class="layui-form-label" style="width: 80px;">鍖哄煙</label> <div class="layui-input-block"> - <select id="AreaSelect2" name="AreaSelect2" lay-filter="AreaSelect2" lay-search> + <select id="AreaSelect2" name="AreaSelect2" lay-filter="AreaSelect2" > <option value=""></option> </select> @@ -151,7 +152,7 @@ <div class="layui-form-item"> <label class="layui-form-label" style="width: 80px;">璧峰浣嶇疆</label> <div class="layui-input-block"> - <select id="LocateSelect2" name="LocateSelect2" lay-filter="LocateSelect2" lay-search> + <select id="LocateSelect2" name="LocateSelect2" lay-filter="LocateSelect2" > <option value=""></option> </select> </div> @@ -159,9 +160,9 @@ <div class="layui-form-item"> <label class="layui-form-label" style="width: 80px;">妗剁被鍨�</label> <div class="layui-input-block"> - <select id="PalletStatus2" name="PalletStatus2" lay-filter="PalletStatus2" lay-search> + <select id="PalletStatus2" name="PalletStatus2" lay-filter="PalletStatus2" > <option value=""></option> - <!-- <option value="0">鍑�妗�</option> --> + <option value="0">鍑�妗�</option> <option value="2">婊℃《</option> <option value="3">鑴忔《</option> </select> @@ -180,7 +181,7 @@ <div class="layui-form-item" id="SkuSelectDiv2"> <label class="layui-form-label" style="width: 80px;">鐗╂枡</label> <div class="layui-input-block"> - <select id="SkuSelect2" name="SkuSelect2" lay-filter="SkuSelect2" lay-search> + <select id="SkuSelect2" name="SkuSelect2" lay-filter="SkuSelect2" > <option value=""></option> </select> </div> @@ -212,6 +213,94 @@ </div> + + <div class="layui-tab-item"> + <div class="flesDiv" > + <form class="layui-form" action="" style="width: 40%;"> + + <div class="layui-form-item"> + <label class="layui-form-label" style="width: 80px;">璧峰鍖哄煙</label> + <div class="layui-input-block"> + <select id="AreaSelect3" name="AreaSelect3" lay-filter="AreaSelect3" > + <option value=""></option> + </select> + + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label" style="width: 80px;">璧峰浣嶇疆</label> + <div class="layui-input-block"> + <select id="LocateSelect3" name="LocateSelect3" lay-filter="LocateSelect3" > + <option value=""></option> + </select> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label" style="width: 80px;">鐩爣鍖哄煙</label> + <div class="layui-input-block"> + <select id="AreaSelect4" name="AreaSelect4" lay-filter="AreaSelect4" > + <option value=""></option> + </select> + + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label" style="width: 80px;">鐩爣浣嶇疆</label> + <div class="layui-input-block"> + <select id="LocateSelect4" name="LocateSelect4" lay-filter="LocateSelect4" > + <option value=""></option> + </select> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label" style="width: 80px;">妗剁被鍨�</label> + <div class="layui-input-block"> + <select id="PalletStatus2" name="PalletStatus2" lay-filter="PalletStatus2" > + <option value=""></option> + <option value="0">鍑�妗�</option> + <option value="2">婊℃《</option> + <option value="3">鑴忔《</option> + </select> + </div> + </div> + <div class="layui-form-item" id="SkuSelectDiv2"> + <label class="layui-form-label" style="width: 80px;">鐗╂枡</label> + <div class="layui-input-block"> + <select id="SkuSelect2" name="SkuSelect2" lay-filter="SkuSelect2" > + <option value=""></option> + </select> + </div> + </div> + <div class="layui-form-item" id="LotNoSelectDiv2"> + <label class="layui-form-label" style="width: 80px;">鎵规</label> + <div class="layui-input-block"> + <input type="text" id="LotNoInput" name="LotNoInput" placeholder="" autocomplete="off" + class="layui-input"> + </div> + </div> + <div class="layui-form-item" id="WeightSelectDiv2"> + <label class="layui-form-label" style="width: 80px;">閲嶉噺</label> + <div class="layui-input-block"> + <input type="text" id="WeightInput" name="WeightInput" placeholder="" autocomplete="off" + class="layui-input"> + </div> + </div> + <div class="layui-form-item" > + <div class="layui-input-block"> + <button type="submit" class="layui-btn" lay-submit + lay-filter="demo3">绔嬪嵆鎻愪氦</button> + <button type="reset" class="layui-btn layui-btn-primary">閲嶇疆</button> + </div> + </div> + + </form> + </div> + + + </div> + </div> </div> </div> @@ -237,6 +326,7 @@ var laypage = layui.laypage; var layer = layui.layer; var laydate = layui.laydate; + var a = 0; var bodyHeight = $("#body").outerHeight(); @@ -289,17 +379,26 @@ }); return false; // 闃绘榛樿 form 璺宠浆 }); + // 鍙溅鎻愪氦浜嬩欢 form.on('submit(demo2)', function (data) { var field = data.field; // 鑾峰彇琛ㄥ崟瀛楁鍊� + console.log("field.WeightInput:"+field.WeightInput); + + if(field.WeightInput.length != 0) + { + a = parseFloat(field.WeightInput); + } var param = { AreaNo: field.AreaSelect2, LocateNo : field.LocateSelect2, PlnStatus:field.PalletStatus2, SkuNo:field.SkuSelect2, LotNo:field.LotNoInput, - Weight:parseFloat(field.WeightInput) + Weight:a }; + console.log(param); + sendData(IP + "/DownApi/jiaoCheHopper", param, 'post', function(res) { if (res.code == 0) { //鎴愬姛 layer.msg(res.msg, { diff --git a/HTML/views/StatisticalReport/BoxInfor.html b/HTML/views/StatisticalReport/BoxInfor.html index fd4280b..4a15210 100644 --- a/HTML/views/StatisticalReport/BoxInfor.html +++ b/HTML/views/StatisticalReport/BoxInfor.html @@ -219,9 +219,9 @@ if(d.PalletStatus=='0'){ html = `鍑�妗禶; } else if(d.PalletStatus=='1') { - html = `棰勬贩`; + html = `娓呮礂涓璥; } else if(d.PalletStatus=='2') { - html = `鍗婃垚鍝乣; + html = `婊℃《`; }else if(d.PalletStatus=='3') { html = `鑴忔《`; } @@ -348,7 +348,7 @@ {field: 'LotText', title: '鎵规鎻忚堪', align: 'center'}, //{field: 'SupplierLot', title: '渚涜揣鎵规', align: 'center'}, {field: 'Status', title: '鍒嗛厤鐘舵��', align: 'center', templet: '#TempletStatus'}, - {field: 'Qty', title: '鏁伴噺', align: 'center'}, + {field: 'Qty', title: '閲嶉噺锛圞G锛�', align: 'center'}, {field: 'LockQty', title: '閿佸畾鏁伴噺', align: 'center',}, {field: 'FrozenQty', title: '鍐荤粨鏁伴噺', align: 'center'}, {field: 'InspectStatus', title: '璐ㄦ鐘舵��', align: 'center', templet: '#InspectStatus1'}, diff --git a/Wms/Model/InterFaceModel/HttpModel.cs b/Wms/Model/InterFaceModel/HttpModel.cs index 2cb35e1..cd50900 100644 --- a/Wms/Model/InterFaceModel/HttpModel.cs +++ b/Wms/Model/InterFaceModel/HttpModel.cs @@ -788,20 +788,31 @@ /// 鏄惁蹇呭~锛氭槸 /// </summary> public string Message { get; set; } + public Data data { get; set; } /// <summary> /// 璇锋眰缂栧彿 /// 鏄惁蹇呭~锛氭槸 /// </summary> - public string ReqCode { get; set; } + public string ErrorCode { get; set; } /// <summary> - /// 杩斿洖鐨勬暟鎹粨鏋� - /// 鏄惁蹇呭~锛氬惁 + /// 璇锋眰缂栧彿 + /// 鏄惁蹇呭~锛氭槸 /// </summary> - public string Data { get; set; } + public bool success { get; set; } + + } +public class AgvTaskBindBack +{ + public string code { get; set; } + public string message { get; set; } + public bool success { get; set; } +} + + /// <summary> /// AGV鐢宠绌烘墭鐩樺灈鍏ュ簱 /// </summary> diff --git a/Wms/Utility/Tools/RcsHelper.cs b/Wms/Utility/Tools/RcsHelper.cs index 568bfda..5242185 100644 --- a/Wms/Utility/Tools/RcsHelper.cs +++ b/Wms/Utility/Tools/RcsHelper.cs @@ -25,7 +25,24 @@ public static bool CreateTaskForAgv(TaskDetial taskDetial, string url, out string agvMsg, string priority = null) { bool result = false; - var tasktype = "F12"; + var tasktype = ""; + switch (taskDetial.Crtype) + { + case "1": //鍙《 + tasktype = "F12"; + break; + case "2": //鍙溅 + tasktype = "F12"; + break; + case "3": //娓呮礂鏈哄彨鑴忔《 + tasktype = "F20"; + break; + case "4": //娓呮礂鏈哄彇鍑�妗� + tasktype = "F21"; + break; + default: + break; + } //璺ㄦゼ灞備换鍔asktype鍊艰祴鍊尖�︹�� //tasktype = ""; @@ -50,6 +67,8 @@ AgvCreateTaskModel taskModel = new AgvCreateTaskModel(); taskModel.taskType = tasktype; taskModel.targetRoute = pahtList; + taskModel.initPriority = 100; + taskModel.robotTaskCode = taskDetial.Taskno; //AGV浠诲姟涓嬪彂鏃跺鍔爃earder:X-LR-REQUEST-ID,鍊间负闅忔満鏁� long ran = DateTime.Now.Ticks; @@ -61,7 +80,7 @@ string response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橝GV杞繍鍛戒护", "AGV", key); //瑙f瀽杩斿洖鏁版嵁 var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); - if (agvModel.Code == "0") + if (agvModel.Code == "SUCCESS") { result = true;//缁欎笅杞︿笅鍙戜换鍔℃垚鍔� @@ -102,8 +121,8 @@ var jsonData = JsonConvert.SerializeObject(carrierInfo); string response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橝GV缁戝畾杞藉叿鍛戒护", "AGV", key); //瑙f瀽杩斿洖鏁版嵁 - var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); - if (agvModel.Code == "0") + var agvModel = JsonConvert.DeserializeObject<AgvTaskBindBack>(response); + if (agvModel.code == "SUCCESS") { result = true;//缁欎笅杞︿笅鍙戜换鍔℃垚鍔� @@ -112,9 +131,9 @@ else { var logStr = $@".\log\AGV\涓嬪彂缁橝GV缁戝畾杞藉叿鍛戒护" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; - LogFile.SaveLogToFile($"涓嬪彂缁橝GV缁戝畾杞藉叿鍛戒护寮傚父锛�( {agvModel.Message} ),", logStr); + LogFile.SaveLogToFile($"涓嬪彂缁橝GV缁戝畾杞藉叿鍛戒护寮傚父锛�( {agvModel.message} ),", logStr); - agvMsg = agvModel.Message; + agvMsg = agvModel.message; } return result; diff --git a/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs b/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs index f497068..7975829 100644 --- a/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs +++ b/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs @@ -297,17 +297,19 @@ var locatListWai = locatList.Where(w => string.IsNullOrEmpty(w.AisleOne)).Select(s => s.LocatNo); //鍏堟壘涓嶉渶瑕佺Щ搴撶殑妗� - var palletModel = stockDetail.Where(w => locatListWai.Contains(w.LocatNo)).OrderBy(o => o.UpdateTime).FirstOrDefault(); + var palletModel = stockDetail.Where(w => locatListWai.Contains(w.LocatNo)).OrderByDescending(w => w.UpdateTime).FirstOrDefault(); if (palletModel == null) { //鎵鹃渶瑕佺Щ搴撶殑妗� - palletModel= stockDetail.Where(w => !locatListWai.Contains(w.LocatNo)).OrderBy(o => o.UpdateTime).FirstOrDefault(); + palletModel= stockDetail.Where(w => !locatListWai.Contains(w.LocatNo)).OrderByDescending(w => w.UpdateTime).FirstOrDefault(); if (palletModel == null) { throw new Exception("鏈壘鍒板搴旀《淇℃伅"); } resultYi = YikuTask(palletModel.PalletNo, taskNo, url,bindUrl); } + palletModel.Status = "2"; + Db.Updateable(palletModel).ExecuteCommand(); #endregion //璧峰鍌ㄤ綅鍦板潃淇℃伅 var startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.Status == "1" && w.LocatNo == palletModel.LocatNo); @@ -328,9 +330,9 @@ Receiver = "RCS", IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 - StartLocat = "",//璧峰浣嶇疆 + StartLocat = startLoction.LocatNo,//璧峰浣嶇疆 EndLocat = endLocate,//鐩爣浣嶇疆 - PalletNo = "",//鎵樼洏鐮� + PalletNo = palletModel.PalletNo,//鎵樼洏鐮� IsSend = 1,//鏄惁鍙啀娆′笅鍙� IsCancel = 1,//鏄惁鍙彇娑� IsFinish = 1,//鏄惁鍙畬鎴� @@ -359,7 +361,7 @@ //缁欎笅杞︿笅鍙戜换鍔� logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂� //涓嬪彂杞藉叿绫诲瀷 - var bind = RcsHelper.BindPalletAndSite(palletModel.PalletNo, palletModel.LocatNo, url, out string agvBindMsg); + var bind = RcsHelper.BindPalletAndSite(palletModel.PalletNo, palletModel.LocatNo, bindUrl, out string agvBindMsg); if (bind) { var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg); @@ -371,7 +373,7 @@ //logTaskEntry.IsCancel = 0; logTaskEntry.BackDate = DateTime.Now; logTaskEntry.Status = "1";//姝e湪鎵ц - Db.Insertable(logTaskEntry).ExecuteCommand(); + Db.Updateable(logTaskEntry).ExecuteCommand(); startLoction.Status = "3";//鍑哄簱涓� Db.Updateable(startLoction).ExecuteCommand(); @@ -383,14 +385,14 @@ { logTaskEntry.IsSuccess = 0; logTaskEntry.Information = agvMsg; - Db.Insertable(logTaskEntry).ExecuteCommand(); + Db.Updateable(logTaskEntry).ExecuteCommand(); } } else { logTaskEntry.IsSuccess = 0; logTaskEntry.Information = "璐ф灦涓庤揣浣嶇粦瀹氬け璐ワ紝鍘熷洜锛�"+agvBindMsg; - Db.Insertable(logTaskEntry).ExecuteCommand(); + Db.Updateable(logTaskEntry).ExecuteCommand(); } } @@ -442,11 +444,12 @@ Db.BeginTran(); //妗朵俊鎭� - var pln = Db.Queryable<SysPallets>().First(w => w.IsDel == "0" && w.PalletNo == plnNo); + var pln = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == StartLocate && w.AreaNo == areaNo); if (pln == null) { throw new Exception("鏈煡璇㈠埌妗朵俊鎭�"); } + plnNo = pln.PalletNo; //璧峰鍌ㄤ綅淇℃伅 var startLoction = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.AreaNo == areaNo && m.LocatNo == StartLocate); @@ -461,10 +464,6 @@ throw new Exception("娌℃湁鏌ヨ鍒扮墿鏂欎俊鎭�"); } skuName = sku.SkuName; - } - else if (plnStatus == "3") - { - } //鐩爣妤煎眰 var layer = startLoction.Layer; @@ -502,7 +501,7 @@ CompleteTime = DateTime.Now, PalletStatus = plnStatus, - Status = "0", + Status = "2", InspectMark = "0", BitPalletMark = "0", InspectStatus = "1", @@ -513,13 +512,15 @@ { stockDetail.PalletStatus = plnStatus; stockDetail.SkuNo = skuNo; + stockDetail.SkuName = skuName; stockDetail.LotNo = lotNo; stockDetail.Qty = weight; + stockDetail.Status = "2"; Db.Updateable(stockDetail).ExecuteCommand(); } //鍒嗛厤鍌ㄤ綅 - var endLocatInfo = GetLocatModel(house.WareHouseNo, plnStatus, skuNo, pln.Standard);//鐩爣鍌ㄤ綅 + var endLocatInfo = GetLocatModel(house.WareHouseNo, plnStatus, startLoction.WareHouseNo, skuNo, pln.Standard,lotNo);//鐩爣鍌ㄤ綅 //娌℃湁鍙敤绌哄偍浣� if (endLocatInfo == null) { @@ -575,7 +576,7 @@ //logTaskEntry.IsCancel = 0; logTaskEntry.BackDate = DateTime.Now; logTaskEntry.Status = "1";//姝e湪鎵ц - Db.Insertable(logTaskEntry).ExecuteCommand(); + Db.Updateable(logTaskEntry).ExecuteCommand(); startLoction.Status = "3";//鍑哄簱涓� Db.Updateable(startLoction).ExecuteCommand(); @@ -634,10 +635,10 @@ { throw new Exception($"浠诲姟鍙蜂负:{taskNo}鐨勪换鍔′笉瀛樺湪!"); } - if (taskInfo.Status != "1" && comeFrom != "WMS") - { - throw new Exception($"浠诲姟鍙蜂负:{taskNo}鐨勪换鍔$姸鎬佸紓甯�"); - } + //if (taskInfo.Status != "0" && comeFrom != "WMS") + //{ + // throw new Exception($"浠诲姟鍙蜂负:{taskNo}鐨勪换鍔$姸鎬佸紓甯�"); + //} #endregion //寮�鍚簨鍔� Db.BeginTran(); @@ -680,6 +681,7 @@ throw new Exception($"鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�"); } endLocatInfo.Status = "1";//鏈夌墿鍝� + endLocatInfo.UpdateTime = DateTime.Now;//鏇存柊鏃堕棿 //淇敼鐩爣鍌ㄤ綅鐘舵�� Db.Updateable(endLocatInfo).ExecuteCommand(); @@ -702,7 +704,7 @@ } else if (endAreaInfo.Type == "1")//婊℃《鍖� { - stockDetail.PalletStatus = "1"; + stockDetail.PalletStatus = "2"; stockDetail.Status = "0";//寰呭垎閰� } else if (endAreaInfo.Type == "2")//鑴忔《鍖� @@ -764,6 +766,38 @@ { throw new Exception("闈炲彨鏂欑姸鎬�"); } + switch (deviceStation) + { + case "input"://鍙剰妗� + switch (deviceID) + { + case "2001": + deviceID = "1001"; + break; + case "2002": + deviceID = "1003"; + break; + default: + throw new Exception("鍙剰妗剁偣浣嶅紓甯�"); + } + break; + case "output"://鍙溅鎷夊噣妗� + switch (deviceID) + { + case "2001": + deviceID = "1002"; + break; + case "2002": + deviceID = "1004"; + break; + default: + throw new Exception("鍙噣妗剁偣浣嶅紓甯�"); + } + break; + default: + throw new Exception("鍙枡绫诲瀷寮傚父"); + + } //閫氳繃璁惧鍙锋煡鎵惧埌鎵�灞炶澶囷紙鍖哄煙锛� var deviceInfo = Db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.DeviceCode == deviceID); if (deviceInfo == null) @@ -775,6 +809,7 @@ var startLoction = new SysStorageLocat();//璧峰鍌ㄤ綅淇℃伅 var endLoction = new SysStorageLocat();//鐩爣鍌ㄤ綅淇℃伅 var palletModel = new DataStockDetail();//鍒嗛厤妗朵俊鎭� + string type = "";//鍙枡绫诲瀷 //寮�鍚簨鍔� Db.BeginTran(); @@ -783,64 +818,117 @@ switch (deviceStation) { case "input"://鍙剰妗� - //鍙《璁惧鎵�鍦ㄥ偍浣嶄俊鎭紙鐩爣鍌ㄤ綅锛� - endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo); + if (deviceID == "1001" || deviceID == "1003") + { + type = "3"; + //鍙《璁惧鎵�鍦ㄥ偍浣嶄俊鎭紙鐩爣鍌ㄤ綅锛� + endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo); - // 鎵�鏈夊緟鍒嗛厤鐨勮剰妗� - var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.Status == "0" && w.PalletStatus == "3"); - - //浼樺厛鏌ユ壘鑴忔《缂撳瓨杞﹂棿 - palletModel = stockDetail.Where(w => w.AreaNo == "C43").OrderByDescending(o => o.UpdateTime).First(); - if (palletModel == null)//鑴忔《缂撳瓨杞﹂棿娌℃湁鑴忔《锛屽啀浠庝笁妤间腑闂寸珯鑴忔《鍖烘煡鎵� - { - palletModel = stockDetail.Where(w =>w.WareHouseNo=="M16" && w.AreaNo == "C26").OrderByDescending(o => o.UpdateTime).First(); + // 鎵�鏈夊緟鍒嗛厤鐨勮剰妗� + var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.Status == "0" && w.PalletStatus == "3").OrderByDescending(w => w.UpdateTime).ToList(); + + //鍒ゆ柇褰撳墠娓呮礂鏈鸿澶囦笂鏈夊嚑涓剰妗讹紝status锛�2 姝e湪娓呮礂鐨勮剰妗讹紙鐘舵�佽Е鍙戝彉鏇翠负AGV鍙2涓剰妗舵椂瑙﹀彂锛� + int ztQty = Db.Queryable<DataStockDetail>().Count(w => w.IsDel == "0" && w.Status == "2" && w.LocatNo == deviceID); + if (ztQty == 1) + { + throw new Exception((deviceID == "1001"?"1":"2") + "鍙锋竻娲楁満鑴忔《宸叉弧锛岄噸澶嶅彨鏂欙紒"); + } + + //鍏堟煡鐪嬪彨鏂欒澶囦綅鏄惁鏈夎剰妗� + if (endLoction.Status == "1") + { + //鏈夎剰妗剁殑璇濓紝灏嗘洿鏀规妗剁姸鎬�(浠h〃姝ゆ《姝e湪娓呮礂涓�) + var qxStock = Db.Queryable<DataStockDetail>().Where(w => w.LocatNo == endLoction.LocatNo).First(); + qxStock.Status = "2"; + qxStock.UpdateTime = DateTime.Now;//娓呮礂鏃堕棿 + Db.Updateable(qxStock).ExecuteCommand(); + //鏇存敼璁惧鍌ㄤ綅鐘舵�佷负绌哄偍浣� + endLoction.Status = "0"; + Db.Updateable(endLoction).ExecuteCommand(); + } + //浼樺厛鏌ユ壘鑴忔《缂撳瓨杞﹂棿 + palletModel = stockDetail.Where(w => w.AreaNo == "C54").FirstOrDefault(); + if (palletModel == null)//鑴忔《缂撳瓨杞﹂棿娌℃湁鑴忔《锛屽啀浠庝笁妤间腑闂寸珯鑴忔《鍖烘煡鎵� + { + palletModel = stockDetail.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C26").FirstOrDefault(); + } + if (palletModel == null)//涓夋ゼ涓棿绔欒剰妗跺尯娌℃湁鑴忔《锛屽啀浠庡洓妤间腑闂寸珯鑴忔《鍖烘煡鎵� + { + palletModel = stockDetail.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C03").FirstOrDefault(); + } + if (palletModel == null) + { + throw new Exception("鏃犺剰妗跺彲鍒嗛厤"); + } + //璧峰鍌ㄤ綅鍦板潃淇℃伅 + startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.Status == "1" && w.LocatNo == palletModel.LocatNo); + if (startLoction == null) + { + throw new Exception($"璧峰鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦紝妗跺彿锛歿palletModel.LocatNo}"); + } } - if (palletModel == null)//涓夋ゼ涓棿绔欒剰妗跺尯娌℃湁鑴忔《锛屽啀浠庡洓妤间腑闂寸珯鑴忔《鍖烘煡鎵� + else { - palletModel = stockDetail.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C03").OrderByDescending(o => o.UpdateTime).First(); - } - if (palletModel == null) - { - throw new Exception("鏃犺剰妗跺彲鍒嗛厤"); - } - //璧峰鍌ㄤ綅鍦板潃淇℃伅 - startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.Status == "1" && w.LocatNo == palletModel.LocatNo); - if (startLoction == null) - { - throw new Exception($"璧峰鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦紝妗跺彿锛歿palletModel.LocatNo}"); + throw new Exception("璧峰鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�"); } break; case "output"://鍑�妗剁敵璇峰偍浣� - //鍙《璁惧鎵�鍦ㄥ偍浣嶄俊鎭紙璧峰鍌ㄤ綅锛� - startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo); - //妗朵俊鎭� - palletModel = Db.Queryable<DataStockDetail>().Where(w => w.WareHouseNo==houseNo && w.AreaNo==deviceInfo.AreaNo && w.LocatNo==startLoction.LocatNo).First(); - if (palletModel == null) + if (deviceID == "1002" || deviceID == "1004") { - throw new Exception("鏈煡璇㈠埌鍑�妗朵俊鎭�"); + type = "4"; + //鍙《璁惧鎵�鍦ㄥ偍浣嶄俊鎭紙璧峰鍌ㄤ綅锛� + startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo); + //鑾峰彇娓呮礂鏈轰笂绗竴娆″彨鐨勮剰妗� + string locate = deviceID == "1002"?"1001":"1003"; + palletModel = Db.Queryable<DataStockDetail>().Where(w => w.LocatNo == locate && (w.Status == "2" || w.Status == "0")).OrderBy(o => o.CreateTime).First(); + if (palletModel == null) + { + throw new Exception("鏈壘鍒板簱瀛樹腑姝e湪娓呮礂鐨勮剰妗�"); + } + if (!string.IsNullOrEmpty(palletModel.LocatNo)) + { + palletModel.LocatNo = startLoction.LocatNo; + palletModel.PalletStatus = "0"; + palletModel.Status = "0"; + Db.Updateable(palletModel).ExecuteCommand(); + } + //鍒嗛厤鍌ㄤ綅 + //鏌ユ壘鎵�鏈夊噣妗跺偍浣� + var jtLocate = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0") + .OrderBy(w => w.Row).OrderByDescending(w => w.Column).ToList(); + if (jtLocate.Count == 0) + { + throw new Exception("娌℃湁绌轰綑鐨勫噣妗跺偍浣�"); + } + //浼樺厛鍒嗛厤鍥涙ゼ涓棿绔欏噣妗跺尯 + //endLoction = jtLocate.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C01") + // .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault(); + //if (endLoction == null)//鍥涙ゼ涓棿绔欏噣妗跺尯娌℃湁绌哄偍浣嶏紝鍐嶄粠涓夋ゼ涓棿绔欏噣妗跺尯鏌ユ壘 + //{ + endLoction = jtLocate.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C24") + .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault(); + //} + if (endLoction == null)//涓夋ゼ涓棿绔欏噣妗跺尯娌℃湁绌哄偍浣嶏紝鍐嶄粠涓夋ゼ娓呮礂闂寸紦瀛樺尯鏌ユ壘 PS锛氬皬杞︾幇鍦ㄨ繕涓嶆敮鎸佹竻娲楁満鐩存帴閫佸線4妤煎噣妗跺尯 + { + endLoction = jtLocate.Where(w => w.WareHouseNo == "M44" && w.AreaNo == "C55") + .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault(); + } + if (endLoction == null) + { + throw new Exception("鏈煡璇㈠埌鍚堥�傚偍浣�"); + } + //string startlono = startLoction.LocatNo == "1001" ? "1002" : "1004";//娓呮礂瀹屾垚鐐逛綅 + //startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == startlono); + //if (startLoction == null) + //{ + // throw new Exception("鏈壘鍒版竻娲楄捣濮嬬偣浣�"); + //} } - //鍒嗛厤鍌ㄤ綅 - //浼樺厛鍒嗛厤鍥涙ゼ涓棿绔欏噣妗跺尯 - endLoction= Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" - && w.WareHouseNo == "M01" && w.AreaNo == "C01") - .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First(); - if (endLoction == null)//鍥涙ゼ涓棿绔欏噣妗跺尯娌℃湁绌哄偍浣嶏紝鍐嶄粠涓夋ゼ涓棿绔欏噣妗跺尯鏌ユ壘 + else { - endLoction = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" - && w.WareHouseNo == "M16" && w.AreaNo == "C24") - .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First(); - } - if (endLoction == null)//涓夋ゼ涓棿绔欏噣妗跺尯娌℃湁绌哄偍浣嶏紝鍐嶄粠涓夋ゼ娓呮礂闂寸紦瀛樺尯鏌ユ壘 - { - endLoction = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" - && w.WareHouseNo == "M44" && w.AreaNo == "C55") - .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First(); - } - if (endLoction == null) - { - throw new Exception("鏈煡璇㈠埌鍚堥�傚偍浣�"); + throw new Exception("璧峰鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�"); } break; @@ -848,6 +936,7 @@ throw new Exception("鍙枡鐐逛綅寮傚父"); } + var taskNo = new Common().GetMaxNo("TK"); //娣诲姞浠诲姟 var logTaskEntry = new LogTask @@ -857,9 +946,9 @@ Receiver = "RCS", IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 - StartLocat = "",//璧峰浣嶇疆 + StartLocat = startLoction.LocatNo,//璧峰浣嶇疆 EndLocat = endLoction.LocatNo,//鐩爣浣嶇疆 - PalletNo = "",//鎵樼洏鐮� + PalletNo = palletModel.PalletNo,//鎵樼洏鐮� IsSend = 1,//鏄惁鍙啀娆′笅鍙� IsCancel = 1,//鏄惁鍙彇娑� IsFinish = 1,//鏄惁鍙畬鎴� @@ -878,7 +967,7 @@ Startport = palletModel.LocatNo,//璧峰浣嶇疆 Endport = endLoction.LocatNo,//鐩爣浣嶇疆 Pallno = palletModel.PalletNo,//妗跺彿 - Crtype = "1",//鍙《 + Crtype = type,//鍙《 }; string agvMsg = string.Empty; @@ -897,7 +986,7 @@ //logTaskEntry.IsCancel = 0; logTaskEntry.BackDate = DateTime.Now; logTaskEntry.Status = "1";//姝e湪鎵ц - Db.Insertable(logTaskEntry).ExecuteCommand(); + Db.Updateable(logTaskEntry).ExecuteCommand(); startLoction.Status = "3";//鍑哄簱涓� Db.Updateable(startLoction).ExecuteCommand(); @@ -909,14 +998,14 @@ { logTaskEntry.IsSuccess = 0; logTaskEntry.Information = agvMsg; - Db.Insertable(logTaskEntry).ExecuteCommand(); + Db.Updateable(logTaskEntry).ExecuteCommand(); } } else { logTaskEntry.IsSuccess = 0; logTaskEntry.Information = agvBindMsg; - Db.Insertable(logTaskEntry).ExecuteCommand(); + Db.Updateable(logTaskEntry).ExecuteCommand(); } //鎻愪氦浜嬪姟 @@ -934,6 +1023,7 @@ { try { + bool t = false; //鍒嗛厤妗剁殑搴撳瓨淇℃伅 var palletInfo = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo); if (palletInfo == null) @@ -1022,7 +1112,7 @@ string agvMsg = string.Empty; //缁欎笅杞︿笅鍙戜换鍔� logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂� - //涓嬪彂杞藉叿涓庤揣浣嶇粦瀹� + //涓嬪彂杞藉叿涓庤揣浣嶇粦瀹� var bind = RcsHelper.BindPalletAndSite(palletInfoYi.LocatNo, palletInfoYi.PalletNo, bindUrl, out string agvBindMsg); if (bind) { @@ -1062,10 +1152,15 @@ throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿palletInfoYi.PalletNo}"); } - + t = true; + + } + else + { + return t; } } - return true; + return t; } catch (Exception e) { @@ -1086,7 +1181,7 @@ Db.BeginTran(); //鏌ユ壘浠诲姟淇℃伅 - var logTaskInfo = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.TaskNo == taskNo); + var logTaskInfo = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "0" && w.TaskNo == taskNo); if (logTaskInfo == null) { throw new Exception("鏈煡璇㈠埌璇ヤ换鍔�"); @@ -1173,6 +1268,7 @@ } } + Db.CommitTran(); } catch (Exception e) { @@ -1220,7 +1316,7 @@ continue; } //鍒嗛厤鍌ㄤ綅 - var endLocatInfo = GetLocatModel(itemHouseNo,detailInfo.PalletStatus,detailInfo.SkuNo,detailInfo.Standard);//鐩爣鍌ㄤ綅 + var endLocatInfo = GetLocatModel(itemHouseNo,detailInfo.PalletStatus,"",detailInfo.SkuNo,detailInfo.Standard,detailInfo.LotNo);//鐩爣鍌ㄤ綅 //娌℃湁鍙敤绌哄偍浣� if (endLocatInfo == null) { @@ -1260,7 +1356,7 @@ Crtype = "2"//鍙《 }; string agvMsg = string.Empty; - //缁欎笅杞︿笅鍙戜换鍔� + //缁欎笅杞︿笅鍙戜换鍔� s logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂� //涓嬪彂杞藉叿涓庤揣浣嶇粦瀹� var bind = RcsHelper.BindPalletAndSite(detailInfo.PalletNo, detailInfo.LocatNo, bindUrl, out string agvBindMsg); @@ -1325,7 +1421,7 @@ /// <param name="standard">妗惰鏍�</param> /// <returns></returns> /// <exception cref="Exception"></exception> - private SysStorageLocat GetLocatModel(string houseNo, string palletStatus,string skuNo="",string standard="") + private SysStorageLocat GetLocatModel(string houseNo, string palletStatus,string zonghong,string skuNo="",string standard="",string lotNo = "") { try { @@ -1342,44 +1438,88 @@ .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First(); break; case "2"://婊℃《 - //鏌ュ埌鍒版弧妗跺尯鍩熺紪鍙� - areaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.Type == "1").Select(s => s.AreaNo).First(); - //鍒嗛厤鍌ㄤ綅 - //鍏堟煡鍒板悓鐗╂枡鐨勭粍 - string sql = $@"select Row from SysStorageLocat where WareHouseNo='{houseNo}' and AreaNo='{areaNo}' and LocatNo in( - select LocatNo from DataStockDetail where SkuNo='{skuNo}' and Standard='{standard}' and WareHouseNo='{houseNo}' and AreaNo='{areaNo}' - ) group by Row"; - - List<int> RowList = Db.Ado.SqlQuery<int>(sql).ToList(); - foreach (var rowItem in RowList) + //鎬绘贩鍒嗛厤鍌ㄤ綅 锛堜粨搴撶紪鐮丮12,M13锛夛紝鍒嗛厤閫昏緫锛氫紭鍏堝垎閰嶅悓鐗╂枡鐨勭粍锛屽啀鍒嗛厤鍒�3妤间腑闂寸珯锛屾渶鍚庡垎閰嶅埌4妤间腑闂寸珯 + if (zonghong == "M12" || zonghong == "M13") { - endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" - && w.WareHouseNo == houseNo && w.AreaNo == areaNo && w.Row == rowItem) - .OrderByDescending(o => o.Column).First(); + //鍏堟煡鍒板悓鐗╂枡鐨勭粍 + string sql = $@"select Row from SysStorageLocat where LocatNo in( + select LocatNo from DataStockDetail where SkuNo='{skuNo}' and LotNo = '{lotNo}' and Standard='{standard}' + and AreaNo in ('C02','C25') + ) group by Row"; - if (endLocatInfo != null) + List<int> RowList = Db.Ado.SqlQuery<int>(sql).ToList(); + foreach (var rowItem in RowList) { - break; + endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" && w.Row == rowItem) + .OrderByDescending(o => o.Column).First(); + if (endLocatInfo.LocatNo != null) + { + break; + } + } + //娌℃湁鎵惧埌鐩稿悓鐗╂枡鍚岀粍鐨勭┖鍌ㄤ綅 + if (endLocatInfo.LocatNo == null) + { + + endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" + && (w.AreaNo == "C02" || w.AreaNo == "C25")) + .OrderBy(o=>o.Layer).OrderByDescending(o => o.Column).OrderBy(o => o.Row).First(); + } + + } + else {//鍏朵粬鍖哄煙 + //鏌ュ埌鍒版弧妗跺尯鍩熺紪鍙� + areaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.Type == "1").Select(s => s.AreaNo).First(); + //鍒嗛厤鍌ㄤ綅 + //鍏堟煡鍒板悓鐗╂枡鐨勭粍 + string sql = $@"select Row from SysStorageLocat where WareHouseNo='{houseNo}' and AreaNo='{areaNo}' and Status = '0' and LocatNo in( + select LocatNo from DataStockDetail where SkuNo='{skuNo}' and LotNo = '{lotNo}' and Standard='{standard}' and WareHouseNo='{houseNo}' and AreaNo='{areaNo}' + ) group by Row"; + + List<int> RowList = Db.Ado.SqlQuery<int>(sql).ToList(); + foreach (var rowItem in RowList) + { + endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" + && w.WareHouseNo == houseNo && w.AreaNo == areaNo && w.Row == rowItem) + .OrderByDescending(o => o.Column).First(); + + if (endLocatInfo.LocatNo != null) + { + break; + } + } + //娌℃湁鎵惧埌鐩稿悓鐗╂枡鍚岀粍鐨勭┖鍌ㄤ綅 + if (endLocatInfo.LocatNo == null) + { + + endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" + && w.WareHouseNo == houseNo && w.AreaNo == areaNo) + .OrderByDescending(o => o.Column).OrderBy(o => o.Row).First(); } } - //娌℃湁鎵惧埌鐩稿悓鐗╂枡鍚岀粍鐨勭┖鍌ㄤ綅 - if (endLocatInfo == null) - { - endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" - && w.WareHouseNo == houseNo && w.AreaNo == areaNo) - .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First(); - } - break; case "3"://鑴忔《 - //鏌ュ埌鍒拌剰妗跺尯鍩熺紪鍙� - areaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.Type == "2").Select(s => s.AreaNo).First(); + //鏌ュ埌鍒拌剰妗跺尯鍩熺紪鍙凤紝瀛樻斁椤哄簭锛孋54 鏂欐枟娓呮礂鏆傚瓨闂达紝C26 3妤间腑闂寸珯鑴忔《鍖猴紝C03 4妤间腑闂寸珯鑴忔《鍖� + var ztAreaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Type == "2").Select(w => w.AreaNo).ToList(); + //鏌ユ壘鎵�鏈夊彲鐢ㄨ剰妗跺簱浣� + var ztLocat = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" && ztAreaNo.Contains(w.AreaNo)) + .OrderBy(o => o.Row).OrderByDescending(o => o.Column).ToList(); + //areaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.Type == "2").Select(s => s.AreaNo).First(); //鍒嗛厤鍌ㄤ綅 - endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" - && w.WareHouseNo == houseNo && w.AreaNo == areaNo) - .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First(); - - + //鏂欐枟娓呮礂鏆傚瓨闂� + endLocatInfo = ztLocat.Where(w => w.AreaNo == "C54").FirstOrDefault(); + if (string.IsNullOrEmpty(endLocatInfo.LocatNo)) + { + endLocatInfo = ztLocat.Where(w => w.AreaNo == "C26").FirstOrDefault(); + if (string.IsNullOrEmpty(endLocatInfo.LocatNo)) + { + endLocatInfo = ztLocat.Where(w => w.AreaNo == "C03").FirstOrDefault(); + if (string.IsNullOrEmpty(endLocatInfo.LocatNo)) + { + throw new Exception("鏃犲彲鐢ㄨ剰妗跺簱浣�"); + } + } + } break; } return endLocatInfo; diff --git a/Wms/WMS.BLL/BllTransServer/RcsServer.cs b/Wms/WMS.BLL/BllTransServer/RcsServer.cs index 0417f22..3db34c0 100644 --- a/Wms/WMS.BLL/BllTransServer/RcsServer.cs +++ b/Wms/WMS.BLL/BllTransServer/RcsServer.cs @@ -7,6 +7,8 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Numerics; +using System.Reflection; using System.Security.Policy; using System.Text; using System.Threading.Tasks; @@ -941,17 +943,12 @@ stockDetail.PalletStatus = "0"; stockDetail.Status = "0";//寰呭垎閰� } - else if (endAreaInfo.Type == "1")//棰勬贩鍖� - { - stockDetail.PalletStatus = "1"; - stockDetail.Status = "0";//寰呭垎閰� - } - else if (endAreaInfo.Type == "2")//鍗婃垚鍝佸尯 + else if (endAreaInfo.Type == "1")//婊℃《 { stockDetail.PalletStatus = "2"; stockDetail.Status = "0";//寰呭垎閰� } - else if (endAreaInfo.Type == "3")//鑴忔《鍖� + else if (endAreaInfo.Type == "2")//鑴忔《鍖� { stockDetail.PalletStatus = "3"; stockDetail.LotNo = "";//鎵规 @@ -1097,18 +1094,16 @@ } locatEnd.Status = "0"; //绌哄偍浣� Db.Updateable(locatEnd).ExecuteCommand(); - - if (task.Type == "1")//鍑哄簱浠诲姟 + + //淇敼搴撳瓨鏄庣粏 + var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo); + if (stockDetail == null) { - //淇敼搴撳瓨鏄庣粏 - var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo && w.Status == "2"); - if (stockDetail == null) - { - throw new Exception("鏈煡璇㈠埌璇ユ《搴撳瓨淇℃伅,璇锋鏌�!"); - } - stockDetail.Status = "0";//寰呭垎閰� - Db.Updateable(stockDetail).ExecuteCommand(); + throw new Exception("鏈煡璇㈠埌璇ユ《搴撳瓨淇℃伅,璇锋鏌�!"); } + stockDetail.Status = "0";//寰呭垎閰� + Db.Updateable(stockDetail).ExecuteCommand(); + //娣诲姞鎿嶄綔鏃ュ織璁板綍 var k = new OperationCrServer().AddLogOperationCr("搴撳唴浣滀笟", "搴撳唴鏃ュ織", taskNo, "鍙栨秷", $"鐐瑰嚮鍙栨秷鎸夐挳銆佸彇娑堜簡浠诲姟鍙蜂负锛歿taskNo}鐨勪换鍔�", userId); Db.CommitTran(); @@ -1125,7 +1120,7 @@ /// <param name="taskNo"></param> /// <param name="userId"></param> /// <exception cref="Exception"></exception> - public void DownTask(string taskNo, int userId,string url) + public void DownTask(string taskNo, int userId,string url,string bindUrl) { try { @@ -1142,7 +1137,7 @@ throw new Exception("鍙湁绛夊緟鎵ц鐨勪换鍔℃墠鍙墜鍔ㄤ笅鍙�"); } //鏌ユ壘璇ユ《鏈夋病鏈夋鍦ㄦ墽琛岀殑浠诲姟 - var tasking = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.PalletNo == logTaskEntry.PalletNo); + var tasking = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.PalletNo == logTaskEntry.PalletNo); if (tasking != null) { throw new Exception($"璇ユ《鏈夋鍦ㄦ墽琛岀殑浠诲姟"); @@ -1153,20 +1148,20 @@ { throw new Exception($"鏈煡璇㈠埌璧峰鍌ㄤ綅淇℃伅"); } - if (startLocatInfo.Status != "1") - { - throw new Exception($"璧峰鍌ㄤ綅鐘舵�佸紓甯�"); - } + //if (startLocatInfo.Status != "1") + //{ + // throw new Exception($"璧峰鍌ㄤ綅鐘舵�佸紓甯�"); + //} //鐩爣鍌ㄤ綅淇℃伅 var endLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == logTaskEntry.EndLocat); if (endLocatInfo == null) { throw new Exception($"鏈煡璇㈠埌鐩爣鍌ㄤ綅淇℃伅"); } - if (endLocatInfo.Status != "0") - { - throw new Exception($"鐩爣鍌ㄤ綅鐘舵�佸紓甯�"); - } + //if (endLocatInfo.Status != "0") + //{ + // throw new Exception($"鐩爣鍌ㄤ綅鐘舵�佸紓甯�"); + //} //缁勭粐缁欏皬杞︿笅鍙戜换鍔′俊鎭� var task = new TaskDetial { @@ -1179,30 +1174,33 @@ string agvMsg = string.Empty; //缁欎笅杞︿笅鍙戜换鍔� logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂� - var agvResult = CreateTaskForAgv(task, url, out agvMsg); - if (agvResult)//鎴愬姛 + //鍏堢粰璐т綅缁戝畾杞藉叿 + var bind = RcsHelper.BindPalletAndSite(logTaskEntry.PalletNo, logTaskEntry.StartLocat, bindUrl, out string agvBindMsg); + if (bind) { - //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� - logTaskEntry.IsSuccess = 1; - logTaskEntry.IsSend = 0; - logTaskEntry.IsCancel = 0; - logTaskEntry.BackDate = DateTime.Now; - logTaskEntry.Status = "1";//姝e湪鎵ц - Db.Insertable(logTaskEntry).ExecuteCommand(); + var agvResult = CreateTaskForAgv(task, url, out agvMsg); + if (agvResult)//鎴愬姛 + { + //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� + logTaskEntry.IsSuccess = 1; + logTaskEntry.IsSend = 1; + logTaskEntry.IsCancel = 1; + logTaskEntry.BackDate = DateTime.Now; + Db.Updateable(logTaskEntry).ExecuteCommand(); - startLocatInfo.Status = "3";//鍑哄簱涓� - Db.Updateable(startLocatInfo).ExecuteCommand(); + startLocatInfo.Status = "3";//鍑哄簱涓� + Db.Updateable(startLocatInfo).ExecuteCommand(); - endLocatInfo.Status = "2";//鍏ュ簱涓� - Db.Updateable(endLocatInfo).ExecuteCommand(); + endLocatInfo.Status = "2";//鍏ュ簱涓� + Db.Updateable(endLocatInfo).ExecuteCommand(); + } + else//澶辫触 + { + logTaskEntry.IsSuccess = 0; + logTaskEntry.Information = agvMsg; + Db.Updateable(logTaskEntry).ExecuteCommand(); + } } - else//澶辫触 - { - logTaskEntry.IsSuccess = 0; - logTaskEntry.Information = agvMsg; - Db.Insertable(logTaskEntry).ExecuteCommand(); - } - //娣诲姞鎿嶄綔鏃ュ織璁板綍 var k = new OperationCrServer().AddLogOperationCr("搴撳唴浣滀笟", "搴撳唴鏃ュ織", taskNo, "涓嬪彂", $"鐐瑰嚮涓嬪彂鎸夐挳銆佷换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId); Db.CommitTran(); diff --git a/Wms/WMS.BLL/SysServer/PalletsServer.cs b/Wms/WMS.BLL/SysServer/PalletsServer.cs index dc5f08f..ad876d7 100644 --- a/Wms/WMS.BLL/SysServer/PalletsServer.cs +++ b/Wms/WMS.BLL/SysServer/PalletsServer.cs @@ -254,6 +254,7 @@ //鏇存柊鍌ㄤ綅鐘舵�� locatModel.Status = "1";//鏈夌墿鍝� + locatModel.UpdateTime = DateTime.Now; db.Updateable(locatModel).ExecuteCommand(); //涓嬪彂AGV缁戝畾杞藉叿鎺ュ彛 diff --git a/Wms/WMS.DAL/Common.cs b/Wms/WMS.DAL/Common.cs index 44f6d0c..30c2830 100644 --- a/Wms/WMS.DAL/Common.cs +++ b/Wms/WMS.DAL/Common.cs @@ -232,9 +232,9 @@ var list = DataContext.Db.Queryable<BllStockCheck>().Where(m => m.CRNo.StartsWith("CR")).ToList(); orderNo = list.Select(a => a.CRNo).Max(); } - else if (codeFlag == InOutFlag.TN.ToString())//浠诲姟 + else if (codeFlag == InOutFlag.TK.ToString())//浠诲姟 { - var list = DataContext.Db.Queryable<LogTask>().Where(m => m.TaskNo.StartsWith("TN")).ToList(); + var list = DataContext.Db.Queryable<LogTask>().Where(m => m.TaskNo.StartsWith("TK")).ToList(); orderNo = list.Max(m=>m.TaskNo); } else if (codeFlag == InOutFlag.EX.ToString())//寮傚父 @@ -478,7 +478,7 @@ /// 浠诲姟 /// </summary> [Description("浠诲姟")] - TN, + TK, /// <summary> /// 寮傚父鍙� diff --git a/Wms/WMS.Entity/DataEntity/DataStockDetail.cs b/Wms/WMS.Entity/DataEntity/DataStockDetail.cs index 731b449..a118b8d 100644 --- a/Wms/WMS.Entity/DataEntity/DataStockDetail.cs +++ b/Wms/WMS.Entity/DataEntity/DataStockDetail.cs @@ -209,7 +209,7 @@ /// <summary> /// 鎵樼洏鐘舵�� - /// Default:0锛氬噣妗� 1锛氶娣� 2锛氬崐鎴愬搧 3锛氳剰妗� + /// Default:0锛氬噣妗� 1锛氭竻娲椾腑 2锛氭弧妗� 3锛氳剰妗� /// </summary> public string PalletStatus { get; set; } diff --git a/Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs b/Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs index 66235fe..1557420 100644 --- a/Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs +++ b/Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs @@ -57,6 +57,6 @@ /// <param name="taskNo"></param> /// <param name="userId"></param> /// <exception cref="Exception"></exception> - void DownTask(string taskNo, int userId, string url); + void DownTask(string taskNo, int userId, string url,string bindurl); } } diff --git a/Wms/Wms/Controllers/DownApiController.cs b/Wms/Wms/Controllers/DownApiController.cs index 5b12903..11c49eb 100644 --- a/Wms/Wms/Controllers/DownApiController.cs +++ b/Wms/Wms/Controllers/DownApiController.cs @@ -912,9 +912,10 @@ //鍏蜂綋澶勭悊鏂规硶 _hopper.OutBinAgv(model.robotTaskCode, _config.AgvHost + _config.GenAgvSchedulingTask,_config.AgvHost+_config.AGVBindPallets); - resultModel.code = "0"; - resultModel.message = "鎴愬姛"; - resultModel.da.robotTaskCode = model.robotTaskCode; + + Data data = new Data(); + data.robotTaskCode = model.robotTaskCode; + resultModel = new AgvResultModel2 { code = "0", message = "鎴愬姛", da =data }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV浠诲姟鎵ц閫氱煡-璧板嚭鍌ㄤ綅-杩斿洖鎶ユ枃锛�( {jsonData2} ),", logStr); return Ok(resultModel); @@ -923,10 +924,10 @@ { LogFile.SaveLogToFile($"AGV浠诲姟鎵ц閫氱煡-璧板嚭鍌ㄤ綅-寮傚父锛�( {ex.Message} ),", logStr); - - resultModel.code = "1"; - resultModel.message = ex.Message; - resultModel.da.robotTaskCode = model.robotTaskCode; + Data data = new Data(); + data.robotTaskCode = model.robotTaskCode; + resultModel = new AgvResultModel2 { code = "1", message = ex.Message, da = data }; + var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV浠诲姟鎵ц閫氱煡-璧板嚭鍌ㄤ綅-杩斿洖鎶ユ枃锛�( {jsonData2} ),", logStr); return Ok(resultModel); @@ -957,9 +958,9 @@ //鍏蜂綋澶勭悊鏂规硶 _hopper.RCSFinishTask(model.robotTaskCode, "1", "AGV"); - resultModel.code = "0"; - resultModel.message = "鎴愬姛"; - resultModel.da.robotTaskCode = model.robotTaskCode; + Data data = new Data(); + data.robotTaskCode = model.robotTaskCode; + resultModel = new AgvResultModel2 { code = "0", message = "鎴愬姛", da = data }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV浠诲姟鎵ц閫氱煡-浠诲姟缁撴潫-杩斿洖鎶ユ枃锛�( {jsonData2} ),", logStr); @@ -969,9 +970,9 @@ { LogFile.SaveLogToFile($"AGV浠诲姟鎵ц閫氱煡-浠诲姟缁撴潫-寮傚父锛�( {ex.Message} ),", logStr); - resultModel.code = "1"; - resultModel.message = ex.Message; - resultModel.da.robotTaskCode = model.robotTaskCode; + Data data = new Data(); + data.robotTaskCode = model.robotTaskCode; + resultModel = new AgvResultModel2 { code = "1", message = ex.Message, da = data }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV浠诲姟鎵ц閫氱煡-浠诲姟缁撴潫-杩斿洖鎶ユ枃锛�( {jsonData2} ),", logStr); return Ok(resultModel); @@ -1015,7 +1016,51 @@ LogFile.SaveLogToFile($"AGV浠诲姟鎵ц閫氱煡-浠诲姟鍗曞彇娑�-杩斿洖鎶ユ枃锛�( {jsonData2} ),", logStr); return Ok(resultModel); } - } + } + + /// <summary> + /// 璧板嚭鍌ㄤ綅 + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + [HttpPost] + public IActionResult AGVCallback(AgvTaskDto model) + { + //璁板綍log + var logStr = $@".\log\AGV\浠诲姟鎵ц閫氱煡" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; + AgvResultModel2 resultModel = null;//杩斿洖淇℃伅 + try + { + var extraValue = new ExtraModel(); + extraValue = model.extra; + switch (extraValue.values.method) + { + case "outbin": + var a = outbin(model); + break; + case "end": + var b = end(model); + break; + default: + break; + } + Data data = new Data(); + data.robotTaskCode = model.robotTaskCode; + resultModel = new AgvResultModel2 { code = "0", message = "鎴愬姛", da = data }; + var jsonData2 = JsonConvert.SerializeObject(resultModel); + LogFile.SaveLogToFile($"AGV浠诲姟鎵ц閫氱煡-杩斿洖鎶ユ枃锛�( {jsonData2} ),", logStr); + return Ok(resultModel); + } + catch (Exception ex) + { + Data data = new Data(); + data.robotTaskCode = model.robotTaskCode; + resultModel = new AgvResultModel2 { code = "1", message = ex.Message, da = data }; + var jsonData2 = JsonConvert.SerializeObject(resultModel); + LogFile.SaveLogToFile($"AGV浠诲姟鎵ц閫氱煡-杩斿洖鎶ユ枃锛�( {jsonData2} ),", logStr); + return Ok(resultModel); + } + } #endregion @@ -1072,7 +1117,7 @@ { return Ok(new { code = 1, msg = "鏈幏鍙栧埌褰撳墠鎿嶄綔浜轰俊鎭�" }); } - _rcsserver.DownTask(model.taskNo, int.Parse(userId), _config.AgvHost + _config.GenAgvSchedulingTask); + _rcsserver.DownTask(model.taskNo, int.Parse(userId), _config.AgvHost + _config.GenAgvSchedulingTask,_config.AgvHost + _config.AGVBindPallets); return Ok(new { code = 0, msg = "閲嶆柊涓嬪彂宸插畬鎴�", data = "" }); } @@ -1106,7 +1151,7 @@ //鍏蜂綋澶勭悊鏂规硶 _rcsserver.RCSFinishTask(model.taskNo, "1", "WMS"); - return Ok(new { code = 0, msg = "閲嶆柊涓嬪彂宸插畬鎴�", data = "" }); + return Ok(new { code = 0, msg = "浠诲姟宸叉墜鍔ㄥ畬鎴�", data = "" }); } catch (Exception e) { @@ -1373,6 +1418,8 @@ return Ok(resultModel); } } + + #endregion } diff --git a/Wms/Wms/Properties/launchSettings.json b/Wms/Wms/Properties/launchSettings.json index 93e8fe8..8ec21eb 100644 --- a/Wms/Wms/Properties/launchSettings.json +++ b/Wms/Wms/Properties/launchSettings.json @@ -21,8 +21,8 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://192.168.10.201", - "sslPort": 44363 + "applicationUrl": "http://localhost:58787/", + "sslPort": 44323 } } } \ No newline at end of file diff --git a/Wms/Wms/appsettings.json b/Wms/Wms/appsettings.json index 37d4dc2..8324399 100644 --- a/Wms/Wms/appsettings.json +++ b/Wms/Wms/appsettings.json @@ -12,8 +12,8 @@ //"ConnectionString": "Server=47.95.120.53;Database=WMS_JC09;User ID=sa;Password=boxline!@#;Integrated Security=False;", //"ConnectionString": "Server=192.168.62.106;Database=WMS_JC24;User ID=sa;Password=sql2019;Integrated Security=False;", //"ConnectionString": "Server=192.168.62.200;Database=WMS_JC37;User ID=sa;Password=sql2019;Integrated Security=False;" - "ConnectionString": "Server=.;Database=WMS_JC37;User ID=sa;Password=sa@123456;Integrated Security=False;" - //"ConnectionString": "Data Source=DESKTOP-0EJDG95\\MSSQLSERVER1;Initial Catalog=WMS_V01;Integrated Security=True;" + //"ConnectionString": "Server=.;Database=WMS_JC37;User ID=sa;Password=sa@123456;Integrated Security=False;" + "ConnectionString": "Data Source=192.168.10.201\\WMSSQLSERVER;Database=WMS_JC37;User ID=sa;Password=sa@123456;Integrated Security=False;" //"ConnectionString": "Server=.\\MSSQLSERVER2019;Database=WMS_JC23-2;User Id=sa;Password=admin2023@;" // SqlServer 搴撹繛鎺ュ瓧绗︿覆 //"ConnectionString": "Server=172.16.105.10;Database=WMS_JC23-2;User ID=sa;Password=sql2019;Integrated Security=False;" //"ConnectionString": "Server=172.16.105.2;Database=WMS_JC23-2;User ID=sa;Password=boxline@2024;Integrated Security=False;" -- Gitblit v1.8.0