From c3a428f2ef9dec82c49e1c9d4f425d3950d79804 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 28 十一月 2024 09:23:47 +0800
Subject: [PATCH] #定时充电

---
 src/main/java/com/zy/asrs/domain/param/ShuttleTimedPowerRangeParam.java |   12 ++++
 src/main/java/com/zy/asrs/task/ShuttleChargePowerScheduler.java         |  132 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 144 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/asrs/domain/param/ShuttleTimedPowerRangeParam.java b/src/main/java/com/zy/asrs/domain/param/ShuttleTimedPowerRangeParam.java
new file mode 100644
index 0000000..2e4db5b
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/param/ShuttleTimedPowerRangeParam.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.domain.param;
+
+import lombok.Data;
+
+@Data
+public class ShuttleTimedPowerRangeParam {
+
+    private Integer startTime;
+
+    private Integer endTime;
+
+}
diff --git a/src/main/java/com/zy/asrs/task/ShuttleChargePowerScheduler.java b/src/main/java/com/zy/asrs/task/ShuttleChargePowerScheduler.java
new file mode 100644
index 0000000..51de897
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/ShuttleChargePowerScheduler.java
@@ -0,0 +1,132 @@
+package com.zy.asrs.task;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.domain.param.ShuttleTimedPowerRangeParam;
+import com.zy.asrs.entity.BasShuttle;
+import com.zy.asrs.service.BasShuttleService;
+import com.zy.common.utils.RedisUtil;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalTime;
+import java.util.List;
+
+@Component
+@Slf4j
+public class ShuttleChargePowerScheduler {
+
+    @Autowired
+    private ConfigService configService;
+    @Autowired
+    private BasShuttleService basShuttleService;
+    @Autowired
+    private RedisUtil redisUtil;
+
+    /**
+     * 灏忚溅鍏呯數绾胯嚜鍔ㄨ皟鑺�
+     * 姣�5閽熸墽琛屼竴娆�
+     */
+    @Scheduled(cron = "0 5 * * * ? ")
+    public void run() {
+        boolean timedCharge = false;
+        Config timedChargeConfig = configService.selectOne(new EntityWrapper<Config>()
+                .eq("code", "timedCharge")
+                .eq("status", 1));
+        if (timedChargeConfig != null) {
+            if("Y".equals(timedChargeConfig.getValue())) {
+                timedCharge = true;
+            }
+        }
+
+        if(!timedCharge) {
+            return;
+        }
+
+        Config timedChargeRangeConfig = configService.selectOne(new EntityWrapper<Config>()
+                .eq("code", "timedChargeRange")
+                .eq("status", 1));
+        if (timedChargeRangeConfig == null) {
+            return;
+        }
+
+        Integer timedChargePowerLine = 90;
+        Config timedChargePowerLineConfig = configService.selectOne(new EntityWrapper<Config>()
+                .eq("code", "timedChargePowerLine")
+                .eq("status", 1));
+        if (timedChargePowerLineConfig == null) {
+            return;
+        }
+        timedChargePowerLine = Integer.parseInt(timedChargePowerLineConfig.getValue());
+
+        Integer shuttleDefaultChargePowerLine = 70;
+        Config shuttleDefaultChargePowerLineConfig = configService.selectOne(new EntityWrapper<Config>()
+                .eq("code", "shuttleDefaultChargePowerLine")
+                .eq("status", 1));
+        if (shuttleDefaultChargePowerLineConfig != null) {
+            shuttleDefaultChargePowerLine = Integer.parseInt(shuttleDefaultChargePowerLineConfig.getValue());
+        }
+
+        List<ShuttleTimedPowerRangeParam> list = JSON.parseArray(timedChargeRangeConfig.getValue(), ShuttleTimedPowerRangeParam.class);
+        for (ShuttleTimedPowerRangeParam rangeParam : list) {
+            Object timedChargeObject = redisUtil.get("timedCharge");
+
+            LocalTime startTime = LocalTime.of(rangeParam.getStartTime(), 0);
+            LocalTime endTime = LocalTime.of(rangeParam.getEndTime(), 0);
+            boolean checkTime = checkTime(startTime, endTime);
+            if(!checkTime) {
+                if (timedChargeObject != null) {
+                    subPower(shuttleDefaultChargePowerLine);
+                }
+                continue;
+            }
+
+            if(timedChargeObject != null) {
+                continue;
+            }
+
+            addPower(timedChargePowerLine);
+        }
+
+    }
+
+    public boolean checkTime(LocalTime startTime, LocalTime endTime) {
+        LocalTime now = LocalTime.now();
+        return !now.isBefore(startTime) && !now.isAfter(endTime);
+    }
+
+    public boolean addPower(Integer timedChargePowerLine) {
+        //璋冩暣鐢甸噺绾�
+        List<BasShuttle> shuttleList = basShuttleService.selectList(new EntityWrapper<BasShuttle>().ne("charge_line", timedChargePowerLine));
+        if (shuttleList.isEmpty()) {
+            return false;
+        }
+
+        BasShuttle basShuttle = shuttleList.get(0);
+        basShuttle.setChargeLine(timedChargePowerLine);
+        basShuttleService.updateById(basShuttle);
+
+        redisUtil.set("timedCharge", shuttleList.size());
+        return true;
+    }
+
+    public boolean subPower(Integer shuttleDefaultChargePowerLine) {
+        List<BasShuttle> shuttleList = basShuttleService.selectList(new EntityWrapper<BasShuttle>());
+        if (shuttleList.isEmpty()) {
+            return false;
+        }
+
+        for (BasShuttle basShuttle : shuttleList) {
+            basShuttle.setChargeLine(shuttleDefaultChargePowerLine);
+            basShuttleService.updateById(basShuttle);
+        }
+
+        redisUtil.del("timedCharge");
+        return true;
+    }
+
+}

--
Gitblit v1.9.1