| | |
| | | </div> |
| | | |
| | | |
| | | <script type="text/html" id="IsStatus"> |
| | | {{# if(d.Status=='0'){ }} |
| | | <p>等待审核</p> |
| | | {{# } else if(d.Status=='1'){ }} |
| | | <p>通过</p> |
| | | {{# } else if(d.Status=='2'){ }} |
| | | <p>不通过</p> |
| | | {{# } }} |
| | | </script> |
| | | <script type="text/html" id="IsQualifiedButton"> |
| | | {{# if(d.IsQualified=='0'){ }} |
| | | <p>不合格</p> |
| | |
| | | {{# console.log(d.CreateTime); |
| | | return formatDate(d.CreateTime); |
| | | }} |
| | | </script> |
| | | <script type="text/html" id="CaoZuoList"> |
| | | {{# function GetBtn(d){ |
| | | var html = ''; |
| | | console.log(d); |
| | | switch (d.Status) { |
| | | case "0" : |
| | | html += `<a class="layui-btn layui-btn-normal layui-btn-xs editClass" lay-event="edit"> |
| | | <i class="layui-icon layui-icon-edit"></i>复核</a>`; |
| | | break; |
| | | default : |
| | | break; |
| | | } |
| | | return html; |
| | | } |
| | | }} |
| | | {{ GetBtn(d) }} |
| | | </script> |
| | | |
| | | </div> |
| | |
| | | field: 'InspectNo',title: '检验号',align: 'center' |
| | | }, |
| | | { |
| | | field: 'Status',title: '状态',align: 'center',templet: '#IsStatus', |
| | | }, |
| | | { |
| | | field: 'SkuNo',title: '物料编码',align: 'center' |
| | | }, |
| | | { |
| | |
| | | }, |
| | | { |
| | | field: 'CreateTime',title: '创建时间',align: 'center', templet: '#CreateTimeButton', |
| | | }, |
| | | { |
| | | field: 'caozuo', title: '操作', fixed: 'right', width: 100, align: 'center', toolbar: '#CaoZuoList', "disabled": true |
| | | }, |
| | | ]]; |
| | | var TotalColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码 |
| | |
| | | function setRight() { |
| | | $(function() { |
| | | $("#approvalBtn").hide(); |
| | | $("#editClass").hide(); |
| | | }); |
| | | sendData(IP + "/Basis/GetRoleRightList", {}, 'get', function (res) { |
| | | if (res.code == 0) { //成功 |
| | |
| | | $("#approvalBtn").show(); |
| | | }); |
| | | } |
| | | if (res.data[k].MenuName == "复核质检结果") |
| | | { |
| | | $(function() { |
| | | $(".editClass").show(); |
| | | }); |
| | | } |
| | | } |
| | | } else { //不成功 |
| | | layer.msg('获取权限信息失败', { |
| | |
| | | <input type="text" name="SkuNo" placeholder="请输入物料号" lay-verify="required" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <!-- <div class="layui-form-item"> |
| | | <label class="layui-form-label">审核状态</label> |
| | | <div class="layui-input-block" style="width: 70%;"> |
| | | <select name="IsQualified" id="IsQualified" lay-verify=""> |
| | | <!-- <option value=""></option> --> |
| | | <option value=""></option> |
| | | <option value="0">不合格</option> |
| | | <option value="1" selected>合格</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | <div class="layui-form-item layui-hide"> |
| | | <input type="button" lay-submit lay-filter="layuiadmin-app-form-submit" id="layuiadmin-app-form-submit" value="确认添加"> |
| | | </div> |
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>人工转运</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"> |
| | | .layui-form-label { |
| | | width: 20%; |
| | | } |
| | | |
| | | .layui-input-block { |
| | | width: 80%; |
| | | margin-left: 20%; |
| | | } |
| | | |
| | | .div-tbl-title { |
| | | width: 98%; |
| | | margin: auto; |
| | | /* background-color: #4476A7; */ |
| | | height: 30px; |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .div-tbl-title table { |
| | | width: 100%; |
| | | height: 30px; |
| | | } |
| | | |
| | | .div-tbl-title td { |
| | | width: 50%; |
| | | height: 30px; |
| | | line-height: 30px; |
| | | } |
| | | |
| | | .div-tbl-title span { |
| | | float: left; |
| | | width: 60%; |
| | | height: 30px; |
| | | line-height: 30px; |
| | | } |
| | | |
| | | .div-tbl-title input { |
| | | float: left; |
| | | width: 40%; |
| | | height: 30px; |
| | | line-height: 30px; |
| | | border: none; |
| | | } |
| | | |
| | | .layout-tbl-paging { |
| | | margin-top: 0; |
| | | } |
| | | |
| | | .layout-bill-info { |
| | | height: auto; |
| | | } |
| | | |
| | | .btn-ok { |
| | | border: none; |
| | | color: #FFFFFF; |
| | | background-color: #0a93e3; |
| | | width: 48%; |
| | | height: 36px; |
| | | border-radius: 5px; |
| | | float: left; |
| | | margin: 0 1%; |
| | | margin-left: 25%; |
| | | } |
| | | |
| | | .btn-ok:active { |
| | | opacity: 0.8; |
| | | } |
| | | |
| | | td { |
| | | word-break: break-all; |
| | | word-wrap: break-word; |
| | | } |
| | | </style> |
| | | <link rel="stylesheet" href="/css/adapter.css" /> |
| | | </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">人工转运</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">主页</a></li> |
| | | <li><a href="../login.html">重新登录</a></li> |
| | | </ul> |
| | | </div> |
| | | |
| | | <div id="" class="layout-bill-info"> |
| | | <form class="layui-form" action="" style="height: auto;"> |
| | | <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" readonly> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="" class="layui-form-item layout-input"> |
| | | <label class="layui-form-label" lang>目标地码:</label> |
| | | <div class="layui-input-block"> |
| | | <input id="EndLocatNo" type="text" lay-verify="stock" lang langholder placeholder="目标地码" |
| | | autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div id="" class="" style="width: 100%;height: 36px;margin-top: 15px;"> |
| | | <button id="btnQuery" class="btn-ok" type="button">转运</button> |
| | | </div> |
| | | </form> |
| | | </div> |
| | | |
| | | <div class="layout-tbl-paging" id=""> |
| | | <table id="tableBoxList" 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> |
| | | </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> |
| | | </tr> |
| | | </table> |
| | | <!-- 分页 --> |
| | | <table id="tableBoxPages" 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> |
| | | |
| | | <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/jquery.cookie.js"></script> |
| | | <script> |
| | | layui.use(['form', 'jquery'], function () { |
| | | var form = layui.form; |
| | | |
| | | //当前分页 |
| | | var curPageIndex = 1; |
| | | var tableData = null; |
| | | |
| | | //----------------------------------------------------------------------------------------------------- |
| | | |
| | | // 托盘码文本改变时触发 |
| | | $("#STOCKCODE").on('input', function () { |
| | | if ($("#STOCKCODE").val() == "" || $("#STOCKCODE").val().length < 8) { |
| | | return; |
| | | } |
| | | if ($("#STOCKCODE").val().length >= 8) { |
| | | $("#STOCKCODE").val($("#STOCKCODE").val().substr(-8)) |
| | | } |
| | | getPalletLocatNo() |
| | | }) |
| | | //托盘码回车事件 |
| | | $("#STOCKCODE").keydown(function (e) { |
| | | if (e.keyCode === 13) { |
| | | if ($("#STOCKCODE").val() == "") { |
| | | layer.msg('请先扫描托盘条码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return |
| | | } |
| | | getPalletLocatNo() |
| | | } |
| | | }); |
| | | |
| | | function getPalletLocatNo() { |
| | | |
| | | var param = { |
| | | "PalletNo": $("#STOCKCODE").val() |
| | | } |
| | | sendData(IP + "/PdaCr/GetPalletLocatNo", param, 'get', function (res) { |
| | | if (res.code == 0) { |
| | | $("#LocatNo").val(res.data) |
| | | refreshTable() |
| | | } else { |
| | | $("#LocatNo").val('') |
| | | //先清空一下箱子列表 |
| | | let trs = $("#tableBoxList tr") |
| | | let len = trs.length |
| | | |
| | | for (i = len - 1; i >= 2; i--) { |
| | | trs[i].remove(); |
| | | } |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | $("#btnQuery").click(function () { |
| | | if ($("#STOCKCODE").val() == "") { |
| | | layer.msg('请扫描托盘条码', { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }); |
| | | return; |
| | | } |
| | | if ($("#LocatNo").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(), |
| | | LocatNo: $("#LocatNo").val(), |
| | | EndLocatNo: $("#EndLocatNo").val() |
| | | } |
| | | //呼叫小车 |
| | | sendData(IP + "/PdaCr/ArtificialTransport", param, 'post', function (res) { |
| | | if (res.code == 0) { //成功 |
| | | layer.msg(res.msg, { |
| | | icon: 1, |
| | | time: 1000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | |
| | | }); |
| | | } else { //不成功 |
| | | layer.msg(res.msg, { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { |
| | | //回调 |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | |
| | | return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 |
| | | }) |
| | | |
| | | |
| | | //----------------------------------------------------------------------------------------------------- |
| | | |
| | | // 渲染箱码信息 |
| | | function refreshTable() { |
| | | |
| | | //先清空一下箱子列表 |
| | | let trs = $("#tableBoxList tr") |
| | | let len = trs.length |
| | | |
| | | for (i = len - 1; i >= 2; i--) { |
| | | trs[i].remove(); |
| | | } |
| | | if ($("#STOCKCODE").val() == '') { |
| | | return; |
| | | } |
| | | |
| | | var param = { |
| | | PalletNo: $("#STOCKCODE").val(), |
| | | IsHuiKu: 1 |
| | | }; |
| | | // 根据托盘号获取箱码信息 |
| | | sendData(IP + "/PdaCr/GetSkuInfoByPalletNo", param, 'get', function (res) { |
| | | if (res.code == 0) { //成功 |
| | | var list = res |
| | | var arrTrs = new Array() |
| | | let idx = 0 |
| | | for (var i in res.data) { |
| | | var tr = $("#boxCell").eq(0).clone(); |
| | | tr.appendTo("#tableBoxList"); |
| | | tr.attr('id', res.data[i].Id) |
| | | tr.attr('boxno', res.data[i].BoxNo) |
| | | tr.attr('BindNo', res.data[i].BindNo) |
| | | idx++; |
| | | tr.attr('index', idx) |
| | | tr.find("td[name='code']").html(res.data[i].BoxNo); |
| | | tr.find("td[name='name']").html(res.data[i].SkuName); |
| | | tr.find("td[name='lotNo']").html(res.data[i].LotNo); |
| | | tr.find("td[name='num']").html(res.data[i].Qty); |
| | | tr.show(); |
| | | arrTrs[i] = tr |
| | | } |
| | | |
| | | |
| | | } else { //不成功 |
| | | layer.msg("无数据", { |
| | | icon: 2, |
| | | time: 2000 //2秒关闭(如果不配置,默认是3秒) |
| | | }, function () { }); |
| | | $("#boxNum").val(0) |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | //设置分页 |
| | | function setPages(pageIndex, boxNum) { |
| | | if (boxNum <= 0) { |
| | | //列表为空,隐藏分页页码 |
| | | $("#tableBoxPages").hide() |
| | | return |
| | | } |
| | | |
| | | let pageNum = Math.floor(boxNum / 10); |
| | | if (boxNum % 10 > 0) { |
| | | pageNum += 1; |
| | | } |
| | | //console.log("pageNum is " + pageNum) |
| | | |
| | | $("#tableBoxPages").find("tr").remove() |
| | | let table = $("#tableBoxPages") |
| | | $("<tr></tr>").appendTo("#tableBoxPages") |
| | | |
| | | // let newTr = table.append("<tr></tr>") |
| | | // newTr.append("<td class='page-prev'>上一页</td>") |
| | | $("<td id='prevPage' class='page-prev'>上一页</td>").appendTo("#tableBoxPages tr") |
| | | $("#tableBoxPages tr").eq(0).find("td[id^='prevPage']").click(function () { |
| | | onClickPrevPage() |
| | | }) |
| | | for (i = 1; i < pageNum + 1; i++) { |
| | | // newTr.append("<td class='page-num'>"+ i +"</td>") |
| | | $("<td class='page-num'>" + i + "</td>").appendTo("#tableBoxPages tr") |
| | | } |
| | | // newTr.append("<td class='page-next'>下一页</td>") |
| | | $("<td id='nextPage' class='page-next'>下一页</td>").appendTo("#tableBoxPages tr") |
| | | $("#tableBoxPages tr").eq(0).find("td[id^='nextPage']").click(function () { |
| | | onClickNextPage() |
| | | }) |
| | | // pages.show() |
| | | $("#tableBoxPages").show() |
| | | |
| | | setCurPage(1) |
| | | } |
| | | |
| | | //设置当前分页 |
| | | function setCurPage(pageIndex) { |
| | | let totalTrNum = $("#tableBoxList tr").length |
| | | if (totalTrNum <= 2) { |
| | | //console.log("tableBoxList 为空 totalTrNum: " + totalTrNum) |
| | | //curPageIndex = 1 |
| | | return |
| | | } |
| | | |
| | | let pageNum = getBoxPageNum() |
| | | if (pageIndex > pageNum) { |
| | | //console.log("设置的页码超出页数, pageIndex : " + pageIndex) |
| | | //curPageIndex = 1 |
| | | return |
| | | } |
| | | |
| | | let startIndex = (pageIndex - 1) * 10 + 1 |
| | | let n = totalTrNum - startIndex |
| | | let endIndex = 0 |
| | | if (n > 9) { |
| | | endIndex = startIndex + 9 |
| | | } else { |
| | | endIndex = startIndex + n |
| | | } |
| | | //console.log("startIndex is "+startIndex) |
| | | //console.log("endIndex is "+endIndex) |
| | | //startIndex =2 |
| | | //endIndex = 2 |
| | | let trs = $("#tableBoxList tr") |
| | | //console.log("行数 "+trs.length) |
| | | let d = 0 |
| | | for (let i = 2; i < trs.length; i++) { |
| | | //console.log("行索引 " + trs.eq(i).attr('index')) |
| | | let t = trs.eq(i) |
| | | d = t.attr('index') |
| | | if (d >= startIndex && d <= endIndex) { |
| | | //console.log("需要显示") |
| | | //显示行 |
| | | t.show() |
| | | } else { |
| | | //隐藏行 |
| | | t.hide() |
| | | } |
| | | } |
| | | |
| | | curPageIndex = pageIndex |
| | | |
| | | let ptr = $("#tableBoxPages tr") |
| | | for (let i = 1; i < pageNum + 1; i++) { |
| | | ptr.eq(0).find("td").eq(i).removeClass("page-num-select") |
| | | if (i == curPageIndex) { |
| | | ptr.eq(0).find("td").eq(i).addClass("page-num-select") |
| | | } |
| | | } |
| | | //console.log("totalTrNum is " + totalTrNum) |
| | | } |
| | | |
| | | function onClickPrevPage() { |
| | | //console.log("上一页按钮被点击") |
| | | if (curPageIndex == 1) { |
| | | return |
| | | } |
| | | setCurPage(curPageIndex - 1) |
| | | } |
| | | |
| | | function onClickNextPage() { |
| | | //console.log("下一页按钮被点击") |
| | | let n = getBoxPageNum() |
| | | if (curPageIndex == n) { |
| | | return |
| | | } |
| | | setCurPage(curPageIndex + 1) |
| | | } |
| | | |
| | | function getBoxPageNum() { |
| | | let num = $("#tableBoxList tr").length |
| | | if (num <= 2) { |
| | | return 0 |
| | | } |
| | | |
| | | let pageNum = Math.floor(num / 10); |
| | | if (num % 10 > 0) { |
| | | pageNum += 1; |
| | | } |
| | | |
| | | return pageNum |
| | | } |
| | | |
| | | |
| | | $("#menuImg").click(function (e) { |
| | | //console.log("menuImg") |
| | | e.stopPropagation() |
| | | |
| | | if ($("#menuList").is(":hidden")) { |
| | | $("#menuList").show() |
| | | } else { |
| | | $("#menuList").hide() |
| | | } |
| | | }) |
| | | $('body').click(function () { |
| | | $("#menuList").hide() |
| | | }) |
| | | |
| | | |
| | | form.verify({ |
| | | stock: [/^[\S]{6}$/, '托盘条码必须为六位字符'] |
| | | }); |
| | | }) |
| | | </script> |
| | | </body> |
| | | |
| | | </html> |
| | |
| | | /// <summary> |
| | | /// 箱内小包装数量 |
| | | /// </summary> |
| | | public string BoxItemQty { get; set; } |
| | | public decimal BoxItemQty { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | |
| | | public string ASNNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:状态 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string Status { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:批次号 |
| | | /// Default: |
| | | /// Nullable:True |
| | |
| | | /// </summary> |
| | | public string Ruku { get; set; } |
| | | } |
| | | |
| | | public class PdaArtificialTransportVm |
| | | { |
| | | /// <summary> |
| | | /// 托盘条码 |
| | | /// </summary> |
| | | public string PalletNo { get; set; } |
| | | /// <summary> |
| | | /// 起始地址 |
| | | /// </summary> |
| | | public string LocatNo { get; set; } |
| | | /// <summary> |
| | | /// 目标地址 |
| | | /// </summary> |
| | | public string EndLocatNo { get; set; } |
| | | } |
| | | |
| | | } |
| | |
| | | //{ |
| | | // maxLotNoStr = toDayTime.Substring(2, 6) + "0001"; |
| | | //} |
| | | //maxBoxCode = label.Where(m => m.LotNo == maxLotNoStr).Max(a => a.BoxNo); |
| | | maxBoxCode = label.Where(m => m.LotNo == maxLotNoStr).Max(a => a.BoxNo); |
| | | } |
| | | |
| | | } |
| | |
| | | //{ |
| | | // maxCodestr2 = toDayTime2.Substring(2, 6) + "0001"; |
| | | //} |
| | | //maxboxcode2 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo);//箱号; |
| | | //maxboxcode3 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo3);//支号; |
| | | maxboxcode2 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo);//箱号; |
| | | maxboxcode3 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo3);//支号; |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | if (endLocate != null && endLocate.AreaNo == "B12") //是否是3楼缓存区 是:删除库存 |
| | | { |
| | | if (string.IsNullOrWhiteSpace(item.SONo)) |
| | | { |
| | | throw new Exception("当前托盘不是拼托出库托盘"); |
| | | } |
| | | //记录托盘上信息给MES |
| | | |
| | | |
| | | data.Add(new RequertBeiliaoInfoModel() |
| | | { |
| | | materiel_no = item.SkuNo, |
| | |
| | | using System.IO; |
| | | using System.Security.Cryptography.X509Certificates; |
| | | using System.Net.WebSockets; |
| | | using WMS.BLL.SysServer; |
| | | |
| | | namespace WMS.BLL.BllPdaServer |
| | | { |
| | |
| | | |
| | | #region 产品组托 |
| | | |
| | | public void GetBoxInfoByFuMa(string boxNo,string url) |
| | | public void GetBoxInfoByFuMa(string boxNo,string url,string fuMaTokenUrl,string levelType) |
| | | { |
| | | try |
| | | { |
| | |
| | | #endregion |
| | | |
| | | #region 正式版本 |
| | | var token = new Token().GetFuMaToken(fuMaTokenUrl); |
| | | var getParentVal = levelType == "1" ? "true" : "false"; |
| | | var getChildrenVal = levelType == "3" ? "true" : "false"; |
| | | Dictionary<string, string> paramDic = new Dictionary<string, string> |
| | | { |
| | | { "Token", token }, //分配的令牌(变量) |
| | | { "Barcode", boxNo },//要查询的条码 |
| | | { "getParent", getParentVal },//是否查询父码 |
| | | { "getChildren", getChildrenVal } //是否查询子码 |
| | | }; |
| | | |
| | | //程序正式发布后放开 |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | var response = HttpHelper.DoGet(url, "赋码", "获取箱码信息", paramDic); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | ////程序正式发布后放开 |
| | | //var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | ////var response = HttpHelper.DoGet(url, jsonData, "获取箱码信息", "赋码"); |
| | | //var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | //解析返回数据 |
| | | var fuMaModel = JsonConvert.DeserializeObject<FuMaGetBoxModel>(response); |
| | | if (fuMaModel.IsSuccess) |
| | | { |
| | | //赋码返回信息成功状态 |
| | | if (fuMaModel.Product == null || fuMaModel.Barcodes.Count == 0) |
| | | { |
| | | throw new Exception("产品信息或箱支信息为空"); |
| | | } |
| | | |
| | | ////解析返回数据 |
| | | //var fuMaModel = JsonConvert.DeserializeObject<FuMaGetBoxModel>(response); |
| | | //if (fuMaModel.IsSuccess) |
| | | //{ |
| | | // //赋码返回信息成功状态 |
| | | // if (fuMaModel.Product == null || fuMaModel.Barcodes.Count == 0) |
| | | // { |
| | | // throw new Exception("产品信息或箱支信息为空"); |
| | | // } |
| | | foreach (var item in fuMaModel.Barcodes) |
| | | { |
| | | if (item.Barcode != boxNo) |
| | | { |
| | | throw new Exception("获取信息不一致"); |
| | | } |
| | | |
| | | // foreach (var item in fuMaModel.Barcodes) |
| | | // { |
| | | // if (item.Barcode != boxNo) |
| | | // { |
| | | // throw new Exception("获取信息不一致"); |
| | | // } |
| | | |
| | | // var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == fuMaModel.Product.ProductCode); |
| | | // if (sku == null) |
| | | // { |
| | | // throw new Exception("未查询到箱码中的物料信息"); |
| | | // } |
| | | // //var boxInfo = new BllBoxInfo() |
| | | // //{ |
| | | // // ASNNo = "", |
| | | // // //ASNDetailNo = 0, |
| | | // // OrderCode = "", |
| | | // // //BindNo = 0, |
| | | // // BoxNo = item.BoxNo, |
| | | // // BoxNo2 = item.BoxNo2, |
| | | // // BoxNo3 = item.Barcode, |
| | | // // PalletNo = "", |
| | | // // Qty = item.Qty, |
| | | // // FullQty = item.FullQty, |
| | | // // Status = "0", |
| | | // // SkuNo = item.SkuNo, |
| | | // // SkuName = sku.SkuName, |
| | | // // LotNo = item.LotNo, |
| | | // // LotText = item.LotText, |
| | | // // SupplierLot = item.SupplierLot, |
| | | // // ProductionTime = item.ProductionTime, |
| | | // // ExpirationTime = item.ExpirationTime, |
| | | // // //CompleteTime = comTime, |
| | | // // InspectMark = item.InspectMark, |
| | | // // BitBoxMark = item.BitBoxMark, |
| | | // // InspectStatus = item.InspectStatus, |
| | | // // Origin = "赋码", |
| | | // // Standard = item.Standard, |
| | | // // PackageStandard = item.PackageStandard, |
| | | // // StoreTime = item.StoreTime, |
| | | // // QtyOrd = item.QtyOrd, |
| | | // // QtyCount = item.QtyCount, |
| | | // // CreateUser = 0, |
| | | // // CreateTime = comTime, |
| | | // //}; |
| | | // //list.Add(boxInfo); |
| | | // } |
| | | // Db.Insertable(list).ExecuteCommand(); |
| | | //} |
| | | //else |
| | | //{ |
| | | // //赋码返回信息失败状态 |
| | | // throw new Exception($"赋码系统返回状态异常:{fuMaModel.Message}"); |
| | | //} |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == fuMaModel.Product.ProductCode); |
| | | if (sku == null) |
| | | { |
| | | throw new Exception("未查询到箱码中的物料信息"); |
| | | } |
| | | var boxInfo = new BllBoxInfo() |
| | | { |
| | | ASNNo = "", |
| | | //ASNDetailNo = 0, |
| | | OrderCode = "", |
| | | //BindNo = 0, |
| | | BoxNo = item.Barcode, |
| | | BoxNo2 = item.Barcode, |
| | | BoxNo3 = item.Barcode, |
| | | PalletNo = "", |
| | | Qty = item.BoxItemQty, |
| | | FullQty = fuMaModel.BoxItemQty, |
| | | Status = "0", |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | LotNo = item.BatchNo, |
| | | //LotText = "", |
| | | //SupplierLot = item.SupplierLot, |
| | | ProductionTime = DateTime.Parse(item.ProductionDate), |
| | | ExpirationTime = DateTime.Parse(item.ExpirationDate), |
| | | //CompleteTime = comTime, |
| | | InspectMark = "0", |
| | | BitBoxMark = item.Status == "零箱"? "1":"0", |
| | | InspectStatus = "0", |
| | | Origin = "赋码", |
| | | Standard = fuMaModel.Product.Spec, |
| | | PackageStandard = fuMaModel.Product.PackageSpec, |
| | | //StoreTime = item.StoreTime, |
| | | //QtyOrd = item.QtyOrd, |
| | | //QtyCount = item.QtyCount, |
| | | CreateUser = 0, |
| | | CreateTime = comTime, |
| | | }; |
| | | list.Add(boxInfo); |
| | | } |
| | | Db.Insertable(list).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | //赋码返回信息失败状态 |
| | | throw new Exception($"赋码系统返回状态异常:{fuMaModel.Message}"); |
| | | } |
| | | #endregion |
| | | |
| | | } |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model, string url) |
| | | public List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model, string url, string fuMaTokenUrl) |
| | | { |
| | | try |
| | | { |
| | |
| | | var count = Db.Queryable<BllBoxInfo>().Count(m => m.IsDel == "0" && m.Status == "0" && m.BoxNo == model.BoxNo); |
| | | if (count == 0) |
| | | { |
| | | GetBoxInfoByFuMa(model.BoxNo, url); //从赋码系统获取箱码信息 |
| | | GetBoxInfoByFuMa(model.BoxNo, url, fuMaTokenUrl,"1"); //从赋码系统获取箱码信息 |
| | | } |
| | | } |
| | | } |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public List<BoxInfoDto> GetBindBoxInfo2s(BoxInfoVm model, string url) |
| | | public List<BoxInfoDto> GetBindBoxInfo2s(BoxInfoVm model, string url, string fuMaTokenUrl) |
| | | { |
| | | try |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | GetBoxInfoByFuMa(model.BoxNo3, url); //从赋码系统获取箱码信息 |
| | | GetBoxInfoByFuMa(model.BoxNo3, url, fuMaTokenUrl,"3"); //从赋码系统获取箱码信息 |
| | | } |
| | | } |
| | | } |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Security.Policy; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Model.InterFaceModel; |
| | | using Model.ModelDto.BllCheckDto; |
| | | using Model.ModelDto.PdaDto; |
| | | using Model.ModelDto.SysDto; |
| | | using Model.ModelVm; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using Utility.Tools; |
| | | using WMS.BLL.LogServer; |
| | | using WMS.BLL.SysServer; |
| | | using WMS.DAL; |
| | | using WMS.Entity.BllAsnEntity; |
| | | using WMS.Entity.BllCheckEntity; |
| | |
| | | } |
| | | #endregion |
| | | |
| | | #region 人工转运 |
| | | |
| | | //人工转运 |
| | | public void ArtificialTransport(string palletNo, string locatNo, string endLocatNo, string mesTokenUrl, string mesUrl,int userId) |
| | | { |
| | | if (string.IsNullOrEmpty(palletNo)) |
| | | { |
| | | throw new Exception("请扫描托盘条码!"); |
| | | } |
| | | if (string.IsNullOrEmpty(locatNo)) |
| | | { |
| | | throw new Exception("请选择起始地址!"); |
| | | } |
| | | if (string.IsNullOrEmpty(endLocatNo)) |
| | | { |
| | | throw new Exception("请输入目标地址!"); |
| | | } |
| | | |
| | | try |
| | | { |
| | | #region 判断信息 |
| | | |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.PalletNo == palletNo).ToList(); |
| | | if (stockDetail.Count == 0) |
| | | { |
| | | throw new Exception("托盘上物料库存明细信息不存在,请检查!"); |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(stockDetail.First().LocatNo)) |
| | | { |
| | | throw new Exception("托盘储位信息不存在,请检查!"); |
| | | } |
| | | if (stockDetail.First().WareHouseNo != "W02") |
| | | { |
| | | throw new Exception("该托盘未在平库内,请检查!"); |
| | | } |
| | | //起始储位信息 |
| | | var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == locatNo); |
| | | if (storageLocat == null) |
| | | { |
| | | throw new Exception("起始地址储位信息不存在,请检查!"); |
| | | } |
| | | //目标储位信息 |
| | | var EndLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == endLocatNo); |
| | | if (EndLocat == null) |
| | | { |
| | | throw new Exception("目标地址储位信息不存在,请检查!"); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | |
| | | //需先判断目标地址前方是否有空储位 |
| | | |
| | | storageLocat.Status = "0"; //更改起始储位 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | EndLocat.Status = "1"; //更改目标储位 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | var data = new List<RequertBeiliaoInfoModel>(); |
| | | |
| | | //更改库存明细 |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.LocatNo = EndLocat.LocatNo;//储位更改 |
| | | item.WareHouseNo = EndLocat.WareHouseNo;//所属仓库更改 |
| | | item.RoadwayNo = EndLocat.RoadwayNo;//所属巷道更改 |
| | | item.AreaNo = EndLocat.AreaNo;//所属区域更改 |
| | | |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | |
| | | if (EndLocat != null && EndLocat.AreaNo == "B12") //是否是3楼缓存区 是:删除库存 |
| | | { |
| | | if (string.IsNullOrWhiteSpace(item.SONo)) |
| | | { |
| | | throw new Exception("当前托盘不是拼托出库托盘"); |
| | | } |
| | | //记录托盘上信息给MES |
| | | |
| | | data.Add(new RequertBeiliaoInfoModel() |
| | | { |
| | | materiel_no = item.SkuNo, |
| | | materiel_name = item.SkuName, |
| | | qty = item.Qty, |
| | | batch = item.LotNo, |
| | | producttime = item.ProductionTime, |
| | | expiry = item.ExpirationTime |
| | | |
| | | }); |
| | | //库存箱码明细删除 |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList(); |
| | | Db.Deleteable(boxInfo).ExecuteCommand(); |
| | | //删除库存托盘信息 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | //更改库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo); |
| | | stock.LockQty -= (decimal)item.Qty; |
| | | stock.Qty -= (decimal)item.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | //更改托盘状态 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (pallet != null) |
| | | { |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | if (EndLocat != null && EndLocat.AreaNo == "B12") |
| | | { |
| | | //获取令牌 |
| | | var token = new Token().GetMesToken(mesTokenUrl); |
| | | Dictionary<string, string> mesDic = new Dictionary<string, string>() |
| | | { |
| | | {"Authorization",token } |
| | | }; |
| | | var mesData = new RequertBeiliaoModel() |
| | | { |
| | | morder_no = stockDetail.First().SONo, |
| | | pallet = stockDetail.First().PalletNo, |
| | | layer_no = EndLocat.LocatNo, |
| | | items = data |
| | | }; |
| | | var jsonData = JsonConvert.SerializeObject(mesData); |
| | | //调用接口 |
| | | var response = HttpHelper.DoPost(mesUrl, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic); |
| | | |
| | | var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据 |
| | | if (obj.status != "0") |
| | | { |
| | | throw new Exception("备料同步MES失败:" + obj.message); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV转运", palletNo, "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId); |
| | | |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 箱码查询 |
| | | /// <summary> |
| | | /// 箱码查询 |
| | |
| | | /// <returns></returns> |
| | | public List<BllQualityInspectDto> GetBllQualityList(BllQualityInspect model) |
| | | { |
| | | string str = "select q.Id Id,q.InspectNo InspectNo,q.ASNNo ASNNo,q.LotNo LotNo,q.SupplierLot SupplierLot,q.SkuNo SkuNo,q.SkuName SkuName,q.Standard Standard,q.PassQty PassQty,q.FailQty FailQty,q.Origin Origin,q.InspectTime InspectTime,q.IsOut IsOut,q.IsQualified IsQualified,q.IsDel IsDel,q.CreateTime CreateTime,u.RealName CreateUserName,q.UpdateTime UpdateTime,q.UpdateUser UpdateUserName from BllQualityInspect q left join SysUserInfor u on q.CreateUser = u.id where q.IsDel = @isdel"; |
| | | string str = "select q.Id Id,q.InspectNo InspectNo,q.ASNNo ASNNo,q.Status Status,q.LotNo LotNo,q.SupplierLot SupplierLot,q.SkuNo SkuNo,q.SkuName SkuName,q.Standard Standard,q.PassQty PassQty,q.FailQty FailQty,q.Origin Origin,q.InspectTime InspectTime,q.IsOut IsOut,q.IsQualified IsQualified,q.IsDel IsDel,q.CreateTime CreateTime,u.RealName CreateUserName,q.UpdateTime UpdateTime,q.UpdateUser UpdateUserName from BllQualityInspect q left join SysUserInfor u on q.CreateUser = u.id where q.IsDel = @isdel"; |
| | | |
| | | ////判断入库单号是否为空 |
| | | //if (!string.IsNullOrEmpty(model.ASNNo)) |
| | |
| | | |
| | | //if (quality != null) |
| | | //{ |
| | | ////判断是否为退货入库单 |
| | | //if (isTui == 1) |
| | | //{ |
| | | // if (quality.ASNNo == model.ASNNo) |
| | | // { |
| | | // throw new Exception("当前退货入库单已创建质检信息,请勿重复创建!"); |
| | | // } |
| | | //} |
| | | ////判断是否为退货入库单 |
| | | //if (isTui == 1) |
| | | //{ |
| | | // if (quality.ASNNo == model.ASNNo) |
| | | // { |
| | | // throw new Exception("当前退货入库单已创建质检信息,请勿重复创建!"); |
| | | // } |
| | | //} |
| | | // throw new Exception("当前物料和批次已进行质检,请核查!"); |
| | | //} |
| | | |
| | | ////查找同批次 同单据 入库单信息、 |
| | | //BllArrivalNoticeDetail arrivalDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.ASNNo == model.ASNNo && m.LotNo == model.LotNo); |
| | | |
| | | model.Status = "0";//审核状态 |
| | | model.Origin = "WMS"; //来源 |
| | | model.CreateTime = Db.GetDate(); //创建日期 |
| | | model.SkuNo = sku.SkuNo; //物料号 |
| | | model.SkuName = sku.SkuName; //物料名称 |
| | | model.PassQty = 0; //合格数量 |
| | | model.FailQty = 0; //不合格数量 |
| | | //model.PassQty = 0; //合格数量 |
| | | //model.FailQty = 0; //不合格数量 |
| | | model.Standard = sku.Standard; //规格 |
| | | //model.SupplierLot = arrivalDetail.SupplierLot; //供货批次 |
| | | |
| | | //查找库存明细信息 |
| | | //List<DataStockDetail> detail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == model.SkuNo && m.LotNo == model.LotNo).ToList(); |
| | | //if (isTui == 1) |
| | | //{ |
| | | // detail = detail.Where(m=> m.ASNNo == model.ASNNo).ToList(); |
| | | //} |
| | | //foreach (var item in detail) |
| | | //{ |
| | | // List<DataBoxInfo> box = Db.Queryable<DataBoxInfo>().Where(a => a.IsDel == "0" && a.StockDetailId == item.Id && a.SkuNo == model.SkuNo && a.LotNo == model.LotNo).ToList(); |
| | | // //判断合格状态是否合格 |
| | | // if (model.IsQualified == "1") |
| | | // { |
| | | // //合格 相同批次库存信息全部改为合格状态 且合格数量增加为同批次同单号该物料全部数量之和 |
| | | // model.PassQty += item.Qty; |
| | | // //修改库存明细合格状态 |
| | | // item.InspectStatus = "1"; //1合格 |
| | | // foreach (var b1 in box) |
| | | // { |
| | | // b1.InspectStatus = "1"; //1合格 |
| | | // } |
| | | // } |
| | | // else //不合格 |
| | | // { |
| | | // //不合格 相同批次、入库单库存信息全部改为不合格物料 且不合格数量增加为同批次同单号该物料全部数量之和 |
| | | // model.FailQty += item.Qty; |
| | | // item.InspectStatus = "2"; //2不合格 |
| | | // foreach (var b1 in box) |
| | | // { |
| | | // b1.InspectStatus = "2"; //2不合格 |
| | | // } |
| | | // } |
| | | // Db.Updateable(box).ExecuteCommand(); |
| | | // Db.Updateable(item).ExecuteCommand(); |
| | | //} |
| | | var isquality = Db.Insertable(model).ExecuteCommand(); |
| | | |
| | | return isquality; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 质检复核信息 |
| | | /// </summary> |
| | | /// <param name="model">质检信息实体模型</param> |
| | | /// <returns></returns> |
| | | public int FinshQuality(int id,string type,int userId) |
| | | { |
| | | //验证质检号是否为空 |
| | | if (string.IsNullOrEmpty(type)) |
| | | { |
| | | throw new Exception("状态不能为空!"); |
| | | } |
| | | var model = Db.Queryable<BllQualityInspect>().First(m=>m.IsDel == "0" && m.Id == id); |
| | | if (model == null) |
| | | { |
| | | throw new Exception("未查询到质检信息"); |
| | | } |
| | | int isTui = 0; |
| | | //验证入库单号是否为空 |
| | | if (!string.IsNullOrEmpty(model.ASNNo)) |
| | | { |
| | | //查询是否为退货入库单据 |
| | | var Arrival = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == model.ASNNo && (a.Type == "3" || a.Type == "4")); |
| | | if (Arrival == null) |
| | | { |
| | | throw new Exception("只有入库单据为退货入库单可输入入库单号,请核查!"); |
| | | } |
| | | |
| | | //获取入库单明细 |
| | | var ArrivalDetail = Db.Queryable<BllArrivalNoticeDetail>().First(a => a.IsDel == "0" && a.ASNNo == model.ASNNo && a.LotNo.Contains(model.LotNo) && a.SkuNo == model.SkuNo); |
| | | if (ArrivalDetail == null) |
| | | { |
| | | throw new Exception("输入的批次或物料信息与入库单据不符,请核查!"); |
| | | } |
| | | isTui = 1; |
| | | } |
| | | |
| | | |
| | | |
| | | model.Status = type; //规格 |
| | | model.IsQualified = type; |
| | | //model.SupplierLot = arrivalDetail.SupplierLot; //供货批次 |
| | | |
| | | //查找库存明细信息 |
| | | List<DataStockDetail> detail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == model.SkuNo && m.LotNo == model.LotNo).ToList(); |
| | | if (isTui == 1) |
| | | { |
| | | detail = detail.Where(m=> m.ASNNo == model.ASNNo).ToList(); |
| | | detail = detail.Where(m => m.ASNNo == model.ASNNo).ToList(); |
| | | } |
| | | foreach (var item in detail) |
| | | { |
| | | List<DataBoxInfo> box = Db.Queryable<DataBoxInfo>().Where(a => a.IsDel == "0" && a.StockDetailId == item.Id && a.SkuNo == model.SkuNo && a.LotNo == model.LotNo).ToList(); |
| | | //判断合格状态是否合格 |
| | | if (model.IsQualified == "1") |
| | | if (type == "1") |
| | | { |
| | | //合格 相同批次库存信息全部改为合格状态 且合格数量增加为同批次同单号该物料全部数量之和 |
| | | model.PassQty += item.Qty; |
| | |
| | | Db.Updateable(box).ExecuteCommand(); |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | var isquality = Db.Insertable(model).ExecuteCommand(); |
| | | var isquality = Db.Updateable(model).ExecuteCommand(); |
| | | |
| | | return isquality; |
| | | } |
| | |
| | | public string ASNNo {get;set;} |
| | | |
| | | /// <summary> |
| | | /// Desc:状态 0 等待审核 1 审核通过 2审核不通过 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public string Status { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:批次号 |
| | | /// Default: |
| | | /// Nullable:True |
| | |
| | | /// <returns></returns> |
| | | int InsertQuality(BllQualityInspect model); |
| | | |
| | | /// <summary> |
| | | /// 复核质检结果 |
| | | /// </summary> |
| | | /// <param name="id">ID</param> |
| | | /// <param name="type">类型 1 通过 2 不通过</param> |
| | | /// <param name="userId">操作人</param> |
| | | /// <returns></returns> |
| | | int FinshQuality(int id, string type, int userId); |
| | | #endregion |
| | | } |
| | | } |
| | |
| | | //零箱入库 |
| | | void CompleteInStockLing(PdaLingAsnVm model, int userId); |
| | | |
| | | void GetBoxInfoByFuMa(string boxNo, string url); |
| | | void GetBoxInfoByFuMa(string boxNo, string url, string fuMaTokenUrl,string levelType); |
| | | |
| | | // 根据箱码获取标签箱码信息 |
| | | List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model, string url); |
| | | List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model, string url, string fuMaTokenUrl); |
| | | // 根据箱码获取标签最小追溯码信息 |
| | | List<BoxInfoDto> GetBindBoxInfo2s(BoxInfoVm model,string url); |
| | | List<BoxInfoDto> GetBindBoxInfo2s(BoxInfoVm model,string url, string fuMaTokenUrl); |
| | | |
| | | //根据单据号获取单据明细列表 |
| | | List<ArrivalNoticeDetailDto> GetBindArrivalNoticeDetails(ArrivalNoticeVm model); |
| | |
| | | List<string> AgvTransport2(string soNo, string palletNo, string areaNo, int userId, string url); |
| | | #endregion |
| | | |
| | | #region 人工转运 |
| | | /// <summary> |
| | | /// 人工转运 |
| | | /// </summary> |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="locatNo"></param> |
| | | /// <param name="endLocatNo"></param> |
| | | /// <param name="mesTokenUrl"></param> |
| | | /// <param name="mesUrl"></param> |
| | | /// <param name="userId"></param> |
| | | void ArtificialTransport(string palletNo, string locatNo, string endLocatNo, string mesTokenUrl, string mesUrl, int userId); |
| | | #endregion |
| | | |
| | | #region 箱码查询 |
| | | /// <summary> |
| | | /// pda库存查询 |
| | |
| | | /// <param name="url">mes获取令牌路径</param> |
| | | /// <returns>token值</returns> |
| | | string GetMesToken(string url); |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取赋码的token令牌 |
| | | /// </summary> |
| | | /// <param name="url">赋码获取令牌路径</param> |
| | | /// <returns>token值</returns> |
| | | string GetFuMaToken(string url); |
| | | } |
| | | } |
| | |
| | | { |
| | | var bolls = _qualityServer.GetBllQualityList(model); |
| | | |
| | | return Ok(new { code = 0, msg = "质检信息", data = bolls }); |
| | | return Ok(new { code = 0,count = bolls.Count, msg = "质检信息", data = bolls }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 添加复核信息 |
| | | /// </summary> |
| | | /// <param name="model">质检信息实体模型</param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult InsertFuHe(BllQualityInspect model) |
| | | { |
| | | try |
| | | { |
| | | //获取当前登录的用户ID |
| | | var claimsIdentity = this.User.Identity as ClaimsIdentity; |
| | | if (claimsIdentity == null) |
| | | { |
| | | return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); |
| | | } |
| | | var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; |
| | | if (string.IsNullOrWhiteSpace(userId)) |
| | | { |
| | | return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); |
| | | } |
| | | model.CreateUser = int.Parse(userId); |
| | | _qualityServer.InsertQuality(model); |
| | | |
| | | return Ok(new { code = 0, count = 0, msg = "物料质检信息操作成功", data = "" }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | } |
| | | } |
| | |
| | | { |
| | | try |
| | | { |
| | | var models = _PdaAsnSvc.GetBindBoxInfos(model, _config.BoxHost + _config.FuMaGetBoxUrl); |
| | | var models = _PdaAsnSvc.GetBindBoxInfos(model, _config.BoxHost + _config.FuMaGetBoxUrl, _config.BoxHost + _config.FuMaGetTokenUrl); |
| | | |
| | | return Ok(new { code = 0, msg = "标签箱码信息", data = models }); |
| | | } |
| | |
| | | { |
| | | try |
| | | { |
| | | var models = _PdaAsnSvc.GetBindBoxInfo2s(model, _config.BoxHost + _config.FuMaGetBoxUrl); |
| | | var models = _PdaAsnSvc.GetBindBoxInfo2s(model, _config.BoxHost + _config.FuMaGetBoxUrl, _config.BoxHost + _config.FuMaGetTokenUrl); |
| | | |
| | | return Ok(new { code = 0, msg = "标签箱码信息", data = models }); |
| | | } |
| | |
| | | } |
| | | #endregion |
| | | |
| | | #region 人工转运 |
| | | |
| | | /// <summary> |
| | | /// 人工转运 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult ArtificialTransport(PdaArtificialTransportVm model) |
| | | { |
| | | try |
| | | { |
| | | //获取当前登录的用户ID |
| | | var claimsIdentity = this.User.Identity as ClaimsIdentity; |
| | | if (claimsIdentity == null) |
| | | { |
| | | return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); |
| | | } |
| | | var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; |
| | | if (string.IsNullOrWhiteSpace(userId)) |
| | | { |
| | | return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); |
| | | } |
| | | |
| | | var uId = int.Parse(userId); |
| | | _pdaCrSvc.ArtificialTransport(model.PalletNo, model.LocatNo, model.EndLocatNo, _config.MesHost + _config.MesGetTokenUrl,_config.MesHost+_config.MesBeiLiaoUrl, uId); |
| | | |
| | | return Ok(new { data = "", code = 0, msg = "成功" }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { data = "", code = 1, msg = $"异常:{e.Message}" }); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 箱码查询 |
| | | /// <summary> |
| | | /// pda箱码查询 |
| | |
| | | /// </summary> |
| | | public string BoxHost { get; set; } |
| | | |
| | | /// <summary> |
| | | /// AGV的IP |
| | | /// </summary> |
| | | public string AgvHost { get; set; } |
| | | |
| | | #region Erp系统 |
| | | |
| | | /// <summary> |
| | |
| | | /// 获取箱码信息 |
| | | /// </summary> |
| | | public string FuMaGetBoxUrl { get; set; } |
| | | /// <summary> |
| | | /// 获取赋码令牌路径 |
| | | /// </summary> |
| | | public string FuMaGetTokenUrl { get; set; } |
| | | |
| | | |
| | | #endregion |
| | | |
| | |
| | | "MesHost": "http://10.110.24.30:8081", //mesIP |
| | | "WcsHost": "http://10.18.52.10:5005", // "http://localhost:57061", //wcsIPhttp://localhost:57061/ |
| | | "BoxHost": "http://10.110.24.30:8081", //boxIP |
| | | "AgvHost": "http://10.110.24.30:8081", //agvIP |
| | | |
| | | // WCS |
| | | "IssueComApiUrl": "/api/demo/wcsTasks", //下发命令(出库、移库) |
| | |
| | | "MesGetTokenUrl": "/port/mes/service/system/sign_login", //获取令牌 |
| | | // 赋码 |
| | | "FuMaGetBoxUrl": "/port/mes/service/system/sign_login", //获取赋码箱码信息 |
| | | "FuMaGetTokenUrl": "/port/mes/service/system/sign_login", //获取令牌 |
| | | |
| | | // AGV |
| | | "GenAgvSchedulingTask": "http://IP:PORT/rcms/services/rest/hikRpcService/genAgvSchedulingTask", //生成任务单接口 |