| | |
| | | <!DOCTYPE html> |
| | | <html> |
| | | |
| | | <head> |
| | | <meta name="viewport" content="user-scalable=0,width=device-width,initial-scale=1.0" /> |
| | | <meta charset="UTF-8" /> |
| | | <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665, minimum-scale=0.5, maximum-scale=1, user-scalable=no" /> --> |
| | | <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665" /> --> |
| | | <meta http-equiv="X-UA-Compatible" content="ie=edge" /> |
| | | <title>Boxline PDA</title> |
| | | |
| | | <link rel="stylesheet" href="/layui/css/layui.css" /> |
| | | <link rel="stylesheet" href="/css/style.css" /> |
| | | <script src="/js/adaptive.js"></script> |
| | | <link rel="stylesheet" href="/css/my.css" /> |
| | | <style type="text/css"> |
| | | td { |
| | | word-break: break-all; |
| | | word-wrap: break-word; |
| | | } |
| | | |
| | | .layui-form-switch { |
| | | margin-top: 0; |
| | | } |
| | | |
| | | /* 标签样式 */ |
| | | .tableyang-this a { |
| | | margin: 10px 10px 0px 0px; |
| | | line-height: 30px; |
| | | width: 100px; |
| | | color: #999; |
| | | text-align: center; |
| | | float: left; |
| | | background: #f7f7f7; |
| | | user-select: none; |
| | | position: relative; |
| | | z-index: 1; |
| | | cursor: pointer; |
| | | border-radius: 5px; |
| | | border: 1px solid #ccc; |
| | | transition: all 0.3s ease; |
| | | } |
| | | |
| | | .tableyang-this a.hover { |
| | | color: #5298ff; |
| | | background-color: #eff2ff; |
| | | border: 1px solid #5298ff; |
| | | } |
| | | |
| | | /* 内容居中 */ |
| | | .tableyang-tab { |
| | | display: flex; |
| | | /* justify-content: center; */ |
| | | /* align-items: center; */ |
| | | flex-direction: column; |
| | | height: 90vh; |
| | | } |
| | | |
| | | /* 必用样式 */ |
| | | .tableyang-2, |
| | | .tableyang-3 { |
| | | display: none; |
| | | } |
| | | |
| | | ul { |
| | | list-style-type: none; |
| | | padding: 0; |
| | | } |
| | | |
| | | li { |
| | | cursor: pointer; |
| | | background-color: lightgray; |
| | | padding: 10px; |
| | | margin-bottom: 5px; |
| | | } |
| | | </style> |
| | | <link rel="stylesheet" href="/css/adapter.css" /> |
| | | <script src="../../js/jquery.js"></script> |
| | | <script src="../../js/jquery-3.5.1.min.js"></script> |
| | | </head> |
| | | |
| | | <body> |
| | | <div id="" class="main-content"> |
| | | |
| | | <div id="" class="layout-title"> |
| | | <table border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td class="img-back"><a href="../index.html"><img src="/assets/back.jpg"></a></td> |
| | | <td class="title-text" lang>车间入库</td> |
| | | <td class="title-menu-icon"><img id="menuImg" src="/assets/menu.jpg"></td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | |
| | | <div id="" class="layout-sub-content"> |
| | | <div id="menuList" class="menu"> |
| | | <ul class="" style="text-align: center;"> |
| | | <li><a href="../index.html" lang>主页</a></li> |
| | | <!-- <li><a href="productEnterConfirm.html">入库信息确认</a></li> --> |
| | | <li><a href="../login.html" lang>重新登录</a></li> |
| | | </ul> |
| | | </div> |
| | | |
| | | <button id="option1" class="layout-btn" type="button">标签</button> |
| | | <button id="option2" class="layout-btn" type="button">数量</button> |
| | | <br /><br /> |
| | | |
| | | <!-- 有码 --> |
| | | <div id="content1"> |
| | | <div id="zongDiv" class="layout-bill-info" style="height: 285px;"> |
| | | <form class="layui-form" action=""> |
| | | |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>托盘条码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="PalletNo" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请扫描托盘条码" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="BOX" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>外箱条码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="BoxCode" type="text" lay-verify="required" lang langholder |
| | | placeholder="请扫描外箱条码" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>数量:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="BoxNum" type="number" lay-verify="required" lang langholder |
| | | placeholder="请输入数量" autocomplete="off" class="layui-input" |
| | | oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-dropdownlist"> |
| | | <label class="layui-form-label" lang>车间:</label> |
| | | <div class="layui-input-block" id="selectAreaDiv"> |
| | | <select id="area" lay-filter="getarea" lay-search> |
| | | <option value="B06">1002</option> |
| | | <option value="B09">1003一楼</option> |
| | | <option value="B07">1003二楼</option> |
| | | </select> |
| | | <img src="/assets/down_arraw.png"> |
| | | </div> |
| | | </div> |
| | | <table class="layout-tbl-input" border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td> |
| | | <div id="" class="layui-form-item layout-boxinfo"> |
| | | <label class="layui-form-label" lang>批次:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="LotNo" type="text" disabled placeholder="" autocomplete="off" |
| | | class="layui-input"> |
| | | </div> |
| | | </div> |
| | | </td> |
| | | <td> |
| | | <div id="" class="layui-form-item layout-boxinfo"> |
| | | <label class="layui-form-label" lang>物料名称:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="SkuName" type="text" disabled placeholder="" autocomplete="off" |
| | | class="layui-input"> |
| | | </div> |
| | | </div> |
| | | </td> |
| | | |
| | | </tr> |
| | | </table> |
| | | |
| | | <table class="layout-tbl-submit" border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td style="width: 23%;"></td> |
| | | <td> |
| | | <button class="layout-btn layout-btn-red" lang type="button" lay-submit |
| | | lay-filter="formBind">绑定到托盘</button> |
| | | </td> |
| | | <td style="width: 33%;"></td> |
| | | |
| | | </tr> |
| | | </table> |
| | | </form> |
| | | </div> |
| | | |
| | | </div> |
| | | <!-- 无码 --> |
| | | <div id="content2"> |
| | | <div id="zongDiv2" class="layout-bill-info" style="height: 255px;"> |
| | | <form class="layui-form" id="form2" action=""> |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>物料编码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="SkuNo" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请输入物料编码" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div><div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>批次号:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="LotNo2" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请输入批次" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>托盘条码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="PalletNo2" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请扫描托盘条码" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>物料数量:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="SkuQty2" type="number" lay-verify="stock" lang langholder |
| | | placeholder="请输入物料数量" autocomplete="off" class="layui-input" |
| | | oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-dropdownlist"> |
| | | <label class="layui-form-label" lang>车间:</label> |
| | | <div class="layui-input-block" id="selectAreaDiv2"> |
| | | <select id="area2" lay-filter="getarea2" lay-search> |
| | | <option value="B06">1002</option> |
| | | <option value="B09">1003一楼</option> |
| | | <option value="B07">1003二楼</option> |
| | | </select> |
| | | <img src="/assets/down_arraw.png"> |
| | | </div> |
| | | </div> |
| | | <table class="layout-tbl-submit" border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td style="width: 23%;"></td> |
| | | <td> |
| | | <button class="layout-btn layout-btn-red" lang type="button" lay-submit |
| | | lay-filter="formBind">绑定到托盘</button> |
| | | </td> |
| | | <td style="width: 33%;"></td> |
| | | |
| | | </tr> |
| | | </table> |
| | | |
| | | </form> |
| | | </div> |
| | | |
| | | <br> |
| | | <br> |
| | | <div id="demodiv1"> |
| | | <br><br><br><br><br><br><br> |
| | | </div> |
| | | |
| | | |
| | | <!-- <div id="" class="cut-line"> |
| | | <img src="/assets/fengexian.png"> |
| | | </div> --> |
| | | |
| | | <!-- <div class="layout-tbl-paging" id=""> |
| | | <table id="tableBoxList1" class="tbl-box-list" border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <th lang style="width: 15%;">物料编码</th> |
| | | <th lang style="width: 35%;">物料名称</th> |
| | | <th lang style="width: 25%;">批次</th> |
| | | <th lang style="width: 15%;">物料数量</th> |
| | | <th lang style="width: 10%;">操作</th> |
| | | </tr> |
| | | <tr id="boxCell" style="display: none;"> |
| | | <td name="code">AG000001</td> |
| | | <td name="name">疫苗名称名称名称</td> |
| | | <td name="lotNo">批次号</td> |
| | | <td name="num">30</td> |
| | | <td name="del"> |
| | | <div id="" class="tbl-btn-del" lang> |
| | | 删除 |
| | | </div> |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | |
| | | <table id="tableBoxPages1" class="tbl-box-pages" border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td class="page-prev">上一页</td> |
| | | <td class="page-num page-num-select">1</td> |
| | | <td class="page-num">2</td> |
| | | <td class="page-num">3</td> |
| | | <td class="page-num">4</td> |
| | | <td class="page-num">5</td> |
| | | <td class="page-next">下一页</td> |
| | | </tr> |
| | | </table> |
| | | </div> --> |
| | | |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <script src="/js/jquery-3.5.1.min.js"></script> |
| | | <script src="/layui/layui.js"></script> |
| | | <script src="/js/public.js"></script> |
| | | <script src="/js/language.js"></script> |
| | | <script src="/js/jquery.cookie.js"></script> |
| | | <script> |
| | | layui.use(['form', 'jquery'], function () { |
| | | var form = layui.form |
| | | |
| | | /* 标签切换代码 */ |
| | | $('#demodiv').hide(); |
| | | $('#demodiv1').hide(); |
| | | 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;"); //默认颜色 |
| | | }); |
| | | |
| | | $('#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;"); //选中后颜色 |
| | | |
| | | }); |
| | | }); |
| | | |
| | | /*——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————*/ |
| | | |
| | | initLanguage() |
| | | setLanguage() |
| | | |
| | | |
| | | //是否连续组托 |
| | | isContinue = "0"; |
| | | |
| | | |
| | | // 托盘码文本改变时触发 |
| | | $("#PalletNo").on('input', function () { |
| | | |
| | | if ($("#PalletNo").val() == "" || $("#PalletNo").val().length < 8) { |
| | | return; |
| | | } |
| | | if ($("#PalletNo").val().length >= 8) { |
| | | $("#PalletNo").val($("#PalletNo").val().substr(-8)) |
| | | } |
| | | checkPalletStat() |
| | | }) |
| | | // 托盘码文本改变时触发-数量 |
| | | $("#PalletNo1").on('input', function () { |
| | | |
| | | if ($("#PalletNo1").val() == "" || $("#PalletNo1").val().length < 8) { |
| | | return; |
| | | } |
| | | if ($("#PalletNo1").val().length >= 8) { |
| | | $("#PalletNo1").val($("#PalletNo1").val().substr(-8)) |
| | | } |
| | | checkPalletStat() |
| | | }) |
| | | |
| | | // 判断托盘码是否可用 |
| | | function checkPalletStat() { |
| | | if (xianshiyemian == 0) { |
| | | var param = { |
| | | "PalletNo": $("#PalletNo").val() |
| | | } |
| | | sendData(IP + "/PdaAsn/IsEnablePalletNo", param, 'post', function (res) { |
| | | if (res.code == 0) { |
| | | $("#BoxCode").focus(); |
| | | |
| | | } else { |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { }); |
| | | } |
| | | }); |
| | | } |
| | | else if (xianshiyemian == 1) { |
| | | var param = { |
| | | "PalletNo": $("#PalletNo1").val() |
| | | } |
| | | sendData(IP + "/PdaAsn/IsEnablePalletNo", param, 'post', function (res) { |
| | | if (res.code == 0) { |
| | | |
| | | $("#SkuQty").focus(); |
| | | |
| | | } else { |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | //箱码回车事件 |
| | | $("#BoxCode").keydown(function (e) { |
| | | if (e.keyCode === 13) { |
| | | if ($("#BoxCode").val() == "") { |
| | | layer.msg('请先扫描箱码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return |
| | | } |
| | | checkBoxInfo() |
| | | } |
| | | }); |
| | | |
| | | //箱回车事件 |
| | | function checkBoxInfo() { |
| | | |
| | | |
| | | var param = { |
| | | "boxNo": $("#BoxCode").val(), |
| | | } |
| | | synData(IP + "/PdaAsn/GetWmsBoxInfos", param, 'get', function (res) { |
| | | |
| | | if (res.code == 0) { //成功 |
| | | $("#BoxNum").val(res.data[0].Qty); |
| | | $("#SkuName").val(res.data[0].SkuName); |
| | | $("#LotNo").val(res.data[0].LotNo); |
| | | |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | //绑定到托盘事件 |
| | | form.on('submit(formBind)', function (data) { |
| | | if (xianshiyemian == 0) { |
| | | |
| | | if ($("#PalletNo").val() == "") { |
| | | layer.msg('请扫描托盘条码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | if ($("#BoxCode").val() == "") { |
| | | layer.msg('请扫描外箱条码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | var param = { |
| | | PalletNo: $("#PalletNo").val(), |
| | | BoxNo: $("#BoxCode").val(), |
| | | SkuQty: parseFloat($("#BoxNum").val()), //物料数量 |
| | | AreaNo:$("#area").val(), |
| | | TableType: xianshiyemian, |
| | | } |
| | | console.log(param) |
| | | //组盘 |
| | | sendData(IP + "/PdaAsn/ChejianIn", param, 'post', function (res) { |
| | | if (res.code == 0) { //成功 |
| | | layer.msg(res.msg, { |
| | | icon: 1, |
| | | time: 1000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | $("#BoxCode").val(""); |
| | | $("#BoxNum").val(""); |
| | | $("#SkuName").val(""); |
| | | $("#LotNo").val(""); |
| | | |
| | | }); |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | //回调 |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | else if (xianshiyemian == 1) { |
| | | if ($("#bar1").val() == "") { |
| | | layer.msg('请选择入库单', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | if ($("#SkuNo").val() == "") { |
| | | layer.msg('请输入物料', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | if ($("#PalletNo2").val() == "") { |
| | | layer.msg('请扫描托盘条码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | var param = { |
| | | PalletNo: $("#PalletNo2").val(), |
| | | SkuNo: $("#SkuNo").val(), |
| | | LotNo: $("#LotNo2").val(), |
| | | SkuQty: parseFloat($("#SkuQty2").val()), //物料数量 |
| | | AreaNo:$("#area").val(), |
| | | TableType: xianshiyemian, |
| | | } |
| | | console.log(param) |
| | | //组盘 |
| | | sendData(IP + "/PdaAsn/ChejianIn", param, 'post', function (res) { |
| | | if (res.code == 0) { //成功 |
| | | layer.msg(res.msg, { |
| | | icon: 1, |
| | | time: 1000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | $("#PalletNo2").val(""); |
| | | $("#SkuNo").val(""); |
| | | $("#SkuQty2").val(""); |
| | | $("#LotNo2").val(""); |
| | | |
| | | }); |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | //回调 |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 |
| | | }); |
| | | |
| | | |
| | | |
| | | /*——————————————————————————————————————————————————————————*/ |
| | | |
| | | $("#menuImg").click(function (e) { |
| | | e.stopPropagation() |
| | | |
| | | if ($("#menuList").is(":hidden")) { |
| | | $("#menuList").show() |
| | | } else { |
| | | $("#menuList").hide() |
| | | } |
| | | }) |
| | | $('body').click(function () { |
| | | $("#menuList").hide() |
| | | }) |
| | | }) |
| | | </script> |
| | | </body> |
| | | |
| | | </html> |
| | |
| | | } |
| | | } |
| | | asnDetails.forEach(element => { |
| | | console.log(element); |
| | | console.log(element.SkuNo ); |
| | | console.log( res.data[0].SkuNo); |
| | | console.log(element.SkuNo == res.data[0].SkuNo); |
| | | console.log(element.LotNo == res.data[0].LotNo); |
| | | |
| | | if (element.SkuNo == res.data[0].SkuNo && element.LotNo == res.data[0].LotNo) { |
| | | console.log("asdfasdfsadf"); |
| | | |
| | | var sel = 'dd[lay-value=' + element.id + ']'; |
| | | $('#goodSelect').siblings("div.layui-form-select").find('dl').find(sel).addClass('layui-this'); |
| | | bl = true; |
| | | } |
| | | }); |
| | | console.log(bl); |
| | | |
| | | if (!bl) { |
| | | layer.msg("此箱物料不符合该入库单,请核实!", { |
| | | icon: 2, |
| | |
| | | |
| | | //选中单据事件 |
| | | form.on('select(getbar)', function (data) { |
| | | |
| | | $("#PalletNo").empty() |
| | | $("#PalletNo").append('<option value =>' + '</option>'); |
| | | form.render('select'); |
| | | if (data.value == "") { |
| | | return; |
| | | } |
| | | updateGoodList(); |
| | | }); |
| | | |
| | | }); |
| | | //选中单据明细事件 |
| | | form.on('select(goodSelect)', function (data) { |
| | | |
| | | $("#PalletNo").empty() |
| | | $("#PalletNo").append('<option value =>' + '</option>'); |
| | | form.render('select'); |
| | | }); |
| | | $("#selectDiv").click(function () { |
| | | var input = $('select[id="bar"]').next().find('.layui-select-title input') |
| | | var val = input.val() |
| | |
| | | $('select[id="bar"]').next().find('.layui-select-title input').val(val) |
| | | }) |
| | | }) |
| | | |
| | | $("#selectPalletNo").click(function () { |
| | | var input = $('select[id="PalletNo"]').next().find('.layui-select-title input') |
| | | var val = input.val() |
| | | //先更新一下出库单 |
| | | updatePalletNoList(function (data) { |
| | | $('select[id="PalletNo"]').next().addClass('layui-form-selected') |
| | | $('select[id="PalletNo"]').next().find('.layui-select-title input').val(val) |
| | | }) |
| | | }) |
| | | |
| | | //初始化渲染 出库单 |
| | | function updateBillList(callback) { |
| | | var input = $('select[id="bar"]').next().find('.layui-select-title input') |
| | |
| | | form.render('select'); |
| | | |
| | | var param = { |
| | | soNo:$("#bar").val() |
| | | SoNo:$("#bar").val(), |
| | | SoDetailId:$("#goodSelect").val(), |
| | | }; |
| | | sendData(IP + "/PdaCr/GetPalletNoListBySoNo", param, 'get', function (res) { |
| | | sendData(IP + "/PdaSo/GetPalletListBySo", param, 'post', function (res) { |
| | | if (res.code == 0) { //成功 |
| | | for (var i = 0; i < res.data.length; i++) { |
| | | $("#PalletNo").append('<option value =' + res.data[i] + '>' + res.data[i]+ |
| | |
| | | <!DOCTYPE html> |
| | | <html> |
| | | |
| | | <head> |
| | | <meta name="viewport" content="user-scalable=0,width=device-width,initial-scale=1.0" /> |
| | | <meta charset="UTF-8" /> |
| | | <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665, minimum-scale=0.5, maximum-scale=1, user-scalable=no" /> --> |
| | | <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665" /> --> |
| | | <meta http-equiv="X-UA-Compatible" content="ie=edge" /> |
| | | <title>Boxline PDA</title> |
| | | |
| | | <link rel="stylesheet" href="/layui/css/layui.css" /> |
| | | <link rel="stylesheet" href="/css/style.css" /> |
| | | <script src="/js/adaptive.js"></script> |
| | | <link rel="stylesheet" href="/css/my.css" /> |
| | | <style type="text/css"> |
| | | td { |
| | | word-break: break-all; |
| | | word-wrap: break-word; |
| | | } |
| | | |
| | | .layui-form-switch { |
| | | margin-top: 0; |
| | | } |
| | | |
| | | /* 标签样式 */ |
| | | .tableyang-this a { |
| | | margin: 10px 10px 0px 0px; |
| | | line-height: 30px; |
| | | width: 100px; |
| | | color: #999; |
| | | text-align: center; |
| | | float: left; |
| | | background: #f7f7f7; |
| | | user-select: none; |
| | | position: relative; |
| | | z-index: 1; |
| | | cursor: pointer; |
| | | border-radius: 5px; |
| | | border: 1px solid #ccc; |
| | | transition: all 0.3s ease; |
| | | } |
| | | |
| | | .tableyang-this a.hover { |
| | | color: #5298ff; |
| | | background-color: #eff2ff; |
| | | border: 1px solid #5298ff; |
| | | } |
| | | |
| | | /* 内容居中 */ |
| | | .tableyang-tab { |
| | | display: flex; |
| | | /* justify-content: center; */ |
| | | /* align-items: center; */ |
| | | flex-direction: column; |
| | | height: 90vh; |
| | | } |
| | | |
| | | /* 必用样式 */ |
| | | .tableyang-2, |
| | | .tableyang-3 { |
| | | display: none; |
| | | } |
| | | |
| | | ul { |
| | | list-style-type: none; |
| | | padding: 0; |
| | | } |
| | | |
| | | li { |
| | | cursor: pointer; |
| | | background-color: lightgray; |
| | | padding: 10px; |
| | | margin-bottom: 5px; |
| | | } |
| | | </style> |
| | | <link rel="stylesheet" href="/css/adapter.css" /> |
| | | <script src="../../js/jquery.js"></script> |
| | | <script src="../../js/jquery-3.5.1.min.js"></script> |
| | | </head> |
| | | |
| | | <body> |
| | | <div id="" class="main-content"> |
| | | |
| | | <div id="" class="layout-title"> |
| | | <table border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td class="img-back"><a href="../index.html"><img src="/assets/back.jpg"></a></td> |
| | | <td class="title-text" lang>车间出库</td> |
| | | <td class="title-menu-icon"><img id="menuImg" src="/assets/menu.jpg"></td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | |
| | | <div id="" class="layout-sub-content"> |
| | | <div id="menuList" class="menu"> |
| | | <ul class="" style="text-align: center;"> |
| | | <li><a href="../index.html" lang>主页</a></li> |
| | | <!-- <li><a href="productEnterConfirm.html">入库信息确认</a></li> --> |
| | | <li><a href="../login.html" lang>重新登录</a></li> |
| | | </ul> |
| | | </div> |
| | | |
| | | <button id="option1" class="layout-btn" type="button">标签</button> |
| | | <button id="option2" class="layout-btn" type="button">数量</button> |
| | | <br /><br /> |
| | | |
| | | <!-- 有码 --> |
| | | <div id="content1"> |
| | | <div id="zongDiv" class="layout-bill-info" style="height: 285px;"> |
| | | <form class="layui-form" action=""> |
| | | |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>托盘条码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="PalletNo" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请扫描托盘条码" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="BOX" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>外箱条码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="BoxCode" type="text" lay-verify="required" lang langholder |
| | | placeholder="请扫描外箱条码" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <table class="layout-tbl-input" border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td> |
| | | <div id="" class="layui-form-item layout-boxinfo"> |
| | | <label class="layui-form-label" style=" width: 21%;" lang>批次:</label> |
| | | <div class="layui-input-block" style=" width: 79%;margin-left: 21%;" > |
| | | <input id="LotNo" type="text" disabled placeholder="" autocomplete="off" |
| | | class="layui-input"> |
| | | </div> |
| | | </div> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td> |
| | | <div id="" class="layui-form-item layout-boxinfo"> |
| | | <label class="layui-form-label" style=" width: 21%;" lang>物料名称:</label> |
| | | <div class="layui-input-block" style=" width: 79%;margin-left: 21%;" > |
| | | <input id="SkuName" type="text" disabled placeholder="" autocomplete="off" |
| | | class="layui-input"> |
| | | </div> |
| | | </div> |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | |
| | | <table class="layout-tbl-submit" border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td style="width: 23%;"></td> |
| | | <td> |
| | | <button class="layout-btn layout-btn-red" lang type="button" lay-submit |
| | | lay-filter="formBind">出库</button> |
| | | </td> |
| | | <td style="width: 33%;"></td> |
| | | |
| | | </tr> |
| | | </table> |
| | | </form> |
| | | </div> |
| | | |
| | | </div> |
| | | <!-- 无码 --> |
| | | <div id="content2"> |
| | | <div id="zongDiv2" class="layout-bill-info" style="height: 255px;"> |
| | | <form class="layui-form" id="form2" action=""> |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>物料编码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="SkuNo" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请输入物料编码" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div><div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>批次号:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="LotNo2" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请输入批次" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>托盘条码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="PalletNo2" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请扫描托盘条码" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>物料数量:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="SkuQty2" type="number" lay-verify="stock" lang langholder |
| | | placeholder="请输入物料数量" autocomplete="off" class="layui-input" |
| | | oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-dropdownlist"> |
| | | <label class="layui-form-label" lang>车间:</label> |
| | | <div class="layui-input-block" id="selectAreaDiv2"> |
| | | <select id="area2" lay-filter="getarea2" lay-search> |
| | | <option value="B06">1002</option> |
| | | <option value="B09">1003一楼</option> |
| | | <option value="B07">1003二楼</option> |
| | | </select> |
| | | <img src="/assets/down_arraw.png"> |
| | | </div> |
| | | </div> |
| | | <table class="layout-tbl-submit" border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td style="width: 23%;"></td> |
| | | <td> |
| | | <button class="layout-btn layout-btn-red" lang type="button" lay-submit |
| | | lay-filter="formBind">出库</button> |
| | | </td> |
| | | <td style="width: 33%;"></td> |
| | | |
| | | </tr> |
| | | </table> |
| | | |
| | | </form> |
| | | </div> |
| | | |
| | | <br> |
| | | <br> |
| | | <div id="demodiv1"> |
| | | <br><br><br><br><br><br><br> |
| | | </div> |
| | | |
| | | |
| | | <!-- <div id="" class="cut-line"> |
| | | <img src="/assets/fengexian.png"> |
| | | </div> --> |
| | | |
| | | <!-- <div class="layout-tbl-paging" id=""> |
| | | <table id="tableBoxList1" class="tbl-box-list" border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <th lang style="width: 15%;">物料编码</th> |
| | | <th lang style="width: 35%;">物料名称</th> |
| | | <th lang style="width: 25%;">批次</th> |
| | | <th lang style="width: 15%;">物料数量</th> |
| | | <th lang style="width: 10%;">操作</th> |
| | | </tr> |
| | | <tr id="boxCell" style="display: none;"> |
| | | <td name="code">AG000001</td> |
| | | <td name="name">疫苗名称名称名称</td> |
| | | <td name="lotNo">批次号</td> |
| | | <td name="num">30</td> |
| | | <td name="del"> |
| | | <div id="" class="tbl-btn-del" lang> |
| | | 删除 |
| | | </div> |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | |
| | | <table id="tableBoxPages1" class="tbl-box-pages" border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td class="page-prev">上一页</td> |
| | | <td class="page-num page-num-select">1</td> |
| | | <td class="page-num">2</td> |
| | | <td class="page-num">3</td> |
| | | <td class="page-num">4</td> |
| | | <td class="page-num">5</td> |
| | | <td class="page-next">下一页</td> |
| | | </tr> |
| | | </table> |
| | | </div> --> |
| | | |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <script src="/js/jquery-3.5.1.min.js"></script> |
| | | <script src="/layui/layui.js"></script> |
| | | <script src="/js/public.js"></script> |
| | | <script src="/js/language.js"></script> |
| | | <script src="/js/jquery.cookie.js"></script> |
| | | <script> |
| | | layui.use(['form', 'jquery'], function () { |
| | | var form = layui.form |
| | | |
| | | /* 标签切换代码 */ |
| | | $('#demodiv').hide(); |
| | | $('#demodiv1').hide(); |
| | | 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;"); //默认颜色 |
| | | }); |
| | | |
| | | $('#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;"); //选中后颜色 |
| | | |
| | | }); |
| | | }); |
| | | |
| | | /*——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————*/ |
| | | |
| | | initLanguage() |
| | | setLanguage() |
| | | |
| | | |
| | | //是否连续组托 |
| | | isContinue = "0"; |
| | | |
| | | |
| | | // 托盘码文本改变时触发 |
| | | $("#PalletNo").on('input', function () { |
| | | |
| | | if ($("#PalletNo").val() == "" || $("#PalletNo").val().length < 8) { |
| | | return; |
| | | } |
| | | if ($("#PalletNo").val().length >= 8) { |
| | | $("#PalletNo").val($("#PalletNo").val().substr(-8)) |
| | | } |
| | | checkPalletStat() |
| | | }) |
| | | // 托盘码文本改变时触发-数量 |
| | | $("#PalletNo1").on('input', function () { |
| | | |
| | | if ($("#PalletNo1").val() == "" || $("#PalletNo1").val().length < 8) { |
| | | return; |
| | | } |
| | | if ($("#PalletNo1").val().length >= 8) { |
| | | $("#PalletNo1").val($("#PalletNo1").val().substr(-8)) |
| | | } |
| | | checkPalletStat() |
| | | }) |
| | | |
| | | // 判断托盘码是否可用 |
| | | function checkPalletStat() { |
| | | if (xianshiyemian == 0) { |
| | | var param = { |
| | | "PalletNo": $("#PalletNo").val() |
| | | } |
| | | sendData(IP + "/PdaAsn/IsEnablePalletNo", param, 'post', function (res) { |
| | | if (res.code == 0) { |
| | | $("#BoxCode").focus(); |
| | | |
| | | } else { |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { }); |
| | | } |
| | | }); |
| | | } |
| | | else if (xianshiyemian == 1) { |
| | | var param = { |
| | | "PalletNo": $("#PalletNo1").val() |
| | | } |
| | | sendData(IP + "/PdaAsn/IsEnablePalletNo", param, 'post', function (res) { |
| | | if (res.code == 0) { |
| | | |
| | | $("#SkuQty").focus(); |
| | | |
| | | } else { |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | //箱码回车事件 |
| | | $("#BoxCode").keydown(function (e) { |
| | | if (e.keyCode === 13) { |
| | | if ($("#BoxCode").val() == "") { |
| | | layer.msg('请先扫描箱码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return |
| | | } |
| | | checkBoxInfo() |
| | | } |
| | | }); |
| | | |
| | | //箱回车事件 |
| | | function checkBoxInfo() { |
| | | var param = { |
| | | "BoxNo": $("#BoxCode").val(), |
| | | } |
| | | sendData(IP + "/PdaSo/GetWmsBoxInfos", param, 'get', function (res) { |
| | | |
| | | if (res.code == 0) { //成功 |
| | | $("#SkuName").val(res.data[0].SkuName); |
| | | $("#LotNo").val(res.data[0].LotNo); |
| | | |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | //绑定到托盘事件 |
| | | form.on('submit(formBind)', function (data) { |
| | | if (xianshiyemian == 0) { |
| | | |
| | | if ($("#PalletNo").val() == "") { |
| | | layer.msg('请扫描托盘条码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | if ($("#BoxCode").val() == "") { |
| | | layer.msg('请扫描外箱条码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | var param = { |
| | | PalletNo: $("#PalletNo").val(), |
| | | BoxNo: $("#BoxCode").val(), |
| | | TableType: xianshiyemian, |
| | | } |
| | | //组盘 |
| | | sendData(IP + "/PdaSo/ChejianPick", param, 'post', function (res) { |
| | | if (res.code == 0) { //成功 |
| | | layer.msg(res.msg, { |
| | | icon: 1, |
| | | time: 1000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | $("#BoxCode").val(""); |
| | | $("#SkuName").val(""); |
| | | $("#LotNo").val(""); |
| | | |
| | | }); |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | //回调 |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | else if (xianshiyemian == 1) { |
| | | if ($("#bar1").val() == "") { |
| | | layer.msg('请选择入库单', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | if ($("#SkuNo").val() == "") { |
| | | layer.msg('请输入物料', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | if ($("#PalletNo2").val() == "") { |
| | | layer.msg('请扫描托盘条码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | var param = { |
| | | PalletNo: $("#PalletNo2").val(), |
| | | SkuNo: $("#SkuNo").val(), |
| | | LotNo: $("#LotNo2").val(), |
| | | SkuQty: parseFloat($("#SkuQty2").val()), //物料数量 |
| | | AreaNo:$("#area").val(), |
| | | TableType: xianshiyemian, |
| | | } |
| | | console.log(param) |
| | | //组盘 |
| | | sendData(IP + "/PdaAsn/ChejianIn", param, 'post', function (res) { |
| | | if (res.code == 0) { //成功 |
| | | layer.msg(res.msg, { |
| | | icon: 1, |
| | | time: 1000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | $("#PalletNo2").val(""); |
| | | $("#SkuNo").val(""); |
| | | $("#SkuQty2").val(""); |
| | | $("#LotNo2").val(""); |
| | | |
| | | }); |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | //回调 |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 |
| | | }); |
| | | |
| | | |
| | | |
| | | /*——————————————————————————————————————————————————————————*/ |
| | | |
| | | $("#menuImg").click(function (e) { |
| | | e.stopPropagation() |
| | | |
| | | if ($("#menuList").is(":hidden")) { |
| | | $("#menuList").show() |
| | | } else { |
| | | $("#menuList").hide() |
| | | } |
| | | }) |
| | | $('body').click(function () { |
| | | $("#menuList").hide() |
| | | }) |
| | | }) |
| | | </script> |
| | | </body> |
| | | |
| | | </html> |
| | |
| | | public string HouseNo { get; set; } |
| | | public string RoadwayNo { get; set; } |
| | | public string Ceng { get; set; } |
| | | public int palletNum { get; set; } |
| | | |
| | | public string locate { get; set; } |
| | | |
| | | } |
| | | |
| | |
| | | /// Desc:外箱条码 |
| | | /// </summary> |
| | | public string BoxNo { get; set; } |
| | | public string SkuNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:是否连续组托 |
| | |
| | | /// </summary> |
| | | public string BoxLevel { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 车间区域 1002 1003一楼 1003二楼 |
| | | /// </summary> |
| | | public string AreaNo { get; set; } |
| | | |
| | | |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据箱码获取标签箱码信息(车间入库-获取WMS生成的箱信息) |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public List<BoxInfoDto> GetWmsBoxInfos(string boxNo) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(boxNo)) |
| | | { |
| | | throw new Exception("请扫描外箱条码!"); |
| | | } |
| | | |
| | | string sqlString = $@"SELECT BoxNo, SkuNo, SkuName, LotNo, BitBoxMark, SUM(Qty) as Qty FROM BllBoxInfo |
| | | WHERE IsDel = '0' and Status='0' and BoxNo = '{boxNo}' |
| | | GROUP BY BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; |
| | | var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); |
| | | |
| | | if (models.Count != 0) |
| | | { |
| | | return models; |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("没有查询到箱码信息"); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | |
| | | public void ChejianIn(string palletNo,string boxNo,decimal qty,string areaNo,int userId) |
| | | { |
| | | try |
| | | { |
| | | #region MyRegion |
| | | |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘号不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(boxNo)) |
| | | { |
| | | throw new Exception("箱号不能为空"); |
| | | } |
| | | if (qty<=0) |
| | | { |
| | | throw new Exception("数量不能小等0"); |
| | | } |
| | | var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo).ToList(); |
| | | if (boxInfo.Count == 0) |
| | | { |
| | | throw new Exception("未查询到当前箱号信息"); |
| | | } |
| | | var boxInfoOne = boxInfo.First(); |
| | | var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (pall == null) |
| | | { |
| | | throw new Exception("未查询到当前托盘信息"); |
| | | } |
| | | #endregion |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | //当前时间 |
| | | var comTime = DateTime.Now; |
| | | |
| | | #region 包装 |
| | | |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == boxInfoOne.SkuNo); |
| | | var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo); |
| | | |
| | | var pNum = 0;//托盘物品数量 |
| | | var bNum = 0;//箱码物品数量 |
| | | |
| | | //公共方法获取包装数量 |
| | | new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum); |
| | | |
| | | #endregion |
| | | |
| | | var msgStr = $"箱号为{boxNo}"; |
| | | var boxInfoList = new List<BllBoxInfo>(); |
| | | |
| | | |
| | | boxInfoList.AddRange(boxInfo); |
| | | |
| | | #region 库存明细 |
| | | |
| | | var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo); |
| | | if (area == null) |
| | | { |
| | | throw new Exception("入库区域不能为空"); |
| | | } |
| | | |
| | | var tags = "0"; |
| | | |
| | | // 判断库存明细是否已有此托盘信息 |
| | | var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo== boxInfoOne.SkuNo && m.LotNo == boxInfoOne.LotNo && m.PalletNo == palletNo); |
| | | var sdId1 = 0; |
| | | if (sd1 != null) |
| | | { |
| | | if (sd1.AreaNo!= areaNo) |
| | | { |
| | | throw new Exception("选择的区域与库存不同"); |
| | | } |
| | | sdId1 = sd1.Id; |
| | | // 库存已存在 更新数据 |
| | | sd1.Qty += qty; |
| | | sd1.CompleteTime = comTime; |
| | | sd1.UpdateUser = userId; |
| | | sd1.UpdateTime = comTime; |
| | | |
| | | Db.Updateable(sd1).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | var sd2 = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0" && !string.IsNullOrWhiteSpace(m.AreaNo)); |
| | | if (sd2.Count(m=>m.AreaNo!= areaNo) > 0) |
| | | { |
| | | throw new Exception("当前托盘位置与选择的不同,请核实"); |
| | | } |
| | | // 库存不存在 插入数据 |
| | | sd1 = new DataStockDetail() |
| | | { |
| | | ASNNo = "", |
| | | LotNo = boxInfoOne.LotNo, |
| | | LotText = boxInfoOne.LotText, |
| | | SupplierLot = boxInfoOne.SupplierLot, |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | | Qty = qty, |
| | | LockQty = 0, |
| | | FrozenQty = 0, |
| | | InspectQty = 0, |
| | | WareHouseNo = area.WareHouseNo,//所属仓库 |
| | | RoadwayNo = "",//所属巷道 |
| | | AreaNo = area.AreaNo,//所属区域 |
| | | LocatNo = "",//储位地址 |
| | | PalletNo = palletNo, |
| | | PalletTags = tags, |
| | | CompleteTime = comTime, |
| | | ProductionTime = boxInfoOne.ProductionTime, |
| | | ExpirationTime = boxInfoOne.ExpirationTime, |
| | | Status = "0", |
| | | InspectMark = boxInfoOne.InspectMark, |
| | | InspectStatus = sku.IsInspect, |
| | | BitPalletMark = "1", |
| | | PackagNo = sku.PackagNo, |
| | | |
| | | IsDel = "0", |
| | | CreateUser = 0, |
| | | CreateTime = comTime |
| | | }; |
| | | |
| | | //添加库存明细 |
| | | sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity(); |
| | | } |
| | | #endregion |
| | | |
| | | // 更改箱支关系表 |
| | | decimal factQty = 0.00m;//托盘总数量 |
| | | |
| | | |
| | | //标签组托 |
| | | var boxGroup = boxInfo.GroupBy(m => m.BoxNo).ToList(); |
| | | foreach (var g in boxGroup) |
| | | { |
| | | decimal boxFullQty = 0;//箱内总数量 |
| | | foreach (var box in g) |
| | | { |
| | | if (box.BindNo != null && box.BindNo != 0) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | |
| | | box.PalletNo = palletNo; |
| | | box.Status = "2"; |
| | | |
| | | box.CompleteTime = comTime; |
| | | box.UpdateTime = comTime; |
| | | box.UpdateUser = userId; |
| | | |
| | | //box.Qty = box.Qty; |
| | | //box.BitBoxMark = box.Qty == box.FullQty ? "0" : "1"; |
| | | |
| | | factQty += box.Qty; |
| | | boxFullQty += box.Qty; |
| | | |
| | | #region 库存箱码明细 |
| | | var box2 = new DataBoxInfo() |
| | | { |
| | | StockDetailId = sdId1, |
| | | BoxNo = box.BoxNo, |
| | | BoxNo2 = box.BoxNo2, |
| | | BoxNo3 = box.BoxNo3, |
| | | PalletNo = box.PalletNo, |
| | | PalletNo2 = box.PalletNo2, |
| | | PalletNo3 = box.PalletNo3, |
| | | Qty = box.Qty, |
| | | FullQty = box.FullQty, |
| | | Status = "2",//0:未组托 1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货 |
| | | LotNo = box.LotNo, |
| | | LotText = box.LotText, |
| | | SkuNo = box.SkuNo, |
| | | SkuName = box.SkuName, |
| | | Standard = sku.Standard, |
| | | ProductionTime = box.ProductionTime, |
| | | SupplierLot = box.SupplierLot, |
| | | InspectStatus = sku.IsInspect, |
| | | InspectMark = box.InspectMark, |
| | | BitBoxMark = box.BitBoxMark, |
| | | ExpirationTime = box.ExpirationTime, |
| | | |
| | | CreateUser = 0, |
| | | CreateTime = comTime |
| | | }; |
| | | //添加库存箱码明细 |
| | | Db.Insertable(box2).ExecuteCommand(); |
| | | #endregion |
| | | } |
| | | if (boxFullQty > bNum) |
| | | { |
| | | throw new Exception($"绑定失败,{g.Key}箱码绑定数量大于该物品包装数量!"); |
| | | } |
| | | } |
| | | //更改箱支关系表信息 |
| | | Db.Updateable(boxInfoList).ExecuteCommand(); |
| | | |
| | | |
| | | #region 库存 |
| | | var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == boxInfoOne.LotNo); |
| | | if (dataStock != null) |
| | | { |
| | | dataStock.Qty += factQty; |
| | | Db.Updateable(dataStock).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | var stock = new DataStock() |
| | | { |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | | LotNo = boxInfoOne.LotNo, |
| | | LotText = boxInfoOne.LotText, |
| | | Qty = qty, |
| | | LockQty = 0, |
| | | FrozenQty = 0, |
| | | IsSampling = "0", |
| | | IsDel = "0", |
| | | CreateUser = userId, |
| | | CreateTime = comTime |
| | | }; |
| | | Db.Insertable(stock).ExecuteCommand(); |
| | | } |
| | | #endregion |
| | | |
| | | // 更改托盘使用状态 |
| | | var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';"; |
| | | ////添加托盘记录表数据 |
| | | //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','组盘','0',getDate(),{userId},NULL,NULL);"; |
| | | //Db.Ado.ExecuteCommand(sqlStr); |
| | | new OperationASNServer().AddLogOperationAsn("PDA模块", "车间入库", boxNo, "添加", $"添加了托盘码为:{palletNo}、{msgStr}的入库信息", userId); |
| | | |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 车间绑定托盘 不贴标物料 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <param name="userId"></param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void ChejianQtyIn(string palletNo, string skuNo, string lotNo, decimal qty, string areaNo, int userId) |
| | | { |
| | | try |
| | | { |
| | | #region MyRegion |
| | | |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘号不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(skuNo)) |
| | | { |
| | | throw new Exception("物料不能为空"); |
| | | } |
| | | if (qty <= 0) |
| | | { |
| | | throw new Exception("数量不能小等0"); |
| | | } |
| | | var skuInfo = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == skuNo); |
| | | if (skuInfo == null) |
| | | { |
| | | throw new Exception("未查询到物料信息"); |
| | | } |
| | | var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (pall == null) |
| | | { |
| | | throw new Exception("未查询到当前托盘信息"); |
| | | } |
| | | #endregion |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | //当前时间 |
| | | var comTime = DateTime.Now; |
| | | |
| | | #region 包装 |
| | | |
| | | var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuInfo.PackagNo); |
| | | |
| | | var pNum = 0;//托盘物品数量 |
| | | var bNum = 0;//箱码物品数量 |
| | | |
| | | //公共方法获取包装数量 |
| | | new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum); |
| | | |
| | | #endregion |
| | | |
| | | |
| | | |
| | | #region 库存明细 |
| | | |
| | | var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo); |
| | | if (area == null) |
| | | { |
| | | throw new Exception("入库区域不能为空"); |
| | | } |
| | | |
| | | var tags = "0"; |
| | | |
| | | // 判断库存明细是否已有此托盘信息 |
| | | var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo == skuNo && m.LotNo == lotNo && m.PalletNo == palletNo); |
| | | var sdId1 = 0; |
| | | if (sd1 != null) |
| | | { |
| | | if (sd1.AreaNo != areaNo) |
| | | { |
| | | throw new Exception("选择的区域与库存不同"); |
| | | } |
| | | sdId1 = sd1.Id; |
| | | // 库存已存在 更新数据 |
| | | sd1.Qty += qty; |
| | | sd1.CompleteTime = comTime; |
| | | sd1.UpdateUser = userId; |
| | | sd1.UpdateTime = comTime; |
| | | if (sd1.Qty >= pNum) |
| | | { |
| | | sd1.BitPalletMark = "0"; |
| | | } |
| | | Db.Updateable(sd1).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | // 库存不存在 插入数据 |
| | | sd1 = new DataStockDetail() |
| | | { |
| | | LotNo = lotNo, |
| | | SupplierLot = "", |
| | | SkuNo = skuInfo.SkuNo, |
| | | SkuName = skuInfo.SkuName, |
| | | Standard = skuInfo.Standard, |
| | | Qty = qty, |
| | | LockQty = 0, |
| | | FrozenQty = 0, |
| | | InspectQty = 0, |
| | | WareHouseNo = area.WareHouseNo,//所属仓库 |
| | | RoadwayNo = "",//所属巷道 |
| | | AreaNo = area.AreaNo,//所属区域 |
| | | LocatNo = "",//储位地址 |
| | | PalletNo = palletNo, |
| | | PalletTags = tags, |
| | | CompleteTime = comTime, |
| | | //ProductionTime = boxInfoOne.ProductionTime, |
| | | //ExpirationTime = boxInfoOne.ExpirationTime, |
| | | Status = "0", |
| | | InspectMark = "0", |
| | | InspectStatus = "1", |
| | | BitPalletMark = qty >= pNum ?"0" :"1", |
| | | PackagNo = skuInfo.PackagNo, |
| | | |
| | | IsDel = "0", |
| | | CreateUser = 0, |
| | | CreateTime = comTime |
| | | }; |
| | | |
| | | //添加库存明细 |
| | | sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity(); |
| | | } |
| | | #endregion |
| | | |
| | | // 更改箱支关系表 |
| | | decimal factQty = 0.00m;//托盘总数量 |
| | | |
| | | |
| | | #region 库存 |
| | | var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == skuInfo.SkuNo && m.LotNo == lotNo); |
| | | if (dataStock != null) |
| | | { |
| | | dataStock.Qty += factQty; |
| | | Db.Updateable(dataStock).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | var stock = new DataStock() |
| | | { |
| | | SkuNo = skuInfo.SkuNo, |
| | | SkuName = skuInfo.SkuName, |
| | | Standard = skuInfo.Standard, |
| | | LotNo = lotNo, |
| | | LotText = "", |
| | | Qty = qty, |
| | | LockQty = 0, |
| | | FrozenQty = 0, |
| | | IsSampling = "0", |
| | | IsDel = "0", |
| | | CreateUser = userId, |
| | | CreateTime = comTime |
| | | }; |
| | | Db.Insertable(stock).ExecuteCommand(); |
| | | } |
| | | #endregion |
| | | |
| | | // 更改托盘使用状态 |
| | | var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';"; |
| | | ////添加托盘记录表数据 |
| | | //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','组盘','0',getDate(),{userId},NULL,NULL);"; |
| | | Db.Ado.ExecuteCommand(sqlStr); |
| | | new OperationASNServer().AddLogOperationAsn("PDA模块", "车间入库", skuNo, "添加", $"添加了托盘码为:{palletNo}的入库信息", userId); |
| | | |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | // 获取单据列表 |
| | | public List<ArrivalNoticeDto> GetArrivalNotices(ArrivalNoticeVm model) |
| | |
| | | var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); |
| | | if (newPalletInfo == null) |
| | | { |
| | | var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id != pinStockDetail.Id).ToList(); |
| | | var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew &&(m.SkuNo != stockDetail.SkuNo || m.LotNo != stockDetail.LotNo)).ToList(); |
| | | if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0) |
| | | { |
| | | throw Oops.Bah("新托盘信息不存在或已被使用!"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //修改新托盘状态 |
| | | newPalletInfo.Status = "1"; |
| | | await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | } |
| | | |
| | | var sd = new DataStockDetail(); |
| | |
| | | |
| | | if (isNew) |
| | | { |
| | | sd.Qty = pickQty; |
| | | sd.LockQty = pickQty; |
| | | await Db.Updateable(sd).ExecuteCommandAsync(); |
| | | var sdnew = Db.Queryable<DataStockDetail>().First(m => m.Id == sdId); |
| | | sdnew.Qty = pickQty; |
| | | sdnew.LockQty = pickQty; |
| | | await Db.Updateable(sdnew).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | |
| | | var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); |
| | | if (newPalletInfo == null) |
| | | { |
| | | var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id != pinStockDetail.Id).ToList(); |
| | | var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && (m.SkuNo != stockDetail.SkuNo && m.LotNo != stockDetail.LotNo)).ToList(); |
| | | if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0) |
| | | { |
| | | throw Oops.Bah("新托盘信息不存在或已被使用!"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //修改新托盘状态 |
| | | newPalletInfo.Status = "1"; |
| | | await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | |
| | | if (isNew) |
| | |
| | | } |
| | | } |
| | | |
| | | //车间pda拣货 |
| | | public async Task ChejianPick(string palletNo, string boxNo, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | | { |
| | | #region 判断 |
| | | |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw Oops.Bah("托盘码不能为空"); |
| | | } |
| | | if (string.IsNullOrEmpty(boxNo)) |
| | | { |
| | | throw Oops.Bah("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | | |
| | | //箱码明细 |
| | | List<DataBoxInfo> boxInfos; |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); |
| | | if (await boxInfo.CountAsync() == 0) |
| | | { |
| | | throw Oops.Bah("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | boxInfos = await boxInfo.ToListAsync(); |
| | | |
| | | //库存明细 |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == boxInfos.First().SkuNo && m.LotNo == boxInfos.First().LotNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw Oops.Bah("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | var areaList = new List<string>() { "B06", "B07", "B09" }; |
| | | if (!areaList.Contains(stockDetail.AreaNo)) |
| | | { |
| | | throw Oops.Bah("托盘不是车间托盘!"); |
| | | } |
| | | //库存总表 |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw Oops.Bah("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | var pickQty = boxInfos.Sum(m => m.Qty); |
| | | |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.Qty -= pickQty; |
| | | if (stockDetail.Qty == stockDetail.LockQty) |
| | | { |
| | | stockDetail.Status = "2"; |
| | | } |
| | | else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0) |
| | | { |
| | | stockDetail.Status = "1"; |
| | | } |
| | | else |
| | | { |
| | | stockDetail.Status = "0"; |
| | | } |
| | | |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | stock.Qty -= pickQty; |
| | | //stock.LockQty -= pickQty; |
| | | if (stock.Qty <= 0) |
| | | { |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (num2 <= 0) |
| | | { |
| | | //改变托盘状态 |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "车间出库", boxNo, "拣货", $"在PDA上对箱号为:{boxNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (AppFriendlyException e) |
| | | { |
| | | Db.RollbackTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据箱码获取标签箱码信息(车间入库-获取WMS生成的箱信息) |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public List<BoxInfoDto> GetWmsBoxInfos(string boxNo) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(boxNo)) |
| | | { |
| | | throw new Exception("请扫描外箱条码!"); |
| | | } |
| | | |
| | | string sqlString = $@"SELECT BoxNo, SkuNo, SkuName, LotNo FROM DataBoxInfo |
| | | WHERE IsDel = '0' and BoxNo = '{boxNo}' |
| | | GROUP BY BoxNo,SkuNo,SkuName,LotNo; "; |
| | | var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); |
| | | |
| | | if (models.Count != 0) |
| | | { |
| | | return models; |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("没有查询到箱码信息"); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | |
| | | |
| | | return allotList2; |
| | | } |
| | | |
| | | |
| | | //获取托盘中含有的执行中的单据 |
| | | public async Task<List<string>> GetPalletListBySo(string soNo, string soDetailId) |
| | | { |
| | | if (string.IsNullOrWhiteSpace(soNo))//判断托盘是否为空 |
| | | { |
| | | throw Oops.Bah("出库单为空,请选择出库单"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | { |
| | | throw Oops.Bah("出库明细为空,请选择物料-批次"); |
| | | } |
| | | |
| | | var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "0" && m.SONo == soNo && m.SODetailNo == int.Parse(soDetailId)).Select(m => m.PalletNo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); |
| | | return allotList; |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | //获取托盘中含有的执行中的单据 |
| | | public async Task<List<string>> GetRunNoticeList(string type) |
| | |
| | | throw Oops.Bah("需要垛数大于库存垛数,请重新输入!"); |
| | | } |
| | | } |
| | | stockDetail = new AllotSku().GetDataListOrder(stockDetail); |
| | | //获取库存总表信息 |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(s => s.IsDel == "0" && s.SkuNo == "100099"); |
| | | //验证库存总表是否为空 |
| | |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "1",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | CreateTime = serverTime, //创建时间 |
| | | CreateTime = Db.GetDate(), //创建时间 |
| | | CreateUser = userId, //创建人 |
| | | Msg = "Pda空托从" + s.LocatNo + "到" + model.OutMode + "的出库任务", //关键信息 |
| | | //FinishDate = serverTime, //完成时间 |
| | |
| | | skuList = skuList.Where(m => m.SkuNo == "100088").ToList(); |
| | | } |
| | | skuStrList = skuList.Select(m => m.SkuNo).ToList(); |
| | | var areaStr = new List<string>() { "B02", "B05", "B08" }; |
| | | var areaStr = new List<string>() { "B06", "B07", "B09" }; |
| | | var stockRst = new StockServer(); |
| | | var stockDetailRst = new StockDetailServer(); |
| | | Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() |
| | |
| | | private static readonly SqlSugarScope Db = DataContext.Db; |
| | | public HttpServer() { } |
| | | |
| | | |
| | | public OutCommandDto RequestPalletIn(string palletNo, string houseNo, int palletNum, string Strlocate) |
| | | { |
| | | return null; |
| | | //try |
| | | //{ |
| | | // #region 判断 |
| | | // if (string.IsNullOrEmpty(palletNo)) |
| | | // { |
| | | // throw new Exception("托盘号不能为空"); |
| | | // } |
| | | // if (string.IsNullOrEmpty(houseNo)) |
| | | // { |
| | | // throw new Exception("仓库号不能为空"); |
| | | // } |
| | | // if (palletNum <= 0) |
| | | // { |
| | | // throw new Exception("托盘数量不能小等0"); |
| | | // } |
| | | // if (string.IsNullOrEmpty(Strlocate)) |
| | | // { |
| | | // throw new Exception("起始位置不能为空"); |
| | | // } |
| | | // //获取储位信息 |
| | | // var locateInfo = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.WareHouseNo == houseNo && m.LocatNo == Strlocate); |
| | | // if (locateInfo == null) |
| | | // { |
| | | // throw new Exception("未查询到空储位"); |
| | | // } |
| | | // if (locateInfo.Flag != "0") |
| | | // { |
| | | // throw new Exception("当前位置标识状态是非正常的"); |
| | | // } |
| | | |
| | | // #endregion |
| | | |
| | | // #region MyRegion |
| | | |
| | | // var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList(); |
| | | // if (stockDetail.Count > 0) |
| | | // { |
| | | // throw new Exception("当前托盘在库内已有库存信息,请核实"); |
| | | // } |
| | | |
| | | // //获取托盘信息 |
| | | // var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | // if (pallet == null) |
| | | // { |
| | | // throw new Exception("未查询到托盘信息"); |
| | | // } |
| | | // if (pallet.Status != "0") |
| | | // { |
| | | // throw new Exception("托盘状态不能未使用状态"); |
| | | // } |
| | | // //获取托盘信息 |
| | | // var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == "100099"); |
| | | // var pNum = 0; |
| | | // var bNum = 0; |
| | | |
| | | // new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum); |
| | | |
| | | // var datetime = Db.GetDate(); |
| | | // Db.BeginTran(); |
| | | |
| | | // // 插入托盘绑定表 |
| | | // var modelpb = new BllPalletBind |
| | | // { |
| | | // ASNNo = "", |
| | | // ASNDetailNo = 0, |
| | | // TaskNo = "", //任务号 |
| | | // PalletNo = palletNo, |
| | | // Qty = palletNum, |
| | | // FullQty = pNum, |
| | | // Status = "3", //上架完成 |
| | | // Type = "1", //0 物料托 1 空托 |
| | | // LotNo = "", |
| | | // LotText = "", |
| | | // SupplierLot = "", |
| | | // InspectMark = "0", //0 否 1 是 |
| | | // BitPalletMark = pNum == palletNum ? "0" : "1", |
| | | // IsBale = "0", |
| | | // IsBelt = "0", |
| | | // CreateUser = 0, |
| | | // CreateTime = Db.GetDate() |
| | | // }; |
| | | // var id = Db.Insertable(modelpb).ExecuteReturnIdentity(); |
| | | |
| | | // #region 库存明细 |
| | | // var sd1 = new DataStockDetail() |
| | | // { |
| | | // LotNo = modelpb.LotNo, |
| | | // LotText = modelpb.LotText, |
| | | // SupplierLot = modelpb.SupplierLot, |
| | | // SkuNo = sku.SkuNo, |
| | | // SkuName = sku.SkuName, |
| | | // Standard = sku.Standard, |
| | | // Qty = modelpb.Qty, |
| | | // LockQty = 0, |
| | | // FrozenQty = 0, |
| | | // InspectQty = 0, |
| | | // ASNNo = modelpb.ASNNo, |
| | | // ASNDetailNo = modelpb.ASNDetailNo, |
| | | // WareHouseNo = "", |
| | | // RoadwayNo = "", |
| | | // AreaNo = "", |
| | | // LocatNo = "", |
| | | // PalletNo = modelpb.PalletNo, |
| | | // PalletNo2 = modelpb.PalletNo2, |
| | | // PalletNo3 = modelpb.PalletNo3, |
| | | // PalletTags = "0", |
| | | // CompleteTime = datetime, |
| | | // ProductionTime = modelpb.ProductionTime, |
| | | // ExpirationTime = modelpb.ExpirationTime, |
| | | // Status = "0", |
| | | // InspectMark = modelpb.InspectMark, |
| | | // InspectStatus = sku.IsInspect, |
| | | // BitPalletMark = modelpb.BitPalletMark, |
| | | // PackagNo = sku.PackagNo, |
| | | // IsBale = modelpb.IsBale, |
| | | // IsBelt = modelpb.IsBelt, |
| | | |
| | | |
| | | // IsDel = "0", |
| | | // CreateUser = 0, |
| | | // CreateTime = datetime |
| | | // }; |
| | | // var sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity(); |
| | | // #endregion |
| | | |
| | | // #region 库存 |
| | | // var dataStock1 = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo); |
| | | // if (dataStock1 != null) |
| | | // { |
| | | // dataStock1.Qty += modelpb.Qty; |
| | | // if (modelpb.InspectMark == "1") |
| | | // { |
| | | // dataStock1.IsSampling = "0"; |
| | | // } |
| | | // Db.Updateable(dataStock1).ExecuteCommand(); |
| | | // } |
| | | // else |
| | | // { |
| | | // var stock = new DataStock() |
| | | // { |
| | | // SkuNo = sku.SkuNo, |
| | | // SkuName = sku.SkuName, |
| | | // Standard = sku.Standard, |
| | | // LotNo = "", |
| | | // LotText = "", |
| | | // Qty = modelpb.Qty, |
| | | // LockQty = 0, |
| | | // FrozenQty = 0, |
| | | // IsSampling = "0", |
| | | // IsDel = "0", |
| | | // CreateUser = 0, |
| | | // CreateTime = datetime |
| | | // }; |
| | | // Db.Insertable(stock).ExecuteCommand(); |
| | | // } |
| | | // #endregion |
| | | |
| | | |
| | | // #region 申请储位 |
| | | |
| | | // SysStorageLocat locate; |
| | | // var sku = skuList.FirstOrDefault(m => m.SkuNo == skuNo); |
| | | // if (sku == null) |
| | | // { |
| | | // throw new Exception("物料信息中未查询到入库单明细包含的物料信息,不可入库"); |
| | | // } |
| | | // //判断物料是否含有类别信息 |
| | | // if (string.IsNullOrWhiteSpace(sku.CategoryNo)) |
| | | // { |
| | | // throw new Exception($"物料:{sku.SkuNo}未查询到类别信息"); |
| | | // } |
| | | |
| | | // var skuCategory = skuCategoryList.FirstOrDefault(m => m.CategoryNo == sku.CategoryNo); |
| | | // if (skuCategory == null) |
| | | // { |
| | | // throw new Exception($"未在类别信息中查询到物料:{sku.SkuNo}包含的类别"); |
| | | // } |
| | | |
| | | // var areaStr = skuCategory.AreaNo.Split(","); |
| | | // var areaList = new List<string>(); |
| | | // foreach (var item in areaStr) |
| | | // { |
| | | // areaList.Add(item); |
| | | // } |
| | | |
| | | // locate = allotLocate.GetSuiTableLocate(houseNo, areaList, "", ceng); |
| | | |
| | | |
| | | // #endregion |
| | | |
| | | // #region 添加任务 |
| | | |
| | | // //添加巷道使用记录 |
| | | // var log = new SysRoadwayUseLog |
| | | // { |
| | | // RoadwayNo = locateInfo.RoadwayNo, |
| | | // WareHouseNo = houseNo, |
| | | // Row = 0, |
| | | // Column = 0, |
| | | // Layer = 0, |
| | | // }; |
| | | // Db.Insertable(log).ExecuteCommand(); |
| | | // var taskNo = new Common().GetMaxNo("TK"); |
| | | // var inTask = new LogTask //入库任务 |
| | | // { |
| | | // TaskNo = taskNo, |
| | | // Sender = "WMS", |
| | | // Receiver = "WCS", |
| | | // IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | // SendDate = DateTime.Now, //发送时间 |
| | | // BackDate = DateTime.Now, //返回时间 |
| | | // StartRoadway = "", // 起始巷道 |
| | | // StartLocat = locate,//起始位置 |
| | | // EndLocat = locateInfo.LocatNo,//目标位置 |
| | | // EndRoadway = locateInfo.RoadwayNo, // 目标巷道 |
| | | // PalletNo = palletNo,//托盘码 |
| | | // IsSend = 1,//是否可再次下发 |
| | | // IsCancel = 1,//是否可取消 |
| | | // IsFinish = 1,//是否可完成 |
| | | // Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | // Status = "1",//任务状态0:等待执行1正在执行2执行完成 |
| | | // OrderType = "0",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | // Msg = $"{locateInfo.LocatNo}到=>>" + + "的入库任务", //关键信息 |
| | | |
| | | // }; |
| | | // Db.Insertable(inTask).ExecuteCommand(); |
| | | // var asnNo = ""; |
| | | |
| | | // //添加托盘上架记录 |
| | | // var upShelf = new BllPalletUpShelf() |
| | | // { |
| | | // TaskNo = inTask.TaskNo, |
| | | // TraceNo = asnNo, |
| | | // PalletNo = palletNo, |
| | | // SkuNo = stockModel.SkuNo, |
| | | // SkuName = stockModel.SkuName, |
| | | // LotNo = stockModel.LotNo, |
| | | // Status = "1", |
| | | |
| | | // WareHouseNo = houseNo, |
| | | // RoadwayNo = locate.RoadwayNo, |
| | | // AreaNo = locate.AreaNo, |
| | | // LocatNo = locate.LocatNo, |
| | | |
| | | // CreateUser = 0, |
| | | // }; |
| | | // Db.Insertable(upShelf).ExecuteCommand(); |
| | | |
| | | |
| | | |
| | | // locate.Status = "2"; |
| | | // Db.Updateable(locate).ExecuteCommand(); |
| | | |
| | | // Db.CommitTran(); |
| | | // comDto = new OutCommandDto() |
| | | // { |
| | | // TaskNo = taskNo, // 任务号 |
| | | // TaskType = "0",// 任务类型 |
| | | // PalletNo = palletNo,//托盘号 |
| | | |
| | | // StartRoadway = inTask.StartRoadway, |
| | | // StartLocate = inTask.StartLocat, // 起始位置 |
| | | // EndLocate = inTask.EndLocat, // 目标位置 |
| | | // EndRoadway = inTask.EndRoadway, // 目标巷道 |
| | | |
| | | // Order = 999, |
| | | // Type = PLCTypeEnum.AGV |
| | | // }; |
| | | |
| | | // #endregion |
| | | |
| | | // // 更改托盘使用状态 |
| | | // string sqlStr = string.Empty; |
| | | // sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';"; |
| | | // Db.Ado.ExecuteCommand(sqlStr); |
| | | // Db.CommitTran(); |
| | | |
| | | // #endregion |
| | | |
| | | // return null; |
| | | //} |
| | | //catch (Exception e ) |
| | | //{ |
| | | // throw new Exception(e.Message); |
| | | //} |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 申请储位 (立体库) |
| | | /// </summary> |
| | |
| | | throw new Exception("选择的出库单明细参数错误"); |
| | | } |
| | | //所有要出库的出库分配信息(未下发的信息和待拣货的信息) |
| | | var item = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.SONo == soNo && a.SODetailNo == intDetailId && a.Status == "0" ); |
| | | var item = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.SONo == soNo && a.SODetailNo == intDetailId && a.PalletNo == palletNo && a.Status == "0" ); |
| | | if (item == null) //判断是否有需要下发的出库流水 |
| | | { |
| | | throw new Exception("当前出库单据无需要下发的托盘"); |
| | |
| | | var imBl = com.GetImTask(item.PalletNo); |
| | | if (imBl != null) |
| | | { |
| | | str = "要出库的托盘正在入库"; |
| | | return outDto1; |
| | | throw new Exception("要出库的托盘正在入库"); |
| | | } |
| | | //判断是否是已经出过库又回库 |
| | | if (item.Status == "0") |
| | |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | } |
| | | } |
| | | str = "要出库的托盘已在库外"; |
| | | Db.CommitTran(); |
| | | str = "托盘已在库外"; |
| | | return outDto1; |
| | | } |
| | | str = "要出库的托盘正在入库"; |
| | | return outDto1; |
| | | } |
| | | |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//当前出库的储位信息 |
| | | if (locate == null) |
| | | { |
| | | str = "出库的托盘储位信息错误(在储位表中未查询到)"; |
| | | return outDto1; |
| | | throw new Exception("出库的托盘储位信息错误(在储位表中未查询到)"); |
| | | } |
| | | //判断储位标志是否为损坏 |
| | | if (locate.Flag == "2") |
| | | { |
| | | str = "储位损坏不能出库"; |
| | | return outDto1; |
| | | throw new Exception("储位损坏不能出库"); |
| | | } |
| | | if (locate.WareHouseNo != "W02") |
| | | { |
| | | str = "托盘不在货架库上"; |
| | | return outDto1; |
| | | throw new Exception("托盘不在货架库上"); |
| | | } |
| | | var locateEnd = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == outModeLocate && m.IsDel == "0");//当前出库的目标储位信息 |
| | | if (locateEnd == null) |
| | | { |
| | | str = "出库的托盘储位信息错误(在储位表中未查询到)"; |
| | | return outDto1; |
| | | throw new Exception("出库的托盘储位信息错误(在储位表中未查询到)"); |
| | | } |
| | | else if (locateEnd.Status != "0") |
| | | { |
| | | str = "目标储位状态不是空储位"; |
| | | return outDto1; |
| | | throw new Exception("目标储位状态不是空储位"); |
| | | } |
| | | #endregion |
| | | |
| | |
| | | } |
| | | else if (locate.Status == "5") //移出中 |
| | | { |
| | | str = "当前要出库的储位正在移出"; |
| | | return outDto1; |
| | | throw new Exception("当前要出库的储位正在移出"); |
| | | } |
| | | |
| | | |
| | |
| | | /// </summary> |
| | | /// <param name="palletList"></param> |
| | | /// <returns></returns> |
| | | private List<DataStockDetail> GetDataListOrder(List<DataStockDetail> palletList) |
| | | public List<DataStockDetail> GetDataListOrder(List<DataStockDetail> palletList) |
| | | { |
| | | try |
| | | { |
| | |
| | | public decimal? FullQty {get;set;} |
| | | |
| | | /// <summary> |
| | | /// Desc:状态 |
| | | /// Desc:状态 2入库完成 3上架完成 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | |
| | | #region WCS |
| | | |
| | | /// <summary> |
| | | /// 空托跺组托入库 |
| | | /// </summary> |
| | | /// <param name="palletNo">托盘号</param> |
| | | /// <param name="houseNo">仓库</param> |
| | | /// <param name="palletNum">托盘数量</param> |
| | | /// <param name="locate">起始位置</param> |
| | | /// <returns></returns> |
| | | OutCommandDto RequestPalletIn(string palletNo, string houseNo, int palletNum, string Strlocate); |
| | | |
| | | /// <summary> |
| | | /// 申请储位 (立体库) |
| | | /// </summary> |
| | | /// <param name="palletNo"></param> |
| | |
| | | /// <param name="userId"></param> |
| | | void SaveAppointLocate(string palletNo, string locateNo, int userId); |
| | | |
| | | List<BoxInfoDto> GetWmsBoxInfos(string boxNo); |
| | | |
| | | void ChejianIn(string palletNo, string boxNo, decimal qty,string areaNo, int userId); |
| | | |
| | | void ChejianQtyIn(string palletNo, string skuNo, string lotNo, decimal qty, string areaNo, int userId); |
| | | |
| | | #endregion |
| | | |
| | | |
| | |
| | | /// <param name="userId"></param> |
| | | Task SoSetQtyPinPick34(string soNo, string soDetailId, string palletNo, string PickQty, string palletNoNew, int userId); |
| | | |
| | | |
| | | Task ChejianPick(string palletNo, string boxNo, int userId); |
| | | |
| | | List<BoxInfoDto> GetWmsBoxInfos(string boxNo); |
| | | |
| | | #endregion |
| | | |
| | | /// <summary> |
| | |
| | | Task<List<string>> GetRunNoticeList(string type); |
| | | |
| | | /// <summary> |
| | | /// 获取出库单未下发出库的托盘 |
| | | /// </summary> |
| | | /// <param name="soNo"></param> |
| | | /// <param name="soDetailId"></param> |
| | | /// <returns></returns> |
| | | Task<List<string>> GetPalletListBySo(string soNo, string soDetailId); |
| | | |
| | | /// <summary> |
| | | /// 获取出库托盘上的物料批次(根据托盘码) |
| | | /// </summary> |
| | | /// <param name="palletNo">托盘码</param> |
| | |
| | | #region WMS接口 被下游系统接口调用 |
| | | |
| | | /// <summary> |
| | | /// WCS申请空托跺组托入库 (叠托盘机) |
| | | /// </summary> |
| | | /// <param name="model">入库单信息</param> |
| | | /// <returns></returns> |
| | | [AllowAnonymous] |
| | | [HttpPost] |
| | | public IActionResult RequestPalletIn(RequestLocate model) |
| | | { |
| | | var logStr = ""; |
| | | |
| | | logStr = $@".\log\WCS\WCS申请空托跺组托入库" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | |
| | | try |
| | | { |
| | | |
| | | var jsonData = JsonConvert.SerializeObject(model); |
| | | LogFile.SaveLogToFile($"WCS申请空托跺组托入库:( {jsonData} ),", logStr); |
| | | |
| | | var list = _http.RequestPalletIn(model.PalletNo, model.HouseNo, model.palletNum,model.locate); |
| | | |
| | | LogFile.SaveLogToFile($"WCS申请空托跺组托入库返回:( {JsonConvert.SerializeObject(list)} ),", logStr); |
| | | |
| | | return Ok(new { Success = 0, Message = "申请巷道成功", TaskList = list }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | LogFile.SaveLogToFile($"WCS申请空托跺组托入库返回:( {e.Message} ),", logStr); |
| | | |
| | | return Ok(new ErpModel { Success = -1, Message = e.Message }); |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// PDA 人工申请储位 (立体库) |
| | | /// </summary> |
| | | /// <param name="model">入库单信息</param> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据箱码获取标签箱码信息(车间入库-获取WMS生成的箱信息) |
| | | /// </summary> |
| | | /// <param name="boxNo">BoxNo:箱号</param> |
| | | /// <returns></returns> |
| | | [HttpGet] |
| | | public IActionResult GetWmsBoxInfos(string boxNo) |
| | | { |
| | | try |
| | | { |
| | | var models = _PdaAsnSvc.GetWmsBoxInfos(boxNo); |
| | | |
| | | return Ok(new { code = 0, msg = "标签箱码信息", data = models }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 判断托盘是否可用 公用方法 |
| | | /// </summary> |
| | | /// <param name="model">PalletNo:托盘条码</param> |
| | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 绑定托盘 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult ChejianIn(PdaPalletBindVm model) |
| | | { |
| | | try |
| | | { |
| | | |
| | | if (_userManager.UserId ==0) |
| | | { |
| | | throw new Exception("未获取到用户信息"); |
| | | } |
| | | |
| | | if (model.TableType == 0) |
| | | { |
| | | _PdaAsnSvc.ChejianIn(model.PalletNo,model.BoxNo,model.SkuQty,model.AreaNo, _userManager.UserId); |
| | | } |
| | | else if (model.TableType == 1) |
| | | { |
| | | _PdaAsnSvc.ChejianQtyIn(model.PalletNo,model.SkuNo,model.LotNo,model.SkuQty,model.AreaNo, _userManager.UserId); |
| | | } |
| | | |
| | | return Ok(new { code = 0, msg = "绑定成功!" }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | |
| | | |
| | | //---------------------------------------------申请入库页面---------------------------------------------------------------------- |
| | | |
| | | |
| | |
| | | return await _pdaSoSvc.GetSoSkuLotNoListBySo(model.SoNo); |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取物料-批次信息 |
| | | /// </summary> |
| | | /// <param name="model">PalletNo:托盘码、SoNo:单据号</param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public async Task<List<string>> GetPalletListBySo(PdaSoVm model) |
| | | { |
| | | return await _pdaSoSvc.GetPalletListBySo(model.SoNo,model.SoDetailId); |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取物料-批次信息 |
| | | /// </summary> |
| | |
| | | await _pdaSoSvc.SoSetQtyPick(model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, _userManager.UserId); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据箱码获取标签箱码信息(车间入库-获取WMS生成的箱信息) |
| | | /// </summary> |
| | | /// <param name="boxNo">BoxNo:箱号</param> |
| | | /// <returns></returns> |
| | | [HttpGet] |
| | | public IActionResult GetWmsBoxInfos(string boxNo) |
| | | { |
| | | try |
| | | { |
| | | var models = _pdaSoSvc.GetWmsBoxInfos(boxNo); |
| | | |
| | | return Ok(new { code = 0, msg = "标签箱码信息", data = models }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 空托出库 |
| | |
| | | { |
| | | await _pdaSoSvc.SoSetQtyPinPick34(model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, model.PalletNoNew, _userManager.UserId); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 车间pda拣货-标签 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public async Task ChejianPick(PdaSoVm model) |
| | | { |
| | | await _pdaSoSvc.ChejianPick(model.PalletNo, model.BoxNo, _userManager.UserId); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region JC23版取样 |
| | |
| | | await _stockCheckSvc.StockAdjustAuto(model.Id); |
| | | } |
| | | //系统对接后放开 |
| | | //var bl =_stockCheckSvc.FinishCr(model.Id,_config.ErpHost + _config.DataChangeUrl, int.Parse(userId)); |
| | | var bl =_stockCheckSvc.FinishCr(model.Id,_config.ErpHost + _config.DataChangeUrl, int.Parse(userId)); |
| | | //if (bl) |
| | | //{ |
| | | return Ok(new { code = 0, count = 0, msg = "盘点单调整上传成功" }); |