Jelajahi Sumber

根据最新的接口文档修改接口

milo 2 tahun lalu
induk
melakukan
39395e05ba

TEMPAT SAMPAH
code/robot2ips/IPS监测点清单.xls → code/robot2ips/IPSModule.xls


+ 5 - 2
code/robot2ips/src/main/java/com/sunwin/robot2ips/beans/dto/IPSPointDTO.java

@@ -19,9 +19,12 @@ public class IPSPointDTO {
     @TableId(type = IdType.AUTO)
     private Long id;
 
-    @ExcelHeader(value = "监测点", columnIndex = 3)
+    @ExcelHeader(value = "设备编码", columnIndex = 1)
+    private String deviceCode;
+
+    @ExcelHeader(value = "监测点", columnIndex = 2)
     private String monitoringPoint;
 
-    @ExcelHeader(value = "备注", columnIndex = 23)
+    @ExcelHeader(value = "巡检点编号", columnIndex = 3)
     private Long pointId;
 }

+ 5 - 0
code/robot2ips/src/main/java/com/sunwin/robot2ips/beans/vo/RecordData.java

@@ -24,6 +24,11 @@ public class RecordData {
      * 公司编码(宁德NDNP)
      */
     private String companyId = "NDNP";
+
+    /**
+     * 任务+次数
+     */
+    private String taskId;
     /**
      * 测点列表
      */

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

@@ -18,11 +18,26 @@ import java.util.Date;
 public class RecordTaskPoint {
 
     /**
+     * 任务id
+     */
+    private String taskId;
+
+    /**
      * 测点id(唯一标识 uuid)
      */
     private String resultId;
 
     /**
+     * 测点类型(检测点:POINT;判据:EQU)
+     */
+    private String resultType = "POINT";
+
+    /**
+     * 测点类型数据类型(检测点:0;判据:1)
+     */
+    private String resultTypeNum = "0";
+
+    /**
      * 测点描述(巡检点名称)
      */
     private String remark;
@@ -33,11 +48,23 @@ public class RecordTaskPoint {
     /**
      * 巡检来源1是手机版、2是电脑板(填1)
      */
-    private String dataSource;
+    private String dataSource = "1";
+
     /**
      * 测点编码
      */
     private String pointCode;
+
+    /**
+     * 设备编码
+     */
+    private String deviceCode;
+
+    /**
+     * 现场照片
+     */
+    private String image;
+
     /**
      * 任务的实际完成时间
      */

+ 70 - 40
code/robot2ips/src/main/java/com/sunwin/robot2ips/service/impl/CheckDataServiceImpl.java

@@ -10,10 +10,7 @@ import com.sunwin.robot2ips.beans.vo.RecordTaskPoint;
 import com.sunwin.robot2ips.common.RedisKey;
 import com.sunwin.robot2ips.dao.UploadMapper;
 import com.sunwin.robot2ips.service.CheckDataService;
-import com.sunwin.robot2ips.util.DateUtil;
-import com.sunwin.robot2ips.util.ExcelUtil;
-import com.sunwin.robot2ips.util.HttpUtils;
-import com.sunwin.robot2ips.util.RedisUtils;
+import com.sunwin.robot2ips.util.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -63,69 +60,102 @@ public class CheckDataServiceImpl implements CheckDataService {
             return;
         }
         Map<Integer, List<RobotDTO>> robotMap = robots.stream().collect(Collectors.groupingBy(RobotDTO::getId));
-        //从redis中获取最新一次上传id (若为首次上传 查询当前最近的30条记录上传)
+        //从redis中获取最新一次上传id (若为首次上传 查询当前最近记录上传)
         Long lastDataId = (Long) redisUtils.get(RedisKey.UPLOAD_IPS_LAST_ID);
-        logger.info(" last data id ={} ", lastDataId);
-
-        //根据lastDataId查询基于上次上传后的30条巡检数据
-        List<RecordTaskPoint> checkDataList = uploadMapper.queryDataAfterId(lastDataId,count);
+        //根据lastDataId查询基于上次上传后巡检数据
+        List<RecordTaskPoint> checkDataList = uploadMapper.queryDataAfterId(lastDataId, count);
         if (CollectionUtils.isEmpty(checkDataList)) {
-            logger.info("no new data ");
             return;
         }
-        //获取当前时间并更新redis最近上传的最新id(若上传失败则回滚!)
-        redisUtils.set(RedisKey.UPLOAD_IPS_LAST_ID, Long.valueOf(checkDataList.get(0).getResultId()));
-        //将巡检数据按照robotId分组
-        Map<Integer, List<RecordTaskPoint>> robotCheckData = checkDataList.stream().collect(Collectors.groupingBy(RecordTaskPoint::getRobotId));
+        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());
+        }
+        //组装数据同步请求对象
+        List<RecordData> uploadResult = getRecordData(robotMap, checkDataList);
+        //若任务执行后 改变机器人信息 会导致无同步数据
+        if (CollectionUtils.isEmpty(uploadResult)) {
+            return;
+        }
+        //上传成功计数器
+        int successCount = 0;
+        //根据机器人拆分组装后遍历上传
+        for (RecordData recordData : uploadResult) {
+            //HttpPost
+            String resp = HttpUtils.HttpPostWithJson(url, JSONObject.toJSONString(recordData));
+            //上传成功
+            if (!StringUtils.isEmpty(resp)) {
+                IPSResp ipsResp = JSONObject.parseObject(resp, IPSResp.class);
+                if (ipsResp.getIsSuccessed().equals("1")) {
+                    successCount++;
+                }
+            }
+        }
+        //未全部成功则判定全部失败 下次重新上传
+        if (uploadResult.size() != successCount) {
+            redisUtils.set(RedisKey.UPLOAD_IPS_LAST_ID, lastDataId);
+        } else {
+            //全部成功则更新redis上传的最新id
+            redisUtils.set(RedisKey.UPLOAD_IPS_LAST_ID, maxId);
+        }
+    }
+
+    /**
+     * 封装请求对象
+     *
+     * @param robotMap
+     * @param checkDataList
+     * @return java.util.List<com.sunwin.robot2ips.beans.vo.RecordData>
+     * @author machao
+     * @date 2022/6/16 15:25
+     **/
+    private List<RecordData> getRecordData(Map<Integer, List<RobotDTO>> robotMap, List<RecordTaskPoint> checkDataList) {
+        //将巡检数据按照taskId分组
+        Map<String, List<RecordTaskPoint>> robotCheckData = checkDataList.stream().collect(Collectors.groupingBy(RecordTaskPoint::getTaskId));
         //初始化上传集合
         List<RecordData> uploadResult = new ArrayList<>();
-        //根据机器人拆分巡检数据
-        for (Integer key : robotCheckData.keySet()) {
-            List<RobotDTO> robot = robotMap.get(key);
+        //根据任务拆分巡检数据
+        for (String taskId : robotCheckData.keySet()) {
+            //获取taskId对应的巡检数据进行组装
+            List<RecordTaskPoint> checkDataArray = robotCheckData.get(taskId);
+            //获取任务执行机器人id
+            Integer robotId = checkDataArray.get(0).getRobotId();
+            List<RobotDTO> robot = robotMap.get(robotId);
             if (CollectionUtils.isEmpty(robot)) {
                 continue;
             }
             RobotDTO robotDTO = robot.get(0);
+            //初始化数据同步请求对象
             RecordData recordData = new RecordData();
             recordData.setRobotCode(robotDTO.getId().toString());
             recordData.setRobotName(robotDTO.getRobotName());
-            //获取机器人对应的巡检数据进行组装
-            List<RecordTaskPoint> checkDataArray = robotCheckData.get(key);
-            //初始化集合
+            recordData.setTaskId(taskId);
+            //初始化实例集合
             List<RecordTaskPoint> recordTaskPoints = new ArrayList<>();
             //遍历设置时间
             for (RecordTaskPoint recordTaskPoint : checkDataArray) {
+                //巡检照片转base64
+                String base64 = FtpUtils.addrToBase64(recordTaskPoint.getImage());
+                recordTaskPoint.setImage(base64);
                 //取巡检数据的巡检时间的年月日作为任务日期
                 String yyyyMMdd = DateUtil.parseToString(recordTaskPoint.getUpdateTime(), DateUtil.DateFormat_yyyy_MM_dd);
                 Date start = DateUtil.strToDate(yyyyMMdd + " 00:00:00");
                 Date end = DateUtil.strToDate(yyyyMMdd + " 23:59:59");
                 //任务时间写死识别日期的00:00-23:59
-                recordTaskPoint.setRecordPlanStartDate(start);
-                recordTaskPoint.setRecordCompleteDate(end);
+                //recordTaskPoint.setRecordPlanStartDate(start);
+                //recordTaskPoint.setRecordCompleteDate(end);
                 recordTaskPoint.setRecordPlanCompleteDate(end);
-                recordTaskPoint.setRecordStartDate(start);
+                //recordTaskPoint.setRecordStartDate(start);
                 recordTaskPoints.add(recordTaskPoint);
             }
             recordData.setRecordTaskPoints(recordTaskPoints);
             uploadResult.add(recordData);
         }
-        //初始化失败的最小id 集合
-        ArrayList<Long> minIds = new ArrayList<>();
-        //根据机器人拆分组装后遍历上传
-        for (RecordData recordData : uploadResult) {
-            //HttpPost
-            String resp = HttpUtils.HttpPostWithJson(url, JSONObject.toJSONString(recordData));
-            //上传成功
-            if (!StringUtils.isEmpty(resp)) {
-                IPSResp ipsResp = JSONObject.parseObject(resp, IPSResp.class);
-                if (ipsResp.getIsSuccessed().equals("1")) {
-                    continue;
-                }
-            }
-            //失败即全部重新上传
-            redisUtils.set(RedisKey.UPLOAD_IPS_LAST_ID, lastDataId);
-        }
-
+        return uploadResult;
     }
 
 

+ 2 - 2
code/robot2ips/src/main/resources/application.properties

@@ -46,6 +46,6 @@ mybatis-plus.global-config.db-config.logic-not-delete-value=0
 com.sunwin.server.id=421aa9eF7F9fa326b6494f812ad13e79
 #IPS提供机器人传输巡检结果接口地址
 ips.connect.url=http://localhost:10006/api/IpsRecord/RobotRecordsResult
-ips.point.fileName=IPS监测点清单.xls
-ips.query.count=30
+ips.point.fileName=IPSModule.xls
+ips.query.count=5
 

+ 25 - 9
code/robot2ips/src/main/resources/mapper/UploadMapper.xml

@@ -2,15 +2,17 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.sunwin.robot2ips.dao.UploadMapper">
     <insert id="insertBindLink">
-        insert into ips_sw_point_link (monitoring_point,point_id) VALUES
+        insert into ips_sw_point_link (monitoring_point,point_id,device_code)
+        VALUES
         <foreach collection="list" item="item" separator=",">
             (
             #{item.monitoringPoint},
-            #{item.pointId}
-            )
+            #{item.pointId},
+            #{item.deviceCode})
         </foreach>
         ON DUPLICATE key update
-        point_id = values(point_id)
+        point_id = values(point_id),
+        device_code = values(device_code)
     </insert>
 
 
@@ -32,22 +34,36 @@
         select * from robot
     </select>
     <select id="queryDataAfterId" resultType="com.sunwin.robot2ips.beans.vo.RecordTaskPoint">
-        select
+        SELECT
         c.id result_id,
         c.point_name remark,
         c.result result_value,
         1 data_source,
+        ips.device_code,
         ips.monitoring_point point_code,
         c.time update_time,
+        d.start_time record_start_date,
+        concat( t.id, "-", c.run_times ) task_id,
+        CASE
+        p.save_type
+        WHEN 2 THEN
+        c.infrared ELSE c.image
+        END AS image,
         c.robot_id
-        from ips_sw_point_link ips
-        left join  check_data c on ips.point_id= c.point_id
+        FROM
+        ips_sw_point_link ips
+        LEFT JOIN check_data c ON ips.point_id = c.point_id
+        LEFT JOIN check_task t ON t.id = c.task_id
+        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}
+            and c.id <![CDATA[ > ]]> #{lastDataId}
+        </if>
+        <if test="lastDataId == null">
+            order by c.id desc
         </if>
-        order by c.id desc
         limit #{count}
     </select>
 </mapper>