Browse Source

定时任务相关同步逻辑完善 测试

王苗苗 3 weeks ago
parent
commit
10a2eb29ce
1 changed files with 70 additions and 6 deletions
  1. 70 6
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java

+ 70 - 6
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java

@@ -3,6 +3,8 @@ package com.ruoyi.quartz.task;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson2.JSON;
 import com.ruoyi.business.domain.BizDevice;
+import com.ruoyi.business.domain.ZAssay;
+import com.ruoyi.business.domain.ZAssayResult;
 import com.ruoyi.business.mapper.BizDeviceMapper;
 import com.ruoyi.business.mapper.ZAssayMapper;
 import com.ruoyi.business.mapper.ZAssayResultMapper;
@@ -13,6 +15,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import com.ruoyi.common.utils.StringUtils;
+import org.springframework.util.StopWatch;
 
 import java.util.Collection;
 import java.util.Date;
@@ -56,11 +59,14 @@ public class RyTask
     @Autowired
     private ZAssayResultMapper assayResultMapper;
 
+    public final static StopWatch watch = new StopWatch("task");
+
     /**
      *
      * 同步化验设备的状态
      */
     public void syncDevice(){
+        watch.start("syncDevice");
         //获取本地的所有设备信息
         List<BizDevice> bizDevices = this.bizDeviceMapper.selectBizDeviceList(null);
         if(CollectionUtils.isEmpty(bizDevices)){
@@ -98,9 +104,12 @@ public class RyTask
                 bizDevice.setUpdateTime(DateUtils.getNowDate());
                 this.bizDeviceMapper.updateBizDevice(bizDevice);
             }else {
-                log.error("通过设备编号{}去匹配SqlServer设备数据时,没有查询到", deviceNo);
+                log.error("通过设备编号{}去匹配SqlServer设备数据时,没有查询到,无法更新", deviceNo);
             }
         }
+        //计算耗时
+        watch.stop();
+        log.info("同步设备信息结束,耗时{} ms", watch.getLastTaskTimeMillis());
     }
 
 
@@ -108,13 +117,33 @@ public class RyTask
      * 定时任务 同步化验信息
      */
     public void syncAssay(){
-        log.info("进入了定时任务:同步化验信息逻辑处理");
+        watch.start("syncAssay");
         //获取同步的最新的ID
         Long id = this.assayMapper.selectMaxId();
+        log.info("进入了定时任务:同步化验信息逻辑处理,上次同步到的最大的记录ID为{}", id);
         //查询待同步的数据
-
+        //获取SqlServer数据库的设备实时信息
+        String result;
+        List<ZAssay> remoteList;
+        try {
+            result = HttpUtil.get(SQL_SERVER_REMOTE_INTERFACE_ADDR + "/assayList?id=" + id, HTTP_GET_TIME_OUT_MILLION_SECONDS);
+            log.info("调用获取最新的化验记录接口返回的结果为{}", result);
+            remoteList = JSON.parseArray(result, ZAssay.class);
+        } catch (Exception e) {
+            throw new RuntimeException("调用获取最新的化验记录接口异常,异常信息为:" + e.getMessage());
+        }
+        log.info("调用最新的化验记录接口转换完对象以后,获取到的需要同步的数据为{}", JSON.toJSONString(remoteList));
+        if(CollectionUtils.isEmpty(remoteList)){
+            log.error("同步最新的化验记录的时候,没有查询到最新的数据,无法同步");
+            return;
+        }
         //同步数据并插入到数据库
-
+        for (ZAssay zAssay : remoteList) {
+            this.assayMapper.insertZAssay(zAssay);
+        }
+        //计算耗时
+        watch.stop();
+        log.info("同步最新的化验数据结束,耗时{} ms", watch.getLastTaskTimeMillis());
     }
 
 
@@ -122,13 +151,48 @@ public class RyTask
      * 定时任务 同步化验结果明细信息
      */
     public void syncAssayResult(){
-        log.info("进入了定时任务:同步化验结果明细信息逻辑处理");
+        watch.start("syncAssayResult");
         //获取同步的最新的ID
         Long id = this.assayResultMapper.selectMaxId();
+        log.info("进入了定时任务:同步化验结果明细信息逻辑处理,上次同步到的最大的记录ID为{}", id);
         //查询待同步的数据
-
+        //获取SqlServer数据库的设备实时信息
+        String result;
+        List<ZAssayResult> remoteList;
+        try {
+            result = HttpUtil.get(SQL_SERVER_REMOTE_INTERFACE_ADDR + "/assayResultList?id=" + id, HTTP_GET_TIME_OUT_MILLION_SECONDS);
+            log.info("调用获取最新的化验记录明细接口返回的结果为{}", result);
+            remoteList = JSON.parseArray(result, ZAssayResult.class);
+        } catch (Exception e) {
+            throw new RuntimeException("调用获取最新的化验记录明细接口异常,异常信息为:" + e.getMessage());
+        }
+        log.info("调用最新的化验记录明细转换完对象以后,获取到的需要同步的数据为{}", JSON.toJSONString(remoteList));
+        if(CollectionUtils.isEmpty(remoteList)){
+            log.error("同步最新的化验记录明细的时候,没有查询到最新的数据,无法同步");
+            return;
+        }
         //同步数据并插入到数据库
+        for (ZAssayResult assayResult : remoteList) {
+            this.assayResultMapper.insertZAssayResult(assayResult);
+        }
+        //计算耗时
+        watch.stop();
+        log.info("同步化验结果明细结束,耗时{} ms", watch.getLastTaskTimeMillis());
     }
 
 
+    public static void main(String[] args) {
+        String result;
+        List<BizDevice> remoteList;
+        try {
+//            result = "";
+            result = null;
+            log.info("调用同步设备接口返回的结果为{}", result);
+            remoteList = JSON.parseArray(result, BizDevice.class);
+        } catch (Exception e) {
+            throw new RuntimeException("调用同步设备接口异常,异常信息为:" + e.getMessage());
+        }
+        System.out.println(JSON.toJSONString(remoteList));
+    }
+
 }