| | |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IRepository<Dt_StockInfo> _stockInfoRepository; |
| | | public IRepository<Dt_LocationInfo> Repository => BaseDal; |
| | | public readonly IRepository<Dt_LocationType> _locationTypeRepository; |
| | | |
| | | public LocationInfoService(IRepository<Dt_LocationInfo> BaseDal, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfo> stockInfoRepository) : base(BaseDal) |
| | | public LocationInfoService(IRepository<Dt_LocationInfo> BaseDal, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_LocationType> locationTypeRepository) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _stockInfoRepository = stockInfoRepository; |
| | | _locationTypeRepository = locationTypeRepository; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | return LocationDisableStatus(new int[] { key }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¹éä¿®æ¹è´§ä½ç¶æ |
| | | /// </summary> |
| | | /// <param name="locationInfos"></param> |
| | | /// <param name="locationStatus"></param> |
| | | public void UpdateLocationStatus(List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus) |
| | | { |
| | | locationInfos.ForEach(x => |
| | | { |
| | | x.LocationStatus = locationStatus.ObjToInt(); |
| | | }); |
| | | UpdateData(locationInfos); |
| | | } |
| | | |
| | | |
| | | private readonly static object _locker = new object(); |
| | | static List<LocationCache> locationCaches = new List<LocationCache>(); |
| | | private int locationCacheTime = 10; |
| | |
| | | /// </summary> |
| | | /// <param name="roadwayNo"></param> |
| | | /// <returns></returns> |
| | | public Dt_LocationInfo? AssignLocation(int locationType) |
| | | { |
| | | if (locationType <= 0) |
| | | { |
| | | throw new ArgumentOutOfRangeException("ä»åºåºåé误ï¼"); |
| | | } |
| | | lock (_locker) |
| | | { |
| | | |
| | | List<LocationCache> removeItems = locationCaches.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > locationCacheTime).ToList(); |
| | | int count = removeItems.Count; |
| | | for (int i = 0; i < count; i++) |
| | | { |
| | | locationCaches.Remove(removeItems[i]); |
| | | } |
| | | |
| | | List<string> lockLocationCodes = locationCaches.Select(x => x.LocationCode).ToList(); |
| | | |
| | | //Dictionary<string, SqlSugar.OrderByType> orderBy = new Dictionary<string, OrderByType>() |
| | | //{ |
| | | // { nameof(Dt_LocationInfo.RoadwayNo),OrderByType.Asc }, |
| | | // { nameof(Dt_LocationInfo.Layer),OrderByType.Asc }, |
| | | // { nameof(Dt_LocationInfo.Column),OrderByType.Asc }, |
| | | // { nameof(Dt_LocationInfo.Depth),OrderByType.Desc }, |
| | | // { nameof(Dt_LocationInfo.Row),OrderByType.Asc } |
| | | //}; |
| | | |
| | | Dictionary<string, SqlSugar.OrderByType> orderBy = new Dictionary<string, OrderByType>() |
| | | { |
| | | //{ nameof(Dt_LocationInfo.RoadwayNo),OrderByType.Asc }, |
| | | { nameof(Dt_LocationInfo.Layer),OrderByType.Asc }, |
| | | { nameof(Dt_LocationInfo.Row),OrderByType.Asc }, |
| | | { nameof(Dt_LocationInfo.Column),OrderByType.Asc }, |
| | | { nameof(Dt_LocationInfo.Depth),OrderByType.Desc }, |
| | | |
| | | }; |
| | | |
| | | |
| | | var first = BaseDal.QueryFirst(x => x.LocationType == locationType && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode), orderBy);//æ¥è¯¢ç©ºè´§ä½ä¿¡æ¯å¹¶æé¤5åéå
åé
çè´§ä½,æ ¹æ®å±ãåãæ·±åº¦ãè¡æåº |
| | | if (first != null) |
| | | { |
| | | locationCaches.Add(new LocationCache { LocationCode = first?.LocationCode, DateTime = DateTime.Now }); |
| | | Db.Updateable<Dt_LocationInfo>().SetColumns(x => new Dt_LocationInfo |
| | | { |
| | | LocationStatus = (int)LocationStatusEnum.InStockLock, |
| | | }).Where(x => x.Id == first.Id).ExecuteCommand(); |
| | | } |
| | | |
| | | return first; |
| | | } |
| | | } |
| | | public Dt_LocationInfo? AssignLocation() |
| | | { |
| | | lock (_locker) |
| | |
| | | { nameof(Dt_LocationInfo.Row),OrderByType.Asc } |
| | | }; |
| | | |
| | | var first= BaseDal.QueryFirst(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode), orderBy);//æ¥è¯¢ç©ºè´§ä½ä¿¡æ¯å¹¶æé¤5åéå
åé
çè´§ä½,æ ¹æ®å±ãåãæ·±åº¦ãè¡æåº |
| | | |
| | | locationCaches.Add(new LocationCache { LocationCode = first.LocationCode, DateTime = DateTime.Now }); |
| | | var first = BaseDal.QueryFirst(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode), orderBy);//æ¥è¯¢ç©ºè´§ä½ä¿¡æ¯å¹¶æé¤5åéå
åé
çè´§ä½,æ ¹æ®å±ãåãæ·±åº¦ãè¡æåº |
| | | if (first != null) |
| | | { |
| | | locationCaches.Add(new LocationCache { LocationCode = first.LocationCode, DateTime = DateTime.Now }); |
| | | Db.Updateable<Dt_LocationInfo>().SetColumns(x => new Dt_LocationInfo |
| | | { |
| | | LocationStatus = (int)LocationStatusEnum.InStockLock, |
| | | }).Where(x => x.Id == first.Id).ExecuteCommand(); |
| | | } |
| | | |
| | | return first; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// è·åå¯åºåºè´§ä½ç¼å· |
| | | /// </summary> |
| | | /// <param name="warehouseId"></param> |
| | | /// <returns></returns> |
| | | public List<string> GetCanOutLocationCodes() |
| | | { |
| | | return Repository.QueryData(x => x.LocationCode, x => x.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())).Distinct().ToList(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®è´§ä½ç¼å·éåè·åè´§ä½ä¿¡æ¯ |
| | | /// </summary> |
| | | /// <param name="locationCodes"></param> |
| | | /// <returns></returns> |
| | | public List<Dt_LocationInfo> GetLocationInfos(List<string> locationCodes) |
| | | { |
| | | return Repository.QueryData(x => locationCodes.Contains(x.LocationCode)); |
| | | } |
| | | |
| | | public List<LocationTypeDto> GetLocationTypes() |
| | | { |
| | | return _locationTypeRepository.Db.Queryable<Dt_LocationType>().Select(x => |
| | | new LocationTypeDto { LocationType = x.LocationType, LocationTypeDesc = x.LocationTypeDesc }).ToList(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// åå§åè´§ä½ |
| | |
| | | LocationCode = $"HAI-{row.ToString().PadLeft(3, '0')}-{col.ToString().PadLeft(3, '0')}-{layer.ToString().PadLeft(2, '0')} ", |
| | | LocationName = $"{row.ToString()}è¡{col.ToString()}å{layer.ToString()}å± ", |
| | | |
| | | |
| | | |
| | | RoadwayNo = roadwayNo, |
| | | Row = row, |
| | | Column = col, |
| | |
| | | LocationCode = $"HAI-{r1.ToString().PadLeft(3, '0')}-{col.ToString().PadLeft(3, '0')}-{layer.ToString().PadLeft(2, '0')} ", |
| | | LocationName = $"{r1.ToString()}è¡{col.ToString()}å{layer.ToString()}å± ", |
| | | |
| | | |
| | | |
| | | RoadwayNo = roadwayNo, |
| | | Row = r1, |
| | | Column = col, |
| | |
| | | LocationName = $"{r2.ToString()}è¡{col.ToString()}å{layer.ToString()}å± ", |
| | | |
| | | |
| | | |
| | | |
| | | RoadwayNo = roadwayNo, |
| | | Row = r2, |
| | | Column = col, |
| | |
| | | EnableStatus = EnableStatusEnum.Normal.ObjToInt(), |
| | | Layer = k + 1, |
| | | LocationStatus = LocationStatusEnum.Free.ObjToInt(), |
| | | LocationType = LocationTypeEnum.Undefined.ObjToInt(), |
| | | LocationType = LocationTypeEnum.Normal.ObjToInt(), |
| | | RoadwayNo = $"{initializationLocationDTO.Roadway.ToString()}", |
| | | Row = i + 1, |
| | | Depth = depth, |
| | | }; |
| | | |
| | | locationInfo.LocationCode = $"HAI-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(2, '0')}"; |
| | | locationInfo.LocationName = $"HAI{locationInfo.RoadwayNo}å··é{locationInfo.Row.ToString().PadLeft(3, '0')}è¡{locationInfo.Column.ToString().PadLeft(3, '0')}å{locationInfo.Layer.ToString().PadLeft(3, '0')}å±"; |
| | | |
| | | locationInfo.LocationCode = $"HAI-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(2, '0')}"; |
| | | locationInfo.LocationName = $"HAI{locationInfo.RoadwayNo}å··é{locationInfo.Row.ToString().PadLeft(3, '0')}è¡{locationInfo.Column.ToString().PadLeft(3, '0')}å{locationInfo.Layer.ToString().PadLeft(3, '0')}å±"; |
| | | |
| | | |
| | | //locationInfo.LocationCode = $"{locationInfo.RoadwayNo}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}-{locationInfo.Depth.ToString().PadLeft(2, '0')}"; |
| | |
| | | } |
| | | } |
| | | } |
| | | // BaseDal.AddData(locationInfos); |
| | | // BaseDal.AddData(locationInfos); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |