diff --git a/src/com/engine/salary/entity/datacollection/param/AttendQuoteDataBatchQueryParam.java b/src/com/engine/salary/entity/datacollection/param/AttendQuoteDataBatchQueryParam.java new file mode 100644 index 000000000..87324266d --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/param/AttendQuoteDataBatchQueryParam.java @@ -0,0 +1,31 @@ +package com.engine.salary.entity.datacollection.param; + +import com.engine.salary.common.BaseQueryParam; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 批量查询考勤数据 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//数据采集-考勤引用数据查询参数") +public class AttendQuoteDataBatchQueryParam extends BaseQueryParam { + + + //考勤引用表的主键id(获取明细) + private List attendQuoteIds; + + +} diff --git a/src/com/engine/salary/service/AttendQuoteDataService.java b/src/com/engine/salary/service/AttendQuoteDataService.java index 21609dd55..6c8c8b79c 100644 --- a/src/com/engine/salary/service/AttendQuoteDataService.java +++ b/src/com/engine/salary/service/AttendQuoteDataService.java @@ -35,6 +35,7 @@ public interface AttendQuoteDataService { * @return */ XSSFWorkbook export(AttendQuoteDataQueryParam queryParam); + XSSFWorkbook batchExport(AttendQuoteDataBatchQueryParam queryParam); /** * 同步引用考勤数据 diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index 48648cc57..cce73e80c 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -324,6 +324,81 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa } + @Override + public XSSFWorkbook batchExport(AttendQuoteDataBatchQueryParam queryParam) { + + // 所有考勤字段 + List attendQuoteFields = getAllAttendQuoteFields(); + + List> listMaps = new ArrayList<>(); + for (Long attendQuoteId : queryParam.getAttendQuoteIds()) { + // 考勤数据分页主数据 + List attendQuoteDataBases = dataBiz.list(AttendQuoteDataQueryParam.builder().attendQuoteId(attendQuoteId).build()); + // 获取最终结果 + listMaps.addAll(getListMaps(attendQuoteDataBases)); + } + + + //当前引用的值 + List effectiveColumns = listMaps.stream() + .map(Map::keySet) + .max(Comparator.comparingInt(Set::size)) + .orElse(new HashSet<>()) + .stream() + .map(key -> key.split("_")[0]) + .collect(Collectors.toList()); + + // 1.工作簿名称 + String sheetName = SalaryI18nUtil.getI18nLabel(93931, "考勤数据"); + List header = new ArrayList<>(); + header.add(SalaryI18nUtil.getI18nLabel(85429, "姓名")); + header.add(SalaryI18nUtil.getI18nLabel(86185, "部门")); + header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); + header.add(SalaryI18nUtil.getI18nLabel(86317, "工号")); + // 动态列 + List effectiveFields = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(listMaps)) { + effectiveFields = attendQuoteFields.stream() + .filter(attendQuoteField -> effectiveColumns.contains(Util.null2String(attendQuoteField.getId()))) + .collect(Collectors.toList()); + + effectiveFields.forEach(attendQuoteField -> { + header.add(attendQuoteField.getFieldName()); + } + ); + } + + List> rows = new ArrayList<>(); + // 2.表头 + rows.add(header); + // 3.表数据 + for (Map dto : listMaps) { + List row = new ArrayList<>(); + row.add(dto.get("username")); + row.add(dto.get("departmentName")); + row.add(dto.get("mobile")); + row.add(dto.get("jobNum")); + + // 动态列 + for (AttendQuoteFieldPO attendQuoteField : effectiveFields) { + Object o = dto.get(attendQuoteField.getId().toString() + "_attendQuoteData"); + try { + if (o != null && NumberUtil.isNumber(o.toString())) { + row.add(new BigDecimal(o.toString())); + } else { + row.add(o); + } + } catch (Exception e) { + row.add(o); + } + } + rows.add(row); + } + + return ExcelUtil.genWorkbookV2(rows, sheetName); + + } + /** * 获取表头设置字段 diff --git a/src/com/engine/salary/web/AttendQuoteController.java b/src/com/engine/salary/web/AttendQuoteController.java index 5e0f1464c..a0966177f 100644 --- a/src/com/engine/salary/web/AttendQuoteController.java +++ b/src/com/engine/salary/web/AttendQuoteController.java @@ -288,8 +288,35 @@ public class AttendQuoteController { log.error("考勤导出异常", e); throw e; } + } + @POST + @Path("/batch/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response export(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody AttendQuoteDataBatchQueryParam param) { + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getAttendQuoteDataWrapper(user).batchExport(param); + String fileName = "考勤导出" + LocalDate.now(); + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + + response.setContentType("application/octet-stream"); + return Response.ok(output) + .header("Content-disposition", "attachment;filename=" + fileName) + .header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("考勤导出异常", e); + throw e; + } } diff --git a/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java b/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java index 2e5d4e579..eb090bbf0 100644 --- a/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java +++ b/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java @@ -148,6 +148,11 @@ public class AttendQuoteDataWrapper extends Service { return getAttendQuoteDataService(user).export(queryParam); } + + public XSSFWorkbook batchExport(AttendQuoteDataBatchQueryParam param) { + return getAttendQuoteDataService(user).batchExport(param); + } + /** * 预览 *