Parcourir la source

优化上传逻辑

milo il y a 2 ans
Parent
commit
52c0c2fe5f

+ 1 - 0
code/robot2ips/src/main/java/com/sunwin/robot2ips/beans/vo/RecordTaskPoint.java

@@ -20,6 +20,7 @@ public class RecordTaskPoint {
     /**
      * 任务id
      */
+    @JSONField(serialize = false)
     private String taskId;
 
     /**

+ 2 - 0
code/robot2ips/src/main/java/com/sunwin/robot2ips/dao/UploadMapper.java

@@ -28,4 +28,6 @@ public interface UploadMapper {
     void insertBindLink(@Param("list") List<IPSPointDTO> IPSPoints);
 
     List<RecordTaskPoint> queryDataAfterId(@Param("lastDataId") Long lastDataId, @Param("count") Integer count);
+
+    Long selectMaxId();
 }

+ 9 - 10
code/robot2ips/src/main/java/com/sunwin/robot2ips/service/impl/CheckDataServiceImpl.java

@@ -60,25 +60,24 @@ public class CheckDataServiceImpl implements CheckDataService {
             return;
         }
         Map<Integer, List<RobotDTO>> robotMap = robots.stream().collect(Collectors.groupingBy(RobotDTO::getId));
-        //从redis中获取最新一次上传id (若为首次上传 查询当前最近记录上传)
+        //从redis中获取最新一次上传id
         Long lastDataId = (Long) redisUtils.get(RedisKey.UPLOAD_IPS_LAST_ID);
+        //若为首次上传则记录当前巡检数据的最大id 产生新的数据之后再进行上传
+        if (lastDataId == null) {
+            lastDataId = uploadMapper.selectMaxId();
+            redisUtils.set(RedisKey.UPLOAD_IPS_LAST_ID, lastDataId);
+            return;
+        }
         //根据lastDataId查询基于上次上传后巡检数据
         List<RecordTaskPoint> checkDataList = uploadMapper.queryDataAfterId(lastDataId, count);
         if (!CollectionUtils.isEmpty(checkDataList)) {
             checkDataList = checkDataList.stream().filter(t -> t.getTaskId() != null).collect(Collectors.toList());
         }
-
         if (CollectionUtils.isEmpty(checkDataList)) {
             return;
         }
-        Long maxId = null;
-        //lastDataId为空即为首次上传,倒叙查询最新的巡检数据取最大的一条数据id
-        if (lastDataId == null) {
-            maxId = Long.parseLong(checkDataList.get(0).getResultId());
-        } else {
-            //不为空则顺序查询,最后一条为最大的数据id
-            maxId = Long.valueOf(checkDataList.get(checkDataList.size() - 1).getResultId());
-        }
+        //记录查询的最大id
+        Long maxId = Long.valueOf(checkDataList.get(checkDataList.size() - 1).getResultId());
         //组装数据同步请求对象
         List<RecordData> uploadResult = getRecordData(robotMap, checkDataList);
         //若任务执行后 改变机器人信息 会导致无同步数据

+ 5 - 7
code/robot2ips/src/main/resources/mapper/UploadMapper.xml

@@ -58,13 +58,11 @@
         left join task_data d on c.task_id=d.task_id and c.run_times=d.run_times
         LEFT JOIN check_point p ON p.id = c.point_id AND c.robot_id = p.robot_id
         where
-        1=1
-        <if test="lastDataId!=null">
-            and c.id <![CDATA[ > ]]> #{lastDataId}
-        </if>
-        <if test="lastDataId == null">
-            order by c.id desc
-        </if>
+        c.id <![CDATA[ > ]]> #{lastDataId}
+        order by c.id asc
         limit #{count}
     </select>
+    <select id="selectMaxId" resultType="java.lang.Long">
+        select max(id) from check_data
+    </select>
 </mapper>