From a6ea79849f0142b5280f0c5d4b15ecc83f0d015a Mon Sep 17 00:00:00 2001 From: 刘磊 <1161824510@qq.com> Date: 星期六, 21 十二月 2024 09:52:27 +0800 Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/HuaYiZhongHeng/BaiBuLiKu --- Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs | 192 +++++++++++++++++++++++++++++++---------------- 1 files changed, 125 insertions(+), 67 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 0635fc9..bf8748c 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,5 +1,7 @@ -锘縰sing Mapster; +锘縰sing AngleSharp.Io; +using Mapster; using Masuit.Tools; +using System.Text.RegularExpressions; using WIDESEA_Core.Const; using WIDESEA_DTO.MOM; using WIDESEA_DTO.WMS; @@ -77,7 +79,7 @@ //var process = await SqlSugarHelper.Db.Queryable<Dt_EquipmentProcess>() // .FirstAsync(x => x.EquipmentName == task.Roadway); //var info = JsonConvert.DeserializeObject<ResponseEqptRunDto>(process.ProcessValue); - if (!task.Roadway.Contains("FR")) //闈炲垎瀹瑰簱鍖哄潎涓婃姤MOM鍑哄叆绔� + if (!task.Roadway.Contains("FR") && stock.ProcessCode != "OCVB") //闈炲垎瀹瑰簱鍖轰笌褰撳墠宸ュ簭鏄疧CVB鍧囦笂鎶OM鍑哄叆绔� { var agingOutputDto = MapToAgingOutputDto(stock); content = await _agingInOrOutInputService.GetOCVOutputAsync(agingOutputDto); @@ -154,13 +156,13 @@ { SlotNo = x.OrderNo.ToInt32(), SerialNo = x.SerialNumber, - SerialNoResult = isNG, + SerialNoResult = true, //isNG, ParameterInfo = new List<ParameterInfoOutput> { new ParameterInfoOutput() { Value = outHours.ToString(), ParameterCode =parameterInfo.ParameterCode, ParameterDesc = parameterInfo.Description, - ParameterResult = isNG.ToString(), + ParameterResult = "OK", //isNG.ToString(), TargetValue = parameterInfo.TargetValue, LowerLomit = parameterInfo.LowerSpecificationsLimit, UpperLimit = parameterInfo.UpperSpecificationsLimit, @@ -314,6 +316,13 @@ // 鍒涘缓鍘嗗彶浠诲姟瀹炰緥妯″瀷 var taskHty = CreateHistoricalTask(task); + if (task.TaskType == (int)TaskInboundTypeEnum.InQuality) + { + await _locationRepository.UpdateDataAsync(locationInf); + await _task_HtyRepository.AddDataAsync(taskHty); + await BaseDal.DeleteDataAsync(task); + return content.OK("鍏ュ簱浠诲姟瀹屾垚鎴愬姛"); + } // 鏍规嵁鏄惁鏈夌粍鐩樹俊鎭垱寤哄簱瀛樺疄渚嬫ā鍨� DtStockInfo stock = boxing == null ? CreateEmptyPalletStock(task, locationInf) : CreateFullPalletStock(task, locationInf, boxing); @@ -410,11 +419,20 @@ } else { - var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress); - if (station.stationPLC == "1017") - area = _areaInfoRepository.QueryFirst(x => x.AreaID == Convert.ToInt32(station.stationNGLocation)); - else - area = _areaInfoRepository.QueryFirst(x => x.AreaID == loation.AreaId); + //var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress); + //if (station.stationPLC == "1017") + // area = _areaInfoRepository.QueryFirst(x => x.AreaID == Convert.ToInt32(station.stationNGLocation)); + //else + // area = _areaInfoRepository.QueryFirst(x => x.AreaID == loation.AreaId); + //if (area == null) + // throw new Exception("鏈壘鍒板搴斿尯鍩熶俊鎭�"); + + if (boxing.ProcessCode == "OCV1") + area = _areaInfoRepository.QueryFirst(x => x.AreaID == 6); + + else if (boxing.ProcessCode == "OCVB") + area = _areaInfoRepository.QueryFirst(x => x.AreaID == 7); + if (area == null) throw new Exception("鏈壘鍒板搴斿尯鍩熶俊鎭�"); } @@ -431,33 +449,51 @@ AreaCode = area.AreaCode, LocationId = loation.Id, StockInfoDetails = boxDetail, + ProcessCode = boxing.ProcessCode, + NextProcessCode = boxing.NextProcessCode, + Remark = boxing.BoxingInfoDetails.Count().ToString(), }; - // 澶勭悊璇锋眰鍙傛暟 - AgingInputDto agingInputDto = new AgingInputDto() + if (boxing.ProcessCode != "OCVB") { - SerialNos = boxing.BoxingInfoDetails - .Select(item => new SerialNoInDto { SerialNo = item.SerialNumber, PositionNo = item.OrderNo }) - .ToList(), - TrayBarcode = task.PalletCode, - OpFlag = 1, - EquipmentCode = area.Spare2, - Software = area.Spare3 - }; + // 澶勭悊璇锋眰鍙傛暟 + AgingInputDto agingInputDto = new AgingInputDto() + { + SerialNos = boxing.BoxingInfoDetails + .Select(item => new SerialNoInDto { SerialNo = item.SerialNumber, PositionNo = item.OrderNo }) + .ToList(), + TrayBarcode = task.PalletCode, + OpFlag = 1, + EquipmentCode = area.Spare2, + Software = area.Spare3 + }; - var result = _agingInOrOutInputService.GetOCVInputAsync(agingInputDto).Result; - var respone = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString()); - if (respone.ProductionLine == null || respone.ParameterInfos == null || respone.SpecialParameterDuration.IsNullOrEmpty()) - { - throw new Exception("MOM鏁版嵁杩斿洖閿欒"); + var result = _agingInOrOutInputService.GetOCVInputAsync(agingInputDto).Result; + var respone = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString()); + + bool isFull = false; + if (!task.Roadway.Contains("FR")) + { + isFull = respone.SpecialParameterDuration.IsNullOrEmpty(); + } + if (respone.ProductionLine == null || respone.ParameterInfos == null) + { + throw new Exception("MOM鏁版嵁杩斿洖閿欒"); + } + stock.LinedProcessFeedbackTime = respone.LinedProcessFeedbackTime; + stock.SpecialParameterDuration = respone.SpecialParameterDuration; + //2024骞�11鏈�16鏃ワ細鏂板瀛楁璁$畻搴斿嚭搴撴椂闂� + stock.OutboundTime = Convert.ToDateTime(respone.LinedProcessFeedbackTime == null ? DateTime.Now : respone.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(respone.SpecialParameterDuration)); + stock.ProductionLine = respone.ProductionLine; + stock.ParameterInfos = respone.ParameterInfos.ToJsonString(); + stock.StockStatus = 1; } - stock.LinedProcessFeedbackTime = respone.LinedProcessFeedbackTime; - stock.SpecialParameterDuration = respone.SpecialParameterDuration; - //2024骞�11鏈�16鏃ワ細鏂板瀛楁璁$畻搴斿嚭搴撴椂闂� - stock.OutboundTime = Convert.ToDateTime(respone.LinedProcessFeedbackTime == null ? DateTime.Now : respone.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(respone.SpecialParameterDuration)); - stock.ProductionLine = respone.ProductionLine; - stock.ParameterInfos = respone.ParameterInfos.ToJsonString(); - stock.StockStatus = 1; + else + { + stock.OutboundTime = DateTime.Now; + stock.StockStatus = 1; + stock.ProductionLine = boxing.ProductionLine; + } // 璁板綍鏃ュ織 LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍏ュ簱浠诲姟瀹屾垚", $"璐т綅鍦板潃锛歿task.TargetAddress},淇敼鍚庤揣浣嶆暟鎹細{locationInf}"); @@ -791,7 +827,7 @@ PalletCode = stock.PalletCode, SourceAddress = input.Position, CurrentAddress = input.Position, - TaskState = (int)TaskInStatusEnum.InNew, + TaskState = stock.LocationInfo.RoadwayNo.Contains("CH") ? (int)TaskInStatusEnum.InNew : (int)TaskInStatusEnum.Line_InFinish, TaskType = (int)TaskInboundTypeEnum.InQuality, TaskNum = BaseDal.GetTaskNo().Result, Creater = "System", // 淇鎷煎啓閿欒 @@ -799,12 +835,15 @@ TaskId = 0, }; - var taskDTO = CreateTaskDTO(task); + var taskDTO = CreateTaskDTO(taskNew); + BaseDal.AddData(taskNew); + return content.OK(data: taskDTO); // TODO璐ㄦ鍥炲簱 } // 鏍规嵁浣嶇疆鏌ヨ鍖哄煙淇℃伅 - var area = await QueryAreaInfoByPosition(input.Position.Replace("-1", "")); + var areaCode = Regex.Replace(input.Position, @"-(\d+)", ""); + var area = await QueryAreaInfoByPosition(areaCode); if (area == null) { return content.Error("璇ョ偣浣嶄笉鍦ㄥ尯鍩熷垪琛ㄤ腑瀛樺湪"); @@ -821,7 +860,15 @@ if (result.SerialNos.Count <= 0) { // 绌烘墭鐩樺叆搴撻�昏緫 - return await RequestTrayInTaskAsync(input); + var staion = _stationManagerRepository.QueryFirst(x => x.stationChildCode == input.Position && x.stationType == 1 && x.remark == "IN"); + if (staion != null) + { + return await HandleErrorCells(input, area); + } + else + { + return await RequestTrayInTaskAsync(input); + } } else return content.Error(result.MOMMessage); @@ -934,6 +981,7 @@ PalletCode = palletCode, IsFull = true, ProcessCode = result.ProcessCode, + ProductionLine = result.ProductionLine, BoxingInfoDetails = result.SerialNos.Select(serialNoObj => new DtBoxingInfoDetail { SerialNumber = serialNoObj.SerialNo, @@ -971,15 +1019,15 @@ /// <param name="areaCode">鍖哄煙缂栫爜</param> /// <param name="roadways">宸烽亾缂栫爜闆嗗悎</param> /// <returns>杩斿洖缁撴灉闆�</returns> - public async Task<WebResponseContent> RequestTrayOutTaskAsync(string position, int tag, string areaCode, string productionLine) + public async Task<WebResponseContent> RequestTrayOutTaskAsync(string position, int tag, string areaCode, List<string> areaCodes, string productionLine) { WebResponseContent content = new WebResponseContent(); try { // 鏍规嵁鎵樼洏绫诲瀷鏌ヨ搴撳瓨淇℃伅 DtStockInfo stockInfo = tag == (int)TaskOutboundTypeEnum.Outbound - ? QueryStockInfoForRealTrayAsync(areaCode, productionLine).Result - : QueryStockInfoForEmptyTrayAsync(areaCode).Result; + ? areaCodes == null ? await QueryStockInfoForRealTrayAsync(areaCode, productionLine) : await QueryStockInfoForRealTrayCWAsync(areaCodes, productionLine) + : await QueryStockInfoForEmptyTrayAsync(areaCode); if (stockInfo == null) { @@ -1034,6 +1082,28 @@ .Includes(x => x.LocationInfo) // 棰勫姞杞絃ocationInfo .Includes(x => x.StockInfoDetails) // 棰勫姞杞絊tockInfoDetails .Where(x => x.AreaCode == areaCode && x.OutboundTime < DateTime.Now && x.IsFull == true) // 杩囨护鏉′欢 + .WhereIF(!productionLine.IsNullOrEmpty(), x => x.ProductionLine == productionLine) + .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID) // 杩囨护鏉′欢 + .OrderBy(x => x.OutboundTime) // 鎺掑簭 + .FirstAsync(); // 鑾峰彇绗竴涓厓绱� + + //var firstOrDefault = result.FirstOrDefault(x => roadways.Contains(x.LocationInfo.RoadwayNo)); // 鏌ユ壘绗竴涓尮閰嶇殑鍏冪礌 + //var firstOrDefault = result[0]; // 鏌ユ壘绗竴涓尮閰嶇殑鍏冪礌 + //return firstOrDefault; + return result; + } + + /// <summary> + /// 鏌ヨ瀹炵洏搴撳瓨淇℃伅 + /// </summary> + private async Task<DtStockInfo> QueryStockInfoForRealTrayCWAsync(List<string> areaCodes, string productionLine) + { + var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == "CWSC1"); + + var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>() + .Includes(x => x.LocationInfo) // 棰勫姞杞絃ocationInfo + .Includes(x => x.StockInfoDetails) // 棰勫姞杞絊tockInfoDetails + .Where(x => areaCodes.Contains(x.AreaCode) && x.OutboundTime < DateTime.Now && x.IsFull == true) // 杩囨护鏉′欢 .WhereIF(!productionLine.IsNullOrEmpty(), x => x.ProductionLine == productionLine) .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID) // 杩囨护鏉′欢 .OrderBy(x => x.OutboundTime) // 鎺掑簭 @@ -1163,33 +1233,6 @@ #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 鍑哄簱瑙g洏 - #region 鎸囧畾浠诲姟鍑哄簱 public async Task<WebResponseContent> CreateAndSendOutboundTask(string locationCode, string palletCode) @@ -1215,8 +1258,19 @@ taskType = (int)TaskOutboundTypeEnum.OutQuality; else taskType = (int)TaskOutboundTypeEnum.OutTray; - // 鍒涘缓骞舵坊鍔犱换鍔″埌鏁版嵁搴� - task = CreateTask(stockInfo, "1020-1", taskType); + + if (stockInfo.AreaCode.Contains("CH")) + { + // 鍒涘缓骞舵坊鍔犱换鍔″埌鏁版嵁搴� + task = CreateTask(stockInfo, "1020-1", taskType); + } + else + { + if (stockInfo.LocationInfo.RoadwayNo == "JZSC1") + { + task = CreateTask(stockInfo, "002-021-001", taskType); + } + } //var taskId = await BaseDal.AddDataAsync(task); //if (taskId <= 0) //{ @@ -1269,6 +1323,10 @@ #endregion 鎸囧畾浠诲姟鍑哄簱 + #region 闈欑疆寮傚父鍙e叆搴� + + #endregion + #endregion 澶栭儴鎺ュ彛鏂规硶 #region 鍐呴儴璋冪敤鏂规硶 -- Gitblit v1.9.3