yyk
2024-07-18 ac85d00b1c88e0088c9f6f23c09a4ed87415ad38
修改库存信息接口及页面。
7个文件已修改
724 ■■■■■ 已修改文件
HTML/js/public.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/StatisticalReport/InventoryStatistics.html 356 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/DataDto/MateDataStockDto.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/DataServer/StockServer.cs 324 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.Entity/Context/DataContext.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IDataServer/IStockServer.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/StatisticalController.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/js/public.js
@@ -203,9 +203,9 @@
  var bodyHeight = $("#body").outerHeight();
  var topHeight = $("#top").outerHeight();
  var centerHeight = $("#center").outerHeight();
//   console.log(bodyHeight);
//   console.log(topHeight);
//   console.log(centerHeight);
  console.log(bodyHeight);
  console.log(topHeight);
  console.log(centerHeight);
  var hh = bodyHeight - topHeight-centerHeight - 26 ;//6是body上内边距 
  return hh;
HTML/views/StatisticalReport/InventoryStatistics.html
@@ -36,6 +36,18 @@
            <div class="layui-form layui-card-header layuiadmin-card-header-auto" id="top">
                <div class="layui-form-item" style="margin-bottom: 0px;">
                    <div class="layui-inline ">
                        <label class="layui-form-label" style="width: 60px;">查询类型</label>
                        <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
                            <select name="SelectType" id="SelectType" lay-filter="SelectType" lay-search>
                                <option value="">正常</option>
                                <option value="0">物料信息</option>
                                <option value="1">批次信息</option>
                                <option value="2">质检信息</option>
                                <option value="3">货主信息</option>
                            </select>
                        </div>
                    </div>
                    <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;">
@@ -71,7 +83,7 @@
                                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="LocatNo" name="LocatNo" placeholder="储位地址" autocomplete="off"
@@ -84,7 +96,7 @@
                            <input type="text" id="PalletNo" name="PalletNo" placeholder="托盘号" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    </div> -->
                    
                    <div class="layui-inline ">
                        <label class="layui-form-label" style="width: 60px;">库存状态</label>
@@ -123,7 +135,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;">
                            <input type="text" autocomplete="off" id="StartTime" class="layui-input"
@@ -136,7 +148,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">
@@ -151,19 +163,15 @@
                </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 id="center">
                        </div> -->
                        <div class="layui-tab-content">
                            <div class="layui-tab-item layui-show">
                            <!-- <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 自定义表头 -->
@@ -173,29 +181,6 @@
                                        </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="templetCompleteTime">
                                        {{# function GetBtn(d){
                                                return formatDate(d.CompleteTime);
                                            }
                                        }}
                                        {{ GetBtn(d) }}
                                    </script>
                                    <!-- #endregion -->
                                </div>
                            </div>
                        </div>
                    </div>
@@ -258,7 +243,7 @@
            element = layui.element;
            laydate = layui.laydate;
            var h1 = GetTableTabHeight();
            var h1 = GetTableHeight();
            laydate.render({
                elem: '#StartTime',
@@ -296,7 +281,7 @@
            var $ = layui.$;
            var yemianid = 0;
            refreshTable("", "","","","");
            refreshTable("", "", "", "", "", "", "", "");
            // 表单需要的变量
            var infoOptions;
@@ -361,14 +346,17 @@
                        {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: 'FrozenQty',title: '冻结数量',align: 'center',totalRow: true},
                        {field: 'InspectQty',title: '可抽检数量',align: 'center',totalRow: true},
                    ]];
            var TotalColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
            //#endregion
            //获取总量信息
            function refreshTable(SkuNo,SkuName,OwnerNo,OwnerName,LotNo) {
            function refreshTable(SelectType,SkuNo,SkuName,OwnerNo,OwnerName,LotNo,Status,InspectStatus) {
                //#region 自定义表头
                var colsJson
                var param1={
@@ -401,11 +389,14 @@
                        cols:colsJson
                    };
                    var param = {
                        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)
@@ -430,256 +421,22 @@
                //#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:
            //        [[
            //            {
            //                field: 'PalletNo',
            //                title: '托盘号',
            //                align: 'center',
            //                width: 110,
            //            }, {
            //                field: 'LocatNo',
            //                title: '储位地址',
            //                align: 'center',
            //                width: 100,
            //            }, {
            //                field: 'RoadwayName',
            //                title: '所属巷道',
            //                width: 90,
            //                align: 'center',
            //            }, {
            //                field: 'WareHouseName',
            //                title: '所属仓库',
            //                width: 90,
            //                align: 'center',
            //            }, {
            //                field: 'SkuNo',
            //                title: '物料编码',
            //                width: 100,
            //                align: 'center',
            //            }, {
            //                field: 'SkuName',
            //                title: '物料名称',
            //                align: 'center',
            //            }, {
            //                field: 'Standard',
            //                title: '物料规格',
            //                width: 130,
            //                align: 'center',
            //            }, {
            //                field: 'LotNo',
            //                title: '批次号',
            //                align: 'center',
            //            }, {
            //                field: 'Qty',
            //                title: '库存数量',
            //                width: 110,
            //                align: 'center',
            //            }, {
            //                field: 'LockQty',
            //                title: '锁定数量',
            //                width: 110,
            //                align: 'center',
            //            },
            //            {
            //                field: 'Status',
            //                templet: '#buttonTpl',
            //                title: '库存状态',
            //                width: 90,
            //                align: 'center',
            //            }, {
            //                field: 'InspectStatus',
            //                templet: '#buttonTp2',
            //                title: '质检状态',
            //                width: 90,
            //                align: 'center',
            //            },
            //            {
            //                field: 'CompleteTime',
            //                title: '入库时间',
            //                align: 'center',
            //                width: 150,
            //                templet: function (d) {
            //                    return formatDate(d.CompleteTime);
            //                },
            //            },
            //        ]]
            //};
            //#endregion
            //获取明细信息
            //#region 自定义表头
            var DetailColsArr = [[
                        {field: 'PalletNo',title: '托盘号',align: 'center',width: 110,},
                        {field: 'LocatNo',title: '储位地址',align: 'center',width: 100,},
                        {field: 'WareHouseName',title: '所属仓库',width: 90,align: 'center'},
                        {field: 'RoadwayName',title: '所属巷道',width: 90,align: 'center'},
                        {field: 'AreaName',title: '所属区域',width: 90,align: 'center'},
                        {field: 'SkuNo',title: '物料编码',width: 100,align: 'center'},
                        {field: 'SkuName',title: '物料名称',align: 'center'},
                        {field: 'Standard',title: '物料规格',width: 130,align: 'center'},
                        {field: 'LotNo',title: '批次号',align: 'center'},
                        {field: 'OwnerNo',title: '货主编码',align: 'center'},
                        {field: 'OwnerName',title: '货主名称',align: 'center'},
                        {field: 'SupplierNo',title: '供应商编码',align: 'center'},
                        {field: 'SupplierName',title: '供应商名称',align: 'center'},
                        {field: 'Qty',title: '库存数量',width: 110,align: 'center'},
                        {field: 'LockQty',title: '锁定数量',width: 110,align: 'center'},
                        {field: 'Status',templet: '#buttonTpl',title: '库存状态',width: 90,align: 'center'},
                        {field: 'InspectStatus',templet: '#buttonTp2',title: '质检状态',width: 90,align: 'center'},
                        {field: 'CompleteTime',title: '入库时间',align: 'center',width: 150,templet: '#templetCompleteTime'},
                    ]];
            var DetailColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(DetailColsArr)))//将表头数据进行url编码
            //#endregion
            function refreshTable2(SkuNo,SkuName,OwnerNo,OwnerName,LotNo,LocatNo,PalletNo,Status,InspectStatus,StartTime,EndTime) {
                //#region 自定义表头
                var colsJson2
                var param1={
                    Href:'Statistical/GetInventoryList1'
                };
                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/GetInventoryList1',DetailColsSysArr);
                        },
                        cols:colsJson2
                    };
                    var param = {
                        SkuNo:SkuNo, //物料号
                        SkuName:SkuName, //物料名称
                        OwnerNo:OwnerNo, //货主编码
                        OwnerName:OwnerName, //货主名称
                        LotNo:LotNo, //批次号
                        LocatNo:LocatNo,//储位地址
                        PalletNo:PalletNo, //托盘号
                        Status:Status,//库存状态
                        InspectStatus:InspectStatus, //质检状态
                        StartTime:StartTime,//开始时间
                        EndTime:EndTime, //结束时间
                    };
                    sendData(IP + "/Statistical/GetInventoryList1", 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 quanSkuNo = '';
            let quanLotNo='';
            //监听搜索
            form.on('submit(LAY-app-contlist-search)', function (data) {
                var SelectType = $("#SelectType").val();
                var SkuNo = $("#SkuNo").val();
                var SkuName = $("#SkuName").val();
                var LotNo = $("#LotNo").val();
                var LocatNo = $("#LocatNo").val();
                var PalletNo = $("#PalletNo").val();
                var OwnerNo = $("#OwnerNo").val();
                var OwnerName = $("#OwnerName").val();
                var Status = $("#Status").val();
                var InspectStatus = $("#InspectStatus").val();
                var StartTime = $("#StartTime").val();
                var EndTime = $("#EndTime").val();
                if (yemianid == 0) {
                    console.log("总单");
                    refreshTable(SkuNo, SkuName,OwnerNo,OwnerName,LotNo);
                } else if (yemianid == 1) {
                    //quanSkuNo = quanSkuNo;
                    //quanLotNo='';
                    console.log("明细");
                    console.log(SkuNo,SkuName,OwnerNo,OwnerName,LotNo,LocatNo,PalletNo,Status,InspectStatus,StartTime,EndTime)
                    refreshTable2(quanSkuNo,SkuName,OwnerNo,OwnerName,quanLotNo,LocatNo,PalletNo,Status,InspectStatus,StartTime,EndTime);
                }
                refreshTable(SelectType,SkuNo, SkuName,OwnerNo,OwnerName,LotNo,Status,InspectStatus);
            });
            //触发行双击事件
            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);
                quanSkuNo = obj.data.SkuNo;
                quanLotNo=obj.data.lotNo;
                refreshTable2(obj.data.SkuNo,obj.data.SkuName,obj.data.OwnerNo,obj.data.OwnerName,obj.data.LotNo,obj.data.LocatNo,obj.data.PalletNo,obj.data.Status,obj.data.InspectStatus,obj.data.StartTime,obj.data.EndTime);
                yemianid = 1;
            });
            //监听Tab切换,以改变地址hash值
            element.on('tab(docDemoTabBrief)', function (data) {
                var SkuNo = $("#SkuNo").val();
                var SkuName = $("#SkuName").val();
                var LotNo = $("#LotNo").val();
                var LocatNo = $("#LocatNo").val();
                var PalletNo = $("#PalletNo").val();
                var OwnerNo = $("#OwnerNo").val();
                var OwnerName = $("#OwnerName").val();
                var Status = $("#Status").val();
                var InspectStatus = $("#InspectStatus").val();
                console.log(data.index);
                yemianid = data.index
                if (yemianid == 0) {
                    console.log("总单");
                    refreshTable(SkuNo, SkuName,OwnerNo,OwnerName,LotNo);
                } else if (yemianid == 1) {
                    console.log("明细");
                    refreshTable2(SkuNo,SkuName,OwnerNo,OwnerName,LotNo,LocatNo,PalletNo,Status,InspectStatus,StartTime,EndTime);
                }
            });
            form.on('submit(daochu)', function () {
                layer.confirm('确定导出当前数据吗?', function (index) {
                    if (yemianid == 0) {
                        console.log("总单");
                        var param = {
                            SkuNo: $("#SkuNo").val(),
                            SkuName: $("#SkuName").val(),
@@ -703,44 +460,6 @@
                                }, function () { });
                            }
                        });
                    } else if (yemianid == 1) {
                        console.log("明细");
                        var SkuNo = $("#SkuNo").val();
                        if (SkuNo == '') {
                            SkuNo = quanSkuNo;
                        }
                        var param = {
                            SkuNo: SkuNo,
                            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/GetInventoryList1DaoChu", 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 () { });
                            }
                        });
                    }
                });
@@ -757,18 +476,7 @@
                        resize: false,
                        area: ['970px', '650px']
                    });
                },
                customCols2: function(){
                    layer.open({
                        type: 2,
                        title: '自定义列',
                        content: '../SystemSettings/HeaderSetting.html?Href=Statistical/GetInventoryList1&ColsSysArr='+DetailColsSysArr,
                        maxmin: false,
                        resize: false,
                        area: ['970px', '650px']
                    });
                }
            };
            $('.layui-btn').on('click', function() {
                var type = $(this).data('type');
Wms/Model/ModelDto/DataDto/MateDataStockDto.cs
@@ -38,17 +38,23 @@
        /// <summary>
        /// 数量
        /// </summary>
        public string Qty { get; set; }
        public decimal? Qty { get; set; }
        /// <summary>
        /// 锁定数量
        /// </summary>
        public string LockQty { get; set; }
        public decimal? LockQty { get; set; }
        /// <summary>
        /// 冻结数量
        /// </summary>
        public string FrozenQty { get; set; }
        public decimal? FrozenQty { get; set; }
        /// <summary>
        /// 可抽检数量
        /// </summary>
        public decimal? InspectQty { get; set; }
        /// <summary>
        /// 剩余数量
Wms/WMS.BLL/DataServer/StockServer.cs
@@ -5,9 +5,12 @@
using System.Runtime.Intrinsics.X86;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using Model.ModelDto;
using Model.ModelDto.DataDto;
using Model.ModelDto.SysDto;
using Model.ModelVm.DataVm;
using Model.ModelVm.SysVm;
using SqlSugar;
using WMS.DAL;
using WMS.Entity.Context;
@@ -31,92 +34,255 @@
        /// <summary>
        /// 查询库存总量
        /// </summary>
        /// <param name="selectType">查询类型 0:物料信息 1:批次信息 2:质检信息 3:货主信息</param>
        /// <param name="skuNo">物料编码</param>
        /// <param name="skuName">物料名称</param>
        /// <param name="ownerNo">货主编码</param>
        /// <param name="ownerName">货主名称</param>
        /// <param name="lotNo">批次</param>
        /// <param name="status">库存状态</param>
        /// <param name="inspectStatus">质检状态</param>
        /// <returns></returns>
        public List<MateDataStockDto> GetDataStockList(string skuNo, string skuName, string ownerNo, string ownerName, string lotNo)
        public async Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus)
        {
            string str = "select stock.SkuNo,stock.SkuName,stock.LotNo,stock.LotText,stock.Standard,stock.Qty," +
                "stock.LockQty,stock.FrozenQty,stock.OwnerNo,stock.OwnerName,(mate.Weight * stock.Qty) WeightSum " +
                "from DataStock stock " +
                "left join SysMaterials mate on stock.SkuNo = mate.SkuNo " +
                "Where stock.IsDel = @isdel and mate.IsDel = 0 ";
            //判断物料编码是否为空
            if (!string.IsNullOrEmpty(skuNo))
            List<MateDataStockDto> modUser = new List<MateDataStockDto>();
            if (string.IsNullOrEmpty(selectType))
            {
                str += " and stock.SkuNo like @skuno";
            }
            //判断物料名称是否为空
            if (!string.IsNullOrEmpty(skuName))
                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()
            {
                str += " and stock.SkuName like @skuname";
            }
            //判断货主编码是否为空
            if (!string.IsNullOrEmpty(ownerNo))
            {
                str += " and stock.OwnerNo like @ownerNo";
            }
            //判断货主名称是否为空
            if (!string.IsNullOrEmpty(ownerName))
            {
                str += " and stock.OwnerName like @ownerName";
            }
            //判断货主名称是否为空
            if (!string.IsNullOrEmpty(lotNo))
            {
                str += " and stock.LotNo like @lotNo";
            }
            //排序
            str += " order by stock.SkuNo";
            List<MateDataStockDto> StockList = Db.Ado.SqlQuery<MateDataStockDto>(str, new
            {
                isdel = "0", //是否删除
                skuno = "%" + skuNo + "%", //物料编码
                skuname = "%" + skuName + "%", //物料名称
                ownerNo = "%" + ownerNo + "%", //货主编码
                ownerName = "%" + ownerName + "%", //货主名称
                lotNo = "%" + lotNo + "%", //批次号
            });
                                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();
            //库存总量
            List<MateDataStockDto> StockListDto = new List<MateDataStockDto>();
            foreach (var item in StockList)
                return modUser;
            }
            else
            {
                StockListDto.Add(item);
                ////判断库存总量是否拥有物料
                //if (StockListDto.Count > 0)
                //{
                //    int i = 0;
                //    //foreach循环库存总量
                //    foreach (var dto in StockListDto)
                //    {
                //        //判断物料和批次是否相同
                //        if (dto.SkuNo == item.SkuNo && dto.LotNo == item.LotNo)
                //        {
                //            dto.Qty =  (Convert.ToDecimal(dto.Qty) + Convert.ToDecimal(item.Qty)).ToString();
                //            dto.FrozenQty = (Convert.ToDecimal(dto.FrozenQty) + Convert.ToDecimal(item.FrozenQty)).ToString();
                //            dto.LockQty = (Convert.ToDecimal(dto.LockQty) + Convert.ToDecimal(item.LockQty)).ToString();
                //            dto.ResidueQty= (Convert.ToDecimal(dto.ResidueQty) + Convert.ToDecimal(item.ResidueQty)).ToString();
                //            break;
                //        }
                //        i += 1;
                //        //判断已有相同物料
                //        if (i == StockListDto.Count)
                //        {
                //            StockListDto.Add(item);
                //            break;
                //        }
                //    }
                //}
                //else
                //{
                //    StockListDto.Add(item);
                //    continue;
                //}
                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 StockListDto;
                return modUser;
            }
        }
        /// <summary>
@@ -837,9 +1003,9 @@
                        //判断物料是否相同
                        if (dto.SkuNo == item.SkuNo)
                        {
                            dto.Qty = (Convert.ToInt32(dto.Qty) + Convert.ToInt32(item.Qty)).ToString();
                            dto.FrozenQty = (Convert.ToInt32(dto.FrozenQty) + Convert.ToInt32(item.FrozenQty)).ToString();
                            dto.LockQty = (Convert.ToInt32(dto.LockQty) + Convert.ToInt32(item.LockQty)).ToString();
                            dto.Qty = Convert.ToInt32(dto.Qty) + Convert.ToInt32(item.Qty);
                            dto.FrozenQty = Convert.ToInt32(dto.FrozenQty) + Convert.ToInt32(item.FrozenQty);
                            dto.LockQty = Convert.ToInt32(dto.LockQty) + Convert.ToInt32(item.LockQty);
                            dto.ResidueQty = (Convert.ToInt32(dto.ResidueQty) + Convert.ToInt32(item.ResidueQty)).ToString();
                            break;
                        }
Wms/WMS.Entity/Context/DataContext.cs
@@ -26,7 +26,7 @@
                //Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));
                //获取无参数化SQL 对性能有影响,特别大的SQL参数多的,调试使用
                //Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer, sql, pars));
                Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer, sql, pars));
            };
Wms/WMS.IBLL/IDataServer/IStockServer.cs
@@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using WMS.Entity.DataEntity;
using WMS.Entity.SysEntity;
@@ -14,10 +15,16 @@
        /// <summary>
        /// 查询库存总量
        /// </summary>
        /// <param name="selectType">查询类型</param>
        /// <param name="skuNo">物料编码</param>
        /// <param name="skuName">物料名称</param>
        /// <param name="ownerNo">货主编码</param>
        /// <param name="ownerName">货主名称</param>
        /// <param name="lotNo">批次</param>
        /// <param name="status">库存状态</param>
        /// <param name="inspectStatus">质检状态</param>
        /// <returns></returns>
        List<MateDataStockDto> GetDataStockList(string skuNo, string skuName, string ownerNo, string ownerName, string lotNo);
        Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus);
        /// <summary>
        /// 获取库存明细
Wms/Wms/Controllers/StatisticalController.cs
@@ -6,6 +6,7 @@
using WMS.Entity.DataEntity;
using WMS.IBLL.IDataServer;
using System.Security.Claims;
using System.Threading.Tasks;
namespace Wms.Controllers
{
@@ -40,13 +41,19 @@
        /// <summary>
        /// 获取库存总量
        /// </summary>
        /// <param name="skuNo"></param>
        /// <param name="skuName"></param>
        /// <param name="selectType">查询类型</param>
        /// <param name="skuNo">物料编码</param>
        /// <param name="skuName">物料名称</param>
        /// <param name="ownerNo">货主编码</param>
        /// <param name="ownerName">货主名称</param>
        /// <param name="lotNo">批次</param>
        /// <param name="status">库存状态</param>
        /// <param name="inspectStatus">质检状态</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetInventoryList(string skuNo, string skuName, string ownerNo, string ownerName, string lotNo)
        public async Task<IActionResult> GetInventoryList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus)
        {
            List<MateDataStockDto> StockList = _stock.GetDataStockList(skuNo, skuName, ownerNo, ownerName, lotNo);
            List<MateDataStockDto> StockList = await _stock.GetDataStockList(selectType, skuNo, skuName, ownerNo, ownerName, lotNo, status, inspectStatus);
            return Ok(new
            {
                data = StockList,