lin před 3 roky
rodič
revize
7b3ddc3ca7

+ 1 - 1
operation_manager/pom.xml

@@ -15,7 +15,7 @@
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>
-            <version>5.4.5</version>
+            <version>5.7.8</version>
         </dependency>
         <dependency>
             <groupId>com.zcxk</groupId>

+ 1 - 1
zoniot-common/zoniot-core-utils/pom.xml

@@ -35,7 +35,7 @@
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>
-            <version>5.4.5</version>
+            <version>5.7.8</version>
         </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>

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

@@ -1,5 +1,6 @@
 package com.zcxk.rmcp.core.dao;
 
+import com.zcxk.rmcp.core.entity.Device;
 import com.zcxk.rmcp.core.entity.MeterReadRecord;
 
 import java.util.Date;
@@ -20,9 +21,13 @@ public interface MeterReadRecordMapper {
 
     int batchInsert(@Param("list") List<MeterReadRecord> list);
 
-    int yesterdayReadRate(@Param("readDate") Integer readDate);
+    int todayReadRateJobHandler(@Param("readDate") Date readDay);
 
-    int recent7daysReadRate(@Param("startDate") Integer startDate,@Param("endDate") Integer endDate);
+    int yesterdayReadRate(@Param("readDate") Date readDate);
 
-    int lastMonthReadRate(@Param("readDate") Integer readMonth);
+    int recent7daysReadRate(@Param("readDate") Date readDate);
+
+    int lastMonthReadRate(@Param("readDate") Date readDate);
+
+    int updateTodayReadRate(@Param("device") Device device, @Param("readDate") Date readDate);
 }

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

@@ -244,10 +244,33 @@
     </foreach>
   </insert>
 
+  <insert id="todayReadRateJobHandler">
+    insert into rmcp_stat_meter_read_rate_by_community_today (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( #{readDate}, '%Y%m%d' ),
+            tenant_id,
+            category_id,
+            company_org_id,
+            dept_org_id,
+            community_id,
+            count(distinct id) as device_count, -- 设备总数
+            count(distinct id) as device_count,   -- 应抄总数
+            0 as real_read_times, -- 实抄总数
+            count(distinct id) as un_read_times,   -- 未抄总数
+            0 as read_rate ,-- 抄表率
+            now(),
+            now()
+    from
+            rmcp_device
+    where
+            `status` = 1
+    group by tenant_id,category_id,company_org_id,dept_org_id,community_id;
+  </insert>
+
   <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
-            #{readDate},
+            DATE_FORMAT( date_add(#{readDate}, interval -1 day), '%Y%m%d' ),
             tenant_id,
             category_id,
             company_org_id,
@@ -263,14 +286,14 @@
     from
             rmcp_meter_read_record
     where
-            read_date = #{readDate}
+            read_date = DATE_FORMAT( date_add(#{readDate}, interval -1 day), '%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
-            #{readDate},
+            DATE_FORMAT( date_add(#{readDate}, interval -1 day), '%Y%m%d' ),
             tenant_id,
             category_id,
             company_org_id,
@@ -286,14 +309,16 @@
     from
             rmcp_meter_read_record
     where
-            read_date = #{readDate}
+
+            read_date <![CDATA[ < ]]> DATE_FORMAT( #{readDate}, '%Y%m%d' )
+            and read_date <![CDATA[ >= ]]> DATE_FORMAT( date_add(#{readDate}, interval -7 day), '%Y%m%d' )
     group by tenant_id,category_id,company_org_id,dept_org_id,community_id;
   </insert>
 
   <insert id="lastMonthReadRate">
     insert into rmcp_stat_meter_read_rate_by_community_month (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
-            #{readDate},
+            DATE_FORMAT( date_add(#{readDate}, interval -1 MONTH), '%Y%m' ),
             tenant_id,
             category_id,
             company_org_id,
@@ -309,7 +334,16 @@
     from
             rmcp_meter_read_record
     where
-        read_date = #{readDate}
+    period_diff(date_format(#{readDate} , '%Y%m') , date_format(`read_date`, '%Y%m')) =1
     group by tenant_id,category_id,company_org_id,dept_org_id,community_id;
   </insert>
+
+  <insert id="updateTodayReadRate">
+    update rmcp_stat_meter_read_rate_by_community_today
+    set real_read_times = real_read_times + 1 ,
+        un_read_times = un_read_times - 1,
+        read_rate = FORMAT(real_read_times / read_times*100, 2)
+    WHERE stat_day = DATE_FORMAT( #{readDate}, '%Y%m%d' ) and tenant_id = #{device.tenantId} and category_id = #{device.tenantId}
+    and company_org_id = #{device.companyOrgId} and dept_org_id = #{device.deptOrgId} and community_id = #{device.communityId}
+  </insert>
 </mapper>

+ 30 - 6
zoniot-rmcp/zoniot-rmcp-dap/src/main/java/com/bz/rmcp/dap/service/impl/DeviceDataServiceImpl.java

@@ -23,6 +23,7 @@ import com.zcxk.rmcp.api.enums.ReadStatusEnum;
 import com.zcxk.rmcp.api.enums.ValveStatusEnum;
 import com.zcxk.rmcp.api.vo.DeviceDetailVo;
 import com.zcxk.rmcp.core.dao.DeviceMapper;
+import com.zcxk.rmcp.core.dao.MeterReadRecordMapper;
 import com.zcxk.rmcp.core.entity.Device;
 import com.zcxk.rmcp.core.entity.Product;
 import com.zcxk.rmcp.core.mongo.DeviceData;
@@ -52,6 +53,8 @@ public class DeviceDataServiceImpl implements DeviceDataService {
 
     @Resource
     private DeviceMapper deviceMapper;
+    @Resource
+    private MeterReadRecordMapper meterReadRecordMapper;
     @Autowired
     private MongoTemplate mongoTemplate;
     @Autowired
@@ -73,7 +76,7 @@ public class DeviceDataServiceImpl implements DeviceDataService {
             MeterData meterData = updateDevice(device, measureDataDto);
 
             // 3,保存抄表数据
-            saveReadingData(meterData);
+            saveReadingData(device,meterData);
 
             // 4,发送离线延时消息
             mqMessageSender.sendDelayMsg(new OfflineData(meterData.getDeviceId(),meterData.getReceiveDate()));
@@ -91,9 +94,12 @@ public class DeviceDataServiceImpl implements DeviceDataService {
      * @return void
      * @author linqingwei
      **/
-    private void saveReadingData(MeterData meterData) {
+    private void saveReadingData(Device device,MeterData meterData) {
         log.info("begin saveReadingData ,meterData = {}" , JSON.toJSONString(meterData));
-        MeterReadRecord.MeterReadInfo meterReadInfo =  buildMeterReadInfo(meterData);
+        // 上次表数据
+        MeterData lastMeterData =  getMeterLastData(meterData);
+
+        MeterReadRecord.MeterReadInfo meterReadInfo =  buildMeterReadInfo(meterData,lastMeterData);
 
         //更新数据项
         Query updateQuery = new Query();
@@ -123,18 +129,36 @@ public class DeviceDataServiceImpl implements DeviceDataService {
 
         //保存最新抄表信息到缓存中
         redisTemplate.opsForValue().set(Constants.PREFIX_CACHE_FLAG+meterData.getDeviceId(),meterData);
+
+        //更新今天抄表率
+        updateTodayReadRate(device,lastMeterData,meterData);
+
         log.info("end saveReadingData");
     }
 
+    /*
+     * @description 更新今天抄表率
+     * @param device
+     * @param lastMeterData
+     * @param meterData
+     * @return
+     * @author linqingwei
+     **/
+    private void updateTodayReadRate(Device device, MeterData lastMeterData, MeterData meterData) {
+        //不是同一天则更新
+        if(lastMeterData.getReceiveDate() == null || !cn.hutool.core.date.DateUtil.isSameDay(lastMeterData.getReceiveDate(),meterData.getReceiveDate())){
+            meterReadRecordMapper.updateTodayReadRate(device,meterData.getReceiveDate());
+        }
+    }
+
     /*
      * @description 构建MeterReadInfo
      * @param device
      * @return com.zcxk.rmcp.core.mongo.MeterReadRecord.MeterReadInfo
      * @author linqingwei
      **/
-    private MeterReadRecord.MeterReadInfo buildMeterReadInfo(MeterData meterData) {
-        // 上次表数据
-        MeterData lastMeterData =  getMeterLastData(meterData);
+    private MeterReadRecord.MeterReadInfo buildMeterReadInfo(MeterData meterData,MeterData lastMeterData) {
+
         // 计算今日用水量
         BigDecimal todayCost = calculateTodayCost(meterData.getReadData(), lastMeterData.getReadData());
         

+ 2 - 2
zoniot-rmcp/zoniot-rmcp-dap/src/test/java/com/bz/rmcp/dap/DeviceDataServiceTests.java

@@ -114,7 +114,7 @@ public class DeviceDataServiceTests {
         List<MeterReadRecord.MeterReadInfo> list = new ArrayList<>();
         MeterReadRecord.MeterReadInfo info1 = new MeterReadRecord.MeterReadInfo();
         info1.setReadDate(20210801);
-        info1.setReadTime(new Date());
+        info1.setReadTime(new Date().getTime());
         info1.setValveStatus(1);
         info1.setReadData(1.5D);
         info1.setLastValid(1.4D);
@@ -123,7 +123,7 @@ public class DeviceDataServiceTests {
 
         MeterReadRecord.MeterReadInfo info2 = new MeterReadRecord.MeterReadInfo();
         info2.setReadDate(20210805);
-        info2.setReadTime(new Date());
+        info2.setReadTime(new Date().getTime());
         info2.setValveStatus(1);
         info2.setReadData(2.6D);
         info2.setLastValid(1.5D);

+ 23 - 1
zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/jobs/MeterReadJob.java

@@ -40,7 +40,7 @@ public class MeterReadJob {
         else{
             map = new HashMap<>(10);
             // more执行明天的未抄记录
-            map.put("readDay",getTomorrowDay());
+            map.put("readDay",getYesterdayDay());
         }
 
         // 分片参数
@@ -91,6 +91,27 @@ public class MeterReadJob {
         return ReturnT.SUCCESS;
     }
 
+    @XxlJob("todayReadRateJobHandler")
+    public ReturnT<String> todayReadRateJobHandler(String param) {
+        XxlJobLogger.log("XXL-JOB,todayReadRateJobHandler.Param = {}",param);
+
+
+        Map<String,Object> map = null ;
+        if(StringUtils.isNotBlank(param)){
+            map = JSON.parseObject(param, HashMap.class);
+        }
+        else{
+            map = new HashMap<>(10);
+            map.put("readDay",getTomorrowDay());
+        }
+
+        // 业务逻辑
+        meterReadRecordService.todayReadRateJobHandler(map);
+
+        XxlJobLogger.log("XXL-JOB, recent7daysReadRateJobHandler. Job Result = {}");
+        return ReturnT.SUCCESS;
+    }
+
 
     @XxlJob("yesterdayReadRateJobHandler")
     public ReturnT<String> yesterdayReadRateJobHandler(String param) {
@@ -131,6 +152,7 @@ public class MeterReadJob {
         // 业务逻辑
         meterReadRecordService.recent7daysReadRateJobHandler(map);
 
+
         XxlJobLogger.log("XXL-JOB, recent7daysReadRateJobHandler. Job Result = {}");
         return ReturnT.SUCCESS;
     }

+ 2 - 0
zoniot-rmcp/zoniot-xxljob-client/src/main/java/com/zcxk/xxljob/service/MeterReadRecordService.java

@@ -25,6 +25,8 @@ public interface MeterReadRecordService {
      **/
     void executeSyncMeterReadRecord(Map<String, Object> map);
 
+    void todayReadRateJobHandler(Map<String, Object> map);
+
     void yesterdayReadRateJobHandler(Map<String, Object> map);
 
     void recent7daysReadRateJobHandler(Map<String, Object> map);

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

@@ -2,6 +2,7 @@ package com.zcxk.xxljob.service.impl;
 import java.time.Instant;
 import java.time.LocalDateTime;
 
+import cn.hutool.core.bean.OptionalBean;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.PageUtil;
@@ -55,8 +56,9 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
 
     @Override
     public void executeCreateMeterUnReadRecord(Map<String, Object> map, int index, int total) {
-        log.info("begin executeCreateMeterUnReadRecord");
+        log.info("begin executeCreateMeterUnReadRecord map = {} {} {}",JSON.toJSONString(map),index,total);
         int readDay = MapUtil.getInt(map, "readDay");
+        System.out.println(readDay);
         //计算分页
         int deviceTotal = deviceMapper.countWaterMeter();
         int pageSize = PageUtil.totalPage(deviceTotal, total);
@@ -108,7 +110,6 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
     }
 
     private MeterReadRecord buildMeterReadRecord(WaterMeterDto waterMeter,MeterReadRecord.MeterReadInfo meterReadInfo) {
-        //DeviceDetailVo vo =  deviceMapper.findDetail(waterMeter.getDeviceId());
 
         List<MeterReadRecord.MeterReadInfo> list = new ArrayList<>();
         list.add(meterReadInfo);
@@ -147,14 +148,12 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
 
     @Override
     public void executeSyncMeterReadRecord(Map<String, Object> map) {
-        log.info("begin executeSyncMeterReadRecord");
+        log.info("begin executeSyncMeterReadRecord map = {}",JSON.toJSONString(map));
         int readDay = MapUtil.getInt(map, "readDay");
-        List<MeterReadRecordDetailDto> list = findMeterReadRecord(20210813);
-        System.out.println("list="+JSON.toJSONString(list));
+        List<MeterReadRecordDetailDto> list = findMeterReadRecord(readDay);
         List<com.zcxk.rmcp.core.entity.MeterReadRecord> readRecordList = new ArrayList<>();
         if(!list.isEmpty()){
             for (MeterReadRecordDetailDto detail : list) {
-                System.out.println(JSON.toJSONString(detail));
                 com.zcxk.rmcp.core.entity.MeterReadRecord readRecord = new com.zcxk.rmcp.core.entity.MeterReadRecord();
                 readRecord.setId(detail.getId());
                 readRecord.setReadDate(detail.getData().getReadDate());
@@ -179,7 +178,6 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
                 readRecord.setUpdateBy(Constants.SYS_FLAG);
                 readRecordList.add(readRecord);
             }
-            System.out.println("readRecordList="+JSON.toJSONString(readRecordList));
             meterReadRecordMapper.batchInsert(readRecordList);
         }
         log.info("end executeSyncMeterReadRecord");
@@ -188,11 +186,6 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
 
     private List<MeterReadRecordDetailDto> findMeterReadRecord(Integer readDate){
         List<AggregationOperation> commonOperations = new ArrayList<>();
-        Criteria criteria = new Criteria();
-        criteria.and("year").is(DateUtil.getYear(new Date()));
-
-        MatchOperation match = Aggregation.match(criteria);
-        commonOperations.add(match);
         // 2.拆开
         UnwindOperation unwind = Aggregation.unwind("data");
         commonOperations.add(unwind);
@@ -210,19 +203,31 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
         return durationData.getMappedResults();
     }
 
+    @Override
+    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);
+    }
 
     @Override
     public void yesterdayReadRateJobHandler(Map<String, Object> map) {
-        meterReadRecordMapper.yesterdayReadRate(20210813);
+        log.info("begin yesterdayReadRateJobHandler map = {}",JSON.toJSONString(map));
+        Date readDay = cn.hutool.core.date.DateUtil.parse(MapUtil.getStr(map, "readDay"),"yyyyMMdd");
+        meterReadRecordMapper.yesterdayReadRate(readDay);
     }
 
     @Override
     public void recent7daysReadRateJobHandler(Map<String, Object> map) {
-        meterReadRecordMapper.recent7daysReadRate(20210806,20210812);
+        log.info("begin recent7daysReadRateJobHandler map = {}",JSON.toJSONString(map));
+        Date readDay = cn.hutool.core.date.DateUtil.parse(MapUtil.getStr(map, "readDay"),"yyyyMMdd");
+        meterReadRecordMapper.recent7daysReadRate(readDay);
     }
 
     @Override
     public void lastMonthReadRateJobHandler(Map<String, Object> map) {
-        meterReadRecordMapper.lastMonthReadRate(202108);
+        log.info("begin lastMonthReadRateJobHandler map = {}",JSON.toJSONString(map));
+        Date readDay = cn.hutool.core.date.DateUtil.parse(MapUtil.getStr(map, "readDay"),"yyyyMMdd");
+        meterReadRecordMapper.lastMonthReadRate(readDay);
     }
 }