6 天以前 | dengzedong | ![]() |
6 天以前 | dengzedong | ![]() |
6 天以前 | dengzedong | ![]() |
6 天以前 | 潘志宝 | ![]() |
ansteel-biz/db/mysql.sql
@@ -785,18 +785,50 @@ DROP TABLE IF EXISTS `t_gas_pred_conf`; CREATE TABLE `t_gas_pred_conf` ( `id` varchar(36) NOT NULL COMMENT 'id', `chart_code` varchar(50) NULL DEFAULT NULL COMMENT '预测图编号', `user_type` varchar(50) NULL DEFAULT NULL COMMENT '用户类型(发生,消耗)', `item_no` varchar(50) NULL DEFAULT NULL COMMENT '预测项编号', `item_name` varchar(50) NULL DEFAULT NULL COMMENT '预测项名称', `out_key` varchar(50) NULL DEFAULT NULL COMMENT '预测项输出key', `out_name` varchar(50) NULL DEFAULT NULL COMMENT '预测项输出名称', `id` varchar(36) NOT NULL COMMENT 'id', `chart_code` varchar(50) NULL DEFAULT NULL COMMENT '预测图编号', `user_type` varchar(50) NULL DEFAULT NULL COMMENT '用户类型(发生,消耗)', `item_no` varchar(50) NULL DEFAULT NULL COMMENT '预测项编号', `item_name` varchar(50) NULL DEFAULT NULL COMMENT '预测项名称', `out_key` varchar(50) NULL DEFAULT NULL COMMENT '预测项输出key', `out_name` varchar(50) NULL DEFAULT NULL COMMENT '预测项输出名称', `is_default_load` int DEFAULT NULL COMMENT '是否默认加载', `sort` int NULL DEFAULT NULL COMMENT '排序', `sort` int NULL DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT '煤气预测析配置'; ALTER TABLE `t_gas_pred_conf` ADD COLUMN `out_id` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '预测项输出id' AFTER `item_name`, ADD COLUMN `out_id` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '预测项输出id' AFTER `item_name`, ADD COLUMN `is_default_load` int DEFAULT NULL COMMENT '是否默认加载' AFTER `out_name`; -- ---------------------------- -- 负荷移植-最大需量发生记录 -- ---------------------------- DROP TABLE IF EXISTS `t_power_maxdemand_main`; CREATE TABLE `t_power_maxdemand_main` ( `id` varchar(36) NOT NULL COMMENT 'id', `occur_time` datetimeL COMMENT '发生时间', `code` varchar(50) NULL DEFAULT NULL COMMENT '编号', `name` varchar(50) NULL DEFAULT NULL COMMENT '名称', `max_demand` decimal(10, 2) NULL DEFAULT NULL COMMENT '最大需量', PRIMARY KEY (`id`) USING BTREE, key idx_code (code) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT '负荷移植最大需量发生记录'; -- ---------------------------- -- 负荷移植-最大需量发生记录详情 -- ---------------------------- DROP TABLE IF EXISTS `t_power_maxdemand_det`; CREATE TABLE `t_power_maxdemand_det` ( `id` varchar(36) NOT NULL COMMENT 'id', `rel_id` varchar(36) NULL DEFAULT NULL COMMENT '关联ID', `occur_time` datetime COMMENT '发生时间', `code` varchar(50) NULL DEFAULT NULL COMMENT '编号', `name` varchar(50) NULL DEFAULT NULL COMMENT '名称', `max_demand` decimal(10, 2) NULL DEFAULT NULL COMMENT '最大需量', `sort` int NULL DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`) USING BTREE, key idx_rel_id (rel_id) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT '负荷移植最大需量发生记录详情'; ansteel-biz/src/main/java/com/iailab/module/ansteel/common/enums/ProcessConfDataTypeEnum.java
@@ -13,6 +13,7 @@ public enum ProcessConfDataTypeEnum { DATAPOINT("DATAPOINT", "测点值"), IND("IND", "指标值(double)"), ARC("ARC", "归档数据"), MODEL("MODEL", "模型输出值"), IND_ASCII("IND_ASCII", "指标值(ASCII)"), PLAN("PLAN", "计划值"); ansteel-biz/src/main/java/com/iailab/module/ansteel/framework/rpc/config/RpcConfiguration.java
@@ -1,5 +1,6 @@ package com.iailab.module.ansteel.framework.rpc.config; import com.iailab.module.data.api.arc.ArcDataApi; import com.iailab.module.data.api.ind.IndItemApi; import com.iailab.module.data.api.plan.PlanItemApi; import com.iailab.module.data.api.point.DataPointApi; @@ -14,6 +15,6 @@ import org.springframework.context.annotation.Configuration; @Configuration(proxyBeanMethods = false) @EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, DataSourceConfigServiceApi.class, ConfigApi.class, TenantApi.class, McsApi.class, MdkApi.class, DataPointApi.class, PlanItemApi.class, IndItemApi.class}) @EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, DataSourceConfigServiceApi.class, ConfigApi.class, TenantApi.class, McsApi.class, MdkApi.class, DataPointApi.class, PlanItemApi.class, IndItemApi.class, ArcDataApi.class}) public class RpcConfiguration { } ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainTask.java
@@ -4,6 +4,8 @@ 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.arc.ArcDataApi; import com.iailab.module.data.api.arc.dto.ApiArcDataDTO; 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; @@ -34,6 +36,8 @@ private CokingProcessConfService cokingProcessConfService; @Resource private DataPointApi dataPointApi; @Resource private ArcDataApi arcDataApi; @Resource private IndItemApi indItemApi; @Resource @@ -190,7 +194,11 @@ value = Double.valueOf(indValues.get(0).getDataValue().toString()); } break; case MODEL: case ARC: ApiArcDataDTO apiArcDataDTO = arcDataApi.queryArcLastValue(pointNo); if (apiArcDataDTO != null) { value = apiArcDataDTO.getArcValue().doubleValue(); } break; default: break; ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java
@@ -6,6 +6,8 @@ import com.iailab.module.ansteel.coking.service.*; import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum; import com.iailab.module.ansteel.common.enums.ProcessTypeEnum; import com.iailab.module.data.api.arc.ArcDataApi; import com.iailab.module.data.api.arc.dto.ApiArcDataDTO; import com.iailab.module.data.api.ind.IndItemApi; import com.iailab.module.data.api.ind.dto.ApiIndItemQueryDTO; import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO; @@ -46,6 +48,8 @@ private DataPointApi dataPointApi; @Resource private IndItemApi indItemApi; @Resource private ArcDataApi arcDataApi; @Resource private CokingTraceReportService cokingTraceReportService; @Resource @@ -208,7 +212,11 @@ value = Double.valueOf(indValues.get(0).getDataValue().toString()); } break; case MODEL: case ARC: ApiArcDataDTO apiArcDataDTO = arcDataApi.queryArcLastValue(conf.getPointNo()); if (apiArcDataDTO != null) { value = apiArcDataDTO.getArcValue().doubleValue(); } break; default: break; ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingProdDayTask.java
@@ -6,6 +6,8 @@ import com.iailab.module.ansteel.coking.service.CokingProcessConfService; import com.iailab.module.ansteel.coking.service.CokingProdDayService; import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum; import com.iailab.module.data.api.arc.ArcDataApi; import com.iailab.module.data.api.arc.dto.ApiArcDataDTO; 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; @@ -42,6 +44,8 @@ @Resource private DataPointApi dataPointApi; @Resource private ArcDataApi arcDataApi; @Resource private IndItemApi indItemApi; @@ -88,6 +92,12 @@ value = indValues.get(indValues.size() - 1).getDataValue().toString(); } break; case ARC: ApiArcDataDTO apiArcDataDTO = arcDataApi.queryArcLastValue(conf.getPointNo()); if (apiArcDataDTO != null) { value = apiArcDataDTO.getArcValue().toString(); } break; default: break; ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPowerMaxdemandTask.java
对比新文件 @@ -0,0 +1,150 @@ package com.iailab.module.ansteel.job.task; import com.iailab.module.ansteel.common.utils.DecimalUtil; import com.iailab.module.ansteel.power.entity.PowerDemandEntity; import com.iailab.module.ansteel.power.entity.PowerMaxdemandDetEntity; import com.iailab.module.ansteel.power.entity.PowerMaxdemandMainEntity; import com.iailab.module.ansteel.power.entity.PowerNetDropdownEntity; import com.iailab.module.ansteel.power.service.PowerDemandService; import com.iailab.module.ansteel.power.service.PowerMaxdemandDetService; import com.iailab.module.ansteel.power.service.PowerMaxdemandMainService; import com.iailab.module.ansteel.power.service.PowerNetDropdownService; import com.iailab.module.data.api.point.DataPointApi; import com.iailab.module.data.api.point.dto.ApiPointValueDTO; import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO; 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.math.BigDecimal; import java.util.*; /** * 检查每天的需量与这个月的最大值比较 * 如果大于,则保存 * 每天23:59执行 * * @author PanZhibao * @Description * @createTime 2025年05月08日 */ @Component("runPowerMaxdemandTask") public class RunPowerMaxdemandTask implements ITask { private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private PowerDemandService powerDemandService; @Autowired private PowerMaxdemandMainService powerMaxdemandMainService; @Autowired private PowerNetDropdownService powerNetDropdownService; @Autowired private PowerMaxdemandDetService powerMaxdemandDetService; @Resource private DataPointApi dataPointApi; @Override public void run(String params) { logger.info("RunPowerMaxdemandTask start"); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); Date nowTime = calendar.getTime(); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.HOUR_OF_DAY, 0); Date dayStart = calendar.getTime(); calendar.set(Calendar.DAY_OF_MONTH, 1); Date monStart = calendar.getTime(); try { Map<String, Object> params0 = new HashMap<>(); List<PowerDemandEntity> demandList = powerDemandService.list(params0); if (CollectionUtils.isEmpty(demandList)) { logger.info("demandList is empty"); return; } for (PowerDemandEntity demand : demandList) { // 查询今天的最大需量 ApiPointValueQueryDTO pointValueQuery0 = new ApiPointValueQueryDTO(); pointValueQuery0.setStart(dayStart); pointValueQuery0.setEnd(nowTime); pointValueQuery0.setPointNo(demand.getCurDemand()); Map<String, Object> maxValue = dataPointApi.queryPointMaxValue(pointValueQuery0); BigDecimal todayMax = BigDecimal.ZERO; if (CollectionUtils.isEmpty(maxValue) && maxValue.containsKey(demand.getCurDemand())) { todayMax = new BigDecimal(maxValue.get(demand.getCurDemand()).toString()); } List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(pointValueQuery0); if (CollectionUtils.isEmpty(valueList)) { logger.info("valueList is empty"); continue; } Date occurTime = new Date(nowTime.getTime()); for (ApiPointValueDTO apiPointValueDTO : valueList) { if (Math.abs(apiPointValueDTO.getV() - todayMax.doubleValue()) < 0.001) { occurTime = apiPointValueDTO.getT(); break; } } // 查询本月需量发生记录 BigDecimal monthMax = powerMaxdemandMainService.getMax(demand.getCode(), monStart, nowTime); // 保存记录 if (todayMax.compareTo(monthMax) <= 0) { continue; } PowerMaxdemandMainEntity mainEntity = new PowerMaxdemandMainEntity(); mainEntity.setCode(demand.getCode()); mainEntity.setName(demand.getName()); mainEntity.setOccurTime(occurTime); mainEntity.setMaxDemand(todayMax); String mainId = powerMaxdemandMainService.add(mainEntity); Map<String, Object> params1 = new HashMap<>(); params1.put("pCode", demand.getCode()); List<PowerNetDropdownEntity> dropdownList = powerNetDropdownService.list(params1); if (CollectionUtils.isEmpty(dropdownList)) { logger.info("dropdownList is empty"); continue; } for (PowerNetDropdownEntity dropdown : dropdownList) { if (StringUtils.isBlank(dropdown.getExt1())) { continue; } Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(occurTime); calendar1.add(Calendar.MINUTE, 1); ApiPointValueQueryDTO pointValueQuery1 = new ApiPointValueQueryDTO(); pointValueQuery1.setStart(occurTime); pointValueQuery1.setEnd(calendar1.getTime()); pointValueQuery1.setPointNo(dropdown.getExt1()); List<ApiPointValueDTO> valueList1 = dataPointApi.queryPointHistoryValue(pointValueQuery1); if (CollectionUtils.isEmpty(valueList1)) { logger.info("valueList1 is empty"); continue; } PowerMaxdemandDetEntity detEntity = new PowerMaxdemandDetEntity(); detEntity.setRelId(mainId); detEntity.setCode(dropdown.getNodeCode()); detEntity.setName(dropdown.getNodeName()); detEntity.setOccurTime(occurTime); detEntity.setMaxDemand(BigDecimal.valueOf(valueList1.get(0).getV())); powerMaxdemandDetService.add(detEntity); } } logger.info("RunPowerMaxdemandTask end"); } catch (Exception e) { logger.error("RunPowerMaxdemandTask error", e); e.printStackTrace(); } } } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerMaxdemandDetDao.java
对比新文件 @@ -0,0 +1,14 @@ package com.iailab.module.ansteel.power.dao; import com.iailab.framework.common.dao.BaseDao; import com.iailab.module.ansteel.power.entity.PowerMaxdemandDetEntity; import org.apache.ibatis.annotations.Mapper; /** * @author PanZhibao * @Description * @createTime 2025年05月07日 */ @Mapper public interface PowerMaxdemandDetDao extends BaseDao<PowerMaxdemandDetEntity> { } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerMaxdemandMainDao.java
对比新文件 @@ -0,0 +1,14 @@ package com.iailab.module.ansteel.power.dao; import com.iailab.framework.common.dao.BaseDao; import com.iailab.module.ansteel.power.entity.PowerMaxdemandMainEntity; import org.apache.ibatis.annotations.Mapper; /** * @author PanZhibao * @Description * @createTime 2025年05月07日 */ @Mapper public interface PowerMaxdemandMainDao extends BaseDao<PowerMaxdemandMainEntity> { } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerMaxdemandDetEntity.java
对比新文件 @@ -0,0 +1,55 @@ package com.iailab.module.ansteel.power.entity; 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; /** * @author PanZhibao * @Description * @createTime 2025年05月07日 */ @Data @TableName("t_power_maxdemand_det") public class PowerMaxdemandDetEntity implements Serializable { /** * id */ @TableId private String id; /** * 关联ID */ private String relId; /** * 发生时间 */ private Date occurTime; /** * 编号 */ private String code; /** * 名称 */ private String name; /** * 最大需量 */ private BigDecimal maxDemand; /** * 排序 */ private Integer sort; } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerMaxdemandMainEntity.java
对比新文件 @@ -0,0 +1,46 @@ package com.iailab.module.ansteel.power.entity; 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; /** * @author PanZhibao * @Description * @createTime 2025年05月07日 */ @Data @TableName("t_power_maxdemand_main") public class PowerMaxdemandMainEntity implements Serializable { private static final long serialVersionUID = 1L; /** * id */ @TableId private String id; /** * 发生时间 */ private Date occurTime; /** * 编号 */ private String code; /** * 名称 */ private String name; /** * 最大需量 */ private BigDecimal maxDemand; } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerMaxdemandDetService.java
对比新文件 @@ -0,0 +1,13 @@ package com.iailab.module.ansteel.power.service; import com.iailab.module.ansteel.power.entity.PowerMaxdemandDetEntity; /** * @author PanZhibao * @Description * @createTime 2025年05月07日 */ public interface PowerMaxdemandDetService { void add(PowerMaxdemandDetEntity entity); } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerMaxdemandMainService.java
对比新文件 @@ -0,0 +1,18 @@ package com.iailab.module.ansteel.power.service; import com.iailab.module.ansteel.power.entity.PowerMaxdemandMainEntity; import java.math.BigDecimal; import java.util.Date; /** * @author PanZhibao * @Description * @createTime 2025年05月07日 */ public interface PowerMaxdemandMainService { String add(PowerMaxdemandMainEntity entity); BigDecimal getMax(String code, Date start, Date end); } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerMaxdemandDetServiceImpl.java
对比新文件 @@ -0,0 +1,29 @@ package com.iailab.module.ansteel.power.service.impl; import com.iailab.module.ansteel.power.dao.PowerMaxdemandDetDao; import com.iailab.module.ansteel.power.entity.PowerMaxdemandDetEntity; import com.iailab.module.ansteel.power.service.PowerMaxdemandDetService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.UUID; /** * @author PanZhibao * @Description * @createTime 2025年05月07日 */ @Slf4j @Service public class PowerMaxdemandDetServiceImpl implements PowerMaxdemandDetService { @Resource private PowerMaxdemandDetDao powerMaxdemandDetDao; @Override public void add(PowerMaxdemandDetEntity entity) { entity.setId(UUID.randomUUID().toString()); powerMaxdemandDetDao.insert(entity); } } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerMaxdemandMainServiceImpl.java
对比新文件 @@ -0,0 +1,57 @@ package com.iailab.module.ansteel.power.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.module.ansteel.power.dao.PowerMaxdemandMainDao; import com.iailab.module.ansteel.power.entity.PowerMaxdemandMainEntity; import com.iailab.module.ansteel.power.service.PowerMaxdemandMainService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; /** * @author PanZhibao * @Description * @createTime 2025年05月07日 */ @Slf4j @Service public class PowerMaxdemandMainServiceImpl implements PowerMaxdemandMainService { @Autowired private PowerMaxdemandMainDao powerMaxdemandMainDao; @Override public String add(PowerMaxdemandMainEntity entity) { entity.setId(UUID.randomUUID().toString()); powerMaxdemandMainDao.insert(entity); return entity.getId(); } @Override public BigDecimal getMax(String code, Date start, Date end) { BigDecimal max = new BigDecimal(0); QueryWrapper<PowerMaxdemandMainEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("code", code) .ge("occur_time", start) .le("occur_time", end); List<PowerMaxdemandMainEntity> list = powerMaxdemandMainDao.selectList(queryWrapper); if (CollectionUtils.isEmpty(list)) { return max; } List<Double> demandValueList = list.stream().map(item -> { return item.getMaxDemand().doubleValue(); }).collect(Collectors.toList()); max = new BigDecimal(demandValueList.stream().max(Double::compareTo).get()); log.info("max : {}", max); return max; } }