1.用能系统空调关机策略
2.终端模块对外接口
This commit is contained in:
@@ -45,6 +45,14 @@ public interface EleAirStrategyService extends IService<AirStrategy> {
|
||||
*/
|
||||
boolean deleteAirStrategy(String id);
|
||||
|
||||
/**
|
||||
* 停止策略
|
||||
* @param id id
|
||||
* @return 操作结果
|
||||
*/
|
||||
boolean stopAirStrategy(String id);
|
||||
|
||||
|
||||
/**
|
||||
* 获取空调策略信息
|
||||
* @param id id
|
||||
|
||||
@@ -39,6 +39,9 @@ import com.njcn.energy.pojo.vo.AirStrategyVO;
|
||||
import com.njcn.energy.pojo.vo.EnergyDeviceTreeVO;
|
||||
import com.njcn.energy.service.EleAirStrategyService;
|
||||
import com.njcn.energy.service.IEleSetService;
|
||||
import com.njcn.influxdb.param.InfluxDBPublicParam;
|
||||
import com.njcn.influxdb.utils.InfluxDBCommUtils;
|
||||
import com.njcn.influxdb.utils.InfluxDbUtils;
|
||||
import com.njcn.job.api.JobFeignClient;
|
||||
import com.njcn.job.model.XxlJobInfo;
|
||||
import com.njcn.web.factory.PageFactory;
|
||||
@@ -48,10 +51,12 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.eclipse.paho.client.mqttv3.MqttMessage;
|
||||
import org.influxdb.dto.QueryResult;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
@@ -75,17 +80,19 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
|
||||
private final LogicDeviceLineMapper logicDeviceLineMapper;
|
||||
|
||||
|
||||
private final MqttPublisher publisher;
|
||||
|
||||
private final AirStrategyMapper airStrategyMapper;
|
||||
|
||||
private final MqttMessageHandler mqttMessageHandler;
|
||||
|
||||
private final InfluxDbUtils influxDbUtils;
|
||||
|
||||
@Value("${mqtt.client-id}")
|
||||
private String clientId;
|
||||
|
||||
private Integer xxlGroup = 5;
|
||||
//徐扬执行器 5 陈道飞执行器6 3 18数据库测试执行器
|
||||
private final Integer xxlGroup = 6;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -98,6 +105,11 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
queryWrapper
|
||||
.and(param -> param.like("ele_air_strategy.name", queryParam.getSearchValue()));
|
||||
}
|
||||
if (queryParam.getType() == 0) {
|
||||
queryWrapper.eq("ele_air_strategy.type", queryParam.getType());
|
||||
} else {
|
||||
queryWrapper.ne("ele_air_strategy.type", 0);
|
||||
}
|
||||
|
||||
//排序
|
||||
if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) {
|
||||
@@ -107,6 +119,7 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
queryWrapper.orderBy(true, true, "ele_air_strategy.sort");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
queryWrapper.eq("ele_air_strategy.state", DataStateEnum.ENABLE.getCode());
|
||||
return this.baseMapper.selectPage(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper);
|
||||
@@ -115,108 +128,156 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean addAirStrategy(AirStrategyParam airStrategyParam) {
|
||||
|
||||
|
||||
checkDicTypeName(airStrategyParam, false);
|
||||
|
||||
LambdaQueryWrapper<AirStrategy> tem = new LambdaQueryWrapper<>();
|
||||
tem.eq(AirStrategy::getState, DataStateEnum.ENABLE.getCode());
|
||||
List<AirStrategy> temList = this.list(tem);
|
||||
if (CollectionUtil.isNotEmpty(temList)) {
|
||||
for (AirStrategy airStrategy : temList) {
|
||||
LocalDateTime start = LocalDateTimeUtil.parse(airStrategy.getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
LocalDateTime startParam = LocalDateTimeUtil.parse(airStrategyParam.getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
long rangeStart = LocalDateTimeUtil.between(start, startParam).toMinutes();
|
||||
LocalDateTime end = LocalDateTimeUtil.parse(airStrategy.getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
LocalDateTime endParam = LocalDateTimeUtil.parse(airStrategyParam.getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
long rangeEnd = LocalDateTimeUtil.between(end, endParam).toMinutes();
|
||||
if (airStrategyParam.getType() == 0) {
|
||||
//默认策略
|
||||
//校验参数
|
||||
LambdaQueryWrapper<AirStrategy> tem = new LambdaQueryWrapper<>();
|
||||
tem.eq(AirStrategy::getState, DataStateEnum.ENABLE.getCode());
|
||||
tem.eq(AirStrategy::getType,0);
|
||||
List<AirStrategy> temList = this.list(tem);
|
||||
if (CollectionUtil.isNotEmpty(temList)) {
|
||||
for (AirStrategy airStrategy : temList) {
|
||||
LocalDateTime start = LocalDateTimeUtil.parse(airStrategy.getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
LocalDateTime startParam = LocalDateTimeUtil.parse(airStrategyParam.getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
long rangeStart = LocalDateTimeUtil.between(start, startParam).toMinutes();
|
||||
LocalDateTime end = LocalDateTimeUtil.parse(airStrategy.getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
LocalDateTime endParam = LocalDateTimeUtil.parse(airStrategyParam.getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
long rangeEnd = LocalDateTimeUtil.between(end, endParam).toMinutes();
|
||||
|
||||
if(rangeStart<=5 ||rangeEnd<=5 ){
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_TIME_ERROR);
|
||||
if (rangeStart <= 5 || rangeEnd <= 5) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_TIME_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
AirStrategy airStrategy = assAirStrategy(airStrategyParam);
|
||||
|
||||
List<AirSet> list = new ArrayList<>();
|
||||
airStrategyParam.getLineIds().forEach((item) -> {
|
||||
AirSet airSet = new AirSet(airStrategy.getId(), item);
|
||||
list.add(airSet);
|
||||
});
|
||||
iEleSetService.saveBatch(list);
|
||||
|
||||
|
||||
//时间表达式需要处理成 秒 分 时 日 月 ? 年,标志指定时间执行一次
|
||||
LocalDateTime startTime = LocalDateTimeUtil.parse(airStrategy.getStartTime(), DatePattern.NORM_DATETIME_PATTERN);
|
||||
String cronOn = "" + startTime.getSecond() + CharUtil.SPACE + startTime.getMinute() + CharUtil.SPACE + startTime.getHour() + CharUtil.SPACE + startTime.getDayOfMonth() + CharUtil.SPACE + startTime.getMonthValue() + CharUtil.SPACE + "?" + CharUtil.SPACE + startTime.getYear();
|
||||
String paramOn = "open" + StrUtil.C_COMMA + airStrategy.getId();
|
||||
|
||||
XxlJobInfo xxlJobInfo = assScheduling("测试定时开空调",cronOn,paramOn);
|
||||
HttpResult<String> result = jobFeignClient.addJob(xxlJobInfo);
|
||||
if (result.getCode().equals(String.valueOf(ReturnT.FAIL_CODE))) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
|
||||
|
||||
//时间表达式需要处理成 秒 分 时 日 月 ? 年,标志指定时间执行一次
|
||||
LocalDateTime startTimeEnd = LocalDateTimeUtil.parse(airStrategy.getEndTime(), DatePattern.NORM_DATETIME_PATTERN);
|
||||
String cronOff = "" + startTimeEnd.getSecond() + CharUtil.SPACE + startTimeEnd.getMinute() + CharUtil.SPACE + startTimeEnd.getHour() + CharUtil.SPACE + startTimeEnd.getDayOfMonth() + CharUtil.SPACE + startTimeEnd.getMonthValue() + CharUtil.SPACE + "?" + CharUtil.SPACE + startTimeEnd.getYear();
|
||||
String paramOff = "close" + StrUtil.C_COMMA + airStrategy.getId();
|
||||
XxlJobInfo airStrategyClose = assScheduling("测试定时关空调",cronOff,paramOff);
|
||||
HttpResult<String> result2 = jobFeignClient.addJob(airStrategyClose);
|
||||
if (result2.getCode().equals(String.valueOf(ReturnT.FAIL_CODE))) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
|
||||
String ids = result.getData() + StrUtil.COMMA + result2.getData();
|
||||
airStrategy.setXxlId(ids);
|
||||
this.updateById(airStrategy);
|
||||
} else if(airStrategyParam.getType() == 1) {
|
||||
|
||||
|
||||
//开关机策略
|
||||
AirStrategy airStrategyOnOff = assAirStrategy(airStrategyParam);
|
||||
|
||||
List<AirSet> list = new ArrayList<>();
|
||||
airStrategyParam.getLineIds().forEach((item) -> {
|
||||
AirSet airSet = new AirSet(airStrategyOnOff.getId(), item);
|
||||
list.add(airSet);
|
||||
});
|
||||
iEleSetService.saveBatch(list);
|
||||
/*
|
||||
* 添加开机调度任务
|
||||
*/
|
||||
//时间表达式需要处理成 秒 分 时 日 月 ? 年,标志指定时间执行一次
|
||||
String startTime = airStrategyOnOff.getStartTime();
|
||||
String[] temTime = startTime.split(":");
|
||||
String cron = "0" + CharUtil.SPACE + temTime[1] + CharUtil.SPACE + temTime[0] + CharUtil.SPACE + "* * ?";
|
||||
String param = "close" + StrUtil.C_COMMA + airStrategyOnOff.getId();
|
||||
XxlJobInfo xOn = assScheduling("每日定时关空调",cron,param);
|
||||
HttpResult<String> result = jobFeignClient.addJob(xOn);
|
||||
if (result.getCode().equals(String.valueOf(ReturnT.FAIL_CODE))) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
airStrategyOnOff.setXxlId(result.getData());
|
||||
this.updateById(airStrategyOnOff);
|
||||
} else if(airStrategyParam.getType() == 2) {
|
||||
//开机策略
|
||||
AirStrategy airStrategyOnOff = assAirStrategy(airStrategyParam);
|
||||
List<AirSet> list = new ArrayList<>();
|
||||
airStrategyParam.getLineIds().forEach((item) -> {
|
||||
AirSet airSet = new AirSet(airStrategyOnOff.getId(), item);
|
||||
list.add(airSet);
|
||||
});
|
||||
iEleSetService.saveBatch(list);
|
||||
/*
|
||||
* 添加开机调度任务
|
||||
*/
|
||||
String startTime = airStrategyOnOff.getStartTime();
|
||||
String[] temTime = startTime.split(":");
|
||||
String cron = "0" + CharUtil.SPACE + temTime[1] + CharUtil.SPACE + temTime[0] + CharUtil.SPACE + "* * ?";
|
||||
String param = "open" + StrUtil.C_COMMA + airStrategyOnOff.getId();
|
||||
XxlJobInfo xOff = assScheduling("每日定时开空调",cron,param);
|
||||
HttpResult<String> result = jobFeignClient.addJob(xOff);
|
||||
if (result.getCode().equals(String.valueOf(ReturnT.FAIL_CODE))) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
airStrategyOnOff.setXxlId(result.getData());
|
||||
this.updateById(airStrategyOnOff);
|
||||
}
|
||||
AirStrategy airStrategy = new AirStrategy();
|
||||
BeanUtils.copyProperties(airStrategyParam, airStrategy);
|
||||
airStrategy.setState(DataStateEnum.ENABLE.getCode());
|
||||
airStrategy.setStatus(0);
|
||||
airStrategy.setCreateBy(RequestUtil.getUserIndex());
|
||||
airStrategy.setCreateTime(LocalDateTime.now());
|
||||
airStrategy.setUpdateTime(LocalDateTime.now());
|
||||
this.save(airStrategy);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*组装数据库数据*/
|
||||
private AirStrategy assAirStrategy(AirStrategyParam airStrategyParam){
|
||||
AirStrategy airStrategyOnOff = new AirStrategy();
|
||||
BeanUtils.copyProperties(airStrategyParam, airStrategyOnOff);
|
||||
airStrategyOnOff.setState(DataStateEnum.ENABLE.getCode());
|
||||
airStrategyOnOff.setStatus(0);
|
||||
airStrategyOnOff.setCreateBy(RequestUtil.getUserIndex());
|
||||
airStrategyOnOff.setCreateTime(LocalDateTime.now());
|
||||
airStrategyOnOff.setUpdateTime(LocalDateTime.now());
|
||||
this.save(airStrategyOnOff);
|
||||
return airStrategyOnOff;
|
||||
}
|
||||
|
||||
|
||||
List<AirSet> list = new ArrayList<>();
|
||||
airStrategyParam.getLineIds().forEach((item)->{
|
||||
AirSet airSet = new AirSet(airStrategy.getId(),item);
|
||||
list.add(airSet);
|
||||
});
|
||||
iEleSetService.saveBatch(list);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 此处做示例,手动指定
|
||||
*/
|
||||
/*组装调度任务*/
|
||||
private XxlJobInfo assScheduling(String desc,String confTime,String param){
|
||||
XxlJobInfo xxlJobInfo = new XxlJobInfo();
|
||||
//执行器ID,手动指定,此处设置为3,对应xxl_job_group中的executor--测试执行器
|
||||
xxlJobInfo.setJobGroup(xxlGroup);
|
||||
//任务描述
|
||||
xxlJobInfo.setJobDesc("开启空调");
|
||||
xxlJobInfo.setJobDesc(desc);
|
||||
xxlJobInfo.setAuthor("cdf");
|
||||
xxlJobInfo.setScheduleType("CRON");
|
||||
//时间表达式需要处理成 秒 分 时 日 月 ? 年,标志指定时间执行一次
|
||||
LocalDateTime startTime = LocalDateTimeUtil.parse(airStrategy.getStartTime(), DatePattern.NORM_DATETIME_PATTERN);
|
||||
xxlJobInfo.setScheduleConf("" + startTime.getSecond() + CharUtil.SPACE + startTime.getMinute() + CharUtil.SPACE + startTime.getHour() + CharUtil.SPACE + startTime.getDayOfMonth() + CharUtil.SPACE + startTime.getMonthValue() + CharUtil.SPACE + "?" + CharUtil.SPACE + startTime.getYear());
|
||||
xxlJobInfo.setScheduleConf(confTime);
|
||||
xxlJobInfo.setMisfireStrategy("DO_NOTHING");
|
||||
xxlJobInfo.setExecutorRouteStrategy("FIRST");
|
||||
xxlJobInfo.setExecutorBlockStrategy("SERIAL_EXECUTION");
|
||||
//指定处理器
|
||||
xxlJobInfo.setExecutorHandler("airStrategyJob");
|
||||
//传递的参数
|
||||
xxlJobInfo.setExecutorParam("open" + StrUtil.C_COMMA + airStrategy.getId());
|
||||
xxlJobInfo.setExecutorParam(param);
|
||||
xxlJobInfo.setGlueType("BEAN");
|
||||
xxlJobInfo.setGlueRemark("GLUE代码初始化");
|
||||
HttpResult result = jobFeignClient.addJob(xxlJobInfo);
|
||||
if (result.getCode().equals(ReturnT.FAIL_CODE)) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
* 此处做示例,手动指定
|
||||
*/
|
||||
XxlJobInfo xxlJobInfoEnd = new XxlJobInfo();
|
||||
//执行器ID,手动指定,此处设置为3,对应xxl_job_group中的executor--测试执行器
|
||||
xxlJobInfoEnd.setJobGroup(xxlGroup);
|
||||
//任务描述
|
||||
xxlJobInfoEnd.setJobDesc("关闭空调");
|
||||
xxlJobInfoEnd.setAuthor("cdf");
|
||||
xxlJobInfoEnd.setScheduleType("CRON");
|
||||
//时间表达式需要处理成 秒 分 时 日 月 ? 年,标志指定时间执行一次
|
||||
LocalDateTime startTimeEnd = LocalDateTimeUtil.parse(airStrategy.getEndTime(), DatePattern.NORM_DATETIME_PATTERN);
|
||||
xxlJobInfoEnd.setScheduleConf("" + startTimeEnd.getSecond() + CharUtil.SPACE + startTimeEnd.getMinute() + CharUtil.SPACE + startTimeEnd.getHour() + CharUtil.SPACE + startTimeEnd.getDayOfMonth() + CharUtil.SPACE + startTimeEnd.getMonthValue() + CharUtil.SPACE + "?" + CharUtil.SPACE + startTimeEnd.getYear());
|
||||
xxlJobInfoEnd.setMisfireStrategy("DO_NOTHING");
|
||||
xxlJobInfoEnd.setExecutorRouteStrategy("FIRST");
|
||||
xxlJobInfoEnd.setExecutorBlockStrategy("SERIAL_EXECUTION");
|
||||
//指定处理器
|
||||
xxlJobInfoEnd.setExecutorHandler("airStrategyJob");
|
||||
//传递的参数
|
||||
xxlJobInfoEnd.setExecutorParam("close"+StrUtil.C_COMMA+airStrategy.getId());
|
||||
xxlJobInfoEnd.setGlueType("BEAN");
|
||||
xxlJobInfoEnd.setGlueRemark("GLUE代码初始化");
|
||||
HttpResult result2 = jobFeignClient.addJob(xxlJobInfoEnd);
|
||||
|
||||
if (result2.getCode().equals(ReturnT.FAIL_CODE)) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
|
||||
|
||||
String ids = result.getData().toString() + StrUtil.COMMA + result2.getData().toString();
|
||||
airStrategy.setXxlId(ids);
|
||||
this.updateById(airStrategy);
|
||||
|
||||
return true;
|
||||
return xxlJobInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -227,6 +288,7 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
throw new BusinessException(CommonResponseEnum.FAIL);
|
||||
}
|
||||
checkDicTypeName(updateParam, true);
|
||||
|
||||
AirStrategy airStrategy = new AirStrategy();
|
||||
BeanUtils.copyProperties(updateParam, airStrategy);
|
||||
airStrategy.setUpdateBy(RequestUtil.getUserIndex());
|
||||
@@ -235,71 +297,62 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
|
||||
|
||||
iEleSetService.removeById(airStrategy.getId());
|
||||
|
||||
List<AirSet> list = new ArrayList<>();
|
||||
updateParam.getLineIds().forEach((item) -> {
|
||||
AirSet airSet = new AirSet(airStrategy.getId(), item);
|
||||
list.add(airSet);
|
||||
});
|
||||
iEleSetService.saveBatch(list);
|
||||
/*
|
||||
* 此处做示例,手动指定
|
||||
*/
|
||||
|
||||
|
||||
String[] jobIds = airStrategyRes.getXxlId().split(StrUtil.COMMA);
|
||||
XxlJobInfo xxlJobInfo = new XxlJobInfo();
|
||||
//执行器ID,手动指定,此处设置为3,对应xxl_job_group中的executor--测试执行器
|
||||
xxlJobInfo.setId(Integer.parseInt(jobIds[0]));
|
||||
xxlJobInfo.setJobGroup(xxlGroup);
|
||||
//任务描述
|
||||
xxlJobInfo.setJobDesc("开启空调");
|
||||
xxlJobInfo.setAuthor("cdf");
|
||||
xxlJobInfo.setScheduleType("CRON");
|
||||
//时间表达式需要处理成 秒 分 时 日 月 ? 年,标志指定时间执行一次
|
||||
LocalDateTime startTime = LocalDateTimeUtil.parse(airStrategy.getStartTime(), DatePattern.NORM_DATETIME_PATTERN);
|
||||
xxlJobInfo.setScheduleConf("" + startTime.getSecond() + CharUtil.SPACE + startTime.getMinute() + CharUtil.SPACE + startTime.getHour() + CharUtil.SPACE + startTime.getDayOfMonth() + CharUtil.SPACE + startTime.getMonthValue() + CharUtil.SPACE + "?" + CharUtil.SPACE + startTime.getYear());
|
||||
xxlJobInfo.setMisfireStrategy("DO_NOTHING");
|
||||
xxlJobInfo.setExecutorRouteStrategy("FIRST");
|
||||
xxlJobInfo.setExecutorBlockStrategy("SERIAL_EXECUTION");
|
||||
//指定处理器
|
||||
xxlJobInfo.setExecutorHandler("airStrategyJob");
|
||||
//传递的参数
|
||||
xxlJobInfo.setExecutorParam("open" + StrUtil.C_COMMA + airStrategy.getId());
|
||||
xxlJobInfo.setGlueType("BEAN");
|
||||
xxlJobInfo.setGlueRemark("GLUE代码初始化");
|
||||
HttpResult result = jobFeignClient.updateJob(xxlJobInfo);
|
||||
if (result.getCode().equals(ReturnT.FAIL_CODE)) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
if(updateParam.getType() == 0) {
|
||||
//时间表达式需要处理成 秒 分 时 日 月 ? 年,标志指定时间执行一次
|
||||
LocalDateTime startTime = LocalDateTimeUtil.parse(airStrategy.getStartTime(), DatePattern.NORM_DATETIME_PATTERN);
|
||||
String cronOn = "" + startTime.getSecond() + CharUtil.SPACE + startTime.getMinute() + CharUtil.SPACE + startTime.getHour() + CharUtil.SPACE + startTime.getDayOfMonth() + CharUtil.SPACE + startTime.getMonthValue() + CharUtil.SPACE + "?" + CharUtil.SPACE + startTime.getYear();
|
||||
String paramOn = "open" + StrUtil.C_COMMA + airStrategy.getId();
|
||||
|
||||
XxlJobInfo xxlJobInfo = assScheduling("测试开空调",cronOn,paramOn);
|
||||
xxlJobInfo.setId(Integer.parseInt(jobIds[0]));
|
||||
HttpResult<String> result = jobFeignClient.updateJob(xxlJobInfo);
|
||||
if (result.getCode().equals(String.valueOf(ReturnT.FAIL_CODE))) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
LocalDateTime startTimeEnd = LocalDateTimeUtil.parse(airStrategy.getEndTime(), DatePattern.NORM_DATETIME_PATTERN);
|
||||
String cronOff = "" + startTimeEnd.getSecond() + CharUtil.SPACE + startTimeEnd.getMinute() + CharUtil.SPACE + startTimeEnd.getHour() + CharUtil.SPACE + startTimeEnd.getDayOfMonth() + CharUtil.SPACE + startTimeEnd.getMonthValue() + CharUtil.SPACE + "?" + CharUtil.SPACE + startTimeEnd.getYear();
|
||||
String paramOff = "close" + StrUtil.C_COMMA + airStrategy.getId();
|
||||
|
||||
XxlJobInfo xxlJobInfoOff = assScheduling("测试关空调",cronOff,paramOff);
|
||||
xxlJobInfoOff.setId(Integer.parseInt(jobIds[1]));
|
||||
HttpResult<String> result2 = jobFeignClient.updateJob(xxlJobInfoOff);
|
||||
if (result.getCode().equals(String.valueOf(ReturnT.FAIL_CODE))) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
|
||||
if (result2.getCode().equals(String.valueOf(ReturnT.FAIL_CODE))) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
}else if(updateParam.getType() == 1){
|
||||
String[] temTime = updateParam.getStartTime().split(":");
|
||||
String cron = "0" + CharUtil.SPACE + temTime[1] + CharUtil.SPACE + temTime[0] + CharUtil.SPACE + "* * ?";
|
||||
String param = "close" + StrUtil.C_COMMA + airStrategy.getId();
|
||||
XxlJobInfo xOff = assScheduling("每日定时关空调",cron,param);
|
||||
xOff.setId(Integer.parseInt(jobIds[0]));
|
||||
HttpResult<String> result = jobFeignClient.updateJob(xOff);
|
||||
if (result.getCode().equals(String.valueOf(ReturnT.FAIL_CODE))) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
}else if(updateParam.getType() == 2){
|
||||
String[] temTime = updateParam.getStartTime().split(":");
|
||||
String cron = "0" + CharUtil.SPACE + temTime[1] + CharUtil.SPACE + temTime[0] + CharUtil.SPACE + "* * ?";
|
||||
String param = "open" + StrUtil.C_COMMA + airStrategy.getId();
|
||||
XxlJobInfo xOff = assScheduling("每日定时开空调",cron,param);
|
||||
xOff.setId(Integer.parseInt(jobIds[0]));
|
||||
HttpResult<String> result = jobFeignClient.updateJob(xOff);
|
||||
if (result.getCode().equals(String.valueOf(ReturnT.FAIL_CODE))) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 此处做示例,手动指定
|
||||
*/
|
||||
XxlJobInfo xxlJobInfoEnd = new XxlJobInfo();
|
||||
xxlJobInfoEnd.setId(Integer.parseInt(jobIds[1]));
|
||||
//执行器ID,手动指定,此处设置为3,对应xxl_job_group中的executor--测试执行器
|
||||
xxlJobInfoEnd.setJobGroup(xxlGroup);
|
||||
//任务描述
|
||||
xxlJobInfoEnd.setJobDesc("关闭空调");
|
||||
xxlJobInfoEnd.setAuthor("cdf");
|
||||
xxlJobInfoEnd.setScheduleType("CRON");
|
||||
//时间表达式需要处理成 秒 分 时 日 月 ? 年,标志指定时间执行一次
|
||||
LocalDateTime startTimeEnd = LocalDateTimeUtil.parse(airStrategy.getEndTime(), DatePattern.NORM_DATETIME_PATTERN);
|
||||
xxlJobInfoEnd.setScheduleConf("" + startTimeEnd.getSecond() + CharUtil.SPACE + startTimeEnd.getMinute() + CharUtil.SPACE + startTimeEnd.getHour() + CharUtil.SPACE + startTimeEnd.getDayOfMonth() + CharUtil.SPACE + startTimeEnd.getMonthValue() + CharUtil.SPACE + "?" + CharUtil.SPACE + startTimeEnd.getYear());
|
||||
xxlJobInfoEnd.setMisfireStrategy("DO_NOTHING");
|
||||
xxlJobInfoEnd.setExecutorRouteStrategy("FIRST");
|
||||
xxlJobInfoEnd.setExecutorBlockStrategy("SERIAL_EXECUTION");
|
||||
//指定处理器
|
||||
xxlJobInfoEnd.setExecutorHandler("airStrategyJob");
|
||||
//传递的参数
|
||||
xxlJobInfoEnd.setExecutorParam("close" + StrUtil.C_COMMA + airStrategy.getId());
|
||||
xxlJobInfoEnd.setGlueType("BEAN");
|
||||
xxlJobInfoEnd.setGlueRemark("GLUE代码初始化");
|
||||
HttpResult result2 = jobFeignClient.updateJob(xxlJobInfoEnd);
|
||||
|
||||
if (result2.getCode().equals(ReturnT.FAIL_CODE)) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_CREATE_ERROR);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -337,6 +390,33 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean stopAirStrategy(String id) {
|
||||
AirStrategy airStrategy = this.getById(id);
|
||||
if (Objects.isNull(airStrategy)) {
|
||||
throw new BusinessException(CommonResponseEnum.FAIL);
|
||||
}
|
||||
if (airStrategy.getStatus() != 1) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_NO_RUN);
|
||||
}
|
||||
String[] arr = airStrategy.getXxlId().split(StrUtil.COMMA);
|
||||
for (String xxlId : arr) {
|
||||
HttpResult<String> result = jobFeignClient.stopJob(Integer.parseInt(xxlId));
|
||||
if (result.getCode().equals(StrUtil.toString(ReturnT.FAIL_CODE))) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_STOP_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
this.lambdaUpdate()
|
||||
.set(AirStrategy::getStatus, 4)
|
||||
.eq(AirStrategy::getId, id)
|
||||
.update();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public AirStrategyVO findById(String id) {
|
||||
AirStrategy airStrategy = this.lambdaQuery().eq(AirStrategy::getId, id).one();
|
||||
@@ -361,20 +441,15 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
String[] ids = airStrategy.getXxlId().split(StrUtil.COMMA);
|
||||
if (airStrategy.getStatus() == 0) {
|
||||
//可以启动
|
||||
|
||||
for (String xxlId : ids) {
|
||||
HttpResult<String> result = jobFeignClient.startTask(Integer.parseInt(xxlId));
|
||||
if (result.getCode().equals(StrUtil.toString(ReturnT.FAIL_CODE))) {
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_RUNING);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.lambdaUpdate().set(AirStrategy::getStatus, 1).eq(AirStrategy::getId, id).update();
|
||||
|
||||
} else if (airStrategy.getStatus() == 1) {
|
||||
//已经执行中
|
||||
|
||||
for (String xxlId : ids) {
|
||||
HttpResult<String> result = jobFeignClient.stopJob(Integer.parseInt(xxlId));
|
||||
if (result.getCode().equals(StrUtil.toString(ReturnT.FAIL_CODE))) {
|
||||
@@ -386,7 +461,6 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
//已经完成
|
||||
throw new BusinessException(EnergyResponseEnum.TASK_HAS_START);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -398,14 +472,31 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
if (Objects.isNull(airStrategy)) {
|
||||
throw new BusinessException(CommonResponseEnum.FAIL);
|
||||
}
|
||||
|
||||
|
||||
LambdaQueryWrapper<AirSet> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(AirSet::getId, id);
|
||||
List<AirSet> list = iEleSetService.list(lambdaQueryWrapper);
|
||||
if (CollectionUtil.isNotEmpty(list)) {
|
||||
List<String> lineIds = list.stream().map(AirSet::getLineId).collect(Collectors.toList());
|
||||
//如果是关闭操作
|
||||
if ("close".equals(operation)) {
|
||||
StringBuilder temSql = assToInfluxParam(lineIds);
|
||||
String sql = "select LineId from air_data_Real where " + temSql + " and ACInStat = 'On'";
|
||||
QueryResult result = influxDbUtils.query(sql);
|
||||
List<QueryResult.Series> listSeries = result.getResults().get(0).getSeries();
|
||||
if (!CollectionUtils.isEmpty(listSeries)) {
|
||||
System.out.println(listSeries);
|
||||
List<String> lineIdTem = new ArrayList<>();
|
||||
listSeries.get(0).getValues().forEach(item -> {
|
||||
lineIdTem.add(item.get(1).toString());
|
||||
});
|
||||
lineIds = lineIdTem;
|
||||
}
|
||||
}
|
||||
System.out.println(lineIds);
|
||||
List<NetAndDevByLineDTO> netDevList = logicDeviceLineMapper.getNetAndDevByLineIds(lineIds);
|
||||
|
||||
|
||||
if (CollectionUtil.isNotEmpty(netDevList)) {
|
||||
for (NetAndDevByLineDTO netAndDevByLineDTO : netDevList) {
|
||||
|
||||
@@ -419,11 +510,11 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
power = "On";
|
||||
array = "ACInStat";
|
||||
} else if (i == 1) {
|
||||
power = airStrategy.getTemperature().toString();
|
||||
array = "ACInSetTmp";
|
||||
} else if (i == 2) {
|
||||
power = airStrategy.getMode();
|
||||
array = "ACInMode";
|
||||
} else if (i == 2) {
|
||||
power = airStrategy.getTemperature().toString();
|
||||
array = "ACInSetTmp";
|
||||
} else {
|
||||
power = airStrategy.getWind();
|
||||
array = "ACInSpeed";
|
||||
@@ -452,16 +543,10 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
this.mqttSendTopic = topic;
|
||||
|
||||
flag = true;
|
||||
while(flag){
|
||||
while (flag) {
|
||||
|
||||
}
|
||||
/* try {
|
||||
Thread.sleep(2000);
|
||||
System.out.println("切换命令睡了1s");
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
} else {
|
||||
//关闭空调
|
||||
@@ -486,27 +571,13 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
this.mqttJsonMsg = json;
|
||||
this.mqttSendTopic = topic;
|
||||
flag = true;
|
||||
while(flag){
|
||||
while (flag) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*try {
|
||||
Thread.sleep(2000);
|
||||
System.out.println("切换监测点睡了1s");
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}*/
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
System.out.println(operation);
|
||||
if (operation.equals("close")) {
|
||||
if ("close".equals(operation) && airStrategy.getType() == 0) {
|
||||
AirStrategy air = new AirStrategy();
|
||||
air.setId(airStrategy.getId());
|
||||
air.setStatus(2);
|
||||
@@ -514,8 +585,10 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}catch (Exception e){
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -526,24 +599,25 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
private Integer mqttSendCount = 0;
|
||||
private String mqttJsonMsg;
|
||||
private String mqttSendTopic;
|
||||
@MqttSubscribe(value = "/platform/devack/#",qos = 1)
|
||||
public void airOperation(String topic, MqttMessage message, @Payload String payload){
|
||||
|
||||
@MqttSubscribe(value = "/platform/devack/#", qos = 1)
|
||||
public void airOperation(String topic, MqttMessage message, @Payload String payload) {
|
||||
System.out.println(message.toString());
|
||||
JSONObject jsonObject = new JSONObject(message.toString());
|
||||
String str = jsonObject.getStr("userId");
|
||||
|
||||
if(str.equals(clientId)){
|
||||
if (str.equals(clientId)) {
|
||||
|
||||
if(!jsonObject.getStr("code").equals("200")){
|
||||
if (!jsonObject.getStr("code").equals("200")) {
|
||||
mqttSendCount++;
|
||||
if(mqttSendCount < 3){
|
||||
if (mqttSendCount < 3) {
|
||||
System.out.println("进入错误重发++++++");
|
||||
System.out.println("错误重发详情"+mqttJsonMsg);
|
||||
System.out.println("错误重发详情" + mqttJsonMsg);
|
||||
publisher.send(mqttSendTopic, mqttJsonMsg, 1, false);
|
||||
}else{
|
||||
} else {
|
||||
flag = false;
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
flag = false;
|
||||
}
|
||||
|
||||
@@ -552,7 +626,6 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 校验参数,检查是否存在相同名称的空调策略
|
||||
*/
|
||||
@@ -574,4 +647,16 @@ public class EleAirStrategyServiceImpl extends ServiceImpl<AirStrategyMapper, Ai
|
||||
}
|
||||
}
|
||||
|
||||
public static StringBuilder assToInfluxParam(List<String> lineIds) {
|
||||
StringBuilder lineIdsStr = new StringBuilder("(");
|
||||
for (int i = 0; i < lineIds.size(); i++) {
|
||||
if (lineIds.size() - i != 1) {
|
||||
lineIdsStr.append("LineId ='").append(lineIds.get(i)).append("' or ");
|
||||
} else {
|
||||
lineIdsStr.append("LineId ='").append(lineIds.get(i)).append("') ");
|
||||
}
|
||||
}
|
||||
return lineIdsStr;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user