@@ -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 < A irStrategy> tem = new LambdaQueryWrapper < > ( ) ;
tem . eq ( AirStrategy : : getState , DataStateEnum . ENABLE . getCode ( ) ) ;
List < AirStrategy > temList = this . list ( tem ) ;
if ( CollectionUtil . isNotEmpty ( temList ) ) {
for ( AirStrategy air Str ategy : temList ) {
LocalDateTime start = LocalDateTimeUtil . parse ( a irStrategy. 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 ( a irStrategy. 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 ( a irStrategyParam . getType ( ) = = 0 ) {
//默认策略
//校验参数
LambdaQueryWrapper < AirStrategy > tem = new LambdaQueryWrapper < > ( ) ;
tem . eq ( AirStrategy : : get State, DataStateEnum . ENABLE . getCode ( ) ) ;
tem . eq ( A irStrategy: : getType , 0 ) ;
List < AirStrategy > temList = this . list ( tem ) ;
if ( CollectionUtil . isNotEmpty ( temList ) ) {
for ( A irStrategy 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 ( In teger . parseInt ( jobIds [ 0 ] ) ) ;
xxlJobInfo . setJobGr oup ( xxlGroup ) ;
//任务描述
xxlJobInfo . setJobDesc ( " 开启空调 " ) ;
xxlJobInfo . setAuthor ( " cdf " ) ;
xxlJobInfo . setScheduleType ( " CRON " ) ;
//时间表达式需要处理成 秒 分 时 日 月 ? 年,标志指定时间执行一次
LocalDateTime startTime = LocalDateTimeUtil . parse ( airStrategy . getStartTime ( ) , DatePatte rn . 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 ( airStra tegy . getStartTime ( ) , DatePattern . NORM_DATETIME_PATTERN ) ;
String cronOn = " " + startTime . getSecond ( ) + CharUtil . SPACE + startTime . getMinute ( ) + CharUtil . SPACE + startTime . getH our ( ) + 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 ( Retu rnT . 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 ;
}
}