| | |
| | | <input type="text" id="PalletNo" name="PalletNo" placeholder="托盘号" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-inline mingxi"> |
| | | <!-- <div class="layui-inline mingxi"> |
| | | <label class="layui-form-label" style="width: 60px;">货主编码</label> |
| | | <div class="layui-input-inline" style="width: 170px; margin-right: 0px;"> |
| | | <input type="text" id="OwnerNo" name="OwnerNo" placeholder="货主编码" autocomplete="off" |
| | |
| | | <input type="text" id="OwnerName" name="OwnerName" placeholder="货主名称" autocomplete="off" |
| | | class="layui-input"> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | <div class="layui-inline mingxi"> |
| | | <label class="layui-form-label" style="width: 60px;">批次号</label> |
| | | <div class="layui-input-inline" style="width: 170px; margin-right: 0px;"> |
| | |
| | | |
| | | <!-- 箱码 箱支状态 检验标记 零箱标记 质量状态 --> |
| | | |
| | | <div class="layui-inline zongdan" > |
| | | <!-- <div class="layui-inline zongdan" > |
| | | <label class="layui-form-label" style="width: 60px;">箱码</label> |
| | | <div class="layui-input-inline" style="width: 170px; margin-right: 0px;"> |
| | | <input type="text" id="BoxNo" name="BoxNo" placeholder="箱码" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | <!-- <div class="layui-inline zhijian"> |
| | | <label class="layui-form-label" style="width: 60px;">箱支状态</label> |
| | | <div class="layui-input-inline" style="width: 170px; margin-right: 0px;"> |
| | |
| | | </select> |
| | | </div> |
| | | </div> --> |
| | | <div class="layui-inline zhijian"> |
| | | <!-- <div class="layui-inline zhijian"> |
| | | <label class="layui-form-label" style="width: 60px;">抽检标记</label> |
| | | <div class="layui-input-inline" style="width: 170px; margin-right: 0px;"> |
| | | <select name="InspectMark" id="InspectMark" lay-filter="InspectMark" |
| | |
| | | <option value="1">是</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | <div class="layui-inline zhijian"> |
| | | <label class="layui-form-label" style="width: 60px;">质检状态</label> |
| | | <div class="layui-input-inline" style="width: 170px; margin-right: 0px;"> |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-inline zhijian"> |
| | | <!-- <div class="layui-inline zhijian"> |
| | | <label class="layui-form-label" style="width: 60px;">开始时间</label> |
| | | <div class="layui-input-inline" style="width: 170px; margin-right: 0px;"> |
| | | <input type="text" autocomplete="off" id="StartTime" class="layui-input" |
| | |
| | | <input type="text" autocomplete="off" id="EndTime" class="layui-input" |
| | | placeholder="结束时间"> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | |
| | | <div class="layui-inline sousuo"> |
| | | <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit lay-filter="LAY-app-contlist-search"> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | <div class="layui-card-body"> |
| | | <div style="position: relative;"> |
| | | <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> |
| | | <ul class="layui-tab-title" id="tab"> |
| | | <li class="layui-this">托盘明细</li> |
| | | <li >箱码明细</li> |
| | | </ul> |
| | | |
| | | <div id="center"> |
| | | </div> |
| | | |
| | | <div class="layui-tab-content"> |
| | | <div class="layui-tab-item layui-show"> |
| | | <div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 --> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | | <!-- #region 自定义表头 --> |
| | | <div class="headerSetIcon"> |
| | | <button class="layui-btn layui-btn-primary layui-btn-sm" data-type="customCols"> |
| | | <i class="layui-icon"></i> |
| | | </button> |
| | | </div> |
| | | <!-- #endregion --> |
| | | </div> |
| | | </div> |
| | | <div class="layui-tab-item"> |
| | | <div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 --> |
| | | <table id="LAY-app-content-list2" lay-filter="LAY-app-content-list2"></table> |
| | | <!-- #region 自定义表头 --> |
| | | <div class="headerSetIcon"> |
| | | <button class="layui-btn layui-btn-primary layui-btn-sm" data-type="customCols2"> |
| | | <i class="layui-icon"></i> |
| | | </button> |
| | | </div> |
| | | <!-- #endregion --> |
| | | |
| | | <!-- #region 自定义表头 --> |
| | | <script type="text/html" id="templetProductionTime"> |
| | | {{# function GetBtn(d){ |
| | | return formatDate(d.ProductionTime); |
| | | } |
| | | }} |
| | | {{ GetBtn(d) }} |
| | | </script> |
| | | |
| | | <script type="text/html" id="templetInspectTime"> |
| | | {{# function GetBtn1(d){ |
| | | return formatDate(d.InspectTime); |
| | | } |
| | | }} |
| | | {{ GetBtn1(d) }} |
| | | </script> |
| | | <!-- #endregion --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 --> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | | <!-- #region 自定义表头 --> |
| | | <div class="headerSetIcon"> |
| | | <button class="layui-btn layui-btn-primary layui-btn-sm" data-type="customCols"> |
| | | <i class="layui-icon"></i> |
| | | </button> |
| | | </div> |
| | | |
| | | <!-- #endregion --> |
| | | </div> |
| | | |
| | | <script type="text/html" id="BoxStatus"> |
| | | {{# if(d.Status=='0'){ }} |
| | | <p>未组托</p> |
| | | {{# } else if(d.Status == '1') { }} |
| | | <p>已组托</p> |
| | | {{# } else if(d.Status == '2') { }} |
| | | <p>已入库</p> |
| | | {{# } else if(d.Status == '3') { }} |
| | | <p>已出库</p> |
| | | {{# } else if(d.Status == '4') { }} |
| | | <p>已分配</p> |
| | | {{# } else if(d.Status == '5') { }} |
| | | <p>已拣货</p> |
| | | {{# } }} |
| | | |
| | | </script> |
| | | <script type="text/html" id="InspectMarkStatus"> |
| | | {{# if(d.InspectMark=='0'){ }} |
| | | <p>否</p> |
| | |
| | | {{# } else if(d.BitPalletMark == '1') { }} |
| | | <p>是</p> |
| | | {{# } }} |
| | | </script> |
| | | |
| | | <script type="text/html" id="InspectStatus1"> |
| | | {{# if(d.InspectStatus == '0') { }} |
| | | <p>待检验</p> |
| | | {{# } else if(d.InspectStatus == '1'){ }} |
| | | <p>检验合格</p> |
| | | {{# } else if(d.InspectStatus == '2'){ }} |
| | | <p>不合格</p> |
| | | {{# } else if(d.InspectStatus == '4') { }} |
| | | <p>放置期</p> |
| | | {{# } }} |
| | | </script> |
| | | <script type="text/html" id="BitPalletMarkStatus1"> |
| | | {{# if(d.BitBoxMark=='0'){ }} |
| | | <p>否</p> |
| | | {{# } else if(d.BitBoxMark == '1') { }} |
| | | <p>是</p> |
| | | {{# } }} |
| | | </script> |
| | | <script type="text/html" id="table-content-list"> |
| | | <button class="layui-btn layui-btn-normal layui-btn-xs approvalBtnupt" id="approvalBtnupt" lay-event="edit"> |
| | | <i class="layui-icon layui-icon-edit"></i>详情 |
| | | </button> |
| | | </script> |
| | | </div> |
| | | </div> |
| | |
| | | element = layui.element; |
| | | laydate = layui.laydate; |
| | | |
| | | var h1 = GetTableTabHeight(); |
| | | // var h1 = GetTkableTopHeight(); |
| | | // console.log(h1) |
| | | var h1 = GetTableHeight(); |
| | | |
| | | laydate.render({ |
| | | elem: '#StartTime', |
| | |
| | | {field: 'PalletNo', title: '托盘号', align: 'center'}, |
| | | {field: 'SkuNo', title: '物料编码', align: 'center'}, |
| | | {field: 'SkuName', title: '物料名称', align: 'center'}, |
| | | {field: 'OwnerNo',title: '货主编码',align: 'center'}, |
| | | {field: 'OwnerName',title: '货主名称',align: 'center'}, |
| | | {field: 'SupplierNo',title: '供应商编码',align: 'center'}, |
| | | {field: 'SupplierName',title: '供应商名称',align: 'center'}, |
| | | //{field: 'OwnerNo',title: '货主编码',align: 'center'}, |
| | | //{field: 'OwnerName',title: '货主名称',align: 'center'}, |
| | | //{field: 'SupplierNo',title: '供应商编码',align: 'center'}, |
| | | //{field: 'SupplierName',title: '供应商名称',align: 'center'}, |
| | | {field: 'LotNo', title: '批次号', align: 'center'}, |
| | | {field: 'LotText', title: '批次描述', align: 'center'}, |
| | | {field: 'SupplierLot', title: '供货批次', align: 'center'}, |
| | | //{field: 'SupplierLot', title: '供货批次', align: 'center'}, |
| | | {field: 'Qty', title: '数量', align: 'center'}, |
| | | {field: 'LockQty', title: '锁定数量', align: 'center',}, |
| | | {field: 'FrozenQty', title: '冻结数量', align: 'center'}, |
| | | {field: 'InspectMark', title: '抽检标记', align: 'center', templet: '#InspectMarkStatus'}, |
| | | {field: 'BitPalletMark', title: '零托标记', align: 'center', templet: '#BitPalletMarkStatus'}, |
| | | //{field: 'InspectMark', title: '抽检标记', align: 'center', templet: '#InspectMarkStatus'}, |
| | | //{field: 'BitPalletMark', title: '零托标记', align: 'center', templet: '#BitPalletMarkStatus'}, |
| | | ]]; |
| | | var TotalColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码 |
| | | //#endregion |
| | |
| | | //#endregion |
| | | } |
| | | |
| | | // 表单需要的变量 |
| | | var infoOptions2; |
| | | //#region 原始非自定义列 |
| | | // infoOptions2 = { |
| | | // elem: '#LAY-app-content-list2', |
| | | // height: 'full-206', |
| | | // id: 'LAY-app-content-list2', |
| | | // page: true, |
| | | // limit: pageCnt, |
| | | // limits: pageLimits, |
| | | // even: true, |
| | | // cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增 |
| | | // cols: |
| | | // [[ |
| | | // { |
| | | // title: '序号', type: 'numbers', fixed: 'left' |
| | | // }, |
| | | // { |
| | | // field: 'SkuNo', title: '物料编码', align: 'center', |
| | | // }, |
| | | // { |
| | | // field: 'SkuName', title: '物料名称', align: 'center', |
| | | // }, |
| | | // { |
| | | // field: 'PalletNo', title: '托盘号', align: 'center', width: 110, |
| | | // }, |
| | | // { |
| | | // field: 'BoxNo', title: '箱码', align: 'center', width: 100, |
| | | // }, |
| | | // { |
| | | // field: 'Status', title: '箱支状态', align: 'center', templet: '#BoxStatus', |
| | | // }, |
| | | // { |
| | | // field: 'LotNo', title: '批次号', align: 'center', |
| | | // }, |
| | | // { |
| | | // field: 'LotText', title: '批次描述', align: 'center', |
| | | // }, |
| | | // { |
| | | // field: 'Qty', title: '数量', width: 90, align: 'center', |
| | | // }, |
| | | // { |
| | | // field: 'FullQty', title: '整箱数量', width: 100, align: 'center', |
| | | // }, |
| | | // { |
| | | // field: 'ProductionTime', title: '生产日期', align: 'center', |
| | | // templet: function(d) { |
| | | // return formatDate(d.ProductionTime); |
| | | // }, |
| | | // }, |
| | | // { |
| | | // field: 'InspectMark', title: '抽检标记', align: 'center', templet: '#InspectMarkStatus', |
| | | // }, |
| | | // { |
| | | // field: 'BitBoxMark', templet: '#BitPalletMarkStatus1', title: '零箱标记', align: 'center', |
| | | // }, |
| | | // { |
| | | // field: 'InspectStatus', templet: '#InspectStatus1', title: '质检状态', align: 'center', |
| | | // }, |
| | | // { |
| | | // field: 'InspectTime', title: '复检时间', align: 'center', |
| | | // templet: function(d) { |
| | | // return formatDate(d.InspectTime); |
| | | // }, |
| | | // }, |
| | | // { |
| | | // title: '操作', fixed: 'right', align: 'center', toolbar: '#table-content-list' |
| | | // } |
| | | // ]] |
| | | // }; |
| | | //#endregion |
| | | |
| | | //获取明细信息 |
| | | //#region 自定义表头 |
| | | var DetailColsArr = [[ |
| | | {field: '',title: '序号',type:'numbers',fixed: 'left', "disabled": true}, |
| | | {field: 'SkuNo', title: '物料编码', align: 'center'}, |
| | | {field: 'SkuName', title: '物料名称', align: 'center'}, |
| | | {field: 'PalletNo', title: '托盘号', align: 'center', width: 110}, |
| | | {field: 'BoxNo', title: '箱码', align: 'center', width: 100}, |
| | | {field: 'Status', title: '箱支状态', align: 'center', templet: '#BoxStatus'}, |
| | | {field: 'LotNo', title: '批次号', align: 'center'}, |
| | | {field: 'LotText', title: '批次描述', align: 'center'}, |
| | | {field: 'Qty', title: '数量', width: 90, align: 'center'}, |
| | | {field: 'FullQty', title: '整箱数量', width: 100, align: 'center'}, |
| | | {field: 'ProductionTime', title: '生产日期', align: 'center',templet: '#templetProductionTime'}, |
| | | {field: 'InspectMark', title: '抽检标记', align: 'center', templet: '#InspectMarkStatus'}, |
| | | {field: 'BitBoxMark', templet: '#BitPalletMarkStatus1', title: '零箱标记', align: 'center'}, |
| | | {field: 'InspectStatus', templet: '#InspectStatus1', title: '质检状态', align: 'center'}, |
| | | {field: 'InspectTime', title: '复检时间', align: 'center',templet: '#templetInspectTime'}, |
| | | {field: 'caozuo',title: '操作', fixed: 'right', align: 'center', toolbar: '#table-content-list', "disabled": true} |
| | | ]]; |
| | | var DetailColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(DetailColsArr)))//将表头数据进行url编码 |
| | | //#endregion |
| | | function refreshTable2(Id,SkuNo,SkuName,LotNo,PalletNo,BoxNo,Status,InspectMark,BitBoxMark,InspectStatus,StartTime,EndTime) { |
| | | //#region 自定义表头 |
| | | var colsJson2 |
| | | var param1={ |
| | | Href:'Statistical/GetBoxInfo' |
| | | }; |
| | | sendData(IP + "/Sys/GetTableColsByUserId", param1, 'post', function(res) { |
| | | if (res.code == 0){ |
| | | if(res.data=='' || res.data==undefined || res.data==null){ |
| | | colsJson2=DetailColsArr |
| | | }else{ |
| | | colsJson2= eval(res.data); |
| | | } |
| | | }else{ |
| | | colsJson2=DetailColsArr |
| | | } |
| | | infoOptions2 = { |
| | | elem: '#LAY-app-content-list2', |
| | | height: h1, |
| | | id: 'LAY-app-content-list2', |
| | | page: true, |
| | | limit: pageCnt, |
| | | limits: pageLimits, |
| | | even: true, |
| | | cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增 |
| | | done: function(){ |
| | | //自定义列宽 |
| | | SetTableColW('LAY-app-content-list2','Statistical/GetBoxInfo',DetailColsSysArr); |
| | | }, |
| | | cols:colsJson2 |
| | | }; |
| | | |
| | | var param = { |
| | | Id:Id, |
| | | SkuNo:SkuNo, |
| | | SkuName:SkuName, |
| | | LotNo:LotNo, |
| | | PalletNo:PalletNo, |
| | | BoxNo:BoxNo, |
| | | Status:Status, |
| | | InspectMark:InspectMark, |
| | | BitBoxMark:BitBoxMark, |
| | | InspectStatu:InspectStatus, |
| | | StartTime:StartTime, |
| | | EndTime:EndTime, |
| | | } |
| | | sendData(IP + "/Statistical/GetBoxInfo", param, 'get', function(res) { |
| | | if (res.code == 0) //成功 |
| | | { |
| | | var list = res.data; |
| | | $.extend(infoOptions2, { |
| | | data: list |
| | | }); |
| | | infoOptions2.page = { |
| | | curr: 1 |
| | | } |
| | | tableIns2 = table.render(infoOptions2); |
| | | } |
| | | else //不成功 |
| | | { |
| | | layer.msg('获取明细列表信息失败!', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function() {}); |
| | | } |
| | | }) |
| | | }); |
| | | //#endregion |
| | | } |
| | | |
| | | //var url = IP + "/Statistical/GetInventoryList1"; |
| | | |
| | | |
| | | |
| | | //接受全局变量 |
| | | let quanid = ''; |
| | | //监听搜索 |
| | | form.on('submit(LAY-app-contlist-search)', function(data) { |
| | | var SkuNo = $("#SkuNo").val(); |
| | |
| | | var StartTime = $("#StartTime").val(); |
| | | var EndTime = $("#EndTime").val(); |
| | | |
| | | if(yemianid == 0){ |
| | | console.log("总单"); |
| | | refreshTable(SkuNo,SkuName,PalletNo,LotNo,BoxNo,Status,InspectMark,BitPalletMark,BitBoxMark,InspectStatus,OwnerNo,OwnerName,StartTime,EndTime); |
| | | }else if(yemianid == 1){ |
| | | quanid = ''; |
| | | console.log("明细"); |
| | | refreshTable2(quanid,SkuNo,SkuName,LotNo,PalletNo,BoxNo,Status,InspectMark,BitBoxMark,InspectStatus,StartTime,EndTime); |
| | | } |
| | | refreshTable(SkuNo,SkuName,PalletNo,LotNo,BoxNo,Status,InspectMark,BitPalletMark,BitBoxMark,InspectStatus,OwnerNo,OwnerName,StartTime,EndTime); |
| | | |
| | | }); |
| | | //触发行双击事件 |
| | | table.on('rowDouble(LAY-app-content-list)', function(obj) { |
| | | $(".layui-tab-title>li").attr("class", ""); |
| | | $('.layui-tab-title>li').eq(1).attr('class', 'layui-this'); |
| | | $('.layui-tab-content .layui-tab-item').attr('class', 'layui-tab-item') |
| | | $('.layui-tab-content .layui-tab-item').eq(1).attr('class', 'layui-tab-item layui-show') |
| | | console.log(obj.data.Id); |
| | | quanid = obj.data.Id; |
| | | refreshTable2(obj.data.Id); |
| | | yemianid=1; |
| | | }); |
| | | |
| | | |
| | | //监听Tab切换,以改变地址hash值 |
| | | element.on('tab(docDemoTabBrief)', function(data){ |
| | |
| | | var StartTime = $("#StartTime").val(); |
| | | var EndTime = $("#EndTime").val(); |
| | | |
| | | console.log(data.index); |
| | | yemianid = data.index |
| | | if(yemianid == 0){ |
| | | console.log("总单"); |
| | | refreshTable(SkuNo,SkuName,PalletNo,LotNo,BoxNo,Status,InspectMark,BitPalletMark,BitBoxMark,InspectStatus,OwnerNo,OwnerName,StartTime,EndTime); |
| | | }else if(yemianid == 1){ |
| | | console.log("明细"); |
| | | refreshTable2(quanid,SkuNo,SkuName,LotNo,PalletNo,BoxNo,Status,InspectMark,BitBoxMark,InspectStatus,StartTime,EndTime); |
| | | } |
| | | refreshTable(SkuNo,SkuName,PalletNo,LotNo,BoxNo,Status,InspectMark,BitPalletMark,BitBoxMark,InspectStatus,OwnerNo,OwnerName,StartTime,EndTime); |
| | | }); |
| | | var doing = true; |
| | | // ------------------------------------详情--------------------------------------------------- |
| | | table.on('tool(LAY-app-content-list2)', function(obj) { |
| | | console.log(obj) |
| | | var data = obj.data; |
| | | //详情 |
| | | if (obj.event === 'edit') { |
| | | BoxNo = data.BoxNo; |
| | | console.log(data) |
| | | layer.open({ |
| | | type: 2, |
| | | title: '箱支详情信息', |
| | | content: 'BoxSupportInfor.html?BoxNo=' + BoxNo, |
| | | maxmin: true, |
| | | area: ['80%', '85%'], |
| | | btn: ['关闭'], |
| | | yes: function(index, layero) { |
| | | var iframeWindow = window['layui-layer-iframe' + index], |
| | | submitID = 'layuiadmin-app-form-edit', |
| | | submit = layero.find('iframe').contents().find('#' + submitID); |
| | | if(doing) |
| | | { |
| | | doing = false; |
| | | |
| | | layer.close(index); //关闭弹层 |
| | | refreshTable(); |
| | | doing = true; |
| | | |
| | | |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | form.on('submit(daochu)', function () { |
| | | layer.confirm('确定导出当前数据吗?', function(index) { |
| | | if(yemianid == 0){ |
| | | console.log("托盘明细"); |
| | | var param = { |
| | | SkuNo : $("#SkuNo").val(), |
| | | SkuName : $("#SkuName").val(), |
| | | LotNo : $("#LotNo").val(), |
| | | PalletNo : $("#PalletNo").val(), |
| | | |
| | | BoxNo : $("#BoxNo").val(), |
| | | Status : $("#Status").val(), |
| | | InspectMark : $("#InspectMark").val(), |
| | | BitPalletMark : $("#BitPalletMark").val(), |
| | | BitBoxMark : $("#BitBoxMark").val(), |
| | | InspectStatus : $("#InspectStatus").val(), |
| | | |
| | | StartTime: $("#StartTime").val(), |
| | | EndTime: $("#EndTime").val(), |
| | | }; |
| | | |
| | | sendData(IP + "/Statistical/GetBindListDaoChu", param, 'get', function (res) { |
| | | console.log(res); |
| | | if (res.code == 0) { //成功 |
| | | var list = res.data; |
| | | table.exportFile(tableIns.config.id, list,'xls',"托盘明细信息"+getNowTime(),); //data 为该实例中的任意数量的数据 |
| | | layer.msg('导出成功!', { |
| | | icon: 1, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | |
| | | }); |
| | | |
| | | } else { //不成功 |
| | | layer.msg('获取信息失败!', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { }); |
| | | } |
| | | }); |
| | | }else if(yemianid == 1){ |
| | | console.log("箱码明细"); |
| | | var param = { |
| | | Id:quanid, |
| | | SkuNo: $("#SkuNo").val(), |
| | | SkuName: $("#SkuName").val(), |
| | | LotNo:$("#LotNo").val(), |
| | | LocatNo:$("#LocatNo").val(), |
| | | PalletNo:$("#PalletNo").val(), |
| | | Status:$("#Status").val(), |
| | | InspectStatus:$("#InspectStatus").val(), |
| | | IsSamolingTray:$("#IsSamolingTray").val(), |
| | | StartTime: $("#StartTime").val(), |
| | | EndTime: $("#EndTime").val(), |
| | | }; |
| | | sendData(IP + "/Statistical/GetBoxInfoDaoChu", param, 'get', function (res) { |
| | | console.log(res); |
| | | if (res.code == 0) { //成功 |
| | | var list = res.data; |
| | | table.exportFile(tableIns2.config.id, list,'xls',"箱码明细信息"+getNowTime(),); //data 为该实例中的任意数量的数据 |
| | | layer.msg('导出成功!', { |
| | | icon: 1, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | |
| | | }); |
| | | |
| | | } else { //不成功 |
| | | layer.msg('获取信息失败!', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { }); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | |
| | | }); |
| | | |
| | | //#region 自定义表头 |
| | | //自定义表头 |
| | |
| | | area: ['970px', '650px'] |
| | | }); |
| | | }, |
| | | customCols2: function(){ |
| | | layer.open({ |
| | | type: 2, |
| | | title: '自定义列', |
| | | content: '../SystemSettings/HeaderSetting.html?Href=Statistical/GetBoxInfo&ColsSysArr='+DetailColsSysArr, |
| | | maxmin: false, |
| | | resize: false, |
| | | area: ['970px', '650px'] |
| | | }); |
| | | } |
| | | |
| | | }; |
| | | $('.layui-btn').on('click', function() { |
| | | var type = $(this).data('type'); |
| | |
| | | /// </summary> |
| | | public string SkuNo { get; set; } |
| | | /// <summary> |
| | | /// 物料名称 |
| | | /// </summary> |
| | | public string SkuName { get; set; } |
| | | /// <summary> |
| | | /// 批次号 |
| | | /// </summary> |
| | | public string LotNo { get; set; } |
| | |
| | | using Model.InterFaceModel; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using WMS.BLL.LogServer; |
| | | using WMS.DAL; |
| | | using WMS.Entity.BllAsnEntity; |
| | | using WMS.Entity.BllQualityEntity; |
| | | using WMS.Entity.BllSoEntity; |
| | | using WMS.Entity.Context; |
| | | using WMS.Entity.DataEntity; |
| | | using WMS.Entity.LogEntity; |
| | |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 任务完成 |
| | | /// </summary> |
| | |
| | | } |
| | | switch (taskInfo.OrderType) |
| | | { |
| | | //入库完成 |
| | | #region 入库完成 |
| | | case "0": |
| | | //入库单明细信息 |
| | | var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.Id == taskInfo.ASNDetailNo); |
| | | var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.Id == taskInfo.NoticeDetailNo); |
| | | if (noticeDetail == null) |
| | | { |
| | | resultModel.Message = "该任务对应的入库单明细不存在!"; |
| | |
| | | return resultModel; |
| | | } |
| | | //库存明细 |
| | | var sd1 = new DataStockDetail() |
| | | var sd1 = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == taskInfo.PalletNo); |
| | | if (sd1 == null) |
| | | { |
| | | LotNo = noticeDetail.LotNo, |
| | | LotText = noticeDetail.LotText, |
| | | SupplierLot = noticeDetail.SupplierLot, |
| | | SkuNo = noticeDetail.SkuNo, |
| | | SkuName = noticeDetail.SkuName, |
| | | Standard = noticeDetail.Standard, |
| | | Qty = 1, |
| | | LockQty = 0, |
| | | FrozenQty = 0, |
| | | InspectQty = 0, |
| | | ASNNo = noticeDetail.ASNNo, |
| | | ASNDetailNo = noticeDetail.Id, |
| | | WareHouseNo = locatInfo.WareHouseNo,//所属仓库 |
| | | RoadwayNo = locatInfo.RoadwayNo,//所属巷道 |
| | | AreaNo = locatInfo.AreaNo,//所属区域 |
| | | LocatNo = locatInfo.LocatNo,//储位地址 |
| | | PalletNo = taskInfo.PalletNo, |
| | | PalletNo2 = "", |
| | | PalletNo3 = "", |
| | | PalletTags = "0", |
| | | CompleteTime = comTime, |
| | | ProductionTime = null, |
| | | ExpirationTime = null, |
| | | Status = "0", |
| | | InspectMark = "0", |
| | | InspectStatus = "0",//待检验 |
| | | BitPalletMark = "0", |
| | | PackagNo = "", |
| | | IsBale = "0", |
| | | IsBelt = "0", |
| | | sd1 = new DataStockDetail() |
| | | { |
| | | LotNo = noticeDetail.LotNo, |
| | | LotText = noticeDetail.LotText, |
| | | SupplierLot = noticeDetail.SupplierLot, |
| | | SkuNo = noticeDetail.SkuNo, |
| | | SkuName = noticeDetail.SkuName, |
| | | Standard = noticeDetail.Standard, |
| | | Qty = 1, |
| | | LockQty = 0, |
| | | FrozenQty = 0, |
| | | InspectQty = 0, |
| | | ASNNo = noticeDetail.ASNNo, |
| | | ASNDetailNo = noticeDetail.Id, |
| | | WareHouseNo = locatInfo.WareHouseNo,//所属仓库 |
| | | RoadwayNo = locatInfo.RoadwayNo,//所属巷道 |
| | | AreaNo = locatInfo.AreaNo,//所属区域 |
| | | LocatNo = locatInfo.LocatNo,//储位地址 |
| | | PalletNo = taskInfo.PalletNo, |
| | | PalletNo2 = "", |
| | | PalletNo3 = "", |
| | | PalletTags = "0", |
| | | CompleteTime = comTime, |
| | | ProductionTime = null, |
| | | ExpirationTime = null, |
| | | Status = "0", |
| | | InspectMark = "0", |
| | | InspectStatus = "0",//待检验 |
| | | BitPalletMark = "0", |
| | | PackagNo = "", |
| | | IsBale = "0", |
| | | IsBelt = "0", |
| | | |
| | | IsDel = "0", |
| | | CreateUser = 0, |
| | | CreateTime = comTime |
| | | }; |
| | | //插入库存明细 |
| | | Db.Insertable(sd1).ExecuteCommand(); |
| | | PalletStatus = "1", |
| | | |
| | | IsDel = "0", |
| | | CreateUser = 0, |
| | | CreateTime = comTime |
| | | }; |
| | | //插入库存明细 |
| | | Db.Insertable(sd1).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | sd1.Qty = 1; |
| | | sd1.LockQty = 0; |
| | | sd1.FrozenQty = 0; |
| | | sd1.InspectQty = 0; |
| | | sd1.ASNNo = noticeDetail.ASNNo; |
| | | sd1.ASNDetailNo = noticeDetail.Id; |
| | | sd1.WareHouseNo = locatInfo.WareHouseNo;//所属仓库 |
| | | sd1.RoadwayNo = locatInfo.RoadwayNo;//所属巷道 |
| | | sd1.AreaNo = locatInfo.AreaNo;//所属区域 |
| | | sd1.LocatNo = locatInfo.LocatNo;//储位地址 |
| | | sd1.CompleteTime = comTime; |
| | | sd1.InspectStatus = "0";//待检验 |
| | | sd1.PalletStatus = "1";//预混 |
| | | |
| | | //修改库存明细 |
| | | Db.Updateable(sd1).ExecuteCommand(); |
| | | } |
| | | |
| | | noticeDetail.CompleteQty += 1;//完成数量 |
| | | noticeDetail.Status = "1";//0:等待执行 1:正在执行 2:执行完成 |
| | |
| | | locatInfo.Status = "1";//有物品 |
| | | //更新储位状态 |
| | | Db.Updateable(locatInfo).ExecuteCommand(); |
| | | |
| | | #region 质检请验 |
| | | var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == noticeDetail.SkuNo && m.LotNo == noticeDetail.LotNo && m.SupplierLot == noticeDetail.SupplierLot); |
| | | if (qualityRequest == null) |
| | | { |
| | | //质检请验单信息 |
| | | string qcNo = new Common().GetMaxNo("QC"); |
| | | qualityRequest = new BllQualityInspectionRequest(); |
| | | qualityRequest.QcNo = qcNo; |
| | | qualityRequest.Status = "0"; |
| | | qualityRequest.SkuNo = noticeDetail.SkuNo; |
| | | qualityRequest.SkuName = noticeDetail.SkuName; |
| | | qualityRequest.LotNo = noticeDetail.LotNo; |
| | | qualityRequest.SupplierLot = noticeDetail.SupplierLot; |
| | | qualityRequest.Qty = noticeDetail.Qty; |
| | | qualityRequest.SamplingQty = 0; |
| | | qualityRequest.ASNNo = noticeDetail.ASNNo; |
| | | qualityRequest.CreateUser = 0; |
| | | qualityRequest.CreateTime = comTime; |
| | | |
| | | // 记录任务日志 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask() |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "Limes", |
| | | IsSuccess = 0,//是否下发成功 0失败 1成功 |
| | | StartLocat = "",//起始位置 |
| | | PalletNo = "",//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "5",//0 入库单 1 出库单 2 盘点单 3 移库单 4 取样出库单 5 其他 |
| | | EndLocat = "",//目标位置 |
| | | Type = "3",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Msg = "请验任务" |
| | | }; |
| | | // 插入任务日志 |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | // 调用Limes接口发起请验 |
| | | var sendModel = new SendLimesModel() |
| | | { |
| | | QcNo = qualityRequest.QcNo, |
| | | SkuNo = qualityRequest.SkuNo, |
| | | Qty = qualityRequest.Qty.ToString(), |
| | | LotNo = qualityRequest.LotNo, |
| | | SupplierLot = qualityRequest.SupplierLot, |
| | | RequestUser = "", // 请验人 |
| | | }; |
| | | var jsonData = JsonConvert.SerializeObject(sendModel); |
| | | string response = ""; |
| | | try |
| | | { |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | //response = HttpHelper.DoPost(url, jsonData, "上传Limes系统发起请验", "Limes"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | ////解析返回数据 |
| | | //var limesModel = JsonConvert.DeserializeObject<LimesModel>(response); |
| | | List<string> list1 = new List<string>(); |
| | | list1.Add(taskNo); |
| | | //if (limesModel.Success == 0) |
| | | //{ |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list1, time1, time2); |
| | | |
| | | // 更新请验单信息 |
| | | qualityRequest.Status = "1"; |
| | | qualityRequest.SamplingQty = 10;//decimal.Parse(limesModel.SamplingQty); |
| | | qualityRequest.RequestUser = 0; |
| | | qualityRequest.RequestTime = DateTime.Now; |
| | | qualityRequest.UpdateTime = DateTime.Now; |
| | | qualityRequest.UpdateUser = 0; |
| | | //添加质检请验单 |
| | | Db.Insertable(qualityRequest).ExecuteCommand(); |
| | | //} |
| | | //if (limesModel.Success == -1) |
| | | //{ |
| | | // new TaskServer().EditTaskIssueNo(list1, time1, time2,limesModel.Message); |
| | | // throw new Exception(limesModel.Message); |
| | | //} |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | break; |
| | | #endregion |
| | | |
| | | #region 出库完成 |
| | | case "1": |
| | | //出库单明细信息 |
| | | var exNoticeDetail = Db.Queryable<BllExportNoticeDetail>().First(w => w.Id == taskInfo.NoticeDetailNo); |
| | | if (exNoticeDetail == null) |
| | | { |
| | | resultModel.Message = "该任务对应的出库单明细不存在!"; |
| | | return resultModel; |
| | | } |
| | | //出库单信息 |
| | | var exNotice = Db.Queryable<BllExportNotice>().First(w => w.SONo == exNoticeDetail.SONo); |
| | | if (exNotice == null) |
| | | { |
| | | resultModel.Message = "该任务对应的出库单不存在!"; |
| | | return resultModel; |
| | | } |
| | | if (exNotice.Status == "4" || exNotice.Status == "5") |
| | | { |
| | | resultModel.Message = "该任务对应的出库单已执行完成!"; |
| | | return resultModel; |
| | | } |
| | | //起始储位信息 |
| | | var startLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.StartLocat && w.IsDel == "0"); |
| | | if (startLocatInfo == null) |
| | | { |
| | | resultModel.Message = "起始储位信息不存在!"; |
| | | return resultModel; |
| | | } |
| | | //目标储位信息 |
| | | var endLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0"); |
| | | if (endLocatInfo == null) |
| | | { |
| | | resultModel.Message = "目标储位信息不存在!"; |
| | | return resultModel; |
| | | } |
| | | //库存明细 |
| | | var sd2 = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == taskInfo.PalletNo); |
| | | if (sd2 == null) |
| | | { |
| | | resultModel.Message = "库存信息不存在!"; |
| | | return resultModel; |
| | | } |
| | | //修改出库单明细拣货数量 |
| | | exNoticeDetail.CompleteQty += sd2.Qty; |
| | | Db.Updateable(exNoticeDetail).ExecuteCommand(); |
| | | |
| | | exNotice.UpdateUser = 0; |
| | | exNotice.UpdateTime = comTime; |
| | | if (exNotice.Status == "0" || exNotice.Status == "1" || exNotice.Status == "2") |
| | | { |
| | | exNotice.Status = "3";//更改为正在执行 |
| | | } |
| | | var num = Db.Queryable<BllExportNoticeDetail>().Count(m => m.IsDel == "0" && m.SONo == exNoticeDetail.SONo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | exNotice.Status = "4"; //更改为执行完成 |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(exNotice).ExecuteCommand(); |
| | | |
| | | sd2.Qty = 0; |
| | | sd2.LockQty = 0; |
| | | sd2.FrozenQty = 0; |
| | | sd2.InspectQty = 0; |
| | | sd2.ASNNo = ""; |
| | | sd2.ASNDetailNo = null; |
| | | sd2.WareHouseNo = endLocatInfo.WareHouseNo;//所属仓库 |
| | | sd2.RoadwayNo = endLocatInfo.RoadwayNo;//所属巷道 |
| | | sd2.AreaNo = endLocatInfo.AreaNo;//所属区域 |
| | | sd2.LocatNo = endLocatInfo.LocatNo;//储位地址 |
| | | sd2.CompleteTime = comTime; |
| | | //修改库存明细 |
| | | Db.Updateable(sd2).ExecuteCommand(); |
| | | |
| | | startLocatInfo.Status = "0";//空储位 |
| | | //修改起始储位状态 |
| | | Db.Updateable(startLocatInfo).ExecuteCommand(); |
| | | |
| | | endLocatInfo.Status = "1";//空储位 |
| | | //修改目标储位状态 |
| | | Db.Updateable(endLocatInfo).ExecuteCommand(); |
| | | |
| | | break; |
| | | #endregion |
| | | } |
| | | taskInfo.Status = "2";//执行完成 |
| | | //修改任务状态 |
| | |
| | | throw ex; |
| | | } |
| | | } |
| | | /*public SoResInfo ErpAddExportNotice(SoInfo model) |
| | | |
| | | /// <summary> |
| | | /// 下发出库单 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public SoResInfo ErpAddExportNotice(SoInfo model) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(model.SoType)) |
| | | { |
| | | throw new Exception("单据类型不可为空!"); |
| | | } |
| | | if (string.IsNullOrEmpty(model.OrderCode)) |
| | | { |
| | | throw new Exception("系统单号不可为空!"); |
| | | throw new Exception("上游系统单号不可为空!"); |
| | | } |
| | | if (model.SoDetails.Count <= 0) |
| | | { |
| | |
| | | //返回信息 |
| | | SoResInfo result = new SoResInfo(); |
| | | |
| | | var skuNos = model.SoDetails.Select(a => a.SkuNo).Distinct().ToList(); |
| | | //获取库存明细 |
| | | var stockDetailList = Db.Queryable<DataStockDetail>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0 && s.InspectStatus == "1").ToList(); |
| | | //获取库存 |
| | | var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList(); |
| | | |
| | | string CustomerName = string.Empty; |
| | | if (!string.IsNullOrEmpty(model.Customer)) |
| | | { |
| | | //客户信息 |
| | | var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer); |
| | | if (customer == null) |
| | | { |
| | | throw new Exception("客户信息不存在!"); |
| | | } |
| | | CustomerName = customer.CustomerName; |
| | | } |
| | | //承运商信息 |
| | | var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo); |
| | | int? logisticsId = null; |
| | | if (logistics != null) |
| | | { |
| | | logisticsId = logistics.Id; |
| | | } |
| | | var billNo = ""; |
| | | var bl = true; |
| | | do |
| | |
| | | List<SoDetailInfo> soDetailList = new List<SoDetailInfo>(); |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | try |
| | | |
| | | var list = new List<BllExportNoticeDetail>(); |
| | | //添加出库单 |
| | | foreach (var d in model.SoDetails) |
| | | { |
| | | var list = new List<BllExportNoticeDetail>(); |
| | | //添加出库单 |
| | | foreach (var d in model.SoDetails) |
| | | if (d.Qty < 1) |
| | | { |
| | | if (d.Qty < 1) |
| | | { |
| | | throw new Exception("出库数量必须大于0"); |
| | | } |
| | | var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo); |
| | | if (sku == null) |
| | | { |
| | | throw new Exception($"物料信息中未查询到出库物料信息:{d.SkuNo}"); |
| | | } |
| | | //0:成品出库、1:领料出库、3:物料取样出库、4:不合格品出库、6:代储出库、7:其他出库、 ///2:抽检出库、5:中间品出库、8:寄存出库 |
| | | if (model.SoType == "0" || model.SoType == "3" || model.SoType == "4" || model.SoType == "7") |
| | | { |
| | | if (string.IsNullOrWhiteSpace(d.LotNo)) |
| | | { |
| | | throw new Exception("批次不可为空!"); |
| | | } |
| | | } |
| | | //库存明细 |
| | | List<DataStockDetail> stockDetails; |
| | | //指定批次 |
| | | if (!string.IsNullOrWhiteSpace(d.LotNo)) |
| | | { |
| | | stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList(); |
| | | if (stockDetails.Count < 1) |
| | | { |
| | | throw new Exception($"库存中未查询到出库物料信息:{d.SkuNo}"); |
| | | } |
| | | //判断数量 |
| | | var qty = stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty); |
| | | if (d.Qty > qty) |
| | | { |
| | | throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足"); |
| | | } |
| | | //库存信息 |
| | | var stockInfo = stockList.First(w => w.SkuNo == d.SkuNo && w.LotNo == d.LotNo); |
| | | if (stockInfo == null) |
| | | { |
| | | throw new Exception($"总库存中未查询到出库物料信息:{d.SkuNo}"); |
| | | } |
| | | //判断总库存数量 |
| | | if (d.Qty > stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty) |
| | | { |
| | | throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足"); |
| | | } |
| | | //添加出库单明细 |
| | | var noticeDetail = new BllExportNoticeDetail() |
| | | { |
| | | SONo = billNo, |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | | LotNo = d.LotNo, |
| | | LotText = stockInfo.LotText, |
| | | Qty = d.Qty, |
| | | AllotQty = 0, |
| | | FactQty = 0, |
| | | CompleteQty = 0, |
| | | PackagNo = sku.PackagNo, |
| | | Price = sku.Price, |
| | | Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty, |
| | | IsBale = "", |
| | | IsBelt = "", |
| | | SupplierLot = stockInfo.SupplierLot, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1", |
| | | |
| | | OrderDetailCode = d.OrderDetailCode, |
| | | |
| | | CreateUser = 0, |
| | | }; |
| | | list.Add(noticeDetail); |
| | | //更新库存锁定数量 |
| | | stockInfo.LockQty += d.Qty; |
| | | var i = Db.Updateable(stockInfo).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); |
| | | |
| | | SoDetailInfo soDetail = new SoDetailInfo(); |
| | | soDetail.OrderDetailCode = d.OrderDetailCode; |
| | | soDetail.LockQty = d.Qty; |
| | | soDetail.LotNo = d.LotNo; |
| | | |
| | | soDetailList.Add(soDetail); |
| | | } |
| | | else//未指定批次 |
| | | { |
| | | Dictionary<int, decimal> dic = new Dictionary<int, decimal>(); |
| | | decimal q1 = 0; |
| | | //首先查询当前这种物料批次号为空的 |
| | | stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); |
| | | if (stockDetails.Count > 0) |
| | | { |
| | | q1 = (decimal)stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty); |
| | | //库存信息 |
| | | var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(w.LotNo)); |
| | | if (stockInfo != null) |
| | | { |
| | | var q2 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty; |
| | | if (q2 < q1) |
| | | { |
| | | q1 = q2; |
| | | } |
| | | if (d.Qty > q1) |
| | | { |
| | | dic.Add(stockInfo.Id, q1); |
| | | } |
| | | else |
| | | { |
| | | dic.Add(stockInfo.Id, d.Qty); |
| | | } |
| | | } |
| | | } |
| | | //如果批次号为空的数量不够,根据批次先进先出原则查找其它批次的 |
| | | if (d.Qty > q1) |
| | | { |
| | | stockDetails = stockDetailList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList(); |
| | | foreach (var demo in stockDetails) |
| | | { |
| | | if (q1 >= d.Qty) |
| | | { |
| | | break; |
| | | } |
| | | var q2 = demo.Qty - demo.FrozenQty - demo.LockQty; |
| | | //库存信息 |
| | | var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && w.LotNo == demo.LotNo); |
| | | if (stockInfo == null) |
| | | { |
| | | continue; |
| | | } |
| | | decimal q4 = 0; |
| | | if (dic.ContainsKey(stockInfo.Id)) |
| | | { |
| | | q4 = dic[stockInfo.Id]; |
| | | } |
| | | var q3 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty - q4; |
| | | if (q3 < q2) |
| | | { |
| | | q2 = q3; |
| | | } |
| | | if (q2 > d.Qty - q1) |
| | | { |
| | | if (!dic.ContainsKey(stockInfo.Id)) |
| | | { |
| | | dic.Add(stockInfo.Id, d.Qty - q1); |
| | | } |
| | | else |
| | | { |
| | | //更新值 |
| | | dic[stockInfo.Id] += d.Qty - q1; |
| | | } |
| | | q1 += d.Qty - q1; |
| | | } |
| | | else |
| | | { |
| | | if (!dic.ContainsKey(stockInfo.Id)) |
| | | { |
| | | dic.Add(stockInfo.Id, (decimal)q2); |
| | | } |
| | | else |
| | | { |
| | | //更新值 |
| | | dic[stockInfo.Id] = dic[stockInfo.Id] + (decimal)q2; |
| | | } |
| | | q1 += (decimal)q2; |
| | | } |
| | | } |
| | | } |
| | | if (d.Qty > q1) |
| | | { |
| | | throw new Exception($"总库存中出库物料信息:{d.SkuNo} 库存数量不足"); |
| | | } |
| | | foreach (var s in dic) |
| | | { |
| | | var st = stockList.First(a => a.Id == s.Key); |
| | | var item = new BllExportNoticeDetail() |
| | | { |
| | | SONo = billNo, |
| | | OrderDetailCode = d.OrderDetailCode, |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | | LotNo = st.LotNo, |
| | | LotText = st.LotText, |
| | | Qty = s.Value, |
| | | AllotQty = 0, |
| | | FactQty = 0, |
| | | CompleteQty = 0, |
| | | PackagNo = sku.PackagNo, |
| | | Price = sku.Price, |
| | | Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty, |
| | | IsBale = "", |
| | | IsBelt = "", |
| | | SupplierLot = st.SupplierLot, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1", |
| | | |
| | | CreateUser = 0, |
| | | }; |
| | | list.Add(item); |
| | | |
| | | st.LockQty += s.Value;//锁定数量 |
| | | var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); |
| | | |
| | | SoDetailInfo soDetail = new SoDetailInfo(); |
| | | soDetail.OrderDetailCode = d.OrderDetailCode; |
| | | soDetail.LockQty = s.Value; |
| | | soDetail.LotNo = st.LotNo; |
| | | |
| | | soDetailList.Add(soDetail); |
| | | } |
| | | } |
| | | throw new Exception("出库数量必须大于0"); |
| | | } |
| | | var notice = new BllExportNotice() |
| | | if (string.IsNullOrWhiteSpace(d.LotNo)) |
| | | { |
| | | throw new Exception("批次不可为空!"); |
| | | } |
| | | //库存明细 |
| | | List<DataStockDetail> stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).OrderByDescending(o => o.CompleteTime).ToList(); |
| | | if (stockDetails.Count < 1) |
| | | { |
| | | throw new Exception($"库存中未查询到出库物料信息:{d.SkuNo}"); |
| | | } |
| | | //判断数量 |
| | | var qty = stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty); |
| | | if (d.Qty > qty) |
| | | { |
| | | throw new Exception($"库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足"); |
| | | } |
| | | //添加出库单明细 |
| | | var noticeDetail = new BllExportNoticeDetail() |
| | | { |
| | | SONo = billNo, |
| | | OrderCode = model.OrderCode, |
| | | Type = model.SoType, |
| | | Status = "0", |
| | | Origin = "WMS", |
| | | CustomerNo = model.Customer, |
| | | CustomerName = CustomerName, |
| | | LogisticsId = logisticsId, |
| | | SkuNo = d.SkuNo, |
| | | SkuName = d.SkuName, |
| | | Standard = "", |
| | | LotNo = d.LotNo, |
| | | LotText = "", |
| | | Qty = d.Qty, |
| | | AllotQty = 0, |
| | | FactQty = 0, |
| | | CompleteQty = 0, |
| | | PackagNo = "", |
| | | Price = 0, |
| | | Money = 0, |
| | | IsBale = "", |
| | | IsBelt = "", |
| | | SupplierLot = "", |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsDespatch = "0", |
| | | IsIssueLotNo = "1", |
| | | |
| | | OrderDetailCode = d.OrderDetailCode, |
| | | |
| | | CreateUser = 0, |
| | | }; |
| | | |
| | | var n = Db.Insertable<BllExportNotice>(notice).ExecuteCommand(); |
| | | var m = Db.Insertable<BllExportNoticeDetail>(list).ExecuteCommand(); |
| | | |
| | | if (n <= 0 || m <= 0) |
| | | list.Add(noticeDetail); |
| | | //锁定库存数量 |
| | | decimal lockQty = 0; |
| | | foreach (var item in stockDetails) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception("操作失败"); |
| | | if (lockQty >= d.Qty) |
| | | { |
| | | break; |
| | | } |
| | | if (item.Qty - item.LockQty - item.FrozenQty <= d.Qty - lockQty) |
| | | { |
| | | item.LockQty += item.Qty - item.LockQty - item.FrozenQty; |
| | | lockQty += (decimal)(item.Qty - item.LockQty - item.FrozenQty); |
| | | } |
| | | else |
| | | { |
| | | item.LockQty += d.Qty - lockQty; |
| | | lockQty += d.Qty - lockQty; |
| | | } |
| | | Db.Updateable(item).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); |
| | | } |
| | | Db.CommitTran(); |
| | | //回传上游系统锁定数量信息 |
| | | result.Success = "0"; |
| | | result.Message = "操作成功"; |
| | | result.SoDetails = soDetailList; |
| | | return result; |
| | | |
| | | SoDetailInfo soDetail = new SoDetailInfo(); |
| | | soDetail.OrderDetailCode = d.OrderDetailCode; |
| | | soDetail.LockQty = d.Qty; |
| | | soDetail.LotNo = d.LotNo; |
| | | |
| | | soDetailList.Add(soDetail); |
| | | } |
| | | catch (Exception ex) |
| | | //出库单信息 |
| | | var notice = new BllExportNotice() |
| | | { |
| | | SONo = billNo, |
| | | OrderCode = model.OrderCode, |
| | | Type = model.SoType, |
| | | Status = "0", |
| | | Origin = "WMS", |
| | | CustomerNo = model.Customer, |
| | | CustomerName = "", |
| | | LogisticsId = null, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsDespatch = "0", |
| | | |
| | | CreateUser = 0, |
| | | }; |
| | | |
| | | var n = Db.Insertable<BllExportNotice>(notice).ExecuteCommand(); |
| | | var m = Db.Insertable<BllExportNoticeDetail>(list).ExecuteCommand(); |
| | | |
| | | if (n <= 0 || m <= 0) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | throw new Exception("操作失败"); |
| | | } |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | //回传上游系统锁定数量信息 |
| | | result.Success = "0"; |
| | | result.Message = "操作成功"; |
| | | result.SoDetails = soDetailList; |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | }*/ |
| | | } |
| | | } |
| | | } |
| | |
| | | public DateTime? ExpirationTime {get;set;} |
| | | |
| | | /// <summary> |
| | | /// 托盘状态 |
| | | /// Default:0:净桶 1:预混 2:半成品 3:脏桶 |
| | | /// </summary> |
| | | public string PalletStatus { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:状态 |
| | | /// Default:0:待分配 1:部分分配 2:已分配 3:盘点锁定 4:移库锁定 |
| | | /// Nullable:True |
| | |
| | | public string TaskNo {get;set;} |
| | | |
| | | /// <summary> |
| | | /// 入库明细号 |
| | | /// 入库\出库单明细号 |
| | | /// </summary> |
| | | public int ASNDetailNo { get; set; } |
| | | public int NoticeDetailNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:发送方 |
| | |
| | | { |
| | | public interface INoticeServer |
| | | { |
| | | /// <summary> |
| | | /// 下发入库单 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public ErpModel CreateAsn(AsnInfo model); |
| | | |
| | | /// <summary> |
| | | /// 任务完成 |
| | | /// </summary> |
| | | /// <param name="TaskNo"></param> |
| | | /// <param name="Status"></param> |
| | | /// <returns></returns> |
| | | public ErpModel FinishTask(string TaskNo, string Status); |
| | | |
| | | /// <summary> |
| | | /// 下发出库单 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public SoResInfo ErpAddExportNotice(SoInfo model); |
| | | } |
| | | } |