From 95fa8f7f6e3dbc4f13c0a9b15515f4040fa05f03 Mon Sep 17 00:00:00 2001 From: dengzedong <dengzedong@email> Date: 星期六, 26 四月 2025 11:16:46 +0800 Subject: [PATCH] 焦化概况 能流图指标数据 --- ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dao/CokingOverviewIndDao.java | 14 ++ ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewIndServiceImpl.java | 57 +++++++++ ansteel-biz/db/mysql.sql | 16 ++ ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java | 92 +++++++++++---- ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java | 11 + ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java | 61 ++++++++++ ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewIndEntity.java | 62 ++++++++++ ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingOverviewIndService.java | 20 +++ 8 files changed, 307 insertions(+), 26 deletions(-) diff --git a/ansteel-biz/db/mysql.sql b/ansteel-biz/db/mysql.sql index 20d02e8..6d4f6fb 100644 --- a/ansteel-biz/db/mysql.sql +++ b/ansteel-biz/db/mysql.sql @@ -673,4 +673,18 @@ `sort` varchar(50) DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`), UNIQUE key uk_code (code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='调整后的功率因数与无功倒送量'; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='调整后的功率因数与无功倒送量'; + +CREATE TABLE `t_coking_overview_ind` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'id', + `rel_id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '关联ID', + `process_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '工序类型', + `clock` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '查询时间', + `ind_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '指标编码', + `ind_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '指标名称', + `ind_unit` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '指标单位', + `ind_value` decimal(20,4) DEFAULT NULL COMMENT '指标值', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_rel_id` (`rel_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='焦化工序概况指标数据结果'; \ No newline at end of file diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java index 5178b82..384e390 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java @@ -63,6 +63,8 @@ @Autowired private CokingOverviewService cokingOverviewService; + @Autowired + private CokingOverviewIndService cokingOverviewIndService; @Autowired private CokingTraceSuggestService cokingTraceSuggestService; @@ -159,12 +161,19 @@ @GetMapping("/overview/list") - @Operation(summary = "各工序-概况数据") + @Operation(summary = "各工序-概况-整体数据") public CommonResult<Map<String,List<CokingOverviewDTO>>> getOverviewList(@RequestParam Map<String, Object> params) { Map<String,List<CokingOverviewDTO>> result = cokingOverviewService.list(params); return success(result); } + @GetMapping("/overview/indList") + @Operation(summary = "各工序-概况-能流图指标数据") + public CommonResult<List<CokingOverviewIndEntity>> getOverviewIndList(@RequestParam Map<String, Object> params) { + List<CokingOverviewIndEntity> list = cokingOverviewIndService.list(params); + return success(list); + } + @GetMapping("/overview/abnormal-data") @Operation(summary = "各工序-异常数据") public CommonResult<List<CokingTraceDataDTO>> getAbnormalData(@RequestParam Map<String, Object> params) { diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dao/CokingOverviewIndDao.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dao/CokingOverviewIndDao.java new file mode 100644 index 0000000..5c63828 --- /dev/null +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dao/CokingOverviewIndDao.java @@ -0,0 +1,14 @@ +package com.iailab.module.ansteel.coking.dao; + +import com.iailab.framework.common.dao.BaseDao; +import com.iailab.module.ansteel.coking.entity.CokingOverviewIndEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * @description: + * @author: dzd + * @date: 2025/4/26 10:54 + **/ +@Mapper +public interface CokingOverviewIndDao extends BaseDao<CokingOverviewIndEntity> { +} \ 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 new file mode 100644 index 0000000..1bada57 --- /dev/null +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java @@ -0,0 +1,61 @@ +package com.iailab.module.ansteel.coking.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @description: 焦化工序概况指标数据结果 + * @author: dzd + * @date: 2025/4/26 10:49 + **/ +@Data +@TableName("t_coking_overview_ind") +public class CokingOverviewIndDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.ASSIGN_UUID) + private String id; + + /** + * 关联ID + */ + private String relId; + + /** + * 工序类型 + */ + private String processType; + + /** + * 查询时间 + */ + private String clock; + /** + * 编码 + */ + private String indCode; + /** + * 名称 + */ + private String indName; + + /** + * 值 + */ + private String indValue; + + /** + * 单位 + */ + private String indUnit; + + /** + * 创建时间 + */ + private Date createDate; +} \ No newline at end of file diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewIndEntity.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewIndEntity.java new file mode 100644 index 0000000..1e0e01d --- /dev/null +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewIndEntity.java @@ -0,0 +1,62 @@ +package com.iailab.module.ansteel.coking.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * @description: 焦化工序概况指标数据结果 + * @author: dzd + * @date: 2025/4/26 10:49 + **/ +@Data +@TableName("t_coking_overview_ind") +public class CokingOverviewIndEntity implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.ASSIGN_UUID) + private String id; + + /** + * 关联ID + */ + private String relId; + + /** + * 工序类型 + */ + private String processType; + + /** + * 查询时间 + */ + private String clock; + /** + * 编码 + */ + private String indCode; + /** + * 名称 + */ + private String indName; + + /** + * 值 + */ + private BigDecimal indValue; + + /** + * 单位 + */ + private String indUnit; + + /** + * 创建时间 + */ + private Date createDate; +} \ No newline at end of file diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingOverviewIndService.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingOverviewIndService.java new file mode 100644 index 0000000..7869296 --- /dev/null +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingOverviewIndService.java @@ -0,0 +1,20 @@ +package com.iailab.module.ansteel.coking.service; + +import com.iailab.module.ansteel.coking.entity.CokingOverviewIndEntity; + +import java.util.List; +import java.util.Map; + +/** + * @description: + * @author: dzd + * @date: 2025/4/26 10:52 + **/ +public interface CokingOverviewIndService { + + List<CokingOverviewIndEntity> list(Map<String, Object> params); + + void save(List<CokingOverviewIndEntity> entityList); + + void deleteByProcessType(String processType, String clock); +} diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewIndServiceImpl.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewIndServiceImpl.java new file mode 100644 index 0000000..b2f5403 --- /dev/null +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewIndServiceImpl.java @@ -0,0 +1,57 @@ +package com.iailab.module.ansteel.coking.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.iailab.framework.common.util.date.DateUtils; +import com.iailab.module.ansteel.coking.dao.CokingOverviewIndDao; +import com.iailab.module.ansteel.coking.entity.CokingOverviewEntity; +import com.iailab.module.ansteel.coking.entity.CokingOverviewIndEntity; +import com.iailab.module.ansteel.coking.service.CokingOverviewIndService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; + +@Slf4j +@Service +public class CokingOverviewIndServiceImpl implements CokingOverviewIndService { + + @Resource + private CokingOverviewIndDao cokingOverviewIndDao; + + @Override + public List<CokingOverviewIndEntity> list(Map<String, Object> params) { + + String processType = (String) params.get("processType"); + if (StringUtils.isBlank(processType)) { + return new ArrayList<>(); + } + + String clock = (String) params.get("clock"); + if (StringUtils.isBlank(clock)) { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_YEAR, -1); + clock = DateUtils.format(calendar.getTime(), "yyyy-MM-dd"); + } + + QueryWrapper<CokingOverviewIndEntity> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("clock",clock); + queryWrapper.eq("process_type",processType); + + return cokingOverviewIndDao.selectList(queryWrapper); + } + + @Override + public void save(List<CokingOverviewIndEntity> entityList) { + cokingOverviewIndDao.insert(entityList); + } + + @Override + public void deleteByProcessType(String processType, String clock) { + QueryWrapper<CokingOverviewIndEntity> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("process_type", processType); + queryWrapper.eq("clock", clock); + cokingOverviewIndDao.delete(queryWrapper); + } +} diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java index 9eebb07..870e040 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java @@ -20,6 +20,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -39,6 +40,8 @@ private CokingProcessConfService cokingProcessConfService; @Resource private CokingOverviewService cokingOverviewService; + @Resource + private CokingOverviewIndService cokingOverviewIndService; @Resource private DataPointApi dataPointApi; @Resource @@ -82,6 +85,11 @@ reportEntity.setCreateDate(new Date()); cokingTraceReportService.save(reportEntity); + // 清理旧数据 + cokingOverviewService.deleteByProcessType(processType, clock); + cokingTraceDataService.deleteByExObj(processType+"_AD", clock); + cokingOverviewIndService.deleteByProcessType(processType, clock); + // 整体情况 // 筛选info_type = 2,按照子工序类型分组 Map<String, List<CokingProcessConfEntity>> processTypeMap = list.stream().filter(e -> e.getInfoType().equals("2")).collect(Collectors.groupingBy(CokingProcessConfEntity::getExt2)); @@ -100,26 +108,9 @@ logger.info("PointNo is Empty"); continue; } - Double value = null; - switch (ProcessConfDataTypeEnum.getEumByCode(conf.getDataType())) { - case DATAPOINT: - List<String> points = new ArrayList<>(); - points.add(conf.getPointNo()); - Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points); - value = Double.valueOf(pointsRealValue.get(conf.getPointNo()).toString()); - break; - case IND: - List<ApiIndItemValueDTO> 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; - } + Double value = getConfValue(conf); + values.put(conf.getExt1(),value); // 异常数据处理 @@ -141,7 +132,7 @@ ctd.setRelId(relId); ctd.setProcess(ProcessTypeEnum.getEumByCode(conf.getIndType()).getReportName()); ctd.setClock(clock); - ctd.setExObj(conf.getIndType()+"_AD"); + ctd.setExObj(processType+"_AD"); ctd.setExTime(calendar.getTime()); ctd.setExType(content); ctd.setCreateDate(new Date()); @@ -157,17 +148,70 @@ overviewEntity.setSubProcessType(entry.getKey()); overviewEntity.setClock(clock); result.add(overviewEntity); - - // 清理旧数据 - cokingOverviewService.deleteByProcessType(processType, clock); - cokingTraceDataService.deleteByExObj(processType, clock); } cokingOverviewService.insert(result); cokingTraceDataService.insertList(exDatalist); + + // 能流图指标数据 + // 筛选info_type = 1 + List<CokingProcessConfEntity> indList = list.stream().filter(e -> e.getInfoType().equals("1")).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(indList)) { + return; + } + List<CokingOverviewIndEntity> overviewIndEntities = 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; + } + Double value = getConfValue(conf); + CokingOverviewIndEntity entity = new CokingOverviewIndEntity(); + entity.setId(UUID.randomUUID().toString()); + entity.setRelId(relId); + entity.setProcessType(processType); + entity.setClock(clock); + entity.setIndCode(conf.getIndCode()); + entity.setIndName(conf.getIndName()); + entity.setIndUnit(conf.getIndUnit()); + if (value != null) { + entity.setIndValue(BigDecimal.valueOf(value)); + } + entity.setCreateDate(new Date()); + overviewIndEntities.add(entity); + } + cokingOverviewIndService.save(overviewIndEntities); } } catch (Exception ex) { logger.error("runCokingOverviewTask运行异常",ex); } logger.info("runCokingOverviewTask运行完成"); } + + private Double getConfValue(CokingProcessConfEntity conf) { + Double value = null; + switch (ProcessConfDataTypeEnum.getEumByCode(conf.getDataType())) { + case DATAPOINT: + List<String> points = new ArrayList<>(); + points.add(conf.getPointNo()); + Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points); + value = Double.valueOf(pointsRealValue.get(conf.getPointNo()).toString()); + break; + case IND: + List<ApiIndItemValueDTO> 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; + + } + return value; + } } \ No newline at end of file -- Gitblit v1.9.3