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