bklLiudl
2024-08-27 13b91828a0301ba53585662f5207ed45ff485638
库存统计重写
7个文件已修改
574 ■■■■■ 已修改文件
HTML/views/ASNSetting/PalletBind.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/StatisticalReport/InventoryStatistics.html 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pda/View/AsnSetting/productEnterQuantity.html 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/DataServer/StockServer.cs 364 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IDataServer/IStockServer.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/BllAsnController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/PalletBind.html
@@ -3,7 +3,7 @@
<head>
    <meta charset="utf-8">
    <title>托盘绑定</title>
    <title>组托收货</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
@@ -469,7 +469,7 @@
                { field: 'WareHouseNo', title: '所属仓库', align: 'center', width: 90, templet: '#WareHouseButton' },
                { field: 'SkuNo', title: '物料编码', align: 'center', width: 110 },
                { field: 'SkuName', title: '物料名称', align: 'center' },
                { field: 'LotNo', title: '批次号', align: 'center',width: 120 },
                { field: 'LotNo', title: '批次号', align: 'center', width: 120 },
                { field: 'Qty', title: '数量', align: 'center', width: 90 },
                { field: 'FullQty', title: '整托数量', align: 'center', width: 90 },
                { field: 'SamplingQty', title: '取样数量', align: 'center', width: 90 },
@@ -816,7 +816,7 @@
                        layer.open({
                            type: 2,
                            title: '箱支详情信息',
                            content: 'BindBoxInfo.html?BoxNo=' + BoxNo+'&BindNo='+data.BindNo,
                            content: 'BindBoxInfo.html?BoxNo=' + BoxNo + '&BindNo=' + data.BindNo,
                            maxmin: true,
                            area: ['80%', '85%'],
                            btn: ['关闭'],
HTML/views/StatisticalReport/InventoryStatistics.html
@@ -3,7 +3,7 @@
<head>
    <meta charset="utf-8">
    <title>库存信息列表</title>
    <title>库存统计</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
@@ -19,13 +19,13 @@
    </style>
    <script>
        // 这里是需要在页面渲染之前执行的代码
        document.addEventListener("DOMContentLoaded", function() {
        document.addEventListener("DOMContentLoaded", function () {
            //获取table默认显示数
            pageCntFirst();
            //判断是否开启table列表列宽调整功能。
            GetIsSetColW();
        });
      </script>
    </script>
</head>
@@ -97,7 +97,7 @@
                                class="layui-input">
                        </div>
                    </div> -->
                    <div class="layui-inline ">
                        <label class="layui-form-label" style="width: 60px;">库存状态</label>
                        <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
@@ -131,7 +131,7 @@
                                <option value="0">待质检</option><!-- 待检验 -->
                                <option value="1">检验合格</option><!-- 合格品 -->
                                <option value="2">不合格</option><!-- 不合格 -->
                                <option value="3">放置期</option><!-- 不合格 -->
                                <!-- <option value="3">放置期</option>不合格 -->
                            </select>
                        </div>
                    </div>
@@ -172,16 +172,16 @@
                        <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 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>
@@ -285,96 +285,46 @@
            // 表单需要的变量
            var infoOptions;
            //#region 原始非自定义列
            //infoOptions = {
            //    elem: '#LAY-app-content-list',
            //    height: 'full-206',
            //    id: 'LAY-app-content-list',
            //    totalRow: true
            //    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',
            //                totalRowText: "合计:",
            //            }, {
            //                field: 'SkuName',
            //                title: '物料名称',
            //                align: 'center',
            //            }, {
            //                field: 'Standard',
            //                title: '物料规格',
            //                align: 'center',
            //            }, {
            //                field: 'Qty',
            //                title: '库存数量',
            //                align: 'center',
            //                totalRow: true,
            //            }, {
            //                field: 'LockQty',
            //                title: '锁定数量',
            //                align: 'center',
            //                totalRow: true,
            //            }, {
            //                field: 'FrozenQty',
            //                title: '冻结数量',
            //                align: 'center',
            //                totalRow: true,
            //            }
            //        ]]
            //};
            //#endregion
            //#region 自定义表头
            var TotalColsArr = [[
                        {field: '',title: '序号',type:'numbers',align: 'center',fixed: 'left', "disabled": true},
                        {field: 'SkuNo',title: '物料编码',align: 'center',totalRowText: "合计:", "disabled": true},
                        {field: 'SkuName',title: '物料名称',align: 'center', "disabled": true},
                        {field: 'Standard',title: '物料规格',align: 'center', "disabled": true},
                        {field: 'LotNo',title: '批次号',align: 'center', "disabled": true},
                        {field: 'LotText',title: '批次描述',align: 'center'},
                        {field: 'OwnerNo',title: '货主编码',align: 'center'},
                        {field: 'OwnerName',title: '货主名称',align: 'center'},
                        {field: 'Status',title: '库存状态',align: 'center',templet: '#buttonTpl'},
                        {field: 'InspectStatus',title: '质检状态',align: 'center',templet: '#buttonTp2'},
                        {field: 'Qty',title: '库存数量',align: 'center',totalRow: true},
                        {field: 'LockQty',title: '锁定数量',align: 'center',totalRow: true},
                        {field: 'FrozenQty',title: '冻结数量',align: 'center',totalRow: true},
                        {field: 'InspectQty',title: '可抽检数量',align: 'center',totalRow: true},
                    ]];
            var TotalColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
                { field: '', title: '序号', type: 'numbers', align: 'center', fixed: 'left', "disabled": true },
                { field: 'SkuNo', title: '物料编码', align: 'center', totalRowText: "合计:", "disabled": true },
                { field: 'SkuName', title: '物料名称', align: 'center', "disabled": true },
                { field: 'Standard', title: '物料规格', align: 'center', "disabled": true },
                { field: 'LotNo', title: '批次号', align: 'center', "disabled": true },
                { field: 'LotText', title: '批次描述', align: 'center' },
                { field: 'OwnerNo', title: '货主编码', align: 'center' },
                { field: 'OwnerName', title: '货主名称', align: 'center' },
                { field: 'Status', title: '库存状态', align: 'center', templet: '#buttonTpl' },
                { field: 'InspectStatus', title: '质检状态', align: 'center', templet: '#buttonTp2' },
                { field: 'Qty', title: '库存数量', align: 'center', totalRow: true },
                { field: 'LockQty', title: '锁定数量', align: 'center', totalRow: true },
                { field: 'FrozenQty', title: '冻结数量', align: 'center', totalRow: true },
                { field: 'InspectQty', title: '可抽检数量', align: 'center', totalRow: true },
            ]];
            var TotalColsSysArr = encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
            //#endregion
            //获取总量信息
            function refreshTable(SelectType,SkuNo,SkuName,OwnerNo,OwnerName,LotNo,Status,InspectStatus) {
            function refreshTable(SelectType, SkuNo, SkuName, OwnerNo, OwnerName, LotNo, Status, InspectStatus) {
                //#region 自定义表头
                var colsJson
                var param1={
                    Href:'Statistical/GetInventoryList'
                var param1 = {
                    Href: 'Statistical/GetInventoryList'
                };
                sendData(IP + "/Sys/GetTableColsByUserId", param1, 'post', function(res) {
                    if (res.code == 0){
                        if(res.data=='' || res.data==undefined || res.data==null){
                            colsJson=TotalColsArr
                        }else{
                            colsJson= eval(res.data);
                sendData(IP + "/Sys/GetTableColsByUserId", param1, 'post', function (res) {
                    if (res.code == 0) {
                        if (res.data == '' || res.data == undefined || res.data == null) {
                            colsJson = TotalColsArr
                        } else {
                            colsJson = eval(res.data);
                        }
                    }else{
                        colsJson=TotalColsArr
                    } else {
                        colsJson = TotalColsArr
                    }
                    infoOptions = {
                        elem: '#LAY-app-content-list',
                        height: h1,
                        height: 'full-163',
                        id: 'LAY-app-content-list',
                        totalRow: true,
                        page: true,
@@ -382,21 +332,21 @@
                        limits: pageLimits,
                        even: true,
                        cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                        done: function(){
                        done: function () {
                            //自定义列宽
                            SetTableColW('LAY-app-content-list','Statistical/GetInventoryList',TotalColsSysArr);
                        },
                        cols:colsJson
                            SetTableColW('LAY-app-content-list', 'Statistical/GetInventoryList', TotalColsSysArr);
                        },
                        cols: colsJson
                    };
                    var param = {
                        SelectType:SelectType, //查询类型
                        SkuNo:SkuNo, //物料号
                        SkuName:SkuName, //物料名称
                        OwnerNo:OwnerNo, //货主编码
                        OwnerName:OwnerName, //货主名称
                        LotNo:LotNo, //批次号
                        Status:Status, //库存状态 = $("#Status").val();
                        InspectStatus:InspectStatus, //质检状态 = $("#InspectStatus").val();
                        SelectType: SelectType, //查询类型
                        SkuNo: SkuNo, //物料号
                        SkuName: SkuName, //物料名称
                        OwnerNo: OwnerNo, //货主编码
                        OwnerName: OwnerName, //货主名称
                        LotNo: LotNo, //批次号
                        Status: Status, //库存状态 = $("#Status").val();
                        InspectStatus: InspectStatus, //质检状态 = $("#InspectStatus").val();
                    };
                    sendData(IP + "/Statistical/GetInventoryList", param, 'get', function (res) {
                        console.log(res)
@@ -419,8 +369,8 @@
                    });
                });
                //#endregion
            }
            }
            //监听搜索
            form.on('submit(LAY-app-contlist-search)', function (data) {
                var SelectType = $("#SelectType").val();
@@ -431,7 +381,7 @@
                var OwnerName = $("#OwnerName").val();
                var Status = $("#Status").val();
                var InspectStatus = $("#InspectStatus").val();
                refreshTable(SelectType,SkuNo, SkuName,OwnerNo,OwnerName,LotNo,Status,InspectStatus);
                refreshTable(SelectType, SkuNo, SkuName, OwnerNo, OwnerName, LotNo, Status, InspectStatus);
            });
@@ -467,18 +417,18 @@
            //#region 自定义表头
            //自定义表头            
            active = {
                customCols: function(){
                customCols: function () {
                    layer.open({
                        type: 2,
                        title: '自定义列',
                        content: '../SystemSettings/HeaderSetting.html?Href=Statistical/GetInventoryList&ColsSysArr='+TotalColsSysArr,
                        content: '../SystemSettings/HeaderSetting.html?Href=Statistical/GetInventoryList&ColsSysArr=' + TotalColsSysArr,
                        maxmin: false,
                        resize: false,
                        area: ['970px', '650px']
                    });
                }
            };
            $('.layui-btn').on('click', function() {
            $('.layui-btn').on('click', function () {
                var type = $(this).data('type');
                active[type] ? active[type].call(this) : '';
            });
Pda/View/AsnSetting/productEnterQuantity.html
@@ -86,7 +86,7 @@
            <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-text" lang>组托收货</td>
                    <td class="title-menu-icon"><img id="menuImg" src="/assets/menu.jpg"></td>
                </tr>
            </table>
@@ -297,8 +297,9 @@
                        <div id="" class="layui-form-item layout-input">
                            <label class="layui-form-label" lang>物料数量:</label>
                            <div class="layui-input-block">
                                <input id="SkuQty" type="number" lay-verify="stock" lang langholder placeholder="请输入物料数量"
                                    autocomplete="off" class="layui-input" oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
                                <input id="SkuQty" type="number" lay-verify="stock" lang langholder
                                    placeholder="请输入物料数量" autocomplete="off" class="layui-input"
                                    oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
                            </div>
                        </div>
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
@@ -227,7 +227,9 @@
                BllQualityInspect quality = new BllQualityInspect();
                if (model.Type == "0")
                {
                    quality = Db.Queryable<BllQualityInspect>().Where(a => a.IsDel == "0" && a.SkuNo == detail.SkuNo && a.LotNo == detail.LotNo).OrderByDescending(a => a.CreateTime).First();
                    quality = Db.Queryable<BllQualityInspect>()
                        .Where(a => a.IsDel == "0" && a.SkuNo == detail.SkuNo && a.LotNo == detail.LotNo)
                        .OrderByDescending(a => a.CreateTime).First();
                }
                DataStockDetail sd1 = null;
@@ -593,7 +595,7 @@
        #endregion
        #region 托盘绑定
        #region 组托收货
        public List<PalletBindDto> GetPalletBindList(PalletBindVm model, out int count)
        {
            try
@@ -602,8 +604,17 @@
                if (!string.IsNullOrWhiteSpace(model.SkuNo) || !string.IsNullOrWhiteSpace(model.SkuName))
                {
                    var detailList = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && m.SkuNo.Contains(model.SkuNo.Trim()) && m.SkuName.Contains(model.SkuName.Trim())).Select(m => m.Id).Distinct().ToList();
                    var detailList = Db.Queryable<BllArrivalNoticeDetail>()
                        .Where(m => m.IsDel == "0" && m.SkuNo.Contains(model.SkuNo.Trim()) && m.SkuName.Contains(model.SkuName.Trim()))
                        .Select(m => m.Id).Distinct().ToList();
                    strList = detailList;
                    if (strList.Count <= 0)
                    {
                        // 物料编码、名称检索失败直接返回null
                        count = 0;
                        return null;
                    }
                }
                Expression<Func<BllPalletBind, bool>> item = Expressionable.Create<BllPalletBind>()
                  .AndIF(!string.IsNullOrWhiteSpace(model.ASNNo), it => it.ASNNo.Contains(model.ASNNo.Trim()))
@@ -615,7 +626,7 @@
                  .AndIF(!string.IsNullOrWhiteSpace(model.LotNo), it => it.LotNo.Contains(model.LotNo.Trim()))
                  .AndIF(!string.IsNullOrWhiteSpace(model.LotText), it => it.LotText.Contains(model.LotText.Trim()))
                  .AndIF(!string.IsNullOrWhiteSpace(model.StartTime), it => it.CreateTime >= Convert.ToDateTime(model.StartTime))
                  .AndIF(!string.IsNullOrWhiteSpace(model.EndTime), it => it.CreateTime <= Convert.ToDateTime(model.EndTime))
                  .AndIF(!string.IsNullOrWhiteSpace(model.EndTime), it => it.CreateTime <= Convert.ToDateTime(model.EndTime).AddDays(1))
                  .AndIF(!string.IsNullOrWhiteSpace(model.Status), it => it.Status == model.Status)
                  .And(m => m.IsDel == "0")
                  .ToExpression();//注意 这一句 不能少
Wms/WMS.BLL/DataServer/StockServer.cs
@@ -2,6 +2,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Runtime.Intrinsics.X86;
using System.Security.Claims;
using System.Text;
@@ -13,6 +14,7 @@
using Model.ModelVm.SysVm;
using SqlSugar;
using WMS.DAL;
using WMS.Entity.BllAsnEntity;
using WMS.Entity.Context;
using WMS.Entity.DataEntity;
using WMS.Entity.SysEntity;
@@ -32,7 +34,7 @@
        #region 库存明细
        /// <summary>
        /// 查询库存总量
        /// 查询库存统计
        /// </summary>
        /// <param name="selectType">查询类型 0:物料信息 1:批次信息 2:质检信息 3:货主信息</param>
        /// <param name="skuNo">物料编码</param>
@@ -43,246 +45,133 @@
        /// <param name="status">库存状态</param>
        /// <param name="inspectStatus">质检状态</param>
        /// <returns></returns>
        public async Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus)
        public async Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo,
            string ownerName, string lotNo, string status, string inspectStatus)
        {
            List<MateDataStockDto> modUser = new List<MateDataStockDto>();
            if (string.IsNullOrEmpty(selectType))
            Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
            .AndIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo.Contains(skuNo))
            .AndIF(!string.IsNullOrEmpty(skuName), a => a.SkuName.Contains(skuName))
            .AndIF(!string.IsNullOrEmpty(ownerNo), a => a.OwnerNo.Contains(ownerNo))
            .AndIF(!string.IsNullOrEmpty(ownerName), a => a.OwnerName.Contains(ownerName))
            .AndIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo.Contains(lotNo))
            .AndIF(!string.IsNullOrEmpty(status), a => a.Status == status)
            .AndIF(!string.IsNullOrEmpty(inspectStatus), a => a.InspectStatus == inspectStatus)
            .And(a => a.IsDel == "0")
            .ToExpression();//注意 这一句 不能少
            var data = Db.Queryable<DataStockDetail>().Where(item);
            List<MateDataStockDto> data2;
            switch (selectType)
            {
                modUser = await Db.Queryable<DataStock>()
                            .WhereIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo == skuNo)
                            .WhereIF(!string.IsNullOrEmpty(skuName), a => a.SkuName == skuName)
                            .WhereIF(!string.IsNullOrEmpty(ownerNo), a => a.OwnerNo == ownerNo)
                            .WhereIF(!string.IsNullOrEmpty(ownerName), a => a.OwnerName == ownerName)
                            .WhereIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo == lotNo)
                            .Where(a => a.IsDel == "0")
                            .Select(a => new MateDataStockDto()
                            {
                                SkuNo = a.SkuNo, //物料编码
                                SkuName = a.SkuName, //物料名称
                                Standard = a.Standard, //规格
                                LotNo = a.LotNo, //批次
                                LotText = a.LotText, //批次描述
                                OwnerNo = a.OwnerNo, //货主编码
                                OwnerName = a.OwnerName, //货主名称
                                Status = status, //库存状态
                                InspectStatus = inspectStatus, //质检状态
                                Qty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.Qty), //库存数量
                                //Qty = SqlFunc.AggregateSum(b.Qty), //库存数量
                                LockQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.LockQty), //锁定数量
                                FrozenQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.FrozenQty), //冻结数量
                                InspectQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.InspectQty), //可抽检数量
                            }).ToListAsync();
                // 按物料统计
                case "0":
                     data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard })
                        .Select(a => new MateDataStockDto()
                        {
                            SkuNo = a.SkuNo, //物料编码
                            SkuName = a.SkuName, //物料名称
                            Standard = a.Standard, //规格
                            //LotNo = a.LotNo, //批次
                            //LotText = a.LotText, //批次描述
                            //OwnerNo = a.OwnerNo, //货主编码
                            //OwnerName = a.OwnerName, //货主名称
                            Status = status, //库存状态
                            InspectStatus = inspectStatus, //质检状态
                            Qty =  SqlFunc.AggregateSumNoNull(a.Qty), //库存数量
                            LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //锁定数量
                            FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty),
                            InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty)
                        }).ToListAsync();
                    break;
                return modUser;
                // 按批次统计
                case "1":
                     data2 = await data.GroupBy(a => new { a.LotNo, a.LotText, a.SkuNo, a.SkuName, a.Standard })
                        .Select(a => new MateDataStockDto()
                        {
                            SkuNo = a.SkuNo, //物料编码
                            SkuName = a.SkuName, //物料名称
                            Standard = a.Standard, //规格
                            LotNo = a.LotNo, //批次
                            LotText = a.LotText, //批次描述
                            //OwnerNo = a.OwnerNo, //货主编码
                            //OwnerName = a.OwnerName, //货主名称
                            Status = status, //库存状态
                            InspectStatus = inspectStatus, //质检状态
                            Qty = SqlFunc.AggregateSumNoNull(a.Qty), //库存数量
                            LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //锁定数量
                            FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty),
                            InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty)
                        }).ToListAsync();
                    break;
                // 按质检状态统计
                case "2":
                    data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard,a.InspectStatus})
                        .Select(a => new MateDataStockDto()
                        {
                            SkuNo = a.SkuNo, //物料编码
                            SkuName = a.SkuName, //物料名称
                            Standard = a.Standard, //规格
                            //LotNo = a.LotNo, //批次
                            //LotText = a.LotText, //批次描述
                            //OwnerNo = a.OwnerNo, //货主编码
                            //OwnerName = a.OwnerName, //货主名称
                            Status = status, //库存状态
                            InspectStatus = a.InspectStatus, //质检状态
                            Qty = SqlFunc.AggregateSumNoNull(a.Qty), //库存数量
                            LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //锁定数量
                            FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty),
                            InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty),
                        }).ToListAsync();
                    break;
                // 按货主统计
                case "3":
                    data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard, a.OwnerNo, a.OwnerName })
                        .Select(a => new MateDataStockDto()
                        {
                            SkuNo = a.SkuNo, //物料编码
                            SkuName = a.SkuName, //物料名称
                            Standard = a.Standard, //规格
                            //LotNo = a.LotNo, //批次
                            //LotText = a.LotText, //批次描述
                            OwnerNo = a.OwnerNo, //货主编码
                            OwnerName = a.OwnerName, //货主名称
                            Status = status, //库存状态
                            InspectStatus = inspectStatus, //质检状态
                            Qty = SqlFunc.AggregateSumNoNull(a.Qty), //库存数量
                            LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //锁定数量
                            FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty),
                            InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty),
                        }).ToListAsync();
                     break;
                // 默认统计(物料 批次 质检 库存状态 货主)
                default:
                    data2 = await data.GroupBy(a => new {  a.SkuNo, a.SkuName, a.Standard ,a.LotNo, a.LotText, a.OwnerNo, a.OwnerName , a.InspectStatus })
                        .Select(a => new MateDataStockDto()
                        {
                            SkuNo = a.SkuNo, //物料编码
                            SkuName = a.SkuName, //物料名称
                            Standard = a.Standard, //规格
                            LotNo = a.LotNo, //批次
                            LotText = a.LotText, //批次描述
                            OwnerNo = a.OwnerNo, //货主编码
                            OwnerName = a.OwnerName, //货主名称
                            Status = status, //库存状态
                            InspectStatus = a.InspectStatus, //质检状态
                            Qty = SqlFunc.AggregateSumNoNull(a.Qty), //库存数量
                            LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //锁定数量
                            FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty),
                            InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty),
                        }).ToListAsync();
                    break;
            }
            else
            {
                var selectList = new List<DataStockDetail>();
                switch (selectType)
                {
                    case "0": // 物料信息
                        modUser = await Db.Queryable<DataStock>()
                            .Where(a => a.IsDel == "0")
                            .GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard })
                            .Select(a => new MateDataStockDto()
                            {
                                SkuNo = a.SkuNo, //物料编码
                                SkuName = a.SkuName, //物料名称
                                Standard = a.Standard, //规格
                                Qty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.SkuNo == a.SkuNo)
                                    .Sum(s => s.Qty), //库存数量
                                LockQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.SkuNo == a.SkuNo)
                                    .Sum(s => s.LockQty), //锁定数量
                                FrozenQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.SkuNo == a.SkuNo)
                                    .Sum(s => s.FrozenQty), //冻结数量
                                InspectQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.SkuNo == a.SkuNo)
                                    .Sum(s => s.InspectQty), //可抽检数量
                            })
                            .ToListAsync();
                        return modUser;
                    case "1": // 批次信息
                        modUser = await Db.Queryable<DataStock>()
                            .Where(a => a.IsDel == "0")
                            .GroupBy(a => new { a.LotNo, a.LotText })
                            .Select(a => new MateDataStockDto()
                            {
                                LotNo = a.LotNo, //批次
                                LotText = a.LotText, //批次描述
                                Qty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.Qty), //库存数量
                                LockQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.LockQty), //锁定数量
                                FrozenQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.FrozenQty), //冻结数量
                                InspectQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.InspectQty), //可抽检数量
                            })
                            .ToListAsync();
                        return modUser;
                    case "2": // 质检信息
                        modUser = await Db.Queryable<DataStock>()
                            .LeftJoin<DataStockDetail>((a, b) => a.LotNo == b.LotNo)
                           .WhereIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo == skuNo)
                           .WhereIF(!string.IsNullOrEmpty(skuName), a => a.SkuName == skuName)
                           .WhereIF(!string.IsNullOrEmpty(ownerNo), a => a.OwnerNo == ownerNo)
                           .WhereIF(!string.IsNullOrEmpty(ownerName), a => a.OwnerName == ownerName)
                           .WhereIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo == lotNo)
                           .WhereIF(!string.IsNullOrEmpty(status), (a, b) => b.Status == status)
                           .WhereIF(!string.IsNullOrEmpty(inspectStatus), (a, b) => b.InspectStatus == inspectStatus)
                           .Where(a => a.IsDel == "0")
                           .GroupBy((a, b) => b.InspectStatus)
                           .Select((a, b) => new MateDataStockDto()
                           {
                               InspectStatus = b.InspectStatus, //质检状态
                               Qty = SqlFunc.AggregateSum(b.Qty), //库存数量
                               LockQty = SqlFunc.AggregateSum(b.LockQty), //锁定数量
                               FrozenQty = SqlFunc.AggregateSum(b.FrozenQty), //冻结数量
                               InspectQty = SqlFunc.AggregateSum(b.InspectQty), //可抽检数量
                           })
                           .ToListAsync();
                        return modUser;
                    case "3": // 货主信息
                        modUser = await Db.Queryable<DataStock>()
                            .Where(a => a.IsDel == "0")
                            .GroupBy(a => new { a.OwnerNo, a.OwnerName })
                            .Select(a => new MateDataStockDto()
                            {
                                OwnerNo = a.OwnerNo, //货主编码
                                OwnerName = a.OwnerName, //货主名称
                                Qty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.OwnerNo == a.OwnerNo)
                                    .Sum(s => s.Qty), //库存数量
                                LockQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.OwnerNo == a.OwnerNo)
                                    .Sum(s => s.LockQty), //锁定数量
                                FrozenQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.OwnerNo == a.OwnerNo)
                                    .Sum(s => s.FrozenQty), //冻结数量
                                InspectQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.OwnerNo == a.OwnerNo)
                                    .Sum(s => s.InspectQty), //可抽检数量
                            })
                            .ToListAsync();
                        return modUser;
                    default:
                        break;
                }
                return modUser;
            }
            return data2;
        }
        /// <summary>
@@ -678,7 +567,8 @@
        {
            try
            {
                string str = "select* from SysMaterials where SkuNo in (select a.SkuNo from BllArrivalNoticeDetail a inner join BllExportNoticeDetail b on a.SkuNo = b.SkuNo";
                string str = "select* from SysMaterials where SkuNo in (select a.SkuNo from BllArrivalNoticeDetail a " +
                    "inner join BllExportNoticeDetail b on a.SkuNo = b.SkuNo";
                //判断开始时间是否为空
                if (!string.IsNullOrWhiteSpace(StartTime))
Wms/WMS.IBLL/IDataServer/IStockServer.cs
@@ -24,7 +24,8 @@
        /// <param name="status">库存状态</param>
        /// <param name="inspectStatus">质检状态</param>
        /// <returns></returns>
        Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus);
        Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo,
            string status, string inspectStatus);
        /// <summary>
        /// 获取库存明细
@@ -37,7 +38,8 @@
        /// <param name="status">库存状态</param>
        /// <param name="inspectStatus">质检状态</param>
        /// <returns></returns>
        List<StockDetailDto> GetInventoryList1(string skuNo, string skuName, string lotNo, string locatNo, string palletNo, string status, string inspectStatus, string ownerNo, string ownerName, string startTime, string endTime);
        List<StockDetailDto> GetInventoryList1(string skuNo, string skuName, string lotNo, string locatNo,
            string palletNo, string status, string inspectStatus, string ownerNo, string ownerName, string startTime, string endTime);
        #endregion
Wms/Wms/Controllers/BllAsnController.cs
@@ -335,7 +335,7 @@
        }
        #endregion
        #region 托盘绑定
        #region 组托收货
        [HttpPost]
        public IActionResult GetPalletBindList(PalletBindVm model)
        {