|
|
@@ -1,8 +1,6 @@
|
|
|
package com.xjrsoft.module.textbook.service.impl;
|
|
|
|
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
|
-import com.alibaba.excel.EasyExcel;
|
|
|
-import com.alibaba.excel.support.ExcelTypeEnum;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
@@ -13,12 +11,11 @@ import com.xjrsoft.common.enums.ClaimTypeEnum;
|
|
|
import com.xjrsoft.common.enums.DeleteMark;
|
|
|
import com.xjrsoft.common.enums.IssueModeEnum;
|
|
|
import com.xjrsoft.common.exception.MyException;
|
|
|
-import com.xjrsoft.common.model.result.RT;
|
|
|
import com.xjrsoft.common.page.ConventPage;
|
|
|
import com.xjrsoft.common.utils.VoToColumnUtil;
|
|
|
import com.xjrsoft.module.base.entity.BaseClass;
|
|
|
import com.xjrsoft.module.base.entity.BaseSemester;
|
|
|
-import com.xjrsoft.module.oa.entity.WfMeetingApply;
|
|
|
+import com.xjrsoft.module.generator.entity.ImportConfig;
|
|
|
import com.xjrsoft.module.system.entity.DictionaryDetail;
|
|
|
import com.xjrsoft.module.teacher.entity.XjrUser;
|
|
|
import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
|
|
|
@@ -27,17 +24,23 @@ import com.xjrsoft.module.textbook.entity.*;
|
|
|
import com.xjrsoft.module.textbook.mapper.*;
|
|
|
import com.xjrsoft.module.textbook.service.IWfTextbookClaimService;
|
|
|
import com.xjrsoft.module.textbook.vo.*;
|
|
|
+import com.xjrsoft.module.veb.util.ImportExcelUtil;
|
|
|
import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
|
|
|
import com.xjrsoft.module.workflow.mapper.WorkflowFormRelationMapper;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
+import org.apache.commons.collections.MapUtils;
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.poi.ss.usermodel.*;
|
|
|
+import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
import org.camunda.bpm.engine.history.HistoricProcessInstance;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
|
+import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
@@ -141,8 +144,31 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
.map(DistributePageVo::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)
|
|
|
+ )
|
|
|
+ .in(WfTextbookClaimItem::getWfTextbookClaimId, textbookClaimIds)
|
|
|
+ ;
|
|
|
+ List<WfTextbookClaimItemVo> wfTextbookClaimItemVos = wfTextbookClaimWfTextbookClaimItemMapper.selectJoinList(WfTextbookClaimItemVo.class, wfTextbookClaimItemVoLambdaQueryWrapper);
|
|
|
+ if (ObjectUtils.isNotEmpty(wfTextbookClaimItemVos)) {
|
|
|
+ wfTextbookClaimItemVoMap = wfTextbookClaimItemVos.stream()
|
|
|
+ .collect(Collectors.groupingBy(WfTextbookClaimItemVo::getWfTextbookClaimId))
|
|
|
+ ;
|
|
|
+ }
|
|
|
+
|
|
|
MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemLambdaQueryWrapper = new MPJLambdaWrapper<>();
|
|
|
wfTextbookClaimItemLambdaQueryWrapper
|
|
|
.selectAs(WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaimItem::getWfTextbookClaimId)
|
|
|
@@ -166,6 +192,14 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ if (MapUtils.isNotEmpty(wfTextbookClaimItemVoMap)) {
|
|
|
+ for (DistributePageVo distributePageVo : page.getRecords()) {
|
|
|
+ wfTextbookClaimItemVoList = wfTextbookClaimItemVoMap.get(distributePageVo.getId());
|
|
|
+ if(CollectionUtils.isNotEmpty(wfTextbookClaimItemVoList)){
|
|
|
+ distributePageVo.setWfTextbookClaimItemVoList(wfTextbookClaimItemVoList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
return page;
|
|
|
}
|
|
|
@@ -697,7 +731,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public ByteArrayOutputStream claimRecordsExportQuery(ClaimRecordsExportQueryDto dto) {
|
|
|
+ public ByteArrayOutputStream claimRecordsExportQuery(ClaimRecordsExportQueryDto dto) throws IOException {
|
|
|
MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimMPJLambdaWrapper = new MPJLambdaWrapper<>();
|
|
|
wfTextbookClaimMPJLambdaWrapper
|
|
|
.disableSubLogicDel()
|
|
|
@@ -730,8 +764,32 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
.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))
|
|
|
+ ;
|
|
|
+ }
|
|
|
+
|
|
|
MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemLambdaQueryWrapper = new MPJLambdaWrapper<>();
|
|
|
wfTextbookClaimItemLambdaQueryWrapper
|
|
|
.selectAs(WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaimItem::getWfTextbookClaimId)
|
|
|
@@ -755,6 +813,14 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ if (MapUtils.isNotEmpty(wfTextbookClaimItemVoMap)) {
|
|
|
+ for (ClaimRecordsExportQueryVo vo : dataList) {
|
|
|
+ wfTextbookClaimItemVoList = wfTextbookClaimItemVoMap.get(vo.getId());
|
|
|
+ if(CollectionUtils.isNotEmpty(wfTextbookClaimItemVoList)){
|
|
|
+ vo.setWfTextbookClaimItemVoList(wfTextbookClaimItemVoList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
for (ClaimRecordsExportQueryVo vo : dataList) {
|
|
|
@@ -774,9 +840,116 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- ByteArrayOutputStream bot = new ByteArrayOutputStream();
|
|
|
- EasyExcel.write(bot, ClaimRecordsExportQueryVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(dataList);
|
|
|
+ // 开始写入
|
|
|
+ Workbook workbook = new XSSFWorkbook();
|
|
|
+ // 创建一个工作表(sheet)
|
|
|
+ String sheetName = "sheet1";
|
|
|
+ Sheet sheet = workbook.createSheet(sheetName);
|
|
|
+
|
|
|
+ // 出参vo字段数量
|
|
|
+ ClaimRecordsExportQueryVo obj = new ClaimRecordsExportQueryVo();
|
|
|
+ List<ImportConfig> importConfigs = ImportExcelUtil.allFields(obj);
|
|
|
+
|
|
|
+ // 写大标题
|
|
|
+ int rowNumber = 0;
|
|
|
+ ImportExcelUtil.createBigHead(workbook, sheet, "教材申领情况", rowNumber++, importConfigs.size() - 1);
|
|
|
+
|
|
|
+ // 表头
|
|
|
+ ImportExcelUtil.createHead(workbook, sheet, importConfigs, IndexedColors.YELLOW.getIndex(), IndexedColors.RED.getIndex(), rowNumber++);
|
|
|
+
|
|
|
+ // 字体内容格式
|
|
|
+ Font font = workbook.createFont();
|
|
|
+ font.setBold(false);// 设置为粗体
|
|
|
+ font.setFontName("宋体");
|
|
|
+ font.setFontHeightInPoints((short) 12);
|
|
|
+
|
|
|
+ // 单元格样式
|
|
|
+ CellStyle cellStyle = workbook.createCellStyle();
|
|
|
+ cellStyle.setFont(font); // 将字体应用到样式
|
|
|
+ cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
+ cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
|
|
+
|
|
|
+ // 设置边框样式为细线
|
|
|
+ cellStyle.setBorderTop(BorderStyle.THIN);
|
|
|
+ cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex()); // 设置顶部边框颜色
|
|
|
+
|
|
|
+ cellStyle.setBorderBottom(BorderStyle.THIN);
|
|
|
+ cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex()); // 设置底部边框颜色
|
|
|
+
|
|
|
+ cellStyle.setBorderLeft(BorderStyle.THIN);
|
|
|
+ cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex()); // 设置左边框颜色
|
|
|
+
|
|
|
+ cellStyle.setBorderRight(BorderStyle.THIN);
|
|
|
+ cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex()); // 设置右边框颜色
|
|
|
+
|
|
|
+ // 构建数据
|
|
|
+ List<List<String>> result;
|
|
|
+ List<String> oneResult;
|
|
|
+ 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());
|
|
|
+ }else {
|
|
|
+ oneResult.add("无");
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+ 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));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 自动列宽
|
|
|
+ for (int i = 0; i < importConfigs.size(); i++) {
|
|
|
+ sheet.autoSizeColumn(i);
|
|
|
+ }
|
|
|
+
|
|
|
+ ByteArrayOutputStream bot = new ByteArrayOutputStream();
|
|
|
+ workbook.write(bot);
|
|
|
return bot;
|
|
|
}
|
|
|
}
|