Browse Source

优化供水量信息
新增新天第三方同步监测指标逻辑

linzhiwei 2 years ago
parent
commit
562476a249

+ 1 - 1
mysy-gis/src/main/java/com/tofly/xrtygis/entity/TfDeviceArchiveManage.java

@@ -180,7 +180,7 @@ public class TfDeviceArchiveManage extends Model<TfDeviceArchiveManage> {
     private Long pressureDeviceId;
 
     @ApiModelProperty(value = "属于区域,字典码表pcid54000")
-    private Long areaId;
+    private String areaId;
 
     @ApiModelProperty(value = "区域名称")
     @TableField(exist = false)

+ 1 - 1
mysy-gis/src/main/resources/mapper/common/TfDeviceArchiveManageMapper.xml

@@ -43,7 +43,7 @@
         SELECT CNAME
         FROM TF_YWPN_SYSCHILDCODE_D
         WHERE PCID = 54000
-          AND CCODE = #{status}
+          AND CCODE = #{areaId}
     </select>
 
     <select id="getDeviceName" resultType="string">

+ 1 - 1
mysy-gis/src/main/resources/mapper/custom/OnlineMonitorMapper.xml

@@ -146,7 +146,7 @@
             </collection>
         </resultMap>
     <select id="getWaterTimeFlowDetail" resultMap="waterTimeFlowMap">
-        select t1.id deviceId,t1.code deviceCode,t1.name deviceName,t2.variable_Code indexCode,t2.display_Name indexName,sum(t3.new_Value) flow ,sum(t3.DIFFERENCE_VALUE) differenceValue,	to_char(t3.scada_time, 'yyyy')||'-'|| to_char(t3.scada_time, 'mm')||'-'|| to_char(t3.scada_time, 'dd')||' '|| to_char(t3.scada_time, 'hh24')||':'|| floor(to_char(t3.scada_time, 'mi')/${dataGroup})*${dataGroup}
+        select t1.id deviceId,t1.code deviceCode,t1.name deviceName,t2.variable_Code indexCode,t2.display_Name indexName,max(t3.new_Value) flow ,sum(t3.DIFFERENCE_VALUE) differenceValue,	to_char(t3.scada_time, 'yyyy')||'-'|| to_char(t3.scada_time, 'mm')||'-'|| to_char(t3.scada_time, 'dd')||' '|| to_char(t3.scada_time, 'hh24')||':'|| floor(to_char(t3.scada_time, 'mi')/${dataGroup})*${dataGroup}
         ||':'|| to_char(t3.scada_time, 'ss') time
         from TF_DEVICE_ARCHIVE_MANAGE t1 left join TF_INDEX_ALLOCATION t2
         on t1.id = t2.DEVICE_ID

BIN
mysy-gis/src/main/resources/report/export/供水量报表.xlsx


+ 34 - 8
mysy-scada/src/main/java/com/tofly/scada/controller/ScadaController.java

@@ -2,6 +2,7 @@ package com.tofly.scada.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.tofly.common.core.entity.ResultRespone;
+import com.tofly.common.core.util.StringUtil;
 import com.tofly.common.log.annotation.ToFlyAppLog;
 import com.tofly.scada.common.BaseController;
 import com.tofly.scada.common.Constant;
@@ -10,6 +11,7 @@ import com.tofly.scada.entity.dto.DeviceQuery;
 import com.tofly.scada.entity.dto.ScadaQuery;
 import com.tofly.scada.entity.vo.StatisticsScadaVo;
 import com.tofly.scada.service.ScadaService;
+import com.tofly.scada.service.ScadaSynHisService;
 import com.tofly.scada.service.StatisticsScadaService;
 import com.tofly.scada.util.ExcelUtil;
 import io.swagger.annotations.Api;
@@ -20,8 +22,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author HaiQiu
@@ -38,6 +43,9 @@ public class ScadaController extends BaseController {
     @Autowired
     private StatisticsScadaService statisticsScadaService;
 
+    @Autowired
+    private ScadaSynHisService scadaSynHisService;
+
     @ToFlyAppLog(title = "查询最新SCADA所有数据")
     @ApiOperation(value = "查询最新SCADA所有数据")
     @PostMapping("/all")
@@ -61,18 +69,19 @@ public class ScadaController extends BaseController {
                                        @RequestParam(required = false) Boolean isPage, HttpServletResponse response) {
 
         String export = scadaQuery.getExport();
-        if("1".equals(export)){
-            ExcelExportFileTypeEnum excelExportFileTypeEnum = ExcelExportFileTypeEnum.EXPORT_MONITOR_HIS_SCADA;;
+        if ("1".equals(export)) {
+            ExcelExportFileTypeEnum excelExportFileTypeEnum = ExcelExportFileTypeEnum.EXPORT_MONITOR_HIS_SCADA;
+            ;
             // 从模型类型枚举根据templateServiceType获取策略对应模板数据
             Map<String, Object> dataMap = new HashMap<>(12);
 
 
-            Page<StatisticsScadaVo> waterTimeFlowDetail = statisticsScadaService.getPageData(page, scadaQuery,isPage);
+            Page<StatisticsScadaVo> waterTimeFlowDetail = statisticsScadaService.getPageData(page, scadaQuery, isPage);
             dataMap.put("list", waterTimeFlowDetail.getRecords());
             ExcelUtil.export(dataMap, excelExportFileTypeEnum, Constant.FILE_PATH_TEST_EXPORT_EXCEL, response);
             return null;
-        }else {
-            return  decide(statisticsScadaService.getPageData(page, scadaQuery,isPage));
+        } else {
+            return decide(statisticsScadaService.getPageData(page, scadaQuery, isPage));
         }
 
     }
@@ -132,10 +141,27 @@ public class ScadaController extends BaseController {
     @ApiOperation(value = "手动更新累计流量差值处理(5分钟求值)")
     @PutMapping("/data/sendFlowDifference")
     public ResultRespone sendFlowDifference(
-                                   @ApiParam("开始时间:2022-01-01 00:00:00") @RequestParam String start,
-                                   @ApiParam("结束时间:2022-10-01 14:00:00") @RequestParam String end
-                                   ) {
+            @ApiParam("开始时间:2022-01-01 00:00:00") @RequestParam String start,
+            @ApiParam("结束时间:2022-10-01 14:00:00") @RequestParam String end
+    ) {
         scadaService.sendCumulativeFlowDifference(start, end);
         return decide("更新成功");
     }
+
+    @ToFlyAppLog(title = "手动同步第三方历史监测数据")
+    @ApiOperation(value = "手动同步第三方历史监测数据")
+    @PostMapping("/data/synchronousThirdParty")
+    public ResultRespone synchronousThirdParty(
+            @ApiParam("同步指标,多个以,分隔(模糊查询后缀不用填写)") @RequestParam String codes
+    ) {
+        if(StringUtil.isNotEmpty(codes)){
+            List<String> codeList = Arrays.stream(codes.split(Constant.CSV)).map(String::trim)
+                    .collect(Collectors.toList());
+            scadaSynHisService.synchronousThirdParty(codeList);
+        }else {
+            return ResultRespone.failed("请检查指标参数,不能为空");
+        }
+        return decide("同步成功");
+    }
+
 }

+ 40 - 0
mysy-scada/src/main/java/com/tofly/scada/entity/ScadaSynHis.java

@@ -0,0 +1,40 @@
+package com.tofly.scada.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author haiqiu
+ */
+@Data
+@TableName(value = "SCADA_SYN_HIS", resultMap = "scadaSynHisMap")
+@KeySequence("SCADA_SYN_HIS")
+@ApiModel
+public class ScadaSynHis implements Serializable {
+
+    @ApiModelProperty(value = "同步的历史数据监测ID")
+    private Long historyId;
+
+    @ApiModelProperty(value = "是否同步(0未同步,1同步)")
+    private String flag;
+
+    @ApiModelProperty(value = "SCADA监测时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "UPDATE_TIME",fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+}

+ 39 - 0
mysy-scada/src/main/java/com/tofly/scada/mapper/ScadaSynHisMapper.java

@@ -0,0 +1,39 @@
+package com.tofly.scada.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.tofly.scada.entity.Allocation;
+import com.tofly.scada.entity.Scada;
+import com.tofly.scada.entity.ScadaSynHis;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author zev
+ */
+@Mapper
+public interface ScadaSynHisMapper extends BaseMapper<ScadaSynHis> {
+    /**
+     * 获取对应第三方同步指标列表
+     * @param type
+     * @return
+     */
+    List<String> getSynCodeList(@Param("type")String type);
+    /**
+     * 获取需要同步的监测数据列表
+     * @param codes 同步的指标列表
+     * @return
+     */
+    List<Scada> getScadaSynHisList(@Param("codes") List<String> codes);
+
+    /**
+     * 批量更新已同步数据
+     * @param idList
+     */
+    void updateBatchSynFlag(@Param("idList")List<Long> idList);
+}
+
+
+
+

+ 23 - 0
mysy-scada/src/main/java/com/tofly/scada/service/ScadaSynHisService.java

@@ -0,0 +1,23 @@
+/*
+ * Author: wangjian
+ * 生成Service
+ */
+package com.tofly.scada.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.tofly.scada.entity.ScadaSynHis;
+
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 第三方同步记录
+ *
+ * @author admin
+ * @date Wed Sep 07 00:00:00 CST 2022
+ */
+public interface ScadaSynHisService extends IService<ScadaSynHis> {
+
+    public void synchronousThirdParty(List<String> codes);
+}

+ 122 - 0
mysy-scada/src/main/java/com/tofly/scada/service/impl/ScadaSynHisServiceImpl.java

@@ -0,0 +1,122 @@
+/*
+ * Author: wangjian
+ * 生成ServiceImpl
+ */
+package com.tofly.scada.service.impl;
+
+import cn.hutool.Hutool;
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.crypto.asymmetric.Sign;
+import cn.hutool.crypto.asymmetric.SignAlgorithm;
+import cn.hutool.crypto.digest.HMac;
+import cn.hutool.crypto.digest.MD5;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.tofly.common.core.entity.ResultRespone;
+import com.tofly.scada.entity.Scada;
+import com.tofly.scada.entity.ScadaLjFlow;
+import com.tofly.scada.entity.ScadaSynHis;
+import com.tofly.scada.mapper.ScadaLjFlowMapper;
+import com.tofly.scada.mapper.ScadaSynHisMapper;
+import com.tofly.scada.service.ScadaLjFlowService;
+import com.tofly.scada.service.ScadaSynHisService;
+import com.tofly.scada.util.DateTimeUtil;
+import com.tofly.scada.util.HttpClientUtil;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * 第三方同步记录
+ *
+ * @author admin
+ * @date Wed Sep 07 00:00:00 CST 2022
+ */
+@Service("scadaSynHisService")
+@Slf4j
+public class ScadaSynHisServiceImpl extends ServiceImpl<ScadaSynHisMapper, ScadaSynHis> implements ScadaSynHisService {
+    @Value("${syn.fn}")
+    private String fn;
+
+    @Value("${syn.fc}")
+    private String fc;
+
+    @Value("${syn.fh}")
+    private String fh;
+
+    @Value("${syn.userId}")
+    private String userId;
+
+    @Value("${syn.pc}")
+    private String pc;
+
+    @Value("${syn.url}")
+    private String url;
+
+    @Value("${syn.md5Key}")
+    private String md5Key;
+
+    @Value("${syn.type}")
+    private String type;
+    // 每日 6点 15点执行
+    @Scheduled(cron = "0 0 6,15 * * ? ")
+    public void automaticSynchronousThirdParty(){
+        // 获取对应第三方同步指标列表
+        List<String> synCodeList = baseMapper.getSynCodeList(type);
+        synchronousThirdParty(synCodeList);
+    }
+
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void synchronousThirdParty(List<String> codes) {
+        // 获取未同步监测数据
+        List<Scada> scadaSynHisList = baseMapper.getScadaSynHisList(codes);
+        // 封装第三方请求参数
+        Map<String, Object> dataMap = new LinkedHashMap<>(12);
+        dataMap.put("fn", fn);
+        dataMap.put("fc", fc);
+        dataMap.put("fh", fh);
+        dataMap.put("jsondata", JSON.toJSONString(scadaSynHisList));
+        dataMap.put("userid", userId);
+        dataMap.put("pc", pc);
+        long time = System.currentTimeMillis();
+        dataMap.put("time",time);
+        // 签名生成 sign=md5(fn&fc&fh&userid&pc&time&md5key);
+        String md5Str = "fn=" + fn + "&" + "fc=" + fc + "&" + "fh=" + fh + "&" + "userid=" + userId + "&" + "pc=" + pc + "&" + "time=" + time + "&" + "key=" + md5Key;
+        log.info("第三方请求签名生成参数: {}", md5Str);
+        String md5 = HttpClientUtil.TraditionMd5(md5Str);
+        dataMap.put("sign", md5);
+        log.info("第三方请求参数: {}", JSON.toJSONString(dataMap));
+        try {
+            String result = HttpClientUtil.doPostJson(url, new HashMap<>(12), JSON.toJSONString(dataMap));
+            JSONObject jsonObject = JSON.parseObject(result);
+            Integer status = (Integer) jsonObject.get("status");
+            if(1==status){
+                // 批量更新推送数据同步状态
+                List<Long> collect = scadaSynHisList.stream().map(Scada::getId).collect(Collectors.toList());
+                baseMapper.updateBatchSynFlag(collect);
+            }else {
+                // 记录异常,返回失败
+                log.error("新天第三方同步异常:{}",jsonObject.toJSONString());
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+}

+ 257 - 0
mysy-scada/src/main/java/com/tofly/scada/util/HttpClientUtil.java

@@ -0,0 +1,257 @@
+package com.tofly.scada.util;
+
+import cn.hutool.http.ContentType;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import com.alibaba.fastjson.JSON;
+import com.tofly.common.core.entity.ResultRespone;
+import com.tofly.scada.common.Constant;
+import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
+import org.springframework.util.DigestUtils;
+
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * http工具类
+ *
+ * @author zev
+ * 2022/01/07
+ * <p>
+ * HttpClientUtil
+ */
+public class HttpClientUtil {
+
+    /**
+     * 编码格式,发送编码格式统一用UTF-8
+     */
+    private static final String ENCODING = "UTF-8";
+
+    /**
+     * 设置连接超时时间,单位毫秒
+     */
+    private static final int CONNECT_TIMEOUT = 3 * 60 * 1000;
+
+    /**
+     * 请求响应超时时间,单位毫秒
+     */
+    private static final int SOCKET_TIMEOUT = 3 * 60 * 1000;
+
+    /**
+     * 发送get请求;带请求头和请求参数
+     */
+    public static ResultRespone<Object> doGet(String url, Map<String, String> headers, Map<String, Object> params, HttpServletResponse response) throws Exception {
+        //链式构建请求
+        HttpResponse execute = HttpRequest.get(url)
+                .addHeaders(headers)
+                .form(params)
+                .timeout(CONNECT_TIMEOUT)
+                .execute();
+
+        // 执行请求获取响应体并释放资源
+        return getHttpClientResult(execute, response);
+    }
+
+    public static ResultRespone<Object> doGetJoinId(String url, Map<String, String> headers, Map<String, Object> params, HttpServletResponse response) throws Exception {
+        //链式构建请求
+        String join = url + Constant.SYSTEM_SEPARATOR + params.get("id");
+        HttpResponse execute = HttpRequest.get(join)
+                .addHeaders(headers)
+                .timeout(CONNECT_TIMEOUT)
+                .execute();
+
+        // 执行请求获取响应体并释放资源
+        return getHttpClientResult(execute, response);
+    }
+
+    /**
+     * 发送post请求;带请求头和请求参数
+     */
+    public static ResultRespone<Object> doPost(String url, Map<String, String> headers, Map<String, Object> params) throws IOException {
+        HttpResponse execute = HttpRequest.post(url)
+                .addHeaders(headers)
+                //表单内容
+                .form(params)
+                //超时,毫秒
+                .timeout(CONNECT_TIMEOUT)
+                .execute();
+
+        // 执行请求获取响应体并释放资源
+        return getHttpClientResult(execute, null);
+    }
+
+    /**
+     * 发送post请求;json格式参数
+     */
+    public static String doPostJson(String url, Map<String, String> headers, String json) throws IOException {
+        HttpResponse execute = HttpRequest.post(url)
+                .addHeaders(headers)
+                .body(json)
+                .timeout(CONNECT_TIMEOUT)
+                .execute();
+
+        // 执行请求获取响应体并释放资源
+        return execute.body();
+    }
+
+
+    /**
+     * 发送put请求;带请求头和请求参数
+     */
+    public static ResultRespone<Object> doPut(String url, Map<String, String> headers, Map<String, Object> params) throws IOException {
+        HttpResponse execute = HttpRequest.put(url)
+                .addHeaders(headers)
+                //表单内容
+                .form(params)
+                //超时,毫秒
+                .timeout(CONNECT_TIMEOUT)
+                .execute();
+
+        // 执行请求获取响应体并释放资源
+        return getHttpClientResult(execute, null);
+    }
+
+    public static ResultRespone<Object> doPutJson(String url, Map<String, String> headers, String json) throws IOException {
+        HttpResponse execute = HttpRequest.put(url)
+                .addHeaders(headers)
+                .body(json)
+                .timeout(CONNECT_TIMEOUT)
+                .execute();
+
+        // 执行请求获取响应体并释放资源
+        return getHttpClientResult(execute, null);
+    }
+
+
+    /**
+     * 发送delete请求;带请求头
+     */
+    public static ResultRespone<Object> doDelete(String url, Map<String, String> headers, Map<String, Object> params) throws Exception {
+        HttpResponse execute = HttpRequest.delete(url)
+                .addHeaders(headers)
+                //表单内容
+                .form(params)
+                //超时,毫秒
+                .timeout(CONNECT_TIMEOUT)
+                .execute();
+
+        // 执行请求获取响应体并释放资源
+        return getHttpClientResult(execute, null);
+    }
+
+
+//
+//    /**
+//     * 设置请求头
+//     */
+//    private static void packageHeader(Map<String, String> headers, HttpRequestBase httpMethod) {
+//        if (!ObjectUtils.isEmpty(headers)) {
+//            headers.forEach(httpMethod::setHeader);
+//        }
+//    }
+//
+//    /**
+//     * 封装请求参数
+//     */
+//    private static void packageParam(Map<String, String> params, HttpEntityEnclosingRequestBase httpMethod) throws UnsupportedEncodingException {
+//        if (!ObjectUtils.isEmpty(params)) {
+//            List<NameValuePair> nameValuePairs = new ArrayList<>();
+//            params.forEach((key, value) -> nameValuePairs.add(new BasicNameValuePair(key, value)));
+//            httpMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs, ENCODING));
+//        }
+//    }
+//
+//    /**
+//     * 封装请求参数为json格式
+//     */
+//    private static void packageJson(String json, HttpEntityEnclosingRequestBase httpMethod) {
+//        if (!ObjectUtils.isEmpty(json)) {
+//            StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON);
+//            httpMethod.setEntity(stringEntity);
+//        }
+//    }
+
+    /**
+     * 执行请求获取响应体并释放资源
+     */
+    private static ResultRespone<Object> getHttpClientResult(HttpResponse execute, HttpServletResponse response) throws IOException {
+        String body = execute.body();
+        System.out.println(body);
+        ResultRespone respone = JSON.parseObject(execute.body(), ResultRespone.class);
+        return respone;
+    }
+
+    /**
+     * MD5加密之方法二
+     * @explain java实现
+     * @param str
+     *            待加密字符串
+     * @return 16进制加密字符串
+     */
+    public static String encrypt2ToMD5(String str) {
+        // 加密后的16进制字符串
+        String hexStr = "";
+        try {
+            // 此 MessageDigest 类为应用程序提供信息摘要算法的功能
+            MessageDigest md5 = MessageDigest.getInstance("MD5");
+            // 转换为MD5码
+            byte[] digest = md5.digest(str.getBytes("utf-8"));
+            hexStr = new BigInteger(1, digest).toString(16);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return hexStr;
+    }
+
+
+    /**
+     * @param text
+     * @return 传统的MD5加密方式,与客户端加密方法相同
+     * @throws Exception
+     */
+    public static String TraditionMd5(String text) {
+        //加密后的字符串
+        byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
+        byte[] encodeStrByte= DigestUtils.md5Digest(bytes);
+        String re=bytesToHexFun1(encodeStrByte);
+        return re;
+    }
+
+    private static final char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5',
+            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+
+    /**
+     * byte[]数组转16进制字符串
+     * @param bytes
+     * @return
+     */
+    public static String bytesToHexFun1(byte[] bytes) {
+        // 一个byte为8位,可用两个十六进制位标识
+        char[] buf = new char[bytes.length * 2];
+        int a = 0;
+        int index = 0;
+        for(byte b : bytes) { // 使用除与取余进行转换
+            if(b < 0) {
+                a = 256 + b;
+            } else {
+                a = b;
+            }
+
+            buf[index++] = HEX_CHAR[a / 16];
+            buf[index++] = HEX_CHAR[a % 16];
+        }
+
+        return new String(buf);
+    }
+
+}
+

+ 42 - 0
mysy-scada/src/main/resources/mapper/ScadaSynHisMapper.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.tofly.scada.mapper.ScadaSynHisMapper">
+
+    <resultMap id="scadaSynHisMap" type="com.tofly.scada.entity.ScadaSynHis">
+        <result property="historyId" column="HISTORY_ID"/>
+        <result property="flag" column="FLAG"/>
+        <result property="createTime" column="CREATE_TIME"/>
+        <result property="updateTime" column="UPDATE_TIME"/>
+    </resultMap>
+
+    <select id="getSynCodeList" resultType="string">
+        select code from SCADA_SYN_HIS_SYS where type = #{type}
+    </select>
+
+    <select id="getScadaSynHisList" resultType="com.tofly.scada.entity.Scada">
+        select t2.id,t2.code,t2.value,t2.scada_time
+        from SCADA_SYN_HIS t1 left join SCADA_HISTORY t2 on t1.HISTORY_ID = t2.id
+        where t1.flag = '0'
+        and
+        <foreach collection="codes" item="code" index="index" separator=" or ">
+            t2.code like '%'||#{code}||'%'
+        </foreach>
+
+    </select>
+
+    <update id="updateBatchSynFlag">
+        update SCADA_SYN_HIS
+        set flag = '1'
+        where history_Id in
+        <foreach collection="idList" index="index" open="(" close=")" separator="," item="id">
+            <!--防止数据超过1000报错-->
+            <if test="(index % 999) == 998">
+                0 )
+                or history_Id in (
+            </if>
+            #{id}
+        </foreach>
+    </update>
+
+</mapper>