zhaowc
2025-02-28 157abc191c34e57c1b958ae74fc3de6518ca8a30
修改客户需求
41个文件已修改
1688 ■■■■ 已修改文件
HTML/views/ASNSetting/ArrivalLogTask.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/ArrivalNotice.html 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/LabelBoxBuDa.html 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/LabelPrint.html 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/LabelPrintSelect.html 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/RequestLocation.html 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/BaseSetting/Materials.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/BaseSetting/MaterialsForm.html 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/QualityControl/QualityInformation.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/SOSetting/ExportNotice.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/LocateEditArea.html 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/Roadway.html 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/AsnSetting/palletEnter.html 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/SoSetting/palletOut.html 155 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/InterFaceModel/HttpModel.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/BllAsnDto/ArrivalNoticeDto.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/SysDto/MaterialsDto.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelVm/PdaVm/PdaCrVm.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelVm/PdaVm/PdaSoVm.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Utility/Tools/HttpHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Utility/XML/ExInfoXml.xml 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllCheckServer/StockCheckServer.cs 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs 309 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/DataServer/StockServer.cs 428 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/LogServer/TaskServer.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/SysServer/MaterialsServer.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/SysServer/PackagServer.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IDataServer/IStockServer.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/ILogServer/ITaskServer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/DownApiController.cs 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/PdaAsnController.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/PdaCrController.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/ArrivalLogTask.html
@@ -540,7 +540,7 @@
                    title: '申请储位',
                    content: 'RequestLocation.html',
                    maxmin: true,
                    area: ['25%', '40%'],
                    area: ['25%', '60%'],
                    btn: ["确定", "取消"],
                    yes: function (index, layero) {
                        
HTML/views/ASNSetting/ArrivalNotice.html
@@ -156,7 +156,7 @@
                        <div class="layui-inline DivLoadingArea" style="margin-top: 10px;">
                            <label class="layui-form-label">密码</label>
                            <div class="layui-input-inline" style="width: 220px;">
                                <input type="text" id="password" name="password" placeholder="密码" autocomplete="off"
                                <input type="password" id="password" name="password" placeholder="密码" autocomplete="off"
                                class="layui-input">
                            </div>
                        </div>
@@ -909,6 +909,7 @@
            //明细表操作栏事件
            table.on('tool(LAY-app-content-list2)', function (obj) {
                var data = obj.data;
                console.log("data.supplierlot:"+data.SupplierLot);
                var lotno = data.LotNo;
                
                
@@ -940,6 +941,7 @@
                                }
                            });
                        });    
                        break;
                    case "Addlabel" :
HTML/views/ASNSetting/LabelBoxBuDa.html
@@ -46,6 +46,9 @@
        .font-size10{
            font-size: 10px;
        }
        /* .layui-table-cell {
            word-break: break-all;
        } */
    </style>
</head>
@@ -75,13 +78,13 @@
                    </tr> -->
                    <tr>
                        <td class="font-size12">进厂编号</td>
                        <td id="LotNo" class="font-size10"></td>
                        <td id="LotNo" style="overflow-wrap: break-word;" class="font-size10"></td>
                        <td class="font-size12">物料代码</td>
                        <td id="SkuNo" class="font-size10"></td>
                    </tr>
                    <tr>
                        <td class="font-size12">原厂批号</td>
                        <td id="SupplierLot" class="font-size10"></td>
                        <td id="SupplierLot" style="overflow-wrap: break-word;" class="font-size10"></td>
                        <td class="font-size12">数   量</td>
                        <td id="Qty" class="font-size10"></td> 
                    </tr>
HTML/views/ASNSetting/LabelPrint.html
@@ -119,9 +119,11 @@
            var expirationTime = getQueryString('ExpirationTime');
            var storeTime = getQueryString('StoreTime');  
            var supplierLot=getQueryString('SupplierLot'); //原厂批号
            $("#SupplierLot").html(supplierLot);
            console.log(supplierLot);
            //$("#SupplierLot").html(supplierLot);
            //console.log(supplierLot);
            var Lotno=getQueryString('Lotno'); //原厂批号
            $("#Lotno").html(Lotno);
@@ -191,7 +193,9 @@
                        $("#SkuNo").html(res.data.SkuNo);
                        
                        $("#ExpirationTime").html(expirationTime);
                        $("#StoreTime").html( storeTime);
                        $("#StoreTime").html(storeTime);
                        $("#SupplierLot").html(res.data.SupplierLot);
                        
                        // $("#imgBar").attr("src", res.data[0].imageStr); 
                    } else { //不成功
HTML/views/ASNSetting/LabelPrintSelect.html
@@ -122,9 +122,9 @@
                    });
                    var id = getQueryString('Id');
                    var SupplierLot=getQueryString('SupplierLot');//供货批次
                    $('#SupplierLot').val(SupplierLot);
                    console.log(SupplierLot);
                    //var SupplierLot=getQueryString('SupplierLot');//供货批次
                    //$('#SupplierLot').val(SupplierLot);
                    //console.log(SupplierLot);
                    var asnType = getQueryString('Type');
                    console.log(asnType);
                    console.log(asnType == 4);
@@ -145,6 +145,7 @@
                            $("#productionTime").val(res.data.ProductionTime);
                            $("#expirationTime").val(res.data.ExpirationTime);
                            $("#storeTime").val(res.data.StoreTime);
                            $("#SupplierLot").val(res.data.SupplierLot);
                            console.log(res.data);
                        } else { //不成功
                            layer.msg(res.msg, {
@@ -215,6 +216,13 @@
                        if (r != null) return unescape(r[2]);
                        return null;
                    }
                    // 获取传递参数
                    function getQueryString2(name) {
                        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
                        var r = window.location.search.substr(1).match(reg);
                        if (r != null) return unescape(r[2]);
                        return null;
                    }
                })
            </script>
HTML/views/ASNSetting/RequestLocation.html
@@ -33,6 +33,14 @@
                        <option value=""></option>
                        <option value="R01">1巷道</option>
                        <option value="R02">2巷道</option>
                        <option value="R03">3巷道</option>
                        <option value="R04">4巷道</option>
                        <option value="R05">5巷道</option>
                        <option value="R06">6巷道</option>
                        <option value="R07">7巷道</option>
                        <option value="R08">8巷道</option>
                        <option value="R09">9巷道</option>
                        <option value="R10">10巷道</option>
                    </select>
                </div>
            </div>
HTML/views/BaseSetting/Materials.html
@@ -98,7 +98,7 @@
                            <select name="Environment" id="Environment" lay-verify="" lay-verify="" lay-search>
                                <option value=""></option>
                                <option value="0">常温</option>
                                <option value="1">低温</option>
                                <option value="1">阴凉</option>
                                <!-- <option value="3">干燥通风</option> -->
                            </select>
                        </div>
@@ -451,6 +451,7 @@
                                        Environment: field.Environment,
                                        Weight: Number(field.Weight),
                                        Warranty: Number(field.Warranty),
                                        Warrantydate:field.Warrantydate,
                                        Price: Number(field.Price),
                                        AdventTime: Number(field.AdventTime), //临期
                                        LowInventory: Number(field.LowInventory), //低库存
@@ -458,9 +459,10 @@
                                    };
                                    if (doing) {
                                        doing = false;
                                        sendData(IP + "/Basis/AddMate", param, 'post', function (res) {
                                            console.log(res);
                                            if (res.code == 0) { //成功
                                            if (res.code == 1) { //成功
                                                layer.msg(res.msg, {
                                                    icon: 1,
                                                    time: 2000 //2秒关闭(如果不配置,默认是3秒)
HTML/views/BaseSetting/MaterialsForm.html
@@ -144,10 +144,18 @@
        </div>
        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label" style="width: 70px;">保质期(天)</label>
                <div class="layui-input-block" style="width: 182px;">
                <label class="layui-form-label" style="width: 90px;">保质期(天)</label>
                <div class="layui-input-inline" style="width: 120px;">
                    <input type="text" onkeyup="value=value.replace(/[^\d]/g,'')" name="Warranty" placeholder="请输入保质期"
                        lay-verify="" autocomplete="off" class="layui-input">
                </div>
                <div class="layui-input-inline" style="width: 60px;">
                    <select name="Warrantydate" id="Warrantydate" lay-verify="" lay-verify="" lay-search>
                        <option value="0">天</option>
                        <option value="1">月</option>
                        <option value="2">年</option>
                    </select>
                </div>
            </div>
            <div class="layui-inline">
@@ -313,6 +321,7 @@
                            if (res.data.SkuNo != "") {
                                $("input[name='SkuNo']").attr("disabled", "disabled")
                            }
                            //页面赋值
                            $("input[name='SkuNo']").val(res.data.SkuNo); // 物料号
                            $("input[name='SkuName']").val(res.data.SkuName); // 物料名称
@@ -326,7 +335,8 @@
                            $("#UnitNo option[value='" + res.data.UnitNo + "']").attr("selected", "selected");// 单位
                            $("#PackagNo option[value='" + res.data.PackagNo + "']").attr("selected", "selected"); // 包装
                            $("#PackagNo").attr("disabled", "disabled")
                            $("#Environment option[value='" + res.data.Environment + "']").attr("selected", "selected"); // 存储环境
                            $("#Environment option[value='" + res.data.Environment + "']").attr("selected", "selected"); //
                            $("#Warrantydate option[value='" + res.data.Warrantydate + "']").attr("selected", "selected"); // 保持期单位
                            $("input[name='Weight']").val(res.data.Weight); // 理论重量
                            $("input[name='Warranty']").val(res.data.Warranty); // 保质期
                            $("input[name='Price']").val(res.data.Price); // 理论单价
HTML/views/QualityControl/QualityInformation.html
@@ -84,7 +84,7 @@
                            <div class="layui-inline DivLoadingArea" style="margin-top: 10px;">
                                <label class="layui-form-label">密码</label>
                                <div class="layui-input-inline" style="width: 220px;">
                                    <input type="text" id="password" name="password" placeholder="密码" autocomplete="off"
                                    <input type="password" id="password" name="password" placeholder="密码" autocomplete="off"
                                    class="layui-input">
                                </div>
                            </div>
HTML/views/SOSetting/ExportNotice.html
@@ -185,7 +185,7 @@
                            <div class="layui-inline DivLoadingArea" style="margin-top: 10px;">
                                <label class="layui-form-label">密码</label>
                                <div class="layui-input-inline" style="width: 220px;">
                                    <input type="text" id="password" name="password" placeholder="密码" autocomplete="off"
                                    <input type="password" id="password" name="password" placeholder="密码" autocomplete="off"
                                    class="layui-input">
                                </div>
                            </div>
HTML/views/WareHouseSetting/LocateEditArea.html
@@ -32,19 +32,19 @@
            <div class="layui-form-item">
                <label class="layui-form-label">&emsp;&emsp;储排</label>
                <div class="layui-input-inline">
                    <input type="number" lay-verify="required|PRules" id="Row" name="Row" placeholder="排···" autocomplete="off"
                    <input type="number" lay-verify="PRules" id="Row" name="Row" placeholder="排···" autocomplete="off"
                        class="layui-input" >
                </div>
                <label class="layui-form-label">&emsp;&emsp;储列</label>
                <div class="layui-input-inline">
                    <input type="number" lay-verify="required|LRules" id="Column" name="Column" placeholder="列···" autocomplete="off"
                    <input type="number" lay-verify="LRules" id="Column" name="Column" placeholder="列···" autocomplete="off"
                        class="layui-input" >
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">&emsp;&emsp;储层</label>
                <div class="layui-input-inline">
                    <input type="number" lay-verify="required|CRules" id="Layer" name="Layer" placeholder="层···" autocomplete="off"
                    <input type="number" lay-verify="CRules" id="Layer" name="Layer" placeholder="层···" autocomplete="off"
                        class="layui-input" >
                </div>
                <label class="layui-form-label">储位深度</label>
@@ -114,20 +114,24 @@
                  //自定义验证规则
                  form.verify({
                    PRules: function(value, item){
                        if($("#Row").val() != ""){
                        var pattern = /^[a-zA-Z0-9_]+$/; // 这里写你的正则表达式
                        if(!pattern.test(value)){
                                              return '用户名只能包含字母、数字和下划线';
                      }
                    },LRules: function(value, item){
                                              return '排只能包含字母、数字和下划线';
                      }}
                    }
                    ,LRules: function(value, item){
                        if($("#Column").val() != ""){
                        var pattern = /^[a-zA-Z0-9_]+$/; // 这里写你的正则表达式
                        if(!pattern.test(value)){
                                             return '用户名只能包含字母、数字和下划线';
                        }
                                             return '列只能包含字母、数字和下划线';
                        }}
                    },CRules: function(value, item){
                        if($("#Layer").val() != ""){
                        var pattern = /^[a-zA-Z0-9_]+$/; // 这里写你的正则表达式
                        if(!pattern.test(value)){
                                              return '用户名只能包含字母、数字和下划线';
                        }
                                              return '层只能包含字母、数字和下划线';
                        }}
                    }
                  });
                 
HTML/views/WareHouseSetting/Roadway.html
@@ -224,13 +224,15 @@
                                width: 100,
                                align: 'center'
                                
                            }, {
                                field: 'TypeName',
                                title: '区域类别',
                                width: 150,
                                align: 'center'
                            },
                            // {
                            //     field: 'TypeName',
                            //     title: '区域类别',
                            //     width: 150,
                            //     align: 'center'
                                
                            }, {
                            // },
                            {
                                field: 'TemperatureName',
                                title: '存储环境',
                                align: 'center',
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>
Pda/View/AsnSetting/palletEnter.html
@@ -57,11 +57,39 @@
                                    autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div id="" style="margin-left: 21%; width: 38%;float: left;">
                        <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="layui-form-item layout-dropdownlist">
                            <label class="layui-form-label" lang>入库口:</label>
                            <div class="layui-input-block" id="selectRuku">
                                <select id="Ruku" lay-filter="getRuku" lay-search>
                                    <option value=""></option>
                                    <option value="033">033</option>
                                    <option value="039">039</option>
                                    <option value="044">044</option>
                                    <option value="051">051</option>
                                    <option value="443">443</option>
                                    <option value="440">440</option>
                                    <option value="001">001</option>
                                    <option value="002">002</option>
                                </select>
                                <img src="/assets/down_arraw.png">
                            </div>
                        </div>
                        <div id="" style="margin-left: 21%; width: 25%;float: left;">
                            <button id="btnScanBox" class="layout-btn layout-btn-blue" lay-submit lay-filter="formBind"  type="button">绑定</button>
                        </div>
                        <div id="" style="width: 38%;float: left;">
                        <div id="" style="width: 25%;float: left;">
                            <button id="btnScanBox" class="layout-btn layout-btn-red" lay-submit lay-filter="formUnbind"   type="button">解绑</button>
                        </div>
                        <div id="" style="width: 25%;float: left;">
                            <button id="btnAGVTrans" class="layout-btn layout-btn-red" lay-submit lay-filter="formAGVIN"   type="button">AGV入库</button>
                        </div>
                        
                    </form>
@@ -74,6 +102,7 @@
        <script src="/layui/layui.js"></script>
        <script src="/js/public.js"></script>
        <script src="/js/jquery.cookie.js"></script>
        <script src="/js/language.js"></script>
        <script>
            layui.use(['form', 'jquery'], function() {
                var form = layui.form
@@ -126,6 +155,7 @@
                $("#PalletNo").on('input',function(){
                      
                      if($("#PalletNo").val() == "" || $("#PalletNo").val().length<10){
                          return
                      }
                      if ($("#PalletNo").val().length>=10) {
@@ -134,7 +164,39 @@
                      }
                      checkPalletStat()
                  }) 
                  //检查地码状态
                function checkLocatStatus(){
                    var param = {
                        "LocatNo": $("#LocatNo").val()
                    }
                    sendData(IP + "/PdaAsn/IsEnableLocatNo", param, 'post', function (res) {
                        if (res.code == 0) {
                            $("#palletNum").focus();
                        } else {
                            layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            },
                            function () { });
                            $("#LocatNo").val('')
                        }
                    });
                }
                //当地码输入框失去焦点时,检查一下地码状态
                $("#LocatNo").on('input',function(){
                      if($("#LocatNo").val() == "" || $("#LocatNo").val().length!=9){
                        layer.msg('请检查地码是否正确', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                      }
                      checkLocatStatus()
                  })
                // $("#bar").focus();
                $("#PalletNo").keydown(function(e) {
                    //console.log("e.keyCode is "+e.keyCode)
@@ -289,6 +351,55 @@
                    
                    return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
                });
                form.on('submit(formAGVIN)', function(data) {
                    if (!$("#LocatNo").val()) {
                        layer.msg('请扫描地码', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                    if (!$("#Ruku").val()) {
                        layer.msg('请选择入库口', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                    //先绑定空托盘垛
                    //bind();
                    //绑定成功后调度AGV运送空托盘垛
                    var param = {
                        'PalletNo':$("#PalletNo").val(),
                        "LocatNo": $("#LocatNo").val(),
                        "Ruku": $("#Ruku").val(),
                    }
                    sendData(IP + "/PdaCr/AgvTransport3", param, 'post', function(res) {
                        //console.log("托盘状态:"+res.msg)
                        if (res.code == 0) { //成功
                            layer.msg(res.msg, {
                                icon: 1,
                                time: 1000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {
                            });
                            $("#PalletNo").val(''),
                            $("#palletNum").val(''),
                            $("#LocatNo").val(''),
                            $("#Ruku").val('')
                        } else { //不成功
                            layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {
                                //回调
                            });
                        }
                    });
                    return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
                });
                function unbind(){
                    layer.msg('该操作会解绑这个托盘上的所有托盘,确定要解绑吗?', {
                        time: 0 //不自动关闭
Pda/View/SoSetting/palletOut.html
@@ -55,36 +55,65 @@
                        <li><a href="../login.html">重新登录</a></li>
                    </ul>
                </div>
                <div id="" class="layout-bill-info">
                    <form class="layui-form" action="">
                        <div id="layout-pallet" class="layui-form-item layout-input" style="margin-top: 10px;">
                            <label class="layui-form-label">托盘垛数:</label>
                            <div class="layui-input-block">
                                <input id="STOCKCODE" type="number" lay-verify="stock" placeholder="托盘垛数"
                                    autocomplete="off" class="layui-input" oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
                <button id="option1" class="layout-btn" type="button"> 整托</button>
                <button id="option2" class="layout-btn" type="button">单托</button>
                <div id="content1">
                    <div id="" class="layout-bill-info">
                        <form class="layui-form" action="">
                            <div id="layout-pallet" class="layui-form-item layout-input" style="margin-top: 10px;">
                                <label class="layui-form-label">托盘垛数:</label>
                                <div class="layui-input-block">
                                    <input id="STOCKCODE" type="number" lay-verify="stock" placeholder="托盘垛数"
                                        autocomplete="off" class="layui-input" oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
                                </div>
                            </div>
                        </div>
                        <div id="layout-bill" class="layui-form-item layout-dropdownlist" >
                            <label class="layui-form-label">出库口:</label>
                            <div class="layui-input-block" id="selectDiv">
                                <select id="bar" lay-filter="getbar" lay-verify="required" lay-search>
                                    <option value=""></option>
                                    <option value="033">033</option>
                                    <option value="039">039</option>
                                    <option value="044">044</option>
                                    <option value="051">051</option>
                                    <option value="059">059</option>
                                    <option value="440">440</option>
                                    <option value="443">443</option>
                                </select>
                                <!-- <img src="/assets/down_arraw.png" > -->
                            <div id="layout-bill" class="layui-form-item layout-dropdownlist" >
                                <label class="layui-form-label">出库口:</label>
                                <div class="layui-input-block" id="selectDiv">
                                    <select id="bar" lay-filter="getbar" lay-verify="required" lay-search>
                                        <option value=""></option>
                                        <option value="033">033</option>
                                        <option value="039">039</option>
                                        <option value="044">044</option>
                                        <option value="051">051</option>
                                        <option value="059">059</option>
                                        <option value="440">440</option>
                                        <option value="443">443</option>
                                    </select>
                                    <!-- <img src="/assets/down_arraw.png" > -->
                                </div>
                            </div>
                        </div>
                        <div id="" class="btn-out">
                            <button id="btnOut" class="layout-btn layout-btn-blue" type="button">出库</button>
                        </div>
                    </form>
                            <div id="" class="btn-out">
                                <button id="btnOut" class="layout-btn layout-btn-blue" type="button">出库</button>
                            </div>
                        </form>
                    </div>
                </div>
                <div id="content2">
                    <div id="" class="layout-bill-info">
                        <form class="layui-form" action="">
                            <div id="layout-bill" class="layui-form-item layout-dropdownlist" >
                                <label class="layui-form-label">拣货口:</label>
                                <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>
                                    </select>
                                    <!-- <img src="/assets/down_arraw.png" > -->
                                </div>
                            </div>
                            <div id="" class="btn-out">
                                <button id="btnOut2" class="layout-btn layout-btn-blue" type="button">叫空托</button>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
        
@@ -96,6 +125,37 @@
            layui.use(['form', 'jquery'], function() {
                var form = layui.form
                var isChongFu = true;
                /* 标签切换代码 */
                var xianshiyemian = 0;
                $('#option1').attr("style", "background-color: red;width: 50%;float: left;text-align: center;"); //选中后颜色
                $('#option2').attr("style", "background-color: #999;width: 50%;float: right;text-align: center;"); //默认颜色
                $('#content2').hide();
                $(document).ready(function () {
                    $('#option1').click(function () {
                        // qingkong();
                        xianshiyemian = 0;
                        $('#content1').show();
                        $('#option1').attr("style", "background-color: red;width: 50%;float: left;text-align: center;"); //选中后颜色
                        $('#content2').hide();
                        $('#option2').attr("style", "background-color: #999;width: 50%;float: right;text-align: center;"); //默认颜色
                        $("#palletNo").focus();//光标默认选中
                    });
                    $('#option2').click(function () {
                        // qingkong();
                        xianshiyemian = 1;
                        $('#content1').hide();
                        $('#option1').attr("style", "background-color: #999;width: 50%;float: left;text-align: center;"); //默认颜色
                        $('#content2').show();
                        $('#option2').attr("style", "background-color: red;width: 50%;float: right;text-align: center;"); //选中后颜色
                        $("#palletNo2").focus();//光标默认选中
                    });
                });
                //所选入库单的详细信息
                //console.log($.cookie('userId'));
                // if (!$.cookie('userId')) {
@@ -111,6 +171,7 @@
                function clear(){ 
                    $("#STOCKCODE").val(""); 
                    $("#bar option[value='']").attr("selected", "selected");
                    $("#bar2 option[value='']").attr("selected", "selected");
                    form.render('select');
                }
                   
@@ -182,6 +243,46 @@
                    }
                    
                })
                //叫单空托
                $('#btnOut2').click(function(){
                    if($('#bar2').val() == ''){
                        layer.msg("请选择拣货口", {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }, function() {});
                        return
                    }
                    if (isChongFu == true) {
                        isChongFu = false;
                        var param2 = {
                            OutMode:$('#bar2').val()
                        };
                        // Int(param.Num)
                        console.log(param2)
                        sendData(IP + "/DownApi/IssuePlnCheckHouseWcs", param2, 'post', function(res) {
                            console.log("出库:"+JSON.stringify(res))
                            if (res.code == 0) { //成功
                                layer.msg(res.msg, {
                                    icon: 1,
                                    time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                }, function() {isChongFu = true;clear();});
                            } else { //不成功
                                layer.msg(res.msg, {
                                    icon: 2,
                                    time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                }, function() {isChongFu = true;clear();});
                            }
                        });
                    }else{
                        layer.msg("请勿重复点击", {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                    }
                })
                
                //获取出库口
                // $("#selectDiv").click(function(){
Wms/Model/InterFaceModel/HttpModel.cs
@@ -111,6 +111,12 @@
        public string Msg { get; set; }
    }
    public class WcsAgvModel
    {
        public int Success { get; set; }
        public string Message { get; set; }
    }
    /// <summary>
    /// 接收wcs可放信号model
    /// </summary>
Wms/Model/ModelDto/BllAsnDto/ArrivalNoticeDto.cs
@@ -118,6 +118,11 @@
        /// 储存期至
        /// </summary>
        public string StoreTime { get; set; }
        /// <summary>
        /// 供货批次
        /// </summary>
        public string SupplierLot { get; set; }
    }
}
Wms/Model/ModelDto/SysDto/MaterialsDto.cs
@@ -88,6 +88,10 @@
        /// 保质期
        /// </summary>
        public int? Warranty { get; set; }
        /// <summary>
        /// 保质期单位
        /// </summary>
        public string Warrantydate { get; set; }
        /// <summary>
        /// 理论单价
Wms/Model/ModelVm/PdaVm/PdaCrVm.cs
@@ -86,4 +86,21 @@
        public string EndLocatNo { get; set; }
    }
    public class PdaAgvTransNullPalnoModel
    {
        /// <summary>
        /// 托盘条码
        /// </summary>
        public string PalletNo { get; set; }
        /// <summary>
        /// 目标区域
        /// </summary>
        public string LocatNo { get; set; }
        /// <summary>
        /// 入库口
        /// </summary>
        public string Ruku { get; set; }
    }
}
Wms/Model/ModelVm/PdaVm/PdaSoVm.cs
@@ -86,4 +86,16 @@
        public string OutMode { get; set; }
    }
    /// <summary>
    /// 拣货叫空托盘
    /// </summary>
    public class CheckModePalletVm
    {
        /// <summary>
        /// 拣货口
        /// </summary>
        public string OutMode { get; set; }
    }
}
Wms/Utility/Tools/HttpHelper.cs
@@ -218,7 +218,7 @@
                //修改参数的值
                foreach (var de in Pars)
                {
                    string subNode = "DataList/Product/Batch";// + de.Key.ToString();
                    string subNode = "DataList/Events/Event/DataField";// + de.Key.ToString();
                    
                    XmlNode node = xml.SelectSingleNode(subNode, nsmgr);
                    if (de != null)
Wms/Utility/XML/ExInfoXml.xml
@@ -1,10 +1,26 @@

<DataList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" corpName="天津市中升挑战生物科技有限公司"
          toUnitType="2" manCode="19053107" dataType="wareHouseOut" version="1.1"
          xsi:noNamespaceSchemaLocation="兽药产品出库数据1.1.xsd">
    <Product>
        <Batch operator="申报设备名称" oprDate="2022/06/25" toProvince="黑龙江省" toCity="哈尔滨市" toCounty="双城区" toUnit="哈尔滨源策商贸有限公司" toUnitcode="">
            <!--<Data code="202203240009000479940290"/>-->
        </Batch>
    </Product>
<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">
    <Events>
        <Event Name="SalesWareHouseOut" MainAction="WareHouseOut">
            <ActionMaping>
                <Action Name="WareHouseOut">
                    <ActionData>CorpOrderID</ActionData>
                    <ActionData>Actor</ActionData>
                    <ActionData>ToCorpID</ActionData>
                    <ActionData>ActDate</ActionData>
                    <ActionData>Code</ActionData>
                </Action>
            </ActionMaping>
            <DataMaping>
                <MetaData Name="CorpOrderID" Type="String"/>
                <MetaData Name="Actor" Type="String"/>
                <MetaData Name="ActDate" Type="Date"/>
                <MetaData Name="ToCorpID" Type="String"/>
                <MetaData Name="Code" Type="String"/>
            </DataMaping>
            <DataField>
            </DataField>
        </Event>
    </Events>
</DataList>
Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs
@@ -156,6 +156,7 @@
                            data.ProductionTime = boxInfo.ProductionTime!= null ? ((DateTime)boxInfo.ProductionTime).ToString("yyyy-MM-dd"):"";
                            data.ExpirationTime = boxInfo.ExpirationTime != null ? ((DateTime)boxInfo.ExpirationTime).ToString("yyyy-MM-dd") : "";
                            data.StoreTime = boxInfo.StoreTime != null ? ((DateTime)boxInfo.StoreTime).ToString("yyyy-MM-dd") : "";
                        }
                    }
                }
@@ -163,6 +164,7 @@
                var labelQty = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNDetailNo == id).Sum(m => m.Qty);
                var qty = detail.Qty - labelQty;
                data.Qty = qty.ToString();
                data.SupplierLot = detail.SupplierLot;
                return data;
            }
            catch (Exception e)
@@ -213,7 +215,7 @@
                        break;
                    case "6"://代储入库
                        skuType = "(0,1,2,3,4)";
                        IsPack = 2; //不贴
                        //IsPack = 2; //不贴
                        break;
                    case "7"://寄存入库
                        //skuType = "(3)";
@@ -1269,45 +1271,45 @@
                };
                #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
Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
@@ -529,6 +529,7 @@
                data.Standard = asnDetail.Standard;
                data.SupplierLot = asnDetail.SupplierLot;
                data.PackageStandard = str;
                data.SupplierLot = asnDetail.SupplierLot;
                return data;
            }
            catch (Exception e)
Wms/WMS.BLL/BllCheckServer/StockCheckServer.cs
@@ -995,7 +995,7 @@
                                }
                            }
                            //生成盘点记录
                            //生成盘点记录
                            Db.Insertable(logList).ExecuteCommand();
                        }
                        // 储位号
@@ -1397,8 +1397,8 @@
                                materiel_name = item.SkuName,
                                qty = item.Qty,
                                batch = item.LotNo,
                                producttime = item.ProductionTime.ToString().Substring(1, 8),
                                expiry = item.ExpirationTime.ToString().Substring(1, 8)
                                producttime = item2.ProductionTime.ToString().Substring(1, 8),
                                expiry = item2.ExpirationTime.ToString().Substring(1, 8)
                            });
                        }
@@ -1427,32 +1427,33 @@
                    Db.Updateable(endLocate).ExecuteCommand();
                }
                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
@@ -44,7 +44,7 @@
            try
            {
                //model.Type:单据类型 在这里代表前端页签类型:即标签页签:贴标物料; 数量页签:不贴表物料,原因:懒得加参数
                var data = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && m.Status != "3" && m.Status != "4").Select(m => m.ASNNo).ToList();
                var data = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && m.Status !="2" && m.Status != "3" && m.Status != "4").Select(m => m.ASNNo).ToList();
                var list = new List<ArrivalNoticeDetailDto>();
                if (model.Type.Contains("0"))//0贴标
                {
@@ -267,6 +267,42 @@
            }
        }
        /// <summary>
        /// 验证地码是否存在
        /// </summary>
        /// <param name="locatNo">地码</param>
        /// <returns>"":可使用 -1:不可使用(原因)</returns>
        public string IsEnableLocatNo(string locatNo)
        {
            string sqlMsg = "";
            string sqlString = string.Empty;
            try
            {
                sqlString = $"select * from SysStorageLocat where LocatNo = '{locatNo}' and WareHouseNo = 'W02' and isdel = '0';";
                var models = Db.Ado.SqlQuery<PalletBindVm>(sqlString);
                if (models.Count > 0)
                {
                    if (models[0].Status != "0")
                    {
                        sqlMsg = "-1:此库位使用中,请在库内请核实!";
                    }
                }
                else
                {
                    sqlMsg = "-1:库位不存在!";
                }
                return sqlMsg;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        // 根据箱码或托盘号获取箱支信息   liudl 
        public List<BoxInfoDto> GetBoxInfos(BoxInfoVm model)
        {
Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
@@ -970,26 +970,30 @@
                Db.BeginTran();
                //请求WCS入库口放货确认
                try
                if (!string.IsNullOrEmpty(ruku))
                {
                    var port = new
                    try
                    {
                        Port = EndLocat
                    };
                    var json = JsonConvert.SerializeObject(port);
                    var res = HttpHelper.DoPost(wcsurl, json, "请求WCS入库口是否可放货", "WCS");
                        var port = new
                        {
                            Port = EndLocat
                        };
                        var json = JsonConvert.SerializeObject(port);
                        var res = HttpHelper.DoPost(wcsurl, json, "请求WCS入库口是否可放货", "WCS");
                    //////解析返回数据
                    var ret = JsonConvert.DeserializeObject<WcsModel>(res);
                    if (ret.StatusCode == -1)
                        //////解析返回数据
                        var ret = JsonConvert.DeserializeObject<WcsModel>(res);
                        if (ret.StatusCode == -1)
                        {
                            throw new Exception(EndLocat + "号入库口已有其他任务占用,请选择其他入库口");
                        }
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(EndLocat + "号入库口已有其他任务占用,请选择其他入库口");
                        throw new Exception(ex.Message);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                
                //添加出库任务
@@ -1040,38 +1044,19 @@
                #region 呼叫小车代码
                var endlono = EndLocat;
                //根据目的地址库区获取小车任务类型
                switch (storageLocatEnd.AreaNo)
                {
                    case "B13" :
                        tasktype = "D02";  // 叠托任务(目的地址为空托盘收集区)
                        break;
                    case "B15":
                        tasktype = "D01";  // 拆托任务(目的地址为拣货区)
                        break;
                }
                if (OrderTy == "0")
                {
                    tasktype = "RK0"; //入库任务
                }
                //缓存库位转换     3楼原辅料Y003_001,Y003_002,Y003_003  1楼Y138_001到Y138_021外包缓存区   1楼Y128_001到Y128_015内包缓存区
                //缓存库位转换     3楼接驳位Y003_001,Y003_002,Y003_003
                if (storageLocatEnd.AreaNo == "B12")
                {
                    switch (EndLocat.ToString().Substring(4, 1))
                    {
                        case "1":
                            endlono = "Y003_00" + EndLocat.ToString().Substring(6, 1);
                            endlono = "Y003_0" + EndLocat.ToString().Substring(5, 2);
                            tasktype = "D00";     //点到点任务
                            break;
                        case "2":
                            endlono = "Y138_0" + EndLocat.ToString().Substring(5, 2);
                            tasktype = "F20";    //电梯任务
                            break;
                        case "3":
                            endlono = "Y128_0" + EndLocat.ToString().Substring(5, 2);
                            tasktype = "F20";     //电梯任务
                            break;
                        default:
                            break;
@@ -1297,21 +1282,13 @@
                            break;
                    }
                    //缓存库位转换     3楼原辅料Y003_001到Y003_009  1楼Y138_001到Y138_021外包缓存区   1楼Y128_001到Y128_015内包缓存区
                    //缓存库位转换     3楼原辅料Y003_001到Y003_011
                    if (storageLocatEnd.AreaNo == "B12")
                    {
                        switch (EndLocat.ToString().Substring(4, 1))
                        {
                            case "1":
                                endlono = "Y003_00" + EndLocat.ToString().Substring(6, 1);
                                break;
                            case "2":
                                endlono = "Y138_0" + EndLocat.ToString().Substring(5, 2);
                                tasktype = "F20";    //电梯任务
                                break;
                            case "3":
                                endlono = "Y128_0" + EndLocat.ToString().Substring(5, 2);
                                tasktype = "F20";     //电梯任务
                                endlono = "Y003_0" + EndLocat.ToString().Substring(5, 2);
                                break;
                            default:
                                break;
@@ -1427,8 +1404,203 @@
            }
        }
        /// <summary>
        /// 空托盘入库呼叫小车
        /// </summary>
        /// <param name="palletNo"></param>
        /// <param name="areaNo"></param>
        /// <param name="ruku"></param>
        public void AgvTransport3(string palletNo, string LocatNo, string ruku, int userId, string url, string wcsurl)
        {
            if (string.IsNullOrEmpty(palletNo))
            {
                throw new Exception("请扫描托盘条码!");
            }
            if (string.IsNullOrEmpty(ruku))
            {
                throw new Exception("请选择入库口!");
            }
            try
            {
                if (ruku == "001")
                {
                    var xlocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "0" && (w.LocatNo == "B13010101" || w.LocatNo == "B13020101" || w.LocatNo == "B13030101"));
                    if (xlocate == null)
                    {
                        throw new Exception("空托盘收集器已满");
                    }
                    ruku = Db.Queryable<SysStorageLocat>().First(w => w.Status == "0" && (w.LocatNo == "B13010101" || w.LocatNo == "B13020101" || w.LocatNo == "B13030101")).LocatNo;
                }
                if (ruku == "002")
                {
                    var dlocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "0" && (w.LocatNo == "B13040101" || w.LocatNo == "B13050101" || w.LocatNo == "B13060101"));
                    if (dlocate == null)
                    {
                        throw new Exception("空托盘收集器已满");
                    }
                    ruku = Db.Queryable<SysStorageLocat>().First(w => w.Status == "0" && (w.LocatNo == "B13040101" || w.LocatNo == "B13050101" || w.LocatNo == "B13060101")).LocatNo;
                }
                if (ruku == null)
                {
                    throw new Exception("当前托盘收集器工位无空余,请将空托盘垛入立体库");
                }
                string EndLocat = ruku;//目标位置
                string OrderTy = ruku.Length ==3 ? "0":"2";
                var tasktype = "RK0"; //入库任务
                int palnoqty = 1;
                var log = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.PalletNo == palletNo && (w.Status == "0" || w.Status == "1"));
                if (log != null)
                {
                    throw new Exception("该托盘已有小车等待执行或正在执行的任务!");
                }
                //起始储位信息
                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == LocatNo);
                if (storageLocat == null)
                {
                    throw new Exception("储位信息不存在,请检查!");
                }
                //开启事务
                Db.BeginTran();
                if (EndLocat.Length == 3)
                {
                    //请求WCS入库口放货确认
                    try
                    {
                        var port = new
                        {
                            Port = EndLocat
                        };
                        var json = JsonConvert.SerializeObject(port);
                        var res = HttpHelper.DoPost(wcsurl, json, "请求WCS入库口是否可放货", "WCS");
                        //////解析返回数据
                        var ret = JsonConvert.DeserializeObject<WcsModel>(res);
                        if (ret.StatusCode == -1)
                        {
                            throw new Exception(EndLocat + "号入库口已有其他任务占用,请选择其他入库口");
                        }
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message);
                    }
                }
                else
                {
                    tasktype = "D02";
                    palnoqty = (int)Db.Queryable<BllPalletBind>().First(w => w.PalletNo == palletNo && w.Status == "1" && w.IsDel == "0").Qty;
                }
                //添加入库任务
                var taskNo = new Common().GetMaxNo("TK");
                var exTask = new LogTask
                {
                    TaskNo = taskNo,
                    Sender = "WMS",
                    Receiver = "AGV",
                    IsSuccess = 0, //是否下发成功 0失败 1成功
                    StartLocat = LocatNo,//起始位置
                    EndLocat = EndLocat,//目标位置
                    PalletNo = palletNo,//托盘码
                    Msg = string.Format("转运任务:{0}=>>{1}", LocatNo, EndLocat),
                    IsSend = 0,//是否可再次下发
                    IsCancel = 0,//是否可取消
                    IsFinish = 0,//是否可完成
                    Type = OrderTy,//任务类型 0 入库任务 1 出库任务  2 移库任务
                    Status = "0",//任务状态0:等待执行1正在执行2执行完成
                    OrderType = OrderTy,//0 入库单 1 出库单  2 盘点单  3 移库单
                    CreateTime = DateTime.Now
                };
                Db.Insertable(exTask).ExecuteCommand();
                //修改起始储位地址状态
                storageLocat.Status = "5";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
                Db.Updateable(storageLocat).ExecuteCommand();
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("PDA模块", "空托入库", palletNo, OrderTy == "0" ? "入库" : "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId);
                #region 呼叫小车代码
                //点到点指令集合
                object[] position = new object[2];
                position[0] = new
                {
                    positionCode = LocatNo,
                    type = "00"
                };
                position[1] = new
                {
                    positionCode = EndLocat,
                    type = "00"
                };
                List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>();
                AgvSchedulingTask agvTask = new AgvSchedulingTask();
                Random r = new Random();
                long ran = DateTime.Now.Ticks;
                agvTask.ReqCode = ran.ToString();
                agvTask.TaskCode = taskNo;
                agvTask.TaskTyp = tasktype;
                agvTask.PositionCodePath = position;
                agvTask.CtnrTyp = palnoqty.ToString();
                agvTaskList.Add(agvTask);
                // 正式运行程序放开
                string str = "";
                var list2 = agvTaskList.Select(m => m.TaskCode).ToList();
                var jsonData = JsonConvert.SerializeObject(agvTaskList);
                jsonData = jsonData.Substring(1, jsonData.Length - 1);
                jsonData = jsonData.Substring(0, jsonData.Length - 1);
                string response = "";
                try
                {
                    var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
                    response = HttpHelper.DoPost(url, jsonData, "下发给AGV转运命令", "AGV");
                    var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
                    //////解析返回数据
                    var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response);
                    if (agvModel.Code == "0")
                    {
                        //更改任务的发送返回时间//
                        new TaskServer().EditTaskIssueOk(list2, time1, time2);
                        str += "下发成功";
                    }
                    if (agvModel.Code == "1")
                    {
                        new TaskServer().EditTaskIssueNo(list2, time1, time2, agvModel.Message);
                        throw new Exception(agvModel.Message);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                #endregion
                //提交事务
                Db.CommitTran();
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw new Exception(ex.Message);
            }
        }
        #region
        /// <summary>
        /// agv调度任务下发
        /// </summary>
@@ -1458,21 +1630,13 @@
                    break;
            }
            // MES申请备料,备料区库位需要转换     车间备料缓存位名称:3楼原辅料Y003_001-->Y003_003  1楼外包缓存区Y138_001-->Y138_021   1楼内包缓存区Y128_001-->Y128_015
            // MES申请备料,备料区库位需要转换     车间备料缓存位名称:Y003_001-->Y003_011
            if (storageLocatEnd.AreaNo == "B12")
            {
                switch (endlono.ToString().Substring(4, 1))
                {
                    case "1":
                        endlono = "Y003_00" + endlono.Substring(6, 1);
                        break;
                    case "2":
                        endlono = "Y138_0" + endlono.Substring(5, 2);
                        tasktype = "F20";    //电梯任务
                        break;
                    case "3":
                        endlono = "Y128_0" + endlono.Substring(5, 2);
                        tasktype = "F20";     //电梯任务
                        endlono = "Y003_0" + endlono.Substring(5, 2);
                        break;
                    default:
                        break;
@@ -1618,6 +1782,7 @@
                        endLocat = locatInfo3.LocatNo;
                    }
                }
                return endLocat;
            }
            catch (Exception ex)
@@ -1634,7 +1799,15 @@
        /// <returns></returns>
        public void AgvContinue(string taskno,string url) 
        {
            var data = new { reqCode =taskno  };
            Random r = new Random();
            long ran = DateTime.Now.Ticks;
            var ReqCode = ran.ToString();
            var data = new
            {
                reqCode = ReqCode,
                taskCode = taskno
            };
            var jsonData = JsonConvert.SerializeObject(data);
            try
            {
@@ -1745,15 +1918,19 @@
                        //var boxno = boxInfo.GroupBy(w => w.BoxNo).ToList();
                        var boxno = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).GroupBy(m => new
                        {
                            m.BoxNo
                            m.BoxNo,
                            m.ProductionTime,
                            m.ExpirationTime,
                        }).Select(it => new DataBoxInfo()
                        {
                            BoxNo = it.BoxNo
                            BoxNo = it.BoxNo,
                            ProductionTime = it.ProductionTime,
                            ExpirationTime = it.ExpirationTime,
                        }).ToList();
                        //记录托盘上信息给MES
                        foreach (var item2 in boxno) {
                            var a = item.ProductionTime.ToString();
                            //var a = item.ProductionTime.ToString();
                            data.Add(new RequertBeiliaoInfoModel()
                            {
                                no = item2.BoxNo,
@@ -1761,8 +1938,8 @@
                                materiel_name = item.SkuName,
                                qty = item.Qty,
                                batch = item.LotNo,
                                producttime = item.ProductionTime.ToString().Substring(0,10),
                                expiry = item.ExpirationTime.ToString().Substring(0, 10)
                                producttime = item2.ProductionTime.ToString().Substring(0,10),
                                expiry = item2.ExpirationTime.ToString().Substring(0, 10)
                            });
                        }
@@ -1800,13 +1977,7 @@
                    switch (EndLocat.LocatNo.ToString().Substring(4, 1))
                    {
                        case "1":
                            endlono = "Y003_00" + EndLocat.LocatNo.ToString().Substring(6, 1);
                            break;
                        case "2":
                            endlono = "Y138_0" + EndLocat.LocatNo.ToString().Substring(5, 2);
                            break;
                        case"3":
                            endlono = "Y128_0" + EndLocat.LocatNo.ToString().Substring(5, 2);
                            endlono = "Y003_0" + EndLocat.LocatNo.ToString().Substring(5, 2);
                            break;
                        default:
                            break;
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -20,6 +20,7 @@
using WMS.Entity.LogEntity;
using Model.ModelDto.SysDto;
using Model.ModelDto.BllSoDto;
using System.Security.Policy;
namespace WMS.BLL.BllPdaServer
{
@@ -2411,6 +2412,153 @@
        }
        /// <summary>
        /// WMS申请拣货空托
        /// </summary>
        /// <param name="model"> </param>
        /// <param name="userId"> </param>
        /// <param name="url"> </param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public string IssuePlnCehckHouseWcs(CheckModePalletVm model, int userId, string url)
        {
            try
            {
                string StartLocate = "" ,EndLocate = "";
                Db.BeginTran();
                if (model.OutMode == "001") //西侧拣货位叫空托盘
                {
                    var xLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13010101" || w.LocatNo == "B13020101" || w.LocatNo == "B13030101"));
                    if (xLocate == null)
                    {
                        throw new Exception("没有可用的空托盘");
                    }
                    StartLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13010101" || w.LocatNo == "B13020101" || w.LocatNo == "B13030101")).LocatNo;
                    EndLocate = "B15010101";
                }
                else//东侧拣货位叫空托盘
                {
                    var dLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13030101" || w.LocatNo == "B13040101" || w.LocatNo == "B13050101"));
                    if (dLocate == null)
                    {
                        throw new Exception("没有可用的空托盘");
                    }
                    StartLocate = Db.Queryable<SysStorageLocat>().First(w => w.Status == "1" && (w.LocatNo == "B13030101" || w.LocatNo == "B13040101" || w.LocatNo == "B13050101")).LocatNo;
                    EndLocate = "B15020101";
                }
                //添加出库任务
                var taskNo = new Common().GetMaxNo("TK");
                var exTask = new LogTask
                {
                    TaskNo = taskNo,
                    Sender = "WMS",
                    Receiver = "AGV",
                    IsSuccess = 0, //是否下发成功 0失败 1成功
                    StartLocat = StartLocate,//起始位置
                    EndLocat = EndLocate,//目标位置
                    PalletNo = "",//托盘码
                    Msg = string.Format("转运任务:{0}=>>{1}", StartLocate, EndLocate),
                    IsSend = 1,//是否可再次下发
                    IsCancel = 1,//是否可取消
                    IsFinish = 1,//是否可完成
                    Type = "2",//任务类型 0 入库任务 1 出库任务  2 移库任务
                    Status = "0",//任务状态0:等待执行1正在执行2执行完成
                    OrderType = "3",//0 入库单 1 出库单  2 盘点单  3 移库单
                    CreateTime = DateTime.Now
                };
                Db.Insertable(exTask).ExecuteCommand();
                var storageLocatEnd = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == EndLocate);
                //修改目标储位地址状态
                if (storageLocatEnd != null)
                {
                    storageLocatEnd.Status = "4";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
                    Db.Updateable(storageLocatEnd).ExecuteCommand();
                }
                #region 呼叫小车代码
                var endlono = EndLocate;
                string tasktype = "D01";
                //点到点指令集合
                object[] position = new object[2];
                position[0] = new
                {
                    positionCode = StartLocate,
                    type = "00"
                };
                position[1] = new
                {
                    positionCode = endlono,
                    type = "00"
                };
                List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>();
                AgvSchedulingTask agvTask = new AgvSchedulingTask();
                Random r = new Random();
                long ran = DateTime.Now.Ticks;
                agvTask.ReqCode = ran.ToString();
                agvTask.TaskCode = taskNo;
                agvTask.TaskTyp = tasktype;
                agvTask.PositionCodePath = position;
                agvTask.CtnrTyp = "1";
                agvTaskList.Add(agvTask);
                string str = "";
                var list2 = agvTaskList.Select(m => m.TaskCode).ToList();
                var jsonData = JsonConvert.SerializeObject(agvTaskList);
                jsonData = jsonData.Substring(1, jsonData.Length - 1);
                jsonData = jsonData.Substring(0, jsonData.Length - 1);
                string response = "";
                try
                {
                    var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
                    response = HttpHelper.DoPost(url, jsonData, "下发给AGV转运命令", "AGV");
                    var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
                    //////解析返回数据
                    var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response);
                    if (agvModel.Code == "0")
                    {
                        //更改任务的发送返回时间//
                        new TaskServer().EditTaskIssueOk(list2, time1, time2);
                        str += "下发成功";
                    }
                    if (agvModel.Code == "1")
                    {
                        new TaskServer().EditTaskIssueNo(list2, time1, time2, agvModel.Message);
                        throw new Exception(agvModel.Message);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                #endregion
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV转运", "", "移库", $"PDA呼叫小车拆空托盘拣货", userId);
                Db.CommitTran();
                return "";
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        public string MoveAddress(string oldAddress, string roadWay, string skuNo,string areaNo="")//01020201  排-列-层-深度
        {
            string nowAddress = "";
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -2249,7 +2249,7 @@
                //出库任务号更改,如果由PLC出库,则PLC回传任务号为:任务号+实际出库口
                var TtaskNo = taskNo;
                var outLine = "";
                if (userId == 0)
                if (taskNo.Length == 18)
                {
                    TtaskNo = taskNo.Substring(0, taskNo.Length - 3);
                    outLine = taskNo.Substring(taskNo.Length - 3, 3);
@@ -2481,7 +2481,8 @@
                        agvTask.CtnrTyp = "1";            //容器类型,值为1
                        if (type == "D02")
                        {
                            agvTask.CtnrNum = "10";     //叠托任务需要下发空托盘数量
                            var palnoNum = Db.Queryable<BllPalletBind>().OrderByDescending(w=>w.Id).First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo);
                            agvTask.CtnrNum = palnoNum.Qty.ToString();     //叠托任务需要下发空托盘数量
                        }
                        agvTaskList.Add(agvTask);
@@ -3931,7 +3932,7 @@
                    throw new Exception("拣货数量不能大于箱内剩余待拣数量");
                }
                decimal pickQty = 0;//拣货的数量
                Db.BeginTran();
                var comList = new List<BllCompleteDetail>();
                foreach (var item in boxInfos)
                {
@@ -4038,12 +4039,12 @@
                }
                //修改出库单信息
                Db.Updateable(notice).ExecuteCommand();
                Db.CommitTran();
                return allot.LoadingAddre;
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
Wms/WMS.BLL/DataServer/StockServer.cs
@@ -16,6 +16,7 @@
using Utility.Tools;
using WMS.BLL.LogServer;
using WMS.DAL;
using WMS.Entity.BllAsnEntity;
using WMS.Entity.BllSoEntity;
using WMS.Entity.Context;
using WMS.Entity.DataEntity;
@@ -1060,13 +1061,18 @@
                palletNo.Status = "2";   //已完成
                Db.Updateable(palletNo).ExecuteCommand();
                //修改库存明细
                stockDetail.Status = "0";//待分配
                stockDetail.LocatNo = "";
                stockDetail.AreaNo = "";
                stockDetail.RoadwayNo = "";
                stockDetail.WareHouseNo = "";
                Db.Updateable(stockDetail).ExecuteCommand();
                if (stockDetail !=null)
                {
                    //修改库存明细
                    stockDetail.Status = "0";//待分配
                    stockDetail.LocatNo = "";
                    stockDetail.AreaNo = "";
                    stockDetail.RoadwayNo = "";
                    stockDetail.WareHouseNo = "";
                    Db.Updateable(stockDetail).ExecuteCommand();
                }
                #region 下发WCS放货完成
                var data = new
@@ -1088,6 +1094,7 @@
                        throw new Exception("放货失败,WCS返回信息错误");
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
@@ -1101,7 +1108,7 @@
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw new Exception("AGV返回入库完成信号处理错误,错误信息:" + ex);
            }
        }
@@ -1110,8 +1117,9 @@
        /// AGV出库完成
        /// </summary>
        /// <param name="TaskCode">任务号</param>
        /// <param name="url">反馈MES备料完成地址</param>
        /// <returns></returns>
        public void SoFinish(string TaskCode)
        public void SoFinish(string TaskCode,string url)
        {
            try
            {
@@ -1153,12 +1161,162 @@
            }
        }
        //完成接口修改(未完成)
        //try
        //{
        //    var palletNo = Db.Queryable<LogTask>().First(m => m.TaskNo == TaskCode && m.Status == "1");//获取正在执行的任务信息
        //    if (palletNo == null)
        //    {
        //        throw new Exception("此任务已完成");
        //    }
        //    var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取库位信息
        //    var storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息
        //    var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo).ToList();
        //    if (stockDetail.Count == 0)
        //    {
        //        throw new Exception("托盘上物料库存明细信息不存在,请检查!");
        //    }
        //    //开启事务
        //    Db.BeginTran();
        //    if (storageLocat != null)
        //    {
        //        if (storageLocat.AreaNo == "B12")//车间缓存位需要通知MES
        //        {
        //            var data = new List<RequertBeiliaoInfoModel>();
        //            //更改库存明细
        //            foreach (var item in stockDetail)
        //            {
        //                item.LocatNo = item.LocatNo;//储位更改
        //                item.WareHouseNo = item.WareHouseNo;//所属仓库更改
        //                item.RoadwayNo = item.RoadwayNo;//所属巷道更改
        //                item.AreaNo = item.AreaNo;//所属区域更改
        //                Db.Updateable(item).ExecuteCommand();
        //                if (string.IsNullOrWhiteSpace(item.SONo))
        //                {
        //                    throw new Exception("当前托盘不是拼托出库托盘");
        //                }
        //                var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList();
        //                if (boxInfo.Count == 0)
        //                {
        //                    throw new Exception("托盘上物料箱码信息不存在,请检查!");
        //                }
        //                //var boxno = boxInfo.GroupBy(w => w.BoxNo).ToList();
        //                var boxno = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).GroupBy(m => new
        //                {
        //                    m.BoxNo
        //                }).Select(it => new DataBoxInfo()
        //                {
        //                    BoxNo = it.BoxNo
        //                }).ToList();
        //                //记录托盘上信息给MES
        //                foreach (var item2 in boxno)
        //                {
        //                    var a = item.ProductionTime.ToString();
        //                    data.Add(new RequertBeiliaoInfoModel()
        //                    {
        //                        no = item2.BoxNo,
        //                        materiel_no = item.SkuNo,
        //                        materiel_name = item.SkuName,
        //                        qty = item.Qty,
        //                        batch = item.LotNo,
        //                        producttime = item.ProductionTime.ToString().Substring(0, 10),
        //                        expiry = item.ExpirationTime.ToString().Substring(0, 10)
        //                    });
        //                }
        //                //库存箱码明细删除
        //                Db.Deleteable(boxInfo).ExecuteCommand();
        //                //删除库存托盘信息
        //                Db.Deleteable(item).ExecuteCommand();
        //                //更改库存总表
        //                var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo);
        //                stock.LockQty -= (decimal)item.Qty;
        //                stock.Qty -= (decimal)item.Qty;
        //                Db.Updateable(stock).ExecuteCommand();
        //                //更改托盘状态
        //                var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
        //                if (pallet != null)
        //                {
        //                    pallet.Status = "0";
        //                    Db.Updateable(pallet).ExecuteCommand();
        //                }
        //            }
        //            //获取令牌
        //            //var token = new Token().GetMesToken(mesTokenUrl);
        //            var token = "";
        //            Dictionary<string, string> mesDic = new Dictionary<string, string>()
        //        {
        //        {"Authorization",token }
        //        };
        //            var endlono = palletNo.EndLocat;
        //            //缓存库位转换
        //            switch (palletNo.EndLocat.ToString().Substring(4, 1))
        //            {
        //                case "1":
        //                    endlono = "Y003_00" + palletNo.EndLocat.ToString().Substring(6, 1);
        //                    break;
        //                case "2":
        //                    endlono = "Y138_0" + palletNo.EndLocat.ToString().Substring(5, 2);
        //                    break;
        //                case "3":
        //                    endlono = "Y128_0" + palletNo.EndLocat.ToString().Substring(5, 2);
        //                    break;
        //                default:
        //                    break;
        //            }
        //            var mescode = Db.Queryable<BllExportNotice>().Where(w => w.SONo == stockDetail.First().SONo).First();
        //            var mesData = new RequertBeiliaoModel()
        //            {
        //                morder_no = mescode.OrderCode,
        //                pallet = stockDetail.First().PalletNo,
        //                layer_no = endlono,
        //                items = data
        //            };
        //            var jsonData = JsonConvert.SerializeObject(mesData);
        //            //调用接口
        //            var response = HttpHelper.DoPost(url, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic);
        //            var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据
        //            if (obj.status != "success")
        //            {
        //                throw new Exception("备料同步MES失败:" + obj.message);
        //            }
        //        }
        //        //修改目的库位状态
        //        storageLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
        //        Db.Updateable(storageLocat).ExecuteCommand();
        //        //修改任务状态
        //        palletNo.Status = "2";   //已完成
        //        Db.Updateable(palletNo).ExecuteCommand();
        //        //修改库存明细
        //        item.Status = "2";// 0:待分配   1:部分分配 2:已分配 3:盘点锁定: 4移库锁定
        //        stockDetail.LocatNo = storageLocat.LocatNo;
        //        stockDetail.AreaNo = storageLocat.AreaNo;
        //        stockDetail.RoadwayNo = storageLocat.RoadwayNo;
        //        stockDetail.WareHouseNo = storageLocat.WareHouseNo;
        //        Db.Updateable(stockDetail).ExecuteCommand();
        //    }
        //    Db.CommitTran();
        //}
        /// <summary>
        /// AGV移库完成
        /// </summary>
        /// <param name="TaskCode">任务号</param>
        /// <param name="url">反馈MES备料完成地址</param>
        /// <returns></returns>
        public void MoveFinish(string TaskCode)
        public void MoveFinish(string TaskCode,string url)
        {
            try
            {
@@ -1167,40 +1325,211 @@
                {
                    throw new Exception("此任务已完成");
                }
                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取库位信息
                var storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息
                var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo); //获取库存信息
                var startLocat = new SysStorageLocat();
                var endLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取目的库位信息
                if (endLocat == null)
                {
                    throw new Exception("未找到相应的目的库位");
                }
                var storageStart = new SysStorageLocat();
                int isstock = 1;
                var bindDetail = new BllPalletBind();
                var sysPanlno = new SysPallets();
                var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo).ToList(); //获取库存信息
                if (stockDetail.Count == 0)
                {
                    //未找到库存后需要判断是否是空托盘移库
                    isstock = 0;
                    bindDetail = Db.Queryable<BllPalletBind>().OrderByDescending(w=>w.Id).First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat);//获取组托盘信息
                    if (bindDetail == null)
                    {
                        bindDetail = Db.Queryable<BllPalletBind>().OrderByDescending(w => w.Id).First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat);//获取组托盘信息
                        if (bindDetail == null)
                        {
                            throw new Exception("未找到空托盘组托信息");
                        }
                    }
                }
                else
                {
                    storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取起始库位信息
                    if (storageStart == null)
                    {
                        throw new Exception("未找到相应的起始库位");
                    }
                }
                //var soAllot = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.PalletNo == palletNo.PalletNo);//获取分配信息
                
                
                //开启事务
                Db.BeginTran();
                //修改起始库位状态
                storageLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
                Db.Updateable(storageLocat).ExecuteCommand();
                //修改目的库位状态
                storageLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
                Db.Updateable(storageLocat).ExecuteCommand();
                endLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
                Db.Updateable(endLocat).ExecuteCommand();
                //修改任务状态
                palletNo.Status = "2";   //已完成
                Db.Updateable(palletNo).ExecuteCommand();
                //修改库存明细
                stockDetail.Status = "2";// 0:待分配   1:部分分配 2:已分配 3:盘点锁定: 4移库锁定
                stockDetail.LocatNo = storageLocat.LocatNo;
                stockDetail.AreaNo = storageLocat.AreaNo;
                stockDetail.RoadwayNo = storageLocat.RoadwayNo;
                stockDetail.WareHouseNo = storageLocat.WareHouseNo;
                Db.Updateable(stockDetail).ExecuteCommand();
                if (isstock == 1)
                {
                    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备料完成反馈
                    var data = new List<RequertBeiliaoInfoModel>();
                    //更改库存明细
                    foreach (var item in stockDetail)
                    {
                        item.LocatNo = endLocat.LocatNo;//储位更改
                        item.WareHouseNo = endLocat.WareHouseNo;//所属仓库更改
                        item.RoadwayNo = endLocat.RoadwayNo;//所属巷道更改
                        item.AreaNo = endLocat.AreaNo;//所属区域更改
                        Db.Updateable(item).ExecuteCommand();
                        if (endLocat != null && endLocat.AreaNo == "B12") //是否是3楼缓存区 是:删除库存
                        {
                            if (string.IsNullOrWhiteSpace(item.SONo))
                            {
                                throw new Exception("当前托盘不是拼托出库托盘");
                            }
                            var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList();
                            if (boxInfo.Count == 0)
                            {
                                throw new Exception("托盘上物料箱码信息不存在,请检查!");
                            }
                            //var boxno = boxInfo.GroupBy(w => w.BoxNo).ToList();
                            var boxno = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).GroupBy(m => new
                            {
                                m.BoxNo,
                                m.ProductionTime,
                                m.ExpirationTime,
                            }).Select(it => new DataBoxInfo()
                            {
                                BoxNo = it.BoxNo,
                                ProductionTime = it.ProductionTime,
                                ExpirationTime = it.ExpirationTime,
                            }).ToList();
                            //记录托盘上信息给MES
                            foreach (var item2 in boxno)
                            {
                                //var a = item.ProductionTime.ToString();
                                data.Add(new RequertBeiliaoInfoModel()
                                {
                                    no = item2.BoxNo,
                                    materiel_no = item.SkuNo,
                                    materiel_name = item.SkuName,
                                    qty = item.Qty,
                                    batch = item.LotNo,
                                    producttime = item2.ProductionTime.ToString().Substring(0, 10),
                                    expiry = item2.ExpirationTime.ToString().Substring(0, 10)
                                });
                            }
                            //库存箱码明细删除
                            Db.Deleteable(boxInfo).ExecuteCommand();
                            //删除库存托盘信息
                            Db.Deleteable(item).ExecuteCommand();
                            //更改库存总表
                            var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo);
                            stock.LockQty -= (decimal)item.Qty;
                            stock.Qty -= (decimal)item.Qty;
                            Db.Updateable(stock).ExecuteCommand();
                            //更改托盘状态
                            var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo.PalletNo);
                            if (pallet != null)
                            {
                                pallet.Status = "0";
                                Db.Updateable(pallet).ExecuteCommand();
                            }
                        }
                    }
                    if (endLocat != null && endLocat.AreaNo == "B12")
                    {
                        //获取令牌
                        //var token = new Token().GetMesToken(mesTokenUrl);
                        var token = "";
                        Dictionary<string, string> mesDic = new Dictionary<string, string>()
                        {
                            {"Authorization",token }
                        };
                        var endlono = endLocat.LocatNo;
                        //缓存库位转换
                        switch (endLocat.LocatNo.ToString().Substring(4, 1))
                        {
                            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()
                        {
                            morder_no = mescode.OrderCode,
                            pallet = stockDetail.First().PalletNo,
                            layer_no = endlono,
                            items = data
                        };
                        var jsonData = JsonConvert.SerializeObject(mesData);
                        //调用接口
                        var response = HttpHelper.DoPost(url, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic);
                        var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据
                        if (obj.status != "success")
                        {
                            throw new Exception("备料同步MES失败:" + obj.message);
                        }
                    }
                    #endregion
                }
                else  //空托盘处理
                {
                    //修改组托信息
                    if (bindDetail.WareHouseNo == "W01") //1、空托盘垛到空托盘收集器;
                    {
                        bindDetail.WareHouseNo = "W02";
                        bindDetail.LocatNo = endLocat.LocatNo;
                        bindDetail.RoadwayNo = "";
                        //修改起始库位状态
                        startLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
                        Db.Updateable(startLocat).ExecuteCommand();
                    }
                    else//2、拣货叫空托盘,小车完成一次,扣减一个空托盘垛上数量
                    {
                        bindDetail.Qty = bindDetail.Qty - 1;
                        if (bindDetail.Qty == 0)//数量为0后更改组托状态和托盘使用状态
                        {
                            bindDetail.Status = "2";
                            bindDetail.IsDel = "1";
                            //修改起始库位状态
                            startLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
                            Db.Updateable(startLocat).ExecuteCommand();
                        }
                        else
                        {
                            bindDetail.LocatNo = startLocat.LocatNo;//?????拣货位托盘如何处理,拣货位是否需要更改状态,是否需要增加库存;
                        }
                    }
                    Db.Updateable(bindDetail).ExecuteCommand();
                }
                Db.CommitTran();
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw new Exception("AGV返回移库完成信号处理错误,错误信息:"+ex);
            }
        }
@@ -1217,32 +1546,41 @@
        {
            try
            {
                List<ReLocateDataModel> list = new List<ReLocateDataModel>();
                //库存信息
                var stockDetailsList = Db.Queryable<StockDetailDto>().ToList();
                if (stockDetailsList.Count == 0)
                {
                    return list;
                }
                for (int i = 0; i < stockDetailsList.Count; i++)
                {
                    list[i].LocatNo = stockDetailsList[i].LocatNo;                  //库位
                    list[i].PalletNo = stockDetailsList[i].PalletNo;                //托盘号
                    list[i].SkuName = stockDetailsList[i].SkuName;                  //物料名称
                    list[i].Stadard = stockDetailsList[i].Standard;                  //规格
                    list[i].LotNo = stockDetailsList[i].LotNo;                      //批次
                    list[i].InspectStatus = stockDetailsList[i].InspectStatus;      //质量状态
                    list[i].Qty = stockDetailsList[i].Qty.ToString();                           //库存数量
                    list[i].Warranty = stockDetailsList[i].ExpirationTime.ToString();           //有效期   ??过期时间,是否要更改
                }
                var stockDetailsList = Db.Queryable<DataStockDetail>().ToList();
                var sql = "select LocatNo,PalletNo,SkuName,Standard,LotNo,InspectStatus,Qty,ExpirationTime as Warranty from DataStockDetail ";
                List<ReLocateDataModel> list = Db.Ado.SqlQuery<ReLocateDataModel>(sql);
                //if (stockDetailsList.Count == 0)
                //{
                //    return list;
                //}
                //foreach (var item in stockDetailsList)
                //{
                //    list.Add(item);
                //}
                //for (int i = 0; i < stockDetailsList.Count; i++)
                //{
                //    list.Add(stockDetailsList);
                //    list[i].LocatNo = stockDetailsList[i].LocatNo;                  //库位
                //    list[i].PalletNo = stockDetailsList[i].PalletNo;                //托盘号
                //    list[i].SkuName = stockDetailsList[i].SkuName;                  //物料名称
                //    list[i].Stadard = stockDetailsList[i].Standard;                  //规格
                //    list[i].LotNo = stockDetailsList[i].LotNo;                      //批次
                //    list[i].InspectStatus = stockDetailsList[i].InspectStatus;      //质量状态
                //    list[i].Qty = stockDetailsList[i].Qty.ToString();                           //库存数量
                //    list[i].Warranty = stockDetailsList[i].ExpirationTime.ToString();           //有效期   ??过期时间,是否要更改
                //}
                return list;
            }
            catch (Exception ex)
            {
                throw new Exception("AGV返回入库完成信号处理错误,错误信息:" + ex);
                throw new Exception("返回库存信息有误,错误信息:" + ex);
            }
        }
        #endregion
Wms/WMS.BLL/LogServer/TaskServer.cs
@@ -130,7 +130,7 @@
                {
                     taskNo = taskNo.Substring(0, taskNo.Length - 3);
                }
                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo);
                var task = Db.Queryable<LogTask>().OrderByDescending(m=>m.Id).First(m => m.TaskNo == taskNo);
                if (task == null)
                {
                    throw new Exception($"未查询到{taskNo}任务号的任务信息");
@@ -168,10 +168,11 @@
        /// <param name="port"></param> 入库口
        /// <param name="url"></param>  请求地址
        /// <returns></returns>
        public string  GetWcsPuttype(string taskno,string port,string url)
        public string  GetWcsPuttype(string taskno,string url)
        {
            try
            {
                var port = Db.Queryable<LogTask>().First(m => m.TaskNo == taskno).EndLocat;
                var data = new
                {
                    Port = port,
Wms/WMS.BLL/SysServer/MaterialsServer.cs
@@ -153,7 +153,17 @@
                    return 2;
                }
                switch (matedto.Warrantydate)
                {
                    case "1": //保存以月为单位
                        matedto.Warranty = matedto.Warranty * 30;
                        break;
                    case "2": //保存以年为单位
                        matedto.Warranty = matedto.Warranty * 365;
                        break;
                    default:
                        break;
                }
                //映射模型
                SysMaterials mate = _mapper.Map<SysMaterials>(matedto);
                mate.AuditStatusNo = "9"; //审核状态
Wms/WMS.BLL/SysServer/PackagServer.cs
@@ -56,6 +56,7 @@
                    L3 = m.L3Num == null ? "" : m.L3Num.ToString() + "/" + m.L3Name,
                    L4 = m.L4Num == null ? "" : m.L4Num.ToString() + "/" + m.L4Name,
                    L5 = m.L5Num == null ? "" : m.L5Num.ToString() + "/" + m.L5Name,
                    //L1Num = int.Parse(m.L1Num.ToString()),
                    //L1Name = m.L1Name,
                    //L2Num = int.Parse(m.L2Num.ToString()),
@@ -282,8 +283,8 @@
                }
                else
                {
                    packagItems.L3Num = null;
                    packagItems.L3Name = null;
                    packagItems.L2Num = null;
                    packagItems.L2Name = null;
                }
                //判断一级包装是否为空
                if (!string.IsNullOrEmpty(model.L1Num) && !string.IsNullOrEmpty(model.L1Name))
Wms/WMS.IBLL/IDataServer/IStockServer.cs
@@ -132,17 +132,17 @@
        /// <summary>
        /// 出库任务完成
        /// </summary>
        /// <param name="skuNo">物料编码</param>
        /// <param name="skuName">物料名称</param>
        /// <param name="TaskCode">任务号</param>
        /// <param name="url">反馈MES备料完成</param>
        /// <returns></returns>
        public void SoFinish(string TaskCode);
        public void SoFinish(string TaskCode,string url);
        /// <summary>
        /// 移库任务完成
        /// </summary>
        /// <param name="skuNo">物料编码</param>
        /// <param name="skuName">物料名称</param>
        /// <param name="TaskCode">任务号</param>
        /// <param name="url">反馈MES备料完成</param>
        /// <returns></returns>
        public void MoveFinish(string TaskCode);
        public void MoveFinish(string TaskCode,string url);
        #endregion
        /// <summary>
Wms/WMS.IBLL/ILogServer/ITaskServer.cs
@@ -53,6 +53,6 @@
        /// <returns>0 入库任务 1 出库任务  2移库任务</returns>
        public string GetTaskType(string taskNo);
        public string GetWcsPuttype(string taskno,string port,string url);
        public string GetWcsPuttype(string taskno,string url);
    }
}
Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs
@@ -29,6 +29,9 @@
        // 判断托盘号是否可用
        string IsEnablePalletNo(string palletNo);
        // 判断地码是否可用
        string IsEnableLocatNo(string locatNo);
        // 根据箱码或托盘号获取箱支信息
        List<BoxInfoDto> GetBoxInfos(BoxInfoVm model);
Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs
@@ -141,6 +141,14 @@
        List<string> AgvTransport2(string soNo, string palletNo, string areaNo,string ruku, int userId, string url);
        /// <summary>
        /// 空托盘入库呼叫小车
        /// </summary>
        /// <param name="palletNo"></param>
        /// <param name="areaNo"></param>
        /// <param name="ruku"></param>
        void AgvTransport3(string palletNo, string locatNo, string ruku, int userId, string url, string wcsurl);
        /// <summary>
        ///  agv任务下发
        /// </summary>
        /// <param name="model"></param>
Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
@@ -101,11 +101,19 @@
        /// </summary>
        /// <param name="model"> </param>
        /// <param name="userId"> </param>
        /// <param name="url"> </param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        List<OutCommandDto> IssuePlnOutHouseWcs(OutModePalletVm model, int userId);
        /// <summary>
        /// WMS拣货申请空托出库
        /// </summary>
        /// <param name="model"> </param>
        /// <param name="userId"> </param>
        /// <param name="url"> </param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        string IssuePlnCehckHouseWcs(CheckModePalletVm model, int userId,string url);
        /// <summary>
        /// 获取平库托盘信息
Wms/Wms/Controllers/DownApiController.cs
@@ -554,12 +554,12 @@
        [HttpPost]
        public IActionResult BindPlnInHouseWcs(PalletsBind model)
        {
            var logStr = $@".\log\WCS\WCS申请空托跺绑定" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            var logStr = $@".\log\WCS\WCS又叠托机申请空托入库" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
            {
                var strMsg = _paAsnSvc.BindNullPallets(model);
                return Ok(new { Success = 0, Message = "空托跺绑定成功", TaskList = strMsg });
                return Ok(new { Success = 0, Message = "空托跺绑定成功"});
            }
            catch (Exception e)
            {
@@ -588,6 +588,30 @@
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"WCS申请空托出库异常返回:( {e.Message} ),", logStr);
                return Ok(new ErpModel { Success = -1, Message = e.Message });
            }
        }
        /// <summary>
        /// WMS拣货申请空托出库
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpPost]
        public IActionResult IssuePlnCheckHouseWcs(CheckModePalletVm model)
        {
            var logStr = $@".\log\WCS\WMS拣货申请空托出库" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
            {
                string list = _pdaSoSvc.IssuePlnCehckHouseWcs(model, 0,_config.AgvHost+_config.GenAgvSchedulingTask);
                return Ok(new { Success = 0, Message = "拣货叫空托盘成功"});
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"WMS拣货申请空托出库异常返回:( {e.Message} ),", logStr);
                return Ok(new ErpModel { Success = -1, Message = e.Message });
            }
@@ -741,13 +765,13 @@
            {
                //返回出库分拣装车口
                var list = _exNoticeSvc.BoxInfoExportWcs(model.BoxNo);
                return Ok(new { Success = 1, Message = "成品箱码拆垛拣货成功", loadubgAddre = list });
                return Ok(new { Success = "1", Message = "成品箱码拆垛拣货成功", loadubgAddre = list });
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"WCS申请成品箱码拆垛拣货异常返回:( {e.Message} ),", logStr);
                return Ok(new ErpModel { Success = -1, Message = e.Message });
                return Ok(new  { Success = "-1", Message = e.Message, loadubgAddre ="" });
            }
        }
@@ -785,10 +809,10 @@
                switch (orderType)
                {
                    case "0"://入库任务执行
                        if (model.TaskTyp == "mid") //AGV到达入库口,请求放货
                        if (model.Method == "mid") //AGV到达入库口,请求放货
                        {
                            //下发WCS放货请求
                            var ret = _taskSvc.GetWcsPuttype(model.TaskCode,model.CurrentCallCode,_config.WcsHost + _config.HttpInRequest);
                            var ret = _taskSvc.GetWcsPuttype(model.TaskCode,_config.WcsHost + _config.HttpInRequest);
                            if (ret.Contains("-1"))
                            {
                                logStr = $@".\log\WCS\任务反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
@@ -796,23 +820,21 @@
                                return Ok(new OutCommanAgvDto { Code = "1", Message = "失败", ReqCode = model.ReqCode });
                            }
                        }
                        else if (model.TaskTyp == "end")//AGV放货到入库口完成
                        else if (model.Method == "end")//AGV放货到入库口完成
                        {
                            _stockSvc.ArriveFinish(model.TaskCode,_config.WcsHost + _config.HttpInFinish);
                        }
                        break;
                    case "1"://出库任务执行
                        _stockSvc.SoFinish(model.TaskCode);
                        _stockSvc.SoFinish(model.TaskCode,_config.MesHost + _config.MesBeiLiaoUrl);
                        break;
                    case "2"://盘库任务执行
                    case "3"://移库任务执行
                        _stockSvc.MoveFinish(model.TaskCode);
                        _stockSvc.MoveFinish(model.TaskCode, _config.MesHost + _config.MesBeiLiaoUrl);
                        break;
                    // return Ok(new OutCommanAgvDto { Code = "0", Message = "成功", ReqCode = model.ReqCode });
Wms/Wms/Controllers/PdaAsnController.cs
@@ -128,6 +128,33 @@
        }
        /// <summary>
        /// 判断托盘是否可用
        /// </summary>
        /// <param name="model">PalletNo:托盘条码</param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult IsEnableLocatNo(PalletBindVm model)
        {
            try
            {
                var strMsg = _PdaAsnSvc.IsEnableLocatNo(model.LocatNo);
                if (strMsg == "")
                {
                    return Ok(new { code = 0, msg = "地码可用!" });
                }
                else
                {
                    return Ok(new { code = 1, msg = strMsg });
                }
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
        }
        /// <summary>
        /// 获取单据明细列表
        /// </summary>
        /// <param name="model">AsnNo:单据号</param>
Wms/Wms/Controllers/PdaCrController.cs
@@ -414,6 +414,39 @@
                return Ok(new { data = "", code = 1, msg = $"异常:{e.Message}" });
            }
        }
        /// <summary>
        /// 空托盘入库呼叫小车
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult AgvTransport3(PdaAgvTransNullPalnoModel model)
        {
            try
            {
                //获取当前登录的用户ID
                var claimsIdentity = this.User.Identity as ClaimsIdentity;
                if (claimsIdentity == null)
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value;
                if (string.IsNullOrWhiteSpace(userId))
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                var uId = int.Parse(userId);
                _pdaCrSvc.AgvTransport3(model.PalletNo, model.LocatNo, model.Ruku, uId, _config.AgvHost + _config.GenAgvSchedulingTask, _config.WcsHost + _config.HttpInConfirm);
                return Ok(new { data = "", code = 0, msg = "成功" });
            }
            catch (Exception e)
            {
                return Ok(new { data = "", code = 1, msg = $"异常:{e.Message}" });
            }
        }
        #endregion
        #region 人工转运