| | |
| | | title: '申请储位', |
| | | content: 'RequestLocation.html', |
| | | maxmin: true, |
| | | area: ['25%', '40%'], |
| | | area: ['25%', '60%'], |
| | | btn: ["确定", "取消"], |
| | | yes: function (index, layero) { |
| | | |
| | |
| | | <div class="layui-inline DivLoadingArea" style="margin-top: 10px;"> |
| | | <label class="layui-form-label">密码</label> |
| | | <div class="layui-input-inline" style="width: 220px;"> |
| | | <input type="text" id="password" name="password" placeholder="密码" autocomplete="off" |
| | | <input type="password" id="password" name="password" placeholder="密码" autocomplete="off" |
| | | class="layui-input"> |
| | | </div> |
| | | </div> |
| | |
| | | //明细表操作栏事件 |
| | | table.on('tool(LAY-app-content-list2)', function (obj) { |
| | | var data = obj.data; |
| | | console.log("data.supplierlot:"+data.SupplierLot); |
| | | var lotno = data.LotNo; |
| | | |
| | | |
| | |
| | | } |
| | | }); |
| | | }); |
| | | |
| | | |
| | | break; |
| | | case "Addlabel" : |
| | |
| | | .font-size10{ |
| | | font-size: 10px; |
| | | } |
| | | /* .layui-table-cell { |
| | | word-break: break-all; |
| | | } */ |
| | | </style> |
| | | </head> |
| | | |
| | |
| | | </tr> --> |
| | | <tr> |
| | | <td class="font-size12">进厂编号</td> |
| | | <td id="LotNo" class="font-size10"></td> |
| | | <td id="LotNo" style="overflow-wrap: break-word;" class="font-size10"></td> |
| | | <td class="font-size12">物料代码</td> |
| | | <td id="SkuNo" class="font-size10"></td> |
| | | </tr> |
| | | <tr> |
| | | <td class="font-size12">原厂批号</td> |
| | | <td id="SupplierLot" class="font-size10"></td> |
| | | <td id="SupplierLot" style="overflow-wrap: break-word;" class="font-size10"></td> |
| | | <td class="font-size12">数 量</td> |
| | | <td id="Qty" class="font-size10"></td> |
| | | </tr> |
| | |
| | | var expirationTime = getQueryString('ExpirationTime'); |
| | | var storeTime = getQueryString('StoreTime'); |
| | | |
| | | |
| | | |
| | | var supplierLot=getQueryString('SupplierLot'); //原厂批号 |
| | | $("#SupplierLot").html(supplierLot); |
| | | console.log(supplierLot); |
| | | //$("#SupplierLot").html(supplierLot); |
| | | //console.log(supplierLot); |
| | | |
| | | var Lotno=getQueryString('Lotno'); //原厂批号 |
| | | $("#Lotno").html(Lotno); |
| | |
| | | $("#SkuNo").html(res.data.SkuNo); |
| | | |
| | | $("#ExpirationTime").html(expirationTime); |
| | | $("#StoreTime").html( storeTime); |
| | | $("#StoreTime").html(storeTime); |
| | | $("#SupplierLot").html(res.data.SupplierLot); |
| | | |
| | | |
| | | // $("#imgBar").attr("src", res.data[0].imageStr); |
| | | } else { //不成功 |
| | |
| | | }); |
| | | |
| | | var id = getQueryString('Id'); |
| | | var SupplierLot=getQueryString('SupplierLot');//供货批次 |
| | | $('#SupplierLot').val(SupplierLot); |
| | | console.log(SupplierLot); |
| | | //var SupplierLot=getQueryString('SupplierLot');//供货批次 |
| | | //$('#SupplierLot').val(SupplierLot); |
| | | //console.log(SupplierLot); |
| | | var asnType = getQueryString('Type'); |
| | | console.log(asnType); |
| | | console.log(asnType == 4); |
| | |
| | | $("#productionTime").val(res.data.ProductionTime); |
| | | $("#expirationTime").val(res.data.ExpirationTime); |
| | | $("#storeTime").val(res.data.StoreTime); |
| | | $("#SupplierLot").val(res.data.SupplierLot); |
| | | console.log(res.data); |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | |
| | | if (r != null) return unescape(r[2]); |
| | | return null; |
| | | } |
| | | // 获取传递参数 |
| | | function getQueryString2(name) { |
| | | var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); |
| | | var r = window.location.search.substr(1).match(reg); |
| | | if (r != null) return unescape(r[2]); |
| | | return null; |
| | | } |
| | | |
| | | }) |
| | | </script> |
| | |
| | | <option value=""></option> |
| | | <option value="R01">1巷道</option> |
| | | <option value="R02">2巷道</option> |
| | | <option value="R03">3巷道</option> |
| | | <option value="R04">4巷道</option> |
| | | <option value="R05">5巷道</option> |
| | | <option value="R06">6巷道</option> |
| | | <option value="R07">7巷道</option> |
| | | <option value="R08">8巷道</option> |
| | | <option value="R09">9巷道</option> |
| | | <option value="R10">10巷道</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | |
| | | <select name="Environment" id="Environment" lay-verify="" lay-verify="" lay-search> |
| | | <option value=""></option> |
| | | <option value="0">常温</option> |
| | | <option value="1">低温</option> |
| | | <option value="1">阴凉</option> |
| | | <!-- <option value="3">干燥通风</option> --> |
| | | </select> |
| | | </div> |
| | |
| | | Environment: field.Environment, |
| | | Weight: Number(field.Weight), |
| | | Warranty: Number(field.Warranty), |
| | | Warrantydate:field.Warrantydate, |
| | | Price: Number(field.Price), |
| | | AdventTime: Number(field.AdventTime), //临期 |
| | | LowInventory: Number(field.LowInventory), //低库存 |
| | |
| | | }; |
| | | if (doing) { |
| | | doing = false; |
| | | |
| | | sendData(IP + "/Basis/AddMate", param, 'post', function (res) { |
| | | console.log(res); |
| | | if (res.code == 0) { //成功 |
| | | if (res.code == 1) { //成功 |
| | | layer.msg(res.msg, { |
| | | icon: 1, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 70px;">保质期(天)</label> |
| | | <div class="layui-input-block" style="width: 182px;"> |
| | | <label class="layui-form-label" style="width: 90px;">保质期(天)</label> |
| | | |
| | | <div class="layui-input-inline" style="width: 120px;"> |
| | | <input type="text" onkeyup="value=value.replace(/[^\d]/g,'')" name="Warranty" placeholder="请输入保质期" |
| | | lay-verify="" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | <div class="layui-input-inline" style="width: 60px;"> |
| | | <select name="Warrantydate" id="Warrantydate" lay-verify="" lay-verify="" lay-search> |
| | | <option value="0">天</option> |
| | | <option value="1">月</option> |
| | | <option value="2">年</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | <div class="layui-inline"> |
| | |
| | | if (res.data.SkuNo != "") { |
| | | $("input[name='SkuNo']").attr("disabled", "disabled") |
| | | } |
| | | |
| | | //页面赋值 |
| | | $("input[name='SkuNo']").val(res.data.SkuNo); // 物料号 |
| | | $("input[name='SkuName']").val(res.data.SkuName); // 物料名称 |
| | |
| | | $("#UnitNo option[value='" + res.data.UnitNo + "']").attr("selected", "selected");// 单位 |
| | | $("#PackagNo option[value='" + res.data.PackagNo + "']").attr("selected", "selected"); // 包装 |
| | | $("#PackagNo").attr("disabled", "disabled") |
| | | $("#Environment option[value='" + res.data.Environment + "']").attr("selected", "selected"); // 存储环境 |
| | | $("#Environment option[value='" + res.data.Environment + "']").attr("selected", "selected"); // |
| | | $("#Warrantydate option[value='" + res.data.Warrantydate + "']").attr("selected", "selected"); // 保持期单位 |
| | | $("input[name='Weight']").val(res.data.Weight); // 理论重量 |
| | | $("input[name='Warranty']").val(res.data.Warranty); // 保质期 |
| | | $("input[name='Price']").val(res.data.Price); // 理论单价 |
| | |
| | | <div class="layui-inline DivLoadingArea" style="margin-top: 10px;"> |
| | | <label class="layui-form-label">密码</label> |
| | | <div class="layui-input-inline" style="width: 220px;"> |
| | | <input type="text" id="password" name="password" placeholder="密码" autocomplete="off" |
| | | <input type="password" id="password" name="password" placeholder="密码" autocomplete="off" |
| | | class="layui-input"> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="layui-inline DivLoadingArea" style="margin-top: 10px;"> |
| | | <label class="layui-form-label">密码</label> |
| | | <div class="layui-input-inline" style="width: 220px;"> |
| | | <input type="text" id="password" name="password" placeholder="密码" autocomplete="off" |
| | | <input type="password" id="password" name="password" placeholder="密码" autocomplete="off" |
| | | class="layui-input"> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">  储排</label> |
| | | <div class="layui-input-inline"> |
| | | <input type="number" lay-verify="required|PRules" id="Row" name="Row" placeholder="排···" autocomplete="off" |
| | | <input type="number" lay-verify="PRules" id="Row" name="Row" placeholder="排···" autocomplete="off" |
| | | class="layui-input" > |
| | | </div> |
| | | <label class="layui-form-label">  储列</label> |
| | | <div class="layui-input-inline"> |
| | | <input type="number" lay-verify="required|LRules" id="Column" name="Column" placeholder="列···" autocomplete="off" |
| | | <input type="number" lay-verify="LRules" id="Column" name="Column" placeholder="列···" autocomplete="off" |
| | | class="layui-input" > |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">  储层</label> |
| | | <div class="layui-input-inline"> |
| | | <input type="number" lay-verify="required|CRules" id="Layer" name="Layer" placeholder="层···" autocomplete="off" |
| | | <input type="number" lay-verify="CRules" id="Layer" name="Layer" placeholder="层···" autocomplete="off" |
| | | class="layui-input" > |
| | | </div> |
| | | <label class="layui-form-label">储位深度</label> |
| | |
| | | //自定义验证规则 |
| | | form.verify({ |
| | | PRules: function(value, item){ |
| | | if($("#Row").val() != ""){ |
| | | var pattern = /^[a-zA-Z0-9_]+$/; // 这里写你的正则表达式 |
| | | if(!pattern.test(value)){ |
| | | return '用户名只能包含字母、数字和下划线'; |
| | | } |
| | | },LRules: function(value, item){ |
| | | return '排只能包含字母、数字和下划线'; |
| | | }} |
| | | } |
| | | ,LRules: function(value, item){ |
| | | if($("#Column").val() != ""){ |
| | | var pattern = /^[a-zA-Z0-9_]+$/; // 这里写你的正则表达式 |
| | | if(!pattern.test(value)){ |
| | | return '用户名只能包含字母、数字和下划线'; |
| | | } |
| | | return '列只能包含字母、数字和下划线'; |
| | | }} |
| | | },CRules: function(value, item){ |
| | | if($("#Layer").val() != ""){ |
| | | var pattern = /^[a-zA-Z0-9_]+$/; // 这里写你的正则表达式 |
| | | if(!pattern.test(value)){ |
| | | return '用户名只能包含字母、数字和下划线'; |
| | | } |
| | | return '层只能包含字母、数字和下划线'; |
| | | }} |
| | | } |
| | | }); |
| | | |
| | |
| | | width: 100, |
| | | align: 'center' |
| | | |
| | | }, { |
| | | field: 'TypeName', |
| | | title: '区域类别', |
| | | width: 150, |
| | | align: 'center' |
| | | }, |
| | | // { |
| | | // field: 'TypeName', |
| | | // title: '区域类别', |
| | | // width: 150, |
| | | // align: 'center' |
| | | |
| | | }, { |
| | | // }, |
| | | { |
| | | field: 'TemperatureName', |
| | | title: '存储环境', |
| | | align: 'center', |
| | |
| | | </cite> |
| | | </a> |
| | | <dl class="layui-nav-child"> |
| | | <!-- <dd><a lay-href="set/user/info.html">基本资料</a></dd> --> |
| | | <!-- <dd><a lay-href="set/user/info.html">基本资料</a></dd>--> |
| | | <dd><a lay-href="set/user/password.html" id="changePassword">修改密码</a></dd> |
| | | <hr> |
| | | <dd><a href="Login.html">退出</a></dd> |
| | |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="" style="margin-left: 21%; width: 38%;float: left;"> |
| | | <div id="layout-boxcode" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label">地码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="LocatNo" type="text" placeholder="请扫描地码" |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-dropdownlist"> |
| | | <label class="layui-form-label" lang>入库口:</label> |
| | | <div class="layui-input-block" id="selectRuku"> |
| | | <select id="Ruku" lay-filter="getRuku" lay-search> |
| | | <option value=""></option> |
| | | <option value="033">033</option> |
| | | <option value="039">039</option> |
| | | <option value="044">044</option> |
| | | <option value="051">051</option> |
| | | <option value="443">443</option> |
| | | <option value="440">440</option> |
| | | <option value="001">001</option> |
| | | <option value="002">002</option> |
| | | </select> |
| | | <img src="/assets/down_arraw.png"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="" style="margin-left: 21%; width: 25%;float: left;"> |
| | | <button id="btnScanBox" class="layout-btn layout-btn-blue" lay-submit lay-filter="formBind" type="button">绑定</button> |
| | | </div> |
| | | <div id="" style="width: 38%;float: left;"> |
| | | <div id="" style="width: 25%;float: left;"> |
| | | <button id="btnScanBox" class="layout-btn layout-btn-red" lay-submit lay-filter="formUnbind" type="button">解绑</button> |
| | | </div> |
| | | <div id="" style="width: 25%;float: left;"> |
| | | <button id="btnAGVTrans" class="layout-btn layout-btn-red" lay-submit lay-filter="formAGVIN" type="button">AGV入库</button> |
| | | </div> |
| | | |
| | | </form> |
| | |
| | | <script src="/layui/layui.js"></script> |
| | | <script src="/js/public.js"></script> |
| | | <script src="/js/jquery.cookie.js"></script> |
| | | <script src="/js/language.js"></script> |
| | | <script> |
| | | layui.use(['form', 'jquery'], function() { |
| | | var form = layui.form |
| | |
| | | $("#PalletNo").on('input',function(){ |
| | | |
| | | if($("#PalletNo").val() == "" || $("#PalletNo").val().length<10){ |
| | | |
| | | return |
| | | } |
| | | if ($("#PalletNo").val().length>=10) { |
| | |
| | | } |
| | | checkPalletStat() |
| | | }) |
| | | |
| | | |
| | | //检查地码状态 |
| | | function checkLocatStatus(){ |
| | | var param = { |
| | | "LocatNo": $("#LocatNo").val() |
| | | } |
| | | sendData(IP + "/PdaAsn/IsEnableLocatNo", param, 'post', function (res) { |
| | | if (res.code == 0) { |
| | | $("#palletNum").focus(); |
| | | } else { |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, |
| | | function () { }); |
| | | $("#LocatNo").val('') |
| | | } |
| | | }); |
| | | } |
| | | //当地码输入框失去焦点时,检查一下地码状态 |
| | | $("#LocatNo").on('input',function(){ |
| | | |
| | | if($("#LocatNo").val() == "" || $("#LocatNo").val().length!=9){ |
| | | layer.msg('请检查地码是否正确', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | checkLocatStatus() |
| | | |
| | | }) |
| | | |
| | | // $("#bar").focus(); |
| | | $("#PalletNo").keydown(function(e) { |
| | | //console.log("e.keyCode is "+e.keyCode) |
| | |
| | | |
| | | return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 |
| | | }); |
| | | |
| | | form.on('submit(formAGVIN)', function(data) { |
| | | |
| | | if (!$("#LocatNo").val()) { |
| | | layer.msg('请扫描地码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | if (!$("#Ruku").val()) { |
| | | layer.msg('请选择入库口', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | //先绑定空托盘垛 |
| | | //bind(); |
| | | //绑定成功后调度AGV运送空托盘垛 |
| | | var param = { |
| | | 'PalletNo':$("#PalletNo").val(), |
| | | "LocatNo": $("#LocatNo").val(), |
| | | "Ruku": $("#Ruku").val(), |
| | | } |
| | | sendData(IP + "/PdaCr/AgvTransport3", param, 'post', function(res) { |
| | | //console.log("托盘状态:"+res.msg) |
| | | if (res.code == 0) { //成功 |
| | | layer.msg(res.msg, { |
| | | icon: 1, |
| | | time: 1000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function() { |
| | | }); |
| | | $("#PalletNo").val(''), |
| | | $("#palletNum").val(''), |
| | | $("#LocatNo").val(''), |
| | | $("#Ruku").val('') |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function() { |
| | | //回调 |
| | | }); |
| | | } |
| | | }); |
| | | return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 |
| | | }); |
| | | |
| | | function unbind(){ |
| | | layer.msg('该操作会解绑这个托盘上的所有托盘,确定要解绑吗?', { |
| | | time: 0 //不自动关闭 |
| | |
| | | <li><a href="../login.html">重新登录</a></li> |
| | | </ul> |
| | | </div> |
| | | <div id="" class="layout-bill-info"> |
| | | <form class="layui-form" action=""> |
| | | <div id="layout-pallet" class="layui-form-item layout-input" style="margin-top: 10px;"> |
| | | <label class="layui-form-label">托盘垛数:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="STOCKCODE" type="number" lay-verify="stock" placeholder="托盘垛数" |
| | | autocomplete="off" class="layui-input" oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"> |
| | | |
| | | <button id="option1" class="layout-btn" type="button"> 整托</button> |
| | | <button id="option2" class="layout-btn" type="button">单托</button> |
| | | |
| | | <div id="content1"> |
| | | <div id="" class="layout-bill-info"> |
| | | <form class="layui-form" action=""> |
| | | <div id="layout-pallet" class="layui-form-item layout-input" style="margin-top: 10px;"> |
| | | <label class="layui-form-label">托盘垛数:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="STOCKCODE" type="number" lay-verify="stock" placeholder="托盘垛数" |
| | | autocomplete="off" class="layui-input" oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div id="layout-bill" class="layui-form-item layout-dropdownlist" > |
| | | <label class="layui-form-label">出库口:</label> |
| | | <div class="layui-input-block" id="selectDiv"> |
| | | <select id="bar" lay-filter="getbar" lay-verify="required" lay-search> |
| | | <option value=""></option> |
| | | <option value="033">033</option> |
| | | <option value="039">039</option> |
| | | <option value="044">044</option> |
| | | <option value="051">051</option> |
| | | <option value="059">059</option> |
| | | <option value="440">440</option> |
| | | <option value="443">443</option> |
| | | </select> |
| | | <!-- <img src="/assets/down_arraw.png" > --> |
| | | <div id="layout-bill" class="layui-form-item layout-dropdownlist" > |
| | | <label class="layui-form-label">出库口:</label> |
| | | <div class="layui-input-block" id="selectDiv"> |
| | | <select id="bar" lay-filter="getbar" lay-verify="required" lay-search> |
| | | <option value=""></option> |
| | | <option value="033">033</option> |
| | | <option value="039">039</option> |
| | | <option value="044">044</option> |
| | | <option value="051">051</option> |
| | | <option value="059">059</option> |
| | | <option value="440">440</option> |
| | | <option value="443">443</option> |
| | | </select> |
| | | <!-- <img src="/assets/down_arraw.png" > --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div id="" class="btn-out"> |
| | | <button id="btnOut" class="layout-btn layout-btn-blue" type="button">出库</button> |
| | | </div> |
| | | </form> |
| | | <div id="" class="btn-out"> |
| | | <button id="btnOut" class="layout-btn layout-btn-blue" type="button">出库</button> |
| | | </div> |
| | | </form> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="content2"> |
| | | <div id="" class="layout-bill-info"> |
| | | <form class="layui-form" action=""> |
| | | <div id="layout-bill" class="layui-form-item layout-dropdownlist" > |
| | | <label class="layui-form-label">拣货口:</label> |
| | | <div class="layui-input-block" id="selectDiv"> |
| | | <select id="bar2" lay-filter="getbar" lay-verify="required" lay-search> |
| | | <option value=""></option> |
| | | <option value="001">001</option> |
| | | <option value="002">002</option> |
| | | </select> |
| | | <!-- <img src="/assets/down_arraw.png" > --> |
| | | </div> |
| | | </div> |
| | | <div id="" class="btn-out"> |
| | | <button id="btnOut2" class="layout-btn layout-btn-blue" type="button">叫空托</button> |
| | | </div> |
| | | </form> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | layui.use(['form', 'jquery'], function() { |
| | | var form = layui.form |
| | | var isChongFu = true; |
| | | |
| | | /* 标签切换代码 */ |
| | | |
| | | var xianshiyemian = 0; |
| | | |
| | | $('#option1').attr("style", "background-color: red;width: 50%;float: left;text-align: center;"); //选中后颜色 |
| | | $('#option2').attr("style", "background-color: #999;width: 50%;float: right;text-align: center;"); //默认颜色 |
| | | $('#content2').hide(); |
| | | $(document).ready(function () { |
| | | $('#option1').click(function () { |
| | | // qingkong(); |
| | | xianshiyemian = 0; |
| | | $('#content1').show(); |
| | | $('#option1').attr("style", "background-color: red;width: 50%;float: left;text-align: center;"); //选中后颜色 |
| | | |
| | | $('#content2').hide(); |
| | | $('#option2').attr("style", "background-color: #999;width: 50%;float: right;text-align: center;"); //默认颜色 |
| | | $("#palletNo").focus();//光标默认选中 |
| | | }); |
| | | |
| | | $('#option2').click(function () { |
| | | // qingkong(); |
| | | xianshiyemian = 1; |
| | | $('#content1').hide(); |
| | | $('#option1').attr("style", "background-color: #999;width: 50%;float: left;text-align: center;"); //默认颜色 |
| | | |
| | | $('#content2').show(); |
| | | $('#option2').attr("style", "background-color: red;width: 50%;float: right;text-align: center;"); //选中后颜色 |
| | | $("#palletNo2").focus();//光标默认选中 |
| | | }); |
| | | }); |
| | | //所选入库单的详细信息 |
| | | //console.log($.cookie('userId')); |
| | | // if (!$.cookie('userId')) { |
| | |
| | | function clear(){ |
| | | $("#STOCKCODE").val(""); |
| | | $("#bar option[value='']").attr("selected", "selected"); |
| | | $("#bar2 option[value='']").attr("selected", "selected"); |
| | | form.render('select'); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | }) |
| | | //叫单空托 |
| | | $('#btnOut2').click(function(){ |
| | | |
| | | if($('#bar2').val() == ''){ |
| | | layer.msg("请选择拣货口", { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function() {}); |
| | | return |
| | | } |
| | | if (isChongFu == true) { |
| | | isChongFu = false; |
| | | var param2 = { |
| | | OutMode:$('#bar2').val() |
| | | }; |
| | | |
| | | // Int(param.Num) |
| | | console.log(param2) |
| | | sendData(IP + "/DownApi/IssuePlnCheckHouseWcs", param2, 'post', function(res) { |
| | | console.log("出库:"+JSON.stringify(res)) |
| | | if (res.code == 0) { //成功 |
| | | layer.msg(res.msg, { |
| | | icon: 1, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function() {isChongFu = true;clear();}); |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function() {isChongFu = true;clear();}); |
| | | } |
| | | }); |
| | | }else{ |
| | | layer.msg("请勿重复点击", { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | } |
| | | |
| | | }) |
| | | |
| | | //获取出库口 |
| | | // $("#selectDiv").click(function(){ |
| | |
| | | public string Msg { get; set; } |
| | | } |
| | | |
| | | public class WcsAgvModel |
| | | { |
| | | public int Success { get; set; } |
| | | public string Message { get; set; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 接收wcs可放信号model |
| | | /// </summary> |
| | |
| | | /// 储存期至 |
| | | /// </summary> |
| | | public string StoreTime { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 供货批次 |
| | | /// </summary> |
| | | public string SupplierLot { get; set; } |
| | | } |
| | | |
| | | } |
| | |
| | | /// 保质期 |
| | | /// </summary> |
| | | public int? Warranty { get; set; } |
| | | /// <summary> |
| | | /// 保质期单位 |
| | | /// </summary> |
| | | public string Warrantydate { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 理论单价 |
| | |
| | | public string EndLocatNo { get; set; } |
| | | } |
| | | |
| | | |
| | | public class PdaAgvTransNullPalnoModel |
| | | { |
| | | |
| | | /// <summary> |
| | | /// 托盘条码 |
| | | /// </summary> |
| | | public string PalletNo { get; set; } |
| | | /// <summary> |
| | | /// 目标区域 |
| | | /// </summary> |
| | | public string LocatNo { get; set; } |
| | | /// <summary> |
| | | /// 入库口 |
| | | /// </summary> |
| | | public string Ruku { get; set; } |
| | | } |
| | | } |
| | |
| | | public string OutMode { get; set; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 拣货叫空托盘 |
| | | /// </summary> |
| | | public class CheckModePalletVm |
| | | { |
| | | |
| | | /// <summary> |
| | | /// 拣货口 |
| | | /// </summary> |
| | | public string OutMode { get; set; } |
| | | } |
| | | |
| | | } |
| | |
| | | //修改参数的值 |
| | | foreach (var de in Pars) |
| | | { |
| | | string subNode = "DataList/Product/Batch";// + de.Key.ToString(); |
| | | string subNode = "DataList/Events/Event/DataField";// + de.Key.ToString(); |
| | | |
| | | XmlNode node = xml.SelectSingleNode(subNode, nsmgr); |
| | | if (de != null) |
| | |
| | | |
| | | <DataList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" corpName="天津市中升挑战生物科技有限公司" |
| | | toUnitType="2" manCode="19053107" dataType="wareHouseOut" version="1.1" |
| | | xsi:noNamespaceSchemaLocation="兽药产品出库数据1.1.xsd"> |
| | | <Product> |
| | | <Batch operator="申报设备名称" oprDate="2022/06/25" toProvince="黑龙江省" toCity="哈尔滨市" toCounty="双城区" toUnit="哈尔滨源策商贸有限公司" toUnitcode=""> |
| | | <!--<Data code="202203240009000479940290"/>--> |
| | | </Batch> |
| | | </Product> |
| | | <DataList version="1.0" encoding="utf-8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="终端接口XML Schema-3.0.xsd" SN="BZ010" Version="3.0" License="1001122"> |
| | | <Events> |
| | | <Event Name="SalesWareHouseOut" MainAction="WareHouseOut"> |
| | | <ActionMaping> |
| | | <Action Name="WareHouseOut"> |
| | | <ActionData>CorpOrderID</ActionData> |
| | | <ActionData>Actor</ActionData> |
| | | <ActionData>ToCorpID</ActionData> |
| | | <ActionData>ActDate</ActionData> |
| | | <ActionData>Code</ActionData> |
| | | </Action> |
| | | </ActionMaping> |
| | | <DataMaping> |
| | | <MetaData Name="CorpOrderID" Type="String"/> |
| | | <MetaData Name="Actor" Type="String"/> |
| | | <MetaData Name="ActDate" Type="Date"/> |
| | | <MetaData Name="ToCorpID" Type="String"/> |
| | | <MetaData Name="Code" Type="String"/> |
| | | </DataMaping> |
| | | <DataField> |
| | | |
| | | </DataField> |
| | | </Event> |
| | | </Events> |
| | | </DataList> |
| | |
| | | data.ProductionTime = boxInfo.ProductionTime!= null ? ((DateTime)boxInfo.ProductionTime).ToString("yyyy-MM-dd"):""; |
| | | data.ExpirationTime = boxInfo.ExpirationTime != null ? ((DateTime)boxInfo.ExpirationTime).ToString("yyyy-MM-dd") : ""; |
| | | data.StoreTime = boxInfo.StoreTime != null ? ((DateTime)boxInfo.StoreTime).ToString("yyyy-MM-dd") : ""; |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | var labelQty = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNDetailNo == id).Sum(m => m.Qty); |
| | | var qty = detail.Qty - labelQty; |
| | | data.Qty = qty.ToString(); |
| | | data.SupplierLot = detail.SupplierLot; |
| | | return data; |
| | | } |
| | | catch (Exception e) |
| | |
| | | break; |
| | | case "6"://代储入库 |
| | | skuType = "(0,1,2,3,4)"; |
| | | IsPack = 2; //不贴 |
| | | //IsPack = 2; //不贴 |
| | | break; |
| | | case "7"://寄存入库 |
| | | //skuType = "(3)"; |
| | |
| | | }; |
| | | |
| | | #region 通过接口发送至erp 或 mes |
| | | //系统对接后放开 |
| | | var jsonData = JsonConvert.SerializeObject(asnInfo); |
| | | var mesList = new List<string>() { "0", "4" }; //0 成品入库 4余料退回入库 |
| | | var erpList = new List<string>() { "1", "2", "3" }; //1 采购入库 2中间品入库 3 退货入库 |
| | | ////系统对接后放开 |
| | | //var jsonData = JsonConvert.SerializeObject(asnInfo); |
| | | //var mesList = new List<string>() { "0", "4" }; //0 成品入库 4余料退回入库 |
| | | //var erpList = new List<string>() { "1", "2", "3" }; //1 采购入库 2中间品入库 3 退货入库 |
| | | |
| | | if (mesList.Contains(notice.Type)) // mes |
| | | { |
| | | //获取令牌 |
| | | //var token = new Token().GetMesToken(mesTokenUrl); //测试不使用TOKEN,正式运行时放开 |
| | | var token = ""; |
| | | Dictionary<string, string> mesDic = new Dictionary<string, string>() |
| | | { |
| | | {"Authorization",token } |
| | | }; |
| | | var mesData = new FinishAsnModel() |
| | | { |
| | | no = asnInfo.OrderCode, |
| | | qty = asnInfo.AsnDetails.Sum(m=>m.Qty) |
| | | }; |
| | | jsonData = JsonConvert.SerializeObject(mesData); |
| | | //调用接口 |
| | | var response = HttpHelper.DoPost(mesUrl, jsonData, "入库单完成上传", "MES", mesDic); |
| | | //if (mesList.Contains(notice.Type)) // mes |
| | | //{ |
| | | // //获取令牌 |
| | | // //var token = new Token().GetMesToken(mesTokenUrl); //测试不使用TOKEN,正式运行时放开 |
| | | // var token = ""; |
| | | // Dictionary<string, string> mesDic = new Dictionary<string, string>() |
| | | // { |
| | | // {"Authorization",token } |
| | | // }; |
| | | // var mesData = new FinishAsnModel() |
| | | // { |
| | | // no = asnInfo.OrderCode, |
| | | // qty = asnInfo.AsnDetails.Sum(m=>m.Qty) |
| | | // }; |
| | | // jsonData = JsonConvert.SerializeObject(mesData); |
| | | // //调用接口 |
| | | // var response = HttpHelper.DoPost(mesUrl, jsonData, "入库单完成上传", "MES", mesDic); |
| | | |
| | | var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据 |
| | | if (obj.status != "success") |
| | | { |
| | | throw new Exception("上传失败" + obj.message); |
| | | } |
| | | } |
| | | else if (erpList.Contains(notice.Type)) //erp |
| | | { |
| | | var response = HttpHelper.DoPost(erpUrl, jsonData, "入库单完成上传", "ERP"); |
| | | // var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据 |
| | | // if (obj.status != "success") |
| | | // { |
| | | // throw new Exception("上传失败" + obj.message); |
| | | // } |
| | | //} |
| | | //else if (erpList.Contains(notice.Type)) //erp |
| | | //{ |
| | | // var response = HttpHelper.DoPost(erpUrl, jsonData, "入库单完成上传", "ERP"); |
| | | |
| | | var obj = JsonConvert.DeserializeObject<ErpModel>(response);//解析返回数据 |
| | | if (obj.Success != 0) |
| | | { |
| | | throw new Exception("上传失败" + obj.Message); |
| | | } |
| | | } |
| | | // var obj = JsonConvert.DeserializeObject<ErpModel>(response);//解析返回数据 |
| | | // if (obj.Success != 0) |
| | | // { |
| | | // throw new Exception("上传失败" + obj.Message); |
| | | // } |
| | | //} |
| | | |
| | | |
| | | #endregion |
| | |
| | | data.Standard = asnDetail.Standard; |
| | | data.SupplierLot = asnDetail.SupplierLot; |
| | | data.PackageStandard = str; |
| | | data.SupplierLot = asnDetail.SupplierLot; |
| | | return data; |
| | | } |
| | | catch (Exception e) |
| | |
| | | } |
| | | } |
| | | |
| | | //生成盘点记录 |
| | | //生成盘点记录 |
| | | Db.Insertable(logList).ExecuteCommand(); |
| | | } |
| | | // 储位号 |
| | |
| | | materiel_name = item.SkuName, |
| | | qty = item.Qty, |
| | | batch = item.LotNo, |
| | | producttime = item.ProductionTime.ToString().Substring(1, 8), |
| | | expiry = item.ExpirationTime.ToString().Substring(1, 8) |
| | | producttime = item2.ProductionTime.ToString().Substring(1, 8), |
| | | expiry = item2.ExpirationTime.ToString().Substring(1, 8) |
| | | |
| | | }); |
| | | } |
| | |
| | | Db.Updateable(endLocate).ExecuteCommand(); |
| | | |
| | | } |
| | | if (endLocate!= null && endLocate.AreaNo == "B12") |
| | | { |
| | | //获取令牌 |
| | | var token = new Token().GetMesToken(mesTokenUrl); |
| | | Dictionary<string, string> mesDic = new Dictionary<string, string>() |
| | | { |
| | | {"Authorization",token } |
| | | }; |
| | | var mesData = new RequertBeiliaoModel() |
| | | { |
| | | morder_no = stockDetail.First().SONo, |
| | | pallet = stockDetail.First().PalletNo, |
| | | layer_no = endLocate.LocatNo, |
| | | items = data |
| | | }; |
| | | var jsonData = JsonConvert.SerializeObject(mesData); |
| | | //调用接口 |
| | | var response = HttpHelper.DoPost(mesUrl, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic); |
| | | //正式运行程序放开 |
| | | //if (endLocate!= null && endLocate.AreaNo == "B12") |
| | | //{ |
| | | // //获取令牌 |
| | | // var token = new Token().GetMesToken(mesTokenUrl); |
| | | // Dictionary<string, string> mesDic = new Dictionary<string, string>() |
| | | // { |
| | | // {"Authorization",token } |
| | | // }; |
| | | // var mesData = new RequertBeiliaoModel() |
| | | // { |
| | | // morder_no = stockDetail.First().SONo, |
| | | // pallet = stockDetail.First().PalletNo, |
| | | // layer_no = endLocate.LocatNo, |
| | | // items = data |
| | | // }; |
| | | // var jsonData = JsonConvert.SerializeObject(mesData); |
| | | // //调用接口 |
| | | // var response = HttpHelper.DoPost(mesUrl, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic); |
| | | |
| | | var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据 |
| | | if (obj.status != "0") |
| | | { |
| | | throw new Exception("备料同步MES失败:" + obj.message); |
| | | } |
| | | // var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据 |
| | | // if (obj.status != "0") |
| | | // { |
| | | // throw new Exception("备料同步MES失败:" + obj.message); |
| | | // } |
| | | |
| | | } |
| | | //} |
| | | if (userId != 0) |
| | | { |
| | | //添加操作日志记录 |
| | |
| | | try |
| | | { |
| | | //model.Type:单据类型 在这里代表前端页签类型:即标签页签:贴标物料; 数量页签:不贴表物料,原因:懒得加参数 |
| | | var data = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && m.Status != "3" && m.Status != "4").Select(m => m.ASNNo).ToList(); |
| | | var data = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && m.Status !="2" && m.Status != "3" && m.Status != "4").Select(m => m.ASNNo).ToList(); |
| | | var list = new List<ArrivalNoticeDetailDto>(); |
| | | if (model.Type.Contains("0"))//0贴标 |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 验证地码是否存在 |
| | | /// </summary> |
| | | /// <param name="locatNo">地码</param> |
| | | /// <returns>"":可使用 -1:不可使用(原因)</returns> |
| | | public string IsEnableLocatNo(string locatNo) |
| | | { |
| | | string sqlMsg = ""; |
| | | string sqlString = string.Empty; |
| | | try |
| | | { |
| | | sqlString = $"select * from SysStorageLocat where LocatNo = '{locatNo}' and WareHouseNo = 'W02' and isdel = '0';"; |
| | | var models = Db.Ado.SqlQuery<PalletBindVm>(sqlString); |
| | | |
| | | if (models.Count > 0) |
| | | { |
| | | if (models[0].Status != "0") |
| | | { |
| | | sqlMsg = "-1:此库位使用中,请在库内请核实!"; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | sqlMsg = "-1:库位不存在!"; |
| | | } |
| | | |
| | | return sqlMsg; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | // 根据箱码或托盘号获取箱支信息 liudl |
| | | public List<BoxInfoDto> GetBoxInfos(BoxInfoVm model) |
| | | { |
| | |
| | | Db.BeginTran(); |
| | | |
| | | //请求WCS入库口放货确认 |
| | | try |
| | | if (!string.IsNullOrEmpty(ruku)) |
| | | { |
| | | var port = new |
| | | try |
| | | { |
| | | Port = EndLocat |
| | | }; |
| | | var json = JsonConvert.SerializeObject(port); |
| | | var res = HttpHelper.DoPost(wcsurl, json, "请求WCS入库口是否可放货", "WCS"); |
| | | var port = new |
| | | { |
| | | Port = EndLocat |
| | | }; |
| | | var json = JsonConvert.SerializeObject(port); |
| | | var res = HttpHelper.DoPost(wcsurl, json, "请求WCS入库口是否可放货", "WCS"); |
| | | |
| | | //////解析返回数据 |
| | | var ret = JsonConvert.DeserializeObject<WcsModel>(res); |
| | | if (ret.StatusCode == -1) |
| | | //////解析返回数据 |
| | | var ret = JsonConvert.DeserializeObject<WcsModel>(res); |
| | | if (ret.StatusCode == -1) |
| | | { |
| | | throw new Exception(EndLocat + "号入库口已有其他任务占用,请选择其他入库口"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(EndLocat + "号入库口已有其他任务占用,请选择其他入库口"); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | |
| | | |
| | | //添加出库任务 |
| | |
| | | #region 呼叫小车代码 |
| | | |
| | | var endlono = EndLocat; |
| | | |
| | | //根据目的地址库区获取小车任务类型 |
| | | switch (storageLocatEnd.AreaNo) |
| | | { |
| | | case "B13" : |
| | | tasktype = "D02"; // 叠托任务(目的地址为空托盘收集区) |
| | | break; |
| | | case "B15": |
| | | tasktype = "D01"; // 拆托任务(目的地址为拣货区) |
| | | break; |
| | | } |
| | | if (OrderTy == "0") |
| | | { |
| | | tasktype = "RK0"; //入库任务 |
| | | } |
| | | |
| | | //缓存库位转换 3楼原辅料Y003_001,Y003_002,Y003_003 1楼Y138_001到Y138_021外包缓存区 1楼Y128_001到Y128_015内包缓存区 |
| | | //缓存库位转换 3楼接驳位Y003_001,Y003_002,Y003_003 |
| | | if (storageLocatEnd.AreaNo == "B12") |
| | | { |
| | | switch (EndLocat.ToString().Substring(4, 1)) |
| | | { |
| | | case "1": |
| | | endlono = "Y003_00" + EndLocat.ToString().Substring(6, 1); |
| | | endlono = "Y003_0" + EndLocat.ToString().Substring(5, 2); |
| | | tasktype = "D00"; //点到点任务 |
| | | break; |
| | | case "2": |
| | | endlono = "Y138_0" + EndLocat.ToString().Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | break; |
| | | case "3": |
| | | endlono = "Y128_0" + EndLocat.ToString().Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | break; |
| | | } |
| | | |
| | | //缓存库位转换 3楼原辅料Y003_001到Y003_009 1楼Y138_001到Y138_021外包缓存区 1楼Y128_001到Y128_015内包缓存区 |
| | | //缓存库位转换 3楼原辅料Y003_001到Y003_011 |
| | | if (storageLocatEnd.AreaNo == "B12") |
| | | { |
| | | switch (EndLocat.ToString().Substring(4, 1)) |
| | | { |
| | | case "1": |
| | | endlono = "Y003_00" + EndLocat.ToString().Substring(6, 1); |
| | | break; |
| | | case "2": |
| | | endlono = "Y138_0" + EndLocat.ToString().Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | break; |
| | | case "3": |
| | | endlono = "Y128_0" + EndLocat.ToString().Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | endlono = "Y003_0" + EndLocat.ToString().Substring(5, 2); |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 空托盘入库呼叫小车 |
| | | /// </summary> |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="areaNo"></param> |
| | | /// <param name="ruku"></param> |
| | | public void AgvTransport3(string palletNo, string LocatNo, string ruku, int userId, string url, string wcsurl) |
| | | { |
| | | if (string.IsNullOrEmpty(palletNo)) |
| | | { |
| | | throw new Exception("请扫描托盘条码!"); |
| | | } |
| | | if (string.IsNullOrEmpty(ruku)) |
| | | { |
| | | throw new Exception("请选择入库口!"); |
| | | } |
| | | try |
| | | { |
| | | if (ruku == "001") |
| | | { |
| | | var xlocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "0" && (w.LocatNo == "B13010101" || w.LocatNo == "B13020101" || w.LocatNo == "B13030101")); |
| | | if (xlocate == null) |
| | | { |
| | | throw new Exception("空托盘收集器已满"); |
| | | } |
| | | ruku = Db.Queryable<SysStorageLocat>().First(w => w.Status == "0" && (w.LocatNo == "B13010101" || w.LocatNo == "B13020101" || w.LocatNo == "B13030101")).LocatNo; |
| | | } |
| | | if (ruku == "002") |
| | | { |
| | | var dlocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "0" && (w.LocatNo == "B13040101" || w.LocatNo == "B13050101" || w.LocatNo == "B13060101")); |
| | | if (dlocate == null) |
| | | { |
| | | throw new Exception("空托盘收集器已满"); |
| | | } |
| | | ruku = Db.Queryable<SysStorageLocat>().First(w => w.Status == "0" && (w.LocatNo == "B13040101" || w.LocatNo == "B13050101" || w.LocatNo == "B13060101")).LocatNo; |
| | | } |
| | | if (ruku == null) |
| | | { |
| | | throw new Exception("当前托盘收集器工位无空余,请将空托盘垛入立体库"); |
| | | } |
| | | string EndLocat = ruku;//目标位置 |
| | | string OrderTy = ruku.Length ==3 ? "0":"2"; |
| | | var tasktype = "RK0"; //入库任务 |
| | | int palnoqty = 1; |
| | | var log = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.PalletNo == palletNo && (w.Status == "0" || w.Status == "1")); |
| | | if (log != null) |
| | | { |
| | | throw new Exception("该托盘已有小车等待执行或正在执行的任务!"); |
| | | } |
| | | //起始储位信息 |
| | | var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == LocatNo); |
| | | if (storageLocat == null) |
| | | { |
| | | throw new Exception("储位信息不存在,请检查!"); |
| | | } |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | if (EndLocat.Length == 3) |
| | | { |
| | | //请求WCS入库口放货确认 |
| | | try |
| | | { |
| | | var port = new |
| | | { |
| | | Port = EndLocat |
| | | }; |
| | | var json = JsonConvert.SerializeObject(port); |
| | | var res = HttpHelper.DoPost(wcsurl, json, "请求WCS入库口是否可放货", "WCS"); |
| | | |
| | | //////解析返回数据 |
| | | var ret = JsonConvert.DeserializeObject<WcsModel>(res); |
| | | if (ret.StatusCode == -1) |
| | | { |
| | | throw new Exception(EndLocat + "号入库口已有其他任务占用,请选择其他入库口"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | tasktype = "D02"; |
| | | palnoqty = (int)Db.Queryable<BllPalletBind>().First(w => w.PalletNo == palletNo && w.Status == "1" && w.IsDel == "0").Qty; |
| | | |
| | | } |
| | | |
| | | //添加入库任务 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "AGV", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = LocatNo,//起始位置 |
| | | EndLocat = EndLocat,//目标位置 |
| | | PalletNo = palletNo,//托盘码 |
| | | Msg = string.Format("转运任务:{0}=>>{1}", LocatNo, EndLocat), |
| | | IsSend = 0,//是否可再次下发 |
| | | IsCancel = 0,//是否可取消 |
| | | IsFinish = 0,//是否可完成 |
| | | Type = OrderTy,//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = OrderTy,//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | //修改起始储位地址状态 |
| | | storageLocat.Status = "5";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("PDA模块", "空托入库", palletNo, OrderTy == "0" ? "入库" : "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId); |
| | | |
| | | #region 呼叫小车代码 |
| | | |
| | | //点到点指令集合 |
| | | object[] position = new object[2]; |
| | | position[0] = new |
| | | { |
| | | positionCode = LocatNo, |
| | | type = "00" |
| | | }; |
| | | position[1] = new |
| | | { |
| | | positionCode = EndLocat, |
| | | type = "00" |
| | | }; |
| | | |
| | | List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>(); |
| | | |
| | | |
| | | AgvSchedulingTask agvTask = new AgvSchedulingTask(); |
| | | Random r = new Random(); |
| | | long ran = DateTime.Now.Ticks; |
| | | agvTask.ReqCode = ran.ToString(); |
| | | agvTask.TaskCode = taskNo; |
| | | agvTask.TaskTyp = tasktype; |
| | | agvTask.PositionCodePath = position; |
| | | agvTask.CtnrTyp = palnoqty.ToString(); |
| | | |
| | | agvTaskList.Add(agvTask); |
| | | |
| | | |
| | | // 正式运行程序放开 |
| | | string str = ""; |
| | | var list2 = agvTaskList.Select(m => m.TaskCode).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(agvTaskList); |
| | | jsonData = jsonData.Substring(1, jsonData.Length - 1); |
| | | jsonData = jsonData.Substring(0, jsonData.Length - 1); |
| | | string response = ""; |
| | | |
| | | try |
| | | { |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | response = HttpHelper.DoPost(url, jsonData, "下发给AGV转运命令", "AGV"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | //////解析返回数据 |
| | | var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); |
| | | if (agvModel.Code == "0") |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | } |
| | | if (agvModel.Code == "1") |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, agvModel.Message); |
| | | throw new Exception(agvModel.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | | #region |
| | | |
| | | |
| | | /// <summary> |
| | | /// agv调度任务下发 |
| | | /// </summary> |
| | |
| | | break; |
| | | } |
| | | |
| | | // MES申请备料,备料区库位需要转换 车间备料缓存位名称:3楼原辅料Y003_001-->Y003_003 1楼外包缓存区Y138_001-->Y138_021 1楼内包缓存区Y128_001-->Y128_015 |
| | | // MES申请备料,备料区库位需要转换 车间备料缓存位名称:Y003_001-->Y003_011 |
| | | if (storageLocatEnd.AreaNo == "B12") |
| | | { |
| | | switch (endlono.ToString().Substring(4, 1)) |
| | | { |
| | | case "1": |
| | | endlono = "Y003_00" + endlono.Substring(6, 1); |
| | | break; |
| | | case "2": |
| | | endlono = "Y138_0" + endlono.Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | break; |
| | | case "3": |
| | | endlono = "Y128_0" + endlono.Substring(5, 2); |
| | | tasktype = "F20"; //电梯任务 |
| | | endlono = "Y003_0" + endlono.Substring(5, 2); |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | endLocat = locatInfo3.LocatNo; |
| | | } |
| | | } |
| | | |
| | | return endLocat; |
| | | } |
| | | catch (Exception ex) |
| | |
| | | /// <returns></returns> |
| | | public void AgvContinue(string taskno,string url) |
| | | { |
| | | var data = new { reqCode =taskno }; |
| | | |
| | | Random r = new Random(); |
| | | long ran = DateTime.Now.Ticks; |
| | | var ReqCode = ran.ToString(); |
| | | var data = new |
| | | { |
| | | reqCode = ReqCode, |
| | | taskCode = taskno |
| | | }; |
| | | var jsonData = JsonConvert.SerializeObject(data); |
| | | try |
| | | { |
| | |
| | | //var boxno = boxInfo.GroupBy(w => w.BoxNo).ToList(); |
| | | var boxno = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).GroupBy(m => new |
| | | { |
| | | m.BoxNo |
| | | m.BoxNo, |
| | | m.ProductionTime, |
| | | m.ExpirationTime, |
| | | }).Select(it => new DataBoxInfo() |
| | | { |
| | | BoxNo = it.BoxNo |
| | | BoxNo = it.BoxNo, |
| | | ProductionTime = it.ProductionTime, |
| | | ExpirationTime = it.ExpirationTime, |
| | | }).ToList(); |
| | | |
| | | //记录托盘上信息给MES |
| | | foreach (var item2 in boxno) { |
| | | var a = item.ProductionTime.ToString(); |
| | | //var a = item.ProductionTime.ToString(); |
| | | data.Add(new RequertBeiliaoInfoModel() |
| | | { |
| | | no = item2.BoxNo, |
| | |
| | | materiel_name = item.SkuName, |
| | | qty = item.Qty, |
| | | batch = item.LotNo, |
| | | producttime = item.ProductionTime.ToString().Substring(0,10), |
| | | expiry = item.ExpirationTime.ToString().Substring(0, 10) |
| | | producttime = item2.ProductionTime.ToString().Substring(0,10), |
| | | expiry = item2.ExpirationTime.ToString().Substring(0, 10) |
| | | |
| | | }); |
| | | } |
| | |
| | | switch (EndLocat.LocatNo.ToString().Substring(4, 1)) |
| | | { |
| | | case "1": |
| | | endlono = "Y003_00" + EndLocat.LocatNo.ToString().Substring(6, 1); |
| | | break; |
| | | case "2": |
| | | endlono = "Y138_0" + EndLocat.LocatNo.ToString().Substring(5, 2); |
| | | break; |
| | | case"3": |
| | | endlono = "Y128_0" + EndLocat.LocatNo.ToString().Substring(5, 2); |
| | | endlono = "Y003_0" + EndLocat.LocatNo.ToString().Substring(5, 2); |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | using WMS.Entity.LogEntity; |
| | | using Model.ModelDto.SysDto; |
| | | using Model.ModelDto.BllSoDto; |
| | | using System.Security.Policy; |
| | | |
| | | namespace WMS.BLL.BllPdaServer |
| | | { |
| | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// WMS申请拣货空托 |
| | | /// </summary> |
| | | /// <param name="model"> </param> |
| | | /// <param name="userId"> </param> |
| | | /// <param name="url"> </param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public string IssuePlnCehckHouseWcs(CheckModePalletVm model, int userId, string url) |
| | | { |
| | | try |
| | | { |
| | | string StartLocate = "" ,EndLocate = ""; |
| | | |
| | | Db.BeginTran(); |
| | | if (model.OutMode == "001") //西侧拣货位叫空托盘 |
| | | { |
| | | var xLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13010101" || w.LocatNo == "B13020101" || w.LocatNo == "B13030101")); |
| | | if (xLocate == null) |
| | | { |
| | | throw new Exception("没有可用的空托盘"); |
| | | } |
| | | StartLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13010101" || w.LocatNo == "B13020101" || w.LocatNo == "B13030101")).LocatNo; |
| | | EndLocate = "B15010101"; |
| | | } |
| | | else//东侧拣货位叫空托盘 |
| | | { |
| | | var dLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13030101" || w.LocatNo == "B13040101" || w.LocatNo == "B13050101")); |
| | | if (dLocate == null) |
| | | { |
| | | throw new Exception("没有可用的空托盘"); |
| | | } |
| | | StartLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13030101" || w.LocatNo == "B13040101" || w.LocatNo == "B13050101")).LocatNo; |
| | | EndLocate = "B15020101"; |
| | | } |
| | | |
| | | //添加出库任务 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "AGV", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = StartLocate,//起始位置 |
| | | EndLocat = EndLocate,//目标位置 |
| | | PalletNo = "",//托盘码 |
| | | Msg = string.Format("转运任务:{0}=>>{1}", StartLocate, EndLocate), |
| | | 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 |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | var storageLocatEnd = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == EndLocate); |
| | | //修改目标储位地址状态 |
| | | if (storageLocatEnd != null) |
| | | { |
| | | storageLocatEnd.Status = "4";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocatEnd).ExecuteCommand(); |
| | | } |
| | | |
| | | #region 呼叫小车代码 |
| | | |
| | | var endlono = EndLocate; |
| | | string tasktype = "D01"; |
| | | |
| | | //点到点指令集合 |
| | | object[] position = new object[2]; |
| | | position[0] = new |
| | | { |
| | | positionCode = StartLocate, |
| | | type = "00" |
| | | }; |
| | | position[1] = new |
| | | { |
| | | positionCode = endlono, |
| | | type = "00" |
| | | }; |
| | | |
| | | List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>(); |
| | | AgvSchedulingTask agvTask = new AgvSchedulingTask(); |
| | | Random r = new Random(); |
| | | long ran = DateTime.Now.Ticks; |
| | | agvTask.ReqCode = ran.ToString(); |
| | | agvTask.TaskCode = taskNo; |
| | | agvTask.TaskTyp = tasktype; |
| | | agvTask.PositionCodePath = position; |
| | | agvTask.CtnrTyp = "1"; |
| | | |
| | | agvTaskList.Add(agvTask); |
| | | |
| | | string str = ""; |
| | | var list2 = agvTaskList.Select(m => m.TaskCode).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(agvTaskList); |
| | | jsonData = jsonData.Substring(1, jsonData.Length - 1); |
| | | jsonData = jsonData.Substring(0, jsonData.Length - 1); |
| | | string response = ""; |
| | | |
| | | try |
| | | { |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | response = HttpHelper.DoPost(url, jsonData, "下发给AGV转运命令", "AGV"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | //////解析返回数据 |
| | | var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); |
| | | if (agvModel.Code == "0") |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | } |
| | | if (agvModel.Code == "1") |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, agvModel.Message); |
| | | throw new Exception(agvModel.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV转运", "", "移库", $"PDA呼叫小车拆空托盘拣货", userId); |
| | | Db.CommitTran(); |
| | | |
| | | return ""; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | public string MoveAddress(string oldAddress, string roadWay, string skuNo,string areaNo="")//01020201 排-列-层-深度 |
| | | { |
| | | string nowAddress = ""; |
| | |
| | | //出库任务号更改,如果由PLC出库,则PLC回传任务号为:任务号+实际出库口 |
| | | var TtaskNo = taskNo; |
| | | var outLine = ""; |
| | | if (userId == 0) |
| | | if (taskNo.Length == 18) |
| | | { |
| | | TtaskNo = taskNo.Substring(0, taskNo.Length - 3); |
| | | outLine = taskNo.Substring(taskNo.Length - 3, 3); |
| | |
| | | agvTask.CtnrTyp = "1"; //容器类型,值为1 |
| | | if (type == "D02") |
| | | { |
| | | agvTask.CtnrNum = "10"; //叠托任务需要下发空托盘数量 |
| | | var palnoNum = Db.Queryable<BllPalletBind>().OrderByDescending(w=>w.Id).First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo); |
| | | agvTask.CtnrNum = palnoNum.Qty.ToString(); //叠托任务需要下发空托盘数量 |
| | | } |
| | | |
| | | agvTaskList.Add(agvTask); |
| | |
| | | throw new Exception("拣货数量不能大于箱内剩余待拣数量"); |
| | | } |
| | | decimal pickQty = 0;//拣货的数量 |
| | | |
| | | Db.BeginTran(); |
| | | var comList = new List<BllCompleteDetail>(); |
| | | foreach (var item in boxInfos) |
| | | { |
| | |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | |
| | | Db.CommitTran(); |
| | | return allot.LoadingAddre; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | |
| | | using Utility.Tools; |
| | | using WMS.BLL.LogServer; |
| | | using WMS.DAL; |
| | | using WMS.Entity.BllAsnEntity; |
| | | using WMS.Entity.BllSoEntity; |
| | | using WMS.Entity.Context; |
| | | using WMS.Entity.DataEntity; |
| | |
| | | palletNo.Status = "2"; //已完成 |
| | | Db.Updateable(palletNo).ExecuteCommand(); |
| | | |
| | | //修改库存明细 |
| | | stockDetail.Status = "0";//待分配 |
| | | stockDetail.LocatNo = ""; |
| | | stockDetail.AreaNo = ""; |
| | | stockDetail.RoadwayNo = ""; |
| | | stockDetail.WareHouseNo = ""; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | |
| | | if (stockDetail !=null) |
| | | { |
| | | //修改库存明细 |
| | | stockDetail.Status = "0";//待分配 |
| | | stockDetail.LocatNo = ""; |
| | | stockDetail.AreaNo = ""; |
| | | stockDetail.RoadwayNo = ""; |
| | | stockDetail.WareHouseNo = ""; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | #region 下发WCS放货完成 |
| | | var data = new |
| | |
| | | throw new Exception("放货失败,WCS返回信息错误"); |
| | | } |
| | | } |
| | | |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | Db.RollbackTran(); |
| | | throw new Exception("AGV返回入库完成信号处理错误,错误信息:" + ex); |
| | | } |
| | | } |
| | |
| | | /// AGV出库完成 |
| | | /// </summary> |
| | | /// <param name="TaskCode">任务号</param> |
| | | /// <param name="url">反馈MES备料完成地址</param> |
| | | /// <returns></returns> |
| | | public void SoFinish(string TaskCode) |
| | | public void SoFinish(string TaskCode,string url) |
| | | { |
| | | try |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | //完成接口修改(未完成) |
| | | //try |
| | | //{ |
| | | // var palletNo = Db.Queryable<LogTask>().First(m => m.TaskNo == TaskCode && m.Status == "1");//获取正在执行的任务信息 |
| | | // if (palletNo == null) |
| | | // { |
| | | // throw new Exception("此任务已完成"); |
| | | // } |
| | | // var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取库位信息 |
| | | // var storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息 |
| | | // var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo).ToList(); |
| | | // if (stockDetail.Count == 0) |
| | | // { |
| | | // throw new Exception("托盘上物料库存明细信息不存在,请检查!"); |
| | | // } |
| | | // //开启事务 |
| | | // Db.BeginTran(); |
| | | // if (storageLocat != null) |
| | | // { |
| | | // if (storageLocat.AreaNo == "B12")//车间缓存位需要通知MES |
| | | // { |
| | | // var data = new List<RequertBeiliaoInfoModel>(); |
| | | // //更改库存明细 |
| | | // foreach (var item in stockDetail) |
| | | // { |
| | | // item.LocatNo = item.LocatNo;//储位更改 |
| | | // item.WareHouseNo = item.WareHouseNo;//所属仓库更改 |
| | | // item.RoadwayNo = item.RoadwayNo;//所属巷道更改 |
| | | // item.AreaNo = item.AreaNo;//所属区域更改 |
| | | |
| | | // Db.Updateable(item).ExecuteCommand(); |
| | | |
| | | |
| | | // if (string.IsNullOrWhiteSpace(item.SONo)) |
| | | // { |
| | | // throw new Exception("当前托盘不是拼托出库托盘"); |
| | | // } |
| | | // var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList(); |
| | | // if (boxInfo.Count == 0) |
| | | // { |
| | | // throw new Exception("托盘上物料箱码信息不存在,请检查!"); |
| | | // } |
| | | // //var boxno = boxInfo.GroupBy(w => w.BoxNo).ToList(); |
| | | // var boxno = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).GroupBy(m => new |
| | | // { |
| | | // m.BoxNo |
| | | // }).Select(it => new DataBoxInfo() |
| | | // { |
| | | // BoxNo = it.BoxNo |
| | | // }).ToList(); |
| | | |
| | | // //记录托盘上信息给MES |
| | | // foreach (var item2 in boxno) |
| | | // { |
| | | // var a = item.ProductionTime.ToString(); |
| | | // data.Add(new RequertBeiliaoInfoModel() |
| | | // { |
| | | // no = item2.BoxNo, |
| | | // materiel_no = item.SkuNo, |
| | | // materiel_name = item.SkuName, |
| | | // qty = item.Qty, |
| | | // batch = item.LotNo, |
| | | // producttime = item.ProductionTime.ToString().Substring(0, 10), |
| | | // expiry = item.ExpirationTime.ToString().Substring(0, 10) |
| | | |
| | | // }); |
| | | // } |
| | | // //库存箱码明细删除 |
| | | // Db.Deleteable(boxInfo).ExecuteCommand(); |
| | | // //删除库存托盘信息 |
| | | // Db.Deleteable(item).ExecuteCommand(); |
| | | // //更改库存总表 |
| | | // var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo); |
| | | // stock.LockQty -= (decimal)item.Qty; |
| | | // stock.Qty -= (decimal)item.Qty; |
| | | // Db.Updateable(stock).ExecuteCommand(); |
| | | // //更改托盘状态 |
| | | // var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | // if (pallet != null) |
| | | // { |
| | | // pallet.Status = "0"; |
| | | // Db.Updateable(pallet).ExecuteCommand(); |
| | | // } |
| | | |
| | | // } |
| | | |
| | | // //获取令牌 |
| | | // //var token = new Token().GetMesToken(mesTokenUrl); |
| | | // var token = ""; |
| | | // Dictionary<string, string> mesDic = new Dictionary<string, string>() |
| | | // { |
| | | // {"Authorization",token } |
| | | // }; |
| | | // var endlono = palletNo.EndLocat; |
| | | // //缓存库位转换 |
| | | // switch (palletNo.EndLocat.ToString().Substring(4, 1)) |
| | | // { |
| | | // case "1": |
| | | // endlono = "Y003_00" + palletNo.EndLocat.ToString().Substring(6, 1); |
| | | // break; |
| | | // case "2": |
| | | // endlono = "Y138_0" + palletNo.EndLocat.ToString().Substring(5, 2); |
| | | // break; |
| | | // case "3": |
| | | // endlono = "Y128_0" + palletNo.EndLocat.ToString().Substring(5, 2); |
| | | // break; |
| | | // default: |
| | | // break; |
| | | // } |
| | | // var mescode = Db.Queryable<BllExportNotice>().Where(w => w.SONo == stockDetail.First().SONo).First(); |
| | | // var mesData = new RequertBeiliaoModel() |
| | | // { |
| | | // morder_no = mescode.OrderCode, |
| | | // pallet = stockDetail.First().PalletNo, |
| | | // layer_no = endlono, |
| | | // items = data |
| | | // }; |
| | | // var jsonData = JsonConvert.SerializeObject(mesData); |
| | | // //调用接口 |
| | | // var response = HttpHelper.DoPost(url, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic); |
| | | |
| | | // var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据 |
| | | // if (obj.status != "success") |
| | | // { |
| | | // throw new Exception("备料同步MES失败:" + obj.message); |
| | | // } |
| | | |
| | | |
| | | // } |
| | | // //修改目的库位状态 |
| | | // storageLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | // Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | // //修改任务状态 |
| | | // palletNo.Status = "2"; //已完成 |
| | | // Db.Updateable(palletNo).ExecuteCommand(); |
| | | |
| | | // //修改库存明细 |
| | | // item.Status = "2";// 0:待分配 1:部分分配 2:已分配 3:盘点锁定: 4移库锁定 |
| | | // stockDetail.LocatNo = storageLocat.LocatNo; |
| | | // stockDetail.AreaNo = storageLocat.AreaNo; |
| | | // stockDetail.RoadwayNo = storageLocat.RoadwayNo; |
| | | // stockDetail.WareHouseNo = storageLocat.WareHouseNo; |
| | | // Db.Updateable(stockDetail).ExecuteCommand(); |
| | | // } |
| | | // Db.CommitTran(); |
| | | |
| | | //} |
| | | /// <summary> |
| | | /// AGV移库完成 |
| | | /// </summary> |
| | | /// <param name="TaskCode">任务号</param> |
| | | /// <param name="url">反馈MES备料完成地址</param> |
| | | /// <returns></returns> |
| | | public void MoveFinish(string TaskCode) |
| | | public void MoveFinish(string TaskCode,string url) |
| | | { |
| | | try |
| | | { |
| | |
| | | { |
| | | throw new Exception("此任务已完成"); |
| | | } |
| | | var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取库位信息 |
| | | var storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo); //获取库存信息 |
| | | var startLocat = new SysStorageLocat(); |
| | | |
| | | var endLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取目的库位信息 |
| | | if (endLocat == null) |
| | | { |
| | | throw new Exception("未找到相应的目的库位"); |
| | | } |
| | | var storageStart = new SysStorageLocat(); |
| | | |
| | | int isstock = 1; |
| | | var bindDetail = new BllPalletBind(); |
| | | var sysPanlno = new SysPallets(); |
| | | |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo).ToList(); //获取库存信息 |
| | | if (stockDetail.Count == 0) |
| | | { |
| | | //未找到库存后需要判断是否是空托盘移库 |
| | | isstock = 0; |
| | | bindDetail = Db.Queryable<BllPalletBind>().OrderByDescending(w=>w.Id).First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat);//获取组托盘信息 |
| | | if (bindDetail == null) |
| | | { |
| | | bindDetail = Db.Queryable<BllPalletBind>().OrderByDescending(w => w.Id).First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat);//获取组托盘信息 |
| | | if (bindDetail == null) |
| | | { |
| | | throw new Exception("未找到空托盘组托信息"); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取起始库位信息 |
| | | if (storageStart == null) |
| | | { |
| | | throw new Exception("未找到相应的起始库位"); |
| | | } |
| | | } |
| | | //var soAllot = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.PalletNo == palletNo.PalletNo);//获取分配信息 |
| | | |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | //修改起始库位状态 |
| | | storageLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | //修改目的库位状态 |
| | | storageLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | endLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(endLocat).ExecuteCommand(); |
| | | |
| | | //修改任务状态 |
| | | palletNo.Status = "2"; //已完成 |
| | | Db.Updateable(palletNo).ExecuteCommand(); |
| | | |
| | | //修改库存明细 |
| | | stockDetail.Status = "2";// 0:待分配 1:部分分配 2:已分配 3:盘点锁定: 4移库锁定 |
| | | stockDetail.LocatNo = storageLocat.LocatNo; |
| | | stockDetail.AreaNo = storageLocat.AreaNo; |
| | | stockDetail.RoadwayNo = storageLocat.RoadwayNo; |
| | | stockDetail.WareHouseNo = storageLocat.WareHouseNo; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | if (isstock == 1) |
| | | { |
| | | startLocat = Db.Queryable<SysStorageLocat>().First(w=> w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); |
| | | //修改起始库位状态 |
| | | startLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(startLocat).ExecuteCommand(); |
| | | |
| | | //调用MES备料反馈完成接口 |
| | | #region MES备料完成反馈 |
| | | var data = new List<RequertBeiliaoInfoModel>(); |
| | | |
| | | //更改库存明细 |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.LocatNo = endLocat.LocatNo;//储位更改 |
| | | item.WareHouseNo = endLocat.WareHouseNo;//所属仓库更改 |
| | | item.RoadwayNo = endLocat.RoadwayNo;//所属巷道更改 |
| | | item.AreaNo = endLocat.AreaNo;//所属区域更改 |
| | | |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | |
| | | if (endLocat != null && endLocat.AreaNo == "B12") //是否是3楼缓存区 是:删除库存 |
| | | { |
| | | if (string.IsNullOrWhiteSpace(item.SONo)) |
| | | { |
| | | throw new Exception("当前托盘不是拼托出库托盘"); |
| | | } |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList(); |
| | | if (boxInfo.Count == 0) |
| | | { |
| | | throw new Exception("托盘上物料箱码信息不存在,请检查!"); |
| | | } |
| | | //var boxno = boxInfo.GroupBy(w => w.BoxNo).ToList(); |
| | | var boxno = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).GroupBy(m => new |
| | | { |
| | | m.BoxNo, |
| | | m.ProductionTime, |
| | | m.ExpirationTime, |
| | | }).Select(it => new DataBoxInfo() |
| | | { |
| | | BoxNo = it.BoxNo, |
| | | ProductionTime = it.ProductionTime, |
| | | ExpirationTime = it.ExpirationTime, |
| | | }).ToList(); |
| | | |
| | | //记录托盘上信息给MES |
| | | foreach (var item2 in boxno) |
| | | { |
| | | //var a = item.ProductionTime.ToString(); |
| | | data.Add(new RequertBeiliaoInfoModel() |
| | | { |
| | | no = item2.BoxNo, |
| | | materiel_no = item.SkuNo, |
| | | materiel_name = item.SkuName, |
| | | qty = item.Qty, |
| | | batch = item.LotNo, |
| | | producttime = item2.ProductionTime.ToString().Substring(0, 10), |
| | | expiry = item2.ExpirationTime.ToString().Substring(0, 10) |
| | | |
| | | }); |
| | | } |
| | | //库存箱码明细删除 |
| | | Db.Deleteable(boxInfo).ExecuteCommand(); |
| | | //删除库存托盘信息 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | //更改库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo); |
| | | stock.LockQty -= (decimal)item.Qty; |
| | | stock.Qty -= (decimal)item.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | //更改托盘状态 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo.PalletNo); |
| | | if (pallet != null) |
| | | { |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | if (endLocat != null && endLocat.AreaNo == "B12") |
| | | { |
| | | //获取令牌 |
| | | //var token = new Token().GetMesToken(mesTokenUrl); |
| | | var token = ""; |
| | | Dictionary<string, string> mesDic = new Dictionary<string, string>() |
| | | { |
| | | {"Authorization",token } |
| | | }; |
| | | var endlono = endLocat.LocatNo; |
| | | //缓存库位转换 |
| | | switch (endLocat.LocatNo.ToString().Substring(4, 1)) |
| | | { |
| | | case "1": |
| | | endlono = "Y003_0" + endLocat.LocatNo.ToString().Substring(5, 2); |
| | | break; |
| | | |
| | | } |
| | | var mescode = Db.Queryable<BllExportNotice>().Where(w => w.SONo == stockDetail.First().SONo).First(); |
| | | var mesData = new RequertBeiliaoModel() |
| | | { |
| | | morder_no = mescode.OrderCode, |
| | | pallet = stockDetail.First().PalletNo, |
| | | layer_no = endlono, |
| | | items = data |
| | | }; |
| | | var jsonData = JsonConvert.SerializeObject(mesData); |
| | | //调用接口 |
| | | var response = HttpHelper.DoPost(url, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic); |
| | | |
| | | var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据 |
| | | if (obj.status != "success") |
| | | { |
| | | throw new Exception("备料同步MES失败:" + obj.message); |
| | | } |
| | | |
| | | } |
| | | #endregion |
| | | } |
| | | else //空托盘处理 |
| | | { |
| | | //修改组托信息 |
| | | if (bindDetail.WareHouseNo == "W01") //1、空托盘垛到空托盘收集器; |
| | | { |
| | | bindDetail.WareHouseNo = "W02"; |
| | | bindDetail.LocatNo = endLocat.LocatNo; |
| | | bindDetail.RoadwayNo = ""; |
| | | //修改起始库位状态 |
| | | startLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(startLocat).ExecuteCommand(); |
| | | } |
| | | else//2、拣货叫空托盘,小车完成一次,扣减一个空托盘垛上数量 |
| | | { |
| | | bindDetail.Qty = bindDetail.Qty - 1; |
| | | if (bindDetail.Qty == 0)//数量为0后更改组托状态和托盘使用状态 |
| | | { |
| | | bindDetail.Status = "2"; |
| | | bindDetail.IsDel = "1"; |
| | | //修改起始库位状态 |
| | | startLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | Db.Updateable(startLocat).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | bindDetail.LocatNo = startLocat.LocatNo;//?????拣货位托盘如何处理,拣货位是否需要更改状态,是否需要增加库存; |
| | | } |
| | | } |
| | | Db.Updateable(bindDetail).ExecuteCommand(); |
| | | } |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | Db.RollbackTran(); |
| | | throw new Exception("AGV返回移库完成信号处理错误,错误信息:"+ex); |
| | | } |
| | | } |
| | |
| | | { |
| | | try |
| | | { |
| | | List<ReLocateDataModel> list = new List<ReLocateDataModel>(); |
| | | |
| | | //库存信息 |
| | | var stockDetailsList = Db.Queryable<StockDetailDto>().ToList(); |
| | | |
| | | if (stockDetailsList.Count == 0) |
| | | { |
| | | return list; |
| | | } |
| | | for (int i = 0; i < stockDetailsList.Count; i++) |
| | | { |
| | | list[i].LocatNo = stockDetailsList[i].LocatNo; //库位 |
| | | list[i].PalletNo = stockDetailsList[i].PalletNo; //托盘号 |
| | | list[i].SkuName = stockDetailsList[i].SkuName; //物料名称 |
| | | list[i].Stadard = stockDetailsList[i].Standard; //规格 |
| | | list[i].LotNo = stockDetailsList[i].LotNo; //批次 |
| | | list[i].InspectStatus = stockDetailsList[i].InspectStatus; //质量状态 |
| | | list[i].Qty = stockDetailsList[i].Qty.ToString(); //库存数量 |
| | | list[i].Warranty = stockDetailsList[i].ExpirationTime.ToString(); //有效期 ??过期时间,是否要更改 |
| | | } |
| | | var stockDetailsList = Db.Queryable<DataStockDetail>().ToList(); |
| | | var sql = "select LocatNo,PalletNo,SkuName,Standard,LotNo,InspectStatus,Qty,ExpirationTime as Warranty from DataStockDetail "; |
| | | |
| | | List<ReLocateDataModel> list = Db.Ado.SqlQuery<ReLocateDataModel>(sql); |
| | | |
| | | //if (stockDetailsList.Count == 0) |
| | | //{ |
| | | // return list; |
| | | //} |
| | | //foreach (var item in stockDetailsList) |
| | | //{ |
| | | // list.Add(item); |
| | | |
| | | //} |
| | | //for (int i = 0; i < stockDetailsList.Count; i++) |
| | | //{ |
| | | |
| | | // list.Add(stockDetailsList); |
| | | // list[i].LocatNo = stockDetailsList[i].LocatNo; //库位 |
| | | // list[i].PalletNo = stockDetailsList[i].PalletNo; //托盘号 |
| | | // list[i].SkuName = stockDetailsList[i].SkuName; //物料名称 |
| | | // list[i].Stadard = stockDetailsList[i].Standard; //规格 |
| | | // list[i].LotNo = stockDetailsList[i].LotNo; //批次 |
| | | // list[i].InspectStatus = stockDetailsList[i].InspectStatus; //质量状态 |
| | | // list[i].Qty = stockDetailsList[i].Qty.ToString(); //库存数量 |
| | | // list[i].Warranty = stockDetailsList[i].ExpirationTime.ToString(); //有效期 ??过期时间,是否要更改 |
| | | //} |
| | | return list; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | throw new Exception("AGV返回入库完成信号处理错误,错误信息:" + ex); |
| | | throw new Exception("返回库存信息有误,错误信息:" + ex); |
| | | } |
| | | } |
| | | #endregion |
| | |
| | | { |
| | | taskNo = taskNo.Substring(0, taskNo.Length - 3); |
| | | } |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo); |
| | | var task = Db.Queryable<LogTask>().OrderByDescending(m=>m.Id).First(m => m.TaskNo == taskNo); |
| | | if (task == null) |
| | | { |
| | | throw new Exception($"未查询到{taskNo}任务号的任务信息"); |
| | |
| | | /// <param name="port"></param> 入库口 |
| | | /// <param name="url"></param> 请求地址 |
| | | /// <returns></returns> |
| | | public string GetWcsPuttype(string taskno,string port,string url) |
| | | public string GetWcsPuttype(string taskno,string url) |
| | | { |
| | | try |
| | | { |
| | | var port = Db.Queryable<LogTask>().First(m => m.TaskNo == taskno).EndLocat; |
| | | var data = new |
| | | { |
| | | Port = port, |
| | |
| | | return 2; |
| | | } |
| | | |
| | | |
| | | switch (matedto.Warrantydate) |
| | | { |
| | | case "1": //保存以月为单位 |
| | | matedto.Warranty = matedto.Warranty * 30; |
| | | break; |
| | | case "2": //保存以年为单位 |
| | | matedto.Warranty = matedto.Warranty * 365; |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | //映射模型 |
| | | SysMaterials mate = _mapper.Map<SysMaterials>(matedto); |
| | | mate.AuditStatusNo = "9"; //审核状态 |
| | |
| | | L3 = m.L3Num == null ? "" : m.L3Num.ToString() + "/" + m.L3Name, |
| | | L4 = m.L4Num == null ? "" : m.L4Num.ToString() + "/" + m.L4Name, |
| | | L5 = m.L5Num == null ? "" : m.L5Num.ToString() + "/" + m.L5Name, |
| | | |
| | | //L1Num = int.Parse(m.L1Num.ToString()), |
| | | //L1Name = m.L1Name, |
| | | //L2Num = int.Parse(m.L2Num.ToString()), |
| | |
| | | } |
| | | else |
| | | { |
| | | packagItems.L3Num = null; |
| | | packagItems.L3Name = null; |
| | | packagItems.L2Num = null; |
| | | packagItems.L2Name = null; |
| | | } |
| | | //判断一级包装是否为空 |
| | | if (!string.IsNullOrEmpty(model.L1Num) && !string.IsNullOrEmpty(model.L1Name)) |
| | |
| | | /// <summary> |
| | | /// 出库任务完成 |
| | | /// </summary> |
| | | /// <param name="skuNo">物料编码</param> |
| | | /// <param name="skuName">物料名称</param> |
| | | /// <param name="TaskCode">任务号</param> |
| | | /// <param name="url">反馈MES备料完成</param> |
| | | /// <returns></returns> |
| | | public void SoFinish(string TaskCode); |
| | | public void SoFinish(string TaskCode,string url); |
| | | /// <summary> |
| | | /// 移库任务完成 |
| | | /// </summary> |
| | | /// <param name="skuNo">物料编码</param> |
| | | /// <param name="skuName">物料名称</param> |
| | | /// <param name="TaskCode">任务号</param> |
| | | /// <param name="url">反馈MES备料完成</param> |
| | | /// <returns></returns> |
| | | public void MoveFinish(string TaskCode); |
| | | public void MoveFinish(string TaskCode,string url); |
| | | #endregion |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns>0 入库任务 1 出库任务 2移库任务</returns> |
| | | public string GetTaskType(string taskNo); |
| | | |
| | | public string GetWcsPuttype(string taskno,string port,string url); |
| | | public string GetWcsPuttype(string taskno,string url); |
| | | } |
| | | } |
| | |
| | | // 判断托盘号是否可用 |
| | | string IsEnablePalletNo(string palletNo); |
| | | |
| | | // 判断地码是否可用 |
| | | string IsEnableLocatNo(string locatNo); |
| | | |
| | | // 根据箱码或托盘号获取箱支信息 |
| | | List<BoxInfoDto> GetBoxInfos(BoxInfoVm model); |
| | | |
| | |
| | | List<string> AgvTransport2(string soNo, string palletNo, string areaNo,string ruku, int userId, string url); |
| | | |
| | | /// <summary> |
| | | /// 空托盘入库呼叫小车 |
| | | /// </summary> |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="areaNo"></param> |
| | | /// <param name="ruku"></param> |
| | | void AgvTransport3(string palletNo, string locatNo, string ruku, int userId, string url, string wcsurl); |
| | | |
| | | /// <summary> |
| | | /// agv任务下发 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | |
| | | /// </summary> |
| | | /// <param name="model"> </param> |
| | | /// <param name="userId"> </param> |
| | | /// <param name="url"> </param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | List<OutCommandDto> IssuePlnOutHouseWcs(OutModePalletVm model, int userId); |
| | | |
| | | /// <summary> |
| | | /// WMS拣货申请空托出库 |
| | | /// </summary> |
| | | /// <param name="model"> </param> |
| | | /// <param name="userId"> </param> |
| | | /// <param name="url"> </param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | string IssuePlnCehckHouseWcs(CheckModePalletVm model, int userId,string url); |
| | | |
| | | /// <summary> |
| | | /// 获取平库托盘信息 |
| | |
| | | [HttpPost] |
| | | public IActionResult BindPlnInHouseWcs(PalletsBind model) |
| | | { |
| | | var logStr = $@".\log\WCS\WCS申请空托跺绑定" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | var logStr = $@".\log\WCS\WCS又叠托机申请空托入库" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | try |
| | | { |
| | | var strMsg = _paAsnSvc.BindNullPallets(model); |
| | | |
| | | return Ok(new { Success = 0, Message = "空托跺绑定成功", TaskList = strMsg }); |
| | | return Ok(new { Success = 0, Message = "空托跺绑定成功"}); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | |
| | | catch (Exception e) |
| | | { |
| | | LogFile.SaveLogToFile($"WCS申请空托出库异常返回:( {e.Message} ),", logStr); |
| | | |
| | | return Ok(new ErpModel { Success = -1, Message = e.Message }); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// WMS拣货申请空托出库 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [AllowAnonymous] |
| | | [HttpPost] |
| | | public IActionResult IssuePlnCheckHouseWcs(CheckModePalletVm model) |
| | | { |
| | | var logStr = $@".\log\WCS\WMS拣货申请空托出库" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | try |
| | | { |
| | | string list = _pdaSoSvc.IssuePlnCehckHouseWcs(model, 0,_config.AgvHost+_config.GenAgvSchedulingTask); |
| | | |
| | | return Ok(new { Success = 0, Message = "拣货叫空托盘成功"}); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | LogFile.SaveLogToFile($"WMS拣货申请空托出库异常返回:( {e.Message} ),", logStr); |
| | | |
| | | return Ok(new ErpModel { Success = -1, Message = e.Message }); |
| | | } |
| | |
| | | { |
| | | //返回出库分拣装车口 |
| | | var list = _exNoticeSvc.BoxInfoExportWcs(model.BoxNo); |
| | | return Ok(new { Success = 1, Message = "成品箱码拆垛拣货成功", loadubgAddre = list }); |
| | | return Ok(new { Success = "1", Message = "成品箱码拆垛拣货成功", loadubgAddre = list }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | LogFile.SaveLogToFile($"WCS申请成品箱码拆垛拣货异常返回:( {e.Message} ),", logStr); |
| | | |
| | | return Ok(new ErpModel { Success = -1, Message = e.Message }); |
| | | return Ok(new { Success = "-1", Message = e.Message, loadubgAddre ="" }); |
| | | } |
| | | |
| | | } |
| | |
| | | switch (orderType) |
| | | { |
| | | case "0"://入库任务执行 |
| | | if (model.TaskTyp == "mid") //AGV到达入库口,请求放货 |
| | | if (model.Method == "mid") //AGV到达入库口,请求放货 |
| | | { |
| | | //下发WCS放货请求 |
| | | var ret = _taskSvc.GetWcsPuttype(model.TaskCode,model.CurrentCallCode,_config.WcsHost + _config.HttpInRequest); |
| | | var ret = _taskSvc.GetWcsPuttype(model.TaskCode,_config.WcsHost + _config.HttpInRequest); |
| | | if (ret.Contains("-1")) |
| | | { |
| | | logStr = $@".\log\WCS\任务反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | |
| | | return Ok(new OutCommanAgvDto { Code = "1", Message = "失败", ReqCode = model.ReqCode }); |
| | | } |
| | | } |
| | | else if (model.TaskTyp == "end")//AGV放货到入库口完成 |
| | | else if (model.Method == "end")//AGV放货到入库口完成 |
| | | { |
| | | _stockSvc.ArriveFinish(model.TaskCode,_config.WcsHost + _config.HttpInFinish); |
| | | |
| | | |
| | | } |
| | | |
| | | break; |
| | | |
| | | case "1"://出库任务执行 |
| | | _stockSvc.SoFinish(model.TaskCode); |
| | | _stockSvc.SoFinish(model.TaskCode,_config.MesHost + _config.MesBeiLiaoUrl); |
| | | break; |
| | | |
| | | case "2"://盘库任务执行 |
| | | |
| | | case "3"://移库任务执行 |
| | | _stockSvc.MoveFinish(model.TaskCode); |
| | | _stockSvc.MoveFinish(model.TaskCode, _config.MesHost + _config.MesBeiLiaoUrl); |
| | | break; |
| | | // return Ok(new OutCommanAgvDto { Code = "0", Message = "成功", ReqCode = model.ReqCode }); |
| | | |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 判断托盘是否可用 |
| | | /// </summary> |
| | | /// <param name="model">PalletNo:托盘条码</param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult IsEnableLocatNo(PalletBindVm model) |
| | | { |
| | | try |
| | | { |
| | | var strMsg = _PdaAsnSvc.IsEnableLocatNo(model.LocatNo); |
| | | |
| | | if (strMsg == "") |
| | | { |
| | | return Ok(new { code = 0, msg = "地码可用!" }); |
| | | } |
| | | else |
| | | { |
| | | return Ok(new { code = 1, msg = strMsg }); |
| | | } |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取单据明细列表 |
| | | /// </summary> |
| | | /// <param name="model">AsnNo:单据号</param> |
| | |
| | | return Ok(new { data = "", code = 1, msg = $"异常:{e.Message}" }); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 空托盘入库呼叫小车 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult AgvTransport3(PdaAgvTransNullPalnoModel 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 = "未获取到当前操作人信息" }); |
| | | } |
| | | |
| | | var uId = int.Parse(userId); |
| | | _pdaCrSvc.AgvTransport3(model.PalletNo, model.LocatNo, model.Ruku, uId, _config.AgvHost + _config.GenAgvSchedulingTask, _config.WcsHost + _config.HttpInConfirm); |
| | | |
| | | return Ok(new { data = "", code = 0, msg = "成功" }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { data = "", code = 1, msg = $"异常:{e.Message}" }); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 人工转运 |