package com.moral.controller; import java.io.OutputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.moral.service.*; import com.moral.util.DatesUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.time.DateUtils; 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.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 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; @Resource private SensorService sensorService; @Resource private HistoryService historyService; @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][]; System.out.println(list.toString()); 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("O3Excel") public ResultBean getO3ExcelReport(HttpServletRequest request, HttpServletResponse response) throws Exception { Map parameters = getParametersStartingWith(request, null); List> maxList=historyService.getO3AVG(parameters); String[][] exportColumn = new String[2][]; exportColumn[0] = new String[]{"时间", "20", "time"}; String name = "O3浓度"; String key = "e15"; String unit = "ug/m³"; if (!ObjectUtils.isEmpty(unit) && !"null".equals(unit)) { name += "-" + unit; } exportColumn[1] = new String[]{name, "10", key}; OutputStream outputStream = exportData(response, "Excel数据", maxList, exportColumn); outputStream.flush(); outputStream.close(); return new ResultBean(true); } @GetMapping("newExcel") public ResultBean getNExcelReport(HttpServletRequest request, HttpServletResponse response) throws Exception { Map parameters = getParametersStartingWith(request, null); String type = parameters.get("type").toString(); String time = parameters.get("time").toString(); String timeb; if (parameters.get("timeb") == null) { timeb = time; }else { timeb=parameters.get("timeb").toString(); } String[] endTimes = timeb.split("-"); String dateFormat = ""; String beginTime = ""; String endTime = ""; List monthList1 = new ArrayList<>(); Collections.addAll(monthList1,"01","03","05","07","08","10","12"); List monthList2 = new ArrayList<>(); Collections.addAll(monthList2,"04","06","09","11"); Integer year = Integer.valueOf(endTimes[0]); int i = 0; if (type.equals("year")) { dateFormat = "yyyy-MM"; beginTime = time + "-01"; endTime = timeb + "-12"; i = Calendar.MONTH; } else if (type.equals("month")) { dateFormat = "yyyy-MM-dd"; beginTime = time + "-01"; i = Calendar.DAY_OF_MONTH; if (monthList1.contains(endTimes[1])) { endTime = timeb + "-31"; } else if (monthList2.contains(endTimes[1])) { endTime = timeb + "-30"; } else { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { endTime = timeb + "-29"; } else { endTime = timeb + "-28"; } } } else if (type.equals("day")) { dateFormat = "yyyy-MM-dd HH"; beginTime = time + " 00"; endTime = timeb + " 23"; i = Calendar.HOUR_OF_DAY; }else if(type.equals("hour")){ dateFormat="yyyy-MM-dd HH:mm"; beginTime=time+":00:00"; endTime=timeb+":59:00"; i=Calendar.MINUTE; } SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(beginTime)); ArrayList> resultList = new ArrayList<>(); for (long d = cal.getTimeInMillis(); d <= sdf.parse(endTime).getTime(); cal.set(i, cal.get(i) + 1), d = cal.getTimeInMillis()) { String format = sdf.format(d); Map map = new HashMap<>(); map.put("time", format); resultList.add(map); } if(type.equals("year")){ SimpleDateFormat sd = new SimpleDateFormat("yyyy"); Date dt = sd.parse(timeb); Calendar calendar = Calendar.getInstance(); calendar.setTime(dt); calendar.add(Calendar.YEAR, 1); Date dt1 = calendar.getTime(); timeb = sd.format(dt1); }else if(type.equals("month")){ SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM"); Date dt = sd.parse(timeb); Calendar calendar = Calendar.getInstance(); calendar.setTime(dt); calendar.add(Calendar.MONTH, 1); Date dt1 = calendar.getTime(); timeb = sd.format(dt1); }else if(type.equals("day")){ SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); Date dt = sd.parse(timeb); Calendar calendar = Calendar.getInstance(); calendar.setTime(dt); calendar.add(Calendar.DAY_OF_MONTH, 1); Date dt1 = calendar.getTime(); timeb = sd.format(dt1); }else if(type.equals("hour")){ SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH"); Date dt = sd.parse(timeb); Calendar calendar = Calendar.getInstance(); calendar.setTime(dt); calendar.add(Calendar.HOUR_OF_DAY, 1); Date dt1 = calendar.getTime(); timeb = sd.format(dt1); } parameters.put("timeb",timeb); List> list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); ArrayList sensorKeys = (ArrayList)parameters.get("sensorKeys"); for (Map map : list) { for (String sensorKey : sensorKeys) { if(map.get(sensorKey)==null){ map.put(sensorKey,""); } } } for (Map map : resultList) { for (Map resultMap : list) { if (resultMap.get("time").equals(map.get("time"))) { map.putAll(resultMap); } } } List sensors = (List) parameters.get("sensors");//[e1,e2] 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数据", resultList, 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); System.out.println(parameters.toString()); ParameterUtils.getTimeType4Time(parameters); String sensorsInfo = parameters.get("sensors").toString(); String sensorsInfoNew = StringUtils.strip(sensorsInfo, "[]"); String[] sensorsStr = sensorsInfoNew.split(","); List> sensorInfos = sensorService.listSensorInfos(sensorsStr); parameters.put("sensorKeys", sensorInfos.get(0)); 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 = sensorService.listExcelDatas(sensorInfos, list); if (!CollectionUtils.isEmpty(sheets)) { ExcelWriter writer = new ExcelWriter(false, sensorInfos.get(1).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(sensorInfos.get(1).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); } }