HTML/.vscode/settings.json
@@ -1,3 +1,3 @@ { "liveServer.settings.port": 5504 "liveServer.settings.port": 5505 } HTML/views/HouseWithinSetting/HopperTransport.html
@@ -53,7 +53,7 @@ <ul class="layui-tab-title" id="tab"> <li class="layui-this">叫料</li> <li>叫车</li> <!-- <li>车间到车间</li> --> <li>点到点任务</li> </ul> <div class="layui-tab-content"> @@ -291,7 +291,7 @@ <div class="layui-tab-item"> <div class="flesDiv"> <form class="layui-form" action="" style="width: 40%"> <div class="layui-form-item"> <!-- <div class="layui-form-item"> <label class="layui-form-label" style="width: 80px" >起始区域</label > @@ -303,22 +303,23 @@ <option value=""></option> </select> </div> </div> </div> --> <div class="layui-form-item"> <label class="layui-form-label" style="width: 80px" >起始位置</label > <div class="layui-input-block"> <select <input type="text" id="LocateSelect3" name="LocateSelect3" lay-filter="LocateSelect3"> <option value=""></option> </select> placeholder="" autocomplete="off" class="layui-input"/> </div> </div> <div class="layui-form-item"> <!-- <div class="layui-form-item"> <label class="layui-form-label" style="width: 80px" >目标区域</label > @@ -330,22 +331,22 @@ <option value=""></option> </select> </div> </div> </div> --> <div class="layui-form-item"> <label class="layui-form-label" style="width: 80px" >目标位置</label > <div class="layui-input-block"> <select <input type="text" id="LocateSelect4" name="LocateSelect4" lay-filter="LocateSelect4"> <option value=""></option> </select> placeholder="" autocomplete="off" class="layui-input"/> </div> </div> <div class="layui-form-item"> <!-- <div class="layui-form-item"> <label class="layui-form-label" style="width: 80px" >桶类型</label > @@ -360,8 +361,8 @@ <option value="3">脏桶</option> </select> </div> </div> <div class="layui-form-item" id="SkuSelectDiv2"> </div> --> <!-- <div class="layui-form-item" id="SkuSelectDiv2"> <label class="layui-form-label" style="width: 80px" >物料</label > @@ -373,8 +374,8 @@ <option value=""></option> </select> </div> </div> <div class="layui-form-item" id="LotNoSelectDiv2"> </div> --> <!-- <div class="layui-form-item" id="LotNoSelectDiv2"> <label class="layui-form-label" style="width: 80px" >批次</label > @@ -387,8 +388,8 @@ autocomplete="off" class="layui-input" /> </div> </div> <div class="layui-form-item" id="WeightSelectDiv2"> </div> --> <!-- <div class="layui-form-item" id="WeightSelectDiv2"> <label class="layui-form-label" style="width: 80px" >重量</label > @@ -401,7 +402,7 @@ autocomplete="off" class="layui-input" /> </div> </div> </div> --> <div class="layui-form-item"> <div class="layui-input-block"> <button @@ -433,6 +434,9 @@ <script src="../../js/jquery.cookie.js"></script> <script type="text/javascript"></script> <script> var id = localStorage.getItem('keyUserName'); console.log("id:"+id); layui .config({ base: "../../layuiadmin/", //静态资源所在路径 @@ -482,7 +486,7 @@ Standard: field.Standard, SkuNo: field.SkuSelect, LotNo: field.LotNoSelect, }; }; sendData( IP + "/DownApi/jiaoLiaoHopper", param, @@ -563,6 +567,67 @@ return false; // 阻止默认 form 跳转 }); // 点对点任务提交事件 form.on("submit(demo3)", function (data) { var field = data.field; // 获取表单字段值 console.log("起始位置:"+field.LocateSelect3+",目标位置:"+field.LocateSelect4+",用户ID:"+id); var begin = field.LocateSelect3 var end = field.LocateSelect4 if (begin.length = 0) { layer.msg("请先输入起始储位!", { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } if (end.length = 0) { layer.msg("请先输入目标储位!", { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); return; } var param = { BeginPoint: begin, EndPoint: end, ID:id }; console.log(param); sendData( IP + "/DownApi/PointToPointRequest", param, "post", function (res) { if (res.code == 0) { //成功 layer.msg( res.message, { icon: 1, time: 1000, //2秒关闭(如果不配置,默认是3秒) }, function () {} ); } else { //不成功 layer.msg( res.message, { icon: 2, time: 2000, //2秒关闭(如果不配置,默认是3秒) }, function () {} ); } } ); return false; // 阻止默认 form 跳转 }); GetArea(); form.on("select(AreaSelect)", function (data) { HTML/views/QualityControl/QualityInformation.html
@@ -363,7 +363,7 @@ InspectNo: field.InspectNo, //ASNNo: field.ASNNo, LotNo: field.LotNo, //SkuNo: field.SkuNo, SkuNo: field.SkuNo, IsQualified: field.IsQualified, }; if(doing) HTML/views/QualityControl/QualityInformationFrom.html
@@ -16,32 +16,20 @@ <input type="text" name="InspectNo" placeholder="请输入检验号" lay-verify="required" autocomplete="off" class="layui-input"> </div> </div> <!-- <div class="layui-form-item"> <label class="layui-form-label">入库单号</label> <div class="layui-input-block" style="width: 70%;"> <input type="text" name="ASNNo" placeholder="请输入入库单号" autocomplete="off" class="layui-input"> </div> </div> --> <!-- <div class="layui-form-item"> <label class="layui-form-label">批次号</label> <div class="layui-input-block" style="width: 70%;"> <input type="text" name="LotNo" placeholder="请输入批次号" lay-verify="required" autocomplete="off" class="layui-input"> </div> </div> --> <div class="layui-form-item"> <label class="layui-form-label">批次号</label> <label class="layui-form-label">物料编码</label> <div class="layui-input-block" style="width: 70%;"> <select name="LotNo" id="LotNo" lay-filter="LotNo" lay-verify=""> <select name="SkuNo" id="SkuNo" lay-filter="SkuNo" lay-verify=""> <option value=""></option> </select> </div> </div> <!-- <div class="layui-form-item"> <label class="layui-form-label">物料号</label> <div class="layui-form-item"> <label class="layui-form-label">批次号</label> <div class="layui-input-block" style="width: 70%;"> <input type="text" name="SkuNo" placeholder="请输入物料号" lay-verify="required" autocomplete="off" class="layui-input"> <input type="text" name="LotNo" placeholder="请输入批次号" lay-verify="required" class="layui-input"> </div> </div> --> </div> <div class="layui-form-item"> <label class="layui-form-label">审核状态</label> <div class="layui-input-block" style="width: 70%;"> @@ -70,7 +58,6 @@ var $ = layui.$, form = layui.form, layer = layui.layer; }); //获取浏览器参数 @@ -80,15 +67,20 @@ if (r != null) return unescape(r[2]); return null; } getsku(); function getsku(res){ //获取批次下拉框信息 sendData(IP + "/BllQuality/GetLotNoList", {}, 'get', function(res) { var param = { SkuNo: $("#SkuNo").val(), }; sendData(IP + "/BllQuality/GetLotNoList", param,"post", function(res) { if (res.code == 0) { //成功 for (var i = 0; i < res.data.length; i++) { $("#LotNo").append('<option value =' + res.data[i].LotNo + '>' + res.data[i].LotNo + '</option>'); } form.render('select'); $("#SkuNo").append('<option value =' + res.data[i].SkuNo + '>' + res.data[i].SkuNo + '</option>'); }; } else { //不成功 layer.msg(res.msg, { icon: 2, @@ -96,7 +88,7 @@ }, function() {}); } }); } </script> </body> </html> HTML/views/StatisticalReport/BoxInfor.html
@@ -92,6 +92,18 @@ <input type="text" id="LotNo" name="LotNo" placeholder="批次号" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-inline zhijian"> <label class="layui-form-label" style="width: 60px;">桶状态</label> <div class="layui-input-inline" style="width: 170px; margin-right: 0px;"> <select name="PalletStatus" id="PalletStatus" lay-filter="PalletStatus" lay-search> = <option value=""></option> <option value="0">净桶</option> <option value="2">满桶</option> <option value="3">脏桶</option> </select> </div> </div> <!-- 箱码 箱支状态 检验标记 零箱标记 质量状态 --> @@ -113,17 +125,7 @@ </select> </div> </div> --> <!-- <div class="layui-inline zhijian"> <label class="layui-form-label" style="width: 60px;">抽检标记</label> <div class="layui-input-inline" style="width: 170px; margin-right: 0px;"> <select name="InspectMark" id="InspectMark" lay-filter="InspectMark" lay-search> <option value=""></option> <option value="0">否</option> <option value="1">是</option> </select> </div> </div> <!-- <div class="layui-inline zhijian"> <label class="layui-form-label" style="width: 60px;">零托标记</label> <div class="layui-input-inline" style="width: 170px; margin-right: 0px;"> @@ -198,6 +200,18 @@ </div> <!-- #endregion --> </div> <script type="text/html" id="buttonTpl"> {{# function GetBtn1(d){ var html = ''; html =`<a class="layui-btn layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-ok"></i>删除</a>`; return html; } }} {{ GetBtn1(d) }} </script> <script type="text/html" id="InspectMarkStatus"> {{# if(d.InspectMark=='0'){ }} @@ -352,14 +366,22 @@ {field: 'LockQty', title: '锁定数量', align: 'center',}, {field: 'FrozenQty', title: '冻结数量', align: 'center'}, {field: 'InspectStatus', title: '质检状态', align: 'center', templet: '#InspectStatus1'}, {field: 'UDF1', title: '所属设备编码', align: 'center'}, {field: 'UDF1', title: '所属设备编码', align: 'center'} , { field: 'caozuo', title: '操作', fixed: 'right', align: 'center', width: 205, toolbar: '#buttonTpl' } //{field: 'InspectMark', title: '抽检标记', align: 'center', templet: '#InspectMarkStatus'}, //{field: 'BitPalletMark', title: '零托标记', align: 'center', templet: '#BitPalletMarkStatus'}, ]]; var TotalColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码 //#endregion //获取托盘明细 function refreshTable(WareHouseName,AreaName,LocatNo,PalletNo,LotNo) { function refreshTable(WareHouseName,AreaName,LocatNo,PalletNo,LotNo,PalletStatus) { //#region 自定义表头 var colsJson var param1={ @@ -399,7 +421,7 @@ locatNo:LocatNo, palletNo:PalletNo, //托盘号 LotNo:LotNo, //批次号 PalletStatus:PalletStatus, }; sendData(IP + "/Statistical/GetBindList", param, 'get', function(res) { console.log(res) @@ -424,64 +446,40 @@ //#endregion } //头工具栏事件 table.on('toolbar(LAY-app-content-list)', function (obj) { var checkStatus = table.checkStatus(obj.config.id); if (obj.event == "add") { layer.open({ type: 2, title: '添加托盘库存明细', content: 'PalletAddFrom.html', maxmin: true, area: ['530px', '530px'], btn: ['确定', '取消'], yes: function(index, layero) { var iframeWindow = window['layui-layer-iframe' + index], submitID = 'layuiadmin-app-form-submit', submit = layero.find('iframe').contents().find('#' + submitID); //监听提交 iframeWindow.layui.form.on('submit(' + submitID + ')', function(data) { var field = data.field; //获取提交的字段 //提交 Ajax 成功后,静态更新表格中的数据 var param = { PalletNo:field.PalletNo,//托盘码 WareHouseNo: field.WareHouseNo, //所属仓库 AreaNo: field.AreaNo, //所属区域 LocatNo:field.LocatNo,//所属储位 PalletStatus: field.PalletStatus, //托盘类别 SkuNo:field.SkuNo, SkuName:field.SkuName, LotNo:field.LotNo }; if(doing){ doing = false; sendData(IP + "/Statistical/InsertStockDetail", param, 'post',function(res) { console.log(res); if (res.code == 0) { //成功 layer.msg(res.msg, { icon: 1, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function() { layer.close(index); //关闭弹层 refreshTable("","","","","","","","","","","","","",""); doing = true; }); } else { //不成功 layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function() {doing = true;}); table.on('tool(LAY-app-content-list)', function (obj) { var data = obj.data; console.log(data) if (obj.event === 'del') { layer.confirm('确定删除当前托盘库存?', function (index) { var param = { id: uid, StockId:data.Id }; var postUrl='/DownApi/DelStockWms' sendData(IP + postUrl, param, 'post', function (res) { console.log(res); if (res.code == 0) { //成功 layer.msg(res.msg, { icon: 1, time: 1000 //2秒关闭(如果不配置,默认是3秒) }, function () { tableIns.reload({ page: { curr: 1 } }); } }); submit.trigger('click'); } }); } else { //不成功 layer.msg(res.msg, { icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }, function () { }); } }); }); } }); }) //获取仓库下拉框信息 sendData(IP + "/Sys/GetWarehouseDic", {}, 'get', function(res) { if (res.code == 0) { //成功 @@ -534,8 +532,9 @@ var LocatNo = $("#LocatNo").val(); var PalletNo = $("#PalletNo").val(); var LotNo = $("#LotNo").val(); var PalletStatus = $("#PalletStatus").val(); refreshTable(WareHouseName,AreaName,LocatNo,PalletNo,LotNo); refreshTable(WareHouseName,AreaName,LocatNo,PalletNo,LotNo,PalletStatus); }); HTML/views/WareHouseSetting/FlatLibraryLegend.html
@@ -283,7 +283,6 @@ <table class=""> <tr> <td><button id="C1200101" value="C1200101" class="btnShow " ></button></td> <td><button id="C1200102" value="C1200102" class="btnShow " ></button></td> </tr> <tr> <td><button id="C1200201" value="C1200201" class="btnShow " ></button></td> @@ -304,7 +303,6 @@ <table class=""> <tr> <td><button id="C1400101" value="C1400101" class="btnShow " ></button></td> </tr> <tr> <td><button id="C1400201" value="C1400201" class="btnShow " ></button></td> @@ -339,108 +337,66 @@ <div class="solidDiv" style="width: 59%; height: 100%;"> <p>中间站</p> <div id="C01" style="display: flex; height: 85%;" > <div class="flesDiv" style="width: 35%;height: 100%;"> <div class="flesDiv" style="width: 65%;height: 100%;"> <table class=""> <tr> <td><button id="C0100101" value="C0100101" class="btnShow " ></button></td> <td><button id="C0100102" value="C0100102" class="btnShow " ></button></td> <td><button id="C0100103" value="C0100103" class="btnShow " ></button></td> <td><button id="C0100115" value="C0100115" class="btnShow " ></button></td> <td style="width: 30px;"></td> <td><button id="C0100116" value="C0100116" class="btnShow " ></button></td> <td style="width: 30px;"></td> <td><button id="C0100117" value="C0100117" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100118" value="C0100118" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100119" value="C0100119" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100120" value="C0100120" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100121" value="C0100121" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100122" value="C0100122" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0100201" value="C0100201" class="btnShow " ></button></td> <td><button id="C0100202" value="C0100202" class="btnShow " ></button></td> <td><button id="C0100203" value="C0100203" class="btnShow " ></button></td> <td style="height: 60px;"></td> </tr> <tr> <td><button id="C0100301" value="C0100301" class="btnShow " ></button></td> <td><button id="C0100302" value="C0100302" class="btnShow " ></button></td> <td><button id="C0100303" value="C0100303" class="btnShow " ></button></td> </tr> <tr> <td style="height: 20px;"></td> <td><button id="C0100114" value="C0100114" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100113" value="C0100113" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100112" value="C0100112" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100111" value="C0100111" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100110" value="C0100110" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100109" value="C0100109" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100108" value="C0100108" class="btnShow " ></button></td> <td style="width: 20px;"></td> <td><button id="C0100107" value="C0100107" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0100401" value="C0100401" class="btnShow " ></button></td> <td><button id="C0100402" value="C0100402" class="btnShow " ></button></td> <td><button id="C0100403" value="C0100403" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0100501" value="C0100501" class="btnShow " ></button></td> <td><button id="C0100502" value="C0100502" class="btnShow " ></button></td> <td><button id="C0100503" value="C0100503" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0100601" value="C0100601" class="btnShow " ></button></td> <td><button id="C0100602" value="C0100602" class="btnShow " ></button></td> <td><button id="C0100603" value="C0100603" class="btnShow " ></button></td> </tr> </table> </div> <div class="flesDiv" style="width: 30%;height: 100%;"> <table class="" > <tr> <td><button id="C0100701" value="C0100701" class="btnShow " ></button></td> <td><button id="C0100702" value="C0100702" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0100801" value="C0100801" class="btnShow " ></button></td> <td><button id="C0100802" value="C0100802" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0100901" value="C0100901" class="btnShow " ></button></td> <td><button id="C0100902" value="C0100902" class="btnShow " ></button></td> </tr> <tr> <td style="height: 20px;"></td> </tr> <tr> <td><button id="C0101001" value="C0101001" class="btnShow " ></button></td> <td><button id="C0101002" value="C0101002" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0101101" value="C0101101" class="btnShow " ></button></td> <td><button id="C0101102" value="C0101102" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0101201" value="C0101201" class="btnShow " ></button></td> <td><button id="C0101202" value="C0101202" class="btnShow " ></button></td> </tr> </table> </div> <div class="flesDiv" style="width: 35%;height: 100%;"> <table> <tr> <td><button id="C0101301" value="C0101301" class="btnShow " ></button></td> <td><button id="C0101302" value="C0101302" class="btnShow " ></button></td> <td><button id="C0101303" value="C0101303" class="btnShow " ></button></td> <td><button id="C0100101" value="C0100101" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0101401" value="C0101401" class="btnShow " ></button></td> <td><button id="C0101402" value="C0101402" class="btnShow " ></button></td> <td><button id="C0101403" value="C0101403" class="btnShow " ></button></td> <td><button id="C0100102" value="C0100102" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0101501" value="C0101501" class="btnShow " ></button></td> <td><button id="C0101502" value="C0101502" class="btnShow " ></button></td> <td><button id="C0101503" value="C0101503" class="btnShow " ></button></td> <td><button id="C0100103" value="C0100103" class="btnShow " ></button></td> </tr> <tr> <td style="height: 20px;"></td> <td><button id="C0100104" value="C0100104" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0101601" value="C0101601" class="btnShow " ></button></td> <td><button id="C0101602" value="C0101602" class="btnShow " ></button></td> <td><button id="C0101603" value="C0101603" class="btnShow " ></button></td> <td><button id="C0100105" value="C0100105" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0101701" value="C0101701" class="btnShow " ></button></td> <td><button id="C0101702" value="C0101702" class="btnShow " ></button></td> <td><button id="C0101703" value="C0101703" class="btnShow " ></button></td> </tr> <tr> <td><button id="C0101801" value="C0101801" class="btnShow " ></button></td> <td><button id="C0101802" value="C0101802" class="btnShow " ></button></td> <td><button id="C0101803" value="C0101803" class="btnShow " ></button></td> <td><button id="C0100106" value="C0100106" class="btnShow " ></button></td> </tr> </table> </div> @@ -459,17 +415,11 @@ <tr> <td><button id="C1800201" value="C1800201" class="btnShow " ></button></td> </tr> <tr> <td><button id="C1800301" value="C1800301" class="btnShow " ></button></td> </tr> </table> </div> <div class="flesDiv" style="width: 50%;height: 100%;"> <table class="" > <tr> <td><button id="C1800501" value="C1800501" class="btnShow " ></button></td> </tr> <tr> <td><button id="C1800601" value="C1800601" class="btnShow " ></button></td> </tr> @@ -485,11 +435,6 @@ <tr> <td><button id="C2000101" value="C2000101" class="btnShow " ></button></td> <td><button id="C2000102" value="C2000102" class="btnShow " ></button></td> </tr> <tr> <td><button id="C2000201" value="C2000201" class="btnShow " ></button></td> <td><button id="C2000202" value="C2000202" class="btnShow " ></button></td> </tr> @@ -519,6 +464,8 @@ <p>干法制粒</p> <div id="C17" class="flesDiv" style="height:85%; justify-content: space-around;"> <button id="C1700101" value="C1700101" class="btnShow " ></button> <button id="C1700201" value="C1700201" class="btnShow " ></button> </div> </div> @@ -527,8 +474,9 @@ <div class="solidDiv" style="width: 19%; height: 100%;"> <p>湿法制粒3</p> <div id="C16" class="flesDiv" style="height:85%; justify-content: space-around;"> <button id="C1600101" value="C1700101" class="btnShow " ></button> <button id="C1600201" value="C1700201" class="btnShow " ></button> <button id="C1600101" value="C1600101" class="btnShow " ></button> <button id="C1600201" value="C1600201" class="btnShow " ></button> <button id="C1600301" value="C1600301" class="btnShow " ></button> </div> </div> </div> @@ -552,6 +500,7 @@ <div id="C28" style="height:75%; display: flex; justify-content: space-around;"> <div class="flesDiv"> <button id="C2800301" value="C2800301" class="btnShow" ></button> <button id="C2800302" value="C2800302" class="btnShow" ></button> </div> <div class="flesDiv"> <table class=""> @@ -572,6 +521,7 @@ <div id="C29" style="height:75%; display: flex; justify-content: space-around;"> <div class="flesDiv"> <button id="C2900301" value="C2900301" class="btnShow" ></button> <button id="C2900302" value="C2900302" class="btnShow" ></button> </div> <div class="flesDiv"> <table class=""> @@ -592,6 +542,7 @@ <div id="C30" style="height:75%; display: flex; justify-content: space-around;"> <div class="flesDiv"> <button id="C3000301" value="C3000301" class="btnShow" ></button> <button id="C3000302" value="C3000302" class="btnShow" ></button> </div> <div class="flesDiv"> <table class=""> @@ -612,6 +563,7 @@ <div id="C34" style="height:75%; display: flex; justify-content: space-around;"> <div class="flesDiv"> <button id="C3400301" value="C3400301" class="btnShow" ></button> <button id="C3400302" value="C3400302" class="btnShow" ></button> </div> <div class="flesDiv"> <table class=""> @@ -632,6 +584,7 @@ <div id="C35" style="height:75%; display: flex; justify-content: space-around;"> <div class="flesDiv"> <button id="C3500301" value="C3500301" class="btnShow" ></button> <button id="C3500302" value="C3500302" class="btnShow" ></button> </div> <div class="flesDiv"> <table class=""> @@ -652,6 +605,7 @@ <div id="C36" style="height:75%; display: flex; justify-content: space-around;"> <div class="flesDiv"> <button id="C3600301" value="C3600301" class="btnShow" ></button> <button id="C3600302" value="C3600302" class="btnShow" ></button> </div> <div class="flesDiv"> <table class=""> @@ -672,6 +626,7 @@ <div id="C37" style="height:75%; display: flex; justify-content: space-around;"> <div class="flesDiv"> <button id="C3700301" value="C3700301" class="btnShow" ></button> <button id="C3700302" value="C3700302" class="btnShow" ></button> </div> <div class="flesDiv"> <table class=""> @@ -697,13 +652,12 @@ <div id="C43" class="flesDiv" style="height:85%; justify-content: space-around;"> <table class=""> <tr> <td class="btnShow"></td> <td><button id="C4300201" value="C4300201" class="btnShow " ></button></td> <td><button id="C4300202" value="C4300202" class="btnShow " ></button></td> <!-- <td><button id="C4300302" value="C4300302" class="btnShow " ></button></td> --> </tr> <tr> <td><button id="C4300101" value="C4300101" class="btnShow " ></button></td> <td><button id="C4300201" value="C4300201" class="btnShow " ></button></td> <td><button id="C4300102" value="C4300102" class="btnShow " ></button></td> <!-- <td><button id="C4300301" value="C4300301" class="btnShow " ></button></td> --> </tr> @@ -796,11 +750,11 @@ <p>投料区6</p> <div id="C48" class="flesDiv" style="height:85%; justify-content: space-around;"> <table class=""> <tr> <!-- <tr> <td><button id="C4800102" value="C4800102" class="btnShow " ></button></td> <td><button id="C4800202" value="C4800202" class="btnShow " ></button></td> <!-- <td><button id="C4800302" value="C4800302" class="btnShow " ></button></td> --> </tr> <td><button id="C4800302" value="C4800302" class="btnShow " ></button></td> </tr> --> <tr> <td><button id="C4800101" value="C4800101" class="btnShow " ></button></td> <td><button id="C4800201" value="C4800201" class="btnShow " ></button></td> @@ -815,11 +769,11 @@ <p>投料区7</p> <div id="C49" class="flesDiv" style="height:85%; justify-content: space-around;"> <table class=""> <tr> <!-- <tr> <td><button id="C4900102" value="C4900102" class="btnShow " ></button></td> <td><button id="C4900202" value="C4900202" class="btnShow " ></button></td> <!-- <td><button id="C4900302" value="C4900302" class="btnShow " ></button></td> --> </tr> <td><button id="C4900302" value="C4900302" class="btnShow " ></button></td> </tr> --> <tr> <td><button id="C4900101" value="C4900101" class="btnShow " ></button></td> <td><button id="C4900201" value="C4900201" class="btnShow " ></button></td> @@ -834,11 +788,11 @@ <p>投料区8</p> <div id="C50" class="flesDiv" style="height:85%; justify-content: space-around;"> <table class=""> <tr> <!-- <tr> <td><button id="C5000102" value="C5000102" class="btnShow " ></button></td> <td><button id="C5000202" value="C5000202" class="btnShow " ></button></td> <!-- <td><button id="C5000302" value="C5000302" class="btnShow " ></button></td> --> </tr> <td><button id="C5000302" value="C5000302" class="btnShow " ></button></td> </tr> --> <tr> <td><button id="C5000101" value="C5000101" class="btnShow " ></button></td> <td><button id="C5000201" value="C5000201" class="btnShow " ></button></td> @@ -1015,39 +969,15 @@ <div style="width: 80%; height: 100%;"> <div class="flesDiv" style="width: 100%; height: 25%;"> <table> <!-- <tr> <td><button id="C2400104" value="C2400104" class="btnShow1 " ></button></td> <td><button id="C2400204" value="C2400204" class="btnShow1 " ></button></td> <td><button id="C2400304" value="C2400304" class="btnShow1 " ></button></td> <td><button id="C2400404" value="C2400404" class="btnShow1 " ></button></td> <td><button id="C2400504" value="C2400504" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2400704" value="C2400704" class="btnShow1 " ></button></td> <td><button id="C2400804" value="C2400804" class="btnShow1 " ></button></td> <td><button id="C2400904" value="C2400904" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2401104" value="C2401104" class="btnShow1 " ></button></td> <td><button id="C2401204" value="C2401204" class="btnShow1 " ></button></td> <td><button id="C2401304" value="C2401304" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2401504" value="C2401504" class="btnShow1 " ></button></td> <td><button id="C2401604" value="C2401604" class="btnShow1 " ></button></td> <td><button id="C2401704" value="C2401704" class="btnShow1 " ></button></td> <td><button id="C2401804" value="C2401804" class="btnShow1 " ></button></td> <td><button id="C2401904" value="C2401904" class="btnShow1 " ></button></td> </tr> --> <tr> <td><button id="C2400103" value="C2400103" class="btnShow1 " ></button></td> <td><button id="C2400203" value="C2400203" class="btnShow1 " ></button></td> <td><button id="C2400303" value="C2400303" class="btnShow1 " ></button></td> <td><button id="C2400403" value="C2400403" class="btnShow1 " ></button></td> <td><button id="C2400503" value="C2400503" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2400703" value="C2400703" class="btnShow1 " ></button></td> <td><button id="C2400803" value="C2400803" class="btnShow1 " ></button></td> <td><button id="C2400903" value="C2400903" class="btnShow1 " ></button></td> <td><button id="C2401002" value="C2401002" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2401103" value="C2401103" class="btnShow1 " ></button></td> <td><button id="C2401203" value="C2401203" class="btnShow1 " ></button></td> <td><button id="C2401303" value="C2401303" class="btnShow1 " ></button></td> @@ -1063,16 +993,14 @@ <td><button id="C2400202" value="C2400202" class="btnShow1 " ></button></td> <td><button id="C2400302" value="C2400302" class="btnShow1 " ></button></td> <td><button id="C2400402" value="C2400402" class="btnShow1 " ></button></td> <td><button id="C2400502" value="C2400502" class="btnShow1 " ></button></td> <td><button id="C2400602" value="C2400602" class="btnShow1 " ></button></td> <td><button id="C2400702" value="C2400702" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2400802" value="C2400802" class="btnShow1 " ></button></td> <td><button id="C2400902" value="C2400902" class="btnShow1 " ></button></td> <td><button id="C2401001" value="C2401001" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2401102" value="C2401102" class="btnShow1 " ></button></td> <td><button id="C2401202" value="C2401202" class="btnShow1 " ></button></td> <td><button id="C2401302" value="C2401302" class="btnShow1 " ></button></td> <td><button id="C2401402" value="C2401402" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2401502" value="C2401502" class="btnShow1 " ></button></td> <td><button id="C2401602" value="C2401602" class="btnShow1 " ></button></td> <td><button id="C2401702" value="C2401702" class="btnShow1 " ></button></td> @@ -1084,16 +1012,14 @@ <td><button id="C2400201" value="C2400201" class="btnShow1 " ></button></td> <td><button id="C2400301" value="C2400301" class="btnShow1 " ></button></td> <td><button id="C2400401" value="C2400401" class="btnShow1 " ></button></td> <td><button id="C2400501" value="C2400501" class="btnShow1 " ></button></td> <td><button id="C2400601" value="C2400601" class="btnShow1 " ></button></td> <td><button id="C2400701" value="C2400701" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2400801" value="C2400801" class="btnShow1 " ></button></td> <td><button id="C2400901" value="C2400901" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td class="btnShow1"></td> <td><button id="C2401101" value="C2401101" class="btnShow1 " ></button></td> <td><button id="C2401201" value="C2401201" class="btnShow1 " ></button></td> <td><button id="C2401301" value="C2401301" class="btnShow1 " ></button></td> <td><button id="C2401401" value="C2401401" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2401501" value="C2401501" class="btnShow1 " ></button></td> <td><button id="C2401601" value="C2401601" class="btnShow1 " ></button></td> <td><button id="C2401701" value="C2401701" class="btnShow1 " ></button></td> @@ -1152,7 +1078,7 @@ <td><button id="C2402201" value="C2402201" class="btnShow1 " ></button></td> <td><button id="C2402301" value="C2402301" class="btnShow1 " ></button></td> <td><button id="C2402401" value="C2402401" class="btnShow1 " ></button></td> <td><button id="C2402501" value="C2402501" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2402601" value="C2402601" class="btnShow1 " ></button></td> <td><button id="C2402701" value="C2402701" class="btnShow1 " ></button></td> <td><button id="C2402801" value="C2402801" class="btnShow1 " ></button></td> @@ -1171,27 +1097,7 @@ </div> <div class="flesDiv" style="width: 100%; height: 25%;"> <table> <!-- <tr> <td><button id="C2403904" value="C2403904" class="btnShow1 " ></button></td> <td><button id="C2404004" value="C2404004" class="btnShow1 " ></button></td> <td><button id="C2404104" value="C2404104" class="btnShow1 " ></button></td> <td><button id="C2404204" value="C2404204" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2404401" value="C2404401" class="btnShow1 " ></button></td> <td><button id="C2404604" value="C2404604" class="btnShow1 " ></button></td> <td><button id="C2404704" value="C2404704" class="btnShow1 " ></button></td> <td><button id="C2404804" value="C2404804" class="btnShow1 " ></button></td> <td><button id="C2404904" value="C2404904" class="btnShow1 " ></button></td> <td><button id="C2405004" value="C2405004" class="btnShow1 " ></button></td> <td><button id="C2405104" value="C2405104" class="btnShow1 " ></button></td> <td><button id="C2405203" value="C2405203" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2405404" value="C2405404" class="btnShow1 " ></button></td> <td><button id="C2405504" value="C2405504" class="btnShow1 " ></button></td> <td><button id="C2405604" value="C2405604" class="btnShow1 " ></button></td> <td><button id="C2405704" value="C2405704" class="btnShow1 " ></button></td> <td><button id="C2405804" value="C2405804" class="btnShow1 " ></button></td> </tr> --> <tr> <td><button id="C2403903" value="C2403903" class="btnShow1 " ></button></td> <td><button id="C2404003" value="C2404003" class="btnShow1 " ></button></td> @@ -1219,16 +1125,15 @@ <td><button id="C2404102" value="C2404102" class="btnShow1 " ></button></td> <td><button id="C2404202" value="C2404202" class="btnShow1 " ></button></td> <td><button id="C2404302" value="C2404302" class="btnShow1 " ></button></td> <td><button id="C2404502" value="C2404502" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2404602" value="C2404602" class="btnShow1 " ></button></td> <td><button id="C2404702" value="C2404702" class="btnShow1 " ></button></td> <td><button id="C2404802" value="C2404802" class="btnShow1 " ></button></td> <td><button id="C2404902" value="C2404902" class="btnShow1 " ></button></td> <td><button id="C2405002" value="C2405002" class="btnShow1 " ></button></td> <td><button id="C2405102" value="C2405102" class="btnShow1 " ></button></td> <td><button id="C2405201" value="C2405201" class="btnShow1 " ></button></td> <td><button id="C2405302" value="C2405302" class="btnShow1 " ></button></td> <td><button id="C2405201" value="C2405201" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2405402" value="C2405402" class="btnShow1 " ></button></td> <td><button id="C2405502" value="C2405502" class="btnShow1 " ></button></td> <td><button id="C2405602" value="C2405602" class="btnShow1 " ></button></td> @@ -1241,8 +1146,7 @@ <td><button id="C2404101" value="C2404101" class="btnShow1 " ></button></td> <td><button id="C2404201" value="C2404201" class="btnShow1 " ></button></td> <td><button id="C2404301" value="C2404301" class="btnShow1 " ></button></td> <td><button id="C2404501" value="C2404501" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2404601" value="C2404601" class="btnShow1 " ></button></td> <td><button id="C2404701" value="C2404701" class="btnShow1 " ></button></td> <td><button id="C2404801" value="C2404801" class="btnShow1 " ></button></td> @@ -1250,7 +1154,7 @@ <td><button id="C2405001" value="C2405001" class="btnShow1 " ></button></td> <td><button id="C2405101" value="C2405101" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2405301" value="C2405301" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2405401" value="C2405401" class="btnShow1 " ></button></td> <td><button id="C2405501" value="C2405501" class="btnShow1 " ></button></td> <td><button id="C2405601" value="C2405601" class="btnShow1 " ></button></td> @@ -1280,14 +1184,13 @@ <td><button id="C2407403" value="C2407403" class="btnShow1 " ></button></td> <td><button id="C2407503" value="C2407503" class="btnShow1 " ></button></td> <td><button id="C2407603" value="C2407603" class="btnShow1 " ></button></td> <td><button id="C2407703" value="C2407703" class="btnShow1 " ></button></td> </tr> <tr> <td><button id="C2405902" value="C2405902" class="btnShow1 " ></button></td> <td><button id="C2406002" value="C2406002" class="btnShow1 " ></button></td> <td><button id="C2406102" value="C2406102" class="btnShow1 " ></button></td> <td><button id="C2406202" value="C2406202" class="btnShow1 " ></button></td> <td><button id="C2406302" value="C2406302" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td class="btnShow1"></td> <td><button id="C2406502" value="C2406502" class="btnShow1 " ></button></td> <td><button id="C2406602" value="C2406602" class="btnShow1 " ></button></td> @@ -1301,15 +1204,14 @@ <td><button id="C2407402" value="C2407402" class="btnShow1 " ></button></td> <td><button id="C2407502" value="C2407502" class="btnShow1 " ></button></td> <td><button id="C2407602" value="C2407602" class="btnShow1 " ></button></td> <td><button id="C2407702" value="C2407702" class="btnShow1 " ></button></td> </tr> <tr> <td><button id="C2405901" value="C2405901" class="btnShow1 " ></button></td> <td><button id="C2406001" value="C2406001" class="btnShow1 " ></button></td> <td><button id="C2406101" value="C2406101" class="btnShow1 " ></button></td> <td><button id="C2406201" value="C2406201" class="btnShow1 " ></button></td> <td><button id="C2406301" value="C2406301" class="btnShow1 " ></button></td> <td><button id="C2406401" value="C2406401" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td class="btnShow1"></td> <td><button id="C2406501" value="C2406501" class="btnShow1 " ></button></td> <td><button id="C2406601" value="C2406601" class="btnShow1 " ></button></td> <td><button id="C2406701" value="C2406701" class="btnShow1 " ></button></td> @@ -1317,12 +1219,11 @@ <td><button id="C2406901" value="C2406901" class="btnShow1 " ></button></td> <td><button id="C2407001" value="C2407001" class="btnShow1 " ></button></td> <td><button id="C2407101" value="C2407101" class="btnShow1 " ></button></td> <td><button id="C2407201" value="C2407201" class="btnShow1 " ></button></td> <td class="btnShow1"></td> <td><button id="C2407301" value="C2407301" class="btnShow1 " ></button></td> <td><button id="C2407401" value="C2407401" class="btnShow1 " ></button></td> <td><button id="C2407501" value="C2407501" class="btnShow1 " ></button></td> <td><button id="C2407601" value="C2407601" class="btnShow1 " ></button></td> <td><button id="C2407701" value="C2407701" class="btnShow1 " ></button></td> </tr> </table> </div> HTML/views/WareHouseSetting/Locate.html
@@ -109,12 +109,12 @@ <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索 </button> </div> <div class="layui-inline"> <!-- <div class="layui-inline"> <button style="margin-right: 10px;" class="layui-btn layui-btn-normal layui-btn-sm layuiadmin-btn-list editClass" data-type="editList" id="approvalBtn"> <i class="layui-icon layui-icon-edit layuiadmin-button-btn"> </i>批量编辑 </button> </div> </div> --> </div> </div> <div id="center"></div> HTML/views/WareHouseSetting/Pallets.html
@@ -164,7 +164,7 @@ default: return ""; } } } }, { field: 'CreateUserName', title: '创建人', @@ -251,7 +251,7 @@ var param = { PalletNo:field.StockCode, LocatNo:field.LocatNo, DeviceCode:field.DeviceCode DeviceCode:field.Status }; synData(IP + "/Sys/AddPallets", param, 'post', function(res) { console.log(res); HTML/views/WareHouseSetting/PalletsPrintFrom.html
@@ -13,23 +13,28 @@ <div class="layui-form" lay-filter="layuiadmin-app-form-list" id="layuiadmin-app-form-list" style="padding: 20px 30px 0 0;"> <div class="layui-form-item"> <label class="layui-form-label">桶号</label> <div class="layui-input-block"> <div class="layui-input-block" style="width: 70%;"> <input type="text" name="StockCode" placeholder="请输入桶号" lay-verify="required" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">储位地址</label> <div class="layui-input-block"> <div class="layui-input-block" style="width: 70%;"> <input type="text" name="LocatNo" placeholder="请输入储位地址" lay-verify="required" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">桶规格(L)</label> <div class="layui-input-block"> <input type="text" name="DeviceCode" placeholder="请输入桶规格" lay-verify="required" autocomplete="off" class="layui-input"> </div> </div> <label class="layui-form-label">桶类型</label> <div class="layui-input-block" style="width: 70%;"> <select name="Status" id="Status" lay-verify=""> <option value=""></option> <option value="0">净桶</option> <option value="3">脏桶</option> </select> </div> </div> <div class="layui-form-item layui-hide"> <input type="button" lay-submit lay-filter="layuiadmin-app-form-submit" id="layuiadmin-app-form-submit" value="确认添加"> <input type="button" lay-submit lay-filter="layuiadmin-app-form-edit" id="layuiadmin-app-form-edit" value="确认编辑"> </div> Wms/Model/InterFaceModel/HopperTransportModel.cs
@@ -22,6 +22,13 @@ public decimal Weight { get; set; } } public class PointTask { public string ID { get; set; } public string BeginPoint { get; set; } public string EndPoint { get; set; } } } Wms/Model/InterFaceModel/HttpModel.cs
@@ -1,5 +1,6 @@ using System; using System.Collections.Generic; using System.Data; using System.Text; namespace Model.InterFaceModel @@ -592,64 +593,6 @@ } /// <summary> /// 取消任务 /// </summary> public class AgvCancelTask { /// <summary> /// 请求编号,每个请求都要一个唯一编号, 同一个请求重复提交, 使用同一编号。 /// 是否必填:是 /// </summary> public string ReqCode { get; set; } /// <summary> /// 请求时间截 /// 格式: “yyyy-MM-dd HH:mm:ss”。 /// 是否必填:否 /// </summary> public string ReqTime { get; set; } /// <summary> /// 客户端编号,如 PDA,HCWMS 等。 /// 是否必填:否 /// </summary> public string ClientCode { get; set; } /// <summary> /// 令牌号, 由调度系统颁发。 由RCS-2000 告知上层系统 /// 是否必填:否 /// </summary> public string TokenCode { get; set; } /// <summary> /// 取消类型 /// 0 表示:取消后货架直接放地上 /// 1 表示:AGV 仍然背着货架, 根据回库区域执行回库指令, 只有潜伏车和 CTU 车支持。 /// 若不传值,默认的取消模式为 0 /// 是否必填:否 /// </summary> public string ForceCancel { get; set; } /// <summary> /// forcecancel=1 时有意义,回库区域编号,如果为空,采用货架配置的库区。 /// 是否必填:否 /// </summary> public string MatterArea { get; set; } /// <summary> /// 取消该 AGV 正在执行的任务单 /// 是否必填:否 /// </summary> public string AgvCode { get; set; } /// <summary> /// 任务单编号, 取消该任务单 /// 是否必填:否 /// </summary> public string TaskCode { get; set; } } /// <summary> /// 任务完成通知参数 /// </summary> public class AgvTaskDto @@ -683,6 +626,12 @@ public ExtraModelView values { get; set; } } public class AgvCancelTask { public string robotTaskCode { get; set; } public string cancelType { get; set; } } /// <summary> Wms/Model/ModelVm/DataVm/DataStockInfoVM.cs
@@ -193,4 +193,13 @@ /// </summary> public int? UpdateUser { get; set; } } public class DelStockInfo { /// <summary> /// Desc:库存明细ID /// Default: /// Nullable:False /// </summary> public int StockId { get; set; } } } Wms/Utility/Tools/RcsHelper.cs
@@ -29,7 +29,7 @@ switch (taskDetial.Crtype) { case "1": //叫桶 tasktype = "F12"; tasktype = "F16"; break; case "2": //叫车 tasktype = "F12"; @@ -43,13 +43,11 @@ default: break; } //跨楼层任务tasktype值赋值…… if (taskDetial.Endport.Substring(0,3) == "C01") //取净桶跨楼层任务tasktype值赋值 if (taskDetial.Endport.Substring(0,3) == "C01" && taskDetial.Startport.Substring(0,1) == "1") { tasktype = "F23"; } List<targetRoute> pahtList = new List<targetRoute>(); //起始位置 @@ -165,10 +163,10 @@ // 正式运行程序放开 var jsonData = JsonConvert.SerializeObject(carrierInfo); string response = HttpHelper.DoPost(url, jsonData, "下发给AGV绑定载具命令", "AGV", key); string response = HttpHelper.DoPost(url, jsonData, "下发给AGV解除绑定载具命令", "AGV", key); //解析返回数据 var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); if (agvModel.Code == "0") if (agvModel.Code == "SUCCESS") { result = true;//给下车下发任务成功 Wms/WMS.BLL/BllQualityServer/QualityInspectServer.cs
@@ -96,6 +96,11 @@ throw new Exception("质检号不可为空,请核查!"); } //验证批次号是否为空 if (string.IsNullOrEmpty(model.SkuNo)) { throw new Exception("物料编码不可为空,请核查!"); } //验证批次号是否为空 if (string.IsNullOrEmpty(model.LotNo)) { throw new Exception("批次号不可为空,请核查!"); @@ -103,14 +108,17 @@ model.Origin = "WMS"; //来源 model.CreateTime = Db.GetDate(); //创建日期 model.SkuNo = ""; //物料号 model.SkuName = ""; //物料名称 model.PassQty = 0; //合格数量 model.FailQty = 0; //不合格数量 model.Standard = ""; //规格 //查找库存明细信息 List<DataStockDetail> detail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.LotNo == model.LotNo).ToList(); List<DataStockDetail> detail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == model.SkuNo && m.LotNo == model.LotNo).ToList(); if (detail.Count == 0) { throw new Exception("未找到当前物料当前批次的库存"); } foreach (var item in detail) { //判断合格状态是否合格 @@ -151,6 +159,34 @@ throw new Exception(ex.Message); } } /// <summary> /// 获取库存批次号集合 /// </summary> /// <returns></returns> /// <exception cref="Exception"></exception> public List<DataStockDetail> GetLotNoList(string skuNo) { try { string str = "select skuNo from DataStockDetail where isDel = '0'"; if (!string.IsNullOrEmpty(skuNo)) { str += " and skuNo = @skuNo"; } str += " group by skuNo"; List<DataStockDetail> skulist = Db.Ado.SqlQuery<DataStockDetail>(str, new { SkuNo = "%" + skuNo + "%", //物料号 }); return skulist; } catch (Exception ex) { throw new Exception(ex.Message); } } #endregion } Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs
@@ -240,6 +240,7 @@ { throw new Exception("满桶请选择物料与批次"); } //判断目标叫料储位状态 var endLocateInfo = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == endLocate && m.AreaNo == areaNo); if (endLocateInfo == null) @@ -274,7 +275,12 @@ { if (house.WareHouseNo == "M01") { stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.Status == "0" && m.PalletStatus == "0" && m.Standard == standard && !string.IsNullOrWhiteSpace(m.LocatNo)).OrderBy(m => m.LocatNo).ToList(); stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.Status == "0" && m.PalletStatus == "0" && m.WareHouseNo == "M01" && m.Standard == standard && !string.IsNullOrWhiteSpace(m.LocatNo)).OrderBy(m => m.LocatNo).ToList(); if (stockDetail.Count() == 0) { stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.Status == "0" && m.PalletStatus == "0" && m.Standard == standard && !string.IsNullOrWhiteSpace(m.LocatNo)).OrderBy(m => m.LocatNo).ToList(); } } else { @@ -285,7 +291,8 @@ //满桶 else if (plnStatus == "2") { stockDetail = stockDetail.Where(m => m.PalletStatus == "2" && m.SkuNo == skuNo && m.LotNo == lotNo).OrderBy(m => m.LocatNo).ToList(); stockDetail = stockDetail.Where(m => m.PalletStatus == "2" && m.SkuNo == skuNo && m.LotNo == lotNo && m.InspectStatus == "1").OrderBy(m => m.LocatNo).ToList(); } else { @@ -305,25 +312,45 @@ //目标仓库所有储位 var locatList = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Flag=="0" && w.WareHouseNo == house.WareHouseNo).OrderBy(w=>w.Column).ToList(); //目标仓库所有最外侧的储位 var locatListWai = locatList.Where(w => string.IsNullOrEmpty(w.AisleOne)).Select(s => s.LocatNo); //先找不需要移库的桶 var palletModel = stockDetail.Where(w => locatListWai.Contains(w.LocatNo) && w.Status == "0").OrderByDescending(w => w.UpdateTime).FirstOrDefault(); if (palletModel == null) var locatListWai = locatList.Where(w => string.IsNullOrEmpty(w.AisleOne) && w.Flag == "0").Select(s => s.LocatNo); var locatListNei = locatList.Where(w => !string.IsNullOrEmpty(w.AisleOne) && w.Flag == "0").Select(s => s.LocatNo); var palletModel = new DataStockDetail(); if (plnStatus == "0") //净桶获取库位 { //找需要移库的桶 palletModel= stockDetail.Where(w => !locatListWai.Contains(w.LocatNo)).OrderByDescending(w => w.UpdateTime).FirstOrDefault(); //先找不需要移库的桶 palletModel = stockDetail.Where(w => locatListWai.Contains(w.LocatNo) && w.Status == "0" && w.Standard == standard).OrderByDescending(w => w.UpdateTime).FirstOrDefault(); if (palletModel == null) { throw new Exception("未找到对应桶信息"); //找需要移库的桶 palletModel = stockDetail.Where(w => locatListNei.Contains(w.LocatNo) && w.Standard == standard).OrderByDescending(w => w.UpdateTime).FirstOrDefault(); if (palletModel == null) { throw new Exception("未找到对应桶信息"); } resultYi = YikuTask(palletModel.PalletNo, taskNo, url, bindUrl); } resultYi = YikuTask(palletModel.PalletNo, taskNo, url,bindUrl); } else //满桶获取库位 { //先找不需要移库的桶 palletModel = stockDetail.Where(w => locatListWai.Contains(w.LocatNo) && w.Status == "0").OrderByDescending(w => w.UpdateTime).FirstOrDefault(); if (palletModel == null) { //找需要移库的桶 palletModel = stockDetail.Where(w => locatListNei.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); var startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletModel.LocatNo); if (startLoction == null) { throw new Exception($"起始目标储位信息不存在,桶号:{palletModel.LocatNo}"); @@ -332,6 +359,12 @@ if (resultYi) { taskNo = taskNo + "-1"; } //检验当前托盘是否有任务未完成 var checkTask = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "1" || w.Status == "0") && w.PalletNo == palletModel.PalletNo); if (checkTask != null) { throw new Exception("当前托盘有正在执行的任务!"); } //添加任务 var logTaskEntry = new LogTask @@ -430,8 +463,8 @@ { try { string type = "1";//叫料模板 #region 判断 if (string.IsNullOrWhiteSpace(areaNo) || string.IsNullOrWhiteSpace(StartLocate) || string.IsNullOrWhiteSpace(plnStatus)) { throw new Exception("区域/起始位/桶类型不能为空"); @@ -480,6 +513,10 @@ //目标楼层 var layer = startLoction.Layer; var houseStr = layer == 3 ? "3楼中间站" : layer == 4 ? "4楼中间站" : ""; if (layer == 3 && plnStatus == "2") { type = "2"; } //通过仓库名称查询仓库信息 var house = Db.Queryable<SysWareHouse>().First(m => m.IsDel == "0" && m.WareHouseName == houseStr); if (house == null) @@ -516,7 +553,7 @@ Status = "2", InspectMark = "0", BitPalletMark = "0", InspectStatus = "1", InspectStatus = "0", }; Db.Updateable(stockDetailNew).ExecuteCommand(); } @@ -538,7 +575,12 @@ { throw new Exception("没有找到合适的目标储位"); } //检验当前托盘是否有任务未完成 var checkTask = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "1" || w.Status == "0") && w.PalletNo == plnNo); if (checkTask != null) { throw new Exception("当前托盘有正在执行的任务!"); } var taskNo = new Common().GetMaxNo("TK"); //添加任务 var logTaskEntry = new LogTask @@ -569,7 +611,7 @@ Startport = StartLocate,//起始位置 Endport = endLocatInfo.LocatNo,//目标位置 Pallno = plnNo,//桶号 Crtype = "1",//叫桶 Crtype = type,//叫车模板 }; //调用AGV接口下发任务 string agvMsg = string.Empty; @@ -678,19 +720,37 @@ { throw new Exception($"起始储位信息不存在"); } startLocatInfo.Status = "0";//空储位 //修改起始储位状态 Db.Updateable(startLocatInfo).ExecuteCommand(); //startLocatInfo.Status = "0";//空储位 ////修改起始储位状态 //Db.Updateable(startLocatInfo).ExecuteCommand(); //目标储位信息 //任务表中目标储位信息 var endLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0"); if (endLocatInfo == null) { throw new Exception($"目标储位信息不存在"); } //AGV小车返回实际存放目标储位 var trueLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == locateNo && w.IsDel == "0"); if (trueLocatInfo == null) { throw new Exception($"小车放货储位信息不存在"); } if (endLocatInfo.LocatNo != trueLocatInfo.LocatNo) { //不一致时以小车放货储位为准 endLocatInfo = trueLocatInfo; //var tasklocat = Db.Queryable<LogTask>().First(w => w.EndLocat == trueLocatInfo.LocatNo && (w.Status == "0" || w.Status == "1") && w.IsDel == "0"); //if (tasklocat == null) //{ // trueLocatInfo.Status = "0"; // Db.Updateable(trueLocatInfo).ExecuteCommand(); //} } //修改目标储位状态 endLocatInfo.Status = "1";//有物品 endLocatInfo.UpdateTime = DateTime.Now;//更新时间 //修改目标储位状态 Db.Updateable(endLocatInfo).ExecuteCommand(); //目标储位所属区域 @@ -817,6 +877,7 @@ var startLoction = new SysStorageLocat();//起始储位信息 var endLoction = new SysStorageLocat();//目标储位信息 var palletModel = new DataStockDetail();//分配桶信息 string locatno = ""; string type = "";//叫料类型 //开启事务 @@ -847,22 +908,26 @@ { //有脏桶的话,将更改此桶状态(代表此桶正在清洗中) var qxStock = Db.Queryable<DataStockDetail>().Where(w => w.LocatNo == endLoction.LocatNo).First(); if (qxStock == null) { throw new Exception("叫料位置状态错误"); } qxStock.Status = "2"; qxStock.UpdateTime = DateTime.Now;//清洗时间 //qxStock.UpdateTime = DateTime.Now;//清洗时间 Db.Updateable(qxStock).ExecuteCommand(); //更改设备储位状态为空储位 endLoction.Status = "0"; Db.Updateable(endLoction).ExecuteCommand(); } //优先查找脏桶缓存车间 palletModel = stockDetail.Where(w => w.AreaNo == "C54").FirstOrDefault(); palletModel = stockDetail.Where(w => w.AreaNo == "C54").OrderByDescending(w => w.UpdateTime).FirstOrDefault(); if (palletModel == null)//脏桶缓存车间没有脏桶,再从三楼中间站脏桶区查找 { palletModel = stockDetail.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C26").FirstOrDefault(); palletModel = stockDetail.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C26").OrderByDescending(w => w.UpdateTime).FirstOrDefault(); } if (palletModel == null)//三楼中间站脏桶区没有脏桶,再从四楼中间站脏桶区查找 { palletModel = stockDetail.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C03").FirstOrDefault(); palletModel = stockDetail.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C03").OrderByDescending(w => w.UpdateTime).FirstOrDefault(); } if (palletModel == null) { @@ -875,7 +940,7 @@ throw new Exception($"起始目标储位信息不存在,桶号:{palletModel.LocatNo}"); } //起始桶信息 var startDataDetil = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.Status == "0" && w.PalletStatus == "3"); var startDataDetil = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.Status == "0" && w.PalletStatus == "3" && w.PalletNo == palletModel.PalletNo); if (startDataDetil == null) { throw new Exception($"清洗机所叫的桶状态错误,桶号:{palletModel.LocatNo}"); @@ -898,7 +963,7 @@ 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(); palletModel = Db.Queryable<DataStockDetail>().Where(w => w.LocatNo == locate).OrderBy(o => o.UpdateTime).First(); if (palletModel == null) { throw new Exception("未找到库存中正在清洗的脏桶"); @@ -918,20 +983,55 @@ { 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)//四楼中间站净桶区没有空储位,再从三楼中间站净桶区查找 //首先查找是否已有同规格同巷道的空位 var pallnoStorage = Db.Queryable<DataStockDetail>().Where(w => w.Standard == palletModel.Standard && w.PalletStatus == "0" && w.Status == "0").OrderBy(o => o.UpdateTime).ToList(); if (pallnoStorage.Count()>0) { endLoction = jtLocate.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C24") .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault(); foreach (var item in pallnoStorage) { //获取巷道列,查找列中空储位 var pallnoRow = Db.Queryable<SysStorageLocat>().Where(w => w.LocatNo == item.LocatNo).First(); endLoction = jtLocate.Where(w => w.AreaNo == pallnoRow.AreaNo && w.Row == pallnoRow.Row && w.Status == "0" && w.Flag == "0" && w.Column<pallnoRow.Column).FirstOrDefault(); if (endLoction == null) { continue; } else { locatno = endLoction.LocatNo; break; } } } if (endLoction == null)//三楼中间站净桶区没有空储位,再从三楼清洗间缓存区查找 PS:小车现在还不支持清洗机直接送往4楼净桶区 if (palletModel.Standard != "400L" && string.IsNullOrEmpty(locatno)) { //优先分配四楼中间站净桶区 endLoction = jtLocate.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C01") .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault(); if (endLoction != null) { locatno = endLoction.LocatNo; } } if (string.IsNullOrEmpty(locatno)) { endLoction = jtLocate.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C24") .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault(); if (endLoction != null) { locatno = endLoction.LocatNo; } } if (string.IsNullOrEmpty(locatno))//三楼中间站净桶区没有空储位,再从三楼清洗间缓存区查找 { endLoction = jtLocate.Where(w => w.WareHouseNo == "M44" && w.AreaNo == "C55") .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault(); if (endLoction != null) { locatno = endLoction.LocatNo; } } if (endLoction == null) if (string.IsNullOrEmpty(locatno)) { throw new Exception("未查询到合适储位"); } @@ -952,7 +1052,12 @@ throw new Exception("叫料点位异常"); } //检验当前托盘是否有任务未完成 var checkTask = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "1" || w.Status == "0") && w.PalletNo == palletModel.PalletNo); if (checkTask != null) { throw new Exception("当前托盘有正在执行的任务!"); } var taskNo = new Common().GetMaxNo("TK"); //添加任务 var logTaskEntry = new LogTask @@ -1009,6 +1114,25 @@ endLoction.Status = "2";//入库中 Db.Updateable(endLoction).ExecuteCommand(); //净桶申请成功后判断当前清洗机上是否还有桶,没有桶则清空清洗机入口工位状态 if (deviceStation == "output") { var rlocat = palletModel.LocatNo == "1002" ? "1001" : "1003"; //判断有没有正在执行的到清洗机入口的任务 var tasklist = Db.Queryable<LogTask>().First(w => w.EndLocat == rlocat && (w.Status == "0" && w.Status == "1")); if (tasklist == null) { var stocklist = Db.Queryable<DataStockDetail>().First(w => w.LocatNo == rlocat); if (stocklist == null) { var rdecive = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == rlocat); rdecive.Status = "0"; Db.Updateable(rdecive).ExecuteCommand(); } } } } else//失败 { @@ -1075,6 +1199,18 @@ { throw new Exception("要移库的桶有正在执行的任务,请稍后再试"); } //判断要移库的桶外侧是否有桶 var locatInfoYi = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletInfoYi.LocatNo); if (locatInfo == null) { throw new Exception("未查询到要移库的桶所在的储位信息"); } var palletInfoYi2 = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == locatInfoYi.AisleOne); if (palletInfoYi2 != null) { throw new Exception("所要叫料的桶无法进行移库,请联系管理员进行手动移桶"); } #region#给要移库的桶先移到中转储位 //找到中转储位所在区域 var transfeArea = Db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.WareHouseNo == WareHouseNo && w.AreaName.Contains("转运区")); @@ -1112,6 +1248,7 @@ Msg = $"将桶{palletInfoYi.PalletNo}从{palletInfoYi.LocatNo}移到{transferLocat.LocatNo}", //关键信息 LotNo = ""//批次号 }; Db.Insertable(logTaskEntry).ExecuteCommand(); //组织下发小车任务信息 var task = new TaskDetial @@ -1467,10 +1604,16 @@ { endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" && w.Row == rowItem.Row && w.AreaNo == rowItem.AreaNo && (w.WareHouseNo == "M01"||w.WareHouseNo == "M16")) .OrderByDescending(o => o.Column).First(); if (endLocatInfo.LocatNo != null) if (endLocatInfo != null) { break; } } if (endLocatInfo == 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(); } //没有找到相同物料同组的空储位 if (endLocatInfo.LocatNo == null) @@ -1483,11 +1626,12 @@ } else {//其他区域 areaNo = houseNo == "M01" ? "C02" : "C25"; //查到到满桶区域编号 areaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.Type == "1").Select(s => s.AreaNo).First(); //分配储位 //先查到同物料的组 string sql = $@"select Row,AreaNo from SysStorageLocat where WareHouseNo='{houseNo}' and AreaNo='{areaNo}' and Status = '0' and LocatNo in( string sql = $@"select Row,AreaNo from SysStorageLocat where WareHouseNo='{houseNo}' and AreaNo='{areaNo}' and Status = '1' 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,AreaNo"; @@ -1498,13 +1642,19 @@ && w.WareHouseNo == houseNo && w.AreaNo == areaNo && w.Row == rowItem.Row && w.AreaNo == rowItem.AreaNo && (w.WareHouseNo == "M01" || w.WareHouseNo == "M16")) .OrderByDescending(o => o.Column).First(); if (endLocatInfo.LocatNo != null) if (endLocatInfo != null) { break; } } if (endLocatInfo == 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.LocatNo == null) if (endLocatInfo.LocatNo == null ) { endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" @@ -1544,5 +1694,138 @@ throw new Exception(ex.Message); } } /// <summary> /// 点对点任务下发 /// </summary> /// <param name="beginLocate">起始位</param> /// <param name="endLocate">终点位</param> /// <exception cref="Exception"></exception> public void PointToPointRequest(string id,string beginPoint, string endPoint, string url, string bindUrl) { try { //权限校验 var user = Db.Queryable<SysUserInfor>().First(m => m.IsDel == "0" && m.UserName == id); if (user == null) { throw new Exception("没有查询到用户信息"); } if (user.RoleNo != "01") { throw new Exception("当前用户没有权限使用此功能"); } //起始储位信息 var startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == beginPoint); if (startLoction == null) { throw new Exception("未找到输入的起始储位"); } if (startLoction.Status != "1") { throw new Exception("起始储位:"+beginPoint+"的储位状态错误,储位状态应为:‘有物品’"); } //目标储位信息 var endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == endPoint); if (endLoction == null) { throw new Exception("未找到输入的目标储位"); } if (endLoction.Status != "0") { throw new Exception("目标储位:" + endPoint + "的储位状态错误,储位状态应为:'空储位'"); } //托盘信息 var palletModel = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == beginPoint); if (palletModel == null) { throw new Exception("未找到储位对应托盘信息!"); } //检验当前托盘是否有任务未完成 var checkTask = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "1" || w.Status == "0") && w.PalletNo == palletModel.PalletNo); if (checkTask != null) { throw new Exception("当前托盘有正在执行的任务!"); } Db.BeginTran(); var taskNo = new Common().GetMaxNo("TK"); //添加任务 var logTaskEntry = new LogTask { TaskNo = taskNo, Sender = "WMS", Receiver = "RCS", IsSuccess = 0, //是否下发成功 0失败 1成功 StartLocat = beginPoint,//起始位置 EndLocat = endPoint,//目标位置 PalletNo = palletModel.PalletNo,//托盘码 IsSend = 1,//是否可再次下发 IsCancel = 1,//是否可取消 IsFinish = 1,//是否可完成 Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 Status = "0",//任务状态0:等待执行1正在执行2执行完成 OrderType = "3",//0 入库单 1 出库单 2 盘点单 3 移库单 CreateTime = DateTime.Now }; Db.Insertable(logTaskEntry).ExecuteCommand(); //组织下发小车任务信息 var task = new TaskDetial { Taskno = taskNo,//任务号 Startport = beginPoint,//起始位置 Endport = endPoint,//目标位置 Pallno = palletModel.PalletNo,//桶号 Crtype = "1",//叫桶 }; string agvMsg = string.Empty; //给下车下发任务 logTaskEntry.SendDate = DateTime.Now;//发送时间 //下发载具与货位绑定 var bind = RcsHelper.BindPalletAndSite(palletModel.PalletNo, beginPoint, bindUrl, out string agvBindMsg); if (bind) { var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg); if (agvResult)//成功 { //请求成功修改任务表相应字段状态 logTaskEntry.IsSuccess = 1; logTaskEntry.IsSend = 0; //logTaskEntry.IsCancel = 0; logTaskEntry.BackDate = DateTime.Now; logTaskEntry.Status = "1";//正在执行 Db.Updateable(logTaskEntry).ExecuteCommand(); startLoction.Status = "3";//出库中 Db.Updateable(startLoction).ExecuteCommand(); endLoction.Status = "2";//入库中 Db.Updateable(endLoction).ExecuteCommand(); } else//失败 { throw new Exception("桶号:" + task.Pallno + ",调度小车失败"); } } else { throw new Exception("桶号:" + task.Pallno + ",绑定货位失败"); } //提交事务 Db.CommitTran(); } catch (Exception e) { //回滚事务 Db.RollbackTran(); throw new Exception(e.Message); } } } } Wms/WMS.BLL/BllTransServer/RcsServer.cs
@@ -1052,7 +1052,7 @@ /// <param name="taskNo"></param> /// <param name="userId"></param> /// <exception cref="Exception"></exception> public void CancelTask(string taskNo, int userId) public void CancelTask(string taskNo, string url, int userId) { try { @@ -1063,6 +1063,20 @@ if (task == null) { throw new Exception("未查询到任务信息"); } //校验起点是否已经生成任务 var taskHave = Db.Queryable<LogTask>().First(m => m.EndLocat == task.StartLocat && m.IsDel == "0" && (m.Status == "0"|| m.Status == "1")); if (taskHave == null) { var locateHave = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat); if (locateHave.Status != "3") { throw new Exception("起始储位已有其他料斗存在,无法取消当前任务!"); } } else { throw new Exception("起始储位已有任务生成,无法取消当前任务!"); } //if (task.Status != "0") //{ @@ -1103,10 +1117,19 @@ } stockDetail.Status = "0";//待分配 Db.Updateable(stockDetail).ExecuteCommand(); //添加操作日志记录 var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId); Db.CommitTran(); string agvMsg = ""; bool t = CancleTaskForAgv(taskNo, url, out agvMsg); if (t) { //添加操作日志记录 var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId); Db.CommitTran(); } else { throw new Exception("下发取消小车任务失败"); } } catch (Exception e) { @@ -1327,6 +1350,43 @@ } /// <summary> /// 下发取消任务给AGV /// </summary> /// <param name="req"></param> /// <returns></returns> public bool CancleTaskForAgv(string taskno, string url, out string agvMsg, string priority = null) { bool result = false; #region 呼叫小车代码 AgvCancelTask cancelTask = new AgvCancelTask(); cancelTask.robotTaskCode = taskno; cancelTask.cancelType = "DROP"; // 正式运行程序放开 //AGV任务下发时增加hearder:X-LR-REQUEST-ID,值为随机数 long ran = DateTime.Now.Ticks; Dictionary<string, string> key = new Dictionary<string, string>(); key.Add("X-LR-REQUEST-ID", ran.ToString()); var jsonData = JsonConvert.SerializeObject(cancelTask); string response = HttpHelper.DoPost(url, jsonData, "下发给AGV转运命令", "AGV", key); //解析返回数据 var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); if (agvModel.Code == "SUCCESS") { result = true;//给下车下发任务成功 agvMsg = ""; } else { var logStr = $@".\log\AGV\AGV取消任务" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; LogFile.SaveLogToFile($"AGV取消任务异常:( {agvModel.Message} ),", logStr); agvMsg = agvModel.Message; } return result; #endregion } /// <summary> /// 分配桶后判断该桶外侧储位是否需要移库 /// </summary> /// <param name="palletNo"></param> @@ -1484,5 +1544,60 @@ throw new Exception(e.Message); } } public bool DelStockWms(int stockId,string url,int userId,out string errMsg) { try { errMsg = ""; //获取当前库存信息 var stock = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.Id == stockId); if (stock == null) { throw new Exception("未在库存中找到当前料桶"); } //获取当前料斗任务信息 var taskInfo = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.PalletNo == stock.PalletNo && (w.Status == "0" || w.Status == "1")); if (taskInfo != null) { throw new Exception("当前料桶有等待执行或正在执行的任务"); } //获取当前料斗储位状态 var locatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == stock.LocatNo && w.Status == "1"); if (locatInfo == null) { throw new Exception("当前料桶储位状态错误"); } var pallnoInfo = Db.Queryable<SysPallets>().First(w => w.IsDel == "0" && w.PalletNo == stock.PalletNo); if (pallnoInfo == null) { throw new Exception("未找到当前料桶条码"); } Db.BeginTran(); //下发给AGV解绑信息 bool t = RcsHelper.UnBindPalletAndSite(stock.PalletNo, stock.LocatNo, url,out errMsg); if (t) { //删除库存 Db.Deleteable(stock).ExecuteCommand(); Db.Deleteable(pallnoInfo).ExecuteCommand(); locatInfo.Status = "0"; Db.Updateable(locatInfo).ExecuteCommand(); //添加操作日志记录 var k = new OperationCrServer().AddLogOperationCr("统计报表", "桶明细", "", "删除", $"点击删除按钮、删除了桶号:{stock.PalletNo}", userId); } Db.CommitTran(); return t; } catch (Exception e) { Db.RollbackTran(); throw new Exception(e.Message); } } } } Wms/WMS.BLL/DataServer/StockDetailServer.cs
@@ -38,7 +38,7 @@ /// <param name="bitBoxMark">零箱标记</param> /// <param name="inspectStatus">质量状态</param> /// <returns></returns> public List<StockDetailDto> GetBindList(string wareHouseName, string areaName, string locatNo, string palletNo, string lotNo) public List<StockDetailDto> GetBindList(string wareHouseName, string areaName, string locatNo, string palletNo, string lotNo,string palletStatus) { string str = $@"select detail.*, @@ -76,9 +76,24 @@ { str += $" and detail.LotNo like '%{lotNo}%'"; } if (!string.IsNullOrEmpty(palletStatus)) { str += $" and detail.PalletStatus like '%{palletStatus}%'"; } //排序 str += " order by PalletNo"; List<StockDetailDto> boxInforList = Db.Ado.SqlQuery<StockDetailDto>(str).ToList(); foreach (var item in boxInforList) { if (item.LocatNo == "1004" || item.LocatNo == "1002") { item.PalletStatus = "0"; } if (item.LocatNo == "1001" || item.LocatNo == "1003") { item.PalletStatus = "3"; } } return boxInforList; } Wms/WMS.BLL/SysServer/PalletsServer.cs
@@ -123,7 +123,7 @@ /// <param name="locatNo"></param> /// <param name="userId"></param> /// <exception cref="Exception"></exception> public void AddPallets(string palletNo,string locatNo, string deviceCode, string url, int userId) public void AddPallets(string palletNo,string locatNo, string status, string url, int userId) { var db = DataContext.Db; try @@ -146,6 +146,18 @@ { throw new Exception("储位地址不存在"); } if (locatModel.Flag == "1") { throw new Exception("该储位已屏蔽"); } var nlocat = db.Queryable<SysStorageLocat>().First(w => w.AisleOne == locatModel.LocatNo && w.IsDel == "0"); if (nlocat != null) { if (nlocat.Status == "0") { throw new Exception("请从内侧库位开始绑定"); } } if (locatModel.Status != "0") { throw new Exception("该储位地址非空闲状态"); @@ -155,14 +167,28 @@ { throw new Exception("储位地址所属区域不存在"); } if (!areaModel.AreaName.Contains("净桶")) switch (status) { throw new Exception("新添加的桶只能绑定净桶区"); case "0": if (!areaModel.AreaName.Contains("净桶")) { throw new Exception("请选择净桶区域进行绑定"); } break; case "3": if (!areaModel.AreaName.Contains("脏桶")) { throw new Exception("请选择脏桶区域进行绑定"); } break; default: throw new Exception("请选择桶类型!"); break; } if (!string.IsNullOrEmpty(deviceCode)) string deviceCode = ""; if (!string.IsNullOrEmpty(palletNo)) { switch (deviceCode) switch (palletNo.Substring(2,3)) { case "400": deviceCode = "400L"; @@ -170,11 +196,11 @@ case "800": deviceCode = "800L"; break; case "1000": case "100": deviceCode = "1000L"; break; default: throw new Exception("不能录入400,800,1000以外的值"); throw new Exception("桶号录入错误,请核实!"); } } @@ -189,6 +215,7 @@ palletModel.CreateUser = userId; //添加桶 db.Insertable(palletModel).ExecuteCommand(); var comTime = DateTime.Now; var model = new DataStockDetail() @@ -221,7 +248,7 @@ SkuName = "", LotNo = "", PalletStatus = "0",//净桶 PalletStatus = status, Standard = deviceCode, //规格 @@ -240,17 +267,17 @@ //下发AGV绑定载具接口 //调用AGV接口下发任务 //string agvMsg = string.Empty; ////给下车下发任务 //var agvResult = RcsHelper.BindPalletAndSite(palletNo, locatNo,url, out agvMsg); //if (agvResult)//成功 //{ // //增加日志 //} //else//失败 //{ // throw new Exception("小车载具和库位关系绑定失败,原因:"+agvMsg); //} string agvMsg = string.Empty; //给下车下发任务 var agvResult = RcsHelper.BindPalletAndSite(palletNo, locatNo, url, out agvMsg); if (agvResult)//成功 { //增加日志 } else//失败 { throw new Exception("小车载具和库位关系绑定失败,原因:" + agvMsg); } //提交事务 db.CommitTran(); Wms/WMS.IBLL/IBllQualityServer/IQualityInspectServer.cs
@@ -31,6 +31,12 @@ /// </summary> /// <returns></returns> public List<DataStockDetail> GetLotNoList(); /// <summary> /// 获取库存批次号集合 /// </summary> /// <returns></returns> public List<DataStockDetail> GetLotNoList(string skuNo); #endregion } } Wms/WMS.IBLL/IBllTransServer/IHopperTransportServer.cs
@@ -46,5 +46,14 @@ /// <param name="status"></param> /// <exception cref="Exception"></exception> void RCSCleanRequest(string deviceID, string deviceStation, string status, string url,string bindUrl); /// <summary> /// 点对点任务下发 /// </summary> /// <param name="id">用户ID</param> /// <param name="beginLocate">起始位</param> /// <param name="endLocate">终点位</param> /// <exception cref="Exception"></exception> void PointToPointRequest(string id,string beginLocate, string endLocate, string url, string bindUrl); } } Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs
@@ -49,7 +49,7 @@ /// <param name="taskNo"></param> /// <param name="userId"></param> /// <exception cref="Exception"></exception> void CancelTask(string taskNo, int userId); void CancelTask(string taskNo,string url, int userId); /// <summary> /// 手动下发任务 @@ -58,5 +58,7 @@ /// <param name="userId"></param> /// <exception cref="Exception"></exception> void DownTask(string taskNo, int userId, string url,string bindurl); public bool DelStockWms(int stockid, string url, int userId , out string errMsg); } } Wms/WMS.IBLL/IDataServer/IStockDetailServer.cs
@@ -23,7 +23,7 @@ /// <param name="bitBoxMark">零箱标记</param> /// <param name="inspectStatus">质量状态</param> /// <returns></returns> List<StockDetailDto> GetBindList(string wareHouseName, string areaName, string locatNo, string palletNo, string lotNo); List<StockDetailDto> GetBindList(string wareHouseName, string areaName, string locatNo, string palletNo, string lotNo ,string palletStatus); /// <summary> /// 导出托盘明细 Wms/Wms/Controllers/BllCheckController.cs
@@ -497,7 +497,7 @@ { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } _rcsserver.CancelTask(model.taskNo, int.Parse(userId)); _rcsserver.CancelTask(model.taskNo, _config.AgvHost + _config.CancelTask, int.Parse(userId)); return Ok(new { code = 0, msg = "成功取消任务", data = "" }); } Wms/Wms/Controllers/BllQualityController.cs
@@ -313,5 +313,24 @@ return Ok(new { code = 1, msg = e.Message }); } } /// <summary> /// 获取库存批次号集合 /// </summary> /// <returns></returns> [HttpPost] public IActionResult GetLotNoList(string SkuNo) { try { var bolls = _qualityServer.GetLotNoList(SkuNo); return Ok(new { code = 0, msg = "批次号集合", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } } } Wms/Wms/Controllers/DownApiController.cs
@@ -23,6 +23,7 @@ using Model.ModelVm.BllCheckVm; using Model.ModelVm.SysVm; using System.Security.Policy; using Model.ModelVm.DataVm; namespace Wms.Controllers { @@ -956,7 +957,7 @@ LogFile.SaveLogToFile($"AGV任务执行通知-任务结束-请求报文:( {jsonData} ),", logStr); //具体处理方法 _hopper.RCSFinishTask(model.robotTaskCode, extraValue.values.slotCode, "1", "AGV"); _hopper.RCSFinishTask(model.robotTaskCode, extraValue.values.slotName, "1", "AGV"); Data data = new Data(); data.robotTaskCode = model.robotTaskCode; @@ -991,18 +992,22 @@ AgvResultModel2 resultModel = null;//返回信息 try { var extraValue = new ExtraModel(); extraValue = model.extra; if (!(extraValue.values.method == "cancel")) { throw new Exception("小车调用方法错误"); } var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"AGV任务执行通知-任务单取消-请求报文:( {jsonData} ),", logStr); LogFile.SaveLogToFile($"AGV任务执行通知-任务取消-请求报文:( {jsonData} ),", logStr); //具体处理方法 //_rcsserver.CancelTask(model.robotTaskCode, _config.AgvHost + _config.CancelTask, 0); 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); LogFile.SaveLogToFile($"AGV任务执行通知-任务取消-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } catch (Exception ex) @@ -1040,6 +1045,9 @@ break; case "end": var b = end(model); break; case "cancel": var c = cancel(model); break; default: break; @@ -1180,7 +1188,7 @@ { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } _rcsserver.CancelTask(model.taskNo, int.Parse(userId)); _rcsserver.CancelTask(model.taskNo, _config.AgvHost + _config.CancelTask, int.Parse(userId)); return Ok(new { code = 0, msg = "成功取消任务", data = "" }); } @@ -1419,7 +1427,76 @@ } } /// <summary> /// 点对点任务 /// </summary> /// <param name="model"></param> /// <returns></returns> [HttpPost] public IActionResult PointToPointRequest(PointTask model) { var logStr = $@".\log\AGV\点对点任务下发" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; AgvResultModel resultModel = null;//返回信息 try { var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"任务下发:( {jsonData} ),", logStr); //具体处理方法 _hopper.PointToPointRequest(model.ID, model.BeginPoint, model.EndPoint, _config.AgvHost + _config.GenAgvSchedulingTask, _config.AgvHost + _config.AGVBindPallets); resultModel = new AgvResultModel { code = "0", message = "请求成功!" }; return Ok(resultModel); } catch (Exception e) { LogFile.SaveLogToFile($"下发点对点任务异常:( {e.Message} ),", logStr); resultModel = new AgvResultModel { code = "1", message = e.Message, data = "", reqCode = "" }; return Ok(resultModel); } } /// <summary> /// 删除当前库存信息 /// </summary> /// <param name="model"></param> /// <returns></returns> [HttpPost] public IActionResult DelStockWms(DelStockInfo model) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } string errMsg = ""; bool t = _rcsserver.DelStockWms(model.StockId, _config.AgvHost + _config.AGVUnBindPallets, int.Parse(userId),out errMsg); if (t) { return Ok(new { code = 0, msg = "删除成功", data = "" }); } else { return Ok(new { code = 1, msg = "删除失败", data = errMsg }); } } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion } Wms/Wms/Controllers/StatisticalController.cs
@@ -98,11 +98,11 @@ /// <param name="inspectStatus">质量状态</param> /// <returns></returns> [HttpGet] public IActionResult GetBindList(string wareHouseName,string areaName,string locatNo,string palletNo, string lotNo) public IActionResult GetBindList(string wareHouseName,string areaName,string locatNo,string palletNo, string lotNo,string palletStatus) { try { List<StockDetailDto> boxInfoList = _stockDetail.GetBindList(wareHouseName,areaName,locatNo,palletNo, lotNo); List<StockDetailDto> boxInfoList = _stockDetail.GetBindList(wareHouseName,areaName,locatNo,palletNo, lotNo, palletStatus); return Ok(new { data = boxInfoList, code = 0, msg = "获取托盘明细成功" }); } catch (Exception e) Wms/Wms/Tools/ApiUrlConfig.cs
@@ -97,6 +97,11 @@ /// </summary> public string AGVUnBindPallets { get; set; } /// <summary> /// 取消任务接口 /// </summary> public string CancelTask { get; set; } #endregion #endregion Wms/Wms/appsettings.json
@@ -11,13 +11,10 @@ //"ConnectionString": "Server=47.95.120.93;Database=WMS_JC09;User ID=sa;password=boxline!@#; Integrated Security=True;", //"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.10.201\\WMSSQLSERVER;Database=WMS_JC37;User ID=sa;Password=sa@123456;Integrated Security=False;" //"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=192.168.10.201\\WMSSQLSERVER;Database=WMS_JC37;User ID=sa;Password=sa@123456;Integrated Security=False;" "ConnectionString": "Server=DESKTOP-H7CB0Q0\\MSSQLSERVER2019;Database=WMS_JC37;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=.\\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;" //"ConnectionString": "Server=.\\SQLSERVER;Database=WMS_JC23-2;User ID=sa;Password=admin2023@;Integrated Security=False;" }, "JWTConfig": { "Issuer": "WYY", //Token������ @@ -47,6 +44,7 @@ "ContinueTask": "/rcs/rtas/api/robot/controller/task/extend/continue", //继续执行任务接口 "GenPreScheduleTask": "/rcms/services/rest/hikRpcService/genPreScheduleTask", // 预调度对外接口 "AGVBindPallets": "/rcs/rtas/api/robot/controller/carrier/bind", //载具与库位绑定接口 "AGVUnBindPallets": "/rcs/rtas/api/robot/controller/carrier/bind" //载具与库位解绑接口 "AGVUnBindPallets": "/rcs/rtas/api/robot/controller/carrier/bind", //载具与库位解绑接口 "CancelTask": "/rcs/rtas/api/robot/controller/task/cancel"//取消任务接口 } }