Sfoglia il codice sorgente

解决缓存问题

wukai 1 anno fa
parent
commit
e49d3c5bc4

+ 6 - 3
ruoyi-admin/src/main/java/com/ruoyi/biz/controller/ApiController.java

@@ -3,7 +3,6 @@ package com.ruoyi.biz.controller;
 import com.ruoyi.biz.domain.*;
 import com.ruoyi.biz.service.*;
 import com.ruoyi.biz.service.impl.AsyncServiceImpl;
-import com.ruoyi.biz.service.impl.IotTokenServiceImpl;
 import com.ruoyi.biz.tools.Tools;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.R;
@@ -58,7 +57,7 @@ public class ApiController extends BaseController {
     @Resource
     private ITwinDeviceService deviceService;
     @Resource
-    private IotTokenServiceImpl iotTokenService;
+    private IIotService iotService;
     @Resource
     private AsyncServiceImpl asyncService;
     @Resource
@@ -114,7 +113,7 @@ public class ApiController extends BaseController {
         List<IndexAlarm> alarmList = new ArrayList<>();
         List<IndexPan> panList = new ArrayList<>();
         int stop1 = 0, stop2 = 0, stop6 = 0, stop8 = 0;
-        iotTokenService.getToken();
+        iotService.getToken();
         List<TwinDevice> list = deviceService.selectTwinDeviceList(new TwinDevice());
         Map<String, Long> panMap = new HashMap<>(16);
         panHeadInfoService.selectTwinPanHeadInfoList(new TwinPanHeadInfo()).forEach(pan -> {
@@ -191,6 +190,9 @@ public class ApiController extends BaseController {
                     if (panPercent[i] < 20) {
                         stop8++;
                     }
+                    if (panPercent[i] > 100) {
+                        panPercent[i] = 100;
+                    }
                 }
 
                 IndexPan pan = new IndexPan();
@@ -226,6 +228,7 @@ public class ApiController extends BaseController {
         if (info == null) {
             return R.fail("该设备未接入");
         }
+        iotService.getToken();
         Future<Map<String, Object>> future = asyncService.currData(info);
         Map<String, Object> result = new HashMap<>(16);
         try {

+ 10 - 1
ruoyi-admin/src/main/java/com/ruoyi/biz/controller/DemoController.java

@@ -2,6 +2,7 @@ package com.ruoyi.biz.controller;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.ruoyi.biz.domain.*;
+import com.ruoyi.biz.service.IIotService;
 import com.ruoyi.biz.service.ITwinCalcDayService;
 import com.ruoyi.biz.service.ITwinDataService;
 import com.ruoyi.common.core.controller.BaseController;
@@ -28,6 +29,8 @@ public class DemoController extends BaseController {
     private ITwinCalcDayService twinCalcDayService;
     @Resource
     private ITwinDataService twinDataService;
+    @Resource
+    private IIotService iotService;
 
     @ApiOperation("首页数据")
     @GetMapping("/index")
@@ -169,5 +172,11 @@ public class DemoController extends BaseController {
 
         return R.ok(result);
     }
+
+    @ApiOperation("设备具体数据")
+    @GetMapping("/test")
+    @CrossOrigin(origins = "*")
+    public R<String> test() {
+        return R.ok(iotService.getToken());
+    }
 }
-;

+ 0 - 1
ruoyi-admin/src/main/java/com/ruoyi/biz/domain/TwinCalcDay.java

@@ -235,7 +235,6 @@ public class TwinCalcDay extends BaseEntity {
     public void convert(TwinCalc2hr calc2hr) {
         BeanUtils.copyProperties(calc2hr, this);
         this.time = calc2hr.getDataDate();
-//        this.kwh = this.kwhA.add(this.kwhB);
         this.weight = this.weightA.add(this.weightB);
         this.length = this.lengthA.add(this.lengthB);
         this.efficiencyA = Tools.calcPercent(this.openTimeA, this.closeTimeA);

+ 7 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/service/IIotService.java

@@ -13,4 +13,11 @@ public interface IIotService {
      * @return JSON数据
      */
     JSONObject query(String sql);
+
+    /**
+     * 获取token
+     *
+     * @return token
+     */
+    String getToken();
 }

+ 62 - 5
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/IotServiceImpl.java

@@ -1,17 +1,23 @@
 package com.ruoyi.biz.service.impl;
 
+import cn.hutool.crypto.digest.MD5;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpUtil;
 import cn.hutool.http.Method;
 import cn.hutool.json.JSONObject;
 import com.ruoyi.biz.service.IIotService;
 import com.ruoyi.biz.tools.IotTools;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.utils.CacheUtils;
+import com.ruoyi.common.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
-import java.util.Date;
+import javax.annotation.PostConstruct;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * IotServiceImpl$
@@ -24,8 +30,21 @@ import java.util.Date;
 public class IotServiceImpl implements IIotService {
     @Value("${iot.uri}")
     private String uri;
-    @Resource
-    private IotTokenServiceImpl tokenService;
+    @Value("${iot.tenantId}")
+    private String tenantId;
+    @Value("${iot.username}")
+    private String username;
+    @Value("${iot.password}")
+    private String password;
+    @Value("${iot.authorization}")
+    private String authorization;
+
+    private String TOKEN = "token";
+
+    @PostConstruct
+    public void init() {
+        CacheUtils.put(Constants.IOT_TOKEN, TOKEN, queryToken());
+    }
 
     /**
      * 查询数据
@@ -40,11 +59,49 @@ public class IotServiceImpl implements IIotService {
         object.set("sql", sql);
         HttpRequest request = HttpUtil.createPost(uri);
         request.setMethod(Method.POST);
-        request.header("Blade-Auth", "bearer " + tokenService.getToken());
+        request.header("Blade-Auth", "bearer " + getToken());
         request.body(object.toString());
         JSONObject result = IotTools.getData(request);
         return result;
     }
 
+    /**
+     * 获取token
+     *
+     * @return token
+     */
+    @Override
+    public String getToken() {
+        String token = Convert.toStr(CacheUtils.get(Constants.IOT_TOKEN, "token"));
+        if (StringUtils.isNotEmpty(token)) {
+            return token;
+        }
+        token = queryToken();
+        CacheUtils.put(Constants.IOT_TOKEN, TOKEN, token);
+        return token;
+    }
+
+    private String queryToken() {
+        System.err.println("========================");
+        System.err.println("========================");
+        System.err.println("========================");
+        System.err.println("========================");
+        System.err.println("==========切克闹?========");
+        System.err.println("========================");
+        System.err.println("========================");
+        System.err.println("========================");
+        String uri = this.uri + "/api/blade-auth/oauth/token";
+        Map<String, Object> map = new HashMap<>(16);
+        map.put("tenantId", tenantId);
+        map.put("username", username);
+        map.put("password", MD5.create().digestHex(password));
+        HttpRequest request = HttpUtil.createPost(uri);
+        request.setMethod(Method.POST);
+        request.header("Authorization", authorization);
+        request.form(map);
+        JSONObject jsonObject = IotTools.getData(request);
+        return jsonObject.getStr("access_token");
+    }
+
 
 }

+ 0 - 56
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/IotTokenServiceImpl.java

@@ -1,56 +0,0 @@
-package com.ruoyi.biz.service.impl;
-
-import cn.hutool.crypto.digest.MD5;
-import cn.hutool.http.HttpRequest;
-import cn.hutool.http.HttpUtil;
-import cn.hutool.http.Method;
-import cn.hutool.json.JSONObject;
-import com.ruoyi.biz.tools.IotTools;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.stereotype.Service;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * IotServiceImpl$
- *
- * @author wukai
- * @date 2024/5/4 20:35
- */
-@Service
-@Slf4j
-public class IotTokenServiceImpl {
-    @Value("${iot.uri}")
-    private String uri;
-    @Value("${iot.tenantId}")
-    private String tenantId;
-    @Value("${iot.username}")
-    private String username;
-    @Value("${iot.password}")
-    private String password;
-    @Value("${iot.authorization}")
-    private String authorization;
-
-    /**
-     * 获取token,项目启动时执行一次
-     *
-     * @return token
-     */
-    @Cacheable(value = "iotCache")
-    public String getToken() {
-        String uri = this.uri + "/api/blade-auth/oauth/token";
-        Map<String, Object> map = new HashMap<>(16);
-        map.put("tenantId", tenantId);
-        map.put("username", username);
-        map.put("password", MD5.create().digestHex(password));
-        HttpRequest request = HttpUtil.createPost(uri);
-        request.setMethod(Method.POST);
-        request.header("Authorization", authorization);
-        request.form(map);
-        JSONObject jsonObject = IotTools.getData(request);
-        return jsonObject.getStr("access_token");
-    }
-}

+ 3 - 2
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/TaskServiceImpl.java

@@ -4,6 +4,7 @@ import com.ruoyi.biz.domain.TwinCalc2hr;
 import com.ruoyi.biz.domain.TwinDevice;
 import com.ruoyi.biz.domain.TwinPanHeadInfo;
 import com.ruoyi.biz.domain.TwinRecordAlarms;
+import com.ruoyi.biz.service.IIotService;
 import com.ruoyi.biz.service.ITaskService;
 import com.ruoyi.biz.service.ITwinCalc2hrService;
 import com.ruoyi.biz.service.ITwinDeviceService;
@@ -40,7 +41,7 @@ public class TaskServiceImpl implements ITaskService {
     @Resource
     private ITwinCalc2hrService calc2hrService;
     @Resource
-    private IotTokenServiceImpl iotTokenService;
+    private IIotService iotService;
     @Resource
     private JdbcTemplate jdbcTemplate;
     @Resource
@@ -143,7 +144,7 @@ public class TaskServiceImpl implements ITaskService {
         List<Object[]> panList = new ArrayList<>();
         Date s = new Date();
         //为了避免多线程同时获取token导致重复执行,先执行一次获取token
-        iotTokenService.getToken();
+        iotService.getToken();
         List<TwinDevice> list = deviceService.selectTwinDeviceList(new TwinDevice());
         List<TwinDevice> errList = exec(list, date, startTime, endTime, period, calc2hrList, recordAlarmsList, panList);
         //重试2次

+ 3 - 2
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/TwinCalc2hrServiceImpl.java

@@ -3,6 +3,7 @@ package com.ruoyi.biz.service.impl;
 import com.ruoyi.biz.domain.TwinCalc2hr;
 import com.ruoyi.biz.domain.TwinDevice;
 import com.ruoyi.biz.mapper.TwinCalc2hrMapper;
+import com.ruoyi.biz.service.IIotService;
 import com.ruoyi.biz.service.ITwinCalc2hrService;
 import com.ruoyi.biz.service.ITwinDeviceService;
 import com.ruoyi.common.core.text.Convert;
@@ -33,7 +34,7 @@ public class TwinCalc2hrServiceImpl implements ITwinCalc2hrService {
     @Resource
     private ITwinDeviceService deviceService;
     @Resource
-    private IotTokenServiceImpl iotTokenService;
+    private IIotService iotService;
     @Resource
     private AsyncServiceImpl asyncService;
 
@@ -227,7 +228,7 @@ public class TwinCalc2hrServiceImpl implements ITwinCalc2hrService {
         Long endTime = end.toInstant(ZoneOffset.of("+8")).toEpochMilli();
 
         //为了避免多线程同时获取token导致重复执行,先执行一次获取token
-        iotTokenService.getToken();
+        iotService.getToken();
         List<TwinDevice> list = deviceService.selectTwinDeviceList(new TwinDevice());
         List<Future<Map<String, List<?>>>> futureList = new ArrayList<>();
         for (int i = 0; i < list.size(); i++) {

+ 1 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/tools/IotTools.java

@@ -35,6 +35,7 @@ public class IotTools {
                 // 如果操作成功,则不会执行以下代码
                 break; // 退出循环
             } catch (Exception e) {
+                e.printStackTrace();
                 log.error("接口返回数据失败,正在第{}次重新请求!!!", times++);
                 if (times > 5) {
                     log.error("重新5次未获取到数据!!!");

+ 3 - 3
ruoyi-admin/src/main/resources/mapper/biz/TwinCalc2hrMapper.xml

@@ -18,9 +18,9 @@
         <result property="weight" column="WEIGHT"/>
         <result property="weightA" column="WEIGHT_A"/>
         <result property="weightB" column="WEIGHT_B"/>
-        <result property="kwh" column="kwh"/>
-        <result property="kwhA" column="kwhA"/>
-        <result property="kwhB" column="kwhB"/>
+        <result property="kwh" column="KWH"/>
+        <result property="kwhA" column="KWH_A"/>
+        <result property="kwhB" column="KWH_B"/>
         <result property="alarm" column="ALARM"/>
         <result property="stop1A" column="STOP1_A"/>
         <result property="stop2A" column="STOP2_A"/>

+ 3 - 3
ruoyi-admin/src/test/java/com/jjt/DataPF.java

@@ -102,9 +102,9 @@ public class DataPF {
     @Test
     void data() {
 //        taskService.calc("2024-05-15");
-//        taskService.calc("2024-05-21",12);
-        for (int i = 1; i <= 11; i++) {
-            taskService.calc("2024-05-29", i);
+//        taskService.calc("2024-05-29");
+        for (int i = 6; i <= 7; i++) {
+            taskService.calc("2024-05-30", i);
         }
 //        for (int i = 23; i <= 27; i++) {
 //            taskService.calc("2024-05-" + i);

+ 1 - 1
ruoyi-admin/src/test/java/com/jjt/TwinCalc2hrTest.java

@@ -69,7 +69,7 @@ public class TwinCalc2hrTest {
 
     @Test
     void calcDay() {
-        for (int i = 6; i >= 1; i--) {
+        for (int i = 8; i >= 1; i--) {
             LocalDate localDate = LocalDate.now().minusDays(i);
             dayService.calc4date(localDate);
         }

+ 4 - 1
ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java

@@ -72,7 +72,10 @@ public class Constants {
      * 参数管理 cache name
      */
     public static final String SYS_CONFIG_CACHE = "sys-config";
-
+    /**
+     * iotToken缓存
+     */
+    public static final String IOT_TOKEN = "iotCache";
     /**
      * 参数管理 cache key
      */

+ 1 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java

@@ -286,6 +286,7 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/register", "anon,captchaValidate");
         // API接口
         filterChainDefinitionMap.put("/api/**", "anon,captchaValidate");
+        filterChainDefinitionMap.put("/demo/**", "anon,captchaValidate");
         // 系统权限列表
         // filterChainDefinitionMap.putAll(SpringUtils.getBean(IMenuService.class).selectPermsAll());