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.CokingOverviewEntity; import com.iailab.module.ansteel.coking.entity.CokingProcessConfEntity; import com.iailab.module.ansteel.coking.entity.CokingTraceChartEntity; import com.iailab.module.ansteel.coking.entity.CokingTraceReportEntity; import com.iailab.module.ansteel.coking.service.CokingOverviewService; import com.iailab.module.ansteel.coking.service.CokingProcessConfService; import com.iailab.module.ansteel.coking.service.CokingTraceChartService; import com.iailab.module.ansteel.coking.service.CokingTraceReportService; 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.ApiIndItemValueDTO; import com.iailab.module.data.api.point.DataPointApi; 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; import java.util.stream.Stream; /** * 备煤工序-概况 * * @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 CokingTraceChartService cokingTraceChartService; @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("ConfLis is Empty"); return; } 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); 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()); 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 = 0.0; 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); } 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.insert(result); // 指标运行趋势 List indRunTrend = list.stream().filter(e -> e.getInfoType().equals("1")).collect(Collectors.toList()); List cokingTraceChartEntityList = new ArrayList<>(indRunTrend.size()); indRunTrend.forEach(e -> { CokingTraceChartEntity cokingTraceChartEntity = new CokingTraceChartEntity(); cokingTraceChartEntity.setRelId(relId); cokingTraceChartEntity.setName(e.getIndName()); cokingTraceChartEntity.setClock(clock); cokingTraceChartEntity.setDataNo(e.getPointNo()); cokingTraceChartEntity.setDataType(e.getDataType()); Calendar clone = (Calendar) calendar.clone(); cokingTraceChartEntity.setEndTime(clone.getTime()); if (e.getExt2().equals("month")) { clone.add(Calendar.MONTH,-1 * Integer.parseInt(e.getExt1())); } else if (e.getExt2().equals("day")) { clone.add(Calendar.DAY_OF_YEAR,-1 * Integer.parseInt(e.getExt1())); } cokingTraceChartEntity.setStartTime(clone.getTime()); cokingTraceChartEntity.setCreateDate(new Date()); cokingTraceChartEntityList.add(cokingTraceChartEntity); }); cokingTraceChartService.insert(cokingTraceChartEntityList); } } catch (Exception ex) { logger.error("runCokingOverviewTask运行异常"); ex.printStackTrace(); } logger.info("runCokingOverviewTask运行完成"); } }