| | |
| | | using log4net.Core; |
| | | using Mapster; |
| | | using Masuit.Tools; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; |
| | | using OfficeOpenXml.Table.PivotTable; |
| | | using SixLabors.Fonts.Tables.AdvancedTypographic; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Reflection.Metadata; |
| | | using System.Text.RegularExpressions; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Cache; |
| | | using WIDESEA_Common; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.Const; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_DTO.Location; |
| | | using WIDESEA_DTO.WMS; |
| | | using WIDESEA_IServices; |
| | |
| | | using WIDESEA_Model.Models.Basic; |
| | | using WIDESEAWCS_BasicInfoRepository; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using static System.Collections.Specialized.BitVector32; |
| | | |
| | | namespace WIDESEA_StorageTaskServices; |
| | | |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | 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); |
| | | |
| | | task.TaskState = (int)TaskAGVCarryStatusEnum.CarryFinish; |
| | | var taskHty = task.Adapt<Dt_Task_Hty>(); |
| | | taskHty.FinishTime = DateTime.Now; |
| | |
| | | |
| | | |
| | | // éªè¯åºåæ¯å¦åå¨ |
| | | var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode); |
| | | //var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode); |
| | | DtStockInfo stock = null; |
| | | |
| | | if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) |
| | | { |
| | |
| | | |
| | | var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | var TargetAddress = await GetEmptyLocation("SC1"); |
| | | |
| | | if (location == null || TargetAddress == null) |
| | | { |
| | | return content.Error("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Roadway = "SC1", |
| | | TargetAddress = "SC1", |
| | | TargetAddress = TargetAddress.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = station.stationChildCode, |
| | |
| | | }; |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | var isResult = await AddInBoundTaskAsync(taskNew, location); |
| | | var isResult = await AddTaskAsync(taskNew, location,TargetAddress); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | |
| | | |
| | | var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(2); |
| | | DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(2, Sourcelocation); |
| | | if (Targetlocation == null || Sourcelocation == null) |
| | | { |
| | | return content.Error("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | |
| | | #region 请æ±è·¨æ¥¼å±ä»»å¡ |
| | | public async Task<WebResponseContent> RequestAcrossFloorTaskAsync(RequestTaskDto taskDto) |
| | | { |
| | | LogFactory.GetLog("ä»»å¡å®æ").InfoFormat(true, "ç§»åºä»»å¡å®æ", $"111111"); |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | |
| | | var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId); |
| | | DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId, Sourcelocation); |
| | | |
| | | if (Targetlocation == null || Sourcelocation == null) |
| | | { |
| | |
| | | { |
| | | var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId); |
| | | DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId,Sourcelocation); |
| | | |
| | | if (Targetlocation == null || Sourcelocation == null) |
| | | { |
| | |
| | | TargetAddress = Targetlocation.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = taskDto.TargetAddress, |
| | | NextAddress = Targetlocation.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = taskDto.Position, |
| | |
| | | }; |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | UpdateLocationStatus(Sourcelocation, LocationEnum.InStockDisable); |
| | | UpdateLocationStatus(Targetlocation, LocationEnum.Lock); |
| | | |
| | | var isResult = await AddTaskAsync(taskNew, Sourcelocation, Targetlocation); |
| | | if (!isResult) |
| | | { |
| | |
| | | return content.Error("æ°å¢ä»»å¡å¤±è´¥"); |
| | | } |
| | | |
| | | return content = await SendWCSTask(taskDTO); |
| | | //return content = await SendWCSTask(taskDTO); |
| | | return content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | TargetAddress = Targetlocation.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = taskDto.TargetAddress, |
| | | NextAddress = Targetlocation.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = taskDto.Position, |
| | |
| | | } |
| | | #endregion |
| | | |
| | | #region 夿æ¯å¦éè¦ç§»åº |
| | | |
| | | /// <summary> |
| | | /// 夿å åæºåºåºæ¯å¦éè¦ç§»åº |
| | | /// </summary> |
| | | /// <param name="taskDto"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> StackerIsNeedRelocationAsync(RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var task = BaseDal.QueryFirst(x => x.PalletCode == taskDto.PalletCode && x.TaskNum == taskDto.TaskNum); |
| | | if (task == null) |
| | | { |
| | | return content.Error("æªæ¾å°ä»»å¡"); |
| | | } |
| | | |
| | | var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | if (location == null || location.Depth != 2) |
| | | { |
| | | return content.Error("æªæ¾å°è´§ä½æè
该åºä½ä¸æ¯äºæ·±è´§ä½"); |
| | | } |
| | | |
| | | 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)) |
| | | { |
| | | return content.OK(data: _mapper.Map<WMSTaskDTO>(task)); |
| | | } |
| | | else if (locationLateral != null && (locationLateral.LocationStatus == 1 || locationLateral.EnalbeStatus == 1)) |
| | | { |
| | | return content.Error($"䏿·±ä½å¼å¸¸é宿ä¸å¯åºåº"); |
| | | } |
| | | else if (locationLateral != null && (locationLateral.LocationStatus == 2 || locationLateral.EnalbeStatus == 1)) |
| | | { |
| | | var TargetAddress = await GetEmptyLocation("SC1"); |
| | | |
| | | if (TargetAddress == null) |
| | | { |
| | | return content.Error($"æªæ¾å°å¯åé
è´§ä½,请æ¥çæ¯å¦è¿æç©ºé²å¯ä½¿ç¨è´§ä½"); |
| | | } |
| | | |
| | | //todoæ¥è¯¢å
ä¾§åºåä¿¡æ¯ |
| | | var stock = await _stockInfoRepository.QueryFirstAsync(x => x.LocationCode == locationLateral.LocationCode && x.LocationId == locationLateral.Id); |
| | | |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Roadway = "SC1", |
| | | TargetAddress = TargetAddress.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = TargetAddress.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode+"001", |
| | | SourceAddress = locationLateral.LocationCode, |
| | | CurrentAddress = locationLateral.LocationCode, |
| | | TaskState = (int)TaskRelocationStatusEnum.RelocationNew, |
| | | TaskType = (int)TaskRelocationTypeEnum.Relocation, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | Floor = "1F", |
| | | }; |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | var isResult = await AddTaskAsync(taskNew, locationLateral, TargetAddress); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("æ°å¢ä»»å¡å¤±è´¥"); |
| | | } |
| | | return content.OK(data: taskDTO); |
| | | } |
| | | else |
| | | { |
| | | return content.Error("è´§ä½å¼å¸¸é人工确认æå¯åºåº"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public async Task<WebResponseContent> AGVIsNeedRelocationAsync(RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var task = BaseDal.QueryFirst(x => x.PalletCode == taskDto.PalletCode && x.TaskNum == taskDto.TaskNum); |
| | | if (task == null) |
| | | { |
| | | return content.Error("æªæ¾å°ä»»å¡"); |
| | | } |
| | | |
| | | var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | |
| | | if (location == null) |
| | | { |
| | | return content.Error("æªæ¾å°è´§ä½æè
该åºä½ä¸æ¯äºæ·±è´§ä½"); |
| | | } |
| | | List<DtLocationInfo> locationInfos = new List<DtLocationInfo>(); |
| | | switch (location.AreaId) |
| | | { |
| | | case 2: |
| | | locationInfos = _locationRepository.QueryData(x => x.Row == location.Row && x.Column > location.Column && x.Remark == location.Remark && x.AreaId == location.AreaId); |
| | | break; |
| | | case 5: |
| | | case 6: |
| | | locationInfos = _locationRepository.QueryData(x => x.Row == location.Row && x.Column < location.Column && x.Remark == location.Remark && x.AreaId == location.AreaId); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | if (locationInfos.Count == 0) |
| | | { |
| | | return content.OK(data: new List<WMSTaskDTO> { _mapper.Map<WMSTaskDTO>(task) }); |
| | | } |
| | | |
| | | List<WMSTaskDTO> taskDTO = new List<WMSTaskDTO>(); |
| | | |
| | | foreach (var item in locationInfos) |
| | | { |
| | | if (item.LocationStatus == 0 && item.EnalbeStatus == 1) |
| | | { |
| | | continue; |
| | | } |
| | | else |
| | | { |
| | | DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(item.AreaId, item); |
| | | |
| | | if (Targetlocation == null) |
| | | { |
| | | return content.Error("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | //todoæ¥è¯¢ç§»åºåºåä¿¡æ¯ |
| | | |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = item.Column, |
| | | Roadway = "AGV", |
| | | TargetAddress = Targetlocation.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = Targetlocation.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = _random.Next(0, 10000).ToString(), |
| | | SourceAddress = item.LocationCode, |
| | | CurrentAddress = item.LocationCode, |
| | | TaskState = (int)TaskAGVCarryStatusEnum.CarryNew, |
| | | TaskType = (int)TaskAGVCarryTypeEnum.CarryReloction, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = item.Floor, |
| | | Remark = item.AreaId.ToString(), |
| | | }; |
| | | taskDTO.Add(CreateTaskDTO(taskNew)); |
| | | |
| | | var isResult = await AddTaskAsync(taskNew, item, Targetlocation); |
| | | if (!isResult) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error("æ°å¢ä»»å¡å¤±è´¥"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | return content.OK(data: taskDTO); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region è·åAGVä»»å¡å· |
| | | |
| | |
| | | return $"{timestamp}{randomPart}"; |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | #endregion å¤é¨æ¥å£æ¹æ³ |
| | | |
| | |
| | | #endregion |
| | | |
| | | #region å
é¨è°ç¨æ¹æ³ |
| | | |
| | | public void UpdateLocationStatus(DtLocationInfo location, LocationEnum locationStatus) |
| | | { |
| | | List<DtLocationInfo> locations = GetGroupLocations(location); |
| | | |
| | | List<DtLocationInfo> Beforelocation = locations; |
| | | |
| | | foreach (var item in locations) |
| | | { |
| | | if (locationStatus == LocationEnum.Lock) |
| | | { |
| | | if (item.LocationCode == location.LocationCode) |
| | | { |
| | | 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) |
| | | { |
| | | if (item.LocationStatus == (int)LocationEnum.InStock) |
| | | { |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | |
| | | _locationRepository.UpdateData(locations); |
| | | } |
| | | |
| | | public List<DtLocationInfo> GetGroupLocations(DtLocationInfo location) |
| | | { |
| | | List<DtLocationInfo> locationInfos = _locationRepository.QueryData(x => x.AreaId == location.AreaId); |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>() { location }; |
| | | if (location.AreaId == 1) |
| | | { |
| | | if (location.Depth == 2) |
| | | { |
| | | DtLocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == 1 && x.Column == location.Column && x.Layer == location.Layer && x.Row == 1); |
| | | if (locationInfo != null) |
| | | { |
| | | locations.Add(locationInfo); |
| | | } |
| | | } |
| | | } |
| | | else if (location.AreaId == 2) |
| | | { |
| | | var locationLateral = _locationRepository.QueryData(x => x.Row == location.Row && x.Column > location.Column && x.Remark == location.Remark); |
| | | if (locationLateral.Count > 0) |
| | | { |
| | | locations.AddRange(locationLateral); |
| | | } |
| | | } |
| | | 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); |
| | | if (locationLateral.Count > 0) |
| | | { |
| | | locations.AddRange(locationLateral); |
| | | } |
| | | } |
| | | return locations; |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å建任å¡DTO |
| | |
| | | Id = 0, |
| | | TaskType = task.TaskType, |
| | | AGVTaskNum = task.AGVTaskNum, |
| | | Remark= task.Remark |
| | | }; |
| | | } |
| | | |
| | |
| | | return isResult && Source && Target; |
| | | } |
| | | |
| | | private async Task<bool> AddInBoundTaskAsync(Dt_Task task, DtLocationInfo location) |
| | | { |
| | | bool isResult = await BaseDal.AddDataAsync(task) > 0; |
| | | int beforeStatus = location.LocationStatus; |
| | | |
| | | location.LocationStatus = (int)LocationEnum.InStockDisable; |
| | | |
| | | LocationChangeRecordDto changeRecordDto = new LocationChangeRecordDto() |
| | | { |
| | | AfterStatus = location.LocationStatus, |
| | | BeforeStatus = beforeStatus, |
| | | TaskNum = task.TaskNum.Value, |
| | | LocationId = location.Id, |
| | | LocationCode = location.LocationCode, |
| | | ChangeType = (int)StatusChangeTypeEnum.AutomaticStorage, |
| | | |
| | | }; |
| | | |
| | | bool isUpdateChange = _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto); |
| | | bool loc = await _locationRepository.UpdateDataAsync(location); |
| | | |
| | | return isResult && loc; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åè´§ä½å· |
| | | /// </summary> |
| | |
| | | { |
| | | try |
| | | { |
| | | List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.RoadwayNo == "SC1" && x.LocationStatus == 0 && x.EnalbeStatus == 1); |
| | | List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.RoadwayNo == "SC1" && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1); |
| | | List<DtLocationInfo> locationInfos = new List<DtLocationInfo>(); |
| | | var locationInside = locations.Where(x => x.Row == 3).ToList(); |
| | | |
| | | if (locations.Where(x => x.Row == 2).ToList().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault() != null) |
| | | if (locations.Where(x => x.Row == 2).OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault() != null) |
| | | { |
| | | return locations.Where(x => x.Row == 2).ToList().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault(); |
| | | } |
| | | else if (locations.Where(x => x.Row == 3).ToList().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault() != null) |
| | | else if (locationInside.Count > 0) |
| | | { |
| | | return locations.Where(x => x.Row == 3).ToList().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault(); |
| | | foreach (var item in locationInside) |
| | | { |
| | | var locationLateral = _locationRepository.QueryFirst(x => x.Row == 1 && x.Layer == item.Layer && x.Column == item.Column); |
| | | if (locationLateral.LocationStatus == (int)LocationEnum.Free && locationLateral.EnalbeStatus == 1) |
| | | { |
| | | locationInfos.Add(item); |
| | | } |
| | | } |
| | | |
| | | return locationInfos.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) |
| | | { |
| | | return locations.Where(x => x.Row == 1).OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault(); |
| | | } |
| | | else |
| | | { |
| | | return locations.Where(x => x.Row == 1).ToList().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault(); |
| | | return null; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | } |
| | | } |
| | | |
| | | public async Task<DtLocationInfo> GetAGVEmptyCacheLocation(int AreaId) |
| | | public async Task<DtLocationInfo> GetAGVEmptyCacheLocation(int AreaId, DtLocationInfo loc) |
| | | { |
| | | try |
| | | { |
| | |
| | | switch (AreaId) |
| | | { |
| | | case 2: |
| | | location = await FromShallowToDeep(AreaId); |
| | | location = await FromShallowToDeep(AreaId, loc); |
| | | break; |
| | | case 3: |
| | | case 3: |
| | | location = await AGVLIKU(AreaId); |
| | | break; |
| | | case 5: |
| | | case 6: |
| | | location = await FromDeepToShallow(AreaId); |
| | | location = await FromDeepToShallow(AreaId, loc); |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message) ; |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | |
| | | /// </summary> |
| | | /// <param name="AreaId"></param> |
| | | /// <returns></returns> |
| | | public async Task<DtLocationInfo> FromDeepToShallow(int AreaId) |
| | | public async Task<DtLocationInfo> FromDeepToShallow(int AreaId, DtLocationInfo loc) |
| | | { |
| | | try |
| | | { |
| | | List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == 0 && x.EnalbeStatus == 1); |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | |
| | | var location = locations.OrderByDescending(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1 && x.Row != loc.Row); |
| | | |
| | | return location; |
| | | 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); |
| | | foreach (var lateral in locationLateral) |
| | | { |
| | | if (lateral.LocationStatus == (int)LocationEnum.Free && lateral.EnalbeStatus == 1) |
| | | { |
| | | locationInfos.Add(item); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return locationInfos.OrderByDescending(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | /// </summary> |
| | | /// <param name="AreaId"></param> |
| | | /// <returns></returns> |
| | | public async Task<DtLocationInfo> FromShallowToDeep(int AreaId) |
| | | public async Task<DtLocationInfo> FromShallowToDeep(int AreaId, DtLocationInfo loc) |
| | | { |
| | | try |
| | | { |
| | | List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == 0 && x.EnalbeStatus == 1); |
| | | var location = locations.OrderBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | return location; |
| | | 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 (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); |
| | | foreach (var Lateral in locationLateral) |
| | | { |
| | | if (Lateral.LocationStatus == (int)LocationEnum.Free && Lateral.EnalbeStatus == 1) |
| | | { |
| | | locationInfos.Add(item); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return locationInfos.OrderBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | } |
| | | catch (Exception ex) |
| | | { |