批量导出考勤数据

This commit is contained in:
钱涛 2025-01-08 16:24:16 +08:00
parent a96a19b07f
commit 1113a4f27f
5 changed files with 139 additions and 0 deletions

View File

@ -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;
/**
* 批量查询考勤数据
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
//数据采集-考勤引用数据查询参数")
public class AttendQuoteDataBatchQueryParam extends BaseQueryParam {
//考勤引用表的主键id(获取明细)
private List<Long> attendQuoteIds;
}

View File

@ -35,6 +35,7 @@ public interface AttendQuoteDataService {
* @return
*/
XSSFWorkbook export(AttendQuoteDataQueryParam queryParam);
XSSFWorkbook batchExport(AttendQuoteDataBatchQueryParam queryParam);
/**
* 同步引用考勤数据

View File

@ -324,6 +324,81 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa
}
@Override
public XSSFWorkbook batchExport(AttendQuoteDataBatchQueryParam queryParam) {
// 所有考勤字段
List<AttendQuoteFieldPO> attendQuoteFields = getAllAttendQuoteFields();
List<Map<String, Object>> listMaps = new ArrayList<>();
for (Long attendQuoteId : queryParam.getAttendQuoteIds()) {
// 考勤数据分页主数据
List<AttendQuoteDataBaseDTO> attendQuoteDataBases = dataBiz.list(AttendQuoteDataQueryParam.builder().attendQuoteId(attendQuoteId).build());
// 获取最终结果
listMaps.addAll(getListMaps(attendQuoteDataBases));
}
//当前引用的值
List<String> 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<Object> header = new ArrayList<>();
header.add(SalaryI18nUtil.getI18nLabel(85429, "姓名"));
header.add(SalaryI18nUtil.getI18nLabel(86185, "部门"));
header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号"));
header.add(SalaryI18nUtil.getI18nLabel(86317, "工号"));
// 动态列
List<AttendQuoteFieldPO> 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<List<Object>> rows = new ArrayList<>();
// 2.表头
rows.add(header);
// 3.表数据
for (Map<String, Object> dto : listMaps) {
List<Object> 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);
}
/**
* 获取表头设置字段

View File

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

View File

@ -148,6 +148,11 @@ public class AttendQuoteDataWrapper extends Service {
return getAttendQuoteDataService(user).export(queryParam);
}
public XSSFWorkbook batchExport(AttendQuoteDataBatchQueryParam param) {
return getAttendQuoteDataService(user).batchExport(param);
}
/**
* 预览
*