| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var locationStart = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.SourceAddress); |
| | | var locationEnd = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress); |
| | | |
| | | task.TaskState = (int)TaskOutStatusEnum.OutFinish; |
| | | var taskHty = task.Adapt<Dt_Task_Hty>(); |
| | | taskHty.FinishTime = DateTime.Now; |
| | |
| | | taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System"; |
| | | stock.ModifyDate = DateTime.Now; |
| | | stock.LocationCode = task.TargetAddress; |
| | | var result1 = UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | var result2 = UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | var result2 = UpdateLocationStatus(task.TargetAddress, LocationEnum.InStock, task.TaskNum.Value, StatusChangeTypeEnum.AutomaticOutbound); |
| | | DtStockInfo_Hty stockInfo_Hty = stock.Adapt<DtStockInfo_Hty>(); |
| | | var orderDetails = _orderOutDetailsRepository.QueryData(x => x.PalletCode == task.PalletCode); |
| | | List<Dt_OrderOutDetails_Hty> orderdetailshtys = new List<Dt_OrderOutDetails_Hty>(); |
| | |
| | | _boxingInfoRepository.UpdateDataNav(boxingInfo); |
| | | await DeleteStockInfoDetailsAsync(stock.StockInfoDetails); |
| | | await AddStockInfoHtyAsync(stockInfo_Hty); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1); |
| | | await _locationRepository.UpdateDataAsync(result1.Item2); |
| | | await _locationRepository.UpdateDataAsync(result2.Item2); |
| | | await _orderOutDetailsRepository.DeleteDataAsync(orderDetails); |
| | | await SqlSugarHelper.DbWMS.Insertable(orderdetailshtys).ExecuteCommandAsync(); |
| | |
| | | taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.äººå·¥å®æ : (int)OperateTypeEnum.èªå¨å®æ; |
| | | taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System"; |
| | | |
| | | stock.ModifyDate = DateTime.Now; |
| | | stock.LocationCode = task.TargetAddress; |
| | | var result = UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticRelocation); |
| | | if (stock != null) |
| | | { |
| | | stock.ModifyDate = DateTime.Now; |
| | | stock.LocationCode = task.TargetAddress; |
| | | } |
| | | var result1 = UpdateLocationStatus(locationStart.LocationCode, LocationEnum.Free, task.TaskNum.Value, StatusChangeTypeEnum.AutomaticRelocation); |
| | | var result2 = UpdateLocationStatus(locationEnd.LocationCode, LocationEnum.InStock, task.TaskNum.Value, StatusChangeTypeEnum.AutomaticRelocation); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1); |
| | | await _locationRepository.UpdateDataAsync(result.Item2); |
| | | _stockInfoRepository.UpdateData(stock); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1); |
| | | await _locationRepository.UpdateDataAsync(result1.Item2); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1); |
| | | await _locationRepository.UpdateDataAsync(result2.Item2); |
| | | if (stock != null) |
| | | _stockInfoRepository.UpdateData(stock); |
| | | await DeleteTaskAsync(task.TaskId); |
| | | await AddTaskHtyAsync(taskHty); |
| | | }); |
| | |
| | | try |
| | | { |
| | | var boxinfo = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode); |
| | | var locationStart = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.SourceAddress); |
| | | var locationEnd = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress); |
| | | |
| | | if (boxinfo == null) |
| | | { |
| | |
| | | taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.äººå·¥å®æ : (int)OperateTypeEnum.èªå¨å®æ; |
| | | taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System"; |
| | | |
| | | var result1 = UpdateLocationStatus(task.SourceAddress, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | var result2 = UpdateLocationStatus(task.TargetAddress, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | var result2 = UpdateLocationStatus(task.TargetAddress, LocationEnum.InStock, task.TaskNum.Value, StatusChangeTypeEnum.AutomaticInbound); |
| | | |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | |
| | | await DeleteTaskAsync(task.TaskId); |
| | | await AddTaskHtyAsync(taskHty); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1); |
| | | await _locationRepository.UpdateDataAsync(result2.Item2); |
| | | await _locationRepository.UpdateDataAsync(result1.Item2); |
| | | }); |
| | | content.OK("å
¥åºå®æ"); |
| | | } |
| | |
| | | return content.Error($"èµ·ç¹åºä½{StartAddress.LocationCode}æ¬è¿è·¯å¾è¢«å ç¨ï¼è¯·äººå·¥ç¡®è®¤åä¸åä»»å¡"); |
| | | } |
| | | Dt_Task taskNew = new Dt_Task(); |
| | | DtLocationInfo Endlocation= new DtLocationInfo(); |
| | | if (taskDto.AreaId != 0) |
| | | var area = _areaInfoRepository.QueryFirst(x => x.AreaID == taskDto.AreaId); |
| | | if (area == null) |
| | | { |
| | | switch (taskDto.AreaId) |
| | | { |
| | | case 1: |
| | | Endlocation = await GetEmptyLocation("SC1"); |
| | | taskNew = InboundStakerArea(taskDto, StartAddress, Endlocation); |
| | | break; |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | case 6: |
| | | Endlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId, StartAddress); |
| | | taskNew = InboundAGVCacheArea(taskDto, StartAddress, Endlocation); |
| | | break; |
| | | default: |
| | | return content.Error("è¯·éæ©æ£ç¡®çåºåä¿¡æ¯"); |
| | | } |
| | | return content.Error("è¯·éæ©å
¥åºåºå"); |
| | | } |
| | | else if (taskDto.TargetAddress != null) |
| | | |
| | | var locationInfo = await _locationRepository.QueryDataAsync(x => x.AreaId == area.AreaID && x.EnalbeStatus == 1 && x.LocationStatus == (int)LocationEnum.Free); |
| | | |
| | | var taskArea = BaseDal.QueryData(x => x.TargetAddress == area.AreaName && x.TaskType == (int)TaskInboundTypeEnum.Inbound); |
| | | |
| | | if (locationInfo.Count - taskArea.Count <= 0) |
| | | { |
| | | Endlocation = _locationRepository.QueryFirst(x => x.LocationCode == taskDto.TargetAddress); |
| | | if (Endlocation != null && Endlocation.LocationStatus == (int)LocationEnum.Free && Endlocation.EnalbeStatus == 1) |
| | | { |
| | | switch (Endlocation.AreaId) |
| | | { |
| | | case 1: |
| | | taskNew = InboundStakerArea(taskDto, StartAddress, Endlocation); |
| | | break; |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | case 6: |
| | | taskNew = InboundAGVCacheArea(taskDto, StartAddress, Endlocation); |
| | | break; |
| | | default: |
| | | return content.Error("è´§ä½åºåæªæ¾å°"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | return content.OK("ç®æ åºä½ä¸å¯ç¨"); |
| | | } |
| | | return content.Error("该åºåæ å¯ç¨åºä½ï¼è¯·éæ©å
¶ä»åºå"); |
| | | } |
| | | else |
| | | |
| | | switch (taskDto.AreaId) |
| | | { |
| | | return content.Error("è¯·éæ©å
¥åºåºåæç»ç¹å°å"); |
| | | case 1: |
| | | taskNew = InboundStakerArea(taskDto, StartAddress, area); |
| | | break; |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | case 6: |
| | | taskNew = InboundAGVCacheArea(taskDto, StartAddress, area); |
| | | break; |
| | | default: |
| | | return content.Error("è¯·éæ©æ£ç¡®çåºåä¿¡æ¯"); |
| | | } |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | var result1 = UpdateLocationStatus(StartAddress, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | var result2 = UpdateLocationStatus(Endlocation, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | |
| | | var result = UpdateLocationStatus(StartAddress.LocationCode, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1); |
| | | await _locationRepository.UpdateDataAsync(result1.Item2); |
| | | await _locationRepository.UpdateDataAsync(result2.Item2); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1); |
| | | await _locationRepository.UpdateDataAsync(result.Item2); |
| | | BaseDal.AddData(taskNew); |
| | | }); |
| | | return content = await SendWCSTask(taskDTO); |
| | | //return content.OK("æå"); |
| | | } |
| | | catch (Exception err) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | public Dt_Task InboundStakerArea(RequestTaskDto taskDto, DtLocationInfo StartAddress,DtLocationInfo EndLocation) |
| | | public Dt_Task InboundStakerArea(RequestTaskDto taskDto, DtLocationInfo StartAddress,Dt_AreaInfo area) |
| | | { |
| | | var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1"); |
| | | if (EndLocation == null) |
| | | { |
| | | throw new Exception("æ æ³è·åè´§ä½ä¿¡æ¯"); |
| | | } |
| | | |
| | | return new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Roadway = "SC1", |
| | | TargetAddress = EndLocation.LocationCode, |
| | | TargetAddress = area.AreaName, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = station.stationChildCode, |
| | |
| | | }; |
| | | } |
| | | |
| | | public Dt_Task InboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | public Dt_Task InboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, Dt_AreaInfo area) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | |
| | | if (location == null) |
| | | { |
| | | throw new Exception("æ æ³è·åè´§ä½ä¿¡æ¯"); |
| | | } |
| | | Dt_Task taskNew = new Dt_Task(); |
| | | if (StartAddress.Floor != location.Floor) |
| | | if (StartAddress.Floor != area.Spare1) |
| | | { |
| | | taskNew = RequestAcrossFloorTask(StartAddress, location, (int)TaskInboundTypeEnum.Inbound, taskDto); |
| | | taskNew = RequestAcrossFloorTask(StartAddress, area, (int)TaskInboundTypeEnum.Inbound, taskDto); |
| | | } |
| | | else |
| | | { |
| | | taskNew = RequestAGVCarryTask(StartAddress, location, (int)TaskInboundTypeEnum.Inbound, taskDto); |
| | | taskNew = RequestAGVCarryTask(StartAddress, GetAGVEmptyCacheLocation(area.AreaID, StartAddress).Result, (int)TaskInboundTypeEnum.Inbound, taskDto); |
| | | } |
| | | return taskNew; |
| | | |
| | |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | public async Task<WebResponseContent> RequestLocationAsync(RequestTaskDto input) |
| | | { |
| | | await _semaphoreUpdate.WaitAsync(); |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.PalletCode == input.PalletCode); |
| | | if (task == null) |
| | | { |
| | | return content.Error("ä»»å¡å¯¹è±¡ä¸ºç©º"); |
| | | } |
| | | |
| | | task.TaskState = (int)TaskInStatusEnum.Line_InFinish; |
| | | var location = await GetEmptyLocation(task.Roadway); |
| | | if (location == null) |
| | | { |
| | | return content.Error("æ æ³è·åè´§ä½ä¿¡æ¯"); |
| | | } |
| | | int beforeStatus = location.LocationStatus; |
| | | |
| | | location.LocationStatus = (int)LocationEnum.Lock; |
| | | task.CurrentAddress = input.Position; |
| | | task.TargetAddress = location.LocationCode; |
| | | task.NextAddress = location.LocationCode; |
| | | task.TaskState = (int)TaskInStatusEnum.Line_InFinish; |
| | | // å¼å§äºå¡ |
| | | var isResult = await UpdateTaskAsync(task, location, beforeStatus); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("æ´æ°ä»»å¡å¤±è´¥"); |
| | | } |
| | | return content.OK(data: task); |
| | | } |
| | | catch (Exception) |
| | | { |
| | | throw; |
| | | } |
| | | finally { _semaphoreUpdate.Release(); } |
| | | } |
| | | |
| | | #endregion |
| | |
| | | }); |
| | | |
| | | var taskDto = CreateListTaskDTO(taskNew); |
| | | var result = GetlcoationState(taskNew, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | var result = GetlcoationState(taskNew, StatusChangeTypeEnum.AutomaticOutbound); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await BaseDal.AddDataAsync(taskNew); |
| | |
| | | stock.StockInfoDetails = details; |
| | | |
| | | var taskDto = CreateListTaskDTO(taskNew); |
| | | var result = GetlcoationState(taskNew, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | var result = GetlcoationState(taskNew, StatusChangeTypeEnum.AutomaticOutbound); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await BaseDal.AddDataAsync(taskNew); |
| | |
| | | stock.StockInfoDetails = details; |
| | | |
| | | var taskDto = CreateListTaskDTO(taskNew); |
| | | var result = GetlcoationState(taskNew, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | var result = GetlcoationState(taskNew, StatusChangeTypeEnum.AutomaticOutbound); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await BaseDal.AddDataAsync(taskNew); |
| | |
| | | } |
| | | } |
| | | |
| | | public (List<DtLocationStatusChangeRecord>,List<DtLocationInfo>) GetlcoationState(Dt_Task task,int StatusChangeTypeEnum) |
| | | public (List<DtLocationStatusChangeRecord>,List<DtLocationInfo>) GetlcoationState(Dt_Task task, StatusChangeTypeEnum StatusChangeTypeEnum) |
| | | { |
| | | List<DtLocationStatusChangeRecord> locationStatusChangeRecords = new List<DtLocationStatusChangeRecord>(); |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | var result1 = UpdateLocationStatus(task.SourceAddress, LocationEnum.InStockDisable, task.TaskNum.Value, StatusChangeTypeEnum); |
| | | var result2 = UpdateLocationStatus(task.TargetAddress, LocationEnum.Lock, task.TaskNum.Value, StatusChangeTypeEnum); |
| | | locationStatusChangeRecords.AddRange(result1.Item1); |
| | | locationStatusChangeRecords.AddRange(result2.Item1); |
| | | locations.AddRange(result1.Item2); |
| | | locations.AddRange(result2.Item2); |
| | | var result = UpdateLocationStatus(task.SourceAddress, LocationEnum.InStockDisable, task.TaskNum.Value, (int)StatusChangeTypeEnum); |
| | | locationStatusChangeRecords.AddRange(result.Item1); |
| | | locations.AddRange(result.Item2); |
| | | |
| | | return (locationStatusChangeRecords,locations); |
| | | } |
| | | |
| | | public (List<DtLocationStatusChangeRecord>, List<DtLocationInfo>) GetlcoationState(List<Dt_Task> tasks, int StatusChangeTypeEnum) |
| | | { |
| | | List<DtLocationStatusChangeRecord> locationStatusChangeRecords = new List<DtLocationStatusChangeRecord>(); |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | foreach (var item in tasks) |
| | | { |
| | | var result1 = UpdateLocationStatus(item.SourceAddress, LocationEnum.InStockDisable, item.TaskNum.Value, StatusChangeTypeEnum); |
| | | var result2 = UpdateLocationStatus(item.TargetAddress, LocationEnum.Lock, item.TaskNum.Value, StatusChangeTypeEnum); |
| | | locationStatusChangeRecords.AddRange(result1.Item1); |
| | | locationStatusChangeRecords.AddRange(result2.Item1); |
| | | locations.AddRange(result1.Item2); |
| | | locations.AddRange(result2.Item2); |
| | | } |
| | | return (locationStatusChangeRecords, locations); |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 请æ±åºåºä»»å¡ |
| | |
| | | { |
| | | throw new Exception($"èµ·ç¹åºä½{StartAddress.LocationCode}åºåºè·¯å¾è¢«å ç¨ï¼è¯·ç¨åéè¯"); |
| | | } |
| | | DtLocationInfo location = null; |
| | | if (taskDto.AreaId != 0) |
| | | { |
| | | if (taskDto.AreaId == 1) |
| | | { |
| | | location = await GetEmptyLocation("SC1"); |
| | | } |
| | | else |
| | | { |
| | | location = await GetAGVEmptyCacheLocation(taskDto.AreaId, StartAddress); |
| | | } |
| | | |
| | | } |
| | | else if (taskDto.TargetAddress != null) |
| | | { |
| | | location = _locationRepository.QueryFirst(x => x.LocationCode == taskDto.TargetAddress); |
| | | var area = _areaInfoRepository.QueryFirst(x => x.AreaID == 2); |
| | | |
| | | if (location != null && location.LocationStatus != (int)LocationEnum.Free && location.EnalbeStatus == 1) |
| | | { |
| | | throw new Exception("ç®æ åºä½ä¸å¯ç¨"); |
| | | } |
| | | } |
| | | else |
| | | var locationInfo = await _locationRepository.QueryDataAsync(x => x.AreaId == area.AreaID && x.EnalbeStatus == 1 && x.LocationStatus == (int)LocationEnum.Free); |
| | | |
| | | var taskArea = BaseDal.QueryData(x => x.TargetAddress == area.AreaName && x.TaskType == (int)TaskInboundTypeEnum.Inbound); |
| | | |
| | | if (locationInfo.Count - taskArea.Count <= 0) |
| | | { |
| | | throw new Exception("è¯·éæ©å
¥åºåºåæç»ç¹å°å"); |
| | | throw new Exception($"åºåºç¼ååºæ å¯ç¨åºä½ï¼è¯·æ¸
çåºä½ååè¯"); |
| | | } |
| | | |
| | | switch (StartAddress.AreaId) |
| | | { |
| | | case 1: |
| | | return OutboundStakerArea(taskDto, StartAddress, location); |
| | | return OutboundStakerArea(taskDto, StartAddress, area); |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | case 6: |
| | | return OutboundAGVCacheArea(taskDto, StartAddress, location); |
| | | return OutboundAGVCacheArea(taskDto, StartAddress, area); |
| | | default: |
| | | throw new Exception("è¯·éæ©æ£ç¡®çåºåä¿¡æ¯"); |
| | | } |
| | | } |
| | | |
| | | |
| | | public Dt_Task OutboundStakerArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | public Dt_Task OutboundStakerArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, Dt_AreaInfo area) |
| | | { |
| | | var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1"); |
| | | |
| | | if (location == null) |
| | | { |
| | | throw new Exception("ç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | |
| | | if (location.AreaId == 5 || location.AreaId == 6) |
| | | { |
| | | throw new Exception("å½ååºåä¸å¯åºåºï¼è¯·è系管çå"); |
| | | } |
| | | return new Dt_Task |
| | | { |
| | | Grade = Convert.ToInt32(StartAddress.Remark), |
| | | Roadway = "SC1", |
| | | TargetAddress = location.LocationCode, |
| | | TargetAddress = area.AreaName, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = taskDto.MaterielCode, |
| | | NextAddress = station.stationChildCode, |
| | |
| | | }; |
| | | } |
| | | |
| | | public Dt_Task OutboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | public Dt_Task OutboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, Dt_AreaInfo area) |
| | | { |
| | | if (location == null) |
| | | { |
| | | throw new Exception("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | Dt_Task taskNew = new Dt_Task(); |
| | | if (StartAddress.Floor != location.Floor) |
| | | if (StartAddress.Floor != area.Spare1) |
| | | { |
| | | taskNew = RequestAcrossFloorTask(StartAddress, location, taskDto.TaskType, taskDto); |
| | | taskNew = RequestAcrossFloorTask(StartAddress, area, taskDto.TaskType, taskDto); |
| | | } |
| | | else |
| | | { |
| | | taskNew = RequestAGVCarryTask(StartAddress, location, taskDto.TaskType, taskDto); |
| | | taskNew = RequestAGVCarryTask(StartAddress, GetAGVEmptyCacheLocation(taskDto.AreaId, StartAddress).Result, taskDto.TaskType, taskDto); |
| | | } |
| | | return taskNew; |
| | | |
| | |
| | | { |
| | | stationManager = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == "1F"); |
| | | } |
| | | content = await RequestLocation(taskDto.PalletCode); |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Roadway = "AGV", |
| | | TargetAddress = task.TargetAddress, |
| | | TargetAddress = content.Data.ToString(), |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = task.TargetAddress, |
| | | NextAddress = content.Data.ToString(), |
| | | OrderNo = null, |
| | | PalletCode = task.PalletCode, |
| | | SourceAddress = task.SourceAddress, |
| | |
| | | taskHty.FinishTime = DateTime.Now; |
| | | taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.äººå·¥å®æ : (int)OperateTypeEnum.èªå¨å®æ; |
| | | taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System"; |
| | | |
| | | await UpdateStartLocationInfo(taskNew); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | |
| | | await DeleteTaskAsync(task.TaskId); |
| | | await AddTaskHtyAsync(taskHty); |
| | | BaseDal.AddData(taskNew); |
| | |
| | | #endregion |
| | | |
| | | #region 请æ±è·¨æ¥¼å±ä»»å¡ |
| | | public Dt_Task RequestAcrossFloorTask(DtLocationInfo StartAddress, DtLocationInfo EndAddress, int TaskType, RequestTaskDto taskDto) |
| | | public Dt_Task RequestAcrossFloorTask(DtLocationInfo StartAddress, Dt_AreaInfo area, int TaskType, RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | |
| | |
| | | { |
| | | Grade = StartAddress.Column, |
| | | Roadway = "AGV", |
| | | TargetAddress = EndAddress.LocationCode, |
| | | TargetAddress = area.AreaName, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = taskDto.MaterielCode, |
| | | NextAddress = next.stationChildCode, |
| | |
| | | { |
| | | return content.Error($"䏿·±ä½å¼å¸¸é宿ä¸å¯åºåº"); |
| | | } |
| | | else if (locationLateral != null && locationLateral.LocationStatus == (int)LocationEnum.InStockDisable && locationLateral.EnalbeStatus == 1) |
| | | else if (locationLateral != null && (locationLateral.LocationStatus == (int)LocationEnum.InStockDisable|| locationLateral.LocationStatus == (int)LocationEnum.InStock) && locationLateral.EnalbeStatus == 1) |
| | | { |
| | | var taskLateral = BaseDal.QueryFirst(x => x.SourceAddress == locationLateral.LocationCode); |
| | | if (taskLateral != null) |
| | | { |
| | | return content.OK(data: _mapper.Map<WMSTaskDTO>(taskLateral)); |
| | | } |
| | | |
| | | var TargetAddress = await GetEmptyLocation("SC1"); |
| | | |
| | | if (TargetAddress == null) |
| | | { |
| | | return content.Error($"æªæ¾å°å¯åé
è´§ä½,请æ¥çæ¯å¦è¿æç©ºé²å¯ä½¿ç¨è´§ä½"); |
| | | } |
| | | |
| | | //todoæ¥è¯¢å
ä¾§åºåä¿¡æ¯ |
| | | var stock = await _stockInfoRepository.QueryFirstAsync(x => x.LocationCode == locationLateral.LocationCode); |
| | | |
| | | if (stock == null) |
| | | { |
| | | return content.Error($"æªæ¾å°æµ
ä½{locationLateral.LocationCode}åºåä¿¡æ¯"); |
| | | } |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | |
| | | MaterialNo = "", |
| | | NextAddress = TargetAddress.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = stock.PalletCode, |
| | | PalletCode = stock == null ? "M" + DateTime.Now.ToString("MMddHHmmss") + "-" + new Random().Next(100, 1000) : stock.PalletCode, |
| | | SourceAddress = locationLateral.LocationCode, |
| | | CurrentAddress = locationLateral.LocationCode, |
| | | TaskState = (int)TaskRelocationStatusEnum.RelocationNew, |
| | |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | var isResult = await AddTaskAsync(taskNew, locationLateral, TargetAddress); |
| | | UpdateLocationStatus(TargetAddress, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticRelocation); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | |
| | | |
| | | if (location == null) |
| | | { |
| | | return content.Error("æªæ¾å°è´§ä½æè
该åºä½ä¸æ¯äºæ·±è´§ä½"); |
| | | return content.Error($"æªæ¾å°è´§ä½ä¿¡æ¯{taskDto.Position}"); |
| | | } |
| | | List<DtLocationInfo> locationInfos = new List<DtLocationInfo>(); |
| | | switch (location.AreaId) |
| | |
| | | } |
| | | |
| | | List<WMSTaskDTO> taskDTO = new List<WMSTaskDTO>(); |
| | | |
| | | List<Dt_Task> taskNew = new List<Dt_Task>(); |
| | | foreach (var item in locationInfos) |
| | | { |
| | | if ((item.LocationStatus == 0 || item.LocationStatus == (int)LocationEnum.FreeDisable) && item.EnalbeStatus == 1) |
| | | if(item.LocationStatus == (int)LocationEnum.Lock) |
| | | { |
| | | continue; |
| | | return content.Error($"{item.LocationCode}è·¯å¾è¢«å ç¨ï¼è¯·ç¨ååè¯"); |
| | | } |
| | | else |
| | | if ((item.LocationStatus == (int)LocationEnum.InStockDisable || item.LocationStatus == (int)LocationEnum.InStock) && item.EnalbeStatus == 1) |
| | | { |
| | | DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(item.AreaId, item); |
| | | |
| | |
| | | { |
| | | return content.Error("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | //todoæ¥è¯¢ç§»åºåºåä¿¡æ¯ |
| | | var stock = _stockInfoRepository.QueryFirst(x => x.LocationCode == item.LocationCode); |
| | | if (stock == null) |
| | | { |
| | | return content.Error($"æªæ¾å°æµ
ä½{item.LocationCode}åºåä¿¡æ¯"); |
| | | } |
| | | var Relocationtask = BaseDal.QueryFirst(x => x.PalletCode == stock.PalletCode && x.TaskType == (int)TaskRelocationTypeEnum.Relocation); |
| | | Dt_Task taskNew = new Dt_Task(); |
| | | |
| | | var Relocationtask = BaseDal.QueryFirst(x => x.SourceAddress == item.LocationCode); |
| | | |
| | | if (Relocationtask != null) |
| | | { |
| | | taskDTO.Add(CreateTaskDTO(Relocationtask)); |
| | | //return content.OK(data:taskDTO); |
| | | continue; |
| | | } |
| | | else |
| | | { |
| | | taskNew = new Dt_Task |
| | | taskNew.Add(new Dt_Task |
| | | { |
| | | Grade = item.Column, |
| | | Roadway = "AGV", |
| | |
| | | MaterialNo = "", |
| | | NextAddress = Targetlocation.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = stock.PalletCode, |
| | | PalletCode = stock == null ? "M" + DateTime.Now.ToString("MMddHHmmss") + "-" + new Random().Next(100, 1000) : stock.PalletCode, |
| | | SourceAddress = item.LocationCode, |
| | | CurrentAddress = item.LocationCode, |
| | | TaskState = (int)TaskAGVCarryStatusEnum.CarryNew, |
| | |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = item.Floor, |
| | | Remark = item.AreaId.ToString(), |
| | | }; |
| | | }); |
| | | } |
| | | taskDTO.Add(CreateTaskDTO(taskNew)); |
| | | |
| | | var isResult = await AddTaskAsync(taskNew, item, Targetlocation); |
| | | UpdateLocationStatus(Targetlocation, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticRelocation); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("æ°å¢ä»»å¡å¤±è´¥"); |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | taskDTO = CreateTaskDTO(taskNew); |
| | | |
| | | var result = AddTaskAsync(taskNew); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result.Item2); |
| | | await _locationRepository.UpdateDataAsync(result.Item1); |
| | | await BaseDal.AddDataAsync(taskNew); |
| | | }); |
| | | return content.OK(data: taskDTO); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region æ´æ°èµ·ç¹è´§ä½ä¿¡æ¯ |
| | | public async Task<WebResponseContent> UpdateStartLocationInfo(Dt_Task task) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (task == null) |
| | | return content.OK(); |
| | | var result = UpdateLocationStatus(task.SourceAddress, LocationEnum.Free, task.TaskNum.Value, task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup ? (int)StatusChangeTypeEnum.AutomaticOutbound : (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1); |
| | | await _locationRepository.UpdateDataAsync(result.Item2); |
| | | |
| | | return content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region è·åç»ç¹è´§ä½ä¿¡æ¯ |
| | | public async Task<WebResponseContent> RequestLocation(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode); |
| | | if (task == null) |
| | | return content.Error("æªæ¾å°ä»»å¡"); |
| | | var areaInfo = await _areaInfoRepository.QueryFirstAsync(x => x.AreaName == task.TargetAddress); |
| | | if (areaInfo == null) |
| | | return content.Error($"æªæ¾å°ç»ç¹åºåä¿¡æ¯{task.TargetAddress}请è系管çå"); |
| | | var location = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); |
| | | DtLocationInfo locationInfo = new DtLocationInfo(); |
| | | switch (areaInfo.AreaID) |
| | | { |
| | | case 1: |
| | | locationInfo = await GetEmptyLocation("SC1"); |
| | | break; |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | case 6: |
| | | locationInfo = await GetAGVEmptyCacheLocation(areaInfo.AreaID, location); |
| | | break; |
| | | default: |
| | | return content.Error("è¯·éæ©æ£ç¡®çåºåä¿¡æ¯"); |
| | | } |
| | | if (locationInfo == null) |
| | | { |
| | | return content.Error("æªæ¾å°å¯åé
è´§ä½,请æ¥çæ¯å¦è¿æç©ºé²å¯ä½¿ç¨è´§ä½"); |
| | | } |
| | | task.CurrentAddress = task.NextAddress; |
| | | task.TargetAddress = locationInfo.LocationCode; |
| | | task.NextAddress = locationInfo.LocationCode; |
| | | |
| | | var result = UpdateLocationStatus(locationInfo.LocationCode, LocationEnum.Lock, task.TaskNum.Value, task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup ? StatusChangeTypeEnum.AutomaticOutbound : StatusChangeTypeEnum.AutomaticInbound); |
| | | await BaseDal.UpdateDataAsync(task); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1); |
| | | await _locationRepository.UpdateDataAsync(result.Item2); |
| | | |
| | | return content.OK(data: locationInfo.LocationCode); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | |
| | | changeRecordDto.Add(dtLocationStatusChangeRecord); |
| | | } |
| | | } |
| | | //_locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto); |
| | | |
| | | //_locationRepository.UpdateData(locations); |
| | | return (changeRecordDto,locations); |
| | | } |
| | | |
| | |
| | | { |
| | | item.LocationStatus = (int)LocationEnum.Lock; |
| | | } |
| | | else if (item.LocationStatus == (int)LocationEnum.Free) |
| | | { |
| | | item.LocationStatus = (int)LocationEnum.FreeDisable; |
| | | } |
| | | } |
| | | else if (locationStatus == LocationEnum.InStock) |
| | | { |
| | | if (item.LocationCode == location.LocationCode) |
| | | { |
| | | item.LocationStatus = (int)LocationEnum.InStock; |
| | | } |
| | | else if (item.LocationStatus == (int)LocationEnum.FreeDisable) |
| | | { |
| | | item.LocationStatus = (int)LocationEnum.Free; |
| | | } |
| | | } |
| | | else if (locationStatus == LocationEnum.InStockDisable) |
| | |
| | | { |
| | | item.LocationStatus = (int)LocationEnum.InStockDisable; |
| | | } |
| | | else if (item.LocationStatus == (int)LocationEnum.Free) |
| | | { |
| | | item.LocationStatus = (int)LocationEnum.FreeDisable; |
| | | } |
| | | } |
| | | else if (locationStatus == LocationEnum.Free) |
| | | { |
| | | if (item.LocationCode == location.LocationCode) |
| | | { |
| | | item.LocationStatus = (int)LocationEnum.Free; |
| | | } |
| | | else if (item.LocationStatus == (int)LocationEnum.FreeDisable || item.LocationStatus == (int)LocationEnum.InStockDisable) |
| | | { |
| | | item.LocationStatus = (int)LocationEnum.Free; |
| | | } |
| | | item.LocationStatus = (int)LocationEnum.Free; |
| | | } |
| | | } |
| | | List<DtLocationStatusChangeRecord> changeRecordDto = new List<DtLocationStatusChangeRecord>(); |
| | |
| | | changeRecordDto.Add(dtLocationStatusChangeRecord); |
| | | } |
| | | } |
| | | //_locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto); |
| | | |
| | | //_locationRepository.UpdateData(locations); |
| | | return (changeRecordDto, locations); |
| | | } |
| | | |
| | | public (DtLocationStatusChangeRecord, DtLocationInfo) UpdateLocationStatus(string locationCode, LocationEnum locationStatus, int taskNum, StatusChangeTypeEnum StatusChangeType) |
| | | { |
| | | var location = _locationRepository.QueryFirst(x => x.LocationCode == locationCode); |
| | | int Beforelocation = location.LocationStatus; |
| | | |
| | | location.LocationStatus = (int)locationStatus; |
| | | |
| | | DtLocationStatusChangeRecord dtLocationStatusChangeRecord = new DtLocationStatusChangeRecord() |
| | | { |
| | | ChangeType = (int)StatusChangeType, |
| | | LocationCode = locationCode, |
| | | LocationId = location.Id, |
| | | Creater = "System", |
| | | TaskNum = taskNum, |
| | | AfterStatus = location.LocationStatus, |
| | | BeforeStatus = Beforelocation, |
| | | }; |
| | | |
| | | return (dtLocationStatusChangeRecord, location); |
| | | } |
| | | |
| | | public List<DtLocationInfo> GetGroupLocations(DtLocationInfo location) |
| | |
| | | Remark = task.Remark, |
| | | Floor = task.Floor, |
| | | }; |
| | | } |
| | | private List<WMSTaskDTO> CreateTaskDTO(List<Dt_Task> task) |
| | | { |
| | | List<WMSTaskDTO> taskNews = new List<WMSTaskDTO>(); |
| | | foreach (var item in task) |
| | | { |
| | | taskNews.Add(new WMSTaskDTO |
| | | { |
| | | TaskNum = item.TaskNum.Value, |
| | | Grade = item.Grade.Value, |
| | | PalletCode = item.PalletCode, |
| | | RoadWay = item.Roadway, |
| | | SourceAddress = item.SourceAddress, |
| | | TargetAddress = item.TargetAddress, |
| | | TaskState = item.TaskState, |
| | | Id = 0, |
| | | TaskType = item.TaskType, |
| | | AGVTaskNum = item.AGVTaskNum, |
| | | Remark = item.Remark, |
| | | Floor = item.Floor, |
| | | }); |
| | | } |
| | | |
| | | return taskNews; |
| | | } |
| | | |
| | | private async Task DeleteStockInfoAsync(int stockId) |
| | |
| | | |
| | | private async Task<bool> AddTaskAsync(Dt_Task task, DtLocationInfo StartAddress, DtLocationInfo EndAddress) |
| | | { |
| | | //UpdateLocationStatus |
| | | bool isResult = await BaseDal.AddDataAsync(task) > 0; |
| | | int SourcebeforeStatus = StartAddress.LocationStatus; |
| | | |
| | |
| | | bool Target = await _locationRepository.UpdateDataAsync(EndAddress); |
| | | |
| | | return isResult && Source && Target; |
| | | } |
| | | |
| | | private (List<DtLocationInfo>,List<DtLocationStatusChangeRecord>) AddTaskAsync(List<Dt_Task> task) |
| | | { |
| | | List<DtLocationStatusChangeRecord> changeRecordDto = new List<DtLocationStatusChangeRecord>(); |
| | | List<DtLocationInfo> locationos = new List<DtLocationInfo>(); |
| | | foreach (var item in task) |
| | | { |
| | | var SourceAddress = _locationRepository.QueryFirst(x => x.LocationCode == item.SourceAddress); |
| | | var TargetAddress = _locationRepository.QueryFirst(x => x.LocationCode == item.TargetAddress); |
| | | int SourcebeforeStatus = SourceAddress.LocationStatus; |
| | | |
| | | int TargetbeforeStatus = TargetAddress.LocationStatus; |
| | | |
| | | SourceAddress.LocationStatus = (int)LocationEnum.InStockDisable; |
| | | TargetAddress.LocationStatus = (int)LocationEnum.Lock; |
| | | changeRecordDto.Add(new DtLocationStatusChangeRecord() |
| | | { |
| | | ChangeType = (int)StatusChangeTypeEnum.AutomaticRelocation, |
| | | LocationCode = TargetAddress.LocationCode, |
| | | LocationId = TargetAddress.Id, |
| | | Creater = "System", |
| | | TaskNum = item.TaskNum, |
| | | AfterStatus = TargetAddress.LocationStatus, |
| | | BeforeStatus = TargetbeforeStatus, |
| | | }); |
| | | changeRecordDto.Add(new DtLocationStatusChangeRecord |
| | | { |
| | | AfterStatus = TargetAddress.LocationStatus, |
| | | BeforeStatus = TargetbeforeStatus, |
| | | TaskNum = item.TaskNum.Value, |
| | | Creater = "System", |
| | | LocationId = TargetAddress.Id, |
| | | LocationCode = TargetAddress.LocationCode, |
| | | ChangeType = (int)StatusChangeTypeEnum.AutomaticRelocation, |
| | | }); |
| | | locationos.Add(TargetAddress); |
| | | locationos.Add(SourceAddress); |
| | | } |
| | | return (locationos, changeRecordDto); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | foreach (var item in locations) |
| | | { |
| | | var locationLateral = _locationRepository.QueryData(x => x.Row == item.Row && x.Column < item.Column && x.Remark == item.Remark); |
| | | if (locationLateral.Count == 0) |
| | | { |
| | | locationInfos.Add(item); |
| | | continue; |
| | | } |
| | | bool Isavailable = true; |
| | | foreach (var lateral in locationLateral) |
| | | { |
| | |
| | | locationInfos.Add(item); |
| | | continue; |
| | | } |
| | | foreach (var Lateral in locationLateral) |
| | | bool Isavailable = true; |
| | | foreach (var lateral in locationLateral) |
| | | { |
| | | if (locationInfos.Contains(Lateral)) |
| | | continue; |
| | | if (Lateral.LocationStatus == (int)LocationEnum.Free && Lateral.EnalbeStatus == 1) |
| | | if (lateral.LocationStatus != (int)LocationEnum.Free && lateral.EnalbeStatus == 1) |
| | | { |
| | | locationInfos.Add(item); |
| | | Isavailable = false; |
| | | continue; |
| | | } |
| | | } |
| | | if (Isavailable) |
| | | locationInfos.Add(item); |
| | | } |
| | | |
| | | return locationInfos.Distinct().OrderBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | |
| | | } |
| | |
| | | |
| | | public bool LocationIsOutBound(DtLocationInfo location) |
| | | { |
| | | |
| | | int sum = 0; |
| | | if (location.AreaId == 1) |
| | | { |
| | | if (location.Depth == 2) |