package com.iailab.module.ansteel.job.task; import cn.hutool.core.bean.BeanUtil; import com.iailab.framework.common.util.date.DateUtils; import com.iailab.module.ansteel.coking.entity.*; import com.iailab.module.ansteel.coking.service.*; import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum; import com.iailab.module.ansteel.common.enums.ProcessTypeEnum; import com.iailab.module.data.api.ind.IndItemApi; import com.iailab.module.data.api.ind.dto.ApiIndItemQueryDTO; import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO; import com.iailab.module.data.api.point.DataPointApi; import com.iailab.module.data.api.point.dto.ApiPointValueDTO; import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** * 备煤工序-概况 * * @author PanZhibao * @Description * @createTime 2025年04月21日 */ @Slf4j @Component("runCokingOverviewTask") public class RunCokingOverviewTask implements ITask{ private Logger logger = LoggerFactory.getLogger(getClass()); @Resource private CokingProcessConfService cokingProcessConfService; @Resource private CokingOverviewService cokingOverviewService; @Resource private DataPointApi dataPointApi; @Resource private IndItemApi indItemApi; @Resource private CokingTraceReportService cokingTraceReportService; @Resource private CokingTraceDataService cokingTraceDataService; @Override public void run(String processTypes) { logger.info("runCokingOverviewTask,参数为:{}", processTypes); try { String[] split = processTypes.split(","); for (String processType : split) { CokingProcessConfEntity queryParams = new CokingProcessConfEntity(); queryParams.setIndType(processType); List list = cokingProcessConfService.list(queryParams); if (CollectionUtils.isEmpty(list)) { logger.info("ConfList is Empty"); continue; } Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.add(Calendar.DAY_OF_YEAR, -1); String clock = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY); // 溯源报告 CokingTraceReportEntity reportEntity = new CokingTraceReportEntity(); String relId = UUID.randomUUID().toString(); reportEntity.setId(relId); reportEntity.setProcess(ProcessTypeEnum.getEumByCode(processType).getProcess()); reportEntity.setReportName(ProcessTypeEnum.getEumByCode(processType).getReportName()); reportEntity.setAnalyDate(clock); reportEntity.setClock(clock); reportEntity.setCreateDate(new Date()); cokingTraceReportService.save(reportEntity); // 整体情况 // 筛选info_type = 2,按照子工序类型分组 Map> processTypeMap = list.stream().filter(e -> e.getInfoType().equals("2")).collect(Collectors.groupingBy(CokingProcessConfEntity::getExt2)); // 结果 <子工序类型,<数据key,数据value>> List result = new ArrayList<>(processTypeMap.size()); List exDatalist = new ArrayList<>(); for (Map.Entry> entry : processTypeMap.entrySet()) { Map values = new HashMap<>(entry.getValue().size()); for (CokingProcessConfEntity conf : entry.getValue()) { if (StringUtils.isBlank(conf.getDataType())) { logger.info("DataType is Empty"); continue; } if (StringUtils.isBlank(conf.getPointNo())) { logger.info("PointNo is Empty"); continue; } Double value = null; switch (ProcessConfDataTypeEnum.getEumByCode(conf.getDataType())) { case DATAPOINT: List points = new ArrayList<>(); points.add(conf.getPointNo()); Map pointsRealValue = dataPointApi.queryPointsRealValue(points); value = Double.valueOf(pointsRealValue.get(conf.getPointNo()).toString()); break; case IND: List indValues = indItemApi.queryIndItemDefaultValue(conf.getPointNo()); if (!CollectionUtils.isEmpty(indValues)) { value = Double.valueOf(indValues.get(indValues.size() - 1).getDataValue().toString()); } break; case MODEL: break; default: break; } values.put(conf.getExt1(),value); // 异常数据处理 String content = null; if (value != null) { if (value.equals(0.0)) { content = clock + " " + conf.getIndName() + "数据异常(数据为0)"; }else if (value.compareTo(Double.valueOf(conf.getExt3())) > 0) { content = clock + " " + conf.getIndName() + "数据异常(超上限)"; }else if (value.compareTo(Double.valueOf(conf.getExt4())) < 0) { content = clock + " " + conf.getIndName() + "数据异常(超下限)"; } }else { content = clock + " " + conf.getIndName() + "数据异常(无数据)"; } if (StringUtils.isNotBlank(content)) { CokingTraceDataEntity ctd = new CokingTraceDataEntity(); ctd.setId(UUID.randomUUID().toString()); ctd.setRelId(relId); ctd.setProcess(ProcessTypeEnum.getEumByCode(conf.getIndType()).getReportName()); ctd.setClock(clock); ctd.setExObj(conf.getIndType()+"_AD"); ctd.setExTime(calendar.getTime()); ctd.setExType(content); ctd.setCreateDate(new Date()); exDatalist.add(ctd); } } CokingOverviewEntity overviewEntity = new CokingOverviewEntity(); BeanUtil.fillBeanWithMap(values,overviewEntity,true); overviewEntity.setId(UUID.randomUUID().toString()); overviewEntity.setRelId(relId); overviewEntity.setProcessType(processType); overviewEntity.setSubProcessType(entry.getKey()); overviewEntity.setClock(clock); result.add(overviewEntity); // 清理旧数据 cokingOverviewService.deleteByProcessType(processType, clock); cokingTraceDataService.deleteByExObj(processType, clock); } cokingOverviewService.insert(result); cokingTraceDataService.insertList(exDatalist); } } catch (Exception ex) { logger.error("runCokingOverviewTask运行异常",ex); } logger.info("runCokingOverviewTask运行完成"); } }