package org.jeecg.modules.lims.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.DateUtils; import org.jeecg.modules.lims.api.JeecgSystemClient; import org.jeecg.modules.lims.entity.*; import org.jeecg.modules.lims.service.*; import org.jeecg.modules.lims.vo.LimsInsUseStatVo; import org.jeecg.modules.lims.vo.LimsInspectionRecordVo; import org.jeecgframework.poi.excel.def.MapExcelConstants; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.jeecgframework.poi.excel.view.JeecgMapExcelView; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** * 数据统计 */ @RestController @RequestMapping("/lims/stat") @Slf4j public class LimsStatController { @Autowired private ILimsUsageRecordService limsUsageRecordService; @Autowired private ILimsInstrumentService instrumentService; @Autowired private JeecgSystemClient jeecgSystemClient; @Autowired private ILimsInspectionService limsInspectionService; @Autowired private ILimsInspectionDetailService detailService; @Autowired private ILimsAppointmentOptionService appointmentOptionService; @Autowired private ILimsRepairRecordService repairRecordService; @GetMapping(value = "/insUse") public Result>> queryInstrumentUse(LimsUsageRecord limsUsageRecord, HttpServletRequest req) { Result>> result = new Result<>(); List> res = new ArrayList<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(limsUsageRecord, req.getParameterMap()); //根据自定义使用状态查询 if (limsUsageRecord.getUseType() != null && limsUsageRecord.getUseType() == 1) { queryWrapper.lambda().isNull(LimsUsageRecord::getAppointment); } else if (limsUsageRecord.getUseType() != null && limsUsageRecord.getUseType() == 2) { queryWrapper.lambda().isNotNull(LimsUsageRecord::getAppointment); } List list = limsUsageRecordService.list(queryWrapper); //过滤未完成数据 List useList = list.stream().filter(item -> item.getStatus() != null && item.getStatus() == 2).collect(Collectors.toList()); useList.stream().forEach(i -> { //计算使用时间 calcUseTime(i); //查询设备 LimsInstrument instrument = instrumentService.getById(i.getInstrument()); i.setLimsInstrument(instrument); //是否预约使用 if (i.getAppointment() != null) { //设置为预约使用 i.setUseType(2); } }); //过滤没有使用时间的异常数据 useList = useList.stream().filter(item -> item.getSecond() > 0).collect(Collectors.toList()); //根据设备分组 Map> gList = useList.stream().collect(Collectors.groupingBy(i -> i.getInstrument())); gList.forEach((insName, insList) -> { Map map = new HashMap<>(); map.put("id", insName); //设备名称 map.put("instrument", insList.get(0).getLimsInstrument().getName()); //预约使用总数 long appoUse = insList.stream().filter(i -> i.getUseType() != null && i.getUseType() == 2).count(); map.put("appoUse", appoUse); //临时使用 map.put("tempUse", insList.size() - appoUse); //预约使用时间 Double appoUseTime = insList.stream().filter(i -> i.getUseType() != null && i.getUseType() == 2).mapToDouble(LimsUsageRecord::getSecond).sum(); map.put("appoUseTime", appoUseTime); map.put("appoUseTimeStr", DateUtils.secToTime(appoUseTime.intValue())); //临时使用时间 Double tempUseTime = insList.stream().filter(i -> i.getUseType() == null).mapToDouble(LimsUsageRecord::getSecond).sum(); map.put("tempUseTime", tempUseTime); map.put("tempUseTimeStr", DateUtils.secToTime(tempUseTime.intValue())); //总使用时间 Double useTime = insList.stream().mapToDouble(LimsUsageRecord::getSecond).sum(); map.put("useTime", useTime); map.put("useTimeStr", DateUtils.secToTime(useTime.intValue())); res.add(map); }); result.setResult(res); return result.success("查询成功!"); } @GetMapping(value = "/userUse") public Result>> queryUserUse(LimsUsageRecord limsUsageRecord, HttpServletRequest req) { Result>> result = new Result<>(); List> res = new ArrayList<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(limsUsageRecord, req.getParameterMap()); //根据自定义使用状态查询 if (limsUsageRecord.getUseType() != null && limsUsageRecord.getUseType() == 1) { queryWrapper.lambda().isNull(LimsUsageRecord::getAppointment); } else if (limsUsageRecord.getUseType() != null && limsUsageRecord.getUseType() == 2) { queryWrapper.lambda().isNotNull(LimsUsageRecord::getAppointment); } List list = limsUsageRecordService.list(queryWrapper); //过滤未完成数据 list = list.stream().filter(item -> item.getStatus() != null && item.getStatus() == 2).collect(Collectors.toList()); list.stream().forEach(i -> { //计算使用时间 calcUseTime(i); //查询设备 LimsInstrument instrument = instrumentService.getById(i.getInstrument()); i.setLimsInstrument(instrument); i.setInstrument(instrument.getName()); //是否预约使用 if (i.getAppointment() != null) { //设置为预约使用 i.setUseType(2); } SysUser user = jeecgSystemClient.queryByUserName(i.getCreateBy()).getResult(); //设置用户名为真实姓名 if (!StringUtils.isEmpty(user.getRealname())) { i.setCreateBy(user.getRealname()); } }); //列出所有仪器 Map> allInsMap = list.stream().collect(Collectors.groupingBy(i -> i.getInstrument())); //根据用户、设备分组 Map>> userMap = list.stream().collect(Collectors.groupingBy(i -> i.getCreateBy(), Collectors.groupingBy(t -> t.getInstrument()))); AtomicReference id = new AtomicReference<>(0); //制作table colmuns List> colmuns = new ArrayList<>(); allInsMap.forEach((name, alist) -> { Map map = new HashMap<>(); map.put("name", name); map.put("useTime", name + "time"); colmuns.add(map); }); userMap.forEach((user, insMap) -> { Map item = new HashMap<>(); item.put("id", id.getAndSet(id.get() + 1)); item.put("user", user); allInsMap.forEach((allIns, allInsValue) -> { // insMap.forEach((ins,ilist)->{ // }); if (insMap.containsKey(allIns)) { Double sum = insMap.get(allIns).stream().mapToDouble(LimsUsageRecord::getSecond).sum(); item.put(allIns, sum); String useTime = DateUtils.secToTime(sum.intValue()); item.put(allIns + "time", useTime); } else { item.put(allIns, 0); item.put(allIns + "time", 0); } }); res.add(item); }); result.setResult(res); result.setResultExt(colmuns); return result; } @GetMapping(value = "/spot") public Result querySpotList(LimsInspection limsInspection, HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(limsInspection, req.getParameterMap()); List pageList = limsInspectionService.list(queryWrapper); List listVo = new ArrayList<>(); pageList.stream().forEach(i -> { LimsInspectionRecordVo vo = new LimsInspectionRecordVo(); BeanUtils.copyProperties(i, vo); listVo.add(vo); }); Set ids = listVo.stream().map(LimsInspectionRecordVo::getId).collect(Collectors.toSet()); Set instrumentIds = listVo.stream().map(LimsInspectionRecordVo::getInstrumentId).collect(Collectors.toSet()); if (ids != null && ids.size() > 0) { List list = detailService.list(new LambdaQueryWrapper().in(LimsInspectionDetail::getPid, ids)); Map> listMap = list.stream().collect(Collectors.groupingBy(LimsInspectionDetail::getPid, Collectors.toList())); listVo.stream().map(item -> { item.setItems(listMap.get(item.getId())); //计算点检结果 List items = item.getItems(); if (items != null && items.size() > 0) { int result = 1; for (int i = 0; i < items.size(); i++) { LimsInspectionDetail detail = items.get(i); if (detail.getResult() == null || detail.getResult() == 0) { result = 0; } } item.setResult(result); } else { item.setResult(0); } return item; }).collect(Collectors.toList()); } //查询设备名称 if (instrumentIds != null && instrumentIds.size() > 0) { List list = instrumentService.list(new LambdaQueryWrapper().in(LimsInstrument::getId, instrumentIds)); Map map = list.stream().collect(Collectors.toMap(LimsInstrument::getId, LimsInstrument::getName)); listVo.stream().map(item -> { item.setInstrument(map.get(item.getInstrumentId())); return item; }).collect(Collectors.toList()); } //按照设备分组,统计设备点检成功和失败次数 Map> insMap = listVo.stream().collect(Collectors.groupingBy(i -> i.getInstrument())); List> result = new ArrayList<>(); AtomicInteger id = new AtomicInteger(); insMap.forEach((k, v) -> { Map map = new HashMap<>(); map.put("instrument", k); Long count = v.stream().filter(i -> i.getResult() != null && i.getResult() == 1).count(); map.put("ok", count.intValue()); map.put("un", v.size() - count); map.put("total", count); map.put("id", id.getAndIncrement()); result.add(map); }); return Result.OK(result); } @GetMapping(value = "/repair") public Result queryPageList(LimsRepairRecord limsRepairRecord, HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(limsRepairRecord, req.getParameterMap()); List pageList = repairRecordService.list(queryWrapper); Set instrumentIds = pageList.stream().map(LimsRepairRecord::getInstrument).collect(Collectors.toSet()); if (instrumentIds != null && instrumentIds.size() > 0) { LambdaUpdateWrapper qw = new LambdaUpdateWrapper<>(); qw.in(LimsInstrument::getId, instrumentIds); List list = instrumentService.list(qw); Map instrments = list.stream().collect(Collectors.toMap(item -> item.getId(), item -> item.getName())); for (LimsRepairRecord r : pageList) { r.setInstrumentName(instrments.get(r.getInstrument())); //设置报修人部门 /* List departs = jeecgSystemClient.getUserDepartsListByName(r.getCreateBy()).getResult(); if(departs!=null && departs.size() > 0){ String depart = departs.get(0).getTitle(); r.setDepart(depart); }*/ } } Map> collect = pageList.stream().collect(Collectors.groupingBy(i -> i.getInstrumentName())); List> result = new ArrayList<>(); AtomicInteger id = new AtomicInteger(); collect.forEach((k, v) -> { Map map = new HashMap<>(); map.put("instrument", k); map.put("total", v.size()); map.put("id", id.getAndIncrement()); result.add(map); }); return Result.OK(result); } /** * 小数点保留两位 * * @param t * @return */ private double scale(double t) { BigDecimal bigDecimal = new BigDecimal(t); double useTime = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); return useTime; } /** * 计算使用时间 */ private void calcUseTime(LimsUsageRecord item) { if (item.getCreateTime() != null && item.getUpdateTime() != null) { //使用时间 long smillis = DateUtils.getMillis(item.getCreateTime()); long emillis = DateUtils.getMillis(item.getUpdateTime()); int sec = (int) ((emillis - smillis) / 1000); String useTime = DateUtils.secToTime(sec); item.setUseTimeStr(useTime); double t = sec / 60.0; BigDecimal bigDecimal = new BigDecimal(t); double time = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); item.setSecond(sec); } } @RequestMapping(value = "/exportInsXls") public ModelAndView exportInsXls(HttpServletRequest request, LimsUsageRecord limsUsageRecord) { ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // Step.2 获取导出数据 QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(limsUsageRecord, request.getParameterMap()); //根据自定义使用状态查询 if (limsUsageRecord.getUseType() != null && limsUsageRecord.getUseType() == 1) { queryWrapper.lambda().isNull(LimsUsageRecord::getAppointment); } else if (limsUsageRecord.getUseType() != null && limsUsageRecord.getUseType() == 2) { queryWrapper.lambda().isNotNull(LimsUsageRecord::getAppointment); } List list = limsUsageRecordService.list(queryWrapper); //过滤未完成数据 List useList = list.stream().filter(item -> item.getStatus() != null && item.getStatus() == 2).collect(Collectors.toList()); useList.stream().forEach(i -> { //计算使用时间 calcUseTime(i); //查询设备 LimsInstrument instrument = instrumentService.getById(i.getInstrument()); i.setLimsInstrument(instrument); //是否预约使用 if (i.getAppointment() != null) { //设置为预约使用 i.setUseType(2); } }); //过滤没有使用时间的异常数据 useList = useList.stream().filter(item -> item.getSecond() > 0).collect(Collectors.toList()); //根据设备分组 Map> gList = useList.stream().collect(Collectors.groupingBy(i -> i.getInstrument())); List result = new ArrayList<>(); gList.forEach((insName, insList) -> { LimsInsUseStatVo vo = new LimsInsUseStatVo(); Map map = new HashMap<>(); map.put("id", insName); vo.setInstrument(insList.get(0).getLimsInstrument().getName()); //设备名称 map.put("instrument", insList.get(0).getLimsInstrument().getName()); //预约使用总数 Long appoUse = insList.stream().filter(i -> i.getUseType() != null && i.getUseType() == 2).count(); map.put("appoUse", appoUse); vo.setAppoUse(appoUse.intValue()); //临时使用 map.put("tempUse", insList.size() - appoUse); vo.setTempUse((int) (insList.size() - appoUse)); //预约使用时间 Double appoUseTime = insList.stream().filter(i -> i.getUseType() != null && i.getUseType() == 2).mapToDouble(LimsUsageRecord::getSecond).sum(); map.put("appoUseTime", appoUseTime); map.put("appoUseTimeStr", DateUtils.secToTime(appoUseTime.intValue())); vo.setAppoUseTime(DateUtils.secToTime(appoUseTime.intValue())); //临时使用时间 Double tempUseTime = insList.stream().filter(i -> i.getUseType() == null).mapToDouble(LimsUsageRecord::getSecond).sum(); map.put("tempUseTime", tempUseTime); map.put("tempUseTimeStr", DateUtils.secToTime(tempUseTime.intValue())); vo.setTempUseTime(DateUtils.secToTime(tempUseTime.intValue())); //总使用时间 Double useTime = insList.stream().mapToDouble(LimsUsageRecord::getSecond).sum(); map.put("useTime", useTime); map.put("useTimeStr", DateUtils.secToTime(useTime.intValue())); vo.setUseTime(DateUtils.secToTime(useTime.intValue())); result.add(vo); }); String title = "仪器使用统计"; //导出文件名称 mv.addObject(NormalExcelConstants.FILE_NAME, title); //注解对象Class mv.addObject(NormalExcelConstants.CLASS, LimsInsUseStatVo.class); //自定义表格参数 ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); mv.addObject(NormalExcelConstants.PARAMS, exportParams); //导出数据列表 mv.addObject(NormalExcelConstants.DATA_LIST, result); return mv; } @RequestMapping(value = "/exportUserXls") public ModelAndView exportUserXls(HttpServletRequest req, LimsUsageRecord limsUsageRecord) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // Step.2 获取导出数据 List> res = new ArrayList<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(limsUsageRecord, req.getParameterMap()); //根据自定义使用状态查询 if (limsUsageRecord.getUseType() != null && limsUsageRecord.getUseType() == 1) { queryWrapper.lambda().isNull(LimsUsageRecord::getAppointment); } else if (limsUsageRecord.getUseType() != null && limsUsageRecord.getUseType() == 2) { queryWrapper.lambda().isNotNull(LimsUsageRecord::getAppointment); } List list = limsUsageRecordService.list(queryWrapper); //过滤未完成数据 list = list.stream().filter(item -> item.getStatus() != null && item.getStatus() == 2).collect(Collectors.toList()); list.stream().forEach(i -> { //计算使用时间 calcUseTime(i); //查询设备 LimsInstrument instrument = instrumentService.getById(i.getInstrument()); i.setLimsInstrument(instrument); i.setInstrument(instrument.getName()); //是否预约使用 if (i.getAppointment() != null) { //设置为预约使用 i.setUseType(2); } SysUser user = jeecgSystemClient.queryByUserName(i.getCreateBy()).getResult(); //设置用户名为真实姓名 if (!StringUtils.isEmpty(user.getRealname())) { i.setCreateBy(user.getRealname()); } }); //列出所有仪器 Map> allInsMap = list.stream().collect(Collectors.groupingBy(i -> i.getInstrument())); //根据用户、设备分组 Map>> userMap = list.stream().collect(Collectors.groupingBy(i -> i.getCreateBy(), Collectors.groupingBy(t -> t.getInstrument()))); AtomicReference id = new AtomicReference<>(0); //制作table colmuns List> colmuns = new ArrayList<>(); allInsMap.forEach((name, alist) -> { Map map = new HashMap<>(); map.put("name", name); map.put("useTime", name + "time"); colmuns.add(map); }); // 设置表头样式 List filedsList = new ArrayList<>(); filedsList.add(new ExcelExportEntity("姓名", "user")); userMap.forEach((user, insMap) -> { Map item = new HashMap<>(); item.put("id", id.getAndSet(id.get() + 1)); item.put("user", user); allInsMap.forEach((allIns, allInsValue) -> { // insMap.forEach((ins,ilist)->{ // }); if (insMap.containsKey(allIns)) { Double sum = insMap.get(allIns).stream().mapToDouble(LimsUsageRecord::getSecond).sum(); item.put(allIns, sum); String useTime = DateUtils.secToTime(sum.intValue()); item.put(allIns + "time", useTime); filedsList.add(new ExcelExportEntity(allIns, allIns+ "time")); } else { item.put(allIns, 0); item.put(allIns + "time", 0); } }); res.add(item); }); String title = "用户使用统计"; ModelAndView mv = new ModelAndView(new JeecgMapExcelView()); //导出文件名称 mv.addObject(MapExcelConstants.FILE_NAME, title); //自定义表格参数 ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); mv.addObject(NormalExcelConstants.PARAMS, exportParams); //导出数据列表 mv.addObject(MapExcelConstants.MAP_LIST, res); mv.addObject(MapExcelConstants.ENTITY_LIST, filedsList); return mv; } @RequestMapping(value = "/exportSpotXls") public ModelAndView exportSpotXls(LimsInspection limsInspection, HttpServletRequest req) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // Step.2 获取导出数据 QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(limsInspection, req.getParameterMap()); List pageList = limsInspectionService.list(queryWrapper); List listVo = new ArrayList<>(); pageList.stream().forEach(i -> { LimsInspectionRecordVo vo = new LimsInspectionRecordVo(); BeanUtils.copyProperties(i, vo); listVo.add(vo); }); Set ids = listVo.stream().map(LimsInspectionRecordVo::getId).collect(Collectors.toSet()); Set instrumentIds = listVo.stream().map(LimsInspectionRecordVo::getInstrumentId).collect(Collectors.toSet()); if (ids != null && ids.size() > 0) { List list = detailService.list(new LambdaQueryWrapper().in(LimsInspectionDetail::getPid, ids)); Map> listMap = list.stream().collect(Collectors.groupingBy(LimsInspectionDetail::getPid, Collectors.toList())); listVo.stream().map(item -> { item.setItems(listMap.get(item.getId())); //计算点检结果 List items = item.getItems(); if (items != null && items.size() > 0) { int result = 1; for (int i = 0; i < items.size(); i++) { LimsInspectionDetail detail = items.get(i); if (detail.getResult() == null || detail.getResult() == 0) { result = 0; } } item.setResult(result); } else { item.setResult(0); } return item; }).collect(Collectors.toList()); } //查询设备名称 if (instrumentIds != null && instrumentIds.size() > 0) { List list = instrumentService.list(new LambdaQueryWrapper().in(LimsInstrument::getId, instrumentIds)); Map map = list.stream().collect(Collectors.toMap(LimsInstrument::getId, LimsInstrument::getName)); listVo.stream().map(item -> { item.setInstrument(map.get(item.getInstrumentId())); return item; }).collect(Collectors.toList()); } //按照设备分组,统计设备点检成功和失败次数 Map> insMap = listVo.stream().collect(Collectors.groupingBy(i -> i.getInstrument())); List> result = new ArrayList<>(); AtomicInteger id = new AtomicInteger(); insMap.forEach((k, v) -> { Map map = new HashMap<>(); map.put("instrument", k); Long count = v.stream().filter(i -> i.getResult() != null && i.getResult() == 1).count(); map.put("ok", count.intValue()); map.put("un", v.size() - count); map.put("total", count); map.put("id", id.getAndIncrement()); result.add(map); }); String title = "点检统计"; ModelAndView mv = new ModelAndView(new JeecgMapExcelView()); //导出文件名称 mv.addObject(MapExcelConstants.FILE_NAME, title); //自定义表格参数 ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); mv.addObject(NormalExcelConstants.PARAMS, exportParams); //导出数据列表 mv.addObject(MapExcelConstants.MAP_LIST, result); // 设置表头样式 List filedsList = new ArrayList<>(); filedsList.add(new ExcelExportEntity("仪器", "instrument")); filedsList.add(new ExcelExportEntity("点检总数", "total")); filedsList.add(new ExcelExportEntity("点检正常", "ok")); filedsList.add(new ExcelExportEntity("点检异常", "un")); mv.addObject(MapExcelConstants.ENTITY_LIST, filedsList); return mv; } @RequestMapping(value = "/exportRepairXls") public ModelAndView exportRepairXls(LimsRepairRecord limsRepairRecord, HttpServletRequest req) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // Step.2 获取导出数据 QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(limsRepairRecord, req.getParameterMap()); List pageList = repairRecordService.list(queryWrapper); Set instrumentIds = pageList.stream().map(LimsRepairRecord::getInstrument).collect(Collectors.toSet()); if (instrumentIds != null && instrumentIds.size() > 0) { LambdaUpdateWrapper qw = new LambdaUpdateWrapper<>(); qw.in(LimsInstrument::getId, instrumentIds); List list = instrumentService.list(qw); Map instrments = list.stream().collect(Collectors.toMap(item -> item.getId(), item -> item.getName())); for (LimsRepairRecord r : pageList) { r.setInstrumentName(instrments.get(r.getInstrument())); //设置报修人部门 /* List departs = jeecgSystemClient.getUserDepartsListByName(r.getCreateBy()).getResult(); if(departs!=null && departs.size() > 0){ String depart = departs.get(0).getTitle(); r.setDepart(depart); }*/ } } Map> collect = pageList.stream().collect(Collectors.groupingBy(i -> i.getInstrumentName())); List> result = new ArrayList<>(); AtomicInteger id = new AtomicInteger(); collect.forEach((k, v) -> { Map map = new HashMap<>(); map.put("instrument", k); map.put("total", v.size()); map.put("id", id.getAndIncrement()); result.add(map); }); String title = "点检统计"; ModelAndView mv = new ModelAndView(new JeecgMapExcelView()); //导出文件名称 mv.addObject(MapExcelConstants.FILE_NAME, title); //自定义表格参数 ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); mv.addObject(NormalExcelConstants.PARAMS, exportParams); //导出数据列表 mv.addObject(MapExcelConstants.MAP_LIST, result); // 设置表头样式 List filedsList = new ArrayList<>(); filedsList.add(new ExcelExportEntity("仪器", "instrument")); filedsList.add(new ExcelExportEntity("报修次数", "total")); mv.addObject(MapExcelConstants.ENTITY_LIST, filedsList); return mv; } }