From 98cd144e4d58dbfcc09a2ffb0dbb6925519088b3 Mon Sep 17 00:00:00 2001 From: wanshenmean <cathay_xy@163.com> Date: 星期三, 06 十一月 2024 14:12:56 +0800 Subject: [PATCH] 最新代码更改 --- Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs | 293 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 231 insertions(+), 62 deletions(-) diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs index bd89329..8149a7f 100644 --- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs +++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs @@ -1,8 +1,11 @@ 锘縰sing Mapster; +using Masuit.Tools; using WIDESEA_DTO.MOM; using WIDESEA_DTO.WMS; +using WIDESEA_IStorageBasicRepository; using WIDESEA_IStoragIntegrationServices; using WIDESEA_StorageBasicRepository; +using WIDESEA_StoragIntegrationServices; namespace WIDESEA_StorageOutTaskServices; @@ -12,6 +15,7 @@ private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly IDt_OutOrderRepository _outOrderRepository; private readonly IStockInfoRepository _stockInfoRepository; + private readonly IStockInfoDetailRepository _stockInfoDetailRepository; private readonly IDt_Task_HtyRepository _task_HtyRepository; private readonly IDt_OutOrderAndStockRepository _outOrderAndStockRepository; private readonly IDt_OutOrderAndStock_HtyRepository _outOrderAndStock_HtyRepository; @@ -22,10 +26,11 @@ private readonly IPointStackerRelationRepository _pointStackerRelationRepository; private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository; private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository; - private readonly IBoxingInfoRepository _boxingInfoRepository; - private readonly ICellStateService _cellStateService; - private readonly IProcessApplyService _processApplyService; - private readonly IDt_AreaInfoRepository _areaInfoRepository; + private readonly IBoxingInfoRepository _boxingInfoRepository; //缁勭洏 + private readonly ICellStateService _cellStateService; //鐢佃姱灞炴�� + private readonly IProcessApplyService _processApplyService; //宸ヨ壓璺嚎 + private readonly IDt_AreaInfoRepository _areaInfoRepository; //鍖哄煙 + private readonly IAgingInOrOutInputService _agingInOrOutInputService; //闈欑疆\闄堝寲 public Dt_TaskService(IDt_TaskRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, @@ -44,7 +49,9 @@ IBoxingInfoRepository boxingInfoRepository, ICellStateService cellStateService, IProcessApplyService processApplyService, - IDt_AreaInfoRepository areaInfoRepository) : base(BaseDal) + IDt_AreaInfoRepository areaInfoRepository, + IAgingInOrOutInputService agingInOrOutInputService, + IStockInfoDetailRepository stockInfoDetailRepository) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _outOrderRepository = outOrderRepository; @@ -63,14 +70,16 @@ _cellStateService = cellStateService; _processApplyService = processApplyService; _areaInfoRepository = areaInfoRepository; + _agingInOrOutInputService = agingInOrOutInputService; + _stockInfoDetailRepository = stockInfoDetailRepository; } #region 澶栭儴鎺ュ彛鏂规硶 - #region 鍫嗗灈鏈哄嚭搴撲换鍔″畬鎴� + #region 鍑哄簱浠诲姟瀹屾垚 /// <summary> - /// 鍫嗗灈鏈哄嚭搴撲换鍔″畬鎴� + /// 鍑哄簱浠诲姟瀹屾垚 /// </summary> /// <param name="saveModel">浠诲姟鏁版嵁鍚堥泦</param> /// <returns>杩斿洖缁撴灉闆�</returns> @@ -79,17 +88,48 @@ WebResponseContent content = new WebResponseContent(); try { - // 鏇存柊搴撳瓨鐘舵�� - // 璁剧疆搴撲綅鐘舵�佷负绌洪棽 - stock.LocationInfo.LocationStatus = LocationEnum.Free.ObjToInt(); - // 璁剧疆搴撳瓨鐘舵�佷负鍑哄簱 - stock.StockInfoDetails.ForEach(x => + if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound) { - x.Status = 2; - }); + var process = await SqlSugarHelper.Db.Queryable<Dt_EquipmentProcess>() + .FirstAsync(x => x.EquipmentName == task.Roadway); + EquipmentParameterInfo info = JsonConvert.DeserializeObject<EquipmentParameterInfo>(process.ProcessValue); + AgingOutputDto agingOutputDto = new AgingOutputDto() + { + OpFlag = 1, + EquipmentCode = stock.LocationInfo.RoadwayNo, + TrayBarcode = stock.PalletCode, + SerialNos = stock.StockInfoDetails.Select(x => new SerialNoOutDto() + { + SlotNo = x.OrderNo.ToInt32(), + SerialNo = x.SerialNumber, + SerialNoResult = true, + ParameterInfo = new List<ParameterInfo>() + { + new ParameterInfo() + { + LowerLomit =info.LowerControlLimit, + UpperLimit = info.UpperControlLimit, + ParameterResult = info.EquipmentAvailabilityFlag, + ParameterCode = info.ParameterCode, + ParameterDesc = info.Description, + TargetValue = info.TargetValue, + Value = info.TargetValue, + DefectCode = info.UOMCode + } + } + }).ToList() + }; + } + // 鏇存柊搴撳瓨鐘舵�� + var loation = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); + var detail = _stockInfoDetailRepository.QueryData(x => x.StockId == stock.Id); + + // 璁剧疆搴撲綅鐘舵�佷负绌洪棽 + loation.LocationStatus = LocationEnum.Free.ObjToInt(); + // 鏇存柊浠诲姟鐘舵�� - task.TaskState = TaskOutStatusEnum.SC_OutFinish.ObjToInt(); + task.TaskState = TaskOutStatusEnum.OutFinish.ObjToInt(); task.CurrentAddress = task.NextAddress; task.NextAddress = task.TargetAddress; @@ -98,13 +138,15 @@ // 浜嬪姟澶勭悊 // 寮�濮嬩簨鍔� _unitOfWorkManage.BeginTran(); - // 鏇存柊搴撳瓨淇℃伅 - var isStockUpdated = _stockInfoRepository.UpdateData(stock); - // 鏇存柊浠诲姟淇℃伅 - var isTaskUpdated = await Update(task); + // 鍒犻櫎搴撳瓨淇℃伅 + var isStockUpdated = _stockInfoRepository.DeleteDataById(stock.Id); + // 鍒犻櫎搴撳瓨淇℃伅 + var isStockDetailUpdated = _stockInfoDetailRepository.DeleteDataByIds(detail.Select(x => (object)x.Id).ToArray()); + // 鍒犻櫎浠诲姟淇℃伅 + var isTaskUpdated = BaseDal.DeleteDataById(task.TaskId); // 濡傛灉搴撳瓨淇℃伅鍜屼换鍔′俊鎭兘鏇存柊鎴愬姛 - if (isStockUpdated && isTaskUpdated) + if (isStockUpdated && isTaskUpdated && isStockDetailUpdated) { // 璁板綍鏃ュ織 LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍫嗗灈鏈哄嚭搴撳畬鎴�", $"浜嬪姟澶勭悊瀹屾垚锛屽簱瀛樼姸鎬佹洿鏂帮細{isStockUpdated}锛屼换鍔$姸鎬佹洿鏂�:{isTaskUpdated}"); @@ -179,28 +221,66 @@ try { var boxing = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode); + var locationInf = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress); - var boxDetail = boxing.BoxingInfoDetails.Adapt<List<DtStockInfoDetail>>(); - // 鍒涘缓搴撳瓨瀹炰緥妯″瀷 - DtStockInfo stock = new DtStockInfo() - { - PalletCode = task.PalletCode, - LocationCode = task.TargetAddress, - CreateDate = DateTime.Now, - Creater = "system", - IsFull = boxing.IsFull, - StockInfoDetails = boxDetail, - LocationInfo = new DtLocationInfo() - }; + locationInf.LocationStatus = (int)LocationEnum.InStock; // 鍒涘缓鍘嗗彶浠诲姟瀹炰緥妯″瀷 var taskHty = CreateHistoricalTask(task); - // 淇敼璐т綅淇℃伅涓烘湁璐� - var locationInf = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress); - locationInf.LocationStatus = (int)LocationEnum.InStock; + // 鍒涘缓搴撳瓨瀹炰緥妯″瀷 + DtStockInfo stock; + if (boxing == null) + { + // 绌烘墭鐩� - LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍏ュ簱浠诲姟瀹屾垚", $"璐т綅鍦板潃锛歿task.TargetAddress},淇敼鍚庤揣浣嶆暟鎹細{locationInf}"); + stock = new DtStockInfo() + { + PalletCode = task.PalletCode, + LocationCode = task.TargetAddress, + CreateDate = DateTime.Now, + Creater = "system", + IsFull = boxing.IsFull, + StockInfoDetails = new List<DtStockInfoDetail>() + { + new DtStockInfoDetail() + { + MaterielCode = "绌烘墭鐩�", + Id = 0, + } + } + }; + } + else + { + // 瀹炵洏 + var boxDetail = boxing.BoxingInfoDetails.Adapt<List<DtStockInfoDetail>>(); + // 鍒涘缓搴撳瓨瀹炰緥妯″瀷 + stock = new DtStockInfo() + { + PalletCode = task.PalletCode, + LocationCode = task.TargetAddress, + CreateDate = DateTime.Now, + Creater = "system", + IsFull = boxing.IsFull, + StockInfoDetails = boxDetail, + }; + + AgingInputDto agingInputDto = new AgingInputDto() + { + SerialNos = boxing.BoxingInfoDetails + .Select(item => new SerialNoInDto { SerialNo = item.SerialNumber, PositionNo = item.OrderNo }) + .ToList(), + TrayBarcode = task.PalletCode, + OpFlag = 1 + }; + var result = await _agingInOrOutInputService.GetOCVInputAsync(agingInputDto); + stock.Remark = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString()).LinedProcessFeedbackTime; + + + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍏ュ簱浠诲姟瀹屾垚", $"璐т綅鍦板潃锛歿task.TargetAddress},淇敼鍚庤揣浣嶆暟鎹細{locationInf}"); + + } // 鎵ц鏁版嵁搴撲簨鍔� bool isResult = await ExecuteTransaction(stock, taskHty, locationInf, task.TaskId); @@ -249,10 +329,15 @@ LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍏ュ簱浠诲姟", ""); return await CompleteInboundTaskAsync(task); } + else if (task.TaskType == (int)TaskInboundTypeEnum.InTray) + { + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "绌烘墭鐩樺叆搴�", ""); + return await CompleteInboundTaskAsync(task); + } else { - LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "搴撳瓨涓嶅瓨鍦ㄤ篃涓嶆槸鍏ュ簱浠诲姟", ""); - return content.Error("搴撳瓨涓嶅瓨鍦�"); + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "浠诲姟鐘舵�佸紓甯�", ""); + return content.Error("浠诲姟鐘舵�佸紓甯�"); } } LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "楠岃瘉搴撳瓨鏄惁瀛樺湪", JsonConvert.SerializeObject(stock)); @@ -260,15 +345,20 @@ if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound) { LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍑哄簱浠诲姟", ""); - if (task.TaskState == TaskOutStatusEnum.SC_OutExecuting.ObjToInt()) + if (task.TaskState == TaskOutStatusEnum.Line_OutFinish.ObjToInt()) { LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍫嗗灈鏈哄嚭搴撳畬鎴�", ""); return await CompleteStackTaskAsync(task, stock); } - else + else if (task.TaskState == TaskOutStatusEnum.SC_OutExecuting.ObjToInt()) { LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "搴撳瓨涓嶅瓨鍦ㄤ篃涓嶆槸鍏ュ簱浠诲姟", ""); return content.Error("搴撳瓨涓嶅瓨鍦�"); + } + else + { + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "浠诲姟鐘舵�佸紓甯�", ""); + return content.Error("浠诲姟鐘舵�佸紓甯�"); } } else if (task.TaskType == (int)TaskTypeEnum.RelocationIn) @@ -310,8 +400,14 @@ // 濡傛灉鐘舵�佷负false锛屽垯杩斿洖content if (!content.Status) return content; - // 璋冪敤GetProcessApplyAsync鏂规硶锛岃幏鍙栧伐鑹虹敵璇� - ProcessApplyDto process = await GetProcessApplyAsync(content); + // 娣诲姞缁勭洏淇℃伅 + // 灏哻ontent.Data杞崲涓篟esultTrayCellsStatus瀵硅薄 + var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.ToString()); + var boxing = await CreateBoxingInfo(result, input.PalletCode); + + // 璋冪敤GetProcessApplyAsync鏂规硶锛岃幏鍙栧伐鑹鸿矾绾� + ProcessApplyDto process = await GetProcessApplyAsync(result); + // 濡傛灉process涓簄ull锛屽垯杩斿洖content if (process == null) return content; @@ -322,6 +418,10 @@ var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == input.PalletCode); // 濡傛灉task涓嶄负null锛屽垯璋冪敤UpdateExistingTask鏂规硶锛屾洿鏂颁换鍔★紱鍚﹀垯璋冪敤CreateNewTask鏂规硶锛屽垱寤烘柊浠诲姟 content = task != null ? await UpdateExistingTask(input, task) : await CreateNewTask(processResponse, input); + if (content.Status) + { + var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing); + } } catch (Exception err) { @@ -341,19 +441,32 @@ return await _cellStateService.GetTrayCellStatusAsync(trayCells); } - // 鑾峰彇宸ヨ壓鐢宠 - private async Task<ProcessApplyDto> GetProcessApplyAsync(WebResponseContent content) + // 鑾峰彇缁勭洏淇℃伅 + private async Task<DtBoxingInfo> CreateBoxingInfo(ResultTrayCellsStatus result, string palletCode) { - // 濡傛灉鐘舵�佷负false锛屽垯杩斿洖null - if (!content.Status) return null; + return new DtBoxingInfo + { + PalletCode = palletCode, + IsFull = true, + BoxingInfoDetails = result.SerialNos.Select(serialNoObj => new DtBoxingInfoDetail + { + SerialNumber = serialNoObj.SerialNo, + OrderNo = serialNoObj.PositionNo.ToString(), + Status = serialNoObj.SerialNoStatus, + MaterielCode = result.BindCode, + Remark = result.TrayBarcodePropertys.ToJsonString(), + }).ToList() + }; + } - // 灏哻ontent.Data杞崲涓篟esultTrayCellsStatus瀵硅薄 - var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString()); + // 鑾峰彇宸ヨ壓鐢宠 + private async Task<ProcessApplyDto> GetProcessApplyAsync(ResultTrayCellsStatus content) + { // 鍒涘缓涓�涓狿rocessApplyDto瀵硅薄锛屽苟璧嬪�� return new ProcessApplyDto() { - WipOrderNo = result.BindCode, - SerialNos = result.SerialNos.Select(item => new SerialNos + //WipOrderNo = result.BindCode, + SerialNos = content.SerialNos.Select(item => new SerialNos { SerialNo = item.SerialNo }).ToList() @@ -381,6 +494,12 @@ .Where(x => x.EquipmentType == "闄堝寲" && x.WipOrderNo == apply.WipOrderNo && x.ProductDesc == apply.ProductNo) .ToList(); + case "1339": + case "1406": + return SqlSugarHelper.Db.Queryable<Dt_EquipmentProcess>() + .Where(x => x.EquipmentType == "闈欑疆" && x.WipOrderNo == apply.WipOrderNo && x.ProductDesc == apply.ProductNo) + .ToList(); + default: return new List<Dt_EquipmentProcess>(); } @@ -397,7 +516,7 @@ { var area = _areaInfoRepository.QueryFirst(x => x.AreaCode == "CH"); - var stockInfo = _stockInfoRepository.QueryData(x => x.Remark == area.AreaCode && x.StockInfoDetails.Any(z => z.MaterielCode == "绌烘墭鐩�")).OrderBy(x => x.CreateDate).FirstOrDefault(); + var stockInfo = _stockInfoRepository.QueryData(x => x.LocationInfo.AreaId == area.AreaID && x.StockInfoDetails.Any(z => z.MaterielCode == "绌烘墭鐩�")).OrderBy(x => x.CreateDate).FirstOrDefault(); // 鍒涘缓鏂颁换鍔″疄渚� var task = new Dt_Task { @@ -444,6 +563,65 @@ } #endregion 璇锋眰绌烘墭鐩� + + #region 闄堝寲璇锋眰鍑哄簱 + + // 闄堝寲璇锋眰鍑哄簱 + public async Task<WebResponseContent> OutTrayByCh(string position) + { + WebResponseContent content = new WebResponseContent(); + try + { + var area = _areaInfoRepository.QueryFirst(x => x.AreaName == "闄堝寲鍖�"); + // 鏌ヨ搴撳瓨淇℃伅 + + var stockInfo = _stockInfoRepository.QueryData(x => x.AreaCode == area.AreaCode && Convert.ToDateTime(x.Remark) < DateTime.Now && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock).OrderBy(x => x.CreateDate).FirstOrDefault(); + // 鍒涘缓鏂颁换鍔″疄渚� + var task = new Dt_Task() + { + Grade = 1, + Roadway = stockInfo.LocationInfo.RoadwayNo, + TargetAddress = position, + Dispatchertime = DateTime.Now, + MaterialNo = "", + NextAddress = position, + OrderNo = null, + PalletCode = stockInfo.PalletCode, + SourceAddress = stockInfo.LocationCode, + TaskState = (int)TaskOutStatusEnum.OutNew, + TaskType = (int)TaskOutboundTypeEnum.OutTray, + TaskNum = await BaseDal.GetTaskNo(), + Creater = "Systeam" + }; + var taskId = await BaseDal.AddDataAsync(task); + bool isResult = taskId > 0; + if (isResult) + { + WMSTaskDTO taskDTO = new WMSTaskDTO() + { + TaskNum = task.TaskNum.Value, + Grade = 1, + PalletCode = DateTime.Now.ToString("MMddHHmmss"), + RoadWay = task.Roadway, + SourceAddress = stockInfo.LocationCode, + TargetAddress = task.Roadway, + TaskState = (int)TaskOutStatusEnum.OutNew, + Id = 0, + TaskType = (int)TaskOutboundTypeEnum.OutTray + }; + stockInfo.LocationInfo.LocationStatus = (int)LocationEnum.InStockDisable; + _locationRepository.UpdateData(stockInfo.LocationInfo); + content.OK(data: taskDTO); + } + } + catch (Exception ex) + { + throw; + } + return content; + } + + #endregion 闄堝寲璇锋眰鍑哄簱 #endregion 澶栭儴鎺ュ彛鏂规硶 @@ -745,15 +923,6 @@ DtLocationInfo location = new DtLocationInfo(); int beforeStatus = 0; - // 鏍规嵁浠诲姟绫诲瀷鍒ゆ柇鏄嚭搴撲换鍔¤繕鏄叆搴撲换鍔� - //if (input.Type == (int)TaskTypeEnum.Outbound) - //{ - // // 澶勭悊鍑哄簱浠诲姟 - // toAddress = await GetRoadWayAsync(areaId, task.Roadway, input.Direction, input.Area, input.Type); - // taskState = (int)TaskOutStatusEnum.SC_OutFinish; - //} - //else - //{ // 澶勭悊鍏ュ簱浠诲姟 location = await GetLocationDistributeAsync(task.Roadway); toAddress = location.LocationCode; @@ -762,10 +931,8 @@ // 鏇存柊璐т綅淇℃伅 location.LocationStatus = (int)LocationEnum.Lock; - //} // 鏇存柊浠诲姟淇℃伅 - //task.SourceAddress = input.Position; task.CurrentAddress = input.Position; task.TargetAddress = toAddress; task.NextAddress = toAddress; @@ -843,6 +1010,7 @@ TaskNum = await BaseDal.GetTaskNo(), Creater = "Systeam" }; + // 灏濊瘯娣诲姞鏂颁换鍔� var taskId = await BaseDal.AddDataAsync(task); bool isResult = taskId > 0; @@ -852,6 +1020,7 @@ isResult = await _taskExecuteDetailRepository.AddDetailAsync(task, false, TaskDescription.GetTaskUpdateDescription(input.PalletCode, input.Position, ToAddress, TaskInStatusEnum.InNew.GetIntegralRuleTypeEnumDesc())); if (isResult) { + // 鍒涘缓WMS浠诲姟 WMSTaskDTO taskDTO = new WMSTaskDTO() { TaskNum = 0, -- Gitblit v1.9.3