From 90d74beb039a99986ec918ac6c23c3864cc9be6a Mon Sep 17 00:00:00 2001
From: andy <1042025947@qq.com>
Date: Wed, 29 Oct 2025 10:55:51 +0800
Subject: [PATCH] =?UTF-8?q?=E7=AB=99=E6=8E=A7=E7=89=88=E6=9C=AC=20?=
=?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=B8=9A=E5=8A=A1=E4=B8=8A=E7=BA=BF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/compiler.xml | 6 +-
.../hd/common/core/constant/HDConstant.java | 4 +
.../core/dao/cloud/AlarmTemplateDao.java | 12 +++
.../cloud/BatteryStationCdStrategyDao.java | 2 +
.../hd/common/core/entity/BaseEntity.java | 6 ++
.../hd/common/core/entity/IdEntity.java | 7 ++
.../cloud/BatteryStationCdStrategyDetail.java | 26 +++---
.../core/entity/common/AlarmTemplate.java | 40 ++++++++++
.../common/core/enums/OrderStatusEnums.java | 2 +
.../InsertAndUpdateMybatisHandler.java | 6 +-
.../controller/alarm/AlarmController.java | 80 +++++++++++++++++++
.../customer/WechatUserController.java | 2 +-
.../request/PageListAlarmTemplateRequest.java | 17 ++++
.../mqtt/enums/StateFunctionTypesEnum.java | 1 +
.../message/handle/EventMessageService.java | 6 +-
.../message/handle/MessageUtilService.java | 22 ++++-
...irmSwapCompleteExchangeProcessorImpl.java} | 4 +-
.../MqttStrategyConfirmExchangeProcessor.java | 30 +++++++
.../impl/event/BaseProcessorImpl.java | 29 +++++++
.../MqttStrategyEventExchangeProcessor.java | 13 ++-
.../cloud/open/processor/StrategyFactory.java | 7 +-
.../impl/BatteryStrategyProcessor.java | 33 ++++++++
.../processor/impl/KeepaliveProcessor.java | 27 +++++++
.../processor/impl/OrderSwapProcessor.java | 4 +-
.../cloud/service/AlarmTemplateService.java | 20 +++++
...BatteryStationCdStrategyDetailService.java | 21 +++++
.../hd/cloud/service/WechatUserService.java | 8 +-
.../impl/AlarmTemplateServiceImpl.java | 59 ++++++++++++++
...eryStationCdStrategyDetailServiceImpl.java | 58 ++++++++++++++
.../BatteryStationCdStrategyServiceImpl.java | 40 +++++++++-
.../cloud/service/impl/OrderServiceImpl.java | 1 +
.../service/impl/WechatUserServiceImpl.java | 8 +-
.../hd/cloud/service/rpc/WechatService.java | 8 ++
.../mapper/BatteryStationCdStrategyMapper.xml | 20 ++++-
.../com/evotech/hd/cloud/AesDecryTest.java | 41 ++++++----
.../hd/wechat/config/GZHProperties.java | 7 +-
.../wechat/controller/SendGzhController.java | 8 ++
.../templatemessage/AlarmTemplateData.java | 22 +++++
.../gzh/GZHMessageTemplateService.java | 31 ++++++-
.../src/main/resources/application.yml | 2 +
40 files changed, 681 insertions(+), 59 deletions(-)
create mode 100644 base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/AlarmTemplateDao.java
create mode 100644 base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/common/AlarmTemplate.java
create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/alarm/AlarmController.java
create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/request/PageListAlarmTemplateRequest.java
rename cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/{event/MqttEventSwapCompleteExchangeProcessorImpl.java => confirm/MqttConfirmSwapCompleteExchangeProcessorImpl.java} (98%)
create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/confirm/MqttStrategyConfirmExchangeProcessor.java
create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/BaseProcessorImpl.java
create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/BatteryStrategyProcessor.java
create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/KeepaliveProcessor.java
create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/AlarmTemplateService.java
create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyDetailService.java
create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/AlarmTemplateServiceImpl.java
create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyDetailServiceImpl.java
create mode 100644 wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/AlarmTemplateData.java
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index b0702df..cd8b700 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -6,9 +6,6 @@
-
-
-
@@ -16,7 +13,10 @@
+
+
+
diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java
index d4143cb..f0a453e 100644
--- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java
+++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java
@@ -314,4 +314,8 @@ public interface HDConstant {
* 预约单失效前缀
*/
String preOrder="pre_order:";
+ /***
+ * 站控推送策略
+ */
+ String STRATEGY_NAME = "站控推送";
}
diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/AlarmTemplateDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/AlarmTemplateDao.java
new file mode 100644
index 0000000..5badb9e
--- /dev/null
+++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/AlarmTemplateDao.java
@@ -0,0 +1,12 @@
+package com.evotech.hd.common.core.dao.cloud;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.evotech.hd.common.core.entity.common.AlarmTemplate;
+
+/**
+ * @author zrb
+ * @since 2025-02-10
+ */
+public interface AlarmTemplateDao extends BaseMapper {
+
+}
diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/BatteryStationCdStrategyDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/BatteryStationCdStrategyDao.java
index 85769b7..b995d66 100644
--- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/BatteryStationCdStrategyDao.java
+++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/BatteryStationCdStrategyDao.java
@@ -16,4 +16,6 @@ import java.util.List;
public interface BatteryStationCdStrategyDao extends BaseMapper {
List listCdStrategy(@Param("stationCode") String stationCode, @Param("status") Integer status);
+
+ BatteryStationCdStrategy getBatteryStationCdStrategyByName(@Param("stationCode") String stationCode, @Param("name") String name);
}
diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java
index e6e90e9..b5f38d0 100644
--- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java
+++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java
@@ -37,4 +37,10 @@ public class BaseEntity extends IdEntity {
@TableField(fill = FieldFill.UPDATE)
private Date uptime;
+ public BaseEntity() {
+ }
+
+ public BaseEntity(Integer pkId) {
+ super(pkId);
+ }
}
diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/IdEntity.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/IdEntity.java
index 0706709..ad797cb 100644
--- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/IdEntity.java
+++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/IdEntity.java
@@ -36,4 +36,11 @@ public class IdEntity implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private Date ctime;
+
+ public IdEntity() {
+ }
+
+ public IdEntity(Integer pkId) {
+ this.pkId = pkId;
+ }
}
diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationCdStrategyDetail.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationCdStrategyDetail.java
index 80ce45f..63650d9 100644
--- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationCdStrategyDetail.java
+++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationCdStrategyDetail.java
@@ -1,22 +1,16 @@
package com.evotech.hd.common.core.entity.cloud;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.BaseEntity;
-import com.fasterxml.jackson.annotation.JsonFormat;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import org.springframework.format.annotation.DateTimeFormat;
-
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema.RequiredMode;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
+import java.io.Serializable;
+
/**
* @author zrb
* @since 2025-02-10
@@ -50,4 +44,18 @@ public class BatteryStationCdStrategyDetail extends BaseEntity implements Serial
@Schema(description = "充电功率")
private Double chargingPower;
+
+ /***
+ * 数据状态, 1正常, 2修改, 3删除
+ */
+ @TableField(exist = false)
+ private Integer dataType = 1;
+
+ public BatteryStationCdStrategyDetail() {
+ }
+
+ public BatteryStationCdStrategyDetail(Integer pkId, Integer dataType) {
+ super(pkId);
+ this.dataType = dataType;
+ }
}
diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/common/AlarmTemplate.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/common/AlarmTemplate.java
new file mode 100644
index 0000000..368cbc7
--- /dev/null
+++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/common/AlarmTemplate.java
@@ -0,0 +1,40 @@
+package com.evotech.hd.common.core.entity.common;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.evotech.hd.common.core.entity.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * AlarmTemplate
+ *
+ * @author andy.shi
+ * @ClassName:AlarmTemplate
+ * @date: 2025年10月28日 15:01
+ * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@TableName(value = "sys_alarm_template", schema = "hd_cloud_manage")
+@Schema(name = "AlarmTemplate", description = "异常通知")
+public class AlarmTemplate extends BaseEntity implements Serializable {
+
+ @Schema(description = "路径", requiredMode = Schema.RequiredMode.REQUIRED)
+ String path;
+ @Schema(description = "通知人员", requiredMode = Schema.RequiredMode.REQUIRED)
+ String recipientIds;
+
+ //通知人员姓名
+ @TableField(exist = false)
+ String recipientNames;
+
+ @TableField(exist = false)
+ String area;
+ @TableField(exist = false)
+ String message;
+
+}
diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java
index 5d65657..19b6646 100644
--- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java
+++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java
@@ -31,6 +31,8 @@ public enum OrderStatusEnums implements BaseEnum {
Integer code;
String name;
+
+
public Integer getCode() {
return code;
diff --git a/base-commons/common-permission/src/main/java/com/evotech/hd/common/permission/handler/InsertAndUpdateMybatisHandler.java b/base-commons/common-permission/src/main/java/com/evotech/hd/common/permission/handler/InsertAndUpdateMybatisHandler.java
index f417b87..71d9544 100644
--- a/base-commons/common-permission/src/main/java/com/evotech/hd/common/permission/handler/InsertAndUpdateMybatisHandler.java
+++ b/base-commons/common-permission/src/main/java/com/evotech/hd/common/permission/handler/InsertAndUpdateMybatisHandler.java
@@ -26,7 +26,7 @@ public class InsertAndUpdateMybatisHandler implements MetaObjectHandler {
public void insertFill(MetaObject metaObject) {
try {
AuthUser user = RedisPermissionUtils.getUser();
- if(BeanUtil.isNotEmpty(metaObject)){
+ if(BeanUtil.isNotEmpty(metaObject) && BeanUtil.isNotEmpty(user)){
mySetFieldValByName("creater",(BeanUtil.isEmpty(user) ? "system" : user.getUid()),metaObject);
mySetFieldValByName("ctime",new Date(),metaObject);
}
@@ -47,8 +47,8 @@ public class InsertAndUpdateMybatisHandler implements MetaObjectHandler {
@Override
public void updateFill(MetaObject metaObject) {
try {
- AuthUser user = RedisPermissionUtils.getUser();
- if(BeanUtil.isNotEmpty(metaObject)){
+ AuthUser user = RedisPermissionUtils.getUser();
+ if(BeanUtil.isNotEmpty(metaObject) && BeanUtil.isNotEmpty(user)){
mySetFieldValByName("updater",(BeanUtil.isEmpty(user) ? "system" : user.getUid()),metaObject);
mySetFieldValByName("uptime",new Date(),metaObject);
}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/alarm/AlarmController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/alarm/AlarmController.java
new file mode 100644
index 0000000..51b8eed
--- /dev/null
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/alarm/AlarmController.java
@@ -0,0 +1,80 @@
+package com.evotech.hd.cloud.controller.alarm;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.evotech.hd.cloud.entity.request.PageListAlarmTemplateRequest;
+import com.evotech.hd.cloud.service.AlarmTemplateService;
+import com.evotech.hd.cloud.service.rpc.WechatService;
+import com.evotech.hd.common.core.Dto.Result;
+import com.evotech.hd.common.core.entity.common.AlarmTemplate;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * AlarmController
+ *
+ * @author andy.shi
+ * @ClassName:AlarmController
+ * @date: 2025年10月28日 15:13
+ * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
+ */
+@Tag(name = "异常通知")
+@ApiSupport(order = 48)
+@RestController
+@RequestMapping("/alarm")
+public class AlarmController {
+
+ @Autowired
+ AlarmTemplateService alarmTemplateService;
+ @Autowired
+ WechatService wechatService;
+
+
+ @Operation(summary = "增加")
+ @PostMapping("/add")
+ @ApiOperationSupport(order = 1)
+ public Result add(@Valid @ParameterObject AlarmTemplate params) {
+ return Result.getInstance().build(Boolean.class).success(alarmTemplateService.save(params));
+ }
+
+ @Operation(summary = "删除")
+ @PostMapping("/del")
+ @ApiOperationSupport(order = 2)
+ public Result delete(Integer id) {
+ return Result.getInstance().build(Boolean.class).success(alarmTemplateService.removeById(id));
+ }
+
+ @Operation(summary = "修改")
+ @PostMapping({"/update"})
+ @ApiOperationSupport(order = 3)
+ public Result update(@ParameterObject AlarmTemplate params) {
+ return Result.getInstance().build(Boolean.class).success(alarmTemplateService.updateById(params));
+ }
+
+ @Operation(summary = "查询")
+ @GetMapping("/list")
+ @ApiOperationSupport(order = 4)
+ public Result> list(@ParameterObject PageListAlarmTemplateRequest params) {
+ return alarmTemplateService.pageList(params);
+ }
+
+ @Operation(summary = "推送通知")
+ @PostMapping("/send/{path}")
+
+ public Result deleteDetail(@RequestBody AlarmTemplate param,@PathVariable("path")String path) {
+ AlarmTemplate alarmTemplate = alarmTemplateService.getOne(new LambdaQueryWrapper().eq(AlarmTemplate::getPath, path), false);
+ if(ObjectUtils.isEmpty(alarmTemplate)){
+ return Result.getInstance().build(String.class).error("当前路径不存在");
+ }
+ alarmTemplate.setArea(param.getArea());
+ alarmTemplate.setMessage(param.getMessage());
+ return wechatService.sendGzhToBeSettledAlarmMessage(alarmTemplate);
+ }
+}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/WechatUserController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/WechatUserController.java
index c070862..24b4476 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/WechatUserController.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/WechatUserController.java
@@ -28,7 +28,7 @@ public class WechatUserController {
@Operation(summary = "查询")
@GetMapping("/list")
public Result> list(@ParameterObject PageListWechatUserRequest plwur) {
- return wechatUserService.list(plwur);
+ return wechatUserService.pageList(plwur);
}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/request/PageListAlarmTemplateRequest.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/request/PageListAlarmTemplateRequest.java
new file mode 100644
index 0000000..25f2a47
--- /dev/null
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/request/PageListAlarmTemplateRequest.java
@@ -0,0 +1,17 @@
+package com.evotech.hd.cloud.entity.request;
+
+import com.evotech.hd.common.core.entity.BasePageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+@Data
+@Schema(name = "查询异常请求参数", hidden = true)
+@EqualsAndHashCode(callSuper=false)
+public class PageListAlarmTemplateRequest extends BasePageRequest {
+
+ @Schema(description = "路径")
+ private String path;
+
+}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/enums/StateFunctionTypesEnum.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/enums/StateFunctionTypesEnum.java
index d18aaf1..b5d3f73 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/enums/StateFunctionTypesEnum.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/enums/StateFunctionTypesEnum.java
@@ -15,6 +15,7 @@ public enum StateFunctionTypesEnum {
FUN_CHARGING_DATA("chargingData", "", "充电过程实时信息"),
FUN_BAT_DATA("batData", "", "电池实时信息"),
FUN_STATION_STATE("stationState", "", "站级状态信息"),
+ FUN_CHARGING_STRATEGY("chargingStrategy", "", "充电策略信息"),
;
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EventMessageService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EventMessageService.java
index 137ab59..6517611 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EventMessageService.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/EventMessageService.java
@@ -4,7 +4,7 @@ import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
-import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.event.MqttStrategyEventExchangeProcessor;
+import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.confirm.MqttStrategyConfirmExchangeProcessor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
@@ -25,11 +25,11 @@ public class EventMessageService {
* event消息 处理
*/
public void event(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
- Map mqttEventExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyEventExchangeProcessor.class);
+ Map mqttEventExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyConfirmExchangeProcessor.class);
if(CollectionUtils.isEmpty(mqttEventExchangeProcessorMap)){
log.error("mqttEventExchangeProcessorMap is empty, 没有找到当前的请求信息, 请求接口{}, 请求参数{}", JSONUtil.toJsonStr(header), JSONUtil.toJsonStr(dataBody));
}
- for (MqttStrategyEventExchangeProcessor processor : mqttEventExchangeProcessorMap.values()) {
+ for (MqttStrategyConfirmExchangeProcessor processor : mqttEventExchangeProcessorMap.values()) {
if(processor.accept(header.getFunction())){
processor.exchange(topic, header, dataBody);
}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MessageUtilService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MessageUtilService.java
index 2557a9d..641a4ac 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MessageUtilService.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/MessageUtilService.java
@@ -1,5 +1,7 @@
package com.evotech.hd.cloud.mqtt.message.handle;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.KeyUtil;
@@ -11,6 +13,7 @@ import cn.hutool.crypto.asymmetric.RSA;
import cn.hutool.crypto.symmetric.AES;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
+import cn.hutool.json.JSONConfig;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -18,9 +21,11 @@ import com.evotech.hd.cloud.dao.BatteryStationSecretKeyDao;
import com.evotech.hd.cloud.entity.BatteryStationSecretKey;
import com.evotech.hd.cloud.entity.MessageMqtt;
import com.evotech.hd.cloud.mqtt.config.MqttPublishMessage;
+import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
import com.evotech.hd.cloud.mqtt.message.MyMqttMessage;
+import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
import com.evotech.hd.cloud.service.MessageMqttService;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.redis.utils.RedisUtil;
@@ -45,8 +50,23 @@ public class MessageUtilService {
private BatteryStationSecretKeyDao batteryStationSecretKeyDao;
@Resource
private MqttPublishMessage publishMessage;
-
+
+ public void publishStateMessage(String stationCode, String function, MqttResponse response) {
+ publishMessage(function, MqttMessageTypeEnum.STATE.getType(),response, stationCode);
+ }
+
+ private void publishMessage(String function, String messageType, MqttResponse response, String stationCode) {
+ MessageTopic topic = new MessageTopic();
+ topic.setMessageType(messageType);
+ topic.setStationCode(stationCode);
+ topic.setDataDirection("M2S");
+
+ MqttMessageHeader header = new MqttMessageHeader();
+ header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER));
+ header.setFunction(function);
+ publishAESMessage(topic, header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
+ }
/**
* 记录MQTT消息
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttEventSwapCompleteExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/confirm/MqttConfirmSwapCompleteExchangeProcessorImpl.java
similarity index 98%
rename from cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttEventSwapCompleteExchangeProcessorImpl.java
rename to cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/confirm/MqttConfirmSwapCompleteExchangeProcessorImpl.java
index 901edda..664bdc5 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttEventSwapCompleteExchangeProcessorImpl.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/confirm/MqttConfirmSwapCompleteExchangeProcessorImpl.java
@@ -1,4 +1,4 @@
-package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.event;
+package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.confirm;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
@@ -25,7 +25,7 @@ import org.springframework.stereotype.Service;
*/
@Service
@Slf4j
-public class MqttEventSwapCompleteExchangeProcessorImpl implements MqttStrategyEventExchangeProcessor {
+public class MqttConfirmSwapCompleteExchangeProcessorImpl implements MqttStrategyConfirmExchangeProcessor {
@Resource
OrderService orderService;
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/confirm/MqttStrategyConfirmExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/confirm/MqttStrategyConfirmExchangeProcessor.java
new file mode 100644
index 0000000..8471dfb
--- /dev/null
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/confirm/MqttStrategyConfirmExchangeProcessor.java
@@ -0,0 +1,30 @@
+package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.confirm;
+
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.json.JSONConfig;
+import cn.hutool.json.JSONUtil;
+import com.evotech.hd.cloud.mqtt.enums.EventFunctionTypesEnum;
+import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum;
+import com.evotech.hd.cloud.mqtt.message.MessageTopic;
+import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
+import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
+import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
+
+/**
+ * 接口
+ *
+ * @ClassName:MqttStrategyequestExchangeProcessor
+ * @date: 2025年06月19日 16:29
+ * @author: andy.shi
+ * @contact: 17330188597
+ * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
+ */
+public interface MqttStrategyConfirmExchangeProcessor extends MqttStrategyExchangeProcessor {
+
+ default void sendAESMessage(MessageTopic topic, MqttMessageHeader header, EventFunctionTypesEnum typesEnum, MqttResponse response){
+ topic.setMessageType(MqttMessageTypeEnum.CONFIRM.getType());
+ header.setFunction(typesEnum.getReFunction());
+ logger.info("\r\n=====>>>回复站端的EVENT消息--MQTT发送到消息主题:{},头部信息:{},message:{}", topic,header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
+ sendAESMessage(topic, header, response);
+ }
+}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/BaseProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/BaseProcessorImpl.java
new file mode 100644
index 0000000..2f504c3
--- /dev/null
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/BaseProcessorImpl.java
@@ -0,0 +1,29 @@
+package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.event;
+
+import cn.hutool.json.JSONObject;
+import com.evotech.hd.cloud.mqtt.message.MessageTopic;
+import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * BaseProcessorImpl
+ *
+ * @author andy.shi
+ * @ClassName:BaseProcessorImpl
+ * @date: 2025年10月29日 10:46
+ * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
+ */
+@Service
+@Slf4j
+public class BaseProcessorImpl implements MqttStrategyEventExchangeProcessor {
+ @Override
+ public boolean accept(String functionName) {
+ return false;
+ }
+
+ @Override
+ public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
+
+ }
+}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttStrategyEventExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttStrategyEventExchangeProcessor.java
index b775ca7..72ca9f4 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttStrategyEventExchangeProcessor.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/event/MqttStrategyEventExchangeProcessor.java
@@ -11,19 +11,18 @@ import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor;
/**
- * 接口
+ * MqttStrategyEventExchangeProcessor
*
- * @ClassName:MqttStrategyequestExchangeProcessor
- * @date: 2025年06月19日 16:29
- * @author: andy.shi
- * @contact: 17330188597
+ * @author andy.shi
+ * @ClassName:MqttStrategyEventExchangeProcessor
+ * @date: 2025年10月29日 10:41
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
+
public interface MqttStrategyEventExchangeProcessor extends MqttStrategyExchangeProcessor {
-
default void sendAESMessage(MessageTopic topic, MqttMessageHeader header, EventFunctionTypesEnum typesEnum, MqttResponse response){
- topic.setMessageType(MqttMessageTypeEnum.CONFIRM.getType());
+ topic.setMessageType(MqttMessageTypeEnum.EVENT.getType());
header.setFunction(typesEnum.getReFunction());
logger.info("\r\n=====>>>回复站端的EVENT消息--MQTT发送到消息主题:{},头部信息:{},message:{}", topic,header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
sendAESMessage(topic, header, response);
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/StrategyFactory.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/StrategyFactory.java
index 1c9d327..4d4fd60 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/StrategyFactory.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/StrategyFactory.java
@@ -55,8 +55,11 @@ public class StrategyFactory implements InitializingBean, ApplicationContextAwar
}
return Result.getInstance().error("当前method不存在");
} catch (Exception e) {
- Throwable realException = e.getCause(); // 获取实际的异常
- realException.printStackTrace();
+ Throwable realException = e.getCause();
+ if(realException != null){
+ realException.printStackTrace();
+ }// 获取实际的异常
+
e.printStackTrace();
return Result.getInstance().error(e.getMessage());
}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/BatteryStrategyProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/BatteryStrategyProcessor.java
new file mode 100644
index 0000000..9ab4f52
--- /dev/null
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/BatteryStrategyProcessor.java
@@ -0,0 +1,33 @@
+package com.evotech.hd.cloud.open.processor.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.evotech.hd.cloud.open.processor.StationMessageStrategyExchangeProcessor;
+import com.evotech.hd.cloud.service.BatteryStationCdStrategyDetailService;
+import com.evotech.hd.common.core.Dto.Result;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+/**
+ * BatteryStrategyProcessor
+ *
+ * @author andy.shi
+ * @ClassName:BatteryStrategyProcessor
+ * @date: 2025年09月28日 9:18
+ * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
+ */
+@Service
+public class BatteryStrategyProcessor implements StationMessageStrategyExchangeProcessor {
+
+ @Resource
+ BatteryStationCdStrategyDetailService batteryStationCdStrategyDetailService;
+
+ /***
+ * 推送策略
+ * @param json
+ * @return
+ */
+ public Result receiveStationStrategy(JSONObject json){
+ return batteryStationCdStrategyDetailService.addBatteryStationCdStrategyDetailByCloud(json);
+ }
+
+}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/KeepaliveProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/KeepaliveProcessor.java
new file mode 100644
index 0000000..d818df3
--- /dev/null
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/KeepaliveProcessor.java
@@ -0,0 +1,27 @@
+package com.evotech.hd.cloud.open.processor.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.evotech.hd.cloud.open.processor.StationMessageStrategyExchangeProcessor;
+import com.evotech.hd.common.core.Dto.Result;
+import org.springframework.stereotype.Service;
+
+/**
+ * BatteryStrategyProcessor
+ *
+ * @author andy.shi
+ * @ClassName:BatteryStrategyProcessor
+ * @date: 2025年09月28日 9:18
+ * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
+ */
+@Service
+public class KeepaliveProcessor implements StationMessageStrategyExchangeProcessor {
+
+ /***
+ * 心跳检查
+ * @return
+ */
+ public Result keepalive(JSONObject json){
+ return Result.getInstance().build(Boolean.class).success(true);
+ }
+
+}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/OrderSwapProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/OrderSwapProcessor.java
index 2bf28e2..8b99869 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/OrderSwapProcessor.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/open/processor/impl/OrderSwapProcessor.java
@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.dto.newer.event.SwapComplete;
import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData;
-import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.event.MqttEventSwapCompleteExchangeProcessorImpl;
+import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.confirm.MqttConfirmSwapCompleteExchangeProcessorImpl;
import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state.MqttStateSwapStepDataExchangeProcessor;
import com.evotech.hd.cloud.open.processor.StationMessageStrategyExchangeProcessor;
import com.evotech.hd.cloud.service.OrderService;
@@ -45,7 +45,7 @@ public class OrderSwapProcessor implements StationMessageStrategyExchangeProcess
@Resource
private MqttStateSwapStepDataExchangeProcessor mqttStateSwapStepDataExchangeProcessor;
@Resource
- private MqttEventSwapCompleteExchangeProcessorImpl mqttEventSwapCompleteExchangeProcessorImpl;
+ private MqttConfirmSwapCompleteExchangeProcessorImpl mqttEventSwapCompleteExchangeProcessorImpl;
/***
* 新增换电单 禁止删除, 反射调用
* @param json
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/AlarmTemplateService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/AlarmTemplateService.java
new file mode 100644
index 0000000..cf87d7a
--- /dev/null
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/AlarmTemplateService.java
@@ -0,0 +1,20 @@
+package com.evotech.hd.cloud.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.evotech.hd.cloud.entity.request.PageListAlarmTemplateRequest;
+import com.evotech.hd.common.core.Dto.Result;
+import com.evotech.hd.common.core.entity.common.AlarmTemplate;
+
+/**
+ * AlarmTemplateService
+ *
+ * @author andy.shi
+ * @ClassName:AlarmTemplateService
+ * @date: 2025年10月28日 15:14
+ * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
+ */
+public interface AlarmTemplateService extends IService {
+
+ public Result> pageList(PageListAlarmTemplateRequest params);
+}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyDetailService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyDetailService.java
new file mode 100644
index 0000000..57a6107
--- /dev/null
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyDetailService.java
@@ -0,0 +1,21 @@
+package com.evotech.hd.cloud.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.evotech.hd.common.core.Dto.Result;
+import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategyDetail;
+
+/**
+ * BatteryStationCdStrategyDetailService
+ *
+ * @author andy.shi
+ * @ClassName:BatteryStationCdStrategyDetailService
+ * @date: 2025年09月28日 9:22
+ * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
+ */
+public interface BatteryStationCdStrategyDetailService extends IService {
+
+
+ public Result addBatteryStationCdStrategyDetailByCloud (JSONObject jsonObject);
+
+}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WechatUserService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WechatUserService.java
index 661d753..905e3f9 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WechatUserService.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WechatUserService.java
@@ -5,10 +5,14 @@ import com.evotech.hd.cloud.entity.request.PageListWechatUserRequest;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.entity.wechat.WechatUser;
+import java.util.List;
+
public interface WechatUserService {
- public Result> list(PageListWechatUserRequest plwur);
-
+ public Result> pageList(PageListWechatUserRequest plwur);
+
+ public Result> list(List wuIds);
+
public Result alterPhone(String wuid, String phone, String name);
public Result companyRelation(String wuid, String pcode, String pname);
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/AlarmTemplateServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/AlarmTemplateServiceImpl.java
new file mode 100644
index 0000000..eb54694
--- /dev/null
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/AlarmTemplateServiceImpl.java
@@ -0,0 +1,59 @@
+package com.evotech.hd.cloud.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.evotech.hd.cloud.entity.request.PageListAlarmTemplateRequest;
+import com.evotech.hd.cloud.service.AlarmTemplateService;
+import com.evotech.hd.cloud.service.WechatUserService;
+import com.evotech.hd.cloud.service.rpc.WechatService;
+import com.evotech.hd.common.core.Dto.Result;
+import com.evotech.hd.common.core.Dto.ResultUtil;
+import com.evotech.hd.common.core.dao.cloud.AlarmTemplateDao;
+import com.evotech.hd.common.core.entity.common.AlarmTemplate;
+import com.evotech.hd.common.core.entity.wechat.WechatUser;
+import com.evotech.hd.common.core.enums.CodeMsg;
+import com.evotech.hd.common.core.utils.Collections;
+import com.evotech.hd.common.core.utils.DataUtils;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * BatteryStationCdStrategyDetailServiceImpl
+ *
+ * @author andy.shi
+ * @ClassName:BatteryStationCdStrategyDetailServiceImpl
+ * @date: 2025年09月28日 9:25
+ * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
+ */
+
+@Service
+public class AlarmTemplateServiceImpl extends ServiceImpl implements AlarmTemplateService {
+
+ @Resource
+ WechatService wechatService;
+ @Resource
+ WechatUserService wechatUserService;
+
+ @Override
+ public Result> pageList(PageListAlarmTemplateRequest params) {
+ Page page = new Page(params.getPageNo(), params.getPageSize());
+ page = getBaseMapper().selectPage(page, new LambdaQueryWrapper()
+ .eq(StringUtils.hasText(params.getPath()), AlarmTemplate::getPath, params.getPath()));
+ if (page.getRecords().isEmpty()) {
+ return new Result>().error(CodeMsg.DATABASE_RESULT_NULL);
+ }
+ page.getRecords().forEach(data->{
+ Result> listResult = wechatUserService.list(Collections.asList(data.getRecipientIds().split(",")));
+ if(ResultUtil.verifyCode(listResult)){
+ data.setRecipientNames(DataUtils.findDefaultValue(ResultUtil.getValue(listResult), new ArrayList()).stream().map(d-> d.getName()+"-"+d.getPhoneNumber()).collect(Collectors.joining(",")));
+ }
+ });
+ return new Result>().success(page);
+ }
+}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyDetailServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyDetailServiceImpl.java
new file mode 100644
index 0000000..e946418
--- /dev/null
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyDetailServiceImpl.java
@@ -0,0 +1,58 @@
+package com.evotech.hd.cloud.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.evotech.hd.cloud.service.BatteryStationCdStrategyDetailService;
+import com.evotech.hd.common.core.Dto.Result;
+import com.evotech.hd.common.core.constant.HDConstant;
+import com.evotech.hd.common.core.dao.cloud.BatteryStationCdStrategyDao;
+import com.evotech.hd.common.core.dao.cloud.BatteryStationCdStrategyDetailDao;
+import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategy;
+import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategyDetail;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+/**
+ * BatteryStationCdStrategyDetailServiceImpl
+ *
+ * @author andy.shi
+ * @ClassName:BatteryStationCdStrategyDetailServiceImpl
+ * @date: 2025年09月28日 9:25
+ * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
+ */
+
+@Service
+public class BatteryStationCdStrategyDetailServiceImpl extends ServiceImpl implements BatteryStationCdStrategyDetailService {
+
+ @Resource
+ BatteryStationCdStrategyDao batteryStationCdStrategyDao;
+ @Override
+ public Result addBatteryStationCdStrategyDetailByCloud(JSONObject jsonObject) {
+ //云端数据id
+ Integer cloudId = jsonObject.getInteger("cloudId");
+ BatteryStationCdStrategyDetail detail = null;
+ if(cloudId != null){
+ detail = getById(cloudId);
+ }else{
+ detail = new BatteryStationCdStrategyDetail();
+ BatteryStationCdStrategy batteryStationCdStrategy = batteryStationCdStrategyDao.getBatteryStationCdStrategyByName(jsonObject.getString("stationCode"), HDConstant.STRATEGY_NAME);
+ if(batteryStationCdStrategy == null){
+ batteryStationCdStrategy = new BatteryStationCdStrategy();
+ batteryStationCdStrategy.setStationCode(jsonObject.getString("stationCode"));
+ batteryStationCdStrategy.setStationName(jsonObject.getString("stationName"));
+ batteryStationCdStrategy.setStatus(1);
+ batteryStationCdStrategy.setName(HDConstant.STRATEGY_NAME);
+ batteryStationCdStrategy.setMiniLimit(5);
+ batteryStationCdStrategyDao.insert(batteryStationCdStrategy);
+ }
+ detail.setStrategyId(batteryStationCdStrategy.getPkId());
+ detail.setStationCode(batteryStationCdStrategy.getStationCode());
+ detail.setStationName(batteryStationCdStrategy.getStationName());
+ detail.setBeginTime(jsonObject.getString("beginTime"));
+ detail.setEndTime(jsonObject.getString("endTime"));
+ detail.setChargingPower(jsonObject.getDouble("chargingPower"));
+ saveOrUpdate(detail);
+ }
+ return Result.getInstance().build(JSONObject.class).success((JSONObject)JSONObject.toJSON(detail));
+ }
+}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java
index d39e6c1..fc672f2 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java
@@ -1,7 +1,11 @@
package com.evotech.hd.cloud.service.impl;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
+import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
+import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService;
import com.evotech.hd.cloud.service.BatteryStationCdStrategyService;
import com.evotech.hd.common.core.Dto.Result;
import com.evotech.hd.common.core.dao.cloud.BatteryStationCdStrategyDao;
@@ -9,23 +13,28 @@ import com.evotech.hd.common.core.dao.cloud.BatteryStationCdStrategyDetailDao;
import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategy;
import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategyDetail;
import com.evotech.hd.common.core.enums.CodeMsg;
+import com.evotech.hd.common.core.utils.Collections;
import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.concurrent.CompletableFuture;
@Service
+@Slf4j
public class BatteryStationCdStrategyServiceImpl implements BatteryStationCdStrategyService {
@Resource
private BatteryStationCdStrategyDao strategyDao;
@Resource
private BatteryStationCdStrategyDetailDao strategyDetailDao;
-
+ @Resource
+ private MessageUtilService messageUtilService;
@@ -44,7 +53,17 @@ public class BatteryStationCdStrategyServiceImpl implements BatteryStationCdStra
public Result delete(Integer id) {
int n = strategyDao.deleteById(id);
if (n == 1) {
- strategyDetailDao.delete(new QueryWrapper().eq("strategy_id", id));
+ List list = strategyDetailDao.selectList(new QueryWrapper().eq("strategy_id", id));
+ if(Collections.isNotEmpty(list)){
+ List delIds = Collections.emptyList();
+ list.stream().forEach(data->{
+ delIds.add(data.getPkId());
+ data.setDataType(3);
+ pushStation(data);
+ });
+ strategyDetailDao.deleteByIds(delIds);
+ }
+// strategyDetailDao.delete(new QueryWrapper().eq("strategy_id", id));
return new Result().success(n);
}
return new Result().error("删除充电策略出错!");
@@ -73,6 +92,7 @@ public class BatteryStationCdStrategyServiceImpl implements BatteryStationCdStra
bscsd.setCtime(new Date());
int n = strategyDetailDao.insert(bscsd);
if (n == 1) {
+ pushStation(bscsd);
return new Result().success(n);
}
return new Result().error("添加充电策略详情出错!");
@@ -82,6 +102,7 @@ public class BatteryStationCdStrategyServiceImpl implements BatteryStationCdStra
public Result deleteDetail(Integer id) {
int n = strategyDetailDao.deleteById(id);
if (n == 1) {
+ pushStation(new BatteryStationCdStrategyDetail(id, 3));
return new Result().success(n);
}
return new Result().error("删除充电策略详情出错!");
@@ -91,6 +112,8 @@ public class BatteryStationCdStrategyServiceImpl implements BatteryStationCdStra
public Result updateDetail(BatteryStationCdStrategyDetail bscsd) {
int n = strategyDetailDao.updateById(bscsd);
if (n == 1) {
+ bscsd.setDataType(2);
+ pushStation(bscsd);
return new Result().success(n);
}
return new Result().error("更新充电策略详情失败!");
@@ -119,4 +142,17 @@ public class BatteryStationCdStrategyServiceImpl implements BatteryStationCdStra
return list;
}
+ public void pushStation(BatteryStationCdStrategyDetail strategyDetail){
+ CompletableFuture.runAsync(() -> {
+ try {
+ messageUtilService.publishStateMessage(strategyDetail.getStationCode(), StateFunctionTypesEnum.FUN_CHARGING_STRATEGY.getFunction(), new MqttResponse().success(strategyDetail));
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("云端修正充电策略推送站端失败, 原因是:{}, 推送数据是: {}" , e.getMessage(), JSONObject.toJSONString(strategyDetail));
+ }
+ });
+
+
+ }
+
}
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java
index 50e6add..e525d9e 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java
@@ -548,6 +548,7 @@ public class OrderServiceImpl extends ServiceImpl implements Or
OrderDetailVo orderDetailVo = new OrderDetailVo();
Order order = getOne(new LambdaQueryWrapper().eq(Order::getOrderNo, orderNo));
BeanUtils.copyProperties(order, orderDetailVo);
+ orderDetailVo.setPerName(order.getOrderPreUname());
orderDetailVo.setAmount(order.getOrderAmount());
OrderDetail orderDetail = orderDetailDao.selectOne(new LambdaQueryWrapper().eq(OrderDetail::getOrderId, order.getPkId()));
if(ObjectUtils.isNotEmpty(orderDetail)){
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WechatUserServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WechatUserServiceImpl.java
index 3575705..f1f17c5 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WechatUserServiceImpl.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WechatUserServiceImpl.java
@@ -1,5 +1,6 @@
package com.evotech.hd.cloud.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -27,7 +28,7 @@ public class WechatUserServiceImpl implements WechatUserService {
private WechatUserDao wechatUserDao;
@Override
- public Result> list(PageListWechatUserRequest plwur) {
+ public Result> pageList(PageListWechatUserRequest plwur) {
Page page = new Page(plwur.getPageNo(), plwur.getPageSize());
page = wechatUserDao.selectPage(page, new QueryWrapper()
@@ -49,6 +50,11 @@ public class WechatUserServiceImpl implements WechatUserService {
return new Result>().success(page);
}
+ @Override
+ public Result> list(List wuIds) {
+ return Result.getInstance().buildList(WechatUser.class).success(wechatUserDao.selectList(new LambdaQueryWrapper().in(WechatUser::getWuid, wuIds)));
+ }
+
@Override
public Result alterPhone(String wuid, String phone, String name) {
if (!(StringUtils.hasText(phone) || StringUtils.hasText(name))) {
diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/WechatService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/WechatService.java
index d3ad3ac..ae72e1f 100644
--- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/WechatService.java
+++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/WechatService.java
@@ -6,6 +6,7 @@ import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
+import com.evotech.hd.common.core.entity.common.AlarmTemplate;
import com.evotech.hd.common.core.entity.order.Order;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.cloud.openfeign.FeignClient;
@@ -90,4 +91,11 @@ public interface WechatService {
@Async("taskExecutor")
public void sendGzhToBeSettledOrderMessage(@RequestBody Order order);
+ /***
+ * 发送报警到公众号
+ * @return
+ */
+ @PostMapping(value = "/send/gzh/alarm/message", consumes = {MediaType.APPLICATION_JSON_VALUE})
+ public com.evotech.hd.common.core.Dto.Result sendGzhToBeSettledAlarmMessage(@RequestBody AlarmTemplate alarmTemplate);
+
}
diff --git a/cloud-manage-server/src/main/resources/mapper/BatteryStationCdStrategyMapper.xml b/cloud-manage-server/src/main/resources/mapper/BatteryStationCdStrategyMapper.xml
index 3c545f3..fd9ec14 100644
--- a/cloud-manage-server/src/main/resources/mapper/BatteryStationCdStrategyMapper.xml
+++ b/cloud-manage-server/src/main/resources/mapper/BatteryStationCdStrategyMapper.xml
@@ -21,7 +21,7 @@
- pk_id, station_code, station_name, mini_limit, status, ctime, creater, uptime, updater
+ pk_id, `name`, station_code, station_name, mini_limit, status, ctime, creater, uptime, updater
+
+
+
+
diff --git a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AesDecryTest.java b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AesDecryTest.java
index df2f44d..075b59f 100644
--- a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AesDecryTest.java
+++ b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AesDecryTest.java
@@ -1,24 +1,35 @@
package com.evotech.hd.cloud;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
public class AesDecryTest {
-
- public static void main(String[] args) {
- System.out.println(new BCryptPasswordEncoder().encode("123456"));
-// String key = "94kl35k25d3t2rk2";
-// String iv = "k394kf44lf1pyq8k";
-// SymmetricCrypto aes = new AES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes());
-// // 需要加密的数据
-// String data = "2yKExCzIRWg6bLwf2zsTn83XhzTAvuQtW5svhO111zihn3oX/Jrf4UFrKCA5UbZy4SWRF5vtcyYXLr8oFof2xRDBXsvFRDFHYKmmkpN6Udk7ChB0sCNTzisaM/iqAtbybD8uC9HpHYCQsSVipUc//aUhgSNvhK7CewK1UjGKnyBvOvCUJiPGVtuKzX5Pf5KIrR1ozJ+moDq01+td8Du5lA3lXaHdLZ8WbmoqYd2T6r3PDVsh/yxC327mNsQrivK0yL3QUt4ZCuLV6G/nQTsxvNgAYprSNVejGCywDD2cWuA4f90bsxJEKFLJ+XUd9/IAJR50QGhwm0qzxWwZzszWU9+EJoDyp+gUUn9bY4u9V/I=";
-//
-// byte[] decrypt = aes.decrypt(Base64.getDecoder().decode(data));
-// System.out.println(new String(decrypt));
-//
-// SecretKey key1 = KeyUtil.generateKey(SymmetricAlgorithm.AES.getValue());
-// System.out.println(Base64.getEncoder().encodeToString(key1.getEncoded()));
-
+ public static void main(String[] args) {
+ PasswordEncoder encoder = new BCryptPasswordEncoder();
+ String rawSecret = "123456"; // 原始明文密钥
+ String encodedSecret = encoder.encode(rawSecret);
+ System.out.println("加密后的 client_secret: " + encodedSecret);
+ System.out.println(encoder.matches("YTHD123","$2a$10$yQ9xx3SSuObt5.nOYlOtZe78qQo74gZ8tY9FvF97T0OvfIm.89K6O"));
+ // 输出示例:$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW
}
+// public static void main(String[] args) {
+// System.out.println(new BCryptPasswordEncoder().encode("YTHD123"));
+//
+// System.out.println(new BCryptPasswordEncoder().encode("123456"));
+//// String key = "94kl35k25d3t2rk2";
+//// String iv = "k394kf44lf1pyq8k";
+//// SymmetricCrypto aes = new AES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes());
+//// // 需要加密的数据
+//// String data = "2yKExCzIRWg6bLwf2zsTn83XhzTAvuQtW5svhO111zihn3oX/Jrf4UFrKCA5UbZy4SWRF5vtcyYXLr8oFof2xRDBXsvFRDFHYKmmkpN6Udk7ChB0sCNTzisaM/iqAtbybD8uC9HpHYCQsSVipUc//aUhgSNvhK7CewK1UjGKnyBvOvCUJiPGVtuKzX5Pf5KIrR1ozJ+moDq01+td8Du5lA3lXaHdLZ8WbmoqYd2T6r3PDVsh/yxC327mNsQrivK0yL3QUt4ZCuLV6G/nQTsxvNgAYprSNVejGCywDD2cWuA4f90bsxJEKFLJ+XUd9/IAJR50QGhwm0qzxWwZzszWU9+EJoDyp+gUUn9bY4u9V/I=";
+////
+//// byte[] decrypt = aes.decrypt(Base64.getDecoder().decode(data));
+//// System.out.println(new String(decrypt));
+////
+//// SecretKey key1 = KeyUtil.generateKey(SymmetricAlgorithm.AES.getValue());
+//// System.out.println(Base64.getEncoder().encodeToString(key1.getEncoded()));
+//
+// }
+
}
diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/config/GZHProperties.java b/wechat-server/src/main/java/com/evotech/hd/wechat/config/GZHProperties.java
index 7198377..20b20ac 100644
--- a/wechat-server/src/main/java/com/evotech/hd/wechat/config/GZHProperties.java
+++ b/wechat-server/src/main/java/com/evotech/hd/wechat/config/GZHProperties.java
@@ -1,10 +1,9 @@
package com.evotech.hd.wechat.config;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "hbyt.gzh", ignoreUnknownFields = true)
@@ -41,4 +40,6 @@ public class GZHProperties {
private String stopServerTemplateId;
//充电结算订单
private String chargingIsCompletedTemplateId;
+ //设备异常通知
+ private String deviceAlarmTemplateId;
}
diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SendGzhController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SendGzhController.java
index 8e8fbea..a6ba6c2 100644
--- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SendGzhController.java
+++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/SendGzhController.java
@@ -1,6 +1,7 @@
package com.evotech.hd.wechat.controller;
import com.evotech.hd.common.core.Dto.Result;
+import com.evotech.hd.common.core.entity.common.AlarmTemplate;
import com.evotech.hd.common.core.entity.order.Order;
import com.evotech.hd.wechat.service.gzh.GZHMessageTemplateService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@@ -41,4 +42,11 @@ public class SendGzhController {
public Result sendOrderToBeSettled(@RequestBody Order order) {
return gzhMessageTemplateService.sendOrderToBeSettled(order);
}
+
+ @Operation(summary = "推送公众号待结算订单消息")
+ @PostMapping("/alarm/message")
+ @ApiOperationSupport(order = 2)
+ public Result sendAlarmToMessage(@RequestBody AlarmTemplate alarmTemplate) {
+ return gzhMessageTemplateService.sendAlarmToMessage(alarmTemplate);
+ }
}
diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/AlarmTemplateData.java b/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/AlarmTemplateData.java
new file mode 100644
index 0000000..ffa7d09
--- /dev/null
+++ b/wechat-server/src/main/java/com/evotech/hd/wechat/entity/gzh/templatemessage/AlarmTemplateData.java
@@ -0,0 +1,22 @@
+package com.evotech.hd.wechat.entity.gzh.templatemessage;
+
+import cn.hutool.json.JSONObject;
+import lombok.Data;
+import lombok.Getter;
+
+/**
+ * 充电完成SOC 模板消息 关键词
+ */
+@Getter
+@Data
+public class AlarmTemplateData {
+ /*
+ 所属区域
+ */
+ private JSONObject thing1;
+ /*
+ 报警原因
+ */
+ private JSONObject thing5;
+
+}
diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/gzh/GZHMessageTemplateService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/gzh/GZHMessageTemplateService.java
index 5a4f767..cacbe0b 100644
--- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/gzh/GZHMessageTemplateService.java
+++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/gzh/GZHMessageTemplateService.java
@@ -15,6 +15,7 @@ import com.evotech.hd.common.core.dao.cloud.OrderDetailDao;
import com.evotech.hd.common.core.dao.wechat.WechatUserDao;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
+import com.evotech.hd.common.core.entity.common.AlarmTemplate;
import com.evotech.hd.common.core.entity.order.Order;
import com.evotech.hd.common.core.entity.order.OrderDetail;
import com.evotech.hd.common.core.entity.wechat.WechatUser;
@@ -116,10 +117,38 @@ public class GZHMessageTemplateService {
chargeData.setAmount37(JSONUtil.parseObj(Collections.asMap("value", (orderDetail.getServiceFee() != null ? new BigDecimal(orderDetail.getServiceFee()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_DOWN).setScale(2, RoundingMode.HALF_EVEN).toString() : ""))));
chargeData.setAmount5(JSONUtil.parseObj(Collections.asMap("value", (order.getOrderAmount() != null ? new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_DOWN).setScale(2, RoundingMode.HALF_EVEN).toString(): ""))));
return sendTemplateMessage(wechatUser.getGzhOpenid(), gzhProperties.getChargingIsCompletedTemplateId(),JSONUtil.parseObj(chargeData), true);
-
}
+ /***
+ * 待结算订单推送
+ * @param order
+ * @return
+ */
+ public com.evotech.hd.common.core.Dto.Result sendAlarmToMessage(AlarmTemplate alarmTemplate){
+ if(alarmTemplate.getMessage().length() > 20){
+ alarmTemplate.setMessage(alarmTemplate.getMessage().substring(0,19));
+ }
+ //查询详情
+ AlarmTemplateData alarmData = new AlarmTemplateData();
+ alarmData.setThing1(JSONUtil.parseObj(Collections.asMap("value", alarmTemplate.getArea())));
+ alarmData.setThing5(JSONUtil.parseObj(Collections.asMap("value", alarmTemplate.getMessage())));
+ Map result = Collections.emptyMap();
+ if(org.apache.commons.lang3.StringUtils.isNotEmpty(alarmTemplate.getRecipientIds())){
+ List wechatUsers = wechatUserDao.selectList(new QueryWrapper().in("wuid", Collections.asList(alarmTemplate.getRecipientIds().split(",")))).stream().filter(d -> org.apache.commons.lang3.StringUtils.isNotEmpty(d.getGzhOpenid())).collect(Collectors.toList());
+ if(Collections.isEmpty(wechatUsers)){
+ return Result.getInstance().build(String.class).error("当前错误接口没有绑定微信通知人");
+ }
+ for (WechatUser wechatUser : wechatUsers){
+ result.put(wechatUser.getName(), sendTemplateMessage(wechatUser.getGzhOpenid(), gzhProperties.getDeviceAlarmTemplateId(),JSONUtil.parseObj(alarmData), false).getData());
+ }
+ }
+ return Result.getInstance().build(String.class).success(com.alibaba.fastjson.JSONObject.toJSONString(result));
+ }
+
+
+
+
diff --git a/wechat-server/src/main/resources/application.yml b/wechat-server/src/main/resources/application.yml
index 42d8f3a..4a2dbd0 100644
--- a/wechat-server/src/main/resources/application.yml
+++ b/wechat-server/src/main/resources/application.yml
@@ -143,3 +143,5 @@ hbyt:
stop_server_template_id: RVrVqa9Y8-AjOCHxp9LWAnYejjphZhLoHJr0pU2nReo
#充电结束待结算
charging_is_completed_template_id: K6cdaBOkxGJpah0vsz5rqxP8JQq-QyWCCTQkadL5G7g
+ #设备报警通知
+ device_alarm_template_id: tf6UdLT86ntVQaMLeJ8hLy_B7CUpWsCS-sq6ohLjdN8