feat: 增加导出照片异常统计到excel

dev
huangfeng 3 months ago
parent 3ff0f0c63b
commit eb794b3778

@ -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<TerminalPhotoSelectListModel> serviceBody = terminalPhotoService.getPhotoList(requestIp, vo);
if (serviceBody.getCode() == ServiceStatus.SUCCESS) {
TerminalPhotoSelectListModel model = serviceBody.getData();
List<StatTerm> 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 = "请求路径没有或页面跳转路径不对")})

@ -10,7 +10,7 @@ import java.util.List;
@Data
public class StatHour {
Integer hour;
String hour;
int base;
List<Date> timeList = new ArrayList<>();

@ -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<StatHour> 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;
}

@ -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<StatHour> 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;
}

@ -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<StatHour> 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;
}

@ -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<StatTerm> 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<StatTerm> dataList) {
// 表头
List<List<String>> heads = new ArrayList<>();
List<String> head = new ArrayList<>();
head.add("时间(小时)");
heads.add(head);
LinkedHashMap<String, List<String>> lineMap = new LinkedHashMap<>();
// 内容
List<List<String>> 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<String> 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<String> 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);
}
}

Loading…
Cancel
Save