From ad18b0c17b5b1f715c33cb2a2b39589c10434a00 Mon Sep 17 00:00:00 2001 From: wanshenmean <cathay_xy@163.com> Date: 星期六, 09 十一月 2024 13:24:48 +0800 Subject: [PATCH] 11.09-1申请巷道与申请货位拆分 --- Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs | 587 +++++++++++++++++++++------------------------------------- 1 files changed, 217 insertions(+), 370 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 db6dbf3..5367dc9 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 @@ -81,105 +81,6 @@ #region 鍑哄簱浠诲姟瀹屾垚 - /// <summary> - /// 鍑哄簱浠诲姟瀹屾垚 - /// </summary> - /// <param name="saveModel">浠诲姟鏁版嵁鍚堥泦</param> - /// <returns>杩斿洖缁撴灉闆�</returns> - //public async Task<WebResponseContent> CompleteStackTaskAsync(Dt_Task task, DtStockInfo stock) - //{ - // WebResponseContent content = new WebResponseContent(); - // try - // { - // if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound) - // { - // 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() - // }; - // content = await _agingInOrOutInputService.GetOCVOutputAsync(agingOutputDto); - // var result = JsonConvert.DeserializeObject<BasicResult>(content.ToString()); - // if (!result.Success) - // { - // throw new Exception(result.MOMMessage); - // } - // } - // // 鏇存柊搴撳瓨鐘舵�� - // 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.OutFinish.ObjToInt(); - // task.CurrentAddress = task.NextAddress; - // task.NextAddress = task.TargetAddress; - - // LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍫嗗灈鏈哄嚭搴撳畬鎴�", "鏇存柊搴撳瓨鐘舵�佷笌浠诲姟鐘舵��"); - - // // 浜嬪姟澶勭悊 - // // 寮�濮嬩簨鍔� - // _unitOfWorkManage.BeginTran(); - // // 鍒犻櫎搴撳瓨淇℃伅 - // 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 && isStockDetailUpdated) - // { - // // 璁板綍鏃ュ織 - // LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍫嗗灈鏈哄嚭搴撳畬鎴�", $"浜嬪姟澶勭悊瀹屾垚锛屽簱瀛樼姸鎬佹洿鏂帮細{isStockUpdated}锛屼换鍔$姸鎬佹洿鏂�:{isTaskUpdated}"); - // // 鎻愪氦浜嬪姟 - // _unitOfWorkManage.CommitTran(); - // // 杩斿洖鎴愬姛缁撴灉 - // return content.OK("浠诲姟瀹屾垚鎴愬姛"); - // } - // else - // { - // // 璁板綍鏃ュ織 - // LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍫嗗灈鏈哄嚭搴撳畬鎴�", $"浜嬪姟澶勭悊澶辫触锛屽簱瀛樼姸鎬佹洿鏂帮細{isStockUpdated}锛屼换鍔$姸鎬佹洿鏂�:{isTaskUpdated}"); - // // 鍥炴粴浜嬪姟 - // _unitOfWorkManage.RollbackTran(); - // // 杩斿洖澶辫触缁撴灉 - // return content.Error("浠诲姟鎴栧簱瀛樻洿鏂板け璐�"); - // } - // } - // catch (Exception err) - // { - // LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, $"绯荤粺寮傚父锛屽紓甯镐俊鎭細{err.Message}", ""); - // Console.WriteLine(err.Message); - // return content.Error(err.Message); - // } - //} public async Task<WebResponseContent> CompleteStackTaskAsync(Dt_Task task, DtStockInfo stock) { @@ -190,7 +91,7 @@ { var process = await SqlSugarHelper.Db.Queryable<Dt_EquipmentProcess>() .FirstAsync(x => x.EquipmentName == task.Roadway); - var info = JsonConvert.DeserializeObject<EquipmentParameterInfo>(process.ProcessValue); + var info = JsonConvert.DeserializeObject<ResponseEqptRunDto>(process.ProcessValue); var agingOutputDto = MapToAgingOutputDto(stock, info); content = await _agingInOrOutInputService.GetOCVOutputAsync(agingOutputDto); @@ -206,7 +107,7 @@ await UpdateLocationAsync(loc); await DeleteStockInfoAsync(stock.Id); await DeleteStockInfoDetailsAsync(stock.StockInfoDetails); - await DeleteTaskAsync(task.TaskId); + //await DeleteTaskAsync(task.TaskId); }); return content.OK("浠诲姟瀹屾垚鎴愬姛"); @@ -218,39 +119,37 @@ } } - private AgingOutputDto MapToAgingOutputDto(DtStockInfo stock, EquipmentParameterInfo info) + private AgingOutputDto MapToAgingOutputDto(DtStockInfo stock, ResponseEqptRunDto info) { return new AgingOutputDto { OpFlag = 1, - EquipmentCode = stock.LocationInfo.RoadwayNo, + Software = "WMS", + EquipmentCode = "ECH001-B", 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 + ParameterInfo = info.ParameterInfo.Select(x => 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 - } - } + LowerLomit = x.LowerControlLimit, + UpperLimit = x.UpperControlLimit, + ParameterResult = x.EquipmentAvailabilityFlag, + ParameterCode = x.ParameterCode, + ParameterDesc = x.Description, + TargetValue = x.TargetValue, + Value = (DateTime.Now - stock.CreateDate).TotalMinutes.ToString(), + DefectCode = x.UOMCode + }).ToList() }).ToList() }; } private void ValidateResponse(WebResponseContent content) { - var result = JsonConvert.DeserializeObject<BasicResult>(content.ToString()); + var result = JsonConvert.DeserializeObject<BasicResult>(content.Data.ToString()); if (!result.Success) { throw new Exception(result.MOMMessage); @@ -262,10 +161,10 @@ var location = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); var details = _stockInfoDetailRepository.QueryData(x => x.StockId == stock.Id); - location.LocationStatus = LocationEnum.Free.ObjToInt(); - task.TaskState = TaskOutStatusEnum.OutFinish.ObjToInt(); - task.CurrentAddress = task.NextAddress; - task.NextAddress = task.TargetAddress; + location.LocationStatus = (int)LocationEnum.Free; + task.TaskState = (int)TaskOutStatusEnum.OutFinish; + //task.CurrentAddress = task.NextAddress; + //task.NextAddress = task.TargetAddress; LogFactory.GetLog("浠诲姟瀹屾垚").Info(true, "鏇存柊搴撳瓨鐘舵�佷笌浠诲姟鐘舵��"); return (location, task); @@ -344,91 +243,6 @@ #endregion 绉诲簱浠诲姟瀹屾垚 #region 鍏ュ簱浠诲姟瀹屾垚 - - /// <summary> - /// 鍏ュ簱浠诲姟瀹屾垚 - /// </summary> - /// <param name="task">浠诲姟鏁版嵁鍚堥泦</param> - /// <returns>杩斿洖缁撴灉闆�</returns> - //public async Task<WebResponseContent> CompleteInboundTaskAsync(Dt_Task task) - //{ - // WebResponseContent content = new WebResponseContent(); - // try - // { - // var boxing = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode); - // var locationInf = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress); - - // locationInf.LocationStatus = (int)LocationEnum.InStock; - - // // 鍒涘缓鍘嗗彶浠诲姟瀹炰緥妯″瀷 - // var taskHty = CreateHistoricalTask(task); - - // // 鍒涘缓搴撳瓨瀹炰緥妯″瀷 - // DtStockInfo stock; - // if (boxing == null) - // { - // // 绌烘墭鐩� - - // 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); - // if (isResult) - // content.OK("鍏ュ簱浠诲姟瀹屾垚鎴愬姛"); - // else - // content.Error("鍏ュ簱浠诲姟瀹屾垚澶辫触"); - // } - // catch (Exception err) - // { - // Console.WriteLine(err.Message.ToString()); - // } - // return content; - //} /// <summary> /// 瀹屾垚鍏ュ簱浠诲姟 @@ -522,10 +336,13 @@ .Select(item => new SerialNoInDto { SerialNo = item.SerialNumber, PositionNo = item.OrderNo }) .ToList(), TrayBarcode = task.PalletCode, - OpFlag = 1 + OpFlag = 1, + EquipmentCode = "ECH001-B", + Software = "WMS" }; var result = _agingInOrOutInputService.GetOCVInputAsync(agingInputDto).Result; - stock.Remark = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString()).LinedProcessFeedbackTime; + var respone = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString()); + stock.Remark = respone.LinedProcessFeedbackTime; // 璁板綍鏃ュ織 LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍏ュ簱浠诲姟瀹屾垚", $"璐т綅鍦板潃锛歿task.TargetAddress},淇敼鍚庤揣浣嶆暟鎹細{locationInf}"); @@ -559,7 +376,7 @@ LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "楠岃瘉浠诲姟鏄惁瀛樺湪", JsonConvert.SerializeObject(task)); // 楠岃瘉搴撳瓨鏄惁瀛樺湪 - var stock = await _stockInfoRepository.QueryFirstAsync(x => x.PalletCode == task.PalletCode); + var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode); // 鏍规嵁浠诲姟绫诲瀷璋冪敤鐩稿簲鐨勫畬鎴愪换鍔℃柟娉� switch (task.TaskType) @@ -584,7 +401,7 @@ #region 璇锋眰浠诲姟鍏ュ簱 /// <summary> - /// 璇锋眰浠诲姟 + /// 璇锋眰浠诲姟宸烽亾 /// </summary> /// <param name="input">璇锋眰妯″瀷</param> /// <returns>鍖呭惈浠诲姟淇℃伅鐨勫搷搴斿唴瀹�</returns> @@ -595,20 +412,34 @@ try { - // 璋冪敤BaseDal.QueryFirstAsync鏂规硶锛屾煡璇换鍔� var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == input.PalletCode); if (task != null) { - content = await UpdateExistingTask(input, task); - return content; + //if (task.TaskState == (int)TaskInStatusEnum.InNew) + { + // 鍒涘缓WMS浠诲姟 + WMSTaskDTO taskDTO = new WMSTaskDTO() + { + TaskNum = task.TaskNum.Value, + Grade = 1, + PalletCode = task.PalletCode, + RoadWay = task.Roadway, + SourceAddress = task.SourceAddress, + TargetAddress = task.Roadway, + TaskState = task.TaskState.Value, + Id = 0, + TaskType = task.TaskType, + }; + return content.OK(data: taskDTO); + } } // 鍒涘缓涓�涓猅rayCellsStatusDto瀵硅薄锛屽苟璧嬪�� TrayCellsStatusDto trayCells = new TrayCellsStatusDto() { Software = "WMS", TrayBarcode = input.PalletCode, - EquipmentCode = "ECH001-B" + EquipmentCode = "ECH001-B" }; // 璋冪敤GetTrayCellStatusAsync鏂规硶锛岃幏鍙栨暣鐩樼數鑺� @@ -619,6 +450,8 @@ // 娣诲姞缁勭洏淇℃伅 // 灏哻ontent.Data杞崲涓篟esultTrayCellsStatus瀵硅薄 var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString()); + if (result.SerialNos.Count <= 0) + return content.Error(result.MOMMessage); var boxing = await CreateBoxingInfo(result, input.PalletCode); // 璋冪敤GetProcessApplyAsync鏂规硶锛岃幏鍙栧伐鑹鸿矾绾� @@ -630,8 +463,8 @@ // 璋冪敤GetProcessResponseAsync鏂规硶锛岃幏鍙栧伐鑹哄搷搴� var processResponse = await GetProcessResponseAsync(process, input.Position); - // 濡傛灉task涓嶄负null锛屽垯璋冪敤UpdateExistingTask鏂规硶锛屾洿鏂颁换鍔★紱鍚﹀垯璋冪敤CreateNewTask鏂规硶锛屽垱寤烘柊浠诲姟 - content = task != null ? await UpdateExistingTask(input, task) : await CreateNewTask(processResponse, input); + // 璋冪敤CreateNewTask鏂规硶锛屽垱寤烘柊浠诲姟 + content = await CreateNewTask(input, processResponse); if (content.Status) { var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing); @@ -646,6 +479,70 @@ // 杩斿洖content return content; + } + + /// <summary> + /// 鏇存柊浠诲姟璐т綅 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<WebResponseContent> UpdateExistingTask(RequestTaskDto input) + { + WebResponseContent content = new WebResponseContent(); + try + { + var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == input.PalletCode); + if (task == null) + return content.Error($"鏆傛湭鎵惧埌銆恵input.PalletCode}銆戠殑浠诲姟"); + + return content = await UpdateExistingTask(input, task); + + } + catch (Exception err) + { + + throw; + } + } + + /// <summary> + /// 绌烘墭鐩樺叆搴撶敵璇� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<WebResponseContent> RequestTrayInTaskAsync(RequestTaskDto input) + { + WebResponseContent content = new WebResponseContent(); + try + { + + // 璋冪敤BaseDal.QueryFirstAsync鏂规硶锛屾煡璇换鍔� + var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == input.PalletCode); + if (task != null && task.TaskState == (int)TaskInStatusEnum.InNew) + { + // 鍒涘缓WMS浠诲姟 + WMSTaskDTO taskDTO = new WMSTaskDTO() + { + TaskNum = task.TaskNum.Value, + Grade = 1, + PalletCode = task.PalletCode, + RoadWay = task.Roadway, + SourceAddress = task.SourceAddress, + TargetAddress = task.Roadway, + TaskState = task.TaskState.Value, + Id = 0, + TaskType = task.TaskType, + }; + return content.OK(data: task); + } + + return await CreateNewTask(input, null, 1); + } + catch (Exception) + { + + throw; + } } // 鑾峰彇鎵樼洏鍗曞厓鏍肩姸鎬� @@ -679,8 +576,8 @@ // 鍒涘缓涓�涓狿rocessApplyDto瀵硅薄锛屽苟璧嬪�� return new ProcessApplyDto() { - EquipmentCode = "ECH001-B", - Software = "WMS", + EquipmentCode = "ECH001-B", + Software = "WMS", //WipOrderNo = result.BindCode, SerialNos = content.SerialNos.Select(item => new SerialNos { @@ -723,104 +620,7 @@ #endregion 璇锋眰浠诲姟鍏ュ簱 - #region 璇锋眰鍑哄簱 - - //public async Task<WebResponseContent> RequestTrayTaskAsync(string position, int tag, string areaCdoe,List<string> roadways) - //{ - // WebResponseContent content = new WebResponseContent(); - // try - // { - // // 1==瀹炵洏 2 ==绌虹洏 - // if (tag == 1) - // { - // // 鏌ヨ搴撳瓨淇℃伅 - // DtStockInfo? stockInfo = _stockInfoRepository.QueryData(x => x.AreaCode == areaCdoe && Convert.ToDateTime(x.Remark) < DateTime.Now && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && roadways.Contains(x.LocationInfo.RoadwayNo)).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.Outbound, - // 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); - // } - // } - // else - // { - // var stockInfo = _stockInfoRepository.QueryData(x => x.AreaCode == areaCdoe && x.StockInfoDetails.Any(z => z.MaterielCode == "绌烘墭鐩�") && roadways.Contains(x.LocationInfo.RoadwayNo)).OrderBy(x => x.CreateDate).FirstOrDefault(); - // // 鍒涘缓鏂颁换鍔″疄渚� - // var task = new Dt_Task - // { - // CurrentAddress = stockInfo.LocationCode, - // 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 - // }; - // content.OK(data: taskDTO); - // } - // } - // } - // catch (Exception ex) - // { - // throw; - // } - // return content; - //} + #region 璇锋眰鍑哄簱锛堝疄鐩�&绌虹洏锛� /// <summary> /// 璇锋眰鎵樼洏浠诲姟 @@ -830,13 +630,13 @@ /// <param name="areaCode">鍖哄煙缂栫爜</param> /// <param name="roadways">宸烽亾缂栫爜闆嗗悎</param> /// <returns>杩斿洖缁撴灉闆�</returns> - public async Task<WebResponseContent> RequestTrayTaskAsync(string position, int tag, string areaCode, List<string> roadways) + public async Task<WebResponseContent> RequestTrayOutTaskAsync(string position, int tag, string areaCode, List<string> roadways) { WebResponseContent content = new WebResponseContent(); try { // 鏍规嵁鎵樼洏绫诲瀷鏌ヨ搴撳瓨淇℃伅 - DtStockInfo stockInfo = tag == 1 + DtStockInfo stockInfo = tag == (int)TaskOutboundTypeEnum.Outbound ? QueryStockInfoForRealTray(areaCode, roadways) : QueryStockInfoForEmptyTray(areaCode, roadways); @@ -856,7 +656,7 @@ // 鍒涘缓浠诲姟DTO WMSTaskDTO taskDTO = CreateTaskDTO(task); - if (tag == 1) + //if (tag == 1) { // 鏇存柊搴撳瓨浣嶇疆鐘舵�佷负涓嶅彲鐢� stockInfo.LocationInfo.LocationStatus = (int)LocationEnum.InStockDisable; @@ -870,7 +670,7 @@ { // 璁板綍寮傚父淇℃伅骞舵姏鍑� LogFactory.GetLog("璇锋眰鎵樼洏浠诲姟").Error(true, ex); - throw; + return content.Error(ex.Message); } } @@ -879,9 +679,11 @@ /// </summary> private DtStockInfo QueryStockInfoForRealTray(string areaCode, List<string> roadways) { - return _stockInfoRepository.QueryData(x => x.AreaCode == areaCode && Convert.ToDateTime(x.Remark) < DateTime.Now && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && roadways.Contains(x.LocationInfo.RoadwayNo)) + return _stockInfoRepository.Db.Queryable<DtStockInfo>().Where(x => x.AreaCode == areaCode && Convert.ToDateTime(x.Remark) < DateTime.Now && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && roadways.Contains(x.LocationInfo.RoadwayNo)) + .Includes(x => x.LocationInfo) + .Includes(x => x.StockInfoDetails) .OrderBy(x => x.CreateDate) - .FirstOrDefault(); + .First(); } /// <summary> @@ -889,9 +691,11 @@ /// </summary> private DtStockInfo QueryStockInfoForEmptyTray(string areaCode, List<string> roadways) { - return _stockInfoRepository.QueryData(x => x.AreaCode == areaCode && x.StockInfoDetails.Any(z => z.MaterielCode == "绌烘墭鐩�") && roadways.Contains(x.LocationInfo.RoadwayNo)) + return _stockInfoRepository.Db.Queryable<DtStockInfo>().Where(x => x.AreaCode == areaCode && x.StockInfoDetails.Any(z => z.MaterielCode == "绌烘墭鐩�") && roadways.Contains(x.LocationInfo.RoadwayNo)) + .Includes(x => x.LocationInfo) + .Includes(x => x.StockInfoDetails) .OrderBy(x => x.CreateDate) - .FirstOrDefault(); + .First(); } /// <summary> @@ -910,8 +714,9 @@ OrderNo = null, PalletCode = stockInfo.PalletCode, SourceAddress = stockInfo.LocationCode, + CurrentAddress = stockInfo.LocationCode, TaskState = (int)TaskOutStatusEnum.OutNew, - TaskType = tag == 1 ? (int)TaskOutboundTypeEnum.Outbound : (int)TaskOutboundTypeEnum.OutTray, + TaskType = tag == (int)TaskOutboundTypeEnum.Outbound ? (int)TaskOutboundTypeEnum.Outbound : (int)TaskOutboundTypeEnum.OutTray, TaskNum = BaseDal.GetTaskNo().Result, Creater = "System" // 淇鎷煎啓閿欒 }; @@ -938,64 +743,82 @@ #endregion 璇锋眰鍑哄簱 - #region 闄堝寲璇锋眰鍑哄簱 + #region 浠诲姟鐘舵�佹洿鏀� - // 闄堝寲璇锋眰鍑哄簱 - public async Task<WebResponseContent> OutTrayByCh(string position) + /// <summary> + /// 鏇存柊浠诲姟鐘舵��&鍑哄簱瑙g洏 + /// </summary> + /// <param name="taskNum"></param> + /// <param name="taskState"></param> + /// <returns></returns> + public async Task<WebResponseContent> UpdateTaskStatus(int taskNum, int taskState) { WebResponseContent content = new WebResponseContent(); try { - var area = _areaInfoRepository.QueryFirst(x => x.AreaName == "闄堝寲鍖�"); + var task = await BaseDal.QueryFirstAsync(x => x.TaskNum == taskNum); + if (task == null) + return content.Error("鏈壘鍒颁换鍔�"); - // 鏌ヨ搴撳瓨淇℃伅 - 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() + if (taskState == (int)TaskOutStatusEnum.Line_OutFinish) { - 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() + var taskHty = CreateHistoricalTask(task); + await _unitOfWorkManage.UseTranAsync(async () => { - 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); + var asb = await BaseDal.DeleteDataByIdAsync(task.TaskId); + var asbHty = await _task_HtyRepository.AddDataAsync(taskHty) > 0; + if (asb && asbHty) + content.OK(); + else + throw new Exception(); + }); + content.OK(); + } + else + { + task.TaskState = taskState; + var asb = await BaseDal.UpdateDataAsync(task); + if (asb) + content.OK(); + else + content.Error(); } } catch (Exception ex) { - throw; + content.Error(ex.Message); } return content; } - #endregion 闄堝寲璇锋眰鍑哄簱 + #endregion + + #region 鍑哄簱瑙g洏 + + /// <summary> + /// 鍑哄簱瑙g洏鎺ュ彛 + /// </summary> + /// <param name="taskNum"></param> + /// <returns></returns> + public async Task<WebResponseContent> OutUnblockInterface(int taskNum) + { + WebResponseContent content = new WebResponseContent(); + try + { + var task = await BaseDal.QueryFirstAsync(x => x.TaskNum == taskNum); + if (task == null) + return content.Error("鏈壘鍒颁换鍔�"); + task.TaskState = (int)TaskOutStatusEnum.Line_OutFinish; + var taskHty = CreateHistoricalTask(task); + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } + + #endregion #endregion 澶栭儴鎺ュ彛鏂规硶 @@ -1361,10 +1184,18 @@ /// <param name="areaId">鍖哄煙ID</param> /// <param name="content">鍝嶅簲鍐呭</param> /// <returns></returns> - private async Task<WebResponseContent> CreateNewTask(List<Dt_EquipmentProcess> process, RequestTaskDto input) + private async Task<WebResponseContent> CreateNewTask(RequestTaskDto input, List<Dt_EquipmentProcess> process = null, int flag = 0) { WebResponseContent content = new WebResponseContent(); - List<string> strings = process.Select(x => x.EquipmentName).ToList(); + List<string> strings = new List<string>(); + if (process != null) + { + strings = process.Select(x => x.EquipmentName).ToList(); + } + else + { + strings = input.Position.Split(',').ToList(); + } // 鑾峰彇鐩爣鍦板潃 string ToAddress = await GetRoadWayAsync(strings); @@ -1382,7 +1213,7 @@ PalletCode = input.PalletCode, SourceAddress = input.Position, TaskState = (int)TaskInStatusEnum.InNew, - TaskType = (int)TaskTypeEnum.Inbound, + TaskType = flag == 0 ? (int)TaskInboundTypeEnum.Inbound : (int)TaskInboundTypeEnum.InTray, TaskNum = await BaseDal.GetTaskNo(), Creater = "Systeam" }; @@ -1460,6 +1291,22 @@ { var minGroup = _locationRepository.QueryData(x => process.Contains(x.RoadwayNo) && x.LocationStatus == (int)LocationEnum.Free) .GroupBy(x => x.RoadwayNo) + .OrderByDescending(g => g.Count()) // 鏍规嵁姣忎釜缁勭殑鍏冪礌鏁伴噺鎺掑簭 + .First(); // 鍙栧嚭鏁伴噺鏈�澶氱殑缁� + + string minRoadwayNo = minGroup.Key; // 鏁伴噺鏈�澶氱殑缁勭殑Key + + return minRoadwayNo; + } + + /// <summary> + /// 鑾峰彇宸烽亾鎴栫珯鍙� + /// </summary> + /// <returns></returns> + public async Task<string> GetRoadWayAsync(int areaCode) + { + var minGroup = _locationRepository.QueryData(x => x.AreaId == areaCode && x.LocationStatus == (int)LocationEnum.Free) + .GroupBy(x => x.RoadwayNo) .OrderBy(g => g.Count()) // 鏍规嵁姣忎釜缁勭殑鍏冪礌鏁伴噺鎺掑簭 .First(); // 鍙栧嚭鏁伴噺鏈�灏戠殑缁� -- Gitblit v1.9.3