From d443d3429ee0840ffe85a1b70685f9b5419e273e Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期三, 14 五月 2025 09:14:27 +0800 Subject: [PATCH] 电容器投退历史 --- ansteel-biz/db/mysql.sql | 5 ++ ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerCapacitorHisEntity.java | 4 +- ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerCapacitorHisService.java | 2 + ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerCapacitorHisServiceImpl.java | 6 ++ ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPowerCapacitorHisTask.java | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 116 insertions(+), 4 deletions(-) diff --git a/ansteel-biz/db/mysql.sql b/ansteel-biz/db/mysql.sql index 9feda0c..d3b126f 100644 --- a/ansteel-biz/db/mysql.sql +++ b/ansteel-biz/db/mysql.sql @@ -327,7 +327,7 @@ `id` varchar(36) NOT NULL COMMENT 'id', `det_id` varchar(36) NULL DEFAULT NULL COMMENT '详情ID', `name` varchar(50) NULL DEFAULT NULL COMMENT '电容器名称', - `status` varchar(50) NULL DEFAULT NULL COMMENT '状态', + `status` int NULL DEFAULT NULL COMMENT '状态', `content` varchar(50) NULL DEFAULT NULL COMMENT '内容', `remark` varchar(50) NULL DEFAULT NULL COMMENT '备注', `create_date` datetime COMMENT '创建时间', @@ -832,3 +832,6 @@ PRIMARY KEY (`id`) USING BTREE, key idx_rel_id (rel_id) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT '负荷移植最大需量发生记录详情'; + + +alter table `t_power_capacitor_his` modify column `status` int NULL DEFAULT NULL COMMENT '状态(0:退出,1:投入)'; diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPowerCapacitorHisTask.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPowerCapacitorHisTask.java new file mode 100644 index 0000000..2b3b7ab --- /dev/null +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPowerCapacitorHisTask.java @@ -0,0 +1,103 @@ +package com.iailab.module.ansteel.job.task; + +import com.iailab.module.ansteel.power.entity.PowerCapacitorDetEntity; +import com.iailab.module.ansteel.power.service.PowerCapacitorDetService; +import com.iailab.module.ansteel.power.service.PowerCapacitorHisService; +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 java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +/** + * 电容器投退历史 + * 检测电容器电流状态变化,何时投入,何时退出 + * 每5分钟检测一次 + * 20 0/5 * * * ? + * + * @author PanZhibao + * @Description + * @createTime 2025年05月13日 + */ +@Component("runPowerCapacitorHisTask") +public class RunPowerCapacitorHisTask implements ITask { + private Logger logger = LoggerFactory.getLogger(getClass()); + + @Autowired + private PowerCapacitorHisService powerCapacitorHisService; + + @Autowired + private PowerCapacitorDetService powerCapacitorDetService; + + @Autowired + private DataPointApi dataPointApi; + + private final static BigDecimal MIN_V = BigDecimal.valueOf(1); + + @Override + public void run(String params) { + logger.info("RunPowerCapacitorHisTask start"); + try { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.MILLISECOND, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MINUTE, 0); + Date endTime = calendar.getTime(); + calendar.add(Calendar.MINUTE, -5); + Date startTime = calendar.getTime(); + List<PowerCapacitorDetEntity> detList = powerCapacitorDetService.list(new HashMap<>()); + if (CollectionUtils.isEmpty(detList)) { + logger.info("detList is empty"); + return; + } + for (PowerCapacitorDetEntity det : detList) { + if (StringUtils.isBlank(det.getPointNo())) { + logger.info("det.getPointNo is empty"); + continue; + } + ApiPointValueQueryDTO apiPointValueQuery = new ApiPointValueQueryDTO(); + apiPointValueQuery.setPointNo(det.getPointNo()); + apiPointValueQuery.setStart(startTime); + apiPointValueQuery.setEnd(endTime); + List<ApiPointValueDTO> hisValue = dataPointApi.queryPointHistoryValue(apiPointValueQuery); + if (CollectionUtils.isEmpty(hisValue)) { + logger.info("hisValue is empty"); + continue; + } + BigDecimal firstValue = BigDecimal.valueOf(hisValue.get(0).getV()).setScale(2, RoundingMode.HALF_UP); + int lastStatus = firstValue.compareTo(MIN_V) > 0 ? 1 : 0; + + logger.info("det=" + det.getId()); + for (int i = 1; i < hisValue.size(); i++) { + BigDecimal value = BigDecimal.valueOf(hisValue.get(i).getV()).setScale(2, RoundingMode.HALF_UP); + int curStatus = value.compareTo(MIN_V) > 0 ? 1 : 0; + if (curStatus > lastStatus) { + logger.info("投入"); + powerCapacitorHisService.add(det.getId(), det.getName(), curStatus); + } else if (curStatus < lastStatus) { + logger.info("退出"); + powerCapacitorHisService.add(det.getId(), det.getName(), curStatus); + } else { + logger.info("状态无变化"); + } + lastStatus = curStatus; + } + } + logger.info("RunPowerCapacitorHisTask success"); + } catch (Exception e) { + logger.error("RunPowerCapacitorHisTask error", e); + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerCapacitorHisEntity.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerCapacitorHisEntity.java index 152be93..5ecbb58 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerCapacitorHisEntity.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerCapacitorHisEntity.java @@ -34,9 +34,9 @@ private String name; /** - * 状态 + * 状态(0:退出,1:投入) */ - private String status; + private Integer status; /** * 内容 diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerCapacitorHisService.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerCapacitorHisService.java index 1d432a1..2be7100 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerCapacitorHisService.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerCapacitorHisService.java @@ -13,4 +13,6 @@ public interface PowerCapacitorHisService { List<PowerCapacitorHisEntity> list(Map<String, Object> params); + + void add(String detId, String name, Integer status); } diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerCapacitorHisServiceImpl.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerCapacitorHisServiceImpl.java index f601168..b090513 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerCapacitorHisServiceImpl.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerCapacitorHisServiceImpl.java @@ -35,8 +35,12 @@ return powerCapacitorHisDao.selectList(queryWrapper); } - public void add(PowerCapacitorHisEntity entity) { + @Override + public void add(String detId, String name, Integer status) { + PowerCapacitorHisEntity entity = new PowerCapacitorHisEntity(); entity.setId(UUID.randomUUID().toString()); + entity.setStatus(status); + entity.setContent(status == 0 ? "退出" : "投入"); entity.setCreateDate(new Date()); powerCapacitorHisDao.insert(entity); } -- Gitblit v1.9.3