lin 4 роки тому
батько
коміт
8261e3654d

+ 2 - 1
meter-reading-common/src/main/java/com/huaxu/zoniot/processor/MigrateFileItemProcessor.java

@@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.util.Date;
 
 /**
@@ -43,7 +44,7 @@ public class MigrateFileItemProcessor implements ItemProcessor<WaterMigrateFileI
     @Autowired
     BuildingService buildingService ;
 
-    @Autowired
+    @Resource
     WaterMigrateFileItemMapper  waterMigrateFileItemMapper ;
 
     @Value("#{jobParameters["+Constants.FILE_FULL_PATH_TAG+"]}")

+ 4 - 4
meter-reading-suntront/pom.xml

@@ -44,11 +44,11 @@
             <version>2.7.0</version>
         </dependency>
         <!-- 数据源连接池 -->
-        <dependency>
+        <!--<dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid-spring-boot-starter</artifactId>
             <version>1.1.9</version>
-        </dependency>
+        </dependency>-->
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
@@ -58,7 +58,7 @@
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
         </dependency>
-        <dependency>
+        <!--<dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
         </dependency>
@@ -66,7 +66,7 @@
             <groupId>org.mybatis.spring.boot</groupId>
             <artifactId>mybatis-spring-boot-starter</artifactId>
             <version>1.3.2</version>
-        </dependency>
+        </dependency>-->
         <!-- mongodb -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 4 - 5
meter-reading-suntront/src/main/java/com/zoniot/suntront/controller/ReadingMeterController.java

@@ -22,14 +22,13 @@ public class ReadingMeterController {
     private ReadingMeterService readingMeterService;
 
     @ResponseBody
-    @GetMapping("/ReadingMeter")
-    @ApiOperation(value = "查询抄表")
-    public String getReadingMeter(
-            @ApiParam(value = "冻结日期 yyyy-MM-dd", required = false) @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate ReadingTime
+    @GetMapping("executeReadingMeter")
+    @ApiOperation(value = "执行抄表")
+    public String executeReadingMeter(
 
     ){
 
-        readingMeterService.getReadingMeter(ReadingTime);
+        readingMeterService.executeReadingMeter();
         return null;
     }
 

+ 35 - 0
meter-reading-suntront/src/main/java/com/zoniot/suntront/model/FileData.java

@@ -0,0 +1,35 @@
+package com.zoniot.suntront.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class FileData {
+
+    //表号
+    private String meterAddr;
+
+    //表类型见表类型编码
+    private Integer meterTypeId;
+
+    //读数
+
+    private Double readNumber;
+
+    //抄表时间
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JSONField(format="yyyy-MM-dd HH:mm:ss")
+    private Date readDate;
+
+    //表时钟
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JSONField(format="yyyy-MM-dd HH:mm:ss")
+    private Date meterTime;
+
+    //阀门状态 1 开 2 关
+    private Integer valveState;
+
+}

+ 1 - 1
meter-reading-suntront/src/main/java/com/zoniot/suntront/repository/MeterReadRecord.java

@@ -129,7 +129,7 @@ public class MeterReadRecord implements Serializable {
     /**
      * 阀门状态 0:关 1:开 2:无阀 3:异常
      */
-    private String valveState ;
+    private Integer valveState ;
 
     /**
     * 最近有效数据

+ 2 - 2
meter-reading-suntront/src/main/java/com/zoniot/suntront/repository/MeterReadRecordRepository.java

@@ -5,7 +5,7 @@ import org.springframework.data.mongodb.repository.MongoRepository;
 import java.util.List;
 
 public interface MeterReadRecordRepository extends MongoRepository<MeterReadRecord, Long> {
-    MeterReadRecord findByDeviceIdAndReadDate(Long deviceId, Integer date);
 
-    List<MeterReadRecord> findByReadDateAndCustomerIdAndReadStatusAndMeterNoIn(Integer date, Integer customerId, String readStatus, List<String> meterNos);
+    List<MeterReadRecord> findByCustomerIdAndReadDateAndReadStatus(Integer customerId, Integer date, String readStatus);
+
 }

+ 25 - 0
meter-reading-suntront/src/main/java/com/zoniot/suntront/scheduled/MeterReadingScheduleTask.java

@@ -0,0 +1,25 @@
+package com.zoniot.suntront.scheduled;
+
+import com.zoniot.suntront.service.ReadingMeterService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+@Configuration
+@EnableScheduling
+public class MeterReadingScheduleTask {
+    @Autowired
+    private ReadingMeterService readingMeterService;
+
+    @Scheduled(cron = "0 0 1 */1 * ?")
+    public void executeTask() {
+        log.info("begin MeterReadingScheduleTask executeTask");
+        readingMeterService.executeReadingMeter();
+        log.info("end MeterReadingScheduleTask executeTask");
+    }
+}

+ 1 - 1
meter-reading-suntront/src/main/java/com/zoniot/suntront/service/ReadingMeterService.java

@@ -8,5 +8,5 @@ import java.util.List;
 
 public interface ReadingMeterService {
 
-    void getReadingMeter(LocalDate readingTime);
+    void executeReadingMeter();
 }

+ 90 - 10
meter-reading-suntront/src/main/java/com/zoniot/suntront/service/impl/ReadingMeterServiceImpl.java

@@ -1,18 +1,29 @@
 package com.zoniot.suntront.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.zoniot.suntront.model.FileData;
+import com.zoniot.suntront.repository.MeterReadRecord;
+import com.zoniot.suntront.repository.MeterReadRecordRepository;
 import com.zoniot.suntront.service.ReadingMeterService;
+import com.zoniot.suntront.util.Md5Util;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
-import java.util.Base64;
-import java.util.List;
+import java.util.*;
+
+import static com.google.common.collect.Lists.newArrayList;
 
 @Slf4j
 @Service
@@ -23,21 +34,67 @@ public class ReadingMeterServiceImpl implements ReadingMeterService {
     @Value("${customerId}")
     Integer customerId;
 
+    @Value("${appId}")
+    String appId;
+
+    @Value("${appSecret}")
+    String appSecret;
+
+    @Value("${apiUrl}")
+    String apiUrl;
+
+
+    private RestTemplate restTemplate = new RestTemplate();
+
+
+    @Autowired
+    private MeterReadRecordRepository repository;
+
 
     @Override
-    public void getReadingMeter(LocalDate readingTime) {
+    public void executeReadingMeter() {
+        String timeStamp=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date(System.currentTimeMillis()));
+        Integer date = Integer.valueOf(LocalDate.now().plusDays(-1).format(DateTimeFormatter.ofPattern("yyyyMMdd")));
+
+        List<MeterReadRecord> list = repository.findByCustomerIdAndReadDateAndReadStatus(customerId,date,"2");
+
+
+        if (list != null && list.size() > 0) {
+            log.info("meterReadRecord size={}",list.size());
+            for (MeterReadRecord meterReadRecord : list) {
+                //log.info("meterReadRecord={}",meterReadRecord);
+                FileData data = new FileData();
+                data.setMeterAddr(meterReadRecord.getMeterNo());
+                data.setMeterTypeId(24);
+                data.setReadNumber(Double.valueOf(meterReadRecord.getLastValid()));
+                data.setReadDate(new Date());
+                data.setMeterTime(meterReadRecord.getReadTime());
+                data.setValveState(convertValveState(meterReadRecord.getValveState()));
+                request(data,timeStamp);
+            }
+
+        }
+    }
 
+    private Integer convertValveState(Integer valveState){
+        if (valveState != null) {
+            if(valveState != 0){
+                return  1;
+            }else {
+                return  2;
+            }
+        }
+        return 1;
     }
 
-    private String getAccessToken(String dateTime){
-        String appId="hx123";
-        String appSecret="1842e6e6725c5589";
-        return appId + appSecret + dateTime;
+    private String getAccessToken(String timeStamp){
+        //使用 MD5 加密(appId + appSecret + 时间戳)
+        return Md5Util.MD5(appId + appSecret + timeStamp);
     }
 
-    private String getAuthorization(String dateTime){
-        String appId="hx123";
-        String key = appId + ":" + dateTime;
+    private String getAuthorization(String timeStamp){
+        //使用 Base64 编码(appId + 冒号(英文) + 时间戳)
+        String key = appId + ":" + timeStamp;
         try {
             return Base64.getEncoder().encodeToString(key.getBytes("utf-8"));
         } catch (UnsupportedEncodingException e) {
@@ -46,5 +103,28 @@ public class ReadingMeterServiceImpl implements ReadingMeterService {
         return null;
     }
 
+    private void request(FileData data,String timeStamp){
+
+
+        String tokenUrl = apiUrl + "/api/meters/UploadData";
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        headers.add("AccessToken", getAccessToken(timeStamp));
+        headers.add("Authorization", getAuthorization(timeStamp));
+
+        String content = JSON.toJSONString(data);
+
+        log.info("content={}",content);
+        HttpEntity<String> request = new HttpEntity<>(content,headers);
+
+        ResponseEntity<String> responseEntity = null;
+        try {
+            responseEntity = restTemplate.postForEntity(tokenUrl, request, String.class);
+        }catch (Exception e){
+            log.error("request error e={} {}",e.getMessage(),e);
+        }
+        log.info("responseEntity : {} {}", responseEntity.getStatusCodeValue(),responseEntity.getBody());
+    }
+
 
 }

+ 89 - 0
meter-reading-suntront/src/main/java/com/zoniot/suntront/util/Md5Util.java

@@ -0,0 +1,89 @@
+package com.zoniot.suntront.util;
+
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.MessageDigest;
+
+/**
+ * @Author wangli
+ * 2020-04-17 15:44
+ * @Description
+ * @Version 1.0
+ */
+public class Md5Util {
+    static final char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7',
+            '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
+
+    /**
+     * 生成MD5码
+     *
+     * @param plainText
+     *            要加密的字符串
+     * @return md5值
+     */
+    public final static String MD5(String plainText) {
+        try {
+            byte[] strTemp = plainText.getBytes("UTF-8");
+            MessageDigest mdTemp = MessageDigest.getInstance("MD5");
+            mdTemp.update(strTemp);
+            byte[] md = mdTemp.digest();
+            int j = md.length;
+            char str[] = new char[j * 2];
+            int k = 0;
+            for (int i = 0; i < j; i++) {
+                byte byte0 = md[i];
+                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+                str[k++] = hexDigits[byte0 & 0xf];
+            }
+            return new String(str);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /**
+     * 生成MD5码
+     *
+     * @param plainText
+     *            要加密的字符串
+     * @return md5值
+     */
+    public final static String MD5(byte[] plainText) {
+        try {
+            byte[] strTemp = plainText;
+            MessageDigest mdTemp = MessageDigest.getInstance("MD5");
+            mdTemp.update(strTemp);
+            byte[] md = mdTemp.digest();
+            int j = md.length;
+            char str[] = new char[j * 2];
+            int k = 0;
+            for (int i = 0; i < j; i++) {
+                byte byte0 = md[i];
+                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+                str[k++] = hexDigits[byte0 & 0xf];
+            }
+            return new String(str);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+
+
+
+
+    /**
+     *
+     * @param params
+     * @return
+     */
+    public static String MD5(String... params) {
+        StringBuilder sb = new StringBuilder();
+        for (String param : params) {
+            sb.append(param);
+        }
+        return MD5(sb.toString());
+    }
+
+}

+ 26 - 21
meter-reading-suntront/src/main/resources/application-dev.properties

@@ -4,25 +4,25 @@ server.port=8080
 logging.level.root=info
 logging.file.path=C:/logs/reading-meter
 
-spring.datasource.driver-class-name=com.mysql.jdbc.Driver
-spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
-spring.datasource.url=jdbc:mysql://114.135.61.188:33306/smart_city_sit_6_10?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
-spring.datasource.username=root
-spring.datasource.password=100Zone@123
-spring.datasource.druid.initial-size=5
-spring.datasource.druid.min-idle=5
-spring.datasource.druid.max-active=20
-spring.datasource.druid.max-wait=60000
-spring.datasource.druid.time-between-eviction-runs-millis=60000
-spring.datasource.druid.min-evictable-idle-time-millis=300000
-spring.datasource.druid.validation-query=SELECT 1
-spring.datasource.druid.test-while-idle=true
-spring.datasource.druid.test-on-borrow=true
-spring.datasource.druid.test-on-return=false
-spring.datasource.druid.pool-prepared-statements=true
-spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
-spring.datasource.druid.filters=stat,wall
-spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+#spring.datasource.url=jdbc:mysql://114.135.61.188:33306/smart_city_sit_6_10?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
+#spring.datasource.username=root
+#spring.datasource.password=100Zone@123
+#spring.datasource.druid.initial-size=5
+#spring.datasource.druid.min-idle=5
+#spring.datasource.druid.max-active=20
+#spring.datasource.druid.max-wait=60000
+#spring.datasource.druid.time-between-eviction-runs-millis=60000
+#spring.datasource.druid.min-evictable-idle-time-millis=300000
+#spring.datasource.druid.validation-query=SELECT 1
+#spring.datasource.druid.test-while-idle=true
+#spring.datasource.druid.test-on-borrow=true
+#spring.datasource.druid.test-on-return=false
+#spring.datasource.druid.pool-prepared-statements=true
+#spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
+#spring.datasource.druid.filters=stat,wall
+#spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
 
 # mybatis_config
 mybatis.mapper-locations=classpath*:mapper/*.xml
@@ -33,12 +33,17 @@ mybatis.configuration.use-column-label=true
 
 spring.jackson.time-zone=GMT+8
 
-customerId=46
-water-cloud-url=http://114.135.61.188:58080
+customerId=5
 
+apiUrl=http://218.29.74.138:15383
 appId=hx123
 appSecret=1842e6e6725c5589
 
 
+#mongodb url
+spring.data.mongodb.uri=mongodb://114.135.61.188:17017/meter-reading-database
+logging.level.org.springframework.data.mongodb.core=DEBUG
+
+
 
 

+ 9 - 2
meter-reading-suntront/src/main/resources/application-prd.properties

@@ -33,5 +33,12 @@ mybatis.configuration.use-column-label=true
 
 spring.jackson.time-zone=GMT+8
 
-customerId=79
-water-cloud-url=http://39.108.175.9:8090
+customerId=46
+
+apiUrl=http://218.29.74.138:15383
+appId=hx123
+appSecret=1842e6e6725c5589
+
+#mongodb url
+spring.data.mongodb.uri=mongodb://water:zcxk100@114.135.61.189:27071/meter-reading-database?authSource=meter-reading-database
+logging.level.org.springframework.data.mongodb.core=DEBUG

+ 8 - 1
meter-reading-suntront/src/main/resources/application-sit.properties

@@ -34,4 +34,11 @@ mybatis.configuration.use-column-label=true
 spring.jackson.time-zone=GMT+8
 
 customerId=46
-water-cloud-url=http://114.135.61.188:58080
+
+apiUrl=http://218.29.74.138:15383
+appId=hx123
+appSecret=1842e6e6725c5589
+
+#mongodb url
+spring.data.mongodb.uri=mongodb://114.135.61.188:17017/meter-reading-database
+logging.level.org.springframework.data.mongodb.core=DEBUG