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