|
|
@@ -43,6 +43,7 @@ import java.io.ByteArrayOutputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.function.Function;
|
|
|
@@ -785,87 +786,64 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
;
|
|
|
List<ClaimRecordsExportQueryVo> dataList = this.selectJoinList(ClaimRecordsExportQueryVo.class, wfTextbookClaimMPJLambdaWrapper);
|
|
|
|
|
|
- // 处理申领总数量和已经发放总数量
|
|
|
- if (ObjectUtils.isNotEmpty(dataList)) {
|
|
|
- List<Long> textbookClaimIds = dataList.stream()
|
|
|
- .map(ClaimRecordsExportQueryVo::getId)
|
|
|
- .collect(Collectors.toList());
|
|
|
- Map<Long, WfTextbookClaimItem> applicantTatolNumberMap = new HashMap<>();
|
|
|
-
|
|
|
- // 处理所有的子项
|
|
|
- Map<Long, List<WfTextbookClaimItemVo>> wfTextbookClaimItemVoMap = new HashMap<>();
|
|
|
-
|
|
|
- WfTextbookClaimItem wfTextbookClaimItem;
|
|
|
- List<WfTextbookClaimItemVo> wfTextbookClaimItemVoList;
|
|
|
- if (ObjectUtils.isNotEmpty(textbookClaimIds)) {
|
|
|
- MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemVoLambdaQueryWrapper = new MPJLambdaWrapper<>();
|
|
|
- wfTextbookClaimItemVoLambdaQueryWrapper
|
|
|
- .disableSubLogicDel()
|
|
|
- .select(WfTextbookClaimItem::getId)
|
|
|
- .select(WfTextbookClaimItem.class, x -> VoToColumnUtil.fieldsToColumns(WfTextbookClaimItemVo.class).contains(x.getProperty()))
|
|
|
- .leftJoin(Textbook.class, Textbook::getId, WfTextbookClaimItem::getTextbookId,
|
|
|
- wrapper -> wrapper
|
|
|
- .selectAs(Textbook::getBookName, WfTextbookClaimItemVo::getTextbookIdCN)
|
|
|
- .selectAs(Textbook::getIssn, WfTextbookClaimItemVo::getIssn)
|
|
|
- )
|
|
|
- .in(WfTextbookClaimItem::getWfTextbookClaimId, textbookClaimIds)
|
|
|
- ;
|
|
|
- List<WfTextbookClaimItemVo> wfTextbookClaimItemVos = wfTextbookClaimWfTextbookClaimItemMapper.selectJoinList(WfTextbookClaimItemVo.class, wfTextbookClaimItemVoLambdaQueryWrapper);
|
|
|
- if (ObjectUtils.isNotEmpty(wfTextbookClaimItemVos)) {
|
|
|
- wfTextbookClaimItemVoMap = wfTextbookClaimItemVos.stream()
|
|
|
- .collect(Collectors.groupingBy(WfTextbookClaimItemVo::getWfTextbookClaimId))
|
|
|
- ;
|
|
|
- }
|
|
|
+ List<Long> claimIds = dataList.stream()
|
|
|
+ .map(ClaimRecordsExportQueryVo::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
- MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemLambdaQueryWrapper = new MPJLambdaWrapper<>();
|
|
|
- wfTextbookClaimItemLambdaQueryWrapper
|
|
|
- .selectAs(WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaimItem::getWfTextbookClaimId)
|
|
|
- .selectSum(WfTextbookClaimItem::getApplicantNumber, WfTextbookClaimItem::getApplicantNumber)
|
|
|
- .selectSum(WfTextbookClaimItem::getIssueNumber, WfTextbookClaimItem::getIssueNumber)
|
|
|
- .in(WfTextbookClaimItem::getWfTextbookClaimId, textbookClaimIds)
|
|
|
- .groupBy(WfTextbookClaimItem::getWfTextbookClaimId)
|
|
|
- ;
|
|
|
- List<WfTextbookClaimItem> wfTextbookClaimItemList = wfTextbookClaimWfTextbookClaimItemMapper.selectJoinList(WfTextbookClaimItem.class, wfTextbookClaimItemLambdaQueryWrapper);
|
|
|
- if (ObjectUtils.isNotEmpty(wfTextbookClaimItemList)) {
|
|
|
- applicantTatolNumberMap = wfTextbookClaimItemList.stream()
|
|
|
- .collect(Collectors.toMap(WfTextbookClaimItem::getWfTextbookClaimId, w -> w, (w1, w2) -> w1));
|
|
|
- }
|
|
|
- }
|
|
|
- if (ObjectUtils.isNotEmpty(applicantTatolNumberMap)) {
|
|
|
- for (ClaimRecordsExportQueryVo vo : dataList) {
|
|
|
- wfTextbookClaimItem = applicantTatolNumberMap.get(vo.getId());
|
|
|
- if (ObjectUtils.isNotEmpty(wfTextbookClaimItem)) {
|
|
|
- vo.setApplicantTatolNumber(wfTextbookClaimItem.getApplicantNumber());
|
|
|
- vo.setIssueTatolNumber(wfTextbookClaimItem.getIssueNumber());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (MapUtils.isNotEmpty(wfTextbookClaimItemVoMap)) {
|
|
|
- for (ClaimRecordsExportQueryVo vo : dataList) {
|
|
|
- wfTextbookClaimItemVoList = wfTextbookClaimItemVoMap.get(vo.getId());
|
|
|
- if (CollectionUtils.isNotEmpty(wfTextbookClaimItemVoList)) {
|
|
|
- vo.setWfTextbookClaimItemVoList(wfTextbookClaimItemVoList);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ // 查询统计数据
|
|
|
+ MPJLambdaWrapper<WfTextbookClaimItem> statsWrapper = new MPJLambdaWrapper<>();
|
|
|
+ statsWrapper
|
|
|
+ .selectAs(WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaimItem::getWfTextbookClaimId)
|
|
|
+ .selectSum(WfTextbookClaimItem::getApplicantNumber, WfTextbookClaimItem::getApplicantNumber)
|
|
|
+ .selectSum(WfTextbookClaimItem::getIssueNumber, WfTextbookClaimItem::getIssueNumber)
|
|
|
+ .in(WfTextbookClaimItem::getWfTextbookClaimId, claimIds)
|
|
|
+ .groupBy(WfTextbookClaimItem::getWfTextbookClaimId);
|
|
|
|
|
|
- for (ClaimRecordsExportQueryVo vo : dataList) {
|
|
|
- if (ObjectUtils.isNotEmpty(vo.getClaimType()) && ClaimTypeEnum.ClaimClass.getCode().equals(vo.getClaimType())) {
|
|
|
- vo.setReceiver(vo.getClassIdCn());
|
|
|
- } else {
|
|
|
- vo.setReceiver(vo.getApplicantUserIdCn());
|
|
|
- }
|
|
|
+ List<WfTextbookClaimItem> statsList = wfTextbookClaimWfTextbookClaimItemMapper.selectJoinList(WfTextbookClaimItem.class, statsWrapper);
|
|
|
+ Map<Long, WfTextbookClaimItem> statsMap = statsList.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ WfTextbookClaimItem::getWfTextbookClaimId,
|
|
|
+ Function.identity(),
|
|
|
+ (w1, w2) -> w1)); // 可视情况记录冲突日志
|
|
|
|
|
|
- // 1:未发放,2:部分发放,3:全部发放)
|
|
|
- if (vo.getStatus() == 2) {
|
|
|
- vo.setStatusStr("部分发放");
|
|
|
- } else if (vo.getStatus() == 3) {
|
|
|
- vo.setStatusStr("全部发放");
|
|
|
- } else {
|
|
|
- vo.setStatusStr("未发放");
|
|
|
- }
|
|
|
- }
|
|
|
+ // 查询子项数据
|
|
|
+ MPJLambdaWrapper<WfTextbookClaimItem> itemWrapper = new MPJLambdaWrapper<>();
|
|
|
+ itemWrapper.disableSubLogicDel()
|
|
|
+ .select(WfTextbookClaimItem::getId)
|
|
|
+ .selectAs(WfTextbookClaimItem::getApplicantNumber, WfTextbookClaimItemVo::getApplicantNumber)
|
|
|
+ .selectAs(WfTextbookClaimItem::getIssueNumber, WfTextbookClaimItemVo::getIssueNumber)
|
|
|
+ .select(WfTextbookClaimItem.class, x -> VoToColumnUtil.fieldsToColumns(WfTextbookClaimItemVo.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(Textbook.class, Textbook::getId, WfTextbookClaimItem::getTextbookId,
|
|
|
+ w -> w
|
|
|
+ .selectAs(Textbook::getBookName, DistributeRecordVo::getTextbookIdCn)
|
|
|
+ .selectAs(Textbook::getIssn, DistributeRecordVo::getIssn))
|
|
|
+ .in(WfTextbookClaimItem::getWfTextbookClaimId, claimIds);
|
|
|
+
|
|
|
+ List<WfTextbookClaimItemVo> itemList = wfTextbookClaimWfTextbookClaimItemMapper.selectJoinList(WfTextbookClaimItemVo.class, itemWrapper);
|
|
|
+ Map<Long, List<WfTextbookClaimItemVo>> itemMap = itemList.stream()
|
|
|
+ .collect(Collectors.groupingBy(WfTextbookClaimItemVo::getWfTextbookClaimId));
|
|
|
+
|
|
|
+ // 查询发放记录
|
|
|
+ MPJLambdaWrapper<TextbookIssueRecord> recordWrapper = new MPJLambdaWrapper<>();
|
|
|
+ recordWrapper.disableSubLogicDel()
|
|
|
+ .selectAs(TextbookIssueRecord::getDataId, DistributeRecordVo::getWfTextbookClaimId)
|
|
|
+ .selectAs(TextbookIssueRecord::getDataItemId, DistributeRecordVo::getWfTextbookClaimItemId)
|
|
|
+ .selectAs(TextbookIssueRecord::getCreateDate, DistributeRecordVo::getIssueDate)
|
|
|
+ .selectAs(TextbookIssueRecord::getIssueNumber, DistributeRecordVo::getIssueNumber)
|
|
|
+ .selectAs(TextbookIssueRecord::getOrderNumber, DistributeRecordVo::getOrderNumber)
|
|
|
+ .selectAs(TextbookIssueRecord::getRemark, DistributeRecordVo::getRemark)
|
|
|
+ .leftJoin(Textbook.class, Textbook::getId, TextbookIssueRecord::getTextbookId,
|
|
|
+ w -> w
|
|
|
+ .selectAs(Textbook::getBookName, DistributeRecordVo::getTextbookIdCn)
|
|
|
+ .selectAs(Textbook::getIssn, DistributeRecordVo::getIssn))
|
|
|
+ .leftJoin(XjrUser.class, XjrUser::getId, TextbookIssueRecord::getIssueUserId,
|
|
|
+ w -> w
|
|
|
+ .selectAs(XjrUser::getName, DistributeRecordVo::getIssueUser))
|
|
|
+ .in(TextbookIssueRecord::getDataId, claimIds);
|
|
|
+
|
|
|
+ List<DistributeRecordVo> recordList = textbookIssueRecordMapper.selectJoinList(DistributeRecordVo.class, recordWrapper);
|
|
|
+ Map<Long, List<DistributeRecordVo>> recordMap = recordList.stream()
|
|
|
+ .collect(Collectors.groupingBy(DistributeRecordVo::getWfTextbookClaimItemId));
|
|
|
|
|
|
// 开始写入
|
|
|
Workbook workbook = new XSSFWorkbook();
|
|
|
@@ -909,64 +887,115 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
cellStyle.setBorderRight(BorderStyle.THIN);
|
|
|
cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex()); // 设置右边框颜色
|
|
|
|
|
|
- // 构建数据
|
|
|
- List<List<String>> result;
|
|
|
- List<String> oneResult;
|
|
|
+ // 记录写入
|
|
|
+ List<String> claimVo;
|
|
|
+ List<String> claimItemVo;
|
|
|
+ List<String> claimItemIssueVo;
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
for (ClaimRecordsExportQueryVo vo : dataList) {
|
|
|
- result = new ArrayList<>();
|
|
|
- if (CollectionUtils.isNotEmpty(vo.getWfTextbookClaimItemVoList())) {
|
|
|
- for (WfTextbookClaimItemVo item : vo.getWfTextbookClaimItemVoList()) {
|
|
|
- oneResult = new ArrayList<>();
|
|
|
- oneResult.add(vo.getBaseSemesterIdCn());
|
|
|
- oneResult.add(vo.getClaimTypeCn());
|
|
|
- oneResult.add(vo.getReceiver());
|
|
|
- if (StringUtils.isNotEmpty(vo.getClassIdCn())) {
|
|
|
- oneResult.add(vo.getClassIdCn());
|
|
|
+ if (ObjectUtils.isNotEmpty(vo.getClaimType()) && ClaimTypeEnum.ClaimClass.getCode().equals(vo.getClaimType())) {
|
|
|
+ vo.setReceiver(vo.getClassIdCn());
|
|
|
+ } else {
|
|
|
+ vo.setReceiver(vo.getApplicantUserIdCn());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 1:未发放,2:部分发放,3:全部发放)
|
|
|
+ if (vo.getStatus() == 2) {
|
|
|
+ vo.setStatusStr("部分发放");
|
|
|
+ } else if (vo.getStatus() == 3) {
|
|
|
+ vo.setStatusStr("全部发放");
|
|
|
+ } else {
|
|
|
+ vo.setStatusStr("未发放");
|
|
|
+ }
|
|
|
+
|
|
|
+ Long claimId = vo.getId();
|
|
|
+
|
|
|
+ // 填充统计信息
|
|
|
+ if (MapUtils.isNotEmpty(statsMap) && statsMap.containsKey(claimId)) {
|
|
|
+ WfTextbookClaimItem stat = statsMap.get(claimId);
|
|
|
+ vo.setApplicantTatolNumber(stat.getApplicantNumber());
|
|
|
+ vo.setIssueTatolNumber(stat.getIssueNumber());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 申领总记录
|
|
|
+ claimVo = new ArrayList<>();
|
|
|
+ claimVo.add(vo.getBaseSemesterIdCn());
|
|
|
+ claimVo.add(vo.getClaimTypeCn());
|
|
|
+ claimVo.add(vo.getReceiver());
|
|
|
+ if (StringUtils.isNotEmpty(vo.getClassIdCn())) {
|
|
|
+ claimVo.add(vo.getClassIdCn());
|
|
|
+ } else {
|
|
|
+ claimVo.add("无");
|
|
|
+ }
|
|
|
+ claimVo.add(vo.getApplicantTatolNumber() + "");
|
|
|
+ claimVo.add(vo.getStatusStr());
|
|
|
+ claimVo.add(vo.getIssueTatolNumber() + "");
|
|
|
+
|
|
|
+ // 填充子项及发放记录
|
|
|
+ int mergeClaim = 0;
|
|
|
+ if (MapUtils.isNotEmpty(itemMap) && CollectionUtils.isNotEmpty(itemMap.get(claimId))) {
|
|
|
+ List<WfTextbookClaimItemVo> items = itemMap.get(claimId);
|
|
|
+ for (WfTextbookClaimItemVo item : items) {
|
|
|
+ mergeClaim++;
|
|
|
+ claimItemVo = new ArrayList<>(claimVo);
|
|
|
+ claimItemVo.add(item.getTextbookIdCN());
|
|
|
+ claimItemVo.add(item.getIssn());
|
|
|
+ claimItemVo.add(item.getApplicantNumber() + "");
|
|
|
+ claimItemVo.add(item.getIssueNumber() + "");
|
|
|
+
|
|
|
+ int mergeClaimItem = 0;
|
|
|
+ if (recordMap.containsKey(item.getId())) {
|
|
|
+ List<DistributeRecordVo> issues = recordMap.get(item.getId());
|
|
|
+ for (DistributeRecordVo issue : issues) {
|
|
|
+ mergeClaimItem++;
|
|
|
+ claimItemIssueVo = new ArrayList<>(claimItemVo);
|
|
|
+ LocalDateTime localDateTime = issue.getIssueDate().toInstant()
|
|
|
+ .atZone(ZoneId.systemDefault())
|
|
|
+ .toLocalDateTime();
|
|
|
+ claimItemIssueVo.add(localDateTime.format(formatter));
|
|
|
+ claimItemIssueVo.add(issue.getIssueUser());
|
|
|
+ claimItemIssueVo.add(issue.getOrderNumber());
|
|
|
+ claimItemIssueVo.add(issue.getIssueNumber() + "");
|
|
|
+
|
|
|
+ Row dataRow = sheet.createRow(rowNumber++);
|
|
|
+ for (int j = 0; j < claimItemIssueVo.size(); j++) {
|
|
|
+ String content = claimItemIssueVo.get(j);
|
|
|
+ Cell cell = dataRow.createCell(j);
|
|
|
+ cell.setCellValue(content);
|
|
|
+ cell.setCellStyle(cellStyle);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 合并申领项
|
|
|
+ if (mergeClaimItem > 1) {
|
|
|
+ for (int k = 7; k < 11; k++) {
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(rowNumber - mergeClaimItem, rowNumber - 1, k, k));
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
- oneResult.add("无");
|
|
|
+ Row dataRow = sheet.createRow(rowNumber++);
|
|
|
+ for (int j = 0; j < claimItemVo.size(); j++) {
|
|
|
+ String content = claimItemVo.get(j);
|
|
|
+ Cell cell = dataRow.createCell(j);
|
|
|
+ cell.setCellValue(content);
|
|
|
+ cell.setCellStyle(cellStyle);
|
|
|
+ }
|
|
|
}
|
|
|
- oneResult.add(vo.getApplicantTatolNumber() + "");
|
|
|
- oneResult.add(vo.getStatusStr());
|
|
|
- oneResult.add(vo.getIssueTatolNumber() + "");
|
|
|
- oneResult.add(item.getTextbookIdCN());
|
|
|
- oneResult.add(item.getIssn());
|
|
|
- oneResult.add(item.getApplicantNumber() + "");
|
|
|
- oneResult.add(item.getIssueNumber() + "");
|
|
|
- result.add(oneResult);
|
|
|
- }
|
|
|
- } else {
|
|
|
- oneResult = new ArrayList<>();
|
|
|
- oneResult.add(vo.getBaseSemesterIdCn());
|
|
|
- oneResult.add(vo.getClaimTypeCn());
|
|
|
- oneResult.add(vo.getReceiver());
|
|
|
- if (StringUtils.isNotEmpty(vo.getClassIdCn())) {
|
|
|
- oneResult.add(vo.getClassIdCn());
|
|
|
- } else {
|
|
|
- oneResult.add("无");
|
|
|
}
|
|
|
- oneResult.add(vo.getApplicantTatolNumber() + "");
|
|
|
- oneResult.add(vo.getStatusStr());
|
|
|
- oneResult.add(vo.getIssueTatolNumber() + "");
|
|
|
- result.add(oneResult);
|
|
|
- }
|
|
|
|
|
|
- // 写入单次申领
|
|
|
- int startRowNumber = rowNumber;
|
|
|
- for (List<String> rowData : result) {
|
|
|
- Row dataRow = sheet.createRow(rowNumber);
|
|
|
- for (int j = 0; j < rowData.size(); j++) {
|
|
|
- String content = rowData.get(j);
|
|
|
+ // 合并申领
|
|
|
+ if (mergeClaim > 1) {
|
|
|
+ for (int k = 0; k < 7; k++) {
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(rowNumber - mergeClaim, rowNumber - 1, k, k));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Row dataRow = sheet.createRow(rowNumber++);
|
|
|
+ for (int j = 0; j < claimVo.size(); j++) {
|
|
|
+ String content = claimVo.get(j);
|
|
|
Cell cell = dataRow.createCell(j);
|
|
|
cell.setCellValue(content);
|
|
|
cell.setCellStyle(cellStyle);
|
|
|
}
|
|
|
- rowNumber++;
|
|
|
- }
|
|
|
-
|
|
|
- if (rowNumber - startRowNumber > 1) {
|
|
|
- for (int k = 0; k < 7; k++) {
|
|
|
- sheet.addMergedRegion(new CellRangeAddress(startRowNumber, rowNumber - 1, k, k));
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|