From ec9a95eb994018cc1ba28a80946165f795001dea Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 29 十一月 2024 16:49:24 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java  |   22 ++
 business/src/main/resources/mapper/ProjectInfoMapper.xml                              |   28 +++
 business/src/main/java/com/ycl/domain/excel/ProjectExcelTemplate.java                 |   14 +
 business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java                       |    3 
 business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml                |    1 
 common/src/main/java/com/ycl/common/enums/business/ImportanceTypeEnum.java            |   31 +++
 business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml                 |    1 
 business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java                          |    7 
 business/src/main/java/com/ycl/domain/query/ProjectExportQuery.java                   |   14 +
 common/src/main/java/com/ycl/common/enums/business/ProjectStatusEnum.java             |   30 +++
 business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java                     |   17 -
 business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java           |   13 +
 business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoItem.java                     |    2 
 business/src/main/java/com/ycl/controller/ProjectInfoController.java                  |   18 +
 business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java          |    2 
 business/src/main/resources/mapper/ProjectPlanInfoMapper.xml                          |    5 
 business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java               |  169 +++++++++++++++++---
 business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java    |    5 
 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/service/ProjectInfoService.java                        |    6 
 business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java |   29 +++
 22 files changed, 396 insertions(+), 61 deletions(-)

diff --git a/business/src/main/java/com/ycl/controller/ProjectInfoController.java b/business/src/main/java/com/ycl/controller/ProjectInfoController.java
index 768ed26..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;
 
 /**
@@ -58,7 +60,7 @@
     @DeleteMapping("/{id}")
     @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
 //    @PreAuthorize("hasAuthority('projectInfo:del')")
-    public Result removeById(@PathVariable("id") String id) {
+    public Result removeById(@PathVariable("id") Long id) {
         return projectInfoService.removeById(id);
     }
 
@@ -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/controller/ProjectPlanProgressReportController.java b/business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java
index 64db8ca..dc6aac4 100644
--- a/business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java
+++ b/business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java
@@ -40,6 +40,11 @@
         return projectPlanProgressReportService.add(form);
     }
 
+    @PostMapping("/examine")
+    public Result examine(@RequestBody @Validated(Add.class) ProgressReportResponseVO form) {
+        return projectPlanProgressReportService.examine(form);
+    }
+
     @PutMapping
     @ApiOperation(value = "淇敼", notes = "淇敼")
     @PreAuthorize("hasAuthority('projectPlanProgressReport:edit')")
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java b/business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java
index 02506a9..f82e768 100644
--- a/business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ycl.system.domain.base.AbsEntity;
+import com.ycl.system.domain.base.AbsEntityOnlyIdAndDeleted;
 import lombok.Data;
 
 import java.time.LocalDateTime;
@@ -18,7 +19,7 @@
  */
 @Data
 @TableName("t_project_plan_info")
-public class ProjectPlanInfo extends AbsEntity {
+public class ProjectPlanInfo extends AbsEntityOnlyIdAndDeleted {
 
     private static final long serialVersionUID = 1L;
 
@@ -35,23 +36,13 @@
     private Integer progressStatus;
 
     @TableField("start_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     /** 璁″垝寮�濮嬫椂闂� */
     private Date startTime;
 
     @TableField("end_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     /** 璁″垝瀹屾垚鏃堕棿 */
     private Date endTime;
 
-    /** 鍒涘缓鏃堕棿 */
-    @TableField(exist = false)
-    private Date gmtCreate;
-
-    /** 淇敼鏃堕棿 */
-    @TableField(exist = false)
-    private Date gmtUpdate;
-
-    @TableField(exist = false)
-    private Integer deleted;
 }
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/domain/vo/ProjectPlanInfoItem.java b/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoItem.java
index fee3153..8425346 100644
--- a/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoItem.java
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoItem.java
@@ -14,6 +14,8 @@
 @NoArgsConstructor
 public class ProjectPlanInfoItem {
     private String title;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date startTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date endTime;
 }
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java
index 6343fd5..d6f7810 100644
--- a/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java
@@ -2,6 +2,7 @@
 
 
 import com.ycl.domain.entity.ProjectPlanInfo;
+import com.ycl.system.domain.base.AbsEntity;
 import com.ycl.system.domain.base.AbsVo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -19,7 +20,7 @@
  */
 @Data
 @ApiModel(value = "椤圭洰璁″垝椤瑰搷搴旀暟鎹�", description = "椤圭洰璁″垝椤瑰搷搴旀暟鎹�")
-public class ProjectPlanInfoVO extends AbsVo {
+public class ProjectPlanInfoVO extends AbsEntity {
 
     /** 椤圭洰璁″垝璁板綍id */
     @ApiModelProperty("椤圭洰璁″垝璁板綍id")
diff --git a/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java b/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java
index fa9dd84..34e9092 100644
--- a/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java
+++ b/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java
@@ -3,10 +3,14 @@
 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;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 椤圭洰绠$悊鍩虹淇℃伅琛� Mapper 鎺ュ彛
@@ -29,4 +33,7 @@
     */
     IPage getPage(IPage page, @Param("query") ProjectInfoQuery query);
 
+    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 e98c556..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;
 
@@ -46,7 +48,7 @@
      * @param id
      * @return
      */
-    Result removeById(String id);
+    Result removeById(Long id);
 
     /**
      * 鍒嗛〉鏌ヨ
@@ -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/ProjectPlanProgressReportService.java b/business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java
index c9fbd88..1c22da4 100644
--- a/business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java
+++ b/business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java
@@ -64,4 +64,6 @@
      * @return
      */
     Result all();
+
+    Result examine(ProgressReportResponseVO form);
 }
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 3adc8f2..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,32 +1,42 @@
 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;
 import com.ycl.common.base.Result;
 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.domain.entity.File;
-import com.ycl.domain.entity.ProjectInfo;
+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;
-import com.ycl.mapper.FileMapper;
-import com.ycl.mapper.ProjectInfoMapper;
+import com.ycl.mapper.*;
 import com.ycl.service.FileService;
 import com.ycl.service.ProjectInfoService;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 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;
 
@@ -41,6 +51,10 @@
 public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, ProjectInfo> implements ProjectInfoService {
 
     private final ProjectInfoMapper projectInfoMapper;
+    private final ProjectInvestmentFundingMapper investmentFundingMapper;
+    private final ProjectInvestmentInfoMapper investmentInfoMapper;
+    private final ProjectInvestmentPolicyComplianceMapper policyMapper;
+    private final ProjectUnitRegistrationInfoMapper unitRegistrationInfoMapper;
     private final FileService fileService;
     private final FileMapper fileMapper;
 
@@ -109,7 +123,6 @@
      * @return
      */
     @Override
-    //TODO:寰呭畬鍠�
     public Result remove(List<String> ids) {
         baseMapper.deleteBatchIds(ids);
         return Result.ok("鍒犻櫎鎴愬姛");
@@ -122,8 +135,18 @@
      * @return
      */
     @Override
-    //TODO:寰呭畬鍠�
-    public Result removeById(String id) {
+    @Transactional(rollbackFor = Exception.class)
+    public Result removeById(Long id) {
+        investmentFundingMapper.delete(new QueryWrapper<ProjectInvestmentFunding>().eq("project_id", id));
+        investmentInfoMapper.delete(new QueryWrapper<ProjectInvestmentInfo>().eq("project_id", id));
+        policyMapper.delete(new QueryWrapper<ProjectInvestmentPolicyCompliance>().eq("project_id", id));
+        unitRegistrationInfoMapper.delete(new QueryWrapper<ProjectUnitRegistrationInfo>().eq("project_id", id));
+
+        List<String> types = new ArrayList<>();
+        types.add(FileTypeEnum.PROJECT_INFO.getType());
+        types.add(FileTypeEnum.INVEST_POLICY.getType());
+        types.add(FileTypeEnum.DOCUMENT_INFO.getType());
+        fileMapper.delete(new QueryWrapper<File>().eq("bus_id", id).in("type", types));
         baseMapper.deleteById(id);
         return Result.ok("鍒犻櫎鎴愬姛");
     }
@@ -143,6 +166,7 @@
             query.setProjectEndTime(DateUtils.getDayEnd(query.getProjectEndTime()));
         }
         String projectCategory = query.getProjectCategory();
+        //瀹炴柦闃舵鏈変袱涓�兼斁鍦╯ql澶勭悊
         if (ProjectCategoryEnum.RESERVE.getType().equals(projectCategory)) {
             query.setProjectStatus(ProjectCategoryEnum.RESERVE.getStatus());
             query.setReserveOrPrevious(ProjectCategoryEnum.RESERVE.getCode());
@@ -165,10 +189,10 @@
         List<ProjectInfoVO> records = page.getRecords();
         List<ProjectVO> list = new ArrayList<>();
         records.forEach(vo -> {
-                    ProjectInfoVO.transform(vo);
-                    vo.setProjectColorCode("green");
+            ProjectInfoVO.transform(vo);
+            vo.setProjectColorCode("green");
             ProjectVO projectVO = new ProjectVO();
-            copyToProjectVO(vo,projectVO);
+            copyToProjectVO(vo, projectVO);
             //缈昏瘧椤圭洰闃舵
             String phase = ProjectCategoryEnum.getPhaseByProjectStatus(projectVO.getProjectStatus(), projectVO.getProcessId() != null);
             projectVO.setProjectPhase(phase);
@@ -177,13 +201,17 @@
         return Result.ok().data(list).total(page.getTotal());
     }
 
-    private void copyToProjectVO(ProjectInfoVO vo,ProjectVO projectVO) {
+    private void copyToProjectVO(ProjectInfoVO vo, ProjectVO projectVO) {
         //蹇界暐null鍊肩殑澶嶅埗
         CopyUtils.copyNoNullProperties(vo, projectVO);
-        if(vo.getProjectInvestmentFunding()!=null) CopyUtils.copyNoNullProperties(vo.getProjectInvestmentFunding(),projectVO);
-        if(vo.getProjectInvestmentInfo()!=null)  CopyUtils.copyNoNullProperties(vo.getProjectInvestmentInfo(),projectVO);
-        if(vo.getProjectUnitRegistrationInfo()!=null)  CopyUtils.copyNoNullProperties(vo.getProjectUnitRegistrationInfo(),projectVO);
-        if(vo.getProjectInvestmentPolicyCompliance()!=null)  CopyUtils.copyNoNullProperties(vo.getProjectInvestmentPolicyCompliance(),projectVO);
+        if (vo.getProjectInvestmentInfo() != null)
+            CopyUtils.copyNoNullProperties(vo.getProjectInvestmentInfo(), projectVO);
+        if (vo.getProjectUnitRegistrationInfo() != null)
+            CopyUtils.copyNoNullProperties(vo.getProjectUnitRegistrationInfo(), projectVO);
+        if (vo.getProjectInvestmentPolicyCompliance() != null)
+            CopyUtils.copyNoNullProperties(vo.getProjectInvestmentPolicyCompliance(), projectVO);
+        if (vo.getProjectInvestmentFunding() != null)
+            CopyUtils.copyNoNullProperties(vo.getProjectInvestmentFunding(), projectVO);
     }
 
     /**
@@ -229,17 +257,80 @@
         // {"type":"鐪侀噸鐐归」鐩�","count":0,"amount":"0.00","text":"鐪�"}]}}
         IndexCountVO indexCountVO = new IndexCountVO();
         List<IndexProPhaseCountVO> proPhaseCountVO = new ArrayList<>();
-        proPhaseCountVO.add(new IndexProPhaseCountVO("鍌ㄥ瑙勫垝闃舵", 0, "0.00", "鍌�"));
-        proPhaseCountVO.add(new IndexProPhaseCountVO("椤圭洰鍓嶆湡闃舵", 0, "0.00", "鏂�"));
-        proPhaseCountVO.add(new IndexProPhaseCountVO("瀹炴柦闃舵", 0, "0.00", "寤�"));
-        proPhaseCountVO.add(new IndexProPhaseCountVO("绔e伐鎶曠敤闃舵", 0, "0.00", "绔�"));
-        List<IndexImpTypeCountVO> impTypeCountVO = new ArrayList<>();
-        impTypeCountVO.add(new IndexImpTypeCountVO("涓�鑸」鐩�", 0, "0.00", "鏅�"));
-        impTypeCountVO.add(new IndexImpTypeCountVO("鍘块噸鐐归」鐩�", 0, "0.00", "鍘�"));
-        impTypeCountVO.add(new IndexImpTypeCountVO("甯傞噸鐐归」鐩�", 0, "0.00", "甯�"));
-        impTypeCountVO.add(new IndexImpTypeCountVO("鐪侀噸鐐归」鐩�", 0, "0.00", "鐪�"));
-        indexCountVO.setImpTypeCountVO(impTypeCountVO);
+        List<ProjectVO> projectVOS = baseMapper.homeCount();
+        List<ProjectVO> reserve = new ArrayList<>();
+        List<ProjectVO> previous = new ArrayList<>();
+        List<ProjectVO> implement = new ArrayList<>();
+        List<ProjectVO> finish = new ArrayList<>();
+        List<ProjectVO> normal = new ArrayList<>();
+        List<ProjectVO> province = new ArrayList<>();
+        List<ProjectVO> city = new ArrayList<>();
+        List<ProjectVO> county = new ArrayList<>();
+        projectVOS.forEach(item -> {
+            if (ProjectCategoryEnum.RESERVE.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) {
+                reserve.add(item);
+            } else if (ProjectCategoryEnum.PREVIOUS.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) {
+                previous.add(item);
+            } else if (ProjectCategoryEnum.IMPLEMENT.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) {
+                implement.add(item);
+            } else if (ProjectCategoryEnum.FINISH.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) {
+                finish.add(item);
+            }
+
+            if (ImportanceTypeEnum.PROVINCIAL_KEY.getType().equals(item.getImportanceType())) {
+                province.add(item);
+            } else if (ImportanceTypeEnum.SUINING_KEY.getType().equals(item.getImportanceType())) {
+                city.add(item);
+            } else if (ImportanceTypeEnum.SHEHONG_KEY.getType().equals(item.getImportanceType())) {
+                county.add(item);
+            } else if (ImportanceTypeEnum.NORMAL.getType().equals(item.getImportanceType())) {
+                normal.add(item);
+            }
+        });
+        //鍗曚綅鍏堥粯璁や负鍏�
+        proPhaseCountVO.add(new IndexProPhaseCountVO("鍌ㄥ瑙勫垝闃舵", reserve.size(), reserve.stream().
+                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
+                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
+                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鍌�"));
+
+        proPhaseCountVO.add(new IndexProPhaseCountVO("椤圭洰鍓嶆湡闃舵", previous.size(), previous.stream().
+                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
+                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
+                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鏂�"));
+
+        proPhaseCountVO.add(new IndexProPhaseCountVO("瀹炴柦闃舵", implement.size(), implement.stream().
+                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
+                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
+                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "寤�"));
+
+        proPhaseCountVO.add(new IndexProPhaseCountVO("绔e伐鎶曠敤闃舵", finish.size(), finish.stream().
+                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
+                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
+                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "绔�"));
+
         indexCountVO.setProPhaseCountVO(proPhaseCountVO);
+
+        List<IndexImpTypeCountVO> impTypeCountVO = new ArrayList<>();
+        impTypeCountVO.add(new IndexImpTypeCountVO("涓�鑸」鐩�", province.size(), province.stream().
+                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
+                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
+                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鏅�"));
+
+        impTypeCountVO.add(new IndexImpTypeCountVO("鍘块噸鐐归」鐩�", city.size(), city.stream().
+                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
+                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
+                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鍘�"));
+
+        impTypeCountVO.add(new IndexImpTypeCountVO("甯傞噸鐐归」鐩�", county.size(), county.stream().
+                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
+                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
+                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "甯�"));
+
+        impTypeCountVO.add(new IndexImpTypeCountVO("鐪侀噸鐐归」鐩�", normal.size(), normal.stream().
+                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
+                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
+                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鐪�"));
+        indexCountVO.setImpTypeCountVO(impTypeCountVO);
 
 
         return indexCountVO;
@@ -295,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/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java
index d6086a7..c7eb055 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java
@@ -4,8 +4,10 @@
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.ycl.common.utils.SecurityUtils;
 import com.ycl.domain.entity.ProjectPlanExamineRecord;
+import com.ycl.domain.entity.ProjectPlanRecord;
 import com.ycl.domain.vo.DepartmentApprovalResponseVO;
 import com.ycl.mapper.ProjectPlanExamineRecordMapper;
+import com.ycl.mapper.ProjectPlanRecordMapper;
 import com.ycl.service.ProjectPlanExamineRecordService;
 import com.ycl.common.base.Result;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -33,6 +35,7 @@
 public class ProjectPlanExamineRecordServiceImpl extends ServiceImpl<ProjectPlanExamineRecordMapper, ProjectPlanExamineRecord> implements ProjectPlanExamineRecordService {
 
     private final ProjectPlanExamineRecordMapper projectPlanExamineRecordMapper;
+    private final ProjectPlanRecordMapper projectPlanRecordMapper;
 
     /**
      * 娣诲姞
@@ -150,10 +153,21 @@
 
     @Override
     public Result saveExamine(ProjectPlanExamineRecordForm form) {
-        ProjectPlanExamineRecord projectPlanExamineRecord = ProjectPlanExamineRecordForm.getEntityByForm(form, null);
-        projectPlanExamineRecord.setDepartmentUserId(SecurityUtils.getUserId());
-        projectPlanExamineRecord.setManagerUserId(SecurityUtils.getUserId());
-        baseMapper.updateById(projectPlanExamineRecord);
+        // 鍒ゆ柇锛屽鏋滈兘鍚屾剰锛屽垯鐩存帴鏇存柊瀹℃壒璁板綍
+        if (null != form.getDepartmentExamine() && null != form.getManageExamine() && form.getDepartmentExamine() == 0 && form.getManageExamine() == 0){
+            ProjectPlanExamineRecord projectPlanExamineRecord = ProjectPlanExamineRecordForm.getEntityByForm(form, null);
+            projectPlanExamineRecord.setId(form.getId().longValue());
+            projectPlanExamineRecord.setDepartmentUserId(SecurityUtils.getUserId());
+            projectPlanExamineRecord.setManagerUserId(SecurityUtils.getUserId());
+            baseMapper.updateById(projectPlanExamineRecord);
+        }
+        // 鍚﹀垯锛屽皢椤圭洰璁板綍璁剧疆涓烘湭涓婃姤锛屽苟灏嗚褰曢�昏緫鍒犻櫎
+        new LambdaUpdateChainWrapper<>(projectPlanRecordMapper)
+                .eq(ProjectPlanRecord::getId, form.getProjectPlanRecordId())
+                .set(ProjectPlanRecord::getReportStatus,1);
+        new LambdaUpdateChainWrapper<>(baseMapper)
+                .eq(ProjectPlanExamineRecord::getProjectPlanRecordId, form.getProjectPlanRecordId())
+                .remove();
         return Result.ok("鍥炲鎴愬姛");
     }
 }
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java
index a202490..5c0b5fa 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java
@@ -139,7 +139,10 @@
             return Result.error("璇烽�夋嫨瑕佹坊鍔犵殑璁″垝椤�");
         }}
         // 鍒犻櫎鍘熸湁璁板綍
-        new LambdaUpdateChainWrapper<>(baseMapper).eq(ProjectPlanInfo::getProjectPlanRecordId, request.getProjectPlanRecordId()).remove();
+        new LambdaUpdateChainWrapper<>(baseMapper)
+                .eq(ProjectPlanInfo::getProjectPlanRecordId, request.getProjectPlanRecordId())
+                .set(ProjectPlanInfo::getDeleted, 1)
+                .update();
         // 鎵归噺鎻掑叆鏂拌褰�
         List<ProjectPlanInfo> list = new ArrayList<>();
         request.getAddList().forEach(item -> {
@@ -149,15 +152,19 @@
             projectPlanInfo.setProgressStatus(0);
             projectPlanInfo.setStartTime(item.getStartTime());
             projectPlanInfo.setEndTime(item.getEndTime());
+            projectPlanInfo.setDeleted(0);
             list.add(projectPlanInfo);
         });
-        baseMapper.batchInsert(list);
+        list.stream().forEach(i -> {
+            baseMapper.insert(i);
+        });
         // 鏇存柊璁″垝璁板綍鐨勬姇璧�,浠ュ強涓婃姤鐘舵��
         new LambdaUpdateChainWrapper<>(projectPlanRecordMapper)
                 .eq(ProjectPlanRecord::getId, request.getProjectPlanRecordId())
                 .set(ProjectPlanRecord::getActualInvest, request.getActualInvest())
                 .set(ProjectPlanRecord::getReportStatus, 0)
                 .update();
+
         // 鏂板涓�鏉″鏍歌褰�
         ProjectPlanExamineRecord item = new ProjectPlanExamineRecord();
         item.setProjectPlanRecordId(request.getProjectPlanRecordId().longValue());
@@ -166,8 +173,8 @@
         item.setDeleted(0);
         list.stream().forEach(i -> {
             item.setProjectPlanInfoId(i.getId().longValue());
-//            projectPlanExamineRecordMapper.insert(item);
             projectPlanExamineRecordMapper.insertOne(item);
+//            projectPlanExamineRecordMapper.insertOne(item);
         });
         return Result.ok("娣诲姞鎴愬姛");
     }
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java
index ae2e7e6..1a1384a 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java
@@ -68,7 +68,6 @@
             baseMapper.insertOne(projectPlanProgressReport);
         }else {
             projectPlanProgressReport.setId(form.getProgressReportId());
-//            baseMapper.updateOne(projectPlanProgressReport);
             baseMapper.updateById(projectPlanProgressReport);
         }
 
@@ -182,4 +181,32 @@
                 .collect(Collectors.toList());
         return Result.ok().data(vos);
     }
+
+    @Override
+    public Result examine(ProgressReportResponseVO form) {
+        // 鏇存柊瀹℃壒璁板綍
+        ProjectPlanExamineRecord record = new ProjectPlanExamineRecord();
+        record.setId(form.getExamineRecordId().longValue());
+        record.setDepartmentExamine(form.getDepartmentExamine());
+        record.setDepartmentApproval(form.getDepartmentApproval());
+        record.setManageExamine(form.getManageExamine());
+        record.setManageApproval(form.getManageApproval());
+        projectPlanExamineRecordMapper.updateById(record);
+
+        // 鏇存柊璁″垝椤圭姸鎬�
+        if (form.getDepartmentExamine() == 0 && form.getManageExamine() == 0){
+            new LambdaUpdateChainWrapper<>(projectPlanInfoMapper)
+                   .eq(ProjectPlanInfo::getId, form.getId())
+                   .set(ProjectPlanInfo::getProgressStatus, 3)
+                   .update();
+        }else {
+            new LambdaUpdateChainWrapper<>(projectPlanInfoMapper)
+                    .eq(ProjectPlanInfo::getId, form.getId())
+                    .set(ProjectPlanInfo::getProgressStatus, 2)
+                    .update();
+        }
+
+
+        return Result.ok("瀹℃壒鎴愬姛");
+    }
 }
diff --git a/business/src/main/resources/mapper/ProjectInfoMapper.xml b/business/src/main/resources/mapper/ProjectInfoMapper.xml
index 0da2550..4de8e29 100644
--- a/business/src/main/resources/mapper/ProjectInfoMapper.xml
+++ b/business/src/main/resources/mapper/ProjectInfoMapper.xml
@@ -149,8 +149,36 @@
             <if test="query.reserveOrPrevious != null and query.reserveOrPrevious == 'previous'">
                 and TPP.process_instance_id is not null
             </if>
+            <if test="query.projectCategory == 3">
+                and (TPI.project_status = 'working' or TPI.project_status = 'stop')
+            </if>
         </where>
         order by TPI.gmt_create
     </select>
 
+    <select id="homeCount" resultType="com.ycl.domain.vo.ProjectVO">
+        SELECT TPI.*,TPIF.total_investment,TPP.process_instance_id as processId
+        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_process TPP ON TPI.id = TPP.project_id and TPP.deleted = 0
+        WHERE TPI.deleted = 0
+    </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/business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml b/business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml
index 1f5eea5..2e939a8 100644
--- a/business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml
+++ b/business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml
@@ -145,6 +145,7 @@
                  WHERE project_plan_record_id = #{projectPlanRecordId}
              ) AS ranked
         WHERE rn = 1 AND ranked.deleted = 0
+        Order by gmt_create DESC
     </select>
 
     <select id="getPlanLog" resultType="com.ycl.domain.vo.DepartmentApprovalResponseVO">
diff --git a/business/src/main/resources/mapper/ProjectPlanInfoMapper.xml b/business/src/main/resources/mapper/ProjectPlanInfoMapper.xml
index ebc1fb4..eec02c6 100644
--- a/business/src/main/resources/mapper/ProjectPlanInfoMapper.xml
+++ b/business/src/main/resources/mapper/ProjectPlanInfoMapper.xml
@@ -9,12 +9,13 @@
         <result column="progress_status" property="progressStatus" />
         <result column="start_time" property="startTime" />
         <result column="end_time" property="endTime" />
+        <result column="deleted" property="deleted" />
     </resultMap>
     <insert id="batchInsert" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
-        insert into t_project_plan_info(project_plan_record_id, title, progress_status, start_time, end_time)
+        insert into t_project_plan_info(project_plan_record_id, title, progress_status, start_time, end_time, deleted)
         values
         <foreach collection="list" item="item" separator=",">
-            (#{item.projectPlanRecordId}, #{item.title}, #{item.progressStatus}, #{item.startTime}, #{item.endTime})
+            (#{item.projectPlanRecordId}, #{item.title}, #{item.progressStatus}, #{item.startTime}, #{item.endTime}, #{item.deleted})
         </foreach>
     </insert>
     <insert id="insertOne">
diff --git a/business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml b/business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml
index 5e7ddeb..8d2b74d 100644
--- a/business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml
+++ b/business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml
@@ -93,7 +93,6 @@
                  LEFT JOIN t_project_plan_progress_report AS pppr ON pppr.project_plan_info_id = ppi.id
                  RIGHT JOIN t_project_plan_examine_record AS pper ON pper.project_plan_info_id = ppi.id
         WHERE ppi.id = #{id}
-        ORDER BY pper.gmt_create DESC LIMIT 1
     </select>
 
 </mapper>
diff --git a/common/src/main/java/com/ycl/common/enums/business/ImportanceTypeEnum.java b/common/src/main/java/com/ycl/common/enums/business/ImportanceTypeEnum.java
new file mode 100644
index 0000000..056a218
--- /dev/null
+++ b/common/src/main/java/com/ycl/common/enums/business/ImportanceTypeEnum.java
@@ -0,0 +1,31 @@
+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 ImportanceTypeEnum {
+    PROVINCIAL_KEY("provincial_key", "鐪侀噸鐐�"),
+    SUINING_KEY("suining_key","閬傚畞甯傞噸鐐�"),
+    //鍘块噸鐐�
+    SHEHONG_KEY("shehong_key","灏勬椽甯傞噸鐐�"),
+    NORMAL("normal", "涓�鑸�");
+
+    @EnumValue // 鏍囨槑璇ュ瓧娈靛瓨鍏ユ暟鎹簱
+    private final String type;
+
+    @JsonValue // 鏍囨槑鍦ㄨ浆JSON鏃朵娇鐢ㄨ瀛楁
+    private final String desc;
+
+    ImportanceTypeEnum(String type, String desc) {
+        this.type = type;
+        this.desc = desc;
+    }
+}
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