diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index b77def4..37d59c6 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -26,6 +26,11 @@
             <artifactId>jsoup</artifactId>
             <version>1.14.3</version>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>3.3.3</version>
+        </dependency>
 
         <!--        本地文件转为MultipartFile file ,因为我加了oss上传,无上传可不加, 如有启动错误请改变版本号-->
         <dependency>
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/docking/entity/SmartReminders.java b/ruoyi-admin/src/main/java/com/ruoyi/docking/entity/SmartReminders.java
index 8a573ce..00e92ed 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/docking/entity/SmartReminders.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/docking/entity/SmartReminders.java
@@ -67,9 +67,9 @@ public class SmartReminders extends BaseModel implements Serializable {
     private Integer alertType;
 
     /**
-     * 提前天数提醒
+     * 提前月数提醒
      */
-    @ApiModelProperty("提前天数提醒")
+    @ApiModelProperty("提前月数提醒")
     private Integer daysAdvance;
 
     /**
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/controller/ZwStatsController.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/controller/ZwStatsController.java
index 5483701..726ae58 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/controller/ZwStatsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/controller/ZwStatsController.java
@@ -26,7 +26,7 @@ import javax.annotation.Resource;
 @Api(tags = "政务统计")
 @RestController
 @RequestMapping("/gysl/zwStats")
-@PreAuthorize("@ss.hasAnyRoles('admin,common')")
+//@PreAuthorize("@ss.hasAnyRoles('admin,common')")
 public class ZwStatsController extends BaseController {
 
     @Resource
@@ -40,8 +40,8 @@ public class ZwStatsController extends BaseController {
      */
     @ApiOperation("整体项目情况")
     @GetMapping("/allProject")
-    public AjaxResult allProject() {
-        return success(zwStatsService.allProject());
+    public AjaxResult allProject(String years) {
+        return success(zwStatsService.allProject(years));
     }
 
     /**
@@ -49,8 +49,8 @@ public class ZwStatsController extends BaseController {
      */
     @ApiOperation("功能区")
     @GetMapping("/ribbon")
-    public AjaxResult ribbon() {
-        return success(zwStatsService.ribbon());
+    public AjaxResult ribbon(String years) {
+        return success(zwStatsService.ribbon(years));
     }
 
     /**
@@ -58,8 +58,8 @@ public class ZwStatsController extends BaseController {
      */
     @ApiOperation("投资主体")
     @GetMapping("/investors")
-    public AjaxResult investors() {
-        return success(zwStatsService.investors());
+    public AjaxResult investors(String years) {
+        return success(zwStatsService.investors(years));
     }
 
     /**
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/BasicInformation.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/BasicInformation.java
index 2cd6ff4..78ba250 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/BasicInformation.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/BasicInformation.java
@@ -4,18 +4,15 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.gysl.entity.baseModel.BaseModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.apache.poi.ss.usermodel.IndexedColors;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotBlank;
 import java.math.BigDecimal;
-import java.time.LocalDate;
 
 /**
  * 基本信息(BasicInformation)表实体类
@@ -55,7 +52,7 @@ public class BasicInformation extends BaseModel {
 
 
     @NotBlank
-    @Excel(name = "项目法人单位", sort = 4, required = true,type= Excel.Type.ALL)
+    @Excel(name = "项目法人单位*", sort = 4, required = true,type= Excel.Type.ALL,headerBackgroundColor= IndexedColors.RED1)
     @ApiModelProperty("项目法人单位")
     private String xmfrdwxz;
 
@@ -83,17 +80,13 @@ public class BasicInformation extends BaseModel {
     private Integer ssgnq;
 
 
-    @ApiModelProperty("建设开始时间")
-    @Excel(name = "建设开始时间", dateFormat = "yyyy-MM-dd", sort = 5,type= Excel.Type.ALL)
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate begainTime;
+    @ApiModelProperty("建设开始时间 yyyy-MM")
+    @Excel(name = "建设开始时间",  sort = 5,type= Excel.Type.ALL)
+    private String begainTime;
 
-    @ApiModelProperty("建设结束时间")
-    @Excel(name = "建设结束时间", dateFormat = "yyyy-MM-dd", sort = 6,type= Excel.Type.ALL)
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate endTime;
+    @ApiModelProperty("建设结束时间 yyyy-MM")
+    @Excel(name = "建设结束时间",  sort = 6,type= Excel.Type.ALL)
+    private String endTime;
 
     @NotBlank
     @Excel(name = "现状分类", sort = 3, dictType = "xzfl", comboReadDict = true,type= Excel.Type.ALL)
@@ -169,5 +162,9 @@ public class BasicInformation extends BaseModel {
     @ApiModelProperty("0非负面清单 1是负面清单")
     private Integer isFmqd;
 
+    @ApiModelProperty("计划投资额")
+    @Excel(name = "计划投资额",type = Excel.Type.EXPORT )
+    private BigDecimal jhtze;
+
 }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/PlanInformation.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/PlanInformation.java
index c1351b4..3e12d5a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/PlanInformation.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/PlanInformation.java
@@ -66,7 +66,7 @@ public class PlanInformation extends BaseModel implements Serializable {
      */
     @Excel(name = "标准层建筑面积",headerBackgroundColor= IndexedColors.RED1,required = true)
     @ApiModelProperty(value = "标准层建筑面积")
-    private BigDecimal bzcjzmj;
+    private String bzcjzmj;
 
     /**
      * 计容积率建筑面积
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/request/BasicInformationPageReq.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/request/BasicInformationPageReq.java
index 7d0d702..5189c3f 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/request/BasicInformationPageReq.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/request/BasicInformationPageReq.java
@@ -7,6 +7,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotBlank;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.Date;
 
 /**
@@ -23,15 +24,15 @@ public class BasicInformationPageReq {
     @ApiModelProperty("项目法人单位")
     private String xmfrdwxz;
 
-    @ApiModelProperty("建设起止时间-开始时间")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date startTime;
+    @ApiModelProperty("建设起止时间-开始时间 yyyy-MM")
+//    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM", timezone = "GMT+8")
+//    @DateTimeFormat(pattern = "yyyy-MM")
+    private String startTime;
 
-    @ApiModelProperty("建设起止时间-结束时间")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date endTime;
+    @ApiModelProperty("建设起止时间-结束时间 yyyy-MM")
+//    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM", timezone = "GMT+8")
+//    @DateTimeFormat(pattern = "yyyy-MM")
+    private String endTime;
 
     @ApiModelProperty("现状分类")
     private Integer xzfl;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/request/BasicRequest.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/request/BasicRequest.java
deleted file mode 100644
index 3e4898b..0000000
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/request/BasicRequest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.ruoyi.gysl.entity.request;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.common.annotation.Excel;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.util.Date;
-
-/**
- * @author dong
- * @since 2025/2/26 9:20
- */
-@Data
-@ApiModel("基本信息导出类")
-public class BasicRequest implements Serializable {
-
-    @Excel(name = "序号")
-    private Integer id;
-
-
-    //项目名称
-    @Excel(name = "项目名称")
-    @ApiModelProperty("项目名称")
-    private String name;
-
-
-    //项目法人单位
-    @Excel(name = "项目法人单位")
-    @ApiModelProperty("项目法人单位")
-    private String xmfrdwxz;
-
-
-
-    //总投资额
-    @Excel(name = "总投资额(万元)")
-    @ApiModelProperty("总投资额")
-    private BigDecimal ztze;
-
-
-    //所属功能区
-    @Excel(name = "所属功能区")
-    @ApiModelProperty("所属功能区")
-    private Integer ssgnq;
-
-
-    //建设开始时间
-    @Excel(name = "建设开始时间")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @ApiModelProperty("建设开始时间")
-    private LocalDateTime begainTime;
-
-
-    //建设结束时间
-    @Excel(name = "建设结束时间")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @ApiModelProperty("建设结束时间")
-    private LocalDateTime endTime;
-
-    //现状分类
-    @Excel(name = "现状分类")
-    @ApiModelProperty("现状分类")
-    private Integer xzfl;
-
-
-    /**
-     * 总用地面积
-     */
-    @ApiModelProperty(value = "总用地面积(平方米)")
-    @Excel(name = "总用地面积")
-    private BigDecimal zydmj;
-
-
-
-}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/response/ProjectExcelInfo.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/response/ProjectExcelInfo.java
index 061e453..d27f091 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/response/ProjectExcelInfo.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/response/ProjectExcelInfo.java
@@ -1,11 +1,14 @@
 package com.ruoyi.gysl.entity.response;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.constraints.NotBlank;
 import java.math.BigDecimal;
-import java.util.List;
+import java.time.LocalDate;
 
 /**
  * 项目导出信息
@@ -14,41 +17,81 @@ import java.util.List;
  */
 @Data
 public class ProjectExcelInfo {
+    @Excel(name = "项目法人单位",height=30)
+    @ApiModelProperty("项目法人单位")
+    private String xmfrdwxz;
+
 
-    //--基本信息
-    @Excel(name="id",group = "序号")
-    @ApiModelProperty("序号")
-    private String id;
 
-    @Excel(name = "项目名称",group = "项目基础信息")
+    @Excel(name = "项目法人单位性质",dictType = "xmfrdwxz",width = 20)
+    @ApiModelProperty("项目法人单位性质")
+    private Integer nature;
+
+    @Excel(name = "项目名称")
     @ApiModelProperty("项目名称")
     private String name;
 
-    @Excel(name = "项目法人单位",group = "项目基础信息")
-    @ApiModelProperty("项目法人单位")
-    private String xmfrdwxz;
+    @Excel(name = "现状分类(已建/在建/拟建)",dictType = "xzfl", comboReadDict = true,width = 24)
+    @ApiModelProperty("现状分类")
+    private Integer xzfl;
 
-    @Excel(name = "项目法人单位性质",group = "项目基础信息",dictType = "xmfrdwxz")
-    @ApiModelProperty("项目法人单位性质")
-    private Integer nature;
+    @ApiModelProperty("项目建设开始时间 yyyy-MM")
+    @Excel(name = "项目建设开始时间")
+    private String begainTime;
+
+    @ApiModelProperty("项目建设结束时间 yyyy-MM")
+    @Excel(name = "项目建设结束时间")
+    private String endTime;
+
+    @ApiModelProperty("计划投资额")
+    @Excel(name = "计划投资额(亿元)",width = 20)
+    private BigDecimal jhtze;
 
     //--规划信息
-    @Excel(name = "总用地面积",group = "项目规划信息")
-    @ApiModelProperty(value = "总用地面积")
+    @Excel(name = "总用地面积(平方米)",width = 20)
+    @ApiModelProperty(value = "总用地面积(平方米)")
     private BigDecimal zydmj;
 
-    @Excel(name = "容积率",group = "项目规划信息")
+    @Excel(name = "容积率")
     @ApiModelProperty(value = "容积率")
     private BigDecimal rjl;
 
-    @Excel(name = "总建筑面积",group = "项目规划信息")
+    @Excel(name = "总建筑面积(平方米)")
     @ApiModelProperty(value = "总建筑面积")
     private BigDecimal zjzmj;
 
-    @Excel(name = "标准层建筑面积",group = "项目规划信息")
+    @Excel(name = "标准层建筑面积(千平方米)",width = 20)
     @ApiModelProperty(value = "标准层建筑面积")
-    private BigDecimal bzcjzmj;
+    private String bzcjzmj;
+
+
+    //---------
+
+    @Excel(name = "重点发展产业(原则上不超过三个)",width = 20)
+    @ApiModelProperty("重点发展产业")
+    private String prioritize;
+
+    @ApiModelProperty("项目负责人")
+    @Excel(name = "项目负责人")
+    private String projectLeader;
+
+    @NotBlank
+    @ApiModelProperty("联系方式")
+    @Excel(name = "联系方式",type = Excel.Type.EXPORT)
+    private String phone;
+
+    @ApiModelProperty("建设进度")
+    @Excel(name = "建设进度(或运营情况)")
+    private String jsjd;
+
+    @Excel(name = "建设模式(新供地实施/利用存量用地改扩建)",width = 22,dictType = "jsms",comboReadDict = true)
+    @ApiModelProperty("建设模式")
+    private Integer jsms;
+
+
+    //=====已有项目导入需要的字段
+    @ApiModelProperty("项目建设起止时间")
+    @Excel(name = "项目建设起止时间")
+    private String a1;
 
-    //--建筑信息
-    private List<ProjectBuildingExcel> xmjzxx;
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/stats/AllProjectResponse.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/stats/AllProjectResponse.java
index 24d67a4..dc725ff 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/stats/AllProjectResponse.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/stats/AllProjectResponse.java
@@ -41,4 +41,7 @@ public class AllProjectResponse {
 
     @ApiModelProperty("当年_在建数量")
     private Integer currentBuilding2;
+
+    @ApiModelProperty("当年_拟建数量")
+    private Integer currentBuilding3;
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/BasicInformationMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/BasicInformationMapper.java
index 24e9ddb..67a89fd 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/BasicInformationMapper.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/BasicInformationMapper.java
@@ -18,9 +18,9 @@ import java.util.List;
 public interface BasicInformationMapper extends BaseMapper<BasicInformation> {
 
     /**
-     * 根据基本信息的id列表来查找
+     * 导出项目数据
      */
-    List<ProjectExcelInfo> selectList(@Param("idList") List<Long> idList);
+    List<ProjectExcelInfo> selectList();
 
     /**
      * 分页查询所有数据
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/ZwStatsMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/ZwStatsMapper.java
index 7f47d05..64d3e39 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/ZwStatsMapper.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/ZwStatsMapper.java
@@ -17,17 +17,17 @@ public interface ZwStatsMapper {
     /**
      * 项目情况
      */
-    AllProjectResponse allProject();
+    AllProjectResponse allProject(@Param("years") String years);
 
     /**
      * 功能区
      */
-    List<RibbonResponse> ribbon();
+    List<RibbonResponse> ribbon(@Param("years") String years);
 
     /**
      * 投资主体
      */
-    List<RibbonResponse> investors();
+    List<RibbonResponse> investors(@Param("years") String years);
 
     /**
      * 消息通知
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/regular/NoticeTiming.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/regular/NoticeTiming.java
index 53184db..c7080d1 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/regular/NoticeTiming.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/regular/NoticeTiming.java
@@ -5,11 +5,14 @@ import com.ruoyi.docking.entity.SmartReminders;
 import com.ruoyi.docking.service.*;
 import com.ruoyi.gysl.entity.BasicInformation;
 import com.ruoyi.gysl.service.BasicInformationService;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.time.LocalDate;
+import java.time.YearMonth;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+import java.time.format.ResolverStyle;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -84,22 +87,37 @@ public class NoticeTiming {
         //获取所有的项目
         List<BasicInformation> list = basicInformationService.list();
         List<BasicInformation> list1 = basicInformationService.list();
-        //如果当前时间在该项目的结束时间前自定义的提前天数之前,就去掉
+        //如果当前时间在该项目的结束时间前自定义的提前月数之前,就去掉
         list.removeIf(x ->
-                !(LocalDate.now().equals(x.getEndTime().minusDays(qy.getDaysAdvance())))
+                LocalDate.now().isBefore(convertToLocalDate(x.getEndTime()).minusMonths(qy.getDaysAdvance()))
         );
         list.forEach(x -> {
             SmartDeclaration smartDeclaration = new SmartDeclaration();
             smartDeclaration.setSmartRemindersId(1L);
             smartDeclaration.setTyshxydm(x.getTyshxydm());
-            smartDeclaration.setAlertTime(x.getEndTime().atStartOfDay());
+            smartDeclaration.setAlertTime(convertToLocalDate(x.getEndTime()).atTime(0,0,0));
             smdList.add(smartDeclaration);
         });
         list1.removeIf(x ->
-                !(LocalDate.now().equals(x.getEndTime().minusDays(zw.getDaysAdvance())))
+                LocalDate.now().isBefore(convertToLocalDate(x.getEndTime()).minusMonths(zw.getDaysAdvance()))
         );
         //获取到所有的符合条件的政务用户
-        list1.forEach(x -> userService.getAllZwUser(null, null, 2L, String.valueOf(x.getEndTime().atStartOfDay())));
+        list1.forEach(x -> userService.getAllZwUser(null, null, 2L,
+                String.valueOf(convertToLocalDate(x.getEndTime()).atTime(0,0,0))));
         smartDeclarationService.saveBatch(smdList);
     }
+
+    public static LocalDate convertToLocalDate(String dateStr) {
+        try {
+            // 定义格式化器,使用严格模式(拒绝无效月份,如 "2023-13")
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM")
+                    .withResolverStyle(ResolverStyle.STRICT);
+            // 解析为 YearMonth 对象
+            YearMonth yearMonth = YearMonth.parse(dateStr, formatter);
+            // 指定默认日为每月第一天
+            return yearMonth.atDay(1);
+        } catch (DateTimeParseException e) {
+            throw new IllegalArgumentException("无效的日期格式: " + dateStr, e);
+        }
+    }
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/BasicInformationService.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/BasicInformationService.java
index 316b0b7..f33b0ca 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/BasicInformationService.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/BasicInformationService.java
@@ -34,24 +34,24 @@ public interface BasicInformationService extends IService<BasicInformation> {
 
 
     /**
-     * 根据基本信息的id列表来查找
+     * 导出项目数据
      */
-    List<ProjectExcelInfo> selectList(List<Long> idList);
-
-    /**
-     * 填充数据
-     */
-    void approvalMethodfillInData(XSSFSheet sheet, XSSFCellStyle contentStyle, int rowNum, List<ProjectExcelInfo> info,List<String> sc,List<String> ec,int a) ;
-
-    /**
-     * 填充数据-项目基础信息获取
-     */
-    String getExcelData(ProjectExcelInfo item,String str);
-
-    /**
-     * 填充数据-项目建筑信息获取
-     */
-    String getBuildingData(ProjectBuildingExcel item,String str);
+    List<ProjectExcelInfo> selectList();
+
+//    /**
+//     * 填充数据
+//     */
+//    void approvalMethodfillInData(XSSFSheet sheet, XSSFCellStyle contentStyle, int rowNum, List<ProjectExcelInfo> info,List<String> sc,List<String> ec,int a) ;
+//
+//    /**
+//     * 填充数据-项目基础信息获取
+//     */
+//    String getExcelData(ProjectExcelInfo item,String str);
+//
+//    /**
+//     * 填充数据-项目建筑信息获取
+//     */
+//    String getBuildingData(ProjectBuildingExcel item,String str);
 
     /**
      * 有经纬度的项目列表
@@ -66,7 +66,7 @@ public interface BasicInformationService extends IService<BasicInformation> {
     /**
      * 企业端和政务端信息修改
      */
-    Long audit(AuditRequest req,int status);
+    Long audit(AuditRequest req,int status,int oldStatus);
     /**
      * 通过主键查询单条项目所有数据(政务端)
      *
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/ZwStatsService.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/ZwStatsService.java
index 9bad654..4ac599c 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/ZwStatsService.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/ZwStatsService.java
@@ -17,17 +17,17 @@ public interface ZwStatsService {
     /**
      * 项目情况
      */
-    AllProjectResponse allProject();
+    AllProjectResponse allProject(String years);
 
     /**
      * 功能区
      */
-    List<RibbonResponse> ribbon();
+    List<RibbonResponse> ribbon(String years);
 
     /**
      * 投资主体
      */
-    List<RibbonResponse> investors();
+    List<RibbonResponse> investors(String years);
 
 
     /**
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/BasicInformationServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/BasicInformationServiceImpl.java
index cd294ce..c6b67c3 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/BasicInformationServiceImpl.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/BasicInformationServiceImpl.java
@@ -124,132 +124,132 @@ public class BasicInformationServiceImpl extends ServiceImpl<BasicInformationMap
 
 
     /**
-     * 根据基本信息的id列表来查找
+     * 导出项目数据
      */
     @Override
-    public List<ProjectExcelInfo> selectList(List<Long> idList) {
-        return baseMapper.selectList(idList);
+    public List<ProjectExcelInfo> selectList() {
+        return baseMapper.selectList();
     }
 
 
-    /**
-     * 填充数据
-     */
-    @Override
-    public void approvalMethodfillInData(XSSFSheet sheet, XSSFCellStyle contentStyle, int rowNum, List<ProjectExcelInfo> info, List<String> sc, List<String> ec, int num) {
-        Class<?> classBuilding = ProjectBuildingExcel.class;
-        for (ProjectExcelInfo projectExcelInfo : info) {
-            XSSFRow tempRow = sheet.createRow(rowNum++);
-            tempRow.setHeight((short) 1400);
-            int i1;
-            for (i1 = 0; i1 < sc.size(); i1++) {
-                XSSFCell tempCell = tempRow.createCell(i1);
-                tempCell.setCellStyle(contentStyle);
-                if (!ec.get(i1).endsWith("厂房")) {
-                    if (Objects.equals(sc.get(i1), "")) {
-                        tempCell.setCellValue(projectExcelInfo.getId());
-                    } else {
-                        tempCell.setCellValue(getExcelData(projectExcelInfo, sc.get(i1)));
-                    }
-                }
-            }
-//            XSSFCell tempCell = tempRow.createCell(8);
-//            tempCell.setCellStyle(contentStyle);
-//            tempCell.setCellValue("12312321");
-
-            for (int i2 = 0; i2 < projectExcelInfo.getXmjzxx().size(); i2++) {
-                switch (projectExcelInfo.getXmjzxx().get(i2).getFloor()) {
-                    case 1:
-                        i1 = ec.indexOf("一层厂房");
-                        break;
-                    case 2:
-                        i1 = ec.indexOf("双层厂房");
-                        break;
-                    case 3:
-                        i1 = ec.indexOf("三层厂房");
-                        break;
-                    case 4:
-                        i1 = ec.indexOf("四层厂房");
-                        break;
-                    case 5:
-                        i1 = ec.indexOf("五层厂房");
-                        break;
-                    default:
-                        i1 = ec.indexOf("六层及以上厂房");
-                }
-                for (Field field : classBuilding.getDeclaredFields()) {
-                    XSSFCell tempCell = tempRow.createCell(i1);
-                    tempCell.setCellStyle(contentStyle);
-                    Excel excelColumn = field.getAnnotation(Excel.class);
-                    if (excelColumn != null) {
-                        tempCell.setCellValue(getBuildingData(projectExcelInfo.getXmjzxx().get(i2), sc.get(i1)));
-                        i1++;
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * 填充数据-项目基础信息获取
-     */
-    @Override
-    public String getExcelData(ProjectExcelInfo item, String str) {
-        String a = null;
-        switch (str) {
-            case "":
-                a = item.getId() == null ? "-" : item.getId();
-                break;
-            case "项目名称":
-                a = item.getName() == null ? "-" : item.getName();
-                break;
-            case "项目法人单位":
-                a = item.getXmfrdwxz() == null ? "-" : item.getXmfrdwxz();
-                break;
-            case "项目法人单位性质":
-                a = String.valueOf(item.getNature() == null ? "-" : item.getNature());
-                break;
-            case "总用地面积":
-                a = String.valueOf(item.getZydmj() == null ? "-" : item.getZydmj());
-                break;
-            case "容积率":
-                a = String.valueOf(item.getRjl() == null ? "-" : item.getRjl());
-                break;
-            case "总建筑面积":
-                a = String.valueOf(item.getZjzmj() == null ? "-" : item.getZjzmj());
-                break;
-            case "标准层建筑面积":
-                a = String.valueOf(item.getBzcjzmj() == null ? "-" : item.getBzcjzmj());
-                break;
-        }
-        return a;
-    }
-
-    /**
-     * 填充数据-项目建筑信息获取
-     */
-    @Override
-    public String getBuildingData(ProjectBuildingExcel item, String str) {
-        String a = null;
-        switch (str) {
-            case "层数":
-                a = item.getFloor() == null ? "-" : String.valueOf(item.getFloor());
-                break;
-            case "总建筑高度":
-                a = item.getTotalBuildingHeight() == null ? "-" : String.valueOf(item.getTotalBuildingHeight());
-                break;
-            case "首层高度":
-                a = String.valueOf(item.getScgd() == null ? "-" : item.getScgd());
-                break;
-            case "2至4层高":
-                a = String.valueOf(item.getTwoAndFourCg() == null ? "-" : item.getTwoAndFourCg());
-                break;
-            case "4层以上层高":
-                a = String.valueOf(item.getFourYscg() == null ? "-" : item.getFourYscg());
-                break;
-        }
-        return a;
-    }
+//    /**
+//     * 填充数据
+//     */
+//    @Override
+//    public void approvalMethodfillInData(XSSFSheet sheet, XSSFCellStyle contentStyle, int rowNum, List<ProjectExcelInfo> info, List<String> sc, List<String> ec, int num) {
+//        Class<?> classBuilding = ProjectBuildingExcel.class;
+//        for (ProjectExcelInfo projectExcelInfo : info) {
+//            XSSFRow tempRow = sheet.createRow(rowNum++);
+//            tempRow.setHeight((short) 1400);
+//            int i1;
+//            for (i1 = 0; i1 < sc.size(); i1++) {
+//                XSSFCell tempCell = tempRow.createCell(i1);
+//                tempCell.setCellStyle(contentStyle);
+//                if (!ec.get(i1).endsWith("厂房")) {
+//                    if (Objects.equals(sc.get(i1), "")) {
+//                        tempCell.setCellValue(projectExcelInfo.getId());
+//                    } else {
+//                        tempCell.setCellValue(getExcelData(projectExcelInfo, sc.get(i1)));
+//                    }
+//                }
+//            }
+////            XSSFCell tempCell = tempRow.createCell(8);
+////            tempCell.setCellStyle(contentStyle);
+////            tempCell.setCellValue("12312321");
+//
+//            for (int i2 = 0; i2 < projectExcelInfo.getXmjzxx().size(); i2++) {
+//                switch (projectExcelInfo.getXmjzxx().get(i2).getFloor()) {
+//                    case 1:
+//                        i1 = ec.indexOf("一层厂房");
+//                        break;
+//                    case 2:
+//                        i1 = ec.indexOf("双层厂房");
+//                        break;
+//                    case 3:
+//                        i1 = ec.indexOf("三层厂房");
+//                        break;
+//                    case 4:
+//                        i1 = ec.indexOf("四层厂房");
+//                        break;
+//                    case 5:
+//                        i1 = ec.indexOf("五层厂房");
+//                        break;
+//                    default:
+//                        i1 = ec.indexOf("六层及以上厂房");
+//                }
+//                for (Field field : classBuilding.getDeclaredFields()) {
+//                    XSSFCell tempCell = tempRow.createCell(i1);
+//                    tempCell.setCellStyle(contentStyle);
+//                    Excel excelColumn = field.getAnnotation(Excel.class);
+//                    if (excelColumn != null) {
+//                        tempCell.setCellValue(getBuildingData(projectExcelInfo.getXmjzxx().get(i2), sc.get(i1)));
+//                        i1++;
+//                    }
+//                }
+//            }
+//        }
+//    }
+//
+//    /**
+//     * 填充数据-项目基础信息获取
+//     */
+//    @Override
+//    public String getExcelData(ProjectExcelInfo item, String str) {
+//        String a = null;
+//        switch (str) {
+//            case "":
+//                a = item.getId() == null ? "-" : item.getId();
+//                break;
+//            case "项目名称":
+//                a = item.getName() == null ? "-" : item.getName();
+//                break;
+//            case "项目法人单位":
+//                a = item.getXmfrdwxz() == null ? "-" : item.getXmfrdwxz();
+//                break;
+//            case "项目法人单位性质":
+//                a = String.valueOf(item.getNature() == null ? "-" : item.getNature());
+//                break;
+//            case "总用地面积":
+//                a = String.valueOf(item.getZydmj() == null ? "-" : item.getZydmj());
+//                break;
+//            case "容积率":
+//                a = String.valueOf(item.getRjl() == null ? "-" : item.getRjl());
+//                break;
+//            case "总建筑面积":
+//                a = String.valueOf(item.getZjzmj() == null ? "-" : item.getZjzmj());
+//                break;
+//            case "标准层建筑面积":
+//                a = String.valueOf(item.getBzcjzmj() == null ? "-" : item.getBzcjzmj());
+//                break;
+//        }
+//        return a;
+//    }
+//
+//    /**
+//     * 填充数据-项目建筑信息获取
+//     */
+//    @Override
+//    public String getBuildingData(ProjectBuildingExcel item, String str) {
+//        String a = null;
+//        switch (str) {
+//            case "层数":
+//                a = item.getFloor() == null ? "-" : String.valueOf(item.getFloor());
+//                break;
+//            case "总建筑高度":
+//                a = item.getTotalBuildingHeight() == null ? "-" : String.valueOf(item.getTotalBuildingHeight());
+//                break;
+//            case "首层高度":
+//                a = String.valueOf(item.getScgd() == null ? "-" : item.getScgd());
+//                break;
+//            case "2至4层高":
+//                a = String.valueOf(item.getTwoAndFourCg() == null ? "-" : item.getTwoAndFourCg());
+//                break;
+//            case "4层以上层高":
+//                a = String.valueOf(item.getFourYscg() == null ? "-" : item.getFourYscg());
+//                break;
+//        }
+//        return a;
+//    }
 
     /**
      * 有经纬度的项目列表
@@ -282,8 +282,7 @@ public class BasicInformationServiceImpl extends ServiceImpl<BasicInformationMap
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public Long audit(AuditRequest req, int status) {
-        req.getBasicInformation().setStatus(status);
+    public Long audit(AuditRequest req, int status,int oldStatus) {
         //企业端提交审核直接修改,不需要挂起等待审批
         //修改项目基本信息,和是否是负面清单
         List<WysmxInformation> collect1 = req.getWysmxInformations().stream().filter(x ->
@@ -303,7 +302,7 @@ public class BasicInformationServiceImpl extends ServiceImpl<BasicInformationMap
                     collect2.get(0).getZdinfor(),
                     collect3.get(0).getZdinfor()) ? 1 : 0);
         }
-        updateById(req.getBasicInformation());
+
         //修改项目规划信息
         planInformationService.updateById(req.getPlanInformation());
         //修改企业入驻信息
@@ -316,15 +315,21 @@ public class BasicInformationServiceImpl extends ServiceImpl<BasicInformationMap
         otherInfoService.saveBatch(req.getProjectOtherInfos());
 
         if (status == 2) {
-            userService.getAllZwUser("关于" + req.getBasicInformation().getName() + "项目,待审核的通知", req.getBasicInformation().getId(), null, null);
+            if(oldStatus==1){
+                userService.getAllZwUser("关于" + req.getBasicInformation().getName() + "项目,待审核的通知", req.getBasicInformation().getId(), null, null);
+            }
         }
         if (status == 3) {
-            SmartDeclaration sd = new SmartDeclaration();
-            sd.setTyshxydm((req.getBasicInformation().getTyshxydm()));
-            sd.setProjectId(req.getBasicInformation().getId());
-            sd.setContent("关于" + req.getBasicInformation().getName() + "项目,审核通过的通知");
-            smartDeclarationService.save(sd);
+            if(oldStatus==2) {
+                SmartDeclaration sd = new SmartDeclaration();
+                sd.setTyshxydm((req.getBasicInformation().getTyshxydm()));
+                sd.setProjectId(req.getBasicInformation().getId());
+                sd.setContent("关于" + req.getBasicInformation().getName() + "项目,审核通过的通知");
+                smartDeclarationService.save(sd);
+            }
         }
+        req.getBasicInformation().setStatus(status);
+        updateById(req.getBasicInformation());
         return req.getBasicInformation().getId();
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/XmpjqdServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/XmpjqdServiceImpl.java
index 295f623..5be3c82 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/XmpjqdServiceImpl.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/XmpjqdServiceImpl.java
@@ -10,6 +10,7 @@ import com.ruoyi.gysl.entity.response.XmhxResponse;
 import com.ruoyi.gysl.entity.response.XmpjqdOneResponse;
 import com.ruoyi.gysl.mapper.XmpjqdMapper;
 import com.ruoyi.gysl.service.BuildingInformationService;
+import com.ruoyi.gysl.service.PjpzService;
 import com.ruoyi.gysl.service.XmpjqdService;
 import org.springframework.stereotype.Service;
 
@@ -18,7 +19,6 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
-import java.util.Comparator;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -38,6 +38,9 @@ public class XmpjqdServiceImpl extends ServiceImpl<XmpjqdMapper, Xmpjqd> impleme
     @Resource
     private BuildingInformationService buildingInformationService;
 
+    @Resource
+    private PjpzService pjpzService;
+
     /**
      * 分页查询所有目录
      *
@@ -62,66 +65,73 @@ public class XmpjqdServiceImpl extends ServiceImpl<XmpjqdMapper, Xmpjqd> impleme
     @Override
     public List<XmpjqdOneResponse> selectOnePj(Long id) {
         List<XmpjqdOneResponse> xmpjqdOneResponses = xmpjqdMapper.selectOnePj(id);
+        //获取项目评价配置
+        pjpzService.list().forEach(x->{
+            XmpjqdOneResponse xr = new XmpjqdOneResponse();
+            xr.setYsmc(x.getPjys());
+            xmpjqdOneResponses.add(xr);
+        });
         //查询所有的建筑信息,只保留是重要楼栋的随机一条
-        List<BuildingInformation> list = xmpjqdMapper.getImportantBuildings();
-        //层数
-        list.sort(Comparator.comparing(BuildingInformation::getFloor).reversed());
-        XmpjqdOneResponse a1 = new XmpjqdOneResponse();
-        a1.setYsmc("层数");
-        for (int i = 0; i < list.size(); i++) {
-            if (Objects.equals(list.get(i).getXmId(), id)) {
-                a1.setPjpm(i + 1);
-            }
-        }
-        a1.setCount(String.valueOf(list.size()));
-        xmpjqdOneResponses.add(a1);
-        //首层层高
-        XmpjqdOneResponse a2 = new XmpjqdOneResponse();
-        list.sort(Comparator.comparing(BuildingInformation::getScgd).reversed());
-        a2.setYsmc("首层层高");
-        for (int i = 0; i < list.size(); i++) {
-            if (Objects.equals(list.get(i).getXmId(), id)) {
-                a2.setPjpm(i + 1);
-            }
-        }
-        a2.setCount(String.valueOf(list.size()));
-        xmpjqdOneResponses.add(a2);
-
-        //二层及以上层高
-        XmpjqdOneResponse a3 = new XmpjqdOneResponse();
-        list.sort(Comparator.comparing(BuildingInformation::getTwoAndFourCg).reversed());
-        a3.setYsmc("二层及以上层高");
-        for (int i = 0; i < list.size(); i++) {
-            if (Objects.equals(list.get(i).getXmId(), id)) {
-                a3.setPjpm(i + 1);
-            }
-        }
-        a3.setCount(String.valueOf(list.size()));
-        xmpjqdOneResponses.add(a3);
-
-        //首层地面载荷
-        XmpjqdOneResponse a4 = new XmpjqdOneResponse();
-        list.sort(Comparator.comparing(BuildingInformation::getScdmhz).reversed());
-        a4.setYsmc("首层地面载荷");
-        for (int i = 0; i < list.size(); i++) {
-            if (Objects.equals(list.get(i).getXmId(), id)) {
-                a4.setPjpm(i + 1);
-            }
-        }
-        a4.setCount(String.valueOf(list.size()));
-        xmpjqdOneResponses.add(a4);
+//        List<BuildingInformation> list = xmpjqdMapper.getImportantBuildings();
 
-        //二层及以上楼面荷载
-        XmpjqdOneResponse a5 = new XmpjqdOneResponse();
-        list.sort(Comparator.comparing(BuildingInformation::getTwoAndThreeLmhz).reversed());
-        a5.setYsmc("二层及以上楼面荷载");
-        for (int i = 0; i < list.size(); i++) {
-            if (Objects.equals(list.get(i).getXmId(), id)) {
-                a5.setPjpm(i + 1);
-            }
-        }
-        a5.setCount(String.valueOf(list.size()));
-        xmpjqdOneResponses.add(a5);
+//        //层数
+//        list.sort(Comparator.comparing(BuildingInformation::getFloor).reversed());
+//        XmpjqdOneResponse a1 = new XmpjqdOneResponse();
+//        a1.setYsmc("层数");
+//        for (int i = 0; i < list.size(); i++) {
+//            if (Objects.equals(list.get(i).getXmId(), id)) {
+//                a1.setPjpm(i + 1);
+//            }
+//        }
+//        a1.setCount(String.valueOf(list.size()));
+//        xmpjqdOneResponses.add(a1);
+//        //首层层高
+//        XmpjqdOneResponse a2 = new XmpjqdOneResponse();
+//        list.sort(Comparator.comparing(BuildingInformation::getScgd).reversed());
+//        a2.setYsmc("首层层高");
+//        for (int i = 0; i < list.size(); i++) {
+//            if (Objects.equals(list.get(i).getXmId(), id)) {
+//                a2.setPjpm(i + 1);
+//            }
+//        }
+//        a2.setCount(String.valueOf(list.size()));
+//        xmpjqdOneResponses.add(a2);
+//
+//        //二层及以上层高
+//        XmpjqdOneResponse a3 = new XmpjqdOneResponse();
+//        list.sort(Comparator.comparing(BuildingInformation::getTwoAndFourCg).reversed());
+//        a3.setYsmc("二层及以上层高");
+//        for (int i = 0; i < list.size(); i++) {
+//            if (Objects.equals(list.get(i).getXmId(), id)) {
+//                a3.setPjpm(i + 1);
+//            }
+//        }
+//        a3.setCount(String.valueOf(list.size()));
+//        xmpjqdOneResponses.add(a3);
+//
+//        //首层地面载荷
+//        XmpjqdOneResponse a4 = new XmpjqdOneResponse();
+//        list.sort(Comparator.comparing(BuildingInformation::getScdmhz).reversed());
+//        a4.setYsmc("首层地面载荷");
+//        for (int i = 0; i < list.size(); i++) {
+//            if (Objects.equals(list.get(i).getXmId(), id)) {
+//                a4.setPjpm(i + 1);
+//            }
+//        }
+//        a4.setCount(String.valueOf(list.size()));
+//        xmpjqdOneResponses.add(a4);
+//
+//        //二层及以上楼面荷载
+//        XmpjqdOneResponse a5 = new XmpjqdOneResponse();
+//        list.sort(Comparator.comparing(BuildingInformation::getTwoAndThreeLmhz).reversed());
+//        a5.setYsmc("二层及以上楼面荷载");
+//        for (int i = 0; i < list.size(); i++) {
+//            if (Objects.equals(list.get(i).getXmId(), id)) {
+//                a5.setPjpm(i + 1);
+//            }
+//        }
+//        a5.setCount(String.valueOf(list.size()));
+//        xmpjqdOneResponses.add(a5);
         return xmpjqdOneResponses;
     }
 
@@ -188,9 +198,13 @@ public class XmpjqdServiceImpl extends ServiceImpl<XmpjqdMapper, Xmpjqd> impleme
         if (floor.size() % 2 == 1) {
             xmhxDetail.setPjpm(String.valueOf(floor.get(floor.size() / 2)));
         } else {
-            Integer lower = floor.get(floor.size() / 2 - 1);
-            Integer upper = floor.get(floor.size() / 2);
-            xmhxDetail.setPjpm(String.valueOf((lower + upper) / 2));
+            if(!floor.isEmpty()){
+                Integer lower = floor.get(floor.size() / 2 - 1);
+                Integer upper = floor.get(floor.size() / 2);
+                xmhxDetail.setPjpm(String.valueOf((lower + upper) / 2));
+            }else {
+                xmhxDetail.setPjpm("0");
+            }
         }
         zws.add(xmhxDetail);
         //首层层高
@@ -231,14 +245,18 @@ public class XmpjqdServiceImpl extends ServiceImpl<XmpjqdMapper, Xmpjqd> impleme
         if (length % 2 == 1) {
             xmhxDetail.setPjpm(String.valueOf(bigDecimals.get(middleIndex)));
         } else {
-            BigDecimal lower = bigDecimals.get(middleIndex - 1);
-            BigDecimal upper = bigDecimals.get(middleIndex);
-            xmhxDetail.setPjpm(
-                    String.valueOf(
-                            lower.add(upper)
-                                    .divide(BigDecimal.valueOf(2), 2, RoundingMode.HALF_UP)  // 2 表示保留两位小数
-                    )
-            );
+            if(!bigDecimals.isEmpty()){
+                BigDecimal lower = bigDecimals.get(middleIndex - 1);
+                BigDecimal upper = bigDecimals.get(middleIndex);
+                xmhxDetail.setPjpm(
+                        String.valueOf(
+                                lower.add(upper)
+                                        .divide(BigDecimal.valueOf(2), 2, RoundingMode.HALF_UP)  // 2 表示保留两位小数
+                        )
+                );
+            }else {
+                xmhxDetail.setPjpm("0");
+            }
         }
         return xmhxDetail;
     }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/ZwStatsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/ZwStatsServiceImpl.java
index 2e61e83..cd87f2a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/ZwStatsServiceImpl.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/ZwStatsServiceImpl.java
@@ -33,24 +33,24 @@ public class ZwStatsServiceImpl implements ZwStatsService {
      * 项目情况
      */
     @Override
-    public AllProjectResponse allProject() {
-        return zwStatsMapper.allProject();
+    public AllProjectResponse allProject(String years) {
+        return zwStatsMapper.allProject(years);
     }
 
     /**
      * 功能区
      */
     @Override
-    public List<RibbonResponse> ribbon() {
-        return zwStatsMapper.ribbon();
+    public List<RibbonResponse> ribbon(String years) {
+        return zwStatsMapper.ribbon(years);
     }
 
     /**
      * 投资主体
      */
     @Override
-    public List<RibbonResponse> investors() {
-        return zwStatsMapper.investors();
+    public List<RibbonResponse> investors(String years) {
+        return zwStatsMapper.investors(years);
     }
 
     /**
diff --git a/ruoyi-admin/src/main/resources/mapper/BasicInformationMapper.xml b/ruoyi-admin/src/main/resources/mapper/BasicInformationMapper.xml
index 8cdec35..087540d 100644
--- a/ruoyi-admin/src/main/resources/mapper/BasicInformationMapper.xml
+++ b/ruoyi-admin/src/main/resources/mapper/BasicInformationMapper.xml
@@ -5,29 +5,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 <mapper namespace="com.ruoyi.gysl.mapper.BasicInformationMapper">
 
     <resultMap id="ProjectExcelInfoResult" type="com.ruoyi.gysl.entity.response.ProjectExcelInfo">
-        <!-- 基础信息字段 -->
-        <id property="id" column="id"/>
         <result property="name" column="name"/>
         <result property="xmfrdwxz" column="xmfrdwxz"/>
         <result property="nature" column="nature"/>
 
-        <!-- 规划信息字段 -->
+        <result property="xzfl" column="xzfl"/>
+        <result property="begainTime" column="begain_time"/>
+        <result property="endTime" column="end_time"/>
+        <result property="jhtze" column="jhtze"/>
+
         <result property="zydmj" column="zydmj"/>
         <result property="rjl" column="rjl"/>
         <result property="zjzmj" column="zjzmj"/>
         <result property="bzcjzmj" column="bzcjzmj"/>
 
-        <!-- 嵌套集合:建筑信息(一对多) -->
-        <collection
-                property="xmjzxx"
-                ofType="com.ruoyi.gysl.entity.response.ProjectBuildingExcel"
-                javaType="java.util.List">
-            <result property="floor" column="floor"/>
-            <result property="totalBuildingHeight" column="total_building_height"/>
-            <result property="scgd" column="scgd"/>
-            <result property="twoAndFourCg" column="two_and_four_cg"/>
-            <result property="fourYscg" column="four_yscg"/>
-        </collection>
+        <result property="prioritize" column="prioritize"/>
+        <result property="projectLeader" column="project_leader"/>
+        <result property="phone" column="phone"/>
+        <result property="jsjd" column="jsjd"/>
+        <result property="jsms" column="jsms"/>
+
     </resultMap>
     <insert id="insert1" parameterType="BasicInformation">
         insert into copy_gysl_basic_information
@@ -66,6 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="tyshxydm != null">tyshxydm,</if>
             <if test="status != null">status,</if>
             <if test="isFmqd != null">is_fmqd,</if>
+            <if test="jhtze != null">jhtze,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -102,6 +100,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="tyshxydm != null">#{tyshxydm},</if>
             <if test="status != null">#{status},</if>
             <if test="isFmqd != null">#{isFmqd},</if>
+            <if test="jhtze != null">#{jhtze},</if>
         </trim>
     </insert>
     <insert id="insert2" parameterType="PlanInformation">
@@ -292,29 +291,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
     <select id="selectList" resultMap="ProjectExcelInfoResult">
         SELECT
-        a.id,
-        a.name,
         a.xmfrdwxz,
         a.nature,
+        a.name,
+        a.xzfl,
+        a.begain_time,
+        a.end_time,
+        a.jhtze,
+        a.project_leader,
+        a.phone,
+        a.jsjd,
+        a.jsms,
         b.zydmj,
         b.rjl,
         b.zjzmj,
         b.bzcjzmj,
-        <!-- 建筑信息字段添加 c_ 前缀 -->
-        c.floor,
-        c.total_building_height,
-        c.scgd,
-        c.two_and_four_cg,
-        c.four_yscg
+        a.prioritize
         FROM
         gysl_basic_information a
         LEFT JOIN gysl_plan_information b ON a.id = b.xm_id
-        LEFT JOIN gysl_building_information c ON a.id = c.xm_id
-        WHERE
-        a.id IN
-        <foreach collection="idList" item="item" open="(" separator="," close=")">
-            #{item}
-        </foreach>
     </select>
     <select id="page" resultType="com.ruoyi.gysl.entity.BasicInformation">
         SELECT a.*,b.zydmj
diff --git a/ruoyi-admin/src/main/resources/mapper/QyStatsMapper.xml b/ruoyi-admin/src/main/resources/mapper/QyStatsMapper.xml
index 826812d..37050da 100644
--- a/ruoyi-admin/src/main/resources/mapper/QyStatsMapper.xml
+++ b/ruoyi-admin/src/main/resources/mapper/QyStatsMapper.xml
@@ -8,18 +8,18 @@
                IFNULL(SUM(CASE WHEN a.xzfl = 1 THEN 1 ELSE 0 END), 0)                        AS allBuilding1,
                IFNULL(SUM(CASE WHEN a.xzfl = 2 THEN 1 ELSE 0 END), 0)                        AS allBuilding2,
                IFNULL(SUM(CASE WHEN a.xzfl = 3 THEN 1 ELSE 0 END), 0)                        AS allBuilding3,-- 当前年度统计
-               COUNT(CASE WHEN YEAR ( a.create_time ) = YEAR ( CURRENT_DATE ()) THEN 1 END ) AS currentYearProject,
+               COUNT(CASE WHEN YEAR ( a.begain_time ) = YEAR ( CURRENT_DATE ()) THEN 1 END ) AS currentYearProject,
                ROUND(
-                           IFNULL(SUM(CASE WHEN YEAR ( a.create_time ) = YEAR ( CURRENT_DATE ()) THEN b.zjzmj END ), 0) /
+                           IFNULL(SUM(CASE WHEN YEAR ( a.begain_time ) = YEAR ( CURRENT_DATE ()) THEN b.zjzmj END ), 0) /
                            10000,
                            2
                )                                                                             AS currentYearGrossArea,
                IFNULL(
-                       SUM(CASE WHEN a.xzfl = 1 AND YEAR ( a.create_time ) = YEAR ( CURRENT_DATE ()) THEN 1 ELSE 0 END ),
+                       SUM(CASE WHEN a.xzfl = 1 AND YEAR ( a.begain_time ) = YEAR ( CURRENT_DATE ()) THEN 1 ELSE 0 END ),
                        0
                )                                                                             AS currentYearBuilding1,
                IFNULL(
-                       SUM(CASE WHEN a.xzfl = 2 AND YEAR ( a.create_time ) = YEAR ( CURRENT_DATE ()) THEN 1 ELSE 0 END ),
+                       SUM(CASE WHEN a.xzfl = 2 AND YEAR ( a.begain_time ) = YEAR ( CURRENT_DATE ()) THEN 1 ELSE 0 END ),
                        0
                )                                                                             AS currentYearBuilding2
         FROM gysl_basic_information a
diff --git a/ruoyi-admin/src/main/resources/mapper/ZwStatsMapper.xml b/ruoyi-admin/src/main/resources/mapper/ZwStatsMapper.xml
index b6142f3..9eedd37 100644
--- a/ruoyi-admin/src/main/resources/mapper/ZwStatsMapper.xml
+++ b/ruoyi-admin/src/main/resources/mapper/ZwStatsMapper.xml
@@ -3,36 +3,87 @@
 <mapper namespace="com.ruoyi.gysl.mapper.ZwStatsMapper">
 
     <select id="allProject" resultType="com.ruoyi.gysl.entity.stats.AllProjectResponse">
-        SELECT COUNT(*)                                                                      AS allProject,
-               ROUND(IFNULL(SUM(b.zjzmj), 0) / 10000, 2)                                     AS allGrossArea,
-               IFNULL(SUM(CASE WHEN a.xzfl = 1 THEN 1 ELSE 0 END), 0)                        AS allBuilding1,
-               IFNULL(SUM(CASE WHEN a.xzfl = 2 THEN 1 ELSE 0 END), 0)                        AS allBuilding2,
-               IFNULL(SUM(CASE WHEN a.xzfl = 3 THEN 1 ELSE 0 END), 0)                        AS allBuilding3,-- 当前年度统计
-               COUNT(CASE WHEN YEAR ( a.begain_time ) = YEAR ( CURRENT_DATE ()) THEN 1 END ) AS currentYearProject,
-               ROUND(
-                           IFNULL(SUM(CASE WHEN YEAR ( a.begain_time ) = YEAR ( CURRENT_DATE ()) THEN b.zjzmj END ), 0) /
-                           10000,
-                           2
-               )                                                                             AS currentYearGrossArea,
-               IFNULL(
-                       SUM(CASE WHEN a.xzfl = 1 AND YEAR ( a.begain_time ) = YEAR ( CURRENT_DATE ()) THEN 1 ELSE 0 END ),
-                       0
-               )                                                                             AS currentYearBuilding1,
-               IFNULL(
-                       SUM(CASE WHEN a.xzfl = 2 AND YEAR ( a.begain_time ) = YEAR ( CURRENT_DATE ()) THEN 1 ELSE 0 END ),
-                       0
-               )                                                                             AS currentYearBuilding2
+        SELECT COUNT(*) AS allProject,
+        ROUND(IFNULL(SUM(b.zjzmj), 0) / 10000, 1) AS allGrossArea,
+        IFNULL(SUM(CASE WHEN a.xzfl = 1 THEN 1 ELSE 0 END), 0) AS allBuilding1,
+        IFNULL(SUM(CASE WHEN a.xzfl = 2 THEN 1 ELSE 0 END), 0) AS allBuilding2,
+        IFNULL(SUM(CASE WHEN a.xzfl = 3 THEN 1 ELSE 0 END), 0) AS allBuilding3,
+        <!-- 当前新开工项目数 -->
+        IFNULL(SUM(
+        <choose>
+            <when test="years != null and years != ''">
+                CASE WHEN LEFT(a.begain_time, 4) = #{years} THEN 1 ELSE 0 END
+            </when>
+            <otherwise>
+                CASE WHEN LEFT(a.begain_time, 4) = YEAR(NOW()) THEN 1 ELSE 0 END
+            </otherwise>
+        </choose>
+        ), 0) AS currentYearProject,
+        <!-- 当年_建筑面积 -->
+        ROUND(IFNULL(SUM(
+        <choose>
+            <when test="years != null and years != ''">
+                CASE WHEN LEFT(a.begain_time, 4) = #{years} THEN b.zjzmj ELSE 0 END
+            </when>
+            <otherwise>
+                CASE WHEN LEFT(a.begain_time, 4) = YEAR(NOW()) THEN b.zjzmj ELSE 0 END
+            </otherwise>
+        </choose>
+        ), 0)/10000,1) AS currentYearGrossArea,
+        <!-- 当年_已建数量 -->
+        IFNULL(SUM(
+        <choose>
+            <when test="years != null and years != ''">
+                CASE WHEN LEFT(a.begain_time, 4) = #{years} and a.xzfl = 1 THEN 1 ELSE 0 END
+            </when>
+            <otherwise>
+                CASE WHEN LEFT(a.begain_time, 4) = YEAR(NOW()) and a.xzfl = 1 THEN 1 ELSE 0 END
+            </otherwise>
+        </choose>
+        ), 0) AS currentYearBuilding1,
+        <!-- 当年_在建数量 -->
+        IFNULL(SUM(
+        <choose>
+            <when test="years != null and years != ''">
+                CASE WHEN LEFT(a.begain_time, 4) = #{years} and a.xzfl = 2 THEN 1 ELSE 0 END
+            </when>
+            <otherwise>
+                CASE WHEN LEFT(a.begain_time, 4) = YEAR(NOW()) and a.xzfl = 2 THEN 1 ELSE 0 END
+            </otherwise>
+        </choose>
+        ), 0) AS currentBuilding2,
+        <!-- 当年_拟建数量 -->
+        IFNULL(SUM(
+        <choose>
+            <when test="years != null and years != ''">
+                CASE WHEN LEFT(a.begain_time, 4) = #{years} and a.xzfl = 3 THEN 1 ELSE 0 END
+            </when>
+            <otherwise>
+                CASE WHEN LEFT(a.begain_time, 4) = YEAR(NOW()) and a.xzfl = 3 THEN 1 ELSE 0 END
+            </otherwise>
+        </choose>
+        ), 0) AS currentBuilding3
         FROM gysl_basic_information a
-                 LEFT JOIN gysl_plan_information b ON a.id = b.xm_id
+        LEFT JOIN gysl_plan_information b ON a.id = b.xm_id
+        <where>
+            <if test="years != null and years != ''">
+                LEFT(a.begain_time, 4) &lt;= #{years}
+            </if>
+        </where>
     </select>
     <select id="ribbon" resultType="com.ruoyi.gysl.entity.stats.RibbonResponse">
-        SELECT COUNT(a.ssgnq) AS count,  -- 统计左表实际存在的记录数
+        SELECT COUNT(*) AS count,  -- 统计左表实际存在的记录数
                b.dict_label AS ssgnq
         FROM
             (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'ssgnq') b -- 先获取所有字典项
             LEFT JOIN
             gysl_basic_information a
         ON a.ssgnq = b.dict_value AND a.ssgnq IS NOT NULL -- 左连接并过滤空值
+        <where>
+            <if test="years != null and years != ''">
+                LEFT(a.begain_time, 4) = #{years}
+            </if>
+        </where>
         GROUP BY
             b.dict_label, b.dict_value -- 按字典项的标签和值分组
         ORDER BY
@@ -40,12 +91,17 @@
     </select>
     <select id="investors" resultType="com.ruoyi.gysl.entity.stats.RibbonResponse">
         SELECT
-            COUNT( a.ssgnq ) AS count,-- 统计左表实际存在的记录数
+            COUNT( * ) AS count,-- 统计左表实际存在的记录数
         	b.dict_label AS ssgnq
         FROM
             ( SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'xmfrdwxz' ) b -- 先获取所有字典项
             LEFT JOIN gysl_basic_information a ON a.nature = b.dict_value
             AND a.nature IS NOT NULL -- 左连接并过滤空值
+        <where>
+            <if test="years != null and years != ''">
+                LEFT(a.begain_time, 4) = #{years}
+            </if>
+        </where>
         GROUP BY
             b.dict_label,
             b.dict_value -- 按字典项的标签和值分组
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
index e755171..8cd0709 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
@@ -475,25 +475,27 @@ public class ExcelUtil<T>
                         val = Convert.toBigDecimal(val);
                     }
                     // 新增 LocalDate 类型处理
-                    else if (fieldType == LocalDate.class)
-                    {
-                        if (val instanceof String)
-                        {
-                            val = LocalDate.parse((String) val, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-                        }
-                        else if (val instanceof Long)
-                        {
-                            val = Instant.ofEpochMilli((Long) val)
-                                    .atZone(ZoneId.systemDefault())
-                                    .toLocalDate();
-                        }
-                        else if (val instanceof Date)
-                        {
-                            val = ((Date) val).toInstant()
-                                    .atZone(ZoneId.systemDefault())
-                                    .toLocalDate();
-                        }
-                    }
+//                    else if (fieldType == LocalDate.class)
+//                    {
+//                        if(val!=null&&val!=""){
+//                            if (val instanceof String)
+//                            {
+//                                val = LocalDate.parse((String) val, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+//                            }
+//                            else if (val instanceof Long)
+//                            {
+//                                val = Instant.ofEpochMilli((Long) val)
+//                                        .atZone(ZoneId.systemDefault())
+//                                        .toLocalDate();
+//                            }
+//                            else if (val instanceof Date)
+//                            {
+//                                val = ((Date) val).toInstant()
+//                                        .atZone(ZoneId.systemDefault())
+//                                        .toLocalDate();
+//                            }
+//                        }
+//                    }
                     else if (Date.class == fieldType)
                     {
                         if (val instanceof String)