Browse Source

抄表服务优化 PengDi@2021/1/21

pengdi@zoniot.com 4 years ago
parent
commit
8fd3e29b3a

+ 20 - 11
meter-reading-common/src/main/java/com/huaxu/zoniot/service/impl/MeterReadRecordServiceImpl.java

@@ -120,7 +120,14 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
             }
             if(meterReadRecordListForMongo.size() != 0){
                 try {
-                    meterReadRecordRepository.saveAll(meterReadRecordListForMongo);
+                    for(MeterReadRecord record : meterReadRecordListForMongo){
+                        try {
+                            meterReadRecordRepository.insert(record);
+                        }catch (Exception e){
+                            e.printStackTrace();
+                            log.info("insert meter read record to mongo failed ,record = {}",JSON.toJSONString(record));
+                        }
+                    }
                 }catch (Exception e){
                     e.printStackTrace();
                     log.error("Batch insert meter read record to mongo failed !",e);
@@ -324,15 +331,15 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
             }
             // 判断数据上报时间与抄表日期是否匹配
             Date sendTime = getDateFromMeterData(measuringData);
-            DateTime readDate = DateUtil.parse(String.valueOf(readDay), Constants.DEFAULT_METER_READ_DATE_FORMAT);
-            // 允许一个小时日切延时
-            int hour = 24 ;
-            if(sendTime.before(DateUtil.offsetHour(readDate,-1)) ||
-                    sendTime.after(DateUtil.offsetHour(readDate,hour))){
-                log.error("表{}数据异常,抄表时间与上报时间不匹配,上报时间{} != 本次抄表时间{}",
-                        waterMeter.getDeviceId(),sendTime,readDate);
-                throw new ServiceException(ResultStatus.READING_ERROR_2);
-            }
+//            DateTime readDate = DateUtil.parse(String.valueOf(readDay), Constants.DEFAULT_METER_READ_DATE_FORMAT);
+//            // 允许一个小时日切延时
+//            int hour = 24 ;
+//            if(sendTime.before(DateUtil.offsetHour(readDate,-1)) ||
+//                    sendTime.after(DateUtil.offsetHour(readDate,hour))){
+//                log.error("表{}数据异常,抄表时间与上报时间不匹配,上报时间{} != 本次抄表时间{}",
+//                        waterMeter.getDeviceId(),sendTime,readDate);
+//                throw new ServiceException(ResultStatus.READING_ERROR_2);
+//            }
             // 根据抄表日期及水表判断抄表记录是否存在
             MeterReadRecord record = findRecordByMeterIdAndReadDate(waterMeter,readDay);
             if(record == null){
@@ -421,7 +428,9 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
     @Override
     public void meterReading(Long meterId, Map<String, MeasuringData> measuringData) {
         WaterMeter meter = waterMeterMapper.findWaterMeterById(meterId);
-        Integer readDay = Integer.parseInt(DateUtil.format(DateUtil.date(),Constants.DEFAULT_METER_READ_DATE_FORMAT));
+        // 获取上报日期,上报日期是哪天就抄表到哪天
+        Date sendDate = getDateFromMeterData(measuringData);
+        Integer readDay = Integer.parseInt(DateUtil.format(sendDate,Constants.DEFAULT_METER_READ_DATE_FORMAT));
         meterReading(meter,measuringData,readDay);
     }
 

+ 68 - 50
meter-reading-job/src/main/java/com/huaxu/zoniot/service/impl/MeterReadRateJobServiceImpl.java

@@ -8,6 +8,9 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.TransactionDefinition;
 import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.io.BufferedReader;
@@ -28,19 +31,20 @@ import java.util.Map;
 @Component
 public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
 
-    @Autowired
-    DataSourceTransactionManager dataSourceTransactionManager;
-
-    @Autowired
-    TransactionDefinition transactionDefinition;
+//    @Autowired
+//    DataSourceTransactionManager dataSourceTransactionManager;
+//
+//    @Autowired
+//    TransactionDefinition transactionDefinition;
 
 
     @Resource
     MeterReadRateJobMapper meterReadRateJobMapper;
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLastDayReadRateByBuilding(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_read_rate_by_building.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -48,18 +52,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLastDayReadRateByBuilding error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLastDayUnReadMeterByBuilding(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_unread_device_by_building.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -67,18 +72,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLastDayUnReadMeterByBuilding error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLast7DayReadRateByBuilding(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_read_rate_by_building_7day.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -86,18 +92,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLast7DayReadRateByBuilding error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLast7DayUnReadMeterByBuilding(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_unread_device_by_building_7day.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -106,18 +113,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("date",date);
             log.info("statLast7DayUnReadMeterByBuilding param = {}",map);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLast7DayUnReadMeterByBuilding error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLast15DayReadRateByBuilding(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_read_rate_by_building_15day.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -125,18 +133,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLast15DayReadRateByBuilding error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLast15DayUnReadMeterByBuilding(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_unread_device_by_building_15day.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -144,18 +153,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLast15DayUnReadMeterByBuilding error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLastMonthReadRateByBuilding(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_read_rate_by_building_month.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -163,18 +173,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLastMonthReadRateByBuilding error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLastMonthUnReadMeterByBuilding(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_unread_device_by_building_month.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -182,18 +193,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLastMonthUnReadMeterByBuilding error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLastDayReadRateByCommunity(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_read_rate_by_community_day.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -201,18 +213,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLastDayReadRateByCommunity error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLast7DayReadRateByCommunity(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_read_rate_by_community_7day.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -220,18 +233,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLast7DayReadRateByCommunity error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLast15DayReadRateByCommunity(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_read_rate_by_community_15day.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -239,18 +253,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLast15DayReadRateByCommunity error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLastDayReadRateByConcentrator(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_read_rate_by_concentrator_day.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -258,18 +273,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLastDayReadRateByConcentrator error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLast7DayReadRateByConcentrator(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_read_rate_by_concentrator_7day.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -277,18 +293,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLast7DayReadRateByConcentrator error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLast15DayReadRateByConcentrator(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_read_rate_by_concentrator_15day.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -296,18 +313,19 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLast15DayReadRateByConcentrator error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout=36000,rollbackFor=Exception.class)
     public Map<String,Object> statLastMonthReadRateByConcentrator(Date date) {
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        //TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
         String scriptPath = "script/sql/stat_meter_read_rate_by_concentrator_month.sql";
         String scriptSQL= readToString(scriptPath);
         Map map = new HashMap(3);
@@ -315,11 +333,11 @@ public class MeterReadRateJobServiceImpl implements MeterReadRateJobService {
             map.put("sql",scriptSQL);
             map.put("date",date);
             int size = meterReadRateJobMapper.executeSql(map);
-            dataSourceTransactionManager.commit(transactionStatus);
+            //dataSourceTransactionManager.commit(transactionStatus);
             map.put("size",size);
         }catch (Exception e){
             log.error("statLastMonthReadRateByConcentrator error",e);
-            dataSourceTransactionManager.rollback(transactionStatus);
+            //dataSourceTransactionManager.rollback(transactionStatus);
         }
         return map;
     }