| | |
| | | [Description("AGVåé任塿¥å£")] |
| | | AgvSendTask, |
| | | [Description("AGVå®å
¨ä¿¡å·åå¤")] |
| | | AgvSecureReply |
| | | AgvSecureReply, |
| | | |
| | | FeedBackWMSTaskCompleted, |
| | | |
| | | UploadWMSTaskStatus |
| | | } |
| | | } |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// æ¥æ¶WMSä»»å¡ä¿¡æ¯ |
| | | /// </summary> |
| | |
| | | task.Creater = "WMS"; |
| | | task.TaskState = (int)TaskStatusEnum.New; |
| | | task.CurrentAddress = item.SourceAddress; |
| | | task.NextAddress = item.TargetAddress; |
| | | |
| | | List<Dt_WarehouseDevice> wades = warehouseDevices.Where(x => x.WarehouseId == item.WarehouseId).ToList(); |
| | | |
| | | Dt_Router? router = new Dt_Router(); |
| | | |
| | | if (string.IsNullOrEmpty(item.AGVArea)) |
| | | { |
| | | Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == item.SourceAddress || x.StackerCraneCode == item.RoadWay); |
| | | |
| | | //stationManger.AGVStationCode |
| | | //stationManger.StackerCraneCode |
| | | //stationManger.StationDeviceCode |
| | | if (stationManger == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°ç«å°é
置信æ¯"); |
| | | } |
| | | |
| | | List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && (stationManger.StationDeviceCode == x.StartPosi || stationManger.StackerCraneCode == x.StartPosi)); |
| | | if (routers.FirstOrDefault() == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è·¯ç±é
置信æ¯"); |
| | | } |
| | | router = routers.FirstOrDefault(); |
| | | if (routers.Count == 1) |
| | | { |
| | | task.NextAddress = router?.NextPosi ?? ""; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && item.AGVArea == x.StartPosi); |
| | | if (routers.FirstOrDefault() == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è·¯ç±é
置信æ¯"); |
| | | } |
| | | router = routers.FirstOrDefault(); |
| | | |
| | | task.NextAddress = router?.NextPosi ?? ""; |
| | | } |
| | | |
| | | tasks.Add(task); |
| | |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, undefinedTypeEmptyLocation, palletType); |
| | | if (locationInfo != null) |
| | | { |
| | | UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, 3); |
| | | locationCaches_BC.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | } |
| | |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, definedTypeEmptyLocation, palletType); |
| | | if (locationInfo != null) |
| | | { |
| | | UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, 3); |
| | | locationCaches_BC.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | } |
| | |
| | | /// <summary> |
| | | /// æµè¯æ¶ä»è´§ä½åé
<br/> |
| | | /// æçç±»åï¼ <br/> |
| | | /// 1ï¼æé¿ <br/> |
| | | /// 2ï¼é¿ <br/> |
| | | /// 3ï¼ä¸ç <br/> |
| | | /// 4ï¼ç <br/> |
| | | /// 3å4齿¯3æ·±ï¼ä¸å¯ä»¥æ··æ¾ã <br/> |
| | | /// 1å2齿¯2æ·±ï¼ä¸å¯ä»¥æ··æ¾ã <br/> |
| | | /// 1ï¼ç <br/> |
| | | /// 2ï¼ä¸ç <br/> |
| | | /// 3ï¼é¿ <br/> |
| | | /// 4ï¼ç¹é¿ <br/> |
| | | /// 1å2齿¯3æ·±ï¼ä¸å¯ä»¥æ··æ¾ã <br/> |
| | | /// 3å4齿¯2æ·±ï¼ä¸å¯ä»¥æ··æ¾ã <br/> |
| | | /// ç§»åºæ¶åªè½æ¯åä¾§è´§ä½ã |
| | | /// </summary> |
| | | /// <param name="roadwayNo">å··éå·</param> |
| | | /// <param name="palletType"> |
| | | /// æçç±»å <br/> |
| | | /// 1ï¼æé¿ <br/> |
| | | /// 2ï¼é¿ <br/> |
| | | /// 3ï¼ä¸ç <br/> |
| | | /// 4ï¼ç |
| | | /// 1ï¼ç <br/> |
| | | /// 2ï¼ä¸ç <br/> |
| | | /// 3ï¼é¿ <br/> |
| | | /// 4ï¼ç¹é¿ |
| | | /// </param> |
| | | /// <returns></returns> |
| | | public Dt_LocationInfo? AssignLocation_CSJ(string roadwayNo, PalletTypeEnum palletType, string beRelocationCode = "") |
| | |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_CSJ(locationInfos, undefinedTypeEmptyLocation, palletType); |
| | | if (locationInfo != null) |
| | | { |
| | | UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, 3); |
| | | locationCaches_CSJ.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | } |
| | |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_CSJ(locationInfos, definedTypeEmptyLocation, palletType); |
| | | if (locationInfo != null) |
| | | { |
| | | UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, 3); |
| | | locationCaches_CSJ.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | } |
| | |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_GM(locationInfos, undefinedTypeEmptyLocation, palletType); |
| | | if (locationInfo != null) |
| | | { |
| | | UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, 3); |
| | | locationCaches_GM.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | } |
| | |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_GM(locationInfos, definedTypeEmptyLocation, palletType); |
| | | if (locationInfo != null) |
| | | { |
| | | UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, 3); |
| | | locationCaches_GM.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | } |
| | |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_PP(locationInfos, undefinedTypeEmptyLocation, palletType); |
| | | if (locationInfo != null) |
| | | { |
| | | UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, 3); |
| | | locationCaches_PP.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | } |
| | |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_PP(locationInfos, definedTypeEmptyLocation, palletType); |
| | | if (locationInfo != null) |
| | | { |
| | | UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, 3); |
| | | locationCaches_PP.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | } |
| | |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_ZH(locationInfos, undefinedTypeEmptyLocation, palletType); |
| | | if (locationInfo != null) |
| | | { |
| | | UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, 3); |
| | | locationCaches_ZH.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | } |
| | |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_ZH(locationInfos, definedTypeEmptyLocation, palletType); |
| | | if (locationInfo != null) |
| | | { |
| | | UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, 3); |
| | | locationCaches_ZH.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | } |
| | |
| | | }; |
| | | } |
| | | |
| | | public bool LittleDepthLocationIsEmpty(Dt_LocationInfo locationInfo, PalletTypeEnum palletType) |
| | | { |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == locationInfo.WarehouseId); |
| | | if (warehouse == null) |
| | | { |
| | | throw new Exception($"æªæ¾å°ä»åºä¿¡æ¯"); |
| | | } |
| | | //public bool LittleDepthLocationIsEmpty(Dt_LocationInfo locationInfo, PalletTypeEnum palletType) |
| | | //{ |
| | | // Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == locationInfo.WarehouseId); |
| | | // if (warehouse == null) |
| | | // { |
| | | // throw new Exception($"æªæ¾å°ä»åºä¿¡æ¯"); |
| | | // } |
| | | |
| | | return warehouse.WarehouseName switch |
| | | { |
| | | "æ¿æä»" => false, |
| | | "PPä»" => false, |
| | | "å¹²èä»" => false, |
| | | "æµè¯æ¶ä»" => LittleDepthLocationIsEmpty_CSJ(locationInfo, palletType), |
| | | "é»çä»" => false, |
| | | "油墨ä»" => true, |
| | | "æåä»" => true, |
| | | "è¾
æä»" => true, |
| | | _ => throw new Exception($"æªæ¾å°ä»åºè´§ä½åé
æ¹æ³") |
| | | }; |
| | | } |
| | | // return warehouse.WarehouseName switch |
| | | // { |
| | | // "æ¿æä»" => false, |
| | | // "PPä»" => false, |
| | | // "å¹²èä»" => false, |
| | | // "æµè¯æ¶ä»" => LittleDepthLocationIsEmpty_CSJ(locationInfo, palletType), |
| | | // "é»çä»" => false, |
| | | // "油墨ä»" => true, |
| | | // "æåä»" => true, |
| | | // "è¾
æä»" => true, |
| | | // _ => throw new Exception($"æªæ¾å°ä»åºè´§ä½åé
æ¹æ³") |
| | | // }; |
| | | //} |
| | | |
| | | private readonly static object _locker = new object(); |
| | | private static List<LocationCache> locationCaches = new List<LocationCache>(); |
| | |
| | | { |
| | | for (int i = 0; i < locations.Count; i++) |
| | | { |
| | | locations[i].LocationStatus = locationStatus.ObjToInt(); |
| | | locations[i].LocationType = palletType.ObjToInt(); |
| | | if (locations[i].LocationType != palletType.ObjToInt()) |
| | | { |
| | | locations[i].LocationType = palletType.ObjToInt(); |
| | | } |
| | | |
| | | if (locations[i].LocationCode == location.LocationCode) |
| | | { |
| | | locations[i].LocationStatus = locationStatus.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | if (locationStatus == LocationStatusEnum.Lock) |
| | | { |
| | | if (locations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) |
| | | { |
| | | locations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); |
| | | } |
| | | else if (locations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) |
| | | { |
| | | locations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); |
| | | } |
| | | } |
| | | else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) |
| | | { |
| | | if (locations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) |
| | | { |
| | | locations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); |
| | | } |
| | | else if (locations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) |
| | | { |
| | | locations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); |
| | |
| | | List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation); |
| | | for (int i = 0; i < nearLocations.Count; i++) |
| | | { |
| | | nearLocations[i].LocationType = palletType.ObjToInt(); |
| | | if (palletType == PalletTypeEnum.LargePallet) |
| | | if (nearLocations[i].LocationType != palletType.ObjToInt()) |
| | | { |
| | | nearLocations[i].LocationStatus = locationStatus.ObjToInt(); |
| | | nearLocations[i].LocationType = palletType.ObjToInt(); |
| | | } |
| | | |
| | | if (palletType.ObjToInt() >= PalletTypeEnum.LargePallet.ObjToInt()) |
| | | { |
| | | if (nearLocations[i].LocationCode == nearLocation.LocationCode) |
| | | { |
| | | nearLocations[i].LocationStatus = locationStatus.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | if (locationStatus == LocationStatusEnum.Lock) |
| | | { |
| | | if (nearLocations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) |
| | | { |
| | | nearLocations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); |
| | | } |
| | | else if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) |
| | | { |
| | | nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); |
| | | } |
| | | } |
| | | else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) |
| | | { |
| | | if (nearLocations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) |
| | | { |
| | | nearLocations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); |
| | | } |
| | | else if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) |
| | | { |
| | | nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | locations.AddRange(nearLocations); |
| | | } |
| | |
| | | { |
| | | for (int i = 0; i < locations.Count; i++) |
| | | { |
| | | locations[i].LocationStatus = locationStatus.ObjToInt(); |
| | | locations[i].LocationType = palletType.ObjToInt(); |
| | | if (locations[i].LocationCode == location.LocationCode) |
| | | { |
| | | locations[i].LocationStatus = locationStatus.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | if (locationStatus == LocationStatusEnum.Lock) |
| | | { |
| | | if (locations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) |
| | | { |
| | | locations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); |
| | | } |
| | | else if (locations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) |
| | | { |
| | | locations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); |
| | | } |
| | | } |
| | | else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) |
| | | { |
| | | if (locations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) |
| | | { |
| | | locations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); |
| | | } |
| | | else if (locations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) |
| | | { |
| | | locations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); |
| | | } |
| | | } |
| | | } |
| | | if (locations[i].LocationType != palletType.ObjToInt()) |
| | | { |
| | | locations[i].LocationType = palletType.ObjToInt(); |
| | | } |
| | | } |
| | | } |
| | | Repository.UpdateData(locations); |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// è·åä¸å深度çåç»è´§ä½ä¿¡æ¯ |
| | | /// </summary> |
| | |
| | | { |
| | | public enum PalletTypeEnum |
| | | { |
| | | None = 0, |
| | | |
| | | /// <summary> |
| | | /// å°æç |
| | | /// </summary> |
| | | SmallPallet = 1, |
| | | SmallPallet = 1, |
| | | |
| | | /// <summary> |
| | | /// 䏿ç |
| | | /// </summary> |
| | | MediumPallet = 2, |
| | | MediumPallet = 2, |
| | | |
| | | /// <summary> |
| | | /// 大æç |
| | |
| | | Lock = 1, |
| | | |
| | | /// <summary> |
| | | /// æè´§éå® |
| | | /// </summary> |
| | | [Description("æè´§éå®")] |
| | | InStockLock = 10, |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | [Description("空é²éå®")] |
| | | FreeLock = 20, |
| | | |
| | | /// <summary> |
| | | /// æè´§ |
| | | /// </summary> |
| | | [Description("æè´§")] |
| | |
| | | /// <param name="locationInfo">è´§ä½ä¿¡æ¯</param> |
| | | /// <param name="palletType">æçç±»å</param> |
| | | /// <returns></returns> |
| | | bool LittleDepthLocationIsEmpty(Dt_LocationInfo locationInfo, PalletTypeEnum palletType); |
| | | //bool LittleDepthLocationIsEmpty(Dt_LocationInfo locationInfo, PalletTypeEnum palletType); |
| | | } |
| | | } |
| | |
| | | |
| | | List<Dt_OutStockLockInfo> GetByOrderDetailId(int orderDetailId, OutLockStockStatusEnum outStockStatus); |
| | | List<Dt_OutStockLockInfo> GetStockOutboundOrder(SaveModel saveModel); |
| | | |
| | | /// <summary> |
| | | /// 忣 |
| | | /// </summary> |
| | | /// <param name="palletCode">æçå·</param> |
| | | /// <returns></returns> |
| | | WebResponseContent MaterialPick(string palletCode); |
| | | } |
| | | } |
| | |
| | | IStockQuantityChangeRecordRepository Repository { get; } |
| | | |
| | | void AddStockChangeRecord(Dt_StockInfo stockInfo, List<Dt_StockInfoDetail> stockInfoDetails, float beforeQuantity, float totalQuantity, StockChangeTypeEnum changeType, int? taskNum = null); |
| | | |
| | | void AddStockChangeRecord(Dt_StockInfo stockInfo, List<Dt_StockInfoDetail> updateDetails, List<Dt_StockInfoDetail> deleteDetails, StockChangeTypeEnum changeType, int? taskNum = null); |
| | | } |
| | | } |
| | |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_IOutboundRepository; |
| | | using WIDESEA_IRecordService; |
| | | using WIDESEA_IStockService; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_IOutboundService |
| | | { |
| | | public partial class OutStockLockInfoService : ServiceBase<Dt_OutStockLockInfo, IOutStockLockInfoRepository>, IOutStockLockInfoService |
| | | { |
| | | |
| | | private readonly IStockService _stockService; |
| | | private readonly IRecordService _recordService; |
| | | |
| | | public IOutStockLockInfoRepository Repository => BaseDal; |
| | | |
| | | public OutStockLockInfoService(IOutStockLockInfoRepository BaseDal) : base(BaseDal) |
| | | |
| | | public OutStockLockInfoService(IOutStockLockInfoRepository BaseDal, IStockService stockService, IRecordService recordService) : base(BaseDal) |
| | | { |
| | | _recordService = recordService; |
| | | _stockService = stockService; |
| | | } |
| | | |
| | | public List<Dt_OutStockLockInfo> GetOutStockLockInfos(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, List<Dt_StockInfo> outStocks, int? taskNum = null) |
| | |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_IOutboundRepository; |
| | | using WIDESEA_IRecordService; |
| | | using WIDESEA_IStockService; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_IOutboundService |
| | | { |
| | | public partial class OutStockLockInfoService : ServiceBase<Dt_OutStockLockInfo, IOutStockLockInfoRepository>, IOutStockLockInfoService |
| | | public partial class OutStockLockInfoService |
| | | { |
| | | IStockService _stockService; |
| | | |
| | | /// <summary> |
| | | /// 忣 |
| | | /// </summary> |
| | | /// <param name="palletCode">æçå·</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent MaterialPick(string palletCode) |
| | | { |
| | | try |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥æçåºåä¿¡æ¯"); |
| | | } |
| | | if (stockInfo.StockStatus != StockStatusEmun.åºåºå®æ.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æçè¿æªåºåºå®æ"); |
| | | } |
| | | List<Dt_OutStockLockInfo> outStockLockInfos = Repository.QueryData(x => x.PalletCode == palletCode); |
| | | for (int i = 0; i < outStockLockInfos.Count; i++) |
| | | { |
| | | float assignQuantity = outStockLockInfos[i].AssignQuantity; |
| | | List<Dt_StockInfoDetail> stockInfoDetails = stockInfo.Details.Where(x => x.MaterielCode == outStockLockInfos[i].MaterielCode).ToList(); |
| | | for (int j = 0; j < stockInfoDetails.Count; j++) |
| | | outStockLockInfos[i].Status = OutLockStockStatusEnum.åºåºå®æ.ObjToInt(); |
| | | } |
| | | List<Dt_StockInfoDetail> beforeDetaile = stockInfo.Details.GroupBy(x => x.MaterielCode).Select(x => new Dt_StockInfoDetail { MaterielCode = x.Key, StockQuantity = x.Sum(v => v.StockQuantity) }).ToList(); |
| | | |
| | | List<Dt_StockInfoDetail> updateDetailList = new List<Dt_StockInfoDetail>(); |
| | | List<Dt_StockInfoDetail> deleteDetailList = new List<Dt_StockInfoDetail>(); |
| | | for (int i = 0; i < stockInfo.Details.Count; i++) |
| | | { |
| | | if (stockInfo.Details[i].OutboundQuantity > 0) |
| | | { |
| | | // if(assignQuantity > stockInfoDetails[j]) |
| | | if (stockInfo.Details[i].StockQuantity > stockInfo.Details[i].OutboundQuantity) |
| | | { |
| | | stockInfo.Details[i].StockQuantity -= stockInfo.Details[i].OutboundQuantity; |
| | | updateDetailList.Add(stockInfo.Details[i]); |
| | | } |
| | | else |
| | | { |
| | | deleteDetailList.Add(stockInfo.Details[i]); |
| | | } |
| | | } |
| | | } |
| | | |
| | | List<string> mCodes = stockInfo.Details.GroupBy(x => x.MaterielCode).Select(x => x.Key).ToList(); |
| | | foreach (string code in mCodes) |
| | | { |
| | | _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, updateDetailList, deleteDetailList, StockChangeTypeEnum.Outbound); |
| | | } |
| | | |
| | | updateDetailList.ForEach(x => |
| | | { |
| | | x.OutboundQuantity = 0; |
| | | }); |
| | | |
| | | //_stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(deleteDetailList, OperateTypeEnum.èªå¨å®æ); |
| | | _stockService.StockInfoDetailService.Repository.UpdateData(updateDetailList); |
| | | BaseDal.UpdateData(outStockLockInfos); |
| | | |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | x.ChangeType = changeType.ObjToInt(); |
| | | beforeQuantity += x.ChangeQuantity; |
| | | x.TaskNum = taskNum; |
| | | index++; |
| | | }); |
| | | BaseDal.AddData(stockQuantityChangeRecords); |
| | | } |
| | |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public void AddStockChangeRecord(Dt_StockInfo stockInfo, List<Dt_StockInfoDetail> updateDetails, List<Dt_StockInfoDetail> deleteDetails, StockChangeTypeEnum changeType, int? taskNum = null) |
| | | { |
| | | try |
| | | { |
| | | List<Dt_StockQuantityChangeRecord> stockQuantityChangeRecords = new List<Dt_StockQuantityChangeRecord>(); |
| | | |
| | | int index1 = 0; |
| | | List<Dt_StockQuantityChangeRecord> records1 = _mapper.Map<List<Dt_StockQuantityChangeRecord>>(updateDetails); |
| | | records1.ForEach(x => |
| | | { |
| | | x.PalleCode = stockInfo.PalletCode; |
| | | x.BeforeQuantity = deleteDetails[index1].StockQuantity + deleteDetails[index1].OutboundQuantity; |
| | | x.ChangeQuantity = -deleteDetails[index1].OutboundQuantity; |
| | | x.AfterQuantity = deleteDetails[index1].StockQuantity; |
| | | index1++; |
| | | }); |
| | | stockQuantityChangeRecords.AddRange(records1); |
| | | int index2 = 0; |
| | | List<Dt_StockQuantityChangeRecord> records2 = _mapper.Map<List<Dt_StockQuantityChangeRecord>>(deleteDetails); |
| | | records2.ForEach(x => |
| | | { |
| | | x.PalleCode = stockInfo.PalletCode; |
| | | x.BeforeQuantity = deleteDetails[index2].StockQuantity; |
| | | x.ChangeQuantity = -deleteDetails[index2].StockQuantity; |
| | | x.AfterQuantity = 0; |
| | | index2++; |
| | | }); |
| | | stockQuantityChangeRecords.AddRange(records2); |
| | | |
| | | BaseDal.AddData(stockQuantityChangeRecords); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | /// ä»»å¡ä¿¡æ¯æ¨éè³WCS |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent PushTasksToWCS(List<Dt_Task> tasks, string agvDescription="") |
| | | public WebResponseContent PushTasksToWCS(List<Dt_Task> tasks, string agvDescription = "") |
| | | { |
| | | try |
| | | { |
| | |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.äººå·¥å®æ : OperateTypeEnum.èªå¨å®æ); |
| | | |
| | | _basicService.LocationInfoService.Repository.UpdateData(locationInfo); |
| | | _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId); |
| | | |
| | | _stockRepository.StockInfoRepository.UpdateData(stockInfo); |
| | | _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details); |
| | |
| | | |
| | | int beforeStatus = locationInfo.LocationStatus; |
| | | locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); |
| | | _basicService.LocationInfoService.Repository.UpdateData(locationInfo); |
| | | _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId); |
| | | BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); |
| | | |
| | | _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationChangeType.OutboundCompleted, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Common.CommonEnum; |
| | | using WIDESEA_Common.LocationEnum; |
| | | using WIDESEA_Common.OtherEnum; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Common.TaskEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_DTO.Task; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_TaskInfoService |
| | | { |
| | | public partial class TaskService |
| | | { |
| | | //public WebResponseContent TaskCompleted(int taskNum) |
| | | //{ |
| | | // try |
| | | // { |
| | | // Dt_Task task = Repository.QueryFirst(x => x.TaskNum == taskNum); |
| | | // if (task == null) |
| | | // { |
| | | // return WebResponseContent.Instance.Error($"æªæ¾å°ä»»å¡ä¿¡æ¯"); |
| | | // } |
| | | // if(task.TaskType.get) |
| | | |
| | | // } |
| | | // catch (Exception ex) |
| | | // { |
| | | // return WebResponseContent.Instance.Error(ex.Message); |
| | | // } |
| | | //} |
| | | } |
| | | } |
| | |
| | | { |
| | | public partial class TaskService |
| | | { |
| | | /// <summary> |
| | | /// 夿æ¯å¦éè¦ç§»åº |
| | | /// </summary> |
| | | /// <param name="taskNum"></param> |
| | | /// <param name="locationCode"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent IsRelocation(int taskNum, string locationCode) |
| | | { |
| | | try |
| | |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°ä»»å¡ä¿¡æ¯"); |
| | | } |
| | | |
| | | if (!_basicService.LocationInfoService.LittleDepthLocationIsEmpty(locationInfo, (PalletTypeEnum)task.PalletType)) |
| | | List<Dt_LocationInfo> littleDepthLocations = _basicService.LocationInfoService.GetGroupLocations(locationInfo); |
| | | |
| | | Dt_LocationInfo? needRelocationItem = littleDepthLocations.Where(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && x.LocationStatus != LocationStatusEnum.PalletLock.ObjToInt() && x.LocationStatus != LocationStatusEnum.FreeLock.ObjToInt() && x.Depth < locationInfo.Depth).OrderBy(x => x.Depth).FirstOrDefault(); |
| | | |
| | | if (needRelocationItem == null) |
| | | { |
| | | return WebResponseContent.Instance.OK(data: _mapper.Map<WMSTaskDTO>(task)); |
| | | } |
| | | else |
| | | { |
| | | Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == locationCode); |
| | | Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == needRelocationItem.LocationCode); |
| | | if (stockInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºè´§ä½çåºåä¿¡æ¯"); |
| | | } |
| | | |
| | | Dt_LocationInfo? newLocation = _basicService.LocationInfoService.AssignLocation(task.Roadway, (PalletTypeEnum)task.PalletType, task.WarehouseId); |
| | | Dt_Task taskTemp = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode); |
| | | if (taskTemp != null) |
| | | { |
| | | return WebResponseContent.Instance.OK(data: taskTemp); |
| | | } |
| | | |
| | | Dt_LocationInfo? newLocation = _basicService.LocationInfoService.AssignLocation(needRelocationItem.RoadwayNo, (PalletTypeEnum)task.PalletType, task.WarehouseId); |
| | | if (newLocation != null) |
| | | { |
| | | Dt_Task newTask = new Dt_Task() |
| | |
| | | OrderNo = "", |
| | | PalletCode = stockInfo.PalletCode, |
| | | PalletType = stockInfo.PalletType, |
| | | SourceAddress = locationCode, |
| | | SourceAddress = needRelocationItem.LocationCode, |
| | | TargetAddress = newLocation.LocationCode, |
| | | TaskNum = Repository.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), |
| | | TaskStatus = 0, |
| | |
| | | Repository.AddData(newTask); |
| | | { |
| | | LocationStatusEnum lastStatus = (LocationStatusEnum)newLocation.LocationStatus; |
| | | newLocation.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); |
| | | _basicService.LocationInfoService.UpdateLocationStatus(newLocation, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId); |
| | | _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum); |
| | | _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(newLocation, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum); |
| | | } |
| | | { |
| | | LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; |
| | | locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); |
| | | _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId); |
| | | _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum); |
| | | LocationStatusEnum lastStatus = (LocationStatusEnum)needRelocationItem.LocationStatus; |
| | | _basicService.LocationInfoService.UpdateLocationStatus(needRelocationItem, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId); |
| | | _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(needRelocationItem, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum); |
| | | } |
| | | stockInfo.StockStatus = StockStatusEmun.ç§»åºéå®.ObjToInt(); |
| | | _stockRepository.StockInfoRepository.UpdateData(stockInfo); |
| | | |
| | | _unitOfWorkManage.RollbackTran(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | return WebResponseContent.Instance.OK(data: _mapper.Map<WMSTaskDTO>(newTask)); |
| | | } |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public WebResponseContent RelocationTaskCompleted(Dt_Task task) |
| | | { |
| | | try |
| | | { |
| | | Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); |
| | | if (stockInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºè´§ä½çåºåä¿¡æ¯"); |
| | | } |
| | | |
| | | Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); |
| | | if (locationInfoStart == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºçèµ·ç¹è´§ä½ä¿¡æ¯"); |
| | | } |
| | | |
| | | Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); |
| | | if (locationInfoEnd == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºçç»ç¹è´§ä½ä¿¡æ¯"); |
| | | } |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | stockInfo.LocationCode = locationInfoEnd.LocationCode; |
| | | _stockService.StockInfoService.Repository.UpdateData(stockInfo); |
| | | _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId); |
| | | _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId); |
| | | BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.äººå·¥å®æ : WIDESEA_Core.Enums.OperateTypeEnum.èªå¨å®æ); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using System.Collections.Generic; |
| | | using WIDESEA_Common.CommonEnum; |
| | | using WIDESEA_Common.LocationEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseController; |
| | | using WIDESEA_Core.Enums; |
| | |
| | | { |
| | | return Service.LocationDisableStatus(keys); ; |
| | | } |
| | | |
| | | [HttpPost, Route("UpdateLocationStatus"), AllowAnonymous] |
| | | public WebResponseContent UpdateLocationStatus(string locationCode, PalletTypeEnum palletType, LocationStatusEnum locationStatus, int warehousId) |
| | | { |
| | | try |
| | | { |
| | | Service.UpdateLocationStatus(locationCode, palletType, locationStatus, warehousId); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return WebResponseContent.Instance.Error(e.Message); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | using Microsoft.AspNetCore.Http; |
| | | using Microsoft.AspNetCore.Authorization; |
| | | using Microsoft.AspNetCore.Http; |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseController; |
| | |
| | | { |
| | | return Service.GetStockOutboundOrder(saveModel); |
| | | } |
| | | |
| | | [HttpPost, HttpGet, Route("MaterialPick"), AllowAnonymous] |
| | | public WebResponseContent MaterialPick(string palletCode) |
| | | { |
| | | return Service.MaterialPick(palletCode); |
| | | } |
| | | } |
| | | } |