HandleDataController.java 111 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987
  1. package com.slibra.web.controller.business;
  2. import cn.hutool.core.date.DateUtil;
  3. import cn.hutool.http.HttpRequest;
  4. import cn.hutool.http.HttpUtil;
  5. import cn.hutool.poi.excel.ExcelReader;
  6. import cn.hutool.poi.excel.ExcelUtil;
  7. import com.alibaba.fastjson2.JSON;
  8. import com.alibaba.fastjson2.JSONArray;
  9. import com.alibaba.fastjson2.JSONObject;
  10. import com.slibra.business.domain.*;
  11. import com.slibra.business.mapper.*;
  12. import com.slibra.business.res.ChartBasic;
  13. import com.slibra.business.service.ITXinyiForecastComparisonService;
  14. import com.slibra.common.DecimalUtils;
  15. import com.slibra.common.core.domain.TXinyiDaily;
  16. import com.slibra.common.core.controller.BaseController;
  17. import com.slibra.common.enums.BusinessEnum;
  18. import com.slibra.common.utils.DateUtils;
  19. import com.slibra.common.utils.StringUtils;
  20. import com.slibra.quartz.task.AsyncTask;
  21. import com.slibra.quartz.task.RyTask;
  22. import lombok.extern.slf4j.Slf4j;
  23. import org.apache.ibatis.session.ExecutorType;
  24. import org.apache.ibatis.session.SqlSession;
  25. import org.apache.ibatis.session.SqlSessionFactory;
  26. import org.springframework.beans.BeanUtils;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.util.CollectionUtils;
  29. import org.springframework.web.bind.annotation.*;
  30. import java.io.File;
  31. import java.math.BigDecimal;
  32. import java.math.RoundingMode;
  33. import java.time.LocalDateTime;
  34. import java.time.format.DateTimeFormatter;
  35. import java.util.*;
  36. import static com.slibra.common.constant.MyConstants.*;
  37. import static com.slibra.common.constant.MyConstants.BigDecimal_100;
  38. import static com.slibra.common.enums.BusinessEnum.WarningCategoryEnum.CS_TP_YC;
  39. /**
  40. * 参数配置 信息操作处理
  41. *
  42. *
  43. */
  44. @Slf4j
  45. @RestController
  46. @RequestMapping("/test")
  47. public class HandleDataController extends BaseController
  48. {
  49. @Autowired
  50. private TXinyiIndustryMapper xinyiIndustryMapper;
  51. @Autowired
  52. private TXinyiDailyMapper xinyiDailyMapper;
  53. @Autowired
  54. private TXinyiLaboratoryMapper xinyiLaboratoryMapper;
  55. @Autowired
  56. private TXinyiRobotMapper xinyiRobotMapper;
  57. @Autowired
  58. private TXinyiNormConfigMapper xinyiNormConfigMapper;
  59. @Autowired
  60. private TXinyiCalculateMapper xinyiCalculateMapper;
  61. @Autowired
  62. private TXinyiBigTableHourMapper tXinyiBigTableHourMapper;
  63. @Autowired
  64. private TXinyiBigTableDayMapper tXinyiBigTableDayMapper;
  65. @Autowired
  66. private TXinyiBigTableMonthMapper tXinyiBigTableMonthMapper;
  67. @Autowired
  68. private SqlSessionFactory sqlSessionFactory;
  69. @Autowired
  70. private RyTask ryTask;
  71. @Autowired
  72. private AsyncTask asyncTask;
  73. @Autowired
  74. private ITXinyiForecastComparisonService xinyiForecastComparisonService;
  75. public static final String[] queryTags = {"信义污水厂JS_COD_Value","信义污水厂JS_PH_Value","信义污水厂JS_SS_Value","信义污水厂JS_ZL_Value","信义污水厂JS_ZA_Value","信义污水厂JS_AD_Value","信义污水厂JS_T_Value","信义污水厂进水泵房液位","信义污水厂出水瞬时流量","信义污水厂升级出水COD","信义污水厂升级出水PH","信义污水厂升级出水SS","信义污水厂升级出水TN","信义污水厂升级出水TP","信义污水厂升级出水氨氮","信义污水厂AIT202_Value","信义污水厂AIT203_Value","信义污水厂AIT207_Value","信义污水厂AIT206_Value","信义污水厂AIT209_Value","信义污水厂AIT210_Value","信义污水厂进水TDS","信义污水厂FT101_Value","信义污水厂SWCHHYHLB1_R_Value","信义污水厂SWCHHYHLB2_R_Value","信义污水厂SWCHHYHLB3_R_Value","信义污水厂SWCHHYHLB4_R_Value","信义污水厂SWCHHYHLB5_R_Value","信义污水厂SWCHHYHLB6_R_Value","信义污水厂SWCWNHLB1_R_Value","信义污水厂SWCWNHLB2_R_Value","信义污水厂SWCWNHLB3_R_Value","信义污水厂SWCWNHLB4_R_Value","信义污水厂SWCWNHLB5_R_Value","信义污水厂GFJ1_R_Value","信义污水厂GFJ2_R_Value","信义污水厂GFJ3_R_Value","信义污水厂GFJ4_R_Value","信义污水厂GFJ5_R_Value","信义污水厂GFJ6_R_Value","信义污水厂GFJ1_KQLL_Value","信义污水厂GFJ2_KQLL_Value","信义污水厂GFJ3_KQLL_Value","信义污水厂GFJ4_KQLL_Value","信义污水厂GFJ5_KQLL_Value","信义污水厂GFJ6_KQLL_Value"};
  76. // public static final String[] predictorArr = {"出水COD", "出水SS", "出水总磷", "出水氨氮", "xsy1", "xsy2"};
  77. public static final String[] predictorArr = {"cs_cod", "cs_ss", "cs_tp", "cs_andan", "xsy1", "xsy2", "qyxsy1", "qyxsy2", "缺氧出水氨氮1", "缺氧出水氨氮2"};
  78. /**
  79. *手动处理水质报警
  80. */
  81. @GetMapping("/waterWarning")
  82. public String waterWarning(){
  83. log.info("进入了 手动触发水质报警的 操作");
  84. //获取配置表
  85. List<TXinyiNormConfig> tXinyiNormConfigs = this.xinyiNormConfigMapper.selectTXinyiNormConfigList(null);
  86. if(CollectionUtils.isEmpty(tXinyiNormConfigs))
  87. throw new RuntimeException("未查询到配置信息");
  88. TXinyiNormConfig normConfig = tXinyiNormConfigs.get(0);
  89. TXinyiIndustry tXinyiIndustry = this.xinyiIndustryMapper.selectTXinyiIndustryNewest();
  90. if(Objects.isNull(tXinyiIndustry))
  91. throw new RuntimeException("未查询到工业库信息");
  92. asyncTask.handleSZWarning(tXinyiIndustry, normConfig);
  93. return "success";
  94. }
  95. /**
  96. *手动处理生化报警
  97. */
  98. @GetMapping("/shWarning")
  99. public String shWarning(){
  100. log.info("进入了 手动处理生化报警 操作");
  101. //获取配置表
  102. List<TXinyiNormConfig> tXinyiNormConfigs = this.xinyiNormConfigMapper.selectTXinyiNormConfigList(null);
  103. if(CollectionUtils.isEmpty(tXinyiNormConfigs))
  104. throw new RuntimeException("未查询到配置信息");
  105. TXinyiNormConfig normConfig = tXinyiNormConfigs.get(0);
  106. TXinyiIndustry tXinyiIndustry = this.xinyiIndustryMapper.selectTXinyiIndustryNewest();
  107. if(Objects.isNull(tXinyiIndustry))
  108. throw new RuntimeException("未查询到工业库信息");
  109. List<TXinyiCalculate> tXinyiCalculates = xinyiCalculateMapper.selectTXinyiCalculateList(TXinyiCalculate.builder().testHour(tXinyiIndustry.getTestHour()).build());
  110. if (!CollectionUtils.isEmpty(tXinyiCalculates)) {
  111. TXinyiCalculate tXinyiCalculate = tXinyiCalculates.get(0);
  112. asyncTask.handleSHWarning(tXinyiIndustry, normConfig, tXinyiCalculate);
  113. }
  114. return "success";
  115. }
  116. /**
  117. *手动处理化验室报警
  118. */
  119. @GetMapping("/robotWarning")
  120. public String robotWarning(){
  121. log.info("进入了 手动触发化验室报警的 操作");
  122. asyncTask.handleRobotWarning(this.xinyiRobotMapper.selectNRobot(1));
  123. return "success";
  124. }
  125. /**
  126. *手动处理预测报警
  127. */
  128. @GetMapping("/forecastWarning")
  129. public String forecastWarning(){
  130. log.info("进入了 手动触发预测报警的 操作");
  131. //获取最新的6条工业科数据
  132. List<TXinyiIndustry> tXinyiIndustries6 = this.xinyiIndustryMapper.selectNIndustry(INT_6);
  133. List<TXinyiRobot> tXinyiRobots6 = this.xinyiRobotMapper.selectNRobot(INT_6);
  134. //2024年7月18日10:31:18 加个校验,只有从来没有数据的水厂才会进入下面的判断
  135. if(CollectionUtils.isEmpty(tXinyiIndustries6) || tXinyiIndustries6.size() < INT_6
  136. || CollectionUtils.isEmpty(tXinyiRobots6) || tXinyiRobots6.size() <INT_6){
  137. log.error("预测的时候,获取最新的6条工业数据或者化验数据不满足,任务终止,工业数据为{}\n化验数据为{}", JSON.toJSONString(tXinyiIndustries6), JSON.toJSONString(tXinyiRobots6));
  138. return "预测的时候,获取最新的6条工业数据或者化验数据不满足,任务终止";
  139. }
  140. //先处理xsy1 和 xsy2 合并成一个数据
  141. // this.predictorSpecial(tXinyiIndustries6, tXinyiRobots6);
  142. //2024年7月11日16:55:27 xsy1 和 xsy2 又不合并了。。。 再次分开处理
  143. for (int i = 0; i < predictorArr.length; i++) {
  144. String result = ryTask.getPredictor(predictorArr[i]);
  145. if(StringUtils.isBlank(result) || "error".equals(result)){
  146. log.info("预测数据返回结果不符合解析条件,返回结果为{}", result);
  147. continue;
  148. }
  149. JSONObject jsonObject = null;
  150. try {
  151. jsonObject = JSON.parseObject(result);
  152. } catch (Exception e) {
  153. log.error("[转JSON的时候]预测数据返回结果不符合解析条件,返回结果为{}", result);
  154. continue;
  155. }
  156. log.info("^^^^^^^^^^^^^预测接口转弯JSON对象后,原内容是{}", JSON.toJSONString(jsonObject));
  157. //2024年7月8日15:25:51 加个校验 因为各种奇葩返回。。 比如返回的结果是 "null"
  158. if(Objects.isNull(jsonObject)){
  159. log.error("[转JSON的时候]预测数据返回结果是null,不处里");
  160. continue;
  161. }
  162. String task = jsonObject.getString("task");
  163. String hour = jsonObject.getString("hour");
  164. String pred = jsonObject.getString("pred");
  165. String date = jsonObject.getString("date");
  166. if(StringUtils.isNotBlank(pred) && pred.contains(",")){
  167. String[] split = pred.split(",");
  168. if(split.length != 3){
  169. log.error("预测数据返回结果为{},长度不是3,无法正常解析", result);
  170. //因为部分预测还不支持 所以不需要
  171. // ryTask.handleXinYiWarningsYC(cscodBzz, split, cscodGkz, BusinessEnum.WarningCategoryEnum.CS_COD_YC.getCode(), hour, normConfig);
  172. continue;
  173. }
  174. //解析数据 处理报警 调研prompt 保存等
  175. this.handlePredictorWarning(split, hour, task, tXinyiIndustries6, tXinyiRobots6, date);
  176. }else {
  177. log.error("预测数据返回结果为{},无法正常解析", result);
  178. }
  179. }
  180. return "success";
  181. }
  182. @GetMapping("/dateAdd")
  183. public String dateAdd() {
  184. // 给定时间段的起始时间和结束时间
  185. LocalDateTime startTime = LocalDateTime.parse("2024-04-13T16:00:00");
  186. LocalDateTime endTime = LocalDateTime.parse("2024-04-13T17:00:00");
  187. /*LocalDateTime startTime = LocalDateTime.parse("2024-02-26T00:00:00");
  188. LocalDateTime endTime = LocalDateTime.parse("2024-02-27T00:00:00");*/
  189. // 每个小时的时间格式
  190. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  191. // 循环按小时分割
  192. LocalDateTime currentHour = startTime;
  193. while (currentHour.isBefore(endTime)) {
  194. String begin = currentHour.format(formatter);
  195. String end = currentHour.plusMinutes(10).format(formatter);
  196. // 输出当前小时的起始时间和结束时间
  197. System.out.println("起始时间:" + begin);
  198. System.out.println("结束时间:" + end);
  199. // 当前小时加一小时,作为下一个小时的起始时间
  200. currentHour = currentHour.plusMinutes(10);
  201. //每个小时查询一次数据
  202. String url = "http://10.0.0.27:4568/api/v1/khquerydata";
  203. HashMap<String, Object> req = new HashMap<>();
  204. req.put("tagNames", queryTags);
  205. req.put("startTime", begin);
  206. req.put("endTime", end);
  207. req.put("recordNumbers", 100000);
  208. String body = HttpRequest.post(url).header("Authorization", "c2E6c2E=").header("clientName", "hongshan").body(JSON.toJSONString(req)).execute().body();
  209. // System.out.println("body = " + body);
  210. List<HashMap<String, String>> list = new ArrayList<>();
  211. //行转列数据处理
  212. for (String queryTag : queryTags) {
  213. JSONArray array = JSON.parseObject(body).getJSONArray(queryTag);
  214. //特殊数据处理一
  215. if(Objects.isNull(array) || array.isEmpty()){
  216. System.out.println(queryTag + "查询到了空的数据,跳过本次循环");
  217. continue;
  218. }
  219. int size = array.size();
  220. //特殊数据处理二
  221. if("0".equals(array.get(1) + "")){
  222. System.out.println(queryTag + "查询到了数据,但是数据集合只有一条,且都是0");
  223. continue;
  224. }
  225. //结合至少62个数据才满足条件(有可能获取不到)
  226. /*if(size < 62){
  227. System.out.println(queryTag + "查询到了不符合条件的数据,跳过本次循环");
  228. continue;
  229. }*/
  230. //存放的数据集
  231. //利用map去重
  232. HashMap<String, String> map = new LinkedHashMap<>();
  233. for (int i = 2; i < size; i++) {
  234. // System.out.println(i + "" + array.get(i));
  235. JSONArray oneRecord = JSON.parseArray(JSON.toJSONString(array.get(i)));
  236. //处理为空或者为0的数据
  237. Object timeStampValue = oneRecord.get(2);
  238. if(Objects.isNull(timeStampValue) || "0".equals(timeStampValue + ""))
  239. continue;
  240. BigDecimal value = Objects.isNull(oneRecord.get(0)) ? null : new BigDecimal(oneRecord.get(0) + "");
  241. long timestamp = (long) timeStampValue;
  242. String format = DateUtil.format(new Date(timestamp), DateUtils.YYYYMMDDHH_TS);
  243. map.put(format, queryTag + "-" + value);
  244. }
  245. list.add(map);
  246. }
  247. // System.out.println("list = " + list);
  248. //先构造对象(list中任意一个map遍历的key个数) 因为合并完并不是1分钟60条,参考上面筛选区间,有时候会有几个值获取不到
  249. /*HashMap<String, String> oneRow = list.get(0);
  250. Set<String> set = oneRow.keySet();
  251. List<Industry> result = new ArrayList<>(set.size());
  252. set.forEach(s -> {
  253. Industry industry = new Industry();
  254. industry.setTestTime(s);
  255. result.add(industry);
  256. });*/
  257. Set<String> recordTimeSet = new HashSet<>();
  258. Map<String, TXinyiIndustry> recordMap = new HashMap<>();
  259. for (int i = 0; i < list.size(); i++) {
  260. HashMap<String, String> map = list.get(i);
  261. int finalJ = i;
  262. map.forEach((k, v) ->{
  263. TXinyiIndustry industry = null;
  264. if(!recordTimeSet.contains(k)){//第一次
  265. industry = new TXinyiIndustry();
  266. recordTimeSet.add(k);
  267. recordMap.put(k, industry);
  268. }else{
  269. industry = recordMap.get(k);
  270. }
  271. industry.setTestTime(k);
  272. //2024年4月15日11:19:52 额外增加2个字段
  273. industry.setTestDate(k.substring(0,10));
  274. industry.setTestHour(k.substring(0,13));
  275. //解析值
  276. String[] split = v.split("-");
  277. String type = split[0];
  278. BigDecimal value = new BigDecimal(split[1]);
  279. if ("信义污水厂JS_COD_Value".equals(type)) {
  280. industry.setJsCod(value);
  281. } else if ("信义污水厂JS_PH_Value".equals(type)) {
  282. industry.setJsPh(value);
  283. } else if ("信义污水厂JS_SS_Value".equals(type)) {
  284. industry.setJsSs(value);
  285. } else if ("信义污水厂JS_ZL_Value".equals(type)) {
  286. industry.setJsTp(value);
  287. } else if ("信义污水厂JS_ZA_Value".equals(type)) {
  288. industry.setJsTn(value);
  289. } else if ("信义污水厂JS_AD_Value".equals(type)) {
  290. industry.setJsNh3(value);
  291. } else if ("信义污水厂JS_T_Value".equals(type)) {
  292. industry.setJsSwPh(value);
  293. } else if ("信义污水厂进水泵房液位".equals(type)) {
  294. industry.setJsBfyw(value);
  295. } else if ("信义污水厂出水瞬时流量".equals(type)) {
  296. industry.setCsSlqc(value);
  297. } else if ("信义污水厂升级出水COD".equals(type)) {
  298. industry.setCsCod(value);
  299. } else if ("信义污水厂升级出水PH".equals(type)) {
  300. industry.setCsPh(value);
  301. } else if ("信义污水厂升级出水SS".equals(type)) {
  302. industry.setCsSs(value);
  303. } else if ("信义污水厂升级出水TN".equals(type)) {
  304. industry.setCsTn(value);
  305. } else if ("信义污水厂升级出水TP".equals(type)) {
  306. industry.setCsTp(value);
  307. } else if ("信义污水厂升级出水氨氮".equals(type)) {
  308. industry.setCsNh3(value);
  309. } else if ("信义污水厂AIT202_Value".equals(type)) {
  310. industry.setOneHyzdDo(value);
  311. } else if ("信义污水厂AIT203_Value".equals(type)) {
  312. industry.setOneHymdDo(value);
  313. } else if ("信义污水厂AIT207_Value".equals(type)) {
  314. industry.setTwoHyzdDo(value);
  315. } else if ("信义污水厂AIT206_Value".equals(type)) {
  316. industry.setTwoHymdDo(value);
  317. } else if ("信义污水厂AIT209_Value".equals(type)) {
  318. industry.setOneMlss(value);
  319. } else if ("信义污水厂AIT210_Value".equals(type)) {
  320. industry.setTwoMlss(value);
  321. } else if ("信义污水厂进水TDS".equals(type)) {
  322. industry.setJsTds(value);
  323. } else if ("信义污水厂FT101_Value".equals(type)) {
  324. industry.setJsSlq(value);
  325. } else if ("信义污水厂SWCHHYHLB1_R_Value".equals(type)) {
  326. industry.setNHlbOneGp(value);
  327. } else if ("信义污水厂SWCHHYHLB2_R_Value".equals(type)) {
  328. industry.setNHlbTwoGp(value);
  329. } else if ("信义污水厂SWCHHYHLB3_R_Value".equals(type)) {
  330. industry.setNHlbThreeGp(value);
  331. } else if ("信义污水厂SWCHHYHLB4_R_Value".equals(type)) {
  332. industry.setNHlbFourGp(value);
  333. } else if ("信义污水厂SWCHHYHLB5_R_Value".equals(type)) {
  334. industry.setNhlBFiveGp(value);
  335. } else if ("信义污水厂SWCHHYHLB6_R_Value".equals(type)) {
  336. industry.setNHlbSixGp(value);
  337. } else if ("信义污水厂SWCWNHLB1_R_Value".equals(type)) {
  338. industry.setWHlbOneGp(value);
  339. } else if ("信义污水厂SWCWNHLB2_R_Value".equals(type)) {
  340. industry.setWHlbTwoGp(value);
  341. } else if ("信义污水厂SWCWNHLB3_R_Value".equals(type)) {
  342. industry.setWHlbThreeGp(value);
  343. } else if ("信义污水厂SWCWNHLB4_R_Value".equals(type)) {
  344. industry.setWHlbFourGp(value);
  345. } else if ("信义污水厂SWCWNHLB5_R_Value".equals(type)) {
  346. industry.setWHlbFiveGp(value);
  347. } else if ("信义污水厂GFJ1_R_Value".equals(type)) {
  348. industry.setFjOne(value);
  349. } else if ("信义污水厂GFJ2_R_Value".equals(type)) {
  350. industry.setFjTwo(value);
  351. } else if ("信义污水厂GFJ3_R_Value".equals(type)) {
  352. industry.setFjThree(value);
  353. } else if ("信义污水厂GFJ4_R_Value".equals(type)) {
  354. industry.setFjFour(value);
  355. } else if ("信义污水厂GFJ5_R_Value".equals(type)) {
  356. industry.setFjFive(value);
  357. } else if ("信义污水厂GFJ6_R_Value".equals(type)) {
  358. industry.setFjSix(value);
  359. } else if ("信义污水厂GFJ1_KQLL_Value".equals(type)) {
  360. industry.setKqllOne(value);
  361. } else if ("信义污水厂GFJ2_KQLL_Value".equals(type)) {
  362. industry.setKqllTwo(value);
  363. } else if ("信义污水厂GFJ3_KQLL_Value".equals(type)) {
  364. industry.setKqllThree(value);
  365. } else if ("信义污水厂GFJ4_KQLL_Value".equals(type)) {
  366. industry.setKqllFour(value);
  367. } else if ("信义污水厂GFJ5_KQLL_Value".equals(type)) {
  368. industry.setKqllFive(value);
  369. } else if ("信义污水厂GFJ6_KQLL_Value".equals(type)) {
  370. industry.setKqllSix(value);
  371. }else if ("信义污水厂实际碳源加药量".equals(type)) {
  372. industry.setSJTYJLY(value);
  373. }else if ("信义污水厂除磷加药瞬时流量".equals(type)) {
  374. industry.setCLJYSSLL(value);
  375. }
  376. //只有最后一次才执行数据库添加
  377. if(finalJ == list.size()-1){
  378. //插入数据库
  379. xinyiIndustryMapper.insertTXinyiIndustry(industry);
  380. }
  381. });
  382. }
  383. }
  384. return "ok";
  385. }
  386. // @GetMapping("/dateUpdateCL")
  387. // public String dateUpdateCL() {
  388. // String fileName = "除磷加药瞬时流量";
  389. // //输入目录
  390. // ExcelReader reader = ExcelUtil.getReader("C:\\Users\\10109\\Desktop\\新程序\\" + fileName + ".xls");
  391. // //解析数据
  392. // List<List<Object>> readAll = reader.read();
  393. // if(!CollectionUtils.isEmpty(readAll)){
  394. // for (List<Object> objects : readAll) {
  395. // String time = "20" + objects.get(0) + " " + objects.get(1).toString().substring(0, 5);
  396. // System.out.println("time = " + time);
  397. // TXinyiIndustry uniqueTXinyiIndustry = this.xinyiIndustryMapper.getUniqueTXinyiIndustry(time);
  398. // if(!Objects.isNull(uniqueTXinyiIndustry)){
  399. // System.out.println(objects.get(2));
  400. // BigDecimal CLJYSSLL = Objects.isNull(objects.get(2)) ? null : new BigDecimal(String.valueOf(objects.get(2)));
  401. // uniqueTXinyiIndustry.setCLJYSSLL(CLJYSSLL);
  402. // this.xinyiIndustryMapper.updateTXinyiIndustry(uniqueTXinyiIndustry);
  403. // }
  404. // }
  405. // }
  406. // return "ok";
  407. // }
  408. //
  409. //
  410. // @GetMapping("/dateUpdateSJTY")
  411. // public String dateUpdateSJTY() {
  412. // String fileName = "信义污水厂实际碳源加药量";
  413. // //输入目录
  414. // ExcelReader reader = ExcelUtil.getReader("C:\\Users\\10109\\Desktop\\新程序\\" + fileName + ".xls");
  415. // //解析数据
  416. // List<List<Object>> readAll = reader.read();
  417. // if(!CollectionUtils.isEmpty(readAll)){
  418. // int i = 0;
  419. // for (List<Object> objects : readAll) {
  420. // String format = "";
  421. // if(objects.get(0) instanceof String){
  422. // System.out.println("----------是字符串类型的");
  423. // String time = ((String) objects.get(0));
  424. // System.out.println("time = " + time);
  425. // format = time.replaceAll("-", "/").substring(0, 16);
  426. // }else if (objects.get(0) instanceof cn.hutool.core.date.DateTime){
  427. // System.out.println("++++++++++是日期类型的");
  428. // cn.hutool.core.date.DateTime time = (DateTime) objects.get(0);
  429. // System.out.println("time = " + time);
  430. // format = DateUtil.format(time, DateUtils.YYYYMMDDHHMM_TS);
  431. // System.out.println("format = " + format);
  432. // }else {
  433. // System.out.println(JSON.toJSONString(objects));
  434. // format = "";
  435. // i++;
  436. // }
  437. // TXinyiIndustry uniqueTXinyiIndustry = this.xinyiIndustryMapper.getUniqueTXinyiIndustry(format);
  438. // if(!Objects.isNull(uniqueTXinyiIndustry)){
  439. // BigDecimal SJTYJLY = Objects.isNull(objects.get(1)) ? null : new BigDecimal(String.valueOf(objects.get(1)));
  440. // uniqueTXinyiIndustry.setSJTYJLY(SJTYJLY);
  441. // this.xinyiIndustryMapper.updateTXinyiIndustry(uniqueTXinyiIndustry);
  442. // }
  443. // }
  444. // System.out.println("i =" + i);
  445. // }
  446. // return "ok";
  447. // }
  448. //
  449. // //下面是新的 将一个小时的数据 更新到一个小时之内的所有的数据中
  450. // @GetMapping("/dateUpdateCLMinute")
  451. // public String dateUpdateCLMinute() {
  452. // String fileName = "除磷加药瞬时流量";
  453. // //输入目录
  454. // ExcelReader reader = ExcelUtil.getReader("C:\\Users\\10109\\Desktop\\新程序\\" + fileName + ".xls");
  455. // //解析数据
  456. // List<List<Object>> readAll = reader.read();
  457. // int i = 0;
  458. // if(!CollectionUtils.isEmpty(readAll)){
  459. // for (List<Object> objects : readAll) {
  460. // if(!Objects.isNull(objects.get(0)) && !Objects.isNull(objects.get(1))){
  461. // String beginTime = "20" + objects.get(0) + " " + objects.get(1).toString().substring(0, 5);
  462. // System.out.println("beginTime = " + beginTime);
  463. // String endTime = "20" + objects.get(0) + " " + objects.get(1).toString().substring(0, 3) + "59";
  464. // System.out.println("endTime = " + endTime);
  465. // //更新数据
  466. // System.out.println(objects.get(2));
  467. // //有特殊情况
  468. // if(Objects.isNull(objects.get(2)) || objects.get(2).toString().contains("-")){
  469. // System.out.println("存在特殊的情况,值包含-,不做更新");
  470. // i++;
  471. // }else{
  472. // this.xinyiIndustryMapper.updateTXinyiIndustryCLByBetweenTime(beginTime, endTime, new BigDecimal(String.valueOf(objects.get(2))));
  473. // }
  474. // }
  475. // }
  476. // }
  477. // System.out.println("i = " + i);
  478. // return "ok";
  479. // }
  480. //
  481. //
  482. // @GetMapping("/dateUpdateSJTYMinute")
  483. // public String dateUpdateSJTYMinute() {
  484. // String fileName = "信义污水厂实际碳源加药量";
  485. // //输入目录
  486. // ExcelReader reader = ExcelUtil.getReader("C:\\Users\\10109\\Desktop\\新程序\\" + fileName + ".xls");
  487. // //解析数据
  488. // List<List<Object>> readAll = reader.read();
  489. // if(!CollectionUtils.isEmpty(readAll)){
  490. // int i = 0;
  491. // for (List<Object> objects : readAll) {
  492. // String beginTime = "";
  493. // if(objects.get(0) instanceof String){
  494. // System.out.println("----------是字符串类型的");
  495. // String time = ((String) objects.get(0));
  496. //// System.out.println("time = " + time);
  497. // beginTime = time.replaceAll("-", "/").substring(0, 16);
  498. // }else if (objects.get(0) instanceof cn.hutool.core.date.DateTime){
  499. // System.out.println("++++++++++是日期类型的");
  500. // cn.hutool.core.date.DateTime time = (DateTime) objects.get(0);
  501. //// System.out.println("time = " + time);
  502. // beginTime = DateUtil.format(time, DateUtils.YYYYMMDDHHMM_TS);
  503. // System.out.println("beginTime = " + beginTime);
  504. // }else {
  505. // System.out.println(JSON.toJSONString(objects));
  506. // beginTime = "";
  507. // i++;
  508. // }
  509. // //endTime
  510. // String endTime = beginTime.substring(0, 14) + "59";
  511. // System.out.println("endTime = " + endTime);
  512. // //更新数据
  513. // BigDecimal sjtyjly = Objects.isNull(objects.get(1)) ? null : new BigDecimal(String.valueOf(objects.get(1)));
  514. // this.xinyiIndustryMapper.updateTXinyiIndustrySJByBetweenTime(beginTime, endTime, sjtyjly);
  515. // }
  516. // System.out.println("i =" + i);
  517. // }
  518. // return "ok";
  519. // }
  520. // @GetMapping("/dateUpdateSJTYMinute")
  521. // public String dateUpdateSJTYMinute() {
  522. // log.info("进入了手动处理两个值的操作~~~~~~~~");
  523. // File file = new File("/home/slibra/历史数据");
  524. // if(file.isDirectory()){
  525. // for (File listFile : file.listFiles()) {
  526. // // 输入目录
  527. // ExcelReader reader = ExcelUtil.getReader(listFile);
  528. // List<List<Object>> readAll = reader.read();
  529. // if(!CollectionUtils.isEmpty(readAll)){
  530. // for (int i = 3; i < readAll.size(); i++) {
  531. // //解析数据
  532. // List<Object> objects = readAll.get(i);
  533. // String time = "20" + objects.get(0).toString().replaceAll(" ", "") + " " + objects.get(1).toString().replaceAll(" ", "").substring(0, 5);
  534. //// System.out.println("time = " + time);
  535. // TXinyiIndustry uniqueTXinyiIndustry = this.xinyiIndustryMapper.getUniqueTXinyiIndustry(time);
  536. // if(!Objects.isNull(uniqueTXinyiIndustry)){
  537. // TXinyiIndustry updateBean = new TXinyiIndustry();
  538. // updateBean.setID(uniqueTXinyiIndustry.getID());
  539. // BigDecimal CLJYSSLL = Objects.isNull(objects.get(2)) || String.valueOf(objects.get(2)).contains("-") ? null : new BigDecimal(String.valueOf(objects.get(2)));
  540. // updateBean.setCLJYSSLL(CLJYSSLL);
  541. // BigDecimal SJTYJLY = Objects.isNull(objects.get(3)) || String.valueOf(objects.get(3)).contains("-") ? null : new BigDecimal(String.valueOf(objects.get(3)));
  542. // updateBean.setSJTYJLY(SJTYJLY);
  543. // //如果两个都不为空再更新
  544. // if(!Objects.isNull(CLJYSSLL) || !Objects.isNull(SJTYJLY)){
  545. // this.xinyiIndustryMapper.updateTXinyiIndustry(updateBean);
  546. // }else{
  547. // log.error("要更新的两个字段全部为空--------");
  548. // }
  549. // }
  550. // }
  551. // }
  552. // }
  553. // }
  554. // return "ok";
  555. // }
  556. /**
  557. *
  558. * 从Excel读取数据 将新增的列数据更新到新的日报字段中
  559. * @return
  560. */
  561. @GetMapping("/dailyAddDataByExcel")
  562. public String dailyAddDataByExcel() {
  563. log.info("从Excel读取数据 将新增的列数据更新到新的日报字段中~~~~~~~~");
  564. File file = new File("/home/slibra/绝干泥量.xlsx");
  565. // File file = new File("C:\\Users\\10109\\Documents\\WeChat Files\\mz1010995810\\FileStorage\\File\\2024-05\\绝干泥量.xlsx");
  566. // 输入目录
  567. ExcelReader reader = ExcelUtil.getReader(file);
  568. List<List<Object>> readAll = reader.read();
  569. // log.info("Excel解析的结果为{}", JSON.toJSONString(readAll));
  570. if(!CollectionUtils.isEmpty(readAll)){
  571. for (int i = 1; i < readAll.size(); i++) {
  572. //解析数据
  573. List<Object> objects = readAll.get(i);
  574. String date = (String) objects.get(0);
  575. date = date.replaceAll("\\.", "/");
  576. date = handleDate(date);
  577. //用时间去查询 如果存在就更新,否则跳过
  578. List<TXinyiDaily> tXinyiDailies = this.xinyiDailyMapper.selectTXinyiDailyList(TXinyiDaily.builder().testDate(date).build());
  579. if(CollectionUtils.isEmpty(tXinyiDailies)){
  580. log.error("没有查询到对应的历史数据,跳过~~~~~~{}", date);
  581. continue;
  582. }
  583. //目前集合就一个对象 以后可能会多个
  584. TXinyiDaily tXinyiDaily = tXinyiDailies.get(0);
  585. //出泥量
  586. Object o1 = objects.get(1);
  587. BigDecimal CHUNILIANG = null;
  588. if(o1 instanceof String){
  589. log.error("数据异常,解析为null");
  590. CHUNILIANG = null;
  591. }else if(o1 instanceof Double){
  592. CHUNILIANG = new BigDecimal((Double) o1);
  593. }else {
  594. log.error("错误的类型,不用解析了");
  595. CHUNILIANG = null;
  596. }
  597. //出泥含水率
  598. BigDecimal CNHSL = null;
  599. Object o2 = objects.get(2);
  600. if(o2 instanceof String){
  601. log.error("数据异常,解析为null");
  602. CNHSL = null;
  603. }else if(o2 instanceof Double){
  604. CNHSL = new BigDecimal((Double) o2);
  605. }else {
  606. log.error("错误的类型,不用解析了");
  607. CNHSL = null;
  608. }
  609. //干污泥量
  610. Object o3 = objects.get(3);
  611. BigDecimal GWNL = null;
  612. if(o3 instanceof String){
  613. log.error("数据异常,解析为null");
  614. GWNL = null;
  615. }else if(o3 instanceof Double){
  616. GWNL = new BigDecimal((Double) o3);
  617. }else {
  618. log.error("错误的类型,不用解析了");
  619. GWNL = null;
  620. }
  621. //更新数据
  622. tXinyiDaily.setCHUNILIANG(CHUNILIANG);
  623. tXinyiDaily.setCNHSL(CNHSL);
  624. tXinyiDaily.setGWNL(GWNL);
  625. this.xinyiDailyMapper.updateTXinyiDaily(tXinyiDaily);
  626. }
  627. }
  628. return "ok";
  629. }
  630. /**
  631. * 手动处理日报数据 增加两个字段 时间和小时
  632. * @return
  633. */
  634. @GetMapping("/dateUpdateDaily")
  635. public String dateUpdateDaily() {
  636. //获取全部数据
  637. List<TXinyiDaily> tXinyiDailies = this.xinyiDailyMapper.selectTXinyiDailyList(null);
  638. if(!CollectionUtils.isEmpty(tXinyiDailies)){
  639. for (TXinyiDaily tXinyiDaily : tXinyiDailies) {
  640. String handleTime = handleDate(tXinyiDaily.getTestTime());
  641. tXinyiDaily.setTestTime(handleTime);
  642. tXinyiDaily.setTestDate(handleTime);
  643. //更新
  644. this.xinyiDailyMapper.updateTXinyiDaily(tXinyiDaily);
  645. }
  646. }
  647. return "ok";
  648. }
  649. /**
  650. * 手动处理化验数据 增加两个字段 时间和小时
  651. * @return
  652. */
  653. @GetMapping("/dateUpdateHuaYan")
  654. public String dateUpdateHuaYan() {
  655. //获取全部数据
  656. List<TXinyiLaboratory> tXinyiLaboratories = this.xinyiLaboratoryMapper.selectTXinyiLaboratoryList(null);
  657. if(!CollectionUtils.isEmpty(tXinyiLaboratories)){
  658. for (TXinyiLaboratory tXinyiLaboratory : tXinyiLaboratories) {
  659. String handleTime = handleDate(tXinyiLaboratory.getTestTime());
  660. tXinyiLaboratory.setTestTime(handleTime);//到分为止
  661. tXinyiLaboratory.setTestDate(handleTime.substring(0, 10));
  662. tXinyiLaboratory.setTestHour(handleTime.substring(0, 13));
  663. //更新
  664. this.xinyiLaboratoryMapper.updateTXinyiLaboratory(tXinyiLaboratory);
  665. }
  666. }
  667. return "ok";
  668. }
  669. /**
  670. * 手动处理 工业库的 某个值,将历史数据全部都更新
  671. * @return
  672. */
  673. @GetMapping("/updateGYKSomeFields")
  674. public String updateGYKSomeFields() {
  675. //更新的某个指标
  676. String[] queryTags = {"信义污水厂_除磷P04预测值_"};
  677. //找到对应的数据,然后更新它
  678. // 给定时间段的起始时间和结束时间
  679. LocalDateTime startTime = LocalDateTime.parse("2022-07-01T00:00:00");
  680. LocalDateTime endTime = LocalDateTime.parse("2024-04-25T09:00:01");
  681. // 每个小时的时间格式
  682. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  683. // 循环按小时分割
  684. LocalDateTime currentHour = startTime;
  685. while (currentHour.isBefore(endTime)) {
  686. String begin = currentHour.format(formatter);
  687. String end = currentHour.plusDays(1).format(formatter);
  688. // 输出当前小时的起始时间和结束时间
  689. System.out.println("起始时间:" + begin);
  690. System.out.println("结束时间:" + end);
  691. // 当前小时加一小时,作为下一个小时的起始时间
  692. currentHour = currentHour.plusDays(1);
  693. //每个小时查询一次数据
  694. String url = "http://10.0.0.27:4568/api/v1/khquerydata";
  695. HashMap<String, Object> req = new HashMap<>();
  696. req.put("tagNames", queryTags);
  697. req.put("startTime", begin);
  698. req.put("endTime", end);
  699. req.put("recordNumbers", 100000);
  700. String body = HttpRequest.post(url).header("Authorization", "c2E6c2E=").header("clientName", "hongshan").body(JSON.toJSONString(req)).execute().body();
  701. // System.out.println("body = " + body);
  702. List<HashMap<String, String>> list = new ArrayList<>();
  703. //行转列数据处理
  704. for (String queryTag : queryTags) {
  705. JSONArray array = JSON.parseObject(body).getJSONArray(queryTag);
  706. //特殊数据处理一
  707. if(Objects.isNull(array) || array.isEmpty()){
  708. System.out.println(queryTag + "查询到了空的数据,跳过本次循环");
  709. continue;
  710. }
  711. int size = array.size();
  712. //特殊数据处理二
  713. if("0".equals(array.get(1) + "")){
  714. System.out.println(queryTag + "查询到了数据,但是数据集合只有一条,且都是0");
  715. continue;
  716. }
  717. //存放的数据集
  718. //利用map去重
  719. HashMap<String, String> map = new LinkedHashMap<>();
  720. for (int i = 2; i < size; i++) {
  721. // System.out.println(i + "" + array.get(i));
  722. JSONArray oneRecord = JSON.parseArray(JSON.toJSONString(array.get(i)));
  723. //处理为空或者为0的数据
  724. Object timeStampValue = oneRecord.get(2);
  725. if(Objects.isNull(timeStampValue) || "0".equals(timeStampValue + ""))
  726. continue;
  727. BigDecimal value = Objects.isNull(oneRecord.get(0)) ? null : new BigDecimal(oneRecord.get(0) + "");
  728. long timestamp = (long) timeStampValue;
  729. String format = DateUtil.format(new Date(timestamp), DateUtils.YYYYMMDDHH_TS);
  730. map.put(format, queryTag + "-" + value);
  731. }
  732. list.add(map);
  733. }
  734. Set<String> recordTimeSet = new HashSet<>();
  735. Map<String, TXinyiIndustry> recordMap = new HashMap<>();
  736. for (int i = 0; i < list.size(); i++) {
  737. HashMap<String, String> map = list.get(i);
  738. int finalJ = i;
  739. map.forEach((k, v) ->{
  740. TXinyiIndustry industry = null;
  741. if(!recordTimeSet.contains(k)){//第一次
  742. industry = new TXinyiIndustry();
  743. recordTimeSet.add(k);
  744. recordMap.put(k, industry);
  745. }else{
  746. industry = recordMap.get(k);
  747. }
  748. industry.setTestTime(k);
  749. //解析值
  750. String[] split = v.split("-");
  751. String type = split[0];
  752. BigDecimal value = new BigDecimal(split[1]);
  753. if ("信义污水厂_除磷P04预测值_".equals(type)) {
  754. industry.setCLP04YCZ(value);//目前值更新此字段
  755. }
  756. /*else if ("信义污水厂除磷加药瞬时流量".equals(type)) {
  757. industry.setCLJYSSLL(value);
  758. }*/
  759. //只有最后一次才执行数据库添加
  760. if(finalJ == list.size()-1){
  761. //先去查询数据库
  762. TXinyiIndustry uniqueTXinyiIndustry = this.xinyiIndustryMapper.getUniqueTXinyiIndustry(industry.getTestTime());
  763. if(Objects.isNull(uniqueTXinyiIndustry))
  764. log.error("查询到的工业库数据为null,化验时间为{}", industry.getTestTime());
  765. else {
  766. //防止其他信息被更新,新建对象
  767. TXinyiIndustry updateTXinyiIndustry = new TXinyiIndustry();
  768. //赋值
  769. updateTXinyiIndustry.setID(uniqueTXinyiIndustry.getID());
  770. updateTXinyiIndustry.setCLP04YCZ(industry.getCLP04YCZ());
  771. //更新数据库
  772. xinyiIndustryMapper.updateTXinyiIndustry(updateTXinyiIndustry);
  773. }
  774. }
  775. });
  776. }
  777. }
  778. return "ok";
  779. }
  780. /**
  781. * 手动处理 计算相关的数据,处理历史数据
  782. * @return
  783. */
  784. @GetMapping("/handleCalculateHistoryDates")
  785. public String handleCalculateHistoryDates() {
  786. log.info("进入了 手动处理-重置计算表历史数据");
  787. long begin = System.currentTimeMillis();
  788. List<TXinyiNormConfig> tXinyiNormConfigs = xinyiNormConfigMapper.selectTXinyiNormConfigList(null);
  789. if(CollectionUtils.isEmpty(tXinyiNormConfigs)) {
  790. log.error( "未查询到配置信息");
  791. return null;
  792. }
  793. TXinyiNormConfig normConfig = tXinyiNormConfigs.get(0);
  794. int size = 500;
  795. int count = xinyiIndustryMapper.getCount();
  796. int num = ( count / size ) + 1;
  797. for (int i = 0; i < num; i++) {
  798. List<TXinyiIndustry> tXinyiIndustries = xinyiIndustryMapper.selectTXinyiIndustryListByPage(i * size, size);
  799. List<TXinyiCalculate> tempInsertData = new ArrayList<>();
  800. if (!CollectionUtils.isEmpty( tXinyiIndustries )) {
  801. for (int j = 0; j < tXinyiIndustries.size(); j++) {
  802. TXinyiIndustry tXinyiIndustry = tXinyiIndustries.get(j);
  803. //获取的一些配置信息
  804. BigDecimal nhlbqdsl = normConfig.getNHLBQDSL();
  805. BigDecimal nhlbdsjll = normConfig.getNHLBDSJLL();
  806. BigDecimal nhlbgzxl = normConfig.getNHLBGZXL();
  807. BigDecimal whlbqdsl = normConfig.getWHLBQDSL();
  808. BigDecimal whlbdsjll = normConfig.getWHLBDSJLL();
  809. BigDecimal whlbgzxl = normConfig.getWHLBGZXL();
  810. BigDecimal gfjgzts = normConfig.getGFJGZTS();
  811. BigDecimal gfjckll = normConfig.getGFJCKLL();
  812. BigDecimal fcxbsjll = normConfig.getFCXBSJLL();
  813. BigDecimal fclbsl = normConfig.getFCLBSL();
  814. BigDecimal fcxbgzxl = normConfig.getFCXBGZXL();
  815. //结算结果
  816. TXinyiCalculate tXinyiCalculate = new TXinyiCalculate();
  817. //时间相关
  818. tXinyiCalculate.setTestDate(tXinyiIndustry.getTestDate());
  819. tXinyiCalculate.setTestHour(tXinyiIndustry.getTestHour());
  820. tXinyiCalculate.setTestTime(tXinyiIndustry.getTestTime());
  821. //获取最新的一条日报信息
  822. TXinyiDaily tXinyiDaily = this.xinyiDailyMapper.getDetailByDay(tXinyiIndustry.getTestDate());
  823. if(Objects.isNull(tXinyiDaily)){
  824. //理论不会出现
  825. log.error("没有日报数据,取最新的");
  826. tXinyiDaily = this.xinyiDailyMapper.selectNewestData();
  827. }
  828. BigDecimal jsBod5 = tXinyiDaily.getJsBod5();
  829. BigDecimal csBod5 = tXinyiDaily.getCsBod5();
  830. BigDecimal whlR = tXinyiDaily.getWhlR();
  831. BigDecimal oneMlvss = tXinyiDaily.getShcHyOneMlvss();
  832. BigDecimal twoMlvss = tXinyiDaily.getShcHyTwoMlvss();
  833. BigDecimal avgMlvss = null;
  834. if(!Objects.isNull(oneMlvss) && !Objects.isNull(twoMlvss))
  835. avgMlvss = ((oneMlvss.add(twoMlvss)).divide(new BigDecimal(2),4, RoundingMode.HALF_UP));
  836. BigDecimal oneMlss = tXinyiDaily.getShcHyOneMlss();
  837. BigDecimal twoMlss = tXinyiDaily.getShcHyTwoMlss();
  838. BigDecimal avgMlss = null;
  839. if(!Objects.isNull(oneMlss) && !Objects.isNull(twoMlss))
  840. avgMlss = ((oneMlss.add(twoMlss)).divide(new BigDecimal(NUMBER_2),NUMBER_SCALE_4, RoundingMode.HALF_UP));
  841. //工业库的指标
  842. BigDecimal jsTn = tXinyiIndustry.getJsTn();
  843. BigDecimal jsTp = tXinyiIndustry.getJsTp();
  844. BigDecimal jsCod = tXinyiIndustry.getJsCod();
  845. BigDecimal jsSlq = tXinyiIndustry.getJsSlq();
  846. //计算
  847. if(!Objects.isNull(jsBod5)){
  848. if(!Objects.isNull(jsTn) && jsTn.compareTo(BigDecimal.ZERO) > 0)
  849. tXinyiCalculate.setJsTdb(jsBod5.divide(jsTn, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  850. if(!Objects.isNull(jsTp) && jsTp.compareTo(BigDecimal.ZERO) > 0)
  851. tXinyiCalculate.setJsTlb(jsBod5.divide(jsTp, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  852. if(!Objects.isNull(jsCod) && jsCod.compareTo(BigDecimal.ZERO) > 0)
  853. tXinyiCalculate.setJsBodBCod(jsBod5.divide(jsCod, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  854. if(!Objects.isNull(csBod5) && !Objects.isNull(avgMlss) && avgMlss.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(jsSlq) && jsSlq.compareTo(BigDecimal.ZERO) > 0)
  855. tXinyiCalculate.setFM(new BigDecimal(ONE_DAY_HOURS).multiply((jsBod5.subtract(csBod5))).multiply(jsSlq).divide(avgMlss, NUMBER_SCALE_4, RoundingMode.HALF_UP).divide(new BigDecimal(F_M_LAST), NUMBER_SCALE_4, RoundingMode.HALF_UP));
  856. }
  857. if(!Objects.isNull(avgMlss) && avgMlss.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(avgMlvss) && avgMlvss.compareTo(BigDecimal.ZERO) > 0)
  858. tXinyiCalculate.setHFXWNNDZB(avgMlvss.divide(avgMlss, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  859. if(!Objects.isNull(jsSlq) && jsSlq.compareTo(BigDecimal.ZERO) > 0){
  860. tXinyiCalculate.setYyqHrt(new BigDecimal(YYQ_TLSJ_FIRST).divide(jsSlq, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  861. tXinyiCalculate.setQyqHrt(new BigDecimal(QYQ_TLSJ_FIRST).divide(jsSlq, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  862. tXinyiCalculate.setHyqHrt(new BigDecimal(HYQ_TLSJ_FIRST).divide(jsSlq, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  863. // tXinyiCalculate.setGSLS(jsSlq.divide(new BigDecimal(NUMBER_3600), NUMBER_SCALE_4, RoundingMode.HALF_UP).multiply(new BigDecimal(NUMBER_4)).divide((new BigDecimal(Math.PI).multiply(new BigDecimal(NUMBER_0_0_0_3)).multiply(new BigDecimal(NUMBER_0_0_0_3)).multiply(new BigDecimal(NUMBER_4)).multiply(new BigDecimal(NUMBER_4)).multiply(new BigDecimal(NUMBER_97119))) , NUMBER_SCALE_4, RoundingMode.HALF_UP));
  864. tXinyiCalculate.setGSLS(jsSlq.divide(GSLS_LAST, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  865. tXinyiCalculate.setGslsOne(jsSlq.divide(new BigDecimal(NUMBER_3600), NUMBER_SCALE_4, RoundingMode.HALF_UP).multiply(new BigDecimal(Math.sqrt(Math.sin(Math.toRadians(DOUBLE_75))))).divide(GSLSONE_LAST, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  866. tXinyiCalculate.setGslsTwo(jsSlq.divide(new BigDecimal(NUMBER_3600), NUMBER_SCALE_4, RoundingMode.HALF_UP).multiply(new BigDecimal(Math.sqrt(Math.sin(Math.toRadians(DOUBLE_75))))).divide(GSLSTWO_LAST, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  867. tXinyiCalculate.setXgsGsls(jsSlq.divide(new BigDecimal(NUMBER_3600), NUMBER_SCALE_4, RoundingMode.HALF_UP).multiply(new BigDecimal(NUMBER_4)).divide((GSLS_XGS_LAST) , NUMBER_SCALE_4, RoundingMode.HALF_UP));
  868. tXinyiCalculate.setXlcscBmfh(jsSlq.divide(XLCSCBMFH_LAST, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  869. tXinyiCalculate.setXlcscHrt(XLCSCHRT_LAST.divide(jsSlq, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  870. tXinyiCalculate.setCccdcBmfh(jsSlq.divide(CCCDCBMFH_LAST, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  871. tXinyiCalculate.setCccdcHrt(CCCDCHRT_LAST.divide(jsSlq, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  872. tXinyiCalculate.setEccBmfh(jsSlq.divide(ECCBMFH_LAST, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  873. tXinyiCalculate.setEccHrt(ECCHRT_LAST.divide(jsSlq, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  874. //2024年7月1日17:16:16 计算逻辑调整
  875. if(!Objects.isNull(whlR) && avgMlss != null && jsSlq != null) {
  876. tXinyiCalculate.setEccGtfh((new BigDecimal(1).add(whlR.divide(BigDecimal_100, NUMBER_SCALE_4, RoundingMode.HALF_UP))).multiply(jsSlq).multiply(new BigDecimal(NUMBER_24)).multiply(avgMlss).divide(ECCGTFH_LAST, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  877. }
  878. tXinyiCalculate.setClsnJcsj(CLSNJCSJ_LAST.divide(jsSlq, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  879. tXinyiCalculate.setXgcdcQsqSsls(jsSlq.multiply(XGCDCQSQSSLS_LAST));
  880. //2024年6月29日15:18:01 增加几个新的计算指标
  881. if(!Objects.isNull(nhlbqdsl) && !Objects.isNull(nhlbdsjll) && !Objects.isNull(nhlbgzxl))
  882. tXinyiCalculate.setNHLB(nhlbqdsl.multiply(nhlbdsjll).multiply(nhlbgzxl).multiply(BigDecimal_100).divide(jsSlq, 4, RoundingMode.HALF_UP));
  883. if(!Objects.isNull(whlbqdsl) && !Objects.isNull(whlbdsjll) && !Objects.isNull(whlbgzxl))
  884. tXinyiCalculate.setWHLB(whlbqdsl.multiply(whlbdsjll).multiply(whlbgzxl).multiply(BigDecimal_100).divide(jsSlq, 4, RoundingMode.HALF_UP));
  885. if(!Objects.isNull(gfjgzts) && !Objects.isNull(gfjckll))
  886. tXinyiCalculate.setQSB(gfjgzts.multiply(gfjckll).divide(jsSlq, NUMBER_SCALE_4, RoundingMode.HALF_UP));
  887. if(!Objects.isNull(fcxbsjll) && !Objects.isNull(fclbsl) && !Objects.isNull(fcxbgzxl)){
  888. BigDecimal fcxsl = fcxbsjll.multiply(fclbsl).multiply(fcxbgzxl);
  889. tXinyiCalculate.setFCXSL(fcxsl);
  890. //2024年7月3日10:54:28 额外再增加一个字段
  891. tXinyiCalculate.setFCXSLBL(fcxsl.divide(jsSlq, NUMBER_SCALE_4, RoundingMode.HALF_UP).multiply(BigDecimal_100));
  892. }
  893. //2024年7月11日15:43:47 之前给的外回流比计算不准确,额外一个字段记录新的外回流比
  894. BigDecimal divide = jsSlq.divide(DECIMAL_2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
  895. if(divide.compareTo(DECIMAL_1500) < 0)
  896. tXinyiCalculate.setWhlRN(DECIMAL_1200.divide(divide, NUMBER_SCALE_4, RoundingMode.HALF_UP).multiply(BigDecimal_100));
  897. else
  898. tXinyiCalculate.setWhlRN(DECIMAL_1620.divide(divide, NUMBER_SCALE_4, RoundingMode.HALF_UP).multiply(BigDecimal_100));
  899. }
  900. tempInsertData.add(tXinyiCalculate);
  901. xinyiCalculateMapper.insertTXinyiCalculate(tXinyiCalculate);
  902. }
  903. // xinyiCalculateMapper.insertBatchData(tempInsertData);
  904. // return tXinyiCalculate;
  905. }
  906. }
  907. long end = System.currentTimeMillis();
  908. return "ok;耗时:" + (end - begin) /1000 + "秒。";
  909. }
  910. public void main(String[] args) {
  911. // handleBigTableDayHistoryData();
  912. // HandleDataController handleDataController = new HandleDataController();
  913. //
  914. // handleDataController.handleBigTableDayHistoryData();
  915. // File file = new File("C:\\Users\\10109\\Desktop\\新程序\\历史数据");
  916. // if(file.isDirectory()){
  917. // for (File listFile : file.listFiles()) {
  918. //// System.out.println(listFile.getName());
  919. // ExcelReader reader = ExcelUtil.getReader(listFile);
  920. // List<List<Object>> readAll = reader.read();
  921. // for (int i = 3; i < 10; i++) {
  922. // System.out.println(readAll.get(i));
  923. // }
  924. // System.out.println("------------------");
  925. // }
  926. // }
  927. String str = "2022/07/11 19:00";
  928. // String str = "2022/7/1";
  929. // String str = "0:0:1";
  930. // String newStr = handleDate(str);
  931. // System.out.println(newStr);
  932. // System.out.println(str.substring(0, 12));
  933. // System.out.println(str.substring(0, 9));
  934. // System.out.println(handleDate("2024-3-9"));
  935. System.out.println(handleDate("2023/12/26 02:00"));
  936. System.out.println(handleDate("2023/12/26 02:00").substring(0, 10));
  937. System.out.println(handleDate("2023/12/26 02:00").substring(0, 13));
  938. }
  939. public static String handleDate(String str){
  940. StringBuilder sb = new StringBuilder();
  941. if(str.contains(" ")){//包含空格 就是年月日时分秒了
  942. String[] split = str.split(" ");
  943. addBeforeZero(sb, split[0], "/");
  944. sb.append(" ");
  945. addBeforeZero(sb, split[1], ":");
  946. }else{
  947. if(str.contains("/")){//年月日
  948. addBeforeZero(sb, str, "/");
  949. }else if(str.contains(":")){//时分秒
  950. addBeforeZero(sb, str, ":");
  951. }else if(str.contains("-")){//只有年月日
  952. addBeforeZero(sb, str, "-");
  953. }else {
  954. sb.append(str);
  955. }
  956. }
  957. return sb.toString();
  958. }
  959. public static StringBuilder addBeforeZero(StringBuilder sb, String str, String tag){
  960. String[] split = str.split(tag);
  961. int length = split.length;
  962. for (int i = 0; i < length; i++) {
  963. String value = split[i];
  964. Integer intValue = Integer.parseInt(value);
  965. if(intValue < 10 && value.length() == 1){////防止有正确的情况 额外再补充字符串
  966. sb.append(0).append(value);
  967. }else{
  968. sb.append(value);
  969. }
  970. if(i < length-1){
  971. sb.append(tag);
  972. }
  973. }
  974. return sb;
  975. }
  976. public BigDecimal getListAvg (Collection<BigDecimal> bigDecimals) {
  977. if (bigDecimals.isEmpty()) {
  978. return null;
  979. }
  980. BigDecimal sum = bigDecimals.stream()
  981. .reduce(BigDecimal.ZERO, BigDecimal::add);
  982. int size = bigDecimals.size();
  983. return sum.divide(new BigDecimal(size), 6, RoundingMode.HALF_UP);
  984. }
  985. public String formatList(List<BigDecimal> list) {
  986. if (CollectionUtils.isEmpty(list)) {
  987. return null;
  988. }
  989. boolean isNullList = list.stream().allMatch(x -> x == null);
  990. return isNullList ? null : list.toString();
  991. }
  992. /**
  993. * 处理big_table_month历史数据
  994. * @return
  995. */
  996. @GetMapping("/handleBigTableMonthHistoryData")
  997. public String handleBigTableMonthHistoryData() {
  998. log.info("进入了处理big_table_month历史数据");
  999. long begin = System.currentTimeMillis();
  1000. List<TXinyiBigTableMonth> tXinyiBigTableDayList = tXinyiBigTableDayMapper.selectTXinyiBigTableDayByMonthAvg();
  1001. if ( !CollectionUtils.isEmpty(tXinyiBigTableDayList) ) {
  1002. for (int i = 0; i < tXinyiBigTableDayList.size(); i++) {
  1003. TXinyiBigTableMonth tableMonth = tXinyiBigTableDayList.get(i);
  1004. ArrayList<BigDecimal> gyHycRjyAll = new ArrayList<>();
  1005. ArrayList<BigDecimal> gyHycRjyZdAll = new ArrayList<>();
  1006. ArrayList<BigDecimal> gyHycWnndAll = new ArrayList<>();
  1007. ArrayList<BigDecimal> rbHycRjyAll = new ArrayList<>();
  1008. ArrayList<BigDecimal> rbHycWnndAll = new ArrayList<>();
  1009. ArrayList<BigDecimal> rbYycRjyAll = new ArrayList<>();
  1010. ArrayList<BigDecimal> rbQycRjyAll = new ArrayList<>();
  1011. ArrayList<BigDecimal> rbWncjbAll = new ArrayList<>();
  1012. ArrayList<BigDecimal> rbWntjzsAll = new ArrayList<>();
  1013. ArrayList<BigDecimal> rbHfxwnndAll = new ArrayList<>();
  1014. ArrayList<BigDecimal> hyHycxsyAll = new ArrayList<>();
  1015. ArrayList<BigDecimal> hyQyanAll = new ArrayList<>();
  1016. ArrayList<BigDecimal> hyQyckxsyAll = new ArrayList<>();
  1017. ArrayList<BigDecimal> hyHyzlsyAll = new ArrayList<>();
  1018. gyHycRjyAll.add(tableMonth.getGyOneHymdDo());
  1019. gyHycRjyAll.add(tableMonth.getGyTwoHymdDo());
  1020. gyHycRjyZdAll.add(tableMonth.getGyOneHyzdDo());
  1021. gyHycRjyZdAll.add(tableMonth.getGyTwoHyzdDo());
  1022. gyHycWnndAll.add(tableMonth.getGyOneMlss());
  1023. gyHycWnndAll.add(tableMonth.getGyTwoMlss());
  1024. rbHycRjyAll.add(tableMonth.getRbShcHyOneDo());
  1025. rbHycRjyAll.add(tableMonth.getRbShcHyTwoDo());
  1026. rbHycWnndAll.add(tableMonth.getRbShcHyOneMlss());
  1027. rbHycWnndAll.add(tableMonth.getRbShcHyTwoMlss());
  1028. rbYycRjyAll.add(tableMonth.getRbShcYyOneDo());
  1029. rbYycRjyAll.add(tableMonth.getRbShcYyTwoDo());
  1030. rbQycRjyAll.add(tableMonth.getRbShcQyOneDo());
  1031. rbQycRjyAll.add(tableMonth.getRbShcQyTwoDo());
  1032. rbWncjbAll.add(tableMonth.getRbShcHyOneSv());
  1033. rbWncjbAll.add(tableMonth.getRbShcHyTwoSv());
  1034. rbWntjzsAll.add(tableMonth.getRbShcHyOneSvi());
  1035. rbWntjzsAll.add(tableMonth.getRbShcHyTwoSvi());
  1036. rbHfxwnndAll.add(tableMonth.getRbShcHyOneMlvss());
  1037. rbHfxwnndAll.add(tableMonth.getRbShcHyTwoMlvss());
  1038. hyHycxsyAll.add(tableMonth.getHyNo3Hlj1Jqr());
  1039. hyHycxsyAll.add(tableMonth.getHyNo3Hlj2Jqr());
  1040. hyQyanAll.add(tableMonth.getHyNh31Jqr());
  1041. hyQyanAll.add(tableMonth.getHyNh32Jqr());
  1042. hyQyckxsyAll.add(tableMonth.getHyNo3Qyc1Jqr());
  1043. hyQyckxsyAll.add(tableMonth.getHyNo3Qyc2Jqr());
  1044. hyHyzlsyAll.add(tableMonth.getHyTpHl1Jqr());
  1045. hyHyzlsyAll.add(tableMonth.getHyTpHl2Jqr());
  1046. tableMonth.setGyHycRjyAll(formatList(gyHycRjyAll));
  1047. tableMonth.setGyHycRjyZdAll(formatList(gyHycRjyZdAll));
  1048. tableMonth.setGyHycWnndAll(formatList(gyHycWnndAll));
  1049. tableMonth.setRbHycRjyAll(formatList(rbHycRjyAll));
  1050. tableMonth.setRbHycWnndAll(formatList(rbHycWnndAll));
  1051. tableMonth.setRbYycRjyAll(formatList(rbYycRjyAll));
  1052. tableMonth.setRbQycRjyAll(formatList(rbQycRjyAll));
  1053. tableMonth.setRbWncjbAll(formatList(rbWncjbAll));
  1054. tableMonth.setRbWntjzsAll(formatList(rbWntjzsAll));
  1055. tableMonth.setRbHfxwnndAll(formatList(rbHfxwnndAll));
  1056. tableMonth.setHyHycxsyAll(formatList(hyHycxsyAll));
  1057. tableMonth.setHyQyanAll(formatList(hyQyanAll));
  1058. tableMonth.setHyQyckxsyAll(formatList(hyQyckxsyAll));
  1059. tableMonth.setHyHyzlsyAll(formatList(hyHyzlsyAll));
  1060. tXinyiBigTableMonthMapper.insertTXinyiBigTableMonth(tableMonth);
  1061. }
  1062. }
  1063. long end = System.currentTimeMillis();
  1064. return "ok;耗时:" + (end - begin) / 1000 + "秒。";
  1065. }
  1066. /**
  1067. * 处理big_table_day历史数据
  1068. * @return
  1069. */
  1070. @GetMapping("/handleBigTableDayHistoryData")
  1071. public String handleBigTableDayHistoryData(@RequestParam String date) {
  1072. log.info("进入了 处理big_table_day历史数据");
  1073. long begin = System.currentTimeMillis();
  1074. List<TXinyiBigTableHour> tXinyiBigTableHours = tXinyiBigTableHourMapper.selectTXinyiBigTableHourByTestDate(date);
  1075. if ( !CollectionUtils.isEmpty(tXinyiBigTableHours) ) {
  1076. List<TXinyiBigTableDay> bigTableDayList = new ArrayList<>();
  1077. for (TXinyiBigTableHour tXinyiBigTableHour : tXinyiBigTableHours) {
  1078. String testDate = tXinyiBigTableHour.getTestDate();
  1079. TXinyiBigTableDay tableDay = tXinyiBigTableDayMapper.selectTXinyiBigTableHourAvg(testDate);
  1080. if (!Objects.isNull(tableDay)) {
  1081. ArrayList<BigDecimal> gyHycRjyAll = new ArrayList<>();
  1082. ArrayList<BigDecimal> gyHycRjyZdAll = new ArrayList<>();
  1083. ArrayList<BigDecimal> gyHycWnndAll = new ArrayList<>();
  1084. ArrayList<BigDecimal> rbHycRjyAll = new ArrayList<>();
  1085. ArrayList<BigDecimal> rbHycWnndAll = new ArrayList<>();
  1086. ArrayList<BigDecimal> rbYycRjyAll = new ArrayList<>();
  1087. ArrayList<BigDecimal> rbQycRjyAll = new ArrayList<>();
  1088. ArrayList<BigDecimal> rbWncjbAll = new ArrayList<>();
  1089. ArrayList<BigDecimal> rbWntjzsAll = new ArrayList<>();
  1090. ArrayList<BigDecimal> rbHfxwnndAll = new ArrayList<>();
  1091. ArrayList<BigDecimal> hyHycxsyAll = new ArrayList<>();
  1092. ArrayList<BigDecimal> hyQyanAll = new ArrayList<>();
  1093. ArrayList<BigDecimal> hyQyckxsyAll = new ArrayList<>();
  1094. ArrayList<BigDecimal> hyHyzlsyAll = new ArrayList<>();
  1095. gyHycRjyAll.add(tableDay.getGyOneHymdDo());
  1096. gyHycRjyAll.add(tableDay.getGyTwoHymdDo());
  1097. gyHycRjyZdAll.add(tableDay.getGyOneHyzdDo());
  1098. gyHycRjyZdAll.add(tableDay.getGyTwoHyzdDo());
  1099. gyHycWnndAll.add(tableDay.getGyOneMlss());
  1100. gyHycWnndAll.add(tableDay.getGyTwoMlss());
  1101. rbHycRjyAll.add(tableDay.getRbShcHyOneDo());
  1102. rbHycRjyAll.add(tableDay.getRbShcHyTwoDo());
  1103. rbHycWnndAll.add(tableDay.getRbShcHyOneMlss());
  1104. rbHycWnndAll.add(tableDay.getRbShcHyTwoMlss());
  1105. rbYycRjyAll.add(tableDay.getRbShcYyOneDo());
  1106. rbYycRjyAll.add(tableDay.getRbShcYyTwoDo());
  1107. rbQycRjyAll.add(tableDay.getRbShcQyOneDo());
  1108. rbQycRjyAll.add(tableDay.getRbShcQyTwoDo());
  1109. rbWncjbAll.add(tableDay.getRbShcHyOneSv());
  1110. rbWncjbAll.add(tableDay.getRbShcHyTwoSv());
  1111. rbWntjzsAll.add(tableDay.getRbShcHyOneSvi());
  1112. rbWntjzsAll.add(tableDay.getRbShcHyTwoSvi());
  1113. rbHfxwnndAll.add(tableDay.getRbShcHyOneMlvss());
  1114. rbHfxwnndAll.add(tableDay.getRbShcHyTwoMlvss());
  1115. hyHycxsyAll.add(tableDay.getHyNo3Hlj1Jqr());
  1116. hyHycxsyAll.add(tableDay.getHyNo3Hlj2Jqr());
  1117. hyQyanAll.add(tableDay.getHyNh31Jqr());
  1118. hyQyanAll.add(tableDay.getHyNh32Jqr());
  1119. hyQyckxsyAll.add(tableDay.getHyNo3Qyc1Jqr());
  1120. hyQyckxsyAll.add(tableDay.getHyNo3Qyc2Jqr());
  1121. hyHyzlsyAll.add(tableDay.getHyTpHl1Jqr());
  1122. hyHyzlsyAll.add(tableDay.getHyTpHl2Jqr());
  1123. tableDay.setGyHycRjyAll(formatList(gyHycRjyAll));
  1124. tableDay.setGyHycRjyZdAll(formatList(gyHycRjyZdAll));
  1125. tableDay.setGyHycWnndAll(formatList(gyHycWnndAll));
  1126. tableDay.setRbHycRjyAll(formatList(rbHycRjyAll));
  1127. tableDay.setRbHycWnndAll(formatList(rbHycWnndAll));
  1128. tableDay.setRbYycRjyAll(formatList(rbYycRjyAll));
  1129. tableDay.setRbQycRjyAll(formatList(rbQycRjyAll));
  1130. tableDay.setRbWncjbAll(formatList(rbWncjbAll));
  1131. tableDay.setRbWntjzsAll(formatList(rbWntjzsAll));
  1132. tableDay.setRbHfxwnndAll(formatList(rbHfxwnndAll));
  1133. tableDay.setHyHycxsyAll(formatList(hyHycxsyAll));
  1134. tableDay.setHyQyanAll(formatList(hyQyanAll));
  1135. tableDay.setHyQyckxsyAll(formatList(hyQyckxsyAll));
  1136. tableDay.setHyHyzlsyAll(formatList(hyHyzlsyAll));
  1137. tableDay.setTestDate(testDate);
  1138. bigTableDayList.add(tableDay);
  1139. }
  1140. }
  1141. if (!CollectionUtils.isEmpty(bigTableDayList)) {
  1142. SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
  1143. TXinyiBigTableDayMapper sqlSessionMapper = sqlSession.getMapper(TXinyiBigTableDayMapper.class);
  1144. bigTableDayList.forEach(sqlSessionMapper::insertTXinyiBigTableDay);
  1145. sqlSession.commit();
  1146. sqlSession.close();
  1147. }
  1148. }
  1149. long end = System.currentTimeMillis();
  1150. return "ok;耗时:" + (end - begin) / 1000 + "秒。";
  1151. }
  1152. /**
  1153. * 处理big_table_hour历史数据
  1154. * @return
  1155. */
  1156. @GetMapping("/handleBigTableHourHistoryData")
  1157. public String handleBigTableHourHistoryData () {
  1158. log.info("进入了 处理big_table_hour历史数据");
  1159. long begin = System.currentTimeMillis();
  1160. int size = 500;
  1161. int count = xinyiIndustryMapper.getCount();
  1162. int num = ( count / size ) + 1;
  1163. for (int i = 0; i < num; i++) {
  1164. List<TXinyiIndustry> tXinyiIndustries = xinyiIndustryMapper.selectTXinyiIndustryListByPage(i * size, size);
  1165. if ( !CollectionUtils.isEmpty(tXinyiIndustries) ) {
  1166. List<TXinyiBigTableHour> tXinyiBigTableHourList = new ArrayList();
  1167. for (int j = 0; j < tXinyiIndustries.size(); j++) {
  1168. TXinyiBigTableHour xinyiBigTableHour = new TXinyiBigTableHour();
  1169. TXinyiIndustry tXinyiIndustry = tXinyiIndustries.get(j);
  1170. String testHour = tXinyiIndustry.getTestHour();
  1171. String testDate = tXinyiIndustry.getTestDate();
  1172. // 处理工业库
  1173. handleIndustryData(xinyiBigTableHour, tXinyiIndustry);
  1174. // 处理计算表
  1175. List<TXinyiCalculate> tXinyiCalculates = xinyiCalculateMapper.selectTXinyiCalculateList(TXinyiCalculate.builder().testHour(testHour).build());
  1176. if ( !CollectionUtils.isEmpty(tXinyiCalculates) ) {
  1177. TXinyiCalculate tXinyiCalculate = tXinyiCalculates.get(0);
  1178. handleCalculateData(xinyiBigTableHour, tXinyiCalculate);
  1179. }
  1180. // 处理日报表
  1181. List<TXinyiDaily> tXinyiDailies = xinyiDailyMapper.selectTXinyiDailyList(TXinyiDaily.builder().testDate(testDate).build());
  1182. if ( !CollectionUtils.isEmpty(tXinyiDailies) ) {
  1183. TXinyiDaily tXinyiDaily = tXinyiDailies.get(0);
  1184. handleDailyData(xinyiBigTableHour, tXinyiDaily);
  1185. }
  1186. // 处理化验室
  1187. List<TXinyiRobot> tXinyiRobots = xinyiRobotMapper.selectTXinyiRobotList(TXinyiRobot.builder().testHour(testHour).build());
  1188. if (!CollectionUtils.isEmpty(tXinyiRobots)) {
  1189. TXinyiRobot tXinyiRobot = tXinyiRobots.get(0);
  1190. handleRobotData(xinyiBigTableHour, tXinyiRobot);
  1191. }
  1192. // TXinyiRobot tXinyiRobot = xinyiRobotMapper.selectTXinyiRobotByAvg(TXinyiRobot.builder().testHour(testHour).build());
  1193. // if ( !Objects.isNull(tXinyiRobot) ) {
  1194. // handleRobotData(xinyiBigTableHour, tXinyiRobot);
  1195. // }
  1196. tXinyiBigTableHourList.add(xinyiBigTableHour);
  1197. }
  1198. if (!CollectionUtils.isEmpty(tXinyiBigTableHourList)) {
  1199. SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false);
  1200. TXinyiBigTableHourMapper sqlSessionMapper = sqlSession.getMapper(TXinyiBigTableHourMapper.class);
  1201. tXinyiBigTableHourList.forEach(sqlSessionMapper::insertTXinyiBigTableHour);
  1202. sqlSession.commit();
  1203. sqlSession.close();
  1204. }
  1205. }
  1206. }
  1207. long end = System.currentTimeMillis();
  1208. return "ok;耗时:" + (end - begin) /1000 + "秒。";
  1209. }
  1210. // 处理工业库
  1211. private void handleIndustryData(TXinyiBigTableHour xinyiBigTableHour, TXinyiIndustry tXinyiIndustry) {
  1212. xinyiBigTableHour.setTestDate(tXinyiIndustry.getTestDate());
  1213. xinyiBigTableHour.setTestHour(tXinyiIndustry.getTestHour());
  1214. xinyiBigTableHour.setGyJsCod(tXinyiIndustry.getJsCod());
  1215. xinyiBigTableHour.setGyJsPh(tXinyiIndustry.getJsPh());
  1216. xinyiBigTableHour.setGyJsSs(tXinyiIndustry.getJsSs());
  1217. xinyiBigTableHour.setGyJsTp(tXinyiIndustry.getJsTp());
  1218. xinyiBigTableHour.setGyJsTn(tXinyiIndustry.getJsTn());
  1219. xinyiBigTableHour.setGyJsNh3(tXinyiIndustry.getJsNh3());
  1220. xinyiBigTableHour.setGyJsSwPh(tXinyiIndustry.getJsSwPh());
  1221. xinyiBigTableHour.setGyJsBfyw(tXinyiIndustry.getJsBfyw());
  1222. xinyiBigTableHour.setGyCsSlqc(tXinyiIndustry.getCsSlqc());
  1223. xinyiBigTableHour.setGyCsCod(tXinyiIndustry.getCsCod());
  1224. xinyiBigTableHour.setGyCsPh(tXinyiIndustry.getCsPh());
  1225. xinyiBigTableHour.setGyCsSs(tXinyiIndustry.getCsSs());
  1226. xinyiBigTableHour.setGyCsTn(tXinyiIndustry.getCsTn());
  1227. xinyiBigTableHour.setGyCsTp(tXinyiIndustry.getCsTp());
  1228. xinyiBigTableHour.setGyCsNh3(tXinyiIndustry.getCsNh3());
  1229. xinyiBigTableHour.setGyOneHyzdDo(tXinyiIndustry.getOneHyzdDo());
  1230. xinyiBigTableHour.setGyOneHymdDo(tXinyiIndustry.getOneHymdDo());
  1231. xinyiBigTableHour.setGyTwoHyzdDo(tXinyiIndustry.getTwoHyzdDo());
  1232. xinyiBigTableHour.setGyTwoHymdDo(tXinyiIndustry.getTwoHymdDo());
  1233. xinyiBigTableHour.setGyOneMlss(tXinyiIndustry.getOneMlss());
  1234. xinyiBigTableHour.setGyTwoMlss(tXinyiIndustry.getTwoMlss());
  1235. xinyiBigTableHour.setGyJsTds(tXinyiIndustry.getJsTds());
  1236. xinyiBigTableHour.setGyJsSlq(tXinyiIndustry.getJsSlq());
  1237. xinyiBigTableHour.setGyNHlbOneGp(tXinyiIndustry.getNHlbOneGp());
  1238. xinyiBigTableHour.setGyNHlbTwoGp(tXinyiIndustry.getNHlbTwoGp());
  1239. xinyiBigTableHour.setGyNHlbThreeGp(tXinyiIndustry.getNHlbThreeGp());
  1240. xinyiBigTableHour.setGyNHlbFourGp(tXinyiIndustry.getNHlbFourGp());
  1241. xinyiBigTableHour.setGyNhlBFiveGp(tXinyiIndustry.getNhlBFiveGp());
  1242. xinyiBigTableHour.setGyNHlbSixGp(tXinyiIndustry.getNHlbSixGp());
  1243. xinyiBigTableHour.setGyWHlbOneGp(tXinyiIndustry.getWHlbOneGp());
  1244. xinyiBigTableHour.setGyWHlbTwoGp(tXinyiIndustry.getWHlbTwoGp());
  1245. xinyiBigTableHour.setGyWHlbThreeGp(tXinyiIndustry.getWHlbThreeGp());
  1246. xinyiBigTableHour.setGyWHlbFourGp(tXinyiIndustry.getWHlbFourGp());
  1247. xinyiBigTableHour.setGyWHlbFiveGp(tXinyiIndustry.getWHlbFiveGp());
  1248. xinyiBigTableHour.setGyFjOne(tXinyiIndustry.getFjOne());
  1249. xinyiBigTableHour.setGyFjTwo(tXinyiIndustry.getFjTwo());
  1250. xinyiBigTableHour.setGyFjThree(tXinyiIndustry.getFjThree());
  1251. xinyiBigTableHour.setGyFjFour(tXinyiIndustry.getFjFour());
  1252. xinyiBigTableHour.setGyFjFive(tXinyiIndustry.getFjFive());
  1253. xinyiBigTableHour.setGyFjSix(tXinyiIndustry.getFjSix());
  1254. xinyiBigTableHour.setGyKqllOne(tXinyiIndustry.getKqllOne());
  1255. xinyiBigTableHour.setGyKqllTwo(tXinyiIndustry.getKqllTwo());
  1256. xinyiBigTableHour.setGyKqllThree(tXinyiIndustry.getKqllThree());
  1257. xinyiBigTableHour.setGyKqllFour(tXinyiIndustry.getKqllFour());
  1258. xinyiBigTableHour.setGyKqllFive(tXinyiIndustry.getKqllFive());
  1259. xinyiBigTableHour.setGyKqllSix(tXinyiIndustry.getKqllSix());
  1260. xinyiBigTableHour.setGySjtyjly(tXinyiIndustry.getSJTYJLY());
  1261. xinyiBigTableHour.setGyCljyssll(tXinyiIndustry.getCLJYSSLL());
  1262. xinyiBigTableHour.setGyHycRjyAll(tXinyiIndustry.getHycRjyAll());
  1263. xinyiBigTableHour.setGyHycRjyZdAll(tXinyiIndustry.getHycRjyZdAll());
  1264. xinyiBigTableHour.setGyHycWnndAll(tXinyiIndustry.getHycWnndAll());
  1265. xinyiBigTableHour.setGyClP04Ycz(tXinyiIndustry.getCLP04YCZ());
  1266. }
  1267. // 处理计算表
  1268. private void handleCalculateData(TXinyiBigTableHour xinyiBigTableHour, TXinyiCalculate xinyiCalculate) {
  1269. xinyiBigTableHour.setJsJsTdb(xinyiCalculate.getJsTdb());
  1270. xinyiBigTableHour.setJsJsTlb(xinyiCalculate.getJsTlb());
  1271. xinyiBigTableHour.setJsJsBodBCod(xinyiCalculate.getJsBodBCod());
  1272. xinyiBigTableHour.setJsYyqHrt(xinyiCalculate.getYyqHrt());
  1273. xinyiBigTableHour.setJsQyqHrt(xinyiCalculate.getQyqHrt());
  1274. xinyiBigTableHour.setJsHyqHrt(xinyiCalculate.getHyqHrt());
  1275. xinyiBigTableHour.setJsHfxwnndzb(xinyiCalculate.getHFXWNNDZB());
  1276. xinyiBigTableHour.setJsFM(xinyiCalculate.getFM());
  1277. xinyiBigTableHour.setJsGsls(xinyiCalculate.getGSLS());
  1278. xinyiBigTableHour.setJsGslsOne(xinyiCalculate.getGslsOne());
  1279. xinyiBigTableHour.setJsGslsTwo(xinyiCalculate.getGslsTwo());
  1280. xinyiBigTableHour.setJsXgsGsls(xinyiCalculate.getXgsGsls());
  1281. xinyiBigTableHour.setJsXlcscBmfh(xinyiCalculate.getXlcscBmfh());
  1282. xinyiBigTableHour.setJsXlcscHrt(xinyiCalculate.getXlcscHrt());
  1283. xinyiBigTableHour.setJsCccdcBmfh(xinyiCalculate.getCccdcBmfh());
  1284. xinyiBigTableHour.setJsCccdcHrt(xinyiCalculate.getCccdcHrt());
  1285. xinyiBigTableHour.setJsEccBmfh(xinyiCalculate.getEccBmfh());
  1286. xinyiBigTableHour.setJsEccHrt(xinyiCalculate.getEccHrt());
  1287. xinyiBigTableHour.setJsEccGtfh(xinyiCalculate.getEccGtfh());
  1288. xinyiBigTableHour.setJsClsnJcsj(xinyiCalculate.getClsnJcsj());
  1289. xinyiBigTableHour.setJsXgcdcQsqSsls(xinyiCalculate.getXgcdcQsqSsls());
  1290. xinyiBigTableHour.setJsWhlb(xinyiCalculate.getWHLB());
  1291. xinyiBigTableHour.setJsNhlb(xinyiCalculate.getNHLB());
  1292. xinyiBigTableHour.setJsWdscnl(xinyiCalculate.getWDSCNL());
  1293. xinyiBigTableHour.setJsQsb(xinyiCalculate.getQSB());
  1294. xinyiBigTableHour.setJsFcxsl(xinyiCalculate.getFCXSL());
  1295. xinyiBigTableHour.setJsFcxslbl(xinyiCalculate.getFCXSLBL());
  1296. xinyiBigTableHour.setJsWhlbRN(xinyiCalculate.getWhlRN());
  1297. }
  1298. // 处理日报
  1299. private void handleDailyData(TXinyiBigTableHour tXinyiBigTableHour, TXinyiDaily tXinyiDaily) {
  1300. tXinyiBigTableHour.setRbJsCod(tXinyiDaily.getJsCod());
  1301. tXinyiBigTableHour.setRbJsPh(tXinyiDaily.getJsPh());
  1302. tXinyiBigTableHour.setRbJsBod5(tXinyiDaily.getJsBod5());
  1303. tXinyiBigTableHour.setRbJsSs(tXinyiDaily.getJsSs());
  1304. tXinyiBigTableHour.setRbJsNh3(tXinyiDaily.getJsNh3());
  1305. tXinyiBigTableHour.setRbJsTn(tXinyiDaily.getJsTn());
  1306. tXinyiBigTableHour.setRbJsTp(tXinyiDaily.getJsTp());
  1307. tXinyiBigTableHour.setRbJsDcgj(tXinyiDaily.getJsDcgj());
  1308. tXinyiBigTableHour.setRbCsCod(tXinyiDaily.getCsCod());
  1309. tXinyiBigTableHour.setRbCsPh(tXinyiDaily.getCsPh());
  1310. tXinyiBigTableHour.setRbCsBod5(tXinyiDaily.getCsBod5());
  1311. tXinyiBigTableHour.setRbCsSs(tXinyiDaily.getCsSs());
  1312. tXinyiBigTableHour.setRbCsNh3(tXinyiDaily.getCsNh3());
  1313. tXinyiBigTableHour.setRbCsTn(tXinyiDaily.getCsTn());
  1314. tXinyiBigTableHour.setRbCsTp(tXinyiDaily.getCsTp());
  1315. tXinyiBigTableHour.setRbCsDcgj(tXinyiDaily.getCsDcgj());
  1316. tXinyiBigTableHour.setRbJsSw(tXinyiDaily.getJsSw());
  1317. tXinyiBigTableHour.setRbCsSw(tXinyiDaily.getCsSw());
  1318. tXinyiBigTableHour.setRbShcOnePh(tXinyiDaily.getShcOnePh());
  1319. tXinyiBigTableHour.setRbShcTwoPh(tXinyiDaily.getShcTwoPh());
  1320. tXinyiBigTableHour.setRbShcHyOneSv(tXinyiDaily.getShcHyOneSv());
  1321. tXinyiBigTableHour.setRbShcHyTwoSv(tXinyiDaily.getShcHyTwoSv());
  1322. tXinyiBigTableHour.setRbShcHyOneSvi(tXinyiDaily.getShcHyOneSvi());
  1323. tXinyiBigTableHour.setRbShcHyTwoSvi(tXinyiDaily.getShcHyTwoSvi());
  1324. tXinyiBigTableHour.setRbShcHyOneMlss(tXinyiDaily.getShcHyOneMlss());
  1325. tXinyiBigTableHour.setRbShcHyTwoMlss(tXinyiDaily.getShcHyTwoMlss());
  1326. tXinyiBigTableHour.setRbShcHyOneMlvss(tXinyiDaily.getShcHyOneMlvss());
  1327. tXinyiBigTableHour.setRbShcHyTwoMlvss(tXinyiDaily.getShcHyTwoMlvss());
  1328. tXinyiBigTableHour.setRbShcYyOneDo(tXinyiDaily.getShcYyOneDo());
  1329. tXinyiBigTableHour.setRbShcYyTwoDo(tXinyiDaily.getShcYyTwoDo());
  1330. tXinyiBigTableHour.setRbShcQyOneDo(tXinyiDaily.getShcQyOneDo());
  1331. tXinyiBigTableHour.setRbShcQyTwoDo(tXinyiDaily.getShcQyTwoDo());
  1332. tXinyiBigTableHour.setRbShcHyOneDo(tXinyiDaily.getShcHyOneDo());
  1333. tXinyiBigTableHour.setRbShcHyTwoDo(tXinyiDaily.getShcHyTwoDo());
  1334. tXinyiBigTableHour.setRbJsl(tXinyiDaily.getJSL());
  1335. tXinyiBigTableHour.setRbCsl(tXinyiDaily.getCSL());
  1336. tXinyiBigTableHour.setRbSdclcxsl(tXinyiDaily.getSDCLCXSL());
  1337. tXinyiBigTableHour.setRbQsb(tXinyiDaily.getQSB());
  1338. tXinyiBigTableHour.setRbFM(tXinyiDaily.getFM());
  1339. tXinyiBigTableHour.setRbYyHrt(tXinyiDaily.getYyHrt());
  1340. tXinyiBigTableHour.setRbHyHrt(tXinyiDaily.getHyHrt());
  1341. tXinyiBigTableHour.setRbQyHrt(tXinyiDaily.getQyHrt());
  1342. tXinyiBigTableHour.setRbNhlR(tXinyiDaily.getNhlR());
  1343. tXinyiBigTableHour.setRbWhlR(tXinyiDaily.getWhlR());
  1344. tXinyiBigTableHour.setRbSrt(tXinyiDaily.getSRT());
  1345. tXinyiBigTableHour.setRbCnl(tXinyiDaily.getCNL());
  1346. tXinyiBigTableHour.setRbTyqBod5Tn(tXinyiDaily.getTyqBod5Tn());
  1347. tXinyiBigTableHour.setRbTyhBod5Tn(tXinyiDaily.getTyhBod5Tn());
  1348. tXinyiBigTableHour.setRbHycRjyAll(tXinyiDaily.getHycRjyAll());
  1349. tXinyiBigTableHour.setRbHycWnndAll(tXinyiDaily.getHycWnndAll());
  1350. tXinyiBigTableHour.setRbYycRjyAll(tXinyiDaily.getYycRjyAll());
  1351. tXinyiBigTableHour.setRbQycRjyAll(tXinyiDaily.getQycRjyAll());
  1352. tXinyiBigTableHour.setRbWncjbAll(tXinyiDaily.getWncjbAll());
  1353. tXinyiBigTableHour.setRbWntjzsAll(tXinyiDaily.getWntjzsAll());
  1354. tXinyiBigTableHour.setRbHfxwnndAll(tXinyiDaily.getHfxwnndAll());
  1355. tXinyiBigTableHour.setRbChuniliang(tXinyiDaily.getCHUNILIANG());
  1356. tXinyiBigTableHour.setRbCnhsl(tXinyiDaily.getCNHSL());
  1357. tXinyiBigTableHour.setRbGwnl(tXinyiDaily.getGWNL());
  1358. tXinyiBigTableHour.setRbDf(tXinyiDaily.getDF());
  1359. tXinyiBigTableHour.setRbXnjf(tXinyiDaily.getXNJF());
  1360. tXinyiBigTableHour.setRbClf(tXinyiDaily.getCLF());
  1361. tXinyiBigTableHour.setRbTyf(tXinyiDaily.getTYF());
  1362. tXinyiBigTableHour.setRbXdjf(tXinyiDaily.getXDJF());
  1363. tXinyiBigTableHour.setRbQtyjf(tXinyiDaily.getQTYJF());
  1364. tXinyiBigTableHour.setRbCnf(tXinyiDaily.getCNF());
  1365. tXinyiBigTableHour.setRbZlsf(tXinyiDaily.getZLSF());
  1366. tXinyiBigTableHour.setRbZjcb(tXinyiDaily.getZJCB());
  1367. tXinyiBigTableHour.setRbDwcb(tXinyiDaily.getDWCB());
  1368. }
  1369. // 处理化验室
  1370. private void handleRobotData(TXinyiBigTableHour tXinyiBigTableHour, TXinyiRobot tXinyiRobot) {
  1371. tXinyiBigTableHour.setHyCodYb(tXinyiRobot.getCodYb());
  1372. tXinyiBigTableHour.setHyCodJqr(tXinyiRobot.getCodJqr());
  1373. tXinyiBigTableHour.setHyCodYz(tXinyiRobot.getCodYz());
  1374. tXinyiBigTableHour.setHyTpHl1Jqr(tXinyiRobot.getTpHl1Jqr());
  1375. tXinyiBigTableHour.setHyTpHl2Jqr(tXinyiRobot.getTpHl2Jqr());
  1376. tXinyiBigTableHour.setHyTpRccJqr(tXinyiRobot.getTpRccJqr());
  1377. tXinyiBigTableHour.setHyTp1Yz(tXinyiRobot.getTp1Yz());
  1378. tXinyiBigTableHour.setHyTp2Yz(tXinyiRobot.getTp2Yz());
  1379. tXinyiBigTableHour.setHyTpRccYz(tXinyiRobot.getTpRccYz());
  1380. tXinyiBigTableHour.setHyNh31Jqr(tXinyiRobot.getNh31Jqr());
  1381. tXinyiBigTableHour.setHyNh32Jqr(tXinyiRobot.getNh32Jqr());
  1382. tXinyiBigTableHour.setHyNh31Yz(tXinyiRobot.getNh31Yz());
  1383. tXinyiBigTableHour.setHyNo3Hlc1Yz(tXinyiRobot.getNo3Hlc1Yz());
  1384. tXinyiBigTableHour.setHyNh32Yz(tXinyiRobot.getNh32Yz());
  1385. tXinyiBigTableHour.setHyNo3Hlc2Yz(tXinyiRobot.getNo3Hlc2Yz());
  1386. tXinyiBigTableHour.setHyNo3Hlj1Jqr(tXinyiRobot.getNo3Hlj1Jqr());
  1387. tXinyiBigTableHour.setHyNo3Hlj2Jqr(tXinyiRobot.getNo3Hlj2Jqr());
  1388. tXinyiBigTableHour.setHyTyll(tXinyiRobot.getTYLL());
  1389. tXinyiBigTableHour.setHyNo3Qyc1Jqr(tXinyiRobot.getNo3Qyc1Jqr());
  1390. tXinyiBigTableHour.setHyNo3Qyc2Jqr(tXinyiRobot.getNo3Qyc2Jqr());
  1391. tXinyiBigTableHour.setHyNo3Qyc1Yz(tXinyiRobot.getNo3Qyc1Yz());
  1392. tXinyiBigTableHour.setHyNo3Qyc2Yz(tXinyiRobot.getNo3Qyc2Yz());
  1393. tXinyiBigTableHour.setHyJsll(tXinyiRobot.getJSLL());
  1394. tXinyiBigTableHour.setHyHycxsyAll(tXinyiRobot.getHycxsyAll());
  1395. tXinyiBigTableHour.setHyQyanAll(tXinyiRobot.getQyanAll());
  1396. tXinyiBigTableHour.setHyQyckxsyAll(tXinyiRobot.getQyckxsyAll());
  1397. tXinyiBigTableHour.setHyHyzlsyAll(tXinyiRobot.getHyzlsyAll());
  1398. }
  1399. private void handlePredictorWarning(String[] split, String hour, String task, List<TXinyiIndustry> tXinyiIndustries6, List<TXinyiRobot> tXinyiRobots6, String date) {
  1400. String[] hours = hour.split(",");
  1401. //2024年6月23日18:28:55 因为存在跨天问题 所以日期也是逗号拼接的
  1402. String[] dates = date.split(",");
  1403. //2024年6月18日13:41:10 统一格式,否则查询不到结果
  1404. //2024年6月18日10:36:49 增加预测记录,预测准确度计算等
  1405. TXinyiForecastComparison tXinyiForecastComparison = new TXinyiForecastComparison();
  1406. //2024年7月11日17:04:11 TP改为zlsy
  1407. tXinyiForecastComparison.setCategory(BusinessEnum.BigModelForecastEnum.TP.getCode().equalsIgnoreCase(task) ? BusinessEnum.BigModelForecastEnum.ZLSY.getCode() : task);
  1408. tXinyiForecastComparison.setForecastTimeOne(dates[0].replaceAll("-", "/") + " " + hours[0]);
  1409. tXinyiForecastComparison.setForecastTimeTwo(dates[1].replaceAll("-", "/") + " " + hours[1]);
  1410. tXinyiForecastComparison.setForecastTimeThree(dates[2].replaceAll("-", "/") + " " + hours[2]);
  1411. tXinyiForecastComparison.setHsForecastOne(new BigDecimal(split[0]));
  1412. tXinyiForecastComparison.setHsForecastTwo(new BigDecimal(split[1]));
  1413. tXinyiForecastComparison.setHsForecastThree(new BigDecimal(split[2]));
  1414. //2024年6月20日14:28:31 增加字段,方便查询
  1415. tXinyiForecastComparison.setRemark(DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYYMMDDHH_TS));
  1416. //防止工业库挂掉以后持续预测同一数据
  1417. //2024年6月20日14:59:23 因为预测bug(以工业库为准,假如工业库挂了,获取的全是挂了时间段后的三小时) 判断是否生成过了否则不生成
  1418. TXinyiForecastComparison tXinyiForecastComparisonReq = new TXinyiForecastComparison();
  1419. //2024年08月20日16:24:56 因为remark存放的是当前时间,也就是每个小时的,所以都是不一样的,修复此bug
  1420. // tXinyiForecastComparisonReq.setRemark(tXinyiForecastComparison.getRemark());
  1421. tXinyiForecastComparisonReq.setCategory(tXinyiForecastComparison.getCategory());
  1422. //2024年7月18日15:04:37 如果工业库挂掉以后,不管什么时刻,调用预测返回的未来三小时时间都是一样的,再增加一个查询条件
  1423. tXinyiForecastComparisonReq.setForecastTimeOne(tXinyiForecastComparison.getForecastTimeOne());//一个时刻就可以了 没必要再比较第二和第三时刻了。
  1424. List<TXinyiForecastComparison> tXinyiForecastComparisons = this.xinyiForecastComparisonService.selectTXinyiForecastComparisonList(tXinyiForecastComparisonReq);
  1425. if(!CollectionUtils.isEmpty(tXinyiForecastComparisons)){
  1426. log.error("预测已经进行过了,无需重复运行~~~~~~~~~~~@@@@@@@,要保存的预测数据为{}", JSON.toJSONString(tXinyiForecastComparison));
  1427. return;
  1428. }
  1429. //获取配置表
  1430. List<TXinyiNormConfig> tXinyiNormConfigs = this.xinyiNormConfigMapper.selectTXinyiNormConfigList(null);
  1431. if(CollectionUtils.isEmpty(tXinyiNormConfigs)) {
  1432. log.error( "未查询到配置信息");
  1433. return;
  1434. }
  1435. TXinyiNormConfig normConfig = tXinyiNormConfigs.get(0);
  1436. //获取最新的工业库的数据
  1437. // TXinyiIndustry tXinyiIndustry = this.xinyiIndustryMapper.selectTXinyiIndustryNewest();
  1438. //2024年7月18日10:29:44 因为获取了最新的六条数据,所以无需再查询最新的数据了
  1439. TXinyiIndustry tXinyiIndustry = tXinyiIndustries6.get(0);
  1440. TXinyiRobot tXinyiRobot = tXinyiRobots6.get(0);
  1441. List<ChartBasic> chartsDataList = new ArrayList<>(9);
  1442. if(BusinessEnum.BigModelForecastEnum.COD.getCode().equals(task)){
  1443. //同时调用跃渊的预测接口 保存记录值
  1444. try {
  1445. String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=2&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
  1446. if(!StringUtils.isBlank(result)){
  1447. JSONArray array = JSON.parseArray(result);
  1448. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1449. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1450. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1451. }
  1452. } catch (Exception e) {
  1453. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1454. }
  1455. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1456. BigDecimal cscodBzz = normConfig.getCscodBzz();
  1457. BigDecimal cscodGkz = normConfig.getCscodGkz();
  1458. //处理展示数据
  1459. for (int i = 0; i < tXinyiIndustries6.size(); i++) {
  1460. TXinyiIndustry tXinyiIndustryTemp = tXinyiIndustries6.get(5 - i);
  1461. ChartBasic chartBasic = new ChartBasic();
  1462. chartBasic.setTime(tXinyiIndustryTemp.getTestHour().substring(11));
  1463. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiIndustryTemp.getCsCod(), INT_2));
  1464. chartsDataList.add(chartBasic);
  1465. }
  1466. for (int i = 0; i < split.length; i++) {
  1467. String val = split[i];
  1468. ChartBasic chartBasic = new ChartBasic();
  1469. chartBasic.setTime(hours[i]);
  1470. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1471. chartsDataList.add(chartBasic);
  1472. }
  1473. ryTask.handleXinYiWarningsYC(cscodBzz, split, cscodGkz, BusinessEnum.WarningCategoryEnum.CS_COD_YC.getCode(), hour, normConfig, tXinyiIndustry.getCsCod(), tXinyiIndustry, chartsDataList, date);
  1474. }else if(BusinessEnum.BigModelForecastEnum.SS.getCode().equals(task)){
  1475. //同时调用跃渊的预测接口 保存记录值
  1476. try {
  1477. String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=5&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
  1478. if(!StringUtils.isBlank(result)){
  1479. JSONArray array = JSON.parseArray(result);
  1480. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1481. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1482. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1483. }
  1484. } catch (Exception e) {
  1485. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1486. }
  1487. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1488. BigDecimal csSSBzz = normConfig.getCsssBzz();
  1489. BigDecimal csssGkz = normConfig.getCsssGkz();
  1490. //处理展示数据
  1491. for (int i = 0; i < tXinyiIndustries6.size(); i++) {
  1492. TXinyiIndustry tXinyiIndustryTemp = tXinyiIndustries6.get(5 - i);
  1493. ChartBasic chartBasic = new ChartBasic();
  1494. chartBasic.setTime(tXinyiIndustryTemp.getTestHour().substring(11));
  1495. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiIndustryTemp.getCsSs(), INT_2));
  1496. chartsDataList.add(chartBasic);
  1497. }
  1498. for (int i = 0; i < split.length; i++) {
  1499. String val = split[i];
  1500. ChartBasic chartBasic = new ChartBasic();
  1501. chartBasic.setTime(hours[i]);
  1502. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1503. chartsDataList.add(chartBasic);
  1504. }
  1505. ryTask.handleXinYiWarningsYC(csSSBzz, split, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS_YC.getCode(), hour, normConfig, tXinyiIndustry.getCsSs(), tXinyiIndustry, chartsDataList, date);
  1506. }/*else if(BusinessEnum.BigModelForecastEnum.TN.getCode().equals(task)){
  1507. //同时调用跃渊的预测接口 保存记录值
  1508. try {
  1509. String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=3&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10);
  1510. if(!StringUtils.isBlank(result)){
  1511. JSONArray array = JSON.parseArray(result);
  1512. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1513. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1514. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1515. }
  1516. } catch (Exception e) {
  1517. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1518. }
  1519. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1520. BigDecimal cszzBzz = normConfig.getCszzBzz();
  1521. BigDecimal cszzGkz = normConfig.getCszzGkz();
  1522. //处理展示数据
  1523. for (int i = 0; i < tXinyiIndustries6.size(); i++) {
  1524. TXinyiIndustry tXinyiIndustryTemp = tXinyiIndustries6.get(5 - i);
  1525. ChartBasic chartBasic = new ChartBasic();
  1526. chartBasic.setTime(tXinyiIndustryTemp.getTestHour().substring(11));
  1527. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiIndustryTemp.getCsTn(), INT_2));
  1528. chartsDataList.add(chartBasic);
  1529. }
  1530. for (int i = 0; i < split.length; i++) {
  1531. String val = split[i];
  1532. ChartBasic chartBasic = new ChartBasic();
  1533. chartBasic.setTime(hours[i]);
  1534. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1535. chartsDataList.add(chartBasic);
  1536. }
  1537. handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_TN_YC.getCode(), hour, normConfig,tXinyiIndustry.getCsCod(), tXinyiIndustry, chartsDataList, date);
  1538. }*/else if(BusinessEnum.BigModelForecastEnum.TP.getCode().equals(task)){
  1539. //同时调用跃渊的预测接口 保存记录值
  1540. try {
  1541. String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=1&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
  1542. if(!StringUtils.isBlank(result)){
  1543. JSONArray array = JSON.parseArray(result);
  1544. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1545. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1546. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1547. }
  1548. } catch (Exception e) {
  1549. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1550. }
  1551. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1552. BigDecimal cszlBzz = normConfig.getCszlBzz();
  1553. BigDecimal cszlGkz = normConfig.getCszlGkz();
  1554. //处理展示数据
  1555. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1556. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1557. ChartBasic chartBasic = new ChartBasic();
  1558. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1559. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getTpRccJqr(), INT_2));
  1560. chartsDataList.add(chartBasic);
  1561. }
  1562. for (int i = 0; i < split.length; i++) {
  1563. String val = split[i];
  1564. ChartBasic chartBasic = new ChartBasic();
  1565. chartBasic.setTime(hours[i]);
  1566. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1567. chartsDataList.add(chartBasic);
  1568. }
  1569. ryTask.handleXinYiWarningsYC(cszlBzz, split, cszlGkz, CS_TP_YC.getCode(), hour, normConfig, tXinyiRobot.getTpRccJqr(), tXinyiIndustry, chartsDataList, date);
  1570. }else if(BusinessEnum.BigModelForecastEnum.NH3.getCode().equals(task)){
  1571. //同时调用跃渊的预测接口 保存记录值
  1572. try {
  1573. String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=4&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
  1574. if(!StringUtils.isBlank(result)){
  1575. JSONArray array = JSON.parseArray(result);
  1576. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1577. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1578. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1579. }
  1580. } catch (Exception e) {
  1581. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1582. }
  1583. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1584. BigDecimal csadBzz = normConfig.getCsadBzz();
  1585. BigDecimal csadGkz = normConfig.getCsadGkz();
  1586. //处理展示数据
  1587. for (int i = 0; i < tXinyiIndustries6.size(); i++) {
  1588. TXinyiIndustry tXinyiIndustryTemp = tXinyiIndustries6.get(5 - i);
  1589. ChartBasic chartBasic = new ChartBasic();
  1590. chartBasic.setTime(tXinyiIndustryTemp.getTestHour().substring(11));
  1591. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiIndustryTemp.getCsNh3(), INT_2));
  1592. chartsDataList.add(chartBasic);
  1593. }
  1594. for (int i = 0; i < split.length; i++) {
  1595. String val = split[i];
  1596. ChartBasic chartBasic = new ChartBasic();
  1597. chartBasic.setTime(hours[i]);
  1598. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1599. chartsDataList.add(chartBasic);
  1600. }
  1601. ryTask.handleXinYiWarningsYC(csadBzz, split, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD_YC.getCode(), hour, normConfig, tXinyiIndustry.getCsNh3(), tXinyiIndustry, chartsDataList, date);
  1602. }else if(BusinessEnum.BigModelForecastEnum.XSY1.getCode().equals(task)){
  1603. //2024年6月21日14:57:02 红杉的出水总氮预测改成 不用工业库的,用化验科的两个xsy 相关指标
  1604. //同时调用跃渊的预测接口 保存记录值
  1605. try {
  1606. String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=6&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
  1607. if(!StringUtils.isBlank(result)){
  1608. JSONArray array = JSON.parseArray(result);
  1609. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1610. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1611. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1612. }
  1613. } catch (Exception e) {
  1614. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1615. }
  1616. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1617. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1618. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1619. //2024年7月11日17:19:47 1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
  1620. BigDecimal cszzBzz = normConfig.getCszzBzz();
  1621. BigDecimal cszzGkz = normConfig.getCszzGkz();
  1622. //处理展示数据
  1623. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1624. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1625. ChartBasic chartBasic = new ChartBasic();
  1626. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1627. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNo3Hlj1Jqr(), INT_2));
  1628. chartsDataList.add(chartBasic);
  1629. }
  1630. for (int i = 0; i < split.length; i++) {
  1631. String val = split[i];
  1632. ChartBasic chartBasic = new ChartBasic();
  1633. chartBasic.setTime(hours[i]);
  1634. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1635. chartsDataList.add(chartBasic);
  1636. }
  1637. ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_XSY_1_YC.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj1Jqr(), tXinyiIndustry, chartsDataList, date);
  1638. }else if(BusinessEnum.BigModelForecastEnum.XSY2.getCode().equals(task)){
  1639. //同时调用跃渊的预测接口 保存记录值
  1640. try {
  1641. String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=7&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
  1642. if(!StringUtils.isBlank(result)){
  1643. JSONArray array = JSON.parseArray(result);
  1644. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1645. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1646. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1647. }
  1648. } catch (Exception e) {
  1649. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1650. }
  1651. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1652. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1653. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1654. //2024年7月11日17:19:47 1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
  1655. BigDecimal cszzBzz = normConfig.getCszzBzz();
  1656. BigDecimal cszzGkz = normConfig.getCszzGkz();
  1657. //处理展示数据
  1658. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1659. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1660. ChartBasic chartBasic = new ChartBasic();
  1661. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1662. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNo3Hlj2Jqr(), INT_2));
  1663. chartsDataList.add(chartBasic);
  1664. }
  1665. for (int i = 0; i < split.length; i++) {
  1666. String val = split[i];
  1667. ChartBasic chartBasic = new ChartBasic();
  1668. chartBasic.setTime(hours[i]);
  1669. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1670. chartsDataList.add(chartBasic);
  1671. }
  1672. ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_XSY_2_YC.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
  1673. }else if(BusinessEnum.BigModelForecastEnum.QYXSY1.getCode().equals(task)){
  1674. //同时调用跃渊的预测接口 保存记录值
  1675. /*try {
  1676. String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=7&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
  1677. if(!StringUtils.isBlank(result)){
  1678. JSONArray array = JSON.parseArray(result);
  1679. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1680. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1681. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1682. }
  1683. } catch (Exception e) {
  1684. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1685. }*/
  1686. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1687. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1688. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1689. //2024年7月11日17:19:47 1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
  1690. BigDecimal cszzBzz = normConfig.getCszzBzz();
  1691. BigDecimal cszzGkz = normConfig.getCszzGkz();
  1692. //处理展示数据
  1693. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1694. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1695. ChartBasic chartBasic = new ChartBasic();
  1696. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1697. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNo3Qyc1Jqr(), INT_2));
  1698. chartsDataList.add(chartBasic);
  1699. }
  1700. for (int i = 0; i < split.length; i++) {
  1701. String val = split[i];
  1702. ChartBasic chartBasic = new ChartBasic();
  1703. chartBasic.setTime(hours[i]);
  1704. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1705. chartsDataList.add(chartBasic);
  1706. }
  1707. // ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.QYCXSY_1.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
  1708. }else if(BusinessEnum.BigModelForecastEnum.QYXSY2.getCode().equals(task)){
  1709. //同时调用跃渊的预测接口 保存记录值
  1710. /*try {
  1711. String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=7&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
  1712. if(!StringUtils.isBlank(result)){
  1713. JSONArray array = JSON.parseArray(result);
  1714. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1715. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1716. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1717. }
  1718. } catch (Exception e) {
  1719. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1720. }*/
  1721. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1722. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1723. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1724. //2024年7月11日17:19:47 1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
  1725. BigDecimal cszzBzz = normConfig.getCszzBzz();
  1726. BigDecimal cszzGkz = normConfig.getCszzGkz();
  1727. //处理展示数据
  1728. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1729. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1730. ChartBasic chartBasic = new ChartBasic();
  1731. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1732. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNo3Qyc2Jqr(), INT_2));
  1733. chartsDataList.add(chartBasic);
  1734. }
  1735. for (int i = 0; i < split.length; i++) {
  1736. String val = split[i];
  1737. ChartBasic chartBasic = new ChartBasic();
  1738. chartBasic.setTime(hours[i]);
  1739. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1740. chartsDataList.add(chartBasic);
  1741. }
  1742. // ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.QYCXSY_2.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
  1743. }else if(BusinessEnum.BigModelForecastEnum.QYNH31.getCode().equals(task)){
  1744. //同时调用跃渊的预测接口 保存记录值
  1745. /*try {
  1746. String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=7&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
  1747. if(!StringUtils.isBlank(result)){
  1748. JSONArray array = JSON.parseArray(result);
  1749. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1750. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1751. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1752. }
  1753. } catch (Exception e) {
  1754. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1755. }*/
  1756. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1757. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1758. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1759. //2024年09月08日11:21:25 采用出水氨氮的标准值和管控值
  1760. BigDecimal csadBzz = normConfig.getCsadBzz();
  1761. BigDecimal csadGkz = normConfig.getCsadGkz();
  1762. //处理展示数据
  1763. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1764. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1765. ChartBasic chartBasic = new ChartBasic();
  1766. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1767. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNh31Jqr(), INT_2));
  1768. chartsDataList.add(chartBasic);
  1769. }
  1770. for (int i = 0; i < split.length; i++) {
  1771. String val = split[i];
  1772. ChartBasic chartBasic = new ChartBasic();
  1773. chartBasic.setTime(hours[i]);
  1774. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1775. chartsDataList.add(chartBasic);
  1776. }
  1777. // ryTask.handleXinYiWarningsYC(csadBzz, split, csadGkz, BusinessEnum.WarningCategoryEnum.QYAD_1.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
  1778. }else if(BusinessEnum.BigModelForecastEnum.QYNH32.getCode().equals(task)){
  1779. //同时调用跃渊的预测接口 保存记录值
  1780. /*try {
  1781. String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=7&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
  1782. if(!StringUtils.isBlank(result)){
  1783. JSONArray array = JSON.parseArray(result);
  1784. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1785. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1786. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1787. }
  1788. } catch (Exception e) {
  1789. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1790. }*/
  1791. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1792. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1793. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1794. //2024年09月08日11:21:25 采用出水氨氮的标准值和管控值
  1795. BigDecimal csadBzz = normConfig.getCsadBzz();
  1796. BigDecimal csadGkz = normConfig.getCsadGkz();
  1797. //处理展示数据
  1798. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1799. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1800. ChartBasic chartBasic = new ChartBasic();
  1801. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1802. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNh32Jqr(), INT_2));
  1803. chartsDataList.add(chartBasic);
  1804. }
  1805. for (int i = 0; i < split.length; i++) {
  1806. String val = split[i];
  1807. ChartBasic chartBasic = new ChartBasic();
  1808. chartBasic.setTime(hours[i]);
  1809. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1810. chartsDataList.add(chartBasic);
  1811. }
  1812. // ryTask.handleXinYiWarningsYC(csadBzz, split, csadGkz, BusinessEnum.WarningCategoryEnum.QYAD_2.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
  1813. }else {
  1814. log.error("暂未支持的类型{}", task);
  1815. }
  1816. //插入到数据库
  1817. //2024年6月21日14:18:55 如果红杉预测和跃渊预测都有数据再保存
  1818. //2024年7月8日15:15:46 逻辑调整:只要红杉的数据不为空就保存
  1819. if(Objects.isNull(tXinyiForecastComparison.getHsForecastOne()) || Objects.isNull(tXinyiForecastComparison.getHsForecastTwo()) ||Objects.isNull(tXinyiForecastComparison.getHsForecastThree())){
  1820. // || Objects.isNull(tXinyiForecastComparison.getYyForecastOne()) || Objects.isNull(tXinyiForecastComparison.getYyForecastTwo()) || Objects.isNull(tXinyiForecastComparison.getYyForecastThree())){
  1821. log.error("保存预测对比数据时,有存在不满足条件的数据,不再保存数据,数据为{}", JSON.toJSONString(tXinyiForecastComparison));
  1822. }else
  1823. xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1824. }
  1825. }