| | |
| | | using SixLabors.Fonts.Tables.AdvancedTypographic; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.Linq.Expressions; |
| | | using System.Reflection; |
| | |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_Model.Models.Basic; |
| | | using WIDESEA_Model.Models.ERP; |
| | | using WIDESEA_OrderRepository; |
| | | using WIDESEA_StorageTaskRepository; |
| | | using WIDESEAWCS_BasicInfoRepository; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using static System.Collections.Specialized.BitVector32; |
| | |
| | | private readonly IDt_AreaInfoRepository _areaInfoRepository; //åºå |
| | | private readonly IDt_StationManagerRepository _stationManagerRepository; |
| | | private readonly ISys_ConfigService _configService; |
| | | private readonly IDt_OutboundOrderRepository _outorderRepository; |
| | | private readonly IDt_OutboundOrderDetailRepository _outorderdetailRepository; |
| | | |
| | | public Dt_TaskService(IDt_TaskRepository BaseDal, |
| | | IUnitOfWorkManage unitOfWorkManage, |
| | |
| | | IDt_AreaInfoRepository areaInfoRepository, |
| | | IStockInfoDetailRepository stockInfoDetailRepository, |
| | | IDt_StationManagerRepository stationManagerRepository, |
| | | ISys_ConfigService configService, |
| | | IDt_OutboundOrderRepository outorderRepository, |
| | | IDt_OutboundOrderDetailRepository outorderdetailRepository) : base(BaseDal) |
| | | ISys_ConfigService configService) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _stockInfoRepository = stockInfoRepository; |
| | |
| | | _stockInfoDetailRepository = stockInfoDetailRepository; |
| | | _stationManagerRepository = stationManagerRepository; |
| | | _configService = configService; |
| | | _outorderRepository = outorderRepository; |
| | | _outorderdetailRepository = outorderdetailRepository; |
| | | } |
| | | |
| | | #region å¤é¨æ¥å£æ¹æ³ |
| | |
| | | taskHty.FinishTime = DateTime.Now; |
| | | taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.äººå·¥å®æ : (int)OperateTypeEnum.èªå¨å®æ; |
| | | taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System"; |
| | | |
| | | //DtStockInfo_Hty stockInfo_Hty = stock.Adapt<DtStockInfo_Hty>(); |
| | | //stockInfo_Hty.ModifyDate = DateTime.Now; |
| | | 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); |
| | | |
| | | DtStockInfo_Hty stockInfo_Hty = null; |
| | | if (task.TaskType != (int)TaskOutboundTypeEnum.Outbound) |
| | | { |
| | | var stockDetailsToRemove = new List<DtStockInfoDetail>(); |
| | | |
| | | // å¤çåºåæç» |
| | | if (stock.StockInfoDetails == null || !stock.StockInfoDetails.Any()) |
| | | { |
| | | // å½åºåæç»ä¸ºç©ºæ¶ï¼å°æ´ä¸ªåºåç§»å
¥åå²è¡¨ |
| | | stockInfo_Hty = CreateStockInfoHty(stock, null, true); |
| | | } |
| | | else |
| | | { |
| | | foreach (var item in stock.StockInfoDetails.ToList()) |
| | | { |
| | | if (item.OutboundQuantity <= 0 || item.OutboundQuantity > item.Quantity) |
| | | { |
| | | throw new Exception($"åºåºæ°éå¼å¸¸ï¼ç©æ {item.MaterielCode} çåºåºæ°é {item.OutboundQuantity} ä¸åæ³"); |
| | | } |
| | | |
| | | if (item.OutboundQuantity == item.Quantity) |
| | | { |
| | | // å®å
¨åºåºï¼ç§»å
¥åå²è¡¨ |
| | | if (stockInfo_Hty == null) |
| | | { |
| | | stockInfo_Hty = CreateStockInfoHty(stock, new List<DtStockInfoDetail> { item }, false); |
| | | } |
| | | else |
| | | { |
| | | stockInfo_Hty.StockInfoDetails.Add(CreateStockInfoDetailHty(item)); |
| | | } |
| | | stockDetailsToRemove.Add(item); |
| | | } |
| | | else if (item.OutboundQuantity < item.Quantity && item.OutboundQuantity > 0) |
| | | { |
| | | // é¨ååºåºï¼æ´æ°æ°é |
| | | item.Quantity -= item.OutboundQuantity; |
| | | item.OutboundQuantity = 0; // éç½®åºåºæ°é |
| | | } |
| | | } |
| | | |
| | | // ç§»é¤å·²å®å
¨åºåºçæç» |
| | | foreach (var item in stockDetailsToRemove) |
| | | { |
| | | stock.StockInfoDetails.Remove(item); |
| | | } |
| | | } |
| | | } |
| | | |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | //await DeleteStockInfoAsync(stock.Id); |
| | | //await DeleteStockInfoDetailsAsync(stock.StockInfoDetails); |
| | | //await AddStockInfoHtyAsync(stockInfo_Hty); |
| | | _stockInfoRepository.UpdateData(stock); |
| | | // 妿åºåæç»å
¨é¨åºåºå®æ¯ï¼å é¤ååºåè®°å½ |
| | | if (stock.StockInfoDetails == null || !stock.StockInfoDetails.Any()) |
| | | { |
| | | await _stockInfoRepository.DeleteDataAsync(stock); |
| | | } |
| | | else |
| | | { |
| | | _stockInfoRepository.UpdateData(stock); |
| | | } |
| | | // æ·»å åå²è®°å½ |
| | | if (stockInfo_Hty != null) |
| | | { |
| | | await AddStockInfoHtyAsync(stockInfo_Hty); |
| | | } |
| | | |
| | | UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1); |
| | | await _locationRepository.UpdateDataAsync(result1.Item2); |
| | | await _locationRepository.UpdateDataAsync(result2.Item2); |
| | | |
| | | await DeleteTaskAsync(task.TaskId); |
| | | await AddTaskHtyAsync(taskHty); |
| | | }); |
| | | content.OK("åºåºå®æ"); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | return content; |
| | | } |
| | | |
| | | |
| | | private DtStockInfo_Hty CreateStockInfoHty(DtStockInfo stock, List<DtStockInfoDetail> details, bool isFullExit) |
| | | { |
| | | var stockInfoHty = new DtStockInfo_Hty() |
| | | { |
| | | PalletCode = stock.PalletCode, |
| | | LocationCode = stock.LocationCode, |
| | | IsFullExit = isFullExit, |
| | | StockStatus = stock.StockStatus, |
| | | OrderNo = stock.OrderNo, |
| | | OrderType = stock.OrderType, |
| | | Remark = stock.Remark, |
| | | StockInfoDetails = new List<DtStockInfoDetail_Hty>() |
| | | }; |
| | | |
| | | if (details != null) |
| | | { |
| | | foreach (var detail in details) |
| | | { |
| | | stockInfoHty.StockInfoDetails.Add(CreateStockInfoDetailHty(detail)); |
| | | } |
| | | } |
| | | |
| | | return stockInfoHty; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å建åºåæç»åå²è®°å½ |
| | | /// </summary> |
| | | private DtStockInfoDetail_Hty CreateStockInfoDetailHty(DtStockInfoDetail detail) |
| | | { |
| | | return new DtStockInfoDetail_Hty |
| | | { |
| | | MaterielCode = detail.MaterielCode, |
| | | MaterielName = detail.MaterielName, |
| | | DemandClassification = detail.DemandClassification, |
| | | Warehouse = detail.Warehouse, |
| | | OrderNo = detail.OrderNo, |
| | | Unit = detail.Unit, |
| | | Specs = detail.Specs, |
| | | Weight = detail.Weight, |
| | | Quantity = detail.Quantity, |
| | | OutboundQuantity = detail.OutboundQuantity, |
| | | Status = detail.Status, |
| | | DrawingNumber = detail.DrawingNumber, |
| | | Date = detail.Date, |
| | | Remark = detail.Remark |
| | | }; |
| | | } |
| | | |
| | | #endregion åºåºä»»å¡å®æ |
| | | |
| | |
| | | |
| | | stock.ModifyDate = DateTime.Now; |
| | | stock.LocationCode = task.TargetAddress; |
| | | |
| | | var result = UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticRelocation); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | //UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticRelocation); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1); |
| | | await _locationRepository.UpdateDataAsync(result.Item2); |
| | | _stockInfoRepository.UpdateData(stock); |
| | | await DeleteTaskAsync(task.TaskId); |
| | | await AddTaskHtyAsync(taskHty); |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode && x.StockStatus == (int)StockStateEmun.ç»çæå); |
| | | 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 (stock == null) |
| | | if (boxinfo == null) |
| | | { |
| | | return content.Error("æªæ¾å°ç»çæ°æ®"); |
| | | } |
| | | stock.LocationCode = task.TargetAddress; |
| | | stock.StockStatus = (int)StockStateEmun.å·²å
¥åº; |
| | | |
| | | var stock = CreateStock(boxinfo, task); |
| | | |
| | | task.TaskState = (int)TaskInStatusEnum.InFinish; |
| | | var taskHty = task.Adapt<Dt_Task_Hty>(); |
| | |
| | | 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.InStockDisable, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | var result2 = UpdateLocationStatus(task.TargetAddress, LocationEnum.Lock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await _stockInfoRepository.UpdateDataAsync(stock); |
| | | await _stockInfoRepository.AddDataNavAsync(stock); |
| | | await DeleteTaskAsync(task.TaskId); |
| | | await AddTaskHtyAsync(taskHty); |
| | | UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1); |
| | | await _locationRepository.UpdateDataAsync(result2.Item2); |
| | | await _locationRepository.UpdateDataAsync(result1.Item2); |
| | | }); |
| | | content.OK("å
¥åºå®æ"); |
| | | } |
| | |
| | | return content; |
| | | } |
| | | |
| | | |
| | | public DtStockInfo CreateStock(DtBoxingInfo boxingInfo,Dt_Task task) |
| | | { |
| | | var boxDetail = boxingInfo.BoxingInfoDetails.Adapt<List<DtStockInfoDetail>>(); |
| | | boxDetail.ForEach(x => { x.Status = (int)StockStateEmun.å·²å
¥åº; }); |
| | | return new DtStockInfo() |
| | | { |
| | | PalletCode = task.PalletCode, |
| | | LocationCode = task.TargetAddress, |
| | | CreateDate = DateTime.Now, |
| | | Creater = "system", |
| | | IsFullExit = boxingInfo.IsFullExit, |
| | | StockInfoDetails = boxDetail, |
| | | StockStatus = (int)StockStateEmun.å·²å
¥åº |
| | | }; |
| | | } |
| | | #endregion å
¥åºä»»å¡å®æ |
| | | |
| | | #region AGVæ¬è¿ä»»å¡å®æ |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == taskDto.PalletCode && x.StockStatus == (int)StockStateEmun.ç»çæå); |
| | | if (stock == null) |
| | | var boxingInfo = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == taskDto.PalletCode && x.StockStatus == (int)StockStateEmun.ç»çæå); |
| | | |
| | | if (boxingInfo == null) |
| | | { |
| | | return content.Error("æçä¿¡æ¯ä¸åå¨ï¼è¯·ç¡®è®¤æçå·²ç»çæå"); |
| | | } |
| | |
| | | { |
| | | return content.Error($"èµ·ç¹åºä½{StartAddress.LocationCode}æ¬è¿è·¯å¾è¢«å ç¨ï¼è¯·äººå·¥ç¡®è®¤åä¸åä»»å¡"); |
| | | } |
| | | Dt_Task taskNew = new Dt_Task(); |
| | | DtLocationInfo Endlocation= new DtLocationInfo(); |
| | | if (taskDto.AreaId != 0) |
| | | { |
| | | switch (taskDto.AreaId) |
| | | { |
| | | case 1: |
| | | return await InboundStakerArea(taskDto, StartAddress); |
| | | Endlocation = await GetEmptyLocation("SC1"); |
| | | taskNew = InboundStakerArea(taskDto, StartAddress, Endlocation); |
| | | break; |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | case 6: |
| | | return await InboundAGVCacheArea(taskDto, StartAddress, await GetAGVEmptyCacheLocation(taskDto.AreaId, StartAddress)); |
| | | Endlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId, StartAddress); |
| | | taskNew = InboundAGVCacheArea(taskDto, StartAddress, Endlocation); |
| | | break; |
| | | 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) |
| | | Endlocation = _locationRepository.QueryFirst(x => x.LocationCode == taskDto.TargetAddress); |
| | | if (Endlocation != null && Endlocation.LocationStatus == (int)LocationEnum.Free && Endlocation.EnalbeStatus == 1) |
| | | { |
| | | switch (location.AreaId) |
| | | switch (Endlocation.AreaId) |
| | | { |
| | | case 1: |
| | | return await InboundStakerArea(taskDto, StartAddress); |
| | | taskNew = InboundStakerArea(taskDto, StartAddress, Endlocation); |
| | | break; |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | case 6: |
| | | return await InboundAGVCacheArea(taskDto, StartAddress, location); |
| | | taskNew = InboundAGVCacheArea(taskDto, StartAddress, Endlocation); |
| | | break; |
| | | default: |
| | | return content.Error("è´§ä½åºåæªæ¾å°"); |
| | | } |
| | |
| | | } |
| | | else |
| | | { |
| | | return content.OK("è¯·éæ©å
¥åºåºåæç»ç¹å°å"); |
| | | return content.Error("è¯·éæ©å
¥åºåºåæç»ç¹å°å"); |
| | | } |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | var result1 = UpdateLocationStatus(StartAddress, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | var result2 = UpdateLocationStatus(Endlocation, 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); |
| | | BaseDal.AddData(taskNew); |
| | | }); |
| | | //return content = await SendWCSTask(taskDTO); |
| | | return content.OK("æå"); |
| | | } |
| | | catch (Exception err) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | public async Task<WebResponseContent> InboundStakerArea(RequestTaskDto taskDto,DtLocationInfo StartAddress) |
| | | public Dt_Task InboundStakerArea(RequestTaskDto taskDto, DtLocationInfo StartAddress,DtLocationInfo EndLocation) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1"); |
| | | if (EndLocation == null) |
| | | { |
| | | var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1"); |
| | | |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = 1, |
| | | Roadway = "SC1", |
| | | TargetAddress = "SC1", |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = station.stationChildCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = taskDto.Position, |
| | | CurrentAddress = taskDto.Position, |
| | | TaskState = (int)TaskInStatusEnum.InNew, |
| | | TaskType = (int)TaskInboundTypeEnum.Inbound, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = "1F", |
| | | }; |
| | | var taskDTO = CreateListTaskDTO(taskNew); |
| | | |
| | | 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); |
| | | throw new Exception("æ æ³è·åè´§ä½ä¿¡æ¯"); |
| | | } |
| | | catch (Exception ex) |
| | | return new Dt_Task |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error(ex.Message); |
| | | } |
| | | Grade = 1, |
| | | Roadway = "SC1", |
| | | TargetAddress = EndLocation.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = station.stationChildCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = taskDto.Position, |
| | | CurrentAddress = taskDto.Position, |
| | | TaskState = (int)TaskInStatusEnum.InNew, |
| | | TaskType = (int)TaskInboundTypeEnum.Inbound, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = "1F", |
| | | }; |
| | | } |
| | | |
| | | public async Task<WebResponseContent> InboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | public Dt_Task InboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | |
| | | if (location == null) |
| | | { |
| | | 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); |
| | | throw new Exception("æ æ³è·åè´§ä½ä¿¡æ¯"); |
| | | } |
| | | catch (Exception ex) |
| | | Dt_Task taskNew = new Dt_Task(); |
| | | if (StartAddress.Floor != location.Floor) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error(ex.Message); |
| | | taskNew = RequestAcrossFloorTask(StartAddress, location, (int)TaskInboundTypeEnum.Inbound, taskDto); |
| | | } |
| | | else |
| | | { |
| | | taskNew = RequestAGVCarryTask(StartAddress, location, (int)TaskInboundTypeEnum.Inbound, taskDto); |
| | | } |
| | | return taskNew; |
| | | |
| | | } |
| | | #endregion 请æ±ä»»å¡å
¥åº |
| | | |
| | |
| | | #endregion |
| | | |
| | | #region 请æ±åºåº |
| | | public async Task<WebResponseContent> OtherOutBoundTaskAsync(string palletCode) |
| | | public async Task<WebResponseContent> OutBoundTaskAsync(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | DtStockInfo stcok = await _stockInfoRepository.QueryFirstAsync(x => x.PalletCode == palletCode); |
| | | DtStockInfo stcok = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode); |
| | | if (stcok == null) |
| | | { |
| | | return content.Error("æçä¿¡æ¯ä¸åå¨ï¼è¯·ç¡®è®¤æçå·²å
¥åºæå"); |
| | | } |
| | | |
| | | if (stcok.LocationInfo.LocationStatus != (int)LocationEnum.InStock) |
| | | { |
| | | return content.Error("请确认åºåè´§ä½ç¶ææ¯å¦ä¸ºæè´§"); |
| | | } |
| | | var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode); |
| | | if (task != null) |
| | | { |
| | | return content.Error("该æçå·²åå¨ä»»å¡"); |
| | | } |
| | | |
| | | var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == stcok.LocationCode); |
| | | if (location.AreaId == 2) |
| | | { |
| | | return content.Error("该æçåºåå·²å¨åºåºç¼ååº"); |
| | | } |
| | | return await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = palletCode, AreaId = 2, Position = stcok.LocationCode ,TaskType = (int)TaskOutboundTypeEnum.OutOther }); |
| | | |
| | | Dt_Task taskNew = await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = palletCode, AreaId = 2, Position = stcok.LocationCode, TaskType = (int)TaskOutboundTypeEnum.Outbound }); |
| | | |
| | | var taskDto = CreateListTaskDTO(taskNew); |
| | | var result = GetlcoationState(taskNew, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | BaseDal.AddData(taskNew); |
| | | _stockInfoRepository.UpdateData(stcok); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1); |
| | | await _locationRepository.UpdateDataAsync(result.Item2); |
| | | }); |
| | | return content = await SendWCSTask(taskDto); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public (List<DtLocationStatusChangeRecord>,List<DtLocationInfo>) GetlcoationState(Dt_Task task,int 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); |
| | | |
| | | 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> |
| | | /// <param name="taskDto"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> RequestOutboundTaskAsync(RequestTaskDto taskDto) |
| | | public async Task<Dt_Task> RequestOutboundTaskAsync(RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | DtStockInfo stcok = await _stockInfoRepository.QueryFirstAsync(x => x.PalletCode == taskDto.PalletCode); |
| | | if (stcok == null) |
| | | { |
| | | DtStockInfo stcok = await _stockInfoRepository.QueryFirstAsync(x => x.PalletCode == taskDto.PalletCode); |
| | | if (stcok == null) |
| | | { |
| | | return content.Error("æçä¿¡æ¯ä¸åå¨ï¼è¯·ç¡®è®¤æçå·²å
¥åºæå"); |
| | | } |
| | | throw new Exception("æçä¿¡æ¯ä¸åå¨ï¼è¯·ç¡®è®¤æçå·²å
¥åºæå"); |
| | | } |
| | | |
| | | var StartAddress = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | if (StartAddress == null) |
| | | var StartAddress = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | if (StartAddress == null) |
| | | { |
| | | throw new Exception("èµ·ç¹åºä½æªæ¾å°"); |
| | | } |
| | | if (!LocationIsOutBound(StartAddress)) |
| | | { |
| | | throw new Exception($"èµ·ç¹åºä½{StartAddress.LocationCode}åºåºè·¯å¾è¢«å ç¨ï¼è¯·äººå·¥ç¡®è®¤åä¸åä»»å¡"); |
| | | } |
| | | DtLocationInfo location = null; |
| | | if (taskDto.AreaId != 0) |
| | | { |
| | | if (taskDto.AreaId == 1) |
| | | { |
| | | 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("ç®æ åºä½ä¸å¯ç¨"); |
| | | } |
| | | location = await GetEmptyLocation("SC1"); |
| | | } |
| | | else |
| | | { |
| | | return content.OK("è¯·éæ©å
¥åºåºåæç»ç¹å°å"); |
| | | location = await GetAGVEmptyCacheLocation(taskDto.AreaId, StartAddress); |
| | | } |
| | | |
| | | switch (StartAddress.AreaId) |
| | | } |
| | | else if (taskDto.TargetAddress != null) |
| | | { |
| | | location = _locationRepository.QueryFirst(x => x.LocationCode == taskDto.TargetAddress); |
| | | |
| | | if (location != null && location.LocationStatus != (int)LocationEnum.Free && location.EnalbeStatus == 1) |
| | | { |
| | | 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("è¯·éæ©æ£ç¡®çåºåä¿¡æ¯"); |
| | | throw new Exception("ç®æ åºä½ä¸å¯ç¨"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | else |
| | | { |
| | | return content.Error(ex.Message); |
| | | throw new Exception("è¯·éæ©å
¥åºåºåæç»ç¹å°å"); |
| | | } |
| | | switch (StartAddress.AreaId) |
| | | { |
| | | case 1: |
| | | return OutboundStakerArea(taskDto, StartAddress, location); |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | case 6: |
| | | return OutboundAGVCacheArea(taskDto, StartAddress, location); |
| | | default: |
| | | throw new Exception("è¯·éæ©æ£ç¡®çåºåä¿¡æ¯"); |
| | | } |
| | | } |
| | | |
| | | public async Task<WebResponseContent> OutboundStakerArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | |
| | | public Dt_Task OutboundStakerArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1"); |
| | | |
| | | if (location == null) |
| | | { |
| | | var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1"); |
| | | |
| | | if (location == null) |
| | | { |
| | | return content.Error("ç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | |
| | | if (location.AreaId == 5 || location.AreaId == 6) |
| | | { |
| | | return content.Error("å½ååºåä¸å¯åºåºï¼è¯·è系管çå"); |
| | | } |
| | | Dt_Task taskNew = new Dt_Task |
| | | { |
| | | Grade = Convert.ToInt32(StartAddress.Remark), |
| | | Roadway = "SC1", |
| | | TargetAddress = location.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = station.stationChildCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = taskDto.Position, |
| | | CurrentAddress = taskDto.Position, |
| | | TaskState = (int)TaskOutStatusEnum.OutNew, |
| | | TaskType = taskDto.TaskType, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = "1F", |
| | | }; |
| | | 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); |
| | | throw new Exception("ç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | catch (Exception ex) |
| | | |
| | | if (location.AreaId == 5 || location.AreaId == 6) |
| | | { |
| | | return content.Error(ex.Message); |
| | | throw new Exception("å½ååºåä¸å¯åºåºï¼è¯·è系管çå"); |
| | | } |
| | | return new Dt_Task |
| | | { |
| | | Grade = Convert.ToInt32(StartAddress.Remark), |
| | | Roadway = "SC1", |
| | | TargetAddress = location.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = taskDto.MaterielCode, |
| | | NextAddress = station.stationChildCode, |
| | | OrderNo = taskDto.OrderNo, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = taskDto.Position, |
| | | CurrentAddress = taskDto.Position, |
| | | TaskState = (int)TaskOutStatusEnum.OutNew, |
| | | TaskType = taskDto.TaskType, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = "1F", |
| | | }; |
| | | } |
| | | |
| | | public async Task<WebResponseContent> OutboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | public Dt_Task OutboundAGVCacheArea(RequestTaskDto taskDto, DtLocationInfo StartAddress, DtLocationInfo location) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | if (location == null) |
| | | { |
| | | 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); |
| | | throw new Exception("èµ·ç¹æªå®ä¹æç»ç¹åºåæªæ¾å°ç©ºé²åºä½"); |
| | | } |
| | | catch (Exception ex) |
| | | Dt_Task taskNew = new Dt_Task(); |
| | | if (StartAddress.Floor != location.Floor) |
| | | { |
| | | return content.Error(ex.Message); |
| | | taskNew = RequestAcrossFloorTask(StartAddress, location, taskDto.TaskType, taskDto); |
| | | } |
| | | else |
| | | { |
| | | taskNew = RequestAGVCarryTask(StartAddress, location, taskDto.TaskType, taskDto); |
| | | } |
| | | return taskNew; |
| | | |
| | | } |
| | | #endregion 请æ±åºåºï¼å®ç&空çï¼ |
| | | |
| | |
| | | #endregion |
| | | |
| | | #region 请æ±è·¨æ¥¼å±ä»»å¡ |
| | | public Dt_Task RequestAcrossFloorTask(DtLocationInfo StartAddress,DtLocationInfo EndAddress,int TaskType,string palletCode) |
| | | public Dt_Task RequestAcrossFloorTask(DtLocationInfo StartAddress, DtLocationInfo EndAddress, int TaskType, RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | |
| | | var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == StartAddress.Floor); |
| | | return new Dt_Task |
| | | { |
| | | var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == StartAddress.Floor); |
| | | return new Dt_Task |
| | | { |
| | | 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 null; |
| | | } |
| | | Grade = StartAddress.Column, |
| | | Roadway = "AGV", |
| | | TargetAddress = EndAddress.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = taskDto.MaterielCode, |
| | | NextAddress = next.stationChildCode, |
| | | OrderNo = taskDto.OrderNo, |
| | | PalletCode = taskDto.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, |
| | | }; |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | #region 请æ±AGVæ¬è¿ä»»å¡ |
| | | public Dt_Task RequestAGVCarryTask(DtLocationInfo StartAddress, DtLocationInfo EndAddress, int TaskType, string palletCode) |
| | | public Dt_Task RequestAGVCarryTask(DtLocationInfo StartAddress, DtLocationInfo EndAddress, int TaskType, RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | |
| | | return new Dt_Task |
| | | { |
| | | return new Dt_Task |
| | | { |
| | | Grade = StartAddress.Column, |
| | | Roadway = "AGV", |
| | | TargetAddress = EndAddress.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | NextAddress = EndAddress.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = palletCode, |
| | | SourceAddress = StartAddress.LocationCode, |
| | | CurrentAddress = StartAddress.LocationCode, |
| | | TaskState = (int)TaskAGVCarryStatusEnum.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 null; |
| | | } |
| | | Grade = StartAddress.Column, |
| | | Roadway = "AGV", |
| | | TargetAddress = EndAddress.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = taskDto.MaterielCode, |
| | | NextAddress = EndAddress.LocationCode, |
| | | OrderNo = taskDto.OrderNo, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = StartAddress.LocationCode, |
| | | CurrentAddress = StartAddress.LocationCode, |
| | | TaskState = (int)TaskAGVCarryStatusEnum.CarryNew, |
| | | TaskType = TaskType, |
| | | TaskNum = BaseDal.GetTaskNo().Result, |
| | | CreateDate = DateTime.Now, |
| | | TaskId = 0, |
| | | Remark = StartAddress.AreaId.ToString(), |
| | | AGVTaskNum = GenerateUniqueId(), |
| | | Floor = StartAddress.Floor, |
| | | }; |
| | | } |
| | | |
| | | #endregion |
| | |
| | | return wcsBasez + address; |
| | | } |
| | | |
| | | public async Task<WebResponseContent> SendERPTaskCompletion(string palletCode) |
| | | /// <summary> |
| | | /// çäº§é¢æ |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> ERPProduction(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | DtStockInfo stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode); |
| | | Dt_Task task = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode); |
| | | MaterialRequisition allocate = new MaterialRequisition |
| | | { |
| | | context = new Context |
| | | { |
| | | CultureName = "zh-CN", |
| | | EntCode = "001", |
| | | OrgCode = "102", |
| | | UserCode = "MH0551" |
| | | }, |
| | | documentTypeCode = "TransIn002", |
| | | businessDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | isApproved = true, |
| | | |
| | | issueList = new List<issueList>() |
| | | { |
| | | new issueList |
| | | { |
| | | //夿ID |
| | | PickListID = task.OrderNo, |
| | | //åå¨å°ç¹ |
| | | WhCode = "204", |
| | | //颿æ°é |
| | | IssueQty = task.OrderNo, |
| | | } |
| | | } |
| | | }; |
| | | return content.OK(data: allocate); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// è°æ¨ |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> ERPAllocate(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | |
| | | businessDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | isApproved = true, |
| | | |
| | | transferInList = stock.StockInfoDetails.Select(item => new transferInList |
| | | transferInList = stock.StockInfoDetails.Where(x => x.OutboundQuantity > 0).Select(item => new transferInList |
| | | { |
| | | //ç©æç¼ç |
| | | ItemCode = item.MaterielCode, |
| | | //è°å
¥ä»åºå°å |
| | | TransInWHCode = item.Remark==""? item.Warehouse: item.Remark, |
| | | //è°å
¥æ°é |
| | | TransInQty = item.OutboundQuantity, |
| | | // è°åºä»åºç¼ç |
| | | TransOutWHCode = "201", |
| | | }).ToList() |
| | | }; |
| | | return content.OK(data: allocate); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// æå |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> ERPMixedSend(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | DtStockInfo stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode); |
| | | MixedSend send = new MixedSend |
| | | { |
| | | context = new Context |
| | | { |
| | | CultureName = "zh-CN", |
| | | EntCode = "001", |
| | | OrgCode = "102", |
| | | UserCode = "MH0551" |
| | | }, |
| | | documentTypeCode = "TransIn002", |
| | | businessDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | isApproved = true, |
| | | |
| | | miscShipList = stock.StockInfoDetails.Where(x => x.OutboundQuantity > 0).Select(item => new miscShipList |
| | | { |
| | | //ç©æç¼ç |
| | | ItemCode = item.MaterielCode, |
| | | //åå¨å°ç¹ç¼å· |
| | | WhCode = item.Warehouse, |
| | | //æåæ°é |
| | | Qty = item.OutboundQuantity, |
| | | BenefitDeptCode = "0505", |
| | | }).ToList() |
| | | }; |
| | | return content.OK(data: send); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// ææ¶ |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> ERPMixedReceive(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | DtStockInfo stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode); |
| | | MixedReceive allocate = new MixedReceive |
| | | { |
| | | context = new Context |
| | | { |
| | | CultureName = "zh-CN", |
| | | EntCode = "001", |
| | | OrgCode = "102", |
| | | UserCode = "MH0551" |
| | | }, |
| | | documentTypeCode = "TransIn002", |
| | | businessDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | isApproved = true, |
| | | |
| | | miscRcvList = stock.StockInfoDetails.Where(x => x.OutboundQuantity > 0).Select(item => new miscRcvList |
| | | { |
| | | ItemCode = item.MaterielCode, |
| | | TransInWHCode = item.Warehouse, |
| | | TransInQty = item.Quantity, |
| | | TransOutWHCode = "001", |
| | | WhCode = item.Warehouse, |
| | | Qty = item.OutboundQuantity, |
| | | CostPrice = 0, |
| | | }).ToList() |
| | | }; |
| | | return content.OK(data: allocate); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// éæ |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> ERPreturnMaterialList(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | DtStockInfo stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode); |
| | | ReturnMaterials allocate = new ReturnMaterials |
| | | { |
| | | context = new Context |
| | | { |
| | | CultureName = "zh-CN", |
| | | EntCode = "001", |
| | | OrgCode = "102", |
| | | UserCode = "MH0551" |
| | | }, |
| | | documentTypeCode = "TransIn002", |
| | | businessDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | isApproved = true, |
| | | |
| | | returnMaterialList = stock.StockInfoDetails.Select(item => new returnMaterialList |
| | | { |
| | | PickListID = item.MaterielCode, |
| | | WhCode = item.Warehouse, |
| | | RecedeQty = item.OutboundQuantity, |
| | | RecedeReason = 1, |
| | | }).ToList() |
| | | }; |
| | | return content.OK(data: allocate); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region å
é¨è°ç¨æ¹æ³ |
| | | |
| | | public void UpdateLocationStatus(DtLocationInfo location, LocationEnum locationStatus, int taskNum, int StatusChangeType) |
| | | public (List<DtLocationStatusChangeRecord>,List<DtLocationInfo>) UpdateLocationStatus(DtLocationInfo location, LocationEnum locationStatus, int taskNum, int StatusChangeType) |
| | | { |
| | | List<DtLocationInfo> locations = GetGroupLocations(location); |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | List<LocationChangeRecordDto> changeRecordDto = new List<LocationChangeRecordDto>(); |
| | | List<DtLocationStatusChangeRecord> changeRecordDto = new List<DtLocationStatusChangeRecord>(); |
| | | foreach (var item in Beforelocation) |
| | | { |
| | | var loc = locations.Where(x => x.LocationCode == item.LocationCode).FirstOrDefault(); |
| | | if (loc != null) |
| | | { |
| | | changeRecordDto.Add(new LocationChangeRecordDto() |
| | | DtLocationStatusChangeRecord dtLocationStatusChangeRecord = new DtLocationStatusChangeRecord() |
| | | { |
| | | ChangeType = StatusChangeType, |
| | | LocationCode = item.LocationCode, |
| | | LocationId = loc.Id, |
| | | Creater = "System", |
| | | TaskNum = taskNum, |
| | | AfterStatus = loc.LocationStatus, |
| | | BeforeStatus = item.LocationStatus, |
| | | TaskNum = taskNum, |
| | | LocationId = loc.Id, |
| | | LocationCode = loc.LocationCode, |
| | | ChangeType = StatusChangeType, |
| | | }); |
| | | }; |
| | | |
| | | changeRecordDto.Add(dtLocationStatusChangeRecord); |
| | | } |
| | | } |
| | | _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto); |
| | | //_locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto); |
| | | |
| | | _locationRepository.UpdateData(locations); |
| | | //_locationRepository.UpdateData(locations); |
| | | return (changeRecordDto,locations); |
| | | } |
| | | |
| | | public (List<DtLocationStatusChangeRecord>, List<DtLocationInfo>) UpdateLocationStatus(string locationCode, LocationEnum locationStatus, int taskNum, int StatusChangeType) |
| | | { |
| | | var location = _locationRepository.QueryFirst(x => x.LocationCode == locationCode); |
| | | |
| | | List<DtLocationInfo> locations = GetGroupLocations(location); |
| | | |
| | | List<DtLocationInfo> Beforelocation = locations.Select(x => new DtLocationInfo |
| | | { |
| | | Id = x.Id, |
| | | LocationCode = x.LocationCode, |
| | | LocationStatus = x.LocationStatus |
| | | }).ToList(); |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | List<DtLocationStatusChangeRecord> changeRecordDto = new List<DtLocationStatusChangeRecord>(); |
| | | foreach (var item in Beforelocation) |
| | | { |
| | | var loc = locations.Where(x => x.LocationCode == item.LocationCode).FirstOrDefault(); |
| | | if (loc != null) |
| | | { |
| | | DtLocationStatusChangeRecord dtLocationStatusChangeRecord = new DtLocationStatusChangeRecord() |
| | | { |
| | | ChangeType = StatusChangeType, |
| | | LocationCode = item.LocationCode, |
| | | LocationId = loc.Id, |
| | | Creater = "System", |
| | | TaskNum = taskNum, |
| | | AfterStatus = loc.LocationStatus, |
| | | BeforeStatus = item.LocationStatus, |
| | | }; |
| | | |
| | | changeRecordDto.Add(dtLocationStatusChangeRecord); |
| | | } |
| | | } |
| | | //_locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto); |
| | | |
| | | //_locationRepository.UpdateData(locations); |
| | | return (changeRecordDto, locations); |
| | | } |
| | | |
| | | public List<DtLocationInfo> GetGroupLocations(DtLocationInfo location) |
| | |
| | | /// <returns></returns> |
| | | public async Task<DtLocationInfo> GetEmptyLocation(string roadWay) |
| | | { |
| | | try |
| | | List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.RoadwayNo == "SC1" && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1); |
| | | if (locations.Count < 2) |
| | | { |
| | | 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(); |
| | | |
| | | 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 (locationInside.Count > 0) |
| | | { |
| | | 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.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) |
| | | { |
| | | return locations.Where(x => x.Row == 1).OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault(); |
| | | } |
| | | else |
| | | { |
| | | return null; |
| | | } |
| | | return null; |
| | | } |
| | | catch (Exception ex) |
| | | |
| | | List<DtLocationInfo> locationInfos = new List<DtLocationInfo>(); |
| | | var locationInside = locations.Where(x => x.Row == 3).ToList(); |
| | | |
| | | if (locations.Where(x => x.Row == 2).OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault() != null) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | return locations.Where(x => x.Row == 2).ToList().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault(); |
| | | } |
| | | else if (locationInside.Count > 0) |
| | | { |
| | | 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.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) |
| | | { |
| | | return locations.Where(x => x.Row == 1).OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault(); |
| | | } |
| | | else |
| | | { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | public async Task<DtLocationInfo> GetAGVEmptyCacheLocation(int AreaId, DtLocationInfo loc) |
| | | { |
| | | try |
| | | if (loc == null) |
| | | { |
| | | if(loc==null) |
| | | { |
| | | return null; |
| | | } |
| | | switch (AreaId) |
| | | { |
| | | case 2: |
| | | return await FromShallowToDeep(AreaId, loc); |
| | | case 3: |
| | | return await AGVLIKU(AreaId); |
| | | case 5: |
| | | case 6: |
| | | return await FromDeepToShallow(AreaId, loc); |
| | | default: |
| | | return null; |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | catch (Exception ex) |
| | | switch (AreaId) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | case 2: |
| | | return await FromShallowToDeep(AreaId, loc); |
| | | case 3: |
| | | return await AGVLIKU(AreaId); |
| | | case 5: |
| | | case 6: |
| | | return await FromDeepToShallow(AreaId, loc); |
| | | default: |
| | | return null; |
| | | } |
| | | } |
| | | |
| | |
| | | /// <returns></returns> |
| | | public async Task<DtLocationInfo> FromDeepToShallow(int AreaId, DtLocationInfo loc) |
| | | { |
| | | try |
| | | { |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | |
| | | if (AreaId == loc.AreaId) |
| | | 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) |
| | | { |
| | | 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) |
| | | { |
| | | Isavailable = false; |
| | | continue; |
| | | } |
| | | Isavailable = false; |
| | | continue; |
| | | } |
| | | if(Isavailable) |
| | | locationInfos.Add(item); |
| | | } |
| | | if (Isavailable) |
| | | locationInfos.Add(item); |
| | | } |
| | | |
| | | return locationInfos.Distinct().OrderByDescending(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | return locationInfos.Distinct().OrderByDescending(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public async Task<DtLocationInfo> FromShallowToDeep(int AreaId, DtLocationInfo loc) |
| | | { |
| | | try |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | |
| | | if (AreaId == loc.AreaId) |
| | | { |
| | | 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); |
| | | } |
| | | else |
| | | { |
| | | locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1); |
| | | } |
| | | |
| | | if (AreaId == loc.AreaId) |
| | | 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); |
| | | if (locationLateral.Count == 0) |
| | | { |
| | | locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1 && x.Row != loc.Row); |
| | | locationInfos.Add(item); |
| | | continue; |
| | | } |
| | | else |
| | | foreach (var Lateral in locationLateral) |
| | | { |
| | | 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); |
| | | if (locationLateral.Count == 0) |
| | | if (locationInfos.Contains(Lateral)) |
| | | continue; |
| | | if (Lateral.LocationStatus == (int)LocationEnum.Free && Lateral.EnalbeStatus == 1) |
| | | { |
| | | 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.Distinct().OrderBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | return locationInfos.Distinct().OrderBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); |
| | | |
| | | } |
| | | |
| | | |
| | | public async Task<DtLocationInfo> AGVLIKU(int AreaId) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == 0 && x.EnalbeStatus == 1); |
| | | var location = locations.OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault(); |
| | | return location; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == 0 && x.EnalbeStatus == 1); |
| | | var location = locations.OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault(); |
| | | return location; |
| | | |
| | | } |
| | | |
| | | |
| | | public bool LocationIsOutBound(DtLocationInfo location) |
| | | { |
| | | try |
| | | |
| | | int sum = 0; |
| | | if (location.AreaId == 1) |
| | | { |
| | | int sum = 0; |
| | | if (location.AreaId == 1) |
| | | if (location.Depth == 2) |
| | | { |
| | | if (location.Depth == 2) |
| | | { |
| | | var locationLateral = _locationRepository.QueryFirst(x => x.Row == 1 && x.Column == location.Column && x.Layer == location.Layer); |
| | | 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; |
| | | } |
| | | 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) |
| | | |
| | | else if (location.AreaId == 2) |
| | | { |
| | | return false; |
| | | 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; |
| | | |
| | | } |
| | | |
| | | |