From 74329a490366c8aff2acaa1adb393053b9fd0cfc Mon Sep 17 00:00:00 2001 From: ZZ Date: Mon, 29 Nov 2021 15:09:39 +0800 Subject: [PATCH] =?UTF-8?q?1=E5=88=86=E9=92=9F=E5=86=85=E4=B8=8B=E5=8F=91?= =?UTF-8?q?=E6=96=B0=E8=B4=B9=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xhpc/pp/server/RateModelTask.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/RateModelTask.java diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/RateModelTask.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/RateModelTask.java new file mode 100644 index 00000000..7a7f9349 --- /dev/null +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/RateModelTask.java @@ -0,0 +1,61 @@ +package com.xhpc.pp.server; + +import com.xhpc.common.api.dto.ChargingStationDto; +import com.xhpc.pp.logic.RateModelRequestLogic; +import com.xhpc.pp.utils.HexUtils; +import lombok.extern.slf4j.Slf4j; +import org.quickserver.net.server.ClientHandler; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.Collection; +import java.util.Set; + +import static cn.hutool.core.util.NumberUtil.isInteger; +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; +import static com.xhpc.pp.server.ChargingPileServer.getHandler; + +@Slf4j +@Component +public class RateModelTask { + + @Scheduled(fixedRate = 60000) + protected void run() { + + Collection stationKeys = REDIS.keys("station:*"); + for (String stationKey : stationKeys) { + ChargingStationDto stationDto = REDIS.getCacheObject(stationKey); + Long rateModelIdStation = stationDto.getRateModelId(); + if (rateModelIdStation != null) { + Set pks = stationDto.getPiles(); + if (pks != null) for (String pk : pks) { + Long rateModelIdPile = REDIS.getCacheMapValue(pk, "rateModelId"); + if (rateModelIdPile == null || !rateModelIdStation.equals(rateModelIdPile)) { + String gkPattern = ("gun:").concat(pk).concat("*"); + Collection gks = REDIS.keys(gkPattern); + boolean charging = false; + for (String gk : gks) { + if (isInteger(REDIS.getCacheMapValue(gk, "status"))) { + charging = true; + break; + } + } + if (!charging) { + ClientHandler handler = getHandler(pk.substring(5)); + if (handler != null && handler.isOpen()) { + String rsmsg = RateModelRequestLogic.translate(pk.substring(5), rateModelIdStation, "0058"); + try { + handler.sendClientBinary(HexUtils.toBytes(rsmsg)); + } catch (IOException e) { + log.error("{} rate model not sent.", pk); + } + } + } + } + } + } + } + } + +}