| | |
| | | using log4net.Core; |
| | | using Mapster; |
| | | using Masuit.Tools; |
| | | using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; |
| | | using OfficeOpenXml.Table.PivotTable; |
| | | using SixLabors.Fonts.Tables.AdvancedTypographic; |
| | |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.Const; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_DTO.Location; |
| | | using WIDESEA_DTO.WMS; |
| | | using WIDESEA_IServices; |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_Model.Models.Basic; |
| | | using WIDESEA_Model.Models.ERP; |
| | | using WIDESEAWCS_BasicInfoRepository; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using static System.Collections.Specialized.BitVector32; |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var boxing = 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 (boxing == null) |
| | | { |
| | | return content.Error("æªæ¾å°ç»çæ°æ®"); |
| | | } |
| | | |
| | | DtStockInfo stock = CreatePalletStock(task, boxing); |
| | | DtBoxingInfo_Hty boxingInfo_Hty = boxing.Adapt<DtBoxingInfo_Hty>(); |
| | | boxingInfo_Hty.ModifyDate = DateTime.Now; |
| | | |
| | | task.TaskState = (int)TaskInStatusEnum.InFinish; |
| | | var taskHty = task.Adapt<Dt_Task_Hty>(); |
| | | 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 _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await _stockInfoRepository.AddDataNavAsync(stock); |
| | | await DeleteTaskAsync(task.TaskId); |
| | | await AddTaskHtyAsync(taskHty); |
| | | await _boxingInfoRepository.Db.DeleteNav<DtBoxingInfo>(x => x.Id == boxing.Id) |
| | | .Include(x => x.BoxingInfoDetails) |
| | | .ExecuteCommandAsync(); |
| | | await AddBoxingHtyAsync(boxingInfo_Hty); |
| | | }); |
| | | content.OK("å
¥åºå®æ"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.SourceAddress); |
| | | var Targetlocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress); |
| | | |
| | | UpdateLocationStatus(Sourcelocation, LocationEnum.Free); |
| | | UpdateLocationStatus(Targetlocation, LocationEnum.InStock); |
| | | //UpdateLocationStatus(Sourcelocation, LocationEnum.Free); |
| | | //UpdateLocationStatus(Targetlocation, LocationEnum.InStock); |
| | | |
| | | task.TaskState = (int)TaskAGVCarryStatusEnum.CarryFinish; |
| | | var taskHty = task.Adapt<Dt_Task_Hty>(); |
| | |
| | | { |
| | | return await CompleteTransferTaskAsync(task, stock); |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.CarryGroup) |
| | | { |
| | | return await CompleteCarryTaskAsync(task, stock); |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.AcrossFloorGroup) |
| | | { |
| | | return await CompleteAcrossFloorTaskAsync(task, stock); |
| | | } |
| | | else |
| | | { |
| | | return content.Error("æªæ¾å°ä»»å¡ç±»å"); |
| | |
| | | |
| | | #region 请æ±ä»»å¡å
¥åº |
| | | |
| | | public async Task<WebResponseContent> RequestTaskAsync(RequestTaskDto taskDto) |
| | | public async Task<WebResponseContent> RequestInboundTaskAsync(RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var boxingInfo = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == taskDto.PalletCode); |
| | | if (boxingInfo == null) |
| | | { |
| | | return content.Error("æçä¿¡æ¯ä¸åå¨ï¼è¯·ç¡®è®¤æçå·²ç»çæå"); |
| | | } |
| | | |
| | | foreach (var item in boxingInfo.BoxingInfoDetails) |
| | | { |
| | | var ERPStock = SqlSugarHelper.DBERP.Queryable<WMS_ç¨ååºåä¸è§è¡¨_ST>().Where(x => x.ä»åºåç§° == item.Warehouse && x.æå· == item.MaterielCode && x.åå == item.MaterielName).ToList().FirstOrDefault(); |
| | | if (ERPStock == null) |
| | | { |
| | | return content.Error($"ç»çæ°æ®æªå¨ERPåºåæ°æ®ä¸ï¼è¯·äººå·¥ç¡®è®¤æ°æ®æ¯å¦æ£ç¡®"); |
| | | } |
| | | } |
| | | |
| | | var StartAddress = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | if (StartAddress == null) |
| | | { |
| | | return content.Error("èµ·ç¹åºä½æªæ¾å°"); |
| | | } |
| | | if (!LocationIsOutBound(StartAddress)) |
| | | { |
| | | return content.Error($"èµ·ç¹åºä½{StartAddress.LocationCode}æ¬è¿è·¯å¾è¢«å ç¨ï¼è¯·äººå·¥ç¡®è®¤åä¸åä»»å¡"); |
| | | } |
| | | if (taskDto.AreaId != 0) |
| | | { |
| | | switch (taskDto.AreaId) |
| | | { |
| | | case 1: |
| | | return await InboundStakerArea(taskDto, StartAddress, await GetEmptyLocation("SC1")); |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | case 6: |
| | | return await InboundAGVCacheArea(taskDto, StartAddress, await GetAGVEmptyCacheLocation(taskDto.AreaId, StartAddress)); |
| | | default: |
| | | return content.Error("è¯·éæ©æ£ç¡®çåºåä¿¡æ¯"); |
| | | } |
| | | } |
| | | else if (taskDto.TargetAddress != null) |
| | | { |
| | | var location = _locationRepository.QueryFirst(x => x.LocationCode == taskDto.TargetAddress); |
| | | if (location != null && location.LocationStatus == (int)LocationEnum.Free && location.EnalbeStatus == 1) |
| | | { |
| | | switch (taskDto.AreaId) |
| | | { |
| | | case 1: |
| | | return await InboundStakerArea(taskDto, location, StartAddress); |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | case 6: |
| | | return await InboundAGVCacheArea(taskDto, location, StartAddress); |
| | | default: |
| | | return content.Error("è´§ä½åºåæªæ¾å°"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | return content.OK("ç®æ åºä½ä¸å¯ç¨"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | return content.OK("è¯·éæ©å
¥åºåºåæç»ç¹å°å"); |
| | | } |
| | | } |
| | | catch (Exception err) |
| | | { |
| | | return content.Error(err.Message); |
| | | } |
| | | } |
| | | |
| | | public async Task<WebResponseContent> InboundStakerArea(RequestTaskDto taskDto,DtLocationInfo StartAddress, DtLocationInfo location) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1"); |
| | | |
| | | var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | var TargetAddress = await GetEmptyLocation("SC1"); |
| | | |
| | | if (location == null || TargetAddress == null) |
| | | if (location == null) |
| | | { |
| | | return content.Error("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | return content.Error("ç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Roadway = "SC1", |
| | | TargetAddress = TargetAddress.LocationCode, |
| | | TargetAddress = location.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = station.stationChildCode, |
| | |
| | | }; |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | var isResult = await AddTaskAsync(taskNew, location,TargetAddress); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("æ°å¢ä»»å¡å¤±è´¥"); |
| | | } |
| | | BaseDal.AddData(taskNew); |
| | | |
| | | UpdateLocationStatus(StartAddress, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | UpdateLocationStatus(location, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | |
| | | |
| | | |
| | | //return content.OK(); |
| | | return content = await SendWCSTask(taskDTO); |
| | | } |
| | | catch (Exception err) |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(err.Message); |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error(ex.Message); |
| | | } |
| | | |
| | | return content; |
| | | } |
| | | |
| | | public async Task<WebResponseContent> InboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (location == null) |
| | | { |
| | | return content.Error("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | Dt_Task taskNew = new Dt_Task(); |
| | | if (StartAddress.Floor != location.Floor) |
| | | { |
| | | taskNew= RequestAcrossFloorTask(StartAddress,location, (int)TaskInboundTypeEnum.Inbound,taskDto.PalletCode); |
| | | } |
| | | else |
| | | { |
| | | taskNew = RequestAGVCarryTask(StartAddress, location, (int)TaskInboundTypeEnum.Inbound, taskDto.PalletCode); |
| | | } |
| | | |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | UpdateLocationStatus(StartAddress, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | UpdateLocationStatus(location, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | |
| | | BaseDal.AddData(taskNew); |
| | | |
| | | _unitOfWorkManage.CommitTran(); |
| | | //return content.OK(); |
| | | return content = await SendWCSTask(taskDTO); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | #endregion 请æ±ä»»å¡å
¥åº |
| | | |
| | | #region æ´æ°ä»»å¡ç¶æ |
| | |
| | | |
| | | #endregion |
| | | |
| | | |
| | | #region 请æ±åºåº |
| | | |
| | | /// <summary> |
| | | /// è¯·æ±æçä»»å¡ |
| | | /// 请æ±åºåºä»»å¡ |
| | | /// </summary> |
| | | /// <param name="position">ç®æ ä½ç½®</param> |
| | | /// <param name="tag">æçç±»åï¼1ï¼å®çï¼2ï¼ç©ºçï¼</param> |
| | | /// <param name="areaCode">åºåç¼ç </param> |
| | | /// <param name="roadways">å··éç¼ç éå</param> |
| | | /// <returns>è¿åç»æé</returns> |
| | | public async Task<WebResponseContent> RequestOutTaskAsync(RequestTaskDto taskDto) |
| | | /// <param name="taskDto"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> RequestOutboundTaskAsync(RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | //DtStockInfo stcok= await _stockInfoRepository.QueryFirstAsync(x => x.PalletCode == taskDto.PalletCode); |
| | | //if (stcok == null) |
| | | //{ |
| | | // return content.Error("æçä¿¡æ¯ä¸åå¨ï¼è¯·ç¡®è®¤æçå·²å
¥åºæå"); |
| | | //} |
| | | |
| | | var StartAddress = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | if (StartAddress == null) |
| | | { |
| | | return content.Error("èµ·ç¹åºä½æªæ¾å°"); |
| | | } |
| | | if (!LocationIsOutBound(StartAddress)) |
| | | { |
| | | return content.Error($"èµ·ç¹åºä½{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); |
| | | |
| | | if (location != null && location.LocationStatus != (int)LocationEnum.Free && location.EnalbeStatus == 1) |
| | | { |
| | | return content.OK("ç®æ åºä½ä¸å¯ç¨"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | return content.OK("è¯·éæ©å
¥åºåºåæç»ç¹å°å"); |
| | | } |
| | | |
| | | switch (StartAddress.AreaId) |
| | | { |
| | | case 1: |
| | | return await OutboundStakerArea(taskDto, StartAddress, location); |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | case 6: |
| | | return await OutboundAGVCacheArea(taskDto, StartAddress, location); |
| | | default: |
| | | return content.Error("è¯·éæ©æ£ç¡®çåºåä¿¡æ¯"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public async Task<WebResponseContent> OutboundStakerArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1"); |
| | | |
| | | var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(2, Sourcelocation); |
| | | if (Targetlocation == null || Sourcelocation == null) |
| | | if (location == null) |
| | | { |
| | | return content.Error("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | return content.Error("ç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | |
| | | if (location.AreaId == 5 || location.AreaId == 6) |
| | | { |
| | | return content.Error("å½ååºåä¸å¯åºåºï¼è¯·è系管çå"); |
| | | } |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Grade = Convert.ToInt32(StartAddress.Remark), |
| | | Roadway = "SC1", |
| | | TargetAddress = Targetlocation.LocationCode, |
| | | TargetAddress = location.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = station.stationChildCode, |
| | |
| | | SourceAddress = taskDto.Position, |
| | | CurrentAddress = taskDto.Position, |
| | | TaskState = (int)TaskOutStatusEnum.OutNew, |
| | | TaskType = (int)TaskOutboundTypeEnum.Outbound, |
| | | TaskType = taskDto.TaskType, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | |
| | | }; |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | var isResult = await AddTaskAsync(taskNew, Sourcelocation, Targetlocation); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("æ°å¢ä»»å¡å¤±è´¥"); |
| | | } |
| | | UpdateLocationStatus(StartAddress, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | UpdateLocationStatus(location, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | |
| | | BaseDal.AddData(taskNew); |
| | | //return content.OK(); |
| | | return content = await SendWCSTask(taskDTO); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | } |
| | | } |
| | | |
| | | public async Task<WebResponseContent> OutboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (location == null) |
| | | { |
| | | return content.Error("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | Dt_Task taskNew = new Dt_Task(); |
| | | if (StartAddress.Floor != location.Floor) |
| | | { |
| | | taskNew = RequestAcrossFloorTask(StartAddress, location, taskDto.TaskType, taskDto.PalletCode); |
| | | } |
| | | else |
| | | { |
| | | taskNew = RequestAGVCarryTask(StartAddress, location, taskDto.TaskType, taskDto.PalletCode); |
| | | } |
| | | |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | UpdateLocationStatus(StartAddress, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | UpdateLocationStatus(location, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | |
| | | BaseDal.AddData(taskNew); |
| | | //return content.OK(); |
| | | return content = await SendWCSTask(taskDTO); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | #endregion 请æ±åºåºï¼å®ç&空çï¼ |
| | | |
| | | #region 请æ±è·¨æ¥¼å±2ä»»å¡ |
| | |
| | | SourceAddress = task.SourceAddress, |
| | | CurrentAddress = stationManager.stationChildCode, |
| | | TaskState = (int)TaskAcrossFloorStatusEnum.SecondCarry, |
| | | TaskType = (int)TaskAcrossFloorTypeEnum.AcrossFloorCarry, |
| | | TaskType = task.TaskType, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | |
| | | #endregion |
| | | |
| | | #region 请æ±è·¨æ¥¼å±ä»»å¡ |
| | | public async Task<WebResponseContent> RequestAcrossFloorTaskAsync(RequestTaskDto taskDto) |
| | | public Dt_Task RequestAcrossFloorTask(DtLocationInfo StartAddress,DtLocationInfo EndAddress,int TaskType,string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | |
| | | var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId, Sourcelocation); |
| | | |
| | | if (Targetlocation == null || Sourcelocation == null) |
| | | var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == StartAddress.Floor); |
| | | return new Dt_Task |
| | | { |
| | | return content.Error("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | |
| | | if (IsAcrossFloor(Sourcelocation, Targetlocation)) |
| | | { |
| | | return content.Error("忥¼å±ä¸å
许请æ±è·¨æ¥¼å±ä»»å¡"); |
| | | } |
| | | |
| | | if (Sourcelocation != null) |
| | | { |
| | | var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == Sourcelocation.Floor); |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Roadway = "AGV", |
| | | TargetAddress = Targetlocation.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = next.stationChildCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = taskDto.Position, |
| | | CurrentAddress = taskDto.Position, |
| | | TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew, |
| | | TaskType = (int)TaskAcrossFloorTypeEnum.AcrossFloorCarry, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = Sourcelocation.Floor, |
| | | }; |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | |
| | | var isResult = await AddTaskAsync(taskNew, Sourcelocation, Targetlocation); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("æ°å¢ä»»å¡å¤±è´¥"); |
| | | } |
| | | |
| | | return content = await SendWCSTask(taskDTO); |
| | | } |
| | | return content.Error("æªæ¾å°æåæºç«ç¹"); |
| | | Grade = StartAddress.Column, |
| | | Roadway = "AGV", |
| | | TargetAddress = EndAddress.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = next.stationChildCode, |
| | | OrderNo = null, |
| | | PalletCode = palletCode, |
| | | SourceAddress = StartAddress.LocationCode, |
| | | CurrentAddress = StartAddress.LocationCode, |
| | | TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew, |
| | | TaskType = TaskType, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | Remark = StartAddress.AreaId.ToString(), |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = StartAddress.Floor, |
| | | }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | public async Task<WebResponseContent> RequestPointAcrossFloorTaskAsync(RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | var Targetlocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.TargetAddress); |
| | | |
| | | if (Targetlocation == null || Sourcelocation == null) |
| | | { |
| | | return content.Error("èµ·ç¹æç»ç¹æªå®ä¹"); |
| | | } |
| | | |
| | | if (IsAcrossFloor(Sourcelocation, Targetlocation)) |
| | | { |
| | | return content.Error("忥¼å±ä¸å
许请æ±è·¨æ¥¼å±ä»»å¡"); |
| | | } |
| | | if (Sourcelocation != null) |
| | | { |
| | | var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == Sourcelocation.Floor); |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Roadway = "AGV", |
| | | TargetAddress = Targetlocation.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = next.stationChildCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = taskDto.Position, |
| | | CurrentAddress = taskDto.Position, |
| | | TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew, |
| | | TaskType = (int)TaskAcrossFloorTypeEnum.AcrossFloorCarry, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = Sourcelocation.Floor, |
| | | }; |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | |
| | | var isResult = await AddTaskAsync(taskNew, Sourcelocation, Targetlocation); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("æ°å¢ä»»å¡å¤±è´¥"); |
| | | } |
| | | |
| | | return content = await SendWCSTask(taskDTO); |
| | | } |
| | | return content.Error("æªæ¾å°æåæºç«ç¹"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 请æ±AGVæ¬è¿ä»»å¡ |
| | | public async Task<WebResponseContent> RequestAGVCarryTaskAsync(RequestTaskDto taskDto) |
| | | public Dt_Task RequestAGVCarryTask(DtLocationInfo StartAddress, DtLocationInfo EndAddress, int TaskType, string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId,Sourcelocation); |
| | | |
| | | if (Targetlocation == null || Sourcelocation == null) |
| | | return new Dt_Task |
| | | { |
| | | return content.Error("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | |
| | | if (!IsSamefloor(Sourcelocation, Targetlocation)) |
| | | { |
| | | return content.Error("忥¼å±ä¸å
许请æ±è·¨æ¥¼å±ä»»å¡"); |
| | | } |
| | | |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Grade = StartAddress.Column, |
| | | Roadway = "AGV", |
| | | TargetAddress = Targetlocation.LocationCode, |
| | | TargetAddress = EndAddress.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = Targetlocation.LocationCode, |
| | | NextAddress = EndAddress.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = taskDto.Position, |
| | | CurrentAddress = taskDto.Position, |
| | | PalletCode = palletCode, |
| | | SourceAddress = StartAddress.LocationCode, |
| | | CurrentAddress = StartAddress.LocationCode, |
| | | TaskState = (int)TaskAGVCarryStatusEnum.CarryNew, |
| | | TaskType = (int)TaskAGVCarryTypeEnum.Carry, |
| | | TaskType = TaskType, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | Remark = StartAddress.AreaId.ToString(), |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = Sourcelocation.Floor, |
| | | Floor = StartAddress.Floor, |
| | | }; |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | UpdateLocationStatus(Sourcelocation, LocationEnum.InStockDisable); |
| | | UpdateLocationStatus(Targetlocation, LocationEnum.Lock); |
| | | |
| | | var isResult = await AddTaskAsync(taskNew, Sourcelocation, Targetlocation); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("æ°å¢ä»»å¡å¤±è´¥"); |
| | | } |
| | | |
| | | //return content = await SendWCSTask(taskDTO); |
| | | return content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | |
| | | public async Task<WebResponseContent> RequestPointAGVCarryTaskAsync(RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | var Targetlocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.TargetAddress); |
| | | |
| | | if (Targetlocation == null || Sourcelocation == null) |
| | | { |
| | | return content.Error("èµ·ç¹æç»ç¹æªå®ä¹"); |
| | | } |
| | | |
| | | if (!IsSamefloor(Sourcelocation, Targetlocation)) |
| | | { |
| | | return content.Error("忥¼å±ä¸å
许请æ±è·¨æ¥¼å±ä»»å¡"); |
| | | } |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Roadway = "AGV", |
| | | TargetAddress = Targetlocation.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = Targetlocation.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = taskDto.Position, |
| | | CurrentAddress = taskDto.Position, |
| | | TaskState = (int)TaskAGVCarryStatusEnum.CarryNew, |
| | | TaskType = (int)TaskAGVCarryTypeEnum.Carry, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = Sourcelocation.Floor, |
| | | }; |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | var isResult = await AddTaskAsync(taskNew, Sourcelocation, Targetlocation); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("æ°å¢ä»»å¡å¤±è´¥"); |
| | | } |
| | | |
| | | return content = await SendWCSTask(taskDTO); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 夿æ¯å¦éè¦ç§»åº |
| | |
| | | |
| | | if (location == null || location.Depth != 2) |
| | | { |
| | | return content.Error("æªæ¾å°è´§ä½æè
该åºä½ä¸æ¯äºæ·±è´§ä½"); |
| | | return content.OK(data: _mapper.Map<WMSTaskDTO>(task)); |
| | | } |
| | | |
| | | var locationLateral = _locationRepository.QueryFirst(x => x.RoadwayNo == location.RoadwayNo && x.Row == 1 && x.Layer == location.Layer && x.Column == location.Column); |
| | | if (locationLateral != null && (locationLateral.LocationStatus == 0 || locationLateral.EnalbeStatus == 1)) |
| | | if (locationLateral != null && (locationLateral.LocationStatus == (int)LocationEnum.FreeDisable || locationLateral.LocationStatus == (int)LocationEnum.Free) && locationLateral.EnalbeStatus == 1) |
| | | { |
| | | return content.OK(data: _mapper.Map<WMSTaskDTO>(task)); |
| | | } |
| | | else if (locationLateral != null && (locationLateral.LocationStatus == 1 || locationLateral.EnalbeStatus == 1)) |
| | | else if (locationLateral != null && locationLateral.LocationStatus == 1 && locationLateral.EnalbeStatus == 1) |
| | | { |
| | | return content.Error($"䏿·±ä½å¼å¸¸é宿ä¸å¯åºåº"); |
| | | } |
| | | else if (locationLateral != null && (locationLateral.LocationStatus == 2 || locationLateral.EnalbeStatus == 1)) |
| | | else if (locationLateral != null && locationLateral.LocationStatus == (int)LocationEnum.InStockDisable && locationLateral.EnalbeStatus == 1) |
| | | { |
| | | var TargetAddress = await GetEmptyLocation("SC1"); |
| | | |
| | |
| | | } |
| | | |
| | | //todoæ¥è¯¢å
ä¾§åºåä¿¡æ¯ |
| | | var stock = await _stockInfoRepository.QueryFirstAsync(x => x.LocationCode == locationLateral.LocationCode && x.LocationId == locationLateral.Id); |
| | | var stock = await _stockInfoRepository.QueryFirstAsync(x => x.LocationCode == locationLateral.LocationCode); |
| | | |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | |
| | | MaterialNo = "", |
| | | NextAddress = TargetAddress.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode+"001", |
| | | PalletCode = taskDto.PalletCode + "001", |
| | | 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); |
| | | UpdateLocationStatus(TargetAddress, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticRelocation); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | |
| | | |
| | | foreach (var item in locationInfos) |
| | | { |
| | | if (item.LocationStatus == 0 && item.EnalbeStatus == 1) |
| | | if ((item.LocationStatus == 0 || item.LocationStatus == (int)LocationEnum.FreeDisable) && item.EnalbeStatus == 1) |
| | | { |
| | | continue; |
| | | } |
| | |
| | | SourceAddress = item.LocationCode, |
| | | CurrentAddress = item.LocationCode, |
| | | TaskState = (int)TaskAGVCarryStatusEnum.CarryNew, |
| | | TaskType = (int)TaskAGVCarryTypeEnum.CarryReloction, |
| | | TaskType = (int)TaskRelocationTypeEnum.Relocation, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | |
| | | 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(); |
| | |
| | | |
| | | #region å
é¨è°ç¨æ¹æ³ |
| | | |
| | | public void UpdateLocationStatus(DtLocationInfo location, LocationEnum locationStatus) |
| | | public void UpdateLocationStatus(DtLocationInfo location, LocationEnum locationStatus, int taskNum, int StatusChangeType) |
| | | { |
| | | List<DtLocationInfo> locations = GetGroupLocations(location); |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | List<LocationChangeRecordDto> changeRecordDto = new List<LocationChangeRecordDto>(); |
| | | foreach (var item in Beforelocation) |
| | | { |
| | | var loc = locations.Where(x => x.LocationCode == item.LocationCode).FirstOrDefault(); |
| | | if (loc != null) |
| | | { |
| | | changeRecordDto.Add(new LocationChangeRecordDto() |
| | | { |
| | | AfterStatus = loc.LocationStatus, |
| | | BeforeStatus = item.LocationStatus, |
| | | TaskNum = taskNum, |
| | | LocationId = loc.Id, |
| | | LocationCode = loc.LocationCode, |
| | | ChangeType = StatusChangeType, |
| | | }); |
| | | } |
| | | } |
| | | _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto); |
| | | |
| | | _locationRepository.UpdateData(locations); |
| | | } |
| | |
| | | if (!isStockAdd) |
| | | { |
| | | throw new Exception("åºååå²ä¿¡æ¯æ·»å 失败"); |
| | | } |
| | | } |
| | | |
| | | private async Task DeleteBoxingInfoAsync(int boxingId) |
| | | { |
| | | var isStockUpdated = await _stockInfoRepository.DeleteDataByIdAsync(boxingId); |
| | | if (!isStockUpdated) |
| | | { |
| | | throw new Exception("åºåä¿¡æ¯æ´æ°å¤±è´¥"); |
| | | } |
| | | } |
| | | |
| | | private async Task AddBoxingHtyAsync(DtBoxingInfo_Hty boxingInfo) |
| | | { |
| | | var isStockAdd = await SqlSugarHelper.DbWMS.InsertNav(boxingInfo).IncludesAllFirstLayer().ExecuteCommandAsync(); |
| | | if (!isStockAdd) |
| | | { |
| | | throw new Exception("ç»çåå²ä¿¡æ¯æ·»å 失败"); |
| | | } |
| | | } |
| | | |
| | |
| | | TaskNum = task.TaskNum.Value, |
| | | LocationId = location.Id, |
| | | LocationCode = location.LocationCode, |
| | | ChangeType = (int)StatusChangeTypeEnum.AutomaticStorage, |
| | | ChangeType = (int)StatusChangeTypeEnum.AutomaticInbound, |
| | | }; |
| | | |
| | | bool isUpdateChange = _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto); |
| | |
| | | return isResult && isUpdateLo; |
| | | } |
| | | |
| | | private async Task<bool> AddTaskAsync(Dt_Task task, DtLocationInfo Sourcelocation, DtLocationInfo Targetlocation) |
| | | private async Task<bool> AddTaskAsync(Dt_Task task, DtLocationInfo StartAddress, DtLocationInfo EndAddress) |
| | | { |
| | | //UpdateLocationStatus |
| | | bool isResult = await BaseDal.AddDataAsync(task) > 0; |
| | | int SourcebeforeStatus = Sourcelocation.LocationStatus; |
| | | int SourcebeforeStatus = StartAddress.LocationStatus; |
| | | |
| | | int TargetbeforeStatus = Targetlocation.LocationStatus; |
| | | int TargetbeforeStatus = EndAddress.LocationStatus; |
| | | |
| | | Sourcelocation.LocationStatus = (int)LocationEnum.InStockDisable; |
| | | StartAddress.LocationStatus = (int)LocationEnum.InStockDisable; |
| | | |
| | | Targetlocation.LocationStatus = (int)LocationEnum.Lock; |
| | | EndAddress.LocationStatus = (int)LocationEnum.Lock; |
| | | |
| | | List<LocationChangeRecordDto> changeRecordDto = new List<LocationChangeRecordDto>() |
| | | { |
| | | new LocationChangeRecordDto() |
| | | { |
| | | AfterStatus = Sourcelocation.LocationStatus, |
| | | AfterStatus = StartAddress.LocationStatus, |
| | | BeforeStatus = SourcebeforeStatus, |
| | | TaskNum = task.TaskNum.Value, |
| | | LocationId = Sourcelocation.Id, |
| | | LocationCode = Sourcelocation.LocationCode, |
| | | ChangeType = (int)StatusChangeTypeEnum.AutomaticDelivery, |
| | | LocationId = StartAddress.Id, |
| | | LocationCode = StartAddress.LocationCode, |
| | | ChangeType = (int)StatusChangeTypeEnum.AutomaticInbound, |
| | | }, |
| | | new LocationChangeRecordDto() |
| | | { |
| | | AfterStatus = Targetlocation.LocationStatus, |
| | | AfterStatus = EndAddress.LocationStatus, |
| | | BeforeStatus = TargetbeforeStatus, |
| | | TaskNum = task.TaskNum.Value, |
| | | LocationId = Targetlocation.Id, |
| | | LocationCode = Targetlocation.LocationCode, |
| | | ChangeType = (int)StatusChangeTypeEnum.AutomaticDelivery, |
| | | LocationId = EndAddress.Id, |
| | | LocationCode = EndAddress.LocationCode, |
| | | ChangeType = (int)StatusChangeTypeEnum.AutomaticInbound, |
| | | }, |
| | | }; |
| | | |
| | | bool isUpdateChange = _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto); |
| | | bool Source = await _locationRepository.UpdateDataAsync(Sourcelocation); |
| | | bool Target = await _locationRepository.UpdateDataAsync(Targetlocation); |
| | | bool Source = await _locationRepository.UpdateDataAsync(StartAddress); |
| | | bool Target = await _locationRepository.UpdateDataAsync(EndAddress); |
| | | |
| | | return isResult && Source && Target; |
| | | } |
| | |
| | | try |
| | | { |
| | | List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.RoadwayNo == "SC1" && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1); |
| | | if (locations.Count < 2) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | List<DtLocationInfo> locationInfos = new List<DtLocationInfo>(); |
| | | var locationInside = locations.Where(x => x.Row == 3).ToList(); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | return locationInfos.OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault(); |
| | | return locationInfos.Distinct().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault(); |
| | | } |
| | | else if (locations.Where(x => x.Row == 1).OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault() != null) |
| | | { |
| | |
| | | { |
| | | try |
| | | { |
| | | DtLocationInfo location = null; |
| | | if(loc==null) |
| | | { |
| | | return null; |
| | | } |
| | | switch (AreaId) |
| | | { |
| | | case 2: |
| | | location = await FromShallowToDeep(AreaId, loc); |
| | | break; |
| | | return await FromShallowToDeep(AreaId, loc); |
| | | case 3: |
| | | location = await AGVLIKU(AreaId); |
| | | break; |
| | | return await AGVLIKU(AreaId); |
| | | case 5: |
| | | case 6: |
| | | location = await FromDeepToShallow(AreaId, loc); |
| | | break; |
| | | return await FromDeepToShallow(AreaId, loc); |
| | | default: |
| | | break; |
| | | return null; |
| | | } |
| | | |
| | | return location; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | { |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | |
| | | locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1 && x.Row != loc.Row); |
| | | |
| | | if (AreaId == loc.AreaId) |
| | | { |
| | | locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1 && x.Row != loc.Row); |
| | | } |
| | | else |
| | | { |
| | | locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1); |
| | | } |
| | | if (locations.Count == 0) |
| | | { |
| | | return null; |
| | | } |
| | | List<DtLocationInfo> locationInfos = new List<DtLocationInfo>(); |
| | | foreach (var item in locations) |
| | | { |
| | | var locationLateral = _locationRepository.QueryData(x => x.Row == item.Row && x.Column < item.Column && x.Remark == item.Remark); |
| | | bool Isavailable = true; |
| | | foreach (var lateral in locationLateral) |
| | | { |
| | | 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.OrderByDescending(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | return locationInfos.Distinct().OrderByDescending(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | { |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | |
| | | locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1 && x.Row != loc.Row); |
| | | |
| | | if (AreaId == loc.AreaId) |
| | | { |
| | | locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1 && x.Row != loc.Row); |
| | | } |
| | | else |
| | | { |
| | | locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1); |
| | | } |
| | | |
| | | if (locations.Count == 0) |
| | | { |
| | | return null; |
| | |
| | | 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; |
| | | } |
| | | foreach (var Lateral in locationLateral) |
| | | { |
| | | if (locationInfos.Contains(Lateral)) |
| | | continue; |
| | | if (Lateral.LocationStatus == (int)LocationEnum.Free && Lateral.EnalbeStatus == 1) |
| | | { |
| | | locationInfos.Add(item); |
| | |
| | | } |
| | | } |
| | | |
| | | return locationInfos.OrderBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | return locationInfos.Distinct().OrderBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | public async Task<DtLocationInfo> AGVLIKU(int AreaId) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | public bool LocationIsOutBound(DtLocationInfo location) |
| | | { |
| | | try |
| | | { |
| | | int sum = 0; |
| | | if (location.AreaId == 1) |
| | | { |
| | | if (location.Depth == 2) |
| | | { |
| | | var locationLateral = _locationRepository.QueryFirst(x => x.Row == 1 && x.Column == location.Column && x.Layer == location.Layer); |
| | | |
| | | if (locationLateral.LocationStatus == (int)LocationEnum.Lock && locationLateral.EnalbeStatus == 1) |
| | | { |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | |
| | | else if (location.AreaId == 2) |
| | | { |
| | | var locationLateral = _locationRepository.QueryData(x => x.Row == location.Row && x.Column > location.Column && x.Remark == location.Remark); |
| | | |
| | | foreach (var Lateral in locationLateral) |
| | | { |
| | | if (Lateral.LocationStatus == (int)LocationEnum.Lock && Lateral.EnalbeStatus == 1) |
| | | { |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | |
| | | else if (location.AreaId == 5 || location.AreaId == 6) |
| | | { |
| | | var locationLateral = _locationRepository.QueryData(x => x.Row == location.Row && x.Column < location.Column && x.Remark == location.Remark); |
| | | |
| | | foreach (var lateral in locationLateral) |
| | | { |
| | | if (lateral.LocationStatus == (int)LocationEnum.Lock && lateral.EnalbeStatus == 1) |
| | | { |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | catch (Exception) |
| | | { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | private DtStockInfo CreatePalletStock(Dt_Task task, DtBoxingInfo boxing) |
| | | { |
| | | var loation = _locationRepository.QueryFirst(x => x.RoadwayNo == task.Roadway && x.LocationCode == task.TargetAddress); |
| | | if (loation == null) |
| | | throw new Exception("æªæ¾å°å¯¹åºä½ç½®ä¿¡æ¯"); |
| | | |
| | | |
| | | var boxDetail = boxing.BoxingInfoDetails.Adapt<List<DtStockInfoDetail>>(); |
| | | boxDetail.ForEach(x => { x.Status = (int)StockStateEmun.å·²å
¥åº; }); |
| | | var stock = new DtStockInfo() |
| | | { |
| | | PalletCode = task.PalletCode, |
| | | LocationCode = task.TargetAddress, |
| | | CreateDate = DateTime.Now, |
| | | Creater = "system", |
| | | IsFull = boxing.IsFull, |
| | | StockInfoDetails = boxDetail, |
| | | }; |
| | | |
| | | stock.StockStatus = 1; |
| | | |
| | | return stock; |
| | | } |
| | | |
| | | #endregion ä»»å¡è¯·æ±æ¹æ³ |
| | | |
| | | #endregion private å
鍿¹æ³ |