From 89c6a5382be60ab3b8daa7ccfff45c9846d5ea82 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 29 十二月 2023 11:52:05 +0800
Subject: [PATCH] 服务商

---
 server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java       |   42 ++++++++
 server/services/src/main/java/com/doumee/config/SpringContextUtil.java                     |   33 ++++++
 server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java           |   11 +-
 server/services/src/main/java/com/doumee/core/mqtt/service/MqttToolService.java            |    1 
 server/services/src/main/resources/application-dev.yml                                     |    7 +
 server/services/src/main/java/com/doumee/service/business/SitesService.java                |    3 
 server/services/src/main/java/com/doumee/core/dingding/DingDingNotice.java                 |   27 +++++
 server/services/src/main/java/com/doumee/dao/business/model/Sites.java                     |    3 
 server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java |    4 
 /dev/null                                                                                  |   16 ---
 server/platform/src/main/java/com/doumee/api/system/SystemUserController.java              |    2 
 server/platform/src/main/java/com/doumee/task/ScheduleTool.java                            |   16 ++
 server/services/src/main/java/com/doumee/core/constants/Constants.java                     |    1 
 server/services/src/main/java/com/doumee/core/mqtt/config/MqttClientInit.java              |   34 +++++-
 server/web/src/main/java/com/doumee/task/ScheduleTool.java                                 |   51 ++++++++++
 server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java            |   16 ++-
 server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java      |    3 
 server/web/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java                   |    7 -
 18 files changed, 228 insertions(+), 49 deletions(-)

diff --git a/server/platform/src/main/java/com/doumee/api/system/SystemUserController.java b/server/platform/src/main/java/com/doumee/api/system/SystemUserController.java
index 2bf2c72..ee9335e 100644
--- a/server/platform/src/main/java/com/doumee/api/system/SystemUserController.java
+++ b/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);
     }
diff --git a/server/platform/src/main/java/com/doumee/service/MqttSubService.java b/server/platform/src/main/java/com/doumee/service/MqttSubService.java
deleted file mode 100644
index 732b91e..0000000
--- a/server/platform/src/main/java/com/doumee/service/MqttSubService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.doumee.service;
-
-import com.doumee.dao.business.model.Locks;
-import com.doumee.dao.business.model.MqttLog;
-
-/**
- * 涓庣‖浠跺鎺ユ湇鍔�
- * @author 姹熻箘韫�
- * @date 2023/10/09 18:06
- */
-public interface MqttSubService {
-
-
-    void startSubcribe();
-
-}
diff --git a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java b/server/platform/src/main/java/com/doumee/task/ScheduleTool.java
index 625342b..bf31212 100644
--- a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java
+++ b/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;
diff --git a/server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java b/server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
index 54ba793..b191d9c 100644
--- a/server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
+++ b/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(), "鐢ㄦ埛鍚嶅凡瀛樺湪");
         }
 
         // 楠岃瘉宸ュ彿
diff --git a/server/services/src/main/java/com/doumee/config/SpringContextUtil.java b/server/services/src/main/java/com/doumee/config/SpringContextUtil.java
new file mode 100644
index 0000000..4577f53
--- /dev/null
+++ b/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);
+	}
+}
\ No newline at end of file
diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java
index d803d96..d4f5491 100644
--- a/server/services/src/main/java/com/doumee/core/constants/Constants.java
+++ b/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{
 
diff --git a/server/services/src/main/java/com/doumee/core/dingding/DingDingNotice.java b/server/services/src/main/java/com/doumee/core/dingding/DingDingNotice.java
index 2eab145..a739834 100644
--- a/server/services/src/main/java/com/doumee/core/dingding/DingDingNotice.java
+++ b/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);
+    }
 
 
     /**
diff --git a/server/services/src/main/java/com/doumee/core/mqtt/config/MqttClientInit.java b/server/services/src/main/java/com/doumee/core/mqtt/config/MqttClientInit.java
index 7028dc9..43e47d2 100644
--- a/server/services/src/main/java/com/doumee/core/mqtt/config/MqttClientInit.java
+++ b/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涓轰富鏈哄悕锛宑lientid鍗宠繛鎺QTT鐨勫鎴风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();
             }
         }
 
diff --git a/server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java b/server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java
index b050971..d8c11d4 100644
--- a/server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java
+++ b/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
diff --git a/server/services/src/main/java/com/doumee/core/mqtt/service/MqttToolService.java b/server/services/src/main/java/com/doumee/core/mqtt/service/MqttToolService.java
index f4ef56c..0ce51e3 100644
--- a/server/services/src/main/java/com/doumee/core/mqtt/service/MqttToolService.java
+++ b/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();
         }
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Sites.java b/server/services/src/main/java/com/doumee/dao/business/model/Sites.java
index 43ffeaf..62a07ca 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Sites.java
+++ b/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="閿佸ご鏁伴噺")
diff --git a/server/services/src/main/java/com/doumee/service/business/SitesService.java b/server/services/src/main/java/com/doumee/service/business/SitesService.java
index cb77062..b528b16 100644
--- a/server/services/src/main/java/com/doumee/service/business/SitesService.java
+++ b/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);
 
     /**
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
index a466654..c1ab843 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
+++ b/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();
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java
index 1bfd82a..be5d97a 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java
+++ b/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));
     }
 
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java
index 6c372d7..c0032c1 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java
+++ b/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);
             }
         }
diff --git a/server/services/src/main/resources/application-dev.yml b/server/services/src/main/resources/application-dev.yml
index 0ceac3a..292c4cc 100644
--- a/server/services/src/main/resources/application-dev.yml
+++ b/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
diff --git a/server/platform/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java b/server/web/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java
similarity index 79%
rename from server/platform/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java
rename to server/web/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java
index e56e312..daec17e 100644
--- a/server/platform/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java
+++ b/server/web/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;
 
 /**
  *  涓庣‖浠跺鎺ユ湇鍔�
diff --git a/server/web/src/main/java/com/doumee/task/ScheduleTool.java b/server/web/src/main/java/com/doumee/task/ScheduleTool.java
new file mode 100644
index 0000000..2f51645
--- /dev/null
+++ b/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============");
+    }
+
+
+
+}

--
Gitblit v1.9.3