zhaowc
2025-03-27 d07f25c163706ac46a83bd2c63db1e3c52715222
解决问题
30个文件已修改
1个文件已添加
1385 ■■■■ 已修改文件
HTML/views/Login.html 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/SOSetting/ExportNotice.html 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/StatisticalReport/InventoryStatistics.html 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/index.html 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/set/user/info.html 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/HouseDataSetting/agvTransport.html 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/HouseDataSetting/boxQuery.html 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/HouseDataSetting/changebox.html 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/SoSetting/SampleOut.html 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/SoSetting/materialOut.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/SoSetting/palletOut.html 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/SoSetting/pinTuoOut.html 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/SoSetting/productOut.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/InterFaceModel/HttpModel.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelVm/PdaVm/PdaSoVm.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Utility/XML/ExInfoXml.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllCheckServer/StockCheckServer.cs 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs 113 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs 145 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllQualityServer/QualityInspectServer.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/DataServer/StockServer.cs 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/SysServer/Token.cs 114 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.DAL/SysInfrastructure/MaterialsRepository.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IDataServer/IStockServer.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/DownApiController.cs 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/UpApiController.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/appsettings.json 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/Login.html
@@ -31,8 +31,11 @@
    </div>
    <div class="elight-login-box animated fadeInRight">
        <div class="elight-login-header">智慧仓储管理系统</div>
        <div class="elight-login-header">版本v1.0</div>
        <div class="elight-login-body">
            <form class="layui-form">
                <div class="layui-form-item">
                    <label class="login-icon"><i class="layui-icon">&#xe612;</i></label>
                    <input type="text" name="username" id="username" lay-verify="required" autocomplete="off"
HTML/views/SOSetting/ExportNotice.html
@@ -152,9 +152,9 @@
                                <div class="layui-input-inline" style="width: 220px;">
                                    <select name="LoadingArea" id="LoadingArea" lay-search>
                                        <option value=""></option>
                                        <option value="1">1</option>
                                        <option value="2">2</option>
                                        <option value="3">3</option>
                                        <option value="3">4</option>
                                        <option value="2">5</option>
                                        <option value="1">6</option>
                                    </select>
                                </div>
                            </div>                            
@@ -379,7 +379,7 @@
                                                </a>`;
                                    }
                                }
                                if( d.Status == '4'){
                                if( d.Status == '4' ||d.Status == '3'){
                                    html += `<a class="layui-btn layui-btn-normal layui-btn-xs guanClass" lay-event="finish"> 
                                                <i class="layui-icon layui-icon-ok"></i>关单
                                            </a>`;
@@ -899,6 +899,8 @@
                                    }    
                                    if($('#UnstackWay').val()=='1'){
                                        $('.DivPickingArea2').show()
                                        $('.LoadingArea').hide()
                                    }                                        
                                            
                                    outFunction(data.SONo)
@@ -1103,6 +1105,7 @@
                                }
                                if(isNeedUnpack == 1){
                                console.log($("#PickingArea").val())
                                if($('#UnstackWay').val()=='1'){
                                if($("#PickingArea").val() == '')
                                {
                                    layer.msg("请选择出库口", {
@@ -1111,7 +1114,7 @@
                                    });
                                    isChongFu= true;
                                    return;
                                }}
                                }}}
                                var param = {
                                    soNo: soNo, 
                                    unstackingMode:$('#UnstackWay').val(),
HTML/views/StatisticalReport/InventoryStatistics.html
@@ -219,17 +219,17 @@
                <script type="text/html" id="buttonTpl">
                      {{#  if(d.Status=='0'){ }}
                        <button class="layui-btn layui-btn-radius layui-btn-danger layui-btn-xs">待分配</button>
                        <button class="layui-btn layui-btn-radius layui-btn-normal layui-btn-xs">待分配</button>
                      {{#  } else if(d.Status == '1') { }}
                        <button class="layui-btn layui-btn-radius layui-btn-xs">部分分配</button>
                        <button class="layui-btn layui-btn-radius layui-btn-normal layui-btn-xs">部分分配</button>
                      {{#  } else if(d.Status == '2') { }}
                          <button class="layui-btn layui-btn-radius layui-btn-xs">已分配</button>
                          <button class="layui-btn layui-btn-radius layui-btn-normal layui-btn-xs">已分配</button>
                      {{#  } else if(d.Status == '3') { }}
                         <button class="layui-btn layui-btn-radius layui-btn-xs">盘点锁定</button>
                         <button class="layui-btn layui-btn-radius layui-btn-normal layui-btn-xs">盘点锁定</button>
                      {{#  } else if(d.Status == '4') { }}
                          <button class="layui-btn layui-btn-radius layui-btn-xs">移库锁定</button>
                          <button class="layui-btn layui-btn-radius layui-btn-normal layui-btn-xs">移库锁定</button>
                      {{#  } else if(d.Status == '5') { }}
                          <button class="layui-btn layui-btn-radius layui-btn-xs layui-btn-danger">异常锁定</button>
                          <button class="layui-btn layui-btn-radius layui-btn-xs layui-btn-normal">异常锁定</button>
                      {{#  } }}
                    </script>
                <script type="text/html" id="buttonTp2">
@@ -437,7 +437,7 @@
            ]];
            var DetailColsSysArr = encodeURIComponent(encodeURIComponent(JSON.stringify(DetailColsArr)))//将表头数据进行url编码
            //#endregion
            function refreshTable2(SkuNo, SkuName, OwnerNo, OwnerName, LotNo, LocatNo, PalletNo, Status, InspectStatus, HouseNo, AreaNo,CategoryNo, Type) {
            function refreshTable2(SkuNo, SkuName,OwnerNo, OwnerName, LotNo, LocatNo, PalletNo, Status, InspectStatus, HouseNo, AreaNo,CategoryNo, Type) {
                //#region 自定义表头
                var colsJson2
                var param1 = {
HTML/views/index.html
@@ -53,7 +53,7 @@
                                </cite>
                            </a>
                            <dl class="layui-nav-child">
                                <!--  <dd><a lay-href="set/user/info.html">基本资料</a></dd>-->
                                 <dd><a lay-href="set/user/info.html">基本资料</a></dd>
                                <dd><a lay-href="set/user/password.html" id="changePassword">修改密码</a></dd>
                                <hr>
                                <dd><a href="Login.html">退出</a></dd>
@@ -104,10 +104,12 @@
                        <iframe src="home/console.html" frameborder="0" class="layadmin-iframe"></iframe>
                    </div>
                </div>
                <div class="layui-footer" style="height: 20px; z-index: 999;">
                    <!-- 底部固定区域 -->
                    <p>版本v1.0</p>
                </div>
                <!--
                    <div class="layui-footer" style="height: 20px; z-index: 999;">
                        <!-- 底部固定区域 -->
                        <p>版本v1.0</p>
                    </div>
                -->
                <!-- 辅助元素,一般用于移动设备下遮罩 -->
                <div class="layadmin-body-shade" layadmin-event="shade"></div>
            </div>
HTML/views/set/user/info.html
New file
@@ -0,0 +1,109 @@
<!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">
</head>
<body>
  <div class="layui-fluid">
    <div class="layui-row layui-col-space15">
      <div class="layui-col-md12">
        <div class="layui-card">
          <div class="layui-card-header">设置我的资料</div>
          <div class="layui-card-body" pad15>
            <div class="layui-form" lay-filter="">
              <div class="layui-form-item">
                <label class="layui-form-label">我的角色</label>
                <div class="layui-input-inline">
                  <select name="role" lay-verify="">
                    <option value="1" selected>超级管理员</option>
                    <option value="2" disabled>普通管理员</option>
                    <option value="3" disabled>审核员</option>
                    <option value="4" disabled>编辑人员</option>
                  </select>
                </div>
                <div class="layui-form-mid layui-word-aux">当前角色不可更改为其它角色</div>
              </div>
              <div class="layui-form-item">
                <label class="layui-form-label">用户名</label>
                <div class="layui-input-inline">
                  <input type="text" name="username" value="xianxin" readonly class="layui-input">
                </div>
                <div class="layui-form-mid layui-word-aux">不可修改。一般用于后台登入名</div>
              </div>
              <div class="layui-form-item">
                <label class="layui-form-label">昵称</label>
                <div class="layui-input-inline">
                  <input type="text" name="nickname" value="贤心" lay-verify="nickname" autocomplete="off" placeholder="请输入昵称" class="layui-input">
                </div>
              </div>
              <div class="layui-form-item">
                <label class="layui-form-label">性别</label>
                <div class="layui-input-block">
                  <input type="radio" name="sex" value="男" title="男">
                  <input type="radio" name="sex" value="女" title="女" checked>
                </div>
              </div>
              <div class="layui-form-item">
                <label class="layui-form-label">头像</label>
                <div class="layui-input-inline">
                  <input name="avatar" lay-verify="required" id="LAY_avatarSrc" placeholder="图片地址" value="http://cdn.layui.com/avatar/168.jpg" class="layui-input">
                </div>
                <div class="layui-input-inline layui-btn-container" style="width: auto;">
                  <button type="button" class="layui-btn layui-btn-primary" id="LAY_avatarUpload">
                    <i class="layui-icon">&#xe67c;</i>上传图片
                  </button>
                  <button class="layui-btn layui-btn-primary" layadmin-event="avartatPreview">查看图片</button >
                </div>
             </div>
              <div class="layui-form-item">
                <label class="layui-form-label">手机</label>
                <div class="layui-input-inline">
                  <input type="text" name="cellphone" value="" lay-verify="phone" autocomplete="off" class="layui-input">
                </div>
              </div>
              <div class="layui-form-item">
                <label class="layui-form-label">邮箱</label>
                <div class="layui-input-inline">
                  <input type="text" name="email" value="" lay-verify="email" autocomplete="off" class="layui-input">
                </div>
              </div>
              <div class="layui-form-item layui-form-text">
                <label class="layui-form-label">备注</label>
                <div class="layui-input-block">
                  <textarea name="remarks" placeholder="请输入内容" class="layui-textarea"></textarea>
                </div>
              </div>
              <div class="layui-form-item">
                <div class="layui-input-block">
                  <button class="layui-btn" lay-submit lay-filter="setmyinfo">确认修改</button>
                  <button type="reset" class="layui-btn layui-btn-primary">重新填写</button>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <script src="../../../layuiadmin/layui/layui.js"></script>
  <script>
  layui.config({
    base: '../../../layuiadmin/' //静态资源所在路径
  }).extend({
    index: 'lib/index' //主入口模块
  }).use(['index', 'set']);
  </script>
</body>
</html>
Pda/View/HouseDataSetting/agvTransport.html
@@ -334,6 +334,15 @@
            initLanguage()
            setLanguage()
            function clear() {
                $("#Quyu").empty()
                $("#Quyu").append('<option value =>' + '</option>');
                $("#Ruku").empty()
                $("#Ruku").append('<option value =>' + '</option>');
                form.render('select');
                $('#STOCKCODE').val("");
                $('#LocatNo').val("");
            }
            //当前分页
            var curPageIndex = 1;
@@ -666,6 +675,7 @@
                                icon: 1,
                                time: 1000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () {
                                clear()
                            });
                        } else { //不成功
@@ -673,7 +683,7 @@
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () {
                                //回调
                                clear()
                            });
                        }
                    });
Pda/View/HouseDataSetting/boxQuery.html
@@ -107,7 +107,7 @@
            </div>
            <div id="" class="layout-bill-info">
                <form class="layui-form" action="" style="height: auto;">
                <form class="layui-form" action="" style="height: auto;" >
                    <div id="" class="layui-form-item layout-input" style="margin-top: 5px;">
                        <label class="layui-form-label">外箱条码</label>
                        <div class="layui-input-block">
@@ -129,49 +129,54 @@
                        </div>
                    </div>
                    <table class="layout-tbl-input" border="" cellspacing="" cellpadding="">
                    <!-- <table class="layout-tbl-input" border="" cellspacing="" cellpadding="">
                        <tr>
                            <td>
                                <div id="" class="layui-form-item layout-boxinfo">
                            <td> -->
                                <div id="" class="layui-form-item layout-input" style="margin-top: 5px;">
                                    <label class="layui-form-label" lang>进厂编号:</label>
                                    <div class="layui-input-block">
                                        <input id="LotNo" type="text" disabled placeholder="" autocomplete="off"
                                        <input id="LotNo" type="text" autocomplete="off" class="layui-input" style="border: 0px;"
                                            class="layui-input">
                                    </div>
                                </div>
                            </td>
                            <td>
                                <div id="" class="layui-form-item layout-boxinfo">
                                    <label class="layui-form-label" lang>原厂批号:</label>
                                    <div class="layui-input-block">
                                        <input id="SupplierLot" type="text" disabled placeholder="" autocomplete="off"
                                            class="layui-input">
                                    </div>
                                </div>
                            </td>
                            <!-- </td>
                        </tr>
                        <tr>
                            <td>
                                <div id="" class="layui-form-item layout-boxinfo">
                            <td> -->
                                <div id="" class="layui-form-item layout-input" style="margin-top: 5px;">
                                    <label class="layui-form-label" lang>原厂批号:</label>
                                    <div class="layui-input-block">
                                        <input id="SupplierLot" type="text" autocomplete="off" class="layui-input" style="border: 0px;"
                                            class="layui-input">
                                    </div>
                                </div>
                            <!-- </td>
                        </tr>
                        <tr>
                            <td> -->
                                <div id="" class="layui-form-item layout-input" style="margin-top: 5px;">
                                    <label class="layui-form-label" lang>箱内数量:</label>
                                    <div class="layui-input-block">
                                        <input id="Qty" type="text" disabled placeholder="" autocomplete="off"
                                        <input id="Qty" type="text" autocomplete="off" class="layui-input" style="border: 0px;"
                                            class="layui-input">
                                    </div>
                                </div>
                            </td>
                            <td>
                                <div id="" class="layui-form-item layout-boxinfo">
                            <!-- </td>
                        </tr>
                        <tr>
                            <td> -->
                                <div id="" class="layui-form-item layout-input" style="margin-top: 5px;">
                                    <label class="layui-form-label" lang>质量状态:</label>
                                    <div class="layui-input-block">
                                        <input id="InspectStatus" type="text" disabled placeholder="" autocomplete="off"
                                        <input id="InspectStatus" type="text" autocomplete="off" class="layui-input" style="border: 0px;"
                                            class="layui-input">
                                    </div>
                                </div>
                            </td>
                            <!-- </td>
                        </tr>
                    </table>
                    </table> -->
                    <div id="" class="" style="width: 100%;height: 36px;margin-top: 15px;">
Pda/View/HouseDataSetting/changebox.html
@@ -153,6 +153,8 @@
                                        </div>
                                    </div>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <div class="layui-form-item">
                                        <label class="layui-form-label" style="width: 25%">批次:</label>
@@ -163,6 +165,20 @@
                                    </div>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="3">
                                    <div class="layui-form-item">
                                        <label class="layui-form-label" style="width: 30%;">物料名称:</label>
                                        <div class="layui-input-block" style="width: 70%;margin-left:30%;">
                                            <input id="SkuName" type="text" lay-verify="" disabled placeholder=""
                                                class="layui-input" style="font-size: 12px; padding-left: 0;">
                                        </div>
                                    </div>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <div class="layui-form-item">
                                        <label class="layui-form-label" style="width: 34%;">数量:</label>
@@ -172,18 +188,6 @@
                                        </div>
                                    </div>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="3">
                                    <div class="layui-form-item">
                                        <label class="layui-form-label" style="width: 17%;">物料名称:</label>
                                        <div class="layui-input-block" style="width: 83%;margin-left:17%;">
                                            <input id="SkuName" type="text" lay-verify="" disabled placeholder=""
                                                class="layui-input" style="font-size: 12px; padding-left: 0;">
                                        </div>
                                    </div>
                                </td>
                            </tr>
                        </table>
                    </div>
Pda/View/SoSetting/SampleOut.html
@@ -987,7 +987,7 @@
                            });
                            return;
                        }
                        if($('#pickQty1').val() != "" && $('#pickQty1').val()>parseInt($('#pickQty').val())){
                        if($('#pickQty1').val() != "" && $('#pickQty1').val()>parseFloat($('#pickQty').val())){
                            layer.msg("拣货数量不能大于待拣数量!", {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
@@ -1045,7 +1045,10 @@
            function reqPickScatter() {
                canPickBox = false//回调
                if($('#pickQty1').val()!= "" && $('#pickQty1').val()!= undefined){
                    var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
                    console.log("111111111111111111"+$('#pickQty1').val());
                    var reg = /^[1-9]\d*(\.\d{1,4})?$|^0\.\d{1,4}[1-9]\d*$/;
                    if (!reg.test($("#pickQty1").val())) {
                        layer.msg("数量必须大于0(可保留4位小数)", {
                            icon: 2,
@@ -1566,8 +1569,8 @@
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }); return;
                    }            
                    let pickedQty = parseInt($('#pickedQty2').val()) //已拣数量
                    let pickQty = parseInt($('#pickQty2').val())  //拣货数量
                    let pickedQty = parseFloat($('#pickedQty2').val()) //已拣数量
                    let pickQty = parseFloat($('#pickQty2').val())  //拣货数量
                    if (pickQty <= 0) {
                        layer.msg("拣货数量需大于0", {
                            icon: 2,
@@ -1583,8 +1586,8 @@
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }); return;
                    }
                    let pickedQty = parseInt($('#pickedQty2').val()) //已拣数量
                    let pickQty = parseInt($('#pickQty2').val())  //拣货数量
                    let pickedQty = parseFloat($('#pickedQty2').val()) //已拣数量
                    let pickQty = parseFloat($('#pickQty2').val())  //拣货数量
                    if (pickQty <= 0) {
                        layer.msg("拣货数量需大于0", {
                            icon: 2,
@@ -1620,7 +1623,7 @@
            function reqPickScatter2() {
                canPickBox = false//回调
                if($('#pickQty2').val()!= "" && $('#pickQty2').val()!= undefined){
                    var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
                    var reg = /^[1-9]\d*(\.\d{1,4})?$|^0\.\d{1,4}[1-9]\d*$/;
                    if (!reg.test($("#pickQty2").val())) {
                        layer.msg("数量必须大于0(可保留4位小数)", {
                            icon: 2,
Pda/View/SoSetting/materialOut.html
@@ -669,7 +669,7 @@
                    if($.isPlainObject(boxinfo.PickNum) || pn == 0){
                        pn = boxinfo.Qty
                    }
                    let qty = parseInt($('#outScatterQty').val())
                    let qty = parseFloat($('#outScatterQty').val())
                    if(qty <= 0 || qty > pn){
                        layer.msg("拣货数量需大于0,并且不能超过待拣数量", {
                            icon: 2,
Pda/View/SoSetting/palletOut.html
@@ -100,10 +100,17 @@
                                <div class="layui-input-block" id="selectDiv">
                                    <select id="bar2" lay-filter="getbar" lay-verify="required" lay-search>
                                        <option value=""></option>
                                        <option value="001">001</option>
                                        <option value="002">002</option>
                                        <option value="001">443</option>
                                        <option value="002">440</option>
                                    </select>
                                    <!-- <img src="/assets/down_arraw.png" > -->
                                </div>
                            </div>
                            <div id="layout-boxcode" class="layui-form-item layout-input">
                                <label class="layui-form-label">地码:</label>
                                <div class="layui-input-block">
                                    <input id="LocatNo" type="text" placeholder="请扫描地码"
                                        autocomplete="off" class="layui-input">
                                </div>
                            </div>
                            <div id="" class="btn-out">
@@ -172,6 +179,7 @@
                    $("#STOCKCODE").val(""); 
                    $("#bar option[value='']").attr("selected", "selected");
                    $("#bar2 option[value='']").attr("selected", "selected");
                    $("#LocatNo").val("");
                    form.render('select');
                }
                   
@@ -252,11 +260,19 @@
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }, function() {});
                        return
                    }
                    } ;
                    if($('#LocatNo').val() == ''){
                        layer.msg("请输入地码", {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }, function() {});
                        return
                    };
                    if (isChongFu == true) {
                        isChongFu = false; 
                        var param2 = {
                            OutMode:$('#bar2').val()
                            OutMode:$('#bar2').val(),
                            OutCode:$('#LocatNo').val()
                        };
                        
                        // Int(param.Num)
@@ -264,12 +280,12 @@
                        sendData(IP + "/DownApi/IssuePlnCheckHouseWcs", param2, 'post', function(res) {
                            console.log("出库:"+JSON.stringify(res))
                            if (res.code == 0) { //成功
                                layer.msg(res.msg, {
                                layer.msg(res.Message, {
                                    icon: 1,
                                    time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                }, function() {isChongFu = true;clear();});
                            } else { //不成功
                                layer.msg(res.msg, {
                                layer.msg(res.Message, {
                                    icon: 2,
                                    time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                }, function() {isChongFu = true;clear();});
Pda/View/SoSetting/pinTuoOut.html
@@ -343,15 +343,15 @@
                                                        </div>
                                                    </div>
                                                </td>
                                                <!-- <td>
                                                 <td>
                                                    <div class="layui-form-item ">
                                                        <label class="layui-form-label lableWidth">箱内数量:</label>
                                                        <label class="layui-form-label lableWidth">托盘上数量:</label>
                                                        <div class="layui-input-block">
                                                            <input id="boxQty" class="layui-input" style="border: 0;"
                                                            <input id="palletNoqty" class="layui-input" style="border: 0;"
                                                                type="text" lay-verify="" disabled placeholder="">
                                                        </div>
                                                    </div>
                                                </td> -->
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
@@ -639,6 +639,8 @@
                $('#pickQty').val("");//待拣数量
                $('#pickedQty').val("");//已拣数量
                $('#palletNoqty').val("");//已拣数量
            }
            function clear2() {
                //物料批次
@@ -652,7 +654,7 @@
            }
            function clear4() {
                $('#boxNo').val("");//箱码
                $('#boxQty').val("");//箱内数量
                $('#boxQty').val("");//托盘上数量
            }
            //当托盘条码输入框文本改变时,检查一下托盘状态 
            $("#palletNo").on('input', function () {
@@ -879,7 +881,11 @@
                for (i = len - 1; i >= 2; i--) {
                    trs[i].remove();
                }
                console.log("LIST.LENGTH:"+list.length);
                if(list.length == 1){
                    $("#pickQty1").val(list[0].Qty)
                }
                console.log(list != null);
                console.log(list);
                if (list != null && list.length > 0) { //成功
@@ -925,9 +931,13 @@
                }
                synData(IP + "/PdaSo/GetDataComBoxInfo", param2, 'post', function (res) {
                    if (res.code == 0) {
                        tableData = deepCopy(res.data)
                        refreshTable(tableData)
                        console.log("111111111111111:"+res.data.Qty);
                        //tableData = deepCopy(res.data)
                        console.log("111111111111111:"+res.data.Qty);
                        $("#pickQty1").val(res.data.Qty)
                        refreshTable(res.data)
                    } else {
                        layer.msg(res.msg, {
                            icon: 2,
@@ -985,13 +995,14 @@
                        });
                        return;
                    }
                    if($('#pickQty1').val() != "" && $('#pickQty1').val()>parseInt($('#pickQty').val())){
                        layer.msg("拣货数量不能大于待拣数量!", {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                    //拣货数量可以超过待拣数量
                    // if($('#pickQty1').val() != "" && $('#pickQty1').val()>parseInt($('#pickQty').val())){
                    //     layer.msg("拣货数量不能大于待拣数量!", {
                    //         icon: 2,
                    //         time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    //     });
                    //     return;
                    // }
                }                
                // let boxQty = parseInt($('#boxQty').val())
                // let qty = parseInt($('#qty').val()) 
@@ -1020,7 +1031,7 @@
            //确认拣货 
            function reqPickScatter() {
                if($('#pickQty1').val()!= "" && $('#pickQty1').val()!= undefined){
                    var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
                    var reg = /^[1-9]\d*(\.\d{1,4})?$|^0\.\d{1,4}[1-9]\d*$/;
                    if (!reg.test($("#pickQty1").val())) {
                        layer.msg("数量必须大于0(可保留4位小数)", {
                            icon: 2,
@@ -1398,6 +1409,7 @@
                console.log(param2);
                synData(IP + "/PdaSo/GetAllotPlnInfo", param2, 'post', function (res) {
                    if (res.code == 0) {
                        console.log("22222222222222222:");
                        tableData2 = deepCopy(res.data)
                        refreshTable2(tableData2)
@@ -1482,8 +1494,8 @@
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    }); return;
                }            
                let pickedQty = parseInt($('#pickedQty2').val()) //已拣数量
                let pickQty = parseInt($('#pickQty2').val())  //拣货数量
                let pickedQty = parseFloat($('#pickedQty2').val()) //已拣数量
                let pickQty = parseFloat($('#pickQty2').val())  //拣货数量
                if (pickQty <= 0) {
                    layer.msg("拣货数量需大于0", {
                        icon: 2,
@@ -1509,7 +1521,7 @@
            //确认拣货 
            function reqPickScatter2() {
                if($('#pickQty2').val()!= "" && $('#pickQty2').val()!= undefined){
                    var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
                    var reg = /^[1-9]\d*(\.\d{1,4})?$|^0\.\d{1,4}[1-9]\d*$/;
                    if (!reg.test($("#pickQty2").val())) {
                        layer.msg("数量必须大于0(可保留4位小数)", {
                            icon: 2,
Pda/View/SoSetting/productOut.html
@@ -1010,7 +1010,7 @@
            //确认拣货 
            function reqPickScatter() {
                if($('#pickQty1').val()!= "" && $('#pickQty1').val()!= undefined){
                    var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
                    var reg = /^[1-9]\d*(\.\d{1,4})?$|^0\.\d{1,4}[1-9]\d*$/;
                    if (!reg.test($("#pickQty1").val())) {
                        layer.msg("数量必须大于0(可保留4位小数)", {
                            icon: 2,
@@ -1500,7 +1500,7 @@
            //确认拣货 
            function reqPickScatter2() {
                if($('#pickQty2').val()!= "" && $('#pickQty2').val()!= undefined){
                    var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
                    var reg = /^[1-9]\d*(\.\d{1,4})?$|^0\.\d{1,4}[1-9]\d*$/;
                    if (!reg.test($("#pickQty2").val())) {
                        layer.msg("数量必须大于0(可保留4位小数)", {
                            icon: 2,
Wms/Model/InterFaceModel/HttpModel.cs
@@ -1169,6 +1169,43 @@
        /// </summary>
        public string Warranty { get; set; }
    }
    public class ReLogDataModel
    {
        /// <summary>
        /// 菜单
        /// </summary>
        public string LocatNo { get; set; }
        /// <summary>
        /// 托盘号
        /// </summary>
        public string PalletNo { get; set; }
        /// <summary>
        /// 物料名称
        /// </summary>
        public string SkuName { get; set; }
        /// <summary>
        /// 操作信息
        /// </summary>
        public string Msg { get; set; }
        /// <summary>
        /// 批次
        /// </summary>
        public string LotNo { get; set; }
        /// <summary>
        /// 质量状态
        /// </summary>
        public string InspectStatus { get; set; }
        /// <summary>
        /// 库存数量
        /// </summary>
        public string Qty { get; set; }
        /// <summary>
        /// 有效期
        /// </summary>
        public string Warranty { get; set; }
    }
    #endregion
}
Wms/Model/ModelVm/PdaVm/PdaSoVm.cs
@@ -96,6 +96,10 @@
        /// 拣货口
        /// </summary>
        public string OutMode { get; set; }
        /// <summary>
        /// 拣货位
        /// </summary>
        public string OutCode { get; set; }
    }
}
Wms/Utility/XML/ExInfoXml.xml
@@ -1,5 +1,5 @@

<DataList version="1.0" encoding="utf-8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="终端接口XML Schema-3.0.xsd" SN="BZ010" Version="3.0" License="1001122">
<?xml version="1.0" encoding="utf-8"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="终端接口XML Schema-3.0.xsd" SN="BZ010" Version="3.0" License="1001122">
    <Events>
        <Event Name="SalesWareHouseOut" MainAction="WareHouseOut">
            <ActionMaping>
@@ -19,8 +19,9 @@
                <MetaData Name="Code" Type="String"/>
            </DataMaping>
            <DataField>
                <Data Code="86151950000031685740" CorpOrderID="8000363073" Actor="admin" ActDate="2025-01-10 17:09:14" DisCorpID="3" AssCorpID="" ToCorpID="16" FromPerson="admin"/>
                <Data Code="86151950000031711367" CorpOrderID="8000363073" Actor="admin" ActDate="2025-01-10 17:09:19" DisCorpID="3" AssCorpID="" ToCorpID="16" FromPerson="admin"/>
            </DataField>
        </Event>
    </Events>
</DataList>
</Document>
Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs
@@ -1073,6 +1073,7 @@
                    CustomerNo = model.Customer,
                    CustomerName = custname,
                    OrderCode = model.OrderCode,
                    Status = "0",
                };
                // 入库明细表信息
@@ -1115,10 +1116,17 @@
                        LotNo = asnDetailModel.LotNo,
                        LotText = "",
                        Qty = (decimal)asnDetailModel.Qty,
                        PackagNo = asnDetailModel.PackagNo,
                        FactQty = 0,
                        CompleteQty = 0,
                        Price = 0,
                        Money = 0,
                        IsBale = "",
                        IsBelt = "",
                        PackagNo = skuModel.PackagNo,
                        SupplierLot = asnDetailModel.SupplierLot,
                        Status = "0",
                        CreateUser = 0
                    };
                    detailModels.Add(detailModel);
@@ -1238,6 +1246,10 @@
                {
                    throw new Exception("复核失败,复核人员和关闭订单人员不能相同!");
                }
                if (date.Id == notice.CreateUser)
                {
                    throw new Exception("复核失败,复核人员和创建订单人员不能相同!");
                }
                //单据类型是 成品入库或采购入库 判断入库物料是否合格
                if (notice.Type == "0" || notice.Type == "1")
                {
@@ -1272,46 +1284,46 @@
                #region 通过接口发送至erp 或 mes
                ////系统对接后放开
                //var jsonData = JsonConvert.SerializeObject(asnInfo);
                //var mesList = new List<string>() { "0", "4" };  //0 成品入库 4余料退回入库
                //var erpList = new List<string>() { "1", "2", "3" }; //1 采购入库  2中间品入库  3 退货入库
                var jsonData = JsonConvert.SerializeObject(asnInfo);
                var mesList = new List<string>() { "0", "4" };  //0 成品入库 4余料退回入库
                var erpList = new List<string>() { "1", "2", "3" }; //1 采购入库  2中间品入库  3 退货入库
                //if (mesList.Contains(notice.Type)) // mes
                //{
                //    //获取令牌
                //    //var token = new Token().GetMesToken(mesTokenUrl); //测试不使用TOKEN,正式运行时放开
                //    var token = "";
                //    Dictionary<string, string> mesDic = new Dictionary<string, string>()
                //    {
                //        {"Authorization",token }
                //    };
                //    var mesData = new FinishAsnModel()
                //    {
                //        no = asnInfo.OrderCode,
                //        qty = asnInfo.AsnDetails.Sum(m=>m.Qty)
                //    };
                //    jsonData = JsonConvert.SerializeObject(mesData);
                //    //调用接口
                //    var response = HttpHelper.DoPost(mesUrl, jsonData, "入库单完成上传", "MES", mesDic);
                if (mesList.Contains(notice.Type)) // mes
                {
                    //获取令牌
                    //var token = new Token().GetMesToken(mesTokenUrl); //测试不使用TOKEN,正式运行时放开
                    var token = "";
                    Dictionary<string, string> mesDic = new Dictionary<string, string>()
                    {
                        {"Authorization",token }
                    };
                    var mesData = new FinishAsnModel()
                    {
                        no = asnInfo.OrderCode,
                        qty = asnInfo.AsnDetails.Sum(m => m.Qty)
                    };
                    jsonData = JsonConvert.SerializeObject(mesData);
                    //调用接口
                    var response = HttpHelper.DoPost(mesUrl, jsonData, "入库单完成上传", "MES", mesDic);
                //    var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据
                //    if (obj.status != "success")
                //    {
                //        throw new Exception("上传失败" + obj.message);
                //    }
                //}
                //else if (erpList.Contains(notice.Type)) //erp
                //{
                //    var response = HttpHelper.DoPost(erpUrl, jsonData, "入库单完成上传", "ERP");
                    var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据
                    if (obj.status != "success")
                    {
                        throw new Exception("上传失败" + obj.message);
                    }
                }
                else if (erpList.Contains(notice.Type)) //erp
                {
                    var response = HttpHelper.DoPost(erpUrl, jsonData, "入库单完成上传", "ERP");
                //    var obj = JsonConvert.DeserializeObject<ErpModel>(response);//解析返回数据
                //    if (obj.Success != 0)
                //    {
                //        throw new Exception("上传失败" + obj.Message);
                //    }
                //}
                    var obj = JsonConvert.DeserializeObject<ErpModel>(response);//解析返回数据
                    if (obj.Success != 0)
                    {
                        throw new Exception("上传失败" + obj.Message);
                    }
                }
                #endregion
                notice.Status = "4";
Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
@@ -825,6 +825,7 @@
                        }
                        if (bl3)
                        {
                            labelModel.ExpirationTime = stoTime;
                            labelModel.StoreTime = stoTime;
                        }
                        Db.Insertable(labelModel).ExecuteCommand();
@@ -1046,6 +1047,7 @@
                            }
                            if (bl3)
                            {
                                labelModel.ExpirationTime = stoTime;
                                labelModel.StoreTime = stoTime;
                            }
                            Db.Insertable(labelModel).ExecuteCommand();
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
@@ -2443,6 +2443,12 @@
                            item.UpdateUser = userId;
                        }
                    }
                    //回流入库时需要对已分配但未拣货完成托盘状态修改
                    //var exportAllot = Db.Queryable<BllExportAllot>().ToList(w=>w.PalletNo == task.PalletNo && w.Qty > w.CompleteQty && w.TaskNo == taskNo);
                    //if (exportAllot.Count != 0)
                    //{
                    //    //?????????
                    //}
                    locate.Status = "1";
                    Db.Updateable(locate).ExecuteCommand();
Wms/WMS.BLL/BllCheckServer/StockCheckServer.cs
@@ -1428,32 +1428,32 @@
                }
                //正式运行程序放开
                //if (endLocate!= null && endLocate.AreaNo == "B12")
                //{
                //    //获取令牌
                //    var token = new Token().GetMesToken(mesTokenUrl);
                //    Dictionary<string, string> mesDic = new Dictionary<string, string>()
                //    {
                //        {"Authorization",token }
                //    };
                //    var mesData = new RequertBeiliaoModel()
                //    {
                //        morder_no = stockDetail.First().SONo,
                //        pallet = stockDetail.First().PalletNo,
                //        layer_no = endLocate.LocatNo,
                //        items = data
                //    };
                //    var jsonData = JsonConvert.SerializeObject(mesData);
                //    //调用接口
                //    var response = HttpHelper.DoPost(mesUrl, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic);
                if (endLocate != null && endLocate.AreaNo == "B12")
                {
                    //获取令牌
                    var token = new Token().GetMesToken(mesTokenUrl);
                    Dictionary<string, string> mesDic = new Dictionary<string, string>()
                    {
                        {"Authorization",token }
                    };
                    var mesData = new RequertBeiliaoModel()
                    {
                        morder_no = stockDetail.First().SONo,
                        pallet = stockDetail.First().PalletNo,
                        layer_no = endLocate.LocatNo,
                        items = data
                    };
                    var jsonData = JsonConvert.SerializeObject(mesData);
                    //调用接口
                    var response = HttpHelper.DoPost(mesUrl, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic);
                //    var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据
                //    if (obj.status != "0")
                //    {
                //        throw new Exception("备料同步MES失败:" + obj.message);
                //    }
                    var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据
                    if (obj.status != "0")
                    {
                        throw new Exception("备料同步MES失败:" + obj.message);
                    }
                //}
                }
                if (userId != 0)
                {
                    //添加操作日志记录
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -1957,62 +1957,62 @@
                #region 测试版本
                //读取json文件,添加数据
                var ss = AppDomain.CurrentDomain.BaseDirectory;
                string filePath = Path.Combine(ss, "CreateBoxInfo.json");
                string json = File.ReadAllText(filePath);
                var person = JsonConvert.DeserializeObject<List<BllBoxInfo>>(json);
                ////读取json文件,添加数据
                //var ss = AppDomain.CurrentDomain.BaseDirectory;
                //string filePath = Path.Combine(ss, "CreateBoxInfo.json");
                //string json = File.ReadAllText(filePath);
                //var person = JsonConvert.DeserializeObject<List<BllBoxInfo>>(json);
                var comTime = DateTime.Now;
                //添加箱码信息表中  //暂时这些写--添加数据,后续需要和赋码系统对接后 根据明确返回的数据格式更改
                foreach (var item in person)
                {
                    if (item.BoxNo!= boxNo)
                    {
                        continue;
                    }
                ////添加箱码信息表中  //暂时这些写--添加数据,后续需要和赋码系统对接后 根据明确返回的数据格式更改
                //foreach (var item in person)
                //{
                //    if (item.BoxNo!= boxNo)
                //    {
                //        continue;
                //    }
                    var sku = Db.Queryable<SysMaterials>().First(m=>m.IsDel =="0" && m.SkuNo == item.SkuNo);
                    if (sku == null)
                    {
                        continue;
                    }
                    var boxInfo = new BllBoxInfo()
                    {
                        ASNNo = "",
                        //ASNDetailNo = 0,
                        OrderCode = "",
                        //BindNo = 0,
                        BoxNo = item.BoxNo,
                        BoxNo2 = item.BoxNo2,
                        BoxNo3 = item.BoxNo3,
                        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();
                //    var sku = Db.Queryable<SysMaterials>().First(m=>m.IsDel =="0" && m.SkuNo == item.SkuNo);
                //    if (sku == null)
                //    {
                //        continue;
                //    }
                //    var boxInfo = new BllBoxInfo()
                //    {
                //        ASNNo = "",
                //        //ASNDetailNo = 0,
                //        OrderCode = "",
                //        //BindNo = 0,
                //        BoxNo = item.BoxNo,
                //        BoxNo2 = item.BoxNo2,
                //        BoxNo3 = item.BoxNo3,
                //        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();
                #endregion
@@ -2025,7 +2025,7 @@
                    { "Token", token }, //分配的令牌(变量)
                    { "Barcode", boxNo },//要查询的条码
                    { "getParent", getParentVal },//是否查询父码
                    { "getChildren", getChildrenVal } //是否查询子码
                    { "getChildren", getChildrenVal } //是否查询子码  aaa
                };
                //程序正式发布后放开
@@ -2050,10 +2050,10 @@
                            throw new Exception("获取信息不一致");
                        }
                        var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == fuMaModel.Product.ProductCode);
                        var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == fuMaModel.MaterialNum);
                        if (sku == null)
                        {
                            throw new Exception("未查询到箱码中的物料信息");
                            throw new Exception("未查询到箱码中和赋码提供的物料信息一致的数据");
                        }
                        var boxInfo = new BllBoxInfo()
                        {
@@ -2582,6 +2582,7 @@
                    DateTime proTime;
                    DateTime expTime;
                    DateTime sortTime;
                    var bl1 = DateTime.TryParse(detail.Lot1, out proTime);
                    var bl2 = DateTime.TryParse(detail.Lot2, out expTime);
                    
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -70,11 +70,11 @@
                {
                    throw new Exception("托盘码为空,请输入托盘码");
                }
                var palletInfo = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo);
                if (!string.IsNullOrEmpty(palletInfo.WareHouseNo) && type != "1")
                {
                    throw new Exception("该托盘还未出库");
                }
                //var palletInfo = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo);
                //if (string.IsNullOrEmpty(palletInfo.WareHouseNo) && type != "1")
                //{
                //    throw new Exception("该托盘还未出库");
                //}
                if (type == "1")//平库出库获取单据
                {
                    var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "1" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList();
@@ -82,6 +82,11 @@
                }
                //获取状态为待拣货或者部分拣货的出库单
                var allotList2 = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList();
                if (allotList2.Count == 0)
                {
                    throw new Exception("此托盘已拣货或无拣货任务");
                }
                //var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList();
                //获取出库单据不为待拣货 执行完毕 订单关闭 等待执行的单据
@@ -529,6 +534,13 @@
                    {
                        throw new Exception("未在托盘表中查询到托盘信息");
                    }
                    //修改储位状态
                    var locate = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == stockDetail.LocatNo);
                    if (locate != null)
                    {
                        locate.Status = "0";
                        Db.Updateable(locate).ExecuteCommand();
                    }
                    pallet.Status = "0";
                    Db.Updateable(pallet).ExecuteCommand();
                    //修改出库单明细拣货数量
@@ -757,6 +769,13 @@
                        }
                        pallet.Status = "0";
                        Db.Updateable(pallet).ExecuteCommand();
                        //修改储位状态
                        var locate = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == stockDetail.LocatNo);
                        if (locate != null)
                        {
                            locate.Status = "0";
                            Db.Updateable(locate).ExecuteCommand();
                        }
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.CompleteQty += pickQty;
@@ -955,12 +974,19 @@
                {
                    throw new Exception("未在托盘表中查询到托盘信息");
                }
                //判断托盘上物料是否拣货完毕
                if (isDel == 0)
                {
                    pallet.Status = "0";
                    Db.Updateable(pallet).ExecuteCommand();
                }
                //修改储位状态
                var locate = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == stockDetail.LocatNo);
                if (locate != null)
                {
                    locate.Status = "0";
                    Db.Updateable(locate).ExecuteCommand();
                }
                //修改出库单明细拣货数量
@@ -2435,7 +2461,20 @@
                        throw new Exception("没有可用的空托盘");
                    }
                    StartLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13010101" || w.LocatNo == "B13020101" || w.LocatNo == "B13030101")).LocatNo;
                    EndLocate = "B15010101";
                    //校验是否为第2层拣货托盘位
                    var locate = Db.Queryable<SysStorageLocat>().First(w => w.Row == 2 && w.LocatNo == model.OutCode);
                    if (locate == null)
                    {
                        throw new Exception("请选择正确的拣货位");
                    }
                    //校验目的货位是否可用
                    var isuse = Db.Queryable<SysStorageLocat>().First(w => w.Status == "0" && w.LocatNo == model.OutCode);
                    if (locate == null)
                    {
                        throw new Exception("此拣货位状态不为空货位");
                    }
                    EndLocate = model.OutCode;
                }
                else//东侧拣货位叫空托盘
                {
@@ -2445,7 +2484,20 @@
                        throw new Exception("没有可用的空托盘");
                    }
                    StartLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13030101" || w.LocatNo == "B13040101" || w.LocatNo == "B13050101")).LocatNo;
                    EndLocate = "B15020101";
                    //校验是否为第2层拣货托盘位
                    var locate = Db.Queryable<SysStorageLocat>().First(w => w.Row == 4 && w.LocatNo == model.OutCode);
                    if (locate == null)
                    {
                        throw new Exception("请选择正确的拣货位");
                    }
                    //校验目的货位是否可用
                    var isuse = Db.Queryable<SysStorageLocat>().First(w => w.Status == "0" && w.LocatNo == model.OutCode);
                    if (locate == null)
                    {
                        throw new Exception("此拣货位状态不为空货位");
                    }
                    EndLocate = model.OutCode;
                }
                //添加出库任务
@@ -3213,6 +3265,13 @@
                        }
                        pallet.Status = "0";
                        Db.Updateable(pallet).ExecuteCommand();
                        //修改储位状态
                        var locate = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == stockDetail.LocatNo);
                        if (locate != null)
                        {
                            locate.Status = "0";
                            Db.Updateable(locate).ExecuteCommand();
                        }
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.Qty += pickQty;
@@ -3493,6 +3552,13 @@
                        }
                        pallet.Status = "0";
                        Db.Updateable(pallet).ExecuteCommand();
                        //修改储位状态
                        var locate = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == stockDetail.LocatNo);
                        if (locate != null)
                        {
                            locate.Status = "0";
                            Db.Updateable(locate).ExecuteCommand();
                        }
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.CompleteQty += pickQty;
@@ -3779,6 +3845,13 @@
                        pallet.Status = "0";
                        Db.Updateable(pallet).ExecuteCommand();
                    }
                    //修改储位状态
                    var locate = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == stockDetail.LocatNo);
                    if (locate != null)
                    {
                        locate.Status = "0";
                        Db.Updateable(locate).ExecuteCommand();
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.Qty += decimal.Parse(PickQty);
@@ -3962,6 +4035,13 @@
                    {
                        pallet.Status = "0";
                        Db.Updateable(pallet).ExecuteCommand();
                    }
                    //修改储位状态
                    var locate = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == stockDetail.LocatNo);
                    if (locate != null)
                    {
                        locate.Status = "0";
                        Db.Updateable(locate).ExecuteCommand();
                    }
                    //修改出库单明细拣货数量
@@ -4207,6 +4287,7 @@
                            LotNo = allot.LotNo,
                            LotText = allot.LotText,
                            SupplierLot = allot.SupplierLot,
                            SkuNo = allot.SkuNo,
                            SkuName = allot.SkuName,
                            Standard = allot.Standard,
@@ -4303,10 +4384,10 @@
                            throw new Exception("该托盘与箱码没有绑定关系");
                        }
                        var boxQty = boxInfos.First().Qty;
                        if (boxQty > needQty)
                        {
                            throw new Exception("拣货数量不能大于剩余待拣数量");
                        }
                        //if (boxQty > needQty)
                        //{
                        //    throw new Exception("拣货数量不能大于剩余待拣数量");
                        //}
                        foreach (var item in boxInfos)
                        {
@@ -4329,10 +4410,10 @@
                        {
                            throw new Exception("拣货数量不能大于箱内数量");
                        }
                        if (decimal.Parse(pickQty1) > needQty)
                        {
                            throw new Exception("拣货数量不能大于剩余待拣数量");
                        }
                        //if (decimal.Parse(pickQty1) > needQty)
                        //{
                        //    throw new Exception("拣货数量不能大于剩余待拣数量");
                        //}
                        biaoShi = "2";
                    }
@@ -4347,10 +4428,10 @@
                            throw new Exception("该托盘与箱码没有绑定关系");
                        }
                        var boxQty = boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList();
                        if (boxQty[0] > needQty)
                        {
                            throw new Exception("拣货数量不能大于箱内剩余待拣数量");
                        }
                        //if (boxQty[0] > needQty)
                        //{
                        //    throw new Exception("拣货数量不能大于箱内剩余待拣数量");
                        //}
                        foreach (var item in boxInfos)
                        {
@@ -4448,6 +4529,7 @@
                                        SkuName = item.SkuName,
                                        Standard = item.Standard,
                                        ProductionTime = item.ProductionTime,
                                        ExpirationTime = item.ExpirationTime,
                                        SupplierLot = item.SupplierLot,
                                        InspectMark = item.InspectMark,
                                        BitBoxMark = "1",
@@ -4537,6 +4619,14 @@
                        }
                        pallet.Status = "0";
                        Db.Updateable(pallet).ExecuteCommand();
                        //修改储位状态
                        var locate = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == stockDetail.LocatNo);
                        if (locate != null)
                        {
                            locate.Status = "0";
                            Db.Updateable(locate).ExecuteCommand();
                        }
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.CompleteQty += pickQty;
@@ -4646,10 +4736,10 @@
                }
                //剩余拣货数量(待拣减去已拣)
                var needQty = allot.Qty - allot.CompleteQty;
                if (decimal.Parse(PickQty) > needQty)
                {
                    throw new Exception("拣货数量不能大于托内剩余待拣数量");
                }
                //if (decimal.Parse(PickQty) > needQty)
                //{
                //    throw new Exception("拣货数量不能大于托内剩余待拣数量");
                //}
                //库存明细
                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId);
@@ -4874,6 +4964,13 @@
                    pallet.Status = "0";
                    Db.Updateable(pallet).ExecuteCommand();
                    //修改储位状态
                    var locate = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == stockDetail.LocatNo);
                    if (locate != null)
                    {
                        locate.Status = "0";
                        Db.Updateable(locate).ExecuteCommand();
                    }
                }
                //修改出库单明细拣货数量
Wms/WMS.BLL/BllQualityServer/QualityInspectServer.cs
@@ -107,6 +107,12 @@
            {
                throw new Exception("批次号不可为空,请核查!");
            }
            //验证批次号是否为当前库存中已有批次
            var lot = Db.Queryable<DataStock>().Where(w => w.LotNo == model.LotNo).ToList();
            if (lot.Count == 0)
            {
                throw new Exception("当前库存中无此批号,请核查!");
            }
            int isTui = 0;
            //验证入库单号是否为空
            if (!string.IsNullOrEmpty(model.ASNNo))
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -1283,8 +1283,7 @@
                                throw new Exception("当前单据明细中计划数量与拣货数量不符,请核实");
                            }
                        }
                        if (d.Qty < d.CompleteQty)
                        {
                            //更改库存明细锁定数量
                            var allotList = Db.Queryable<BllExportAllot>().Where(o => o.SODetailNo == d.Id && o.Status == "3" && o.IsDel == "0").ToList();
                            foreach (var o in allotList)
@@ -1335,7 +1334,7 @@
                                Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                            }
                            #endregion
                        }
                    }
                    //添加操作日志记录
@@ -1707,8 +1706,8 @@
                {
                    throw new Exception($"未找到{soNo}出库单信息");
                }
                //所有要出库的出库分配信息(未下发的信息和待拣货的信息)
                var list = Db.Queryable<BllExportAllot>().Where(a => a.IsDel == "0" && a.SONo == soNo && a.Status == "0").ToList();
                //所有要出库的出库分配信息(未下发的信息和待拣货的信息和部分拣货后回流入库的托盘)
                var list = Db.Queryable<BllExportAllot>().Where(a => a.IsDel == "0" && a.SONo == soNo && (a.Status == "0" || a.Status == "3")).ToList();
                if (list.Count == 0) //判断是否有需要下发的出库流水
                {
                    throw new Exception("当前出库单据无需要下发的托盘");
@@ -2427,11 +2426,11 @@
                                if (outLine == "443")//西侧出库
                                {
                                    positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 1 && m.Status == "0" && m.Flag == "0").LocatNo; //西侧房间库位和对面房间
                                    positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 1 && m.Status == "0" && m.Flag == "0").LocatNo; //西侧房间库位
                                }
                                else if (outLine == "440")  //东侧出库
                                {
                                    positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 2  && m.Status == "0" && m.Flag == "0").LocatNo; //东侧房间库位
                                    positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 3  && m.Status == "0" && m.Flag == "0").LocatNo; //东侧房间库位和对面房间
                                }
                            }
                            else if (type1.Type == "2" || type1.Type == "3") //抽检出库 /取样出库
@@ -2441,7 +2440,7 @@
                            else if (type1.Type == "4")//不合格品出库
                            {
                                positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m => m.LocatNo).First(m => m.AreaNo == "B03" && m.Status == "0" && m.Flag == "0").LocatNo;
                                positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m => m.LocatNo).First(m => (m.AreaNo == "B01"|| m.AreaNo == "B02"||m.AreaNo == "B04") && m.Status == "0" && m.Flag == "0").LocatNo;
                            }
                            else //其他单据类型都存放发货缓存区
                            {
@@ -2669,8 +2668,9 @@
                    StartLocate = locateNo, // 起始位置
                    StartRoadway = locate.RoadwayNo,
                    EndLocate = task.EndLocat, // 目标位置 
                    EndRoadway = task.EndRoadway,
                    TaskNo = task.TaskNo, // 任务号
                    TaskType = "1",// 任务类型 (出库)
                    TaskType = task.Type,// 任务类型 (出库)
                    OutMode = "",  //目标地址
                    Order = 1
                }; //出库数据 
Wms/WMS.BLL/DataServer/StockServer.cs
@@ -9,6 +9,7 @@
using Model.InterFaceModel;
using Model.ModelDto;
using Model.ModelDto.DataDto;
using Model.ModelDto.LogDto;
using Model.ModelDto.SysDto;
using Model.ModelVm.DataVm;
using Newtonsoft.Json;
@@ -1101,7 +1102,10 @@
                }
                #endregion
                palletNo.IsCancel = 0;
                palletNo.IsSend = 0;
                palletNo.IsFinish = 0;
                Db.Updateable(palletNo).ExecuteCommand();
                Db.CommitTran();
@@ -1353,12 +1357,12 @@
                        }
                    }
                }
                else
                else
                {
                    storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取起始库位信息
                    if (storageStart == null)
                    {
                        throw new Exception("未找到相应的起始库位");
                        isstock = 2; //库口到缓存位任务
                    }
                }
                //var soAllot = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.PalletNo == palletNo.PalletNo);//获取分配信息
@@ -1377,13 +1381,13 @@
                if (isstock == 1)
                {
                    startLocat = Db.Queryable<SysStorageLocat>().First(w=> w.IsDel == "0" && w.LocatNo == palletNo.StartLocat);
                    startLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat);
                    //修改起始库位状态
                    startLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 
                    Db.Updateable(startLocat).ExecuteCommand();
                    //调用MES备料反馈完成接口
                    #region  MES备料完成反馈
                    #region
                    var data = new List<RequertBeiliaoInfoModel>();
                    //更改库存明细
@@ -1472,7 +1476,7 @@
                            case "1":
                                endlono = "Y003_0" + endLocat.LocatNo.ToString().Substring(5, 2);
                                break;
                        }
                        var mescode = Db.Queryable<BllExportNotice>().Where(w => w.SONo == stockDetail.First().SONo).First();
                        var mesData = new RequertBeiliaoModel()
@@ -1495,7 +1499,7 @@
                    }
                    #endregion
                }
                else  //空托盘处理
                else if (isstock == 0)
                {
                    //修改组托信息
                    if (bindDetail.WareHouseNo == "W01") //1、空托盘垛到空托盘收集器;
@@ -1524,7 +1528,25 @@
                        }
                    }
                    Db.Updateable(bindDetail).ExecuteCommand();
                }
                else //库口移库到缓存位
                {
                    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();
                    }
                }
                palletNo.IsCancel = 0;
                palletNo.IsSend = 0;
                palletNo.IsFinish = 0;
                Db.Updateable(palletNo).ExecuteCommand();
                Db.CommitTran();
            }
            catch (Exception ex)
@@ -1535,7 +1557,7 @@
        }
        #endregion
        #region 数字孪生系统获取库存信息
        #region 数字孪生系统反馈信息
        /// <summary>
        /// 反馈数字孪生系统库存信息
@@ -1583,6 +1605,170 @@
                throw new Exception("返回库存信息有误,错误信息:" + ex);
            }
        }
        /// <summary>
        /// 反馈数字孪生系统操作信息
        /// </summary>
        /// <param name=""></param>
        /// <returns></returns>
        public List<ReLogDataModel> GetLogDataList()
        {
            try
            {
                //库存信息
                var stockDetailsList = Db.Queryable<DataStockDetail>().ToList();
                var sql = "select LocatNo,PalletNo,SkuName,Standard,LotNo,InspectStatus,Qty,ExpirationTime as Warranty from DataStockDetail ";
                var item2 = Expressionable.Create<LogOperationSO>()
                   .And(it => it.IsDel == "0")
                   .ToExpression();//注意 这一句 不能少
                var list2 = Db.Queryable<LogOperationSO>().Where(item2)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                List<ReLogDataModel> list = Db.Ado.SqlQuery<ReLogDataModel>(sql);
                return list;
            }
            catch (Exception ex)
            {
                throw new Exception("返回库存信息有误,错误信息:" + ex);
            }
        }
        /// <summary>
        /// 查询操作日志
        /// </summary>
        /// <param name="menuName">菜单名称</param>
        /// <param name="type">类型</param>
        /// <returns></returns>
        public List<OperationDto> ReLogData()
        {
            try
            {
                var total = 0;
                #region asn
                var item = Expressionable.Create<LogOperationASN>()
                    .And(it => it.IsDel == "0")
                    .ToExpression();//注意 这一句 不能少
                var list = Db.Queryable<LogOperationASN>().Where(item)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                #region so
                var item2 = Expressionable.Create<LogOperationSO>()
                   .And(it => it.IsDel == "0")
                   .ToExpression();//注意 这一句 不能少
                var list2 = Db.Queryable<LogOperationSO>().Where(item2)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                #region cr
                var item3 = Expressionable.Create<LogOperationCR>()
                    .And(it => it.IsDel == "0")
                    .ToExpression();//注意 这一句 不能少
                var list3 = Db.Queryable<LogOperationCR>().Where(item3)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                #region sys
                var item4 = Expressionable.Create<LogOperationSys>()
                    .ToExpression();//注意 这一句 不能少
                var list4 = Db.Queryable<LogOperationSys>().Where(item4)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                var data = Db.UnionAll(list, list2, list3, list4).OrderByDescending(it => it.CreateTime);
                return data.OrderByDescending(m => m.CreateTime).ToList();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        #endregion
    }
}
Wms/WMS.BLL/SysServer/Token.cs
@@ -125,70 +125,70 @@
                    str = sysToken.Token;
                    return str;  //返回token值
                }
                return str;
                //#region 获取新的令牌
                ////对接时更改路径
                //var user = MesConfig.MesUser;
                //var pass = MesConfig.MesPassWord;
                //var secretKey = Md5Tools.CalcMd5(pass);
                //var nonce = Guid.NewGuid().ToString("N");
                //var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds().ToString();
                //return str;
                #region 获取新的令牌
                //对接时更改路径
                var user = MesConfig.MesUser;
                var pass = MesConfig.MesPassWord;
                var secretKey = Md5Tools.CalcMd5(pass);
                var nonce = Guid.NewGuid().ToString("N");
                var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds().ToString();
                //var info = new string[] { user, secretKey, nonce, timestamp };
                //Array.Sort(info, string.CompareOrdinal); //ASCII排序
                //var miyao = string.Join("", info); //数组转换成字符串
                //var sign = Md5Tools.CalcMd5(miyao);  //签名
                var info = new string[] { user, secretKey, nonce, timestamp };
                Array.Sort(info, string.CompareOrdinal); //ASCII排序
                var miyao = string.Join("", info); //数组转换成字符串
                var sign = Md5Tools.CalcMd5(miyao);  //签名
                //var data = new
                //{
                //    user = user,
                //    nonce = nonce,
                //    timestamp = timestamp,
                //    sign = sign,
                //    jwt = true,      //是否返回JWT令牌
                //};
                //#endregion
                var data = new
                {
                    user = user,
                    nonce = nonce,
                    timestamp = timestamp,
                    sign = sign,
                    jwt = true,      //是否返回JWT令牌
                };
                #endregion
                //#region 通过接口发送至赋码
                ////系统对接后放开
                //var jsonData = JsonConvert.SerializeObject(data);
                #region 通过接口发送至赋码
                //系统对接后放开
                var jsonData = JsonConvert.SerializeObject(data);
                //var response = HttpHelper.DoPost(url, jsonData, "FuMa申请获取令牌", "Fuma");
                var response = HttpHelper.DoPost(url, jsonData, "FuMa申请获取令牌", "Fuma");
                //var obj = JsonConvert.DeserializeObject<MesTokenModel>(response);//解析返回数据
                var obj = JsonConvert.DeserializeObject<MesTokenModel>(response);//解析返回数据
                //if (obj.status != "success")
                //{
                //    throw new Exception("上传失败" + obj.message);
                //}
                //else
                //{
                //    var token = obj.Data.token;
                //    var expireTime = obj.Data.expire_time;
                //    var time = DateTime.Now.AddMilliseconds(double.Parse(expireTime));
                //    if (sysToken == null)//添加
                //    {
                //        var addToken = new SysToken()
                //        {
                //            SystemName = "MES",
                //            Token = token,
                //            ExpireTime = time,
                //            CreateUser = 0
                //        };
                //        Db.Insertable(addToken).ExecuteCommand();
                //        return token;
                //    }
                //    else //修改
                //    {
                //        sysToken.Token = token;
                //        sysToken.ExpireTime = time;
                //        sysToken.UpdateTime = DateTime.Now;
                //        Db.Updateable(sysToken).ExecuteCommand();
                //        return token;
                //    }
                //}
                if (obj.status != "success")
                {
                    throw new Exception("上传失败" + obj.message);
                }
                else
                {
                    var token = obj.Data.token;
                    var expireTime = obj.Data.expire_time;
                    var time = DateTime.Now.AddMilliseconds(double.Parse(expireTime));
                    if (sysToken == null)//添加
                    {
                        var addToken = new SysToken()
                        {
                            SystemName = "MES",
                            Token = token,
                            ExpireTime = time,
                            CreateUser = 0
                        };
                        Db.Insertable(addToken).ExecuteCommand();
                        return token;
                    }
                    else //修改
                    {
                        sysToken.Token = token;
                        sysToken.ExpireTime = time;
                        sysToken.UpdateTime = DateTime.Now;
                        Db.Updateable(sysToken).ExecuteCommand();
                        return token;
                    }
                }
                //#endregion
                #endregion
            }
            catch (Exception)
            {
Wms/WMS.DAL/SysInfrastructure/MaterialsRepository.cs
@@ -35,7 +35,7 @@
        /// <returns></returns>
        public List<MaterialsDto> GetMateList(string skuNo, string skuName, string auditStatusNo, string type, string isControlled, string isInspect, string environment, string categoryNo)
        {
            string str = "select mate.*,user1.RealName CreateUserName,pack.PackagName PackagName,unit.UnitName UnitName,matec.CategoryName from SysMaterials mate left join SysUserInfor user1 on mate.CreateUser = user1.Id left join SysPackag pack on mate.PackagNo = pack.PackagNo left join SysUnit unit on mate.UnitNo = unit.UnitNo left join SysMaterialCategory matec on mate.CategoryNo = matec.CategoryNo where mate.IsDel = @isdel";
            string str = "select mate.*,user1.RealName CreateUserName,pack.PackagName PackagName,unit.UnitName UnitName,matec.CategoryName from SysMaterials mate left join SysUserInfor user1 on mate.CreateUser = user1.Id left join SysPackag pack on mate.PackagNo = pack.PackagNo left join SysUnit unit on mate.UnitNo = unit.UnitNo left join SysMaterialCategory matec on mate.CategoryNo = matec.CategoryNo where mate.IsDel = @isdel and pack.IsDel = @isdel";
            //判断物料编码
            if (!string.IsNullOrEmpty(skuNo))
            {
Wms/WMS.IBLL/IDataServer/IStockServer.cs
@@ -1,5 +1,6 @@
using Model.InterFaceModel;
using Model.ModelDto.DataDto;
using Model.ModelDto.LogDto;
using System;
using System.Collections.Generic;
using System.Text;
@@ -151,5 +152,19 @@
        /// <param name="model"></param>
        /// <returns></returns>
        List<ReLocateDataModel> GetLocateList();
        /// <summary>
        /// 反馈数字孪生操作信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        List<ReLogDataModel> GetLogDataList();
        /// <summary>
        /// 反馈数字孪生操作信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        List<OperationDto> ReLogData();
    }
}
Wms/Wms/Controllers/DownApiController.cs
@@ -37,6 +37,7 @@
        private readonly IPdaAsnServer _paAsnSvc;//空托跺绑定
        private readonly IStockServer _stockSvc;//AGV任务完成箅
        private readonly IPdaCrServer _pdaCrServer; // PDA任务调度
        private static readonly object OLock = new object();
        public DownApiController(IOptions<ApiUrlConfig> setting, IExportNoticeServer exNoticeSvc, IPalletBindServer asnPalletBindSvc, IStockCheckServer crCheckSvc, ITaskServer taskSvc, IPdaSoServer pdaSoSvc,IPdaAsnServer paAsnSvc,IStockServer stockSvc,IPdaCrServer pdaCrServer)
        {
@@ -219,45 +220,47 @@
        [HttpPost]
        public IActionResult RequestRoadWay(RequestLocate model)
        {
            var logStr = "";
            lock (OLock) {
                var logStr = "";
            logStr = $@".\log\WCS\WCS申请巷道" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
                logStr = $@".\log\WCS\WCS申请巷道" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
            {
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"WCS申请巷道:( {jsonData} ),", logStr);
                if (model.TaskModel == "1")
                try
                {
                    var list = _asnPalletBindSvc.RequestRoadWayModel(model.PalletNo, model.HouseNo);
                    LogFile.SaveLogToFile($"WCS申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                    var jsonData = JsonConvert.SerializeObject(model);
                    LogFile.SaveLogToFile($"WCS申请巷道:( {jsonData} ),", logStr);
                    if (model.TaskModel == "1")
                    {
                        var list = _asnPalletBindSvc.RequestRoadWayModel(model.PalletNo, model.HouseNo);
                        LogFile.SaveLogToFile($"WCS申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                        new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo,
                            "申请巷道", $"申请巷道托盘号:{model.PalletNo}的成功信息", 2);
                        return Ok(new { Success = 0, Message = "申请巷道成功", TaskList = list });
                    }
                    else
                    {
                        var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, model.HouseNo);
                        LogFile.SaveLogToFile($"WCS申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                        new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8),
                            "申请巷道", $"申请巷道托盘号:{model.PalletNo.Substring(0, 8)}的成功信息", 2);
                        return Ok(new { Success = 0, Message = "申请巷道成功", TaskList = list });
                    }
                }
                catch (Exception e)
                {
                    LogFile.SaveLogToFile($"WCS申请巷道返回:( {e.Message} ),", logStr);
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo,
                        "申请巷道", $"申请巷道托盘号:{model.PalletNo}的成功信息", 2);
                        "申请巷道", $"申请巷道托盘号:{model.PalletNo}的失败信息", 2);
                    return Ok(new { Success = 0, Message = "申请巷道成功", TaskList = list });
                    return Ok(new ErpModel { Success = -1, Message = e.Message });
                }
                else
                {
                    var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, model.HouseNo);
                    LogFile.SaveLogToFile($"WCS申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8),
                        "申请巷道", $"申请巷道托盘号:{model.PalletNo.Substring(0, 8)}的成功信息", 2);
                    return Ok(new { Success = 0, Message = "申请巷道成功", TaskList = list });
                }
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"WCS申请巷道返回:( {e.Message} ),", logStr);
                new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo,
                    "申请巷道", $"申请巷道托盘号:{model.PalletNo}的失败信息", 2);
                return Ok(new ErpModel { Success = -1, Message = e.Message });
            }
        }
@@ -284,65 +287,68 @@
            //}
            //string palletno = model.PalletNo;
            var logStr = "";
            if (model.PalletNo.Length == 9)
            lock (OLock)
            {
                logStr = $@".\log\WCS\WMS申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            }
            else if (model.PalletNo.Length == 8)
            {
                logStr = $@".\log\WCS\WCS申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            }
            try
            {
                var logStr = "";
                if (model.PalletNo.Length == 9)
                {
                    var jsonData = JsonConvert.SerializeObject(model);
                    LogFile.SaveLogToFile($"WMS申请储位:( {jsonData} ),", logStr);
                    logStr = $@".\log\WCS\WMS申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
                }
                else if (model.PalletNo.Length == 8)
                {
                    var jsonData = JsonConvert.SerializeObject(model);
                    LogFile.SaveLogToFile($"WCS申请储位:( {jsonData} ),", logStr);
                    logStr = $@".\log\WCS\WCS申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
                }
                }
                string pallet = model.PalletNo.Substring(0, 8);
                OutCommandDto list;
                if (model.TaskModel == "1")
                try
                {
                    list = _asnPalletBindSvc.RequestLocationModel(pallet, model.HouseNo, model.RoadwayNo);
                }
                else
                {
                    list = _asnPalletBindSvc.RequestLocation(pallet, model.HouseNo, model.RoadwayNo);
                }
                    if (model.PalletNo.Length == 9)
                    {
                        var jsonData = JsonConvert.SerializeObject(model);
                        LogFile.SaveLogToFile($"WMS申请储位:( {jsonData} ),", logStr);
                    }
                    else if (model.PalletNo.Length == 8)
                    {
                        var jsonData = JsonConvert.SerializeObject(model);
                        LogFile.SaveLogToFile($"WCS申请储位:( {jsonData} ),", logStr);
                    }
                    string pallet = model.PalletNo.Substring(0, 8);
                    OutCommandDto list;
                    if (model.TaskModel == "1")
                    {
                        list = _asnPalletBindSvc.RequestLocationModel(pallet, model.HouseNo, model.RoadwayNo);
                    }
                    else
                    {
                        list = _asnPalletBindSvc.RequestLocation(pallet, model.HouseNo, model.RoadwayNo);
                    }
                
                if (model.PalletNo.Length == 9)
                {
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0, 8)}的成功信息", 2);// int.Parse(userId)
                    LogFile.SaveLogToFile($"WMS申请储位成功:( {JsonConvert.SerializeObject(list)} ),", logStr);
                }
                else if (model.PalletNo.Length == 8)
                {
                    LogFile.SaveLogToFile($"WCS申请储位返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                }
                    if (model.PalletNo.Length == 9)
                    {
                        new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0, 8)}的成功信息", 2);// int.Parse(userId)
                        LogFile.SaveLogToFile($"WMS申请储位成功:( {JsonConvert.SerializeObject(list)} ),", logStr);
                    }
                    else if (model.PalletNo.Length == 8)
                    {
                        LogFile.SaveLogToFile($"WCS申请储位返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                    }
                
                return Ok(new { Success = 0, Message = "申请储位成功", TaskList = list });
            }
            catch (Exception e)
            {
                if (model.PalletNo.Length == 9)
                {
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0, 8)}的失败信息", 2);//int.Parse(userId)
                    LogFile.SaveLogToFile($"WMS申请储位失败返回:( {e.Message} ),", logStr);
                    return Ok(new { Success = 0, Message = "申请储位成功", TaskList = list });
                }
                else if (model.PalletNo.Length == 8)
                catch (Exception e)
                {
                    LogFile.SaveLogToFile($"WCS申请储位返回:( {e.Message} ),", logStr);
                }
                    if (model.PalletNo.Length == 9)
                    {
                        new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0, 8)}的失败信息", 2);//int.Parse(userId)
                        LogFile.SaveLogToFile($"WMS申请储位失败返回:( {e.Message} ),", logStr);
                    }
                    else if (model.PalletNo.Length == 8)
                    {
                        LogFile.SaveLogToFile($"WCS申请储位返回:( {e.Message} ),", logStr);
                    }
                return Ok(new ErpModel { Success = -1, Message = e.Message });
                    return Ok(new ErpModel { Success = -1, Message = e.Message });
                }
            }
        }
@@ -555,6 +561,8 @@
        public IActionResult BindPlnInHouseWcs(PalletsBind model)
        {
            var logStr = $@".\log\WCS\WCS又叠托机申请空托入库" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            var jsonData = JsonConvert.SerializeObject(model);
            LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
            try
            {
                var strMsg = _paAsnSvc.BindNullPallets(model);
@@ -579,6 +587,8 @@
        public IActionResult IssuePlnOutHouseWcs(OutModePalletVm model)
        {
            var logStr = $@".\log\WCS\WCS申请空托出库" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            var jsonData = JsonConvert.SerializeObject(model);
            LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
            try
            {
                List<OutCommandDto> _list = _pdaSoSvc.IssuePlnOutHouseWcs(model,0);
@@ -603,6 +613,8 @@
        public IActionResult IssuePlnCheckHouseWcs(CheckModePalletVm model)
        {
            var logStr = $@".\log\WCS\WMS拣货申请空托出库" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            var jsonData = JsonConvert.SerializeObject(model);
            LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
            try
            {
                string list = _pdaSoSvc.IssuePlnCehckHouseWcs(model, 0,_config.AgvHost+_config.GenAgvSchedulingTask);
@@ -627,6 +639,8 @@
        public IActionResult RequestPackWcs(RequesIsBale model)
        {
            var logStr = $@".\log\WCS\WCS申请缠膜拆膜" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            var jsonData = JsonConvert.SerializeObject(model);
            LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
            try
            {
               int t = _asnPalletBindSvc.RequestPackWcs(model.PalletNo);
@@ -652,6 +666,8 @@
        public IActionResult RequestUnPackWcs(RequesIsBale model)
        {
            var logStr = $@".\log\WCS\WCS申请缠膜拆膜" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            var jsonData = JsonConvert.SerializeObject(model);
            LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
            try
            {
                int t = _asnPalletBindSvc.RequestUnPackWcs(model.PalletNo);
@@ -676,6 +692,8 @@
        public IActionResult RequestPackedWcs(RequesIsBale model)
        {
            var logStr = $@".\log\WCS\WCS申请缠膜拆膜" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            var jsonData = JsonConvert.SerializeObject(model);
            LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
            try
            {
                int t = _asnPalletBindSvc.RequestPackedWcs(model.PalletNo);
@@ -736,6 +754,8 @@
        public IActionResult ResultBoxInfoCheckWcs(BoxInfoCheck model)
        {
            var logStr = $@".\log\WCS\WCS申请拆垛托盘信息" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            var jsonData = JsonConvert.SerializeObject(model);
            LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
            try
            {
                RequestBoxInfoCheck list = _exNoticeSvc.BoxInfoCheckWcs(model);
@@ -761,17 +781,19 @@
        public IActionResult ResultBoxInfoExportWcs(BoxInfoCheck model)
        {
            var logStr = $@".\log\WCS\WCS申请成品箱码拆垛拣货信息" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            var jsonData = JsonConvert.SerializeObject(model);
            LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
            try
            {
                //返回出库分拣装车口
                var list = _exNoticeSvc.BoxInfoExportWcs(model.BoxNo);
                return Ok(new { Success = "1", Message = "成品箱码拆垛拣货成功", loadubgAddre = list });
                return Ok(new { Success = "1", Message = "成品箱码拆垛拣货成功", loadingAddre = list });
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"WCS申请成品箱码拆垛拣货异常返回:( {e.Message} ),", logStr);
                return Ok(new  { Success = "-1", Message = e.Message, loadubgAddre ="" });
                return Ok(new  { Success = "-1", Message = e.Message, loadingAddre = "" });
            }
        }
Wms/Wms/Controllers/UpApiController.cs
@@ -17,6 +17,7 @@
using WMS.IBLL.IDataServer;
using Model.ModelDto.DataDto;
using System.Collections.Generic;
using Model.ModelDto.LogDto;
namespace Wms.Controllers
{
@@ -459,6 +460,46 @@
            return Ok(stocks);
        }
        /// <summary>
        /// 数字孪生系统库存质量状态反馈
        /// </summary>
        /// <param name="model">来源信息</param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult ReLogData(DigitalTwinModel model)
        {
            //记录log
            var logStr = "";
            logStr = $@".\log\数字孪生\操作日志信息反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            var jsonData = JsonConvert.SerializeObject(model);
            LogFile.SaveLogToFile($"操作日志信息反馈:( {jsonData} ),", logStr);
            try
            {
                //获取库存信息
                List<OperationDto> stocks = _stock.ReLogData();
                if (stocks.Count == 0)
                {
                    var data = new HttpReturnModel { Success = "0", Message = "当前无操作信息" };
                    return Ok(data);
                }
                return Ok(stocks);
            }
            catch (Exception e)
            {
                var data = new HttpReturnModel { Success = "0", Message = "失败:" + e.Message };
                if (logStr != "")
                {
                    jsonData = JsonConvert.SerializeObject(data);
                    LogFile.SaveLogToFile($"操作日志信息反馈,返回参数:( {jsonData} ),", logStr);
                }
                return Ok(data);
            }
        }
        #endregion
    }
Wms/Wms/appsettings.json
@@ -26,7 +26,7 @@
    "ErpHost": "http://10.110.24.30:8081", //erpIP
    "MesHost": "http://10.18.99.67:3000", //mesIP
    "WcsHost": "http://10.60.16.10:5005", // "http://localhost:57061", //wcsIPhttp://localhost:57061/
    "BoxHost": "http://10.110.24.30:8081", //boxIP
    "BoxHost": "http://10.18.99.88", //boxIP
    "AgvHost": "http://10.18.99.66:8181", //agvIP
    // WCS
@@ -48,8 +48,8 @@
    "MesBeiLiaoUrl": "/mes/service/mes/save_morder_feedback", //备料反馈(原料备料到生产车间缓存区)
    "MesGetTokenUrl": "/mes/service/system/sign_login", //获取令牌
    // 赋码
    "FuMaGetBoxUrl": "/port/mes/service/system/sign_login", //获取赋码箱码信息
    "FuMaGetTokenUrl": "/port/mes/service/system/sign_login", //获取令牌
    "FuMaGetBoxUrl": "/api/IO/QueryBarcode", //获取赋码箱码信息
    "FuMaGetTokenUrl": "/api/IO/QueryBarcode", //获取令牌
    // AGV
    "GenAgvSchedulingTask": "/rcms/services/rest/hikRpcService/genAgvSchedulingTask", //生成任务单接口