package com.moral.controller; import java.io.OutputStream; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.collections.CollectionUtils; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.alibaba.fastjson.JSONObject; import com.moral.common.bean.ResultBean; import com.moral.common.util.ParameterUtils; import com.moral.common.util.WebUtils; import com.moral.entity.Device; import com.moral.entity.MonitorPoint; import com.moral.entity.charts.LineChartCriteria; import com.moral.security.auth.JwtAuthenticationToken; import com.moral.security.model.UserContext; import com.moral.service.AlarmDailyService; import com.moral.service.HistoryDailyService; import com.moral.service.HistoryMinutelyService; import com.moral.service.MonitorPointService; import cn.hutool.core.io.IoUtil; import cn.hutool.poi.excel.ExcelWriter; import static com.moral.common.util.ExportExcelUtils.exportData; import static com.moral.common.util.WebUtils.getParametersStartingWith; @SuppressWarnings({"unchecked", "rawtypes"}) @RestController @RequestMapping("report") @CrossOrigin(origins = "*", maxAge = 3600) public class ReportController { @Resource private HistoryMinutelyService historyMinutelyService; @Resource private AlarmDailyService alarmDailyService; @Resource private MonitorPointService monitorPointService; @GetMapping("compare") public ResultBean> getCompareReport(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); Map demo = historyMinutelyService.getCompareReport(parameters); return new ResultBean>(demo); } @PostMapping("line-chart") public ResultBean>>> lineChart(@RequestBody LineChartCriteria lineChartCriteria) { return new ResultBean<>(historyMinutelyService.queryLineChartDateByCrieria(lineChartCriteria)); } @GetMapping("excel") public ResultBean getExcelReport(HttpServletRequest request, HttpServletResponse response) throws Exception { Map parameters = getParametersStartingWith(request, null); List> list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); List sensors = (List) parameters.get("sensors"); String[][] exportColumn = new String[sensors.size() + 1][]; exportColumn[0] = new String[]{"时间", "20", "time"}; for (int index = 0; index < sensors.size(); index++) { String[] split = sensors.get(index).split("-"); String name = split[1]; String key = split[0]; String unit = split[2]; if (!ObjectUtils.isEmpty(unit) && !"null".equals(unit)) { name += "-" + unit; } exportColumn[index + 1] = new String[]{name, "10", key}; } OutputStream outputStream = exportData(response, "Excel数据", list, exportColumn); outputStream.flush(); outputStream.close(); return new ResultBean(true); } @GetMapping("pie") public ResultBean> getPieData(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); Map pieData = alarmDailyService.getPieData(parameters); return new ResultBean>(pieData); } @GetMapping("alarm-year") public ResultBean> getAlarmDataByYear(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); List result = alarmDailyService.getAlarmDataByYear(parameters); return new ResultBean>(result); } @GetMapping("alarm-month") public ResultBean>> getAlarmDataByMonth(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); List> result = alarmDailyService.getAlarmDataByMonth(parameters); return new ResultBean>>(result); } @Resource private HistoryDailyService historyDailyService; @GetMapping("emissions") public ResultBean>> getemissionsData(HttpServletRequest request, JwtAuthenticationToken token) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); UserContext userContext = token.getPrincipal(); Integer orgId = userContext.getOrganizationId(); parameters.put("orgId", orgId); List> result = historyDailyService.getEmissionsData(parameters); return new ResultBean>>(result); } @GetMapping("overproof") public ResultBean getOverproofData(HttpServletRequest request, JwtAuthenticationToken token) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); UserContext userContext = token.getPrincipal(); Integer orgId = userContext.getOrganizationId(); parameters.put("orgId", orgId); //List> result = null; Map result = historyDailyService.getOverproofData(parameters); return new ResultBean(result); } @GetMapping("custom-made-excel") public ResultBean getCustomMadeExcelReport(HttpServletRequest request, HttpServletResponse response) throws Exception { Map parameters = getParametersStartingWith(request, null); ParameterUtils.getTimeType4Time(parameters); String sensorsInfo = parameters.get("sensors").toString(); String[] sensorsStr = sensorsInfo.split(","); List sensorKeys = new ArrayList<>(); List sensorKeysNames = new ArrayList<>(); List sensorKeysUnits = new ArrayList<>(); for (int index = 0; index < sensorsStr.length; index++) { String[] split = sensorsStr[index].split("-"); String key; if (index == 0) { key = split[0].replace("\"", "").substring(1); } else { key = split[0].replace("\"", ""); } String name = split[1].replace("\"", ""); String Unit = split[2].replace("\"", ""); sensorKeys.add(key); sensorKeysNames.add(name); sensorKeysUnits.add(Unit); } parameters.put("sensorKeys", sensorKeys); List macList = new ArrayList<>(); List monitorPoints = monitorPointService.getMonitorPointsAndDevicesByRegion(parameters); for (MonitorPoint m : monitorPoints) { for (Device d : m.getDevices()) { macList.add(d.getMac()); } } parameters.put("macs", macList); List> list = new ArrayList<>(); if (!CollectionUtils.isEmpty(macList)) { list = historyMinutelyService.getDevicesSensorsAvgDataToExcel(parameters); } List>> sheets = new ArrayList<>(); for (int i = 0; i < sensorKeys.size(); i++) { List> sheet = new ArrayList<>(); for (int j = 0; j < list.size(); j++) { Map data = new LinkedHashMap<>(); for (Map.Entry kv : list.get(j).entrySet()) { if ("monitorPointName".equals(kv.getKey())) { data.put("站点名称(单位:" + sensorKeysUnits.get(i) + ")", kv.getValue()); } else if ("name".equals(kv.getKey())) { data.put("设备名称", kv.getValue()); } else { String sensorsValue = kv.getValue().toString(); JSONObject jsonObject = JSONObject.parseObject(sensorsValue); if (jsonObject != null) { List sensorsValueList = (List) jsonObject.get(sensorKeys.get(i)); if (sensorsValueList != null) { data.put(kv.getKey(), sensorsValueList.get(0)); } else { data.put(kv.getKey(), ""); } } else { data.put(kv.getKey(), ""); } } } sheet.add(data); } sheets.add(sheet); } if (!CollectionUtils.isEmpty(sheets)) { ExcelWriter writer = new ExcelWriter(false, sensorKeysNames.get(0)); writer.write(sheets.get(0), true); writer.autoSizeColumnAll(); writer.setColumnWidth(0, 25); writer.setColumnWidth(1, 25); if (sheets.size() >= 2) { for (int i = 1; i < sheets.size(); i++) { writer.setSheet(sensorKeysNames.get(i)); writer.write(sheets.get(i), true); writer.autoSizeColumnAll(); writer.setColumnWidth(0, 25); writer.setColumnWidth(1, 25); } } response.setContentType("application/vnd.ms-excel;charset=utf-8"); String codedFileName = java.net.URLEncoder.encode("Excel数据", "UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + codedFileName + ".xls"); ServletOutputStream out = response.getOutputStream(); writer.flush(out, true); // 关闭writer,释放内存 writer.close(); //此处记得关闭输出Servlet流 IoUtil.close(out); } return new ResultBean<>(true); } }