MesDeviceFaultController.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. package com.jeesite.modules.mes.web;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import com.fasterxml.jackson.databind.node.ArrayNode;
  4. import com.fasterxml.jackson.databind.node.ObjectNode;
  5. import com.jeesite.common.collect.ListUtils;
  6. import com.jeesite.common.collect.MapUtils;
  7. import com.jeesite.common.config.Global;
  8. import com.jeesite.common.entity.Page;
  9. import com.jeesite.common.lang.DateUtils;
  10. import com.jeesite.common.mybatis.mapper.query.QueryType;
  11. import com.jeesite.common.utils.excel.ExcelExport;
  12. import com.jeesite.common.utils.excel.annotation.ExcelField.Type;
  13. import com.jeesite.common.web.BaseController;
  14. import com.jeesite.modules.mes.entity.MesDeviceFault;
  15. import com.jeesite.modules.mes.entity.MesDeviceFaultCate;
  16. import com.jeesite.modules.mes.entity.MesDeviceFaultMaintain;
  17. import com.jeesite.modules.mes.entity.MesDeviceOee;
  18. import com.jeesite.modules.mes.resp.CommonResp;
  19. import com.jeesite.modules.mes.service.MesDeviceFaultCateService;
  20. import com.jeesite.modules.mes.service.MesDeviceFaultMaintainService;
  21. import com.jeesite.modules.mes.service.MesDeviceFaultService;
  22. import com.jeesite.modules.mes.service.MesDeviceOeeService;
  23. import com.jeesite.modules.mes.util.CommonUitl;
  24. import org.apache.shiro.authz.annotation.RequiresPermissions;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Controller;
  27. import org.springframework.ui.Model;
  28. import org.springframework.validation.annotation.Validated;
  29. import org.springframework.web.bind.annotation.ModelAttribute;
  30. import org.springframework.web.bind.annotation.PostMapping;
  31. import org.springframework.web.bind.annotation.RequestMapping;
  32. import org.springframework.web.bind.annotation.ResponseBody;
  33. import org.springframework.web.multipart.MultipartFile;
  34. import javax.servlet.http.HttpServletRequest;
  35. import javax.servlet.http.HttpServletResponse;
  36. import java.time.Duration;
  37. import java.time.Instant;
  38. import java.time.LocalDateTime;
  39. import java.time.ZoneId;
  40. import java.util.*;
  41. /**
  42. * 设备故障记录Controller
  43. * @author hzd
  44. * @version 2024-07-23
  45. */
  46. @Controller
  47. @RequestMapping(value = "${adminPath}/mes/mesDeviceFault")
  48. public class MesDeviceFaultController extends BaseController {
  49. @Autowired
  50. private MesDeviceFaultService mesDeviceFaultService;
  51. @Autowired
  52. private MesDeviceFaultCateService mesDeviceFaultCateService;
  53. @Autowired
  54. private MesDeviceFaultMaintainService mesDeviceFaultMaintainService;
  55. @Autowired
  56. private MesDeviceOeeService mesDeviceOeeService;
  57. /**
  58. * 获取数据
  59. */
  60. @ModelAttribute
  61. public MesDeviceFault get(String id, boolean isNewRecord) {
  62. return mesDeviceFaultService.get(id, isNewRecord);
  63. }
  64. /**
  65. * 查询列表
  66. */
  67. @RequiresPermissions("mes:mesDeviceFault:view")
  68. @RequestMapping(value = {"list", ""})
  69. public String list(MesDeviceFault mesDeviceFault, Model model) {
  70. model.addAttribute("mesDeviceFault", mesDeviceFault);
  71. MesDeviceFaultCate mesDeviceFaultCate = new MesDeviceFaultCate();
  72. mesDeviceFaultCate.setStatus("0");
  73. model.addAttribute("mesDeviceFaultCate", mesDeviceFaultCateService.findList(mesDeviceFaultCate));
  74. MesDeviceFaultMaintain mesDeviceFaultMaintain = new MesDeviceFaultMaintain();
  75. mesDeviceFaultMaintain.setStatus("0");
  76. model.addAttribute("mesDeviceFaultMaintain", mesDeviceFaultMaintainService.findList(mesDeviceFaultMaintain));
  77. return "modules/mes/mesDeviceFaultList";
  78. }
  79. /**
  80. * 查询列表数据
  81. */
  82. @RequiresPermissions("mes:mesDeviceFault:view")
  83. @RequestMapping(value = "listData")
  84. @ResponseBody
  85. public Page<MesDeviceFault> listData(MesDeviceFault mesDeviceFault, HttpServletRequest request, HttpServletResponse response) {
  86. mesDeviceFault.setPage(new Page<>(request, response));
  87. Page<MesDeviceFault> page = mesDeviceFaultService.findPage(mesDeviceFault);
  88. return page;
  89. }
  90. /**
  91. * 查看编辑表单
  92. */
  93. @RequiresPermissions("mes:mesDeviceFault:view")
  94. @RequestMapping(value = "form")
  95. public String form(MesDeviceFault mesDeviceFault, Model model) {
  96. model.addAttribute("mesDeviceFault", mesDeviceFault);
  97. MesDeviceFaultCate mesDeviceFaultCate = new MesDeviceFaultCate();
  98. mesDeviceFaultCate.setStatus("0");
  99. model.addAttribute("mesDeviceFaultCate", mesDeviceFaultCateService.findList(mesDeviceFaultCate));
  100. MesDeviceFaultMaintain mesDeviceFaultMaintain = new MesDeviceFaultMaintain();
  101. mesDeviceFaultMaintain.setStatus("0");
  102. model.addAttribute("mesDeviceFaultMaintain", mesDeviceFaultMaintainService.findList(mesDeviceFaultMaintain));
  103. return "modules/mes/mesDeviceFaultForm";
  104. }
  105. @RequiresPermissions("mes:mesDeviceFault:view")
  106. @RequestMapping(value = "tj")
  107. public String tj(MesDeviceFault mesDeviceFault, Model model) {
  108. model.addAttribute("mesDeviceFault", mesDeviceFault);
  109. MesDeviceFaultCate mesDeviceFaultCate = new MesDeviceFaultCate();
  110. mesDeviceFaultCate.setStatus("0");
  111. model.addAttribute("mesDeviceFaultCate", mesDeviceFaultCateService.findList(mesDeviceFaultCate));
  112. MesDeviceFaultMaintain mesDeviceFaultMaintain = new MesDeviceFaultMaintain();
  113. mesDeviceFaultMaintain.setStatus("0");
  114. model.addAttribute("mesDeviceFaultMaintain", mesDeviceFaultMaintainService.findList(mesDeviceFaultMaintain));
  115. MesDeviceOee mesDeviceOee = new MesDeviceOee();
  116. mesDeviceOee.setStatus("0");
  117. model.addAttribute("mesDeviceOee", mesDeviceOeeService.findList(mesDeviceOee));
  118. return "modules/mes/mesDeviceFaultTj";
  119. }
  120. @RequiresPermissions("mes:mesDeviceFault:view")
  121. @RequestMapping(value = "tj2")
  122. public String tj2(MesDeviceFault mesDeviceFault, Model model) {
  123. model.addAttribute("mesDeviceFault", mesDeviceFault);
  124. MesDeviceFaultCate mesDeviceFaultCate = new MesDeviceFaultCate();
  125. mesDeviceFaultCate.setStatus("0");
  126. model.addAttribute("mesDeviceFaultCate", mesDeviceFaultCateService.findList(mesDeviceFaultCate));
  127. MesDeviceFaultMaintain mesDeviceFaultMaintain = new MesDeviceFaultMaintain();
  128. mesDeviceFaultMaintain.setStatus("0");
  129. model.addAttribute("mesDeviceFaultMaintain", mesDeviceFaultMaintainService.findList(mesDeviceFaultMaintain));
  130. return "modules/mes/mesDeviceFaultTj2";
  131. }
  132. @RequestMapping(value = "tjData1")
  133. @ResponseBody
  134. public CommonResp tjData1(MesDeviceFault mesDeviceFault) {
  135. CommonResp<Map<String, Object>> resp = new CommonResp<>();
  136. Map<String, Object> map = MapUtils.newHashMap();
  137. mesDeviceFault.setStatus("0");
  138. MesDeviceFaultCate mesDeviceFaultCate2 = new MesDeviceFaultCate();
  139. mesDeviceFaultCate2.setStatus("0");
  140. List<MesDeviceFaultCate> cates = mesDeviceFaultCateService.findList(mesDeviceFaultCate2);
  141. List<Map> lists = new ArrayList<>();
  142. for (MesDeviceFaultCate mesDeviceFaultCate:cates){
  143. Map<String, Object> map2 = MapUtils.newHashMap();
  144. map2.put("name",mesDeviceFaultCate.getTitle());
  145. mesDeviceFault.setCateId(mesDeviceFaultCate.getId());
  146. Long jpp1 = mesDeviceFaultService.findCount(mesDeviceFault);
  147. map2.put("value",jpp1);
  148. lists.add(map2);
  149. }
  150. map.put("lists",lists);
  151. resp.setData(map);
  152. resp.setResult(Global.TRUE);
  153. return resp;
  154. }
  155. @RequestMapping(value = "tjData2")
  156. @ResponseBody
  157. public CommonResp tjData2(MesDeviceFault mesDeviceFault) {
  158. CommonResp<Map<String, Object>> resp = new CommonResp<>();
  159. Map<String, Object> map = MapUtils.newHashMap();
  160. mesDeviceFault.setStatus("0");
  161. MesDeviceFaultCate mesDeviceFaultCate2 = new MesDeviceFaultCate();
  162. mesDeviceFaultCate2.setStatus("0");
  163. List<MesDeviceFaultCate> cates = mesDeviceFaultCateService.findList(mesDeviceFaultCate2);
  164. List<Map<String, String>> list1 = new ArrayList<>();
  165. Map<String, String> map21 = MapUtils.newHashMap();
  166. map21.put("id","1");
  167. map21.put("title","A");
  168. list1.add(map21);
  169. Map<String, String> map211 = MapUtils.newHashMap();
  170. map211.put("id","2");
  171. map211.put("title","B");
  172. list1.add(map211);
  173. Map<String, String> map22 = MapUtils.newHashMap();
  174. map22.put("id","3");
  175. map22.put("title","C");
  176. list1.add(map22);
  177. Map<String, String> map23 = MapUtils.newHashMap();
  178. map23.put("id","4");
  179. map23.put("title","D");
  180. list1.add(map23);
  181. List<Map> lists = new ArrayList<>();
  182. for (Map<String, String> map3:list1){
  183. Map<String, Object> map4 = MapUtils.newHashMap();
  184. map4.put("name",map3.get("title"));
  185. mesDeviceFault.setLevel(map3.get("id"));
  186. Long jpp1 = mesDeviceFaultService.findCount(mesDeviceFault);
  187. map4.put("value",jpp1);
  188. lists.add(map4);
  189. }
  190. map.put("lists",lists);
  191. resp.setData(map);
  192. resp.setResult(Global.TRUE);
  193. return resp;
  194. }
  195. @RequestMapping(value = "tjData3")
  196. @ResponseBody
  197. public CommonResp tjData3(MesDeviceFault mesDeviceFault) {
  198. CommonResp<Map<String, Object>> resp = new CommonResp<>();
  199. Map<String, Object> map = MapUtils.newHashMap();
  200. mesDeviceFault.setStatus("0");
  201. List<String> days = CommonUitl.getBeforeDays(30);
  202. Collections.sort(days);
  203. List<Long> pNums = new ArrayList<>();
  204. for(String day:days){
  205. String csdate = day + " 00:00:00";
  206. String cedate = day + " 23:59:59";
  207. mesDeviceFault.setStartDate_gte(CommonUitl.String2Date(csdate));
  208. mesDeviceFault.setStartDate_lte(CommonUitl.String2Date(cedate));
  209. Long jpp1 = mesDeviceFaultService.findCount(mesDeviceFault);
  210. pNums.add(jpp1);
  211. }
  212. map.put("days",days);
  213. map.put("lists",pNums);
  214. resp.setData(map);
  215. resp.setResult(Global.TRUE);
  216. return resp;
  217. }
  218. @RequestMapping(value = "tjData4")
  219. @ResponseBody
  220. public CommonResp tjData4(MesDeviceFault mesDeviceFault) {
  221. CommonResp<Map<String, Object>> resp = new CommonResp<>();
  222. Map<String, Object> map = MapUtils.newHashMap();
  223. mesDeviceFault.setStatus("0");
  224. List<String> days = CommonUitl.getBeforeDays(30);
  225. Collections.sort(days);
  226. List<Integer> pNums = new ArrayList<>();
  227. for(String day:days){
  228. String csdate = day + " 00:00:00";
  229. String cedate = day + " 23:59:59";
  230. mesDeviceFault.setStartDate_gte(CommonUitl.String2Date(csdate));
  231. mesDeviceFault.setStartDate_lte(CommonUitl.String2Date(cedate));
  232. List<MesDeviceFault> mdfs = mesDeviceFaultService.findList(mesDeviceFault);
  233. Integer mins = 0;
  234. for (MesDeviceFault mesDeviceFault1:mdfs){
  235. mins += mesDeviceFault1.getDuration();
  236. }
  237. pNums.add(mins);
  238. }
  239. map.put("days",days);
  240. map.put("lists",pNums);
  241. resp.setData(map);
  242. resp.setResult(Global.TRUE);
  243. return resp;
  244. }
  245. //mtbf mttr
  246. @RequestMapping(value = "tjData6")
  247. @ResponseBody
  248. public CommonResp tjData6(MesDeviceFault mesDeviceFault) {
  249. CommonResp<HashMap<String, List<Object>>> resp = new CommonResp<>();
  250. Date startDate = mesDeviceFault.getStartDate();
  251. Date endDate = mesDeviceFault.getEndDate();
  252. if (startDate == null && endDate == null) {
  253. LocalDateTime now = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0);
  254. endDate = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());
  255. startDate = Date.from(now.minusDays(7).atZone(ZoneId.systemDefault()).toInstant());
  256. } else if (startDate == null || endDate == null) {
  257. resp.setResult(Global.FALSE);
  258. resp.setMessage("开始时间和结束时间必须同时填写!");
  259. return resp;
  260. }
  261. MesDeviceFaultMaintain mesDeviceFaultMaintain = new MesDeviceFaultMaintain();
  262. mesDeviceFaultMaintain.setId(mesDeviceFault.getMaintainId());
  263. List<MesDeviceFaultMaintain> list = mesDeviceFaultMaintainService.findList(mesDeviceFaultMaintain);
  264. // Initialize JSON objects
  265. ObjectMapper mapper = new ObjectMapper();
  266. ObjectNode chartData = mapper.createObjectNode();
  267. ArrayNode xAxisData = mapper.createArrayNode();
  268. ArrayNode legendData = mapper.createArrayNode();
  269. ArrayNode seriesData = mapper.createArrayNode();
  270. legendData.add("mttr");
  271. legendData.add("mtbf");
  272. List<Double> mttrList = new ArrayList<>();
  273. List<Double> mtbfList = new ArrayList<>();
  274. for (MesDeviceFaultMaintain deviceFaultMaintain : list) {
  275. String id = deviceFaultMaintain.getId();
  276. MesDeviceFault mesDeviceFault1 = new MesDeviceFault();
  277. mesDeviceFault1.setMaintainId(id);
  278. mesDeviceFault1.getSqlMap().getWhere().and("a.start_date", QueryType.GTE, startDate);
  279. mesDeviceFault1.getSqlMap().getWhere().and("a.end_date", QueryType.LTE, endDate);
  280. List<MesDeviceFault> mesDeviceFaults = mesDeviceFaultService.findList(mesDeviceFault1);
  281. // Calculate MTTR
  282. int hour = 0;
  283. for (MesDeviceFault deviceFault : mesDeviceFaults) {
  284. Integer duration = deviceFault.getDuration();
  285. hour += duration / 60;
  286. }
  287. double mttr = (double) hour / mesDeviceFaults.size();
  288. mttrList.add(mttr);
  289. // Calculate MTBF
  290. Instant startInstant = startDate.toInstant();
  291. Instant endInstant = endDate.toInstant();
  292. double hours = Duration.between(startInstant, endInstant).toMillis() / (1000.0 * 60 * 60);
  293. double hourAll = hours * mesDeviceFaults.size();
  294. double mtbf = hourAll / mesDeviceFaults.size();
  295. mtbfList.add(mtbf);
  296. xAxisData.add(deviceFaultMaintain.getTitle());
  297. }
  298. // Create series data
  299. ObjectNode mttrSeries = mapper.createObjectNode();
  300. mttrSeries.put("name", "mttr");
  301. mttrSeries.set("data", mapper.valueToTree(mttrList));
  302. seriesData.add(mttrSeries);
  303. ObjectNode mtbfSeries = mapper.createObjectNode();
  304. mtbfSeries.put("name", "mtbf");
  305. mtbfSeries.set("data", mapper.valueToTree(mtbfList));
  306. seriesData.add(mtbfSeries);
  307. // Add all data to the root JSON object
  308. chartData.put("title", "Fault Analysis");
  309. chartData.set("xAxisData", xAxisData);
  310. chartData.set("legendData", legendData);
  311. chartData.set("seriesData", seriesData);
  312. HashMap<String, List<Object>> dataMap = new HashMap<>();
  313. dataMap.put("xAxisData", mapper.convertValue(xAxisData, List.class));
  314. dataMap.put("legendData", mapper.convertValue(legendData, List.class));
  315. dataMap.put("seriesData", mapper.convertValue(seriesData, List.class));
  316. System.out.println(dataMap.toString());
  317. resp.setData(dataMap);
  318. resp.setResult(Global.TRUE);
  319. return resp;
  320. }
  321. /**
  322. * 保存数据
  323. */
  324. @RequiresPermissions("mes:mesDeviceFault:edit")
  325. @PostMapping(value = "save")
  326. @ResponseBody
  327. public String save(@Validated MesDeviceFault mesDeviceFault) {
  328. if(mesDeviceFault.getStartDate() != null && mesDeviceFault.getEndDate() != null){
  329. if(mesDeviceFault.getStartDate().getTime() >= mesDeviceFault.getEndDate().getTime()){
  330. return renderResult(Global.FALSE, text("结束时间必须大于开始时间!"));
  331. }
  332. Integer interval = Math.round((mesDeviceFault.getEndDate().getTime() - mesDeviceFault.getStartDate().getTime())/60000);
  333. logger.info("duration:"+interval);
  334. mesDeviceFault.setDuration(interval);
  335. }else{
  336. mesDeviceFault.setDuration(0);
  337. }
  338. mesDeviceFaultService.save(mesDeviceFault);
  339. return renderResult(Global.TRUE, text("保存设备故障记录成功!"));
  340. }
  341. /**
  342. * 导出数据
  343. */
  344. @RequiresPermissions("mes:mesDeviceFault:view")
  345. @RequestMapping(value = "exportData")
  346. public void exportData(MesDeviceFault mesDeviceFault, HttpServletResponse response) {
  347. List<MesDeviceFault> list = mesDeviceFaultService.findList(mesDeviceFault);
  348. String fileName = "设备故障记录" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
  349. try(ExcelExport ee = new ExcelExport("设备故障记录", MesDeviceFault.class)){
  350. ee.setDataList(list).write(response, fileName);
  351. }
  352. }
  353. /**
  354. * 下载模板
  355. */
  356. @RequiresPermissions("mes:mesDeviceFault:view")
  357. @RequestMapping(value = "importTemplate")
  358. public void importTemplate(HttpServletResponse response) {
  359. MesDeviceFault mesDeviceFault = new MesDeviceFault();
  360. List<MesDeviceFault> list = ListUtils.newArrayList(mesDeviceFault);
  361. String fileName = "设备故障记录模板.xlsx";
  362. try(ExcelExport ee = new ExcelExport("设备故障记录", MesDeviceFault.class, Type.IMPORT)){
  363. ee.setDataList(list).write(response, fileName);
  364. }
  365. }
  366. /**
  367. * 导入数据
  368. */
  369. @ResponseBody
  370. @RequiresPermissions("mes:mesDeviceFault:edit")
  371. @PostMapping(value = "importData")
  372. public String importData(MultipartFile file) {
  373. try {
  374. String message = mesDeviceFaultService.importData(file);
  375. return renderResult(Global.TRUE, "posfull:"+message);
  376. } catch (Exception ex) {
  377. return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
  378. }
  379. }
  380. /**
  381. * 删除数据
  382. */
  383. @RequiresPermissions("mes:mesDeviceFault:edit")
  384. @RequestMapping(value = "delete")
  385. @ResponseBody
  386. public String delete(MesDeviceFault mesDeviceFault) {
  387. mesDeviceFaultService.delete(mesDeviceFault);
  388. return renderResult(Global.TRUE, text("删除设备故障记录成功!"));
  389. }
  390. }