diff --git a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalPhotoController.java b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalPhotoController.java index 4fc9493..2eef4a9 100644 --- a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalPhotoController.java +++ b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalPhotoController.java @@ -6,6 +6,7 @@ import com.shxy.xymanager_common.base.ResponseReult; import com.shxy.xymanager_common.bean.ServiceBody; import com.shxy.xymanager_common.bean.ServiceStatus; import com.shxy.xymanager_common.model.*; +import com.shxy.xymanager_common.util.EasyExcelUtil; import com.shxy.xymanager_common.util.xinyin.HeaderUtil; import com.shxy.xymanager_common.vo.*; import com.shxy.xymanager_service.service.TerminalPhotoService; @@ -19,6 +20,9 @@ import org.springframework.http.HttpHeaders; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; @@ -185,6 +189,28 @@ public class TerminalPhotoController extends BaseController { return the; } + @ApiOperation(value = "图片统计导出", notes = "图片统计导出接口", httpMethod = "POST") + @RequestMapping("/exportPhotoStat") + @Log(title = "图片统计导出", type = "导出") + public void exportPhotoStat(@RequestHeader HttpHeaders headers, + @RequestBody @Validated TerminalPhotoSelectVo vo, + HttpServletResponse response) throws Exception { + String requestIp = HeaderUtil.getRequestIp(headers); + vo.setPageindex(1); + vo.setPagesize(100000); + ServiceBody serviceBody = terminalPhotoService.getPhotoList(requestIp, vo); + if (serviceBody.getCode() == ServiceStatus.SUCCESS) { + TerminalPhotoSelectListModel model = serviceBody.getData(); + List result = this.buildPhotoStat(model.getList()); + + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + response.setHeader("Content-Disposition", "attachment; filename=" + + URLEncoder.encode("照片统计.xlsx", "UTF-8")); + EasyExcelUtil.exportPhotoStat(result, response.getOutputStream()); + } + } + @ApiOperation(value = "图片轮询", notes = "图片轮询接口", httpMethod = "POST") @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")}) diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatHour.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatHour.java index 5fedcb4..003fea5 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatHour.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatHour.java @@ -10,7 +10,7 @@ import java.util.List; @Data public class StatHour { - Integer hour; + String hour; int base; List timeList = new ArrayList<>(); diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatLeadPull.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatLeadPull.java index f050cf2..1b2ef0c 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatLeadPull.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatLeadPull.java @@ -1,10 +1,10 @@ package com.shxy.xymanager_common.model; import com.shxy.xymanager_common.entity.LeadPulls; +import com.shxy.xymanager_common.util.DateUtil; import lombok.Data; import java.util.ArrayList; -import java.util.Calendar; import java.util.List; @Data @@ -14,12 +14,10 @@ public class StatLeadPull { List hours = new ArrayList<>(); public void addLeadPull(LeadPulls leadPulls) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(leadPulls.getUpdateDate()); - int hour = calendar.get(Calendar.HOUR_OF_DAY); + String hour = DateUtil.format(leadPulls.getUpdateDate(), "yyyy-MM-dd HH"); StatHour the = null; for (StatHour item : hours) { - if (item.getHour().intValue() == hour) { + if (item.getHour().equals(hour)) { the = item; break; } diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatPreset.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatPreset.java index 2166242..5c855ca 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatPreset.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatPreset.java @@ -1,9 +1,9 @@ package com.shxy.xymanager_common.model; +import com.shxy.xymanager_common.util.DateUtil; import lombok.Data; import java.util.ArrayList; -import java.util.Calendar; import java.util.List; @Data @@ -12,12 +12,10 @@ public class StatPreset { List hours = new ArrayList<>(); public void addPhoto(TerminalPhotoSelectListModel.PhotoBean photo) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(photo.getPhotoTime()); - int hour = calendar.get(Calendar.HOUR_OF_DAY); + String hour = DateUtil.format(photo.getPhotoTime(), "yyyy-MM-dd HH"); StatHour the = null; for (StatHour item : hours) { - if (item.getHour().intValue() == hour) { + if (item.getHour().equals(hour)) { the = item; break; } diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatWeather.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatWeather.java index 298f594..96fbda2 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatWeather.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatWeather.java @@ -1,10 +1,10 @@ package com.shxy.xymanager_common.model; import com.shxy.xymanager_common.entity.Weathers; +import com.shxy.xymanager_common.util.DateUtil; import lombok.Data; import java.util.ArrayList; -import java.util.Calendar; import java.util.List; @Data @@ -14,12 +14,10 @@ public class StatWeather { List hours = new ArrayList<>(); public void addWeather(Weathers weather) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(weather.getUpdateDate()); - int hour = calendar.get(Calendar.HOUR_OF_DAY); + String hour = DateUtil.format(weather.getUpdateDate(), "yyyy-MM-dd HH"); StatHour the = null; for (StatHour item : hours) { - if (item.getHour().intValue() == hour) { + if (item.getHour().equals(hour)) { the = item; break; } diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/EasyExcelUtil.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/EasyExcelUtil.java index b9166c9..a3649c8 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/EasyExcelUtil.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/EasyExcelUtil.java @@ -1,12 +1,19 @@ package com.shxy.xymanager_common.util; import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder; import com.alibaba.excel.write.handler.RowWriteHandler; +import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.metadata.holder.WriteTableHolder; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; +import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy; +import com.shxy.xymanager_common.model.StatChannel; +import com.shxy.xymanager_common.model.StatHour; +import com.shxy.xymanager_common.model.StatPreset; +import com.shxy.xymanager_common.model.StatTerm; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -15,9 +22,9 @@ import org.apache.poi.ss.util.CellRangeAddress; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.OutputStream; import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.List; +import java.util.*; public class EasyExcelUtil implements RowWriteHandler { @@ -217,4 +224,59 @@ public class EasyExcelUtil implements RowWriteHandler { cellMerge.setMergeRuleColumIndex(mergeRuleColumIndex); return cellMerge; } + + public static void exportPhotoStat(List dataList, OutputStream output) { + // 导出Excel + ExcelWriter excelWriter = EasyExcel.write(output).inMemory(true) + .registerWriteHandler(new SimpleColumnWidthStyleStrategy(24)).build(); + + writerSheet(excelWriter, 0, dataList); + + excelWriter.finish(); + } + + private static void writerSheet(ExcelWriter excelWriter, int idx, List dataList) { + // 表头 + List> heads = new ArrayList<>(); + List head = new ArrayList<>(); + head.add("时间(小时)"); + heads.add(head); + + LinkedHashMap> lineMap = new LinkedHashMap<>(); + // 内容 + List> list = new ArrayList<>(); + for (StatTerm term : dataList) { + for (StatChannel channel : term.getChannels()) { + for (StatPreset preset : channel.getPresets()) { + head = new ArrayList<>(); + String name = term.getCmdid() + "-" + channel.getChannelId() + "-" + preset.getPresetId(); + head.add(name); + heads.add(head); + for (StatHour hour : preset.getHours()) { + List line = lineMap.get(hour.getHour()); + if (line == null) { + line = new ArrayList<>(); + lineMap.put(hour.getHour(), line); + line.add(String.valueOf(hour.getHour())); + } + if (hour.isWrong()) { + List dateList = new ArrayList<>(); + for (Date date : hour.getTimeList()) { + dateList.add(DateUtil.format(date)); + } + line.add(String.join(System.lineSeparator(), dateList)); + } else { + line.add(hour.getTotal() + "张"); + } + } + } + } + } + list.addAll(lineMap.values()); + + WriteSheet writeSheet = EasyExcel.writerSheet(idx, "照片统计") + .head(heads) + .build(); + excelWriter.write(list, writeSheet); + } }