【验收】2 运行策略配置同步

This commit is contained in:
2025-11-17 02:45:35 +08:00
parent 3ee99fa8d4
commit aab2b1d94e
15 changed files with 839 additions and 46 deletions

View File

@ -5,10 +5,13 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.xzzn.common.utils.StringUtils; import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.EmsStrategyRunning; import com.xzzn.ems.domain.EmsStrategyRunning;
import com.xzzn.ems.domain.MqttSyncLog; import com.xzzn.ems.domain.MqttSyncLog;
import com.xzzn.ems.domain.vo.StrategyRunningVo;
import com.xzzn.ems.mapper.EmsMqttTopicConfigMapper; import com.xzzn.ems.mapper.EmsMqttTopicConfigMapper;
import com.xzzn.ems.mapper.EmsStrategyRunningMapper; import com.xzzn.ems.mapper.EmsStrategyRunningMapper;
import com.xzzn.ems.mapper.MqttSyncLogMapper; import com.xzzn.ems.mapper.MqttSyncLogMapper;
import com.xzzn.framework.web.service.MqttPublisher; import com.xzzn.framework.web.service.MqttPublisher;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
@ -17,22 +20,22 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cglib.beans.BeanMap; import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/** /**
* 策略运行切面同步 * 策略运行切面同步
* 云端 - 本地
*/ */
@Aspect @Aspect
@Component @Component
public class StrategySyncAspect { public class StrategyRunningSyncAspect {
private static final Log logger = LogFactory.getLog(StrategyRunningSyncAspect.class);
@Autowired @Autowired
private MqttPublisher mqttPublisher; private MqttPublisher mqttPublisher;
private static final ObjectMapper objectMapper = new ObjectMapper(); private static final ObjectMapper objectMapper = new ObjectMapper();
private static final String STRATEGY_TOPIC = "EMS_STRATEGY_UP"; private static final String MQTT_TOPIC = "EMS_STRATEGY_UP";
private static final String TABLE_NAME = "ems_strategy_running"; private static final String TABLE_NAME = "ems_strategy_running";
@Autowired @Autowired
private EmsMqttTopicConfigMapper emsMqttTopicConfigMapper; private EmsMqttTopicConfigMapper emsMqttTopicConfigMapper;
@ -41,27 +44,32 @@ public class StrategySyncAspect {
@Autowired @Autowired
private EmsStrategyRunningMapper emsStrategyRunningMapper; private EmsStrategyRunningMapper emsStrategyRunningMapper;
// 定义切点拦截策略相关表的Mapper方法
@Pointcut("(execution(* com.xzzn.ems.mapper.EmsStrategyRunningMapper.stopEmsStrategyRunning(..)) && args(id)) ") @Pointcut("(execution(* com.xzzn.ems.mapper.EmsStrategyRunningMapper.stopEmsStrategyRunning(..)) && args(id)) ")
public void stopPointCut(Long id) { public void stopPointCut(Long id) {
System.out.println("【停止策略切面】StrategyAspect 被实例化"); logger.info("【停止策略切面】StrategyAspect 被实例化");
} }
@Pointcut("(execution(* com.xzzn.ems.mapper.EmsStrategyRunningMapper.insertEmsStrategyRunning(..)) && args(insertEntity)) ") @Pointcut("(execution(* com.xzzn.ems.mapper.EmsStrategyRunningMapper.insertEmsStrategyRunning(..)) && args(insertEntity)) ")
public void insertPointCut(EmsStrategyRunning insertEntity) { public void insertPointCut(EmsStrategyRunning insertEntity) {
System.out.println("【新增策略切面】StrategyAspect 被实例化"); logger.info("【新增策略切面】StrategyAspect 被实例化");
} }
@Pointcut("(execution(* com.xzzn.ems.mapper.EmsStrategyRunningMapper.updateEmsStrategyRunning(..)) && args(updateEntity)) ") @Pointcut("(execution(* com.xzzn.ems.mapper.EmsStrategyRunningMapper.updateEmsStrategyRunning(..)) && args(updateEntity)) ")
public void updatePointCut(EmsStrategyRunning updateEntity) { public void updatePointCut(EmsStrategyRunning updateEntity) {
System.out.println("【更新策略切面】StrategyAspect 被实例化"); logger.info("【更新策略切面】StrategyAspect 被实例化");
} }
// 方法执行成功后发布同步消息 // 方法执行成功后发布同步消息
@AfterReturning(pointcut = "updatePointCut(updateEntity)", returning = "result") @AfterReturning(pointcut = "updatePointCut(updateEntity)", returning = "result")
public void afterUpdate(JoinPoint joinPoint, EmsStrategyRunning updateEntity, Integer result) { public void afterUpdate(JoinPoint joinPoint, EmsStrategyRunning updateEntity, Integer result) {
System.out.println("【更新策略切面进入成功】"); logger.info("【更新策略切面进入成功】");
if (result == 0) { if (result == 0 || updateEntity == null) {
return; return;
} }
// 校验是否配置监听topic-监听则不发布
String topic = emsMqttTopicConfigMapper.checkTopicIsExist(MQTT_TOPIC);
if (!StringUtils.isEmpty(topic)) {
return;
}
// 解析方法名获取操作类型INSERT/UPDATE/DELETE和表名 // 解析方法名获取操作类型INSERT/UPDATE/DELETE和表名
String methodName = joinPoint.getSignature().getName(); String methodName = joinPoint.getSignature().getName();
String operateType = getOperateType(methodName); String operateType = getOperateType(methodName);
@ -72,14 +80,16 @@ public class StrategySyncAspect {
try { try {
// 数据转换 // 数据转换
String content = convertEntityToJson(updateEntity); List<StrategyRunningVo> runningVos = emsStrategyRunningMapper.getRunningList(siteId);
if (runningVos == null || runningVos.size() == 0) {
return;
}
StrategyRunningVo runningVo = runningVos.get(0);
String content = objectMapper.writeValueAsString(runningVo);
message.setContent(content); message.setContent(content);
// 发布到MQTT主题 - 判断区分本地还是云上 // 发布到MQTT主题
String topic = emsMqttTopicConfigMapper.checkTopicIsExist(STRATEGY_TOPIC); mqttPublisher.publish(MQTT_TOPIC, objectMapper.writeValueAsString(message), 1);
if (StringUtils.isEmpty(topic)) {
mqttPublisher.publish(STRATEGY_TOPIC, objectMapper.writeValueAsString(message), 1);
}
} catch (Exception e) { } catch (Exception e) {
message.setStatus("FAIL"); message.setStatus("FAIL");
message.setErrorMsg(e.getMessage()); message.setErrorMsg(e.getMessage());
@ -90,10 +100,16 @@ public class StrategySyncAspect {
@AfterReturning(pointcut = "insertPointCut(insertEntity)", returning = "result") @AfterReturning(pointcut = "insertPointCut(insertEntity)", returning = "result")
public void afterInsert(JoinPoint joinPoint, EmsStrategyRunning insertEntity, Integer result) { public void afterInsert(JoinPoint joinPoint, EmsStrategyRunning insertEntity, Integer result) {
System.out.println("【新增策略切面进入成功】"); logger.info("【新增策略切面进入成功】");
if (result == 0) { if (result == 0 || insertEntity == null) {
return; return;
} }
// 校验是否配置监听topic-监听则不发布
String topic = emsMqttTopicConfigMapper.checkTopicIsExist(MQTT_TOPIC);
if (!StringUtils.isEmpty(topic)) {
return;
}
// 解析方法名获取操作类型INSERT/UPDATE/DELETE和表名 // 解析方法名获取操作类型INSERT/UPDATE/DELETE和表名
String methodName = joinPoint.getSignature().getName(); String methodName = joinPoint.getSignature().getName();
String operateType = getOperateType(methodName); String operateType = getOperateType(methodName);
@ -104,14 +120,16 @@ public class StrategySyncAspect {
try { try {
// 数据转换 // 数据转换
String content = convertEntityToJson(insertEntity); List<StrategyRunningVo> runningVos = emsStrategyRunningMapper.getRunningList(siteId);
if (runningVos == null || runningVos.size() == 0) {
return;
}
StrategyRunningVo runningVo = runningVos.get(0);
String content = objectMapper.writeValueAsString(runningVo);
message.setContent(content); message.setContent(content);
// 发布到MQTT主题 // 发布到MQTT主题
String topic = emsMqttTopicConfigMapper.checkTopicIsExist(STRATEGY_TOPIC); mqttPublisher.publish(MQTT_TOPIC, objectMapper.writeValueAsString(message), 1);
if (StringUtils.isEmpty(topic)) {
mqttPublisher.publish(STRATEGY_TOPIC, objectMapper.writeValueAsString(message), 1);
}
} catch (Exception e) { } catch (Exception e) {
message.setStatus("FAIL"); message.setStatus("FAIL");
message.setErrorMsg(e.getMessage()); message.setErrorMsg(e.getMessage());
@ -122,10 +140,16 @@ public class StrategySyncAspect {
@AfterReturning(pointcut = "stopPointCut(id)", returning = "result") @AfterReturning(pointcut = "stopPointCut(id)", returning = "result")
public void afterStop(JoinPoint joinPoint, Long id, Integer result) { public void afterStop(JoinPoint joinPoint, Long id, Integer result) {
System.out.println("【停止策略切面进入成功】"); logger.info("【停止策略切面进入成功】");
if (result == 0) { if (result == 0 || id == null) {
return; return;
} }
// 校验是否配置监听topic-监听则不发布
String topic = emsMqttTopicConfigMapper.checkTopicIsExist(MQTT_TOPIC);
if (!StringUtils.isEmpty(topic)) {
return;
}
// 解析方法名获取操作类型INSERT/UPDATE/DELETE和表名 // 解析方法名获取操作类型INSERT/UPDATE/DELETE和表名
String methodName = joinPoint.getSignature().getName(); String methodName = joinPoint.getSignature().getName();
String operateType = getOperateType(methodName); String operateType = getOperateType(methodName);
@ -143,10 +167,7 @@ public class StrategySyncAspect {
message.setContent(content); message.setContent(content);
// 发布到MQTT主题 // 发布到MQTT主题
String topic = emsMqttTopicConfigMapper.checkTopicIsExist(STRATEGY_TOPIC); mqttPublisher.publish(MQTT_TOPIC, objectMapper.writeValueAsString(message), 1);
if (StringUtils.isEmpty(topic)) {
mqttPublisher.publish(STRATEGY_TOPIC, objectMapper.writeValueAsString(message), 1);
}
} catch (Exception e) { } catch (Exception e) {
message.setStatus("FAIL"); message.setStatus("FAIL");
message.setErrorMsg(e.getMessage()); message.setErrorMsg(e.getMessage());
@ -162,8 +183,9 @@ public class StrategySyncAspect {
message.setOperateType(operateType); message.setOperateType(operateType);
message.setTableName(TABLE_NAME); message.setTableName(TABLE_NAME);
message.setCreateTime(new Date()); message.setCreateTime(new Date());
message.setTopic(STRATEGY_TOPIC); message.setTopic(MQTT_TOPIC);
message.setStatus("SUCCESS"); message.setStatus("SUCCESS");
message.setSyncObject("CLOUD");
message.setTarget(siteId); message.setTarget(siteId);
return message; return message;
} }

View File

@ -0,0 +1,250 @@
package com.xzzn.framework.aspectj;
import com.alibaba.fastjson2.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.common.utils.bean.BeanUtils;
import com.xzzn.ems.domain.*;
import com.xzzn.ems.domain.vo.SyncStrategyTempVo;
import com.xzzn.ems.mapper.*;
import com.xzzn.framework.web.service.MqttPublisher;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Component;
import java.util.*;
/**
* 策略模板数据同步
* 云端 - 本地
*/
@Aspect
@Component
public class StrategyTempSyncAspect {
private static final Log logger = LogFactory.getLog(StrategyTempSyncAspect.class);
@Autowired
private MqttPublisher mqttPublisher;
private static final ObjectMapper objectMapper = new ObjectMapper();
private static final String MQTT_TOPIC = "EMS_STRATEGY_UP";
private static final String TABLE_NAME = "ems_strategy_temp";
@Autowired
private EmsMqttTopicConfigMapper emsMqttTopicConfigMapper;
@Autowired
private MqttSyncLogMapper mqttSyncLogMapper;
@Autowired
private EmsStrategyMapper emsStrategyMapper;
@Autowired
private EmsStrategyTempMapper emsStrategyTempMapper;
// 用ThreadLocal暂存删除前的对象
private ThreadLocal<EmsStrategyTemp> beforeDeleteThreadLocal = new ThreadLocal<>();
@Before("execution(* com.xzzn.ems.mapper.EmsStrategyTempMapper.deleteEmsStrategyTempById(..)) && args(templateId)")
public void beforeDelete(JoinPoint joinPoint, String templateId) {
// 查询删除前的数据-仅存一获取siteId
List<EmsStrategyTemp> tempList = emsStrategyTempMapper.selectStrategyTempByTempId(templateId);
if (tempList != null && tempList.size() > 0) {
beforeDeleteThreadLocal.set(tempList.get(0)); // 暂存
}
}
@Pointcut("(execution(* com.xzzn.ems.mapper.EmsStrategyTempMapper.deleteEmsStrategyTempById(..)) && args(templateId)) ")
public void deletePointCut(String templateId) {
logger.info("【删除策略模版切面】StrategyTempSyncAspect 被实例化");
}
@Pointcut("(execution(* com.xzzn.ems.mapper.EmsStrategyTempMapper.insertEmsStrategyTemp(..)) && args(insertEntity)) ")
public void insertPointCut(EmsStrategyTemp insertEntity) {
logger.info("【新增策略模版切面】StrategyTempSyncAspect 被实例化");
}
// 方法执行成功后发布同步消息
@AfterReturning(pointcut = "insertPointCut(insertEntity)", returning = "result")
public void afterInsert(JoinPoint joinPoint, EmsStrategyTemp insertEntity, Integer result) {
logger.info("【新增策略切面进入成功】");
if (result == 0 || insertEntity == null) {
return;
}
// 校验是否配置监听topic-监听则不发布
String topic = emsMqttTopicConfigMapper.checkTopicIsExist(MQTT_TOPIC);
if (!StringUtils.isEmpty(topic)) {
return;
}
// 解析方法名获取操作类型INSERT/UPDATE/DELETE和表名
String methodName = joinPoint.getSignature().getName();
String operateType = getOperateType(methodName);
String siteId = insertEntity.getSiteId();
// 构建日志同步消息
MqttSyncLog message = createMessageObject(operateType, siteId);
try {
// 校验策略id是否存在
Long strategyId = insertEntity.getStrategyId();
if (strategyId == null) {
return;
}
// 数据转换
SyncStrategyTempVo tempVo = convertEntity(insertEntity);
String content = objectMapper.writeValueAsString(tempVo);
message.setContent(content);
// 发布到MQTT主题
mqttPublisher.publish(MQTT_TOPIC, objectMapper.writeValueAsString(message), 1);
} catch (Exception e) {
message.setStatus("FAIL");
message.setErrorMsg(e.getMessage());
}
// 存储同步信息
mqttSyncLogMapper.insertMqttSyncLog(message);
}
private SyncStrategyTempVo convertEntity(EmsStrategyTemp insertEntity) {
SyncStrategyTempVo tempVo = new SyncStrategyTempVo();
BeanUtils.copyProperties(insertEntity, tempVo);
EmsStrategy strategy = emsStrategyMapper.selectEmsStrategyById(insertEntity.getStrategyId());
if (strategy != null) {
tempVo.setStrategyName(strategy.getStrategyName());
tempVo.setStrategyType(strategy.getStrategyType());
}
return tempVo;
}
@AfterReturning(pointcut = "deletePointCut(templateId)", returning = "result")
public void afterDelete(JoinPoint joinPoint, String templateId, Integer result) {
logger.info("【删除策略模版切面进入成功】");
if (result == 0 || StringUtils.isEmpty(templateId)) {
return;
}
// 校验是否配置监听topic-监听则不发布
String topic = emsMqttTopicConfigMapper.checkTopicIsExist(MQTT_TOPIC);
if (!StringUtils.isEmpty(topic)) {
return;
}
// 解析方法名获取操作类型INSERT/UPDATE/DELETE和表名
String methodName = joinPoint.getSignature().getName();
String operateType = getOperateType(methodName);
// 从ThreadLocal中获取删除前的对象
EmsStrategyTemp strategyTemp = beforeDeleteThreadLocal.get();
String siteId = "";
if (strategyTemp != null) {
siteId = strategyTemp.getSiteId();
}
// 构建日志同步消息
MqttSyncLog message = createMessageObject(operateType, siteId);
try {
// 数据转换
Map<String, Object> idMap = new HashMap<>();
idMap.put("templateId", templateId); // 手动将参数值映射到"id"字段
String content = JSON.toJSONString(idMap);
message.setContent(content);
// 发布到MQTT主题
mqttPublisher.publish(MQTT_TOPIC, objectMapper.writeValueAsString(message), 1);
} catch (Exception e) {
message.setStatus("FAIL");
message.setErrorMsg(e.getMessage());
}
// 存储同步信息
mqttSyncLogMapper.insertMqttSyncLog(message);
}
// 构建同步信息
private MqttSyncLog createMessageObject(String operateType, String siteId) {
MqttSyncLog message = new MqttSyncLog();
message.setSyncId(UUID.randomUUID().toString());
message.setOperateType(operateType);
message.setTableName(TABLE_NAME);
message.setCreateTime(new Date());
message.setTopic(MQTT_TOPIC);
message.setStatus("SUCCESS");
message.setSyncObject("CLOUD");
message.setTarget(siteId);
return message;
}
// 从方法名判断操作类型示例insert→INSERTupdate→UPDATEdelete→DELETE
private String getOperateType(String methodName) {
if (methodName.startsWith("insert")) return "INSERT";
if (methodName.startsWith("stop")) return "STOP";
if (methodName.startsWith("update") || methodName.startsWith("stop")) return "UPDATE";
if (methodName.startsWith("delete")) return "DELETE";
return "UNKNOWN";
}
// 从方法参数提取数据示例若参数是实体类转成Map
private Map<String, Object> extractDataFromParams(Object[] args) {
// 实际需反射获取实体类的字段和值如id、name等
Map<String, Object> data = new HashMap<>();
if (args == null || args.length == 0) {
return data;
}
for (int i = 0; i < args.length; i++) {
Object arg = args[i];
if (arg == null) {
continue; // 跳过null参数
}
// 处理基本类型/包装类/字符串直接作为值存入key为"param0"、"param1"等)
if (isBasicType(arg.getClass())) {
String key = "param" + i; // 基本类型参数用"param0"、"param1"作为key
data.put(key, arg);
} else {
Map<String, Object> beanMap = beanToMap(arg);
data.putAll(beanMap); // 合并实体类的字段到结果Map
}
}
return data;
}
/**
* 判断是否为基本类型或包装类或字符串
*/
private boolean isBasicType(Class<?> clazz) {
return clazz.isPrimitive() // 基本类型int、long、boolean等
|| clazz == String.class // 字符串
|| Number.class.isAssignableFrom(clazz) // 数字包装类Integer、Long等
|| clazz == Boolean.class; // 布尔包装类
}
/**
* 将实体类转换为Map字段名为key字段值为value
*/
private Map<String, Object> beanToMap(Object bean) {
Map<String, Object> map = new HashMap<>();
if (bean == null) {
return map;
}
// 方式1使用BeanMap简洁高效
BeanMap beanMap = BeanMap.create(bean);
for (Object key : beanMap.keySet()) {
map.put(key.toString(), beanMap.get(key));
}
return map;
}
// 在方法中转换
public String convertEntityToJson(EmsStrategyRunning insertEntity) throws Exception {
if (insertEntity == null) {
return null; // 空对象返回空JSON
}
// 将实体类转换为JSON字符串
return objectMapper.writeValueAsString(insertEntity);
}
}

View File

@ -0,0 +1,231 @@
package com.xzzn.framework.aspectj;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.common.utils.bean.BeanUtils;
import com.xzzn.ems.domain.*;
import com.xzzn.ems.domain.vo.SyncStrategyTimeConfigVo;
import com.xzzn.ems.mapper.*;
import com.xzzn.framework.web.service.MqttPublisher;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Component;
import java.util.*;
/**
* 策略时间配置同步
* 云端 - 本地
*/
@Aspect
@Component
public class StrategyTimeConfigSyncAspect {
private static final Log logger = LogFactory.getLog(StrategyTimeConfigSyncAspect.class);
@Autowired
private MqttPublisher mqttPublisher;
private static final ObjectMapper objectMapper = new ObjectMapper();
private static final String MQTT_TOPIC = "EMS_STRATEGY_UP";
private static final String TABLE_NAME = "ems_strategy_temp";
@Autowired
private EmsMqttTopicConfigMapper emsMqttTopicConfigMapper;
@Autowired
private MqttSyncLogMapper mqttSyncLogMapper;
@Autowired
private EmsStrategyMapper emsStrategyMapper;
@Autowired
private EmsStrategyTempMapper emsStrategyTempMapper;
@Pointcut("(execution(* com.xzzn.ems.mapper.EmsStrategyTimeConfigMapper.insertEmsStrategyTimeConfig(..)) && args(insertEntity)) ")
public void insertPointCut(EmsStrategyTimeConfig insertEntity) {
logger.info("【新增策略模版时间配置切面】StrategyTimeConfigSyncAspect 被实例化");
}
@Pointcut("(execution(* com.xzzn.ems.mapper.EmsStrategyTimeConfigMapper.updateEmsStrategyTimeConfig(..)) && args(updateEntity)) ")
public void updatePointCut(EmsStrategyTimeConfig updateEntity) {
logger.info("【更新策略模版时间配置切面】StrategyTimeConfigSyncAspect 被实例化");
}
// 方法执行成功后发布同步消息
@AfterReturning(pointcut = "insertPointCut(insertEntity)", returning = "result")
public void afterInsert(JoinPoint joinPoint, EmsStrategyTimeConfig insertEntity, Integer result) {
logger.info("【新增策略模版时间切面进入成功】");
if (result == 0 || insertEntity == null) {
return;
}
// 校验是否配置监听topic-监听则不发布
String topic = emsMqttTopicConfigMapper.checkTopicIsExist(MQTT_TOPIC);
if (!StringUtils.isEmpty(topic)) {
return;
}
// 解析方法名获取操作类型INSERT/UPDATE/DELETE和表名
String methodName = joinPoint.getSignature().getName();
String operateType = getOperateType(methodName);
String siteId = insertEntity.getSiteId();
// 构建日志同步消息
MqttSyncLog message = createMessageObject(operateType, siteId);
try {
// 校验策略id是否存在
Long strategyId = insertEntity.getStrategyId();
if (strategyId == null) {
return;
}
// 数据转换
SyncStrategyTimeConfigVo timeConfigVo = convertEntity(insertEntity);
String content = objectMapper.writeValueAsString(timeConfigVo);
message.setContent(content);
// 发布到MQTT主题
mqttPublisher.publish(MQTT_TOPIC, objectMapper.writeValueAsString(message), 1);
} catch (Exception e) {
message.setStatus("FAIL");
message.setErrorMsg(e.getMessage());
}
// 存储同步信息
mqttSyncLogMapper.insertMqttSyncLog(message);
}
private SyncStrategyTimeConfigVo convertEntity(EmsStrategyTimeConfig insertEntity) {
SyncStrategyTimeConfigVo timeConfigVo = new SyncStrategyTimeConfigVo();
BeanUtils.copyProperties(insertEntity, timeConfigVo);
EmsStrategy strategy = emsStrategyMapper.selectEmsStrategyById(insertEntity.getStrategyId());
if (strategy != null) {
timeConfigVo.setStrategyName(strategy.getStrategyName());
timeConfigVo.setStrategyType(strategy.getStrategyType());
}
return timeConfigVo;
}
@AfterReturning(pointcut = "updatePointCut(updateEntity)", returning = "result")
public void afterUpdate(JoinPoint joinPoint, EmsStrategyTimeConfig updateEntity, Integer result) {
logger.info("【删除策略模版切面进入成功】");
if (result == 0 || updateEntity == null) {
return;
}
// 校验是否配置监听topic-监听则不发布
String topic = emsMqttTopicConfigMapper.checkTopicIsExist(MQTT_TOPIC);
if (!StringUtils.isEmpty(topic)) {
return;
}
// 解析方法名获取操作类型INSERT/UPDATE/DELETE和表名
String methodName = joinPoint.getSignature().getName();
String operateType = getOperateType(methodName);
String siteId = updateEntity.getSiteId();
// 构建日志同步消息
MqttSyncLog message = createMessageObject(operateType, siteId);
try {
// 数据转换
SyncStrategyTimeConfigVo timeConfigVo = convertEntity(updateEntity);
String content = objectMapper.writeValueAsString(timeConfigVo);
message.setContent(content);
// 发布到MQTT主题
mqttPublisher.publish(MQTT_TOPIC, objectMapper.writeValueAsString(message), 1);
} catch (Exception e) {
message.setStatus("FAIL");
message.setErrorMsg(e.getMessage());
}
// 存储同步信息
mqttSyncLogMapper.insertMqttSyncLog(message);
}
// 构建同步信息
private MqttSyncLog createMessageObject(String operateType, String siteId) {
MqttSyncLog message = new MqttSyncLog();
message.setSyncId(UUID.randomUUID().toString());
message.setOperateType(operateType);
message.setTableName(TABLE_NAME);
message.setCreateTime(new Date());
message.setTopic(MQTT_TOPIC);
message.setStatus("SUCCESS");
message.setSyncObject("CLOUD");
message.setTarget(siteId);
return message;
}
// 从方法名判断操作类型示例insert→INSERTupdate→UPDATEdelete→DELETE
private String getOperateType(String methodName) {
if (methodName.startsWith("insert")) return "INSERT";
if (methodName.startsWith("stop")) return "STOP";
if (methodName.startsWith("update") || methodName.startsWith("stop")) return "UPDATE";
if (methodName.startsWith("delete")) return "DELETE";
return "UNKNOWN";
}
// 从方法参数提取数据示例若参数是实体类转成Map
private Map<String, Object> extractDataFromParams(Object[] args) {
// 实际需反射获取实体类的字段和值如id、name等
Map<String, Object> data = new HashMap<>();
if (args == null || args.length == 0) {
return data;
}
for (int i = 0; i < args.length; i++) {
Object arg = args[i];
if (arg == null) {
continue; // 跳过null参数
}
// 处理基本类型/包装类/字符串直接作为值存入key为"param0"、"param1"等)
if (isBasicType(arg.getClass())) {
String key = "param" + i; // 基本类型参数用"param0"、"param1"作为key
data.put(key, arg);
} else {
Map<String, Object> beanMap = beanToMap(arg);
data.putAll(beanMap); // 合并实体类的字段到结果Map
}
}
return data;
}
/**
* 判断是否为基本类型或包装类或字符串
*/
private boolean isBasicType(Class<?> clazz) {
return clazz.isPrimitive() // 基本类型int、long、boolean等
|| clazz == String.class // 字符串
|| Number.class.isAssignableFrom(clazz) // 数字包装类Integer、Long等
|| clazz == Boolean.class; // 布尔包装类
}
/**
* 将实体类转换为Map字段名为key字段值为value
*/
private Map<String, Object> beanToMap(Object bean) {
Map<String, Object> map = new HashMap<>();
if (bean == null) {
return map;
}
// 方式1使用BeanMap简洁高效
BeanMap beanMap = BeanMap.create(bean);
for (Object key : beanMap.keySet()) {
map.put(key.toString(), beanMap.get(key));
}
return map;
}
// 在方法中转换
public String convertEntityToJson(EmsStrategyRunning insertEntity) throws Exception {
if (insertEntity == null) {
return null; // 空对象返回空JSON
}
// 将实体类转换为JSON字符串
return objectMapper.writeValueAsString(insertEntity);
}
}

View File

@ -0,0 +1,39 @@
package com.xzzn.ems.domain.vo;
import com.xzzn.common.annotation.Excel;
import com.xzzn.ems.domain.EmsStrategyTemp;
/**
* 同步策略模版对象
*
* @author xzzn
* @date 2025-11-16
*/
public class SyncStrategyTempVo extends EmsStrategyTemp
{
private static final long serialVersionUID = 1L;
/** 策略名称,如“削峰填谷” */
@Excel(name = "策略名称,如“削峰填谷”")
private String strategyName;
/** 策略类型1 - 主策略2 - 辅助策略 */
@Excel(name = "策略类型1 - 主策略2 - 辅助策略")
private Long strategyType;
public String getStrategyName() {
return strategyName;
}
public void setStrategyName(String strategyName) {
this.strategyName = strategyName;
}
public Long getStrategyType() {
return strategyType;
}
public void setStrategyType(Long strategyType) {
this.strategyType = strategyType;
}
}

View File

@ -0,0 +1,40 @@
package com.xzzn.ems.domain.vo;
import com.xzzn.common.annotation.Excel;
import com.xzzn.ems.domain.EmsStrategyTemp;
import com.xzzn.ems.domain.EmsStrategyTimeConfig;
/**
* 同步策略时间配置对象
*
* @author xzzn
* @date 2025-11-16
*/
public class SyncStrategyTimeConfigVo extends EmsStrategyTimeConfig
{
private static final long serialVersionUID = 1L;
/** 策略名称,如“削峰填谷” */
@Excel(name = "策略名称,如“削峰填谷”")
private String strategyName;
/** 策略类型1 - 主策略2 - 辅助策略 */
@Excel(name = "策略类型1 - 主策略2 - 辅助策略")
private Long strategyType;
public String getStrategyName() {
return strategyName;
}
public void setStrategyName(String strategyName) {
this.strategyName = strategyName;
}
public Long getStrategyType() {
return strategyType;
}
public void setStrategyType(Long strategyType) {
this.strategyType = strategyType;
}
}

View File

@ -60,4 +60,7 @@ public interface EmsStrategyMapper
public int deleteEmsStrategyByIds(Long[] ids); public int deleteEmsStrategyByIds(Long[] ids);
public List<EmsStrategy> getStrategyListByType(Long type); public List<EmsStrategy> getStrategyListByType(Long type);
// 通过名称获取策略
public EmsStrategy getStrategyByName(String strategyName);
} }

View File

@ -3,6 +3,7 @@ package com.xzzn.ems.mapper;
import java.util.List; import java.util.List;
import com.xzzn.ems.domain.EmsStrategyTimeConfig; import com.xzzn.ems.domain.EmsStrategyTimeConfig;
import com.xzzn.ems.domain.vo.StrategyTimeConfigVo; import com.xzzn.ems.domain.vo.StrategyTimeConfigVo;
import org.apache.ibatis.annotations.Param;
/** /**
* 时间配置Mapper接口 * 时间配置Mapper接口
@ -71,4 +72,9 @@ public interface EmsStrategyTimeConfigMapper
// 设置该模版的时间配置为待下发 // 设置该模版的时间配置为待下发
public void updateTimeConfigWaitingPost(String templateId); public void updateTimeConfigWaitingPost(String templateId);
// 判断时间配置是否存在
public EmsStrategyTimeConfig getExistTimeConfig(@Param("siteId")String siteId,
@Param("strategyId")Long strategyId,
@Param("month")Long month);
} }

View File

@ -29,5 +29,5 @@ public interface IEmsStrategyService
public int configStrategy(EmsStrategyRunning emsStrategyRunning); public int configStrategy(EmsStrategyRunning emsStrategyRunning);
// 接收云上运行策略配置 // 接收云上运行策略配置
public void dealStrategyData(String content, String operateType); public void dealStrategyRunningData(String content, String operateType);
} }

View File

@ -3,6 +3,7 @@ package com.xzzn.ems.service;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.xzzn.ems.domain.EmsStrategyTemp; import com.xzzn.ems.domain.EmsStrategyTemp;
import com.xzzn.ems.domain.vo.StrategyTempConfigRequest; import com.xzzn.ems.domain.vo.StrategyTempConfigRequest;
@ -32,4 +33,7 @@ public interface IEmsStrategyTempService
//根据templateId删除模板 //根据templateId删除模板
public int deleteStrategyTempById(String templateId); public int deleteStrategyTempById(String templateId);
// 处理同步数据
public void dealStrategyTempData(String content, String operateType) throws JsonProcessingException;
} }

View File

@ -67,4 +67,7 @@ public interface IEmsStrategyTimeConfigService
* @return 时间配置集合 * @return 时间配置集合
*/ */
public List<StrategyTimeConfigVo> getStrategyTimeList(EmsStrategyTimeConfig emsStrategyTimeConfig); public List<StrategyTimeConfigVo> getStrategyTimeList(EmsStrategyTimeConfig emsStrategyTimeConfig);
// 处理同步数据
public void dealStrategyTimeData(String content, String operateType);
} }

View File

@ -3,11 +3,13 @@ package com.xzzn.ems.service.impl;
import java.util.List; import java.util.List;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.xzzn.common.enums.StrategyStatus;
import com.xzzn.common.utils.DateUtils; import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils; import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.EmsStrategyRunning; import com.xzzn.ems.domain.EmsStrategyRunning;
import com.xzzn.ems.domain.vo.StrategyRunningVo; import com.xzzn.ems.domain.vo.StrategyRunningVo;
import com.xzzn.ems.mapper.EmsStrategyRunningMapper; import com.xzzn.ems.mapper.EmsStrategyRunningMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.xzzn.ems.mapper.EmsStrategyMapper; import com.xzzn.ems.mapper.EmsStrategyMapper;
@ -67,31 +69,43 @@ public class EmsStrategyServiceImpl implements IEmsStrategyService
} }
@Override @Override
public void dealStrategyData(String content, String operateType) { public void dealStrategyRunningData(String content, String operateType) {
if (StringUtils.isEmpty(content)) { if (StringUtils.isEmpty(content)) {
return; return;
} }
EmsStrategyRunning emsStrategyRunning = JSON.parseObject(content, EmsStrategyRunning.class); String siteId = "";
EmsStrategyRunning emsStrategyRunning = new EmsStrategyRunning();
switch (operateType) { switch (operateType) {
case "INSERT": case "INSERT":
StrategyRunningVo insertVo = JSON.parseObject(content, StrategyRunningVo.class);
BeanUtils.copyProperties(insertVo, emsStrategyRunning);
// 先校验策略是否存在,不存在则插入
dealStrategyData(emsStrategyRunning, insertVo);
// 新增策略运行数据
emsStrategyRunningMapper.insertEmsStrategyRunning(emsStrategyRunning); emsStrategyRunningMapper.insertEmsStrategyRunning(emsStrategyRunning);
break; break;
case "STOP": case "STOP":
Long id = emsStrategyRunning.getId(); EmsStrategyRunning vo = JSON.parseObject(content, EmsStrategyRunning.class);
emsStrategyRunningMapper.stopEmsStrategyRunning(id); siteId = vo.getSiteId();
// 停止站点正在运行的策略即可
EmsStrategyRunning runningStrategy = emsStrategyRunningMapper.getRunningStrategy(siteId);
emsStrategyRunningMapper.stopEmsStrategyRunning(runningStrategy.getId());
break; break;
case "UPDATE": case "UPDATE":
String siteId = emsStrategyRunning.getSiteId(); StrategyRunningVo updateVo = JSON.parseObject(content, StrategyRunningVo.class);
Long mainId = emsStrategyRunning.getMainStrategyId(); siteId = updateVo.getSiteId();
Long auxId = emsStrategyRunning.getAuxiliaryStrategyId(); // 获取该站点是否有正在运行的策略,无则新增,有则更新
EmsStrategyRunning existStrategy = emsStrategyRunningMapper.getRunningStrategy(siteId); EmsStrategyRunning existStrategy = emsStrategyRunningMapper.getRunningStrategy(siteId);
if (existStrategy != null) { // 存在正在运行的则更新 if (existStrategy == null) {
existStrategy.setMainStrategyId(mainId); BeanUtils.copyProperties(updateVo, emsStrategyRunning);
existStrategy.setAuxiliaryStrategyId(auxId); // 先校验策略是否存在,不存在则插入
emsStrategyRunningMapper.updateEmsStrategyRunning(emsStrategyRunning); dealStrategyData(emsStrategyRunning, updateVo);
} else { // 不存在着插入
emsStrategyRunning.setCreateTime(DateUtils.getNowDate());
emsStrategyRunningMapper.insertEmsStrategyRunning(emsStrategyRunning); emsStrategyRunningMapper.insertEmsStrategyRunning(emsStrategyRunning);
} else {
// 校验更新的主副策略是否存在不存在则插入存在则获取id
dealStrategyData(existStrategy, updateVo);
emsStrategyRunning.setCreateTime(DateUtils.getNowDate());
emsStrategyRunningMapper.updateEmsStrategyRunning(existStrategy);
} }
break; break;
default: default:
@ -99,4 +113,36 @@ public class EmsStrategyServiceImpl implements IEmsStrategyService
break; break;
} }
} }
private void dealStrategyData(EmsStrategyRunning emsStrategyRunning, StrategyRunningVo insertVo) {
// 主策略
String mainStrategyName = insertVo.getMainStrategyName();
EmsStrategy mainStrategy = emsStrategyMapper.getStrategyByName(mainStrategyName);
if (mainStrategy != null) {
emsStrategyRunning.setMainStrategyId(mainStrategy.getId());
} else {
mainStrategy = createStrategyEntity(mainStrategyName, 1L);
emsStrategyMapper.insertEmsStrategy(mainStrategy);
emsStrategyRunning.setMainStrategyId(mainStrategy.getId());
}
// 副策略
String auxStrategyName = insertVo.getAuxStrategyName();
EmsStrategy auxStrategy = emsStrategyMapper.getStrategyByName(auxStrategyName);
if (auxStrategy != null) {
emsStrategyRunning.setAuxiliaryStrategyId(auxStrategy.getId());
} else {
auxStrategy = createStrategyEntity(mainStrategyName, 2L);
emsStrategyMapper.insertEmsStrategy(auxStrategy);
emsStrategyRunning.setAuxiliaryStrategyId(auxStrategy.getId());
}
}
private EmsStrategy createStrategyEntity(String strategyName, Long type) {
EmsStrategy strategy = new EmsStrategy();
strategy.setStrategyType(type);
strategy.setStrategyName(strategyName);
strategy.setStatus(StrategyStatus.RUNNING.getCode());
strategy.setCreateTime(DateUtils.getNowDate());
return strategy;
}
} }

View File

@ -3,12 +3,22 @@ package com.xzzn.ems.service.impl;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.alibaba.fastjson2.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xzzn.common.enums.StrategyStatus;
import com.xzzn.common.utils.DateUtils; import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils; import com.xzzn.common.utils.StringUtils;
import com.xzzn.common.utils.bean.BeanUtils; import com.xzzn.common.utils.bean.BeanUtils;
import com.xzzn.ems.domain.EmsStrategy;
import com.xzzn.ems.domain.EmsStrategyRunning;
import com.xzzn.ems.domain.EmsStrategyTempTimeConfig; import com.xzzn.ems.domain.EmsStrategyTempTimeConfig;
import com.xzzn.ems.domain.vo.StrategyRunningVo;
import com.xzzn.ems.domain.vo.StrategyTempConfigRequest; import com.xzzn.ems.domain.vo.StrategyTempConfigRequest;
import com.xzzn.ems.domain.vo.SyncStrategyTempVo;
import com.xzzn.ems.mapper.EmsStrategyCurveMapper; import com.xzzn.ems.mapper.EmsStrategyCurveMapper;
import com.xzzn.ems.mapper.EmsStrategyMapper;
import com.xzzn.ems.mapper.EmsStrategyTimeConfigMapper; import com.xzzn.ems.mapper.EmsStrategyTimeConfigMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -33,7 +43,10 @@ public class EmsStrategyTempServiceImpl implements IEmsStrategyTempService
private EmsStrategyTimeConfigMapper emsStrategyTimeConfigMapper; private EmsStrategyTimeConfigMapper emsStrategyTimeConfigMapper;
@Autowired @Autowired
private EmsStrategyCurveMapper emsStrategyCurveMapper; private EmsStrategyCurveMapper emsStrategyCurveMapper;
@Autowired
private EmsStrategyMapper emsStrategyMapper;
private static final ObjectMapper objectMapper = new ObjectMapper();
/** /**
* 查询模板列表 * 查询模板列表
* *
@ -123,4 +136,54 @@ public class EmsStrategyTempServiceImpl implements IEmsStrategyTempService
return emsStrategyTempMapper.deleteTempByTempId(templateId); return emsStrategyTempMapper.deleteTempByTempId(templateId);
} }
@Override
public void dealStrategyTempData(String content, String operateType) throws JsonProcessingException {
if (StringUtils.isEmpty(content)) {
return;
}
String siteId = "";
EmsStrategyTemp temp = new EmsStrategyTemp();
switch (operateType) {
case "INSERT":
SyncStrategyTempVo syncVo = JSON.parseObject(content, SyncStrategyTempVo.class);
BeanUtils.copyProperties(syncVo, temp);
// 先校验策略是否存在,不存在则插入
dealStrategyData(temp, syncVo);
// 新增策略运行数据
emsStrategyTempMapper.insertEmsStrategyTemp(temp);
break;
case "DELETE":
JsonNode jsonNode = objectMapper.readTree(content);
String tempId = jsonNode.get("templateId").asText();
// 删除模版
deleteStrategyTempById(tempId);
break;
default:
// 未知操作类型-不同步
break;
}
}
private void dealStrategyData(EmsStrategyTemp temp, SyncStrategyTempVo syncVo) {
// 主策略
String mainStrategyName = syncVo.getStrategyName();
EmsStrategy strategy = emsStrategyMapper.getStrategyByName(mainStrategyName);
if (strategy != null) {
temp.setStrategyId(strategy.getId());
} else {
strategy = createStrategyEntity(mainStrategyName, syncVo.getStrategyType());
emsStrategyMapper.insertEmsStrategy(strategy);
temp.setStrategyId(strategy.getId());
}
}
private EmsStrategy createStrategyEntity(String strategyName, Long type) {
EmsStrategy strategy = new EmsStrategy();
strategy.setStrategyType(type);
strategy.setStrategyName(strategyName);
strategy.setStatus(StrategyStatus.RUNNING.getCode());
strategy.setCreateTime(DateUtils.getNowDate());
return strategy;
}
} }

View File

@ -1,10 +1,17 @@
package com.xzzn.ems.service.impl; package com.xzzn.ems.service.impl;
import java.util.List; import java.util.List;
import com.alibaba.fastjson2.JSON;
import com.xzzn.common.enums.StrategyStatus;
import com.xzzn.common.utils.DateUtils; import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils; import com.xzzn.common.utils.StringUtils;
import com.xzzn.common.utils.bean.BeanUtils;
import com.xzzn.ems.domain.EmsStrategy;
import com.xzzn.ems.domain.vo.StrategyTimeConfigVo; import com.xzzn.ems.domain.vo.StrategyTimeConfigVo;
import com.xzzn.ems.domain.vo.SyncStrategyTimeConfigVo;
import com.xzzn.ems.mapper.EmsStrategyCurveMapper; import com.xzzn.ems.mapper.EmsStrategyCurveMapper;
import com.xzzn.ems.mapper.EmsStrategyMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.xzzn.ems.mapper.EmsStrategyTimeConfigMapper; import com.xzzn.ems.mapper.EmsStrategyTimeConfigMapper;
@ -24,6 +31,8 @@ public class EmsStrategyTimeConfigServiceImpl implements IEmsStrategyTimeConfigS
private EmsStrategyTimeConfigMapper emsStrategyTimeConfigMapper; private EmsStrategyTimeConfigMapper emsStrategyTimeConfigMapper;
@Autowired @Autowired
private EmsStrategyCurveMapper emsStrategyCurveMapper; private EmsStrategyCurveMapper emsStrategyCurveMapper;
@Autowired
private EmsStrategyMapper emsStrategyMapper;
/** /**
* 查询时间配置 * 查询时间配置
@ -129,4 +138,69 @@ public class EmsStrategyTimeConfigServiceImpl implements IEmsStrategyTimeConfigS
{ {
return emsStrategyTimeConfigMapper.getStrategyTimeList(emsStrategyTimeConfig); return emsStrategyTimeConfigMapper.getStrategyTimeList(emsStrategyTimeConfig);
} }
@Override
public void dealStrategyTimeData(String content, String operateType) {
if (StringUtils.isEmpty(content)) {
return;
}
String siteId = "";
EmsStrategyTimeConfig timeConfig = new EmsStrategyTimeConfig();
SyncStrategyTimeConfigVo syncVo = JSON.parseObject(content, SyncStrategyTimeConfigVo.class);
BeanUtils.copyProperties(syncVo, timeConfig);
// 先校验策略是否存在,不存在则插入
dealStrategyData(timeConfig, syncVo);
switch (operateType) {
case "INSERT":
// 新增策略运行数据
emsStrategyTimeConfigMapper.insertEmsStrategyTimeConfig(timeConfig);
break;
case "UPDATE":
// 根据站点 + strategyId + 月份判断是否存在数据存在则更新否则插入
if (checkExistConfig(timeConfig)) {
emsStrategyTimeConfigMapper.updateEmsStrategyTimeConfig(timeConfig);
} else {
timeConfig.setCreateTime(DateUtils.getNowDate());
emsStrategyTimeConfigMapper.insertEmsStrategyTimeConfig(timeConfig);
}
break;
default:
// 未知操作类型-不同步
break;
}
}
private boolean checkExistConfig(EmsStrategyTimeConfig timeConfig) {
boolean result = true;
String siteId = timeConfig.getSiteId();
Long strategyId = timeConfig.getStrategyId();
Long month = timeConfig.getMonth();
EmsStrategyTimeConfig emsStrategyTimeConfig = emsStrategyTimeConfigMapper.getExistTimeConfig(siteId,strategyId,month);
if (emsStrategyTimeConfig == null) {
result = false;
}
return result;
}
private void dealStrategyData(EmsStrategyTimeConfig temp, SyncStrategyTimeConfigVo syncVo) {
// 主策略
String mainStrategyName = syncVo.getStrategyName();
EmsStrategy strategy = emsStrategyMapper.getStrategyByName(mainStrategyName);
if (strategy != null) {
temp.setStrategyId(strategy.getId());
} else {
strategy = createStrategyEntity(mainStrategyName, syncVo.getStrategyType());
emsStrategyMapper.insertEmsStrategy(strategy);
temp.setStrategyId(strategy.getId());
}
}
private EmsStrategy createStrategyEntity(String strategyName, Long type) {
EmsStrategy strategy = new EmsStrategy();
strategy.setStrategyType(type);
strategy.setStrategyName(strategyName);
strategy.setStatus(StrategyStatus.RUNNING.getCode());
strategy.setCreateTime(DateUtils.getNowDate());
return strategy;
}
} }

View File

@ -89,4 +89,9 @@
and strategy_type = #{type} and strategy_type = #{type}
</if> </if>
</select> </select>
<select id="getStrategyByName" parameterType="String" resultMap="EmsStrategyResult">
<include refid="selectEmsStrategyVo"/>
where strategy_name = #{strategyName}
</select>
</mapper> </mapper>

View File

@ -127,4 +127,11 @@
<update id="updateTimeConfigWaitingPost" parameterType="String"> <update id="updateTimeConfigWaitingPost" parameterType="String">
update ems_strategy_time_config set isPost = 1 where template_id = #{templateId} update ems_strategy_time_config set isPost = 1 where template_id = #{templateId}
</update> </update>
<select id="getExistTimeConfig" resultMap="EmsStrategyTimeConfigResult">
<include refid="selectEmsStrategyTimeConfigVo"/>
where site_id = #{siteId}
and strategy_id = #{strategyId}
and month = #{month}
</select>
</mapper> </mapper>