ansteel-biz/db/mysql.sql | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dao/CokingOverviewIndDao.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingOverviewIndDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingOverviewIndEntity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingOverviewIndService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewIndServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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='调整后的功率因数与无功倒送量'; ) 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='焦化工序概况指标数据结果'; 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) { 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> { } 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; } 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; } 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); } 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); } } 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; } }