jiangping
2023-12-29 89c6a5382be60ab3b8daa7ccfff45c9846d5ea82
服务商
已添加2个文件
已删除1个文件
已修改14个文件
已重命名1个文件
277 ■■■■ 文件已修改
server/platform/src/main/java/com/doumee/api/system/SystemUserController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/service/MqttSubService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/task/ScheduleTool.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/config/SpringContextUtil.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/core/constants/Constants.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/core/dingding/DingDingNotice.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/core/mqtt/config/MqttClientInit.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/core/mqtt/service/MqttToolService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/model/Sites.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/SitesService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/resources/application-dev.yml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/task/ScheduleTool.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/system/SystemUserController.java
@@ -102,7 +102,7 @@
    @RequiresPermissions("system:user:update")
    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody CreateSystemUserDTO systemUser) {
        systemUser.setUpdateUser(this.getLoginUser().getId());
        systemUser.setUsername(systemUser.getMobile());
//        systemUser.setUsername(systemUser.getMobile());
        systemUserBiz.updateById(systemUser);
        return ApiResponse.success(null);
    }
server/platform/src/main/java/com/doumee/service/MqttSubService.java
ÎļþÒÑɾ³ý
server/platform/src/main/java/com/doumee/task/ScheduleTool.java
@@ -5,10 +5,12 @@
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.Constants;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.mqtt.config.MqttClientInit;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.HttpsUtil;
import com.doumee.core.wx.WxPayProperties;
import com.doumee.dao.business.model.Goodsorder;
import com.doumee.dao.business.model.Sites;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.service.business.*;
import com.doumee.service.system.SystemDictDataService;
@@ -60,6 +62,7 @@
    /**
     * @throws Exception
     */
    @Scheduled(cron = "0 0 10 * * ? ")
    public void getWxBill() throws Exception {
        //前一天的數據
        Date ydate = DateUtil.addDaysToDate(new Date(), -1);
@@ -85,7 +88,7 @@
    @Scheduled(cron = "0/15 * * * * ? ")
    public void autoRefreshLockStatus() throws Exception {
        log.info("=====================开始定时刷新骑行中的数充值未开锁失败=======================");
        memberRidesService.autoRefreshLockStatus();
       //memberRidesService.autoRefreshLockStatus();
        log.info("=====================结束定时刷新骑行中的数充值未开锁失败=======================");
    }
@@ -100,7 +103,16 @@
        sitesService.siteReservesNotice();;
        log.info("=====================结束 ç«™ç‚¹è½¦è¾†æ»¡æž¶çŽ‡é¢„è­¦=======================");
    }
    /**
     * æ£€æŸ¥é€šä¿¡å¼‚常的站点发通知
     * @throws Exception
     */
    @Scheduled(fixedDelay = 1000L * 60L * 5)
    public void noticeNoLinkList() throws Exception {
        log.info("=====================开始 æ£€æŸ¥é€šä¿¡å¼‚常的站点发通知=======================");
        sitesService.noticeNoLinkList(new Sites());;
        log.info("=====================结束 æ£€æŸ¥é€šä¿¡å¼‚常的站点发通知=======================");
    }
    @Autowired
    private WxPayProperties wxPayProperties;
server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -111,17 +111,17 @@
    @Transactional
    public void create(CreateSystemUserDTO systemUser) {
        if (StringUtils.isBlank(systemUser.getMobile()) || systemUser.getMobile().length() < 6){
        if (StringUtils.isBlank(systemUser.getUsername()) ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"创建用户参数错误");
        }
        // éªŒè¯ç”¨æˆ·å
        SystemUser queryUserDto = new SystemUser();
        queryUserDto.setUsername(systemUser.getUsername());
        queryUserDto.setDeleted(Constants.ZERO);
        queryUserDto.setUsername(systemUser.getMobile());
//        queryUserDto.setUsername(systemUser.getUsername());
        SystemUser user = systemUserService.findOne(queryUserDto);
        if (user != null) {
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号码已存在");
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "用户名已存在");
        }
         // éªŒè¯å·¥å·
        if (StringUtils.isNotBlank(systemUser.getEmpNo())) {
@@ -137,10 +137,11 @@
        // ç”Ÿæˆå¯†ç ç›
        String salt = RandomStringUtils.randomAlphabetic(6);
        // ç”Ÿæˆå¯†ç 
        systemUser.setPassword(Utils.Secure.encryptPassword(systemUser.getMobile().substring(systemUser.getMobile().length() - 6), salt));
//        systemUser.setPassword(Utils.Secure.encryptPassword(systemUser.getMobile().substring(systemUser.getMobile().length() - 6), salt));
        systemUser.setPassword(Utils.Secure.encryptPassword(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.DEFAULT_PWD).getCode(), salt));
        systemUser.setSalt(salt);
        systemUser.setId(UUID.randomUUID().toString());
        systemUser.setUsername(systemUser.getMobile());
        // åˆ›å»ºç”¨æˆ·è®°å½•
        systemUserService.create(systemUser);
        // è®¾ç½®éƒ¨é—¨
@@ -168,13 +169,16 @@
    @Override
    public void updateById(CreateSystemUserDTO systemUser) {
        // éªŒè¯ç”¨æˆ·å
        if (StringUtils.isBlank(systemUser.getUsername()) ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"用户名不能为空");
        }
        SystemUser queryUserDto = new SystemUser();
//        queryUserDto.setId(systemUser.getId());
        queryUserDto.setUsername(systemUser.getUsername());
        queryUserDto.setDeleted(Constants.ZERO);
        SystemUser user = systemUserService.findOne(queryUserDto);
        if (user != null && !user.getId().equals(systemUser.getId())) {
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号已存在");
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "用户名已存在");
        }
        // éªŒè¯å·¥å·
server/services/src/main/java/com/doumee/config/SpringContextUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.doumee.config;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }
}
server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -41,6 +41,7 @@
    public static String REDIS_DEBUG_STR="test_";
    public static final String AD = "AD";
    public static String REPAIR = "REPAIR";
    public static final String NOTICE_SITE_LINK_LIMIT="NOTICE_SITE_LINK_LIMIT";
    public  interface MqttTopic{
server/services/src/main/java/com/doumee/core/dingding/DingDingNotice.java
@@ -2,8 +2,10 @@
import com.alibaba.fastjson.JSONObject;
import com.doumee.core.constants.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.HttpsUtil;
import com.doumee.dao.business.model.BikeRepair;
import com.doumee.dao.business.model.Sites;
import com.doumee.dao.business.web.request.RepairRequest;
import org.apache.commons.codec.binary.Base64;
@@ -12,6 +14,7 @@
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -55,6 +58,30 @@
        content.put("text",text);
        HttpsUtil.post(ddUrl+"&timestamp="+timestamp+"&sign="+getSign(timestamp,secret), JSONObject.toJSONString(content),"application/json",false);
    }
    /**
     * é’‰é’‰é€šçŸ¥ - ç«™ç‚¹é€šä¿¡å¼‚常上报
     * @param ddUrl
     * @throws Exception
     */
    public static void siteNoLink(List<Sites> siteList, String ddUrl , String secret)  throws Exception{
        Long timestamp = System.currentTimeMillis();
        Map<String,Object> content = new HashMap<>();
        content.put("msgtype","text");
        Map<String,String> text = new HashMap<>();
        String  desc = "";
        if(siteList.size() == 1){
            desc = "【站点异常上报】站点【"+siteList.get(0).getId()+"】,自【"+ DateUtil.getPlusTime2(siteList.get(0).getLastLinkDate())+"】后未收到通讯请求,请及时查看处理\n";
        }else{
               desc = "【站点异常上报】 ä»¥ä¸‹ç«™ç‚¹é€šè®¯å‘生异常,请及时查看处理:\n";
            for (Sites site : siteList){
                desc += "站点【"+site.getId()+"】,自【"+ DateUtil.getPlusTime2(site.getLastLinkDate())+"】后未收到通讯请求\n";
            }
        }
        text.put("content",desc);
        content.put("text",text);
        HttpsUtil.post(ddUrl+"&timestamp="+timestamp+"&sign="+getSign(timestamp,secret), JSONObject.toJSONString(content),"application/json",false);
    }
    /**
server/services/src/main/java/com/doumee/core/mqtt/config/MqttClientInit.java
@@ -1,21 +1,33 @@
package com.doumee.core.mqtt.config;
import com.doumee.config.SpringContextUtil;
import com.doumee.core.constants.Constants;
import com.doumee.core.mqtt.service.MqttPushCallback;
import com.doumee.core.mqtt.service.MqttSubService;
import com.doumee.core.mqtt.service.MqttToolService;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.springframework.beans.factory.annotation.Autowired;
public class MqttClientInit {
        static MqttClient client;
        static MqttClient subClient;
        public static boolean isNeedReSub =false ;
        public static synchronized MqttClient getInstance(MqttConfig config ){
            if(client !=null){
                if(!client.isConnected()){
                    try {
                        client.reconnect();
                    } catch (MqttException e) {
                        throw new RuntimeException(e);
                    }
                }
                return  client;
            }
            try {
                // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
                String clientId =config.getClientid() +config.getVersion();
@@ -45,6 +57,7 @@
        }
        public static synchronized MqttClient getSubInstance(MqttConfig config,MqttPushCallback callBack){
            if(subClient !=null){
                refreshClient();
                return  subClient;
            }
            try {
@@ -78,11 +91,22 @@
        }
        public static synchronized void isSubClientValid()   {
            if(isNeedReSub){
                MqttSubService service = SpringContextUtil.getBean(MqttSubService.class);
                if(service!=null){
                    service.startSubcribe();
                }
            }
        }
        public static synchronized void refreshClient() throws MqttException {
            if(client !=null){
                boolean result = client.isConnected();
                   client.reconnect();
        public static synchronized void refreshClient() {
            try {
                if(subClient !=null &&  !subClient.isConnected()){
                    subClient.reconnect();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java
@@ -1,5 +1,6 @@
package com.doumee.core.mqtt.service;
import com.doumee.config.SpringContextUtil;
import com.doumee.core.mqtt.config.MqttClientInit;
import com.doumee.core.mqtt.config.MqttConfig;
import com.doumee.service.business.DeviceService;
@@ -18,15 +19,13 @@
        @Autowired
        private MqttConfig mqttConfig;
        //接收消息回调
        @Override
    @Override
        public void connectionLost(Throwable cause) {
            // è¿žæŽ¥ä¸¢å¤±åŽï¼Œä¸€èˆ¬åœ¨è¿™é‡Œé¢è¿›è¡Œé‡è¿ž
            System.out.println("连接断开,重连中");
            try {
                MqttClientInit.refreshClient();
            } catch (MqttException e) {
                throw new RuntimeException(e);
            }
            MqttClientInit.isNeedReSub =true;
            MqttClientInit.refreshClient();
        }
        @Override
server/services/src/main/java/com/doumee/core/mqtt/service/MqttToolService.java
@@ -31,6 +31,7 @@
                }*/
            }
            MqttClientInit.getSubInstance(config,callBack).subscribe(topics, Qos);
            MqttClientInit.isNeedReSub = false;
        } catch (Exception e) {
            e.printStackTrace();
        }
server/services/src/main/java/com/doumee/dao/business/model/Sites.java
@@ -69,6 +69,9 @@
    @ApiModelProperty(value = "状态 0在线 1离线 ", example = "1")
    @ExcelColumn(name="状态 0在线 1离线")
    private Integer online;
    @ApiModelProperty(value = "是否异常上报 0是 1否 ", example = "1")
    @ExcelColumn(name="是否异常上报 0是 1否")
    private Integer needNotice;
    @ApiModelProperty(value = "锁头数量", example = "1")
    @ExcelColumn(name="锁头数量")
server/services/src/main/java/com/doumee/service/business/SitesService.java
@@ -84,13 +84,14 @@
     * @return List<Sites>
     */
    List<Sites> findList(Sites sites);
    void  noticeNoLinkList(Sites sites);
    /**
     * åˆ†é¡µæŸ¥è¯¢
     *
     * @param pageWrap åˆ†é¡µå¯¹è±¡
     * @return PageData<Sites>
     */
    PageData<Sites> findPage(PageWrap<Sites> pageWrap);
    /**
server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
@@ -604,7 +604,7 @@
        //车辆记录
        Bikes bikes = dealBikesByParam(model);
        //状态,0闭合, 1打开,2运行中, 3异常
        if(locks.getStatus() == Constants.LockStatus.open){
        if(Constants.formatIntegerNum(locks.getStatus()) == Constants.LockStatus.open){
            //如果是开锁业务,判断是否有开锁中的信息
            MemberRides memberRides = new MemberRides();
            memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.LOCKING.getKey());
@@ -621,7 +621,7 @@
            update.setId(memberRides.getId());
            //(更新请求开锁中的锁头关联的骑行记录)
            memberRidesMapper.updateById( update);
        }else   if(locks.getStatus() == Constants.LockStatus.closed ){
        }else   if(Constants.formatIntegerNum(locks.getStatus())  == Constants.LockStatus.closed ){
            //如果是关锁业务,判断触发还车
            if(StringUtils.isNotBlank(locks.getBikeCode())){
                MemberRides mbikes = new MemberRides();
server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java
@@ -119,6 +119,7 @@
        update.setName(sites.getName());
        update.setLockNum(sites.getLockNum());
        update.setIp(sites.getIp());
        update.setNeedNotice(sites.getNeedNotice());
        sitesMapper.updateById(update);
    }
@@ -147,6 +148,42 @@
    public List<Sites> findList(Sites sites) {
        QueryWrapper<Sites> wrapper = new QueryWrapper<>(sites);
        return sitesMapper.selectList(wrapper);
    }
    @Override
    public void  noticeNoLinkList(Sites sites) {
        //发送钉钉通知
        int second  =0;
        try {
            second = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.NOTICE_SITE_LINK_LIMIT).getCode());
        }catch (Exception e){
        }
        if(second <=0){
            return ;
        }
        sites.setIsdeleted(Constants.ZERO);
        sites.setStatus(Constants.ZERO);
        QueryWrapper<Sites> wrapper = new QueryWrapper<>(sites);
        wrapper.lambda().orderByDesc(Sites::getLastLinkDate);
        List<Sites> siteList =sitesMapper.selectList(wrapper);
        List<Sites> errorList = new ArrayList<>();
        for(Sites site : siteList){
            //时间查过通信异常阈值
            if(Constants.formatIntegerNum(site.getNeedNotice()) == Constants.ZERO
                    && System.currentTimeMillis()-site.getLastLinkDate().getTime() > second*1000){
                errorList.add(site);
            }
        }
        if(errorList.size()>0){
            try {
                DingDingNotice.siteNoLink(errorList,
                        systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_URL).getCode(),
                        systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    @Override
@@ -195,13 +232,14 @@
        if (pageWrap.getModel().getClientVersion() != null) {
            queryWrapper.lambda().eq(Sites::getClientVersion, pageWrap.getModel().getClientVersion());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
         /*for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        }*/
        queryWrapper.lambda().orderByAsc(Sites::getCode);
        return PageData.from(sitesMapper.selectPage(page, queryWrapper));
    }
server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java
@@ -410,7 +410,7 @@
                detail.setRefundSuccessDate(DateUtil.getDateFromString2(info.getRefundSuccessTime()));//成功退款时间
                detail.setRefundApplyDate(DateUtil.getDateFromString2(info.getRefundTime())); //申请退款时间
                //计算自行车收入,匹配来自自行车小程序的所有支付成功和退款成功的金额,作为自行车收入(累计收款金额-累计退款成功金额)
                if(StringUtils.equals(detail.getAppid(), WxMiniConfig.wxPayV2Service.getConfig().getAppId())){
                if(StringUtils.equals(detail.getAppid(), WxMiniConfig.wxPayV2Service.getConfig().getSubAppId())){
                    //自行车收入累计收款金额(支付成功总金额-退款总金额)
                    if(StringUtils.equals(info.getTradeState(),"SUCCESS")){
                        //如果是交易
@@ -422,7 +422,6 @@
                        bill.setBikeFee(bill.getBikeFee().subtract(detail.getCmmsAmt()) );
                    }
                }
                detailList.add(detail);
            }
        }
server/services/src/main/resources/application-dev.yml
@@ -73,6 +73,13 @@
  password: doumee@168
  version: 003
########################mqtt相关配置########################
#mqtt:
#  host: tcp://39.100.125.239:1883
#  username: parkbike
#  password: parkbike@168
#  version: 003
tencent:
  map:
    remoteHost: https://apis.map.qq.com
server/web/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java
ÎļþÃû´Ó server/platform/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java ÐÞ¸Ä
@@ -1,19 +1,14 @@
package com.doumee.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.core.constants.Constants;
import com.doumee.core.mqtt.config.MqttConfig;
import com.doumee.core.mqtt.service.MqttSubService;
import com.doumee.core.mqtt.service.MqttToolService;
import com.doumee.dao.business.MqttLogMapper;
import com.doumee.dao.business.model.Locks;
import com.doumee.dao.business.model.MqttLog;
import com.doumee.service.MqttSubService;
import com.doumee.service.business.DeviceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.Date;
/**
 *  ä¸Žç¡¬ä»¶å¯¹æŽ¥æœåŠ¡
server/web/src/main/java/com/doumee/task/ScheduleTool.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.doumee.task;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.Constants;
import com.doumee.core.mqtt.config.MqttClientInit;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.HttpsUtil;
import com.doumee.core.wx.WxPayProperties;
import com.doumee.dao.business.model.Sites;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.service.business.*;
import com.doumee.service.system.SystemDictDataService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.util.ThreadContext;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Objects;
/**
 * å®šæ—¶ä»»åŠ¡
 * @author jiangping
 * @date 2021-10-10 14:40:35
 * https://www.bejson.com/othertools/cron/  cron è¡¨è¾¾å¼ç”Ÿæˆåœ°å€
 */
@Component
@EnableScheduling
@Slf4j
public class ScheduleTool {
    /**
     * ç«™ç‚¹è½¦è¾†æ»¡æž¶çŽ‡é¢„è­¦
     * @throws Exception
     */
    @Scheduled(fixedDelay = 1000L *20L )
    public void reSubMqtt() throws Exception {
        log.info("=====================检查是否需要重新订阅===========start============");
        MqttClientInit.isSubClientValid();
        log.info("=====================检查是否需要重新订阅===========end============");
    }
}