Browse Source

市自来水更新:
1.更改泵组优化接口调用预测时间增加未来一天
2.增加营业片区小时实际用水量数据定时任务

1037015548@qq.com 2 months ago
parent
commit
1b181f6edd

+ 6 - 8
sql.properties

@@ -5,15 +5,13 @@ spring.datasource.data.password=kpr.23417.postgres
 spring.datasource.data.driver-class-name=org.postgis.DriverWrapper
 
 #pgsql Ë®Á¿Ô¤²âÊý¾Ý¿âÔ´
-#spring.datasource.db2.jdbc-url=jdbc:postgresql_postGIS://140.246.183.164:5432/water_volume_prediction?useSSL=false&useAffectedRows=false&allowMultiQueries=true
-#spring.datasource.db2.username=postgres
-#spring.datasource.db2.password=kpr.23417.postgres
-#spring.datasource.db2.driver-class-name=org.postgis.DriverWrapper
-spring.datasource.db2.jdbc-url=jdbc:postgresql_postGIS://10.101.5.50:5432/water_volume_prediction?useSSL=false&useAffectedRows=false&allowMultiQueries=true
-#spring.datasource.db2.jdbc-url=jdbc:postgresql_postGIS://10.101.3.104:5432/water_volume_prediction_jiangjin2?useSSL=false&useAffectedRows=false&allowMultiQueries=true
+spring.datasource.db2.jdbc-url=jdbc:postgresql_postGIS://140.246.183.164:5432/water_volume_prediction?useSSL=false&useAffectedRows=false&allowMultiQueries=true
 spring.datasource.db2.username=postgres
-spring.datasource.db2.password=ygt.23417.postgres
-#spring.datasource.db2.password=kpr.23417.postgres
+spring.datasource.db2.password=kpr.23417.postgres
+#spring.datasource.db2.jdbc-url=jdbc:postgresql_postGIS://10.101.5.50:5432/water_volume_prediction?useSSL=false&useAffectedRows=false&allowMultiQueries=true
+#spring.datasource.db2.jdbc-url=jdbc:postgresql_postGIS://10.101.3.104:5432/water_volume_prediction_jiangjin2?useSSL=false&useAffectedRows=false&allowMultiQueries=true
+#spring.datasource.db2.username=postgres
+#spring.datasource.db2.password=ygt.23417.postgres
 spring.datasource.db2.driver-class-name=org.postgis.DriverWrapper
 #spring,database.name=water_volume_prediction_jiangjin2
 spring,database.name=water_volume_prediction

+ 132 - 3
src/main/java/com/shkpr/service/aimodelpower/bizmgr/KprAimTapWaterBizFun.java

@@ -266,8 +266,8 @@ public class KprAimTapWaterBizFun {
         //TODO 检查小时用水量
         DateTimeFormatter formater = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         try{
-            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO,mStrClassName, mStrClassName,"检查机制-计算营业所小时用水量开始时间:"+TimeTool.convertUTC2DateStr(TimeTool.getCurMsUTC(),TimeTool.TIMESTAMP_FORMAT));
-            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO,mStrClassName, mStrClassName,"检查机制-计算营业所小时用水量进行中:......");
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO,mStrClassName, mStrClassName,"检查机制-计算营业所15分钟用水量开始时间:"+TimeTool.convertUTC2DateStr(TimeTool.getCurMsUTC(),TimeTool.TIMESTAMP_FORMAT));
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO,mStrClassName, mStrClassName,"检查机制-计算营业所15分钟用水量进行中:......");
             //获取配置关系
             //TODO 自供
             Map<String,List<String>> selfconfess = parseConfig(selfconfessStr);
@@ -379,6 +379,135 @@ public class KprAimTapWaterBizFun {
                 }
             }
             latch.await();
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO,mStrClassName, mStrClassName,"检查机制-计算营业所15分钟用水量已完成");
+        }catch(Exception ex){
+            ex.printStackTrace();
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR
+                    , mStrClassName
+                    , mStrClassName
+                    , String.format("Batch checkBusinessRecordAllData ERROR:{%s} "
+                            , ex.getLocalizedMessage()));
+        }
+    }
+    //TODO beforHour是小时数,当前时间往前扣多少个小时 按一小时刻度计算用水量
+    public static void checkBusinessRecordOldAllData(int beforHour,String selfconfessStr,String supplyinStr,String confessStr){
+        //TODO 检查小时用水量
+        DateTimeFormatter formater = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        try{
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO,mStrClassName, mStrClassName,"检查机制-计算营业所小时用水量开始时间:"+TimeTool.convertUTC2DateStr(TimeTool.getCurMsUTC(),TimeTool.TIMESTAMP_FORMAT));
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO,mStrClassName, mStrClassName,"检查机制-计算营业所小时用水量进行中:......");
+            //获取配置关系
+            //TODO 自供
+            Map<String,List<String>> selfconfess = parseConfig(selfconfessStr);
+            //TODO 供入
+            Map<String,List<String>> supplyin = parseConfig(supplyinStr);
+            //TODO 供出
+            Map<String,List<String>> confess = parseConfig(confessStr);
+            //TODO 根据当前配置信息item 查询远通数据中的历史数据
+            //TODO 首先查询当前水厂设备的从昨天之后到得到数据的数据
+            LocalDateTime today = LocalDateTime.now();
+            LocalDateTime startDateTime = today.withMinute(0).withSecond(0).withNano(0).minusHours(beforHour);
+
+            //TODO 需计算的循环天数
+
+            //TODO 此循环天数每一天所查的是所有设备每小时数据合
+            LocalDateTime newStartDateTime = startDateTime;
+            String startDate = newStartDateTime.format(formater);
+            String endDate = today.withMinute(1).withSecond(0).format(formater);
+            final CountDownLatch latch = new CountDownLatch(selfconfess.keySet().size());
+            for (String orgName:selfconfess.keySet()) {
+                try {
+                    ThreadTaskMgr.runTask(new TraceRunnable(TraceLogMgr.getTraceId()) {
+                        @Override
+                        public void function() {
+
+                            for (int i = 0; i < Integer.valueOf(String.valueOf(Duration.between(startDateTime, today.withMinute(0).withSecond(0)).toHours())); i++) {
+                                String startTime = newStartDateTime.minusHours(-i).format(formater);
+                                String endTime = newStartDateTime.minusMinutes(-1).minusHours(-(i+1)).format(formater);//查询时间加一分钟
+                                Map<String, Object> recordAllEntity = new HashMap<>();//需要添加的实体数据
+                                recordAllEntity.put("org_name", orgName);//水厂
+                                recordAllEntity.put("time", newStartDateTime.minusHours(-(i+1)).format(formater));//采集时间(小时的最后时间)
+                                recordAllEntity.put("value", null);
+                                recordAllEntity.put("value_tag", "water");
+                                recordAllEntity.put("collcation_tag_array", "");
+                                //TODO 此循环计算该小时所有设备的用水量
+                                //TODO 先查各个营业所的自供值
+                                List<String> tagTags = selfconfess.get(orgName);//自供
+                                List<String> tagTags2 = supplyin.get(orgName);//供入
+                                List<String> tagTags3 = confess.get(orgName);//供出
+                                Double selfValue = null;
+                                Double supplyInValue = null;
+                                Double confessValue = null;
+                                try {
+                                    selfValue = selfconfess(tagTags, startDate, endDate, startTime, endTime);//自供
+                                    supplyInValue = selfconfess(tagTags2, startDate, endDate, startTime, endTime);//供入
+                                    confessValue = selfconfess(tagTags3, startDate, endDate, startTime, endTime);//供出
+                                } catch (Exception ex) {
+
+                                }
+                                Double value = null;//总计算值
+                                if (selfValue != null) {
+                                    if (supplyInValue != null && confessValue == null) {
+                                        value = selfValue + supplyInValue;
+                                    } else if (supplyInValue != null && confessValue != null) {
+                                        value = selfValue + supplyInValue - confessValue;
+                                    } else if (supplyInValue == null && confessValue == null) {
+                                        value = selfValue;
+                                    } else if (supplyInValue == null && confessValue != null) {
+                                        value = selfValue - confessValue;
+                                    }
+                                }
+                                recordAllEntity.put("value", value);
+                                System.out.println("营业所片区" + orgName + "值:" + value + ",采集时间:" + newStartDateTime.minusMinutes(-((i + 1) * 15)).format(formater));
+                                List<Map<String, Object>> queryWaterRecord = getWaterTapWaterApi().getWaterCollectionRecordAllList(1, 0,
+                                        " WHERE org_name = '" + recordAllEntity.get("org_name")
+                                                + "' AND time = '" + recordAllEntity.get("time") + "' AND value_tag = '" + recordAllEntity.get("value_tag") + "'");
+                                if (CollectionUtils.isEmpty(queryWaterRecord)) {
+//                        //TODO 说明不存在,进行插入
+                                    if (!ObjectUtils.isEmpty(recordAllEntity.get("value"))) {
+                                        int insertCode = getWaterTapWaterApi().insertWaterCollectionRecordAll(" (" +
+                                                "'" + recordAllEntity.get("org_name") + "'," +
+                                                "'" + recordAllEntity.get("time") + "'," +
+                                                "'" + recordAllEntity.get("value") + "'," +
+                                                "'" + recordAllEntity.get("value_tag") + "'," +
+                                                "'" + recordAllEntity.get("collcation_tag_array") + "'" +
+                                                ") ");
+                                        if (insertCode < 0) {
+                                            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR
+                                                    , mStrClassName
+                                                    , mStrClassName
+                                                    , String.format("Batch initTapWaterDataThread 未成功:{%s} ",
+                                                            FastJsonUtil.toJSON(recordAllEntity)));
+                                        }
+                                    }
+                                } else {
+                                    //TODO 说明存在,进行修改
+                                    if (!ObjectUtils.isEmpty(recordAllEntity.get("value"))) {
+                                        int updateCode = getWaterTapWaterApi().updateWaterCollectionRecordAll(String.valueOf(value), " WHERE " +
+                                                "(" +
+                                                " org_name = '" + recordAllEntity.get("org_name") + "' and" +
+                                                " \"time\" = '" + recordAllEntity.get("time") + "' and" +
+                                                " value_tag = '" + recordAllEntity.get("value_tag") + "'" +
+                                                ") ");
+                                        if (updateCode < 0) {
+                                            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR
+                                                    , mStrClassName
+                                                    , mStrClassName
+                                                    , String.format("Batch updateWaterCollectionRecordAll 未成功:{%s} ",
+                                                            FastJsonUtil.toJSON(recordAllEntity)));
+                                        }
+                                    }
+                                }
+                            }
+                            latch.countDown();
+                        }
+                    });
+                }catch(Exception ex){
+
+                }
+            }
+            latch.await();
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO,mStrClassName, mStrClassName,"检查机制-计算营业所小时用水量已完成");
         }catch(Exception ex){
             ex.printStackTrace();
             LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR
@@ -628,7 +757,7 @@ public class KprAimTapWaterBizFun {
                             //TODO 循环获取该天该水厂每个设备数据
 
                             //TODO 查询当前天日期内每小时的设备数据
-                            for (int i = 0; i < Integer.valueOf(String.valueOf(Duration.between(startDateTime, today.withSecond(0)).toMinutes()/15)); i++) {
+                            for (int i = 0; i < Integer.valueOf(String.valueOf(Duration.between(startDateTime, today.withMinute(0).withSecond(0)).toHours())); i++) {
                                 String startTime = newStartDateTime.minusHours(-i).format(formater);
                                 String endTime = newStartDateTime.minusMinutes(-1).minusHours(-(i+1)).format(formater);//查询时间加一分钟
                                 Map<String, Object> recordAllEntity = new HashMap<>();//需要添加的实体数据

+ 5 - 3
src/main/java/com/shkpr/service/aimodelpower/globalmgr/ScheduleTaskMgr.java

@@ -106,6 +106,7 @@ public class ScheduleTaskMgr {
     @Scheduled(cron="0 */5 * * * ?")
     public void everyShiwuWork(){
         KprAimTapWaterBizFun.checkBusinessRecordAllData(1,selfconfess,supplyin,confess);
+        KprAimTapWaterBizFun.checkBusinessRecordOldAllData(1,selfconfess,supplyin,confess);
         KprAimTapWaterBizFun.checkRecordAllDataBusinessFenqu(1);
         //TODO 当前月预测15分水量数据
         KprAimTapWaterBizFun.yuceZuojia(2);
@@ -163,18 +164,18 @@ public class ScheduleTaskMgr {
 //    @Value("${waterbusiness.confess}")
     private String confess = "沙坪坝营业所{SPBYGS_BMD.LLJ.LJLL,SPBYGS_XZFZL_DN400.050.ZLJLL,SPBYGS_HYL_DN700.IFC050.ZLJLL,YZSC_LZB_LLJ.YZSC_LZB_LLJ.LJLL},九龙坡营业所{JLPYGS_LQL_DN400.IFC050.ZLJLL,YZQSC.HSXEJ.LJLL,JLPYGS_LHXQ.IFC050.DN700_LJLL1},大渡口营业所{JLPYGS_LHXQ.IFC050.DN600_LJLL1,JLPYGS_RL_DN700.IFC050.ZLJLL}";
     //TODO 启动时执行 测试方法
-    @PostConstruct
+    /*@PostConstruct
     public void initTest(){
         String time = LocalDateTime.now().minusYears(1).format(DateTimeFormatter.ofPattern("yyyy-MM"));
         Timer timer2 = new Timer();
         TimerTask timerTask1 = new TimerTask() {
             @Override
             public void run() {
-                KprAimTapWaterBizFun.checkRecordAllDataBusinessFenqu(18);
+                KprAimTapWaterBizFun.checkBusinessRecordOldAllData(2,selfconfess,supplyin,confess);
             }
         };
         timer2.schedule(timerTask1, 5000);
-    }
+    }*/
 
 
     //TODO 启动时执行一次一年的小时水量和原始水量数据
@@ -245,6 +246,7 @@ public class ScheduleTaskMgr {
                 KprAimWaterCollecationBizFun.initPumpPowerZero();
                 KprAimWaterCollecationBizFun.insertYuceHourAddData(time,2);
                 KprAimTapWaterBizFun.checkBusinessRecordAllData(2,selfconfess,supplyin,confess);
+                KprAimTapWaterBizFun.checkBusinessRecordOldAllData(2,selfconfess,supplyin,confess);
                 KprAimTapWaterBizFun.checkRecordAllDataBusinessFenqu(2);
                 //TODO 当前月预测15分水量数据
                 KprAimTapWaterBizFun.yuceZuojia(3);