ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/CokingProcessChildService.java
@@ -15,4 +15,6 @@ List<CokingProcessChildEntity> list(Map<String, Object> params); void save(CokingProcessChildEntity cokingProcessChild); void deleteByClock(String clock); } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/CokingProcessMainService.java
@@ -15,4 +15,6 @@ List<CokingProcessMainEntity> list(Map<String, Object> params); void save(CokingProcessMainEntity cokingProcessMainEntity); void deleteByClock(String clock); } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/impl/CokingProcessChildServiceImpl.java
@@ -52,4 +52,11 @@ public void save(CokingProcessChildEntity cokingProcessChild) { cokingProcessChildDao.insert(cokingProcessChild); } @Override public void deleteByClock(String clock) { QueryWrapper<CokingProcessChildEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("clock", clock); cokingProcessChildDao.delete(queryWrapper); } } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/impl/CokingProcessMainServiceImpl.java
@@ -50,4 +50,11 @@ public void save(CokingProcessMainEntity cokingProcessMainEntity) { cokingProcessMainDao.insert(cokingProcessMainEntity); } @Override public void deleteByClock(String clock) { QueryWrapper<CokingProcessMainEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("clock", clock); cokingProcessMainDao.delete(queryWrapper); } } ansteel-biz/src/main/java/com/iailab/module/ansteel/common/enums/ProcessIndDataTypeEnum.java
对比新文件 @@ -0,0 +1,35 @@ package com.iailab.module.ansteel.common.enums; import lombok.AllArgsConstructor; import lombok.Getter; /** * @author HouZhongjian * @Description * @createTime 2025年04月14日 */ @Getter @AllArgsConstructor public enum ProcessIndDataTypeEnum { LSPJ("LSPJ", "历史平均"), LLZ("LLZ", "理论值"), SJZ("SJZ", "实际值"), JZZ("JZZ", "基准值"), SSSJ("SSSJ", "实时数据"); private String code; private String desc; public static ProcessIndDataTypeEnum getEumByCode(String code) { if (code == null) { return null; } for (ProcessIndDataTypeEnum statusEnum : ProcessIndDataTypeEnum.values()) { if (statusEnum.getCode().equals(code)) { return statusEnum; } } return null; } } ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingChildDayTask.java
@@ -1,10 +1,11 @@ package com.iailab.module.ansteel.job.task; import com.iailab.framework.common.util.date.DateUtils; import com.iailab.module.ansteel.api.entity.CokingProcessConfEntity; import com.iailab.module.ansteel.api.entity.CokingProcessChildEntity; import com.iailab.module.ansteel.api.service.CokingProcessChildService; import com.iailab.module.ansteel.api.service.CokingProcessConfService; import com.iailab.module.ansteel.api.service.CokingProcessMainService; import com.iailab.module.ansteel.common.enums.ProcessIndDataTypeEnum; import com.iailab.module.data.api.point.DataPointApi; import org.apache.commons.lang3.ObjectUtils; import org.slf4j.Logger; @@ -12,8 +13,6 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -44,6 +43,8 @@ Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.add(Calendar.DAY_OF_YEAR, -1); String clock = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY); CokingProcessConfEntity queryParams = new CokingProcessConfEntity(); queryParams.setIndType("child"); List<CokingProcessConfEntity> list = cokingProcessConfService.list(queryParams); @@ -69,40 +70,36 @@ (a, b) -> a, LinkedHashMap::new)))); // 获取当前日期时间 LocalDateTime now = LocalDateTime.now(); // 减去一天得到昨天同一时间 LocalDateTime yesterday = now.minusDays(1); // 格式化输出 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String formattedDateTime = yesterday.format(formatter); logger.info("清理旧数据"); cokingProcessChildService.deleteByClock(clock); AtomicReference<Integer> counter = new AtomicReference<>(1); groupMap.forEach((group, confList) -> { CokingProcessChildEntity cokingProcessChildEntity = new CokingProcessChildEntity(); cokingProcessChildEntity.setInfoType("0"); cokingProcessChildEntity.setSort(counter.getAndSet(counter.get() + 1)); cokingProcessChildEntity.setCategory("day"); cokingProcessChildEntity.setIndName(group); cokingProcessChildEntity.setClock(formattedDateTime); CokingProcessConfEntity conf = confList.get(0); cokingProcessChildEntity.setIndType(conf.getExt2()); cokingProcessChildEntity.setIndMain(conf.getExt1().replace(conf.getExt2(), "")); confList.forEach(cokingProcessConfEntity -> { cokingProcessChildEntity.setClock(clock); CokingProcessConfEntity childConf = confList.get(0); cokingProcessChildEntity.setIndType(childConf.getExt3()); cokingProcessChildEntity.setIndMain(childConf.getExt4()); cokingProcessChildEntity.setIndName(childConf.getExt5()); confList.forEach(conf -> { List<String> points = new ArrayList<>(); points.add(cokingProcessConfEntity.getPointNo()); points.add(conf.getPointNo()); Map<String, Object> stringObjectMap = dataPointApi.queryPointsRealValue(points); //保存数据 Object value = stringObjectMap.get(cokingProcessConfEntity.getPointNo()); Object value = stringObjectMap.get(conf.getPointNo()); if(ObjectUtils.isNotEmpty(value)) { if(cokingProcessConfEntity.getIndCode().endsWith("LSPJ")) { if(conf.getExt2().equals(ProcessIndDataTypeEnum.LSPJ.getCode())) { cokingProcessChildEntity.setAvgValue(value.toString()); } else if(cokingProcessConfEntity.getIndCode().endsWith("LLZ")) { } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.LLZ.getCode())) { cokingProcessChildEntity.setTheoryValue(value.toString()); } else if(cokingProcessConfEntity.getIndCode().endsWith("SJZ")) { } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.SJZ.getCode())) { cokingProcessChildEntity.setActualValue(value.toString()); } else if(cokingProcessConfEntity.getIndCode().endsWith("JZZ")) { } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.JZZ.getCode())) { cokingProcessChildEntity.setStandValue(value.toString()); } else if(cokingProcessConfEntity.getIndCode().endsWith("SSSJ")) { } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.SSSJ.getCode())) { cokingProcessChildEntity.setRealValue(value.toString()); } } ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainDayTask.java
@@ -1,18 +1,22 @@ package com.iailab.module.ansteel.job.task; import com.iailab.framework.common.util.date.DateUtils; import com.iailab.module.ansteel.api.entity.CokingProcessConfEntity; import com.iailab.module.ansteel.api.entity.CokingProcessMainEntity; import com.iailab.module.ansteel.api.service.CokingProcessConfService; import com.iailab.module.ansteel.api.service.CokingProcessMainService; import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum; import com.iailab.module.ansteel.common.enums.ProcessIndDataTypeEnum; 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 org.apache.commons.lang3.ObjectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -36,6 +40,9 @@ @Resource private DataPointApi dataPointApi; @Resource private IndItemApi indItemApi; @Override public void run(String params) { logger.info("RunCokingMainDayTask,参数为:{}", params); @@ -43,74 +50,84 @@ Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.add(Calendar.DAY_OF_YEAR, -1); String clock = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY); CokingProcessConfEntity queryParams = new CokingProcessConfEntity(); queryParams.setIndType("main"); List<CokingProcessConfEntity> list = cokingProcessConfService.list(queryParams); if (ObjectUtils.isNotEmpty(list)) { //按照指标大类扩展字段ext1分类 并且按照sort排序 // Map<String, List<CokingProcessConfEntity>> groupMap = list.stream().sorted(Comparator.comparing(CokingProcessConfEntity::getSort)) // .collect(Collectors.groupingBy(CokingProcessConfEntity::getExt1, TreeMap::new, Collectors.toList())); // 先建立ext1到sort的映射关系 Map<String, Integer> ext1ToSort = list.stream() .collect(Collectors.toMap( CokingProcessConfEntity::getExt1, CokingProcessConfEntity::getSort, (oldValue, newValue) -> oldValue)); // 然后按这个关系排序分组 Map<String, List<CokingProcessConfEntity>> groupMap = list.stream() .sorted(Comparator.comparing(CokingProcessConfEntity::getSort)) .collect(Collectors.collectingAndThen( Collectors.groupingBy(CokingProcessConfEntity::getExt1), map -> map.entrySet().stream() .sorted(Comparator.comparingInt( e -> ext1ToSort.get(e.getKey()))) // 按ext1对应的sort值排序 .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, LinkedHashMap::new)))); // 获取当前日期时间 LocalDateTime now = LocalDateTime.now(); // 减去一天得到昨天同一时间 LocalDateTime yesterday = now.minusDays(1); // 格式化输出 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String formattedDateTime = yesterday.format(formatter); //计数器 AtomicReference<Integer> counter = new AtomicReference<>(1); groupMap.forEach((group, confList) -> { CokingProcessMainEntity cokingProcessMainEntity = new CokingProcessMainEntity(); cokingProcessMainEntity.setInfoType("0"); cokingProcessMainEntity.setSort(counter.getAndSet(counter.get() + 1)); cokingProcessMainEntity.setCategory("day"); cokingProcessMainEntity.setIndName(group); cokingProcessMainEntity.setClock(formattedDateTime); confList.forEach(cokingProcessConfEntity -> { List<String> points = new ArrayList<>(); points.add(cokingProcessConfEntity.getPointNo()); Map<String, Object> stringObjectMap = dataPointApi.queryPointsRealValue(points); //保存数据 Object value = stringObjectMap.get(cokingProcessConfEntity.getPointNo()); if(ObjectUtils.isNotEmpty(value)) { if(cokingProcessConfEntity.getIndCode().endsWith("LSPJ")) { cokingProcessMainEntity.setAvgValue(value.toString()); } else if(cokingProcessConfEntity.getIndCode().endsWith("LLZ")) { cokingProcessMainEntity.setTheoryValue(value.toString()); } else if(cokingProcessConfEntity.getIndCode().endsWith("SJZ")) { cokingProcessMainEntity.setActualValue(value.toString()); } else if(cokingProcessConfEntity.getIndCode().endsWith("JZZ")) { cokingProcessMainEntity.setStandValue(value.toString()); } else if(cokingProcessConfEntity.getIndCode().endsWith("SSSJ")) { cokingProcessMainEntity.setRealValue(value.toString()); } } }); cokingProcessMainService.save(cokingProcessMainEntity); }); if (CollectionUtils.isEmpty(list)) { logger.info("ConfLis is Empty"); return; } // 先建立ext1到sort的映射关系 Map<String, Integer> ext1ToSort = list.stream() .collect(Collectors.toMap( CokingProcessConfEntity::getExt1, CokingProcessConfEntity::getSort, (oldValue, newValue) -> oldValue)); // 然后按这个关系排序分组 Map<String, List<CokingProcessConfEntity>> groupMap = list.stream() .sorted(Comparator.comparing(CokingProcessConfEntity::getSort)) .collect(Collectors.collectingAndThen( Collectors.groupingBy(CokingProcessConfEntity::getExt1), map -> map.entrySet().stream() .sorted(Comparator.comparingInt( e -> ext1ToSort.get(e.getKey()))) // 按ext1对应的sort值排序 .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, LinkedHashMap::new)))); logger.info("清理旧数据"); cokingProcessMainService.deleteByClock(clock); //计数器 AtomicReference<Integer> counter = new AtomicReference<>(1); groupMap.forEach((group, confList) -> { CokingProcessMainEntity cokingProcessMainEntity = new CokingProcessMainEntity(); cokingProcessMainEntity.setInfoType("0"); cokingProcessMainEntity.setSort(counter.getAndSet(counter.get() + 1)); cokingProcessMainEntity.setCategory("day"); CokingProcessConfEntity cokingProcessConfEntity = confList.get(0); cokingProcessMainEntity.setIndName(cokingProcessConfEntity.getExt3()); cokingProcessMainEntity.setClock(clock); confList.forEach(conf -> { String value = ""; switch (ProcessConfDataTypeEnum.getEumByCode(conf.getDataType())) { case DATAPOINT: List<String> points = new ArrayList<>(); points.add(conf.getPointNo()); Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points); value = pointsRealValue.get(conf.getPointNo()).toString(); break; case IND: List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemDefaultValue(conf.getPointNo()); if (!CollectionUtils.isEmpty(indValues)) { value = indValues.get(indValues.size() - 1).getDataValue().toString(); } break; default: break; } //保存数据 if(ObjectUtils.isNotEmpty(value)) { if(conf.getExt2().equals(ProcessIndDataTypeEnum.LSPJ.getCode())) { cokingProcessMainEntity.setAvgValue(value.toString()); } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.LLZ.getCode())) { cokingProcessMainEntity.setTheoryValue(value.toString()); } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.SJZ.getCode())) { cokingProcessMainEntity.setActualValue(value.toString()); } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.JZZ.getCode())) { cokingProcessMainEntity.setStandValue(value.toString()); } else if(conf.getExt2().equals(ProcessIndDataTypeEnum.SSSJ.getCode())) { cokingProcessMainEntity.setRealValue(value.toString()); } } }); cokingProcessMainService.save(cokingProcessMainEntity); }); } catch (Exception ex) { logger.error("RunCokingMainDayTask运行异常"); ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingProdDayTask.java
@@ -9,25 +9,14 @@ 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 com.iailab.module.model.api.mcs.McsApi; import com.iailab.module.model.api.mcs.dto.StScheduleSchemeDTO; import com.iailab.module.model.api.mdk.MdkApi; import com.iailab.module.model.api.mdk.dto.MdkScheduleReqDTO; import com.iailab.module.model.api.mdk.dto.MdkScheduleRespDTO; import com.iailab.module.model.enums.ScheduleTriggerMethodEnum; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** * 生成焦化日前生产信息 @@ -58,10 +47,6 @@ public void run(String params) { logger.info("RunCokingProdDayTask,参数为:{}", params); try { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); CokingProcessConfEntity queryParams = new CokingProcessConfEntity(); queryParams.setIndType("prod_day"); List<CokingProcessConfEntity> list = cokingProcessConfService.list(queryParams); @@ -70,11 +55,11 @@ return; } Calendar calendar1 = Calendar.getInstance(); calendar1.set(Calendar.MILLISECOND, 0); calendar1.set(Calendar.SECOND, 0); calendar1.add(Calendar.DAY_OF_YEAR, -1); String clock = DateUtils.format(calendar1.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.add(Calendar.DAY_OF_YEAR, -1); String clock = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY); logger.info("清理旧数据"); cokingProdDayService.deleteByClock(clock); for (CokingProcessConfEntity conf : list) {