From 3adc66dee9660cf10e40abfdf52113306c7d34f3 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期五, 29 十一月 2024 14:41:09 +0800 Subject: [PATCH] 项目库导出之导出目标列表内容 --- common/src/main/java/com/ycl/common/enums/business/ProjectStatusEnum.java | 30 ++++++++++ business/src/main/resources/mapper/ProjectInfoMapper.xml | 20 ++++++ business/src/main/java/com/ycl/controller/ProjectInfoController.java | 16 ++++- business/src/main/java/com/ycl/domain/excel/ProjectExcelTemplate.java | 14 +++- business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java | 38 ++++++++++++ business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java | 2 common/src/main/java/com/ycl/common/enums/business/ProjectTypeEnum.java | 32 ++++++++++ common/src/main/java/com/ycl/common/utils/excel/OutputExcelUtils.java | 8 ++ business/src/main/java/com/ycl/domain/query/ProjectExportQuery.java | 14 ++++ business/src/main/java/com/ycl/service/ProjectInfoService.java | 4 + 10 files changed, 168 insertions(+), 10 deletions(-) diff --git a/business/src/main/java/com/ycl/controller/ProjectInfoController.java b/business/src/main/java/com/ycl/controller/ProjectInfoController.java index 2eea7dc..b082e4d 100644 --- a/business/src/main/java/com/ycl/controller/ProjectInfoController.java +++ b/business/src/main/java/com/ycl/controller/ProjectInfoController.java @@ -8,6 +8,7 @@ import com.ycl.domain.excel.ProjectExcelTemplate; import com.ycl.domain.form.DocumentInfoForm; import com.ycl.domain.form.ProjectInfoForm; +import com.ycl.domain.query.ProjectExportQuery; import com.ycl.domain.query.ProjectInfoQuery; import com.ycl.service.ProjectInfoService; import io.swagger.annotations.Api; @@ -19,6 +20,7 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotEmpty; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -115,10 +117,18 @@ * @return */ @PostMapping("/export/template") - public void exportTemplate(HttpServletResponse response, - @RequestBody List<String> fieldList - ) throws IOException { + public void exportTemplate(HttpServletResponse response) throws IOException { + List<String> fieldList = new ArrayList<>(); OutputExcelUtils.export(response, "瀵煎叆妯℃澘", "椤圭洰淇℃伅", null, ProjectExcelTemplate.class ,fieldList); } + /** + * 椤圭洰瀵煎嚭 + * @param response + * @throws IOException + */ + @PostMapping("/export") + public void export(HttpServletResponse response, ProjectExportQuery query) throws IOException { + projectInfoService.export(response, query); + } } diff --git a/business/src/main/java/com/ycl/domain/excel/ProjectExcelTemplate.java b/business/src/main/java/com/ycl/domain/excel/ProjectExcelTemplate.java index 58228b0..b1fdfa3 100644 --- a/business/src/main/java/com/ycl/domain/excel/ProjectExcelTemplate.java +++ b/business/src/main/java/com/ycl/domain/excel/ProjectExcelTemplate.java @@ -2,6 +2,11 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.fasterxml.jackson.annotation.JsonFormat; +import com.ycl.common.enums.business.ImportanceTypeEnum; +import com.ycl.common.enums.business.ProjectStatusEnum; +import com.ycl.common.enums.business.ProjectTypeEnum; +import com.ycl.common.utils.excel.annotation.ExcelEnumFormat; +import com.ycl.common.utils.excel.convert.ExcelEnumConvert; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -36,13 +41,15 @@ /** * 椤圭洰绫诲瀷 */ - @ExcelProperty(value = "椤圭洰绫诲瀷") + @ExcelProperty(value = "椤圭洰绫诲瀷",converter = ExcelEnumConvert.class) + @ExcelEnumFormat(enumClass = ProjectTypeEnum.class,codeField = "type",textField = "desc") private String projectType; /** * 椤圭洰鐘舵�� */ - @ExcelProperty(value = "椤圭洰鐘舵��") + @ExcelProperty(value = "椤圭洰鐘舵��",converter = ExcelEnumConvert.class) + @ExcelEnumFormat(enumClass = ProjectStatusEnum.class,codeField = "type",textField = "desc") private String projectStatus; /** @@ -60,7 +67,8 @@ /** * 閲嶇偣鍒嗙被 */ - @ExcelProperty(value = "閲嶇偣鍒嗙被") + @ExcelProperty(value = "閲嶇偣鍒嗙被",converter = ExcelEnumConvert.class) + @ExcelEnumFormat(enumClass = ImportanceTypeEnum.class,codeField = "type",textField = "desc") private String importanceType; /** diff --git a/business/src/main/java/com/ycl/domain/query/ProjectExportQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectExportQuery.java new file mode 100644 index 0000000..78907d1 --- /dev/null +++ b/business/src/main/java/com/ycl/domain/query/ProjectExportQuery.java @@ -0,0 +1,14 @@ +package com.ycl.domain.query; + +import lombok.Data; + +import java.util.List; +@Data +public class ProjectExportQuery { + //瀛楁鍒� + private List<String> fieldList; + //鍏蜂綋鐨刾rojectId + private List<Long> dataIdList; + //鏄惁闇�瑕侀檮浠� + private Boolean requireFile; +} diff --git a/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java b/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java index 161a304..34e9092 100644 --- a/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java +++ b/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.domain.entity.ProjectInfo; +import com.ycl.domain.excel.ProjectExcelTemplate; import com.ycl.domain.query.ProjectInfoQuery; import com.ycl.domain.vo.ProjectInfoVO; import com.ycl.domain.vo.ProjectVO; @@ -34,4 +35,5 @@ List<ProjectVO> homeCount(); + List<ProjectVO> selectProjectDetailByIds(@Param("dataIdList") List<Long> dataIdList); } diff --git a/business/src/main/java/com/ycl/service/ProjectInfoService.java b/business/src/main/java/com/ycl/service/ProjectInfoService.java index ffc3c51..cea7951 100644 --- a/business/src/main/java/com/ycl/service/ProjectInfoService.java +++ b/business/src/main/java/com/ycl/service/ProjectInfoService.java @@ -5,10 +5,12 @@ import com.ycl.domain.entity.ProjectInfo; import com.ycl.domain.form.DocumentInfoForm; import com.ycl.domain.form.ProjectInfoForm; +import com.ycl.domain.query.ProjectExportQuery; import com.ycl.domain.query.ProjectInfoQuery; import com.ycl.domain.vo.IndexCountVO; import com.ycl.domain.vo.IndexDTO; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -77,4 +79,6 @@ Result addDoc(DocumentInfoForm form); Result getManagerFlag(Integer recordId); + + void export(HttpServletResponse response, ProjectExportQuery query); } diff --git a/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java index 08b62f6..b865b20 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java @@ -1,5 +1,7 @@ package com.ycl.service.impl; +import cn.hutool.core.collection.CollUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -7,13 +9,18 @@ import com.ycl.common.enums.business.FileTypeEnum; import com.ycl.common.enums.business.ImportanceTypeEnum; import com.ycl.common.enums.business.ProjectCategoryEnum; +import com.ycl.common.exception.base.BaseException; import com.ycl.common.utils.CopyUtils; import com.ycl.common.utils.DateUtils; import com.ycl.common.utils.SecurityUtils; import com.ycl.common.utils.StringUtils; +import com.ycl.common.utils.bean.BeanUtils; +import com.ycl.common.utils.excel.OutputExcelUtils; import com.ycl.domain.entity.*; +import com.ycl.domain.excel.ProjectExcelTemplate; import com.ycl.domain.form.DocumentInfoForm; import com.ycl.domain.form.ProjectInfoForm; +import com.ycl.domain.query.ProjectExportQuery; import com.ycl.domain.query.ProjectInfoQuery; import com.ycl.domain.vo.*; import com.ycl.framework.utils.PageUtil; @@ -25,8 +32,11 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -163,7 +173,7 @@ } else if (ProjectCategoryEnum.PREVIOUS.getType().equals(projectCategory)) { query.setProjectStatus(ProjectCategoryEnum.PREVIOUS.getStatus()); query.setReserveOrPrevious(ProjectCategoryEnum.PREVIOUS.getCode()); - } else if (ProjectCategoryEnum.FINISH.getType().equals(projectCategory)) { + } else if (ProjectCategoryEnum.FINISH.getType().equals(projectCategory)) { query.setProjectStatus(ProjectCategoryEnum.FINISH.getStatus()); } else if (ProjectCategoryEnum.EXCEPTION.getType().equals(projectCategory)) { //TODO @@ -376,4 +386,30 @@ return Result.ok().data(false); } } + + @Override + public void export(HttpServletResponse response, ProjectExportQuery query) { + List<ProjectVO> data = baseMapper.selectProjectDetailByIds(query.getDataIdList()); + List<ProjectExcelTemplate> excelList = new ArrayList<>(); + //瀛楀吀浣滅炕璇� + data.forEach(item->{ + ProjectExcelTemplate excel = new ProjectExcelTemplate(); + BeanUtils.copyProperties(item,excel); + //椤圭洰闃舵 + excel.setProjectPhase(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(),item.getProcessId()!=null)); + excelList.add(excel); + }); + //琛ュ厖鏂囦欢鐨勫瓧娈� + Set<Integer> indexes = OutputExcelUtils.getSelectFields(query.getFieldList(), ProjectExcelTemplate.class); + //涓嶉渶瑕侀檮浠� + if(!query.getRequireFile()) { + try (ServletOutputStream outputStream = response.getOutputStream()) { + EasyExcel.write(outputStream, ProjectExcelTemplate.class).includeColumnIndexes(indexes).sheet("椤圭洰鍒楄〃").doWrite(excelList); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new BaseException("瀵煎嚭澶辫触锛�" + e.getMessage()); + } + } + //TODO锛氶渶瑕侀檮浠� + } } diff --git a/business/src/main/resources/mapper/ProjectInfoMapper.xml b/business/src/main/resources/mapper/ProjectInfoMapper.xml index f5f8b3b..4de8e29 100644 --- a/business/src/main/resources/mapper/ProjectInfoMapper.xml +++ b/business/src/main/resources/mapper/ProjectInfoMapper.xml @@ -162,5 +162,23 @@ LEFT JOIN t_project_investment_funding TPIF ON TPI.id = TPIF.project_id and TPIF.deleted = 0 LEFT JOIN t_project_process TPP ON TPI.id = TPP.project_id and TPP.deleted = 0 WHERE TPI.deleted = 0 -</select> + </select> + + <select id="selectProjectDetailByIds" resultType="com.ycl.domain.vo.ProjectVO"> + select * + from t_project_info TPI + left join t_project_investment_funding TPIF on TPI.id = TPIF.project_id and TPIF.deleted = 0 + left join t_project_investment_info TPII on TPI.id = TPII.project_id and TPII.deleted = 0 + left join t_project_unit_registration_info TPURI on TPI.id = TPURI.project_id and TPURI.deleted = 0 + left join t_project_investment_policy_compliance TPIPC on TPI.id = TPIPC.project_id and TPIPC.deleted = 0 + <where> + TPI.deleted =0 + <if test="dataIdList != null and dataIdList.size > 0"> + and TPI.id in + <foreach collection="dataIdList" item="id" separator="," open="(" close=")"> + #{id} + </foreach> + </if> + </where> + </select> </mapper> diff --git a/common/src/main/java/com/ycl/common/enums/business/ProjectStatusEnum.java b/common/src/main/java/com/ycl/common/enums/business/ProjectStatusEnum.java new file mode 100644 index 0000000..10e57fe --- /dev/null +++ b/common/src/main/java/com/ycl/common/enums/business/ProjectStatusEnum.java @@ -0,0 +1,30 @@ +package com.ycl.common.enums.business; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +/** + * 椤圭洰鐘舵�佹灇涓� + * + * @author锛歠lq + * @date锛�2024/11/27 18:21 + */ +@Getter +public enum ProjectStatusEnum { + PENDDING("pendding", "鏈紑宸�"), + WORKING("working","宸插紑宸�"), + FINISH("finish","宸茬宸�"), + STOP("stop", "鏆傚仠"); + + @EnumValue // 鏍囨槑璇ュ瓧娈靛瓨鍏ユ暟鎹簱 + private final String type; + + @JsonValue // 鏍囨槑鍦ㄨ浆JSON鏃朵娇鐢ㄨ瀛楁 + private final String desc; + + ProjectStatusEnum(String type, String desc) { + this.type = type; + this.desc = desc; + } +} diff --git a/common/src/main/java/com/ycl/common/enums/business/ProjectTypeEnum.java b/common/src/main/java/com/ycl/common/enums/business/ProjectTypeEnum.java new file mode 100644 index 0000000..2e1a9fa --- /dev/null +++ b/common/src/main/java/com/ycl/common/enums/business/ProjectTypeEnum.java @@ -0,0 +1,32 @@ +package com.ycl.common.enums.business; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +/** + * 椤圭洰绫诲瀷鏋氫妇 + * + * @author锛歠lq + * @date锛�2024/11/27 18:21 + */ +@Getter +public enum ProjectTypeEnum { + HOUSE("house", "鎴垮眿寤虹瓚"), + CITY("city","鍩庡競鍩虹璁炬柦"), + TRANSPORT("transport","浜ら�氳繍杈�"), + WATER("water", "姘村埄"), + ENERGY("energy", "鑳芥簮"), + NON_COAL_MINE("non_coal_mine", "闈炵叅鐭垮北"); + + @EnumValue // 鏍囨槑璇ュ瓧娈靛瓨鍏ユ暟鎹簱 + private final String type; + + @JsonValue // 鏍囨槑鍦ㄨ浆JSON鏃朵娇鐢ㄨ瀛楁 + private final String desc; + + ProjectTypeEnum(String type, String desc) { + this.type = type; + this.desc = desc; + } +} diff --git a/common/src/main/java/com/ycl/common/utils/excel/OutputExcelUtils.java b/common/src/main/java/com/ycl/common/utils/excel/OutputExcelUtils.java index 68d0bac..b1d2fb8 100644 --- a/common/src/main/java/com/ycl/common/utils/excel/OutputExcelUtils.java +++ b/common/src/main/java/com/ycl/common/utils/excel/OutputExcelUtils.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ZipUtil; import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.ycl.common.utils.excel.convert.ExcelBigNumberConvert; @@ -21,6 +22,7 @@ import java.lang.reflect.Field; import java.net.URLEncoder; import java.nio.file.Files; +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -155,8 +157,10 @@ public static <T> @NotNull Set<Integer> getSelectFields(List<String> fieldNames, Class<T> clazz) { Set<Integer> selectedIndexes = new HashSet<>(); if (CollUtil.isNotEmpty(fieldNames)) { - // 鍙嶅皠鑾峰彇瀛楁灞炴�� - Field[] declaredFields = clazz.getDeclaredFields(); + // 鍙嶅皠鑾峰彇瀛楁灞炴��,杩欓噷鍙幏鍙杄asyExcel娉ㄨВ鐨勫瓧娈� + Field[] declaredFields = Arrays.stream(clazz.getDeclaredFields()) + .filter(field -> field.isAnnotationPresent(ExcelProperty.class)) + .toArray(Field[]::new); // // 鍖归厤闇�瑕佸鍏ョ殑瀛楁 for (int i = 0; i < declaredFields.length; i++) { if (fieldNames.contains(declaredFields[i].getName())) { -- Gitblit v1.8.0