| | |
| | | private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository; |
| | | private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository; |
| | | private readonly IDt_WheelsStockRepository _WheelsStockRepository; |
| | | private readonly IDt_ZdpStockRepository _zdpStockRepository; |
| | | private readonly IMapper _mapper; |
| | | |
| | | public LocationInfoService(ILocationInfoRepository BaseDal, |
| | |
| | | IStockInfoDetailRepository stockInfoDetailRepository, |
| | | IMapper mapper, |
| | | IDt_TaskService taskService, |
| | | IDt_WheelsStockRepository wheelsStockRepository) : base(BaseDal) |
| | | IDt_WheelsStockRepository wheelsStockRepository, |
| | | IDt_ZdpStockRepository zdpStockRepository) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _taskRepository = taskRepository; |
| | |
| | | _mapper = mapper; |
| | | _taskService = taskService; |
| | | _WheelsStockRepository = wheelsStockRepository; |
| | | _zdpStockRepository = zdpStockRepository; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | // è·åæ°çåºä½çä»»å¡ |
| | | var internalTransferTask = await _taskRepository.QueryFirstAsync(x => x.SourceAddress == newLocationID && x.Roadway == outboundTask.Roadway && x.TaskState == (int)TaskOutStatusEnum.OutNew); |
| | | |
| | | |
| | | |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº,è·åæ°åºä½çä»»å¡", $"æ°åºä½ä»»å¡ï¼{internalTransferTask}"); |
| | | // 妿æ°çåºä½æ²¡ææ¾å°å¯¹åºçä»»å¡ |
| | | if (internalTransferTask == null) |
| | |
| | | |
| | | // è¿åå½ååºä½çåºåºä»»å¡ |
| | | return outboundTask; |
| | | } |
| | | catch (Exception) |
| | | { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// æ£æ¥å¹¶çæç§»åºä»»å¡æè¿åå
¥åºä»»å¡ |
| | | /// </summary> |
| | | /// <param name="locationID">ä»»å¡å·</param> |
| | | /// <returns>ä»»å¡å¯¹è±¡</returns> |
| | | public virtual async Task<Dt_Task> InTransferCheckAsync(RequestTaskDto input) |
| | | { |
| | | try |
| | | { |
| | | int taskNum = input.taskNum; |
| | | |
| | | // æ ¹æ®ä»»å¡å·è·åå
¥åºä»»å¡ |
| | | var inboundTask = await _taskRepository.QueryFirstAsync(x => x.TaskNum == taskNum); |
| | | if (inboundTask == null) |
| | | return null; |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "æ ¹æ®ä»»å¡å·è·åä»»å¡", $"ä»»å¡å·ï¼{taskNum}ï¼ä»»å¡æ°æ®ï¼{inboundTask}"); |
| | | |
| | | var location = await BaseDal.QueryFirstAsync(x => x.LocationCode == inboundTask.TargetAddress); |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "è·åæå®åºä½çè´§ä½æ°æ®", $"è´§ä½å·ï¼{inboundTask.TargetAddress}ï¼è´§ä½æ°æ®ï¼{location}"); |
| | | |
| | | // æ£æ¥æ¯å¦éè¦è¿è¡ç§»åº |
| | | if (CheckForInternalTransfer(location)) |
| | | { |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº", $"è´§ä½å·ï¼{inboundTask.TargetAddress}ï¼è´§ä½æ°æ®ï¼{location}"); |
| | | // 计ç®å¯¹åºä½ç½®çç¸å¯¹åºä½ ï¼å¥æ°è¡çä¸ä¸è¡æè
å¶æ°è¡çä¸ä¸è¡ï¼ |
| | | var newLocationID = GetRelativeLocationID(location); |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº,ç»å»ºéè¦ç§»åºè´§ä½å·", $"æ°çåºä½IDï¼{newLocationID}"); |
| | | |
| | | var relocationTask = await _taskRepository.QueryFirstAsync(x => x.TargetAddress == newLocationID && x.Roadway == inboundTask.Roadway && x.TaskType == (int)TaskTypeEnum.Relocation); |
| | | if (relocationTask != null) return relocationTask; |
| | | |
| | | // è·åæ°çåºä½çä»»å¡ |
| | | var internalTransferTask = await _taskRepository.QueryFirstAsync(x => x.TargetAddress == newLocationID && x.Roadway == inboundTask.Roadway && x.TaskState == (int)TaskOutStatusEnum.OutNew); |
| | | |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº,è·åæ°åºä½çä»»å¡", $"æ°åºä½ä»»å¡ï¼{internalTransferTask}"); |
| | | // 妿æ°çåºä½æ²¡ææ¾å°å¯¹åºçä»»å¡ |
| | | if (internalTransferTask == null) |
| | | { |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº,æªè·åå°æ°åºä½ä»»å¡", $""); |
| | | return await InHandleLocation(inboundTask.TargetAddress, newLocationID, inboundTask); |
| | | } |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº,è·åå°æ°åºä½ä»»å¡ç´æ¥è¿å", $"æ°åºä½ä»»å¡ï¼{internalTransferTask}"); |
| | | // ç´æ¥è¿å䏿·±ä½åºåºä»»å¡ |
| | | return internalTransferTask; |
| | | } |
| | | |
| | | // è¿åå½ååºä½çåºåºä»»å¡ |
| | | return inboundTask; |
| | | } |
| | | catch (Exception) |
| | | { |
| | |
| | | |
| | | #endregion å¯ç¨ç¦ç¨è´§ä½ |
| | | |
| | | #region 大å±åºä½ç¶æè·å |
| | | public WebResponseContent LocationStatus() |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | |
| | | // è·åææåºä½æ°æ® |
| | | List<DtLocationInfo> locations = BaseDal.QueryData(); |
| | | |
| | | // æLocationStatusåç»ç»è®¡ |
| | | var statusGroups = locations |
| | | .GroupBy(l => l.LocationStatus) |
| | | .Select(g => new |
| | | { |
| | | Status = g.Key==0?"空货ä½": g.Key == 1 ? "éå®": g.Key == 2 ? "æè´§": "æè´§ç¦ç¨", |
| | | Count = g.Count(), |
| | | }) |
| | | .ToList(); |
| | | |
| | | // å°ç»è®¡ç»ææ¾å
¥ååºå
容 |
| | | content.Data = statusGroups; |
| | | |
| | | return content; |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | #region å
鍿¹æ³ |
| | | |
| | | #region ç§»åºæ¹æ³ |
| | |
| | | // å¤æè¯¥ä½ç½®æ¯å¦æåºå |
| | | var stockInfo = await _WheelsStockRepository.QueryFirstAsync(x => x.Wheels_Location == newLocationID); |
| | | |
| | | // å¤æè¯¥ä½ç½®æ¯å¦æåºå |
| | | var zdpInfo = await _zdpStockRepository.QueryFirstAsync(x => x.Zdp_Location == newLocationID); |
| | | |
| | | |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº,æªè·åå°æ°åºä½ä»»å¡", $"该ä½ç½®æ¯å¦æåºåï¼{stockInfo}"); |
| | | if (stockInfo == null) |
| | | if (stockInfo == null && zdpInfo==null) |
| | | { |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº,æªè·åå°åºåæ°æ®", $"ç´æ¥è¿ååå
åºåºä»»å¡ï¼{outboundTask}"); |
| | | // å¦ææ²¡æåºåï¼ç´æ¥è¿åå½ååºåºä»»å¡ |
| | |
| | | { |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName == null ? "admin" : App.User.UserName, |
| | | CurrentAddress = stockInfo.Wheels_Location, |
| | | CurrentAddress = stockInfo != null ?stockInfo.Wheels_Location: zdpInfo.Zdp_Location, |
| | | Grade = 99, |
| | | MaterialNo = stockInfo.Wheels_Type, |
| | | MaterialNo = stockInfo != null ? stockInfo.Wheels_Type: "2", |
| | | NextAddress = emptyLocation.LocationCode, |
| | | PalletCode = stockInfo.Wheels_Num, |
| | | PalletCode = stockInfo != null ? stockInfo.Wheels_Num : zdpInfo.Zdp_code, |
| | | Remark = "ç§»åº", |
| | | Roadway = "SC1", |
| | | SourceAddress = stockInfo.Wheels_Location, |
| | | SourceAddress = stockInfo != null ? stockInfo.Wheels_Location : zdpInfo.Zdp_Location, |
| | | TaskNum = taskNo, |
| | | TargetAddress = emptyLocation.LocationCode, |
| | | TaskState = (int)TaskStatus.Created, |
| | | TaskType = (int)TaskTypeEnum.Relocation, |
| | | Dispatchertime = DateTime.Now, |
| | | }; |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº,æ°å»ºç§»åºä»»å¡", $"ç§»åºä»»å¡æ°æ®ï¼{newTransferTask}"); |
| | | |
| | | //ä¿®æ¹åºä½ç¶æ |
| | | emptyLocation.LocationStatus = (int)LocationEnum.FreeDisable; |
| | | BaseDal.UpdateData(emptyLocation); |
| | | |
| | | return await _taskRepository.Create(newTransferTask); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¤çå
¥åºæ²¡æä»»å¡çåºä½æ
åµ |
| | | /// </summary> |
| | | /// <param name="originalLocationID">åå§åºä½ID</param> |
| | | /// <param name="newLocationID">æ°çåºä½ID</param> |
| | | /// <param name="outboundTask">åºåºä»»å¡</param> |
| | | /// <returns>çæçç§»åºä»»å¡æåå§åºåºä»»å¡</returns> |
| | | private async Task<Dt_Task> InHandleLocation(string originalLocationID, string newLocationID, Dt_Task inboundTask) |
| | | { |
| | | // å¤æè¯¥ä½ç½®æ¯å¦æåºå |
| | | var stockInfo = await _WheelsStockRepository.QueryFirstAsync(x => x.Wheels_Location == newLocationID); |
| | | |
| | | // å¤æè¯¥ä½ç½®æ¯å¦æåºå |
| | | var zdpInfo = await _zdpStockRepository.QueryFirstAsync(x => x.Zdp_Location == newLocationID); |
| | | |
| | | |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº,æªè·åå°æ°åºä½ä»»å¡", $"该ä½ç½®æ¯å¦æåºåï¼{stockInfo}"); |
| | | if (stockInfo == null && zdpInfo == null) |
| | | { |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº,æªè·åå°åºåæ°æ®", $"ç´æ¥è¿ååå
åºåºä»»å¡ï¼{inboundTask}"); |
| | | // å¦ææ²¡æåºåï¼ç´æ¥è¿åå½ååºåºä»»å¡ |
| | | return inboundTask; |
| | | } |
| | | else |
| | | { |
| | | // 妿æåºåï¼çæç§»åºä»»å¡ |
| | | var emptyLocation = RequestLocation("SC1"); |
| | | if (emptyLocation == null) throw new Exception("ææ ç©ºåº"); |
| | | |
| | | LogFactory.GetLog("æ£æ¥æ¯å¦éè¦ç§»åº").InfoFormat(true, "éè¦ç§»åº,æ¥æ¾è½ç§»åºè´§ä½", $"è´§ä½æ°æ®ï¼{emptyLocation}"); |
| | | var taskNo = await _taskRepository.GetTaskNo(); |
| | | Dt_Task newTransferTask = new Dt_Task() |
| | | { |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName == null ? "admin" : App.User.UserName, |
| | | CurrentAddress = stockInfo != null ? stockInfo.Wheels_Location : zdpInfo.Zdp_Location, |
| | | Grade = 99, |
| | | MaterialNo = stockInfo != null ? stockInfo.Wheels_Type : "2", |
| | | NextAddress = emptyLocation.LocationCode, |
| | | PalletCode = stockInfo != null ? stockInfo.Wheels_Num : zdpInfo.Zdp_code, |
| | | Remark = "ç§»åº", |
| | | Roadway = "SC1", |
| | | SourceAddress = stockInfo != null ? stockInfo.Wheels_Location : zdpInfo.Zdp_Location, |
| | | TaskNum = taskNo, |
| | | TargetAddress = emptyLocation.LocationCode, |
| | | TaskState = (int)TaskStatus.Created, |
| | |
| | | //List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | if (locationInfos == null || locationInfos.Count == 0) |
| | | { |
| | | locationInfos = BaseDal.QueryData(x => x.LocationStatus == (int)LocationEnum.Free && x.RoadwayNo == "SC1" && x.EnalbeStatus == 1 && x.LocationType == 1); |
| | | locationInfos = BaseDal.QueryData(x => x.LocationStatus == 0 && x.RoadwayNo == "SC1" && x.EnalbeStatus == 1 && x.LocationType == 1); |
| | | |
| | | } |
| | | |
| | | var location = GetEmptyLocation(locationInfos); |
| | | var location = GetEmptyLocation(locationInfos); //æ¾åºè´§ä½ |
| | | |
| | | if (location != null) |
| | | { |
| | | if (location.Depth == 2) |
| | | { |
| | | int row = location.Row; |
| | | int relativeLine = row % 2 == 1 ? row + 1 : row - 1; |
| | | //int relativeLine = row % 2 == 1 ? row + 1 : row - 1; |
| | | |
| | | int relativeLine = row == 1 ? row + 1 : row - 1; |
| | | |
| | | var insideLocation = BaseDal.QueryFirst(x => x.Row == relativeLine && x.Layer == location.Layer && x.Column == location.Column); |
| | | |
| | |
| | | { |
| | | locationInfos.Remove(location); |
| | | if (locationInfos.Count == 0) return null; |
| | | RequestLocation(RoadWayNo, locationInfos); |
| | | return RequestLocation(RoadWayNo, locationInfos); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | private DtLocationInfo GetEmptyLocation(List<DtLocationInfo> dtLocationInfos) |
| | | { |
| | | var locationinfo = dtLocationInfos.Where(x => x.LocationStatus == (int)LocationEnum.Free && x.RoadwayNo == "SC1" && x.EnalbeStatus == 1 && x.LocationType == 1).OrderBy(x => x.Layer).ThenByDescending(x => x.Depth).ThenBy(x => x.Row).ThenBy(x => x.Column).FirstOrDefault(); |
| | | var locationinfo = dtLocationInfos.Where(x => x.LocationStatus == 0 && x.RoadwayNo == "SC1" && x.EnalbeStatus == 1 && x.LocationType == 1).OrderBy(x => x.Layer).ThenByDescending(x => x.Depth).ThenBy(x => x.Row).ThenBy(x => x.Column).FirstOrDefault(); |
| | | |
| | | return locationinfo; |
| | | } |