using LogLibrary.Log; using Masuit.Tools; using Newtonsoft.Json; using WIDESEA_Common; using WIDESEA_Core; using WIDESEA_Core.Const; using WIDESEA_Core.Helper; using WIDESEA_DTO; using WIDESEA_DTO.MOM; using WIDESEA_IBusinessesRepository; using WIDESEA_IServices; using WIDESEA_IStorageBasicRepository; using WIDESEA_IStorageTaskRepository; using WIDESEA_IStoragIntegrationServices; using WIDESEA_Model.Models; namespace WIDESEA_StoragIntegrationServices; public class ProcessApplyService : IProcessApplyService { private readonly LogFactory LogFactory = new LogFactory(); private readonly ISys_ConfigService _configService; private readonly IDt_AreaInfoRepository _areaInfoRepository; private readonly ICellStateService _cellStateService; private readonly IStockInfoRepository _stockInfoRepository; private readonly IAgingInOrOutInputService _gingInOrOutInputService; public ProcessApplyService(ISys_ConfigService configRepository, IDt_AreaInfoRepository areaInfoRepository, ICellStateService cellStateService, IDt_TaskRepository taskRepository, IStockInfoRepository stockInfoRepository, IAgingInOrOutInputService gingInOrOutInputService) { _configService = configRepository; _areaInfoRepository = areaInfoRepository; _cellStateService = cellStateService; _stockInfoRepository = stockInfoRepository; _gingInOrOutInputService = gingInOrOutInputService; } /// /// 工艺路线申请 /// /// /// public async Task GetProcessApplyAsync(ProcessApplyDto input) { WebResponseContent content = new WebResponseContent(); try { input.SessionId = Guid.NewGuid().ToString(); input.EmployeeNo = "MITest"; input.RequestTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ"); var inputJson = Masuit.Tools.ObjectExtensions.ToDictionary(input); var configs = _configService.GetConfigsByCategory(CateGoryConst.SYS_MOMIPAddress); var wmsBase = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.MOMBaseIP)?.ConfigValue; var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.ProcessApply)?.ConfigValue; if (wmsBase == null || ipAddress == null) { throw new InvalidOperationException("WMS IP 未配置"); } var wmsIpAddress = wmsBase + ipAddress; var result = HttpsClient.PostAsync(wmsIpAddress, inputJson).Result; if (result != null) { content.OK(data: result); //var respone = JsonConvert.DeserializeObject(result.ToString()); //if (!respone.Success) //{ // MoMErrorMsg.AddMoMErrorMsg(0, input.WipOrderNo, respone.MOMMessage, SysConfigConst.TrayCellsStatus); //} //else //{ // MoMErrorMsg.DeleteMoMErrorMsg(0, input.WipOrderNo); //} } LogFactory.GetLog("工艺路线申请").Info(true, $"\r\r--------------------------------------"); LogFactory.GetLog("工艺路线申请").Info(true, result); } catch (Exception ex) { //Console.WriteLine(ex.Message); LogFactory.GetLog("工艺路线申请").Error(true, $"\r\r--------------------------------------"); LogFactory.GetLog("工艺路线申请").Error(true, ex.StackTrace); } return content; } /// /// 补录出库数据 /// /// /// public async Task StockOutDataBackfillInterfaceAsync(string palletCode, int areaID) { WebResponseContent content = new WebResponseContent(); try { var area = _areaInfoRepository.QueryFirst(x => x.AreaID == areaID); var trayCells = new TrayCellsStatusDto() { Software = area.Spare3, TrayBarcode = palletCode, EquipmentCode = area.Spare2, SceneType = area.Spare4 }; content = await _cellStateService.GetTrayCellStatusAsync(trayCells); if (!content.Status) return content; var result = JsonConvert.DeserializeObject(content.Data.ToString()); if (result.SerialNos.Count > 0) { var stock = await SqlSugarHelper.DbWMS.Queryable().FirstAsync(x => x.PalletCode == palletCode); if (stock != null) { var parameterInfo = JsonConvert.DeserializeObject>(stock.ParameterInfos).FirstOrDefault(y => y.Description.Contains("时间")); if (parameterInfo == null) throw new Exception(""); var outHours = (DateTime.Now - (stock.LinedProcessFeedbackTime == null ? stock.ModifyDate.Value : stock.LinedProcessFeedbackTime.ToDateTime())).TotalHours; var isNG = outHours > parameterInfo.LowerSpecificationsLimit.ToDouble() && outHours < parameterInfo.UpperSpecificationsLimit.ToDouble(); var defectCode = string.Empty; if (!isNG) defectCode = "TQCK"; var outputDto = new AgingOutputDto { OpFlag = 1, Software = area.Spare3, EquipmentCode = area.Spare2, TrayBarcode = palletCode, SerialNos = result.SerialNos.Select(x => new SerialNoOutDto { SlotNo = x.PositionNo, SerialNo = x.SerialNo, SerialNoResult = true, //isNG, ParameterInfo = new List { new ParameterInfoOutput() { Value = outHours.ToString(), ParameterCode =parameterInfo.ParameterCode, ParameterDesc = parameterInfo.Description, ParameterResult = "OK", //isNG.ToString(), TargetValue = parameterInfo.TargetValue, LowerLimit = parameterInfo.LowerSpecificationsLimit, UpperLimit = parameterInfo.UpperSpecificationsLimit, DefectCode = defectCode, UOMCode = parameterInfo.UOMCode, } } }).ToList() }; content = await _gingInOrOutInputService.GetOCVOutputAsync(outputDto); } else { var stockHty = await SqlSugarHelper.DbWMS.Queryable().Where(x => x.PalletCode == palletCode).OrderByDescending(x => x.CreateDate).FirstAsync(); if (stockHty != null) { var parameterInfo = JsonConvert.DeserializeObject>(stockHty.ParameterInfos).FirstOrDefault(y => y.Description.Contains("时间")); if (parameterInfo == null) throw new Exception(""); var outHours = (DateTime.Now - (stockHty.LinedProcessFeedbackTime == null ? "2025-01-08 15:59:34.310".ToDateTime() : stockHty.LinedProcessFeedbackTime.ToDateTime())).TotalHours; var isNG = outHours > parameterInfo.LowerSpecificationsLimit.ToDouble() && outHours < parameterInfo.UpperSpecificationsLimit.ToDouble(); var defectCode = string.Empty; if (!isNG) defectCode = "TQCK"; var outputDto = new AgingOutputDto { OpFlag = 1, Software = area.Spare3, EquipmentCode = area.Spare2, TrayBarcode = palletCode, SerialNos = result.SerialNos.Select(x => new SerialNoOutDto { SlotNo = x.PositionNo, SerialNo = x.SerialNo, SerialNoResult = true, //isNG, ParameterInfo = new List { new ParameterInfoOutput() { Value = outHours.ToString(), ParameterCode =parameterInfo.ParameterCode, ParameterDesc = parameterInfo.Description, ParameterResult = "OK", //isNG.ToString(), TargetValue = parameterInfo.TargetValue, LowerLimit = parameterInfo.LowerSpecificationsLimit, UpperLimit = parameterInfo.UpperSpecificationsLimit, DefectCode = defectCode, UOMCode = parameterInfo.UOMCode, } } }).ToList() }; content = await _gingInOrOutInputService.GetOCVOutputAsync(outputDto); } else { content.Error("杀杀杀"); } } } else { content.Error("电芯数据为空"); } } catch (Exception ex) { } return content; } /// /// 补录入库数据 /// /// /// /// public async Task StockInDataBackfillInterfaceAsync(string palletCode, int areaID) { WebResponseContent content = new WebResponseContent(); try { var area = _areaInfoRepository.QueryFirst(x => x.AreaID == areaID); var trayCells = new TrayCellsStatusDto() { Software = area.Spare3, TrayBarcode = palletCode, EquipmentCode = area.Spare2, SceneType = area.Spare4 }; content = await _cellStateService.GetTrayCellStatusAsync(trayCells); if (!content.Status) return content; var result = JsonConvert.DeserializeObject(content.Data.ToString()); if (result.SerialNos.Count > 0 && result.Success) { var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode); if (stockInfo != null) { stockInfo.IsFull = true; stockInfo.StockInfoDetails = result.SerialNos.Select(serialNoObj => new DtStockInfoDetail { SerialNumber = serialNoObj.SerialNo, OrderNo = serialNoObj.PositionNo.ToString(), Status = serialNoObj.SerialNoStatus, MaterielCode = result.BindCode, Remark = result.TrayBarcodePropertys.ToJsonString(), }).ToList(); stockInfo.Remark = stockInfo.StockInfoDetails.Count().ToString(); // 处理请求参数 AgingInputDto agingInputDto = new AgingInputDto() { SerialNos = stockInfo.StockInfoDetails .Select(item => new SerialNoInDto { SerialNo = item.SerialNumber, PositionNo = item.OrderNo }) .ToList(), TrayBarcode = palletCode, OpFlag = 1, EquipmentCode = area.Spare2, Software = area.Spare3 }; content = _gingInOrOutInputService.GetOCVInputAsync(agingInputDto).Result; var respone = JsonConvert.DeserializeObject(content.Data.ToString()); stockInfo.LinedProcessFeedbackTime = respone.LinedProcessFeedbackTime; stockInfo.SpecialParameterDuration = respone.SpecialParameterDuration; //2024年11月16日:新增字段计算应出库时间 stockInfo.OutboundTime = Convert.ToDateTime(respone.LinedProcessFeedbackTime == null ? DateTime.Now : respone.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(respone.SpecialParameterDuration)); stockInfo.ProductionLine = respone.ProductionLine; stockInfo.ParameterInfos = respone.ParameterInfos.ToJsonString(); stockInfo.StockStatus = 1; var isResult = await _stockInfoRepository.UpdateDataNavAsync(stockInfo); if (isResult) content.OK("更新数据成功"); else content.Error("更新数据失败"); } else { content.Error("未找到库存"); } } else { return content; } } catch (Exception ex) { content.Error(ex.Message); } return content; } }