heshaofeng
6 天以前 c6fb4ffebbb3dc2cdc303070ad6cb5625ac8bb48
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs
@@ -1,5 +1,6 @@
锘縰sing Autofac.Core;
using AutoMapper;
using MailKit.Search;
using SqlSugar;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.StockEnum;
@@ -7,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;
@@ -24,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;
        }
@@ -119,7 +124,7 @@
            if (stockTotalQuantity < needQuantity)
            {
                residueQuantity = needQuantity - stockTotalQuantity;
            }
            else
            {
@@ -156,7 +161,7 @@
            residueQuantity = remainingNeed;
            return (outStocks, stockAllocations);
        }
        /// <summary>
        /// 鏍规嵁鏉$爜鑾峰彇搴撳瓨淇℃伅
        /// </summary>
@@ -187,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) && x.StockStatus==StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()
             .Where(x => locationCodes.Contains(x.LocationCode) && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()
             //  && x.StockStatus == (int)StockStatusEmun.姝e父)
             ).Includes(x => x.Details);
@@ -204,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();
@@ -216,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)
@@ -279,11 +284,29 @@
        //        return null;
        //    }
        //}
        public List<StockSelectViewDTO> GetSelectViewDTOs(string orderNo,string materielCode)
        //}
        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)
            if (outboundOrder == null)
            {
                throw new Exception($"鏈壘鍒板崟鎹紪鍙蜂负{orderNo}鐨勫嚭搴撳崟淇℃伅");
            }
@@ -315,11 +338,11 @@
                // 鏋勫缓鏌ヨ鏉′欢
                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 Qstocks = stockQuery.Where(x => x.Details.Any(d => d.MaterielCode == materielCode &&d.StockQuantity > d.OutboundQuantity));
                var Qstocks = stockQuery.Where(x => x.Details.Any(d => d.MaterielCode == materielCode && d.StockQuantity > d.OutboundQuantity));
                if (!string.IsNullOrEmpty(orderDetail.BatchNo))
                {
@@ -334,7 +357,7 @@
                }
              var stocks=  Qstocks.OrderBy(x => x.CreateDate) .ToList();
                var stocks = Qstocks.OrderBy(x => x.CreateDate).ToList();
                foreach (var stock in stocks)
                {
@@ -353,7 +376,7 @@
                        result.Add(new StockSelectViewDTO
                        {
                            LocationCode = stock.LocationCode,
                            MaterielCode = firstDetail.  MaterielCode,
                            MaterielCode = firstDetail.MaterielCode,
                            MaterielName = firstDetail.MaterielName,
                            BatchNo = orderDetail.BatchNo,
                            SupplyCode = orderDetail.SupplyCode,