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.commtools.TimeTool; 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.dto.zilaishuiModel.InPumpModel; import com.shkpr.service.aimodelpower.exception.SelfException; import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPRealHourWater; import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPTbLevelHourWater; import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPTbMHourWater; import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPTbMWater; import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Value; 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.io.*; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.*; 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); } /** * 获取配置文件的 InputStreamReader,支持 UTF-8 编码 * * @param configFileName 配置文件名 * @return InputStreamReader 对象,如果文件不存在则返回 null */ public InputStream getConfigStream(String configFileName) throws Exception{ InputStream inputStream = null; try { // 尝试从文件系统加载 File configFile = new File(configFileName); if (configFile.exists()) { inputStream = new FileInputStream(configFile); } else { // 尝试从 JAR 文件类目录加载 inputStream = getClass().getClassLoader().getResourceAsStream(configFileName); } } catch (FileNotFoundException e) { // 如果文件未找到,尝试从类路径加载 inputStream = getClass().getClassLoader().getResourceAsStream(configFileName); } // 如果 inputStream 不为空,返回 InputStreamReader 并指定 UTF-8 编码 if (inputStream != null) { InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); // 将 InputStreamReader 的内容写入字符串 StringBuilder sb = new StringBuilder(); char[] buffer = new char[1024]; int len; while ((len = reader.read(buffer)) != -1) { sb.append(buffer, 0, len); } String content = sb.toString(); // 将字符串重新编码为字节数组,并转换为 InputStream InputStream returnInputStream = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)); return returnInputStream; } else { return null; // 文件未找到 } } @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 resResult = new ResponseRes(); resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode()); resResult.setResmsg(MSG_SUCCESS); resResult.setResdata(""); try { // 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()); LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId, String.format("startDate:${%s}", TimeTool.convertUTC2DateStr(TimeTool.getCurMsUTC(), TimeTool.TIMESTAMP_FORMAT))); //TODO 自来水相关:参数处理 ResponseRes oRes = new ResponseRes(); if ("water_volume_prediction".equals(KprAimWaterCollecationBizFun.databaseName)) { //转成集合,最多三级 // 最终的三级结构集合 Map>> result = getWaterWorks(); Map workZonIds = getWaterZoneIds(); if (!MapUtils.isEmpty(result) && !MapUtils.isEmpty(workZonIds)) { int level = findOrgLevel(result, KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds, oJsonParam.getOrgId()).get().toString()); oRes = KprAimWaterCollecationBizFun.selectTbWaterList(oJsonParam, level, result, workZonIds); } } else { oRes = KprAimWaterCollecationBizFun.selectTbWaterList(oJsonParam, null, null, null); } LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId, String.format("endDate:${%s}", TimeTool.convertUTC2DateStr(TimeTool.getCurMsUTC(), TimeTool.TIMESTAMP_FORMAT))); if (oRes != null && ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) { resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata())); } else { resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode()); resResult.setResmsg(MSG_FAILED); resResult.setResdata(""); } 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; }catch(Exception ex){ resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode()); resResult.setResmsg(MSG_FAILED+ex.getLocalizedMessage()); resResult.setResdata(""); return resResult; } } //TODO 自来水: /** * 查找 orgId 的层级 * * @param result 三级结构集合 * @param orgId 要查找的组织机构 ID * @return 1: 一级机构, 2: 二级机构, 3: 三级机构, -1: 未找到 */ public static int findOrgLevel(Map>> result, String orgId) { // 遍历一级机构 for (Map.Entry>> entry : result.entrySet()) { // 如果 orgId 是一级机构 if (entry.getKey().equals(orgId)) { return 1; } // 遍历二级机构 for (Map.Entry> subEntry : entry.getValue().entrySet()) { // 如果 orgId 是二级机构 if (subEntry.getKey().equals(orgId)) { return 2; } // 遍历三级机构 for (String level3 : subEntry.getValue()) { // 如果 orgId 是三级机构 if (level3.equals(orgId)) { return 3; } } } } // 未找到 return -1; } //TODO 自来水:拆分配置集合 public Map>> getWaterWorks()throws Exception{ Map>> result = new HashMap<>(); // // Properties properties = new Properties(); // try (InputStream inputStream = WaterCollecationController.class.getClassLoader().getResourceAsStream("application.properties"); // InputStreamReader reader = new InputStreamReader(inputStream, Charset.forName("GBK"))) { // // 2. 使用 InputStreamReader 加载属性文件 // properties.load(reader); // } catch (IOException e) { // e.printStackTrace(); // System.out.println("加载配置文件失败!"); // return null; // } // String waterworksNodes = properties.getProperty("waterworks.nodes");//关系字符串 String waterworksNodes = "北碚水厂/北碚水厂二级低压,北碚水厂二级高压;井口水厂/井口水厂二级低压,井口水厂二级高压;丰收坝水厂/丰收坝水厂二级低压,丰收坝水厂二级高压,马鞍山加压站[马鞍山低压、马鞍山高压、双山东加压站],陈家坝加压站,九C加压站,金鳌山加压站;沙坪坝水厂/沙坪坝水厂二级高压;和尚山水厂/和尚山水厂二级高压;渝中区水厂/渝中区水厂二级低压,渝中区水厂二级高压";//关系字符串 // 按分号分割每个组织机构 String[] organizations = waterworksNodes.split(";"); for (String org : organizations) { // 按斜杠分割一级和二级 String[] parts = org.split("/"); String level1 = parts[0]; // 一级机构 String level2And3 = parts[1]; // 二级和三级机构 // 按逗号分割二级机构 String[] level2List = level2And3.split(","); Map> level2Map = new HashMap<>(); for (String level2 : level2List) { // 判断是否有三级机构(用[]包裹) if (level2.contains("[")) { // 提取二级机构名称 String level2Name = level2.substring(0, level2.indexOf("[")); // 提取三级机构 String level3Str = level2.substring(level2.indexOf("[") + 1, level2.indexOf("]")); // 按顿号分割三级机构 List level3List = Arrays.asList(level3Str.split("、")); level2Map.put(level2Name, level3List); } else { // 没有三级机构,直接放入二级机构 level2Map.put(level2, new ArrayList<>()); } } // 将一级机构和对应的二级机构放入结果集合 result.put(level1, level2Map); } return result; } public Map getWaterZoneIds()throws Exception{ Map workZonIds = new HashMap<>(); // InputStream inputStream = getConfigStream("application.properties"); // Properties properties = new Properties(); // properties.load(inputStream); // String waterworksZoneIds = properties.getProperty("waterworks.zonids");//关系字符串 String waterworksZoneIds = "北碚水厂,UZD299F12944DC10957HJ;北碚水厂二级低压,UZD299F12B080010A75UD;北碚水厂二级高压,UZD2ADE9DCE62C00560KE;井口水厂,UZD299F12DF5241082772;井口水厂二级低压,UZD2ADE9F04BC800291E4;井口水厂二级高压,UZD2ADE9F15E7C00043IE;丰收坝水厂,UZD299F1301D04107668V;丰收坝水厂二级低压,UZD2ADE9F246FC00472W0;丰收坝水厂二级高压,UZD2ADE9F3701800886FI;马鞍山加压站,UZD2AAD4D9C3AC00467FC;马鞍山低压,UZD2B3F3332AD000432ZL;马鞍山高压,UZD2B3F3345C7400531LY;双山东加压站,UZD2AAD4DC336800067KM;陈家坝加压站,UZD2AAD4DA986000249L4;九C加压站,UZD2AAD4DEF06C0063AT2;金鳌山加压站,UZD2AAD4DB6D3C00837DP;沙坪坝水厂,UZD299F133DE5C1066A5L;沙坪坝水厂二级高压,UZD2ADEA02CD6C00226NO;和尚山水厂,UZD299F1389E6010476AV;和尚山水厂二级高压,UZD2ADEA0374BC002A9YC;渝中区水厂,UZD299F139CB2410181HP;渝中区水厂二级低压,UZD2ADEA05F50C00945JK;渝中区水厂二级高压,UZD2ADEA06901C006A3PR";//关系字符串 // 按分号分割键值对 String[] keyValuePairs = waterworksZoneIds.split(";"); // 遍历键值对 for (String pair : keyValuePairs) { // 按逗号分割键和值 String[] keyValue = pair.split(","); if (keyValue.length == 2) { workZonIds.put(keyValue[0], keyValue[1]); } } return workZonIds; } /** * @Author Lx * @Description //TODO 获取实时数据曲线 * @Date 14:49 2025/4/24 * @Param * @return **/ @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_REAL_HOUR) public ResponseRes realHourData(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); JPRealHourWater oJsonParam = FastJsonUtil.fromJSONByGson(HttpTool.getJsonBodyStr(request), JPRealHourWater.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 resResult = new ResponseRes(); resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode()); resResult.setResmsg(MSG_SUCCESS); resResult.setResdata(""); try { ResponseRes oRes = KprAimWaterCollecationBizFun.selectRealHourWaterList(oJsonParam); if (oRes != null && ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) { resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata())); } else { resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode()); resResult.setResmsg(MSG_FAILED); resResult.setResdata(""); } 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; }catch(Exception ex){ resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode()); resResult.setResmsg(MSG_FAILED+ex.getLocalizedMessage()); resResult.setResdata(""); 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 resResult = new ResponseRes(); resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode()); resResult.setResmsg(MSG_SUCCESS); resResult.setResdata(""); try { // 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()); LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId , "0000"); ResponseRes oRes = new ResponseRes(); LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId , KprAimWaterCollecationBizFun.databaseName); LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId , String.valueOf("water_volume_prediction".equals(KprAimWaterCollecationBizFun.databaseName))); if ("water_volume_prediction".equals(KprAimWaterCollecationBizFun.databaseName)) { LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId , "1111"); //转成集合,最多三级 // 最终的三级结构集合 Map>> result = getWaterWorks(); Map workZonIds = getWaterZoneIds(); if (!MapUtils.isEmpty(result) && !MapUtils.isEmpty(workZonIds)) { int level = findOrgLevel(result, KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds, oJsonParam.getOrgId()).get().toString()); oRes = KprAimWaterCollecationBizFun.selectTbHourWaterList(oJsonParam, level, result, workZonIds); } } else { oRes = KprAimWaterCollecationBizFun.selectTbHourWaterList(oJsonParam, null, null, null); } if (oRes != null && ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) { resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata())); } else { resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode()); resResult.setResmsg(MSG_FAILED); resResult.setResdata(""); } 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; }catch(Exception ex){ resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode()); resResult.setResmsg(MSG_FAILED+ex.getLocalizedMessage()); resResult.setResdata(""); return resResult; } } //取水分组类型 @Value("${in.sub.type}") private String inSubType; //取水分组类型 @Value("${out.sub.type}") private String outSubType; /** * @Author Lx * @Description //TODO 小时泵房取水能耗 * @Date 17:02 2024/5/28 * @Param * @return **/ @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_HOUR_PUMP_IN) public ResponseRes hourPumpInData(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 resResult = new ResponseRes(); resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode()); resResult.setResmsg(MSG_SUCCESS); resResult.setResdata(""); ResponseRes oRes = KprAimWaterCollecationBizFun.selectTbMHourwaterWaterwithdrawals(oJsonParam,inSubType); if(oRes!=null&&ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) { resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata())); }else{ resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode()); resResult.setResmsg(MSG_FAILED); resResult.setResdata(""); } 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; } /** * @Author Lx * @Description //TODO 小时泵房供水能耗 * @Date 17:02 2024/5/28 * @Param * @return **/ @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_HOUR_PUMP_OUT) public ResponseRes hourPumpOutData(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 resResult = new ResponseRes(); resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode()); resResult.setResmsg(MSG_SUCCESS); resResult.setResdata(""); ResponseRes oRes = new ResponseRes(); try { if ("water_volume_prediction".equals(KprAimWaterCollecationBizFun.databaseName)) { LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId , "1111"); //转成集合,最多三级 // 最终的三级结构集合 Map>> result = getWaterWorks(); Map workZonIds = getWaterZoneIds(); if (!MapUtils.isEmpty(result) && !MapUtils.isEmpty(workZonIds)) { int level = findOrgLevel(result, KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds, oJsonParam.getOrgId()).get().toString()); List childList = new ArrayList<>();//要查询的组织机构名称集合 List childIdList = new ArrayList<>();//要查询的组织机构id集合 if (level==1){ //TODO 一级已经没有数据了(水厂), 查询一级的话则是将其下的供水数据相加 //TODO 查询二级,及其二级带的三级 Optional zoneNameOpt = KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds,oJsonParam.getOrgId()); if(zoneNameOpt.isPresent()){ String zoneName = zoneNameOpt.get().toString(); Map> childMap = result.get(zoneName);//二级 Collection> child2Map = childMap.values();//三级 // 添加二级组织机构名称(childMap 的 keySet) childList.addAll(childMap.keySet()); // 添加三级组织机构名称(child2Map 的所有 List) for (List child2List : child2Map) { childList.addAll(child2List); } } }else if(level==2){ //TODO 如果是二级,就查询其自身,看看其下还有没有集合,有的话就查其下的所有集合,没有的话就查其自身 Optional zoneNameOpt = KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds,oJsonParam.getOrgId()); if(zoneNameOpt.isPresent()) { String zoneName = zoneNameOpt.get().toString(); List childMap = new ArrayList<>();//三级 // 遍历第一级 Map for (Map.Entry>> entry : result.entrySet()) { Map> nestedMap = entry.getValue(); // 检查第二级键 if (nestedMap.containsKey(zoneName)) { childMap = nestedMap.get(zoneName); } } if(childMap.size()>0) { // 添三级组织机构名称(childMap 的 keySet) childList.addAll(childMap); }else{ childList.add(zoneName); } } }else if(level==3){ LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, "" , "5555"); //TODO 如果是三级,就查询其自身 Optional zoneNameOpt = KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds,oJsonParam.getOrgId()); if(zoneNameOpt.isPresent()) { String zoneName = zoneNameOpt.get().toString(); childList.add(zoneName); } } // 结果集合,存储 childList 对应的组织机构 ID // 遍历 childList,从 workZonIds 中获取对应的 ID for (String orgName : childList) { String orgId = workZonIds.get(orgName); if (orgId != null) { // 避免空值 childIdList.add(orgId); } } List resMap = new ArrayList<>(); for (String id:childIdList) { JPTbMHourWater hourWater = new JPTbMHourWater(); hourWater.setIsPage(oJsonParam.getIsPage()); hourWater.setOrgId(id); hourWater.setLimit(oJsonParam.getLimit()); hourWater.setOffset(oJsonParam.getOffset()); hourWater.setQueryDate(oJsonParam.getQueryDate()); hourWater.checkValid(); ResponseRes obj = KprAimWaterCollecationBizFun.selectTbMHourwaterWatersupply(hourWater, outSubType); resMap.addAll((List)obj.getResdata()); } oRes.setRescode(ResponseCode.RESULT_NORMAL.toStrCode()); oRes.setResmsg(MSG_SUCCESS); oRes.setResdata(FastJsonUtil.toJSON(resMap)); } } else { oRes.setRescode(ResponseCode.RESULT_NORMAL.toStrCode()); oRes.setResmsg(MSG_SUCCESS); oRes = KprAimWaterCollecationBizFun.selectTbMHourwaterWatersupply(oJsonParam, outSubType); } }catch(Exception ex){ ex.printStackTrace(); } if(oRes!=null&&ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) { resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata())); }else{ resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode()); resResult.setResmsg(MSG_FAILED); resResult.setResdata(""); } 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; } /** * TODO 水位预测相关 */ @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_HOUR_LEVEL) public ResponseRes hourlevelData(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); JPTbLevelHourWater oJsonParam = FastJsonUtil.fromJSONByGson(HttpTool.getJsonBodyStr(request), JPTbLevelHourWater.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 resResult = new ResponseRes(); 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.selectTbHourLevelList(oJsonParam); if(oRes!=null&&ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) { resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata())); }else{ resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode()); resResult.setResmsg(MSG_FAILED); resResult.setResdata(""); } 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; } }