Browse Source

Merge remote-tracking branch 'origin/20210716' into 20210716

lihui001 3 years ago
parent
commit
80d7c5c170
22 changed files with 531 additions and 129 deletions
  1. 17 0
      zoniot-common/zoniot-core-utils/src/main/java/com/zcxk/core/utils/NumberDistri.java
  2. 0 3
      zoniot-common/zoniot-core-utils/src/main/java/com/zcxk/core/utils/export/EasyExcelUtil.java
  3. 72 49
      zoniot-rmcp/zoniot-rmcp-alarm/src/main/java/com/bz/rmcp/alarm/service/impl/DeviceAlarmServiceImpl.java
  4. 18 6
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/readmeter/WaterMeterDto.java
  5. 3 3
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/MeterReadRecordMapper.java
  6. 1 1
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/DeviceMapper.xml
  7. 3 3
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/MeterReadRecordMapper.xml
  8. 1 1
      zoniot-rmcp/zoniot-rmcp-dap/src/main/java/com/bz/rmcp/dap/service/DeviceDataService.java
  9. 5 10
      zoniot-rmcp/zoniot-rmcp-dap/src/main/java/com/bz/rmcp/dap/service/impl/DeviceDataServiceImpl.java
  10. 1 0
      zoniot-rmcp/zoniot-rmcp-web/pom.xml
  11. 88 0
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/controller/TestController.java
  12. 25 3
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/impl/DeviceDataServiceImpl.java
  13. BIN
      zoniot-rmcp/zoniot-rmcp-web/src/main/resources/excel/deviceTemplate_V2.1.xlsx
  14. 5 0
      zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/common/Constants.java
  15. 31 0
      zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/config/ResourceServerConfig.java
  16. 74 0
      zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/config/SwaggerConfig.java
  17. 33 0
      zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/controller/TestController.java
  18. 52 13
      zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/jobs/MeterReadJob.java
  19. 93 28
      zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/service/impl/MeterReadRecordServiceImpl.java
  20. 4 4
      zoniot-rmcp/zoniot-xxljob-client/src/main/resources/application-dev.properties
  21. 2 2
      zoniot-rmcp/zoniot-xxljob-client/src/main/resources/application-sit.properties
  22. 3 3
      zoniot-rmcp/zoniot-xxljob-client/src/main/resources/logback-spring.xml

+ 17 - 0
zoniot-common/zoniot-core-utils/src/main/java/com/zcxk/core/utils/NumberDistri.java

@@ -1,5 +1,7 @@
 package com.zcxk.core.utils;
 
+import cn.hutool.core.util.NumberUtil;
+
 import java.math.BigDecimal;
 
 /**
@@ -237,4 +239,19 @@ public class NumberDistri {
         return b.setScale(places, BigDecimal.ROUND_HALF_UP).doubleValue();
     }
 
+    /*
+     * @description 比较Integer是否相等
+     * @param num1
+     * @param num2
+     * @return
+     **/
+    public static boolean integerEquals(Integer num1, Integer num2){
+        if(num1 == null && num2 == null)return true;
+        if(num1 != null  && num2 != null){
+            return NumberUtil.equals(num1,num2);
+        }else {
+            return false;
+        }
+    }
+
 }

+ 0 - 3
zoniot-common/zoniot-core-utils/src/main/java/com/zcxk/core/utils/export/EasyExcelUtil.java

@@ -89,9 +89,6 @@ public  class EasyExcelUtil {
         response.addHeader("Cache-Control", "max-age=0");
 
 
-
-
-
         List<List<String>> headList = new ArrayList<>();
         head.forEach(h -> headList.add(Collections.singletonList(h)));
 

+ 72 - 49
zoniot-rmcp/zoniot-rmcp-alarm/src/main/java/com/bz/rmcp/alarm/service/impl/DeviceAlarmServiceImpl.java

@@ -1,10 +1,13 @@
 package com.bz.rmcp.alarm.service.impl;
 import java.time.LocalDateTime;
 
+import cn.hutool.core.collection.CollUtil;
+
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
-import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.text.CharSequenceUtil;
+
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.bz.rmcp.alarm.common.Constants;
@@ -22,11 +25,10 @@ import com.zcxk.rmcp.core.dao.AlarmTypeMapper;
 import com.zcxk.rmcp.core.dao.DeviceAlarmMapper;
 import com.zcxk.rmcp.core.dao.DeviceAlarmRuleMapper;
 import com.zcxk.rmcp.core.dao.DeviceMapper;
-import com.zcxk.rmcp.core.entity.AlarmType;
+
 import com.zcxk.rmcp.core.entity.Device;
 import com.zcxk.rmcp.core.entity.DeviceAlarm;
-import com.zcxk.rmcp.core.entity.DeviceAlarmRule;
-import com.zcxk.rmcp.core.mongo.DeviceData;
+
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -77,10 +79,10 @@ public class DeviceAlarmServiceImpl implements DeviceAlarmService {
         updateDevice(device,isAlarm);
     }
 
-    /*
+    /**
      * @description 判断设备告警
      * @param device
-     * @param measuringMap
+     * @param measureDataDto
      * @return
      * @author linqingwei
      **/
@@ -102,7 +104,9 @@ public class DeviceAlarmServiceImpl implements DeviceAlarmService {
             AlarmRulePageDto rulePageDto = new AlarmRulePageDto();
             rulePageDto.setAlarmTypeId(alarmType.getId());
             List<AlarmRuleDto> ruleList = deviceAlarmRuleMapper.selectList(rulePageDto);
-            if(ruleList.isEmpty())break;
+            if(ruleList.isEmpty()){
+                break;
+            }
             for (AlarmRuleDto rule : ruleList) {
                 String measuringCode = rule.getMeasuringCode();
 
@@ -129,7 +133,7 @@ public class DeviceAlarmServiceImpl implements DeviceAlarmService {
                 deviceAlarm.setLastAlarmTime(DateUtil.asLocalDateTime(measureDataDto.getReceiveDate()));
                 deviceAlarm.setAlarmCount(1);
                 deviceAlarm.setHandleStatus(0);
-                deviceAlarm.setMeasuringData(StrUtil.sub(measuringData.toString(), 0, -1));
+                deviceAlarm.setMeasuringData(CharSequenceUtil.sub(measuringData.toString(), 0, -1));
                 deviceAlarm.setStatus(StatusEnum.OK.getCode());
                 deviceAlarm.setCreateBy(Constants.SYS_FLAG);
                 deviceAlarm.setUpdateBy(Constants.SYS_FLAG);
@@ -143,7 +147,7 @@ public class DeviceAlarmServiceImpl implements DeviceAlarmService {
         return deviceAlarmList;
     }
 
-    /*
+    /**
      * @description 更新设备
      * @param device
      * @param isAlarm
@@ -159,7 +163,7 @@ public class DeviceAlarmServiceImpl implements DeviceAlarmService {
         deviceMapper.updateByAlarm(update);
     }
 
-    /*
+    /**
      * @description 查看最后一次上报的告警信息
      * @param device
      * @return
@@ -168,8 +172,57 @@ public class DeviceAlarmServiceImpl implements DeviceAlarmService {
     protected List<DeviceAlarm> getDeviceLastErrorList(Device device) {
         return deviceAlarmMapper.getLastDeviceErrorList(device.getId());
     }
+    /**无最新告警记录,将告警记录直接入库
+     * @param rtnList
+     * @description
+     * @author hym
+     * @updateTime 2021/8/20 17:45
+     * @return void
+     * @throws
+     */
+   private boolean generateAlarmRecordsDirectly(List<DeviceAlarm> rtnList,List<DeviceAlarm> lastErrorList,
+                                      List<DeviceAlarm> deviceAlarmList,Device device){
+        //不能直接生成告警记录标识
+        boolean flag=true;
+        if(CollUtil.isEmpty(lastErrorList)) {
+            flag=false;
+            // 无最新告警记录,将告警记录直接入库
+            for(DeviceAlarm  de :deviceAlarmList ) {
+                rtnList.add(saveNewDeviceAlarm(device,de));
+            }
+        }
+        return flag;
+    }
+   private void generateAlarmRecordsAfterComparison(List<DeviceAlarm> rtnList,List<DeviceAlarm> lastErrorList,
+                                             List<DeviceAlarm> deviceAlarmList,Device device){
+        for(DeviceAlarm de : deviceAlarmList) {
+            boolean isSame = false ;
+            DeviceAlarm originalError = null ;
+            for( DeviceAlarm lde : lastErrorList) {
+                if(lde.getAlarmTypeId().equals(de.getAlarmTypeId())) {
+                    isSame = true ;
+                    originalError = lde;
+                    break ;
+                }
+            }
+            if(!isSame) {
+                // 告警类型与上次告警类型不同,则直接新增记录
+                rtnList.add(saveNewDeviceAlarm(device,de));
+            }
+            else {
+                // 告警类型与上次告警类型相同
+                if(device.getLastAlarmDate()!=null){
+                    //上次有告警则更新
+                    rtnList.add(updateExistDeviceAlarm(de, originalError));
+                }else {
+                    //上次无告警则新增
+                    rtnList.add(saveNewDeviceAlarm(device,de));
+                }
 
-    /*
+            }
+        }
+    }
+    /**
      * @description 处理告警
      * @param device
      * @param deviceAlarmList
@@ -181,49 +234,19 @@ public class DeviceAlarmServiceImpl implements DeviceAlarmService {
         List<DeviceAlarm> rtnList = new ArrayList<>();
         // 1,查询最新告警记录
         List<DeviceAlarm> lastErrorList = getDeviceLastErrorList(device);
-        if(deviceAlarmList !=null && !deviceAlarmList.isEmpty() ) {
-            if(lastErrorList== null || lastErrorList.isEmpty()) {
-                // 无最新告警记录,将告警记录直接入库
-                for(DeviceAlarm  de :deviceAlarmList ) {
-                    rtnList.add(saveNewDeviceAlarm(device,de));
-                }
-            }
-            else {
+
+            if(CollUtil.isNotEmpty(deviceAlarmList)&&
+                    generateAlarmRecordsDirectly(rtnList,lastErrorList,deviceAlarmList,device)) {
                 // 2,有最新告警记录,对比最新告警的告警类型是否同新生成告警记录的告警类型
-                for(DeviceAlarm de : deviceAlarmList) {
-                    boolean isSame = false ;
-                    DeviceAlarm originalError = null ;
-                    for( DeviceAlarm lde : lastErrorList) {
-                        if(lde.getAlarmTypeId().equals(de.getAlarmTypeId())) {
-                            isSame = true ;
-                            originalError = lde;
-                            break ;
-                        }
-                    }
-                    if(!isSame) {
-                        // 告警类型与上次告警类型不同,则直接新增记录
-                        rtnList.add(saveNewDeviceAlarm(device,de));
-                    }
-                    else {
-                        // 告警类型与上次告警类型相同
-                        if(device.getLastAlarmDate()!=null){
-                            //上次有告警则更新
-                            rtnList.add(updateExistDeviceAlarm(de, originalError));
-                        }else {
-                            //上次无告警则新增
-                            rtnList.add(saveNewDeviceAlarm(device,de));
-                        }
-
-                    }
-                }
+                generateAlarmRecordsAfterComparison(rtnList,lastErrorList,deviceAlarmList,device);
             }
-        }
+
         log.info("end handleDeviceAlarm deviceAlarmList : {}",JSON.toJSONString(deviceAlarmList));
         return !rtnList.isEmpty();
     }
 
 
-    /*
+    /**
      * @description 更新告警
      * @param newDeviceAlarm
      * @param oldDeviceAlarm
@@ -269,7 +292,7 @@ public class DeviceAlarmServiceImpl implements DeviceAlarmService {
         return deviceAlarm;
     }
 
-    /*
+    /**
      * @description 判断是否告警
      * @param rule
      * @param measuringValue
@@ -287,7 +310,7 @@ public class DeviceAlarmServiceImpl implements DeviceAlarmService {
         return parser.parseExpression(rule.getExpression()).getValue(context, Boolean.class);
     }
 
-    /*
+    /**
      * @description 获取测点数据
      * @param value
      * @param code

+ 18 - 6
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/readmeter/WaterMeterDto.java

@@ -3,6 +3,7 @@ package com.zcxk.rmcp.api.dto.readmeter;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zcxk.core.utils.NumberDistri;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.apache.commons.lang3.StringUtils;
@@ -106,11 +107,22 @@ public class WaterMeterDto implements Comparable<WaterMeterDto> {
 
     @Override
     public int compareTo(WaterMeterDto dto) {
-        if(!StrUtil.equals(tenantId,dto.tenantId))return 0;
-        if(!NumberUtil.equals(categoryId,dto.categoryId))return 0;
-        if(!NumberUtil.equals(companyOrgId,dto.companyOrgId))return 0;
-        if(!NumberUtil.equals(deptOrgId,dto.deptOrgId))return 0;
-
-        return 1;
+        if(!StrUtil.equals(tenantId,dto.tenantId))return -1;
+        if(!NumberDistri.integerEquals(categoryId,dto.categoryId))return -1;
+        if(!NumberDistri.integerEquals(companyOrgId,dto.companyOrgId))return -1;
+        if(!StrUtil.equals(companyName,dto.companyName))return -1;
+        if(!NumberDistri.integerEquals(deptOrgId,dto.deptOrgId))return -1;
+        if(!StrUtil.equals(deptName,dto.deptName))return -1;
+        if(!NumberDistri.integerEquals(communityId,dto.communityId))return -1;
+        if(!StrUtil.equals(communityName,dto.communityName))return -1;
+        if(!StrUtil.equals(deviceNo,dto.deviceNo))return -1;
+        if(!StrUtil.equals(meterNo,dto.meterNo))return -1;
+        if(!StrUtil.equals(fileNo,dto.fileNo))return -1;
+        if(!StrUtil.equals(address,dto.address))return -1;
+        if(!NumberDistri.integerEquals(productId,dto.productId))return -1;
+        if(!StrUtil.equals(productName,dto.productName))return -1;
+        if(!StrUtil.equals(productModel,dto.productModel))return -1;
+        if(!StrUtil.equals(manufacturerName,dto.manufacturerName))return -1;
+        return 0;
     }
 }

+ 3 - 3
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/MeterReadRecordMapper.java

@@ -23,11 +23,11 @@ public interface MeterReadRecordMapper {
 
     int todayReadRateJobHandler(@Param("readDate") Date readDay);
 
-    int yesterdayReadRate(@Param("readDate") Date readDate);
+    int yesterdayReadRate(@Param("readDate") Integer readDate);
 
-    int recent7daysReadRate(@Param("readDate") Date readDate);
+    int recent7daysReadRate(@Param("readDate") Integer readDate);
 
-    int lastMonthReadRate(@Param("readDate") Date readDate);
+    int lastMonthReadRate(@Param("readDate") Integer readDate);
 
     int updateTodayReadRate(@Param("device") Device device, @Param("readDate") Date readDate);
 }

+ 1 - 1
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/DeviceMapper.xml

@@ -764,7 +764,7 @@
     left join rmcp_org rod on (rod.ID = rd.dept_org_id)
     left join rmcp_community rc on (rc.id = rd.community_id)
     where rd.status = 1
-    order by rd.id asc
+    order by rd.id asc limit #{startIndex},#{pageSize}
   </select>
 
   <select id="queryDeviceInfoList" resultType="com.zcxk.rmcp.api.vo.DeviceVo">

+ 3 - 3
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/MeterReadRecordMapper.xml

@@ -270,7 +270,7 @@
   <insert id="yesterdayReadRate">
     insert into rmcp_stat_meter_read_rate_by_community_yesterday (stat_day,tenant_id,category_id,company_org_id,dept_org_id,community_id,device_count,read_times,real_read_times,un_read_times,read_rate,create_date,update_date)
     select
-            DATE_FORMAT( date_add(#{readDate}, interval -1 day), '%Y%m%d' ),
+            DATE_FORMAT( #{readDate}, '%Y%m%d' ),
             tenant_id,
             category_id,
             company_org_id,
@@ -286,14 +286,14 @@
     from
             rmcp_meter_read_record
     where
-            read_date = DATE_FORMAT( date_add(#{readDate}, interval -1 day), '%Y%m%d' )
+            read_date = DATE_FORMAT( #{readDate}, '%Y%m%d' )
     group by tenant_id,category_id,company_org_id,dept_org_id,community_id;
   </insert>
 
   <insert id="recent7daysReadRate">
     insert into rmcp_stat_meter_read_rate_by_community_7day (stat_day,tenant_id,category_id,company_org_id,dept_org_id,community_id,device_count,read_times,real_read_times,un_read_times,read_rate,create_date,update_date)
     select
-            DATE_FORMAT( date_add(#{readDate}, interval -1 day), '%Y%m%d' ),
+            DATE_FORMAT( #{readDate}, '%Y%m%d' ),
             tenant_id,
             category_id,
             company_org_id,

+ 1 - 1
zoniot-rmcp/zoniot-rmcp-dap/src/main/java/com/bz/rmcp/dap/service/DeviceDataService.java

@@ -13,5 +13,5 @@ public interface DeviceDataService {
      * @return int
      * @author linqingwei
      **/
-    int saveDeviceData(DeviceOrigDataDTO data);
+    void saveDeviceData(DeviceOrigDataDTO data);
 }

+ 5 - 10
zoniot-rmcp/zoniot-rmcp-dap/src/main/java/com/bz/rmcp/dap/service/impl/DeviceDataServiceImpl.java

@@ -1,4 +1,5 @@
 package com.bz.rmcp.dap.service.impl;
+import cn.hutool.core.map.MapUtil;
 import com.bz.rmcp.dap.common.Constants;
 import com.zcxk.rmcp.api.dto.product.MeasureDataDto;
 import com.zcxk.rmcp.api.dto.readmeter.MeterData;
@@ -65,7 +66,7 @@ public class DeviceDataServiceImpl implements DeviceDataService {
     private MqMessageSender mqMessageSender;
 
     @Override
-    public int saveDeviceData(DeviceOrigDataDTO data) {
+    public void saveDeviceData(DeviceOrigDataDTO data) {
         log.info("begin saveDeviceData ,data = {}" , JSON.toJSONString(data));
         Device device = deviceMapper.findByDeviceNo(data.getDeviceNo());
         if (device != null) {
@@ -85,7 +86,6 @@ public class DeviceDataServiceImpl implements DeviceDataService {
             mqMessageSender.sendDeviceDataMsg(measureDataDto);
         }
         log.info("end saveDeviceData");
-        return 0;
     }
 
     /*
@@ -283,11 +283,7 @@ public class DeviceDataServiceImpl implements DeviceDataService {
      * @author linqingwei
      **/
     private String convertReadData(Map<String, Object> measureMap,Product product){
-        Object temp = measureMap.get(product.getReadingMeasuringCode());
-        if (temp != null) {
-            return measureMap.get(product.getReadingMeasuringCode()).toString();
-        }
-        return null;
+        return MapUtil.getStr(measureMap,product.getReadingMeasuringCode());
     }
 
     /*
@@ -298,9 +294,8 @@ public class DeviceDataServiceImpl implements DeviceDataService {
      * @author linqingwei
      **/
     private Integer convertValveStatus(Map<String, Object> measureMap,Product product){
-        Object temp = measureMap.get(product.getValveMeasuringCode());
-        if (temp != null) {
-            Integer valve =  Integer.valueOf((String) measureMap.get(product.getValveMeasuringCode()));
+        Integer valve = MapUtil.getInt(measureMap,product.getValveMeasuringCode());
+        if (valve != null) {
             if(valve == 0)  return ValveStatusEnum.ON.getCode();
             if(valve == 1)  return ValveStatusEnum.OFF.getCode();
             return ValveStatusEnum.ABNORMAL.getCode();

+ 1 - 0
zoniot-rmcp/zoniot-rmcp-web/pom.xml

@@ -89,6 +89,7 @@
                     <include>**/*.yml</include>
                     <include>**/*.xml</include>
                     <include>**/*.tld</include>
+                    <include>**/*.xlsx</include>
                 </includes>
                 <filtering>false</filtering>
             </resource>

+ 88 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/controller/TestController.java

@@ -0,0 +1,88 @@
+package com.zcxk.rmcp.web.controller;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.RandomUtil;
+import com.zcxk.core.common.util.SnowflakeIdWorker;
+import com.zcxk.rmcp.core.dao.DeviceMapper;
+import com.zcxk.rmcp.core.entity.Device;
+import io.swagger.annotations.Api;
+import org.apache.commons.collections4.ListUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * @author linqingwei
+ * @date 2021-08-17 9:48
+ */
+@Controller
+@ResponseBody
+@RequestMapping("/test")
+@Api(tags = "cs")
+public class TestController {
+
+    @Autowired
+    private SnowflakeIdWorker idWorker;
+    @Autowired
+    private DeviceMapper deviceMapper;
+
+    @PostMapping("test")
+    public void addDevice(){
+
+
+        List<Device> list = new ArrayList<>();
+        for (int i = 0; i < 200000; i++) {
+            Device device = new Device();
+            device.setId(idWorker.nextId());
+            device.setTenantId("487170559310123008");
+            device.setCategoryId(2);
+            device.setCompanyOrgId(266);
+            device.setDeptOrgId(0);
+            device.setProductId(2);
+            device.setDeviceNo(RandomUtil.randomString(10));
+            device.setMeterNo(RandomUtil.randomString(10));
+            device.setFileNo(RandomUtil.randomString(10));
+            device.setSealNo("");
+            device.setDeviceStatus(RandomUtil.randomInt(1,4));
+            device.setAddress(RandomUtil.randomString(10));
+            device.setLng(new BigDecimal("0"));
+            device.setLat(new BigDecimal("0"));
+            device.setCommunityId(RandomUtil.randomInt(1,3));
+            device.setReadData(RandomUtil.randomNumbers(3));
+            device.setValveStatus(1);
+            device.setLastReceiveTime(LocalDateTime.now());
+            device.setUserName("");
+            device.setUserPhone("");
+            device.setIdCard("");
+            device.setOldEndDegree("");
+            device.setOldImageUrl("");
+            device.setLastAlarmDate(LocalDateTime.now());
+            device.setOfflineDate(LocalDateTime.now());
+            device.setAcceptDate(LocalDateTime.now());
+            device.setInstallDate(LocalDateTime.now());
+            device.setIsInstall(0);
+            device.setIsAccept(0);
+            device.setStatus(1);
+            device.setCreateBy("system");
+            device.setCreateDate(LocalDateTime.now());
+            device.setUpdateBy("system");
+            device.setUpdateDate(LocalDateTime.now());
+            list.add(device);
+        }
+        List<List<Device>> subList2 =  ListUtil.split(list, 5000);
+
+        for (List<Device> devices : subList2) {
+            System.out.println("===========");
+            deviceMapper.batchInsert(devices);
+        }
+
+
+    }
+}

+ 25 - 3
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/impl/DeviceDataServiceImpl.java

@@ -3,8 +3,10 @@ package com.zcxk.rmcp.web.service.impl;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
+import com.zcxk.core.common.exception.BusinessException;
 import com.zcxk.core.utils.export.EasyExcelUtil;
 import com.zcxk.rmcp.api.dto.device.DeviceDataDto;
+import com.zcxk.rmcp.api.enums.RmcpErrorEnum;
 import com.zcxk.rmcp.api.vo.DeviceDataVo;
 import com.zcxk.rmcp.api.vo.MeasuringPointVo;
 import com.zcxk.rmcp.api.vo.ProductMeasuringDictVo;
@@ -73,6 +75,13 @@ public class DeviceDataServiceImpl implements DeviceDataService {
                 deviceDataDto.getEndDate());
     }
 
+    /*
+     * @description 导出Excel
+     * @param deviceDataDto
+     * @param httpServletResponse
+     * @return
+     * @author linqingwei
+     **/
     @Override
     public void getDataExcel(DeviceDataDto deviceDataDto, HttpServletResponse httpServletResponse) {
         List<DeviceDataItem> list = deviceDataDao.queryDeviceDataItem(deviceDataDto.getDeviceId(),deviceDataDto.getStartDate(),
@@ -91,7 +100,7 @@ public class DeviceDataServiceImpl implements DeviceDataService {
                 List<Object> item = new ArrayList<>();
                 item.add(DateUtil.format(new Date(deviceDataItem.getReceiveTime()), DatePattern.NORM_DATETIME_PATTERN));
                 for (MeasuringPointVo vo : measuringList) {
-                    item.add(getRowsValue(vo,deviceDataItem.getMeasureData()));
+                    item.add(getMeasuringValue(vo,deviceDataItem.getMeasureData()));
                 }
                 dataList.add(item);
             }
@@ -99,12 +108,19 @@ public class DeviceDataServiceImpl implements DeviceDataService {
 
             EasyExcelUtil.excelDynamicWrite(httpServletResponse,"历史数据",head,dataList);
         } catch (Exception e) {
-            e.printStackTrace();
+            throw BusinessException.builder(RmcpErrorEnum.RMCP_DOWNLOAD_ERROR);
         }
 
     }
 
-    private Object getRowsValue(MeasuringPointVo vo, Map<String, Object> measureData) {
+    /*
+     * @description 获取测点值
+     * @param vo
+     * @param measureData
+     * @return
+     * @author linqingwei
+     **/
+    private Object getMeasuringValue(MeasuringPointVo vo, Map<String, Object> measureData) {
 
         String value = MapUtil.getStr(measureData,vo.getMeasuringCode());
         if (value != null) {
@@ -117,6 +133,12 @@ public class DeviceDataServiceImpl implements DeviceDataService {
 
     }
 
+    /*
+     * @description 获取表头
+     * @param measuringList
+     * @return
+     * @author linqingwei
+     **/
     private List<String> getHeadList(List<MeasuringPointVo> measuringList){
         List<String> head = new ArrayList<>();
         head.add("上报时间");

BIN
zoniot-rmcp/zoniot-rmcp-web/src/main/resources/excel/deviceTemplate_V2.1.xlsx


+ 5 - 0
zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/common/Constants.java

@@ -15,6 +15,11 @@ public class Constants {
      */
     public static final String PREFIX_CACHE_FLAG = "last-meter-data:";
 
+    /**
+     * 设备最后数据缓存前缀
+     */
+    public static final String PREFIX_DEVICE_CACHE_FLAG = "last-device-data:";
+
     /**
      * 抄表记录表名称
      */

+ 31 - 0
zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/config/ResourceServerConfig.java

@@ -0,0 +1,31 @@
+package com.zcxk.xxljob.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+
+/**
+ * @author Andy
+ * @version V1.0
+ **/
+@Configuration
+@EnableResourceServer
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http
+            .csrf().disable()
+            .requestMatchers().antMatchers("/**")
+            .and()
+            .authorizeRequests()
+            .antMatchers("/swagger-ui.html","/webjars/**", "/swagger-resources/**",
+                    "/test/**",
+                   "/v2/**")
+            .permitAll() //配置不需要身份认证的请求路径
+           // .anyRequest().authenticated() //其他所有访问路径都需要身份认证
+            .and()
+            .httpBasic();
+    }
+}

+ 74 - 0
zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/config/SwaggerConfig.java

@@ -0,0 +1,74 @@
+package com.zcxk.xxljob.config;
+
+import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.ApiKey;
+import springfox.documentation.service.AuthorizationScope;
+import springfox.documentation.service.SecurityReference;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.List;
+
+import static com.google.common.collect.Lists.newArrayList;
+
+/**
+ * @author Andy
+ * @version V1.0
+ **/
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+    @Bean
+    public Docket api() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .ignoredParameterTypes(BasicErrorController.class)
+                .groupName("api")
+                .select()
+                .apis(RequestHandlerSelectors.any())
+                .paths(PathSelectors.any())
+                .build()
+                .apiInfo(apiInfo())
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+    }
+
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title("计量集抄Api")
+                .description("计量集抄")
+                .version("1.0")
+                .build();
+    }
+
+    private List<ApiKey> securitySchemes() {
+        return newArrayList(
+                new ApiKey("Authorization", "Authorization", "header"));
+    }
+
+    private List<SecurityContext> securityContexts() {
+        return newArrayList(
+                SecurityContext.builder()
+                        .securityReferences(defaultAuth())
+                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
+                        .build()
+        );
+    }
+
+    List<SecurityReference> defaultAuth() {
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        return newArrayList(
+                new SecurityReference("Authorization", authorizationScopes));
+    }
+
+}

+ 33 - 0
zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/controller/TestController.java

@@ -0,0 +1,33 @@
+package com.zcxk.xxljob.controller;
+
+import com.zcxk.xxljob.jobs.MeterReadJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author linqingwei
+ * @date 2021-08-20 11:11
+ */
+@Slf4j
+@RequestMapping("test")
+@RestController
+public class TestController {
+
+    @Autowired
+    private MeterReadJob meterReadJob;
+
+    @PostMapping("readMeterTest")
+    public String readMeterTest(){
+        meterReadJob.meterReadJobHandler(null);
+        return "ok";
+    }
+
+    @PostMapping("syncMeterReadJobHandler")
+    public String syncMeterReadJobHandler(){
+        meterReadJob.syncMeterReadJobHandler(null);
+        return "ok";
+    }
+}

+ 52 - 13
zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/jobs/MeterReadJob.java

@@ -28,9 +28,15 @@ public class MeterReadJob {
     @Autowired
     private MeterReadRecordService meterReadRecordService;
 
+    /*
+     * @description 生成明天未抄记录
+     * @param param
+     * @return
+     * @author linqingwei
+     **/
     @XxlJob("meterReadJobHandler")
     public ReturnT<String> meterReadJobHandler(String param) {
-        XxlJobLogger.log("XXL-JOB, Meter Read Job.Param = {}",param);
+        XxlJobLogger.log("XXL-JOB,begin Meter Read Job.Param = {}",param);
 
 
         Map<String,Object> map = null ;
@@ -40,17 +46,20 @@ public class MeterReadJob {
         else{
             map = new HashMap<>(10);
             // more执行明天的未抄记录
-            map.put("readDay",getYesterdayDay());
+            map.put("readDay",getTomorrowDay());
         }
 
         // 分片参数
         ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
+        if (shardingVO == null) {
+            shardingVO = new ShardingUtil.ShardingVO(0,1);
+        }
         XxlJobLogger.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardingVO.getIndex(), shardingVO.getTotal());
 
         // 业务逻辑
         meterReadRecordService.executeCreateMeterUnReadRecord(map,shardingVO.getIndex(), shardingVO.getTotal());
 
-        XxlJobLogger.log("XXL-JOB, Meter Read Job. Job Result = {}");
+        XxlJobLogger.log("XXL-JOB,end Meter Read Job.");
         return ReturnT.SUCCESS;
     }
 
@@ -67,9 +76,15 @@ public class MeterReadJob {
     }
 
 
+    /**
+     * @description 同步昨天抄表记录到MySQL
+     * @param param
+     * @return
+     * @author linqingwei
+     **/
     @XxlJob("syncMeterReadJobHandler")
     public ReturnT<String> syncMeterReadJobHandler(String param) {
-        XxlJobLogger.log("XXL-JOB,syncMeterReadJobHandler.Param = {}",param);
+        XxlJobLogger.log("XXL-JOB,begin syncMeterReadJobHandler.Param = {}",param);
 
 
         Map<String,Object> map = null ;
@@ -87,13 +102,19 @@ public class MeterReadJob {
         // 业务逻辑
         meterReadRecordService.executeSyncMeterReadRecord(map);
 
-        XxlJobLogger.log("XXL-JOB, syncMeterReadJobHandler. Job Result = {}");
+        XxlJobLogger.log("XXL-JOB,end syncMeterReadJobHandler.");
         return ReturnT.SUCCESS;
     }
 
+    /*
+     * @description 生成今天抄表率
+     * @param param
+     * @return
+     * @author linqingwei
+     **/
     @XxlJob("todayReadRateJobHandler")
     public ReturnT<String> todayReadRateJobHandler(String param) {
-        XxlJobLogger.log("XXL-JOB,todayReadRateJobHandler.Param = {}",param);
+        XxlJobLogger.log("XXL-JOB,begin todayReadRateJobHandler.Param = {}",param);
 
 
         Map<String,Object> map = null ;
@@ -108,14 +129,20 @@ public class MeterReadJob {
         // 业务逻辑
         meterReadRecordService.todayReadRateJobHandler(map);
 
-        XxlJobLogger.log("XXL-JOB, recent7daysReadRateJobHandler. Job Result = {}");
+        XxlJobLogger.log("XXL-JOB,end todayReadRateJobHandler. ");
         return ReturnT.SUCCESS;
     }
 
 
+    /*
+     * @description 统计昨天抄表率
+     * @param param
+     * @return
+     * @author linqingwei
+     **/
     @XxlJob("yesterdayReadRateJobHandler")
     public ReturnT<String> yesterdayReadRateJobHandler(String param) {
-        XxlJobLogger.log("XXL-JOB,recent7daysReadRateJobHandler.Param = {}",param);
+        XxlJobLogger.log("XXL-JOB,begin yesterdayReadRateJobHandler.Param = {}",param);
 
 
         Map<String,Object> map = null ;
@@ -130,14 +157,20 @@ public class MeterReadJob {
         // 业务逻辑
         meterReadRecordService.yesterdayReadRateJobHandler(map);
 
-        XxlJobLogger.log("XXL-JOB, recent7daysReadRateJobHandler. Job Result = {}");
+        XxlJobLogger.log("XXL-JOB,end yesterdayReadRateJobHandler. ");
         return ReturnT.SUCCESS;
     }
 
 
+    /*
+     * @description 统计近7天抄表率
+     * @param param
+     * @return
+     * @author linqingwei
+     **/
     @XxlJob("recent7daysReadRateJobHandler")
     public ReturnT<String> recent7daysReadRateJobHandler(String param) {
-        XxlJobLogger.log("XXL-JOB,recent7daysReadRateJobHandler.Param = {}",param);
+        XxlJobLogger.log("XXL-JOB,begin recent7daysReadRateJobHandler.Param = {}",param);
 
 
         Map<String,Object> map = null ;
@@ -153,13 +186,19 @@ public class MeterReadJob {
         meterReadRecordService.recent7daysReadRateJobHandler(map);
 
 
-        XxlJobLogger.log("XXL-JOB, recent7daysReadRateJobHandler. Job Result = {}");
+        XxlJobLogger.log("XXL-JOB,end recent7daysReadRateJobHandler. ");
         return ReturnT.SUCCESS;
     }
 
+    /*
+     * @description 统计上月抄表率
+     * @param param
+     * @return
+     * @author linqingwei
+     **/
     @XxlJob("lastMonthReadRateJobHandler")
     public ReturnT<String> lastMonthReadRateJobHandler(String param) {
-        XxlJobLogger.log("XXL-JOB,recent7daysReadRateJobHandler.Param = {}",param);
+        XxlJobLogger.log("XXL-JOB,begin lastMonthReadRateJobHandler.Param = {}",param);
 
 
         Map<String,Object> map = null ;
@@ -174,7 +213,7 @@ public class MeterReadJob {
         // 业务逻辑
         meterReadRecordService.lastMonthReadRateJobHandler(map);
 
-        XxlJobLogger.log("XXL-JOB, recent7daysReadRateJobHandler. Job Result = {}");
+        XxlJobLogger.log("XXL-JOB,end lastMonthReadRateJobHandler");
         return ReturnT.SUCCESS;
     }
 

+ 93 - 28
zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/service/impl/MeterReadRecordServiceImpl.java

@@ -1,9 +1,11 @@
 package com.zcxk.xxljob.service.impl;
 
+import cn.hutool.core.comparator.CompareUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.PageUtil;
 import com.alibaba.fastjson.JSON;
+import com.xxl.job.core.log.XxlJobLogger;
 import com.zcxk.core.common.enums.StatusEnum;
 import com.zcxk.core.common.util.SnowflakeIdWorker;
 import com.zcxk.core.utils.DateUtil;
@@ -22,15 +24,13 @@ import org.springframework.data.mongodb.core.aggregation.*;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author linqingwei
@@ -48,10 +48,12 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
     private SnowflakeIdWorker idWorker;
     @Resource
     private MeterReadRecordMapper meterReadRecordMapper;
+    @Autowired
+    private RedisTemplate redisTemplate;
 
     @Override
     public void executeCreateMeterUnReadRecord(Map<String, Object> map, int index, int total) {
-        log.info("begin executeCreateMeterUnReadRecord map = {} {} {}",JSON.toJSONString(map),index,total);
+        log.info("begin executeCreateMeterUnReadRecord map = {} index={} total={}",JSON.toJSONString(map),index,total);
         int readDay = MapUtil.getInt(map, "readDay");
         //计算分页
         int deviceTotal = deviceMapper.countWaterMeter();
@@ -59,34 +61,95 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
         int startIndex = index * pageSize;
 
         List<WaterMeterDto> waterMeterList = deviceMapper.findWaterMeterListWithPage(startIndex, pageSize);
+
+        XxlJobLogger.log("waterMeterList size = {}",waterMeterList.size());
         batchCreateMeterUnReadRecord(waterMeterList,readDay);
         log.info("end executeCreateMeterUnReadRecord");
     }
 
     private void batchCreateMeterUnReadRecord(List<WaterMeterDto> waterMeterList, int readDay) {
         if(waterMeterList.isEmpty())return;
+
+        //更新抄表记录
+        updateReadingData(waterMeterList,readDay);
+
+        //保存未抄记录
+        saveUnReadingData(readDay);
+    }
+
+    /**
+     * @description 更新抄表数据
+     * @param waterMeterList
+     * @return
+     * @author linqingwei
+     **/
+    private void updateReadingData(List<WaterMeterDto> waterMeterList,int readDay) {
+
+
+
+        Map<String,WaterMeterDto> lastMap = redisTemplate.opsForHash().entries(Constants.PREFIX_DEVICE_CACHE_FLAG);
+
+        List<MeterReadRecord> meterReadRecordList = new ArrayList<>();
+
         for (WaterMeterDto waterMeter : waterMeterList) {
-            saveReadingData(waterMeter,readDay);
+            WaterMeterDto last = lastMap.get(waterMeter.getId().toString());
+            if (last != null) {
+                //判断当前和最后缓存设备信息,不同则更新
+                if(CompareUtil.compare(waterMeter, last) == -1){
+                    log.info("begin updateReadingData compare waterMeter = {} last = {} {}",JSON.toJSONString(waterMeter),JSON.toJSONString(last),readDay);
+                    Query query = new Query();
+                    query.addCriteria(Criteria.where("deviceId").is(waterMeter.getId()));
+                    Update update = new Update();
+                    if(waterMeter.getTenantId()!=null)update.set("tenantId",waterMeter.getTenantId());
+                    if(waterMeter.getCategoryId()!=null)update.set("categoryId",waterMeter.getCategoryId());
+                    if(waterMeter.getCompanyOrgId()!=null)update.set("companyOrgId",waterMeter.getCompanyOrgId());
+                    if(waterMeter.getCompanyName()!=null)update.set("companyOrgName",waterMeter.getCompanyName());
+                    if(waterMeter.getDeptOrgId()!=null)update.set("deptOrgId",waterMeter.getDeptOrgId());
+                    if(waterMeter.getDeptName()!=null)update.set("deptOrgName",waterMeter.getDeptName());
+                    if(waterMeter.getCommunityId()!=null)update.set("communityId",waterMeter.getCommunityId());
+                    if(waterMeter.getCommunityName()!=null)update.set("communityName",waterMeter.getCommunityName());
+                    if(waterMeter.getDeviceNo()!=null)update.set("deviceNo",waterMeter.getDeviceNo());
+                    if(waterMeter.getAddress()!=null)update.set("location",waterMeter.getAddress());
+                    if(waterMeter.getProductName()!=null)update.set("deviceModel",waterMeter.getManufacturerName()+"/"+waterMeter.getProductName()+"/"+waterMeter.getProductModel());
+                    if(waterMeter.getMeterNo()!=null)update.set("meterNo",waterMeter.getMeterNo());
+                    if(waterMeter.getFileNo()!=null)update.set("fileNo",waterMeter.getFileNo());
+                    long updateResult = mongoTemplate.updateMulti(query,update, Constants.METER_READ_RECORD_TABLE).getModifiedCount();
+                }
+
+            }else {
+                //无缓存则插入抄表记录
+                meterReadRecordList.add(buildMeterReadRecord(waterMeter));
+            }
+
+
+        }
+        XxlJobLogger.log("meterReadRecordList size = {},lastMap size = {}",meterReadRecordList.size() , lastMap.size());
+        if(!meterReadRecordList.isEmpty()){
+            mongoTemplate.insert(meterReadRecordList,Constants.METER_READ_RECORD_TABLE);
         }
+
+        //保存最新信息到缓存中
+        Map<String,WaterMeterDto> map = new HashMap<>();
+        for (WaterMeterDto waterMeter : waterMeterList) {
+            map.put(waterMeter.getId().toString(),waterMeter);
+        }
+        redisTemplate.opsForHash().putAll(Constants.PREFIX_DEVICE_CACHE_FLAG,map);
+
+
     }
 
-    private void saveReadingData(WaterMeterDto waterMeter,int readDay) {
-        log.info("begin saveReadingData ,waterMeter = {}" , JSON.toJSONString(waterMeter));
+    private void saveUnReadingData(int readDay) {
+        log.info("begin saveReadingData ,readDay = {}" , readDay);
         MeterReadRecord.MeterReadInfo meterReadInfo =  buildMeterReadInfo(readDay);
 
 
         //推送数据
         Query pushQuery = new Query();
-        pushQuery.addCriteria(Criteria.where("deviceId").is(waterMeter.getId()));
+        //pushQuery.addCriteria(Criteria.where("deviceId").is(waterMeter.getId()));
         Update push = new Update();
         push.push("data",meterReadInfo);
         long pushResult = mongoTemplate.updateMulti(pushQuery,push, Constants.METER_READ_RECORD_TABLE).getModifiedCount();
-        if(pushResult == 0){
-            //推送失败插入数据
-            MeterReadRecord meterReadRecord = buildMeterReadRecord(waterMeter,meterReadInfo);
-            mongoTemplate.insert(meterReadRecord,Constants.METER_READ_RECORD_TABLE);
-        }
-        log.info("end saveReadingData");
+        log.info("end saveReadingData pushResult = {}",pushResult);
     }
 
     private MeterReadRecord.MeterReadInfo buildMeterReadInfo(int readDay) {
@@ -103,10 +166,7 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
         return readInfo;
     }
 
-    private MeterReadRecord buildMeterReadRecord(WaterMeterDto waterMeter,MeterReadRecord.MeterReadInfo meterReadInfo) {
-
-        List<MeterReadRecord.MeterReadInfo> list = new ArrayList<>();
-        list.add(meterReadInfo);
+    private MeterReadRecord buildMeterReadRecord(WaterMeterDto waterMeter) {
 
         MeterReadRecord readRecord = new MeterReadRecord();
         readRecord.setId(idWorker.nextId());
@@ -134,7 +194,7 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
         readRecord.setCreateTime(new Date());
         readRecord.setCreatorName(Constants.SYS_FLAG);
         readRecord.setUpdateTime(new Date());
-        readRecord.setData(list);
+
 
         return readRecord;
     }
@@ -149,7 +209,7 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
         if(!list.isEmpty()){
             for (MeterReadRecordDetailDto detail : list) {
                 com.zcxk.rmcp.core.entity.MeterReadRecord readRecord = new com.zcxk.rmcp.core.entity.MeterReadRecord();
-                readRecord.setId(detail.getId());
+                readRecord.setId(idWorker.nextId());
                 readRecord.setReadDate(detail.getData().getReadDate());
                 readRecord.setTenantId(detail.getTenantId());
                 readRecord.setCategoryId(detail.getCategoryId());
@@ -201,27 +261,32 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
     public void todayReadRateJobHandler(Map<String, Object> map) {
         log.info("begin yesterdayReadRateJobHandler map = {}",JSON.toJSONString(map));
         Date readDay = cn.hutool.core.date.DateUtil.parse(MapUtil.getStr(map, "readDay"),"yyyyMMdd");
-        meterReadRecordMapper.todayReadRateJobHandler(readDay);
+        int result = meterReadRecordMapper.todayReadRateJobHandler(readDay);
+        log.info("end todayReadRateJobHandler result = {}",result);
     }
 
     @Override
     public void yesterdayReadRateJobHandler(Map<String, Object> map) {
         log.info("begin yesterdayReadRateJobHandler map = {}",JSON.toJSONString(map));
-        Date readDay = cn.hutool.core.date.DateUtil.parse(MapUtil.getStr(map, "readDay"),"yyyyMMdd");
-        meterReadRecordMapper.yesterdayReadRate(readDay);
+        Integer readDay = MapUtil.getInt(map, "readDay");
+        log.info("begin yesterdayReadRateJobHandler readDay = {}",readDay);
+        int result = meterReadRecordMapper.yesterdayReadRate(readDay);
+        log.info("end yesterdayReadRateJobHandler result = {}",result);
     }
 
     @Override
     public void recent7daysReadRateJobHandler(Map<String, Object> map) {
         log.info("begin recent7daysReadRateJobHandler map = {}",JSON.toJSONString(map));
-        Date readDay = cn.hutool.core.date.DateUtil.parse(MapUtil.getStr(map, "readDay"),"yyyyMMdd");
-        meterReadRecordMapper.recent7daysReadRate(readDay);
+        Integer readDay = MapUtil.getInt(map, "readDay");
+        int result = meterReadRecordMapper.recent7daysReadRate(readDay);
+        log.info("end recent7daysReadRateJobHandler result = {}",result);
     }
 
     @Override
     public void lastMonthReadRateJobHandler(Map<String, Object> map) {
         log.info("begin lastMonthReadRateJobHandler map = {}",JSON.toJSONString(map));
-        Date readDay = cn.hutool.core.date.DateUtil.parse(MapUtil.getStr(map, "readDay"),"yyyyMMdd");
-        meterReadRecordMapper.lastMonthReadRate(readDay);
+        Integer readDay = MapUtil.getInt(map, "readDay");
+        int result = meterReadRecordMapper.lastMonthReadRate(readDay);
+        log.info("end lastMonthReadRateJobHandler result = {}",result);
     }
 }

+ 4 - 4
zoniot-rmcp/zoniot-xxljob-client/src/main/resources/application-dev.properties

@@ -5,11 +5,11 @@ logging.path=./logs/zoniot-xxljob-client
 
 
 #xxl-job �������Ĺ��̵ĵ�ַ
-xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin/
+xxl.job.admin.addresses=http://10.0.0.62:8080/xxl-job-admin/
 xxl.job.executor.appname=zoniot-xxljob-client
-xxl.job.executor.ip=127.0.0.1
+xxl.job.executor.ip=
 xxl.job.executor.port=9999
-xxl.job.executor.logpath=/opt/sit/meter-reading-job/xxl-job/jobhandler
+xxl.job.executor.logpath=/app/sit/uims/zoniot-xxljob-client/xxl-job-log
 xxl.job.accessToken=
 xxl.job.executor.logretentiondays=30
 
@@ -55,7 +55,7 @@ logging.level.org.springframework.data.mongodb.core=DEBUG
 spring.redis.host=10.0.0.63
 spring.redis.port=6379
 spring.redis.database=2
-spring.redis.timeout=36000
+spring.redis.timeout=500000
 
 # Lettuce
 spring.redis.lettuce.pool.max-active=8

+ 2 - 2
zoniot-rmcp/zoniot-xxljob-client/src/main/resources/application-sit.properties

@@ -49,13 +49,13 @@ spring.jackson.time-zone=GMT+8
 
 #mongodb url
 spring.data.mongodb.uri=mongodb://10.0.0.63:27017/meter-reading-database
-logging.level.org.springframework.data.mongodb.core=DEBUG
+#logging.level.org.springframework.data.mongodb.core=DEBUG
 
 # redis
 spring.redis.host=10.0.0.63
 spring.redis.port=6379
 spring.redis.database=2
-spring.redis.timeout=36000
+spring.redis.timeout=500000
 
 # Lettuce
 spring.redis.lettuce.pool.max-active=8

+ 3 - 3
zoniot-rmcp/zoniot-xxljob-client/src/main/resources/logback-spring.xml

@@ -15,10 +15,10 @@
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
             <!-- rollover daily -->
             <fileNamePattern>${LOG_PATH}/${APPLICATION_NAME}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
-            <maxFileSize>20MB</maxFileSize>
+            <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 10GB -->
+            <maxFileSize>100MB</maxFileSize>
             <maxHistory>60</maxHistory>
-            <totalSizeCap>20GB</totalSizeCap>
+            <totalSizeCap>100GB</totalSizeCap>
         </rollingPolicy>
 
     </appender>