Explorar o código

远通数据源接入机制: 完成水量预测日数据接口和时数据接口查询

1037015548@qq.com hai 1 ano
pai
achega
1b9aff120a

+ 119 - 0
src/main/java/com/shkpr/service/aimodelpower/bizmgr/KprAimWaterCollecationBizFun.java

@@ -0,0 +1,119 @@
+package com.shkpr.service.aimodelpower.bizmgr;
+
+import com.shkpr.service.aimodelpower.dbdao.DBMgrProxy;
+import com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.service.intef.WaterCollecationService;
+import com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.service.intef.WaterTapWaterService;
+import com.shkpr.service.aimodelpower.dto.ResponseCode;
+import com.shkpr.service.aimodelpower.dto.ResponseRes;
+import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPTbMHourWater;
+import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPTbMWater;
+import org.springframework.util.CollectionUtils;
+
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName KprAimWaterCollecationBizFun
+ * @Description: TODO
+ * @Author LX
+ * @Date 2024/5/27
+ * @Version V1.0
+ **/
+public class KprAimWaterCollecationBizFun {
+    private static final String MSG_SUCCESS = "success.";
+    private static final String MSG_FAILED = "failed.";
+    private static final String mStrClassName = "KprAimTapWaterBizFun";
+    private static final String EMPTY_NULL = "NULL";
+
+    public static WaterCollecationService getWaterTapWaterApi(){
+        return DBMgrProxy.getInstance().applyWaterCollecationService();
+    }
+    static DateTimeFormatter formater = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    static DateTimeFormatter formater2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+    //TODO 查询日取水量预测接口
+
+    /**
+     * 1.传入水厂Id及起止日期(日期格式为YYYY-MM-DD),返回日期内,每天的预测取水量数据和实际取水量数据
+     * 2.同时返回指定截止日期之后,未来4天的预测水量数据和实际水量(如没有,则返回为空数据)
+     */
+    public static ResponseRes selectTbWaterList(JPTbMWater jpTbMWater){
+        ResponseRes responseRes = new ResponseRes();
+        List<Map<String,Object>> list =new ArrayList<>();
+        Map<String,Object> map = new HashMap<>();
+        map.put("ID",null);
+        map.put("Date",null);
+        map.put("Max_temperature",null);
+        map.put("Min_temperature",null);
+        map.put("Weather",null);
+        map.put("Month",null);
+        map.put("Week",null);
+        map.put("Holiday",null);
+        map.put("LastActualWaterWithdrawals",null);
+        map.put("LastActualWaterSupply",null);
+        map.put("ActualWaterWithdrawals",null);
+        map.put("ActualWaterSupply",null);
+        map.put("ForecastWaterWithdrawals",null);
+        map.put("ForecastActualWaterSupply",null);
+        map.put("isAbnormal",null);
+        map.put("isForecast",null);
+        map.put("LastModifyTime",null);
+        list.add(map);
+        responseRes.setResdata(list);
+        responseRes.setRescode(ResponseCode.RESULT_BAD.toStrCode());
+        responseRes.setResmsg(ResponseCode.RESULT_BAD.toStrMsg());
+        try {
+            //
+            List<Map<String, Object>> resList = getWaterTapWaterApi().getTbMWater(jpTbMWater.getIsPage(),
+                    jpTbMWater.getLimit(), jpTbMWater.getOffset(), jpTbMWater.getForDateStr());
+            if(!CollectionUtils.isEmpty(resList)){
+                responseRes.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
+                responseRes.setResmsg(ResponseCode.RESULT_NORMAL.toStrMsg());
+                responseRes.setResdata(resList);
+            }
+            return responseRes;
+        }catch(Exception ex){
+            return responseRes;
+        }
+    }
+
+    //TODO 小时取水量预测接口
+    /**
+     * 传入水厂id及日期,返回指定日期内的小时取水量预测数据和实际小时取水量数据
+     */
+    public static ResponseRes selectTbHourWaterList(JPTbMHourWater jpTbMHourWater){
+        ResponseRes responseRes = new ResponseRes();
+        List<Map<String,Object>> list =new ArrayList<>();
+        Map<String,Object> map = new HashMap<>();
+        map.put("ID",null);
+        map.put("Date",null);
+        map.put("Hour",null);
+        map.put("HourForecastWaterWithdrawals",null);
+        map.put("HourForecastActualWaterSupply",null);
+        map.put("WaterWithdrawalsEnergy",null);
+        map.put("WaterSupplyEnergy",null);
+        map.put("RealWaterWithdrawalsEnergy",null);
+        map.put("RealWaterSupplyEnergy",null);
+        map.put("LastModifyTime",null);
+        list.add(map);
+        responseRes.setResdata(list);
+        responseRes.setRescode(ResponseCode.RESULT_BAD.toStrCode());
+        responseRes.setResmsg(ResponseCode.RESULT_BAD.toStrMsg());
+        try {
+            //
+            List<Map<String, Object>> resList = getWaterTapWaterApi().getTbMHourwater(jpTbMHourWater.getIsPage(),
+                    jpTbMHourWater.getLimit(), jpTbMHourWater.getOffset(), jpTbMHourWater.getForDateStr());
+            if(!CollectionUtils.isEmpty(resList)){
+                responseRes.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
+                responseRes.setResmsg(ResponseCode.RESULT_NORMAL.toStrMsg());
+                responseRes.setResdata(resList);
+            }
+            return responseRes;
+        }catch(Exception ex){
+            return responseRes;
+        }
+    }
+}

+ 5 - 0
src/main/java/com/shkpr/service/aimodelpower/constants/ApiURI.java

@@ -113,4 +113,9 @@ public class ApiURI {
     public static final String URI_COMM_REPORT_FORM_XXX = "/ai-model/report-form/**";
 
     public static final String URI_INTERNAL_OPS_XXX = "/ops/**";
+
+    public static final String URI_WATER_ZILAISHUI_H = "/ai-model/currency/water/zilaishui";
+    public static final String URI_WATER_ZILAISHUI_H_XXX = URI_WATER_ZILAISHUI_H+"/**";
+    public static final String URI_WATER_ZILAISHUI_DAY = "daydata";
+    public static final String URI_WATER_ZILAISHUI_HOUR = "hourdata";
 }

+ 129 - 0
src/main/java/com/shkpr/service/aimodelpower/controllerapi/WaterCollecationController.java

@@ -0,0 +1,129 @@
+package com.shkpr.service.aimodelpower.controllerapi;
+
+import com.global.base.log.LogLevelFlag;
+import com.global.base.log.LogPrintMgr;
+import com.global.base.tools.FastJsonUtil;
+import com.shkpr.service.aimodelpower.bizmgr.KprAimWaterCollecationBizFun;
+import com.shkpr.service.aimodelpower.commtools.CommTool;
+import com.shkpr.service.aimodelpower.commtools.HttpTool;
+import com.shkpr.service.aimodelpower.constants.ApiURI;
+import com.shkpr.service.aimodelpower.constants.LogFlagBusiType;
+import com.shkpr.service.aimodelpower.controllerfilter.TokenAuthenticationService;
+import com.shkpr.service.aimodelpower.dto.MsgNotifyBean;
+import com.shkpr.service.aimodelpower.dto.ResponseCode;
+import com.shkpr.service.aimodelpower.dto.ResponseRes;
+import com.shkpr.service.aimodelpower.exception.SelfException;
+import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPTbMHourWater;
+import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPTbMWater;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * @ClassName WaterCollecationController
+ * @Description: TODO 水量预测相关接口
+ * @Author LX
+ * @Date 2024/5/27
+ * @Version V1.0
+ **/
+@RequestMapping(ApiURI.URI_WATER_ZILAISHUI_H)
+@RestController
+public class WaterCollecationController {
+    final String MSG_SUCCESS = "success.";
+    final String MSG_FAILED = "failed.";
+    private String mStrClassName;
+    private AtomicInteger mSeqNotify = null;
+
+    public WaterCollecationController() {
+        mStrClassName = "WaterCollecationController";
+        mSeqNotify = new AtomicInteger(0);
+    }
+
+    @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_DAY)
+    public ResponseRes dayData(HttpServletRequest request
+            , @RequestHeader(value= ApiURI.HEADER_CLIENT_TYPE, required=false) String strClientType
+            , @RequestHeader(value= ApiURI.HEADER_USER_AGENT, required=false) String strUserAgent) throws Exception{
+        final String URI_PATH = request.getRequestURI();
+        final String strPlatform = CommTool.getPlatformByAgent(strClientType, strUserAgent);
+        final String strUserId = (String)request.getAttribute(TokenAuthenticationService.HEADER_USERID);
+        JPTbMWater oJsonParam = FastJsonUtil.fromJSONByGson(HttpTool.getJsonBodyStr(request), JPTbMWater.class);
+        if (oJsonParam == null
+                || !oJsonParam.checkValid()){
+            throw new SelfException(ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrCode()
+                    , String.format(ApiURI.EXCEPTION_FORMAT
+                    , strPlatform
+                    , URI_PATH
+                    , ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrMsg()));
+        }
+        long llReqBefore = System.currentTimeMillis();
+        String strRunSeq = String.format("%d-%d", llReqBefore, mSeqNotify.incrementAndGet());
+
+        ResponseRes<String> resResult = new ResponseRes<String>();
+        resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
+        resResult.setResmsg(MSG_SUCCESS);
+        resResult.setResdata("");
+
+//        resResult.setResdata(waterZILAISHUIDao.getCount("WHERE TAG_CODE = 'SPB.SSWD.total_flow1' and QCQUISITION_TIME >= to_date('2023-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')").toString());
+        ResponseRes oRes = KprAimWaterCollecationBizFun.selectTbWaterList(oJsonParam);
+        if(oRes!=null&&ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) {
+            resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata()));
+        }
+
+        resResult.setTimestamp(System.currentTimeMillis());
+        LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
+                ,String.format("%s:%s seq:{%s} rescode:{%s} resmsg:{%s} time:{%d ms} end<===="
+                        ,strPlatform
+                        ,URI_PATH
+                        ,strRunSeq
+                        ,resResult.getRescode()
+                        ,resResult.getResmsg()
+                        ,resResult.getTimestamp()-llReqBefore));
+        return resResult;
+    }
+
+    @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_HOUR)
+    public ResponseRes hourData(HttpServletRequest request
+            , @RequestHeader(value= ApiURI.HEADER_CLIENT_TYPE, required=false) String strClientType
+            , @RequestHeader(value= ApiURI.HEADER_USER_AGENT, required=false) String strUserAgent) throws Exception{
+        final String URI_PATH = request.getRequestURI();
+        final String strPlatform = CommTool.getPlatformByAgent(strClientType, strUserAgent);
+        final String strUserId = (String)request.getAttribute(TokenAuthenticationService.HEADER_USERID);
+        JPTbMHourWater oJsonParam = FastJsonUtil.fromJSONByGson(HttpTool.getJsonBodyStr(request), JPTbMHourWater.class);
+        if (oJsonParam == null
+                || !oJsonParam.checkValid()){
+            throw new SelfException(ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrCode()
+                    , String.format(ApiURI.EXCEPTION_FORMAT
+                    , strPlatform
+                    , URI_PATH
+                    , ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrMsg()));
+        }
+        long llReqBefore = System.currentTimeMillis();
+        String strRunSeq = String.format("%d-%d", llReqBefore, mSeqNotify.incrementAndGet());
+
+        ResponseRes<String> resResult = new ResponseRes<String>();
+        resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
+        resResult.setResmsg(MSG_SUCCESS);
+        resResult.setResdata("");
+
+//        resResult.setResdata(waterZILAISHUIDao.getCount("WHERE TAG_CODE = 'SPB.SSWD.total_flow1' and QCQUISITION_TIME >= to_date('2023-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')").toString());
+        ResponseRes oRes = KprAimWaterCollecationBizFun.selectTbHourWaterList(oJsonParam);
+        if(oRes!=null&&ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) {
+            resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata()));
+        }
+
+        resResult.setTimestamp(System.currentTimeMillis());
+        LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
+                ,String.format("%s:%s seq:{%s} rescode:{%s} resmsg:{%s} time:{%d ms} end<===="
+                        ,strPlatform
+                        ,URI_PATH
+                        ,strRunSeq
+                        ,resResult.getRescode()
+                        ,resResult.getResmsg()
+                        ,resResult.getTimestamp()-llReqBefore));
+        return resResult;
+    }
+}

+ 7 - 0
src/main/java/com/shkpr/service/aimodelpower/controllerfilter/third/ThirdJWTBusiFilterMgr.java

@@ -17,9 +17,11 @@ public class ThirdJWTBusiFilterMgr extends JWTAuthenticationFilter {
     private RequestMatcher mRequestMatcherForTaskFiles = null;
     private RequestMatcher mRequestMatcherForCustomXXX = null;
     private RequestMatcher mRequestMatcherForReportForm = null;
+    private RequestMatcher mRequestMatcherForCurrency = null;
     private ThirdJWTTaskFilesBusiFilter mFilterForTaskFiles = null;
     private ThirdJWTCustomXXXFilter mFilterForCustomXXX = null;
     private ThirdJWTCommReportFormFilter mFilterForReportForm = null;
+    private ThirdJWTCurrencyFilter mFilterForCurrency = null;
 
     public ThirdJWTBusiFilterMgr(AuthenticationManager authenticationManager)
     {
@@ -32,9 +34,11 @@ public class ThirdJWTBusiFilterMgr extends JWTAuthenticationFilter {
 
         mRequestMatcherForCustomXXX = new AntPathRequestMatcher(ApiURI.URI_CUSTOMIZE_XXX);
         mRequestMatcherForReportForm = new AntPathRequestMatcher(ApiURI.URI_COMM_REPORT_FORM_XXX);
+        mRequestMatcherForCurrency = new AntPathRequestMatcher(ApiURI.URI_WATER_ZILAISHUI_H_XXX);
         mFilterForTaskFiles = new ThirdJWTTaskFilesBusiFilter(ApiURI.URI_FILES_XXX, authenticationManager);
         mFilterForCustomXXX = new ThirdJWTCustomXXXFilter(ApiURI.URI_CUSTOMIZE_XXX, authenticationManager);
         mFilterForReportForm = new ThirdJWTCommReportFormFilter(ApiURI.URI_COMM_REPORT_FORM_XXX, authenticationManager);
+        mFilterForCurrency = new ThirdJWTCurrencyFilter(ApiURI.URI_WATER_ZILAISHUI_H_XXX, authenticationManager);
         setControllerCheck(null);
     }
 
@@ -51,6 +55,9 @@ public class ThirdJWTBusiFilterMgr extends JWTAuthenticationFilter {
             } else if (mRequestMatcherForReportForm != null && mRequestMatcherForReportForm.matches(request)){
                 TraceLogMgr.setTraceIdByBusinessType("REPORT.FORM");
                 mFilterForReportForm.doFilterInternal(request, response, chain);
+            }else if (mRequestMatcherForCurrency != null && mRequestMatcherForCurrency.matches(request)){
+                TraceLogMgr.setTraceIdByBusinessType("CURRENCY");
+                mFilterForCurrency.doFilterInternal(request, response, chain);
             }
             else {
                 TraceLogMgr.setTraceIdByBusinessType("OTH");

+ 47 - 0
src/main/java/com/shkpr/service/aimodelpower/controllerfilter/third/ThirdJWTCurrencyFilter.java

@@ -0,0 +1,47 @@
+package com.shkpr.service.aimodelpower.controllerfilter.third;
+
+import com.shkpr.service.aimodelpower.constants.ApiURI;
+import com.shkpr.service.aimodelpower.controllercheck.ThirdCostomXXXControllerCheck;
+import com.shkpr.service.aimodelpower.controllerfilter.JWTAuthenticationFilter;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.web.util.matcher.RequestMatcher;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ThirdJWTCurrencyFilter extends JWTAuthenticationFilter {
+    private RequestMatcher mRequestMatcher = null;
+    private ThirdCostomXXXControllerCheck mControllerCheck = null;
+    private static final Map<String, String> msMapURI2Method;
+    static {
+        msMapURI2Method = new HashMap<String, String>();
+        msMapURI2Method.put(String.format("%s/%s", ApiURI.URI_WATER_ZILAISHUI_H, ApiURI.URI_WATER_ZILAISHUI_DAY), "POST");
+        msMapURI2Method.put(String.format("%s/%s", ApiURI.URI_WATER_ZILAISHUI_H, ApiURI.URI_WATER_ZILAISHUI_HOUR), "POST");
+    }
+
+    public ThirdJWTCurrencyFilter(AuthenticationManager authenticationManager) {
+        super(authenticationManager);
+        this.mStrThisSampleName = this.getClass().getSimpleName();
+        this.mControllerCheck = new ThirdCostomXXXControllerCheck(msMapURI2Method);
+        setControllerCheck(this.mControllerCheck);
+    }
+
+    public ThirdJWTCurrencyFilter(String url, AuthenticationManager authenticationManager) {
+        super(url, authenticationManager);
+        this.mStrThisSampleName = this.getClass().getSimpleName();
+        this.mControllerCheck = new ThirdCostomXXXControllerCheck(msMapURI2Method);
+        setControllerCheck(this.mControllerCheck);
+    }
+
+    @Override
+    public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
+        //System.out.println(this.mStrThisSampleName+"::doFilterInternal()...");
+        super.doFilterInternal(request, response, chain);
+    }
+}
+

+ 6 - 0
src/main/java/com/shkpr/service/aimodelpower/dbdao/DBMgrProxy.java

@@ -1,6 +1,7 @@
 package com.shkpr.service.aimodelpower.dbdao;
 
 import com.shkpr.service.aimodelpower.SpringContextUtil;
+import com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.service.intef.WaterCollecationService;
 import com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.service.intef.WaterTapWaterService;
 import com.shkpr.service.aimodelpower.dbdao.services.intef.*;
 
@@ -15,6 +16,7 @@ public class DBMgrProxy {
 
     //TODO 其他数据源
     private volatile WaterTapWaterService waterTapWaterService = null;
+    private volatile WaterCollecationService waterCollecationService = null;
 
     private static volatile DBMgrProxy msInstance = null;
     public static DBMgrProxy getInstance(){
@@ -45,6 +47,8 @@ public class DBMgrProxy {
             typeDefineDBService = (TypeDefineDBService)SpringContextUtil.getBean(TypeDefineDBService.class);
         if (waterTapWaterService == null)
             waterTapWaterService = (WaterTapWaterService)SpringContextUtil.getBean(WaterTapWaterService.class);
+        if (waterCollecationService == null)
+            waterCollecationService = (WaterCollecationService)SpringContextUtil.getBean(WaterCollecationService.class);
     }
 
     public RolePowerDBService applyRolePowerApi() {return rolePowerDBService;}
@@ -62,4 +66,6 @@ public class DBMgrProxy {
     public TestGeomInfoDBService applyTestGeomApi() {return  testGeomInfoDBService;}
 
     public WaterTapWaterService applyWaterTapWaterService() {return  waterTapWaterService;}
+
+    public WaterCollecationService applyWaterCollecationService() {return  waterCollecationService;}
 }

+ 63 - 0
src/main/java/com/shkpr/service/aimodelpower/dbdao/shizilaishuiDataSource/WaterCollecationDao.java

@@ -0,0 +1,63 @@
+package com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.StringUtils;
+
+import javax.sql.DataSource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName WaterCollecationDao
+ * @Description: TODO
+ * @Author LX
+ * @Date 2024/5/27
+ * @Version V1.0
+ **/
+@Slf4j
+@Repository
+public class WaterCollecationDao {
+    @Autowired
+    @Qualifier("childDatasource")
+    private DataSource childDataSource;
+
+    //TODO 查询样本及预测水量表;支持是否分页
+    public List<Map<String,Object>> getTbMWater(boolean isPage,int limit,int offset,String extend){
+        try{
+            String sql = "SELECT * FROM tb_m_water WHERE 1=1 ";
+            if(!StringUtils.isEmpty(extend)){
+                sql+=extend;
+            }
+            if(isPage) {
+                sql += " LIMIT " + limit + " OFFSET " + offset;
+            }
+            JdbcTemplate pgJdbc = new JdbcTemplate(childDataSource);
+            List<Map<String, Object>> tableData = pgJdbc.queryForList(sql);
+            return tableData;
+        }catch(Exception ex){
+            return null;
+        }
+    }
+
+    //TODO 查询小时水量预测表;支持是否分页
+    public List<Map<String,Object>> getTbMHourwater(boolean isPage,int limit,int offset,String extend){
+        try{
+            String sql = "SELECT * FROM tb_m_hourwater WHERE 1=1 ";
+            if(!StringUtils.isEmpty(extend)){
+                sql+=extend;
+            }
+            if(isPage) {
+                sql += " LIMIT " + limit + " OFFSET " + offset;
+            }
+            JdbcTemplate pgJdbc = new JdbcTemplate(childDataSource);
+            List<Map<String, Object>> tableData = pgJdbc.queryForList(sql);
+            return tableData;
+        }catch(Exception ex){
+            return null;
+        }
+    }
+}

+ 73 - 0
src/main/java/com/shkpr/service/aimodelpower/dbdao/shizilaishuiDataSource/service/WaterCollecationServiceImpl.java

@@ -0,0 +1,73 @@
+package com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.service;
+
+import com.global.base.log.LogLevelFlag;
+import com.global.base.log.LogPrintMgr;
+import com.shkpr.service.aimodelpower.constants.LogFlagBusiType;
+import com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.WaterCollecationDao;
+import com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.WaterZILAISHUIDao;
+import com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.service.intef.WaterCollecationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName WaterCollecationServiceImpl
+ * @Description: TODO
+ * @Author LX
+ * @Date 2024/5/27
+ * @Version V1.0
+ **/
+@Service
+public class WaterCollecationServiceImpl implements WaterCollecationService{
+
+    private String mStrClassName = "";
+    public WaterCollecationServiceImpl() {
+        mStrClassName = this.getClass().getSimpleName();
+    }
+
+    @SuppressWarnings("all")
+    @Autowired
+    private WaterCollecationDao waterCollecationDao;
+
+    @Override
+    public List<Map<String, Object>> getTbMWater(Boolean isPage, int limit, int offset, String extend) {
+        int nCode = 0;
+        String strMsg = "Success";
+        List<Map<String, Object>> arrRes = null;
+        try {
+            arrRes = waterCollecationDao.getTbMWater(isPage,limit,offset,extend);
+        }catch (Exception e){
+            nCode = LogLevelFlag.LOG_ERROR.ordinal();
+            strMsg = e.getLocalizedMessage();
+        }finally {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
+                    , LogFlagBusiType.BUSI_CHILD_DB_TAP_WATER.toStrValue()
+                    , mStrClassName
+                    , String.format("Batch Query TbMWater from database, code:{%d} msg:{%s} ..."
+                            , nCode, strMsg));
+        }
+        return arrRes;
+    }
+
+    @Override
+    public List<Map<String, Object>> getTbMHourwater(Boolean isPage, int limit, int offset, String extend) {
+        int nCode = 0;
+        String strMsg = "Success";
+        List<Map<String, Object>> arrRes = null;
+        try {
+            arrRes = waterCollecationDao.getTbMHourwater(isPage,limit,offset,extend);
+        }catch (Exception e){
+            nCode = LogLevelFlag.LOG_ERROR.ordinal();
+            strMsg = e.getLocalizedMessage();
+        }finally {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
+                    , LogFlagBusiType.BUSI_CHILD_DB_TAP_WATER.toStrValue()
+                    , mStrClassName
+                    , String.format("Batch Query TbMWater from database, code:{%d} msg:{%s} ..."
+                            , nCode, strMsg));
+        }
+        return arrRes;
+    }
+}

+ 20 - 0
src/main/java/com/shkpr/service/aimodelpower/dbdao/shizilaishuiDataSource/service/intef/WaterCollecationService.java

@@ -0,0 +1,20 @@
+package com.shkpr.service.aimodelpower.dbdao.shizilaishuiDataSource.service.intef;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName WaterCollecationService
+ * @Description: TODO
+ * @Author LX
+ * @Date 2024/5/27
+ * @Version V1.0
+ **/
+public interface WaterCollecationService {
+
+    //TODO 查询样本及预测水量表;支持是否分页
+    public List<Map<String,Object>> getTbMWater(Boolean isPage, int limit, int offset, String extend);
+
+    //TODO 查询样本及预测水量表;支持是否分页
+    public List<Map<String,Object>> getTbMHourwater(Boolean isPage, int limit, int offset, String extend);
+}

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

@@ -92,14 +92,14 @@ public class ScheduleTaskMgr {
         }
     }
 
-    //TODO 每天整点的分执行检查小时用水量是否对齐,检查时间范围为当前时间到昨天
-    @Scheduled(cron = "0 10 * * * *")
+    //TODO 每天整点的分执行检查小时用水量是否对齐,检查时间范围为当前时间到昨天
+    @Scheduled(cron = "0 5 * * * *")
     public void executeTaskEveryHourAtTenMinutesRecordAll() {
         KprAimTapWaterBizFun.checkRecordAllData();
     }
 
     //TODO 每天整点的十分执行检查小时用水量是否对齐,检查时间范围为当前时间到昨天
-    @Scheduled(cron = "0 15 * * * *")
+    @Scheduled(cron = "0 10 * * * *")
     public void executeTaskEveryHourAtTenMinutesRecord() {
         KprAimTapWaterBizFun.checkRecordData();
     }

+ 68 - 0
src/main/java/com/shkpr/service/aimodelpower/jsonbean/zilaishui/JPTbMHourWater.java

@@ -0,0 +1,68 @@
+package com.shkpr.service.aimodelpower.jsonbean.zilaishui;
+
+import com.global.base.log.LogLevelFlag;
+import com.global.base.log.LogPrintMgr;
+import com.shkpr.service.aimodelpower.commtools.TimeTool;
+import com.shkpr.service.aimodelpower.controllervalid.CommonParamValidList;
+import com.shkpr.service.aimodelpower.controllervalid.CommonParamValidSS;
+import lombok.Data;
+import org.hibernate.validator.constraints.Range;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
+
+/**
+ * @ClassName JPTbMHourWater
+ * @Description: TODO 查询日预测小时数据
+ * @Author LX
+ * @Date 2024/5/27
+ * @Version V1.0
+ **/
+@Data
+public class JPTbMHourWater {
+    private Boolean isPage = false;//是否分页 默认false
+
+    @Range(min = 0, max = 65535, groups = {CommonParamValidList.class, CommonParamValidSS.class})
+    private Integer limit = 20;//若分页 默认数为20
+
+    @Range(min = 0, max = Integer.MAX_VALUE, groups = {CommonParamValidList.class, CommonParamValidSS.class})
+    private Integer offset = 0;//若分页 默认起始值为0
+
+    private Long queryDate;//开始日期 (实际时间为 年 月 日(就为当月的一号),时分秒为 00:00:00,如2023-03-01 00:00:00)
+
+    //业务字段
+    private String forDateStr;
+
+    public boolean checkValid(){
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        StringBuilder strSql = new StringBuilder("");
+        if(queryDate==null){
+            //TODO 说明前端没传,那么默认为今天
+            LocalDateTime nowDate = LocalDateTime.now();//结束时间
+            nowDate = nowDate.with(TemporalAdjusters.lastDayOfMonth());
+            nowDate = nowDate.withHour(0);
+            nowDate = nowDate.withMinute(0);
+            nowDate = nowDate.withSecond(0);
+
+            strSql.append(" AND \"Date\" =  '"+nowDate.format(formatter)+"' ");
+            forDateStr = strSql.toString();
+        }else if(queryDate!=null){
+            try {
+                    //TODO 说明符合可组成查询日期的条件
+                    String sqlStr = LocalDateTime.ofInstant(Instant.ofEpochMilli(queryDate), ZoneId.systemDefault())
+                            .withHour(0).withMinute(0).withSecond(0).format(formatter);
+                    strSql.append(" AND \"Date\" =  '"+sqlStr+"' ");
+                    forDateStr = strSql.toString();
+            }catch(Exception ex){
+                LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR, "JPCustomerMeterSS", "JPCustomerMeterSS"
+                        ,String.format("errorMsg:%s====>"
+                                ,ex.getLocalizedMessage()));
+                return false;
+            }
+        }
+        return true;
+    }
+}

+ 103 - 0
src/main/java/com/shkpr/service/aimodelpower/jsonbean/zilaishui/JPTbMWater.java

@@ -0,0 +1,103 @@
+package com.shkpr.service.aimodelpower.jsonbean.zilaishui;
+
+import com.global.base.log.LogLevelFlag;
+import com.global.base.log.LogPrintMgr;
+import com.shkpr.service.aimodelpower.commtools.TimeTool;
+import com.shkpr.service.aimodelpower.controllervalid.CommonParamValidList;
+import com.shkpr.service.aimodelpower.controllervalid.CommonParamValidSS;
+import lombok.Data;
+import org.hibernate.validator.constraints.Range;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
+
+/**
+ * @ClassName JPTbMWater
+ * @Description: TODO 查询日预测数据
+ * @Author LX
+ * @Date 2024/5/27
+ * @Version V1.0
+ **/
+@Data
+public class JPTbMWater {
+    private Boolean isPage = false;//是否分页 默认false
+
+    @Range(min = 0, max = 65535, groups = {CommonParamValidList.class, CommonParamValidSS.class})
+    private Integer limit = 20;//若分页 默认数为20
+
+    @Range(min = 0, max = Integer.MAX_VALUE, groups = {CommonParamValidList.class, CommonParamValidSS.class})
+    private Integer offset = 0;//若分页 默认起始值为0
+
+    private Long startDate;//开始日期 (实际时间为 年 月 日(就为当月的一号),时分秒为 00:00:00,如2023-03-01 00:00:00)
+
+    private Long endDate;//结束日期 (实际时间为 年 月 日(就为当月的一号),时分秒为 00:00:00,如2023-03-01 00:00:00)
+
+    //业务字段
+    private String forDateStr;
+
+    public boolean checkValid(){
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        if(startDate==null&&endDate!=null){
+            return false;
+        }
+        StringBuilder strSql = new StringBuilder("");
+        if(startDate==null&&endDate==null){
+            //TODO 说明前端没传,那么默认为当前月往前推到一号作为开始和结束条件
+            LocalDateTime nowDate = LocalDateTime.now();//结束时间
+            nowDate = nowDate.with(TemporalAdjusters.lastDayOfMonth());
+            nowDate = nowDate.withHour(0);
+            nowDate = nowDate.withMinute(0);
+            nowDate = nowDate.withSecond(0);
+
+            LocalDateTime startLocalDate = nowDate;
+            startLocalDate = startLocalDate.with(TemporalAdjusters.firstDayOfMonth());
+
+            String startLocalDateStr = startLocalDate.format(formatter);
+            String endLocalDateStr = nowDate.format(formatter);
+            strSql.append(" AND \"Date\" BETWEEN  '"+startLocalDateStr+"' "+"AND '"+endLocalDateStr+"'");
+            forDateStr = strSql.toString();
+            startDate = TimeTool.convertDateStr2UTC(startLocalDateStr);
+            endDate = TimeTool.convertDateStr2UTC(endLocalDateStr);
+        }else if(startDate!=null&&endDate!=null){
+            try {
+                LocalDateTime startLocalDate = LocalDateTime.parse(TimeTool.convertUTC2DateStr(startDate, TimeTool.TIMESTAMP_FORMAT), DateTimeFormatter.ofPattern(TimeTool.TIMESTAMP_FORMAT));
+                LocalDateTime endLocalDate = LocalDateTime.parse(TimeTool.convertUTC2DateStr(endDate, TimeTool.TIMESTAMP_FORMAT), DateTimeFormatter.ofPattern(TimeTool.TIMESTAMP_FORMAT));
+//                long monthsBetween = ChronoUnit.MONTHS.between(startLocalDate, endLocalDate);
+                if(startLocalDate.isAfter(endLocalDate)){
+                    return false;
+                }else if(endLocalDate.isBefore(startLocalDate)){
+                    return false;
+                }else if(startLocalDate .equals(endLocalDate)||startLocalDate.isBefore(endLocalDate)){
+                    //TODO 说明符合可组成查询日期的条件
+                    //TODO 按照需求,特殊化结束时间再加4天
+                    startLocalDate = startLocalDate.with(TemporalAdjusters.firstDayOfMonth());
+                    endLocalDate = endLocalDate.minusDays(-4).with(TemporalAdjusters.lastDayOfMonth());
+                    String startLocalDateStr = startLocalDate.format(formatter);
+                    String endLocalDateStr = endLocalDate.format(formatter);
+                    strSql.append(" AND \"Date\" BETWEEN  '"+startLocalDateStr+"' "+"AND '"+endLocalDateStr+"'");
+                    forDateStr = strSql.toString();
+                    startDate = TimeTool.convertDateStr2UTC(startLocalDateStr);
+                    endDate = TimeTool.convertDateStr2UTC(endLocalDateStr);
+                }
+            }catch(Exception ex){
+                LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR, "JPCustomerMeterSS", "JPCustomerMeterSS"
+                        ,String.format("errorMsg:%s====>"
+                                ,ex.getLocalizedMessage()));
+                return false;
+            }
+        }else
+        if(startDate!=null&&endDate==null){//警告没事,增加代码可读性
+            //TODO 说明startDate传了  endDate没传 , 那么endDate为startDate月的最后一天
+            LocalDateTime startLocalDate = LocalDateTime.parse(TimeTool.convertUTC2DateStr(startDate, TimeTool.TIMESTAMP_FORMAT), DateTimeFormatter.ofPattern(TimeTool.TIMESTAMP_FORMAT))
+                    .with(TemporalAdjusters.firstDayOfMonth());
+            LocalDateTime endLocalDate = startLocalDate.with(TemporalAdjusters.lastDayOfMonth());
+            String startLocalDateStr = startLocalDate.format(formatter);
+            String endLocalDateStr = endLocalDate.format(formatter);
+            strSql.append(" AND \"Date\" BETWEEN  '"+startLocalDateStr+"' "+"AND '"+endLocalDateStr+"'");
+            forDateStr = strSql.toString();
+            endDate = TimeTool.convertDateStr2UTC(endLocalDateStr);
+        }
+        return true;
+    }
+}