chengsc
2025-06-11 1c2541b283ce6ba855e67c476412dffe2c693480
Merge branch 'csc'
19个文件已修改
2303 ■■■■■ 已修改文件
Pda/View/AsnSetting/WorkshopIn.html 573 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/AsnSetting/productEnterQuantity.html 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/SoSetting/ExNoticeOut.html 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/SoSetting/WorkshopOut.html 549 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/InterFaceModel/AsnModels.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelVm/PdaVm/PdaAsnVm.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs 458 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/HttpServer.cs 320 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/Logic/AllotSku.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.Entity/BllAsnEntity/BllPalletBind.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IHttpServer.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/DownApiController.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/PdaAsnController.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/PdaSoController.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/UpApiController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/AsnSetting/WorkshopIn.html
@@ -0,0 +1,573 @@
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="user-scalable=0,width=device-width,initial-scale=1.0" />
    <meta charset="UTF-8" />
    <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665, minimum-scale=0.5, maximum-scale=1, user-scalable=no" /> -->
    <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665" /> -->
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Boxline PDA</title>
    <link rel="stylesheet" href="/layui/css/layui.css" />
    <link rel="stylesheet" href="/css/style.css" />
    <script src="/js/adaptive.js"></script>
    <link rel="stylesheet" href="/css/my.css" />
    <style type="text/css">
        td {
            word-break: break-all;
            word-wrap: break-word;
        }
        .layui-form-switch {
            margin-top: 0;
        }
        /* 标签样式 */
        .tableyang-this a {
            margin: 10px 10px 0px 0px;
            line-height: 30px;
            width: 100px;
            color: #999;
            text-align: center;
            float: left;
            background: #f7f7f7;
            user-select: none;
            position: relative;
            z-index: 1;
            cursor: pointer;
            border-radius: 5px;
            border: 1px solid #ccc;
            transition: all 0.3s ease;
        }
        .tableyang-this a.hover {
            color: #5298ff;
            background-color: #eff2ff;
            border: 1px solid #5298ff;
        }
        /* 内容居中 */
        .tableyang-tab {
            display: flex;
            /* justify-content: center; */
            /* align-items: center; */
            flex-direction: column;
            height: 90vh;
        }
        /* 必用样式 */
        .tableyang-2,
        .tableyang-3 {
            display: none;
        }
        ul {
            list-style-type: none;
            padding: 0;
        }
        li {
            cursor: pointer;
            background-color: lightgray;
            padding: 10px;
            margin-bottom: 5px;
        }
    </style>
    <link rel="stylesheet" href="/css/adapter.css" />
    <script src="../../js/jquery.js"></script>
    <script src="../../js/jquery-3.5.1.min.js"></script>
</head>
<body>
    <div id="" class="main-content">
        <div id="" class="layout-title">
            <table border="" cellspacing="" cellpadding="">
                <tr>
                    <td class="img-back"><a href="../index.html"><img src="/assets/back.jpg"></a></td>
                    <td class="title-text" lang>车间入库</td>
                    <td class="title-menu-icon"><img id="menuImg" src="/assets/menu.jpg"></td>
                </tr>
            </table>
        </div>
        <div id="" class="layout-sub-content">
            <div id="menuList" class="menu">
                <ul class="" style="text-align: center;">
                    <li><a href="../index.html" lang>主页</a></li>
                    <!-- <li><a href="productEnterConfirm.html">入库信息确认</a></li> -->
                    <li><a href="../login.html" lang>重新登录</a></li>
                </ul>
            </div>
            <button id="option1" class="layout-btn" type="button">标签</button>
            <button id="option2" class="layout-btn" type="button">数量</button>
            <br /><br />
            <!-- 有码 -->
            <div id="content1">
                <div id="zongDiv" class="layout-bill-info" style="height: 285px;">
                    <form class="layui-form" action="">
                        <div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>托盘条码:</label>
                            <div class="layui-input-block">
                                <input id="PalletNo" type="text" lay-verify="stock" lang langholder
                                    placeholder="请扫描托盘条码" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div id="BOX" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>外箱条码:</label>
                            <div class="layui-input-block">
                                <input id="BoxCode" type="text" lay-verify="required" lang langholder
                                    placeholder="请扫描外箱条码" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div id="" class="layui-form-item layout-input">
                           <label class="layui-form-label" lang>数量:</label>
                            <div class="layui-input-block">
                                <input id="BoxNum" type="number" lay-verify="required" lang langholder
                                    placeholder="请输入数量" autocomplete="off" class="layui-input"
                                    oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
                            </div>
                        </div>
                        <div id="" class="layui-form-item layout-dropdownlist">
                            <label class="layui-form-label" lang>车间:</label>
                            <div class="layui-input-block" id="selectAreaDiv">
                                <select id="area" lay-filter="getarea" lay-search>
                                    <option value="B06">1002</option>
                                    <option value="B09">1003一楼</option>
                                    <option value="B07">1003二楼</option>
                                </select>
                                <img src="/assets/down_arraw.png">
                            </div>
                        </div>
                        <table class="layout-tbl-input" border="" cellspacing="" cellpadding="">
                            <tr>
                                <td>
                                    <div id="" class="layui-form-item layout-boxinfo">
                                        <label class="layui-form-label" lang>批次:</label>
                                        <div class="layui-input-block">
                                            <input id="LotNo" type="text" disabled placeholder="" autocomplete="off"
                                                class="layui-input">
                                        </div>
                                    </div>
                                </td>
                                <td>
                                    <div id="" class="layui-form-item layout-boxinfo">
                                        <label class="layui-form-label" lang>物料名称:</label>
                                        <div class="layui-input-block">
                                            <input id="SkuName" type="text" disabled placeholder="" autocomplete="off"
                                                class="layui-input">
                                        </div>
                                    </div>
                                </td>
                            </tr>
                        </table>
                        <table class="layout-tbl-submit" border="" cellspacing="" cellpadding="">
                            <tr>
                                <td style="width: 23%;"></td>
                                <td>
                                    <button class="layout-btn layout-btn-red" lang type="button" lay-submit
                                        lay-filter="formBind">绑定到托盘</button>
                                </td>
                                <td style="width: 33%;"></td>
                            </tr>
                        </table>
                    </form>
                </div>
            </div>
            <!-- 无码 -->
            <div id="content2">
                <div id="zongDiv2" class="layout-bill-info" style="height: 255px;">
                    <form class="layui-form" id="form2" action="">
                       <div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>物料编码:</label>
                            <div class="layui-input-block">
                                <input id="SkuNo" type="text" lay-verify="stock" lang langholder
                                    placeholder="请输入物料编码" autocomplete="off" class="layui-input">
                            </div>
                        </div><div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>批次号:</label>
                            <div class="layui-input-block">
                                <input id="LotNo2" type="text" lay-verify="stock" lang langholder
                                    placeholder="请输入批次" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>托盘条码:</label>
                            <div class="layui-input-block">
                                <input id="PalletNo2" type="text" lay-verify="stock" lang langholder
                                    placeholder="请扫描托盘条码" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>物料数量:</label>
                            <div class="layui-input-block">
                                <input id="SkuQty2" type="number" lay-verify="stock" lang langholder
                                    placeholder="请输入物料数量" autocomplete="off" class="layui-input"
                                    oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
                            </div>
                        </div>
                        <div id="" class="layui-form-item layout-dropdownlist">
                            <label class="layui-form-label" lang>车间:</label>
                            <div class="layui-input-block" id="selectAreaDiv2">
                                <select id="area2" lay-filter="getarea2" lay-search>
                                    <option value="B06">1002</option>
                                    <option value="B09">1003一楼</option>
                                    <option value="B07">1003二楼</option>
                                </select>
                                <img src="/assets/down_arraw.png">
                            </div>
                        </div>
                        <table class="layout-tbl-submit" border="" cellspacing="" cellpadding="">
                            <tr>
                                <td style="width: 23%;"></td>
                                <td>
                                    <button class="layout-btn layout-btn-red" lang type="button" lay-submit
                                        lay-filter="formBind">绑定到托盘</button>
                                </td>
                                <td style="width: 33%;"></td>
                            </tr>
                        </table>
                    </form>
                </div>
                <br>
                <br>
                <div id="demodiv1">
                    <br><br><br><br><br><br><br>
                </div>
                <!-- <div id="" class="cut-line">
                    <img src="/assets/fengexian.png">
                </div> -->
                <!-- <div class="layout-tbl-paging" id="">
                    <table id="tableBoxList1" class="tbl-box-list" border="" cellspacing="" cellpadding="">
                        <tr>
                            <th lang style="width: 15%;">物料编码</th>
                            <th lang style="width: 35%;">物料名称</th>
                            <th lang style="width: 25%;">批次</th>
                            <th lang style="width: 15%;">物料数量</th>
                            <th lang style="width: 10%;">操作</th>
                        </tr>
                        <tr id="boxCell" style="display: none;">
                            <td name="code">AG000001</td>
                            <td name="name">疫苗名称名称名称</td>
                            <td name="lotNo">批次号</td>
                            <td name="num">30</td>
                            <td name="del">
                                <div id="" class="tbl-btn-del" lang>
                                    删除
                                </div>
                            </td>
                        </tr>
                    </table>
                    <table id="tableBoxPages1" class="tbl-box-pages" border="" cellspacing="" cellpadding="">
                        <tr>
                            <td class="page-prev">上一页</td>
                            <td class="page-num page-num-select">1</td>
                            <td class="page-num">2</td>
                            <td class="page-num">3</td>
                            <td class="page-num">4</td>
                            <td class="page-num">5</td>
                            <td class="page-next">下一页</td>
                        </tr>
                    </table>
                </div> -->
            </div>
        </div>
    </div>
    <script src="/js/jquery-3.5.1.min.js"></script>
    <script src="/layui/layui.js"></script>
    <script src="/js/public.js"></script>
    <script src="/js/language.js"></script>
    <script src="/js/jquery.cookie.js"></script>
    <script>
        layui.use(['form', 'jquery'], function () {
            var form = layui.form
            /* 标签切换代码 */
            $('#demodiv').hide();
            $('#demodiv1').hide();
            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;"); //默认颜色
                });
                $('#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;"); //选中后颜色
                });
            });
            /*——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————*/
            initLanguage()
            setLanguage()
            //是否连续组托
            isContinue = "0";
            // 托盘码文本改变时触发
            $("#PalletNo").on('input', function () {
                if ($("#PalletNo").val() == "" || $("#PalletNo").val().length < 8) {
                    return;
                }
                if ($("#PalletNo").val().length >= 8) {
                    $("#PalletNo").val($("#PalletNo").val().substr(-8))
                }
                checkPalletStat()
            })
            // 托盘码文本改变时触发-数量
            $("#PalletNo1").on('input', function () {
                if ($("#PalletNo1").val() == "" || $("#PalletNo1").val().length < 8) {
                    return;
                }
                if ($("#PalletNo1").val().length >= 8) {
                    $("#PalletNo1").val($("#PalletNo1").val().substr(-8))
                }
                checkPalletStat()
            })
            // 判断托盘码是否可用
            function checkPalletStat() {
                if (xianshiyemian == 0) {
                    var param = {
                        "PalletNo": $("#PalletNo").val()
                    }
                    sendData(IP + "/PdaAsn/IsEnablePalletNo", param, 'post', function (res) {
                        if (res.code == 0) {
                            $("#BoxCode").focus();
                        } else {
                            layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () { });
                        }
                    });
                }
                else if (xianshiyemian == 1) {
                    var param = {
                        "PalletNo": $("#PalletNo1").val()
                    }
                    sendData(IP + "/PdaAsn/IsEnablePalletNo", param, 'post', function (res) {
                        if (res.code == 0) {
                            $("#SkuQty").focus();
                        } else {
                            layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () { });
                        }
                    });
                }
            }
            //箱码回车事件
            $("#BoxCode").keydown(function (e) {
                if (e.keyCode === 13) {
                    if ($("#BoxCode").val() == "") {
                        layer.msg('请先扫描箱码', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return
                    }
                    checkBoxInfo()
                }
            });
            //箱回车事件
            function checkBoxInfo() {
                var param = {
                    "boxNo": $("#BoxCode").val(),
                }
                synData(IP + "/PdaAsn/GetWmsBoxInfos", param, 'get', function (res) {
                    if (res.code == 0) { //成功
                        $("#BoxNum").val(res.data[0].Qty);
                        $("#SkuName").val(res.data[0].SkuName);
                        $("#LotNo").val(res.data[0].LotNo);
                    } else { //不成功
                        layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            });
                    }
                });
            }
            //绑定到托盘事件
            form.on('submit(formBind)', function (data) {
                if (xianshiyemian == 0) {
                    if ($("#PalletNo").val() == "") {
                        layer.msg('请扫描托盘条码', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                    if ($("#BoxCode").val() == "") {
                        layer.msg('请扫描外箱条码', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                    var param = {
                        PalletNo: $("#PalletNo").val(),
                        BoxNo: $("#BoxCode").val(),
                        SkuQty: parseFloat($("#BoxNum").val()), //物料数量
                        AreaNo:$("#area").val(),
                        TableType: xianshiyemian,
                    }
                    console.log(param)
                    //组盘
                    sendData(IP + "/PdaAsn/ChejianIn", param, 'post', function (res) {
                        if (res.code == 0) { //成功
                            layer.msg(res.msg, {
                                icon: 1,
                                time: 1000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () {
                                $("#BoxCode").val("");
                                $("#BoxNum").val("");
                                $("#SkuName").val("");
                                $("#LotNo").val("");
                            });
                        } else { //不成功
                            layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () {
                                //回调
                            });
                        }
                    });
                }
                else if (xianshiyemian == 1) {
                    if ($("#bar1").val() == "") {
                        layer.msg('请选择入库单', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                    if ($("#SkuNo").val() == "") {
                        layer.msg('请输入物料', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                    if ($("#PalletNo2").val() == "") {
                        layer.msg('请扫描托盘条码', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                     var param = {
                        PalletNo: $("#PalletNo2").val(),
                        SkuNo: $("#SkuNo").val(),
                        LotNo: $("#LotNo2").val(),
                        SkuQty: parseFloat($("#SkuQty2").val()), //物料数量
                        AreaNo:$("#area").val(),
                        TableType: xianshiyemian,
                    }
                    console.log(param)
                    //组盘
                    sendData(IP + "/PdaAsn/ChejianIn", param, 'post', function (res) {
                        if (res.code == 0) { //成功
                            layer.msg(res.msg, {
                                icon: 1,
                                time: 1000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () {
                                $("#PalletNo2").val("");
                                $("#SkuNo").val("");
                                $("#SkuQty2").val("");
                                $("#LotNo2").val("");
                            });
                        } else { //不成功
                            layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () {
                                //回调
                            });
                        }
                    });
                }
                return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
            });
            /*——————————————————————————————————————————————————————————*/
            $("#menuImg").click(function (e) {
                e.stopPropagation()
                if ($("#menuList").is(":hidden")) {
                    $("#menuList").show()
                } else {
                    $("#menuList").hide()
                }
            })
            $('body').click(function () {
                $("#menuList").hide()
            })
        })
    </script>
</body>
</html>
Pda/View/AsnSetting/productEnterQuantity.html
@@ -1086,14 +1086,21 @@
                            }
                        }
                        asnDetails.forEach(element => {
                            console.log(element);
                            console.log(element.SkuNo  );
                            console.log(  res.data[0].SkuNo);
                            console.log(element.SkuNo == res.data[0].SkuNo);
                            console.log(element.LotNo == res.data[0].LotNo);
                            if (element.SkuNo == res.data[0].SkuNo && element.LotNo == res.data[0].LotNo) {
                                console.log("asdfasdfsadf");
                                var sel = 'dd[lay-value=' + element.id + ']';
                                $('#goodSelect').siblings("div.layui-form-select").find('dl').find(sel).addClass('layui-this');
                                bl = true;
                            }
                        });
                        console.log(bl);
                        if (!bl) {
                            layer.msg("此箱物料不符合该入库单,请核实!", {
                                icon: 2,
Pda/View/SoSetting/ExNoticeOut.html
@@ -147,13 +147,22 @@
            //选中单据事件
            form.on('select(getbar)', function (data) {
                $("#PalletNo").empty()
                $("#PalletNo").append('<option value =>' + '</option>');
                form.render('select');
                if (data.value == "") {
                    return;
                }
                updateGoodList();
            });
            });
            //选中单据明细事件
            form.on('select(goodSelect)', function (data) {
                $("#PalletNo").empty()
                $("#PalletNo").append('<option value =>' + '</option>');
                form.render('select');
            });
            $("#selectDiv").click(function () {
                var input = $('select[id="bar"]').next().find('.layui-select-title input')
                var val = input.val()
@@ -163,6 +172,17 @@
                    $('select[id="bar"]').next().find('.layui-select-title input').val(val)
                })
            })
            $("#selectPalletNo").click(function () {
                var input = $('select[id="PalletNo"]').next().find('.layui-select-title input')
                var val = input.val()
                //先更新一下出库单
                updatePalletNoList(function (data) {
                    $('select[id="PalletNo"]').next().addClass('layui-form-selected')
                    $('select[id="PalletNo"]').next().find('.layui-select-title input').val(val)
                })
            })
            //初始化渲染 出库单
            function updateBillList(callback) {
                var input = $('select[id="bar"]').next().find('.layui-select-title input')
@@ -271,9 +291,10 @@
                form.render('select');
                var param = {
                    soNo:$("#bar").val()
                    SoNo:$("#bar").val(),
                    SoDetailId:$("#goodSelect").val(),
                };
                sendData(IP + "/PdaCr/GetPalletNoListBySoNo", param, 'get', function (res) {
                sendData(IP + "/PdaSo/GetPalletListBySo", param, 'post', function (res) {
                    if (res.code == 0) { //成功
                        for (var i = 0; i < res.data.length; i++) {
                            $("#PalletNo").append('<option value =' + res.data[i] + '>' + res.data[i]+
Pda/View/SoSetting/WorkshopOut.html
@@ -0,0 +1,549 @@
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="user-scalable=0,width=device-width,initial-scale=1.0" />
    <meta charset="UTF-8" />
    <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665, minimum-scale=0.5, maximum-scale=1, user-scalable=no" /> -->
    <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665" /> -->
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Boxline PDA</title>
    <link rel="stylesheet" href="/layui/css/layui.css" />
    <link rel="stylesheet" href="/css/style.css" />
    <script src="/js/adaptive.js"></script>
    <link rel="stylesheet" href="/css/my.css" />
    <style type="text/css">
        td {
            word-break: break-all;
            word-wrap: break-word;
        }
        .layui-form-switch {
            margin-top: 0;
        }
        /* 标签样式 */
        .tableyang-this a {
            margin: 10px 10px 0px 0px;
            line-height: 30px;
            width: 100px;
            color: #999;
            text-align: center;
            float: left;
            background: #f7f7f7;
            user-select: none;
            position: relative;
            z-index: 1;
            cursor: pointer;
            border-radius: 5px;
            border: 1px solid #ccc;
            transition: all 0.3s ease;
        }
        .tableyang-this a.hover {
            color: #5298ff;
            background-color: #eff2ff;
            border: 1px solid #5298ff;
        }
        /* 内容居中 */
        .tableyang-tab {
            display: flex;
            /* justify-content: center; */
            /* align-items: center; */
            flex-direction: column;
            height: 90vh;
        }
        /* 必用样式 */
        .tableyang-2,
        .tableyang-3 {
            display: none;
        }
        ul {
            list-style-type: none;
            padding: 0;
        }
        li {
            cursor: pointer;
            background-color: lightgray;
            padding: 10px;
            margin-bottom: 5px;
        }
    </style>
    <link rel="stylesheet" href="/css/adapter.css" />
    <script src="../../js/jquery.js"></script>
    <script src="../../js/jquery-3.5.1.min.js"></script>
</head>
<body>
    <div id="" class="main-content">
        <div id="" class="layout-title">
            <table border="" cellspacing="" cellpadding="">
                <tr>
                    <td class="img-back"><a href="../index.html"><img src="/assets/back.jpg"></a></td>
                    <td class="title-text" lang>车间出库</td>
                    <td class="title-menu-icon"><img id="menuImg" src="/assets/menu.jpg"></td>
                </tr>
            </table>
        </div>
        <div id="" class="layout-sub-content">
            <div id="menuList" class="menu">
                <ul class="" style="text-align: center;">
                    <li><a href="../index.html" lang>主页</a></li>
                    <!-- <li><a href="productEnterConfirm.html">入库信息确认</a></li> -->
                    <li><a href="../login.html" lang>重新登录</a></li>
                </ul>
            </div>
            <button id="option1" class="layout-btn" type="button">标签</button>
            <button id="option2" class="layout-btn" type="button">数量</button>
            <br /><br />
            <!-- 有码 -->
            <div id="content1">
                <div id="zongDiv" class="layout-bill-info" style="height: 285px;">
                    <form class="layui-form" action="">
                        <div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>托盘条码:</label>
                            <div class="layui-input-block">
                                <input id="PalletNo" type="text" lay-verify="stock" lang langholder
                                    placeholder="请扫描托盘条码" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div id="BOX" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>外箱条码:</label>
                            <div class="layui-input-block">
                                <input id="BoxCode" type="text" lay-verify="required" lang langholder
                                    placeholder="请扫描外箱条码" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <table class="layout-tbl-input" border="" cellspacing="" cellpadding="">
                            <tr>
                                <td>
                                    <div id="" class="layui-form-item layout-boxinfo">
                                        <label class="layui-form-label" style=" width: 21%;" lang>批次:</label>
                                        <div class="layui-input-block" style=" width: 79%;margin-left: 21%;" >
                                            <input id="LotNo" type="text" disabled placeholder="" autocomplete="off"
                                                class="layui-input">
                                        </div>
                                    </div>
                                </td>
                            </tr>
                            <tr>
                                 <td>
                                    <div id="" class="layui-form-item layout-boxinfo">
                                        <label class="layui-form-label" style=" width: 21%;" lang>物料名称:</label>
                                        <div class="layui-input-block" style=" width: 79%;margin-left: 21%;" >
                                            <input id="SkuName" type="text" disabled placeholder="" autocomplete="off"
                                                class="layui-input">
                                        </div>
                                    </div>
                                </td>
                            </tr>
                        </table>
                        <table class="layout-tbl-submit" border="" cellspacing="" cellpadding="">
                            <tr>
                                <td style="width: 23%;"></td>
                                <td>
                                    <button class="layout-btn layout-btn-red" lang type="button" lay-submit
                                        lay-filter="formBind">出库</button>
                                </td>
                                <td style="width: 33%;"></td>
                            </tr>
                        </table>
                    </form>
                </div>
            </div>
            <!-- 无码 -->
            <div id="content2">
                <div id="zongDiv2" class="layout-bill-info" style="height: 255px;">
                    <form class="layui-form" id="form2" action="">
                       <div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>物料编码:</label>
                            <div class="layui-input-block">
                                <input id="SkuNo" type="text" lay-verify="stock" lang langholder
                                    placeholder="请输入物料编码" autocomplete="off" class="layui-input">
                            </div>
                        </div><div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>批次号:</label>
                            <div class="layui-input-block">
                                <input id="LotNo2" type="text" lay-verify="stock" lang langholder
                                    placeholder="请输入批次" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>托盘条码:</label>
                            <div class="layui-input-block">
                                <input id="PalletNo2" type="text" lay-verify="stock" lang langholder
                                    placeholder="请扫描托盘条码" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>物料数量:</label>
                            <div class="layui-input-block">
                                <input id="SkuQty2" type="number" lay-verify="stock" lang langholder
                                    placeholder="请输入物料数量" autocomplete="off" class="layui-input"
                                    oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
                            </div>
                        </div>
                        <div id="" class="layui-form-item layout-dropdownlist">
                            <label class="layui-form-label" lang>车间:</label>
                            <div class="layui-input-block" id="selectAreaDiv2">
                                <select id="area2" lay-filter="getarea2" lay-search>
                                    <option value="B06">1002</option>
                                    <option value="B09">1003一楼</option>
                                    <option value="B07">1003二楼</option>
                                </select>
                                <img src="/assets/down_arraw.png">
                            </div>
                        </div>
                        <table class="layout-tbl-submit" border="" cellspacing="" cellpadding="">
                            <tr>
                                <td style="width: 23%;"></td>
                                <td>
                                    <button class="layout-btn layout-btn-red" lang type="button" lay-submit
                                        lay-filter="formBind">出库</button>
                                </td>
                                <td style="width: 33%;"></td>
                            </tr>
                        </table>
                    </form>
                </div>
                <br>
                <br>
                <div id="demodiv1">
                    <br><br><br><br><br><br><br>
                </div>
                <!-- <div id="" class="cut-line">
                    <img src="/assets/fengexian.png">
                </div> -->
                <!-- <div class="layout-tbl-paging" id="">
                    <table id="tableBoxList1" class="tbl-box-list" border="" cellspacing="" cellpadding="">
                        <tr>
                            <th lang style="width: 15%;">物料编码</th>
                            <th lang style="width: 35%;">物料名称</th>
                            <th lang style="width: 25%;">批次</th>
                            <th lang style="width: 15%;">物料数量</th>
                            <th lang style="width: 10%;">操作</th>
                        </tr>
                        <tr id="boxCell" style="display: none;">
                            <td name="code">AG000001</td>
                            <td name="name">疫苗名称名称名称</td>
                            <td name="lotNo">批次号</td>
                            <td name="num">30</td>
                            <td name="del">
                                <div id="" class="tbl-btn-del" lang>
                                    删除
                                </div>
                            </td>
                        </tr>
                    </table>
                    <table id="tableBoxPages1" class="tbl-box-pages" border="" cellspacing="" cellpadding="">
                        <tr>
                            <td class="page-prev">上一页</td>
                            <td class="page-num page-num-select">1</td>
                            <td class="page-num">2</td>
                            <td class="page-num">3</td>
                            <td class="page-num">4</td>
                            <td class="page-num">5</td>
                            <td class="page-next">下一页</td>
                        </tr>
                    </table>
                </div> -->
            </div>
        </div>
    </div>
    <script src="/js/jquery-3.5.1.min.js"></script>
    <script src="/layui/layui.js"></script>
    <script src="/js/public.js"></script>
    <script src="/js/language.js"></script>
    <script src="/js/jquery.cookie.js"></script>
    <script>
        layui.use(['form', 'jquery'], function () {
            var form = layui.form
            /* 标签切换代码 */
            $('#demodiv').hide();
            $('#demodiv1').hide();
            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;"); //默认颜色
                });
                $('#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;"); //选中后颜色
                });
            });
            /*——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————*/
            initLanguage()
            setLanguage()
            //是否连续组托
            isContinue = "0";
            // 托盘码文本改变时触发
            $("#PalletNo").on('input', function () {
                if ($("#PalletNo").val() == "" || $("#PalletNo").val().length < 8) {
                    return;
                }
                if ($("#PalletNo").val().length >= 8) {
                    $("#PalletNo").val($("#PalletNo").val().substr(-8))
                }
                checkPalletStat()
            })
            // 托盘码文本改变时触发-数量
            $("#PalletNo1").on('input', function () {
                if ($("#PalletNo1").val() == "" || $("#PalletNo1").val().length < 8) {
                    return;
                }
                if ($("#PalletNo1").val().length >= 8) {
                    $("#PalletNo1").val($("#PalletNo1").val().substr(-8))
                }
                checkPalletStat()
            })
            // 判断托盘码是否可用
            function checkPalletStat() {
                if (xianshiyemian == 0) {
                    var param = {
                        "PalletNo": $("#PalletNo").val()
                    }
                    sendData(IP + "/PdaAsn/IsEnablePalletNo", param, 'post', function (res) {
                        if (res.code == 0) {
                            $("#BoxCode").focus();
                        } else {
                            layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () { });
                        }
                    });
                }
                else if (xianshiyemian == 1) {
                    var param = {
                        "PalletNo": $("#PalletNo1").val()
                    }
                    sendData(IP + "/PdaAsn/IsEnablePalletNo", param, 'post', function (res) {
                        if (res.code == 0) {
                            $("#SkuQty").focus();
                        } else {
                            layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () { });
                        }
                    });
                }
            }
            //箱码回车事件
            $("#BoxCode").keydown(function (e) {
                if (e.keyCode === 13) {
                    if ($("#BoxCode").val() == "") {
                        layer.msg('请先扫描箱码', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return
                    }
                    checkBoxInfo()
                }
            });
            //箱回车事件
            function checkBoxInfo() {
                var param = {
                    "BoxNo": $("#BoxCode").val(),
                }
                sendData(IP + "/PdaSo/GetWmsBoxInfos", param, 'get', function (res) {
                    if (res.code == 0) { //成功
                        $("#SkuName").val(res.data[0].SkuName);
                        $("#LotNo").val(res.data[0].LotNo);
                    } else { //不成功
                        layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            });
                    }
                });
            }
            //绑定到托盘事件
            form.on('submit(formBind)', function (data) {
                if (xianshiyemian == 0) {
                    if ($("#PalletNo").val() == "") {
                        layer.msg('请扫描托盘条码', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                    if ($("#BoxCode").val() == "") {
                        layer.msg('请扫描外箱条码', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                    var param = {
                        PalletNo: $("#PalletNo").val(),
                        BoxNo: $("#BoxCode").val(),
                        TableType: xianshiyemian,
                    }
                    //组盘
                    sendData(IP + "/PdaSo/ChejianPick", param, 'post', function (res) {
                        if (res.code == 0) { //成功
                            layer.msg(res.msg, {
                                icon: 1,
                                time: 1000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () {
                                $("#BoxCode").val("");
                                $("#SkuName").val("");
                                $("#LotNo").val("");
                            });
                        } else { //不成功
                            layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () {
                                //回调
                            });
                        }
                    });
                }
                else if (xianshiyemian == 1) {
                    if ($("#bar1").val() == "") {
                        layer.msg('请选择入库单', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                    if ($("#SkuNo").val() == "") {
                        layer.msg('请输入物料', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                    if ($("#PalletNo2").val() == "") {
                        layer.msg('请扫描托盘条码', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        });
                        return;
                    }
                     var param = {
                        PalletNo: $("#PalletNo2").val(),
                        SkuNo: $("#SkuNo").val(),
                        LotNo: $("#LotNo2").val(),
                        SkuQty: parseFloat($("#SkuQty2").val()), //物料数量
                        AreaNo:$("#area").val(),
                        TableType: xianshiyemian,
                    }
                    console.log(param)
                    //组盘
                    sendData(IP + "/PdaAsn/ChejianIn", param, 'post', function (res) {
                        if (res.code == 0) { //成功
                            layer.msg(res.msg, {
                                icon: 1,
                                time: 1000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () {
                                $("#PalletNo2").val("");
                                $("#SkuNo").val("");
                                $("#SkuQty2").val("");
                                $("#LotNo2").val("");
                            });
                        } else { //不成功
                            layer.msg(res.msg, {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () {
                                //回调
                            });
                        }
                    });
                }
                return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
            });
            /*——————————————————————————————————————————————————————————*/
            $("#menuImg").click(function (e) {
                e.stopPropagation()
                if ($("#menuList").is(":hidden")) {
                    $("#menuList").show()
                } else {
                    $("#menuList").hide()
                }
            })
            $('body').click(function () {
                $("#menuList").hide()
            })
        })
    </script>
</body>
</html>
Wms/Model/InterFaceModel/AsnModels.cs
@@ -78,6 +78,9 @@
        public string HouseNo { get; set; }
        public string RoadwayNo { get; set; }
        public string Ceng { get; set; }
        public int palletNum { get; set; }
        public string locate { get; set; }
    }
Wms/Model/ModelVm/PdaVm/PdaAsnVm.cs
@@ -24,6 +24,7 @@
        /// Desc:外箱条码
        /// </summary>           
        public string BoxNo { get; set; }
        public string SkuNo { get; set; }
        
        /// <summary>
        /// Desc:是否连续组托
@@ -100,6 +101,11 @@
        /// </summary>
        public string BoxLevel { get; set; }
        /// <summary>
        /// 车间区域 1002 1003一楼  1003二楼
        /// </summary>
        public string AreaNo { get; set; }
        
    }
}
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -2415,6 +2415,464 @@
            }
        }
        /// <summary>
        /// 根据箱码获取标签箱码信息(车间入库-获取WMS生成的箱信息)
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public List<BoxInfoDto> GetWmsBoxInfos(string boxNo)
        {
            try
            {
                if (string.IsNullOrEmpty(boxNo))
                {
                    throw new Exception("请扫描外箱条码!");
                }
                string sqlString = $@"SELECT BoxNo, SkuNo, SkuName, LotNo, BitBoxMark, SUM(Qty) as Qty  FROM BllBoxInfo
                                        WHERE IsDel = '0' and Status='0' and BoxNo = '{boxNo}'
                                        GROUP BY BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
                var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
                if (models.Count != 0)
                {
                    return models;
                }
                else
                {
                    throw new Exception("没有查询到箱码信息");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void ChejianIn(string palletNo,string boxNo,decimal qty,string areaNo,int userId)
        {
            try
            {
                #region MyRegion
                if (string.IsNullOrWhiteSpace(palletNo))
                {
                    throw new Exception("托盘号不能为空");
                }
                if (string.IsNullOrWhiteSpace(boxNo))
                {
                    throw new Exception("箱号不能为空");
                }
                if (qty<=0)
                {
                    throw new Exception("数量不能小等0");
                }
                var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo).ToList();
                if (boxInfo.Count == 0)
                {
                    throw new Exception("未查询到当前箱号信息");
                }
                var boxInfoOne = boxInfo.First();
                var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
                if (pall == null)
                {
                    throw new Exception("未查询到当前托盘信息");
                }
                #endregion
                //开启事务
                Db.BeginTran();
                //当前时间
                var comTime = DateTime.Now;
                #region 包装
                var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == boxInfoOne.SkuNo);
                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo);
                var pNum = 0;//托盘物品数量
                var bNum = 0;//箱码物品数量
                //公共方法获取包装数量
                new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum);
                #endregion
                var msgStr = $"箱号为{boxNo}";
                var boxInfoList = new List<BllBoxInfo>();
                boxInfoList.AddRange(boxInfo);
                #region 库存明细
                var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo);
                if (area == null)
                {
                    throw new Exception("入库区域不能为空");
                }
                var tags = "0";
                // 判断库存明细是否已有此托盘信息
                var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo== boxInfoOne.SkuNo && m.LotNo == boxInfoOne.LotNo && m.PalletNo == palletNo);
                var sdId1 = 0;
                if (sd1 != null)
                {
                    if (sd1.AreaNo!= areaNo)
                    {
                        throw new Exception("选择的区域与库存不同");
                    }
                    sdId1 = sd1.Id;
                    // 库存已存在 更新数据
                    sd1.Qty += qty;
                    sd1.CompleteTime = comTime;
                    sd1.UpdateUser = userId;
                    sd1.UpdateTime = comTime;
                    Db.Updateable(sd1).ExecuteCommand();
                }
                else
                {
                    var sd2 = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0" && !string.IsNullOrWhiteSpace(m.AreaNo));
                    if (sd2.Count(m=>m.AreaNo!= areaNo) > 0)
                    {
                        throw new Exception("当前托盘位置与选择的不同,请核实");
                    }
                    // 库存不存在 插入数据
                    sd1 = new DataStockDetail()
                    {
                        ASNNo = "",
                        LotNo = boxInfoOne.LotNo,
                        LotText = boxInfoOne.LotText,
                        SupplierLot = boxInfoOne.SupplierLot,
                        SkuNo = sku.SkuNo,
                        SkuName = sku.SkuName,
                        Standard = sku.Standard,
                        Qty = qty,
                        LockQty = 0,
                        FrozenQty = 0,
                        InspectQty = 0,
                        WareHouseNo = area.WareHouseNo,//所属仓库
                        RoadwayNo = "",//所属巷道
                        AreaNo = area.AreaNo,//所属区域
                        LocatNo = "",//储位地址
                        PalletNo = palletNo,
                        PalletTags = tags,
                        CompleteTime = comTime,
                        ProductionTime = boxInfoOne.ProductionTime,
                        ExpirationTime = boxInfoOne.ExpirationTime,
                        Status = "0",
                        InspectMark = boxInfoOne.InspectMark,
                        InspectStatus = sku.IsInspect,
                        BitPalletMark = "1",
                        PackagNo = sku.PackagNo,
                        IsDel = "0",
                        CreateUser = 0,
                        CreateTime = comTime
                    };
                    //添加库存明细
                    sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity();
                }
                #endregion
                // 更改箱支关系表
                decimal factQty = 0.00m;//托盘总数量
                //标签组托
                var boxGroup = boxInfo.GroupBy(m => m.BoxNo).ToList();
                foreach (var g in boxGroup)
                {
                    decimal boxFullQty = 0;//箱内总数量
                    foreach (var box in g)
                    {
                        if (box.BindNo != null && box.BindNo != 0)
                        {
                            continue;
                        }
                        box.PalletNo = palletNo;
                        box.Status = "2";
                        box.CompleteTime = comTime;
                        box.UpdateTime = comTime;
                        box.UpdateUser = userId;
                        //box.Qty = box.Qty;
                        //box.BitBoxMark = box.Qty == box.FullQty ? "0" : "1";
                        factQty += box.Qty;
                        boxFullQty += box.Qty;
                        #region 库存箱码明细
                        var box2 = new DataBoxInfo()
                        {
                            StockDetailId = sdId1,
                            BoxNo = box.BoxNo,
                            BoxNo2 = box.BoxNo2,
                            BoxNo3 = box.BoxNo3,
                            PalletNo = box.PalletNo,
                            PalletNo2 = box.PalletNo2,
                            PalletNo3 = box.PalletNo3,
                            Qty = box.Qty,
                            FullQty = box.FullQty,
                            Status = "2",//0:未组托  1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货
                            LotNo = box.LotNo,
                            LotText = box.LotText,
                            SkuNo = box.SkuNo,
                            SkuName = box.SkuName,
                            Standard = sku.Standard,
                            ProductionTime = box.ProductionTime,
                            SupplierLot = box.SupplierLot,
                            InspectStatus = sku.IsInspect,
                            InspectMark = box.InspectMark,
                            BitBoxMark = box.BitBoxMark,
                            ExpirationTime = box.ExpirationTime,
                            CreateUser = 0,
                            CreateTime = comTime
                        };
                        //添加库存箱码明细
                        Db.Insertable(box2).ExecuteCommand();
                        #endregion
                    }
                    if (boxFullQty > bNum)
                    {
                        throw new Exception($"绑定失败,{g.Key}箱码绑定数量大于该物品包装数量!");
                    }
                }
                //更改箱支关系表信息
                Db.Updateable(boxInfoList).ExecuteCommand();
                #region 库存
                var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == boxInfoOne.LotNo);
                if (dataStock != null)
                {
                    dataStock.Qty += factQty;
                    Db.Updateable(dataStock).ExecuteCommand();
                }
                else
                {
                    var stock = new DataStock()
                    {
                        SkuNo = sku.SkuNo,
                        SkuName = sku.SkuName,
                        Standard = sku.Standard,
                        LotNo = boxInfoOne.LotNo,
                        LotText = boxInfoOne.LotText,
                        Qty = qty,
                        LockQty = 0,
                        FrozenQty = 0,
                        IsSampling = "0",
                        IsDel = "0",
                        CreateUser = userId,
                        CreateTime = comTime
                    };
                    Db.Insertable(stock).ExecuteCommand();
                }
                #endregion
                // 更改托盘使用状态
                var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';";
                ////添加托盘记录表数据
                //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','组盘','0',getDate(),{userId},NULL,NULL);";
                //Db.Ado.ExecuteCommand(sqlStr);
                new OperationASNServer().AddLogOperationAsn("PDA模块", "车间入库", boxNo, "添加", $"添加了托盘码为:{palletNo}、{msgStr}的入库信息", userId);
                //提交事务
                Db.CommitTran();
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 车间绑定托盘 不贴标物料
        /// </summary>
        /// <param name="model"></param>
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        public void ChejianQtyIn(string palletNo, string skuNo, string lotNo, decimal qty, string areaNo, int userId)
        {
            try
            {
                #region MyRegion
                if (string.IsNullOrWhiteSpace(palletNo))
                {
                    throw new Exception("托盘号不能为空");
                }
                if (string.IsNullOrWhiteSpace(skuNo))
                {
                    throw new Exception("物料不能为空");
                }
                if (qty <= 0)
                {
                    throw new Exception("数量不能小等0");
                }
                var skuInfo = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == skuNo);
                if (skuInfo == null)
                {
                    throw new Exception("未查询到物料信息");
                }
                var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
                if (pall == null)
                {
                    throw new Exception("未查询到当前托盘信息");
                }
                #endregion
                //开启事务
                Db.BeginTran();
                //当前时间
                var comTime = DateTime.Now;
                #region 包装
                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuInfo.PackagNo);
                var pNum = 0;//托盘物品数量
                var bNum = 0;//箱码物品数量
                //公共方法获取包装数量
                new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum);
                #endregion
                #region 库存明细
                var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo);
                if (area == null)
                {
                    throw new Exception("入库区域不能为空");
                }
                var tags = "0";
                // 判断库存明细是否已有此托盘信息
                var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo == skuNo && m.LotNo == lotNo && m.PalletNo == palletNo);
                var sdId1 = 0;
                if (sd1 != null)
                {
                    if (sd1.AreaNo != areaNo)
                    {
                        throw new Exception("选择的区域与库存不同");
                    }
                    sdId1 = sd1.Id;
                    // 库存已存在 更新数据
                    sd1.Qty += qty;
                    sd1.CompleteTime = comTime;
                    sd1.UpdateUser = userId;
                    sd1.UpdateTime = comTime;
                    if (sd1.Qty >= pNum)
                    {
                        sd1.BitPalletMark = "0";
                    }
                    Db.Updateable(sd1).ExecuteCommand();
                }
                else
                {
                    // 库存不存在 插入数据
                    sd1 = new DataStockDetail()
                    {
                        LotNo = lotNo,
                        SupplierLot = "",
                        SkuNo = skuInfo.SkuNo,
                        SkuName = skuInfo.SkuName,
                        Standard = skuInfo.Standard,
                        Qty = qty,
                        LockQty = 0,
                        FrozenQty = 0,
                        InspectQty = 0,
                        WareHouseNo = area.WareHouseNo,//所属仓库
                        RoadwayNo = "",//所属巷道
                        AreaNo = area.AreaNo,//所属区域
                        LocatNo = "",//储位地址
                        PalletNo = palletNo,
                        PalletTags = tags,
                        CompleteTime = comTime,
                        //ProductionTime = boxInfoOne.ProductionTime,
                        //ExpirationTime = boxInfoOne.ExpirationTime,
                        Status = "0",
                        InspectMark = "0",
                        InspectStatus = "1",
                        BitPalletMark = qty >= pNum ?"0" :"1",
                        PackagNo = skuInfo.PackagNo,
                        IsDel = "0",
                        CreateUser = 0,
                        CreateTime = comTime
                    };
                    //添加库存明细
                    sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity();
                }
                #endregion
                // 更改箱支关系表
                decimal factQty = 0.00m;//托盘总数量
                #region 库存
                var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == skuInfo.SkuNo && m.LotNo == lotNo);
                if (dataStock != null)
                {
                    dataStock.Qty += factQty;
                    Db.Updateable(dataStock).ExecuteCommand();
                }
                else
                {
                    var stock = new DataStock()
                    {
                        SkuNo = skuInfo.SkuNo,
                        SkuName = skuInfo.SkuName,
                        Standard = skuInfo.Standard,
                        LotNo = lotNo,
                        LotText = "",
                        Qty = qty,
                        LockQty = 0,
                        FrozenQty = 0,
                        IsSampling = "0",
                        IsDel = "0",
                        CreateUser = userId,
                        CreateTime = comTime
                    };
                    Db.Insertable(stock).ExecuteCommand();
                }
                #endregion
                // 更改托盘使用状态
                var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';";
                ////添加托盘记录表数据
                //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','组盘','0',getDate(),{userId},NULL,NULL);";
                Db.Ado.ExecuteCommand(sqlStr);
                new OperationASNServer().AddLogOperationAsn("PDA模块", "车间入库", skuNo, "添加", $"添加了托盘码为:{palletNo}的入库信息", userId);
                //提交事务
                Db.CommitTran();
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        #endregion
        // 获取单据列表
        public List<ArrivalNoticeDto> GetArrivalNotices(ArrivalNoticeVm model)
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -142,15 +142,19 @@
                    var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0");
                    if (newPalletInfo == null)
                    {
                        var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id != pinStockDetail.Id).ToList();
                        var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew &&(m.SkuNo != stockDetail.SkuNo || m.LotNo != stockDetail.LotNo)).ToList();
                        if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0)
                        {
                            throw Oops.Bah("新托盘信息不存在或已被使用!");
                        } 
                    }
                    else
                    {
                    //修改新托盘状态
                    newPalletInfo.Status = "1";
                    await Db.Updateable(newPalletInfo).ExecuteCommandAsync();
                    }
                }
                
                var sd = new DataStockDetail();
@@ -458,9 +462,10 @@
                if (isNew)
                {
                    sd.Qty = pickQty;
                    sd.LockQty = pickQty;
                    await Db.Updateable(sd).ExecuteCommandAsync();
                    var sdnew = Db.Queryable<DataStockDetail>().First(m => m.Id == sdId);
                    sdnew.Qty = pickQty;
                    sdnew.LockQty = pickQty;
                    await Db.Updateable(sdnew).ExecuteCommandAsync();
                }
                else
                {
@@ -588,15 +593,18 @@
                    var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0");
                    if (newPalletInfo == null)
                    {
                        var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id != pinStockDetail.Id).ToList();
                        var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && (m.SkuNo != stockDetail.SkuNo && m.LotNo != stockDetail.LotNo)).ToList();
                        if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0)
                        {
                            throw Oops.Bah("新托盘信息不存在或已被使用!");
                        }
                    }
                    else
                    {
                    //修改新托盘状态
                    newPalletInfo.Status = "1";
                    await Db.Updateable(newPalletInfo).ExecuteCommandAsync();
                    }
                }
                if (isNew)
@@ -1467,6 +1475,151 @@
            }
        }
        //车间pda拣货
        public async Task ChejianPick(string palletNo, string boxNo, int userId)
        {
            Db.BeginTran();
            try
            {
                #region 判断
                if (string.IsNullOrWhiteSpace(palletNo))
                {
                    throw Oops.Bah("托盘码不能为空");
                }
                if (string.IsNullOrEmpty(boxNo))
                {
                    throw Oops.Bah("追溯条码和拣货数量不能同时输入");
                }
                //箱码明细
                List<DataBoxInfo> boxInfos;
                var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo);
                if (await boxInfo.CountAsync() == 0)
                {
                    throw Oops.Bah("未查询到该箱码及追溯码的信息");
                }
                boxInfos = await boxInfo.ToListAsync();
                //库存明细
                var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == boxInfos.First().SkuNo && m.LotNo == boxInfos.First().LotNo);
                if (stockDetail == null)
                {
                    throw Oops.Bah("未查询到该托盘分配的库存明细信息!");
                }
                var areaList = new List<string>() { "B06", "B07", "B09" };
                if (!areaList.Contains(stockDetail.AreaNo))
                {
                    throw Oops.Bah("托盘不是车间托盘!");
                }
                //库存总表
                var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
                if (stock == null)
                {
                    throw Oops.Bah("未查询到该托盘分配的库存信息!");
                }
                #endregion
                var pickQty = boxInfos.Sum(m => m.Qty);
                //删除或修改库存明细
                stockDetail.BitPalletMark = "1";//修改为零托标识
                stockDetail.Qty -= pickQty;
                if (stockDetail.Qty == stockDetail.LockQty)
                {
                    stockDetail.Status = "2";
                }
                else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0)
                {
                    stockDetail.Status = "1";
                }
                else
                {
                    stockDetail.Status = "0";
                }
                if (stockDetail.Qty <= 0)
                {
                    await Db.Deleteable(stockDetail).ExecuteCommandAsync();
                }
                else
                {
                    await Db.Updateable(stockDetail).ExecuteCommandAsync();
                }
                stock.Qty -= pickQty;
                //stock.LockQty -= pickQty;
                if (stock.Qty <= 0)
                {
                    await Db.Deleteable(stock).ExecuteCommandAsync();
                }
                else
                {
                    await Db.Updateable(stock).ExecuteCommandAsync();
                }
                var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo);
                if (num2 <= 0)
                {
                    //改变托盘状态
                    var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0");
                    if (pallet == null)
                    {
                        throw Oops.Bah("未在托盘表中查询到托盘信息");
                    }
                    pallet.Status = "0";
                    await Db.Updateable(pallet).ExecuteCommandAsync();
                }
                //添加操作日志记录
                var k = new OperationSOServer().AddLogOperationSo("PDA模块", "车间出库", boxNo, "拣货", $"在PDA上对箱号为:{boxNo}的托盘码为:{palletNo}的拣货操作", userId);
                Db.CommitTran();
            }
            catch (AppFriendlyException e)
            {
                Db.RollbackTran();
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 根据箱码获取标签箱码信息(车间入库-获取WMS生成的箱信息)
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public List<BoxInfoDto> GetWmsBoxInfos(string boxNo)
        {
            try
            {
                if (string.IsNullOrEmpty(boxNo))
                {
                    throw new Exception("请扫描外箱条码!");
                }
                string sqlString = $@"SELECT BoxNo, SkuNo, SkuName, LotNo FROM DataBoxInfo
                                        WHERE IsDel = '0' and BoxNo = '{boxNo}'
                                        GROUP BY BoxNo,SkuNo,SkuName,LotNo; ";
                var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
                if (models.Count != 0)
                {
                    return models;
                }
                else
                {
                    throw new Exception("没有查询到箱码信息");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
@@ -1521,6 +1674,27 @@
            return allotList2;
        }
        //获取托盘中含有的执行中的单据
        public async Task<List<string>> GetPalletListBySo(string soNo, string soDetailId)
        {
            if (string.IsNullOrWhiteSpace(soNo))//判断托盘是否为空
            {
                throw Oops.Bah("出库单为空,请选择出库单");
            }
            if (string.IsNullOrWhiteSpace(soDetailId))
            {
                throw Oops.Bah("出库明细为空,请选择物料-批次");
            }
            var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "0" && m.SONo == soNo && m.SODetailNo == int.Parse(soDetailId)).Select(m => m.PalletNo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync();
            return allotList;
        }
        //获取托盘中含有的执行中的单据
        public async Task<List<string>> GetRunNoticeList(string type)
@@ -2468,6 +2642,7 @@
                        throw Oops.Bah("需要垛数大于库存垛数,请重新输入!");
                    }
                }
                stockDetail = new AllotSku().GetDataListOrder(stockDetail);
                //获取库存总表信息
                var stock = await Db.Queryable<DataStock>().FirstAsync(s => s.IsDel == "0" && s.SkuNo == "100099");
                //验证库存总表是否为空
@@ -2571,7 +2746,7 @@
                        Type = "1",//任务类型 0 入库任务 1 出库任务  2 移库任务
                        Status = "1",//任务状态0:等待执行1正在执行2执行完成
                        OrderType = "1",//0 入库单 1 出库单  2 盘点单  3 移库单
                        CreateTime = serverTime, //创建时间
                        CreateTime = Db.GetDate(), //创建时间
                        CreateUser = userId, //创建人
                        Msg = "Pda空托从" + s.LocatNo + "到" + model.OutMode + "的出库任务", //关键信息
                        //FinishDate = serverTime, //完成时间
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -1014,7 +1014,7 @@
                    skuList = skuList.Where(m => m.SkuNo == "100088").ToList();
                }
                skuStrList = skuList.Select(m => m.SkuNo).ToList();
                var areaStr = new List<string>() { "B02", "B05", "B08" };
                var areaStr = new List<string>() { "B06", "B07", "B09" };
                var stockRst = new StockServer();
                var stockDetailRst = new StockDetailServer();
                Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
Wms/WMS.BLL/HttpServer.cs
@@ -26,6 +26,298 @@
        private static readonly SqlSugarScope Db = DataContext.Db;
        public HttpServer() { }
        public OutCommandDto RequestPalletIn(string palletNo, string houseNo, int palletNum, string Strlocate)
        {
            return null;
            //try
            //{
            //    #region 判断
            //    if (string.IsNullOrEmpty(palletNo))
            //    {
            //        throw new Exception("托盘号不能为空");
            //    }
            //    if (string.IsNullOrEmpty(houseNo))
            //    {
            //        throw new Exception("仓库号不能为空");
            //    }
            //    if (palletNum <= 0)
            //    {
            //        throw new Exception("托盘数量不能小等0");
            //    }
            //    if (string.IsNullOrEmpty(Strlocate))
            //    {
            //        throw new Exception("起始位置不能为空");
            //    }
            //    //获取储位信息
            //    var locateInfo = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.WareHouseNo == houseNo && m.LocatNo == Strlocate);
            //    if (locateInfo == null)
            //    {
            //        throw new Exception("未查询到空储位");
            //    }
            //    if (locateInfo.Flag != "0")
            //    {
            //        throw new Exception("当前位置标识状态是非正常的");
            //    }
            //    #endregion
            //    #region MyRegion
            //    var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList();
            //    if (stockDetail.Count > 0)
            //    {
            //        throw new Exception("当前托盘在库内已有库存信息,请核实");
            //    }
            //    //获取托盘信息
            //    var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
            //    if (pallet == null)
            //    {
            //        throw new Exception("未查询到托盘信息");
            //    }
            //    if (pallet.Status != "0")
            //    {
            //        throw new Exception("托盘状态不能未使用状态");
            //    }
            //    //获取托盘信息
            //    var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == "100099");
            //    var pNum = 0;
            //    var bNum = 0;
            //    new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
            //    var datetime = Db.GetDate();
            //    Db.BeginTran();
            //    // 插入托盘绑定表
            //    var modelpb = new BllPalletBind
            //    {
            //        ASNNo = "",
            //        ASNDetailNo = 0,
            //        TaskNo = "", //任务号
            //        PalletNo = palletNo,
            //        Qty = palletNum,
            //        FullQty = pNum,
            //        Status = "3", //上架完成
            //        Type = "1", //0 物料托 1 空托
            //        LotNo = "",
            //        LotText = "",
            //        SupplierLot = "",
            //        InspectMark = "0", //0 否 1 是
            //        BitPalletMark = pNum == palletNum ? "0" : "1",
            //        IsBale = "0",
            //        IsBelt = "0",
            //        CreateUser = 0,
            //        CreateTime = Db.GetDate()
            //    };
            //    var id = Db.Insertable(modelpb).ExecuteReturnIdentity();
            //    #region 库存明细
            //    var sd1 = new DataStockDetail()
            //    {
            //        LotNo = modelpb.LotNo,
            //        LotText = modelpb.LotText,
            //        SupplierLot = modelpb.SupplierLot,
            //        SkuNo = sku.SkuNo,
            //        SkuName = sku.SkuName,
            //        Standard = sku.Standard,
            //        Qty = modelpb.Qty,
            //        LockQty = 0,
            //        FrozenQty = 0,
            //        InspectQty = 0,
            //        ASNNo = modelpb.ASNNo,
            //        ASNDetailNo = modelpb.ASNDetailNo,
            //        WareHouseNo = "",
            //        RoadwayNo = "",
            //        AreaNo = "",
            //        LocatNo = "",
            //        PalletNo = modelpb.PalletNo,
            //        PalletNo2 = modelpb.PalletNo2,
            //        PalletNo3 = modelpb.PalletNo3,
            //        PalletTags = "0",
            //        CompleteTime = datetime,
            //        ProductionTime = modelpb.ProductionTime,
            //        ExpirationTime = modelpb.ExpirationTime,
            //        Status = "0",
            //        InspectMark = modelpb.InspectMark,
            //        InspectStatus = sku.IsInspect,
            //        BitPalletMark = modelpb.BitPalletMark,
            //        PackagNo = sku.PackagNo,
            //        IsBale = modelpb.IsBale,
            //        IsBelt = modelpb.IsBelt,
            //        IsDel = "0",
            //        CreateUser = 0,
            //        CreateTime = datetime
            //    };
            //    var sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity();
            //    #endregion
            //    #region 库存
            //    var dataStock1 = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo);
            //    if (dataStock1 != null)
            //    {
            //        dataStock1.Qty += modelpb.Qty;
            //        if (modelpb.InspectMark == "1")
            //        {
            //            dataStock1.IsSampling = "0";
            //        }
            //        Db.Updateable(dataStock1).ExecuteCommand();
            //    }
            //    else
            //    {
            //        var stock = new DataStock()
            //        {
            //            SkuNo = sku.SkuNo,
            //            SkuName = sku.SkuName,
            //            Standard = sku.Standard,
            //            LotNo = "",
            //            LotText = "",
            //            Qty = modelpb.Qty,
            //            LockQty = 0,
            //            FrozenQty = 0,
            //            IsSampling = "0",
            //            IsDel = "0",
            //            CreateUser = 0,
            //            CreateTime = datetime
            //        };
            //        Db.Insertable(stock).ExecuteCommand();
            //    }
            //    #endregion
            //    #region 申请储位
            //    SysStorageLocat locate;
            //    var sku = skuList.FirstOrDefault(m => m.SkuNo == skuNo);
            //    if (sku == null)
            //    {
            //        throw new Exception("物料信息中未查询到入库单明细包含的物料信息,不可入库");
            //    }
            //    //判断物料是否含有类别信息
            //    if (string.IsNullOrWhiteSpace(sku.CategoryNo))
            //    {
            //        throw new Exception($"物料:{sku.SkuNo}未查询到类别信息");
            //    }
            //    var skuCategory = skuCategoryList.FirstOrDefault(m => m.CategoryNo == sku.CategoryNo);
            //    if (skuCategory == null)
            //    {
            //        throw new Exception($"未在类别信息中查询到物料:{sku.SkuNo}包含的类别");
            //    }
            //    var areaStr = skuCategory.AreaNo.Split(",");
            //    var areaList = new List<string>();
            //    foreach (var item in areaStr)
            //    {
            //        areaList.Add(item);
            //    }
            //    locate = allotLocate.GetSuiTableLocate(houseNo, areaList, "", ceng);
            //    #endregion
            //    #region 添加任务
            //    //添加巷道使用记录
            //    var log = new SysRoadwayUseLog
            //    {
            //        RoadwayNo = locateInfo.RoadwayNo,
            //        WareHouseNo = houseNo,
            //        Row = 0,
            //        Column = 0,
            //        Layer = 0,
            //    };
            //    Db.Insertable(log).ExecuteCommand();
            //    var taskNo = new Common().GetMaxNo("TK");
            //    var inTask = new LogTask    //入库任务
            //    {
            //        TaskNo = taskNo,
            //        Sender = "WMS",
            //        Receiver = "WCS",
            //        IsSuccess = 1, //是否下发成功 0失败 1成功
            //        SendDate = DateTime.Now,  //发送时间
            //        BackDate = DateTime.Now,  //返回时间
            //        StartRoadway = "",            // 起始巷道
            //        StartLocat = locate,//起始位置
            //        EndLocat = locateInfo.LocatNo,//目标位置
            //        EndRoadway = locateInfo.RoadwayNo,  // 目标巷道
            //        PalletNo = palletNo,//托盘码
            //        IsSend = 1,//是否可再次下发
            //        IsCancel = 1,//是否可取消
            //        IsFinish = 1,//是否可完成
            //        Type = "0",//任务类型 0 入库任务 1 出库任务  2 移库任务
            //        Status = "1",//任务状态0:等待执行1正在执行2执行完成
            //        OrderType = "0",//0 入库单 1 出库单  2 盘点单  3 移库单
            //        Msg = $"{locateInfo.LocatNo}到=>>" +  + "的入库任务", //关键信息
            //    };
            //    Db.Insertable(inTask).ExecuteCommand();
            //    var asnNo = "";
            //    //添加托盘上架记录
            //    var upShelf = new BllPalletUpShelf()
            //    {
            //        TaskNo = inTask.TaskNo,
            //        TraceNo = asnNo,
            //        PalletNo = palletNo,
            //        SkuNo = stockModel.SkuNo,
            //        SkuName = stockModel.SkuName,
            //        LotNo = stockModel.LotNo,
            //        Status = "1",
            //        WareHouseNo = houseNo,
            //        RoadwayNo = locate.RoadwayNo,
            //        AreaNo = locate.AreaNo,
            //        LocatNo = locate.LocatNo,
            //        CreateUser = 0,
            //    };
            //    Db.Insertable(upShelf).ExecuteCommand();
            //    locate.Status = "2";
            //    Db.Updateable(locate).ExecuteCommand();
            //    Db.CommitTran();
            //    comDto = new OutCommandDto()
            //    {
            //        TaskNo = taskNo, // 任务号
            //        TaskType = "0",// 任务类型
            //        PalletNo = palletNo,//托盘号
            //        StartRoadway = inTask.StartRoadway,
            //        StartLocate = inTask.StartLocat, // 起始位置
            //        EndLocate = inTask.EndLocat, // 目标位置
            //        EndRoadway = inTask.EndRoadway,   // 目标巷道
            //        Order = 999,
            //        Type = PLCTypeEnum.AGV
            //    };
            //    #endregion
            //    // 更改托盘使用状态
            //    string sqlStr = string.Empty;
            //    sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';";
            //    Db.Ado.ExecuteCommand(sqlStr);
            //    Db.CommitTran();
            //    #endregion
            //    return null;
            //}
            //catch (Exception e )
            //{
            //    throw new Exception(e.Message);
            //}
        }
        /// <summary>
        /// 申请储位  (立体库)
        /// </summary>
@@ -1378,7 +1670,7 @@
                    throw new Exception("选择的出库单明细参数错误");
                }
                //所有要出库的出库分配信息(未下发的信息和待拣货的信息)
                var item = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.SONo == soNo && a.SODetailNo == intDetailId && a.Status == "0" );
                var item = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.SONo == soNo && a.SODetailNo == intDetailId && a.PalletNo == palletNo && a.Status == "0" );
                if (item == null) //判断是否有需要下发的出库流水
                {
                    throw new Exception("当前出库单据无需要下发的托盘");
@@ -1418,8 +1710,7 @@
                        var imBl = com.GetImTask(item.PalletNo);
                        if (imBl != null)
                        {
                            str = "要出库的托盘正在入库";
                            return outDto1;
                            throw new Exception("要出库的托盘正在入库");
                        }
                        //判断是否是已经出过库又回库 
                        if (item.Status == "0")
@@ -1445,40 +1736,34 @@
                                    Db.Updateable(notice).ExecuteCommand();
                                }
                            }
                            str = "要出库的托盘已在库外";
                            Db.CommitTran();
                            str = "托盘已在库外";
                            return outDto1;
                        }
                        str = "要出库的托盘正在入库";
                        return outDto1;
                    }
                    var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//当前出库的储位信息
                    if (locate == null)
                    {
                        str = "出库的托盘储位信息错误(在储位表中未查询到)";
                        return outDto1;
                        throw new Exception("出库的托盘储位信息错误(在储位表中未查询到)");
                    }
                    //判断储位标志是否为损坏
                    if (locate.Flag == "2")
                    {
                        str = "储位损坏不能出库";
                        return outDto1;
                        throw new Exception("储位损坏不能出库");
                    }
                    if (locate.WareHouseNo != "W02")
                    {
                        str = "托盘不在货架库上";
                        return outDto1;
                        throw new Exception("托盘不在货架库上");
                    }
                    var locateEnd = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == outModeLocate && m.IsDel == "0");//当前出库的目标储位信息
                    if (locateEnd == null)
                    {
                        str = "出库的托盘储位信息错误(在储位表中未查询到)";
                        return outDto1;
                        throw new Exception("出库的托盘储位信息错误(在储位表中未查询到)");
                    }
                    else if (locateEnd.Status != "0")
                    {
                        str = "目标储位状态不是空储位";
                        return outDto1;
                        throw new Exception("目标储位状态不是空储位");
                    }
                    #endregion
@@ -1606,8 +1891,7 @@
                    }
                    else if (locate.Status == "5") //移出中
                    {
                        str = "当前要出库的储位正在移出";
                        return outDto1;
                        throw new Exception("当前要出库的储位正在移出");
                    }
                    
Wms/WMS.BLL/Logic/AllotSku.cs
@@ -237,7 +237,7 @@
        /// </summary>
        /// <param name="palletList"></param>
        /// <returns></returns>
        private List<DataStockDetail> GetDataListOrder(List<DataStockDetail> palletList)
        public List<DataStockDetail> GetDataListOrder(List<DataStockDetail> palletList)
        {
            try
            {
Wms/WMS.Entity/BllAsnEntity/BllPalletBind.cs
@@ -87,7 +87,7 @@
        public decimal? FullQty {get;set;}
        /// <summary>
        /// Desc:状态
        /// Desc:状态 2入库完成  3上架完成
        /// Default:
        /// Nullable:True
        /// </summary>           
Wms/WMS.IBLL/IHttpServer.cs
@@ -11,6 +11,16 @@
        #region WCS
        /// <summary>
        /// 空托跺组托入库
        /// </summary>
        /// <param name="palletNo">托盘号</param>
        /// <param name="houseNo">仓库</param>
        /// <param name="palletNum">托盘数量</param>
        /// <param name="locate">起始位置</param>
        /// <returns></returns>
        OutCommandDto RequestPalletIn(string palletNo, string houseNo, int palletNum, string Strlocate);
        /// <summary>
        /// 申请储位  (立体库)
        /// </summary>
        /// <param name="palletNo"></param>
Wms/WMS.IBLL/IPdaServer/IPdaAsnServer.cs
@@ -31,6 +31,12 @@
        /// <param name="userId"></param>
        void SaveAppointLocate(string palletNo, string locateNo, int userId);
        List<BoxInfoDto> GetWmsBoxInfos(string boxNo);
        void ChejianIn(string palletNo, string boxNo, decimal qty,string areaNo, int userId);
        void ChejianQtyIn(string palletNo, string skuNo, string lotNo, decimal qty, string areaNo, int userId);
        #endregion
Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
@@ -37,6 +37,11 @@
        /// <param name="userId"></param>
        Task SoSetQtyPinPick34(string soNo, string soDetailId, string palletNo, string PickQty, string palletNoNew, int userId);
        Task ChejianPick(string palletNo, string boxNo, int userId);
        List<BoxInfoDto> GetWmsBoxInfos(string boxNo);
        #endregion
        /// <summary>
@@ -62,6 +67,14 @@
        Task<List<string>> GetRunNoticeList(string type);
        /// <summary>
        /// 获取出库单未下发出库的托盘
        /// </summary>
        /// <param name="soNo"></param>
        /// <param name="soDetailId"></param>
        /// <returns></returns>
        Task<List<string>> GetPalletListBySo(string soNo, string soDetailId);
        /// <summary>
        /// 获取出库托盘上的物料批次(根据托盘码)
        /// </summary>
        /// <param name="palletNo">托盘码</param>
Wms/Wms/Controllers/DownApiController.cs
@@ -329,6 +329,40 @@
        #region WMS接口 被下游系统接口调用
        /// <summary>
        /// WCS申请空托跺组托入库 (叠托盘机)
        /// </summary>
        /// <param name="model">入库单信息</param>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpPost]
        public IActionResult RequestPalletIn(RequestLocate model)
        {
            var logStr = "";
            logStr = $@".\log\WCS\WCS申请空托跺组托入库" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
            {
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"WCS申请空托跺组托入库:( {jsonData} ),", logStr);
                var list = _http.RequestPalletIn(model.PalletNo, model.HouseNo, model.palletNum,model.locate);
                LogFile.SaveLogToFile($"WCS申请空托跺组托入库返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                return Ok(new { Success = 0, Message = "申请巷道成功", TaskList = list });
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"WCS申请空托跺组托入库返回:( {e.Message} ),", logStr);
                return Ok(new ErpModel { Success = -1, Message = e.Message });
            }
        }
        /// <summary>
        /// PDA 人工申请储位 (立体库)
        /// </summary>
        /// <param name="model">入库单信息</param>
Wms/Wms/Controllers/PdaAsnController.cs
@@ -194,6 +194,26 @@
        }
        /// <summary>
        /// 根据箱码获取标签箱码信息(车间入库-获取WMS生成的箱信息)
        /// </summary>
        /// <param name="boxNo">BoxNo:箱号</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetWmsBoxInfos(string boxNo)
        {
            try
            {
                var models = _PdaAsnSvc.GetWmsBoxInfos(boxNo);
                return Ok(new { code = 0, msg = "标签箱码信息", data = models });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
        }
        /// <summary>
        /// 判断托盘是否可用  公用方法
        /// </summary>
        /// <param name="model">PalletNo:托盘条码</param>
@@ -244,6 +264,40 @@
        }
        /// <summary>
        /// 绑定托盘
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult ChejianIn(PdaPalletBindVm model)
        {
            try
            {
                if (_userManager.UserId ==0)
                {
                    throw new Exception("未获取到用户信息");
                }
                if (model.TableType == 0)
                {
                    _PdaAsnSvc.ChejianIn(model.PalletNo,model.BoxNo,model.SkuQty,model.AreaNo, _userManager.UserId);
                }
                else if (model.TableType == 1)
                {
                    _PdaAsnSvc.ChejianQtyIn(model.PalletNo,model.SkuNo,model.LotNo,model.SkuQty,model.AreaNo, _userManager.UserId);
                }
                return Ok(new { code = 0, msg = "绑定成功!" });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
        }
        //---------------------------------------------申请入库页面----------------------------------------------------------------------
Wms/Wms/Controllers/PdaSoController.cs
@@ -81,6 +81,19 @@
            return await _pdaSoSvc.GetSoSkuLotNoListBySo(model.SoNo);
        }
        /// <summary>
        /// 获取物料-批次信息
        /// </summary>
        /// <param name="model">PalletNo:托盘码、SoNo:单据号</param>
        /// <returns></returns>
        [HttpPost]
        public async Task<List<string>> GetPalletListBySo(PdaSoVm model)
        {
            return await _pdaSoSvc.GetPalletListBySo(model.SoNo,model.SoDetailId);
        }
        /// <summary>
        /// 获取物料-批次信息
        /// </summary>
@@ -161,6 +174,25 @@
            await _pdaSoSvc.SoSetQtyPick(model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, _userManager.UserId);
        }
        /// <summary>
        /// 根据箱码获取标签箱码信息(车间入库-获取WMS生成的箱信息)
        /// </summary>
        /// <param name="boxNo">BoxNo:箱号</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetWmsBoxInfos(string boxNo)
        {
            try
            {
                var models = _pdaSoSvc.GetWmsBoxInfos(boxNo);
                return Ok(new { code = 0, msg = "标签箱码信息", data = models });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
        }
        /// <summary>
        /// 空托出库
@@ -285,6 +317,18 @@
        {
            await _pdaSoSvc.SoSetQtyPinPick34(model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, model.PalletNoNew, _userManager.UserId);
        }
        /// <summary>
        /// 车间pda拣货-标签
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task ChejianPick(PdaSoVm model)
        {
            await _pdaSoSvc.ChejianPick(model.PalletNo, model.BoxNo, _userManager.UserId);
        }
        #endregion
        #region JC23版取样
Wms/Wms/Controllers/UpApiController.cs
@@ -242,7 +242,7 @@
                    await _stockCheckSvc.StockAdjustAuto(model.Id);
                }
                //系统对接后放开
                //var bl =_stockCheckSvc.FinishCr(model.Id,_config.ErpHost + _config.DataChangeUrl, int.Parse(userId));
                var bl =_stockCheckSvc.FinishCr(model.Id,_config.ErpHost + _config.DataChangeUrl, int.Parse(userId));
                //if (bl)
                //{
                return Ok(new { code = 0, count = 0, msg = "盘点单调整上传成功" });