【验收】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

@ -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 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 com.xzzn.ems.domain.EmsStrategyTimeConfig;
import com.xzzn.ems.domain.vo.StrategyTimeConfigVo;
import org.apache.ibatis.annotations.Param;
/**
* 时间配置Mapper接口
@ -71,4 +72,9 @@ public interface EmsStrategyTimeConfigMapper
// 设置该模版的时间配置为待下发
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 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.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.xzzn.ems.domain.EmsStrategyTemp;
import com.xzzn.ems.domain.vo.StrategyTempConfigRequest;
@ -32,4 +33,7 @@ public interface IEmsStrategyTempService
//根据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 时间配置集合
*/
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 com.alibaba.fastjson2.JSON;
import com.xzzn.common.enums.StrategyStatus;
import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.EmsStrategyRunning;
import com.xzzn.ems.domain.vo.StrategyRunningVo;
import com.xzzn.ems.mapper.EmsStrategyRunningMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xzzn.ems.mapper.EmsStrategyMapper;
@ -67,31 +69,43 @@ public class EmsStrategyServiceImpl implements IEmsStrategyService
}
@Override
public void dealStrategyData(String content, String operateType) {
public void dealStrategyRunningData(String content, String operateType) {
if (StringUtils.isEmpty(content)) {
return;
}
EmsStrategyRunning emsStrategyRunning = JSON.parseObject(content, EmsStrategyRunning.class);
String siteId = "";
EmsStrategyRunning emsStrategyRunning = new EmsStrategyRunning();
switch (operateType) {
case "INSERT":
StrategyRunningVo insertVo = JSON.parseObject(content, StrategyRunningVo.class);
BeanUtils.copyProperties(insertVo, emsStrategyRunning);
// 先校验策略是否存在,不存在则插入
dealStrategyData(emsStrategyRunning, insertVo);
// 新增策略运行数据
emsStrategyRunningMapper.insertEmsStrategyRunning(emsStrategyRunning);
break;
case "STOP":
Long id = emsStrategyRunning.getId();
emsStrategyRunningMapper.stopEmsStrategyRunning(id);
EmsStrategyRunning vo = JSON.parseObject(content, EmsStrategyRunning.class);
siteId = vo.getSiteId();
// 停止站点正在运行的策略即可
EmsStrategyRunning runningStrategy = emsStrategyRunningMapper.getRunningStrategy(siteId);
emsStrategyRunningMapper.stopEmsStrategyRunning(runningStrategy.getId());
break;
case "UPDATE":
String siteId = emsStrategyRunning.getSiteId();
Long mainId = emsStrategyRunning.getMainStrategyId();
Long auxId = emsStrategyRunning.getAuxiliaryStrategyId();
StrategyRunningVo updateVo = JSON.parseObject(content, StrategyRunningVo.class);
siteId = updateVo.getSiteId();
// 获取该站点是否有正在运行的策略,无则新增,有则更新
EmsStrategyRunning existStrategy = emsStrategyRunningMapper.getRunningStrategy(siteId);
if (existStrategy != null) { // 存在正在运行的则更新
existStrategy.setMainStrategyId(mainId);
existStrategy.setAuxiliaryStrategyId(auxId);
emsStrategyRunningMapper.updateEmsStrategyRunning(emsStrategyRunning);
} else { // 不存在着插入
emsStrategyRunning.setCreateTime(DateUtils.getNowDate());
if (existStrategy == null) {
BeanUtils.copyProperties(updateVo, emsStrategyRunning);
// 先校验策略是否存在,不存在则插入
dealStrategyData(emsStrategyRunning, updateVo);
emsStrategyRunningMapper.insertEmsStrategyRunning(emsStrategyRunning);
} else {
// 校验更新的主副策略是否存在不存在则插入存在则获取id
dealStrategyData(existStrategy, updateVo);
emsStrategyRunning.setCreateTime(DateUtils.getNowDate());
emsStrategyRunningMapper.updateEmsStrategyRunning(existStrategy);
}
break;
default:
@ -99,4 +113,36 @@ public class EmsStrategyServiceImpl implements IEmsStrategyService
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.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.StringUtils;
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.vo.StrategyRunningVo;
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.EmsStrategyMapper;
import com.xzzn.ems.mapper.EmsStrategyTimeConfigMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -33,7 +43,10 @@ public class EmsStrategyTempServiceImpl implements IEmsStrategyTempService
private EmsStrategyTimeConfigMapper emsStrategyTimeConfigMapper;
@Autowired
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);
}
@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;
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.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.SyncStrategyTimeConfigVo;
import com.xzzn.ems.mapper.EmsStrategyCurveMapper;
import com.xzzn.ems.mapper.EmsStrategyMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xzzn.ems.mapper.EmsStrategyTimeConfigMapper;
@ -24,6 +31,8 @@ public class EmsStrategyTimeConfigServiceImpl implements IEmsStrategyTimeConfigS
private EmsStrategyTimeConfigMapper emsStrategyTimeConfigMapper;
@Autowired
private EmsStrategyCurveMapper emsStrategyCurveMapper;
@Autowired
private EmsStrategyMapper emsStrategyMapper;
/**
* 查询时间配置
@ -129,4 +138,69 @@ public class EmsStrategyTimeConfigServiceImpl implements IEmsStrategyTimeConfigS
{
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}
</if>
</select>
<select id="getStrategyByName" parameterType="String" resultMap="EmsStrategyResult">
<include refid="selectEmsStrategyVo"/>
where strategy_name = #{strategyName}
</select>
</mapper>

View File

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