批量导出考勤数据
This commit is contained in:
parent
a96a19b07f
commit
1113a4f27f
|
|
@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -35,6 +35,7 @@ public interface AttendQuoteDataService {
|
|||
* @return
|
||||
*/
|
||||
XSSFWorkbook export(AttendQuoteDataQueryParam queryParam);
|
||||
XSSFWorkbook batchExport(AttendQuoteDataBatchQueryParam queryParam);
|
||||
|
||||
/**
|
||||
* 同步引用考勤数据
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取表头设置字段
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -148,6 +148,11 @@ public class AttendQuoteDataWrapper extends Service {
|
|||
return getAttendQuoteDataService(user).export(queryParam);
|
||||
}
|
||||
|
||||
|
||||
public XSSFWorkbook batchExport(AttendQuoteDataBatchQueryParam param) {
|
||||
return getAttendQuoteDataService(user).batchExport(param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 预览
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue