From d92e08c8ac93c45d6b852e5fc192c1a3bd4963ed Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期日, 27 四月 2025 17:41:42 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainTask.java | 161 +++++++++++++++++++++++ /dev/null | 139 ------------------- ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingProcessMainDTO.java | 40 +++++ ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingProcessMainEntity.java | 25 ++- ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingProcessMainServiceImpl.java | 16 ++ ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java | 3 ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingProcessMainService.java | 4 7 files changed, 235 insertions(+), 153 deletions(-) diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/CokingProcessMainDTO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/CokingProcessMainDTO.java deleted file mode 100644 index 7460c20..0000000 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/CokingProcessMainDTO.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.iailab.module.ansteel.api.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.io.Serializable; - -/** - * @author PanZhibao - * @Description - * @createTime 2025年04月11日 - */ -@Schema(description = "焦化工序-主工序指标") -@Data -public class CokingProcessMainDTO implements Serializable { - private static final long serialVersionUID = 1L; - - @Schema(description = "ID") - private String id; - - @Schema(description = "类别(日:day,班:class)") - private String category; - - @Schema(description = "查询时间") - private String clock; - - @Schema(description = "信息类型(0:生产情况,1:能源发生,2:能源消耗)") - private String infoType; - - @Schema(description = "指标名称") - private String indName; - - @Schema(description = "历史平均") - private String avgValue; - - @Schema(description = "理论值") - private String theoryValue; - - @Schema(description = "实际值") - private String actualValue; - - @Schema(description = "基准值") - private String standValue; - - @Schema(description = "实时数据") - private String realValue; - - @Schema(description = "排序") - private Integer sort; -} \ No newline at end of file diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java index 1bada57..4807f22 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java @@ -6,6 +6,7 @@ import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; /** @@ -47,7 +48,7 @@ /** * 值 */ - private String indValue; + private BigDecimal indValue; /** * 单位 diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingProcessMainDTO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingProcessMainDTO.java new file mode 100644 index 0000000..5a0c232 --- /dev/null +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingProcessMainDTO.java @@ -0,0 +1,40 @@ +package com.iailab.module.ansteel.coking.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author PanZhibao + * @Description + * @createTime 2025年04月11日 + */ +@Data +public class CokingProcessMainDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private String category; + + private String clock; + + private String infoType; + + private String indCode; + + private String indName; + // 实际值 + private BigDecimal realValue; + // 基准值 + private BigDecimal standValue; + // 理论值 + private BigDecimal theoryValue; + // 历史平均 + private BigDecimal avgValue; + // 历史最优 + private BigDecimal baseValue; + // 月累计 + private BigDecimal monthValue; + + private Integer sort; +} \ No newline at end of file diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingProcessMainEntity.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingProcessMainEntity.java index 71ca890..5c45fa4 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingProcessMainEntity.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingProcessMainEntity.java @@ -6,6 +6,7 @@ import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; /** * @author PanZhibao @@ -26,17 +27,21 @@ private String infoType; + private String indCode; + private String indName; - - private String avgValue; - - private String theoryValue; - - private String actualValue; - - private String standValue; - - private String realValue; + // 实际值 + private BigDecimal realValue; + // 基准值 + private BigDecimal standValue; + // 理论值 + private BigDecimal theoryValue; + // 历史平均 + private BigDecimal avgValue; + // 历史最优 + private BigDecimal baseValue; + // 月累计 + private BigDecimal monthValue; private Integer sort; } \ No newline at end of file diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingProcessMainService.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingProcessMainService.java index ad55e87..d0e9e98 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingProcessMainService.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingProcessMainService.java @@ -14,7 +14,9 @@ List<CokingProcessMainEntity> list(Map<String, Object> params); - void save(CokingProcessMainEntity cokingProcessMainEntity); + List<CokingProcessMainEntity> historyList(String start, String end, String category, String indCode); + + void save(List<CokingProcessMainEntity> list); void deleteByClock(String clock); } \ No newline at end of file diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingProcessMainServiceImpl.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingProcessMainServiceImpl.java index 42fa27f..8de2f5c 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingProcessMainServiceImpl.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingProcessMainServiceImpl.java @@ -30,6 +30,7 @@ @Override public List<CokingProcessMainEntity> list(Map<String, Object> params) { String category = (String) params.get("category"); + String infoType = (String) params.get("infoType"); String clock = (String) params.get("clock"); if (StringUtils.isBlank(category)) { return new ArrayList<>(); @@ -41,14 +42,25 @@ } QueryWrapper<CokingProcessMainEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("category", category) + .eq("info_type", infoType) .eq("clock", clock) .orderByAsc("sort"); return cokingProcessMainDao.selectList(queryWrapper); } @Override - public void save(CokingProcessMainEntity cokingProcessMainEntity) { - cokingProcessMainDao.insert(cokingProcessMainEntity); + public List<CokingProcessMainEntity> historyList(String start, String end, String category, String indCode) { + QueryWrapper<CokingProcessMainEntity> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("category", category) + .eq("ind_code",indCode) + .between("clock", start,end) + .orderByAsc("sort"); + return cokingProcessMainDao.selectList(queryWrapper); + } + + @Override + public void save(List<CokingProcessMainEntity> list) { + cokingProcessMainDao.insert(list); } @Override diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainDayTask.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainDayTask.java deleted file mode 100644 index 184046e..0000000 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainDayTask.java +++ /dev/null @@ -1,139 +0,0 @@ -package com.iailab.module.ansteel.job.task; - -import com.iailab.framework.common.util.date.DateUtils; -import com.iailab.module.ansteel.coking.entity.CokingProcessConfEntity; -import com.iailab.module.ansteel.coking.entity.CokingProcessMainEntity; -import com.iailab.module.ansteel.coking.service.CokingProcessConfService; -import com.iailab.module.ansteel.coking.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.util.*; -import java.util.concurrent.atomic.AtomicReference; -import java.util.stream.Collectors; - -/** - * @author HouZhongjian - * @Description - * @createTime 2025年04月12日 - */ -@Component("runCokingMainDayTask") -public class RunCokingMainDayTask implements ITask { - - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Resource - private CokingProcessConfService cokingProcessConfService; - - @Resource - private CokingProcessMainService cokingProcessMainService; - - @Resource - private DataPointApi dataPointApi; - - @Resource - private IndItemApi indItemApi; - - @Override - public void run(String params) { - logger.info("RunCokingMainDayTask,参数为:{}", params); - try { - 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 (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运行异常"); - ex.printStackTrace(); - } - logger.info("RunCokingMainDayTask运行完成"); - - } -} \ No newline at end of file diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainTask.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainTask.java new file mode 100644 index 0000000..254e305 --- /dev/null +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainTask.java @@ -0,0 +1,161 @@ +package com.iailab.module.ansteel.job.task; + +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.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.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @description: 主图主工序指标 + * @author: dzd + * @date: 2025/4/27 13:56 + **/ +@Slf4j +@Component("runCokingMainTask") +public class RunCokingMainTask implements ITask{ + private Logger logger = LoggerFactory.getLogger(getClass()); + + @Resource + private CokingProcessConfService cokingProcessConfService; + @Resource + private DataPointApi dataPointApi; + @Resource + private IndItemApi indItemApi; + @Resource + private CokingProcessMainService cokingProcessMainService; + + @Override + public void run(String processTypes) { + logger.info("runCokingMainTask,参数为:{}", processTypes); + try { + + String[] split = processTypes.split(","); + + for (String processType : split) { + CokingProcessConfEntity queryParams = new CokingProcessConfEntity(); + queryParams.setIndType(processType); + List<CokingProcessConfEntity> 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); + + // 清理旧数据 + cokingProcessMainService.deleteByClock(clock); + + // 主工序指标 筛选info_type = 0 + List<CokingProcessConfEntity> indList = list.stream().filter(e -> e.getInfoType().equals("0")).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(indList)) { + continue; + } + List<CokingProcessMainEntity> processMainEntities = new ArrayList<>(indList.size()); + for (CokingProcessConfEntity conf : indList) { + if (StringUtils.isBlank(conf.getDataType())) { + logger.info("DataType is Empty"); + continue; + } + if (StringUtils.isBlank(conf.getPointNo())) { + logger.info("PointNo is Empty"); + continue; + } + CokingProcessMainEntity processMainEntity = new CokingProcessMainEntity(); + processMainEntity.setId(UUID.randomUUID().toString()); + processMainEntity.setCategory("day"); + processMainEntity.setClock(clock); + processMainEntity.setInfoType(conf.getInfoType()); + processMainEntity.setIndCode(conf.getIndCode()); + processMainEntity.setIndName(conf.getIndName()); + processMainEntity.setSort(conf.getSort()); + // 日实际值 + Double value = getConfValue(conf.getDataType(),conf.getPointNo()); + processMainEntity.setRealValue(value == null ? BigDecimal.ZERO : BigDecimal.valueOf(value)); + + // 基准值、理论值 来源模型下发结果 + Double standValue = getConfValue("DATAPOINT",conf.getExt1()); + processMainEntity.setStandValue(standValue == null ? BigDecimal.ZERO : BigDecimal.valueOf(standValue)); + Double theoryValue = getConfValue("DATAPOINT",conf.getExt2()); + processMainEntity.setTheoryValue(theoryValue == null ? BigDecimal.ZERO : BigDecimal.valueOf(theoryValue)); + + // 计算 月累计 + calendar.add(Calendar.DAY_OF_YEAR, -29); + String clock_30 = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY); + List<CokingProcessMainEntity> historyList_30 = cokingProcessMainService.historyList(clock_30, clock, "day",conf.getIndCode()); + historyList_30.add(processMainEntity); + double monthValue = historyList_30.stream().mapToDouble(e -> e.getRealValue().doubleValue()).sum(); + processMainEntity.setMonthValue(BigDecimal.valueOf(monthValue)); + + // 计算 历史平均 + calendar.add(Calendar.DAY_OF_YEAR, -60); + String clock_90 = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY); + List<CokingProcessMainEntity> historyList_90 = cokingProcessMainService.historyList(clock_90, clock, "day",conf.getIndCode()); + historyList_90.add(processMainEntity); + double avgValue = historyList_90.stream().mapToDouble(e -> e.getRealValue().doubleValue()).average().orElse(0.0); + processMainEntity.setAvgValue(BigDecimal.valueOf(avgValue)); + // 历史最优 + double baseValue = 0.0; + if (Double.valueOf(conf.getExt3()) > 0.0) { + baseValue = historyList_90.stream().mapToDouble(e -> e.getRealValue().doubleValue()).max().orElse(0.0); + }else { + baseValue = historyList_90.stream().mapToDouble(e -> e.getRealValue().doubleValue()).min().orElse(0.0); + } + processMainEntity.setBaseValue(BigDecimal.valueOf(baseValue)); + + + processMainEntities.add(processMainEntity); + } + cokingProcessMainService.save(processMainEntities); + } + } catch (Exception ex) { + logger.error("runCokingMainTask运行异常",ex); + } + logger.info("runCokingMainTask运行完成"); + } + + private Double getConfValue(String dataType, String pointNo) { + Double value = null; + switch (ProcessConfDataTypeEnum.getEumByCode(dataType)) { + case DATAPOINT: + List<String> points = new ArrayList<>(); + points.add(pointNo); + Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points); + if (pointsRealValue.containsKey(pointNo)) { + value = Double.valueOf(pointsRealValue.get(pointNo).toString()); + } + break; + case IND: + List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemDefaultValue(pointNo); + if (!CollectionUtils.isEmpty(indValues)) { + value = Double.valueOf(indValues.get(0).getDataValue().toString()); + } + break; + case MODEL: + break; + default: + break; + + } + return value; + } +} \ No newline at end of file -- Gitblit v1.9.3