heshaofeng
6 天以前 c6fb4ffebbb3dc2cdc303070ad6cb5625ac8bb48
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs
@@ -1,4 +1,6 @@
锘縰sing AutoMapper;
锘縰sing Autofac.Core;
using AutoMapper;
using MailKit.Search;
using SqlSugar;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.StockEnum;
@@ -6,6 +8,7 @@
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Stock;
using WIDESEA_IAllocateService;
using WIDESEA_IBasicService;
using WIDESEA_IOutboundService;
using WIDESEA_IRecordService;
@@ -23,14 +26,17 @@
        private readonly IRepository<Dt_StockInfoDetail> _stockInfoDetailRepository;
        private readonly IOutboundOrderService _outboundOrderService;
        //private readonly IOutboundOrderDetailService _outboundOrderDetailService;
        private readonly IRepository<Dt_AllocateOrder> _allocateRepository;
        private readonly ILocationInfoService _locationInfoService;
        public StockInfoService(IRepository<Dt_StockInfo> BaseDal, IMapper mapper, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRecordService recordService, ILocationInfoService locationInfoService, IOutboundOrderService outboundOrderService) : base(BaseDal)
        public StockInfoService(IRepository<Dt_StockInfo> BaseDal, IMapper mapper, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRecordService recordService, ILocationInfoService locationInfoService, IOutboundOrderService outboundOrderService, IRepository<Dt_AllocateOrder> allocateRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _stockInfoDetailRepository = stockInfoDetailRepository;
            _recordService = recordService;
            _locationInfoService = locationInfoService;
            _outboundOrderService = outboundOrderService;
            _allocateRepository = allocateRepository;
            //_outboundOrderDetailService = outboundOrderDetailService;
        }
@@ -118,7 +124,7 @@
            if (stockTotalQuantity < needQuantity)
            {
                residueQuantity = needQuantity - stockTotalQuantity;
            }
            else
            {
@@ -155,7 +161,7 @@
            residueQuantity = remainingNeed;
            return (outStocks, stockAllocations);
        }
        /// <summary>
        /// 鏍规嵁鏉$爜鑾峰彇搴撳瓨淇℃伅
        /// </summary>
@@ -186,7 +192,7 @@
        public List<Dt_StockInfo> GetStockInfos(string materielCode, string lotNo, string supplyCode, List<string> locationCodes)
        {
            var query = Db.Queryable<Dt_StockInfo>()
             .Where(x => locationCodes.Contains(x.LocationCode)
             .Where(x => locationCodes.Contains(x.LocationCode) && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()
             //  && x.StockStatus == (int)StockStatusEmun.姝e父)
             ).Includes(x => x.Details);
@@ -203,9 +209,9 @@
            if (!string.IsNullOrEmpty(supplyCode))
            {
                query = query.Where(x => x.Details.Any(d => d.SupplyCode == supplyCode));
            }
            }
            return query.OrderBy(x => x.CreateDate).ToList();
            return query.OrderBy(x => x.CreateDate).ToList();
            //ISugarQueryable<Dt_LocationInfo> sugarQueryable = Db.Queryable<Dt_LocationInfo>().Where(x => locationCodes.Contains(x.LocationCode));
            //ISugarQueryable<Dt_StockInfo> sugarQueryable1 = Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode));
            //return sugarQueryable.InnerJoin(sugarQueryable1, (a, b) => a.LocationCode == b.LocationCode).Select((a, b) => b).OrderBy(a => a.CreateDate).Includes(a => a.Details).ToList();
@@ -215,7 +221,7 @@
        {
            List<string> locationCodes = _locationInfoService.GetCanOutLocationCodes();
            return GetStockInfos(materielCode, batchNo,supplyCode, locationCodes);
            return GetStockInfos(materielCode, batchNo, supplyCode, locationCodes);
        }
        public Dt_StockInfo GetPalletStockInfo(int locationType)
@@ -278,7 +284,34 @@
        //        return null;
        //    }
        //}
        //}
        public List<StockSelectViewDTO> GetAllocateSelectViewDTOs(int orderId, string materielCode)
        {
            var dballocate = _allocateRepository.Db.Queryable<Dt_AllocateOrder>().First(x => x.Id == orderId);
            if (dballocate == null)
            {
                throw new Exception($"鏈壘鍒板崟鎹紪鍙蜂负{dballocate.OrderNo}鐨勫崟淇℃伅");
            }
            var outboundOrder = SqlSugarHelper.DbWMS.Queryable<Dt_OutboundOrder>().Where(x => x.OrderNo == dballocate.OrderNo).First();
            if (outboundOrder == null)
            {
                throw new Exception($"鏈壘鍒板崟鎹紪鍙蜂负{dballocate.OrderNo}鐨勫嚭搴撳崟淇℃伅");
            }
            return GetStockSelectViews(outboundOrder.Id, materielCode);
        }
        public List<StockSelectViewDTO> GetSelectViewDTOs(string orderNo, string materielCode)
        {
            var outboundOrder = SqlSugarHelper.DbWMS.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == orderNo).First();
            if (outboundOrder == null)
            {
                throw new Exception($"鏈壘鍒板崟鎹紪鍙蜂负{orderNo}鐨勫嚭搴撳崟淇℃伅");
            }
            return GetStockSelectViews(outboundOrder.Id, materielCode);
        }
        public List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode)
        {
@@ -305,26 +338,33 @@
                // 鏋勫缓鏌ヨ鏉′欢
                var stockQuery = Db.Queryable<Dt_StockInfo>()
                    .Where(x => locationCodes.Contains(x.LocationCode))
                    .Where(x => x.StockStatus == (int)StockStatusEmun.鍏ュ簱瀹屾垚)
                    .Where(x => x.StockStatus == (int)StockStatusEmun.鍏ュ簱瀹屾垚 || x.StockStatus == (int)StockStatusEmun.杩囨湡)
                    .Includes(x => x.Details);
                // 鎵ц鏌ヨ骞舵寜鍏堣繘鍏堝嚭鎺掑簭
                var stocks = stockQuery.ToList()
                    .Where(x => x.Details.Any(d =>
                        d.MaterielCode == materielCode &&
                        d.BatchNo == orderDetail.BatchNo &&
                        d.SupplyCode == orderDetail.SupplyCode &&
                        d.StockQuantity > d.OutboundQuantity
                    ))
                    .OrderBy(x => x.CreateDate)
                    .ToList();
                var Qstocks = stockQuery.Where(x => x.Details.Any(d => d.MaterielCode == materielCode && d.StockQuantity > d.OutboundQuantity));
                if (!string.IsNullOrEmpty(orderDetail.BatchNo))
                {
                    Qstocks = stockQuery.Where(x => x.Details.Any(d => d.BatchNo == orderDetail.BatchNo));
                }
                if (!string.IsNullOrEmpty(orderDetail.SupplyCode))
                {
                    Qstocks = stockQuery.Where(x => x.Details.Any(d => d.SupplyCode == orderDetail.SupplyCode));
                }
                var stocks = Qstocks.OrderBy(x => x.CreateDate).ToList();
                foreach (var stock in stocks)
                {
                    var relevantDetails = stock.Details
                        .Where(d => d.MaterielCode == materielCode &&
                                   d.BatchNo == orderDetail.BatchNo &&
                                   d.SupplyCode == orderDetail.SupplyCode &&
                                   string.IsNullOrEmpty(orderDetail.BatchNo) ? true : d.BatchNo == orderDetail.BatchNo &&
                                   string.IsNullOrEmpty(orderDetail.SupplyCode) ? true : d.SupplyCode == orderDetail.SupplyCode &&
                                   d.StockQuantity > d.OutboundQuantity)
                        .ToList();
@@ -336,7 +376,7 @@
                        result.Add(new StockSelectViewDTO
                        {
                            LocationCode = stock.LocationCode,
                            MaterielCode = materielCode,
                            MaterielCode = firstDetail.MaterielCode,
                            MaterielName = firstDetail.MaterielName,
                            BatchNo = orderDetail.BatchNo,
                            SupplyCode = orderDetail.SupplyCode,