Zhang-Hong-Lin
2025-06-26 232cdf071bfe3bd2b77ba05accba89b67fcc1edc
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_WMSPart/LocationInfoService.cs
@@ -20,12 +20,16 @@
        public IRepository<Dt_LocationInfo> Repository => BaseDal;
        private readonly IRepository<dt_storagemode> _dt_storagemode;
        private readonly IMapper _mapper;
        private readonly IRepository<Dt_StockInfo> _stockInfoRepository;
        private readonly IRepository<dt_batchInfo> _batchInfoRepository;
        //private readonly Idt_ErrormsginfoService _ErrormsginfoService;
        public LocationInfoService(IRepository<Dt_LocationInfo> BaseDal, IRepository<dt_storagemode> storagemode, IMapper mapper) : base(BaseDal)
        public LocationInfoService(IRepository<Dt_LocationInfo> BaseDal, IRepository<dt_storagemode> storagemode, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<dt_batchInfo> batchInfoRepository, IMapper mapper) : base(BaseDal)
        {
            _dt_storagemode = storagemode;
            _mapper = mapper;
            _stockInfoRepository = stockInfoRepository;
            _batchInfoRepository = batchInfoRepository;
        }
        public override PageGridData<Dt_LocationInfo> GetPageData(PageDataOptions options)
@@ -40,6 +44,35 @@
            Dt_LocationInfo locationInfo = BaseDal.QueryFirst(x => x.Id == id);
            locationInfo.LocationStatus = locationStatus;
            locationInfo.EnableStatus = enableStatus;
            //有货生成库存信息
            if (locationStatus == 2)
            {
                //判断是否存在库存信息
                var w = _stockInfoRepository.QueryFirst(x => x.LocationCode == locationInfo.LocationCode);
                if(w == null)
                {
                        Dt_StockInfo stockInfo = new Dt_StockInfo();
                        //查询当前需要出库的批次号,以及出库物料类型
                        var batch = _batchInfoRepository.QueryFirst(v => v.Id == 1);
                        stockInfo.BatchNo = batch.OutBatch;
                        stockInfo.Weight = 4;
                        stockInfo.LocationCode = locationInfo.LocationCode;
                        stockInfo.WarehouseId = 0;
                        stockInfo.StockStatus = 0;
                        stockInfo.Remark = 1;
                        _stockInfoRepository.AddData(stockInfo);
                }
            }
            //无货删除库存信息
            else if(locationStatus == 0)
            {
                //判断是否存在库存信息
                var w = _stockInfoRepository.QueryFirst(x => x.LocationCode == locationInfo.LocationCode);
                if (w != null)
                {
                    _stockInfoRepository.DeleteData(w);
                }
            }
            return UpdateData(locationInfo);
            //return base.UpdateData(saveModel);
        }
@@ -116,9 +149,18 @@
            try
            {
                var mode = _dt_storagemode.QueryFirst(v=>v.Id==1);
                if (mode.storagemode==(int)StorageModeEnum.Out)
                if (InMode == 6)
                {
                    var locations = BaseDal.QueryData(v=>v.EnableStatus== (int)EnableStatusEnum.Normal && v.LocationStatus==(int)LocationStatusEnum.Free).OrderBy(v=>v.Row).ToList();
                    var locations = BaseDal.QueryData(v => v.EnableStatus == (int)EnableStatusEnum.Normal && v.LocationStatus == (int)LocationStatusEnum.Free && v.LocationType==(int)LocationTypeEnum.Cube).OrderBy(v => v.Row).ToList();
                    if (locations.Count <= 0)
                    {
                        throw new Exception($"入库优先货位分配失败,当前无空闲货位");
                    }
                    location = locations[0];
                }
                else if (mode.storagemode==(int)StorageModeEnum.Out)
                {
                    var locations = BaseDal.QueryData(v=>v.EnableStatus== (int)EnableStatusEnum.Normal && v.LocationStatus==(int)LocationStatusEnum.Free && v.LocationType == (int)LocationTypeEnum.Flat).OrderBy(v=>v.Row).ToList();
                    if (locations.Count<=0) 
                    {
                        throw new Exception($"出库优先货位分配失败,当前无空闲货位");
@@ -127,7 +169,7 @@
                }
                else if(mode.storagemode == (int)StorageModeEnum.In)
                {
                    var locations = BaseDal.QueryData(v => v.EnableStatus == (int)EnableStatusEnum.Normal && v.LocationStatus == (int)LocationStatusEnum.Free).OrderByDescending(v => v.Row).ToList();
                    var locations = BaseDal.QueryData(v => v.EnableStatus == (int)EnableStatusEnum.Normal && v.LocationStatus == (int)LocationStatusEnum.Free && v.LocationType == (int)LocationTypeEnum.Flat).OrderByDescending(v => v.Row).ToList();
                    if (locations.Count <= 0)
                    {
                        throw new Exception($"入库优先货位分配失败,当前无空闲货位");
@@ -136,21 +178,31 @@
                }
                if (location!=null)
                {
                    //查找相邻的库位
                    Dt_LocationInfo Towlocation = new Dt_LocationInfo();
                    var Onelocation = BaseDal.QueryFirst(v => v.LocationCode == location.LocationCode);
                    if (Onelocation.Depth == 1)
                    if (InMode == 6)
                    {
                        Towlocation = BaseDal.QueryFirst(v => v.Row == Onelocation.Row && v.Column == Onelocation.Column && v.Depth == 2);
                        location.LocationStatus = (int)LocationStatusEnum.Lock;
                        BaseDal.UpdateData(location);
                    }
                    else
                    {
                        Towlocation = BaseDal.QueryFirst(v => v.Row == Onelocation.Row && v.Column == Onelocation.Column && v.Depth == 1);
                        //查找相邻的库位
                        Dt_LocationInfo Towlocation = new Dt_LocationInfo();
                        var Onelocation = BaseDal.QueryFirst(v => v.LocationCode == location.LocationCode);
                        if (Onelocation.Depth == 1)
                        {
                            Towlocation = BaseDal.QueryFirst(v => v.Row == Onelocation.Row && v.Column == Onelocation.Column && v.Depth == 2);
                        }
                        else
                        {
                            Towlocation = BaseDal.QueryFirst(v => v.Row == Onelocation.Row && v.Column == Onelocation.Column && v.Depth == 1);
                        }
                        location.LocationStatus = (int)LocationStatusEnum.Lock;
                        Towlocation.LocationStatus = (int)LocationStatusEnum.Lock;
                        BaseDal.UpdateData(location);
                        BaseDal.UpdateData(Towlocation);
                    }
                    location.LocationStatus = (int)LocationStatusEnum.Lock;
                    Towlocation.LocationStatus = (int)LocationStatusEnum.Lock;
                    BaseDal.UpdateData(location);
                    BaseDal.UpdateData(Towlocation);
                }
            }
            catch (Exception ex)