Administrator
2024-06-20 601cdc345ba6181aa8455a4964fe433e71c875de
Merge branch 'wxw'
6个文件已修改
1159 ■■■■■ 已修改文件
HTML/views/StatisticalReport/BoxInfor.html 464 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/InterFaceModel/SoModel.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllTransServer/NoticeServer.cs 661 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.Entity/DataEntity/DataStockDetail.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.Entity/LogEntity/LogTask.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IBllTransServer/INoticeServer.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/StatisticalReport/BoxInfor.html
@@ -50,7 +50,7 @@
                                <input type="text" id="PalletNo"  name="PalletNo" placeholder="托盘号" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div class="layui-inline mingxi">
                        <!-- <div class="layui-inline mingxi">
                            <label class="layui-form-label" style="width: 60px;">货主编码</label>
                            <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
                                <input type="text" id="OwnerNo" name="OwnerNo" placeholder="货主编码" autocomplete="off"
@@ -63,7 +63,7 @@
                                <input type="text" id="OwnerName" name="OwnerName" placeholder="货主名称" autocomplete="off"
                                    class="layui-input">
                            </div>
                        </div>
                        </div> -->
                        <div class="layui-inline mingxi">
                            <label class="layui-form-label" style="width: 60px;">批次号</label>
                            <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
@@ -73,12 +73,12 @@
                        <!-- 箱码 箱支状态 检验标记 零箱标记 质量状态 -->
                        <div class="layui-inline zongdan" >
                        <!-- <div class="layui-inline zongdan" >
                            <label class="layui-form-label" style="width: 60px;">箱码</label>
                            <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
                                <input type="text" id="BoxNo"  name="BoxNo" placeholder="箱码" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        </div> -->
                        <!-- <div class="layui-inline zhijian">
                            <label class="layui-form-label" style="width: 60px;">箱支状态</label>
                            <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
@@ -91,7 +91,7 @@
                                </select>
                            </div>
                        </div> -->
                        <div class="layui-inline zhijian">
                        <!-- <div class="layui-inline zhijian">
                            <label class="layui-form-label" style="width: 60px;">抽检标记</label>
                            <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
                                <select name="InspectMark" id="InspectMark" lay-filter="InspectMark"
@@ -123,7 +123,7 @@
                                    <option value="1">是</option>
                                </select>
                            </div>
                        </div>
                        </div> -->
                        <div class="layui-inline zhijian">
                            <label class="layui-form-label" style="width: 60px;">质检状态</label>
                            <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
@@ -138,7 +138,7 @@
                            </div>
                        </div>
                        <div class="layui-inline zhijian">
                        <!-- <div class="layui-inline zhijian">
                            <label class="layui-form-label" style="width: 60px;">开始时间</label>
                            <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
                                <input type="text" autocomplete="off" id="StartTime" class="layui-input"
@@ -151,7 +151,7 @@
                                <input type="text" autocomplete="off" id="EndTime" class="layui-input"
                                    placeholder="结束时间">
                            </div>
                        </div>
                        </div> -->
                        <div class="layui-inline sousuo">
                            <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit lay-filter="LAY-app-contlist-search">
@@ -164,82 +164,19 @@
                        </div>
                    </div>
                </div>
                <div id="center"></div>
                <div class="layui-card-body">
                    <div style="position: relative;">
                        <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
                            <ul class="layui-tab-title" id="tab">
                                <li  class="layui-this">托盘明细</li>
                                <li >箱码明细</li>
                            </ul>
                            <div id="center">
                            </div>
                            <div class="layui-tab-content">
                                <div class="layui-tab-item layui-show">
                                    <div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 -->
                                        <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
                                        <!-- #region 自定义表头 -->
                                        <div class="headerSetIcon">
                                            <button class="layui-btn layui-btn-primary layui-btn-sm" data-type="customCols">
                                                <i class="layui-icon">&#xe610;</i>
                                            </button>
                                        </div>
                                        <!-- #endregion -->
                                    </div>
                                </div>
                                <div class="layui-tab-item">
                                    <div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 -->
                                        <table id="LAY-app-content-list2" lay-filter="LAY-app-content-list2"></table>
                                        <!-- #region 自定义表头 -->
                                        <div class="headerSetIcon">
                                            <button class="layui-btn layui-btn-primary layui-btn-sm" data-type="customCols2">
                                                <i class="layui-icon">&#xe610;</i>
                                            </button>
                                        </div>
                                        <!-- #endregion -->
                                        <!-- #region 自定义表头 -->
                                        <script type="text/html" id="templetProductionTime">
                                            {{# function GetBtn(d){
                                                    return formatDate(d.ProductionTime);
                                                }
                                            }}
                                            {{ GetBtn(d) }}
                                        </script>
                                        <script type="text/html" id="templetInspectTime">
                                            {{# function GetBtn1(d){
                                                    return formatDate(d.InspectTime);
                                                }
                                            }}
                                            {{ GetBtn1(d) }}
                                        </script>
                                        <!-- #endregion -->
                                    </div>
                                </div>
                            </div>
                    <div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 -->
                        <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
                        <!-- #region 自定义表头 -->
                        <div class="headerSetIcon">
                            <button class="layui-btn layui-btn-primary layui-btn-sm" data-type="customCols">
                                <i class="layui-icon">&#xe610;</i>
                            </button>
                        </div>
                        <!-- #endregion -->
                    </div>
                    
                    <script type="text/html" id="BoxStatus">
                        {{#  if(d.Status=='0'){ }}
                            <p>未组托</p>
                        {{#  } else if(d.Status == '1') { }}
                            <p>已组托</p>
                        {{#  } else if(d.Status == '2') { }}
                            <p>已入库</p>
                        {{#  } else if(d.Status == '3') { }}
                            <p>已出库</p>
                        {{#  } else if(d.Status == '4') { }}
                            <p>已分配</p>
                        {{#  } else if(d.Status == '5') { }}
                            <p>已拣货</p>
                        {{#  } }}
                    </script>
                    <script type="text/html" id="InspectMarkStatus">
                        {{#  if(d.InspectMark=='0'){ }}
                            <p>否</p>
@@ -253,30 +190,6 @@
                        {{#  } else if(d.BitPalletMark == '1') { }}
                            <p>是</p>
                        {{# } }}
                    </script>
                    <script type="text/html" id="InspectStatus1">
                        {{#  if(d.InspectStatus == '0') { }}
                            <p>待检验</p>
                        {{#  } else if(d.InspectStatus == '1'){ }}
                            <p>检验合格</p>
                        {{#  } else if(d.InspectStatus == '2'){ }}
                            <p>不合格</p>
                        {{#  } else if(d.InspectStatus == '4') { }}
                            <p>放置期</p>
                        {{#  } }}
                    </script>
                    <script type="text/html" id="BitPalletMarkStatus1">
                        {{#  if(d.BitBoxMark=='0'){ }}
                            <p>否</p>
                        {{#  } else if(d.BitBoxMark == '1') { }}
                            <p>是</p>
                        {{# } }}
                    </script>
                    <script type="text/html" id="table-content-list">
                        <button class="layui-btn layui-btn-normal layui-btn-xs approvalBtnupt" id="approvalBtnupt" lay-event="edit">
                            <i class="layui-icon layui-icon-edit"></i>详情
                        </button>
                    </script>
                </div>
            </div>
@@ -300,9 +213,7 @@
                    element = layui.element;
                    laydate = layui.laydate;
                var h1 = GetTableTabHeight();
                // var h1 =  GetTkableTopHeight();
                // console.log(h1)
                var h1 = GetTableHeight();
                laydate.render({
                    elem: '#StartTime',
@@ -415,18 +326,18 @@
                    {field: 'PalletNo', title: '托盘号', align: 'center'},
                    {field: 'SkuNo', title: '物料编码', align: 'center'},
                    {field: 'SkuName', title: '物料名称', align: 'center'},
                    {field: 'OwnerNo',title: '货主编码',align: 'center'},
                    {field: 'OwnerName',title: '货主名称',align: 'center'},
                    {field: 'SupplierNo',title: '供应商编码',align: 'center'},
                    {field: 'SupplierName',title: '供应商名称',align: 'center'},
                    //{field: 'OwnerNo',title: '货主编码',align: 'center'},
                    //{field: 'OwnerName',title: '货主名称',align: 'center'},
                    //{field: 'SupplierNo',title: '供应商编码',align: 'center'},
                    //{field: 'SupplierName',title: '供应商名称',align: 'center'},
                    {field: 'LotNo', title: '批次号', align: 'center'},
                    {field: 'LotText', title: '批次描述', align: 'center'},
                    {field: 'SupplierLot', title: '供货批次', align: 'center'},
                    //{field: 'SupplierLot', title: '供货批次', align: 'center'},
                    {field: 'Qty', title: '数量', align: 'center'},
                    {field: 'LockQty', title: '锁定数量', align: 'center',},
                    {field: 'FrozenQty', title: '冻结数量', align: 'center'},
                    {field: 'InspectMark', title: '抽检标记', align: 'center', templet: '#InspectMarkStatus'},
                    {field: 'BitPalletMark', title: '零托标记', align: 'center', templet: '#BitPalletMarkStatus'},
                    //{field: 'InspectMark', title: '抽检标记', align: 'center', templet: '#InspectMarkStatus'},
                    //{field: 'BitPalletMark', title: '零托标记', align: 'center', templet: '#BitPalletMarkStatus'},
                ]];
                var TotalColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
                //#endregion
@@ -502,176 +413,6 @@
                    //#endregion                    
                }                
                // 表单需要的变量
                var infoOptions2;
                //#region 原始非自定义列
                // infoOptions2 = {
                //     elem: '#LAY-app-content-list2',
                //     height: 'full-206',
                //     id: 'LAY-app-content-list2',
                //     page: true,
                //     limit: pageCnt,
                //     limits: pageLimits,
                //     even: true,
                //     cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                //     cols:
                //     [[
                //         {
                //             title: '序号',  type: 'numbers',  fixed: 'left'
                //         },
                //         {
                //             field: 'SkuNo', title: '物料编码', align: 'center',
                //         },
                //         {
                //             field: 'SkuName', title: '物料名称', align: 'center',
                //         },
                //         {
                //             field: 'PalletNo', title: '托盘号', align: 'center', width: 110,
                //         },
                //         {
                //             field: 'BoxNo', title: '箱码', align: 'center', width: 100,
                //         },
                //         {
                //             field: 'Status', title: '箱支状态', align: 'center', templet: '#BoxStatus',
                //         },
                //         {
                //             field: 'LotNo', title: '批次号', align: 'center',
                //         },
                //         {
                //             field: 'LotText', title: '批次描述', align: 'center',
                //         },
                //         {
                //             field: 'Qty', title: '数量', width: 90, align: 'center',
                //         },
                //         {
                //             field: 'FullQty', title: '整箱数量', width: 100, align: 'center',
                //         },
                //         {
                //             field: 'ProductionTime', title: '生产日期', align: 'center',
                //             templet: function(d) {
                //                 return formatDate(d.ProductionTime);
                //             },
                //         },
                //         {
                //             field: 'InspectMark', title: '抽检标记', align: 'center', templet: '#InspectMarkStatus',
                //         },
                //         {
                //             field: 'BitBoxMark', templet: '#BitPalletMarkStatus1', title: '零箱标记', align: 'center',
                //         },
                //         {
                //             field: 'InspectStatus', templet: '#InspectStatus1', title: '质检状态', align: 'center',
                //         },
                //         {
                //             field: 'InspectTime', title: '复检时间', align: 'center',
                //             templet: function(d) {
                //                 return formatDate(d.InspectTime);
                //             },
                //         },
                //         {
                //             title: '操作', fixed: 'right', align: 'center', toolbar: '#table-content-list'
                //         }
                //     ]]
                // };
                //#endregion
                //获取明细信息
                //#region 自定义表头
                var DetailColsArr = [[
                    {field: '',title: '序号',type:'numbers',fixed: 'left', "disabled": true},
                    {field: 'SkuNo', title: '物料编码', align: 'center'},
                    {field: 'SkuName', title: '物料名称', align: 'center'},
                    {field: 'PalletNo', title: '托盘号', align: 'center', width: 110},
                    {field: 'BoxNo', title: '箱码', align: 'center', width: 100},
                    {field: 'Status', title: '箱支状态', align: 'center', templet: '#BoxStatus'},
                    {field: 'LotNo', title: '批次号', align: 'center'},
                    {field: 'LotText', title: '批次描述', align: 'center'},
                    {field: 'Qty', title: '数量', width: 90, align: 'center'},
                    {field: 'FullQty', title: '整箱数量', width: 100, align: 'center'},
                    {field: 'ProductionTime', title: '生产日期', align: 'center',templet: '#templetProductionTime'},
                    {field: 'InspectMark', title: '抽检标记', align: 'center', templet: '#InspectMarkStatus'},
                    {field: 'BitBoxMark', templet: '#BitPalletMarkStatus1', title: '零箱标记', align: 'center'},
                    {field: 'InspectStatus', templet: '#InspectStatus1', title: '质检状态', align: 'center'},
                    {field: 'InspectTime', title: '复检时间', align: 'center',templet: '#templetInspectTime'},
                    {field: 'caozuo',title: '操作', fixed: 'right', align: 'center', toolbar: '#table-content-list', "disabled": true}
                ]];
                var DetailColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(DetailColsArr)))//将表头数据进行url编码
                //#endregion
                function refreshTable2(Id,SkuNo,SkuName,LotNo,PalletNo,BoxNo,Status,InspectMark,BitBoxMark,InspectStatus,StartTime,EndTime) {
                    //#region 自定义表头
                    var colsJson2
                    var param1={
                        Href:'Statistical/GetBoxInfo'
                    };
                    sendData(IP + "/Sys/GetTableColsByUserId", param1, 'post', function(res) {
                        if (res.code == 0){
                            if(res.data=='' || res.data==undefined || res.data==null){
                                colsJson2=DetailColsArr
                            }else{
                                colsJson2= eval(res.data);
                            }
                        }else{
                                colsJson2=DetailColsArr
                        }
                        infoOptions2 = {
                            elem: '#LAY-app-content-list2',
                            height: h1,
                            id: 'LAY-app-content-list2',
                            page: true,
                            limit: pageCnt,
                            limits: pageLimits,
                            even: true,
                            cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                            done: function(){
                                //自定义列宽
                                SetTableColW('LAY-app-content-list2','Statistical/GetBoxInfo',DetailColsSysArr);
                            },
                            cols:colsJson2
                        };
                        var param = {
                            Id:Id,
                            SkuNo:SkuNo,
                            SkuName:SkuName,
                            LotNo:LotNo,
                            PalletNo:PalletNo,
                            BoxNo:BoxNo,
                            Status:Status,
                            InspectMark:InspectMark,
                            BitBoxMark:BitBoxMark,
                            InspectStatu:InspectStatus,
                            StartTime:StartTime,
                            EndTime:EndTime,
                        }
                        sendData(IP + "/Statistical/GetBoxInfo", param, 'get', function(res) {
                            if (res.code == 0) //成功
                            {
                                var list = res.data;
                                $.extend(infoOptions2, {
                                    data: list
                                });
                                infoOptions2.page = {
                                    curr: 1
                                }
                                tableIns2 = table.render(infoOptions2);
                            }
                            else //不成功
                            {
                                layer.msg('获取明细列表信息失败!', {
                                    icon: 2,
                                    time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                }, function() {});
                            }
                        })
                    });
                    //#endregion
                }
                //var url = IP + "/Statistical/GetInventoryList1";
                //接受全局变量
                let quanid = '';
                //监听搜索
                form.on('submit(LAY-app-contlist-search)', function(data) {
                    var SkuNo = $("#SkuNo").val();
@@ -692,27 +433,10 @@
                    var StartTime = $("#StartTime").val();
                    var EndTime = $("#EndTime").val();
                    if(yemianid == 0){
                        console.log("总单");
                        refreshTable(SkuNo,SkuName,PalletNo,LotNo,BoxNo,Status,InspectMark,BitPalletMark,BitBoxMark,InspectStatus,OwnerNo,OwnerName,StartTime,EndTime);
                    }else if(yemianid == 1){
                        quanid = '';
                        console.log("明细");
                        refreshTable2(quanid,SkuNo,SkuName,LotNo,PalletNo,BoxNo,Status,InspectMark,BitBoxMark,InspectStatus,StartTime,EndTime);
                    }
                    refreshTable(SkuNo,SkuName,PalletNo,LotNo,BoxNo,Status,InspectMark,BitPalletMark,BitBoxMark,InspectStatus,OwnerNo,OwnerName,StartTime,EndTime);
                    
                });
                //触发行双击事件
                table.on('rowDouble(LAY-app-content-list)', function(obj) {
                    $(".layui-tab-title>li").attr("class", "");
                    $('.layui-tab-title>li').eq(1).attr('class', 'layui-this');
                    $('.layui-tab-content .layui-tab-item').attr('class', 'layui-tab-item')
                    $('.layui-tab-content .layui-tab-item').eq(1).attr('class', 'layui-tab-item layui-show')
                    console.log(obj.data.Id);
                    quanid = obj.data.Id;
                    refreshTable2(obj.data.Id);
                    yemianid=1;
                });
                
                //监听Tab切换,以改变地址hash值
                element.on('tab(docDemoTabBrief)', function(data){
@@ -734,130 +458,9 @@
                    var StartTime = $("#StartTime").val();
                    var EndTime = $("#EndTime").val();
                    console.log(data.index);
                    yemianid = data.index
                    if(yemianid == 0){
                        console.log("总单");
                        refreshTable(SkuNo,SkuName,PalletNo,LotNo,BoxNo,Status,InspectMark,BitPalletMark,BitBoxMark,InspectStatus,OwnerNo,OwnerName,StartTime,EndTime);
                    }else if(yemianid == 1){
                        console.log("明细");
                        refreshTable2(quanid,SkuNo,SkuName,LotNo,PalletNo,BoxNo,Status,InspectMark,BitBoxMark,InspectStatus,StartTime,EndTime);
                    }
                    refreshTable(SkuNo,SkuName,PalletNo,LotNo,BoxNo,Status,InspectMark,BitPalletMark,BitBoxMark,InspectStatus,OwnerNo,OwnerName,StartTime,EndTime);
                });
                var doing = true;
                // ------------------------------------详情---------------------------------------------------
                table.on('tool(LAY-app-content-list2)', function(obj) {
                    console.log(obj)
                    var data = obj.data;
                    //详情
                    if (obj.event === 'edit') {
                        BoxNo = data.BoxNo;
                        console.log(data)
                        layer.open({
                            type: 2,
                            title: '箱支详情信息',
                            content: 'BoxSupportInfor.html?BoxNo=' + BoxNo,
                            maxmin: true,
                            area: ['80%', '85%'],
                            btn: ['关闭'],
                            yes: function(index, layero) {
                                var iframeWindow = window['layui-layer-iframe' + index],
                                    submitID = 'layuiadmin-app-form-edit',
                                    submit = layero.find('iframe').contents().find('#' + submitID);
                                    if(doing)
                                    {
                                        doing = false;
                                        layer.close(index); //关闭弹层
                                        refreshTable();
                                        doing = true;
                                    }
                            }
                        });
                    }
                });
                form.on('submit(daochu)', function () {
                    layer.confirm('确定导出当前数据吗?', function(index) {
                        if(yemianid == 0){
                            console.log("托盘明细");
                            var param = {
                                SkuNo : $("#SkuNo").val(),
                                SkuName : $("#SkuName").val(),
                                LotNo : $("#LotNo").val(),
                                PalletNo : $("#PalletNo").val(),
                                BoxNo : $("#BoxNo").val(),
                                Status : $("#Status").val(),
                                InspectMark : $("#InspectMark").val(),
                                BitPalletMark : $("#BitPalletMark").val(),
                                BitBoxMark : $("#BitBoxMark").val(),
                                InspectStatus : $("#InspectStatus").val(),
                                StartTime: $("#StartTime").val(),
                                EndTime: $("#EndTime").val(),
                            };
                            sendData(IP + "/Statistical/GetBindListDaoChu", param, 'get', function (res) {
                                console.log(res);
                                if (res.code == 0) { //成功
                                    var list = res.data;
                                    table.exportFile(tableIns.config.id, list,'xls',"托盘明细信息"+getNowTime(),); //data 为该实例中的任意数量的数据
                                    layer.msg('导出成功!', {
                                        icon: 1,
                                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                    }, function () {
                                    });
                                } else { //不成功
                                    layer.msg('获取信息失败!', {
                                        icon: 2,
                                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                    }, function () { });
                                }
                            });
                        }else if(yemianid == 1){
                            console.log("箱码明细");
                            var param = {
                                Id:quanid,
                                SkuNo: $("#SkuNo").val(),
                                SkuName: $("#SkuName").val(),
                                LotNo:$("#LotNo").val(),
                                LocatNo:$("#LocatNo").val(),
                                PalletNo:$("#PalletNo").val(),
                                Status:$("#Status").val(),
                                InspectStatus:$("#InspectStatus").val(),
                                IsSamolingTray:$("#IsSamolingTray").val(),
                                StartTime: $("#StartTime").val(),
                                EndTime: $("#EndTime").val(),
                            };
                            sendData(IP + "/Statistical/GetBoxInfoDaoChu", param, 'get', function (res) {
                                console.log(res);
                                if (res.code == 0) { //成功
                                    var list = res.data;
                                    table.exportFile(tableIns2.config.id, list,'xls',"箱码明细信息"+getNowTime(),); //data 为该实例中的任意数量的数据
                                    layer.msg('导出成功!', {
                                        icon: 1,
                                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                    }, function () {
                                    });
                                } else { //不成功
                                    layer.msg('获取信息失败!', {
                                        icon: 2,
                                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                    }, function () { });
                                }
                            });
                        }
                    });
                });
                //#region 自定义表头
                //自定义表头            
@@ -872,17 +475,6 @@
                            area: ['970px', '650px']
                        });
                    },
                    customCols2: function(){
                        layer.open({
                            type: 2,
                            title: '自定义列',
                            content: '../SystemSettings/HeaderSetting.html?Href=Statistical/GetBoxInfo&ColsSysArr='+DetailColsSysArr,
                            maxmin: false,
                            resize: false,
                            area: ['970px', '650px']
                        });
                    }
                };
                $('.layui-btn').on('click', function() {
                    var type = $(this).data('type');
Wms/Model/InterFaceModel/SoModel.cs
@@ -49,6 +49,10 @@
        /// </summary>
        public string SkuNo { get; set; }
        /// <summary>
        /// 物料名称
        /// </summary>
        public string SkuName { get; set; }
        /// <summary>
        /// 批次号
        /// </summary>
        public string LotNo { get; set; }
Wms/WMS.BLL/BllTransServer/NoticeServer.cs
@@ -1,10 +1,15 @@
using Model.InterFaceModel;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WMS.BLL.LogServer;
using WMS.DAL;
using WMS.Entity.BllAsnEntity;
using WMS.Entity.BllQualityEntity;
using WMS.Entity.BllSoEntity;
using WMS.Entity.Context;
using WMS.Entity.DataEntity;
using WMS.Entity.LogEntity;
@@ -115,6 +120,7 @@
                throw ex;
            }
        }
        /// <summary>
        /// 任务完成
        /// </summary>
@@ -161,10 +167,10 @@
                }
                switch (taskInfo.OrderType)
                {
                    //入库完成
                    #region 入库完成
                    case "0":
                        //入库单明细信息
                        var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.Id == taskInfo.ASNDetailNo);
                        var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.Id == taskInfo.NoticeDetailNo);
                        if (noticeDetail == null)
                        {
                            resultModel.Message = "该任务对应的入库单明细不存在!";
@@ -190,45 +196,70 @@
                            return resultModel;
                        }
                        //库存明细
                        var sd1 = new DataStockDetail()
                        var sd1 = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == taskInfo.PalletNo);
                        if (sd1 == null)
                        {
                            LotNo = noticeDetail.LotNo,
                            LotText = noticeDetail.LotText,
                            SupplierLot = noticeDetail.SupplierLot,
                            SkuNo = noticeDetail.SkuNo,
                            SkuName = noticeDetail.SkuName,
                            Standard = noticeDetail.Standard,
                            Qty = 1,
                            LockQty = 0,
                            FrozenQty = 0,
                            InspectQty = 0,
                            ASNNo = noticeDetail.ASNNo,
                            ASNDetailNo = noticeDetail.Id,
                            WareHouseNo = locatInfo.WareHouseNo,//所属仓库
                            RoadwayNo = locatInfo.RoadwayNo,//所属巷道
                            AreaNo = locatInfo.AreaNo,//所属区域
                            LocatNo = locatInfo.LocatNo,//储位地址
                            PalletNo = taskInfo.PalletNo,
                            PalletNo2 = "",
                            PalletNo3 = "",
                            PalletTags = "0",
                            CompleteTime = comTime,
                            ProductionTime = null,
                            ExpirationTime = null,
                            Status = "0",
                            InspectMark = "0",
                            InspectStatus = "0",//待检验
                            BitPalletMark = "0",
                            PackagNo = "",
                            IsBale = "0",
                            IsBelt = "0",
                            sd1 = new DataStockDetail()
                            {
                                LotNo = noticeDetail.LotNo,
                                LotText = noticeDetail.LotText,
                                SupplierLot = noticeDetail.SupplierLot,
                                SkuNo = noticeDetail.SkuNo,
                                SkuName = noticeDetail.SkuName,
                                Standard = noticeDetail.Standard,
                                Qty = 1,
                                LockQty = 0,
                                FrozenQty = 0,
                                InspectQty = 0,
                                ASNNo = noticeDetail.ASNNo,
                                ASNDetailNo = noticeDetail.Id,
                                WareHouseNo = locatInfo.WareHouseNo,//所属仓库
                                RoadwayNo = locatInfo.RoadwayNo,//所属巷道
                                AreaNo = locatInfo.AreaNo,//所属区域
                                LocatNo = locatInfo.LocatNo,//储位地址
                                PalletNo = taskInfo.PalletNo,
                                PalletNo2 = "",
                                PalletNo3 = "",
                                PalletTags = "0",
                                CompleteTime = comTime,
                                ProductionTime = null,
                                ExpirationTime = null,
                                Status = "0",
                                InspectMark = "0",
                                InspectStatus = "0",//待检验
                                BitPalletMark = "0",
                                PackagNo = "",
                                IsBale = "0",
                                IsBelt = "0",
                            IsDel = "0",
                            CreateUser = 0,
                            CreateTime = comTime
                        };
                        //插入库存明细
                        Db.Insertable(sd1).ExecuteCommand();
                                PalletStatus = "1",
                                IsDel = "0",
                                CreateUser = 0,
                                CreateTime = comTime
                            };
                            //插入库存明细
                            Db.Insertable(sd1).ExecuteCommand();
                        }
                        else
                        {
                            sd1.Qty = 1;
                            sd1.LockQty = 0;
                            sd1.FrozenQty = 0;
                            sd1.InspectQty = 0;
                            sd1.ASNNo = noticeDetail.ASNNo;
                            sd1.ASNDetailNo = noticeDetail.Id;
                            sd1.WareHouseNo = locatInfo.WareHouseNo;//所属仓库
                            sd1.RoadwayNo = locatInfo.RoadwayNo;//所属巷道
                            sd1.AreaNo = locatInfo.AreaNo;//所属区域
                            sd1.LocatNo = locatInfo.LocatNo;//储位地址
                            sd1.CompleteTime = comTime;
                            sd1.InspectStatus = "0";//待检验
                            sd1.PalletStatus = "1";//预混
                            //修改库存明细
                            Db.Updateable(sd1).ExecuteCommand();
                        }
                        noticeDetail.CompleteQty += 1;//完成数量
                        noticeDetail.Status = "1";//0:等待执行 1:正在执行 2:执行完成
@@ -260,7 +291,185 @@
                        locatInfo.Status = "1";//有物品
                        //更新储位状态
                        Db.Updateable(locatInfo).ExecuteCommand();
                        #region 质检请验
                        var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == noticeDetail.SkuNo && m.LotNo == noticeDetail.LotNo && m.SupplierLot == noticeDetail.SupplierLot);
                        if (qualityRequest == null)
                        {
                            //质检请验单信息
                            string qcNo = new Common().GetMaxNo("QC");
                            qualityRequest = new BllQualityInspectionRequest();
                            qualityRequest.QcNo = qcNo;
                            qualityRequest.Status = "0";
                            qualityRequest.SkuNo = noticeDetail.SkuNo;
                            qualityRequest.SkuName = noticeDetail.SkuName;
                            qualityRequest.LotNo = noticeDetail.LotNo;
                            qualityRequest.SupplierLot = noticeDetail.SupplierLot;
                            qualityRequest.Qty = noticeDetail.Qty;
                            qualityRequest.SamplingQty = 0;
                            qualityRequest.ASNNo = noticeDetail.ASNNo;
                            qualityRequest.CreateUser = 0;
                            qualityRequest.CreateTime = comTime;
                            // 记录任务日志
                            var taskNo = new Common().GetMaxNo("TK");
                            var exTask = new LogTask()
                            {
                                TaskNo = taskNo,
                                Sender = "WMS",
                                Receiver = "Limes",
                                IsSuccess = 0,//是否下发成功 0失败 1成功
                                StartLocat = "",//起始位置
                                PalletNo = "",//托盘码
                                IsSend = 1,//是否可再次下发
                                IsCancel = 1,//是否可取消
                                IsFinish = 1,//是否可完成
                                Status = "0",//任务状态0:等待执行1正在执行2执行完成
                                OrderType = "5",//0 入库单 1 出库单  2 盘点单  3 移库单 4 取样出库单 5 其他
                                EndLocat = "",//目标位置
                                Type = "3",//任务类型 0 入库任务 1 出库任务  2 移库任务
                                Msg = "请验任务"
                            };
                            // 插入任务日志
                            Db.Insertable(exTask).ExecuteCommand();
                            // 调用Limes接口发起请验
                            var sendModel = new SendLimesModel()
                            {
                                QcNo = qualityRequest.QcNo,
                                SkuNo = qualityRequest.SkuNo,
                                Qty = qualityRequest.Qty.ToString(),
                                LotNo = qualityRequest.LotNo,
                                SupplierLot = qualityRequest.SupplierLot,
                                RequestUser = "",                       // 请验人
                            };
                            var jsonData = JsonConvert.SerializeObject(sendModel);
                            string response = "";
                            try
                            {
                                var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
                                //response = HttpHelper.DoPost(url, jsonData, "上传Limes系统发起请验", "Limes");
                                var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
                                ////解析返回数据
                                //var limesModel = JsonConvert.DeserializeObject<LimesModel>(response);
                                List<string> list1 = new List<string>();
                                list1.Add(taskNo);
                                //if (limesModel.Success == 0)
                                //{
                                //更改任务的发送返回时间//
                                new TaskServer().EditTaskIssueOk(list1, time1, time2);
                                // 更新请验单信息
                                qualityRequest.Status = "1";
                                qualityRequest.SamplingQty = 10;//decimal.Parse(limesModel.SamplingQty);
                                qualityRequest.RequestUser = 0;
                                qualityRequest.RequestTime = DateTime.Now;
                                qualityRequest.UpdateTime = DateTime.Now;
                                qualityRequest.UpdateUser = 0;
                                //添加质检请验单
                                Db.Insertable(qualityRequest).ExecuteCommand();
                                //}
                                //if (limesModel.Success == -1)
                                //{
                                //    new TaskServer().EditTaskIssueNo(list1, time1, time2,limesModel.Message);
                                //    throw new Exception(limesModel.Message);
                                //}
                            }
                            catch (Exception ex)
                            {
                                throw new Exception(ex.Message);
                            }
                        }
                        #endregion
                        break;
                    #endregion
                    #region 出库完成
                    case "1":
                        //出库单明细信息
                        var exNoticeDetail = Db.Queryable<BllExportNoticeDetail>().First(w => w.Id == taskInfo.NoticeDetailNo);
                        if (exNoticeDetail == null)
                        {
                            resultModel.Message = "该任务对应的出库单明细不存在!";
                            return resultModel;
                        }
                        //出库单信息
                        var exNotice = Db.Queryable<BllExportNotice>().First(w => w.SONo == exNoticeDetail.SONo);
                        if (exNotice == null)
                        {
                            resultModel.Message = "该任务对应的出库单不存在!";
                            return resultModel;
                        }
                        if (exNotice.Status == "4" || exNotice.Status == "5")
                        {
                            resultModel.Message = "该任务对应的出库单已执行完成!";
                            return resultModel;
                        }
                        //起始储位信息
                        var startLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.StartLocat && w.IsDel == "0");
                        if (startLocatInfo == null)
                        {
                            resultModel.Message = "起始储位信息不存在!";
                            return resultModel;
                        }
                        //目标储位信息
                        var endLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0");
                        if (endLocatInfo == null)
                        {
                            resultModel.Message = "目标储位信息不存在!";
                            return resultModel;
                        }
                        //库存明细
                        var sd2 = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == taskInfo.PalletNo);
                        if (sd2 == null)
                        {
                            resultModel.Message = "库存信息不存在!";
                            return resultModel;
                        }
                        //修改出库单明细拣货数量
                        exNoticeDetail.CompleteQty += sd2.Qty;
                        Db.Updateable(exNoticeDetail).ExecuteCommand();
                        exNotice.UpdateUser = 0;
                        exNotice.UpdateTime = comTime;
                        if (exNotice.Status == "0" || exNotice.Status == "1" || exNotice.Status == "2")
                        {
                            exNotice.Status = "3";//更改为正在执行
                        }
                        var num = Db.Queryable<BllExportNoticeDetail>().Count(m => m.IsDel == "0" && m.SONo == exNoticeDetail.SONo && m.CompleteQty < m.Qty);
                        if (num <= 0)
                        {
                            exNotice.Status = "4"; //更改为执行完成
                        }
                        //修改出库单信息
                        Db.Updateable(exNotice).ExecuteCommand();
                        sd2.Qty = 0;
                        sd2.LockQty = 0;
                        sd2.FrozenQty = 0;
                        sd2.InspectQty = 0;
                        sd2.ASNNo = "";
                        sd2.ASNDetailNo = null;
                        sd2.WareHouseNo = endLocatInfo.WareHouseNo;//所属仓库
                        sd2.RoadwayNo = endLocatInfo.RoadwayNo;//所属巷道
                        sd2.AreaNo = endLocatInfo.AreaNo;//所属区域
                        sd2.LocatNo = endLocatInfo.LocatNo;//储位地址
                        sd2.CompleteTime = comTime;
                        //修改库存明细
                        Db.Updateable(sd2).ExecuteCommand();
                        startLocatInfo.Status = "0";//空储位
                        //修改起始储位状态
                        Db.Updateable(startLocatInfo).ExecuteCommand();
                        endLocatInfo.Status = "1";//空储位
                        //修改目标储位状态
                        Db.Updateable(endLocatInfo).ExecuteCommand();
                        break;
                    #endregion
                }
                taskInfo.Status = "2";//执行完成
                //修改任务状态
@@ -280,17 +489,19 @@
                throw ex;
            }
        }
        /*public SoResInfo ErpAddExportNotice(SoInfo model)
        /// <summary>
        /// 下发出库单
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public SoResInfo ErpAddExportNotice(SoInfo model)
        {
            try
            {
                if (string.IsNullOrEmpty(model.SoType))
                {
                    throw new Exception("单据类型不可为空!");
                }
                if (string.IsNullOrEmpty(model.OrderCode))
                {
                    throw new Exception("系统单号不可为空!");
                    throw new Exception("上游系统单号不可为空!");
                }
                if (model.SoDetails.Count <= 0)
                {
@@ -299,29 +510,9 @@
                //返回信息
                SoResInfo result = new SoResInfo();
                var skuNos = model.SoDetails.Select(a => a.SkuNo).Distinct().ToList();
                //获取库存明细
                var stockDetailList = Db.Queryable<DataStockDetail>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0 && s.InspectStatus == "1").ToList();
                //获取库存
                var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList();
                string CustomerName = string.Empty;
                if (!string.IsNullOrEmpty(model.Customer))
                {
                    //客户信息
                    var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer);
                    if (customer == null)
                    {
                        throw new Exception("客户信息不存在!");
                    }
                    CustomerName = customer.CustomerName;
                }
                //承运商信息
                var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo);
                int? logisticsId = null;
                if (logistics != null)
                {
                    logisticsId = logistics.Id;
                }
                var billNo = "";
                var bl = true;
                do
@@ -335,268 +526,126 @@
                List<SoDetailInfo> soDetailList = new List<SoDetailInfo>();
                //开启事务
                Db.BeginTran();
                try
                var list = new List<BllExportNoticeDetail>();
                //添加出库单
                foreach (var d in model.SoDetails)
                {
                    var list = new List<BllExportNoticeDetail>();
                    //添加出库单
                    foreach (var d in model.SoDetails)
                    if (d.Qty < 1)
                    {
                        if (d.Qty < 1)
                        {
                            throw new Exception("出库数量必须大于0");
                        }
                        var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo);
                        if (sku == null)
                        {
                            throw new Exception($"物料信息中未查询到出库物料信息:{d.SkuNo}");
                        }
                        //0:成品出库、1:领料出库、3:物料取样出库、4:不合格品出库、6:代储出库、7:其他出库、 ///2:抽检出库、5:中间品出库、8:寄存出库
                        if (model.SoType == "0" || model.SoType == "3" || model.SoType == "4" || model.SoType == "7")
                        {
                            if (string.IsNullOrWhiteSpace(d.LotNo))
                            {
                                throw new Exception("批次不可为空!");
                            }
                        }
                        //库存明细
                        List<DataStockDetail> stockDetails;
                        //指定批次
                        if (!string.IsNullOrWhiteSpace(d.LotNo))
                        {
                            stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList();
                            if (stockDetails.Count < 1)
                            {
                                throw new Exception($"库存中未查询到出库物料信息:{d.SkuNo}");
                            }
                            //判断数量
                            var qty = stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty);
                            if (d.Qty > qty)
                            {
                                throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足");
                            }
                            //库存信息
                            var stockInfo = stockList.First(w => w.SkuNo == d.SkuNo && w.LotNo == d.LotNo);
                            if (stockInfo == null)
                            {
                                throw new Exception($"总库存中未查询到出库物料信息:{d.SkuNo}");
                            }
                            //判断总库存数量
                            if (d.Qty > stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty)
                            {
                                throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足");
                            }
                            //添加出库单明细
                            var noticeDetail = new BllExportNoticeDetail()
                            {
                                SONo = billNo,
                                SkuNo = sku.SkuNo,
                                SkuName = sku.SkuName,
                                Standard = sku.Standard,
                                LotNo = d.LotNo,
                                LotText = stockInfo.LotText,
                                Qty = d.Qty,
                                AllotQty = 0,
                                FactQty = 0,
                                CompleteQty = 0,
                                PackagNo = sku.PackagNo,
                                Price = sku.Price,
                                Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
                                IsBale = "",
                                IsBelt = "",
                                SupplierLot = stockInfo.SupplierLot,
                                IsWave = "0",
                                WaveNo = "",
                                IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1",
                                OrderDetailCode = d.OrderDetailCode,
                                CreateUser = 0,
                            };
                            list.Add(noticeDetail);
                            //更新库存锁定数量
                            stockInfo.LockQty += d.Qty;
                            var i = Db.Updateable(stockInfo).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                            SoDetailInfo soDetail = new SoDetailInfo();
                            soDetail.OrderDetailCode = d.OrderDetailCode;
                            soDetail.LockQty = d.Qty;
                            soDetail.LotNo = d.LotNo;
                            soDetailList.Add(soDetail);
                        }
                        else//未指定批次
                        {
                            Dictionary<int, decimal> dic = new Dictionary<int, decimal>();
                            decimal q1 = 0;
                            //首先查询当前这种物料批次号为空的
                            stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
                            if (stockDetails.Count > 0)
                            {
                                q1 = (decimal)stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty);
                                //库存信息
                                var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(w.LotNo));
                                if (stockInfo != null)
                                {
                                    var q2 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty;
                                    if (q2 < q1)
                                    {
                                        q1 = q2;
                                    }
                                    if (d.Qty > q1)
                                    {
                                        dic.Add(stockInfo.Id, q1);
                                    }
                                    else
                                    {
                                        dic.Add(stockInfo.Id, d.Qty);
                                    }
                                }
                            }
                            //如果批次号为空的数量不够,根据批次先进先出原则查找其它批次的
                            if (d.Qty > q1)
                            {
                                stockDetails = stockDetailList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList();
                                foreach (var demo in stockDetails)
                                {
                                    if (q1 >= d.Qty)
                                    {
                                        break;
                                    }
                                    var q2 = demo.Qty - demo.FrozenQty - demo.LockQty;
                                    //库存信息
                                    var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && w.LotNo == demo.LotNo);
                                    if (stockInfo == null)
                                    {
                                        continue;
                                    }
                                    decimal q4 = 0;
                                    if (dic.ContainsKey(stockInfo.Id))
                                    {
                                        q4 = dic[stockInfo.Id];
                                    }
                                    var q3 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty - q4;
                                    if (q3 < q2)
                                    {
                                        q2 = q3;
                                    }
                                    if (q2 > d.Qty - q1)
                                    {
                                        if (!dic.ContainsKey(stockInfo.Id))
                                        {
                                            dic.Add(stockInfo.Id, d.Qty - q1);
                                        }
                                        else
                                        {
                                            //更新值
                                            dic[stockInfo.Id] += d.Qty - q1;
                                        }
                                        q1 += d.Qty - q1;
                                    }
                                    else
                                    {
                                        if (!dic.ContainsKey(stockInfo.Id))
                                        {
                                            dic.Add(stockInfo.Id, (decimal)q2);
                                        }
                                        else
                                        {
                                            //更新值
                                            dic[stockInfo.Id] = dic[stockInfo.Id] + (decimal)q2;
                                        }
                                        q1 += (decimal)q2;
                                    }
                                }
                            }
                            if (d.Qty > q1)
                            {
                                throw new Exception($"总库存中出库物料信息:{d.SkuNo} 库存数量不足");
                            }
                            foreach (var s in dic)
                            {
                                var st = stockList.First(a => a.Id == s.Key);
                                var item = new BllExportNoticeDetail()
                                {
                                    SONo = billNo,
                                    OrderDetailCode = d.OrderDetailCode,
                                    SkuNo = sku.SkuNo,
                                    SkuName = sku.SkuName,
                                    Standard = sku.Standard,
                                    LotNo = st.LotNo,
                                    LotText = st.LotText,
                                    Qty = s.Value,
                                    AllotQty = 0,
                                    FactQty = 0,
                                    CompleteQty = 0,
                                    PackagNo = sku.PackagNo,
                                    Price = sku.Price,
                                    Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
                                    IsBale = "",
                                    IsBelt = "",
                                    SupplierLot = st.SupplierLot,
                                    IsWave = "0",
                                    WaveNo = "",
                                    IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1",
                                    CreateUser = 0,
                                };
                                list.Add(item);
                                st.LockQty += s.Value;//锁定数量
                                var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                                SoDetailInfo soDetail = new SoDetailInfo();
                                soDetail.OrderDetailCode = d.OrderDetailCode;
                                soDetail.LockQty = s.Value;
                                soDetail.LotNo = st.LotNo;
                                soDetailList.Add(soDetail);
                            }
                        }
                        throw new Exception("出库数量必须大于0");
                    }
                    var notice = new BllExportNotice()
                    if (string.IsNullOrWhiteSpace(d.LotNo))
                    {
                        throw new Exception("批次不可为空!");
                    }
                    //库存明细
                    List<DataStockDetail> stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).OrderByDescending(o => o.CompleteTime).ToList();
                    if (stockDetails.Count < 1)
                    {
                        throw new Exception($"库存中未查询到出库物料信息:{d.SkuNo}");
                    }
                    //判断数量
                    var qty = stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty);
                    if (d.Qty > qty)
                    {
                        throw new Exception($"库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足");
                    }
                    //添加出库单明细
                    var noticeDetail = new BllExportNoticeDetail()
                    {
                        SONo = billNo,
                        OrderCode = model.OrderCode,
                        Type = model.SoType,
                        Status = "0",
                        Origin = "WMS",
                        CustomerNo = model.Customer,
                        CustomerName = CustomerName,
                        LogisticsId = logisticsId,
                        SkuNo = d.SkuNo,
                        SkuName = d.SkuName,
                        Standard = "",
                        LotNo = d.LotNo,
                        LotText = "",
                        Qty = d.Qty,
                        AllotQty = 0,
                        FactQty = 0,
                        CompleteQty = 0,
                        PackagNo = "",
                        Price = 0,
                        Money = 0,
                        IsBale = "",
                        IsBelt = "",
                        SupplierLot = "",
                        IsWave = "0",
                        WaveNo = "",
                        IsDespatch = "0",
                        IsIssueLotNo = "1",
                        OrderDetailCode = d.OrderDetailCode,
                        CreateUser = 0,
                    };
                    var n = Db.Insertable<BllExportNotice>(notice).ExecuteCommand();
                    var m = Db.Insertable<BllExportNoticeDetail>(list).ExecuteCommand();
                    if (n <= 0 || m <= 0)
                    list.Add(noticeDetail);
                    //锁定库存数量
                    decimal lockQty = 0;
                    foreach (var item in stockDetails)
                    {
                        Db.RollbackTran();
                        throw new Exception("操作失败");
                        if (lockQty >= d.Qty)
                        {
                            break;
                        }
                        if (item.Qty - item.LockQty - item.FrozenQty <= d.Qty - lockQty)
                        {
                            item.LockQty += item.Qty - item.LockQty - item.FrozenQty;
                            lockQty += (decimal)(item.Qty - item.LockQty - item.FrozenQty);
                        }
                        else
                        {
                            item.LockQty += d.Qty - lockQty;
                            lockQty += d.Qty - lockQty;
                        }
                        Db.Updateable(item).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                    }
                    Db.CommitTran();
                    //回传上游系统锁定数量信息
                    result.Success = "0";
                    result.Message = "操作成功";
                    result.SoDetails = soDetailList;
                    return result;
                    SoDetailInfo soDetail = new SoDetailInfo();
                    soDetail.OrderDetailCode = d.OrderDetailCode;
                    soDetail.LockQty = d.Qty;
                    soDetail.LotNo = d.LotNo;
                    soDetailList.Add(soDetail);
                }
                catch (Exception ex)
                //出库单信息
                var notice = new BllExportNotice()
                {
                    SONo = billNo,
                    OrderCode = model.OrderCode,
                    Type = model.SoType,
                    Status = "0",
                    Origin = "WMS",
                    CustomerNo = model.Customer,
                    CustomerName = "",
                    LogisticsId = null,
                    IsWave = "0",
                    WaveNo = "",
                    IsDespatch = "0",
                    CreateUser = 0,
                };
                var n = Db.Insertable<BllExportNotice>(notice).ExecuteCommand();
                var m = Db.Insertable<BllExportNoticeDetail>(list).ExecuteCommand();
                if (n <= 0 || m <= 0)
                {
                    Db.RollbackTran();
                    throw new Exception(ex.Message);
                    throw new Exception("操作失败");
                }
                //提交事务
                Db.CommitTran();
                //回传上游系统锁定数量信息
                result.Success = "0";
                result.Message = "操作成功";
                result.SoDetails = soDetailList;
                return result;
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw new Exception(ex.Message);
            }
        }*/
        }
    }
}
Wms/WMS.Entity/DataEntity/DataStockDetail.cs
@@ -208,6 +208,12 @@
        public DateTime? ExpirationTime {get;set;}
        /// <summary>
        /// 托盘状态
        /// Default:0:净桶 1:预混 2:半成品 3:脏桶
        /// </summary>
        public string PalletStatus { get; set; }
        /// <summary>
        /// Desc:状态
        /// Default:0:待分配 1:部分分配  2:已分配 3:盘点锁定 4:移库锁定
        /// Nullable:True
Wms/WMS.Entity/LogEntity/LogTask.cs
@@ -20,9 +20,9 @@
        public string TaskNo {get;set;}
        /// <summary>
        /// 入库明细号
        /// 入库\出库单明细号
        /// </summary>
        public int ASNDetailNo { get; set; }
        public int NoticeDetailNo { get; set; }
        /// <summary>
        /// Desc:发送方
Wms/WMS.IBLL/IBllTransServer/INoticeServer.cs
@@ -7,6 +7,26 @@
{
    public interface INoticeServer
    {
        /// <summary>
        /// 下发入库单
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public ErpModel CreateAsn(AsnInfo model);
        /// <summary>
        /// 任务完成
        /// </summary>
        /// <param name="TaskNo"></param>
        /// <param name="Status"></param>
        /// <returns></returns>
        public ErpModel FinishTask(string TaskNo, string Status);
        /// <summary>
        /// 下发出库单
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public SoResInfo ErpAddExportNotice(SoInfo model);
    }
}