zwc
2025-01-15 2920728d7908da2ee196f3af8b3d1c635696e9a1
Wms/WMS.BLL/DataServer/StockServer.cs
@@ -7,10 +7,15 @@
using System.Text;
using Model.ModelDto;
using Model.ModelDto.DataDto;
using Model.ModelDto.SysDto;
using Model.ModelVm.DataVm;
using SqlSugar;
using WMS.DAL;
using WMS.Entity.BllSoEntity;
using WMS.Entity.Context;
using WMS.Entity.DataEntity;
using WMS.Entity.LogEntity;
using WMS.Entity.SysEntity;
using WMS.IBLL.IDataServer;
namespace WMS.BLL.DataServer
@@ -32,13 +37,13 @@
        /// <param name="skuNo">物料编码</param>
        /// <param name="skuName">物料名称</param>
        /// <returns></returns>
        public List<MateDataStockDto> GetDataStockList(string skuNo, string skuName, string ownerNo, string ownerName)
        public List<MateDataStockDto> GetDataStockList(string skuNo, string skuName, string ownerNo, string ownerName, string lotNo)
        {
            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";
                "Where stock.IsDel = @isdel and mate.IsDel = 0 ";
            //判断物料编码是否为空
            if (!string.IsNullOrEmpty(skuNo))
            {
@@ -59,6 +64,11 @@
            {
                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
@@ -67,7 +77,8 @@
                skuno = "%" + skuNo + "%", //物料编码
                skuname = "%" + skuName + "%", //物料名称
                ownerNo= "%" + ownerNo + "%", //货主编码
                ownerName= "%" + ownerName + "%" //货主名称
                ownerName= "%" + ownerName + "%", //货主名称
                lotNo= "%" + lotNo + "%", //批次号
            });
            //库存总量
@@ -75,36 +86,37 @@
            foreach (var item in StockList)
            {
                //判断库存总量是否拥有物料
                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;
                }
                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;
                //}
            }
            return StockListDto;
@@ -120,16 +132,23 @@
        /// <param name="palletNo">托盘条码</param>
        /// <param name="status">库存状态</param>
        /// <param name="inspectStatus">质检状态</param>
        /// <param name="houseNo">所属仓库</param>
        /// <param name="areaNo">所属区域</param>
        /// <param name="type">物料类型</param>
        /// <param name="ownerNo">货主编号</param>
        /// <param name="ownerName">货主名称</param>
        /// <returns></returns>
        public List<StockDetailDto> GetInventoryList1(string skuNo, string skuName, string lotNo, string locatNo, string palletNo, 
            string status, string inspectStatus, string ownerNo, string ownerName)
            string status, string inspectStatus, string ownerNo, string ownerName, string houseNo, string areaNo, string categoryNo, string type)
        {
            string str = "select detail.*,house.WareHouseNo + '-' + house.WareHouseName as WareHouseName," +
            string str = "select detail.*,sku.Type,house.WareHouseNo + '-' + house.WareHouseName as WareHouseName," +
                "roadway.RoadwayNo + '-' + roadway.RoadwayName as RoadwayName,area.AreaNo + '-' + area.AreaName as AreaName  " +
                "from DataStockDetail detail " +
                "left join SysStorageRoadway roadway on detail.RoadwayNo = roadway.RoadwayNo " +
                "left join SysWareHouse house on detail.WareHouseNo = house.WareHouseNo " +
                "left join SysStorageArea area on detail.AreaNo = area.AreaNo " +
                "left join SysMaterials as sku on detail.skuNo = sku.skuNo " +
                "left join SysMaterialCategory as cat on sku.CategoryNo = cat.CategoryNo " +
                "Where detail.IsDel = @isdel";
            //判断物料编码是否为空
            if (!string.IsNullOrEmpty(skuNo))
@@ -145,7 +164,7 @@
            if (!string.IsNullOrEmpty(lotNo))
            {
                str += " and detail.LotNo like @lotno";
            }
            }
            //判断储位地址是否为空
            if (!string.IsNullOrEmpty(locatNo))
            {
@@ -175,21 +194,42 @@
            if (!string.IsNullOrEmpty(ownerName))
            {
                str += " and detail.OwnerName like @ownerName";
            }
            if (!string.IsNullOrEmpty(houseNo))
            {
                str += " and house.WareHouseNo = @wareHouseNo";
            }
            if (!string.IsNullOrEmpty(areaNo))
            {
                str += " and area.AreaNo = @areaNo";
            }
            if (!string.IsNullOrEmpty(categoryNo))
            {
                str += " and cat.CategoryNo = @categoryNo";
            }
            if (!string.IsNullOrEmpty(type))
            {
                str += " and sku.Type = @type";
            }
            //排序
            str += " order by detail.SkuNo,detail.PalletNo,detail.LotNo";
            List<StockDetailDto> stockDetailsList = Db.Ado.SqlQuery<StockDetailDto>(str, new
            {
                isdel = "0", //是否删除
                skuno = "%" + skuNo + "%", //物料编码
                skuname = "%" + skuName + "%", //物料名称
                lotno = "%" + lotNo + "%", //批次
                locatno = "%" + locatNo + "%", //储位地址
                palletno = "%" + palletNo + "%", //托盘条码
                status = status, //库存状态
                inspectstatus = inspectStatus, //质检状态
                ownerNo = "%" + ownerNo + "%", //货主编码
                ownerName = "%" + ownerName + "%" //货主名称
                isdel = "0",                                //是否删除
                skuno = "%" + skuNo + "%",                  //物料编码
                skuname = "%" + skuName + "%",              //物料名称
                lotno = "%" + lotNo + "%",                  //批次
                locatno = "%" + locatNo + "%",              //储位地址
                palletno = "%" + palletNo + "%",            //托盘条码
                status = status,                            //库存状态
                inspectstatus = inspectStatus,              //质检状态
                ownerNo = "%" + ownerNo + "%",              //货主编码
                ownerName = "%" + ownerName + "%",          //货主名称
                wareHouseNo = houseNo,
                areaNo = areaNo,                         //所属区域
                categoryNo = categoryNo,                //逻辑库区
                type = type
            });
            return stockDetailsList;
        }
@@ -258,9 +298,13 @@
        public List<TotalRecordDto> GetTotalRecord(string skuNo, string skuName, string lotNo, string startTime, string endTime)
        {
            //入库
            string rstr = "select LotNo,SkuNo,SkuName,SUM(Qty) RQty,SUM(FactQty) RFactQty,SUM(CompleteQty) RCompleteQty from BllArrivalNoticeDetail where IsDel = '0' and Id in (select ASNDetailNo from DataStockDetail where IsDel = '0' group by ASNDetailNo) ";
            string rstr = "select LotNo,SkuNo,SkuName,SUM(Qty) RQty,SUM(FactQty) RFactQty,SUM(CompleteQty) RCompleteQty " +
                "from BllArrivalNoticeDetail where IsDel = '0' and Id in (select ASNDetailNo from DataStockDetail " +
                "where IsDel = '0' group by ASNDetailNo) ";
            //出库
            string cstr = "select LotNo,SkuNo,SkuName,SUM(Qty) CQty,SUM(FactQty) CFactQty,SUM(CompleteQty) CompleteQty,SUM(AllotQty) CAllotQty from BllExportNoticeDetail where IsDel = '0' and LotNo in (select LotNo from DataStock where IsDel = '0') ";
            string cstr = "select LotNo,SkuNo,SkuName,SUM(Qty) CQty,SUM(FactQty) CFactQty,SUM(CompleteQty) CompleteQty,SUM(AllotQty) CAllotQty " +
                "from BllExportNoticeDetail " +
                "where IsDel = '0' and LotNo in (select LotNo from DataStock where IsDel = '0') ";
            //判断物料号是否为空
            if (!string.IsNullOrEmpty(skuNo))
@@ -280,6 +324,18 @@
                rstr += " and LotNo like @lotno";
                cstr += " and LotNo like @lotno";
            }
            // liudl 时间不准确 暂时注释。
            //if (!string.IsNullOrWhiteSpace(startTime))
            //{
            //    rstr += " and UpdateTime >= @startTime";
            //    cstr += " and UpdateTime >= @startTime";
            //}
            //if (!string.IsNullOrWhiteSpace(endTime))
            //{
            //    rstr += " and UpdateTime <= @endTime";
            //    cstr += " and UpdateTime <= @endTime";
            //}
            rstr += " group by LotNo,SkuNo,SkuName";
            cstr += " group by LotNo,SkuNo,SkuName";
            //入库
@@ -289,6 +345,9 @@
                skuno = "%" + skuNo + "%", //物料号
                skuname = "%" + skuName + "%", //物料名称
                lotno = "%" + lotNo + "%", //批次号
                //startTime = startTime,
                //endTime = endTime
            });
            List<TotalRecordDto> totalCListData = Db.Ado.SqlQuery<TotalRecordDto>(cstr, new
            {
@@ -296,6 +355,8 @@
                skuno = "%" + skuNo + "%", //物料号
                skuname = "%" + skuName + "%", //物料名称
                lotno = "%" + lotNo + "%", //批次号
                //startTime = startTime,
                //endTime = endTime
            });
            //合并数据
@@ -340,12 +401,21 @@
        /// <param name="startTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <returns></returns>
        public List<TotalRecordDto> GetDetailedRecord(string skuNo, string skuName, string lotNo, string palletNo, string startTime, string endTime)
        public List<TotalRecordDto> GetDetailedRecord(string skuNo, string skuName, string lotNo, string palletNo,
            string startTime, string endTime)
        {
            //入库
            string rstr = "select notice.ASNNo,bind.LotNo,notice.SkuNo,notice.SkuName,bind.PalletNo,bind.Qty RQty,bind.Qty RFactQty,bind.Qty  RCompleteQty,bind.CompleteTime,notice.LotText,notice.SupplierLot,bind.CompleteTime from BllPalletBind bind left join BllArrivalNoticeDetail notice on bind.ASNDetailNo = notice.Id where bind.IsDel = '0' and notice.IsDel = '0' and bind.LotNo in (select LotNo from DataStock where IsDel = '0')   ";
            string rstr = "select notice.ASNNo,bind.LotNo,notice.SkuNo,notice.SkuName,bind.PalletNo,bind.Qty RQty," +
                "bind.Qty RFactQty,bind.Qty  RCompleteQty,bind.CompleteTime,notice.LotText,notice.SupplierLot,bind.CompleteTime " +
                "from BllPalletBind bind left join BllArrivalNoticeDetail notice on bind.ASNDetailNo = notice.Id " +
                "where bind.IsDel = '0' and notice.IsDel = '0' and bind.LotNo in (select LotNo from DataStock where IsDel = '0')   ";
            //出库
            string cstr = "select notice.SONo,allot.LotNo,allot.TaskNo CTaskNo,allot.SkuNo,allot.SkuName,allot.PalletNo,allot.CreateTime CCreateTime,allot.Qty CQty,allot.Qty CAllotQty,Allot.Qty CFactQty,Allot.CompleteQty CompleteQty,allot.LotText,allot.SupplierLot from BllExportAllot allot left join BllExportNoticeDetail notice on allot.SODetailNo = notice.Id where allot.IsDel = '0' and notice.IsDel = '0' and notice.LotNo in (select LotNo from DataStock where IsDel = '0')  ";
            string cstr = "select notice.SONo,allot.LotNo,allot.TaskNo CTaskNo,allot.SkuNo,allot.SkuName,allot.PalletNo," +
                "allot.UpdateTime CCreateTime,allot.Qty CQty,allot.Qty CAllotQty,Allot.Qty CFactQty,Allot.CompleteQty CompleteQty," +
                "allot.LotText,allot.SupplierLot " +
                "from BllExportAllot allot left join BllExportNoticeDetail notice on allot.SODetailNo = notice.Id " +
                "where allot.IsDel = '0' and notice.IsDel = '0' " +
                "and notice.LotNo in (select LotNo from DataStock where IsDel = '0')  ";
            //判断物料号是否为空
            if (!string.IsNullOrEmpty(skuNo))
@@ -365,12 +435,21 @@
                rstr += " and notice.LotNo like @lotno";
                cstr += " and allot.LotNo like @lotno";
            }
            //判断托盘是否为空
            if (!string.IsNullOrEmpty(palletNo))
            {
                rstr += " and bind.PalletNo like @palletno";
                cstr += " and allot.PalletNo like @palletno";
            }
            if (!string.IsNullOrWhiteSpace(startTime))
            {
                rstr += " and bind.CompleteTime >= @startTime";
                cstr += " and allot.UpdateTime >= @startTime";
            }
            if (!string.IsNullOrWhiteSpace(endTime))
            {
                rstr += " and bind.CompleteTime <= @endTime";
                cstr += " and allot.UpdateTime <= @endTime";
            }
            //rstr += " group by bind.LotNo,bind.SkuNo,bind.SkuName";
@@ -383,6 +462,8 @@
                skuname = "%" + skuName + "%", //物料名称
                lotno = "%" + lotNo + "%", //批次号
                palletno = "%" + palletNo + "%", //托盘号
                startTime = startTime,
                endTime = endTime
            });
            //出库
            List<TotalRecordDto> totalCList = Db.Ado.SqlQuery<TotalRecordDto>(cstr, new
@@ -392,6 +473,8 @@
                skuname = "%" + skuName + "%", //物料名称
                lotno = "%" + lotNo + "%", //批次号
                palletno = "%" + palletNo + "%", //托盘号
                startTime = startTime,
                endTime = endTime
            });
            //合并
@@ -450,6 +533,299 @@
        #endregion
        #region 年度报表
        /// <summary>
        /// 获取年报表总表
        /// </summary>
        /// <param name="StartTime"></param>
        /// <param name="EndTime"></param>
        /// <returns></returns>
        public List<SysMaterials> GetAssSoInfo(string StartTime, string EndTime)
        {
            try
            {
                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))
                {
                    str += $" and a.CompleteTime >= '{StartTime}' and b.UpdateTime >= '{StartTime}'";
                }
                //判断结束时间是否为空
                if (!string.IsNullOrWhiteSpace(EndTime))
                {
                    EndTime = (Convert.ToDateTime(EndTime).AddDays(1)).ToString();
                    str += $" and a.CompleteTime < '{EndTime}' and b.UpdateTime < '{EndTime}'";
                }
                str += " group by a.SkuNo,b.SkuNo)";
                var sku = Db.Ado.SqlQuery<SysMaterials>(str);
                return sku;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 获取年报表明细
        /// </summary>
        /// <param name="skuNo"></param>
        /// <param name="StartTime"></param>
        /// <param name="EndTime"></param>
        /// <returns></returns>
        public List<AssSoDateStockInfoDto> GetAssSoInfoDetail(string skuNo, string StartTime, string EndTime)
        {
            try
            {
                //用于合并数据
                List<AssSoDateStockInfoDto> infolist = new List<AssSoDateStockInfoDto>();
                //获取开始时间当天的结存数量
                //DataStockInfo stockInfo = new DataStockInfo();
                //获取物料理论重量
                string weightstr = $"select Weight from SysMaterials where SkuNo = '{skuNo}'";
                var weight = Db.Ado.SqlQuerySingle<decimal>(weightstr);
                //判断开始时间是否为空
                if (!string.IsNullOrWhiteSpace(StartTime))
                {
                    //string str = $"select * from DataStockInfo where IsDel = '0' and CONVERT(date,CreateTime) = '{StartTime}'";
                    //获取当天库存信息
                    //stockInfo = Db.Ado.SqlQuerySingle<DataStockInfo>(str);
                }
                //判断结束时间是否为空
                if (!string.IsNullOrWhiteSpace(EndTime))
                {
                    EndTime = (Convert.ToDateTime(EndTime).AddDays(1)).ToString();
                }
                decimal countjie = 0; //统计结存数量
                ////判断库存信息是否为空
                //if (stockInfo != null)
                //{
                //    countjie = stockInfo.BalanceQty; //统计结存数量
                //}
                //else if (stockInfo == null)
                //{
                    //判断开始时间是否为空
                    if (!string.IsNullOrWhiteSpace(StartTime))
                    {
                        //string StartTimelin = (Convert.ToDateTime(StartTime).AddDays(1)).ToString();
                        //获取出库数量
                        string str = $"select SUM(CompleteQty) as CompleteQtyc from BllExportNoticeDetail where IsDel = '0' and SkuNo = '{skuNo}' and Status != '0'  and CreateTime < '{StartTime}'";
                        string CompleteQtyc = Db.Ado.SqlQuerySingle<string>(str);
                        //获取入库数量
                        str = $"select SUM(CompleteQty) as CompleteQtyr from BllArrivalNoticeDetail where IsDel = '0' and SkuNo = '{skuNo}' and Status != '0' and CreateTime < '{StartTime}'";
                        string CompleteQtyr = Db.Ado.SqlQuerySingle<string>(str);
                        //计算结存数量
                        countjie = int.Parse(CompleteQtyr) - int.Parse(CompleteQtyc);
                    }
                //}
                decimal yeara = 0; //年入库
                decimal years = 0; //年出库
                decimal montha = 0; //月入库
                decimal months = 0; //月出库
                DateTime createTime = DateTime.Now.AddYears(-1000); //时间
                //获取有多少年
                string yearstr = "select DATEPART(YEAR, CreateTime) SkuName from BllArrivalNoticeDetail where IsDel = '0' and Status = '2' ";
                if (!string.IsNullOrWhiteSpace(StartTime))
                {
                    yearstr += $" and CreateTime >= '{StartTime}'";
                }
                if (!string.IsNullOrWhiteSpace(EndTime))
                {
                    yearstr += $" and CreateTime < '{EndTime}'";
                }
                yearstr += "group by DATEPART(YEAR, CreateTime)";
                var yearlist = Db.Ado.SqlQuery<AssSoDateStockInfoDto>(yearstr);
                if (!string.IsNullOrWhiteSpace(StartTime) && !string.IsNullOrWhiteSpace(EndTime))
                {
                    //判断开始时间年与结束时间年是否相等
                    var startyear = StartTime.Split('-');
                    var endyear = EndTime.Split("-");
                }
                foreach (var yearcount in yearlist)
                {
                    //获取当前物料每年入库单据明细
                    string ruyearstr = $"select ASNNo,SkuNo,SkuName,CompleteQty as ASNQty,0 as ASNSOQty,CONVERT(date,CreateTime) as NoticeDateTime,DATEPART(MONTH,CreateTime) as month,CreateTime from BllArrivalNoticeDetail where IsDel = '0' and Status != '0' and SkuNo = '{skuNo}' and DATEPART(YEAR, CreateTime) = '{yearcount.SkuName}'";
                    //获取当前物料每年出库单据明细
                    string chuyearstr = $"select SONo,SkuNo,SkuName,CompleteQty as SOQty,0 as ASNSOQty,CONVERT(date,CreateTime) as NoticeDateTime,DATEPART(MONTH,CreateTime) as month,CreateTime from BllExportNoticeDetail where IsDel = '0' and Status != '0' and SkuNo = '{skuNo}' and DATEPART(YEAR, CreateTime) = '{yearcount.SkuName}'";
                    if (!string.IsNullOrWhiteSpace(StartTime))
                    {
                        ruyearstr += $" and CreateTime >= '{StartTime}'";
                        chuyearstr += $" and CreateTime >= '{StartTime}'";
                    }
                    if (!string.IsNullOrWhiteSpace(EndTime))
                    {
                        //EndTime = (Convert.ToDateTime(EndTime).AddDays(1)).ToString();
                        ruyearstr += $" and CreateTime < '{EndTime}'";
                        chuyearstr += $" and CreateTime < '{EndTime}'";
                    }
                    ruyearstr += " order by CreateTime";
                    chuyearstr += " order by CreateTime";
                    //每年入库
                    List<AssSoDateStockInfoDto> ruinfolist = Db.Ado.SqlQuery<AssSoDateStockInfoDto>(ruyearstr);
                    //每年出库
                    List<AssSoDateStockInfoDto> chuinfolist = Db.Ado.SqlQuery<AssSoDateStockInfoDto>(chuyearstr);
                    //循环12个月
                    for (int i = 1; i <= 12; i++)
                    {
                        //临时入
                        List<AssSoDateStockInfoDto> linshiru = new List<AssSoDateStockInfoDto>();
                        //临时出
                        List<AssSoDateStockInfoDto> linshichu = new List<AssSoDateStockInfoDto>();
                        if (ruinfolist.Count > 0)
                        {
                            linshiru = ruinfolist.Where(a => a.month == i.ToString()).ToList(); //获取当月入库信息
                        }
                        if (chuinfolist.Count > 0)
                        {
                            linshichu = chuinfolist.Where(a => a.month == i.ToString()).ToList(); //获取当月出库信息
                        }
                        if (linshichu.Count > 0)
                        {
                            foreach (var h in linshichu)
                            {
                                linshiru.Add(h);
                            }
                        }
                        var data = linshiru.OrderBy(a => a.CreateTime).ToList();
                        //判断是否存在当月入库信息
                        if (linshiru.Count > 0)
                        {
                            foreach (var item in data)
                            {
                                item.NoticeDateTime = Convert.ToDateTime(item.NoticeDateTime).ToString("yyyy-MM-dd");
                                //总计结存数量
                                if (item.ASNNo != null)
                                {
                                    //入库
                                    countjie += item.ASNQty;
                                    montha += item.ASNQty; //月入库
                                    yeara += item.ASNQty; //年入库
                                }
                                else if (item.SONo != null)
                                {
                                    //出库
                                    countjie -= item.SOQty;
                                    months += item.SOQty; //月出库
                                    years += item.SOQty; //年出库
                                }
                                item.ASNSOQty = countjie; //结存数量
                                item.Weight = weight; //重量
                                infolist.Add(item);
                                if (createTime < item.CreateTime)
                                {
                                    createTime = item.CreateTime; //时间
                                }
                            }
                        }
                        //判断是否存在当月出库信息
                        //if (linshichu.Count > 0)
                        //{
                        //    //出库
                        //    foreach (var item in linshichu)
                        //    {
                        //        item.NoticeDateTime = Convert.ToDateTime(item.NoticeDateTime).ToString("yyyy-MM-dd");
                        //        countjie -= item.SOQty; //总计结存数量
                        //        item.ASNSOQty = countjie; //结存数量
                        //        item.Weight = weight; //重量
                        //        infolist.Add(item);
                        //        months += item.SOQty; //月出库
                        //        years += item.SOQty; //年出库
                        //        if (createTime < item.CreateTime)
                        //        {
                        //            createTime = item.CreateTime; //时间
                        //        }
                        //    }
                        //}
                        //判断是否有月出入库
                        if (linshiru.Count > 0 || linshichu.Count > 0)
                        {
                            //月信息
                            var addmonthinfo = new AssSoDateStockInfoDto()
                            {
                                ASNNo = "", // 入库单据
                                SONo = "", // 出库单据
                                SkuNo = "", // 物料编码
                                SkuName = "", // 物料名称
                                NoticeType = "本月累计", //统计类别
                                ASNQty = montha, // 入库数量
                                SOQty = months, // 出库数量
                                ASNSOQty = countjie, // 结存数量
                                Weight = weight, // 理论重量
                                NoticeDateTime = yearcount.SkuName + "年" + i + "月", // 单据时间
                                CreateTime = createTime, //时间
                            };
                            infolist.Add(addmonthinfo);
                        }
                        montha = 0; //月入库
                        months = 0; //月出库
                    }
                    //判断是否有年出入库
                    if (ruinfolist.Count > 0 || chuinfolist.Count > 0)
                    {
                        //年信息
                        var addyearinfo = new AssSoDateStockInfoDto()
                        {
                            ASNNo = "", // 入库单据
                            SONo = "", // 出库单据
                            SkuNo = "", // 物料编码
                            SkuName = "", // 物料名称
                            NoticeType = "本年累计", //统计类别
                            ASNQty = yeara, // 入库数量
                            SOQty = years, // 出库数量
                            ASNSOQty = countjie, // 结存数量
                            Weight = weight, // 理论重量
                            NoticeDateTime = yearcount.SkuName + "年", // 单据时间
                            CreateTime = createTime, //时间
                        };
                        infolist.Add(addyearinfo);
                    }
                    yeara = 0; //年入库
                    years = 0; //年出库
                }
                infolist = infolist.OrderBy(x => x.CreateTime).ToList();
                return infolist;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion
        #region 导出库存
        /// <summary>
        /// 导出库存总量
@@ -494,10 +870,12 @@
                        //判断物料是否相同
                        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.ResidueQty = (Convert.ToInt32(dto.ResidueQty) + Convert.ToInt32(item.ResidueQty)).ToString();
                            var s = Convert.ToDecimal(dto.Qty) ;
                            var ss = Convert.ToDecimal(item.Qty);
                            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;
@@ -645,5 +1023,143 @@
            return stockDetailsList;
        }
        #endregion
        #region AGV小车任务完成
        /// <summary>
        /// AGV入库完成
        /// </summary>
        /// <param name="TaskCode">任务号</param>
        /// <returns></returns>
        public void ArriveFinish(string TaskCode)
        {
            try
            {
                var palletNo = Db.Queryable<LogTask>().First(m => m.TaskNo == TaskCode && m.OrderType == "0");//获取任务信息
                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息
                var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo);
                //开启事务
                Db.BeginTran();
                //修改起始库位状态
                storageLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
                Db.Updateable(storageLocat).ExecuteCommand();
                //修改任务状态
                palletNo.Status = "2";   //已完成
                Db.Updateable(palletNo).ExecuteCommand();
                //修改库存明细
                stockDetail.Status = "0";//待分配
                stockDetail.LocatNo = "";
                stockDetail.AreaNo = "";
                stockDetail.RoadwayNo = "";
                stockDetail.WareHouseNo = "";
                Db.Updateable(stockDetail).ExecuteCommand();
                //下发WCS申请入库
                Db.CommitTran();
            }
            catch (Exception ex)
            {
                throw new Exception("AGV返回入库完成信号处理错误,错误信息:" + ex);
            }
        }
        /// <summary>
        /// AGV出库完成
        /// </summary>
        /// <param name="TaskCode">任务号</param>
        /// <returns></returns>
        public void SoFinish(string TaskCode)
        {
            try
            {
                var palletNo = Db.Queryable<LogTask>().First(m => m.TaskNo == TaskCode && m.OrderType == "1");//获取任务信息
                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取库位信息
                var storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息
                var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo); //获取库存信息
                //开启事务
                Db.BeginTran();
                //修改目的库位状态
                storageLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
                Db.Updateable(storageLocat).ExecuteCommand();
                //修改任务状态
                palletNo.Status = "2";   //已完成
                Db.Updateable(palletNo).ExecuteCommand();
                //修改库存明细
                stockDetail.Status = "2";// 0:待分配   1:部分分配 2:已分配 3:盘点锁定: 4移库锁定
                stockDetail.LocatNo = storageLocat.LocatNo;
                stockDetail.AreaNo = storageLocat.AreaNo;
                stockDetail.RoadwayNo = storageLocat.RoadwayNo;
                stockDetail.WareHouseNo = storageLocat.WareHouseNo;
                Db.Updateable(stockDetail).ExecuteCommand();
                Db.CommitTran();
            }
            catch (Exception ex )
            {
                throw new Exception("AGV返回出库完成信号处理错误,错误信息:" + ex);
            }
        }
        /// <summary>
        /// AGV移库完成
        /// </summary>
        /// <param name="TaskCode">任务号</param>
        /// <returns></returns>
        public void MoveFinish(string TaskCode)
        {
            try
            {
                var palletNo = Db.Queryable<LogTask>().First(m => m.TaskNo == TaskCode && m.OrderType == "3");//获取任务信息
                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.EndLocat); //获取库位信息
                var storageStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletNo.StartLocat); //获取库位信息
                var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo.PalletNo); //获取库存信息
                //var soAllot = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.PalletNo == palletNo.PalletNo);//获取分配信息
                //开启事务
                Db.BeginTran();
                //修改起始库位状态
                storageLocat.Status = "0";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
                Db.Updateable(storageLocat).ExecuteCommand();
                //修改目的库位状态
                storageLocat.Status = "1";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中
                Db.Updateable(storageLocat).ExecuteCommand();
                //修改任务状态
                palletNo.Status = "2";   //已完成
                Db.Updateable(palletNo).ExecuteCommand();
                //修改库存明细
                stockDetail.Status = "2";// 0:待分配   1:部分分配 2:已分配 3:盘点锁定: 4移库锁定
                stockDetail.LocatNo = storageLocat.LocatNo;
                stockDetail.AreaNo = storageLocat.AreaNo;
                stockDetail.RoadwayNo = storageLocat.RoadwayNo;
                stockDetail.WareHouseNo = storageLocat.WareHouseNo;
                Db.Updateable(stockDetail).ExecuteCommand();
                Db.CommitTran();
            }
            catch (Exception ex)
            {
                throw new Exception("AGV返回移库完成信号处理错误,错误信息:"+ex);
            }
        }
        #endregion
    }
}