BizModelController.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. package com.jjt.biz.controller;
  2. import com.deepoove.poi.XWPFTemplate;
  3. import com.github.pagehelper.PageHelper;
  4. import com.jjt.biz.domain.BizModel;
  5. import com.jjt.biz.domain.BizObj;
  6. import com.jjt.biz.service.IBizModelService;
  7. import com.jjt.biz.util.DataUtil;
  8. import com.jjt.biz.vo.CheckExportVO;
  9. import com.jjt.biz.vo.CheckVO;
  10. import com.jjt.biz.vo.ScoreVO;
  11. import com.jjt.common.annotation.Log;
  12. import com.jjt.common.core.controller.BaseController;
  13. import com.jjt.common.core.domain.AjaxResult;
  14. import com.jjt.common.core.page.TableDataInfo;
  15. import com.jjt.common.enums.BusinessType;
  16. import com.jjt.common.utils.DateUtils;
  17. import com.jjt.common.utils.poi.ExcelUtil;
  18. import com.jjt.hl.domain.HlClass;
  19. import com.jjt.hl.domain.HlScore;
  20. import com.jjt.hl.service.IHlScoreService;
  21. import io.swagger.annotations.Api;
  22. import io.swagger.annotations.ApiOperation;
  23. import io.swagger.annotations.ApiParam;
  24. import org.springframework.security.access.prepost.PreAuthorize;
  25. import org.springframework.web.bind.annotation.*;
  26. import javax.annotation.Resource;
  27. import javax.servlet.http.HttpServletResponse;
  28. import java.io.*;
  29. import java.net.URLEncoder;
  30. import java.time.LocalDate;
  31. import java.time.LocalDateTime;
  32. import java.time.format.DateTimeFormatter;
  33. import java.util.*;
  34. import java.util.stream.Collectors;
  35. /**
  36. * 业务模型Controller
  37. *
  38. * @author jjt
  39. * @date 2024-08-26
  40. */
  41. @Api(tags = "业务模型")
  42. @RestController
  43. @RequestMapping("/hl/bm")
  44. public class BizModelController extends BaseController {
  45. @Resource
  46. private IBizModelService bizModelService;
  47. @Resource
  48. private IHlScoreService hlScoreService;
  49. @ApiOperation("选择对象")
  50. @GetMapping("/obj/select/{modelId}")
  51. public TableDataInfo objSelect(@ApiParam(value = "模型ID", required = true) @PathVariable("modelId") Long modelId) {
  52. PageHelper.startPage(1, 1000, "").setReasonable(true);
  53. List<BizObj> list = bizModelService.selectObjList(modelId);
  54. return getDataTable(list);
  55. }
  56. @ApiOperation("添加对象")
  57. @GetMapping("/obj/add/{modelId}")
  58. public AjaxResult objAdd(@ApiParam(value = "模型ID", required = true) @PathVariable("modelId") Long modelId, @ApiParam(value = "对象ID数组", required = true) Long[] objIds) {
  59. return success(bizModelService.insertObj(modelId, objIds));
  60. }
  61. @ApiOperation("健康度配置")
  62. @GetMapping("/config/{modelId}")
  63. public AjaxResult config(@ApiParam(value = "模型ID", required = true) @PathVariable("modelId") Long modelId) {
  64. List<HlClass> list = bizModelService.selectHlClassList4modelId(modelId);
  65. return success(list);
  66. }
  67. @ApiOperation("导入分类")
  68. @GetMapping("/imp/{modelId}")
  69. public AjaxResult imp(@ApiParam(value = "模型ID", required = true) @PathVariable("modelId") Long modelId) {
  70. bizModelService.impClass(modelId);
  71. return success();
  72. }
  73. @ApiOperation("历史健康度得分情况")
  74. @GetMapping("/time/history")
  75. public List<ScoreVO> timeHistory() {
  76. List<ScoreVO> result = new ArrayList<>();
  77. LocalDateTime endTime = LocalDateTime.now().plusHours(1).withMinute(0).withSecond(0).withNano(0);
  78. LocalDateTime beginTime = endTime.minusHours(24);
  79. HlScore search = new HlScore();
  80. search.setHlType("1");
  81. Map<String, Object> params = new HashMap<>(16);
  82. params.put("beginTime", beginTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
  83. params.put("endTime", endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
  84. search.setParams(params);
  85. List<HlScore> list = hlScoreService.selectHlScoreList(search);
  86. Map<Long, List<HlScore>> resultMap = list.stream().collect(Collectors.groupingBy(HlScore::getModelId));
  87. int len = 0;
  88. List<String> standTime = new ArrayList<>();
  89. for (Long modelId : resultMap.keySet()) {
  90. ScoreVO vo = new ScoreVO();
  91. BizModel model = bizModelService.selectBizModelByModelId(modelId);
  92. vo.setModelId(modelId);
  93. vo.setModelName(model.getModelName());
  94. List<String> xData = new ArrayList<>();
  95. List<Float> scores = new ArrayList<>();
  96. List<HlScore> scoreList = resultMap.get(modelId);
  97. scoreList = scoreList.stream().sorted(Comparator.comparing(HlScore::getHlDate)).collect(Collectors.toList());
  98. scoreList.forEach(hs -> {
  99. xData.add(DateUtils.parseDateToStr("HH:mm", hs.getHlDate()));
  100. if (hs.getHlScore() == null) {
  101. scores.add(100f);
  102. } else {
  103. scores.add(hs.getHlScore().floatValue());
  104. }
  105. });
  106. if (scoreList.size() > len) {
  107. len = scoreList.size();
  108. standTime = xData;
  109. }
  110. vo.setScores(scores);
  111. vo.setXData(xData);
  112. result.add(vo);
  113. }
  114. DataUtil.standTimeVO(standTime, result);
  115. return result;
  116. }
  117. @ApiOperation("日健康度得分情况")
  118. @GetMapping("/day/history")
  119. public List<ScoreVO> dayHistory() {
  120. List<ScoreVO> result = new ArrayList<>();
  121. LocalDate endTime = LocalDate.now();
  122. LocalDate beginTime = endTime.minusDays(8);
  123. HlScore search = new HlScore();
  124. search.setHlType("2");
  125. Map<String, Object> params = new HashMap<>(16);
  126. params.put("beginTime", beginTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  127. params.put("endTime", endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  128. search.setParams(params);
  129. List<HlScore> list = hlScoreService.selectHlScoreList(search);
  130. Map<Long, List<HlScore>> resultMap = list.stream().collect(Collectors.groupingBy(HlScore::getModelId));
  131. int len = 0;
  132. List<String> standTime = new ArrayList<>();
  133. for (Long modelId : resultMap.keySet()) {
  134. ScoreVO vo = new ScoreVO();
  135. BizModel model = bizModelService.selectBizModelByModelId(modelId);
  136. vo.setModelId(modelId);
  137. vo.setModelName(model.getModelName());
  138. List<String> xData = new ArrayList<>();
  139. List<Float> scores = new ArrayList<>();
  140. List<HlScore> scoreList = resultMap.get(modelId);
  141. scoreList = scoreList.stream().sorted(Comparator.comparing(HlScore::getHlDate)).collect(Collectors.toList());
  142. scoreList.forEach(hs -> {
  143. xData.add(DateUtils.parseDateToStr("MM-dd", hs.getHlDate()));
  144. scores.add(hs.getHlScore().floatValue());
  145. });
  146. if (scoreList.size() > len) {
  147. len = scoreList.size();
  148. standTime = xData;
  149. }
  150. vo.setScores(scores);
  151. vo.setXData(xData);
  152. result.add(vo);
  153. }
  154. DataUtil.standTimeVO(standTime, result);
  155. return result;
  156. }
  157. // @ApiOperation("选择健康度指标")
  158. // @GetMapping("/metrics/select/{modelId}")
  159. // public TableDataInfo metricsSelect(@ApiParam(value = "模型ID", required = true) @PathVariable("modelId") Long modelId) {
  160. // startPage();
  161. // List<BizObj> list = bizModelService.selectObjList(modelId);
  162. // return getDataTable(list);
  163. // }
  164. //
  165. // @ApiOperation("添加对象")
  166. // @GetMapping("/metrics/add/{modelId}")
  167. // public AjaxResult metricsAdd(@ApiParam(value = "模型ID", required = true) @PathVariable("modelId") Long modelId, @ApiParam(value = "指标ID数组", required = true) Long[] metricsIds) {
  168. // return success(bizModelService.insertObj(modelId, metricsIds));
  169. // }
  170. /**
  171. * 查询业务模型列表
  172. */
  173. @ApiOperation("查询业务模型列表")
  174. @PreAuthorize("@ss.hasPermi('hl:bm:list')")
  175. @GetMapping("/list")
  176. public TableDataInfo list(BizModel bizModel) {
  177. startPage();
  178. List<BizModel> list = bizModelService.selectBizModelList(bizModel);
  179. return getDataTable(list);
  180. }
  181. /**
  182. * 导出业务模型列表
  183. */
  184. @ApiOperation("导出业务模型列表")
  185. @PreAuthorize("@ss.hasPermi('hl:bm:export')")
  186. @Log(title = "业务模型", businessType = BusinessType.EXPORT)
  187. @PostMapping("/export")
  188. public void export(HttpServletResponse response, BizModel bizModel) {
  189. List<BizModel> list = bizModelService.selectBizModelList(bizModel);
  190. ExcelUtil<BizModel> util = new ExcelUtil<BizModel>(BizModel.class);
  191. util.exportExcel(response, list, "业务模型数据");
  192. }
  193. /**
  194. * 获取业务模型详细信息
  195. */
  196. @ApiOperation("获取业务模型详细信息")
  197. @PreAuthorize("@ss.hasPermi('hl:bm:query')")
  198. @GetMapping(value = "/{modelId}")
  199. public AjaxResult getInfo(@PathVariable("modelId") Long modelId) {
  200. return success(bizModelService.selectBizModelByModelId(modelId));
  201. }
  202. /**
  203. * 新增业务模型
  204. */
  205. @ApiOperation("新增业务模型")
  206. @PreAuthorize("@ss.hasPermi('hl:bm:add')")
  207. @Log(title = "业务模型", businessType = BusinessType.INSERT)
  208. @PostMapping
  209. public AjaxResult add(@RequestBody BizModel bizModel) {
  210. bizModelService.insertBizModel(bizModel);
  211. return AjaxResult.success(bizModel);
  212. }
  213. /**
  214. * 修改业务模型
  215. */
  216. @ApiOperation("修改业务模型")
  217. @PreAuthorize("@ss.hasPermi('hl:bm:edit')")
  218. @Log(title = "业务模型", businessType = BusinessType.UPDATE)
  219. @PostMapping("/edit")
  220. public AjaxResult edit(@RequestBody BizModel bizModel) {
  221. return toAjax(bizModelService.updateBizModel(bizModel));
  222. }
  223. /**
  224. * 删除业务模型
  225. */
  226. @ApiOperation("删除业务模型")
  227. @PreAuthorize("@ss.hasPermi('hl:bm:remove')")
  228. @Log(title = "业务模型", businessType = BusinessType.DELETE)
  229. @GetMapping("/del/{modelIds}")
  230. public AjaxResult remove(@PathVariable Long[] modelIds) {
  231. return toAjax(bizModelService.deleteBizModelByModelIds(modelIds));
  232. }
  233. @ApiOperation("一健巡检--模型列表")
  234. @GetMapping("/check/list")
  235. public AjaxResult checkList() {
  236. List<Map<String, String>> classList = new ArrayList<>();
  237. Map<String, String> map = new HashMap<>();
  238. map.put("class", "基础支撑");
  239. map.put("option", "容器服务1、容器服务2、node-1、node-2");
  240. classList.add(map);
  241. map = new HashMap<>();
  242. map.put("class", "mysql");
  243. map.put("option", "mysql主服务器、mysql从服务器");
  244. classList.add(map);
  245. map = new HashMap<>();
  246. map.put("class", "JAVA应用");
  247. map.put("option", "服务网关、系统服务、权限服务、业务服务、定时器服务");
  248. classList.add(map);
  249. map = new HashMap<>();
  250. map.put("class", "运行环境");
  251. map.put("option", "ECS-1、ECS-cluster-2、ECS-node-3");
  252. classList.add(map);
  253. map.put("class", "中间件");
  254. map.put("option", "ES搜索服务、文件服务、其他");
  255. classList.add(map);
  256. List<CheckVO> list = new ArrayList<>();
  257. String[] names = {"市场服务", "市场出清", "信息发布", "市场合规", "市场结算"};
  258. for (int i = 0; i < names.length; i++) {
  259. CheckVO model = new CheckVO();
  260. model.setModelId((long) (i + 1));
  261. model.setModelName(names[i]);
  262. model.setClassList(classList);
  263. list.add(model);
  264. }
  265. return AjaxResult.success(list);
  266. }
  267. @ApiOperation("一健巡检--查看报告")
  268. @GetMapping("/check/history/report")
  269. public AjaxResult checkHistory() {
  270. List<Map<String, Object>> list = new ArrayList<>();
  271. for (int i = 0; i < 10; i++) {
  272. Map<String, Object> map = new HashMap<>();
  273. String time = "2024-09-08 " + (21 - i) + ":00:00";
  274. map.put("id", (i + 1));
  275. map.put("time", time);
  276. list.add(map);
  277. }
  278. return AjaxResult.success(list);
  279. }
  280. @ApiOperation("一健巡检--查看报告模型明细")
  281. @GetMapping("/check/model/{id}")
  282. public AjaxResult checkDetail(@PathVariable("id") Long id) {
  283. List<Map<String, Object>> list = new ArrayList<>();
  284. String[] names = {"市场服务", "市场出清", "信息发布", "市场合规", "市场结算"};
  285. int[] times = {25, 35, 45, 38, 25};
  286. for (int i = 0; i < names.length; i++) {
  287. Map<String, Object> map = new HashMap<>();
  288. map.put("id", (i + 1));
  289. map.put("modelName", names[i]);
  290. map.put("total", times[i]);
  291. map.put("num", new Random().nextInt(times[i]));
  292. list.add(map);
  293. }
  294. return AjaxResult.success(list);
  295. }
  296. @ApiOperation("一健巡检--导出报告")
  297. @GetMapping("/check/export")
  298. public void checkExport(HttpServletResponse response) {
  299. CheckExportVO vo = new CheckExportVO();
  300. vo.mock();
  301. // 定义模板对应的数据
  302. HashMap<String, Object> data = new HashMap<>();
  303. data.put("test", "测试dsx哈");
  304. for (int i = 1; i <= 28; i++) {
  305. data.put("l" + i, vo.getLeft()[i - 1]);
  306. data.put("r" + i, vo.getRight()[i - 1]);
  307. }
  308. // 渲染模板
  309. try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("tpl/check.docx");
  310. OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
  311. ByteArrayOutputStream out = new ByteArrayOutputStream();) {
  312. // 写出到文件
  313. XWPFTemplate template = XWPFTemplate.compile(inputStream).render(data);
  314. template.writeAndClose(out);
  315. // 清空response
  316. response.reset();
  317. // 设置response的Header
  318. response.setCharacterEncoding("UTF-8");
  319. //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
  320. //attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"
  321. // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
  322. response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("新一代电力交易平台巡检报告" + DateUtils.dateTimeNow() + ".docx", "UTF-8"));
  323. response.setContentType("application/octet-stream");
  324. outputStream.write(out.toByteArray());
  325. outputStream.flush();
  326. } catch (IOException e) {
  327. throw new RuntimeException(e);
  328. }
  329. }
  330. @ApiOperation("一健巡检--查看报告分类明细")
  331. @GetMapping("/check/proj/{id}")
  332. public AjaxResult checkProj(@PathVariable("id") Long id) {
  333. List<Map<String, Object>> list = new ArrayList<>();
  334. String[] names = {"JAVA应用", "数据库", "运行环境", "基础支撑", "中间件"};
  335. String[] options = {"服务网关、系统服务、权限服务、业务服务、定时器服务", "mysql主服务器、mysql从服务器", "ECS-1、ECS-cluster-2、ECS-node-3", "容器服务1、容器服务2、node-1、node-2", "ES搜索服务、文件服务、其他"};
  336. int[] times = {25, 35, 45, 38, 25};
  337. for (int i = 0; i < names.length; i++) {
  338. Map<String, Object> map = new HashMap<>();
  339. map.put("id", (i + 1));
  340. map.put("class", names[i]);
  341. map.put("option", options[i]);
  342. map.put("total", times[i]);
  343. map.put("num", new Random().nextInt(times[i]));
  344. list.add(map);
  345. }
  346. return AjaxResult.success(list);
  347. }
  348. @ApiOperation("一健巡检--查看报告指标明细")
  349. @GetMapping("/check/metrics/{id}")
  350. public AjaxResult checkMetrics(@PathVariable("id") Long id) {
  351. List<Map<String, Object>> list = new ArrayList<>();
  352. String[] names = {"CPU使用率", "内存使用率", "磁盘使用率", "mysql连接数", "mysql慢查询数量"};
  353. String[] remarks = {"超过80%,且持续1小时", "超过60,且持续1小时", "超过90%", "超过200,且持续1小时", "当前值超过5"};
  354. int[] times = new int[5];
  355. for (int i = 0; i < times.length; i++) {
  356. times[i] = new Random().nextInt(100);
  357. }
  358. for (int i = 0; i < names.length; i++) {
  359. Map<String, Object> map = new HashMap<>();
  360. map.put("name", names[i]);
  361. map.put("remark", remarks[i]);
  362. map.put("value", times[i]);
  363. if (times[i] % 2 == 0) {
  364. map.put("status", "正常");
  365. } else {
  366. map.put("status", "异常");
  367. }
  368. list.add(map);
  369. }
  370. return AjaxResult.success(list);
  371. }
  372. @ApiOperation("一健巡检--按模型ID巡检")
  373. @GetMapping("/check/{modelId}")
  374. public AjaxResult checkModel(@PathVariable("modelId") Long modelId) {
  375. try {
  376. Thread.sleep(3000);
  377. } catch (InterruptedException e) {
  378. throw new RuntimeException(e);
  379. }
  380. return AjaxResult.success();
  381. }
  382. }