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