zwc
2025-01-15 2920728d7908da2ee196f3af8b3d1c635696e9a1
Wms/WMS.BLL/DataServer/StockServer.cs
@@ -7,11 +7,14 @@
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;
@@ -40,7 +43,7 @@
                "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))
            {
@@ -83,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;
@@ -128,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))
@@ -183,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;
        }
@@ -266,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))
@@ -288,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";
            //入库
@@ -297,6 +345,9 @@
                skuno = "%" + skuNo + "%", //物料号
                skuname = "%" + skuName + "%", //物料名称
                lotno = "%" + lotNo + "%", //批次号
                //startTime = startTime,
                //endTime = endTime
            });
            List<TotalRecordDto> totalCListData = Db.Ado.SqlQuery<TotalRecordDto>(cstr, new
            {
@@ -304,6 +355,8 @@
                skuno = "%" + skuNo + "%", //物料号
                skuname = "%" + skuName + "%", //物料名称
                lotno = "%" + lotNo + "%", //批次号
                //startTime = startTime,
                //endTime = endTime
            });
            //合并数据
@@ -348,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))
@@ -373,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";
@@ -391,6 +462,8 @@
                skuname = "%" + skuName + "%", //物料名称
                lotno = "%" + lotNo + "%", //批次号
                palletno = "%" + palletNo + "%", //托盘号
                startTime = startTime,
                endTime = endTime
            });
            //出库
            List<TotalRecordDto> totalCList = Db.Ado.SqlQuery<TotalRecordDto>(cstr, new
@@ -400,6 +473,8 @@
                skuname = "%" + skuName + "%", //物料名称
                lotno = "%" + lotNo + "%", //批次号
                palletno = "%" + palletNo + "%", //托盘号
                startTime = startTime,
                endTime = endTime
            });
            //合并
@@ -527,7 +602,7 @@
                {
                    EndTime = (Convert.ToDateTime(EndTime).AddDays(1)).ToString();
                }
                int countjie = 0; //统计结存数量
                decimal countjie = 0; //统计结存数量
                ////判断库存信息是否为空
                //if (stockInfo != null)
                //{
@@ -552,10 +627,10 @@
                    }
                //}
                int yeara = 0; //年入库
                int years = 0; //年出库
                int montha = 0; //月入库
                int months = 0; //月出库
                decimal yeara = 0; //年入库
                decimal years = 0; //年出库
                decimal montha = 0; //月入库
                decimal months = 0; //月出库
                DateTime createTime = DateTime.Now.AddYears(-1000); //时间
                //获取有多少年
@@ -795,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;
@@ -946,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
    }
}