| | |
| | | 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; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 工艺路线申请 |
| | |
| | | try |
| | | { |
| | | input.SessionId = Guid.NewGuid().ToString(); |
| | | input.EmployeeNo = "T00001"; |
| | | input.EmployeeNo = "MITest"; |
| | | input.RequestTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ"); |
| | | var inputIson = input.ToDictionary(); |
| | | var x = await HttpsClient.PostAsync("http://ts-momapp01:12020/api/MachineIntegration/ProcessApply", inputIson); |
| | | if (x != null) |
| | | var inputJson = input.ToDictionary(); |
| | | 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) |
| | | { |
| | | var ResultProcess = JsonConvert.DeserializeObject<ResultProcessApply>(x); |
| | | content.OK(data: ResultProcess); |
| | | 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<ResultProcessApply>(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, x); |
| | | LogFactory.GetLog("工艺路线申请").Info(true, result); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 补录出库数据 |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> 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<ResultTrayCellsStatus>(content.Data.ToString()); |
| | | if (result.SerialNos.Count > 0) |
| | | { |
| | | var stock = await SqlSugarHelper.DbWMS.Queryable<DtStockInfo>().FirstAsync(x => x.PalletCode == palletCode); |
| | | if (stock != null) |
| | | { |
| | | var parameterInfo = JsonConvert.DeserializeObject<List<ParameterInfo>>(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<ParameterInfoOutput> { |
| | | 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<DtStockInfo_Hty>().Where(x => x.PalletCode == palletCode).OrderByDescending(x => x.CreateDate).FirstAsync(); |
| | | if (stockHty != null) |
| | | { |
| | | var parameterInfo = JsonConvert.DeserializeObject<List<ParameterInfo>>(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<ParameterInfoOutput> { |
| | | 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; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 补录入库数据 |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <param name="areaID"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> 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<ResultTrayCellsStatus>(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<ResponeAgingInputDto>(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; |
| | | } |
| | | } |