New file |
| | |
| | | <!DOCTYPE html> |
| | | <html> |
| | | |
| | | <head> |
| | | <meta charset="utf-8"> |
| | | <title>车间出入库记录</title> |
| | | <meta name="renderer" content="webkit"> |
| | | <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
| | | <meta name="viewport" |
| | | content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> |
| | | <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all"> |
| | | <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all"> |
| | | <link rel="stylesheet" href="../../css/public.css" media="all"> |
| | | <style type="text/css"> |
| | | .layui-form-item .layui-inline { |
| | | margin-bottom: 1px; |
| | | margin-right: 1px; |
| | | } |
| | | </style> |
| | | <script> |
| | | // 这里是需要在页面渲染之前执行的代码 |
| | | document.addEventListener("DOMContentLoaded", function () { |
| | | //获取table默认显示数 |
| | | pageCntFirst(); |
| | | //判断是否开启table列表列宽调整功能。 |
| | | GetIsSetColW(); |
| | | }); |
| | | </script> |
| | | |
| | | </head> |
| | | |
| | | <body id="body"> |
| | | <div class="layui-fluid" style="padding-bottom: 0;"> |
| | | <div class="layui-card"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" id="top"> |
| | | <div class="layui-form-item" style="margin-bottom: 0px;"> |
| | | <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="SkuNo" name="SkuNo" placeholder="物料编码" autocomplete="off" |
| | | class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <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="SkuName" name="SkuName" placeholder="物料名称" autocomplete="off" |
| | | class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <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="PalletNo" name="PalletNo" placeholder="托盘号" autocomplete="off" |
| | | class="layui-input"> |
| | | </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;"> |
| | | <input type="text" id="LotNo" name="LotNo" placeholder="批次号" autocomplete="off" |
| | | class="layui-input"> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 箱码 箱支状态 检验标记 零箱标记 质量状态 --> |
| | | |
| | | <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 class="layui-inline sousuo"> |
| | | <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit |
| | | lay-filter="LAY-app-contlist-search"> |
| | | <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索 |
| | | </button> |
| | | <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit lay-filter="daochu"> |
| | | <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>导出 |
| | | </button> |
| | | </div> |
| | | </div> |
| | | </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 formatDate2(d.ProductionTime); |
| | | } |
| | | }} |
| | | {{ GetBtn(d) }} |
| | | </script> |
| | | <script type="text/html" id="templetExpirationTime"> |
| | | {{# function GetBtn(d){ |
| | | return formatDate2(d.ExpirationTime); |
| | | } |
| | | }} |
| | | {{ GetBtn(d) }} |
| | | </script> |
| | | |
| | | <script type="text/html" id="templetInspectTime"> |
| | | {{# function GetBtn1(d){ |
| | | return formatDate(d.InspectTime); |
| | | } |
| | | }} |
| | | {{ GetBtn1(d) }} |
| | | </script> |
| | | <!-- #endregion --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | <script type="text/html" id="TypeTpl"> |
| | | {{# if(d.Type=='0'){ }} |
| | | <button class="layui-btn layui-btn-radius layui-btn-danger layui-btn-xs">入库</button> |
| | | {{# } else if(d.Type == '1') { }} |
| | | <button class="layui-btn layui-btn-radius layui-btn-xs">出库</button> |
| | | {{# } }} |
| | | </script> |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <script src="../../layuiadmin/layui/layui.js"></script> |
| | | <script src="../../js/public.js"></script> |
| | | <script src="../../js/jquery-3.5.1.min.js"></script> |
| | | <script src="../../js/jquery.cookie.js"></script> |
| | | <script> |
| | | var uid = $.cookie('userId'); |
| | | layui.config({ |
| | | base: '../../layuiadmin/' //静态资源所在路径 |
| | | }).extend({ |
| | | index: 'lib/index' //主入口模块 |
| | | }).use(['index', 'table', 'laypage', 'layer', 'element', 'laydate'], function () { |
| | | var table = layui.table, |
| | | form = layui.form, |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | element = layui.element; |
| | | laydate = layui.laydate; |
| | | |
| | | var h1 = GetTableTabHeight(); |
| | | // var h1 = GetTkableTopHeight(); |
| | | // console.log(h1) |
| | | |
| | | laydate.render({ |
| | | elem: '#StartTime', |
| | | format: 'yyyy-MM-dd' //可任意组合 |
| | | }); |
| | | laydate.render({ |
| | | elem: '#EndTime', |
| | | format: 'yyyy-MM-dd' //可任意组合 |
| | | }); |
| | | //获取当前时间 |
| | | function getNowTime() { |
| | | var date = new Date(); |
| | | //年 getFullYear():四位数字返回年份 |
| | | var year = date.getFullYear(); //getFullYear()代替getYear() |
| | | //月 getMonth():0 ~ 11 |
| | | var month = date.getMonth() + 1; |
| | | //日 getDate():(1 ~ 31) |
| | | var day = date.getDate(); |
| | | //时 getHours():(0 ~ 23) |
| | | var hour = date.getHours(); |
| | | //分 getMinutes(): (0 ~ 59) |
| | | var minute = date.getMinutes(); |
| | | //秒 getSeconds():(0 ~ 59) |
| | | var second = date.getSeconds(); |
| | | |
| | | var time = year + addZero(month) + addZero(day) + addZero(hour) + addZero(minute) + addZero(second); |
| | | return time; |
| | | |
| | | //小于10的拼接上0字符串 |
| | | |
| | | }; |
| | | function addZero(s) { |
| | | return s < 10 ? ('0' + s) : s; |
| | | }; |
| | | |
| | | var $ = layui.$; |
| | | var yemianid = 0; |
| | | refreshTable("", "", "", "", "", "", "", "", "", "", "", "", "", ""); |
| | | |
| | | // 表单需要的变量 |
| | | var infoOptions; |
| | | //#region 自定义表头 |
| | | var TotalColsArr = [[ |
| | | { field: '', title: '序号', type: 'numbers', align: 'center', fixed: 'left', "disabled": true }, |
| | | { field: 'Type', title: '入库/出库', align: 'center', templet: '#TypeTpl', width: 90, }, |
| | | { field: 'PalletNo', title: '托盘号', align: 'center', width: 100, }, |
| | | { field: 'SkuNo', title: '物料编码', align: 'center', width: 120, }, |
| | | { field: 'SkuName', title: '物料名称', align: 'center', width: 120, }, |
| | | { field: 'LotNo', title: '批次号', align: 'center', width: 100, }, |
| | | { field: 'Qty', title: '数量', align: 'center', width: 90, }, |
| | | { field: 'CreateUserName', title: '操作人', align: 'center', width: 100, }, |
| | | { field: 'CreateTime', title: '操作时间', align: 'center', width: 100, }, |
| | | ]]; |
| | | var TotalColsSysArr = encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码 |
| | | //#endregion |
| | | //获取托盘明细 |
| | | function refreshTable(SkuNo, SkuName, PalletNo, LotNo, BoxNo, Type) { |
| | | //#region 自定义表头 |
| | | var colsJson |
| | | var param1 = { |
| | | Href: 'BllCheck/GetLogWorkShopList' |
| | | }; |
| | | sendData(IP + "/Sys/GetTableColsByUserId", param1, 'post', function (res) { |
| | | if (res.code == 0) { |
| | | if (res.data == '' || res.data == undefined || res.data == null) { |
| | | colsJson = TotalColsArr |
| | | } else { |
| | | colsJson = eval(res.data); |
| | | } |
| | | } else { |
| | | colsJson = TotalColsArr |
| | | } |
| | | infoOptions = { |
| | | elem: '#LAY-app-content-list', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | page: true, |
| | | limit: pageCnt, |
| | | limits: pageLimits, |
| | | even: true, |
| | | cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增 |
| | | done: function () { |
| | | //自定义列宽 |
| | | SetTableColW('LAY-app-content-list', 'BllCheck/GetLogWorkShopList', TotalColsSysArr); |
| | | }, |
| | | cols: colsJson |
| | | }; |
| | | |
| | | var param = { |
| | | SkuNo: SkuNo, //物料号 |
| | | SkuName: SkuName, //物料名称 |
| | | palletNo: PalletNo, //托盘号 |
| | | LotNo: LotNo, //批次号 |
| | | Type: Type, //类型 |
| | | }; |
| | | sendData(IP + "/BllCheck/GetLogWorkShopList", param, 'post', function (res) { |
| | | console.log(res) |
| | | if (res.code == 0) { //成功 |
| | | var list = res.data; |
| | | $.extend(infoOptions, { |
| | | data: list |
| | | }); |
| | | infoOptions.page = { |
| | | curr: 1 |
| | | } |
| | | tableIns = table.render(infoOptions); |
| | | } |
| | | else { //不成功 |
| | | layer.msg('获取车间出入库日志列表信息失败!', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { }); |
| | | } |
| | | }); |
| | | }); |
| | | //#endregion |
| | | } |
| | | |
| | | // 表单需要的变量 |
| | | var infoOptions2; |
| | | |
| | | //获取明细信息 |
| | | //#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: 'ExpirationTime', title: '有效期', align: 'center', templet: '#templetExpirationTime' }, |
| | | { 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, WareHouseNo, AreaNo) { |
| | | //#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, |
| | | WareHouseNo: WareHouseNo, |
| | | AreaNo: AreaNo, |
| | | } |
| | | 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 SkuName = $("#SkuName").val(); |
| | | var LotNo = $("#LotNo").val(); |
| | | var PalletNo = $("#PalletNo").val(); |
| | | |
| | | var BoxNo = $("#BoxNo").val(); |
| | | var Status = $("#Status").val(); |
| | | var InspectMark = $("#InspectMark").val(); |
| | | var BitPalletMark = $("#BitPalletMark").val(); |
| | | var BitBoxMark = $("#BitBoxMark").val(); |
| | | var InspectStatus = $("#InspectStatus").val(); |
| | | |
| | | var OwnerNo = $("#OwnerNo").val(); |
| | | var OwnerName = $("#OwnerName").val(); |
| | | |
| | | var StartTime = $("#StartTime").val(); |
| | | var EndTime = $("#EndTime").val(); |
| | | var WareHouseNo = $("#WareHouseNo").val(); |
| | | var AreaNo = $("#AreaNo").val(); |
| | | |
| | | if (yemianid == 0) { |
| | | console.log("总单"); |
| | | refreshTable(SkuNo, SkuName, PalletNo, LotNo, BoxNo, Status, InspectMark, BitPalletMark, BitBoxMark, |
| | | InspectStatus, OwnerNo, OwnerName, StartTime, EndTime, WareHouseNo, AreaNo); |
| | | } else if (yemianid == 1) { |
| | | quanid = ''; |
| | | console.log("明细"); |
| | | refreshTable2(quanid, SkuNo, SkuName, LotNo, PalletNo, BoxNo, Status, InspectMark, BitBoxMark, |
| | | InspectStatus, StartTime, EndTime, WareHouseNo, AreaNo); |
| | | } |
| | | |
| | | }); |
| | | //触发行双击事件 |
| | | 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 SkuNo = $("#SkuNo").val(); |
| | | var SkuName = $("#SkuName").val(); |
| | | var LotNo = $("#LotNo").val(); |
| | | var PalletNo = $("#PalletNo").val(); |
| | | |
| | | var BoxNo = $("#BoxNo").val(); |
| | | var Status = $("#Status").val(); |
| | | var InspectMark = $("#InspectMark").val(); |
| | | var BitPalletMark = $("#BitPalletMark").val(); |
| | | var BitBoxMark = $("#BitBoxMark").val(); |
| | | var InspectStatus = $("#InspectStatus").val(); |
| | | |
| | | var OwnerNo = $("#OwnerNo").val(); |
| | | var OwnerName = $("#OwnerName").val(); |
| | | |
| | | 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); |
| | | } |
| | | }); |
| | | 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 () { }); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | |
| | | }); |
| | | |
| | | |
| | | //获取仓库下拉框信息 |
| | | sendData(IP + "/Sys/GetWarehouseDic", {}, 'get', function (res) { |
| | | if (res.code == 0) { //成功 |
| | | for (var i = 0; i < res.data.length; i++) { |
| | | $("#WareHouseNo").append('<option value =' + res.data[i].WareHouseNo + '>' + res.data[i].WareHouseNo + '-' + |
| | | res.data[i].WareHouseName + '</option>'); |
| | | } |
| | | form.render('select'); |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { }); |
| | | } |
| | | }); |
| | | |
| | | getAR(""); |
| | | form.on('select(getWareHouseNo)', function (data) { |
| | | console.log(data); |
| | | getAR(data.value); |
| | | }); |
| | | function getAR(val) { |
| | | //获取 区域下拉框 |
| | | sendData(IP + "/Sys/GetStorageAreaByHouseNo?wareHouseNo=" + val, {}, 'get', function (res) { |
| | | $("#AreaNo").empty(); |
| | | $("#AreaNo").append('<option value =""></option>'); |
| | | if (res.code == 0) { //成功 |
| | | for (var i = 0; i < res.data.length; i++) { |
| | | $("#AreaNo").append('<option value =' + res.data[i].AreaNo + '>' + res.data[i].AreaNo + '-' + |
| | | res.data[i].AreaName + '</option>'); |
| | | } |
| | | form.render('select'); |
| | | } else { //不成功 |
| | | layer.msg('获取区域信息失败', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | //回调 |
| | | form.render('select'); |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | }; |
| | | |
| | | //#region 自定义表头 |
| | | //自定义表头 |
| | | active = { |
| | | customCols: function () { |
| | | layer.open({ |
| | | type: 2, |
| | | title: '自定义列', |
| | | content: '../SystemSettings/HeaderSetting.html?Href=Statistical/GetBindList&ColsSysArr=' + TotalColsSysArr, |
| | | maxmin: false, |
| | | resize: false, |
| | | 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'); |
| | | active[type] ? active[type].call(this) : ''; |
| | | }); |
| | | //#endregion |
| | | }); |
| | | </script> |
| | | </body> |
| | | |
| | | </html> |
New file |
| | |
| | | <!DOCTYPE html> |
| | | <html> |
| | | |
| | | <head> |
| | | <meta name="viewport" content="user-scalable=0,width=device-width,initial-scale=1.0" /> |
| | | <meta charset="UTF-8" /> |
| | | <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665, minimum-scale=0.5, maximum-scale=1, user-scalable=no" /> --> |
| | | <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665" /> --> |
| | | <meta http-equiv="X-UA-Compatible" content="ie=edge" /> |
| | | <title>Boxline PDA</title> |
| | | |
| | | <link rel="stylesheet" href="/layui/css/layui.css" /> |
| | | <link rel="stylesheet" href="/css/style.css" /> |
| | | <script src="/js/adaptive.js"></script> |
| | | <link rel="stylesheet" href="/css/my.css" /> |
| | | <style type="text/css"> |
| | | td { |
| | | word-break: break-all; |
| | | word-wrap: break-word; |
| | | } |
| | | |
| | | .layui-form-switch { |
| | | margin-top: 0; |
| | | } |
| | | |
| | | /* 标签样式 */ |
| | | .tableyang-this a { |
| | | margin: 10px 10px 0px 0px; |
| | | line-height: 30px; |
| | | width: 100px; |
| | | color: #999; |
| | | text-align: center; |
| | | float: left; |
| | | background: #f7f7f7; |
| | | user-select: none; |
| | | position: relative; |
| | | z-index: 1; |
| | | cursor: pointer; |
| | | border-radius: 5px; |
| | | border: 1px solid #ccc; |
| | | transition: all 0.3s ease; |
| | | } |
| | | |
| | | .tableyang-this a.hover { |
| | | color: #5298ff; |
| | | background-color: #eff2ff; |
| | | border: 1px solid #5298ff; |
| | | } |
| | | |
| | | /* 内容居中 */ |
| | | .tableyang-tab { |
| | | display: flex; |
| | | /* justify-content: center; */ |
| | | /* align-items: center; */ |
| | | flex-direction: column; |
| | | height: 90vh; |
| | | } |
| | | |
| | | /* 必用样式 */ |
| | | .tableyang-2, |
| | | .tableyang-3 { |
| | | display: none; |
| | | } |
| | | |
| | | ul { |
| | | list-style-type: none; |
| | | padding: 0; |
| | | } |
| | | |
| | | li { |
| | | cursor: pointer; |
| | | background-color: lightgray; |
| | | padding: 10px; |
| | | margin-bottom: 5px; |
| | | } |
| | | </style> |
| | | <link rel="stylesheet" href="/css/adapter.css" /> |
| | | <script src="../../js/jquery.js"></script> |
| | | <script src="../../js/jquery-3.5.1.min.js"></script> |
| | | </head> |
| | | |
| | | <body> |
| | | <div id="" class="main-content"> |
| | | |
| | | <div id="" class="layout-title"> |
| | | <table border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td class="img-back"><a href="../index.html"><img src="/assets/back.jpg"></a></td> |
| | | <td class="title-text" lang>AGV空托转运</td> |
| | | <td class="title-menu-icon"><img id="menuImg" src="/assets/menu.jpg"></td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | |
| | | <div id="" class="layout-sub-content"> |
| | | <div id="menuList" class="menu"> |
| | | <ul class="" style="text-align: center;"> |
| | | <li><a href="../index.html" lang>主页</a></li> |
| | | <!-- <li><a href="productEnterConfirm.html">入库信息确认</a></li> --> |
| | | <li><a href="../login.html" lang>重新登录</a></li> |
| | | </ul> |
| | | </div> |
| | | |
| | | <!-- 有码 --> |
| | | <div id="content1"> |
| | | <div id="zongDiv" class="layout-bill-info" style="height: 170px;"> |
| | | <form class="layui-form" action=""> |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>托盘条码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="STOCKCODE" type="text" lay-verify="stock" lang langholder |
| | | placeholder="请扫描托盘条码" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>起始地码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="LocatNo" type="text" lay-verify="stock" lang langholder placeholder="起始地码" |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="layui-form-item layout-dropdownlist"> |
| | | <label class="layui-form-label" lang>目标区域:</label> |
| | | <div class="layui-input-block" id="selectQuyu"> |
| | | <select id="Quyu" lay-filter="getQuyu" lay-search> |
| | | <option value="B10" selected>B10-叠托机区</option> |
| | | </select> |
| | | <img src="/assets/down_arraw.png"> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | <table class="layout-tbl-submit" border="" cellspacing="" cellpadding=""> |
| | | <tr> |
| | | <td style="width: 23%;"></td> |
| | | <td> |
| | | <button class="layout-btn layout-btn-red" lang type="button" lay-submit |
| | | lay-filter="formCall">叫小车</button> |
| | | </td> |
| | | <td style="width: 33%;"></td> |
| | | |
| | | </tr> |
| | | </table> |
| | | </form> |
| | | </div> |
| | | |
| | | <br> |
| | | |
| | | |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <script src="/js/jquery-3.5.1.min.js"></script> |
| | | <script src="/layui/layui.js"></script> |
| | | <script src="/js/public.js"></script> |
| | | <script src="/js/language.js"></script> |
| | | <script src="/js/jquery.cookie.js"></script> |
| | | <script> |
| | | layui.use(['form', 'jquery'], function () { |
| | | var form = layui.form |
| | | |
| | | |
| | | //呼叫小车事件 |
| | | form.on('submit(formCall)', function (data) { |
| | | if ($("#STOCKCODE").val() == "") { |
| | | layer.msg('请扫描托盘条码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | if ($("#LocatNo").val() == "") { |
| | | layer.msg('请扫描起始地码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | var param = { |
| | | PalletNo: $("#STOCKCODE").val(), |
| | | AreaNo: $("#Quyu").val(), |
| | | LocatNo: $("#LocatNo").val() |
| | | } |
| | | //呼叫小车 |
| | | sendData(IP + "/PdaCr/AgvNullPallet", param, 'post', function (res) { |
| | | if (res.code == 0) { //成功 |
| | | layer.msg(res.msg, { |
| | | icon: 1, |
| | | time: 1000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | $("#STOCKCODE").val(''), |
| | | $("#LocatNo").val('') |
| | | }); |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | //回调 |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 |
| | | }); |
| | | |
| | | |
| | | |
| | | |
| | | /*——————————————————————————————————————————————————————————*/ |
| | | |
| | | |
| | | $("#menuImg").click(function (e) { |
| | | //console.log("menuImg") |
| | | e.stopPropagation() |
| | | |
| | | if ($("#menuList").is(":hidden")) { |
| | | $("#menuList").show() |
| | | } else { |
| | | $("#menuList").hide() |
| | | } |
| | | }) |
| | | $('body').click(function () { |
| | | // //console.log("body") |
| | | $("#menuList").hide() |
| | | }) |
| | | }) |
| | | </script> |
| | | </body> |
| | | |
| | | </html> |
New file |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | |
| | | namespace Model.ModelDto.LogDto |
| | | { |
| | | public class LogWorkShopDto |
| | | { |
| | | /// <summary> |
| | | /// Desc:类型 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string Type { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:托盘号 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string PalletNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:批次号 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string LotNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:物料编码 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string SkuNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:物料名称 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string SkuName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:数量 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public decimal Qty { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 操作时间 |
| | | /// </summary> |
| | | public string CreateTime { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 操作人 |
| | | /// </summary> |
| | | public string CreateUserName { get; set; } |
| | | } |
| | | } |
New file |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | |
| | | namespace Model.ModelVm.LogVm |
| | | { |
| | | public class LogWorkShopVm : IndexPage |
| | | { |
| | | /// <summary> |
| | | /// Desc:类型 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string Type { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:托盘号 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string PalletNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:批次号 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string LotNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:物料编码 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string SkuNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:物料名称 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string SkuName { get; set; } |
| | | } |
| | | } |
| | |
| | | /// 入库口 |
| | | /// </summary> |
| | | public string Ruku { get; set; } |
| | | /// <summary> |
| | | /// 起始地码 |
| | | /// </summary> |
| | | public string LocatNo { get; set; } |
| | | } |
| | | |
| | | public class PdaPalletUnBindVm |
| | |
| | | { |
| | | foreach (var box in boxInfoList) |
| | | { |
| | | var bllBox = Db.Queryable<BllBoxInfo>().First(w => w.IsDel == "0" && w.Status != "0"); |
| | | var bllBox = Db.Queryable<BllBoxInfo>().First(w => w.IsDel == "0" && w.Status != "0" && w.BoxNo == box.BoxNo); |
| | | if (bllBox != null) |
| | | { |
| | | bllBox.Status = "0"; |
| | |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 呼叫agv转运空托盘 |
| | | /// </summary> |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="areaNo"></param> |
| | | /// <param name="locatNo"></param> |
| | | /// <param name="url"></param> |
| | | /// <param name="userId"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public async Task AgvNullPallet(string palletNo, string areaNo, string locatNo, string url, int userId) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(palletNo)) |
| | | { |
| | | throw Oops.Bah("请扫描托盘条码!"); |
| | | } |
| | | if (string.IsNullOrEmpty(locatNo)) |
| | | { |
| | | throw Oops.Bah("请扫描起始地码!"); |
| | | } |
| | | if (string.IsNullOrEmpty(areaNo)) |
| | | { |
| | | throw Oops.Bah("请选择目标区域!"); |
| | | } |
| | | string EndLocat = string.Empty;//目标位置 |
| | | |
| | | var log = await Db.Queryable<LogTask>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo && (w.Status == "0" || w.Status == "1")); |
| | | if (log != null) |
| | | { |
| | | throw Oops.Bah("该托盘已有等待执行或正在执行的任务!"); |
| | | } |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo); |
| | | if (stockDetail != null) |
| | | { |
| | | throw Oops.Bah("托盘上物料存在库存明细信息,请检查!"); |
| | | } |
| | | |
| | | var storageArea = await Db.Queryable<SysStorageArea>().FirstAsync(w => w.IsDel == "0" && w.AreaNo == areaNo); |
| | | if (storageArea == null) |
| | | { |
| | | throw Oops.Bah("所选区域信息不存在,请检查!"); |
| | | } |
| | | var palletInfo = await Db.Queryable<SysPallets>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo); |
| | | if (palletInfo == null) |
| | | { |
| | | throw Oops.Bah("该托盘信息不存在!"); |
| | | } |
| | | if (palletInfo.Status!="0") |
| | | { |
| | | throw Oops.Bah("该托盘不是空托盘!"); |
| | | } |
| | | //根据目标区域获取目标储位地址 |
| | | EndLocat = await GetLocat(areaNo); |
| | | |
| | | //起始储位信息 |
| | | var storageLocat = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == locatNo); |
| | | if (storageLocat == null) |
| | | { |
| | | throw Oops.Bah("储位信息不存在,请检查!"); |
| | | } |
| | | //目标储位信息 |
| | | //var storageLocatEnd = new SysStorageLocat(); |
| | | |
| | | var storageLocatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == EndLocat && w.Flag == "0"); |
| | | if (storageLocatEnd == null) |
| | | { |
| | | throw Oops.Bah("目标储位信息不存在,请检查!"); |
| | | } |
| | | |
| | | //添加出库任务 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var moveTask = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = storageLocat.LocatNo,//起始位置 |
| | | EndLocat = EndLocat,//目标位置 |
| | | PalletNo = palletNo,//托盘码 |
| | | Msg = string.Format("转运任务:{0}=>>{1}", storageLocat.LocatNo, EndLocat), |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "2",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "3",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | await Db.Insertable(moveTask).ExecuteCommandAsync(); |
| | | |
| | | //修改起始储位地址状态 |
| | | storageLocat.Status = "5";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | await Db.Updateable(storageLocat).ExecuteCommandAsync(); |
| | | |
| | | //修改目标储位地址状态 |
| | | //if (storageLocatEnd != null) |
| | | //{ |
| | | // storageLocatEnd.Status = "4";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 |
| | | // await Db.Updateable(storageLocatEnd).ExecuteCommandAsync(); |
| | | //} |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV空托转运", palletNo, "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId); |
| | | |
| | | var outDto = new List<OutCommandDto> |
| | | { |
| | | new OutCommandDto() |
| | | { |
| | | TaskNo = moveTask.TaskNo, // 任务号 |
| | | TaskType = "2",// 任务类型 0入 1出 2移 |
| | | PalletNo = moveTask.PalletNo,//托盘号 |
| | | |
| | | StartLocate = moveTask.StartLocat, // 起始位置 |
| | | EndLocate = EndLocat, // 目标位置 |
| | | |
| | | Order = 999, |
| | | Type = PLCTypeEnum.AGV |
| | | |
| | | } |
| | | }; |
| | | |
| | | // 正式运行程序放开 |
| | | var list2 = outDto.Select(m => m.TaskNo).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(outDto); |
| | | string response = ""; |
| | | |
| | | try |
| | | { |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | //解析返回数据 |
| | | var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); |
| | | if (wcsModel.code == 200) |
| | | { |
| | | // 更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | } |
| | | else |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message); |
| | | throw new Exception(wcsModel.message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// agv转运呼叫小车取货 |
| | | /// </summary> |
| | | /// <param name="soNo"></param> |
| | |
| | | |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); |
| | | //判断是否是回流入库完成 |
| | | if (!stockDetail.Any()) |
| | | if (!stockDetail.Any() && task.EndLocat!= "B100101")//B100101是空托盘收集器,不用校验库存 |
| | | { |
| | | throw new Exception("没有查询到库存信息"); |
| | | } |
New file |
| | |
| | | using Model.ModelDto.LogDto; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | using WMS.DAL; |
| | | using WMS.Entity.Context; |
| | | using WMS.Entity.DataEntity; |
| | | using WMS.Entity.LogEntity; |
| | | using WMS.IBLL.IBllCheckServer; |
| | | using WMS.IBLL.ILogServer; |
| | | |
| | | namespace WMS.BLL.LogServer |
| | | { |
| | | public class LogWorkShopServer : DbHelper<LogWorkShop>, ILogWorkShopServer |
| | | { |
| | | private static readonly SqlSugarScope Db = DataContext.Db; |
| | | public LogWorkShopServer() : base(Db) |
| | | { |
| | | } |
| | | |
| | | public List<LogWorkShopDto> GetLogWorkShopList(string type, string palletNo,string lotNo,string skuNo,string skuName,int page, int limit, out int count) |
| | | { |
| | | try |
| | | { |
| | | string sqlString = string.Empty; |
| | | string sqlCount = string.Empty; |
| | | string sqlPub = string.Empty; |
| | | sqlCount += "SELECT COUNT(tb1.ID) FROM LogWorkShop AS tb1 "; |
| | | sqlString += $@"select |
| | | tb1.Type,tb1.PalletNo,tb1.LotNo,tb1.SkuNo,tb1.SkuName,tb1.CreateUser,tb1.CreateTime,SUM(tb1.Qty) as Qty,tb2.RealName as CreateUserName |
| | | from LogWorkShop as tb1 |
| | | left join SysUserInfor as tb2 on tb1.CreateUser=tb2.Id "; |
| | | sqlPub += $"where 1=1 "; |
| | | |
| | | if (!string.IsNullOrEmpty(type)) |
| | | { |
| | | sqlPub += $"AND tb1.Type = '{type}' "; |
| | | } |
| | | if (!string.IsNullOrEmpty(palletNo)) |
| | | { |
| | | sqlPub += $"AND tb1.PalletNo like '%{palletNo.Trim()}%' "; |
| | | } |
| | | if (!string.IsNullOrEmpty(lotNo)) |
| | | { |
| | | sqlPub += $"AND tb1.LotNo like '%{lotNo.Trim()}%' "; |
| | | } |
| | | if (!string.IsNullOrEmpty(skuNo)) |
| | | { |
| | | sqlPub += $"AND tb1.SkuNo like '%{skuNo.Trim()}%' "; |
| | | } |
| | | if (!string.IsNullOrEmpty(skuName)) |
| | | { |
| | | sqlPub += $"AND tb1.SkuName like '%{skuName.Trim()}%' "; |
| | | } |
| | | sqlPub += " group by tb1.Type,tb1.PalletNo,tb1.LotNo,tb1.SkuNo,tb1.SkuName,tb1.CreateUser,tb1.CreateTime "; |
| | | sqlCount += sqlPub; |
| | | if (page == 0) |
| | | { |
| | | page = 1; |
| | | } |
| | | sqlString += sqlPub + $" offset {((page - 1) * limit)} rows fetch next {limit} rows only;"; |
| | | |
| | | var com = new Common(); |
| | | count = com.GetRowCount(sqlCount); |
| | | |
| | | var modelList = Db.Ado.SqlQuery<LogWorkShopDto>(sqlString); |
| | | |
| | | return modelList; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | using Model.ModelDto.LogDto; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | |
| | | namespace WMS.IBLL.ILogServer |
| | | { |
| | | public interface ILogWorkShopServer |
| | | { |
| | | List<LogWorkShopDto> GetLogWorkShopList(string type, string palletNo, string lotNo, string skuNo, string skuName, int page, int limit, out int count); |
| | | } |
| | | } |
| | |
| | | /// <param name="url"></param> |
| | | Task AgvTransport(string palletNo, string areaNo, string ruku, string url, int userId); |
| | | /// <summary> |
| | | /// 呼叫agv转运空托盘 |
| | | /// </summary> |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="areaNo"></param> |
| | | /// <param name="locatNo"></param> |
| | | /// <param name="url"></param> |
| | | /// <param name="userId"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | Task AgvNullPallet(string palletNo, string areaNo, string locatNo, string url, int userId); |
| | | /// <summary> |
| | | /// agv转运呼叫小车取货 |
| | | /// </summary> |
| | | /// <param name="soNo"></param> |
| | |
| | | |
| | | private readonly IWarehouseOutsidePalletsServer _stockPallet; //库外托盘 |
| | | private readonly IStockFreectSetve _freect; //解冻\冻结 |
| | | private readonly ILogWorkShopServer _logWorkShop; //车间出入库记录 |
| | | private readonly UserManager _userManager; |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="logSvc">库内操作日志Svc</param> |
| | | /// <param name="stockPallet">库外托盘</param> |
| | | /// <param name="freect">解冻\冻结</param> |
| | | public BllCheckController(IOptions<ApiUrlConfig> setting, IStockCheckServer stockCheckSvc, IStockCheckLogServer stockCheckLogSvc, ITaskServer taskSvc, IOperationCRServer logSvc, IWarehouseOutsidePalletsServer stockPallet, IStockFreectSetve freect, UserManager userManager) |
| | | public BllCheckController(IOptions<ApiUrlConfig> setting, IStockCheckServer stockCheckSvc, IStockCheckLogServer stockCheckLogSvc, ITaskServer taskSvc, IOperationCRServer logSvc, IWarehouseOutsidePalletsServer stockPallet, IStockFreectSetve freect, ILogWorkShopServer logWorkShop, UserManager userManager) |
| | | { |
| | | _config = setting.Value; |
| | | _stockCheckSvc = stockCheckSvc; |
| | |
| | | _logSvc = logSvc; |
| | | _stockPallet = stockPallet; |
| | | _freect = freect; |
| | | _logWorkShop = logWorkShop; |
| | | _userManager = userManager; |
| | | } |
| | | |
| | |
| | | |
| | | #endregion |
| | | |
| | | #region 车间出入库记录 |
| | | [HttpPost] |
| | | public IActionResult GetLogWorkShopList(LogWorkShopVm model) |
| | | { |
| | | try |
| | | { |
| | | var _list = _logWorkShop.GetLogWorkShopList(model.Type, model.PalletNo, model.LotNo, model.SkuNo, model.SkuName, model.Page, model.Limit, out int count); |
| | | |
| | | return Ok(new { code = 0, count = count, msg = "获取车间出入库记录", data = _list }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = "获取失败" + e.Message }); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | #region AGV转运 |
| | | /// <summary> |
| | |
| | | await _pdaCrSvc.AgvTransport(model.PalletNo, model.AreaNo, model.Ruku, _config.WcsHost+ _config.IssueComApiUrl, _userManager.UserId); |
| | | } |
| | | /// <summary> |
| | | /// 呼叫agv转运空托盘 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | [ServiceFilter(typeof(ApiResponseActionFilter))] |
| | | [UnitOfWork] |
| | | public async Task AgvNullPallet(PdaAgvTransportVm model) |
| | | { |
| | | await _pdaCrSvc.AgvNullPallet(model.PalletNo, model.AreaNo, model.LocatNo, _config.WcsHost + _config.IssueComApiUrl, _userManager.UserId); |
| | | } |
| | | /// <summary> |
| | | /// agv转运呼叫小车取货 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | |
| | | |
| | | #endregion |
| | | |
| | | #region AGV空托盘转运 |
| | | |
| | | #endregion |
| | | |
| | | #region 零箱解绑 |
| | | /// <summary> |
| | | /// 零箱解绑 |