|
|
@@ -0,0 +1,394 @@
|
|
|
+package com.xjrsoft.module.student.service.impl;
|
|
|
+
|
|
|
+import cn.dev33.satoken.stp.StpUtil;
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import com.alibaba.excel.EasyExcel;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.github.yulichang.base.MPJBaseServiceImpl;
|
|
|
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
|
+import com.xjrsoft.common.enums.DeleteMark;
|
|
|
+import com.xjrsoft.common.utils.VoToColumnUtil;
|
|
|
+import com.xjrsoft.module.base.entity.BaseClass;
|
|
|
+import com.xjrsoft.module.generator.entity.ImportConfig;
|
|
|
+import com.xjrsoft.module.organization.entity.User;
|
|
|
+import com.xjrsoft.module.organization.mapper.UserMapper;
|
|
|
+import com.xjrsoft.module.student.dto.AddLeagueMembersManageDto;
|
|
|
+import com.xjrsoft.module.student.dto.LeagueMembersExportQueryDto;
|
|
|
+import com.xjrsoft.module.student.dto.LeagueMembersImportDto;
|
|
|
+import com.xjrsoft.module.student.entity.BaseStudent;
|
|
|
+import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
|
|
|
+import com.xjrsoft.module.student.entity.LeagueMembersManage;
|
|
|
+import com.xjrsoft.module.student.mapper.BaseStudentMapper;
|
|
|
+import com.xjrsoft.module.student.mapper.LeagueMembersManageMapper;
|
|
|
+import com.xjrsoft.module.student.service.ILeagueMembersManageService;
|
|
|
+import com.xjrsoft.module.student.vo.LeagueMembersExportQueryListVo;
|
|
|
+import com.xjrsoft.module.student.vo.LeagueMembersManagePageVo;
|
|
|
+import com.xjrsoft.module.system.entity.DictionaryDetail;
|
|
|
+import com.xjrsoft.module.teacher.entity.XjrUser;
|
|
|
+import com.xjrsoft.module.veb.util.ImportExcelUtil;
|
|
|
+import com.xjrsoft.module.veb.vo.InternshipPlanImportVo;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
+import org.apache.commons.lang3.ObjectUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.poi.ss.usermodel.*;
|
|
|
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.io.ByteArrayOutputStream;
|
|
|
+import java.io.IOException;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.YearMonth;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import static com.xjrsoft.module.veb.util.ImportExcelUtil.isRequiredFieldsFilled;
|
|
|
+
|
|
|
+/**
|
|
|
+* @title: 团员管理
|
|
|
+* @Author phoenix
|
|
|
+* @Date: 2025-04-08
|
|
|
+* @Version 1.0
|
|
|
+*/
|
|
|
+@Service
|
|
|
+@AllArgsConstructor
|
|
|
+public class LeagueMembersManageServiceImpl extends MPJBaseServiceImpl<LeagueMembersManageMapper, LeagueMembersManage> implements ILeagueMembersManageService {
|
|
|
+
|
|
|
+ private final BaseStudentMapper baseStudentMapper;
|
|
|
+
|
|
|
+ private final UserMapper userMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean addRubAndHand(AddLeagueMembersManageDto dto) {
|
|
|
+ LeagueMembersManage leagueMembersManage = BeanUtil.toBean(dto, LeagueMembersManage.class);
|
|
|
+
|
|
|
+ // 更改原有的团员状态
|
|
|
+ LambdaUpdateWrapper<BaseStudent> baseStudentLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ baseStudentLambdaUpdateWrapper
|
|
|
+ .eq(BaseStudent::getUserId, dto.getUserId())
|
|
|
+ ;
|
|
|
+ BaseStudent baseStudent = new BaseStudent();
|
|
|
+ baseStudent.setPoliticalState("FB1204");
|
|
|
+ baseStudentMapper.update(baseStudent, baseStudentLambdaUpdateWrapper);
|
|
|
+
|
|
|
+ return this.save(leagueMembersManage);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean deleteRubAndHand(List<Long> ids) {
|
|
|
+ // 更改原有的团员状态
|
|
|
+ List<LeagueMembersManage> leagueMembersManages = this.listByIds(ids);
|
|
|
+ BaseStudent baseStudent = new BaseStudent();
|
|
|
+ baseStudent.setPoliticalState("FB1214");
|
|
|
+ LambdaUpdateWrapper<BaseStudent> baseStudentLambdaUpdateWrapper;
|
|
|
+ for(LeagueMembersManage leagueMembersManage : leagueMembersManages){
|
|
|
+ baseStudentLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ baseStudentLambdaUpdateWrapper
|
|
|
+ .eq(BaseStudent::getUserId, leagueMembersManage.getUserId())
|
|
|
+ ;
|
|
|
+ baseStudentMapper.update(baseStudent, baseStudentLambdaUpdateWrapper);
|
|
|
+ }
|
|
|
+ return this.removeBatchByIds(ids);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ByteArrayOutputStream leagueMembersImportTemplate() throws IOException {
|
|
|
+ // 开始写入
|
|
|
+ Workbook workbook = new XSSFWorkbook();
|
|
|
+ // 创建一个工作表(sheet)
|
|
|
+ String sheetName = "sheet1";
|
|
|
+ Sheet sheet = workbook.createSheet(sheetName);
|
|
|
+
|
|
|
+ LeagueMembersImportDto obj = new LeagueMembersImportDto();
|
|
|
+ List<ImportConfig> importConfigs = ImportExcelUtil.allFields(obj);
|
|
|
+
|
|
|
+ // 大标题
|
|
|
+ ImportExcelUtil.createBigHead(workbook, sheet, "团员导入模板", 0, importConfigs.size() - 1);
|
|
|
+
|
|
|
+ // 提示必填
|
|
|
+ String content = "说明:黄底红色背景为必填项,白底黑字为非必填项,导入时请将实例数据删除,避免导入失败!";
|
|
|
+ ImportExcelUtil.createCautionHead(workbook, sheet, 1, content, importConfigs.size() - 1, 12, IndexedColors.RED.getIndex());
|
|
|
+
|
|
|
+ // 表头
|
|
|
+ ImportExcelUtil.createHead(workbook, sheet, importConfigs, IndexedColors.YELLOW.getIndex(), IndexedColors.RED.getIndex(), 2);
|
|
|
+
|
|
|
+ //写入文件
|
|
|
+ ByteArrayOutputStream bot = new ByteArrayOutputStream();
|
|
|
+ workbook.write(bot);
|
|
|
+ return bot;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String leagueMembersImport(MultipartFile file) throws IOException, IllegalAccessException {
|
|
|
+ List<LeagueMembersImportDto> excelDataList = EasyExcel.read(file.getInputStream()).headRowNumber(3).head(LeagueMembersImportDto.class).sheet().doReadSync();
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+
|
|
|
+ // 用户根据身份证号映射
|
|
|
+ List<User> users = userMapper.selectList(
|
|
|
+ Wrappers
|
|
|
+ .lambdaQuery(User.class)
|
|
|
+ .eq(User::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ );
|
|
|
+ Map<String, User> userByCredentialNumberMap = users.stream()
|
|
|
+ .filter(u -> StringUtils.isNotEmpty(u.getCredentialNumber()))
|
|
|
+ .collect(Collectors.toMap(User::getCredentialNumber, u -> u, (o1, o2) -> o1));
|
|
|
+
|
|
|
+ // 团员信息身份证号映射
|
|
|
+ MPJLambdaWrapper<LeagueMembersManage> leagueMembersManageMPJLambdaWrapper = new MPJLambdaWrapper<>();
|
|
|
+ leagueMembersManageMPJLambdaWrapper
|
|
|
+ .select(LeagueMembersManage::getId)
|
|
|
+ .selectAs(XjrUser::getCredentialNumber, LeagueMembersManage::getLeagueMembersNum) // 暂时将身份证号存在团员编号字段中
|
|
|
+ .innerJoin(XjrUser.class, XjrUser::getId, LeagueMembersManage::getUserId)
|
|
|
+ ;
|
|
|
+ List<LeagueMembersManage> olds = this.selectJoinList(LeagueMembersManage.class, leagueMembersManageMPJLambdaWrapper);
|
|
|
+ Map<String, Long> idByCredentialNumberMap = olds.stream()
|
|
|
+ .filter(u -> StringUtils.isNotEmpty(u.getLeagueMembersNum()))
|
|
|
+ .collect(Collectors.toMap(LeagueMembersManage::getLeagueMembersNum, LeagueMembersManage::getId, (o1, o2) -> o1));
|
|
|
+
|
|
|
+ List<LeagueMembersManage> leagueMembersManages = new ArrayList<>();
|
|
|
+ LeagueMembersManage leagueMembersManage;
|
|
|
+ Date nowDate = new Date();
|
|
|
+ // 定义输入格式 (YYYYMM)
|
|
|
+ DateTimeFormatter joinTimeFormatter = DateTimeFormatter.ofPattern("yyyyMM");
|
|
|
+ // 定义输入格式 (YYYY.MM)
|
|
|
+ DateTimeFormatter transferFormatter = DateTimeFormatter.ofPattern("yyyy.MM");
|
|
|
+ for (int i = 0; i < excelDataList.size(); i++) {
|
|
|
+ LeagueMembersImportDto dto = excelDataList.get(i);
|
|
|
+ leagueMembersManage = new LeagueMembersManage();
|
|
|
+
|
|
|
+ // 判断必填字段
|
|
|
+ if (ImportExcelUtil.isRequiredFieldsFilled(dto,
|
|
|
+ sb,
|
|
|
+ i + 3)) {
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 判断身份证对应的用户是否存在
|
|
|
+ User user = userByCredentialNumberMap.get(dto.getIdCard());
|
|
|
+ if(ObjectUtils.isEmpty(user)){
|
|
|
+ sb.append("第").append(i + 3).append("行数据的用户不存在!");
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 判断团员编号值是否为整数
|
|
|
+ if(StringUtils.isNotEmpty(dto.getLeagueMembersNum()) && !StringUtils.isNumeric(dto.getLeagueMembersNum())){
|
|
|
+ sb.append("第").append(i + 3).append("行数据的团员编号包含非数字字符!");
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理入团时间
|
|
|
+ if(StringUtils.isNotEmpty(dto.getJoinTime())){
|
|
|
+ // 将字符串解析为 YearMonth
|
|
|
+ YearMonth yearMonth = YearMonth.parse(dto.getJoinTime(), joinTimeFormatter);
|
|
|
+
|
|
|
+ // 设置为当月的第一天并转换为 LocalDate
|
|
|
+ LocalDate localDate = yearMonth.atDay(1);
|
|
|
+
|
|
|
+ leagueMembersManage.setJoinTime(localDate);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理转入时间
|
|
|
+ if(StringUtils.isNotEmpty(dto.getTransferTime())){
|
|
|
+ // 将字符串解析为 YearMonth
|
|
|
+ YearMonth yearMonth = YearMonth.parse(dto.getTransferTime(), transferFormatter);
|
|
|
+
|
|
|
+ // 设置为当月的第一天并转换为 LocalDate
|
|
|
+ LocalDate localDate = yearMonth.atDay(1);
|
|
|
+
|
|
|
+ leagueMembersManage.setTransferTime(localDate);
|
|
|
+ }
|
|
|
+
|
|
|
+ leagueMembersManage.setUserId(user.getId());
|
|
|
+ leagueMembersManage.setLeagueMembersNum(dto.getLeagueMembersNum());
|
|
|
+ leagueMembersManage.setAddress(dto.getAddress());
|
|
|
+ leagueMembersManage.setRemark(dto.getRemark());
|
|
|
+
|
|
|
+ leagueMembersManage.setCreateDate(nowDate);
|
|
|
+ leagueMembersManage.setCreateUserId(StpUtil.getLoginIdAsLong());
|
|
|
+
|
|
|
+ Long leagueMembersManageId = idByCredentialNumberMap.get(dto.getIdCard());
|
|
|
+ if(ObjectUtils.isNotEmpty(leagueMembersManageId)){
|
|
|
+ leagueMembersManage.setId(leagueMembersManageId);
|
|
|
+ }
|
|
|
+
|
|
|
+ leagueMembersManages.add(leagueMembersManage);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(leagueMembersManages)){
|
|
|
+ this.saveOrUpdateBatch(leagueMembersManages);
|
|
|
+ }
|
|
|
+
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ByteArrayOutputStream textbookSubscriptionExportQuery(LeagueMembersExportQueryDto dto) throws IOException {
|
|
|
+ MPJLambdaWrapper<LeagueMembersManage> leagueMembersManageMPJLambdaWrapper = new MPJLambdaWrapper<>();
|
|
|
+ leagueMembersManageMPJLambdaWrapper
|
|
|
+ .disableSubLogicDel()
|
|
|
+ .select(LeagueMembersManage::getId)
|
|
|
+ .select(LeagueMembersManage.class, x -> VoToColumnUtil.fieldsToColumns(LeagueMembersExportQueryListVo.class).contains(x.getProperty()))
|
|
|
+ .innerJoin(XjrUser.class, XjrUser::getId, LeagueMembersManage::getUserId,
|
|
|
+ wrappers -> wrappers
|
|
|
+ .selectAs(XjrUser::getName, LeagueMembersExportQueryListVo::getStudentName)
|
|
|
+ .selectAs(XjrUser::getCredentialNumber, LeagueMembersExportQueryListVo::getIdCard)
|
|
|
+ .selectAs(XjrUser::getMobile, LeagueMembersExportQueryListVo::getPhone)
|
|
|
+ .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, XjrUser::getGender,
|
|
|
+ wrap -> wrap
|
|
|
+ .selectAs(DictionaryDetail::getName, LeagueMembersExportQueryListVo::getGenderCn)
|
|
|
+ )
|
|
|
+ .like(StringUtils.isNotEmpty(dto.getStudentName()), XjrUser::getName, dto.getStudentName())
|
|
|
+ .like(StringUtils.isNotEmpty(dto.getIdCard()), XjrUser::getCredentialNumber, dto.getIdCard())
|
|
|
+ .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ )
|
|
|
+ .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, LeagueMembersManage::getUserId,
|
|
|
+ wrappers -> wrappers
|
|
|
+ .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, BaseStudentSchoolRoll::getArchivesStatus,
|
|
|
+ wrap -> wrap
|
|
|
+ .selectAs(DictionaryDetail::getName, LeagueMembersExportQueryListVo::getStatusCn)
|
|
|
+ )
|
|
|
+ .like(StringUtils.isNotEmpty(dto.getArchivesStatus()), BaseStudentSchoolRoll::getArchivesStatus, dto.getArchivesStatus())
|
|
|
+ .eq(ObjectUtils.isNotEmpty(dto.getClassId()), BaseStudentSchoolRoll::getClassId, dto.getClassId())
|
|
|
+ .eq(BaseStudentSchoolRoll::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ )
|
|
|
+ .leftJoin(BaseClass.class, BaseClass::getId, BaseStudentSchoolRoll::getClassId,
|
|
|
+ wrappers -> wrappers
|
|
|
+ .selectAs(BaseClass::getName, LeagueMembersExportQueryListVo::getClassName)
|
|
|
+ .leftJoin(XjrUser.class, XjrUser::getId, BaseClass::getTeacherId,
|
|
|
+ wrap -> wrap
|
|
|
+ .selectAs(XjrUser::getName, LeagueMembersExportQueryListVo::getTeacherName)
|
|
|
+ )
|
|
|
+ .eq(ObjectUtils.isNotEmpty(dto.getGradeId()), BaseClass::getGradeId, dto.getGradeId())
|
|
|
+ )
|
|
|
+ .leftJoin(BaseStudent.class, BaseStudent::getUserId, LeagueMembersManage::getUserId,
|
|
|
+ wrappers -> wrappers
|
|
|
+ .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, BaseStudent::getNation,
|
|
|
+ wrap -> wrap
|
|
|
+ .selectAs(DictionaryDetail::getName, LeagueMembersExportQueryListVo::getNation)
|
|
|
+ )
|
|
|
+ .eq(BaseStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ )
|
|
|
+ .like(StringUtils.isNotEmpty(dto.getLeagueMembersNum()), LeagueMembersManage::getLeagueMembersNum, dto.getLeagueMembersNum())
|
|
|
+ .ge(ObjectUtils.isNotEmpty(dto.getJoinTimeStart()), LeagueMembersManage::getJoinTime, dto.getJoinTimeStart())
|
|
|
+ .le(ObjectUtils.isNotEmpty(dto.getJoinTimeEnd()), LeagueMembersManage::getJoinTime, dto.getJoinTimeEnd())
|
|
|
+ .ge(ObjectUtils.isNotEmpty(dto.getTransferTimeStart()), LeagueMembersManage::getTransferTime, dto.getTransferTimeStart())
|
|
|
+ .le(ObjectUtils.isNotEmpty(dto.getTransferTimeEnd()), LeagueMembersManage::getTransferTime, dto.getTransferTimeEnd())
|
|
|
+ .orderByAsc(BaseClass::getName)
|
|
|
+ ;
|
|
|
+ List<LeagueMembersExportQueryListVo> lmeqList = this.selectJoinList(LeagueMembersExportQueryListVo.class, leagueMembersManageMPJLambdaWrapper);
|
|
|
+
|
|
|
+ // 开始写入
|
|
|
+ Workbook workbook = new XSSFWorkbook();
|
|
|
+ // 创建一个工作表(sheet)
|
|
|
+ String sheetName = "sheet1";
|
|
|
+ Sheet sheet = workbook.createSheet(sheetName);
|
|
|
+
|
|
|
+ // 出参vo字段数量
|
|
|
+ LeagueMembersExportQueryListVo obj = new LeagueMembersExportQueryListVo();
|
|
|
+ List<ImportConfig> importConfigs = ImportExcelUtil.allFields(obj);
|
|
|
+
|
|
|
+ // 写大标题
|
|
|
+ int rowNumber = 0;
|
|
|
+ ImportExcelUtil.createBigHead(workbook, sheet, "团员信息列表", rowNumber++, importConfigs.size());
|
|
|
+
|
|
|
+ // 表头
|
|
|
+ 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>> resultList = new ArrayList<>();
|
|
|
+ List<String> oneResult;
|
|
|
+ int sortCode = 1;
|
|
|
+ // 定义输出格式 (YYYY.MM)
|
|
|
+ DateTimeFormatter transferFormatter = DateTimeFormatter.ofPattern("yyyy.MM");
|
|
|
+ DateTimeFormatter joinFormatter = DateTimeFormatter.ofPattern("yyyyMM");
|
|
|
+ for (LeagueMembersExportQueryListVo vo : lmeqList){
|
|
|
+ oneResult = new ArrayList<>();
|
|
|
+ oneResult.add("" + sortCode++);
|
|
|
+ oneResult.add(vo.getClassName());
|
|
|
+ oneResult.add(vo.getTeacherName());
|
|
|
+ oneResult.add(vo.getStudentName());
|
|
|
+ oneResult.add(vo.getGenderCn());
|
|
|
+ oneResult.add(vo.getNation());
|
|
|
+ oneResult.add(vo.getIdCard());
|
|
|
+ oneResult.add(vo.getPhone());
|
|
|
+ oneResult.add(vo.getLeagueMembersNum());
|
|
|
+ oneResult.add(vo.getAddress());
|
|
|
+
|
|
|
+ // 处理加入时间
|
|
|
+ if(ObjectUtils.isNotEmpty(vo.getJoinTime())){
|
|
|
+ // 将 LocalDate 转换为字符串
|
|
|
+ String joinTime = vo.getJoinTime().format(joinFormatter);
|
|
|
+ oneResult.add(joinTime);
|
|
|
+ } else {
|
|
|
+ oneResult.add("");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理转入时间
|
|
|
+ if(ObjectUtils.isNotEmpty(vo.getTransferTime())){
|
|
|
+ // 将 LocalDate 转换为字符串
|
|
|
+ String transferTime = vo.getTransferTime().format(transferFormatter);
|
|
|
+ oneResult.add(transferTime);
|
|
|
+ } else {
|
|
|
+ oneResult.add("");
|
|
|
+ }
|
|
|
+
|
|
|
+ oneResult.add(vo.getStatusCn());
|
|
|
+ oneResult.add(vo.getRemark());
|
|
|
+ resultList.add(oneResult);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 写入数据
|
|
|
+ for (List<String> rowData : resultList) {
|
|
|
+ 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++;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 自动列宽
|
|
|
+ for (int i = 0; i < importConfigs.size(); i++) {
|
|
|
+ sheet.autoSizeColumn(i);
|
|
|
+ }
|
|
|
+
|
|
|
+ ByteArrayOutputStream bot = new ByteArrayOutputStream();
|
|
|
+ workbook.write(bot);
|
|
|
+ return bot;
|
|
|
+ }
|
|
|
+}
|