Pda/View/HouseDataSetting/AgvNullPallet.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Model/ModelVm/PdaVm/PdaCrVm.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Wms/Wms/Controllers/PdaCrController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Pda/View/HouseDataSetting/AgvNullPallet.html
New file @@ -0,0 +1,232 @@ <!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>AGV空托转运</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="content1"> <div id="zongDiv" class="layout-bill-info" style="height: 170px;"> <form class="layui-form" action=""> <div id="" class="layui-form-item layout-input"> <label class="layui-form-label" lang>托盘条码:</label> <div class="layui-input-block"> <input id="STOCKCODE" type="text" lay-verify="stock" lang langholder placeholder="请扫描托盘条码" autocomplete="off" class="layui-input"> </div> </div> <div id="" class="layui-form-item layout-input"> <label class="layui-form-label" lang>起始地码:</label> <div class="layui-input-block"> <input id="LocatNo" type="text" lay-verify="stock" lang langholder placeholder="起始地码" autocomplete="off" class="layui-input" readonly> </div> </div> <div id="" class="layui-form-item layout-dropdownlist"> <label class="layui-form-label" lang>目标区域:</label> <div class="layui-input-block" id="selectQuyu"> <select id="Quyu" lay-filter="getQuyu" lay-search> <option value="B08" selected>B08-库前空托存放区</option> </select> <img src="/assets/down_arraw.png"> </div> </div> <table class="layout-tbl-submit" border="" cellspacing="" cellpadding=""> <tr> <td style="width: 23%;"></td> <td> <button class="layout-btn layout-btn-red" lang type="button" lay-submit lay-filter="formCall">叫小车</button> </td> <td style="width: 33%;"></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 //呼叫小车事件 form.on('submit(formCall)', function (data) { if ($("#STOCKCODE").val() == "") { layer.msg('请扫描托盘条码', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if ($("#LocatNo").val() == "") { layer.msg('请扫描起始地码', { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } var param = { PalletNo: $("#STOCKCODE").val(), AreaNo: $("#Quyu").val(), LocatNo: $("#LocatNo").val() } //呼叫小车 sendData(IP + "/PdaCr/AgvNullPallet", param, 'post', function (res) { if (res.code == 0) { //成功 layer.msg(res.msg, { icon: 1, time: 1000 //2秒关闭(如果不配置,默认是3秒) }, function () { }); } else { //不成功 layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { //回调 }); } }); 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> Wms/Model/ModelVm/PdaVm/PdaCrVm.cs
@@ -68,6 +68,10 @@ /// 入库口 /// </summary> public string Ruku { get; set; } /// <summary> /// 起始地码 /// </summary> public string LocatNo { get; set; } } public class PdaPalletUnBindVm Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
@@ -947,6 +947,166 @@ } } /// <summary> /// 呼叫agv转运空托盘 /// </summary> /// <param name="palletNo"></param> /// <param name="areaNo"></param> /// <param name="locatNo"></param> /// <param name="url"></param> /// <param name="userId"></param> /// <returns></returns> /// <exception cref="Exception"></exception> public async Task AgvNullPallet(string palletNo, string areaNo, string locatNo, string url, int userId) { try { if (string.IsNullOrEmpty(palletNo)) { throw Oops.Bah("请扫描托盘条码!"); } if (string.IsNullOrEmpty(locatNo)) { throw Oops.Bah("请扫描起始地码!"); } if (string.IsNullOrEmpty(areaNo)) { throw Oops.Bah("请选择目标区域!"); } string EndLocat = string.Empty;//目标位置 var log = await Db.Queryable<LogTask>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo && (w.Status == "0" || w.Status == "1")); if (log != null) { throw Oops.Bah("该托盘已有等待执行或正在执行的任务!"); } var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo); if (stockDetail != null) { throw Oops.Bah("托盘上物料存在库存明细信息,请检查!"); } var storageArea = await Db.Queryable<SysStorageArea>().FirstAsync(w => w.IsDel == "0" && w.AreaNo == areaNo); if (storageArea == null) { throw Oops.Bah("所选区域信息不存在,请检查!"); } var palletInfo = await Db.Queryable<SysPallets>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo); if (palletInfo == null) { throw Oops.Bah("该托盘信息不存在!"); } if (palletInfo.Status!="0") { throw Oops.Bah("该托盘不是空托盘!"); } //根据目标区域获取目标储位地址 EndLocat = await GetLocat(areaNo); //起始储位信息 var storageLocat = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == stockDetail.LocatNo); if (storageLocat == null) { throw Oops.Bah("储位信息不存在,请检查!"); } //目标储位信息 //var storageLocatEnd = new SysStorageLocat(); var storageLocatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == EndLocat && w.Flag == "0"); if (storageLocatEnd == null) { throw Oops.Bah("目标储位信息不存在,请检查!"); } //添加出库任务 var taskNo = new Common().GetMaxNo("TK"); var moveTask = new LogTask { TaskNo = taskNo, Sender = "WMS", Receiver = "WCS", IsSuccess = 0, //是否下发成功 0失败 1成功 StartLocat = stockDetail.LocatNo,//起始位置 EndLocat = EndLocat,//目标位置 PalletNo = palletNo,//托盘码 Msg = string.Format("转运任务:{0}=>>{1}", stockDetail.LocatNo, EndLocat), IsSend = 1,//是否可再次下发 IsCancel = 1,//是否可取消 IsFinish = 1,//是否可完成 Type = "2",//任务类型 0 入库任务 1 出库任务 2 移库任务 Status = "0",//任务状态0:等待执行1正在执行2执行完成 OrderType = "3",//0 入库单 1 出库单 2 盘点单 3 移库单 CreateTime = DateTime.Now }; await Db.Insertable(moveTask).ExecuteCommandAsync(); //修改起始储位地址状态 storageLocat.Status = "5";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 await Db.Updateable(storageLocat).ExecuteCommandAsync(); //修改目标储位地址状态 if (storageLocatEnd != null) { storageLocatEnd.Status = "4";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 await Db.Updateable(storageLocatEnd).ExecuteCommandAsync(); } //添加操作日志记录 var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV空托转运", palletNo, "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId); var outDto = new List<OutCommandDto> { new OutCommandDto() { TaskNo = moveTask.TaskNo, // 任务号 TaskType = "2",// 任务类型 0入 1出 2移 PalletNo = moveTask.PalletNo,//托盘号 StartLocate = moveTask.StartLocat, // 起始位置 EndLocate = EndLocat, // 目标位置 Order = 999, Type = PLCTypeEnum.AGV } }; // 正式运行程序放开 var list2 = outDto.Select(m => m.TaskNo).ToList(); var jsonData = JsonConvert.SerializeObject(outDto); string response = ""; try { var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") //解析返回数据 var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); if (wcsModel.code == 200) { // 更改任务的发送返回时间// new TaskServer().EditTaskIssueOk(list2, time1, time2); } else { new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message); throw new Exception(wcsModel.message); } } catch (Exception ex) { throw new Exception(ex.Message); } } catch (Exception e) { throw new Exception(e.Message); } } /// <summary> /// agv转运呼叫小车取货 /// </summary> /// <param name="soNo"></param> Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs
@@ -134,6 +134,17 @@ /// <param name="url"></param> Task AgvTransport(string palletNo, string areaNo, string ruku, string url, int userId); /// <summary> /// 呼叫agv转运空托盘 /// </summary> /// <param name="palletNo"></param> /// <param name="areaNo"></param> /// <param name="locatNo"></param> /// <param name="url"></param> /// <param name="userId"></param> /// <returns></returns> /// <exception cref="Exception"></exception> Task AgvNullPallet(string palletNo, string areaNo, string locatNo, string url, int userId); /// <summary> /// agv转运呼叫小车取货 /// </summary> /// <param name="soNo"></param> Wms/Wms/Controllers/PdaCrController.cs
@@ -238,6 +238,18 @@ await _pdaCrSvc.AgvTransport(model.PalletNo, model.AreaNo, model.Ruku, _config.WcsHost+ _config.IssueComApiUrl, _userManager.UserId); } /// <summary> /// 呼叫agv转运空托盘 /// </summary> /// <param name="model"></param> /// <returns></returns> [HttpPost] [ServiceFilter(typeof(ApiResponseActionFilter))] [UnitOfWork] public async Task AgvNullPallet(PdaAgvTransportVm model) { await _pdaCrSvc.AgvNullPallet(model.PalletNo, model.AreaNo, model.LocatNo, _config.WcsHost + _config.IssueComApiUrl, _userManager.UserId); } /// <summary> /// agv转运呼叫小车取货 /// </summary> /// <param name="model"></param> @@ -252,6 +264,10 @@ #endregion #region AGV空托盘转运 #endregion #region 零箱解绑 /// <summary> /// 零箱解绑