HandleDataController.java 111 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988
  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() {
  1072. log.info("进入了 处理big_table_day历史数据");
  1073. long begin = System.currentTimeMillis();
  1074. List<TXinyiBigTableHour> tXinyiBigTableHours = tXinyiBigTableHourMapper.selectTXinyiBigTableHourByTestDate();
  1075. if ( !CollectionUtils.isEmpty(tXinyiBigTableHours) ) {
  1076. List<TXinyiBigTableDay> bigTableDayList = new ArrayList<>();
  1077. for (int i = 0; i < tXinyiBigTableHours.size(); i++) {
  1078. TXinyiBigTableHour tXinyiBigTableHour = tXinyiBigTableHours.get(i);
  1079. String testDate = tXinyiBigTableHour.getTestDate();
  1080. TXinyiBigTableDay tableDay = tXinyiBigTableDayMapper.selectTXinyiBigTableHourAvg(testDate);
  1081. if (!Objects.isNull(tableDay)) {
  1082. ArrayList<BigDecimal> gyHycRjyAll = new ArrayList<>();
  1083. ArrayList<BigDecimal> gyHycRjyZdAll = new ArrayList<>();
  1084. ArrayList<BigDecimal> gyHycWnndAll = new ArrayList<>();
  1085. ArrayList<BigDecimal> rbHycRjyAll = new ArrayList<>();
  1086. ArrayList<BigDecimal> rbHycWnndAll = new ArrayList<>();
  1087. ArrayList<BigDecimal> rbYycRjyAll = new ArrayList<>();
  1088. ArrayList<BigDecimal> rbQycRjyAll = new ArrayList<>();
  1089. ArrayList<BigDecimal> rbWncjbAll = new ArrayList<>();
  1090. ArrayList<BigDecimal> rbWntjzsAll = new ArrayList<>();
  1091. ArrayList<BigDecimal> rbHfxwnndAll = new ArrayList<>();
  1092. ArrayList<BigDecimal> hyHycxsyAll = new ArrayList<>();
  1093. ArrayList<BigDecimal> hyQyanAll = new ArrayList<>();
  1094. ArrayList<BigDecimal> hyQyckxsyAll = new ArrayList<>();
  1095. ArrayList<BigDecimal> hyHyzlsyAll = new ArrayList<>();
  1096. gyHycRjyAll.add(tableDay.getGyOneHymdDo());
  1097. gyHycRjyAll.add(tableDay.getGyTwoHymdDo());
  1098. gyHycRjyZdAll.add(tableDay.getGyOneHyzdDo());
  1099. gyHycRjyZdAll.add(tableDay.getGyTwoHyzdDo());
  1100. gyHycWnndAll.add(tableDay.getGyOneMlss());
  1101. gyHycWnndAll.add(tableDay.getGyTwoMlss());
  1102. rbHycRjyAll.add(tableDay.getRbShcHyOneDo());
  1103. rbHycRjyAll.add(tableDay.getRbShcHyTwoDo());
  1104. rbHycWnndAll.add(tableDay.getRbShcHyOneMlss());
  1105. rbHycWnndAll.add(tableDay.getRbShcHyTwoMlss());
  1106. rbYycRjyAll.add(tableDay.getRbShcYyOneDo());
  1107. rbYycRjyAll.add(tableDay.getRbShcYyTwoDo());
  1108. rbQycRjyAll.add(tableDay.getRbShcQyOneDo());
  1109. rbQycRjyAll.add(tableDay.getRbShcQyTwoDo());
  1110. rbWncjbAll.add(tableDay.getRbShcHyOneSv());
  1111. rbWncjbAll.add(tableDay.getRbShcHyTwoSv());
  1112. rbWntjzsAll.add(tableDay.getRbShcHyOneSvi());
  1113. rbWntjzsAll.add(tableDay.getRbShcHyTwoSvi());
  1114. rbHfxwnndAll.add(tableDay.getRbShcHyOneMlvss());
  1115. rbHfxwnndAll.add(tableDay.getRbShcHyTwoMlvss());
  1116. hyHycxsyAll.add(tableDay.getHyNo3Hlj1Jqr());
  1117. hyHycxsyAll.add(tableDay.getHyNo3Hlj2Jqr());
  1118. hyQyanAll.add(tableDay.getHyNh31Jqr());
  1119. hyQyanAll.add(tableDay.getHyNh32Jqr());
  1120. hyQyckxsyAll.add(tableDay.getHyNo3Qyc1Jqr());
  1121. hyQyckxsyAll.add(tableDay.getHyNo3Qyc2Jqr());
  1122. hyHyzlsyAll.add(tableDay.getHyTpHl1Jqr());
  1123. hyHyzlsyAll.add(tableDay.getHyTpHl2Jqr());
  1124. tableDay.setGyHycRjyAll(formatList(gyHycRjyAll));
  1125. tableDay.setGyHycRjyZdAll(formatList(gyHycRjyZdAll));
  1126. tableDay.setGyHycWnndAll(formatList(gyHycWnndAll));
  1127. tableDay.setRbHycRjyAll(formatList(rbHycRjyAll));
  1128. tableDay.setRbHycWnndAll(formatList(rbHycWnndAll));
  1129. tableDay.setRbYycRjyAll(formatList(rbYycRjyAll));
  1130. tableDay.setRbQycRjyAll(formatList(rbQycRjyAll));
  1131. tableDay.setRbWncjbAll(formatList(rbWncjbAll));
  1132. tableDay.setRbWntjzsAll(formatList(rbWntjzsAll));
  1133. tableDay.setRbHfxwnndAll(formatList(rbHfxwnndAll));
  1134. tableDay.setHyHycxsyAll(formatList(hyHycxsyAll));
  1135. tableDay.setHyQyanAll(formatList(hyQyanAll));
  1136. tableDay.setHyQyckxsyAll(formatList(hyQyckxsyAll));
  1137. tableDay.setHyHyzlsyAll(formatList(hyHyzlsyAll));
  1138. tableDay.setTestDate(testDate);
  1139. bigTableDayList.add(tableDay);
  1140. }
  1141. }
  1142. if (!CollectionUtils.isEmpty(bigTableDayList)) {
  1143. SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
  1144. TXinyiBigTableDayMapper sqlSessionMapper = sqlSession.getMapper(TXinyiBigTableDayMapper.class);
  1145. bigTableDayList.forEach(sqlSessionMapper::insertTXinyiBigTableDay);
  1146. sqlSession.commit();
  1147. sqlSession.close();
  1148. }
  1149. }
  1150. long end = System.currentTimeMillis();
  1151. return "ok;耗时:" + (end - begin) / 1000 + "秒。";
  1152. }
  1153. /**
  1154. * 处理big_table_hour历史数据
  1155. * @return
  1156. */
  1157. @GetMapping("/handleBigTableHourHistoryData")
  1158. public String handleBigTableHourHistoryData () {
  1159. log.info("进入了 处理big_table_hour历史数据");
  1160. long begin = System.currentTimeMillis();
  1161. int size = 500;
  1162. int count = xinyiIndustryMapper.getCount();
  1163. int num = ( count / size ) + 1;
  1164. for (int i = 0; i < num; i++) {
  1165. List<TXinyiIndustry> tXinyiIndustries = xinyiIndustryMapper.selectTXinyiIndustryListByPage(i * size, size);
  1166. if ( !CollectionUtils.isEmpty(tXinyiIndustries) ) {
  1167. List<TXinyiBigTableHour> tXinyiBigTableHourList = new ArrayList();
  1168. for (int j = 0; j < tXinyiIndustries.size(); j++) {
  1169. TXinyiBigTableHour xinyiBigTableHour = new TXinyiBigTableHour();
  1170. TXinyiIndustry tXinyiIndustry = tXinyiIndustries.get(j);
  1171. String testHour = tXinyiIndustry.getTestHour();
  1172. String testDate = tXinyiIndustry.getTestDate();
  1173. // 处理工业库
  1174. handleIndustryData(xinyiBigTableHour, tXinyiIndustry);
  1175. // 处理计算表
  1176. List<TXinyiCalculate> tXinyiCalculates = xinyiCalculateMapper.selectTXinyiCalculateList(TXinyiCalculate.builder().testHour(testHour).build());
  1177. if ( !CollectionUtils.isEmpty(tXinyiCalculates) ) {
  1178. TXinyiCalculate tXinyiCalculate = tXinyiCalculates.get(0);
  1179. handleCalculateData(xinyiBigTableHour, tXinyiCalculate);
  1180. }
  1181. // 处理日报表
  1182. List<TXinyiDaily> tXinyiDailies = xinyiDailyMapper.selectTXinyiDailyList(TXinyiDaily.builder().testDate(testDate).build());
  1183. if ( !CollectionUtils.isEmpty(tXinyiDailies) ) {
  1184. TXinyiDaily tXinyiDaily = tXinyiDailies.get(0);
  1185. handleDailyData(xinyiBigTableHour, tXinyiDaily);
  1186. }
  1187. // 处理化验室
  1188. List<TXinyiRobot> tXinyiRobots = xinyiRobotMapper.selectTXinyiRobotList(TXinyiRobot.builder().testHour(testHour).build());
  1189. if (!CollectionUtils.isEmpty(tXinyiRobots)) {
  1190. TXinyiRobot tXinyiRobot = tXinyiRobots.get(0);
  1191. handleRobotData(xinyiBigTableHour, tXinyiRobot);
  1192. }
  1193. // TXinyiRobot tXinyiRobot = xinyiRobotMapper.selectTXinyiRobotByAvg(TXinyiRobot.builder().testHour(testHour).build());
  1194. // if ( !Objects.isNull(tXinyiRobot) ) {
  1195. // handleRobotData(xinyiBigTableHour, tXinyiRobot);
  1196. // }
  1197. tXinyiBigTableHourList.add(xinyiBigTableHour);
  1198. }
  1199. if (!CollectionUtils.isEmpty(tXinyiBigTableHourList)) {
  1200. SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false);
  1201. TXinyiBigTableHourMapper sqlSessionMapper = sqlSession.getMapper(TXinyiBigTableHourMapper.class);
  1202. tXinyiBigTableHourList.stream().forEach(item -> sqlSessionMapper.insertTXinyiBigTableHour(item));
  1203. sqlSession.commit();
  1204. sqlSession.close();
  1205. }
  1206. }
  1207. }
  1208. long end = System.currentTimeMillis();
  1209. return "ok;耗时:" + (end - begin) /1000 + "秒。";
  1210. }
  1211. // 处理工业库
  1212. private void handleIndustryData(TXinyiBigTableHour xinyiBigTableHour, TXinyiIndustry tXinyiIndustry) {
  1213. xinyiBigTableHour.setTestDate(tXinyiIndustry.getTestDate());
  1214. xinyiBigTableHour.setTestHour(tXinyiIndustry.getTestHour());
  1215. xinyiBigTableHour.setGyJsCod(tXinyiIndustry.getJsCod());
  1216. xinyiBigTableHour.setGyJsPh(tXinyiIndustry.getJsPh());
  1217. xinyiBigTableHour.setGyJsSs(tXinyiIndustry.getJsSs());
  1218. xinyiBigTableHour.setGyJsTp(tXinyiIndustry.getJsTp());
  1219. xinyiBigTableHour.setGyJsTn(tXinyiIndustry.getJsTn());
  1220. xinyiBigTableHour.setGyJsNh3(tXinyiIndustry.getJsNh3());
  1221. xinyiBigTableHour.setGyJsSwPh(tXinyiIndustry.getJsSwPh());
  1222. xinyiBigTableHour.setGyJsBfyw(tXinyiIndustry.getJsBfyw());
  1223. xinyiBigTableHour.setGyCsSlqc(tXinyiIndustry.getCsSlqc());
  1224. xinyiBigTableHour.setGyCsCod(tXinyiIndustry.getCsCod());
  1225. xinyiBigTableHour.setGyCsPh(tXinyiIndustry.getCsPh());
  1226. xinyiBigTableHour.setGyCsSs(tXinyiIndustry.getCsSs());
  1227. xinyiBigTableHour.setGyCsTn(tXinyiIndustry.getCsTn());
  1228. xinyiBigTableHour.setGyCsTp(tXinyiIndustry.getCsTp());
  1229. xinyiBigTableHour.setGyCsNh3(tXinyiIndustry.getCsNh3());
  1230. xinyiBigTableHour.setGyOneHyzdDo(tXinyiIndustry.getOneHyzdDo());
  1231. xinyiBigTableHour.setGyOneHymdDo(tXinyiIndustry.getOneHymdDo());
  1232. xinyiBigTableHour.setGyTwoHyzdDo(tXinyiIndustry.getTwoHyzdDo());
  1233. xinyiBigTableHour.setGyTwoHymdDo(tXinyiIndustry.getTwoHymdDo());
  1234. xinyiBigTableHour.setGyOneMlss(tXinyiIndustry.getOneMlss());
  1235. xinyiBigTableHour.setGyTwoMlss(tXinyiIndustry.getTwoMlss());
  1236. xinyiBigTableHour.setGyJsTds(tXinyiIndustry.getJsTds());
  1237. xinyiBigTableHour.setGyJsSlq(tXinyiIndustry.getJsSlq());
  1238. xinyiBigTableHour.setGyNHlbOneGp(tXinyiIndustry.getNHlbOneGp());
  1239. xinyiBigTableHour.setGyNHlbTwoGp(tXinyiIndustry.getNHlbTwoGp());
  1240. xinyiBigTableHour.setGyNHlbThreeGp(tXinyiIndustry.getNHlbThreeGp());
  1241. xinyiBigTableHour.setGyNHlbFourGp(tXinyiIndustry.getNHlbFourGp());
  1242. xinyiBigTableHour.setGyNhlBFiveGp(tXinyiIndustry.getNhlBFiveGp());
  1243. xinyiBigTableHour.setGyNHlbSixGp(tXinyiIndustry.getNHlbSixGp());
  1244. xinyiBigTableHour.setGyWHlbOneGp(tXinyiIndustry.getWHlbOneGp());
  1245. xinyiBigTableHour.setGyWHlbTwoGp(tXinyiIndustry.getWHlbTwoGp());
  1246. xinyiBigTableHour.setGyWHlbThreeGp(tXinyiIndustry.getWHlbThreeGp());
  1247. xinyiBigTableHour.setGyWHlbFourGp(tXinyiIndustry.getWHlbFourGp());
  1248. xinyiBigTableHour.setGyWHlbFiveGp(tXinyiIndustry.getWHlbFiveGp());
  1249. xinyiBigTableHour.setGyFjOne(tXinyiIndustry.getFjOne());
  1250. xinyiBigTableHour.setGyFjTwo(tXinyiIndustry.getFjTwo());
  1251. xinyiBigTableHour.setGyFjThree(tXinyiIndustry.getFjThree());
  1252. xinyiBigTableHour.setGyFjFour(tXinyiIndustry.getFjFour());
  1253. xinyiBigTableHour.setGyFjFive(tXinyiIndustry.getFjFive());
  1254. xinyiBigTableHour.setGyFjSix(tXinyiIndustry.getFjSix());
  1255. xinyiBigTableHour.setGyKqllOne(tXinyiIndustry.getKqllOne());
  1256. xinyiBigTableHour.setGyKqllTwo(tXinyiIndustry.getKqllTwo());
  1257. xinyiBigTableHour.setGyKqllThree(tXinyiIndustry.getKqllThree());
  1258. xinyiBigTableHour.setGyKqllFour(tXinyiIndustry.getKqllFour());
  1259. xinyiBigTableHour.setGyKqllFive(tXinyiIndustry.getKqllFive());
  1260. xinyiBigTableHour.setGyKqllSix(tXinyiIndustry.getKqllSix());
  1261. xinyiBigTableHour.setGySjtyjly(tXinyiIndustry.getSJTYJLY());
  1262. xinyiBigTableHour.setGyCljyssll(tXinyiIndustry.getCLJYSSLL());
  1263. xinyiBigTableHour.setGyHycRjyAll(tXinyiIndustry.getHycRjyAll());
  1264. xinyiBigTableHour.setGyHycRjyZdAll(tXinyiIndustry.getHycRjyZdAll());
  1265. xinyiBigTableHour.setGyHycWnndAll(tXinyiIndustry.getHycWnndAll());
  1266. xinyiBigTableHour.setGyClP04Ycz(tXinyiIndustry.getCLP04YCZ());
  1267. }
  1268. // 处理计算表
  1269. private void handleCalculateData(TXinyiBigTableHour xinyiBigTableHour, TXinyiCalculate xinyiCalculate) {
  1270. xinyiBigTableHour.setJsJsTdb(xinyiCalculate.getJsTdb());
  1271. xinyiBigTableHour.setJsJsTlb(xinyiCalculate.getJsTlb());
  1272. xinyiBigTableHour.setJsJsBodBCod(xinyiCalculate.getJsBodBCod());
  1273. xinyiBigTableHour.setJsYyqHrt(xinyiCalculate.getYyqHrt());
  1274. xinyiBigTableHour.setJsQyqHrt(xinyiCalculate.getQyqHrt());
  1275. xinyiBigTableHour.setJsHyqHrt(xinyiCalculate.getHyqHrt());
  1276. xinyiBigTableHour.setJsHfxwnndzb(xinyiCalculate.getHFXWNNDZB());
  1277. xinyiBigTableHour.setJsFM(xinyiCalculate.getFM());
  1278. xinyiBigTableHour.setJsGsls(xinyiCalculate.getGSLS());
  1279. xinyiBigTableHour.setJsGslsOne(xinyiCalculate.getGslsOne());
  1280. xinyiBigTableHour.setJsGslsTwo(xinyiCalculate.getGslsTwo());
  1281. xinyiBigTableHour.setJsXgsGsls(xinyiCalculate.getXgsGsls());
  1282. xinyiBigTableHour.setJsXlcscBmfh(xinyiCalculate.getXlcscBmfh());
  1283. xinyiBigTableHour.setJsXlcscHrt(xinyiCalculate.getXlcscHrt());
  1284. xinyiBigTableHour.setJsCccdcBmfh(xinyiCalculate.getCccdcBmfh());
  1285. xinyiBigTableHour.setJsCccdcHrt(xinyiCalculate.getCccdcHrt());
  1286. xinyiBigTableHour.setJsEccBmfh(xinyiCalculate.getEccBmfh());
  1287. xinyiBigTableHour.setJsEccHrt(xinyiCalculate.getEccHrt());
  1288. xinyiBigTableHour.setJsEccGtfh(xinyiCalculate.getEccGtfh());
  1289. xinyiBigTableHour.setJsClsnJcsj(xinyiCalculate.getClsnJcsj());
  1290. xinyiBigTableHour.setJsXgcdcQsqSsls(xinyiCalculate.getXgcdcQsqSsls());
  1291. xinyiBigTableHour.setJsWhlb(xinyiCalculate.getWHLB());
  1292. xinyiBigTableHour.setJsNhlb(xinyiCalculate.getNHLB());
  1293. xinyiBigTableHour.setJsWdscnl(xinyiCalculate.getWDSCNL());
  1294. xinyiBigTableHour.setJsQsb(xinyiCalculate.getQSB());
  1295. xinyiBigTableHour.setJsFcxsl(xinyiCalculate.getFCXSL());
  1296. xinyiBigTableHour.setJsFcxslbl(xinyiCalculate.getFCXSLBL());
  1297. xinyiBigTableHour.setJsWhlbRN(xinyiCalculate.getWhlRN());
  1298. }
  1299. // 处理日报
  1300. private void handleDailyData(TXinyiBigTableHour tXinyiBigTableHour, TXinyiDaily tXinyiDaily) {
  1301. tXinyiBigTableHour.setRbJsCod(tXinyiDaily.getJsCod());
  1302. tXinyiBigTableHour.setRbJsPh(tXinyiDaily.getJsPh());
  1303. tXinyiBigTableHour.setRbJsBod5(tXinyiDaily.getJsBod5());
  1304. tXinyiBigTableHour.setRbJsSs(tXinyiDaily.getJsSs());
  1305. tXinyiBigTableHour.setRbJsNh3(tXinyiDaily.getJsNh3());
  1306. tXinyiBigTableHour.setRbJsTn(tXinyiDaily.getJsTn());
  1307. tXinyiBigTableHour.setRbJsTp(tXinyiDaily.getJsTp());
  1308. tXinyiBigTableHour.setRbJsDcgj(tXinyiDaily.getJsDcgj());
  1309. tXinyiBigTableHour.setRbCsCod(tXinyiDaily.getCsCod());
  1310. tXinyiBigTableHour.setRbCsPh(tXinyiDaily.getCsPh());
  1311. tXinyiBigTableHour.setRbCsBod5(tXinyiDaily.getCsBod5());
  1312. tXinyiBigTableHour.setRbCsSs(tXinyiDaily.getCsSs());
  1313. tXinyiBigTableHour.setRbCsNh3(tXinyiDaily.getCsNh3());
  1314. tXinyiBigTableHour.setRbCsTn(tXinyiDaily.getCsTn());
  1315. tXinyiBigTableHour.setRbCsTp(tXinyiDaily.getCsTp());
  1316. tXinyiBigTableHour.setRbCsDcgj(tXinyiDaily.getCsDcgj());
  1317. tXinyiBigTableHour.setRbJsSw(tXinyiDaily.getJsSw());
  1318. tXinyiBigTableHour.setRbCsSw(tXinyiDaily.getCsSw());
  1319. tXinyiBigTableHour.setRbShcOnePh(tXinyiDaily.getShcOnePh());
  1320. tXinyiBigTableHour.setRbShcTwoPh(tXinyiDaily.getShcTwoPh());
  1321. tXinyiBigTableHour.setRbShcHyOneSv(tXinyiDaily.getShcHyOneSv());
  1322. tXinyiBigTableHour.setRbShcHyTwoSv(tXinyiDaily.getShcHyTwoSv());
  1323. tXinyiBigTableHour.setRbShcHyOneSvi(tXinyiDaily.getShcHyOneSvi());
  1324. tXinyiBigTableHour.setRbShcHyTwoSvi(tXinyiDaily.getShcHyTwoSvi());
  1325. tXinyiBigTableHour.setRbShcHyOneMlss(tXinyiDaily.getShcHyOneMlss());
  1326. tXinyiBigTableHour.setRbShcHyTwoMlss(tXinyiDaily.getShcHyTwoMlss());
  1327. tXinyiBigTableHour.setRbShcHyOneMlvss(tXinyiDaily.getShcHyOneMlvss());
  1328. tXinyiBigTableHour.setRbShcHyTwoMlvss(tXinyiDaily.getShcHyTwoMlvss());
  1329. tXinyiBigTableHour.setRbShcYyOneDo(tXinyiDaily.getShcYyOneDo());
  1330. tXinyiBigTableHour.setRbShcYyTwoDo(tXinyiDaily.getShcYyTwoDo());
  1331. tXinyiBigTableHour.setRbShcQyOneDo(tXinyiDaily.getShcQyOneDo());
  1332. tXinyiBigTableHour.setRbShcQyTwoDo(tXinyiDaily.getShcQyTwoDo());
  1333. tXinyiBigTableHour.setRbShcHyOneDo(tXinyiDaily.getShcHyOneDo());
  1334. tXinyiBigTableHour.setRbShcHyTwoDo(tXinyiDaily.getShcHyTwoDo());
  1335. tXinyiBigTableHour.setRbJsl(tXinyiDaily.getJSL());
  1336. tXinyiBigTableHour.setRbCsl(tXinyiDaily.getCSL());
  1337. tXinyiBigTableHour.setRbSdclcxsl(tXinyiDaily.getSDCLCXSL());
  1338. tXinyiBigTableHour.setRbQsb(tXinyiDaily.getQSB());
  1339. tXinyiBigTableHour.setRbFM(tXinyiDaily.getFM());
  1340. tXinyiBigTableHour.setRbYyHrt(tXinyiDaily.getYyHrt());
  1341. tXinyiBigTableHour.setRbHyHrt(tXinyiDaily.getHyHrt());
  1342. tXinyiBigTableHour.setRbQyHrt(tXinyiDaily.getQyHrt());
  1343. tXinyiBigTableHour.setRbNhlR(tXinyiDaily.getNhlR());
  1344. tXinyiBigTableHour.setRbWhlR(tXinyiDaily.getWhlR());
  1345. tXinyiBigTableHour.setRbSrt(tXinyiDaily.getSRT());
  1346. tXinyiBigTableHour.setRbCnl(tXinyiDaily.getCNL());
  1347. tXinyiBigTableHour.setRbTyqBod5Tn(tXinyiDaily.getTyqBod5Tn());
  1348. tXinyiBigTableHour.setRbTyhBod5Tn(tXinyiDaily.getTyhBod5Tn());
  1349. tXinyiBigTableHour.setRbHycRjyAll(tXinyiDaily.getHycRjyAll());
  1350. tXinyiBigTableHour.setRbHycWnndAll(tXinyiDaily.getHycWnndAll());
  1351. tXinyiBigTableHour.setRbYycRjyAll(tXinyiDaily.getYycRjyAll());
  1352. tXinyiBigTableHour.setRbQycRjyAll(tXinyiDaily.getQycRjyAll());
  1353. tXinyiBigTableHour.setRbWncjbAll(tXinyiDaily.getWncjbAll());
  1354. tXinyiBigTableHour.setRbWntjzsAll(tXinyiDaily.getWntjzsAll());
  1355. tXinyiBigTableHour.setRbHfxwnndAll(tXinyiDaily.getHfxwnndAll());
  1356. tXinyiBigTableHour.setRbChuniliang(tXinyiDaily.getCHUNILIANG());
  1357. tXinyiBigTableHour.setRbCnhsl(tXinyiDaily.getCNHSL());
  1358. tXinyiBigTableHour.setRbGwnl(tXinyiDaily.getGWNL());
  1359. tXinyiBigTableHour.setRbDf(tXinyiDaily.getDF());
  1360. tXinyiBigTableHour.setRbXnjf(tXinyiDaily.getXNJF());
  1361. tXinyiBigTableHour.setRbClf(tXinyiDaily.getCLF());
  1362. tXinyiBigTableHour.setRbTyf(tXinyiDaily.getTYF());
  1363. tXinyiBigTableHour.setRbXdjf(tXinyiDaily.getXDJF());
  1364. tXinyiBigTableHour.setRbQtyjf(tXinyiDaily.getQTYJF());
  1365. tXinyiBigTableHour.setRbCnf(tXinyiDaily.getCNF());
  1366. tXinyiBigTableHour.setRbZlsf(tXinyiDaily.getZLSF());
  1367. tXinyiBigTableHour.setRbZjcb(tXinyiDaily.getZJCB());
  1368. tXinyiBigTableHour.setRbDwcb(tXinyiDaily.getDWCB());
  1369. }
  1370. // 处理化验室
  1371. private void handleRobotData(TXinyiBigTableHour tXinyiBigTableHour, TXinyiRobot tXinyiRobot) {
  1372. tXinyiBigTableHour.setHyCodYb(tXinyiRobot.getCodYb());
  1373. tXinyiBigTableHour.setHyCodJqr(tXinyiRobot.getCodJqr());
  1374. tXinyiBigTableHour.setHyCodYz(tXinyiRobot.getCodYz());
  1375. tXinyiBigTableHour.setHyTpHl1Jqr(tXinyiRobot.getTpHl1Jqr());
  1376. tXinyiBigTableHour.setHyTpHl2Jqr(tXinyiRobot.getTpHl2Jqr());
  1377. tXinyiBigTableHour.setHyTpRccJqr(tXinyiRobot.getTpRccJqr());
  1378. tXinyiBigTableHour.setHyTp1Yz(tXinyiRobot.getTp1Yz());
  1379. tXinyiBigTableHour.setHyTp2Yz(tXinyiRobot.getTp2Yz());
  1380. tXinyiBigTableHour.setHyTpRccYz(tXinyiRobot.getTpRccYz());
  1381. tXinyiBigTableHour.setHyNh31Jqr(tXinyiRobot.getNh31Jqr());
  1382. tXinyiBigTableHour.setHyNh32Jqr(tXinyiRobot.getNh32Jqr());
  1383. tXinyiBigTableHour.setHyNh31Yz(tXinyiRobot.getNh31Yz());
  1384. tXinyiBigTableHour.setHyNo3Hlc1Yz(tXinyiRobot.getNo3Hlc1Yz());
  1385. tXinyiBigTableHour.setHyNh32Yz(tXinyiRobot.getNh32Yz());
  1386. tXinyiBigTableHour.setHyNo3Hlc2Yz(tXinyiRobot.getNo3Hlc2Yz());
  1387. tXinyiBigTableHour.setHyNo3Hlj1Jqr(tXinyiRobot.getNo3Hlj1Jqr());
  1388. tXinyiBigTableHour.setHyNo3Hlj2Jqr(tXinyiRobot.getNo3Hlj2Jqr());
  1389. tXinyiBigTableHour.setHyTyll(tXinyiRobot.getTYLL());
  1390. tXinyiBigTableHour.setHyNo3Qyc1Jqr(tXinyiRobot.getNo3Qyc1Jqr());
  1391. tXinyiBigTableHour.setHyNo3Qyc2Jqr(tXinyiRobot.getNo3Qyc2Jqr());
  1392. tXinyiBigTableHour.setHyNo3Qyc1Yz(tXinyiRobot.getNo3Qyc1Yz());
  1393. tXinyiBigTableHour.setHyNo3Qyc2Yz(tXinyiRobot.getNo3Qyc2Yz());
  1394. tXinyiBigTableHour.setHyJsll(tXinyiRobot.getJSLL());
  1395. tXinyiBigTableHour.setHyHycxsyAll(tXinyiRobot.getHycxsyAll());
  1396. tXinyiBigTableHour.setHyQyanAll(tXinyiRobot.getQyanAll());
  1397. tXinyiBigTableHour.setHyQyckxsyAll(tXinyiRobot.getQyckxsyAll());
  1398. tXinyiBigTableHour.setHyHyzlsyAll(tXinyiRobot.getHyzlsyAll());
  1399. }
  1400. private void handlePredictorWarning(String[] split, String hour, String task, List<TXinyiIndustry> tXinyiIndustries6, List<TXinyiRobot> tXinyiRobots6, String date) {
  1401. String[] hours = hour.split(",");
  1402. //2024年6月23日18:28:55 因为存在跨天问题 所以日期也是逗号拼接的
  1403. String[] dates = date.split(",");
  1404. //2024年6月18日13:41:10 统一格式,否则查询不到结果
  1405. //2024年6月18日10:36:49 增加预测记录,预测准确度计算等
  1406. TXinyiForecastComparison tXinyiForecastComparison = new TXinyiForecastComparison();
  1407. //2024年7月11日17:04:11 TP改为zlsy
  1408. tXinyiForecastComparison.setCategory(BusinessEnum.BigModelForecastEnum.TP.getCode().equalsIgnoreCase(task) ? BusinessEnum.BigModelForecastEnum.ZLSY.getCode() : task);
  1409. tXinyiForecastComparison.setForecastTimeOne(dates[0].replaceAll("-", "/") + " " + hours[0]);
  1410. tXinyiForecastComparison.setForecastTimeTwo(dates[1].replaceAll("-", "/") + " " + hours[1]);
  1411. tXinyiForecastComparison.setForecastTimeThree(dates[2].replaceAll("-", "/") + " " + hours[2]);
  1412. tXinyiForecastComparison.setHsForecastOne(new BigDecimal(split[0]));
  1413. tXinyiForecastComparison.setHsForecastTwo(new BigDecimal(split[1]));
  1414. tXinyiForecastComparison.setHsForecastThree(new BigDecimal(split[2]));
  1415. //2024年6月20日14:28:31 增加字段,方便查询
  1416. tXinyiForecastComparison.setRemark(DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYYMMDDHH_TS));
  1417. //防止工业库挂掉以后持续预测同一数据
  1418. //2024年6月20日14:59:23 因为预测bug(以工业库为准,假如工业库挂了,获取的全是挂了时间段后的三小时) 判断是否生成过了否则不生成
  1419. TXinyiForecastComparison tXinyiForecastComparisonReq = new TXinyiForecastComparison();
  1420. //2024年08月20日16:24:56 因为remark存放的是当前时间,也就是每个小时的,所以都是不一样的,修复此bug
  1421. // tXinyiForecastComparisonReq.setRemark(tXinyiForecastComparison.getRemark());
  1422. tXinyiForecastComparisonReq.setCategory(tXinyiForecastComparison.getCategory());
  1423. //2024年7月18日15:04:37 如果工业库挂掉以后,不管什么时刻,调用预测返回的未来三小时时间都是一样的,再增加一个查询条件
  1424. tXinyiForecastComparisonReq.setForecastTimeOne(tXinyiForecastComparison.getForecastTimeOne());//一个时刻就可以了 没必要再比较第二和第三时刻了。
  1425. List<TXinyiForecastComparison> tXinyiForecastComparisons = this.xinyiForecastComparisonService.selectTXinyiForecastComparisonList(tXinyiForecastComparisonReq);
  1426. if(!CollectionUtils.isEmpty(tXinyiForecastComparisons)){
  1427. log.error("预测已经进行过了,无需重复运行~~~~~~~~~~~@@@@@@@,要保存的预测数据为{}", JSON.toJSONString(tXinyiForecastComparison));
  1428. return;
  1429. }
  1430. //获取配置表
  1431. List<TXinyiNormConfig> tXinyiNormConfigs = this.xinyiNormConfigMapper.selectTXinyiNormConfigList(null);
  1432. if(CollectionUtils.isEmpty(tXinyiNormConfigs)) {
  1433. log.error( "未查询到配置信息");
  1434. return;
  1435. }
  1436. TXinyiNormConfig normConfig = tXinyiNormConfigs.get(0);
  1437. //获取最新的工业库的数据
  1438. // TXinyiIndustry tXinyiIndustry = this.xinyiIndustryMapper.selectTXinyiIndustryNewest();
  1439. //2024年7月18日10:29:44 因为获取了最新的六条数据,所以无需再查询最新的数据了
  1440. TXinyiIndustry tXinyiIndustry = tXinyiIndustries6.get(0);
  1441. TXinyiRobot tXinyiRobot = tXinyiRobots6.get(0);
  1442. List<ChartBasic> chartsDataList = new ArrayList<>(9);
  1443. if(BusinessEnum.BigModelForecastEnum.COD.getCode().equals(task)){
  1444. //同时调用跃渊的预测接口 保存记录值
  1445. try {
  1446. 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);
  1447. if(!StringUtils.isBlank(result)){
  1448. JSONArray array = JSON.parseArray(result);
  1449. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1450. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1451. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1452. }
  1453. } catch (Exception e) {
  1454. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1455. }
  1456. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1457. BigDecimal cscodBzz = normConfig.getCscodBzz();
  1458. BigDecimal cscodGkz = normConfig.getCscodGkz();
  1459. //处理展示数据
  1460. for (int i = 0; i < tXinyiIndustries6.size(); i++) {
  1461. TXinyiIndustry tXinyiIndustryTemp = tXinyiIndustries6.get(5 - i);
  1462. ChartBasic chartBasic = new ChartBasic();
  1463. chartBasic.setTime(tXinyiIndustryTemp.getTestHour().substring(11));
  1464. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiIndustryTemp.getCsCod(), INT_2));
  1465. chartsDataList.add(chartBasic);
  1466. }
  1467. for (int i = 0; i < split.length; i++) {
  1468. String val = split[i];
  1469. ChartBasic chartBasic = new ChartBasic();
  1470. chartBasic.setTime(hours[i]);
  1471. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1472. chartsDataList.add(chartBasic);
  1473. }
  1474. ryTask.handleXinYiWarningsYC(cscodBzz, split, cscodGkz, BusinessEnum.WarningCategoryEnum.CS_COD_YC.getCode(), hour, normConfig, tXinyiIndustry.getCsCod(), tXinyiIndustry, chartsDataList, date);
  1475. }else if(BusinessEnum.BigModelForecastEnum.SS.getCode().equals(task)){
  1476. //同时调用跃渊的预测接口 保存记录值
  1477. try {
  1478. 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);
  1479. if(!StringUtils.isBlank(result)){
  1480. JSONArray array = JSON.parseArray(result);
  1481. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1482. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1483. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1484. }
  1485. } catch (Exception e) {
  1486. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1487. }
  1488. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1489. BigDecimal csSSBzz = normConfig.getCsssBzz();
  1490. BigDecimal csssGkz = normConfig.getCsssGkz();
  1491. //处理展示数据
  1492. for (int i = 0; i < tXinyiIndustries6.size(); i++) {
  1493. TXinyiIndustry tXinyiIndustryTemp = tXinyiIndustries6.get(5 - i);
  1494. ChartBasic chartBasic = new ChartBasic();
  1495. chartBasic.setTime(tXinyiIndustryTemp.getTestHour().substring(11));
  1496. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiIndustryTemp.getCsSs(), INT_2));
  1497. chartsDataList.add(chartBasic);
  1498. }
  1499. for (int i = 0; i < split.length; i++) {
  1500. String val = split[i];
  1501. ChartBasic chartBasic = new ChartBasic();
  1502. chartBasic.setTime(hours[i]);
  1503. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1504. chartsDataList.add(chartBasic);
  1505. }
  1506. ryTask.handleXinYiWarningsYC(csSSBzz, split, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS_YC.getCode(), hour, normConfig, tXinyiIndustry.getCsSs(), tXinyiIndustry, chartsDataList, date);
  1507. }/*else if(BusinessEnum.BigModelForecastEnum.TN.getCode().equals(task)){
  1508. //同时调用跃渊的预测接口 保存记录值
  1509. try {
  1510. 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);
  1511. if(!StringUtils.isBlank(result)){
  1512. JSONArray array = JSON.parseArray(result);
  1513. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1514. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1515. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1516. }
  1517. } catch (Exception e) {
  1518. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1519. }
  1520. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1521. BigDecimal cszzBzz = normConfig.getCszzBzz();
  1522. BigDecimal cszzGkz = normConfig.getCszzGkz();
  1523. //处理展示数据
  1524. for (int i = 0; i < tXinyiIndustries6.size(); i++) {
  1525. TXinyiIndustry tXinyiIndustryTemp = tXinyiIndustries6.get(5 - i);
  1526. ChartBasic chartBasic = new ChartBasic();
  1527. chartBasic.setTime(tXinyiIndustryTemp.getTestHour().substring(11));
  1528. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiIndustryTemp.getCsTn(), INT_2));
  1529. chartsDataList.add(chartBasic);
  1530. }
  1531. for (int i = 0; i < split.length; i++) {
  1532. String val = split[i];
  1533. ChartBasic chartBasic = new ChartBasic();
  1534. chartBasic.setTime(hours[i]);
  1535. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1536. chartsDataList.add(chartBasic);
  1537. }
  1538. handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_TN_YC.getCode(), hour, normConfig,tXinyiIndustry.getCsCod(), tXinyiIndustry, chartsDataList, date);
  1539. }*/else if(BusinessEnum.BigModelForecastEnum.TP.getCode().equals(task)){
  1540. //同时调用跃渊的预测接口 保存记录值
  1541. try {
  1542. 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);
  1543. if(!StringUtils.isBlank(result)){
  1544. JSONArray array = JSON.parseArray(result);
  1545. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1546. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1547. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1548. }
  1549. } catch (Exception e) {
  1550. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1551. }
  1552. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1553. BigDecimal cszlBzz = normConfig.getCszlBzz();
  1554. BigDecimal cszlGkz = normConfig.getCszlGkz();
  1555. //处理展示数据
  1556. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1557. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1558. ChartBasic chartBasic = new ChartBasic();
  1559. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1560. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getTpRccJqr(), INT_2));
  1561. chartsDataList.add(chartBasic);
  1562. }
  1563. for (int i = 0; i < split.length; i++) {
  1564. String val = split[i];
  1565. ChartBasic chartBasic = new ChartBasic();
  1566. chartBasic.setTime(hours[i]);
  1567. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1568. chartsDataList.add(chartBasic);
  1569. }
  1570. ryTask.handleXinYiWarningsYC(cszlBzz, split, cszlGkz, CS_TP_YC.getCode(), hour, normConfig, tXinyiRobot.getTpRccJqr(), tXinyiIndustry, chartsDataList, date);
  1571. }else if(BusinessEnum.BigModelForecastEnum.NH3.getCode().equals(task)){
  1572. //同时调用跃渊的预测接口 保存记录值
  1573. try {
  1574. 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);
  1575. if(!StringUtils.isBlank(result)){
  1576. JSONArray array = JSON.parseArray(result);
  1577. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1578. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1579. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1580. }
  1581. } catch (Exception e) {
  1582. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1583. }
  1584. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1585. BigDecimal csadBzz = normConfig.getCsadBzz();
  1586. BigDecimal csadGkz = normConfig.getCsadGkz();
  1587. //处理展示数据
  1588. for (int i = 0; i < tXinyiIndustries6.size(); i++) {
  1589. TXinyiIndustry tXinyiIndustryTemp = tXinyiIndustries6.get(5 - i);
  1590. ChartBasic chartBasic = new ChartBasic();
  1591. chartBasic.setTime(tXinyiIndustryTemp.getTestHour().substring(11));
  1592. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiIndustryTemp.getCsNh3(), INT_2));
  1593. chartsDataList.add(chartBasic);
  1594. }
  1595. for (int i = 0; i < split.length; i++) {
  1596. String val = split[i];
  1597. ChartBasic chartBasic = new ChartBasic();
  1598. chartBasic.setTime(hours[i]);
  1599. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1600. chartsDataList.add(chartBasic);
  1601. }
  1602. ryTask.handleXinYiWarningsYC(csadBzz, split, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD_YC.getCode(), hour, normConfig, tXinyiIndustry.getCsNh3(), tXinyiIndustry, chartsDataList, date);
  1603. }else if(BusinessEnum.BigModelForecastEnum.XSY1.getCode().equals(task)){
  1604. //2024年6月21日14:57:02 红杉的出水总氮预测改成 不用工业库的,用化验科的两个xsy 相关指标
  1605. //同时调用跃渊的预测接口 保存记录值
  1606. try {
  1607. 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);
  1608. if(!StringUtils.isBlank(result)){
  1609. JSONArray array = JSON.parseArray(result);
  1610. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1611. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1612. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1613. }
  1614. } catch (Exception e) {
  1615. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1616. }
  1617. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1618. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1619. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1620. //2024年7月11日17:19:47 1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
  1621. BigDecimal cszzBzz = normConfig.getCszzBzz();
  1622. BigDecimal cszzGkz = normConfig.getCszzGkz();
  1623. //处理展示数据
  1624. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1625. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1626. ChartBasic chartBasic = new ChartBasic();
  1627. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1628. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNo3Hlj1Jqr(), INT_2));
  1629. chartsDataList.add(chartBasic);
  1630. }
  1631. for (int i = 0; i < split.length; i++) {
  1632. String val = split[i];
  1633. ChartBasic chartBasic = new ChartBasic();
  1634. chartBasic.setTime(hours[i]);
  1635. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1636. chartsDataList.add(chartBasic);
  1637. }
  1638. ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_XSY_1_YC.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj1Jqr(), tXinyiIndustry, chartsDataList, date);
  1639. }else if(BusinessEnum.BigModelForecastEnum.XSY2.getCode().equals(task)){
  1640. //同时调用跃渊的预测接口 保存记录值
  1641. try {
  1642. 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);
  1643. if(!StringUtils.isBlank(result)){
  1644. JSONArray array = JSON.parseArray(result);
  1645. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1646. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1647. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1648. }
  1649. } catch (Exception e) {
  1650. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1651. }
  1652. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1653. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1654. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1655. //2024年7月11日17:19:47 1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
  1656. BigDecimal cszzBzz = normConfig.getCszzBzz();
  1657. BigDecimal cszzGkz = normConfig.getCszzGkz();
  1658. //处理展示数据
  1659. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1660. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1661. ChartBasic chartBasic = new ChartBasic();
  1662. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1663. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNo3Hlj2Jqr(), INT_2));
  1664. chartsDataList.add(chartBasic);
  1665. }
  1666. for (int i = 0; i < split.length; i++) {
  1667. String val = split[i];
  1668. ChartBasic chartBasic = new ChartBasic();
  1669. chartBasic.setTime(hours[i]);
  1670. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1671. chartsDataList.add(chartBasic);
  1672. }
  1673. ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_XSY_2_YC.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
  1674. }else if(BusinessEnum.BigModelForecastEnum.QYXSY1.getCode().equals(task)){
  1675. //同时调用跃渊的预测接口 保存记录值
  1676. /*try {
  1677. 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);
  1678. if(!StringUtils.isBlank(result)){
  1679. JSONArray array = JSON.parseArray(result);
  1680. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1681. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1682. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1683. }
  1684. } catch (Exception e) {
  1685. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1686. }*/
  1687. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1688. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1689. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1690. //2024年7月11日17:19:47 1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
  1691. BigDecimal cszzBzz = normConfig.getCszzBzz();
  1692. BigDecimal cszzGkz = normConfig.getCszzGkz();
  1693. //处理展示数据
  1694. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1695. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1696. ChartBasic chartBasic = new ChartBasic();
  1697. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1698. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNo3Qyc1Jqr(), INT_2));
  1699. chartsDataList.add(chartBasic);
  1700. }
  1701. for (int i = 0; i < split.length; i++) {
  1702. String val = split[i];
  1703. ChartBasic chartBasic = new ChartBasic();
  1704. chartBasic.setTime(hours[i]);
  1705. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1706. chartsDataList.add(chartBasic);
  1707. }
  1708. // ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.QYCXSY_1.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
  1709. }else if(BusinessEnum.BigModelForecastEnum.QYXSY2.getCode().equals(task)){
  1710. //同时调用跃渊的预测接口 保存记录值
  1711. /*try {
  1712. 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);
  1713. if(!StringUtils.isBlank(result)){
  1714. JSONArray array = JSON.parseArray(result);
  1715. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1716. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1717. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1718. }
  1719. } catch (Exception e) {
  1720. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1721. }*/
  1722. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1723. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1724. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1725. //2024年7月11日17:19:47 1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
  1726. BigDecimal cszzBzz = normConfig.getCszzBzz();
  1727. BigDecimal cszzGkz = normConfig.getCszzGkz();
  1728. //处理展示数据
  1729. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1730. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1731. ChartBasic chartBasic = new ChartBasic();
  1732. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1733. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNo3Qyc2Jqr(), INT_2));
  1734. chartsDataList.add(chartBasic);
  1735. }
  1736. for (int i = 0; i < split.length; i++) {
  1737. String val = split[i];
  1738. ChartBasic chartBasic = new ChartBasic();
  1739. chartBasic.setTime(hours[i]);
  1740. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1741. chartsDataList.add(chartBasic);
  1742. }
  1743. // ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.QYCXSY_2.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
  1744. }else if(BusinessEnum.BigModelForecastEnum.QYNH31.getCode().equals(task)){
  1745. //同时调用跃渊的预测接口 保存记录值
  1746. /*try {
  1747. 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);
  1748. if(!StringUtils.isBlank(result)){
  1749. JSONArray array = JSON.parseArray(result);
  1750. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1751. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1752. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1753. }
  1754. } catch (Exception e) {
  1755. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1756. }*/
  1757. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1758. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1759. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1760. //2024年09月08日11:21:25 采用出水氨氮的标准值和管控值
  1761. BigDecimal csadBzz = normConfig.getCsadBzz();
  1762. BigDecimal csadGkz = normConfig.getCsadGkz();
  1763. //处理展示数据
  1764. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1765. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1766. ChartBasic chartBasic = new ChartBasic();
  1767. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1768. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNh31Jqr(), INT_2));
  1769. chartsDataList.add(chartBasic);
  1770. }
  1771. for (int i = 0; i < split.length; i++) {
  1772. String val = split[i];
  1773. ChartBasic chartBasic = new ChartBasic();
  1774. chartBasic.setTime(hours[i]);
  1775. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1776. chartsDataList.add(chartBasic);
  1777. }
  1778. // ryTask.handleXinYiWarningsYC(csadBzz, split, csadGkz, BusinessEnum.WarningCategoryEnum.QYAD_1.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
  1779. }else if(BusinessEnum.BigModelForecastEnum.QYNH32.getCode().equals(task)){
  1780. //同时调用跃渊的预测接口 保存记录值
  1781. /*try {
  1782. 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);
  1783. if(!StringUtils.isBlank(result)){
  1784. JSONArray array = JSON.parseArray(result);
  1785. tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
  1786. tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
  1787. tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
  1788. }
  1789. } catch (Exception e) {
  1790. log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
  1791. }*/
  1792. // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1793. /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
  1794. BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
  1795. //2024年09月08日11:21:25 采用出水氨氮的标准值和管控值
  1796. BigDecimal csadBzz = normConfig.getCsadBzz();
  1797. BigDecimal csadGkz = normConfig.getCsadGkz();
  1798. //处理展示数据
  1799. for (int i = 0; i < tXinyiRobots6.size(); i++) {
  1800. TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
  1801. ChartBasic chartBasic = new ChartBasic();
  1802. chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
  1803. chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNh32Jqr(), INT_2));
  1804. chartsDataList.add(chartBasic);
  1805. }
  1806. for (int i = 0; i < split.length; i++) {
  1807. String val = split[i];
  1808. ChartBasic chartBasic = new ChartBasic();
  1809. chartBasic.setTime(hours[i]);
  1810. chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
  1811. chartsDataList.add(chartBasic);
  1812. }
  1813. // ryTask.handleXinYiWarningsYC(csadBzz, split, csadGkz, BusinessEnum.WarningCategoryEnum.QYAD_2.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
  1814. }else {
  1815. log.error("暂未支持的类型{}", task);
  1816. }
  1817. //插入到数据库
  1818. //2024年6月21日14:18:55 如果红杉预测和跃渊预测都有数据再保存
  1819. //2024年7月8日15:15:46 逻辑调整:只要红杉的数据不为空就保存
  1820. if(Objects.isNull(tXinyiForecastComparison.getHsForecastOne()) || Objects.isNull(tXinyiForecastComparison.getHsForecastTwo()) ||Objects.isNull(tXinyiForecastComparison.getHsForecastThree())){
  1821. // || Objects.isNull(tXinyiForecastComparison.getYyForecastOne()) || Objects.isNull(tXinyiForecastComparison.getYyForecastTwo()) || Objects.isNull(tXinyiForecastComparison.getYyForecastThree())){
  1822. log.error("保存预测对比数据时,有存在不满足条件的数据,不再保存数据,数据为{}", JSON.toJSONString(tXinyiForecastComparison));
  1823. }else
  1824. xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
  1825. }
  1826. }