WaterCollecationController.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656
  1. package com.shkpr.service.aimodelpower.controllerapi;
  2. import com.global.base.log.LogLevelFlag;
  3. import com.global.base.log.LogPrintMgr;
  4. import com.global.base.tools.FastJsonUtil;
  5. import com.shkpr.service.aimodelpower.bizmgr.KprAimWaterCollecationBizFun;
  6. import com.shkpr.service.aimodelpower.commtools.CommTool;
  7. import com.shkpr.service.aimodelpower.commtools.HttpTool;
  8. import com.shkpr.service.aimodelpower.commtools.TimeTool;
  9. import com.shkpr.service.aimodelpower.constants.ApiURI;
  10. import com.shkpr.service.aimodelpower.constants.LogFlagBusiType;
  11. import com.shkpr.service.aimodelpower.controllerfilter.TokenAuthenticationService;
  12. import com.shkpr.service.aimodelpower.dto.MsgNotifyBean;
  13. import com.shkpr.service.aimodelpower.dto.ResponseCode;
  14. import com.shkpr.service.aimodelpower.dto.ResponseRes;
  15. import com.shkpr.service.aimodelpower.dto.zilaishuiModel.InPumpModel;
  16. import com.shkpr.service.aimodelpower.exception.SelfException;
  17. import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPRealHourWater;
  18. import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPTbLevelHourWater;
  19. import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPTbMHourWater;
  20. import com.shkpr.service.aimodelpower.jsonbean.zilaishui.JPTbMWater;
  21. import org.apache.commons.collections.MapUtils;
  22. import org.springframework.beans.factory.annotation.Value;
  23. import org.springframework.web.bind.annotation.PostMapping;
  24. import org.springframework.web.bind.annotation.RequestHeader;
  25. import org.springframework.web.bind.annotation.RequestMapping;
  26. import org.springframework.web.bind.annotation.RestController;
  27. import javax.servlet.http.HttpServletRequest;
  28. import java.io.*;
  29. import java.nio.charset.Charset;
  30. import java.nio.charset.StandardCharsets;
  31. import java.util.*;
  32. import java.util.concurrent.atomic.AtomicInteger;
  33. /**
  34. * @ClassName WaterCollecationController
  35. * @Description: TODO 水量预测相关接口
  36. * @Author LX
  37. * @Date 2024/5/27
  38. * @Version V1.0
  39. **/
  40. @RequestMapping(ApiURI.URI_WATER_ZILAISHUI_H)
  41. @RestController
  42. public class WaterCollecationController {
  43. final String MSG_SUCCESS = "success.";
  44. final String MSG_FAILED = "failed.";
  45. private String mStrClassName;
  46. private AtomicInteger mSeqNotify = null;
  47. public WaterCollecationController() {
  48. mStrClassName = "WaterCollecationController";
  49. mSeqNotify = new AtomicInteger(0);
  50. }
  51. /**
  52. * 获取配置文件的 InputStreamReader,支持 UTF-8 编码
  53. *
  54. * @param configFileName 配置文件名
  55. * @return InputStreamReader 对象,如果文件不存在则返回 null
  56. */
  57. public InputStream getConfigStream(String configFileName) throws Exception{
  58. InputStream inputStream = null;
  59. try {
  60. // 尝试从文件系统加载
  61. File configFile = new File(configFileName);
  62. if (configFile.exists()) {
  63. inputStream = new FileInputStream(configFile);
  64. } else {
  65. // 尝试从 JAR 文件类目录加载
  66. inputStream = getClass().getClassLoader().getResourceAsStream(configFileName);
  67. }
  68. } catch (FileNotFoundException e) {
  69. // 如果文件未找到,尝试从类路径加载
  70. inputStream = getClass().getClassLoader().getResourceAsStream(configFileName);
  71. }
  72. // 如果 inputStream 不为空,返回 InputStreamReader 并指定 UTF-8 编码
  73. if (inputStream != null) {
  74. InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
  75. // 将 InputStreamReader 的内容写入字符串
  76. StringBuilder sb = new StringBuilder();
  77. char[] buffer = new char[1024];
  78. int len;
  79. while ((len = reader.read(buffer)) != -1) {
  80. sb.append(buffer, 0, len);
  81. }
  82. String content = sb.toString();
  83. // 将字符串重新编码为字节数组,并转换为 InputStream
  84. InputStream returnInputStream = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
  85. return returnInputStream;
  86. } else {
  87. return null; // 文件未找到
  88. }
  89. }
  90. @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_DAY)
  91. public ResponseRes dayData(HttpServletRequest request
  92. , @RequestHeader(value= ApiURI.HEADER_CLIENT_TYPE, required=false) String strClientType
  93. , @RequestHeader(value= ApiURI.HEADER_USER_AGENT, required=false) String strUserAgent) throws Exception{
  94. final String URI_PATH = request.getRequestURI();
  95. final String strPlatform = CommTool.getPlatformByAgent(strClientType, strUserAgent);
  96. final String strUserId = (String) request.getAttribute(TokenAuthenticationService.HEADER_USERID);
  97. JPTbMWater oJsonParam = FastJsonUtil.fromJSONByGson(HttpTool.getJsonBodyStr(request), JPTbMWater.class);
  98. if (oJsonParam == null
  99. || !oJsonParam.checkValid()) {
  100. throw new SelfException(ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrCode()
  101. , String.format(ApiURI.EXCEPTION_FORMAT
  102. , strPlatform
  103. , URI_PATH
  104. , ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrMsg()));
  105. }
  106. long llReqBefore = System.currentTimeMillis();
  107. String strRunSeq = String.format("%d-%d", llReqBefore, mSeqNotify.incrementAndGet());
  108. ResponseRes<String> resResult = new ResponseRes<String>();
  109. resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
  110. resResult.setResmsg(MSG_SUCCESS);
  111. resResult.setResdata("");
  112. try {
  113. // 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());
  114. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(),
  115. mStrClassName, strUserId, String.format("startDate:${%s}", TimeTool.convertUTC2DateStr(TimeTool.getCurMsUTC(), TimeTool.TIMESTAMP_FORMAT)));
  116. //TODO 自来水相关:参数处理
  117. ResponseRes oRes = new ResponseRes();
  118. if ("water_volume_prediction".equals(KprAimWaterCollecationBizFun.databaseName)) {
  119. //转成集合,最多三级
  120. // 最终的三级结构集合
  121. Map<String, Map<String, List<String>>> result = getWaterWorks();
  122. Map<String, String> workZonIds = getWaterZoneIds();
  123. if (!MapUtils.isEmpty(result) && !MapUtils.isEmpty(workZonIds)) {
  124. int level = findOrgLevel(result, KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds, oJsonParam.getOrgId()).get().toString());
  125. oRes = KprAimWaterCollecationBizFun.selectTbWaterList(oJsonParam, level, result, workZonIds);
  126. }
  127. } else {
  128. oRes = KprAimWaterCollecationBizFun.selectTbWaterList(oJsonParam, null, null, null);
  129. }
  130. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(),
  131. mStrClassName, strUserId, String.format("endDate:${%s}", TimeTool.convertUTC2DateStr(TimeTool.getCurMsUTC(), TimeTool.TIMESTAMP_FORMAT)));
  132. if (oRes != null && ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) {
  133. resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata()));
  134. } else {
  135. resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode());
  136. resResult.setResmsg(MSG_FAILED);
  137. resResult.setResdata("");
  138. }
  139. resResult.setTimestamp(System.currentTimeMillis());
  140. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
  141. , String.format("%s:%s seq:{%s} rescode:{%s} resmsg:{%s} time:{%d ms} end<===="
  142. , strPlatform
  143. , URI_PATH
  144. , strRunSeq
  145. , resResult.getRescode()
  146. , resResult.getResmsg()
  147. , resResult.getTimestamp() - llReqBefore));
  148. return resResult;
  149. }catch(Exception ex){
  150. resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode());
  151. resResult.setResmsg(MSG_FAILED+ex.getLocalizedMessage());
  152. resResult.setResdata("");
  153. return resResult;
  154. }
  155. }
  156. //TODO 自来水:
  157. /**
  158. * 查找 orgId 的层级
  159. *
  160. * @param result 三级结构集合
  161. * @param orgId 要查找的组织机构 ID
  162. * @return 1: 一级机构, 2: 二级机构, 3: 三级机构, -1: 未找到
  163. */
  164. public static int findOrgLevel(Map<String, Map<String, List<String>>> result, String orgId) {
  165. // 遍历一级机构
  166. for (Map.Entry<String, Map<String, List<String>>> entry : result.entrySet()) {
  167. // 如果 orgId 是一级机构
  168. if (entry.getKey().equals(orgId)) {
  169. return 1;
  170. }
  171. // 遍历二级机构
  172. for (Map.Entry<String, List<String>> subEntry : entry.getValue().entrySet()) {
  173. // 如果 orgId 是二级机构
  174. if (subEntry.getKey().equals(orgId)) {
  175. return 2;
  176. }
  177. // 遍历三级机构
  178. for (String level3 : subEntry.getValue()) {
  179. // 如果 orgId 是三级机构
  180. if (level3.equals(orgId)) {
  181. return 3;
  182. }
  183. }
  184. }
  185. }
  186. // 未找到
  187. return -1;
  188. }
  189. //TODO 自来水:拆分配置集合
  190. public Map<String,Map<String,List<String>>> getWaterWorks()throws Exception{
  191. Map<String, Map<String, List<String>>> result = new HashMap<>();
  192. //
  193. // Properties properties = new Properties();
  194. // try (InputStream inputStream = WaterCollecationController.class.getClassLoader().getResourceAsStream("application.properties");
  195. // InputStreamReader reader = new InputStreamReader(inputStream, Charset.forName("GBK"))) {
  196. // // 2. 使用 InputStreamReader 加载属性文件
  197. // properties.load(reader);
  198. // } catch (IOException e) {
  199. // e.printStackTrace();
  200. // System.out.println("加载配置文件失败!");
  201. // return null;
  202. // }
  203. // String waterworksNodes = properties.getProperty("waterworks.nodes");//关系字符串
  204. String waterworksNodes = "北碚水厂/北碚水厂二级低压,北碚水厂二级高压;井口水厂/井口水厂二级低压,井口水厂二级高压;丰收坝水厂/丰收坝水厂二级低压,丰收坝水厂二级高压,马鞍山加压站[马鞍山低压、马鞍山高压、双山东加压站],陈家坝加压站,九C加压站,金鳌山加压站;沙坪坝水厂/沙坪坝水厂二级高压;和尚山水厂/和尚山水厂二级高压;渝中区水厂/渝中区水厂二级低压,渝中区水厂二级高压";//关系字符串
  205. // 按分号分割每个组织机构
  206. String[] organizations = waterworksNodes.split(";");
  207. for (String org : organizations) {
  208. // 按斜杠分割一级和二级
  209. String[] parts = org.split("/");
  210. String level1 = parts[0]; // 一级机构
  211. String level2And3 = parts[1]; // 二级和三级机构
  212. // 按逗号分割二级机构
  213. String[] level2List = level2And3.split(",");
  214. Map<String, List<String>> level2Map = new HashMap<>();
  215. for (String level2 : level2List) {
  216. // 判断是否有三级机构(用[]包裹)
  217. if (level2.contains("[")) {
  218. // 提取二级机构名称
  219. String level2Name = level2.substring(0, level2.indexOf("["));
  220. // 提取三级机构
  221. String level3Str = level2.substring(level2.indexOf("[") + 1, level2.indexOf("]"));
  222. // 按顿号分割三级机构
  223. List<String> level3List = Arrays.asList(level3Str.split("、"));
  224. level2Map.put(level2Name, level3List);
  225. } else {
  226. // 没有三级机构,直接放入二级机构
  227. level2Map.put(level2, new ArrayList<>());
  228. }
  229. }
  230. // 将一级机构和对应的二级机构放入结果集合
  231. result.put(level1, level2Map);
  232. }
  233. return result;
  234. }
  235. public Map<String,String> getWaterZoneIds()throws Exception{
  236. Map<String,String> workZonIds = new HashMap<>();
  237. // InputStream inputStream = getConfigStream("application.properties");
  238. // Properties properties = new Properties();
  239. // properties.load(inputStream);
  240. // String waterworksZoneIds = properties.getProperty("waterworks.zonids");//关系字符串
  241. 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";//关系字符串
  242. // 按分号分割键值对
  243. String[] keyValuePairs = waterworksZoneIds.split(";");
  244. // 遍历键值对
  245. for (String pair : keyValuePairs) {
  246. // 按逗号分割键和值
  247. String[] keyValue = pair.split(",");
  248. if (keyValue.length == 2) {
  249. workZonIds.put(keyValue[0], keyValue[1]);
  250. }
  251. }
  252. return workZonIds;
  253. }
  254. /**
  255. * @Author Lx
  256. * @Description //TODO 获取实时数据曲线
  257. * @Date 14:49 2025/4/24
  258. * @Param
  259. * @return
  260. **/
  261. @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_REAL_HOUR)
  262. public ResponseRes realHourData(HttpServletRequest request
  263. , @RequestHeader(value= ApiURI.HEADER_CLIENT_TYPE, required=false) String strClientType
  264. , @RequestHeader(value= ApiURI.HEADER_USER_AGENT, required=false) String strUserAgent) throws Exception{
  265. final String URI_PATH = request.getRequestURI();
  266. final String strPlatform = CommTool.getPlatformByAgent(strClientType, strUserAgent);
  267. final String strUserId = (String)request.getAttribute(TokenAuthenticationService.HEADER_USERID);
  268. JPRealHourWater oJsonParam = FastJsonUtil.fromJSONByGson(HttpTool.getJsonBodyStr(request), JPRealHourWater.class);
  269. if (oJsonParam == null
  270. || !oJsonParam.checkValid()){
  271. throw new SelfException(ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrCode()
  272. , String.format(ApiURI.EXCEPTION_FORMAT
  273. , strPlatform
  274. , URI_PATH
  275. , ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrMsg()));
  276. }
  277. long llReqBefore = System.currentTimeMillis();
  278. String strRunSeq = String.format("%d-%d", llReqBefore, mSeqNotify.incrementAndGet());
  279. ResponseRes<String> resResult = new ResponseRes<String>();
  280. resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
  281. resResult.setResmsg(MSG_SUCCESS);
  282. resResult.setResdata("");
  283. try {
  284. ResponseRes oRes = KprAimWaterCollecationBizFun.selectRealHourWaterList(oJsonParam);
  285. if (oRes != null && ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) {
  286. resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata()));
  287. } else {
  288. resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode());
  289. resResult.setResmsg(MSG_FAILED);
  290. resResult.setResdata("");
  291. }
  292. resResult.setTimestamp(System.currentTimeMillis());
  293. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
  294. , String.format("%s:%s seq:{%s} rescode:{%s} resmsg:{%s} time:{%d ms} end<===="
  295. , strPlatform
  296. , URI_PATH
  297. , strRunSeq
  298. , resResult.getRescode()
  299. , resResult.getResmsg()
  300. , resResult.getTimestamp() - llReqBefore));
  301. return resResult;
  302. }catch(Exception ex){
  303. resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode());
  304. resResult.setResmsg(MSG_FAILED+ex.getLocalizedMessage());
  305. resResult.setResdata("");
  306. return resResult;
  307. }
  308. }
  309. @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_HOUR)
  310. public ResponseRes hourData(HttpServletRequest request
  311. , @RequestHeader(value= ApiURI.HEADER_CLIENT_TYPE, required=false) String strClientType
  312. , @RequestHeader(value= ApiURI.HEADER_USER_AGENT, required=false) String strUserAgent) throws Exception{
  313. final String URI_PATH = request.getRequestURI();
  314. final String strPlatform = CommTool.getPlatformByAgent(strClientType, strUserAgent);
  315. final String strUserId = (String)request.getAttribute(TokenAuthenticationService.HEADER_USERID);
  316. JPTbMHourWater oJsonParam = FastJsonUtil.fromJSONByGson(HttpTool.getJsonBodyStr(request), JPTbMHourWater.class);
  317. if (oJsonParam == null
  318. || !oJsonParam.checkValid()){
  319. throw new SelfException(ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrCode()
  320. , String.format(ApiURI.EXCEPTION_FORMAT
  321. , strPlatform
  322. , URI_PATH
  323. , ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrMsg()));
  324. }
  325. long llReqBefore = System.currentTimeMillis();
  326. String strRunSeq = String.format("%d-%d", llReqBefore, mSeqNotify.incrementAndGet());
  327. ResponseRes<String> resResult = new ResponseRes<String>();
  328. resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
  329. resResult.setResmsg(MSG_SUCCESS);
  330. resResult.setResdata("");
  331. try {
  332. // 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());
  333. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
  334. , "0000");
  335. ResponseRes oRes = new ResponseRes();
  336. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
  337. , KprAimWaterCollecationBizFun.databaseName);
  338. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
  339. , String.valueOf("water_volume_prediction".equals(KprAimWaterCollecationBizFun.databaseName)));
  340. if ("water_volume_prediction".equals(KprAimWaterCollecationBizFun.databaseName)) {
  341. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
  342. , "1111");
  343. //转成集合,最多三级
  344. // 最终的三级结构集合
  345. Map<String, Map<String, List<String>>> result = getWaterWorks();
  346. Map<String, String> workZonIds = getWaterZoneIds();
  347. if (!MapUtils.isEmpty(result) && !MapUtils.isEmpty(workZonIds)) {
  348. int level = findOrgLevel(result, KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds, oJsonParam.getOrgId()).get().toString());
  349. oRes = KprAimWaterCollecationBizFun.selectTbHourWaterList(oJsonParam, level, result, workZonIds);
  350. }
  351. } else {
  352. oRes = KprAimWaterCollecationBizFun.selectTbHourWaterList(oJsonParam, null, null, null);
  353. }
  354. if (oRes != null && ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) {
  355. resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata()));
  356. } else {
  357. resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode());
  358. resResult.setResmsg(MSG_FAILED);
  359. resResult.setResdata("");
  360. }
  361. resResult.setTimestamp(System.currentTimeMillis());
  362. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
  363. , String.format("%s:%s seq:{%s} rescode:{%s} resmsg:{%s} time:{%d ms} end<===="
  364. , strPlatform
  365. , URI_PATH
  366. , strRunSeq
  367. , resResult.getRescode()
  368. , resResult.getResmsg()
  369. , resResult.getTimestamp() - llReqBefore));
  370. return resResult;
  371. }catch(Exception ex){
  372. resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode());
  373. resResult.setResmsg(MSG_FAILED+ex.getLocalizedMessage());
  374. resResult.setResdata("");
  375. return resResult;
  376. }
  377. }
  378. //取水分组类型
  379. @Value("${in.sub.type}")
  380. private String inSubType;
  381. //取水分组类型
  382. @Value("${out.sub.type}")
  383. private String outSubType;
  384. /**
  385. * @Author Lx
  386. * @Description //TODO 小时泵房取水能耗
  387. * @Date 17:02 2024/5/28
  388. * @Param
  389. * @return
  390. **/
  391. @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_HOUR_PUMP_IN)
  392. public ResponseRes hourPumpInData(HttpServletRequest request
  393. , @RequestHeader(value= ApiURI.HEADER_CLIENT_TYPE, required=false) String strClientType
  394. , @RequestHeader(value= ApiURI.HEADER_USER_AGENT, required=false) String strUserAgent) throws Exception{
  395. final String URI_PATH = request.getRequestURI();
  396. final String strPlatform = CommTool.getPlatformByAgent(strClientType, strUserAgent);
  397. final String strUserId = (String)request.getAttribute(TokenAuthenticationService.HEADER_USERID);
  398. JPTbMHourWater oJsonParam = FastJsonUtil.fromJSONByGson(HttpTool.getJsonBodyStr(request), JPTbMHourWater.class);
  399. if (oJsonParam == null
  400. || !oJsonParam.checkValid()){
  401. throw new SelfException(ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrCode()
  402. , String.format(ApiURI.EXCEPTION_FORMAT
  403. , strPlatform
  404. , URI_PATH
  405. , ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrMsg()));
  406. }
  407. long llReqBefore = System.currentTimeMillis();
  408. String strRunSeq = String.format("%d-%d", llReqBefore, mSeqNotify.incrementAndGet());
  409. ResponseRes<String> resResult = new ResponseRes<String>();
  410. resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
  411. resResult.setResmsg(MSG_SUCCESS);
  412. resResult.setResdata("");
  413. ResponseRes oRes = KprAimWaterCollecationBizFun.selectTbMHourwaterWaterwithdrawals(oJsonParam,inSubType);
  414. if(oRes!=null&&ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) {
  415. resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata()));
  416. }else{
  417. resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode());
  418. resResult.setResmsg(MSG_FAILED);
  419. resResult.setResdata("");
  420. }
  421. resResult.setTimestamp(System.currentTimeMillis());
  422. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
  423. ,String.format("%s:%s seq:{%s} rescode:{%s} resmsg:{%s} time:{%d ms} end<===="
  424. ,strPlatform
  425. ,URI_PATH
  426. ,strRunSeq
  427. ,resResult.getRescode()
  428. ,resResult.getResmsg()
  429. ,resResult.getTimestamp()-llReqBefore));
  430. return resResult;
  431. }
  432. /**
  433. * @Author Lx
  434. * @Description //TODO 小时泵房供水能耗
  435. * @Date 17:02 2024/5/28
  436. * @Param
  437. * @return
  438. **/
  439. @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_HOUR_PUMP_OUT)
  440. public ResponseRes hourPumpOutData(HttpServletRequest request
  441. , @RequestHeader(value= ApiURI.HEADER_CLIENT_TYPE, required=false) String strClientType
  442. , @RequestHeader(value= ApiURI.HEADER_USER_AGENT, required=false) String strUserAgent) throws Exception{
  443. final String URI_PATH = request.getRequestURI();
  444. final String strPlatform = CommTool.getPlatformByAgent(strClientType, strUserAgent);
  445. final String strUserId = (String)request.getAttribute(TokenAuthenticationService.HEADER_USERID);
  446. JPTbMHourWater oJsonParam = FastJsonUtil.fromJSONByGson(HttpTool.getJsonBodyStr(request), JPTbMHourWater.class);
  447. if (oJsonParam == null
  448. || !oJsonParam.checkValid()){
  449. throw new SelfException(ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrCode()
  450. , String.format(ApiURI.EXCEPTION_FORMAT
  451. , strPlatform
  452. , URI_PATH
  453. , ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrMsg()));
  454. }
  455. long llReqBefore = System.currentTimeMillis();
  456. String strRunSeq = String.format("%d-%d", llReqBefore, mSeqNotify.incrementAndGet());
  457. ResponseRes<String> resResult = new ResponseRes<String>();
  458. resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
  459. resResult.setResmsg(MSG_SUCCESS);
  460. resResult.setResdata("");
  461. ResponseRes oRes = new ResponseRes();
  462. try {
  463. if ("water_volume_prediction".equals(KprAimWaterCollecationBizFun.databaseName)) {
  464. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
  465. , "1111");
  466. //转成集合,最多三级
  467. // 最终的三级结构集合
  468. Map<String, Map<String, List<String>>> result = getWaterWorks();
  469. Map<String, String> workZonIds = getWaterZoneIds();
  470. if (!MapUtils.isEmpty(result) && !MapUtils.isEmpty(workZonIds)) {
  471. int level = findOrgLevel(result, KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds, oJsonParam.getOrgId()).get().toString());
  472. List<String> childList = new ArrayList<>();//要查询的组织机构名称集合
  473. List<String> childIdList = new ArrayList<>();//要查询的组织机构id集合
  474. if (level==1){
  475. //TODO 一级已经没有数据了(水厂), 查询一级的话则是将其下的供水数据相加
  476. //TODO 查询二级,及其二级带的三级
  477. Optional zoneNameOpt = KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds,oJsonParam.getOrgId());
  478. if(zoneNameOpt.isPresent()){
  479. String zoneName = zoneNameOpt.get().toString();
  480. Map<String, List<String>> childMap = result.get(zoneName);//二级
  481. Collection<List<String>> child2Map = childMap.values();//三级
  482. // 添加二级组织机构名称(childMap 的 keySet)
  483. childList.addAll(childMap.keySet());
  484. // 添加三级组织机构名称(child2Map 的所有 List<String>)
  485. for (List<String> child2List : child2Map) {
  486. childList.addAll(child2List);
  487. }
  488. }
  489. }else if(level==2){
  490. //TODO 如果是二级,就查询其自身,看看其下还有没有集合,有的话就查其下的所有集合,没有的话就查其自身
  491. Optional zoneNameOpt = KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds,oJsonParam.getOrgId());
  492. if(zoneNameOpt.isPresent()) {
  493. String zoneName = zoneNameOpt.get().toString();
  494. List<String> childMap = new ArrayList<>();//三级
  495. // 遍历第一级 Map
  496. for (Map.Entry<String, Map<String, List<String>>> entry : result.entrySet()) {
  497. Map<String, List<String>> nestedMap = entry.getValue();
  498. // 检查第二级键
  499. if (nestedMap.containsKey(zoneName)) {
  500. childMap = nestedMap.get(zoneName);
  501. }
  502. }
  503. if(childMap.size()>0) {
  504. // 添三级组织机构名称(childMap 的 keySet)
  505. childList.addAll(childMap);
  506. }else{
  507. childList.add(zoneName);
  508. }
  509. }
  510. }else if(level==3){
  511. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, ""
  512. , "5555");
  513. //TODO 如果是三级,就查询其自身
  514. Optional zoneNameOpt = KprAimWaterCollecationBizFun.findOrgNameByOrgId(workZonIds,oJsonParam.getOrgId());
  515. if(zoneNameOpt.isPresent()) {
  516. String zoneName = zoneNameOpt.get().toString();
  517. childList.add(zoneName);
  518. }
  519. }
  520. // 结果集合,存储 childList 对应的组织机构 ID
  521. // 遍历 childList,从 workZonIds 中获取对应的 ID
  522. for (String orgName : childList) {
  523. String orgId = workZonIds.get(orgName);
  524. if (orgId != null) { // 避免空值
  525. childIdList.add(orgId);
  526. }
  527. }
  528. List<InPumpModel> resMap = new ArrayList<>();
  529. for (String id:childIdList) {
  530. JPTbMHourWater hourWater = new JPTbMHourWater();
  531. hourWater.setIsPage(oJsonParam.getIsPage());
  532. hourWater.setOrgId(id);
  533. hourWater.setLimit(oJsonParam.getLimit());
  534. hourWater.setOffset(oJsonParam.getOffset());
  535. hourWater.setQueryDate(oJsonParam.getQueryDate());
  536. hourWater.checkValid();
  537. ResponseRes obj = KprAimWaterCollecationBizFun.selectTbMHourwaterWatersupply(hourWater, outSubType);
  538. resMap.addAll((List<InPumpModel>)obj.getResdata());
  539. }
  540. oRes.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
  541. oRes.setResmsg(MSG_SUCCESS);
  542. oRes.setResdata(FastJsonUtil.toJSON(resMap));
  543. }
  544. } else {
  545. oRes.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
  546. oRes.setResmsg(MSG_SUCCESS);
  547. oRes = KprAimWaterCollecationBizFun.selectTbMHourwaterWatersupply(oJsonParam, outSubType);
  548. }
  549. }catch(Exception ex){
  550. ex.printStackTrace();
  551. }
  552. if(oRes!=null&&ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) {
  553. resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata()));
  554. }else{
  555. resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode());
  556. resResult.setResmsg(MSG_FAILED);
  557. resResult.setResdata("");
  558. }
  559. resResult.setTimestamp(System.currentTimeMillis());
  560. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
  561. ,String.format("%s:%s seq:{%s} rescode:{%s} resmsg:{%s} time:{%d ms} end<===="
  562. ,strPlatform
  563. ,URI_PATH
  564. ,strRunSeq
  565. ,resResult.getRescode()
  566. ,resResult.getResmsg()
  567. ,resResult.getTimestamp()-llReqBefore));
  568. return resResult;
  569. }
  570. /**
  571. * TODO 水位预测相关
  572. */
  573. @PostMapping(value = ApiURI.URI_WATER_ZILAISHUI_HOUR_LEVEL)
  574. public ResponseRes hourlevelData(HttpServletRequest request
  575. , @RequestHeader(value= ApiURI.HEADER_CLIENT_TYPE, required=false) String strClientType
  576. , @RequestHeader(value= ApiURI.HEADER_USER_AGENT, required=false) String strUserAgent) throws Exception{
  577. final String URI_PATH = request.getRequestURI();
  578. final String strPlatform = CommTool.getPlatformByAgent(strClientType, strUserAgent);
  579. final String strUserId = (String)request.getAttribute(TokenAuthenticationService.HEADER_USERID);
  580. JPTbLevelHourWater oJsonParam = FastJsonUtil.fromJSONByGson(HttpTool.getJsonBodyStr(request), JPTbLevelHourWater.class);
  581. if (oJsonParam == null
  582. || !oJsonParam.checkValid()){
  583. throw new SelfException(ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrCode()
  584. , String.format(ApiURI.EXCEPTION_FORMAT
  585. , strPlatform
  586. , URI_PATH
  587. , ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrMsg()));
  588. }
  589. long llReqBefore = System.currentTimeMillis();
  590. String strRunSeq = String.format("%d-%d", llReqBefore, mSeqNotify.incrementAndGet());
  591. ResponseRes<String> resResult = new ResponseRes<String>();
  592. resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
  593. resResult.setResmsg(MSG_SUCCESS);
  594. resResult.setResdata("");
  595. // 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());
  596. ResponseRes oRes = KprAimWaterCollecationBizFun.selectTbHourLevelList(oJsonParam);
  597. if(oRes!=null&&ResponseCode.RESULT_NORMAL.toStrCode().equals(oRes.getRescode())) {
  598. resResult.setResdata(FastJsonUtil.toJSON(oRes.getResdata()));
  599. }else{
  600. resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode());
  601. resResult.setResmsg(MSG_FAILED);
  602. resResult.setResdata("");
  603. }
  604. resResult.setTimestamp(System.currentTimeMillis());
  605. LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INTERNAL.toStrValue(), mStrClassName, strUserId
  606. ,String.format("%s:%s seq:{%s} rescode:{%s} resmsg:{%s} time:{%d ms} end<===="
  607. ,strPlatform
  608. ,URI_PATH
  609. ,strRunSeq
  610. ,resResult.getRescode()
  611. ,resResult.getResmsg()
  612. ,resResult.getTimestamp()-llReqBefore));
  613. return resResult;
  614. }
  615. }