Pda/View/AsnSetting/LocationOptimize.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Pda/View/AsnSetting/requestRuku.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.BLL/HttpServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.Entity/BllAsnEntity/BllPalletUpShelf.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.IBLL/IBllAsnServer/IPalletBindServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.IBLL/IHttpServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Wms/Controllers/DownApiController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Wms/Controllers/PdaAsnController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Pda/View/AsnSetting/LocationOptimize.html
New file @@ -0,0 +1,225 @@ <!DOCTYPE html> <html> <head> <meta name="viewport" content="user-scalable=0,width=device-width,initial-scale=1.0" /> <meta charset="UTF-8" /> <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665, minimum-scale=0.5, maximum-scale=1, user-scalable=no" /> --> <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665" /> --> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Boxline PDA</title> <link rel="stylesheet" href="/layui/css/layui.css" /> <link rel="stylesheet" href="/css/style.css" /> <script src="/js/adaptive.js"></script> <link rel="stylesheet" href="/css/my.css" /> <style type="text/css"> td { word-break: break-all; word-wrap: break-word; } .layui-form-switch { margin-top: 0; } /* 标签样式 */ .tableyang-this a { margin: 10px 10px 0px 0px; line-height: 30px; width: 100px; color: #999; text-align: center; float: left; background: #f7f7f7; user-select: none; position: relative; z-index: 1; cursor: pointer; border-radius: 5px; border: 1px solid #ccc; transition: all 0.3s ease; } .tableyang-this a.hover { color: #5298ff; background-color: #eff2ff; border: 1px solid #5298ff; } /* 内容居中 */ .tableyang-tab { display: flex; /* justify-content: center; */ /* align-items: center; */ flex-direction: column; height: 90vh; } /* 必用样式 */ .tableyang-2, .tableyang-3 { display: none; } ul { list-style-type: none; padding: 0; } li { cursor: pointer; background-color: lightgray; padding: 10px; margin-bottom: 5px; } </style> <link rel="stylesheet" href="/css/adapter.css" /> <script src="../../js/jquery.js"></script> <script src="../../js/jquery-3.5.1.min.js"></script> </head> <body> <div id="" class="main-content"> <div id="" class="layout-title"> <table border="" cellspacing="" cellpadding=""> <tr> <td class="img-back"><a href="../index.html"><img src="/assets/back.jpg"></a></td> <td class="title-text" lang>库位巷道</td> <td class="title-menu-icon"><img id="menuImg" src="/assets/menu.jpg"></td> </tr> </table> </div> <div id="" class="layout-sub-content"> <div id="menuList" class="menu"> <ul class="" style="text-align: center;"> <li><a href="../index.html" lang>主页</a></li> <!-- <li><a href="productEnterConfirm.html">入库信息确认</a></li> --> <li><a href="../login.html" lang>重新登录</a></li> </ul> </div> <!-- 无码 --> <div id="content2"> <div id="zongDiv" class="layout-bill-info" style="height: 150px;"> <form class="layui-form" id="form2" action=""> <div id="" class="layui-form-item layout-input"> <label class="layui-form-label">托盘码</label> <div class="layui-input-block"> <input id="pln" type="text" placeholder="" autocomplete="off" class="layui-input" > </div> </div> <div id="" class="layui-form-item layout-input"> <label class="layui-form-label">储位码</label> <div class="layui-input-block"> <input id="locateNo" type="text" placeholder="" autocomplete="off" class="layui-input" > </div> </div> <table class="layout-tbl-submit" border="" cellspacing="" cellpadding=""> <tr> <td style="width: 30%;"></td> <td style="width: 40%;"> <button class="layout-btn layout-btn-blue" lang type="button" lay-submit lay-filter="formCall1">指定</button> </td> <td style="width: 30%;"></td> </tr> </table> </form> </div> <br> </div> </div> </div> <script src="/js/jquery-3.5.1.min.js"></script> <script src="/layui/layui.js"></script> <script src="/js/public.js"></script> <script src="/js/language.js"></script> <script src="/js/jquery.cookie.js"></script> <script> layui.use(['form', 'jquery'], function () { var form = layui.form /*——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————*/ $("#TaskNo").val(""); $("#TaskId").val(""); initLanguage() setLanguage() form.on('submit(formCall1)', function (data) { if ($("#pln").val() == "") { layer.msg('托盘码不能为空', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if ($("#locateNo").val() == "") { layer.msg('储位不能为空', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } var param = { PalletNo: $("#pln").val(), LocatNo:$("#locateNo").val() } //呼叫小车 sendData(IP + "/PdaAsn/SaveAppointLocate", param, 'post', function (res) { if (res.Success == "0") { //成功 layer.msg(res.Message, { icon: 1, time: 1000 //2秒关闭(如果不配置,默认是3秒) }, function () { $("#pln").val(""), $("#locateNo").val("") }); } else { //不成功 layer.msg(res.Message, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { $("#pln").val(""), $("#locateNo").val("") }); } }); return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 }); /*——————————————————————————————————————————————————————————*/ $("#menuImg").click(function (e) { //console.log("menuImg") e.stopPropagation() if ($("#menuList").is(":hidden")) { $("#menuList").show() } else { $("#menuList").hide() } }) $('body').click(function () { // //console.log("body") $("#menuList").hide() }) }) </script> </body> </html> Pda/View/AsnSetting/requestRuku.html
@@ -209,56 +209,6 @@ }); } //申请巷道 form.on('submit(requestRoadway)', function (data) { if (!$("#PalletNo").val()) { layer.msg('请扫描托盘条码', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } var param = { PalletNo: $("#PalletNo").val(), HouseNo:"W01" } sendData(IP + "/PdaAsn/RequestRoadWay", param, 'post', function (res) { if (res.code == 0) { //成功 layer.msg(res.msg, { icon: 1, time: 2500 //2秒关闭(如果不配置,默认是3秒) }, function () { var statusVal=''; if(res.data.Status=="0"){ statusVal='等待上架'; }else if(res.data.Status=="1"){ statusVal='正在上架'; }else if(res.data.Status=="2"){ statusVal='上架完成'; }else if(res.data.Status=="3"){ statusVal='已取消'; }else{ statusVal='未上架'; } $("#Status").val(statusVal); $("#SkuNo").val(res.data.SkuNo+"-"+res.data.SkuName); $("#LotNo").val(res.data.LotNo); $("#RoadwayNo").val(res.data.RoadwayNo); $("#LocatNo").val(res.data.LocatNo); }); } else { //不成功 layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { //回调 clearTable(); }); } }); return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 }); //申请储位 form.on('submit(requestLocat)', function (data) { if (!$("#PalletNo").val()) { @@ -273,28 +223,28 @@ HouseNo:"W02" } sendData(IP + "/DownApi/RequestLocation", param, 'post', function (res) { if (res.Success == 0) { //成功 layer.msg(res.msg, { if (res.Success == "0") { //成功 layer.msg(res.Message, { icon: 1, time: 2500 //2秒关闭(如果不配置,默认是3秒) }, function () { var statusVal=''; if(res.data.Status=="0"){ statusVal='等待上架'; }else if(res.data.Status=="1"){ statusVal='正在上架'; }else if(res.data.Status=="2"){ statusVal='上架完成'; }else if(res.data.Status=="3"){ statusVal='已取消'; }else{ statusVal='未上架'; } $("#Status").val(statusVal); $("#SkuNo").val(res.data.SkuNo+"-"+res.data.SkuName); $("#LotNo").val(res.data.LotNo); $("#RoadwayNo").val(res.data.RoadwayNo); $("#LocatNo").val(res.data.LocatNo); // var statusVal=''; // if(res.data.Status=="0"){ // statusVal='等待上架'; // }else if(res.data.Status=="1"){ // statusVal='正在上架'; // }else if(res.data.Status=="2"){ // statusVal='上架完成'; // }else if(res.data.Status=="3"){ // statusVal='已取消'; // }else{ // statusVal='未上架'; // } // $("#Status").val(statusVal); // $("#SkuNo").val(res.data.SkuNo+"-"+res.data.SkuName); // $("#LotNo").val(res.data.LotNo); // $("#RoadwayNo").val(res.data.RoadwayNo); // $("#LocatNo").val(res.data.LocatNo); }); } else { //不成功 layer.msg(res.Message, { Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
@@ -2589,21 +2589,21 @@ try { var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") response = HttpHelper.DoPost(url, jsonData, "下发给WCS入库命令", "WCS"); //response = HttpHelper.DoPost(url, jsonData, "下发给WCS入库命令", "WCS"); var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") var list = new List<string>() { model.TaskNo }; //解析返回数据 var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); if (wcsModel.code == 200) { ////解析返回数据 //var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); //if (wcsModel.code == 200) //{ //更改任务的发送返回时间// new TaskServer().EditTaskIssueOk(list, time1, time2); }else { new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.message); throw new Exception("WCS反馈:"+wcsModel.message); } //}else //{ // new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.message); // throw new Exception("WCS反馈:"+wcsModel.message); //} } catch (Exception ex) { @@ -2616,85 +2616,7 @@ } } /// <summary> /// 入库任务完成JC34 /// </summary> /// <param name="taskNo"></param> /// <param name="userId"></param> /// <exception cref="Exception"></exception> public void ArrivalSuccess2(string taskNo, int userId) { try { //正常入库 var task = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == taskNo); if (task == null) { throw new Exception("未查询到任务信息"); } if (task.Status == "2") { throw new Exception("当前任务已完成"); } var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); var upShelf = Db.Queryable<BllPalletUpShelf>().First(m => m.TaskNo == taskNo); if (upShelf == null) { throw new Exception("没有找到托盘上架信息"); } //当前任务中的储位信息 var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); if (locate == null) { throw new Exception($"未查询到任务中的储位信息"); } Db.BeginTran(); task.Status = "2";//任务状态 task.IsSend = 0; task.IsCancel = 0; task.IsFinish = 0; task.FinishDate = DateTime.Now;//完成时间 Db.Updateable(task).ExecuteCommand(); if (userId != 0) { //添加操作日志记录 var k = new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); } //判断是否是回流入库完成 if (stockDetail.Any()) { throw new Exception("没有查询到库存信息"); } foreach (var item in stockDetail) { item.WareHouseNo = locate.WareHouseNo; item.RoadwayNo = locate.RoadwayNo; item.AreaNo = locate.AreaNo; item.LocatNo = locate.LocatNo; item.UpdateTime = DateTime.Now; if (userId != 0) { item.UpdateUser = userId; } } upShelf.Status = "2"; Db.Updateable(upShelf).ExecuteCommand(); locate.Status = "1"; Db.Updateable(locate).ExecuteCommand(); Db.Updateable(stockDetail).ExecuteCommand(); Db.CommitTran(); } catch (Exception e) { throw new Exception(e.Message); } } #endregion @@ -4330,7 +4252,8 @@ var upShelfList = Db.Queryable<BllPalletUpShelf>().Where(m => m.IsDel == "0" && m.TaskNo == taskNo && m.PalletNo == task.PalletNo).ToList(); foreach (var upShelf in upShelfList) { upShelf.IsDel = "1"; //upShelf.IsDel = "1"; upShelf.Status = "4"; Db.Updateable(upShelf).ExecuteCommand(); } Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -21,6 +21,7 @@ using Model.ModelDto.DataDto; using System.Xml.Schema; using ZXing.OneD; using System.Threading.Tasks; namespace WMS.BLL.BllPdaServer { @@ -1897,6 +1898,172 @@ } } /// <summary> /// 保存指定的储位 /// </summary> /// <param name="palletNo"></param> /// <param name="locateNo"></param> /// <param name="userId"></param> /// <exception cref="Exception"></exception> public void SaveAppointLocate(string palletNo, string locateNo, int userId) { try { //托盘库存信息 var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList(); if (stockDetailList.Count(m=> string.IsNullOrWhiteSpace(m.LocatNo)) > 0) { throw new Exception("托盘没有在平库储位上"); } //判断托盘的储位是否是平库 var stockDetail = stockDetailList.First(); var oldLocate = stockDetail.LocatNo; var pingAreaStr = Db.Queryable<SysStorageArea>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W04" && m.AreaNo != "B06" && m.AreaNo != "B07").Select(m => m.AreaNo).ToList(); var pingLocateInfo = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == oldLocate && pingAreaStr.Contains(m.AreaNo) && m.IsDel == "0"); if (pingLocateInfo == null) { throw new Exception("当前托盘所在的储位没有在系统中找到信息"); } var skuList = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList(); //验证物料是否有成品 foreach (var item in stockDetailList) { var skuItem = skuList.First(m => m.SkuNo == item.SkuNo); if (skuItem.Type == "2") { throw new Exception("成品物料请入成品库"); } } //储位 var locate = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == locateNo); if (locate == null) { throw new Exception("未查询到储位的信息"); } if (locate.WareHouseNo != "W02") { throw new Exception("只能指定立库的储位"); } if (locate.Status != "0" || locate.Flag != "0") { throw new Exception("该储位状态不是空储位或标志不是正常的"); } Db.BeginTran(); try { var time = DateTime.Now; //判断当前托盘是否存在绑定信息 var task = Db.Queryable<LogTask>().First(m=> m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1") && m.OrderType == "0" && m.Type == "0"); var upShelf = Db.Queryable<BllPalletUpShelf>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1")); if (task != null) { if (task.Status == "1") { throw new Exception("托盘正在执行任务,不可指定储位"); } if (task.Status == "0") { if (upShelf != null) { if (upShelf.Status == "1") { throw new Exception("托盘正在执行上架任务,不可指定储位"); } if (upShelf.Status == "0") { if (locate.LocatNo == task.EndLocat) { throw new Exception("已指定储位,无需重复指定"); } //重新指定储位 task.EndLocat = locate.LocatNo; task.EndRoadway = locate.RoadwayNo; upShelf.LocatNo = locate.LocatNo; upShelf.RoadwayNo = locate.RoadwayNo; Db.Updateable(task).ExecuteCommand(); Db.Updateable(upShelf).ExecuteCommand(); new OperationASNServer().AddLogOperationAsn("PDA模块", "指定储位", palletNo, "编辑", $"指定了储位:{locate.LocatNo}、托盘码:{palletNo}的信息", userId); Db.CommitTran(); return; } } else { throw new Exception("查询出任务但没有上架记录,信息错误"); } } } // 添加入库日志记录 var taskNo = new Common().GetMaxNo("TK"); var addTask = new LogTask //入库任务 { TaskNo = taskNo, Sender = "WMS", Receiver = "WCS", IsSuccess = 1, //是否下发成功 0失败 1成功 SendDate = DateTime.Now, //发送时间 //BackDate = DateTime.Now, //返回时间 StartRoadway = "", // 起始巷道 StartLocat = oldLocate,//起始位置 EndLocat = locate.LocatNo,//目标位置 EndRoadway = locate.RoadwayNo, // 目标巷道 PalletNo = palletNo,//托盘码 IsSend = 1,//是否可再次下发 IsCancel = 1,//是否可取消 IsFinish = 1,//是否可完成 Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务 Status = "0",//任务状态0:等待执行1正在执行2执行完成 OrderType = "0",//0 入库单 1 出库单 2 盘点单 3 移库单 Msg = $"{oldLocate}到=>>{locate.LocatNo}的入库任务", //关键信息 }; Db.Insertable(addTask).ExecuteCommand(); //添加托盘上架记录 var upShelfAdd = new BllPalletUpShelf() { TaskNo = addTask.TaskNo, TraceNo = "", PalletNo = palletNo, SkuNo = stockDetail.SkuNo, SkuName = stockDetail.SkuName, LotNo = stockDetail.LotNo, Status = "0", WareHouseNo = locate.WareHouseNo, RoadwayNo = locate.RoadwayNo, AreaNo = locate.AreaNo, LocatNo = locate.LocatNo, CreateUser = 0, }; Db.Insertable(upShelfAdd).ExecuteCommand(); locate.Status = "2"; Db.Updateable(locate).ExecuteCommand(); new OperationASNServer().AddLogOperationAsn("PDA模块", "指定储位", palletNo, "编辑", $"指定了储位:{locate.LocatNo}、托盘码:{palletNo}的信息", userId); Db.CommitTran(); } catch (Exception e) { Db.RollbackTran(); throw new Exception(e.Message); } } catch (Exception e) { throw new Exception(e.Message); } } #endregion Wms/WMS.BLL/HttpServer.cs
@@ -1,8 +1,14 @@ using SqlSugar; using Model.InterFaceModel; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using WMS.BLL.Logic; using WMS.BLL.LogServer; using WMS.DAL; using WMS.Entity.BllAsnEntity; using WMS.Entity.BllSoEntity; using WMS.Entity.Context; using WMS.Entity.DataEntity; using WMS.Entity.LogEntity; @@ -16,6 +22,338 @@ private static readonly SqlSugarScope Db = DataContext.Db; public HttpServer() { } /// <summary> /// 申请储位 (立体库) /// </summary> /// <param name="palletNo"></param> /// <param name="houseNo"></param> /// <param name="roadwayNo"></param> /// <returns></returns> /// <exception cref="Exception"></exception> public OutCommandDto RequestLocation(string palletNo, string houseNo) { try { //验证托盘条码是否为空 if (string.IsNullOrEmpty(palletNo)) { throw new Exception("请输入要申请的托盘条码"); } //验证所属仓库是否为空 if (string.IsNullOrEmpty(houseNo)) { throw new Exception("请选择所属仓库"); } //验证是否为平库入库 var houseType = Db.Queryable<SysWareHouse>().First(a => a.WareHouseNo == houseNo);//获取仓库类型 //验证是否为立体库入库 if (houseType.Type != "1") { throw new Exception("仓库类型错误,请选择立体库仓库"); } OutCommandDto comDto;//返回wcs的入库命令 var stock = Db.Queryable<SysPallets>().First(a => a.PalletNo == palletNo);//托盘信息 //判断托盘条码是否有效 if (stock == null) throw new Exception("托盘条码不受WMS管理,不可入库!"); #region var upShelfOld = Db.Queryable<BllPalletUpShelf>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1")); var skuList = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList(); //物料类别信息 var skuCategoryList = Db.Queryable<SysMaterialCategory>().Where(m => m.IsDel == "0").ToList(); var skuNo = ""; //入库物料 var starLocate = ""; // 起始储位 var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo).ToList(); //验证物料是否有成品 foreach (var item in stockDetail) { var skuItem = skuList.First(m => m.SkuNo == item.SkuNo); if (skuItem.Type == "2") { throw new Exception("成品物料请入成品库"); } } if (upShelfOld != null) //查询到入库信息 { var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == upShelfOld.TaskNo); if (beingTask == null) { throw new Exception("该托盘正在入库,但未查询到任务信息"); } if (!string.IsNullOrWhiteSpace(beingTask.EndLocat)) { comDto = new OutCommandDto() { PalletNo = palletNo,//托盘号 StartRoadway = beingTask.StartRoadway, // 起始巷道 StartLocate = beingTask.StartLocat, // 起始位置 EndLocate = beingTask.EndLocat, // 目标位置 EndRoadway = beingTask.EndRoadway, // 目标巷道 TaskNo = beingTask.TaskNo, // 任务号 TaskType = "0",// 任务类型 (出库) OutMode = "", //目标地址 Order = 1 }; if (beingTask.IsSuccess == 0) { beingTask.IsSuccess = 1; } beingTask.Status = "1"; Db.Updateable(beingTask).ExecuteCommand(); if (upShelfOld.Status == "0") { upShelfOld.Status = "1"; Db.Updateable(upShelfOld).ExecuteCommand(); } return comDto; } else { throw new Exception("查询到任务但目的储位为空"); } } else //申请入库 { if (stockDetail.Count == 0) { throw new Exception($"{palletNo}托盘条码不具有箱码信息,不可入库!"); } if (stockDetail.Count(m => !string.IsNullOrWhiteSpace(m.LocatNo)) == 0) { throw new Exception("当前托盘没有在平库储位上,请核实"); } starLocate = stockDetail.First().LocatNo; var pingAreaStr = Db.Queryable<SysStorageArea>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W04" && m.AreaNo != "B06" && m.AreaNo != "B07").Select(m => m.AreaNo).ToList(); var pingLocateInfo = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == starLocate && pingAreaStr.Contains(m.AreaNo) && m.IsDel == "0"); if (pingLocateInfo == null) { throw new Exception("当前托盘所在的储位没有在系统中找到信息"); } if (pingLocateInfo.Status != "1") { throw new Exception("当前托盘所在的储位状态错误,不是空储位"); } skuNo = stockDetail.First().SkuNo; var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.PalletNo == palletNo && m.Type == "0"); if (beingTask != null) { if (!string.IsNullOrWhiteSpace(beingTask.EndLocat)) { comDto = new OutCommandDto() { PalletNo = palletNo,//托盘号 StartRoadway = beingTask.StartRoadway, // 起始巷道 StartLocate = beingTask.StartLocat, // 起始位置 EndLocate = beingTask.EndLocat, // 目标位置 EndRoadway = beingTask.EndRoadway, // 目标巷道 TaskNo = beingTask.TaskNo, // 任务号 TaskType = "0",// 任务类型 (出库) OutMode = "", //目标地址 Order = 1, Type = PLCTypeEnum.AGV }; if (beingTask.IsSuccess == 0) { beingTask.IsSuccess = 1; } beingTask.Status = "1"; Db.Updateable(beingTask).ExecuteCommand(); return comDto; } else { throw new Exception("查询到任务但目的储位为空"); } } //获取对应回库规则 var function = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetName == "托盘回库验证" && a.IsEnable == "NO"); #region 托盘回库规则 if (function != null) { //拣货完成后允许托盘回库 if (function.SetValue == "CompletePick") { var allot = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.LotNo == stockDetail[0].LotNo && a.PalletNo == palletNo && a.SkuNo == stockDetail[0].SkuNo); //验证拣货明细是否存在 if (allot != null) { //验证当前托盘拣货信息是否已完成 if (allot.Status != "5") { throw new Exception("当前托盘拣货信息未完成,请完成后回库!"); } } } } #endregion } var allotLocate = new AllotLocation(); #region 申请储位 SysStorageLocat locate; var sku = skuList.FirstOrDefault(m => m.SkuNo == skuNo); if (sku == null) { throw new Exception("物料信息中未查询到入库单明细包含的物料信息,不可入库"); } //判断物料是否含有类别信息 if (string.IsNullOrWhiteSpace(sku.CategoryNo)) { throw new Exception($"物料:{sku.SkuNo}未查询到类别信息"); } var skuCategory = skuCategoryList.FirstOrDefault(m => m.CategoryNo == sku.CategoryNo); if (skuCategory == null) { throw new Exception($"未在类别信息中查询到物料:{sku.SkuNo}包含的类别"); } var areaStr = skuCategory.AreaNo.Split(","); var areaList = new List<string>(); foreach (var item in areaStr) { areaList.Add(item); } locate = allotLocate.GetSuiTableLocate(houseNo, areaList, ""); #endregion Db.BeginTran(); try { //添加巷道使用记录 var log = new SysRoadwayUseLog { RoadwayNo = locate.RoadwayNo, WareHouseNo = houseNo, Row = 0, Column = 0, Layer = 0, }; Db.Insertable(log).ExecuteCommand(); var taskNo = new Common().GetMaxNo("TK"); var exTask = new LogTask //入库任务 { TaskNo = taskNo, Sender = "WMS", Receiver = "WCS", IsSuccess = 1, //是否下发成功 0失败 1成功 SendDate = DateTime.Now, //发送时间 BackDate = DateTime.Now, //返回时间 StartRoadway = "", // 起始巷道 StartLocat = starLocate,//起始位置 EndLocat = locate.LocatNo,//目标位置 EndRoadway = locate.RoadwayNo, // 目标巷道 PalletNo = palletNo,//托盘码 IsSend = 1,//是否可再次下发 IsCancel = 1,//是否可取消 IsFinish = 1,//是否可完成 Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务 Status = "1",//任务状态0:等待执行1正在执行2执行完成 OrderType = "0",//0 入库单 1 出库单 2 盘点单 3 移库单 Msg = "入库口到=>>" + locate.LocatNo + "的入库任务", //关键信息 }; Db.Insertable(exTask).ExecuteCommand(); var asnNo = ""; // 添加托盘绑定表托盘入库任务号 liudl foreach (DataStockDetail stockModel in stockDetail) { var bindModel = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.Status == "2" && m.PalletNo == stockModel.PalletNo && m.ASNNo == stockModel.ASNNo && m.ASNDetailNo == stockModel.ASNDetailNo); if (bindModel != null && string.IsNullOrWhiteSpace(bindModel.TaskNo)) { bindModel.TaskNo = taskNo; bindModel.WareHouseNo = locate.WareHouseNo; bindModel.RoadwayNo = locate.RoadwayNo; bindModel.LocatNo = locate.LocatNo; Db.Updateable(bindModel).ExecuteCommand(); asnNo = stockModel.ASNNo; } } foreach (DataStockDetail stockModel in stockDetail) { //添加托盘上架记录 var upShelf = new BllPalletUpShelf() { TaskNo = exTask.TaskNo, TraceNo = asnNo, PalletNo = palletNo, SkuNo = stockModel.SkuNo, SkuName = stockModel.SkuName, LotNo = stockModel.LotNo, Status = "1", WareHouseNo = houseNo, RoadwayNo = locate.RoadwayNo, AreaNo = locate.AreaNo, LocatNo = locate.LocatNo, CreateUser = 0, }; Db.Insertable(upShelf).ExecuteCommand(); } locate.Status = "2"; Db.Updateable(locate).ExecuteCommand(); Db.CommitTran(); comDto = new OutCommandDto() { PalletNo = palletNo,//托盘号 StartRoadway = "", StartLocate = starLocate, // 起始位置 EndLocate = locate.LocatNo, // 目标位置 EndRoadway = locate.RoadwayNo, // 目标巷道 TaskNo = taskNo, // 任务号 TaskType = "0",// 任务类型 (出库) OutMode = "", //目标地址 Order = 1, Type = PLCTypeEnum.AGV }; } catch (Exception ex) { Db.RollbackTran(); throw new Exception(ex.Message); } #endregion return comDto; } catch (Exception e) { throw new Exception(e.Message); } } /// <summary> /// agv走出储位修改储位信息,仅限平库储位 /// </summary> /// <param name="taskNo"></param> /// <param name="userId"></param> public void UpLocateByAgvOut(string taskNo, int userId) { try @@ -55,5 +393,89 @@ throw new Exception(e.Message); } } /// <summary> /// 入库任务完成JC34 /// </summary> /// <param name="taskNo"></param> /// <param name="userId"></param> /// <exception cref="Exception"></exception> public void ArrivalSuccess2(string taskNo, int userId) { try { //正常入库 var task = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == taskNo); if (task == null) { throw new Exception("未查询到任务信息"); } if (task.Status == "2") { throw new Exception("当前任务已完成"); } var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); var upShelf = Db.Queryable<BllPalletUpShelf>().First(m => m.TaskNo == taskNo); if (upShelf == null) { throw new Exception("没有找到托盘上架信息"); } //当前任务中的储位信息 var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); if (locate == null) { throw new Exception($"未查询到任务中的储位信息"); } Db.BeginTran(); task.Status = "2";//任务状态 task.IsSend = 0; task.IsCancel = 0; task.IsFinish = 0; task.FinishDate = DateTime.Now;//完成时间 Db.Updateable(task).ExecuteCommand(); if (userId != 0) { //添加操作日志记录 var k = new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); } //判断是否是回流入库完成 if (stockDetail.Any()) { throw new Exception("没有查询到库存信息"); } foreach (var item in stockDetail) { item.WareHouseNo = locate.WareHouseNo; item.RoadwayNo = locate.RoadwayNo; item.AreaNo = locate.AreaNo; item.LocatNo = locate.LocatNo; item.UpdateTime = DateTime.Now; if (userId != 0) { item.UpdateUser = userId; } } upShelf.Status = "2"; Db.Updateable(upShelf).ExecuteCommand(); locate.Status = "1"; Db.Updateable(locate).ExecuteCommand(); Db.Updateable(stockDetail).ExecuteCommand(); Db.CommitTran(); } catch (Exception e) { throw new Exception(e.Message); } } } } Wms/WMS.Entity/BllAsnEntity/BllPalletUpShelf.cs
@@ -38,7 +38,7 @@ /// </summary> public string LotNo { get; set; } /// <summary> /// 状态 /// 状态 0等待执行 1正在执行 2执行完成 4已取消 /// </summary> public string Status { get; set; } Wms/WMS.IBLL/IBllAsnServer/IPalletBindServer.cs
@@ -111,12 +111,7 @@ OutCommandDto RequestMiJiLocation(string palletNo, string houseNo, string roadwayNo); /// <summary> /// 入库完成JC34 /// </summary> /// <param name="taskNo">任务号</param> /// <param name="userId">操作人(下游系统时为空)</param> void ArrivalSuccess2(string taskNo, int userId); /// <summary> /// 入库完成 /// </summary> Wms/WMS.IBLL/IHttpServer.cs
@@ -1,4 +1,5 @@ using System; using Model.InterFaceModel; using System; using System.Collections.Generic; using System.Text; @@ -6,11 +7,28 @@ { public interface IHttpServer { /// <summary> /// 申请储位 (立体库) /// </summary> /// <param name="palletNo"></param> /// <param name="houseNo"></param> /// <returns></returns> OutCommandDto RequestLocation(string palletNo, string houseNo); /// <summary> /// agv走出储位修改储位信息,仅限平库储位 /// </summary> /// <param name="taskNo"></param> /// <param name="userId"></param> void UpLocateByAgvOut(string taskNo,int userId); /// <summary> /// 入库完成JC34 /// </summary> /// <param name="taskNo">任务号</param> /// <param name="userId">操作人(下游系统时为空)</param> void ArrivalSuccess2(string taskNo, int userId); } } Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs
@@ -20,6 +20,15 @@ List<string> GetNoPasteAsnNoStrList(); //根据单据获取标签数量 BoxListInfoDto GetBoxCountByAsn(string asnNo, int? asnDetailId); /// <summary> /// 保存指定的储位 /// </summary> /// <param name="palletNo"></param> /// <param name="locateNo"></param> /// <param name="userId"></param> void SaveAppointLocate(string palletNo, string locateNo, int userId); #endregion Wms/Wms/Controllers/DownApiController.cs
@@ -300,7 +300,7 @@ try { var list = _asnPalletBindSvc.RequestLocation(model.PalletNo, model.HouseNo); var list = _http.RequestLocation(model.PalletNo, model.HouseNo); _asnPalletBindSvc.IssueAsnTask(list, _config.WcsHost+ _config.IssueComApiUrl2);//WCS路径 new OperationASNServer().AddLogOperationAsn("PDA模块", "申请入库", model.PalletNo, "添加", $"申请储位托盘号:{model.PalletNo}的成功信息", int.Parse(userId)); @@ -429,7 +429,7 @@ case "0"://入库完成任务 if (model.TaskType == "0")//0:入库 1:出库 2:移库 { _asnPalletBindSvc.ArrivalSuccess2(model.TaskNo, 0); _http.ArrivalSuccess2(model.TaskNo, 0); return Ok(new WcsModel { StatusCode = 0, Msg = "入库完成" }); } break; @@ -453,7 +453,7 @@ } else if (model.TaskType == "0")// 盘点出库托盘回库完成 { _asnPalletBindSvc.ArrivalSuccess2(model.TaskNo, 0); _http.ArrivalSuccess2(model.TaskNo, 0); return Ok(new WcsModel { StatusCode = 0, Msg = "入库完成" }); } break; Wms/Wms/Controllers/PdaAsnController.cs
@@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Model.InterFaceModel; using Model.ModelDto.BllAsnDto; @@ -24,10 +25,12 @@ public class PdaAsnController : ControllerBase { private readonly IPdaAsnServer _PdaAsnSvc; private readonly UserManager _userManager; public PdaAsnController(IPdaAsnServer pdaAsnSvc) public PdaAsnController(IPdaAsnServer pdaAsnSvc,UserManager userManager) { _PdaAsnSvc = pdaAsnSvc; _PdaAsnSvc = pdaAsnSvc; _userManager = userManager; } @@ -234,11 +237,31 @@ return Ok(new { code = 1, msg = e.Message }); } } //---------------------------------------------申请入库页面---------------------------------------------------------------------- /// <summary> /// 保存指定的储位 /// </summary> /// <param name="model"></param> /// <returns></returns> [HttpPost] public IActionResult SaveAppointLocate(PalletBindVm model) { try { _PdaAsnSvc.SaveAppointLocate(model.PalletNo, model.LocatNo, _userManager.UserId); return Ok(new HttpReturnModel{ Success = "0", Message = "根据单据获取标签数量" }); } catch (Exception e) { return Ok(new HttpReturnModel { Success = "1", Message = e.Message }); } } #endregion