Pārlūkot izejas kodu

Merge branch 'master' of http://192.168.2.4:3000/chengqiang/sg_audit

chengqiang 3 gadi atpakaļ
vecāks
revīzija
85e4ef2c17
20 mainītis faili ar 3949 papildinājumiem un 59 dzēšanām
  1. 33 15
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectBasicsInfo.java
  2. 356 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectScheduleStatInfo.java
  3. 852 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectWarnExamineInfo.java
  4. 18 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/ProjectScheduleStatMapper.java
  5. 18 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/ProjectWarnExamineMapper.java
  6. 92 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/xml/ProjectScheduleSstatMapper.xml
  7. 92 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/xml/ProjectWarnExamineMapper.xml
  8. 155 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectBasicsService.java
  9. 96 28
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectCourseService.java
  10. 15 2
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectPostEvaluationService.java
  11. 108 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectScheduleStatService.java
  12. 856 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectWarnExamineService.java
  13. 75 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/web/ProjectScheduleStatController.java
  14. 72 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/web/ProjectWarnExamineController.java
  15. 8 0
      src/main/webapp/webpage/modules/sg/project/projectBasics/projectBasicsList.js
  16. 7 14
      src/main/webapp/webpage/modules/sg/project/projectCourse/projectCourseList.jsp
  17. 458 0
      src/main/webapp/webpage/modules/sg/project/projectScheduleStat/projectScheduleStatList.js
  18. 96 0
      src/main/webapp/webpage/modules/sg/project/projectScheduleStat/projectScheduleStatList.jsp
  19. 441 0
      src/main/webapp/webpage/modules/sg/project/projectWarnExamine/projectWarnExamineList.js
  20. 101 0
      src/main/webapp/webpage/modules/sg/project/projectWarnExamine/projectWarnExamineList.jsp

+ 33 - 15
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectBasicsInfo.java

@@ -16,6 +16,8 @@ public class ProjectBasicsInfo extends DataEntity<ProjectBasicsInfo> {
     private String relevantDepartment;    //归口部门
     private String projectType;    //项目类型
     private String projectProperty;    //项目性质
+    private String projectStage;    //项目阶段
+    private String dataQualityInspection;    //数据质量检查
     private String planStartUpDate;    //计划开工日期
     private String plancompletionDate; //计划竣工日期
     private String practicalStartUpDate;    //实际开工日期
@@ -63,63 +65,71 @@ public class ProjectBasicsInfo extends DataEntity<ProjectBasicsInfo> {
     public String getProjectProperty() {
         return projectProperty;
     }
-    @ExcelField(title="计划开工日期", align=2, sort=8)
+    @ExcelField(title="项目阶段", align=2, sort=8)
+    public String getProjectStage() {
+        return projectStage;
+    }
+    @ExcelField(title="数据质量检查", align=2, sort=9)
+    public String getDataQualityInspection() {
+        return dataQualityInspection;
+    }
+    @ExcelField(title="计划开工日期", align=2, sort=10)
     public String getPlanStartUpDate() {
         return planStartUpDate;
     }
-    @ExcelField(title="计划竣工日期", align=2, sort=9)
+    @ExcelField(title="计划竣工日期", align=2, sort=11)
     public String getPlancompletionDate() {
         return plancompletionDate;
     }
-    @ExcelField(title="实际开工日期", align=2, sort=10)
+    @ExcelField(title="实际开工日期", align=2, sort=12)
     public String getPracticalStartUpDate() {
         return practicalStartUpDate;
     }
-    @ExcelField(title="实际竣工日期", align=2, sort=11)
+    @ExcelField(title="实际竣工日期", align=2, sort=13)
     public String getPracticalcompletionDate() {
         return practicalcompletionDate;
     }
-    @ExcelField(title="首次领料日期", align=2, sort=12)
+    @ExcelField(title="首次领料日期", align=2, sort=14)
     public String getFirstAcquisitionTime() {
         return firstAcquisitionTime;
     }
-    @ExcelField(title="首笔施工费入账日期", align=2, sort=13)
+    @ExcelField(title="首笔施工费入账日期", align=2, sort=15)
     public String getFirstConstructionFeeRecordedTime() {
         return firstConstructionFeeRecordedTime;
     }
-    @ExcelField(title="结算送审日期", align=2, sort=14)
+    @ExcelField(title="结算送审日期", align=2, sort=16)
     public String getCalculationForReviewTime() {
         return calculationForReviewTime;
     }
-    @ExcelField(title="结算审定日期", align=2, sort=15)
+    @ExcelField(title="结算审定日期", align=2, sort=17)
     public String getCalculationExamineTime() {
         return calculationExamineTime;
     }
-    @ExcelField(title="发起甲供材领退料日期", align=2, sort=16)
+    @ExcelField(title="发起甲供材领退料日期", align=2, sort=18)
     public String getWhichMaterialStoresReturnedTime() {
         return whichMaterialStoresReturnedTime;
     }
-    @ExcelField(title="领退料是否完成", align=2, sort=17)
+    @ExcelField(title="领退料是否完成", align=2, sort=19)
     public String getIfGetRejectedMaterialFinish() {
         return ifGetRejectedMaterialFinish;
     }
-    @ExcelField(title="提报竣工决算日期", align=2, sort=18)
+    @ExcelField(title="提报竣工决算日期", align=2, sort=20)
     public String getCompletedActualBudgetTime() {
         return completedActualBudgetTime;
     }
-    @ExcelField(title="决算送审日期", align=2, sort=19)
+    @ExcelField(title="决算送审日期", align=2, sort=21)
     public String getActualBudgetSubmittalsTime() {
         return actualBudgetSubmittalsTime;
     }
-    @ExcelField(title="出具决算审计报告日期", align=2, sort=20)
+    @ExcelField(title="出具决算审计报告日期", align=2, sort=22)
     public String getActualBudgetauditReportTime() {
         return actualBudgetauditReportTime;
     }
-    @ExcelField(title="firstWorkingCapitalTime", align=2, sort=21)
+    @ExcelField(title="firstWorkingCapitalTime", align=2, sort=23)
     public String getFirstWorkingCapitalTime() {
         return firstWorkingCapitalTime;
     }
-    @ExcelField(title="ifProjectClose", align=2, sort=22)
+    @ExcelField(title="ifProjectClose", align=2, sort=24)
     public String getIfProjectClose() {
         return ifProjectClose;
     }
@@ -152,6 +162,14 @@ public class ProjectBasicsInfo extends DataEntity<ProjectBasicsInfo> {
         this.projectProperty = projectProperty;
     }
 
+    public void setProjectStage(String projectStage) {
+        this.projectStage = projectStage;
+    }
+
+    public void setDataQualityInspection(String dataQualityInspection) {
+        this.dataQualityInspection = dataQualityInspection;
+    }
+
     public void setPlanStartUpDate(String planStartUpDate) {
         this.planStartUpDate = planStartUpDate;
     }

+ 356 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectScheduleStatInfo.java

@@ -0,0 +1,356 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * @author: 徐滕
+ * @create: 2021-11-25 09:00
+ **/
+public class ProjectScheduleStatInfo extends DataEntity<ProjectScheduleStatInfo> {
+    private String areaName;    //地区名称
+    private String projectType; //项目类型
+    private Integer totalCount; //总和
+    private Integer notStartWorkCount; //项目未开工数量
+    private Integer startWorkCount; //开工数量
+    private Integer completionCount;    //竣工数量
+    private Integer calculationForReviewCount;  //结算送审数量
+    private Integer calculationExamineCount;    //结算审定数量
+    private Integer whichMaterialStoresReturnedCount;   //发起甲供材领退料数量
+    private Integer rejectedMaterialFinishCount;    //领退料完成数量
+    private Integer completedActualBudgetCount; //提报竣工决算数量
+    private Integer actualBudgetSubmittalsCount;    //决算送审数量
+    private Integer actualBudgetauditReportCount;   //出具决算审计报告数量
+    private Integer projectCloseCount;  //项目关闭数量
+
+
+    private String projectName;    //项目名称
+    private String projectNumber;    //国网项目编码
+    private String firstLevelUnit;    //一级单位
+    private String secondLevelUnit;    //二级单位
+    private String relevantDepartment;    //归口部门
+    private String projectProperty;    //项目性质
+    private String projectStage;    //项目阶段
+    private String dataQualityInspection;    //数据质量检查
+    private String planStartUpDate;    //计划开工日期
+    private String plancompletionDate; //计划竣工日期
+    private String practicalStartUpDate;    //实际开工日期
+
+    private String practicalcompletionDate; //实际竣工日期
+    private String firstAcquisitionTime;    //首次领料日期
+    private String firstConstructionFeeRecordedTime;    //首笔施工费入账日期
+    private String calculationForReviewTime;    //结算送审日期
+    private String calculationExamineTime;    //结算审定日期
+    private String whichMaterialStoresReturnedTime;    //发起甲供材领退料日期
+    private String ifGetRejectedMaterialFinish;    //领退料是否完成
+    private String completedActualBudgetTime;    //提报竣工决算日期
+    private String actualBudgetSubmittalsTime;    //决算送审日期
+    private String actualBudgetauditReportTime;    //出具决算审计报告日期
+
+    private String firstWorkingCapitalTime;    //首笔转资日期
+    private String ifProjectClose;    //项目是否关闭
+    private String year;    //年份
+
+    public String getAreaName() {
+        return areaName;
+    }
+
+    public String getProjectType() {
+        return projectType;
+    }
+
+    public String getProjectProperty() {
+        return projectProperty;
+    }
+
+    public String getProjectStage() {
+        return projectStage;
+    }
+
+    public String getDataQualityInspection() {
+        return dataQualityInspection;
+    }
+
+    public String getPlanStartUpDate() {
+        return planStartUpDate;
+    }
+
+    public String getPlancompletionDate() {
+        return plancompletionDate;
+    }
+
+    public String getPracticalStartUpDate() {
+        return practicalStartUpDate;
+    }
+
+    public String getPracticalcompletionDate() {
+        return practicalcompletionDate;
+    }
+
+    public String getFirstAcquisitionTime() {
+        return firstAcquisitionTime;
+    }
+
+    public String getFirstConstructionFeeRecordedTime() {
+        return firstConstructionFeeRecordedTime;
+    }
+
+    public String getCalculationForReviewTime() {
+        return calculationForReviewTime;
+    }
+
+    public String getCalculationExamineTime() {
+        return calculationExamineTime;
+    }
+
+    public String getWhichMaterialStoresReturnedTime() {
+        return whichMaterialStoresReturnedTime;
+    }
+
+    public String getIfGetRejectedMaterialFinish() {
+        return ifGetRejectedMaterialFinish;
+    }
+
+    public String getCompletedActualBudgetTime() {
+        return completedActualBudgetTime;
+    }
+
+    public String getActualBudgetSubmittalsTime() {
+        return actualBudgetSubmittalsTime;
+    }
+
+    public String getActualBudgetauditReportTime() {
+        return actualBudgetauditReportTime;
+    }
+
+    public String getFirstWorkingCapitalTime() {
+        return firstWorkingCapitalTime;
+    }
+
+    public String getIfProjectClose() {
+        return ifProjectClose;
+    }
+
+    public String getYear() {
+        return year;
+    }
+
+    public Integer getTotalCount() {
+        return totalCount;
+    }
+
+    public Integer getNotStartWorkCount() {
+        return notStartWorkCount;
+    }
+
+    public Integer getStartWorkCount() {
+        return startWorkCount;
+    }
+
+    public Integer getCompletionCount() {
+        return completionCount;
+    }
+
+    public Integer getCalculationForReviewCount() {
+        return calculationForReviewCount;
+    }
+
+    public Integer getCalculationExamineCount() {
+        return calculationExamineCount;
+    }
+
+    public Integer getWhichMaterialStoresReturnedCount() {
+        return whichMaterialStoresReturnedCount;
+    }
+
+    public Integer getRejectedMaterialFinishCount() {
+        return rejectedMaterialFinishCount;
+    }
+
+    public Integer getCompletedActualBudgetCount() {
+        return completedActualBudgetCount;
+    }
+
+    public Integer getActualBudgetSubmittalsCount() {
+        return actualBudgetSubmittalsCount;
+    }
+
+    public Integer getActualBudgetauditReportCount() {
+        return actualBudgetauditReportCount;
+    }
+
+    public Integer getProjectCloseCount() {
+        return projectCloseCount;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public String getProjectNumber() {
+        return projectNumber;
+    }
+
+    public String getFirstLevelUnit() {
+        return firstLevelUnit;
+    }
+
+    public String getSecondLevelUnit() {
+        return secondLevelUnit;
+    }
+
+    public String getRelevantDepartment() {
+        return relevantDepartment;
+    }
+
+    public void setAreaName(String areaName) {
+        this.areaName = areaName;
+    }
+
+    public void setProjectType(String projectType) {
+        this.projectType = projectType;
+    }
+
+    public void setProjectProperty(String projectProperty) {
+        this.projectProperty = projectProperty;
+    }
+
+    public void setProjectStage(String projectStage) {
+        this.projectStage = projectStage;
+    }
+
+    public void setDataQualityInspection(String dataQualityInspection) {
+        this.dataQualityInspection = dataQualityInspection;
+    }
+
+    public void setPlanStartUpDate(String planStartUpDate) {
+        this.planStartUpDate = planStartUpDate;
+    }
+
+    public void setPlancompletionDate(String plancompletionDate) {
+        this.plancompletionDate = plancompletionDate;
+    }
+
+    public void setPracticalStartUpDate(String practicalStartUpDate) {
+        this.practicalStartUpDate = practicalStartUpDate;
+    }
+
+    public void setPracticalcompletionDate(String practicalcompletionDate) {
+        this.practicalcompletionDate = practicalcompletionDate;
+    }
+
+    public void setFirstAcquisitionTime(String firstAcquisitionTime) {
+        this.firstAcquisitionTime = firstAcquisitionTime;
+    }
+
+    public void setFirstConstructionFeeRecordedTime(String firstConstructionFeeRecordedTime) {
+        this.firstConstructionFeeRecordedTime = firstConstructionFeeRecordedTime;
+    }
+
+    public void setCalculationForReviewTime(String calculationForReviewTime) {
+        this.calculationForReviewTime = calculationForReviewTime;
+    }
+
+    public void setCalculationExamineTime(String calculationExamineTime) {
+        this.calculationExamineTime = calculationExamineTime;
+    }
+
+    public void setWhichMaterialStoresReturnedTime(String whichMaterialStoresReturnedTime) {
+        this.whichMaterialStoresReturnedTime = whichMaterialStoresReturnedTime;
+    }
+
+    public void setIfGetRejectedMaterialFinish(String ifGetRejectedMaterialFinish) {
+        this.ifGetRejectedMaterialFinish = ifGetRejectedMaterialFinish;
+    }
+
+    public void setCompletedActualBudgetTime(String completedActualBudgetTime) {
+        this.completedActualBudgetTime = completedActualBudgetTime;
+    }
+
+    public void setActualBudgetSubmittalsTime(String actualBudgetSubmittalsTime) {
+        this.actualBudgetSubmittalsTime = actualBudgetSubmittalsTime;
+    }
+
+    public void setActualBudgetauditReportTime(String actualBudgetauditReportTime) {
+        this.actualBudgetauditReportTime = actualBudgetauditReportTime;
+    }
+
+    public void setFirstWorkingCapitalTime(String firstWorkingCapitalTime) {
+        this.firstWorkingCapitalTime = firstWorkingCapitalTime;
+    }
+
+    public void setIfProjectClose(String ifProjectClose) {
+        this.ifProjectClose = ifProjectClose;
+    }
+
+    public void setYear(String year) {
+        this.year = year;
+    }
+
+    public void setTotalCount(Integer totalCount) {
+        this.totalCount = totalCount;
+    }
+
+    public void setNotStartWorkCount(Integer notStartWorkCount) {
+        this.notStartWorkCount = notStartWorkCount;
+    }
+
+    public void setStartWorkCount(Integer startWorkCount) {
+        this.startWorkCount = startWorkCount;
+    }
+
+    public void setCompletionCount(Integer completionCount) {
+        this.completionCount = completionCount;
+    }
+
+    public void setCalculationForReviewCount(Integer calculationForReviewCount) {
+        this.calculationForReviewCount = calculationForReviewCount;
+    }
+
+    public void setCalculationExamineCount(Integer calculationExamineCount) {
+        this.calculationExamineCount = calculationExamineCount;
+    }
+
+    public void setWhichMaterialStoresReturnedCount(Integer whichMaterialStoresReturnedCount) {
+        this.whichMaterialStoresReturnedCount = whichMaterialStoresReturnedCount;
+    }
+
+    public void setRejectedMaterialFinishCount(Integer rejectedMaterialFinishCount) {
+        this.rejectedMaterialFinishCount = rejectedMaterialFinishCount;
+    }
+
+    public void setCompletedActualBudgetCount(Integer completedActualBudgetCount) {
+        this.completedActualBudgetCount = completedActualBudgetCount;
+    }
+
+    public void setActualBudgetSubmittalsCount(Integer actualBudgetSubmittalsCount) {
+        this.actualBudgetSubmittalsCount = actualBudgetSubmittalsCount;
+    }
+
+    public void setActualBudgetauditReportCount(Integer actualBudgetauditReportCount) {
+        this.actualBudgetauditReportCount = actualBudgetauditReportCount;
+    }
+
+    public void setProjectCloseCount(Integer projectCloseCount) {
+        this.projectCloseCount = projectCloseCount;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public void setProjectNumber(String projectNumber) {
+        this.projectNumber = projectNumber;
+    }
+
+    public void setFirstLevelUnit(String firstLevelUnit) {
+        this.firstLevelUnit = firstLevelUnit;
+    }
+
+    public void setSecondLevelUnit(String secondLevelUnit) {
+        this.secondLevelUnit = secondLevelUnit;
+    }
+
+    public void setRelevantDepartment(String relevantDepartment) {
+        this.relevantDepartment = relevantDepartment;
+    }
+}

+ 852 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectWarnExamineInfo.java

@@ -0,0 +1,852 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 项目预警检查表
+ * @author: 徐滕
+ * @create: 2021-11-25 09:00
+ **/
+public class ProjectWarnExamineInfo extends DataEntity<ProjectWarnExamineInfo> {
+    private String areaName;    //地区名称
+    private String projectType; //项目类型
+    private String schedule; //进度
+    private Integer planStartUpRedCount; //计划开工日期准确性红色数量
+    private Integer planStartUpYellowCount; //计划开工日期准确性黄色数量
+    private Integer planStartUpGreenCount; //计划开工日期准确性绿色数量
+    private Integer planStartUpErrorCount; //计划开工日期准确性逻辑错误数量
+
+    private Integer calculationForReviewRedCount; //结算送审日期及时性红色数量
+    private Integer calculationForReviewYellowCount; //结算送审日期及时性黄色数量
+    private Integer calculationForReviewGreenCount; //结算送审日期及时性绿色数量
+    private Integer calculationForReviewErrorCount; //结算送审日期及时性逻辑错误数量
+
+    private Integer calculationExamineRedCount; //结算审定日期及时性红色数量
+    private Integer calculationExamineYellowCount; //结算审定日期及时性黄色数量
+    private Integer calculationExamineGreenCount; //结算审定日期及时性绿色数量
+    private Integer calculationExamineErrorCount; //结算审定日期及时性逻辑错误数量
+
+    private Integer constructionFeeRecordedRedCount; //施工费入账日期及时性红色数量
+    private Integer constructionFeeRecordedYellowCount; //施工费入账日期及时性黄色数量
+    private Integer constructionFeeRecordedGreenCount; //施工费入账日期及时性绿色数量
+    private Integer constructionFeeRecordedErrorCount; //施工费入账日期及时性逻辑错误数量
+
+    private Integer whichMaterialStoresReturnedRedCount; //核对甲供材是否一致红色数量
+    private Integer whichMaterialStoresReturnedYellowCount; //核对甲供材是否一致黄色数量
+    private Integer whichMaterialStoresReturnedGreenCount; //核对甲供材是否一致绿色数量
+    private Integer whichMaterialStoresReturnedErrorCount; //核对甲供材是否一致逻辑错误数量
+
+    private Integer completedActualBudgetRedCount; //提报竣工决算日期及时性红色数量
+    private Integer completedActualBudgetYellowCount; //提报竣工决算日期及时性性黄色数量
+    private Integer completedActualBudgetGreenCount; //提报竣工决算日期及时性绿色数量
+    private Integer completedActualBudgetErrorCount; //提报竣工决算日期及时性逻辑错误数量
+
+    private Integer actualBudgetSubmittalsRedCount; //决算送审日期及时性红色数量
+    private Integer actualBudgetSubmittalsYellowCount; //决算送审日期及时性黄色数量
+    private Integer actualBudgetSubmittalsGreenCount; //决算送审日期及时性绿色数量
+    private Integer actualBudgetSubmittalsErrorCount; //决算送审日期及时性逻辑错误数量
+
+    private Integer actualBudgetauditReportRedCount; //出具决算审计报告及时性红色数量
+    private Integer actualBudgetauditReportYellowCount; //出具决算审计报告及时性黄色数量
+    private Integer actualBudgetauditReportGreenCount; //出具决算审计报告及时性绿色数量
+    private Integer actualBudgetauditReportErrorCount; //出具决算审计报告及时性逻辑错误数量
+
+
+    private String projectName;    //项目名称
+    private String projectNumber;    //国网项目编码
+    private String firstLevelUnit;    //一级单位
+    private String secondLevelUnit;    //二级单位
+    private String relevantDepartment;    //归口部门
+    private String projectProperty;    //项目性质
+    private String planStartWorkingTimeAccuracy;    //计划开工日期准确性
+    private Integer planStartWorkingTimeAccuracyFlag;    //计划开工日期准确性Flag
+    private String planCompletionTimeAccuracy;    //计划竣工日期准确性
+    private String concealColumnOne;    //隐藏列1
+
+    private String practicalStartWorkingTimely;    //实际开工及时性
+    private String projectCompletionTimely;    //项目竣工及时性
+    private String concealColumnTwo;    //隐藏列2
+    private String calculateAuditDateTimely;    //结算送审日期及时性
+    private Integer calculateAuditDateTimelyFlag;    //结算送审日期及时性Flag
+    private String calculateExamineDateTimely;    //结算审定日期及时性
+    private Integer calculateExamineDateTimelyFlag;    //结算审定日期及时性flag
+    private String constructionFeeRecordedTimely;    //施工费入账日期及时性
+    private Integer constructionFeeRecordedTimelyFlag;    //施工费入账日期及时性flag
+    private String ifCoincideCheckWhichMaterial;    //核对甲供材是否一致
+    private Integer ifCoincideCheckWhichMaterialFlag;    //核对甲供材是否一致flag
+    private String supervisionFeeRecordedTimely;    //监理费入账日期及时性
+    private String clearingFeeRecordedTimely;    //结算费用入账及时性
+    private String finalFeeRecordedTimely;    //决算费用入账及时性(成本项目不适用)
+
+    private String completionSettlementDateTimely;    //提报竣工决算日期及时性
+    private Integer completionSettlementDateTimelyFlag;    //提报竣工决算日期及时性flag
+    private String finalAuditDateTimely;    //决算送审日期及时性
+    private Integer finalAuditDateTimelyFlag;    //决算送审日期及时性flag
+    private String finalAccountsAuditReportTimely;    //出具决算审计报告及时性
+    private Integer finalAccountsAuditReportTimelyFlag;    //出具决算审计报告及时性flag
+
+    public String getAreaName() {
+        return areaName;
+    }
+
+    public String getProjectType() {
+        return projectType;
+    }
+
+    public String getSchedule() {
+        return schedule;
+    }
+
+    public Integer getPlanStartUpRedCount() {
+        if("".equals(planStartUpRedCount)||planStartUpRedCount==null){
+            return 0;
+        }
+        return planStartUpRedCount;
+    }
+
+    public Integer getPlanStartUpYellowCount() {
+        if("".equals(planStartUpYellowCount)||planStartUpYellowCount==null){
+            return 0;
+        }
+        return planStartUpYellowCount;
+    }
+
+    public Integer getPlanStartUpGreenCount() {
+        if("".equals(planStartUpGreenCount)||planStartUpGreenCount==null){
+            return 0;
+        }
+        return planStartUpGreenCount;
+    }
+
+    public Integer getPlanStartUpErrorCount() {
+        if("".equals(planStartUpErrorCount)||planStartUpErrorCount==null){
+            return 0;
+        }
+        return planStartUpErrorCount;
+    }
+
+    public Integer getCalculationForReviewRedCount() {
+        if("".equals(calculationForReviewRedCount)||calculationForReviewRedCount==null){
+            return 0;
+        }
+        return calculationForReviewRedCount;
+    }
+
+    public Integer getCalculationForReviewYellowCount() {
+        if("".equals(calculationForReviewYellowCount)||calculationForReviewYellowCount==null){
+            return 0;
+        }
+        return calculationForReviewYellowCount;
+    }
+
+    public Integer getCalculationForReviewGreenCount() {
+        if("".equals(calculationForReviewGreenCount)||calculationForReviewGreenCount==null){
+            return 0;
+        }
+        return calculationForReviewGreenCount;
+    }
+
+    public Integer getCalculationForReviewErrorCount() {
+        if("".equals(calculationForReviewErrorCount)||calculationForReviewErrorCount==null){
+            return 0;
+        }
+        return calculationForReviewErrorCount;
+    }
+
+    public Integer getCalculationExamineRedCount() {
+        if("".equals(calculationExamineRedCount)||calculationExamineRedCount==null){
+            return 0;
+        }
+        return calculationExamineRedCount;
+    }
+
+    public Integer getCalculationExamineYellowCount() {
+        if("".equals(calculationExamineYellowCount)||calculationExamineYellowCount==null){
+            return 0;
+        }
+        return calculationExamineYellowCount;
+    }
+
+    public Integer getCalculationExamineGreenCount() {
+        if("".equals(calculationExamineGreenCount)||calculationExamineGreenCount==null){
+            return 0;
+        }
+        return calculationExamineGreenCount;
+    }
+
+    public Integer getCalculationExamineErrorCount() {
+        if("".equals(calculationExamineErrorCount)||calculationExamineErrorCount==null){
+            return 0;
+        }
+        return calculationExamineErrorCount;
+    }
+
+    public Integer getConstructionFeeRecordedRedCount() {
+        if("".equals(constructionFeeRecordedRedCount)||constructionFeeRecordedRedCount==null){
+            return 0;
+        }
+        return constructionFeeRecordedRedCount;
+    }
+
+    public Integer getConstructionFeeRecordedYellowCount() {
+        if("".equals(constructionFeeRecordedYellowCount)||constructionFeeRecordedYellowCount==null){
+            return 0;
+        }
+        return constructionFeeRecordedYellowCount;
+    }
+
+    public Integer getConstructionFeeRecordedGreenCount() {
+        if("".equals(constructionFeeRecordedGreenCount)||constructionFeeRecordedGreenCount==null){
+            return 0;
+        }
+        return constructionFeeRecordedGreenCount;
+    }
+
+    public Integer getConstructionFeeRecordedErrorCount() {
+        if("".equals(constructionFeeRecordedErrorCount)||constructionFeeRecordedErrorCount==null){
+            return 0;
+        }
+        return constructionFeeRecordedErrorCount;
+    }
+
+    public Integer getWhichMaterialStoresReturnedRedCount() {
+        if("".equals(whichMaterialStoresReturnedRedCount)||whichMaterialStoresReturnedRedCount==null){
+            return 0;
+        }
+        return whichMaterialStoresReturnedRedCount;
+    }
+
+    public Integer getWhichMaterialStoresReturnedYellowCount() {
+        if("".equals(whichMaterialStoresReturnedYellowCount)||whichMaterialStoresReturnedYellowCount==null){
+            return 0;
+        }
+        return whichMaterialStoresReturnedYellowCount;
+    }
+
+    public Integer getWhichMaterialStoresReturnedGreenCount() {
+        if("".equals(whichMaterialStoresReturnedGreenCount)||whichMaterialStoresReturnedGreenCount==null){
+            return 0;
+        }
+        return whichMaterialStoresReturnedGreenCount;
+    }
+
+    public Integer getWhichMaterialStoresReturnedErrorCount() {
+        if("".equals(whichMaterialStoresReturnedErrorCount)||whichMaterialStoresReturnedErrorCount==null){
+            return 0;
+        }
+        return whichMaterialStoresReturnedErrorCount;
+    }
+
+    public Integer getCompletedActualBudgetRedCount() {
+        if("".equals(completedActualBudgetRedCount)||completedActualBudgetRedCount==null){
+            return 0;
+        }
+        return completedActualBudgetRedCount;
+    }
+
+    public Integer getCompletedActualBudgetYellowCount() {
+        if("".equals(completedActualBudgetYellowCount)||completedActualBudgetYellowCount==null){
+            return 0;
+        }
+        return completedActualBudgetYellowCount;
+    }
+
+    public Integer getCompletedActualBudgetGreenCount() {
+        if("".equals(completedActualBudgetGreenCount)||completedActualBudgetGreenCount==null){
+            return 0;
+        }
+        return completedActualBudgetGreenCount;
+    }
+
+    public Integer getCompletedActualBudgetErrorCount() {
+        if("".equals(completedActualBudgetErrorCount)||completedActualBudgetErrorCount==null){
+            return 0;
+        }
+        return completedActualBudgetErrorCount;
+    }
+
+    public Integer getActualBudgetSubmittalsRedCount() {
+        if("".equals(actualBudgetSubmittalsRedCount)||actualBudgetSubmittalsRedCount==null){
+            return 0;
+        }
+        return actualBudgetSubmittalsRedCount;
+    }
+
+    public Integer getActualBudgetSubmittalsYellowCount() {
+        if("".equals(actualBudgetSubmittalsYellowCount)||actualBudgetSubmittalsYellowCount==null){
+            return 0;
+        }
+        return actualBudgetSubmittalsYellowCount;
+    }
+
+    public Integer getActualBudgetSubmittalsGreenCount() {
+        if("".equals(actualBudgetSubmittalsGreenCount)||actualBudgetSubmittalsGreenCount==null){
+            return 0;
+        }
+        return actualBudgetSubmittalsGreenCount;
+    }
+
+    public Integer getActualBudgetSubmittalsErrorCount() {
+        if("".equals(actualBudgetSubmittalsErrorCount)||actualBudgetSubmittalsErrorCount==null){
+            return 0;
+        }
+        return actualBudgetSubmittalsErrorCount;
+    }
+
+    public Integer getActualBudgetauditReportRedCount() {
+        if("".equals(actualBudgetauditReportRedCount)||actualBudgetauditReportRedCount==null){
+            return 0;
+        }
+        return actualBudgetauditReportRedCount;
+    }
+
+    public Integer getActualBudgetauditReportYellowCount() {
+        if("".equals(actualBudgetauditReportYellowCount)||actualBudgetauditReportYellowCount==null){
+            return 0;
+        }
+        return actualBudgetauditReportYellowCount;
+    }
+
+    public Integer getActualBudgetauditReportGreenCount() {
+        if("".equals(actualBudgetauditReportGreenCount)||actualBudgetauditReportGreenCount==null){
+            return 0;
+        }
+        return actualBudgetauditReportGreenCount;
+    }
+
+    public Integer getActualBudgetauditReportErrorCount() {
+        if("".equals(actualBudgetauditReportErrorCount)||actualBudgetauditReportErrorCount==null){
+            return 0;
+        }
+        return actualBudgetauditReportErrorCount;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public String getProjectNumber() {
+        return projectNumber;
+    }
+
+    public String getFirstLevelUnit() {
+        return firstLevelUnit;
+    }
+
+    public String getSecondLevelUnit() {
+        return secondLevelUnit;
+    }
+
+    public String getRelevantDepartment() {
+        return relevantDepartment;
+    }
+
+    public String getProjectProperty() {
+        return projectProperty;
+    }
+
+    public String getPlanStartWorkingTimeAccuracy() {
+        return planStartWorkingTimeAccuracy;
+    }
+
+    public Integer getPlanStartWorkingTimeAccuracyFlag() {
+        return planStartWorkingTimeAccuracyFlag;
+    }
+
+    public String getPlanCompletionTimeAccuracy() {
+        return planCompletionTimeAccuracy;
+    }
+
+    public String getConcealColumnOne() {
+        return concealColumnOne;
+    }
+
+    public String getPracticalStartWorkingTimely() {
+        return practicalStartWorkingTimely;
+    }
+
+    public String getProjectCompletionTimely() {
+        return projectCompletionTimely;
+    }
+
+    public String getConcealColumnTwo() {
+        return concealColumnTwo;
+    }
+
+    public String getCalculateAuditDateTimely() {
+        return calculateAuditDateTimely;
+    }
+
+    public Integer getCalculateAuditDateTimelyFlag() {
+        return calculateAuditDateTimelyFlag;
+    }
+
+    public String getCalculateExamineDateTimely() {
+        return calculateExamineDateTimely;
+    }
+
+    public Integer getCalculateExamineDateTimelyFlag() {
+        return calculateExamineDateTimelyFlag;
+    }
+
+    public String getConstructionFeeRecordedTimely() {
+        return constructionFeeRecordedTimely;
+    }
+
+    public Integer getConstructionFeeRecordedTimelyFlag() {
+        return constructionFeeRecordedTimelyFlag;
+    }
+
+    public String getIfCoincideCheckWhichMaterial() {
+        return ifCoincideCheckWhichMaterial;
+    }
+
+    public Integer getIfCoincideCheckWhichMaterialFlag() {
+        return ifCoincideCheckWhichMaterialFlag;
+    }
+
+    public String getSupervisionFeeRecordedTimely() {
+        return supervisionFeeRecordedTimely;
+    }
+
+    public String getClearingFeeRecordedTimely() {
+        return clearingFeeRecordedTimely;
+    }
+
+    public String getFinalFeeRecordedTimely() {
+        return finalFeeRecordedTimely;
+    }
+
+    public String getCompletionSettlementDateTimely() {
+        return completionSettlementDateTimely;
+    }
+
+    public Integer getCompletionSettlementDateTimelyFlag() {
+        return completionSettlementDateTimelyFlag;
+    }
+
+    public String getFinalAuditDateTimely() {
+        return finalAuditDateTimely;
+    }
+
+    public Integer getFinalAuditDateTimelyFlag() {
+        return finalAuditDateTimelyFlag;
+    }
+
+    public String getFinalAccountsAuditReportTimely() {
+        return finalAccountsAuditReportTimely;
+    }
+
+    public Integer getFinalAccountsAuditReportTimelyFlag() {
+        return finalAccountsAuditReportTimelyFlag;
+    }
+
+    public void setAreaName(String areaName) {
+        this.areaName = areaName;
+    }
+
+    public void setProjectType(String projectType) {
+        this.projectType = projectType;
+    }
+
+    public void setSchedule(String schedule) {
+        this.schedule = schedule;
+    }
+
+    public void setPlanStartUpRedCount(Integer planStartUpRedCount) {
+        this.planStartUpRedCount = planStartUpRedCount == null ? 0 : planStartUpRedCount;
+    }
+
+    public void setPlanStartUpYellowCount(Integer planStartUpYellowCount) {
+        this.planStartUpYellowCount = planStartUpYellowCount == null ? 0 : planStartUpYellowCount;
+    }
+
+    public void setPlanStartUpGreenCount(Integer planStartUpGreenCount) {
+        this.planStartUpGreenCount = planStartUpGreenCount == null ? 0 : planStartUpGreenCount;
+    }
+
+    public void setPlanStartUpErrorCount(Integer planStartUpErrorCount) {
+        this.planStartUpErrorCount = planStartUpErrorCount == null ? 0 : planStartUpErrorCount;
+    }
+
+    public void setCalculationForReviewRedCount(Integer calculationForReviewRedCount) {
+        this.calculationForReviewRedCount = calculationForReviewRedCount == null ? 0 : calculationForReviewRedCount;
+    }
+
+    public void setCalculationForReviewYellowCount(Integer calculationForReviewYellowCount) {
+        this.calculationForReviewYellowCount = calculationForReviewYellowCount == null ? 0 : calculationForReviewYellowCount;
+    }
+
+    public void setCalculationForReviewGreenCount(Integer calculationForReviewGreenCount) {
+        this.calculationForReviewGreenCount = calculationForReviewGreenCount == null ? 0 : calculationForReviewGreenCount;
+    }
+
+    public void setCalculationForReviewErrorCount(Integer calculationForReviewErrorCount) {
+        this.calculationForReviewErrorCount = calculationForReviewErrorCount == null ? 0 : calculationForReviewErrorCount;
+    }
+
+    public void setCalculationExamineRedCount(Integer calculationExamineRedCount) {
+        this.calculationExamineRedCount = calculationExamineRedCount == null ? 0 : calculationExamineRedCount;
+    }
+
+    public void setCalculationExamineYellowCount(Integer calculationExamineYellowCount) {
+        this.calculationExamineYellowCount = calculationExamineYellowCount == null ? 0 : calculationExamineYellowCount;
+    }
+
+    public void setCalculationExamineGreenCount(Integer calculationExamineGreenCount) {
+        this.calculationExamineGreenCount = calculationExamineGreenCount == null ? 0 : calculationExamineGreenCount;
+    }
+
+    public void setCalculationExamineErrorCount(Integer calculationExamineErrorCount) {
+        this.calculationExamineErrorCount = calculationExamineErrorCount == null ? 0 : calculationExamineErrorCount;
+    }
+
+    public void setConstructionFeeRecordedRedCount(Integer constructionFeeRecordedRedCount) {
+        this.constructionFeeRecordedRedCount = constructionFeeRecordedRedCount == null ? 0 : constructionFeeRecordedRedCount;
+    }
+
+    public void setConstructionFeeRecordedYellowCount(Integer constructionFeeRecordedYellowCount) {
+        this.constructionFeeRecordedYellowCount = constructionFeeRecordedYellowCount == null ? 0 : constructionFeeRecordedYellowCount;
+    }
+
+    public void setConstructionFeeRecordedGreenCount(Integer constructionFeeRecordedGreenCount) {
+        this.constructionFeeRecordedGreenCount = constructionFeeRecordedGreenCount == null ? 0 : constructionFeeRecordedGreenCount;
+    }
+
+    public void setConstructionFeeRecordedErrorCount(Integer constructionFeeRecordedErrorCount) {
+        this.constructionFeeRecordedErrorCount = constructionFeeRecordedErrorCount == null ? 0 : constructionFeeRecordedErrorCount;
+    }
+
+    public void setWhichMaterialStoresReturnedRedCount(Integer whichMaterialStoresReturnedRedCount) {
+        this.whichMaterialStoresReturnedRedCount = whichMaterialStoresReturnedRedCount == null ? 0 : whichMaterialStoresReturnedRedCount;
+    }
+
+    public void setWhichMaterialStoresReturnedYellowCount(Integer whichMaterialStoresReturnedYellowCount) {
+        this.whichMaterialStoresReturnedYellowCount = whichMaterialStoresReturnedYellowCount == null ? 0 : whichMaterialStoresReturnedYellowCount;
+    }
+
+    public void setWhichMaterialStoresReturnedGreenCount(Integer whichMaterialStoresReturnedGreenCount) {
+        this.whichMaterialStoresReturnedGreenCount = whichMaterialStoresReturnedGreenCount == null ? 0 : whichMaterialStoresReturnedGreenCount;
+    }
+
+    public void setWhichMaterialStoresReturnedErrorCount(Integer whichMaterialStoresReturnedErrorCount) {
+        this.whichMaterialStoresReturnedErrorCount = whichMaterialStoresReturnedErrorCount == null ? 0 : whichMaterialStoresReturnedErrorCount;
+    }
+
+    public void setCompletedActualBudgetRedCount(Integer completedActualBudgetRedCount) {
+        this.completedActualBudgetRedCount = completedActualBudgetRedCount == null ? 0 : completedActualBudgetRedCount;
+    }
+
+    public void setCompletedActualBudgetYellowCount(Integer completedActualBudgetYellowCount) {
+        this.completedActualBudgetYellowCount = completedActualBudgetYellowCount == null ? 0 : completedActualBudgetYellowCount;
+    }
+
+    public void setCompletedActualBudgetGreenCount(Integer completedActualBudgetGreenCount) {
+        this.completedActualBudgetGreenCount = completedActualBudgetGreenCount == null ? 0 : completedActualBudgetGreenCount;
+    }
+
+    public void setCompletedActualBudgetErrorCount(Integer completedActualBudgetErrorCount) {
+        this.completedActualBudgetErrorCount = completedActualBudgetErrorCount == null ? 0 : completedActualBudgetErrorCount;
+    }
+
+    public void setActualBudgetSubmittalsRedCount(Integer actualBudgetSubmittalsRedCount) {
+        this.actualBudgetSubmittalsRedCount = actualBudgetSubmittalsRedCount == null ? 0 : actualBudgetSubmittalsRedCount;
+    }
+
+    public void setActualBudgetSubmittalsYellowCount(Integer actualBudgetSubmittalsYellowCount) {
+        this.actualBudgetSubmittalsYellowCount = actualBudgetSubmittalsYellowCount == null ? 0 : actualBudgetSubmittalsYellowCount;
+    }
+
+    public void setActualBudgetSubmittalsGreenCount(Integer actualBudgetSubmittalsGreenCount) {
+        this.actualBudgetSubmittalsGreenCount = actualBudgetSubmittalsGreenCount == null ? 0 : actualBudgetSubmittalsGreenCount;
+    }
+
+    public void setActualBudgetSubmittalsErrorCount(Integer actualBudgetSubmittalsErrorCount) {
+        this.actualBudgetSubmittalsErrorCount = actualBudgetSubmittalsErrorCount == null ? 0 : actualBudgetSubmittalsErrorCount;
+    }
+
+    public void setActualBudgetauditReportRedCount(Integer actualBudgetauditReportRedCount) {
+        this.actualBudgetauditReportRedCount = actualBudgetauditReportRedCount == null ? 0 : actualBudgetauditReportRedCount;
+    }
+
+    public void setActualBudgetauditReportYellowCount(Integer actualBudgetauditReportYellowCount) {
+        this.actualBudgetauditReportYellowCount = actualBudgetauditReportYellowCount == null ? 0 : actualBudgetauditReportYellowCount;
+    }
+
+    public void setActualBudgetauditReportGreenCount(Integer actualBudgetauditReportGreenCount) {
+        this.actualBudgetauditReportGreenCount = actualBudgetauditReportGreenCount == null ? 0 : actualBudgetauditReportGreenCount;
+    }
+
+    public void setActualBudgetauditReportErrorCount(Integer actualBudgetauditReportErrorCount) {
+        this.actualBudgetauditReportErrorCount = actualBudgetauditReportErrorCount == null ? 0 : actualBudgetauditReportErrorCount;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public void setProjectNumber(String projectNumber) {
+        this.projectNumber = projectNumber;
+    }
+
+    public void setFirstLevelUnit(String firstLevelUnit) {
+        this.firstLevelUnit = firstLevelUnit;
+    }
+
+    public void setSecondLevelUnit(String secondLevelUnit) {
+        this.secondLevelUnit = secondLevelUnit;
+    }
+
+    public void setRelevantDepartment(String relevantDepartment) {
+        this.relevantDepartment = relevantDepartment;
+    }
+
+    public void setProjectProperty(String projectProperty) {
+        this.projectProperty = projectProperty;
+    }
+
+    public void setPlanStartWorkingTimeAccuracy(String planStartWorkingTimeAccuracy) {
+        this.planStartWorkingTimeAccuracy = planStartWorkingTimeAccuracy;
+    }
+
+    public void setPlanStartWorkingTimeAccuracyFlag(Integer planStartWorkingTimeAccuracyFlag) {
+        this.planStartWorkingTimeAccuracyFlag = planStartWorkingTimeAccuracyFlag;
+    }
+
+    public void setPlanCompletionTimeAccuracy(String planCompletionTimeAccuracy) {
+        this.planCompletionTimeAccuracy = planCompletionTimeAccuracy;
+    }
+
+    public void setConcealColumnOne(String concealColumnOne) {
+        this.concealColumnOne = concealColumnOne;
+    }
+
+    public void setPracticalStartWorkingTimely(String practicalStartWorkingTimely) {
+        this.practicalStartWorkingTimely = practicalStartWorkingTimely;
+    }
+
+    public void setProjectCompletionTimely(String projectCompletionTimely) {
+        this.projectCompletionTimely = projectCompletionTimely;
+    }
+
+    public void setConcealColumnTwo(String concealColumnTwo) {
+        this.concealColumnTwo = concealColumnTwo;
+    }
+
+    public void setCalculateAuditDateTimely(String calculateAuditDateTimely) {
+        this.calculateAuditDateTimely = calculateAuditDateTimely;
+    }
+
+    public void setCalculateAuditDateTimelyFlag(Integer calculateAuditDateTimelyFlag) {
+        this.calculateAuditDateTimelyFlag = calculateAuditDateTimelyFlag;
+    }
+
+    public void setCalculateExamineDateTimely(String calculateExamineDateTimely) {
+        this.calculateExamineDateTimely = calculateExamineDateTimely;
+    }
+
+    public void setCalculateExamineDateTimelyFlag(Integer calculateExamineDateTimelyFlag) {
+        this.calculateExamineDateTimelyFlag = calculateExamineDateTimelyFlag;
+    }
+
+    public void setConstructionFeeRecordedTimely(String constructionFeeRecordedTimely) {
+        this.constructionFeeRecordedTimely = constructionFeeRecordedTimely;
+    }
+
+    public void setConstructionFeeRecordedTimelyFlag(Integer constructionFeeRecordedTimelyFlag) {
+        this.constructionFeeRecordedTimelyFlag = constructionFeeRecordedTimelyFlag;
+    }
+
+    public void setIfCoincideCheckWhichMaterial(String ifCoincideCheckWhichMaterial) {
+        this.ifCoincideCheckWhichMaterial = ifCoincideCheckWhichMaterial;
+    }
+
+    public void setIfCoincideCheckWhichMaterialFlag(Integer ifCoincideCheckWhichMaterialFlag) {
+        this.ifCoincideCheckWhichMaterialFlag = ifCoincideCheckWhichMaterialFlag;
+    }
+
+    public void setSupervisionFeeRecordedTimely(String supervisionFeeRecordedTimely) {
+        this.supervisionFeeRecordedTimely = supervisionFeeRecordedTimely;
+    }
+
+    public void setClearingFeeRecordedTimely(String clearingFeeRecordedTimely) {
+        this.clearingFeeRecordedTimely = clearingFeeRecordedTimely;
+    }
+
+    public void setFinalFeeRecordedTimely(String finalFeeRecordedTimely) {
+        this.finalFeeRecordedTimely = finalFeeRecordedTimely;
+    }
+
+    public void setCompletionSettlementDateTimely(String completionSettlementDateTimely) {
+        this.completionSettlementDateTimely = completionSettlementDateTimely;
+    }
+
+    public void setCompletionSettlementDateTimelyFlag(Integer completionSettlementDateTimelyFlag) {
+        this.completionSettlementDateTimelyFlag = completionSettlementDateTimelyFlag;
+    }
+
+    public void setFinalAuditDateTimely(String finalAuditDateTimely) {
+        this.finalAuditDateTimely = finalAuditDateTimely;
+    }
+
+    public void setFinalAuditDateTimelyFlag(Integer finalAuditDateTimelyFlag) {
+        this.finalAuditDateTimelyFlag = finalAuditDateTimelyFlag;
+    }
+
+    public void setFinalAccountsAuditReportTimely(String finalAccountsAuditReportTimely) {
+        this.finalAccountsAuditReportTimely = finalAccountsAuditReportTimely;
+    }
+
+    public void setFinalAccountsAuditReportTimelyFlag(Integer finalAccountsAuditReportTimelyFlag) {
+        this.finalAccountsAuditReportTimelyFlag = finalAccountsAuditReportTimelyFlag;
+    }
+
+
+    private String planStartUpDate;    //计划开工日期
+    private String plancompletionDate; //计划竣工日期
+    private String practicalStartUpDate;    //实际开工日期
+
+    private String practicalcompletionDate; //实际竣工日期
+    private String firstAcquisitionTime;    //首次领料日期
+    private String firstConstructionFeeRecordedTime;    //首笔施工费入账日期
+    private String calculationForReviewTime;    //结算送审日期
+    private String calculationExamineTime;    //结算审定日期
+    private String whichMaterialStoresReturnedTime;    //发起甲供材领退料日期
+    private String ifGetRejectedMaterialFinish;    //领退料是否完成
+    private String completedActualBudgetTime;    //提报竣工决算日期
+    private String actualBudgetSubmittalsTime;    //决算送审日期
+    private String actualBudgetauditReportTime;    //出具决算审计报告日期
+
+    private String firstWorkingCapitalTime;    //首笔转资日期
+    private String ifProjectClose;    //项目是否关闭
+    private String year;    //年份
+
+
+    public String getPlanStartUpDate() {
+        return planStartUpDate;
+    }
+
+    public void setPlanStartUpDate(String planStartUpDate) {
+        this.planStartUpDate = planStartUpDate;
+    }
+
+    public String getPlancompletionDate() {
+        return plancompletionDate;
+    }
+
+    public void setPlancompletionDate(String plancompletionDate) {
+        this.plancompletionDate = plancompletionDate;
+    }
+
+    public String getPracticalStartUpDate() {
+        return practicalStartUpDate;
+    }
+
+    public void setPracticalStartUpDate(String practicalStartUpDate) {
+        this.practicalStartUpDate = practicalStartUpDate;
+    }
+
+    public String getPracticalcompletionDate() {
+        return practicalcompletionDate;
+    }
+
+    public void setPracticalcompletionDate(String practicalcompletionDate) {
+        this.practicalcompletionDate = practicalcompletionDate;
+    }
+
+    public String getFirstAcquisitionTime() {
+        return firstAcquisitionTime;
+    }
+
+    public void setFirstAcquisitionTime(String firstAcquisitionTime) {
+        this.firstAcquisitionTime = firstAcquisitionTime;
+    }
+
+    public String getFirstConstructionFeeRecordedTime() {
+        return firstConstructionFeeRecordedTime;
+    }
+
+    public void setFirstConstructionFeeRecordedTime(String firstConstructionFeeRecordedTime) {
+        this.firstConstructionFeeRecordedTime = firstConstructionFeeRecordedTime;
+    }
+
+    public String getCalculationForReviewTime() {
+        return calculationForReviewTime;
+    }
+
+    public void setCalculationForReviewTime(String calculationForReviewTime) {
+        this.calculationForReviewTime = calculationForReviewTime;
+    }
+
+    public String getCalculationExamineTime() {
+        return calculationExamineTime;
+    }
+
+    public void setCalculationExamineTime(String calculationExamineTime) {
+        this.calculationExamineTime = calculationExamineTime;
+    }
+
+    public String getWhichMaterialStoresReturnedTime() {
+        return whichMaterialStoresReturnedTime;
+    }
+
+    public void setWhichMaterialStoresReturnedTime(String whichMaterialStoresReturnedTime) {
+        this.whichMaterialStoresReturnedTime = whichMaterialStoresReturnedTime;
+    }
+
+    public String getIfGetRejectedMaterialFinish() {
+        return ifGetRejectedMaterialFinish;
+    }
+
+    public void setIfGetRejectedMaterialFinish(String ifGetRejectedMaterialFinish) {
+        this.ifGetRejectedMaterialFinish = ifGetRejectedMaterialFinish;
+    }
+
+    public String getCompletedActualBudgetTime() {
+        return completedActualBudgetTime;
+    }
+
+    public void setCompletedActualBudgetTime(String completedActualBudgetTime) {
+        this.completedActualBudgetTime = completedActualBudgetTime;
+    }
+
+    public String getActualBudgetSubmittalsTime() {
+        return actualBudgetSubmittalsTime;
+    }
+
+    public void setActualBudgetSubmittalsTime(String actualBudgetSubmittalsTime) {
+        this.actualBudgetSubmittalsTime = actualBudgetSubmittalsTime;
+    }
+
+    public String getActualBudgetauditReportTime() {
+        return actualBudgetauditReportTime;
+    }
+
+    public void setActualBudgetauditReportTime(String actualBudgetauditReportTime) {
+        this.actualBudgetauditReportTime = actualBudgetauditReportTime;
+    }
+
+    public String getFirstWorkingCapitalTime() {
+        return firstWorkingCapitalTime;
+    }
+
+    public void setFirstWorkingCapitalTime(String firstWorkingCapitalTime) {
+        this.firstWorkingCapitalTime = firstWorkingCapitalTime;
+    }
+
+    public String getIfProjectClose() {
+        return ifProjectClose;
+    }
+
+    public void setIfProjectClose(String ifProjectClose) {
+        this.ifProjectClose = ifProjectClose;
+    }
+
+    public String getYear() {
+        return year;
+    }
+
+    public void setYear(String year) {
+        this.year = year;
+    }
+}

+ 18 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/ProjectScheduleStatMapper.java

@@ -0,0 +1,18 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.sg.budgetSpectaculars.entity.ProjectScheduleStatInfo;
+
+import java.util.List;
+
+/**
+ * 项目进度统计Mapper
+ * @author: 徐滕
+ * @create: 2021-11-25 09:00
+ **/
+@MyBatisMapper
+public interface ProjectScheduleStatMapper extends BaseMapper<ProjectScheduleStatInfo> {
+
+    List<ProjectScheduleStatInfo> getListBySecondLevelUnitAndProjectType(ProjectScheduleStatInfo info);
+}

+ 18 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/ProjectWarnExamineMapper.java

@@ -0,0 +1,18 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.sg.budgetSpectaculars.entity.ProjectWarnExamineInfo;
+
+import java.util.List;
+
+/**
+ * 项目预警检查Mapper
+ * @author: 徐滕
+ * @create: 2021-11-26 09:21
+ **/
+@MyBatisMapper
+public interface ProjectWarnExamineMapper extends BaseMapper<ProjectWarnExamineInfo> {
+
+    List<ProjectWarnExamineInfo> getListBySecondLevelUnitAndProjectType(ProjectWarnExamineInfo info);
+}

+ 92 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/xml/ProjectScheduleSstatMapper.xml

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.sg.budgetSpectaculars.mapper.ProjectScheduleStatMapper">
+	<sql id="resourceColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.project_name as "projectName",
+		a.project_number as "projectNumber",
+		a.first_level_unit as "firstLevelUnit",
+		a.second_level_unit as "secondLevelUnit",
+		a.relevant_department as "relevantDepartment",
+		a.project_type as "projectType",
+		a.project_property as "projectProperty",
+		DATE_FORMAT(a.plan_start_upDate,'%Y-%m-%d') as "planStartUpDate",
+		DATE_FORMAT(a.plancompletion_date,'%Y-%m-%d') as "plancompletionDate",
+		DATE_FORMAT(a.practical_start_upDate,'%Y-%m-%d') as "practicalStartUpDate",
+		DATE_FORMAT(a.practicalcompletion_date,'%Y-%m-%d') as "practicalcompletionDate",
+		DATE_FORMAT(a.first_acquisition_time,'%Y-%m-%d') as "firstAcquisitionTime",
+		DATE_FORMAT(a.first_construction_fee_recorded_time,'%Y-%m-%d') as "firstConstructionFeeRecordedTime",
+		DATE_FORMAT(a.calculation_for_review_time,'%Y-%m-%d') as "calculationForReviewTime",
+		DATE_FORMAT(a.calculation_examine_time,'%Y-%m-%d') as "calculationExamineTime",
+		DATE_FORMAT(a.which_material_stores_returned_time,'%Y-%m-%d') as "whichMaterialStoresReturnedTime",
+		a.if_get_rejected_material_finish as "ifGetRejectedMaterialFinish",
+		DATE_FORMAT(a.completed_actual_budget_time,'%Y-%m-%d') as "completedActualBudgetTime",
+		DATE_FORMAT(a.actual_budget_submittals_time,'%Y-%m-%d') as "actualBudgetSubmittalsTime",
+		DATE_FORMAT(a.actual_budgetaudit_report_time,'%Y-%m-%d') as "actualBudgetauditReportTime",
+		DATE_FORMAT(a.first_working_capital_time,'%Y-%m-%d') as "firstWorkingCapitalTime",
+		a.if_project_close as "ifProjectClose",
+		a.year  as "year"
+	</sql>
+
+	<select id="get" resultType="ProjectScheduleStatInfo" >
+		SELECT
+			<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="findList" resultType="ProjectScheduleStatInfo" >
+		SELECT
+			<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="secondLevelUnit != null and secondLevelUnit != ''">
+				AND a.second_level_unit LIKE
+				<if test="dbName == 'oracle'">'%'||#{secondLevelUnit}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{secondLevelUnit}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{secondLevelUnit},'%')</if>
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+			group by a.second_level_unit,a.project_type
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				group by a.second_level_unit,a.project_type
+				ORDER BY a.project_number asc
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="getListBySecondLevelUnitAndProjectType" resultType="ProjectScheduleStatInfo">
+		SELECT
+		<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="secondLevelUnit != null and secondLevelUnit != ''">
+				AND a.second_level_unit  = #{secondLevelUnit}
+			</if>
+			<if test="projectType != null and projectType != ''">
+				AND a.project_type  = #{projectType}
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.project_number asc
+			</otherwise>
+		</choose>
+	</select>
+
+</mapper>

+ 92 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/xml/ProjectWarnExamineMapper.xml

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.sg.budgetSpectaculars.mapper.ProjectWarnExamineMapper">
+	<sql id="resourceColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.project_name as "projectName",
+		a.project_number as "projectNumber",
+		a.first_level_unit as "firstLevelUnit",
+		a.second_level_unit as "secondLevelUnit",
+		a.relevant_department as "relevantDepartment",
+		a.project_type as "projectType",
+		a.project_property as "projectProperty",
+		DATE_FORMAT(a.plan_start_upDate,'%Y-%m-%d') as "planStartUpDate",
+		DATE_FORMAT(a.plancompletion_date,'%Y-%m-%d') as "plancompletionDate",
+		DATE_FORMAT(a.practical_start_upDate,'%Y-%m-%d') as "practicalStartUpDate",
+		DATE_FORMAT(a.practicalcompletion_date,'%Y-%m-%d') as "practicalcompletionDate",
+		DATE_FORMAT(a.first_acquisition_time,'%Y-%m-%d') as "firstAcquisitionTime",
+		DATE_FORMAT(a.first_construction_fee_recorded_time,'%Y-%m-%d') as "firstConstructionFeeRecordedTime",
+		DATE_FORMAT(a.calculation_for_review_time,'%Y-%m-%d') as "calculationForReviewTime",
+		DATE_FORMAT(a.calculation_examine_time,'%Y-%m-%d') as "calculationExamineTime",
+		DATE_FORMAT(a.which_material_stores_returned_time,'%Y-%m-%d') as "whichMaterialStoresReturnedTime",
+		a.if_get_rejected_material_finish as "ifGetRejectedMaterialFinish",
+		DATE_FORMAT(a.completed_actual_budget_time,'%Y-%m-%d') as "completedActualBudgetTime",
+		DATE_FORMAT(a.actual_budget_submittals_time,'%Y-%m-%d') as "actualBudgetSubmittalsTime",
+		DATE_FORMAT(a.actual_budgetaudit_report_time,'%Y-%m-%d') as "actualBudgetauditReportTime",
+		DATE_FORMAT(a.first_working_capital_time,'%Y-%m-%d') as "firstWorkingCapitalTime",
+		a.if_project_close as "ifProjectClose",
+		a.year  as "year"
+	</sql>
+
+	<select id="get" resultType="ProjectWarnExamineInfo" >
+		SELECT
+			<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="findList" resultType="ProjectWarnExamineInfo" >
+		SELECT
+			<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="secondLevelUnit != null and secondLevelUnit != ''">
+				AND a.second_level_unit LIKE
+				<if test="dbName == 'oracle'">'%'||#{secondLevelUnit}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{secondLevelUnit}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{secondLevelUnit},'%')</if>
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+			group by a.second_level_unit,a.project_type
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				group by a.second_level_unit,a.project_type
+				ORDER BY a.project_number asc
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="getListBySecondLevelUnitAndProjectType" resultType="ProjectWarnExamineInfo">
+		SELECT
+		<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="secondLevelUnit != null and secondLevelUnit != ''">
+				AND a.second_level_unit  = #{secondLevelUnit}
+			</if>
+			<if test="projectType != null and projectType != ''">
+				AND a.project_type  = #{projectType}
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.project_number asc
+			</otherwise>
+		</choose>
+	</select>
+
+</mapper>

+ 155 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectBasicsService.java

@@ -36,10 +36,165 @@ public class ProjectBasicsService extends CrudService<ProjectBasicsMapper, Proje
 
     public Page<ProjectBasicsInfo> findPage(Page<ProjectBasicsInfo> page, ProjectBasicsInfo entity) {
         Page<ProjectBasicsInfo> page1 = super.findPage(page, entity);
+        List<ProjectBasicsInfo> list = page1.getList();
+        disposeData(list);
         return page1;
     }
 
     /**
+     * 数据处理
+     * @param list
+     */
+    public void disposeData(List<ProjectBasicsInfo> list){
+        //对数据进行遍历进行展示处理
+        for (ProjectBasicsInfo info: list) {
+            String projectStage = "";
+            String dataQualityInspection = "未通过";
+            //实际开工日期<实际竣工日期<结算送审日期<结算审定日期<发起甲供材领退料日期<领退料是否完成(是)<提报竣工决算日期<决算送审日期<出具决算审计报告日期<项目是否关闭(是)
+            //项目开工、项目竣工、结算送审、结算审定、发起甲供材领退料、领退料完成、提报竣工决算、决算送审、出具决算审计报告、项目关闭。
+            if(StringUtils.isNotBlank(info.getIfProjectClose()) && "是".equals(info.getIfProjectClose())){//项目关闭状态
+                if(StringUtils.isNotBlank(info.getPlanStartUpDate())
+                        && StringUtils.isNotBlank(info.getPlancompletionDate())
+                        && StringUtils.isNotBlank(info.getPracticalStartUpDate())
+                        && StringUtils.isNotBlank(info.getFirstAcquisitionTime())
+                        && StringUtils.isNotBlank(info.getPracticalcompletionDate())
+                        && StringUtils.isNotBlank(info.getCalculationForReviewTime())
+                        && StringUtils.isNotBlank(info.getCalculationExamineTime())
+                        && StringUtils.isNotBlank(info.getWhichMaterialStoresReturnedTime())
+                        && StringUtils.isNotBlank(info.getIfGetRejectedMaterialFinish()) && "是".equals(info.getIfGetRejectedMaterialFinish())
+                        && StringUtils.isNotBlank(info.getCompletedActualBudgetTime())
+                        && StringUtils.isNotBlank(info.getActualBudgetSubmittalsTime())
+                        && StringUtils.isNotBlank(info.getActualBudgetauditReportTime())
+                ){
+                    dataQualityInspection = "通过";
+                }
+                projectStage = "项目关闭";
+            }else if(StringUtils.isNotBlank(info.getActualBudgetauditReportTime())){//项目出具决算审计报告日期
+                if(StringUtils.isNotBlank(info.getPlanStartUpDate())
+                        && StringUtils.isNotBlank(info.getPlancompletionDate())
+                        && StringUtils.isNotBlank(info.getPracticalStartUpDate())
+                        && StringUtils.isNotBlank(info.getFirstAcquisitionTime())
+                        && StringUtils.isNotBlank(info.getPracticalcompletionDate())
+                        && StringUtils.isNotBlank(info.getCalculationForReviewTime())
+                        && StringUtils.isNotBlank(info.getCalculationExamineTime())
+                        && StringUtils.isNotBlank(info.getWhichMaterialStoresReturnedTime())
+                        && StringUtils.isNotBlank(info.getIfGetRejectedMaterialFinish()) && "是".equals(info.getIfGetRejectedMaterialFinish())
+                        && StringUtils.isNotBlank(info.getCompletedActualBudgetTime())
+                        && StringUtils.isNotBlank(info.getActualBudgetSubmittalsTime())
+                ){
+                    dataQualityInspection = "通过";
+                }
+                projectStage = "出具决算审计报告";
+
+            }else if(StringUtils.isNotBlank(info.getActualBudgetSubmittalsTime())){//项目发决算送审日期
+                if(StringUtils.isNotBlank(info.getPlanStartUpDate())
+                        && StringUtils.isNotBlank(info.getPlancompletionDate())
+                        && StringUtils.isNotBlank(info.getPracticalStartUpDate())
+                        && StringUtils.isNotBlank(info.getFirstAcquisitionTime())
+                        && StringUtils.isNotBlank(info.getPracticalcompletionDate())
+                        && StringUtils.isNotBlank(info.getCalculationForReviewTime())
+                        && StringUtils.isNotBlank(info.getCalculationExamineTime())
+                        && StringUtils.isNotBlank(info.getWhichMaterialStoresReturnedTime())
+                        && StringUtils.isNotBlank(info.getIfGetRejectedMaterialFinish()) && "是".equals(info.getIfGetRejectedMaterialFinish())
+                        && StringUtils.isNotBlank(info.getCompletedActualBudgetTime())
+                ){
+                    dataQualityInspection = "通过";
+                }
+                projectStage = "决算送审";
+
+            }else if(StringUtils.isNotBlank(info.getCompletedActualBudgetTime())){//项目提报竣工决算日期
+                if(StringUtils.isNotBlank(info.getPlanStartUpDate())
+                        && StringUtils.isNotBlank(info.getPlancompletionDate())
+                        && StringUtils.isNotBlank(info.getPracticalStartUpDate())
+                        && StringUtils.isNotBlank(info.getFirstAcquisitionTime())
+                        && StringUtils.isNotBlank(info.getPracticalcompletionDate())
+                        && StringUtils.isNotBlank(info.getCalculationForReviewTime())
+                        && StringUtils.isNotBlank(info.getCalculationExamineTime())
+                        && StringUtils.isNotBlank(info.getWhichMaterialStoresReturnedTime())
+                        && StringUtils.isNotBlank(info.getIfGetRejectedMaterialFinish()) && "是".equals(info.getIfGetRejectedMaterialFinish())
+                ){
+                    dataQualityInspection = "通过";
+                }
+                projectStage = "提报竣工决算";
+
+            }else if(StringUtils.isNotBlank(info.getIfGetRejectedMaterialFinish()) && "是".equals(info.getIfGetRejectedMaterialFinish())){//项目领退料完成状态
+                if(StringUtils.isNotBlank(info.getPlanStartUpDate())
+                        && StringUtils.isNotBlank(info.getPlancompletionDate())
+                        && StringUtils.isNotBlank(info.getPracticalStartUpDate())
+                        && StringUtils.isNotBlank(info.getFirstAcquisitionTime())
+                        && StringUtils.isNotBlank(info.getPracticalcompletionDate())
+                        && StringUtils.isNotBlank(info.getCalculationForReviewTime())
+                        && StringUtils.isNotBlank(info.getCalculationExamineTime())
+                        && StringUtils.isNotBlank(info.getWhichMaterialStoresReturnedTime())
+                ){
+                    dataQualityInspection = "通过";
+                }
+                projectStage = "领退料完成";
+
+            } else if(StringUtils.isNotBlank(info.getWhichMaterialStoresReturnedTime())){//项目发起甲供材领退料日期
+                if(StringUtils.isNotBlank(info.getPlanStartUpDate())
+                        && StringUtils.isNotBlank(info.getPlancompletionDate())
+                        && StringUtils.isNotBlank(info.getPracticalStartUpDate())
+                        && StringUtils.isNotBlank(info.getFirstAcquisitionTime())
+                        && StringUtils.isNotBlank(info.getPracticalcompletionDate())
+                        && StringUtils.isNotBlank(info.getCalculationForReviewTime())
+                        && StringUtils.isNotBlank(info.getCalculationExamineTime())
+                ){
+                    dataQualityInspection = "通过";
+                }
+                projectStage = "发起甲供材领退料";
+
+            }else if(StringUtils.isNotBlank(info.getCalculationExamineTime())){//项目结算审定日期
+                if(StringUtils.isNotBlank(info.getPlanStartUpDate())
+                        && StringUtils.isNotBlank(info.getPlancompletionDate())
+                        && StringUtils.isNotBlank(info.getPracticalStartUpDate())
+                        && StringUtils.isNotBlank(info.getFirstAcquisitionTime())
+                        && StringUtils.isNotBlank(info.getPracticalcompletionDate())
+                        && StringUtils.isNotBlank(info.getCalculationForReviewTime())
+                ){
+                    dataQualityInspection = "通过";
+                }
+                projectStage = "结算审定";
+
+            } else if(StringUtils.isNotBlank(info.getCalculationForReviewTime())){//项目结算送审日期
+                if(StringUtils.isNotBlank(info.getPlanStartUpDate())
+                        && StringUtils.isNotBlank(info.getPlancompletionDate())
+                        && StringUtils.isNotBlank(info.getPracticalStartUpDate())
+                        && StringUtils.isNotBlank(info.getFirstAcquisitionTime())
+                        && StringUtils.isNotBlank(info.getPracticalcompletionDate())
+                ){
+                    dataQualityInspection = "通过";
+                }
+                projectStage = "结算送审";
+
+            }else if(StringUtils.isNotBlank(info.getPracticalcompletionDate())){//项目竣工日期
+                if(StringUtils.isNotBlank(info.getPlanStartUpDate())
+                        && StringUtils.isNotBlank(info.getPlancompletionDate())
+                        && StringUtils.isNotBlank(info.getPracticalStartUpDate())
+                        && StringUtils.isNotBlank(info.getFirstAcquisitionTime())
+                ){
+                    dataQualityInspection = "通过";
+                }
+                projectStage = "项目竣工";
+
+            } else if(StringUtils.isNotBlank(info.getFirstAcquisitionTime())) { //首次领料日期
+                if(StringUtils.isNotBlank(info.getPlanStartUpDate())
+                        && StringUtils.isNotBlank(info.getPlancompletionDate())
+                        && StringUtils.isNotBlank(info.getPracticalStartUpDate())
+                ){
+                    dataQualityInspection = "通过";
+                }
+                projectStage = "项目开工";
+
+            }
+
+            info.setProjectStage(projectStage);
+            info.setDataQualityInspection(dataQualityInspection);
+
+        }
+    }
+
+    /**
      * 综合查询表数据处理
      * @param budgetExecuteList
      * @return

+ 96 - 28
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectCourseService.java

@@ -34,35 +34,49 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
     private void disposeProjectBasics(List<ProjectCourseControlInfo> projectCourseControlList){
         for (ProjectCourseControlInfo info: projectCourseControlList) {
             //处理计划开工日期准确性   |计划开工日期- 首次领料日期| 两个日期均有为绿灯 0-15天(含15天)灰色 15-30天(含30天)黄灯 30天以上红灯(字体颜色)
-            Integer differenceValue = dateDifferenceValue(info.getPlanStartUpDate(), info.getFirstAcquisitionTime());
+            Integer absoluteDifferenceValue = dateDifferenceValue(info.getPlanStartUpDate(), info.getFirstAcquisitionTime());
             if(StringUtils.isNotBlank(info.getPlanStartUpDate()) && StringUtils.isNotBlank(info.getFirstAcquisitionTime())){
-                info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
-                info.setPlanStartWorkingTimeAccuracyFlag(0);
+                absoluteDifferenceValue = absoluteValue(absoluteDifferenceValue);
+                info.setPlanStartWorkingTimeAccuracy(absoluteDifferenceValue.toString());
+                if (0 <= absoluteDifferenceValue &&  absoluteDifferenceValue<= 15) {
+                    info.setPlanStartWorkingTimeAccuracyFlag(0);
+                }else if (15 < absoluteDifferenceValue &&  absoluteDifferenceValue<= 30) {
+                    info.setPlanStartWorkingTimeAccuracyFlag(2);
+                }else if (30 < absoluteDifferenceValue) {
+                    info.setPlanStartWorkingTimeAccuracyFlag(3);
+                }
             }else{
-                if(null == differenceValue){
+                if(null == absoluteDifferenceValue){
                     info.setPlanStartWorkingTimeAccuracy("");
                     info.setPlanStartWorkingTimeAccuracyFlag(2);
                 }else{
-                    if (0 <= differenceValue &&  differenceValue<= 15) {
-                        info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
-                        info.setPlanStartWorkingTimeAccuracyFlag(1);
-                    }else if (15 < differenceValue &&  differenceValue<= 30) {
-                        info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
+                    absoluteDifferenceValue = absoluteValue(absoluteDifferenceValue);
+                    if (0 <= absoluteDifferenceValue &&  absoluteDifferenceValue<= 15) {
+                        info.setPlanStartWorkingTimeAccuracy(absoluteDifferenceValue.toString());
+                        info.setPlanStartWorkingTimeAccuracyFlag(0);
+                    }else if (15 < absoluteDifferenceValue &&  absoluteDifferenceValue<= 30) {
+                        info.setPlanStartWorkingTimeAccuracy(absoluteDifferenceValue.toString());
                         info.setPlanStartWorkingTimeAccuracyFlag(2);
-                    }else if (30 < differenceValue) {
-                        info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
+                    }else if (30 < absoluteDifferenceValue) {
+                        info.setPlanStartWorkingTimeAccuracy(absoluteDifferenceValue.toString());
                         info.setPlanStartWorkingTimeAccuracyFlag(3);
-                    }else if(differenceValue<0){
-                        info.setPlanStartWorkingTimeAccuracy("逻辑错误");
-                        info.setPlanStartWorkingTimeAccuracyFlag(4);
                     }
                 }
             }
             //处理 结算送审日期及时性  结算送审日期-实际竣工日期 两个日期均有为绿灯 0-15天(含15天)灰色 15-30天(含30天)黄灯 30天以上红灯 小于0天,显示“逻辑错误”
-            differenceValue = dateDifferenceValue(info.getPlanStartUpDate(), info.getPracticalcompletionDate());
-            if(StringUtils.isNotBlank(info.getPlanStartUpDate()) && StringUtils.isNotBlank(info.getPracticalcompletionDate())){
+            Integer differenceValue = dateDifferenceValue(info.getCalculationForReviewTime(), info.getPracticalcompletionDate());
+            if(StringUtils.isNotBlank(info.getCalculationForReviewTime()) && StringUtils.isNotBlank(info.getPracticalcompletionDate())){
                 info.setCalculateAuditDateTimely(differenceValue.toString());
-                info.setCalculateAuditDateTimelyFlag(0);
+                if (0 <= differenceValue &&  differenceValue<= 15) {
+                    info.setCalculateAuditDateTimelyFlag(0);
+                }else if (15 < differenceValue &&  differenceValue<= 30) {
+                    info.setCalculateAuditDateTimelyFlag(2);
+                }else if (30 < differenceValue) {
+                    info.setCalculateAuditDateTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setCalculateAuditDateTimely("逻辑错误");
+                    info.setCalculateAuditDateTimelyFlag(4);
+                }
             }else{
                 if(null == differenceValue){
                     info.setCalculateAuditDateTimely("");
@@ -70,7 +84,7 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
                 }else {
                     if (0 <= differenceValue && differenceValue <= 15) {
                         info.setCalculateAuditDateTimely(differenceValue.toString());
-                        info.setCalculateAuditDateTimelyFlag(1);
+                        info.setCalculateAuditDateTimelyFlag(0);
                     } else if (15 < differenceValue && differenceValue <= 30) {
                         info.setCalculateAuditDateTimely(differenceValue.toString());
                         info.setCalculateAuditDateTimelyFlag(2);
@@ -87,7 +101,16 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
             differenceValue = dateDifferenceValue(info.getCalculationExamineTime(), info.getCalculationForReviewTime());
             if(StringUtils.isNotBlank(info.getCalculationExamineTime()) && StringUtils.isNotBlank(info.getCalculationForReviewTime())){
                 info.setCalculateExamineDateTimely(differenceValue.toString());
-                info.setCalculateExamineDateTimelyFlag(0);
+                if (0 <= differenceValue &&  differenceValue<= 15) {
+                    info.setCalculateExamineDateTimelyFlag(0);
+                }else if (15 < differenceValue &&  differenceValue<= 30) {
+                    info.setCalculateExamineDateTimelyFlag(2);
+                }else if (30 < differenceValue) {
+                    info.setCalculateExamineDateTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setCalculateExamineDateTimely("逻辑错误");
+                    info.setCalculateExamineDateTimelyFlag(4);
+                }
             }else{
                 if(null == differenceValue){
                     info.setCalculateExamineDateTimely("");
@@ -95,7 +118,7 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
                 }else {
                     if (0 <= differenceValue && differenceValue <= 15) {
                         info.setCalculateExamineDateTimely(differenceValue.toString());
-                        info.setCalculateExamineDateTimelyFlag(1);
+                        info.setCalculateExamineDateTimelyFlag(0);
                     } else if (15 < differenceValue && differenceValue <= 30) {
                         info.setCalculateExamineDateTimely(differenceValue.toString());
                         info.setCalculateExamineDateTimelyFlag(2);
@@ -112,7 +135,16 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
             differenceValue = dateDifferenceValue(info.getFirstConstructionFeeRecordedTime(), info.getCalculationExamineTime());
             if(StringUtils.isNotBlank(info.getFirstConstructionFeeRecordedTime()) && StringUtils.isNotBlank(info.getCalculationExamineTime())){
                 info.setConstructionFeeRecordedTimely(differenceValue.toString());
-                info.setConstructionFeeRecordedTimelyFlag(0);
+                if (0 <= differenceValue &&  differenceValue<= 3) {
+                    info.setConstructionFeeRecordedTimelyFlag(0);
+                }else if (3 < differenceValue &&  differenceValue<= 6) {
+                    info.setConstructionFeeRecordedTimelyFlag(2);
+                }else if (6 < differenceValue) {
+                    info.setConstructionFeeRecordedTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setConstructionFeeRecordedTimely("逻辑错误");
+                    info.setConstructionFeeRecordedTimelyFlag(4);
+                }
             }else{
                 if(null == differenceValue){
                     info.setConstructionFeeRecordedTimely("");
@@ -120,7 +152,7 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
                 }else {
                     if (0 <= differenceValue && differenceValue <= 3) {
                         info.setConstructionFeeRecordedTimely(differenceValue.toString());
-                        info.setConstructionFeeRecordedTimelyFlag(1);
+                        info.setConstructionFeeRecordedTimelyFlag(0);
                     } else if (3 < differenceValue && differenceValue <= 6) {
                         info.setConstructionFeeRecordedTimely(differenceValue.toString());
                         info.setConstructionFeeRecordedTimelyFlag(2);
@@ -145,7 +177,16 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
             differenceValue = dateDifferenceValue(info.getCompletedActualBudgetTime(), info.getFirstConstructionFeeRecordedTime());
             if(StringUtils.isNotBlank(info.getCompletedActualBudgetTime()) && StringUtils.isNotBlank(info.getFirstConstructionFeeRecordedTime())){
                 info.setCompletionSettlementDateTimely(differenceValue.toString());
-                info.setCompletionSettlementDateTimelyFlag(0);
+                if (0 <= differenceValue &&  differenceValue<= 2) {
+                    info.setCompletionSettlementDateTimelyFlag(0);
+                }else if (2 < differenceValue &&  differenceValue<= 4) {
+                    info.setCompletionSettlementDateTimelyFlag(2);
+                }else if (4 < differenceValue) {
+                    info.setCompletionSettlementDateTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setCompletionSettlementDateTimely("逻辑错误");
+                    info.setCompletionSettlementDateTimelyFlag(4);
+                }
             }else{
                 if(null == differenceValue){
                     info.setCompletionSettlementDateTimely("");
@@ -153,7 +194,7 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
                 }else {
                     if (0 <= differenceValue && differenceValue <= 2) {
                         info.setCompletionSettlementDateTimely(differenceValue.toString());
-                        info.setCompletionSettlementDateTimelyFlag(1);
+                        info.setCompletionSettlementDateTimelyFlag(0);
                     } else if (2 < differenceValue && differenceValue <= 4) {
                         info.setCompletionSettlementDateTimely(differenceValue.toString());
                         info.setCompletionSettlementDateTimelyFlag(2);
@@ -170,7 +211,16 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
             differenceValue = dateDifferenceValue(info.getActualBudgetSubmittalsTime(), info.getCompletedActualBudgetTime());
             if(StringUtils.isNotBlank(info.getActualBudgetSubmittalsTime()) && StringUtils.isNotBlank(info.getCompletedActualBudgetTime())){
                 info.setFinalAuditDateTimely(differenceValue.toString());
-                info.setFinalAuditDateTimelyFlag(0);
+                if (0 <= differenceValue &&  differenceValue<= 3) {
+                    info.setFinalAuditDateTimelyFlag(0);
+                }else if (3 < differenceValue &&  differenceValue<= 5) {
+                    info.setFinalAuditDateTimelyFlag(2);
+                }else if (5 < differenceValue) {
+                    info.setFinalAuditDateTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setFinalAuditDateTimely("逻辑错误");
+                    info.setFinalAuditDateTimelyFlag(4);
+                }
             }else{
                 if(null == differenceValue){
                     info.setFinalAuditDateTimely("");
@@ -178,7 +228,7 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
                 }else {
                     if (0 <= differenceValue && differenceValue <= 3) {
                         info.setFinalAuditDateTimely(differenceValue.toString());
-                        info.setFinalAuditDateTimelyFlag(1);
+                        info.setFinalAuditDateTimelyFlag(0);
                     } else if (3 < differenceValue && differenceValue <= 5) {
                         info.setFinalAuditDateTimely(differenceValue.toString());
                         info.setFinalAuditDateTimelyFlag(2);
@@ -195,7 +245,16 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
             differenceValue = dateDifferenceValue(info.getActualBudgetSubmittalsTime(), info.getCompletedActualBudgetTime());
             if(StringUtils.isNotBlank(info.getActualBudgetSubmittalsTime()) && StringUtils.isNotBlank(info.getCompletedActualBudgetTime())){
                 info.setFinalAccountsAuditReportTimely(differenceValue.toString());
-                info.setFinalAccountsAuditReportTimelyFlag(0);
+                if (0 <= differenceValue &&  differenceValue<= 7) {
+                    info.setFinalAccountsAuditReportTimelyFlag(0);
+                }else if (7 < differenceValue &&  differenceValue<= 15) {
+                    info.setFinalAccountsAuditReportTimelyFlag(2);
+                }else if (15 < differenceValue) {
+                    info.setFinalAccountsAuditReportTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setFinalAccountsAuditReportTimely("逻辑错误");
+                    info.setFinalAccountsAuditReportTimelyFlag(4);
+                }
             }else{
                 if(null == differenceValue){
                     info.setFinalAccountsAuditReportTimely("");
@@ -203,7 +262,7 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
                 }else {
                     if (0 <= differenceValue && differenceValue <= 7) {
                         info.setFinalAccountsAuditReportTimely(differenceValue.toString());
-                        info.setFinalAccountsAuditReportTimelyFlag(1);
+                        info.setFinalAccountsAuditReportTimelyFlag(0);
                     } else if (7 < differenceValue && differenceValue <= 15) {
                         info.setFinalAccountsAuditReportTimely(differenceValue.toString());
                         info.setFinalAccountsAuditReportTimelyFlag(2);
@@ -220,6 +279,15 @@ public class ProjectCourseService extends CrudService<ProjectCourseMapper, Proje
 
     }
 
+    /**
+     * 绝对值处理
+     * @param a
+     * @return
+     */
+    public static int absoluteValue(Integer a) {
+        return (a < 0) ? -a : a;
+    }
+
     private Integer dateDifferenceValue(String dataOne,String dateTwo){
         Integer betweenDaysValue = null;
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//注意月份是MM

+ 15 - 2
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectPostEvaluationService.java

@@ -36,9 +36,13 @@ public class ProjectPostEvaluationService extends CrudService<ProjectPostEvaluat
             //处理计划开工日期准确性   |计划开工日期- 首次领料日期| 0-30天(含30天)绿灯 30天以上红灯(前后数据均不能为空)
             if(StringUtils.isNotBlank(info.getPlanStartUpDate()) && StringUtils.isNotBlank(info.getFirstAcquisitionTime())){
                 Integer differenceValue = dateDifferenceValue(info.getPlanStartUpDate(), info.getFirstAcquisitionTime());
+                differenceValue = absoluteValue(differenceValue);
                 if (0 <= differenceValue &&  differenceValue<= 15) {
                     info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
                     info.setPlanStartWorkingTimeAccuracyFlag(0);
+                }else if (15 < differenceValue &&  differenceValue<= 30) {
+                    info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
+                    info.setPlanStartWorkingTimeAccuracyFlag(2);
                 }else if(differenceValue > 30){
                     info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
                     info.setPlanStartWorkingTimeAccuracyFlag(4);
@@ -50,8 +54,8 @@ public class ProjectPostEvaluationService extends CrudService<ProjectPostEvaluat
                 info.setPlanStartWorkingTimeAccuracy("");
             }
             //处理 结算送审日期及时性  结算送审日期-实际竣工日期 0-30天(含30天)绿灯 30天以上红灯 小于0天,显示“逻辑错误”
-            if(StringUtils.isNotBlank(info.getPlanStartUpDate()) && StringUtils.isNotBlank(info.getPracticalcompletionDate())){
-                Integer differenceValue = dateDifferenceValue(info.getPlanStartUpDate(), info.getPracticalcompletionDate());
+            if(StringUtils.isNotBlank(info.getCalculationForReviewTime()) && StringUtils.isNotBlank(info.getPracticalcompletionDate())){
+                Integer differenceValue = dateDifferenceValue(info.getCalculationForReviewTime(), info.getPracticalcompletionDate());
                 if (0 <= differenceValue &&  differenceValue<= 30) {
                     info.setCalculateAuditDateTimely(differenceValue.toString());
                     info.setCalculateAuditDateTimelyFlag(0);
@@ -161,6 +165,15 @@ public class ProjectPostEvaluationService extends CrudService<ProjectPostEvaluat
 
     }
 
+    /**
+     * 绝对值处理
+     * @param a
+     * @return
+     */
+    public static int absoluteValue(Integer a) {
+        return (a < 0) ? -a : a;
+    }
+
     private Integer dateDifferenceValue(String dataOne,String dateTwo){
         Integer betweenDaysValue = null;
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//注意月份是MM

+ 108 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectScheduleStatService.java

@@ -0,0 +1,108 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.service;
+
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.sg.budgetSpectaculars.entity.ProjectScheduleStatInfo;
+import com.jeeplus.modules.sg.budgetSpectaculars.mapper.ProjectScheduleStatMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 项目进度统计Service
+ * @author: 徐滕
+ * @create: 2021-11-25 09:00
+ **/
+@Service
+@Transactional(readOnly = true)
+public class ProjectScheduleStatService extends CrudService<ProjectScheduleStatMapper, ProjectScheduleStatInfo> {
+
+    @Autowired
+    private ProjectScheduleStatMapper mapper;
+
+    public Page<ProjectScheduleStatInfo> findPage(Page<ProjectScheduleStatInfo> page, ProjectScheduleStatInfo entity) {
+        Page<ProjectScheduleStatInfo> page1 = super.findPage(page, entity);
+        List<ProjectScheduleStatInfo> list = page1.getList();
+        for (ProjectScheduleStatInfo info: list) {
+            List<ProjectScheduleStatInfo> listBySecondLevelUnitAndProjectType = mapper.getListBySecondLevelUnitAndProjectType(info);
+            disposeData(info,listBySecondLevelUnitAndProjectType);
+        }
+        return page1;
+    }
+
+    /**
+     * 数据处理
+     * @param list
+     */
+    public void disposeData(ProjectScheduleStatInfo scheduleStatInfo,List<ProjectScheduleStatInfo> list){
+        Integer notStartWorkCount = 0; //项目未开工数量
+        Integer startWorkCount = 0; //开工数量
+        Integer completionCount = 0;    //竣工数量
+        Integer calculationForReviewCount = 0;  //结算送审数量
+        Integer calculationExamineCount = 0;    //结算审定数量
+        Integer whichMaterialStoresReturnedCount = 0;   //发起甲供材领退料数量
+        Integer rejectedMaterialFinishCount = 0;    //领退料完成数量
+        Integer completedActualBudgetCount = 0; //提报竣工决算数量
+        Integer actualBudgetSubmittalsCount = 0;    //决算送审数量
+        Integer actualBudgetauditReportCount = 0;   //出具决算审计报告数量
+        Integer projectCloseCount = 0;  //项目关闭数量
+
+        //对数据进行遍历进行展示处理
+        for (ProjectScheduleStatInfo info: list) {
+            String dataQualityInspection = "未通过";
+            //实际开工日期<实际竣工日期<结算送审日期<结算审定日期<发起甲供材领退料日期<领退料是否完成(是)<提报竣工决算日期<决算送审日期<出具决算审计报告日期<项目是否关闭(是)
+            //项目开工、项目竣工、结算送审、结算审定、发起甲供材领退料、领退料完成、提报竣工决算、决算送审、出具决算审计报告、项目关闭。
+
+            if(StringUtils.isNotBlank(info.getIfProjectClose()) && "是".equals(info.getIfProjectClose())){//项目关闭状态
+                projectCloseCount ++;
+            }else if(StringUtils.isNotBlank(info.getActualBudgetauditReportTime())){//项目出具决算审计报告日期
+                actualBudgetauditReportCount ++;
+
+            }else if(StringUtils.isNotBlank(info.getActualBudgetSubmittalsTime())){//项目发决算送审日期
+                actualBudgetSubmittalsCount ++;
+
+            }else if(StringUtils.isNotBlank(info.getCompletedActualBudgetTime())){//项目提报竣工决算日期
+                completedActualBudgetCount ++;
+
+            }else if(StringUtils.isNotBlank(info.getIfGetRejectedMaterialFinish()) && "是".equals(info.getIfGetRejectedMaterialFinish())){//项目领退料完成状态
+                rejectedMaterialFinishCount ++;
+
+            } else if(StringUtils.isNotBlank(info.getWhichMaterialStoresReturnedTime())){//项目发起甲供材领退料日期
+                whichMaterialStoresReturnedCount ++;
+
+            }else if(StringUtils.isNotBlank(info.getCalculationExamineTime())){//项目结算审定日期
+                calculationExamineCount ++;
+
+            } else if(StringUtils.isNotBlank(info.getCalculationForReviewTime())){//项目结算送审日期
+                calculationForReviewCount ++;
+
+            }else if(StringUtils.isNotBlank(info.getPracticalcompletionDate())){//项目竣工日期
+                completionCount ++;
+
+            } else if(StringUtils.isNotBlank(info.getFirstAcquisitionTime())) { //首次领料日期
+                startWorkCount ++ ;
+
+            }else{
+                notStartWorkCount ++;
+            }
+        }
+
+        scheduleStatInfo.setNotStartWorkCount(notStartWorkCount);
+        scheduleStatInfo.setStartWorkCount(startWorkCount);
+        scheduleStatInfo.setCompletionCount(completionCount);
+        scheduleStatInfo.setCalculationForReviewCount(calculationForReviewCount);
+        scheduleStatInfo.setCalculationExamineCount(calculationExamineCount);
+        scheduleStatInfo.setWhichMaterialStoresReturnedCount(whichMaterialStoresReturnedCount);
+        scheduleStatInfo.setRejectedMaterialFinishCount(rejectedMaterialFinishCount);
+        scheduleStatInfo.setCompletedActualBudgetCount(completedActualBudgetCount);
+        scheduleStatInfo.setActualBudgetSubmittalsCount(actualBudgetSubmittalsCount);
+        scheduleStatInfo.setActualBudgetauditReportCount(actualBudgetauditReportCount);
+        scheduleStatInfo.setProjectCloseCount(projectCloseCount);
+        scheduleStatInfo.setTotalCount(notStartWorkCount + startWorkCount + completionCount + calculationForReviewCount +
+                calculationExamineCount + whichMaterialStoresReturnedCount + rejectedMaterialFinishCount + completedActualBudgetCount +
+                actualBudgetSubmittalsCount + actualBudgetauditReportCount + projectCloseCount);
+    }
+}

+ 856 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectWarnExamineService.java

@@ -0,0 +1,856 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.service;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.sg.budgetSpectaculars.entity.PostEvaluationInfo;
+import com.jeeplus.modules.sg.budgetSpectaculars.entity.ProjectCourseControlInfo;
+import com.jeeplus.modules.sg.budgetSpectaculars.entity.ProjectScheduleStatInfo;
+import com.jeeplus.modules.sg.budgetSpectaculars.entity.ProjectWarnExamineInfo;
+import com.jeeplus.modules.sg.budgetSpectaculars.mapper.ProjectScheduleStatMapper;
+import com.jeeplus.modules.sg.budgetSpectaculars.mapper.ProjectWarnExamineMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 项目预警检查Service
+ * @author: 徐滕
+ * @create: 2021-11-26 09:21
+ **/
+@Service
+@Transactional(readOnly = true)
+public class ProjectWarnExamineService extends CrudService<ProjectWarnExamineMapper, ProjectWarnExamineInfo> {
+
+    @Autowired
+    private ProjectWarnExamineMapper mapper;
+
+    public Page<ProjectWarnExamineInfo> findPage(Page<ProjectWarnExamineInfo> page, ProjectWarnExamineInfo entity) {
+        Page<ProjectWarnExamineInfo> page1 = super.findPage(page, entity);
+        List<ProjectWarnExamineInfo> list = page1.getList();
+        List<ProjectWarnExamineInfo> warnExamineInfoList = Lists.newArrayList();
+        List<String> scheduleList = Lists.newArrayList();
+        scheduleList.add("进行中");
+        scheduleList.add("已完成");
+        scheduleList.add("小计");
+        for (ProjectWarnExamineInfo info: list) {
+            List<ProjectWarnExamineInfo> listBySecondLevelUnitAndProjectType = mapper.getListBySecondLevelUnitAndProjectType(info);
+            List<ProjectWarnExamineInfo> projectWarnExamineInfos = disposeData(scheduleList, info, listBySecondLevelUnitAndProjectType);
+            warnExamineInfoList.addAll(projectWarnExamineInfos);
+        }
+        page1.setList(warnExamineInfoList);
+        return page1;
+    }
+
+    /**
+     * 数据处理
+     * @param list
+     */
+    public List<ProjectWarnExamineInfo> disposeData(List<String> scheduleList,ProjectWarnExamineInfo scheduleStatInfo,List<ProjectWarnExamineInfo> list){
+        List<ProjectWarnExamineInfo> infoList = Lists.newArrayList();
+        ProjectWarnExamineInfo courseInfo = new ProjectWarnExamineInfo();
+        ProjectWarnExamineInfo evaluationInfo = new ProjectWarnExamineInfo();
+        for (String schedule: scheduleList) {
+            if("进行中".equals(schedule)){
+                //处理过程贯通数据信息
+                disposeProjectCourseBasics(list);
+                //获取数据情况
+                ProjectWarnExamineInfo projectWarnExamineInfo = disposeProjectList(list);
+                projectWarnExamineInfo.setSecondLevelUnit(scheduleStatInfo.getSecondLevelUnit());
+                projectWarnExamineInfo.setProjectType(scheduleStatInfo.getProjectType());
+                projectWarnExamineInfo.setSchedule(schedule);
+                infoList.add(projectWarnExamineInfo);
+                courseInfo = projectWarnExamineInfo;
+            }else if("已完成".equals(schedule)){
+                disposeProjectEvaluationBasics(list);
+                //获取数据情况
+                ProjectWarnExamineInfo projectWarnExamineInfo = disposeProjectList(list);
+                projectWarnExamineInfo.setSecondLevelUnit(scheduleStatInfo.getSecondLevelUnit());
+                projectWarnExamineInfo.setProjectType(scheduleStatInfo.getProjectType());
+                projectWarnExamineInfo.setSchedule(schedule);
+                infoList.add(projectWarnExamineInfo);
+                evaluationInfo = projectWarnExamineInfo;
+            }else if("小计".equals(schedule)){
+                ProjectWarnExamineInfo projectWarnExamineInfo = disposeProjectAllList(courseInfo, evaluationInfo);
+                projectWarnExamineInfo.setSecondLevelUnit(scheduleStatInfo.getSecondLevelUnit());
+                projectWarnExamineInfo.setProjectType(scheduleStatInfo.getProjectType());
+                projectWarnExamineInfo.setSchedule(schedule);
+                infoList.add(projectWarnExamineInfo);
+            }
+        }
+
+        return infoList;
+    }
+
+    /**
+     * 过程管控数据处理
+     * @param projectCourseControlList
+     */
+    private void disposeProjectCourseBasics(List<ProjectWarnExamineInfo> projectCourseControlList){
+        for (ProjectWarnExamineInfo info: projectCourseControlList) {
+            //处理计划开工日期准确性   |计划开工日期- 首次领料日期| 两个日期均有为绿灯 0-15天(含15天)灰色 15-30天(含30天)黄灯 30天以上红灯(字体颜色)
+            Integer absoluteDifferenceValue = dateDifferenceValue(info.getPlanStartUpDate(), info.getFirstAcquisitionTime());
+            if(StringUtils.isNotBlank(info.getPlanStartUpDate()) && StringUtils.isNotBlank(info.getFirstAcquisitionTime())){
+                absoluteDifferenceValue = absoluteValue(absoluteDifferenceValue);
+                info.setPlanStartWorkingTimeAccuracy(absoluteDifferenceValue.toString());
+                if (0 <= absoluteDifferenceValue &&  absoluteDifferenceValue<= 15) {
+                    info.setPlanStartWorkingTimeAccuracyFlag(0);
+                }else if (15 < absoluteDifferenceValue &&  absoluteDifferenceValue<= 30) {
+                    info.setPlanStartWorkingTimeAccuracyFlag(2);
+                }else if (30 < absoluteDifferenceValue) {
+                    info.setPlanStartWorkingTimeAccuracyFlag(3);
+                }
+            }else{
+                if(null == absoluteDifferenceValue){
+                    info.setPlanStartWorkingTimeAccuracy("");
+                    info.setPlanStartWorkingTimeAccuracyFlag(2);
+                }else{
+                    absoluteDifferenceValue = absoluteValue(absoluteDifferenceValue);
+                    if (0 <= absoluteDifferenceValue &&  absoluteDifferenceValue<= 15) {
+                        info.setPlanStartWorkingTimeAccuracy(absoluteDifferenceValue.toString());
+                        info.setPlanStartWorkingTimeAccuracyFlag(0);
+                    }else if (15 < absoluteDifferenceValue &&  absoluteDifferenceValue<= 30) {
+                        info.setPlanStartWorkingTimeAccuracy(absoluteDifferenceValue.toString());
+                        info.setPlanStartWorkingTimeAccuracyFlag(2);
+                    }else if (30 < absoluteDifferenceValue) {
+                        info.setPlanStartWorkingTimeAccuracy(absoluteDifferenceValue.toString());
+                        info.setPlanStartWorkingTimeAccuracyFlag(3);
+                    }
+                }
+            }
+            //处理 结算送审日期及时性  结算送审日期-实际竣工日期 两个日期均有为绿灯 0-15天(含15天)灰色 15-30天(含30天)黄灯 30天以上红灯 小于0天,显示“逻辑错误”
+            Integer differenceValue = dateDifferenceValue(info.getCalculationForReviewTime(), info.getPracticalcompletionDate());
+            if(StringUtils.isNotBlank(info.getCalculationForReviewTime()) && StringUtils.isNotBlank(info.getPracticalcompletionDate())){
+                info.setCalculateAuditDateTimely(differenceValue.toString());
+                if (0 <= differenceValue &&  differenceValue<= 15) {
+                    info.setCalculateAuditDateTimelyFlag(0);
+                }else if (15 < differenceValue &&  differenceValue<= 30) {
+                    info.setCalculateAuditDateTimelyFlag(2);
+                }else if (30 < differenceValue) {
+                    info.setCalculateAuditDateTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setCalculateAuditDateTimely("逻辑错误");
+                    info.setCalculateAuditDateTimelyFlag(4);
+                }
+            }else{
+                if(null == differenceValue){
+                    info.setCalculateAuditDateTimely("");
+                    info.setCalculateAuditDateTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 15) {
+                        info.setCalculateAuditDateTimely(differenceValue.toString());
+                        info.setCalculateAuditDateTimelyFlag(0);
+                    } else if (15 < differenceValue && differenceValue <= 30) {
+                        info.setCalculateAuditDateTimely(differenceValue.toString());
+                        info.setCalculateAuditDateTimelyFlag(2);
+                    } else if (30 < differenceValue) {
+                        info.setCalculateAuditDateTimely(differenceValue.toString());
+                        info.setCalculateAuditDateTimelyFlag(3);
+                    } else if (differenceValue < 0) {
+                        info.setCalculateAuditDateTimely("逻辑错误");
+                        info.setCalculateAuditDateTimelyFlag(4);
+                    }
+                }
+            }
+            //处理 结算审定日期及时性  结算审定日期-结算送审日期 两个日期均有为绿灯 0-15天(含15天)灰色 15-30天(含30天)黄灯 30天以上红灯 小于0天,显示“逻辑错误”
+            differenceValue = dateDifferenceValue(info.getCalculationExamineTime(), info.getCalculationForReviewTime());
+            if(StringUtils.isNotBlank(info.getCalculationExamineTime()) && StringUtils.isNotBlank(info.getCalculationForReviewTime())){
+                info.setCalculateExamineDateTimely(differenceValue.toString());
+                if (0 <= differenceValue &&  differenceValue<= 15) {
+                    info.setCalculateExamineDateTimelyFlag(0);
+                }else if (15 < differenceValue &&  differenceValue<= 30) {
+                    info.setCalculateExamineDateTimelyFlag(2);
+                }else if (30 < differenceValue) {
+                    info.setCalculateExamineDateTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setCalculateExamineDateTimely("逻辑错误");
+                    info.setCalculateExamineDateTimelyFlag(4);
+                }
+            }else{
+                if(null == differenceValue){
+                    info.setCalculateExamineDateTimely("");
+                    info.setCalculateExamineDateTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 15) {
+                        info.setCalculateExamineDateTimely(differenceValue.toString());
+                        info.setCalculateExamineDateTimelyFlag(0);
+                    } else if (15 < differenceValue && differenceValue <= 30) {
+                        info.setCalculateExamineDateTimely(differenceValue.toString());
+                        info.setCalculateExamineDateTimelyFlag(2);
+                    } else if (30 < differenceValue) {
+                        info.setCalculateExamineDateTimely(differenceValue.toString());
+                        info.setCalculateExamineDateTimelyFlag(3);
+                    } else if (differenceValue < 0) {
+                        info.setCalculateExamineDateTimely("逻辑错误");
+                        info.setCalculateExamineDateTimelyFlag(4);
+                    }
+                }
+            }
+            //处理 施工费入账日期及时性  施工费入账日期-结算审定日期 两个日期均有为绿灯 0-3天(含3天)灰色 3-6天(含6天)黄灯 6天以上红灯 小于0天,显示“逻辑错误”
+            differenceValue = dateDifferenceValue(info.getFirstConstructionFeeRecordedTime(), info.getCalculationExamineTime());
+            if(StringUtils.isNotBlank(info.getFirstConstructionFeeRecordedTime()) && StringUtils.isNotBlank(info.getCalculationExamineTime())){
+                info.setConstructionFeeRecordedTimely(differenceValue.toString());
+                if (0 <= differenceValue &&  differenceValue<= 3) {
+                    info.setConstructionFeeRecordedTimelyFlag(0);
+                }else if (3 < differenceValue &&  differenceValue<= 6) {
+                    info.setConstructionFeeRecordedTimelyFlag(2);
+                }else if (6 < differenceValue) {
+                    info.setConstructionFeeRecordedTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setConstructionFeeRecordedTimely("逻辑错误");
+                    info.setConstructionFeeRecordedTimelyFlag(4);
+                }
+            }else{
+                if(null == differenceValue){
+                    info.setConstructionFeeRecordedTimely("");
+                    info.setConstructionFeeRecordedTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 3) {
+                        info.setConstructionFeeRecordedTimely(differenceValue.toString());
+                        info.setConstructionFeeRecordedTimelyFlag(0);
+                    } else if (3 < differenceValue && differenceValue <= 6) {
+                        info.setConstructionFeeRecordedTimely(differenceValue.toString());
+                        info.setConstructionFeeRecordedTimelyFlag(2);
+                    } else if (6 < differenceValue) {
+                        info.setConstructionFeeRecordedTimely(differenceValue.toString());
+                        info.setConstructionFeeRecordedTimelyFlag(3);
+                    } else if (differenceValue < 0) {
+                        info.setConstructionFeeRecordedTimely("逻辑错误");
+                        info.setConstructionFeeRecordedTimelyFlag(4);
+                    }
+                }
+            }
+            //处理 核对甲供材是否一致  甲供材系统中是否一致列 一致绿灯 不一致红灯
+            if("是".equals(info.getIfGetRejectedMaterialFinish())){
+                info.setIfCoincideCheckWhichMaterial(info.getIfGetRejectedMaterialFinish());
+                info.setIfCoincideCheckWhichMaterialFlag(0);
+            }else{
+                info.setIfCoincideCheckWhichMaterial(info.getIfGetRejectedMaterialFinish());
+                info.setIfCoincideCheckWhichMaterialFlag(4);
+            }
+            //处理 提报竣工决算日期及时性  提报竣工决算日期-施工费入账日期 两个日期均有为绿灯 0-2天(含2天)灰色 3-4天(含4天)黄灯 5天以上红灯 小于0天,显示“逻辑错误”
+            differenceValue = dateDifferenceValue(info.getCompletedActualBudgetTime(), info.getFirstConstructionFeeRecordedTime());
+            if(StringUtils.isNotBlank(info.getCompletedActualBudgetTime()) && StringUtils.isNotBlank(info.getFirstConstructionFeeRecordedTime())){
+                info.setCompletionSettlementDateTimely(differenceValue.toString());
+                if (0 <= differenceValue &&  differenceValue<= 2) {
+                    info.setCompletionSettlementDateTimelyFlag(0);
+                }else if (2 < differenceValue &&  differenceValue<= 4) {
+                    info.setCompletionSettlementDateTimelyFlag(2);
+                }else if (4 < differenceValue) {
+                    info.setCompletionSettlementDateTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setCompletionSettlementDateTimely("逻辑错误");
+                    info.setCompletionSettlementDateTimelyFlag(4);
+                }
+            }else{
+                if(null == differenceValue){
+                    info.setCompletionSettlementDateTimely("");
+                    info.setCompletionSettlementDateTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 2) {
+                        info.setCompletionSettlementDateTimely(differenceValue.toString());
+                        info.setCompletionSettlementDateTimelyFlag(0);
+                    } else if (2 < differenceValue && differenceValue <= 4) {
+                        info.setCompletionSettlementDateTimely(differenceValue.toString());
+                        info.setCompletionSettlementDateTimelyFlag(2);
+                    } else if (4 < differenceValue) {
+                        info.setCompletionSettlementDateTimely(differenceValue.toString());
+                        info.setCompletionSettlementDateTimelyFlag(3);
+                    } else if (differenceValue < 0) {
+                        info.setCompletionSettlementDateTimely("逻辑错误");
+                        info.setCompletionSettlementDateTimelyFlag(4);
+                    }
+                }
+            }
+            //处理 决算送审日期及时性  决算送审日期-提报竣工决算日期 两个日期均有为绿灯 0-3天(含3天)灰色 4-5天(含5天)黄灯 5天以上红灯 小于0天,显示“逻辑错误”
+            differenceValue = dateDifferenceValue(info.getActualBudgetSubmittalsTime(), info.getCompletedActualBudgetTime());
+            if(StringUtils.isNotBlank(info.getActualBudgetSubmittalsTime()) && StringUtils.isNotBlank(info.getCompletedActualBudgetTime())){
+                info.setFinalAuditDateTimely(differenceValue.toString());
+                if (0 <= differenceValue &&  differenceValue<= 3) {
+                    info.setFinalAuditDateTimelyFlag(0);
+                }else if (3 < differenceValue &&  differenceValue<= 5) {
+                    info.setFinalAuditDateTimelyFlag(2);
+                }else if (5 < differenceValue) {
+                    info.setFinalAuditDateTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setFinalAuditDateTimely("逻辑错误");
+                    info.setFinalAuditDateTimelyFlag(4);
+                }
+            }else{
+                if(null == differenceValue){
+                    info.setFinalAuditDateTimely("");
+                    info.setFinalAuditDateTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 3) {
+                        info.setFinalAuditDateTimely(differenceValue.toString());
+                        info.setFinalAuditDateTimelyFlag(0);
+                    } else if (3 < differenceValue && differenceValue <= 5) {
+                        info.setFinalAuditDateTimely(differenceValue.toString());
+                        info.setFinalAuditDateTimelyFlag(2);
+                    } else if (5 < differenceValue) {
+                        info.setFinalAuditDateTimely(differenceValue.toString());
+                        info.setFinalAuditDateTimelyFlag(3);
+                    } else if (differenceValue < 0) {
+                        info.setFinalAuditDateTimely("逻辑错误");
+                        info.setFinalAuditDateTimelyFlag(4);
+                    }
+                }
+            }
+            //处理 出具决算审计报告及时性  决算审计报告出具日期-决算送审日期 两个日期均有为绿灯 0-7天(含7天)灰色 8-15天(含15天)黄灯 15天以上 小于0天,显示“逻辑错误”
+            differenceValue = dateDifferenceValue(info.getActualBudgetSubmittalsTime(), info.getCompletedActualBudgetTime());
+            if(StringUtils.isNotBlank(info.getActualBudgetSubmittalsTime()) && StringUtils.isNotBlank(info.getCompletedActualBudgetTime())){
+                info.setFinalAccountsAuditReportTimely(differenceValue.toString());
+                if (0 <= differenceValue &&  differenceValue<= 7) {
+                    info.setFinalAccountsAuditReportTimelyFlag(0);
+                }else if (7 < differenceValue &&  differenceValue<= 15) {
+                    info.setFinalAccountsAuditReportTimelyFlag(2);
+                }else if (15 < differenceValue) {
+                    info.setFinalAccountsAuditReportTimelyFlag(3);
+                } else if (differenceValue < 0) {
+                    info.setFinalAccountsAuditReportTimely("逻辑错误");
+                    info.setFinalAccountsAuditReportTimelyFlag(4);
+                }
+            }else{
+                if(null == differenceValue){
+                    info.setFinalAccountsAuditReportTimely("");
+                    info.setFinalAccountsAuditReportTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 7) {
+                        info.setFinalAccountsAuditReportTimely(differenceValue.toString());
+                        info.setFinalAccountsAuditReportTimelyFlag(0);
+                    } else if (7 < differenceValue && differenceValue <= 15) {
+                        info.setFinalAccountsAuditReportTimely(differenceValue.toString());
+                        info.setFinalAccountsAuditReportTimelyFlag(2);
+                    } else if (15 < differenceValue) {
+                        info.setFinalAccountsAuditReportTimely(differenceValue.toString());
+                        info.setFinalAccountsAuditReportTimelyFlag(3);
+                    } else if (differenceValue < 0) {
+                        info.setFinalAccountsAuditReportTimely("逻辑错误");
+                        info.setFinalAccountsAuditReportTimelyFlag(4);
+                    }
+                }
+            }
+        }
+
+    }
+
+    /**
+     *
+     * 0:绿色;2:黄色;3、4:红色
+     * @param projectCourseControlList
+     * @return
+     */
+    private ProjectWarnExamineInfo disposeProjectList(List<ProjectWarnExamineInfo> projectCourseControlList){
+        ProjectWarnExamineInfo warnExamineInfo = new ProjectWarnExamineInfo();
+        for (ProjectWarnExamineInfo info: projectCourseControlList) {
+            //计划开工日期准确性
+            if(null != info.getPlanStartWorkingTimeAccuracyFlag()){
+                switch (info.getPlanStartWorkingTimeAccuracyFlag()){
+                    case 0:
+                        if(null == warnExamineInfo.getPlanStartUpGreenCount()){
+                            warnExamineInfo.setPlanStartUpGreenCount(1);
+                        }else{
+                            warnExamineInfo.setPlanStartUpGreenCount(warnExamineInfo.getPlanStartUpGreenCount() + 1);
+                        }
+                        break;
+                    case 2:
+                        if(null == warnExamineInfo.getPlanStartUpYellowCount()){
+                            warnExamineInfo.setPlanStartUpYellowCount(1);
+                        }else{
+                            warnExamineInfo.setPlanStartUpYellowCount(warnExamineInfo.getPlanStartUpYellowCount() + 1);
+                        }
+                        break;
+                    case 3:
+                        if(null == warnExamineInfo.getPlanStartUpRedCount()){
+                            warnExamineInfo.setPlanStartUpRedCount(1);
+                        }else{
+                            warnExamineInfo.setPlanStartUpRedCount(warnExamineInfo.getPlanStartUpRedCount() + 1);
+                        }
+                        break;
+                }
+            }
+
+            //送审结算日期及时性
+            if(null != info.getCalculateAuditDateTimelyFlag()){
+                switch (info.getCalculateAuditDateTimelyFlag()){
+                    case 0:
+                        if(null == warnExamineInfo.getCalculationForReviewGreenCount()){
+                            warnExamineInfo.setCalculationForReviewGreenCount(1);
+                        }else{
+                            warnExamineInfo.setCalculationForReviewGreenCount(warnExamineInfo.getCalculationForReviewGreenCount() + 1);
+                        }
+                        break;
+                    case 2:
+                        if(null == warnExamineInfo.getCalculationForReviewYellowCount()){
+                            warnExamineInfo.setCalculationForReviewYellowCount(1);
+                        }else{
+                            warnExamineInfo.setCalculationForReviewYellowCount(warnExamineInfo.getCalculationForReviewYellowCount() + 1);
+                        }
+                        break;
+                    case 3:
+                        if(null == warnExamineInfo.getCalculationForReviewRedCount()){
+                            warnExamineInfo.setCalculationForReviewRedCount(1);
+                        }else{
+                            warnExamineInfo.setCalculationForReviewRedCount(warnExamineInfo.getCalculationForReviewRedCount() + 1);
+                        }
+                        break;
+                    case 4:
+                        if(null == warnExamineInfo.getCalculationForReviewErrorCount()){
+                            warnExamineInfo.setCalculationForReviewErrorCount(1);
+                        }else{
+                            warnExamineInfo.setCalculationForReviewErrorCount(warnExamineInfo.getCalculationForReviewErrorCount() + 1);
+                        }
+                        break;
+                }
+            }
+
+            //结算审定日期及时性
+            if(null != info.getCalculateExamineDateTimelyFlag()){
+                switch (info.getCalculateExamineDateTimelyFlag()){
+                    case 0:
+                        if(null == warnExamineInfo.getCalculationExamineGreenCount()){
+                            warnExamineInfo.setCalculationExamineGreenCount(1);
+                        }else{
+                            warnExamineInfo.setCalculationExamineGreenCount(warnExamineInfo.getCalculationExamineGreenCount() + 1);
+                        }
+                        break;
+                    case 2:
+                        if(null == warnExamineInfo.getCalculationExamineYellowCount()){
+                            warnExamineInfo.setCalculationExamineYellowCount(1);
+                        }else{
+                            warnExamineInfo.setCalculationExamineYellowCount(warnExamineInfo.getCalculationExamineYellowCount() + 1);
+                        }
+                        break;
+                    case 3:
+                        if(null == warnExamineInfo.getCalculationExamineRedCount()){
+                            warnExamineInfo.setCalculationExamineRedCount(1);
+                        }else{
+                            warnExamineInfo.setCalculationExamineRedCount(warnExamineInfo.getCalculationExamineRedCount() + 1);
+                        }
+                        break;
+                    case 4:
+                        if(null == warnExamineInfo.getCalculationExamineErrorCount()){
+                            warnExamineInfo.setCalculationExamineErrorCount(1);
+                        }else{
+                            warnExamineInfo.setCalculationExamineErrorCount(warnExamineInfo.getCalculationExamineErrorCount() + 1);
+                        }
+                        break;
+                }
+            }
+
+            //施工费入账日期及时性
+            if(null != info.getConstructionFeeRecordedTimelyFlag()){
+                switch (info.getConstructionFeeRecordedTimelyFlag()){
+                    case 0:
+                        if(null == warnExamineInfo.getConstructionFeeRecordedGreenCount()){
+                            warnExamineInfo.setConstructionFeeRecordedGreenCount(1);
+                        }else{
+                            warnExamineInfo.setConstructionFeeRecordedGreenCount(warnExamineInfo.getConstructionFeeRecordedGreenCount() + 1);
+                        }
+                        break;
+                    case 2:
+                        if(null == warnExamineInfo.getConstructionFeeRecordedYellowCount()){
+                            warnExamineInfo.setConstructionFeeRecordedYellowCount(1);
+                        }else{
+                            warnExamineInfo.setConstructionFeeRecordedYellowCount(warnExamineInfo.getConstructionFeeRecordedYellowCount() + 1);
+                        }
+                        break;
+                    case 3:
+                        if(null == warnExamineInfo.getConstructionFeeRecordedRedCount()){
+                            warnExamineInfo.setConstructionFeeRecordedRedCount(1);
+                        }else{
+                            warnExamineInfo.setConstructionFeeRecordedRedCount(warnExamineInfo.getConstructionFeeRecordedRedCount() + 1);
+                        }
+                        break;
+                    case 4:
+                        if(null == warnExamineInfo.getConstructionFeeRecordedErrorCount()){
+                            warnExamineInfo.setConstructionFeeRecordedErrorCount(1);
+                        }else{
+                            warnExamineInfo.setConstructionFeeRecordedErrorCount(warnExamineInfo.getConstructionFeeRecordedErrorCount() + 1);
+                        }
+                        break;
+                }
+            }
+
+            //核对甲供材是否一致
+            if(null != info.getIfCoincideCheckWhichMaterialFlag()){
+                switch (info.getIfCoincideCheckWhichMaterialFlag()){
+                    case 0:
+                        if(null == warnExamineInfo.getWhichMaterialStoresReturnedGreenCount()){
+                            warnExamineInfo.setWhichMaterialStoresReturnedGreenCount(1);
+                        }else{
+                            warnExamineInfo.setWhichMaterialStoresReturnedGreenCount(warnExamineInfo.getWhichMaterialStoresReturnedGreenCount() + 1);
+                        }
+                        break;
+                    case 2:
+                        if(null == warnExamineInfo.getWhichMaterialStoresReturnedYellowCount()){
+                            warnExamineInfo.setWhichMaterialStoresReturnedYellowCount(1);
+                        }else{
+                            warnExamineInfo.setWhichMaterialStoresReturnedYellowCount(warnExamineInfo.getWhichMaterialStoresReturnedYellowCount() + 1);
+                        }
+                        break;
+                    case 3:
+                        if(null == warnExamineInfo.getWhichMaterialStoresReturnedRedCount()){
+                            warnExamineInfo.setWhichMaterialStoresReturnedRedCount(1);
+                        }else{
+                            warnExamineInfo.setWhichMaterialStoresReturnedRedCount(warnExamineInfo.getWhichMaterialStoresReturnedRedCount() + 1);
+                        }
+                        break;
+                    case 4:
+                        if(null == warnExamineInfo.getWhichMaterialStoresReturnedErrorCount()){
+                            warnExamineInfo.setWhichMaterialStoresReturnedErrorCount(1);
+                        }else{
+                            warnExamineInfo.setWhichMaterialStoresReturnedErrorCount(warnExamineInfo.getWhichMaterialStoresReturnedErrorCount() + 1);
+                        }
+                        break;
+                }
+            }
+
+            //提报竣工决算日期及时性
+            if(null != info.getCompletionSettlementDateTimelyFlag()){
+                switch (info.getCompletionSettlementDateTimelyFlag()){
+                    case 0:
+                        if(null == warnExamineInfo.getCompletedActualBudgetGreenCount()){
+                            warnExamineInfo.setCompletedActualBudgetGreenCount(1);
+                        }else{
+                            warnExamineInfo.setCompletedActualBudgetGreenCount(warnExamineInfo.getCompletedActualBudgetGreenCount() + 1);
+                        }
+                        break;
+                    case 2:
+                        if(null == warnExamineInfo.getCompletedActualBudgetYellowCount()){
+                            warnExamineInfo.setCompletedActualBudgetYellowCount(1);
+                        }else{
+                            warnExamineInfo.setCompletedActualBudgetYellowCount(warnExamineInfo.getCompletedActualBudgetYellowCount() + 1);
+                        }
+                        break;
+                    case 3:
+                        if(null == warnExamineInfo.getCompletedActualBudgetRedCount()){
+                            warnExamineInfo.setCompletedActualBudgetRedCount(1);
+                        }else{
+                            warnExamineInfo.setCompletedActualBudgetRedCount(warnExamineInfo.getCompletedActualBudgetRedCount() + 1);
+                        }
+                        break;
+                    case 4:
+                        if(null == warnExamineInfo.getCompletedActualBudgetErrorCount()){
+                            warnExamineInfo.setCompletedActualBudgetErrorCount(1);
+                        }else{
+                            warnExamineInfo.setCompletedActualBudgetErrorCount(warnExamineInfo.getCompletedActualBudgetErrorCount() + 1);
+                        }
+                        break;
+                }
+            }
+
+            //决算送审日期及时性
+            if(null != info.getFinalAuditDateTimelyFlag()){
+                switch (info.getFinalAuditDateTimelyFlag()){
+                    case 0:
+                        if(null == warnExamineInfo.getActualBudgetSubmittalsGreenCount()){
+                            warnExamineInfo.setActualBudgetSubmittalsGreenCount(1);
+                        }else{
+                            warnExamineInfo.setActualBudgetSubmittalsGreenCount(warnExamineInfo.getActualBudgetSubmittalsGreenCount() + 1);
+                        }
+                        break;
+                    case 2:
+                        if(null == warnExamineInfo.getActualBudgetSubmittalsYellowCount()){
+                            warnExamineInfo.setActualBudgetSubmittalsYellowCount(1);
+                        }else{
+                            warnExamineInfo.setActualBudgetSubmittalsYellowCount(warnExamineInfo.getActualBudgetSubmittalsYellowCount() + 1);
+                        }
+                        break;
+                    case 3:
+                        if(null == warnExamineInfo.getActualBudgetSubmittalsRedCount()){
+                            warnExamineInfo.setActualBudgetSubmittalsRedCount(1);
+                        }else{
+                            warnExamineInfo.setActualBudgetSubmittalsRedCount(warnExamineInfo.getActualBudgetSubmittalsRedCount() + 1);
+                        }
+                        break;
+                    case 4:
+                        if(null == warnExamineInfo.getActualBudgetSubmittalsErrorCount()){
+                            warnExamineInfo.setActualBudgetSubmittalsErrorCount(1);
+                        }else{
+                            warnExamineInfo.setActualBudgetSubmittalsErrorCount(warnExamineInfo.getActualBudgetSubmittalsErrorCount() + 1);
+                        }
+                        break;
+                }
+            }
+
+            //出具决算审计报告及时性
+            if(null != info.getFinalAccountsAuditReportTimelyFlag()){
+                switch (info.getFinalAccountsAuditReportTimelyFlag()){
+                    case 0:
+                        if(null == warnExamineInfo.getActualBudgetauditReportGreenCount()){
+                            warnExamineInfo.setActualBudgetauditReportGreenCount(1);
+                        }else{
+                            warnExamineInfo.setActualBudgetauditReportGreenCount(warnExamineInfo.getActualBudgetauditReportGreenCount() + 1);
+                        }
+                        break;
+                    case 2:
+                        if(null == warnExamineInfo.getActualBudgetauditReportYellowCount()){
+                            warnExamineInfo.setActualBudgetauditReportYellowCount(1);
+                        }else{
+                            warnExamineInfo.setActualBudgetauditReportYellowCount(warnExamineInfo.getActualBudgetauditReportYellowCount() + 1);
+                        }
+                        break;
+                    case 3:
+                        if(null == warnExamineInfo.getActualBudgetauditReportRedCount()){
+                            warnExamineInfo.setActualBudgetauditReportRedCount(1);
+                        }else{
+                            warnExamineInfo.setActualBudgetauditReportRedCount(warnExamineInfo.getActualBudgetauditReportRedCount() + 1);
+                        }
+                        break;
+                    case 4:
+                        if(null == warnExamineInfo.getActualBudgetauditReportErrorCount()){
+                            warnExamineInfo.setActualBudgetauditReportErrorCount(1);
+                        }else{
+                            warnExamineInfo.setActualBudgetauditReportErrorCount(warnExamineInfo.getActualBudgetauditReportErrorCount() + 1);
+                        }
+                        break;
+                }
+            }
+        }
+
+        return warnExamineInfo;
+    }
+
+    /**
+     *
+     * @param courseInfo
+     * @param evaluationInfo
+     * @return
+     */
+    private ProjectWarnExamineInfo disposeProjectAllList(ProjectWarnExamineInfo courseInfo,ProjectWarnExamineInfo evaluationInfo){
+        ProjectWarnExamineInfo warnExamineInfo = new ProjectWarnExamineInfo();
+        //计划开工日期准确性
+        warnExamineInfo.setPlanStartUpGreenCount(courseInfo.getPlanStartUpGreenCount() + evaluationInfo.getPlanStartUpGreenCount());
+        warnExamineInfo.setPlanStartUpYellowCount(courseInfo.getPlanStartUpYellowCount() + evaluationInfo.getPlanStartUpYellowCount());
+        warnExamineInfo.setPlanStartUpRedCount(courseInfo.getPlanStartUpRedCount() + evaluationInfo.getPlanStartUpRedCount());
+        //送审结算日期及时性
+        warnExamineInfo.setCalculationForReviewGreenCount(courseInfo.getCalculationForReviewGreenCount() + evaluationInfo.getCalculationForReviewGreenCount());
+        warnExamineInfo.setCalculationForReviewYellowCount(courseInfo.getCalculationForReviewYellowCount() + evaluationInfo.getCalculationForReviewGreenCount());
+        warnExamineInfo.setCalculationForReviewRedCount(courseInfo.getCalculationForReviewRedCount() + evaluationInfo.getCalculationForReviewGreenCount());
+        warnExamineInfo.setCalculationForReviewErrorCount(courseInfo.getCalculationForReviewErrorCount() + evaluationInfo.getCalculationForReviewGreenCount());
+        //结算审定日期及时性
+        warnExamineInfo.setCalculationExamineGreenCount(courseInfo.getCalculationExamineGreenCount() + evaluationInfo.getCalculationExamineGreenCount());
+        warnExamineInfo.setCalculationExamineYellowCount(courseInfo.getCalculationExamineYellowCount() + evaluationInfo.getCalculationExamineYellowCount());
+        warnExamineInfo.setCalculationExamineRedCount(courseInfo.getCalculationExamineRedCount() + evaluationInfo.getCalculationExamineRedCount());
+        warnExamineInfo.setCalculationExamineErrorCount(courseInfo.getCalculationExamineErrorCount() + evaluationInfo.getCalculationExamineErrorCount());
+        //施工费入账日期及时性
+        warnExamineInfo.setConstructionFeeRecordedGreenCount(courseInfo.getConstructionFeeRecordedGreenCount() + evaluationInfo.getConstructionFeeRecordedGreenCount());
+        warnExamineInfo.setConstructionFeeRecordedYellowCount(courseInfo.getConstructionFeeRecordedYellowCount() + evaluationInfo.getConstructionFeeRecordedYellowCount());
+        warnExamineInfo.setConstructionFeeRecordedRedCount(courseInfo.getConstructionFeeRecordedRedCount() + evaluationInfo.getConstructionFeeRecordedRedCount());
+        warnExamineInfo.setConstructionFeeRecordedErrorCount(courseInfo.getConstructionFeeRecordedErrorCount() + evaluationInfo.getConstructionFeeRecordedErrorCount());
+        //核对甲供材是否一致
+        warnExamineInfo.setWhichMaterialStoresReturnedGreenCount(courseInfo.getWhichMaterialStoresReturnedGreenCount() + evaluationInfo.getWhichMaterialStoresReturnedGreenCount());
+        warnExamineInfo.setWhichMaterialStoresReturnedYellowCount(courseInfo.getWhichMaterialStoresReturnedYellowCount() + evaluationInfo.getWhichMaterialStoresReturnedYellowCount());
+        warnExamineInfo.setWhichMaterialStoresReturnedRedCount(courseInfo.getWhichMaterialStoresReturnedRedCount() + evaluationInfo.getWhichMaterialStoresReturnedRedCount());
+        warnExamineInfo.setWhichMaterialStoresReturnedErrorCount(courseInfo.getWhichMaterialStoresReturnedErrorCount() + evaluationInfo.getWhichMaterialStoresReturnedErrorCount());
+        //提报竣工决算日期及时性
+        warnExamineInfo.setCompletedActualBudgetGreenCount(courseInfo.getCompletedActualBudgetGreenCount() + evaluationInfo.getCompletedActualBudgetGreenCount());
+        warnExamineInfo.setCompletedActualBudgetYellowCount(courseInfo.getCompletedActualBudgetYellowCount() + evaluationInfo.getCompletedActualBudgetYellowCount());
+        warnExamineInfo.setCompletedActualBudgetRedCount(courseInfo.getCompletedActualBudgetRedCount() + evaluationInfo.getCompletedActualBudgetRedCount());
+        warnExamineInfo.setCompletedActualBudgetErrorCount(courseInfo.getCompletedActualBudgetErrorCount() + evaluationInfo.getCompletedActualBudgetErrorCount());
+        //决算送审日期及时性
+        warnExamineInfo.setActualBudgetSubmittalsGreenCount(courseInfo.getActualBudgetSubmittalsGreenCount() + evaluationInfo.getActualBudgetSubmittalsGreenCount());
+        warnExamineInfo.setActualBudgetSubmittalsYellowCount(courseInfo.getActualBudgetSubmittalsYellowCount() + evaluationInfo.getActualBudgetSubmittalsYellowCount());
+        warnExamineInfo.setActualBudgetSubmittalsRedCount(courseInfo.getActualBudgetSubmittalsRedCount() + evaluationInfo.getActualBudgetSubmittalsRedCount());
+        warnExamineInfo.setActualBudgetSubmittalsErrorCount(courseInfo.getActualBudgetSubmittalsErrorCount() + evaluationInfo.getActualBudgetSubmittalsErrorCount());
+        //出具决算审计报告及时性
+        warnExamineInfo.setActualBudgetauditReportGreenCount(courseInfo.getActualBudgetauditReportGreenCount() + evaluationInfo.getActualBudgetauditReportGreenCount());
+        warnExamineInfo.setActualBudgetauditReportYellowCount(courseInfo.getActualBudgetauditReportYellowCount() + evaluationInfo.getActualBudgetauditReportYellowCount());
+        warnExamineInfo.setActualBudgetauditReportRedCount(courseInfo.getActualBudgetauditReportRedCount() + evaluationInfo.getActualBudgetauditReportRedCount());
+        warnExamineInfo.setActualBudgetauditReportErrorCount(courseInfo.getActualBudgetauditReportErrorCount() + evaluationInfo.getActualBudgetauditReportErrorCount());
+
+        return warnExamineInfo;
+    }
+
+
+
+    /**
+     * 后评价显示数据处理
+     * @param projectCourseControlList
+     */
+    private void disposeProjectEvaluationBasics(List<ProjectWarnExamineInfo> projectCourseControlList){
+        for (ProjectWarnExamineInfo info: projectCourseControlList) {
+            //处理计划开工日期准确性   |计划开工日期- 首次领料日期| 0-30天(含30天)绿灯 30天以上红灯(前后数据均不能为空)
+            if(StringUtils.isNotBlank(info.getPlanStartUpDate()) && StringUtils.isNotBlank(info.getFirstAcquisitionTime())){
+                Integer differenceValue = dateDifferenceValue(info.getPlanStartUpDate(), info.getFirstAcquisitionTime());
+                differenceValue = absoluteValue(differenceValue);
+                if (0 <= differenceValue &&  differenceValue<= 15) {
+                    info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
+                    info.setPlanStartWorkingTimeAccuracyFlag(0);
+                }else if (15 < differenceValue &&  differenceValue<= 30) {
+                    info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
+                    info.setPlanStartWorkingTimeAccuracyFlag(2);
+                }else if(differenceValue > 30){
+                    info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
+                    info.setPlanStartWorkingTimeAccuracyFlag(4);
+                }if(differenceValue<0){
+                    info.setPlanStartWorkingTimeAccuracy("逻辑错误");
+                    info.setPlanStartWorkingTimeAccuracyFlag(4);
+                }
+            }else{
+                info.setPlanStartWorkingTimeAccuracy("");
+                info.setPlanStartWorkingTimeAccuracyFlag(null);
+            }
+            //处理 结算送审日期及时性  结算送审日期-实际竣工日期 0-30天(含30天)绿灯 30天以上红灯 小于0天,显示“逻辑错误”
+            if(StringUtils.isNotBlank(info.getCalculationForReviewTime()) && StringUtils.isNotBlank(info.getPracticalcompletionDate())){
+                Integer differenceValue = dateDifferenceValue(info.getCalculationForReviewTime(), info.getPracticalcompletionDate());
+                if (0 <= differenceValue &&  differenceValue<= 30) {
+                    info.setCalculateAuditDateTimely(differenceValue.toString());
+                    info.setCalculateAuditDateTimelyFlag(0);
+                }else if (30 < differenceValue) {
+                    info.setCalculateAuditDateTimely(differenceValue.toString());
+                    info.setCalculateAuditDateTimelyFlag(4);
+                }else if(differenceValue<0){
+                    info.setCalculateAuditDateTimely("逻辑错误");
+                    info.setCalculateAuditDateTimelyFlag(4);
+                }
+            }else{
+                info.setCalculateAuditDateTimely("");
+                info.setCalculateAuditDateTimelyFlag(null);
+            }
+            //处理 结算审定日期及时性  结算审定日期-结算送审日期  0-30天(含30天)绿灯 30天以上红灯 小于0天,显示“逻辑错误”
+            if(StringUtils.isNotBlank(info.getCalculationExamineTime()) && StringUtils.isNotBlank(info.getCalculationForReviewTime())){
+                Integer differenceValue = dateDifferenceValue(info.getCalculationExamineTime(), info.getCalculationForReviewTime());
+                if (0 <= differenceValue &&  differenceValue<= 30) {
+                    info.setCalculateExamineDateTimely(differenceValue.toString());
+                    info.setCalculateExamineDateTimelyFlag(0);
+                }else if (30 < differenceValue) {
+                    info.setCalculateExamineDateTimely(differenceValue.toString());
+                    info.setCalculateExamineDateTimelyFlag(4);
+                }else if(differenceValue<0){
+                    info.setCalculateExamineDateTimely("逻辑错误");
+                    info.setCalculateExamineDateTimelyFlag(4);
+                }
+            }else{
+                info.setCalculateExamineDateTimely("");
+                info.setCalculateExamineDateTimelyFlag(null);
+            }
+            //处理 施工费入账日期及时性  施工费入账日期-结算审定日期 0-6天(含6天)绿灯 6天以上红灯 小于0天,显示“逻辑错误”
+            if(StringUtils.isNotBlank(info.getFirstConstructionFeeRecordedTime()) && StringUtils.isNotBlank(info.getCalculationExamineTime())){
+                Integer differenceValue = dateDifferenceValue(info.getFirstConstructionFeeRecordedTime(), info.getCalculationExamineTime());
+
+                if (0 <= differenceValue &&  differenceValue<= 6) {
+                    info.setConstructionFeeRecordedTimely(differenceValue.toString());
+                    info.setConstructionFeeRecordedTimelyFlag(0);
+                }else if (6 < differenceValue) {
+                    info.setConstructionFeeRecordedTimely(differenceValue.toString());
+                    info.setConstructionFeeRecordedTimelyFlag(4);
+                }else if(differenceValue<0){
+                    info.setConstructionFeeRecordedTimely("逻辑错误");
+                    info.setConstructionFeeRecordedTimelyFlag(4);
+                }
+            }else{
+                info.setConstructionFeeRecordedTimely("");
+                info.setConstructionFeeRecordedTimelyFlag(null);
+            }
+            //处理 核对甲供材是否一致  甲供材系统中是否一致列 一致绿灯 不一致红灯
+            if("是".equals(info.getIfGetRejectedMaterialFinish())){
+                info.setIfCoincideCheckWhichMaterial(info.getIfGetRejectedMaterialFinish());
+                info.setIfCoincideCheckWhichMaterialFlag(0);
+            }else{
+                info.setIfCoincideCheckWhichMaterial(info.getIfGetRejectedMaterialFinish());
+                info.setIfCoincideCheckWhichMaterialFlag(4);
+            }
+            //处理 提报竣工决算日期及时性  提报竣工决算日期-施工费入账日期 0-5天(含5天)绿灯 5天以上红灯 小于0天,显示“逻辑错误”
+            if(StringUtils.isNotBlank(info.getCompletedActualBudgetTime()) && StringUtils.isNotBlank(info.getFirstConstructionFeeRecordedTime())){
+                Integer differenceValue = dateDifferenceValue(info.getCompletedActualBudgetTime(), info.getFirstConstructionFeeRecordedTime());
+
+                if (0 <= differenceValue &&  differenceValue<= 5) {
+                    info.setCompletionSettlementDateTimely(differenceValue.toString());
+                    info.setCompletionSettlementDateTimelyFlag(0);
+                }else if (5 < differenceValue) {
+                    info.setCompletionSettlementDateTimely(differenceValue.toString());
+                    info.setCompletionSettlementDateTimelyFlag(4);
+                }else if(differenceValue<0){
+                    info.setCompletionSettlementDateTimely("逻辑错误");
+                    info.setCompletionSettlementDateTimelyFlag(4);
+                }
+            }else{
+                info.setCompletionSettlementDateTimely("");
+                info.setCompletionSettlementDateTimelyFlag(null);
+            }
+            //处理 决算送审日期及时性  决算送审日期-提报竣工决算日期 0-5天(含5天)绿灯 5天以上红灯 小于0天,显示“逻辑错误”
+            if(StringUtils.isNotBlank(info.getActualBudgetSubmittalsTime()) && StringUtils.isNotBlank(info.getCompletedActualBudgetTime())){
+                Integer differenceValue = dateDifferenceValue(info.getActualBudgetSubmittalsTime(), info.getCompletedActualBudgetTime());
+
+                if (0 <= differenceValue &&  differenceValue<= 5) {
+                    info.setFinalAuditDateTimely(differenceValue.toString());
+                    info.setFinalAuditDateTimelyFlag(0);
+                }else if (5 < differenceValue) {
+                    info.setFinalAuditDateTimely(differenceValue.toString());
+                    info.setFinalAuditDateTimelyFlag(4);
+                }else if(differenceValue<0){
+                    info.setFinalAuditDateTimely("逻辑错误");
+                    info.setFinalAuditDateTimelyFlag(4);
+                }
+            }else{
+                info.setFinalAuditDateTimely("");
+                info.setFinalAuditDateTimelyFlag(null);
+            }
+            //处理 出具决算审计报告及时性  决算审计报告出具日期-决算送审日期 0-15天(含15天)绿灯 15天以上红灯 小于0天,显示“逻辑错误”
+            if(StringUtils.isNotBlank(info.getActualBudgetSubmittalsTime()) && StringUtils.isNotBlank(info.getCompletedActualBudgetTime())){
+                Integer differenceValue = dateDifferenceValue(info.getActualBudgetSubmittalsTime(), info.getCompletedActualBudgetTime());
+
+                if (0 <= differenceValue &&  differenceValue<= 15) {
+                    info.setFinalAccountsAuditReportTimely(differenceValue.toString());
+                    info.setFinalAccountsAuditReportTimelyFlag(0);
+                }else if (15 < differenceValue) {
+                    info.setFinalAccountsAuditReportTimely(differenceValue.toString());
+                    info.setFinalAccountsAuditReportTimelyFlag(4);
+                }else if(differenceValue<0){
+                    info.setFinalAccountsAuditReportTimely("逻辑错误");
+                    info.setFinalAccountsAuditReportTimelyFlag(4);
+                }
+            }else{
+                info.setFinalAccountsAuditReportTimely("");
+                info.setFinalAccountsAuditReportTimelyFlag(null);
+            }
+        }
+
+    }
+
+    /**
+     * 绝对值处理
+     * @param a
+     * @return
+     */
+    public static int absoluteValue(Integer a) {
+        return (a < 0) ? -a : a;
+    }
+
+    private Integer dateDifferenceValue(String dataOne,String dateTwo){
+        Integer betweenDaysValue = null;
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//注意月份是MM
+        try {
+            if(StringUtils.isBlank(dataOne) && StringUtils.isBlank(dateTwo)){//如果两个时间均为空 则不进行计算,前端页面展示为空
+                return betweenDaysValue;
+            }else{
+
+                Date date1 = null;
+                if(StringUtils.isNotBlank(dataOne)){
+                    date1 = simpleDateFormat.parse(dataOne);
+                }else{
+                    date1 = new Date();
+                }
+                Date date2 = null;
+                if(StringUtils.isNotBlank(dateTwo)){
+                    date2 = simpleDateFormat.parse(dateTwo);
+                }else{
+                    date2 = new Date();
+                }
+                Long betweenDays = (date1.getTime() - date2.getTime()) / (1000L*3600L*24L);
+                betweenDaysValue = betweenDays.intValue();
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return betweenDaysValue;
+    }
+}

+ 75 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/web/ProjectScheduleStatController.java

@@ -0,0 +1,75 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.web;
+
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.sg.budgetSpectaculars.entity.ProjectScheduleStatInfo;
+import com.jeeplus.modules.sg.budgetSpectaculars.service.ProjectScheduleStatService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * 项目进度统计Controller
+ * @author: 徐滕
+ * @create: 2021-11-24 17:00
+ **/
+
+@Controller
+@RequestMapping(value = "${adminPath}/scheduleStat/scheduleStat")
+public class ProjectScheduleStatController extends BaseController {
+
+    @Autowired
+    private ProjectScheduleStatService service;
+
+
+    @ModelAttribute
+    public ProjectScheduleStatInfo get(@RequestParam(required=false) String id) {
+        ProjectScheduleStatInfo entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = service.get(id);
+        }
+        if (entity == null){
+            entity = new ProjectScheduleStatInfo();
+        }
+        return entity;
+    }
+
+    /**
+     * 基础底表展示信息 列表页面
+     * @param projectScheduleStatInfo
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("scheduleStat:scheduleStat:list")
+    @RequestMapping(value = "list")
+    public String list(ProjectScheduleStatInfo projectScheduleStatInfo, Model model) {
+        model.addAttribute("projectScheduleStatInfo", projectScheduleStatInfo);
+        return "modules/sg/project/projectScheduleStat/projectScheduleStatList";
+    }
+
+    /**
+     * 基础底表展示信息 列表数据
+     * @param projectScheduleStatInfo
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("scheduleStat:scheduleStat:list")
+    @RequestMapping(value = "data")
+    public Map<String, Object> data(ProjectScheduleStatInfo projectScheduleStatInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<ProjectScheduleStatInfo> page = service.findPage(new Page<ProjectScheduleStatInfo>(request, response), projectScheduleStatInfo);
+        return getBootstrapData(page);
+    }
+}

+ 72 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/web/ProjectWarnExamineController.java

@@ -0,0 +1,72 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.web;
+
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.sg.budgetSpectaculars.entity.ProjectWarnExamineInfo;
+import com.jeeplus.modules.sg.budgetSpectaculars.service.ProjectWarnExamineService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * 项目预警检查Controller
+ * @author: 徐滕
+ * @create: 2021-11-26 09:20
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/warnExamine/warnExamine")
+public class ProjectWarnExamineController extends BaseController {
+    @Autowired
+    private ProjectWarnExamineService service;
+
+    @ModelAttribute
+    public ProjectWarnExamineInfo get(@RequestParam(required=false) String id) {
+        ProjectWarnExamineInfo entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = service.get(id);
+        }
+        if (entity == null){
+            entity = new ProjectWarnExamineInfo();
+        }
+        return entity;
+    }
+
+    /**
+     * 基础底表展示信息 列表页面
+     * @param projectWarnExamineInfo
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("warnExamine:warnExamine:list")
+    @RequestMapping(value = "list")
+    public String list(ProjectWarnExamineInfo projectWarnExamineInfo, Model model) {
+        model.addAttribute("projectWarnExamineInfo", projectWarnExamineInfo);
+        return "modules/sg/project/projectWarnExamine/projectWarnExamineList";
+    }
+
+    /**
+     * 基础底表展示信息 列表数据
+     * @param projectWarnExamineInfo
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("warnExamine:warnExamine:list")
+    @RequestMapping(value = "data")
+    public Map<String, Object> data(ProjectWarnExamineInfo projectWarnExamineInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<ProjectWarnExamineInfo> page = service.findPage(new Page<ProjectWarnExamineInfo>(request, response), projectWarnExamineInfo);
+        return getBootstrapData(page);
+    }
+}

+ 8 - 0
src/main/webapp/webpage/modules/sg/project/projectBasics/projectBasicsList.js

@@ -116,6 +116,14 @@ $(document).ready(function() {
 					   field: 'projectProperty',
 					   title: '项目性质'
                }
+             ,{
+					   field: 'projectStage',
+					   title: '项目阶段'
+               }
+             ,{
+					   field: 'dataQualityInspection',
+					   title: '数据质量检查'
+               }
                ,{
                        field: 'planStartUpDate',
                        title: '计划开工日期'

+ 7 - 14
src/main/webapp/webpage/modules/sg/project/projectCourse/projectCourseList.jsp

@@ -17,31 +17,27 @@
 				var text = $(this).text();
 				if("计划开工日期准确性" == text){
 					var titleValue = "计划开工日期- 首次领料日期\n" +
-							"两个日期均有为绿色\n" +
-							"0-15天(含15天)灰色\n" +
+							"0-15天(含15天)绿色\n" +
 							"15-30天(含30天)黄色\n" +
 							"30天以上红色(字体颜色)";
 					$(this).attr("title",titleValue);
 				} else if("结算送审日期及时性" == text){
 					var titleValue = "结算送审日期-实际竣工日期\n" +
-							"两个日期均有为绿色\n" +
-							"0-15天(含15天)灰色\n" +
+							"0-15天(含15天)绿色\n" +
 							"15-30天(含30天)黄色\n" +
 							"30天以上红色\n" +
 							"小于0天,显示“逻辑错误”";
 					$(this).attr("title",titleValue);
 				} else if("结算审定日期及时性" == text){
 					var titleValue = "结算审定日期-结算送审日期\n" +
-							"两个日期均有为绿色\n" +
-							"0-15天(含15天)灰色\n" +
+							"0-15天(含15天)绿色\n" +
 							"15-30天(含30天)黄色\n" +
 							"30天以上红色\n" +
 							"小于0天,显示“逻辑错误”";
 					$(this).attr("title",titleValue);
 				} else if("施工费入账日期及时性" == text){
 					var titleValue = "施工费入账日期-结算审定日期\n" +
-							"两个日期均有为绿色\n" +
-							"0-3天(含3天)灰色\n" +
+							"0-3天(含3天)绿色\n" +
 							"3-6天(含6天)黄色\n" +
 							"6天以上红色\n" +
 							"小于0天,显示“逻辑错误”";
@@ -53,24 +49,21 @@
 					$(this).attr("title",titleValue);
 				} else if("提报竣工决算日期及时性" == text){
 					var titleValue = "提报竣工决算日期-施工费入账日期\n" +
-							"两个日期均有为绿色\n" +
-							"0-2天(含2天)灰色\n" +
+							"0-2天(含2天)绿色\n" +
 							"3-4天(含4天)黄色\n" +
 							"5天以上红色\n" +
 							"小于0天,显示“逻辑错误”";
 					$(this).attr("title",titleValue);
 				} else if("决算送审日期及时性" == text){
 					var titleValue = "决算送审日期-提报竣工决算日期\n" +
-							"两个日期均有为绿色\n" +
-							"0-3天(含3天)灰色\n" +
+							"0-3天(含3天)绿色\n" +
 							"4-5天(含5天)黄色\n" +
 							"5天以上红色\n" +
 							"小于0天,显示“逻辑错误”";
 					$(this).attr("title",titleValue);
 				} else if("出具决算审计报告及时性" == text){
 					var titleValue = "决算审计报告出具日期-决算送审日期\n" +
-							"两个日期均有为绿色\n" +
-							"0-7天(含7天)灰色\n" +
+							"0-7天(含7天)绿色\n" +
 							"8-15天(含15天)黄色\n" +
 							"15天以上\n" +
 							"小于0天,显示“逻辑错误”";

+ 458 - 0
src/main/webapp/webpage/modules/sg/project/projectScheduleStat/projectScheduleStatList.js

@@ -0,0 +1,458 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script>
+$(document).ready(function() {
+	$('#dataTable').bootstrapTable({
+            //请求方法
+            method: 'post',
+            //类型json
+            dataType: "json",
+            contentType: "application/x-www-form-urlencoded",
+            //显示检索按钮
+            showSearch: true,
+            //显示刷新按钮
+            showRefresh: true,
+            //显示切换手机试图按钮
+            showToggle: true,
+            //显示 内容列下拉框
+            showColumns: true,
+            //显示到处按钮
+            showExport: true,
+            //显示切换分页按钮
+            showPaginationSwitch: true,
+            //最低显示2行
+            minimumCountColumns: 2,
+            //是否显示行间隔色
+            striped: true,
+            //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
+            cache: false,
+            //是否显示分页(*)
+            pagination: true,
+            //排序方式
+            sortOrder: "asc",
+            //初始化加载第一页,默认第一页
+            pageNumber:1,
+            //每页的记录行数(*)
+            pageSize: 10,
+            //可供选择的每页的行数(*)
+            pageList: [10, 25, 50, 100],
+            //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+               url: "${ctx}/scheduleStat/scheduleStat/data",
+               //默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
+               //queryParamsType:'',
+               ////查询参数,每次调用是会带上这个参数,可自定义
+               queryParams : function(params) {
+               	var searchParam = $("#searchForm").serializeJSON();
+               	searchParam.pageNo = params.limit === undefined? "1" :params.offset/params.limit+1;
+               	searchParam.pageSize = params.limit === undefined? -1 : params.limit;
+               	searchParam.orderBy = params.sort === undefined? "" : params.sort+ " "+  params.order;
+                   return searchParam;
+               },
+               //分页方式:client客户端分页,server服务端分页(*)
+               sidePagination: "server",
+               contextMenuTrigger:"right",//pc端 按右键弹出菜单
+               contextMenuTriggerMobile:"press",//手机端 弹出菜单,click:单击, press:长按。
+               contextMenu: '#context-menu',
+               onContextMenuItem: function(row, $el){
+                   if($el.data("item") == "edit"){
+                   		edit(row.id);
+                   }else if($el.data("item") == "view"){
+                       view(row.id);
+                   } else if($el.data("item") == "delete"){
+                        jp.confirm('确认要删除该数据记录吗?', function(){
+                       	jp.loading();
+                       	jp.get("${ctx}/budgetSpectaculars/budgetSpectaculars/delete?id="+row.id, function(data){
+                   	  		if(data.success){
+                   	  			$('#dataTable').bootstrapTable('refresh');
+                   	  			jp.success(data.msg);
+                   	  		}else{
+                   	  			jp.error(data.msg);
+                   	  		}
+                   	  	})
+
+                   	});
+
+                   }
+               },
+
+               onClickRow: function(row, $el){
+               },
+               	onShowSearch: function () {
+			$("#search-collapse").slideToggle();
+		},
+               columns: [[
+                   {
+                    field: 'secondLevelUnit',
+                    title: '地区',
+                       formatter:paramsMatter,
+                    rowspan:2
+		    }
+			,{
+                      field: 'projectType',
+                      title: '项目类型',
+                       formatter:paramsMatter,
+                      rowspan:2
+		    }
+			,{
+                      title: '项目数量',
+                       align: 'center',
+                      colspan:12
+		    }
+		    ],
+            [{
+                field: 'totalCount',
+                title: '合计',
+            }
+                ,{
+                field: 'notStartWorkCount',
+                title: '项目未开工'
+            },{
+                field: 'startWorkCount',
+                title: '项目开工',
+            }
+                ,{
+                field: 'completionCount',
+                title: '项目竣工'
+            },{
+                field: 'calculationForReviewCount',
+                title: '结算送审',
+            }
+                ,{
+                field: 'calculationExamineCount',
+                title: '结算审定'
+            },{
+                field: 'whichMaterialStoresReturnedCount',
+                title: '发起甲供材领退料',
+            }
+                ,{
+                field: 'rejectedMaterialFinishCount',
+                title: '领退料完成'
+            },{
+                field: 'completedActualBudgetCount',
+                title: '提报竣工决算',
+            }
+                ,{
+                field: 'actualBudgetSubmittalsCount',
+                title: '决算送审'
+            },{
+                field: 'actualBudgetauditReportCount',
+                title: '出具决算审计报告',
+            }
+                ,{
+                field: 'projectCloseCount',
+                title: '项目关闭'
+            }
+            ]
+],
+        onLoadSuccess: function () {//当所有数据被加载时触发处理函数
+            var data = $('#dataTable').bootstrapTable('getData', true);//获取当前页数据
+            mergeCells(data,'secondLevelUnit',1,$('#dataTable'));
+        },
+        onPageChange: function (){//当页面更改页码或页面大小时触发
+            var data = $('#dataTable').bootstrapTable('getData', true);
+            mergeCells(data,'secondLevelUnit',1,$('#dataTable'));
+        }
+		});
+
+    function mergeCells(data,fieldName,colspan,target){
+        console.log(data)
+        //声明一个map计算相同属性值在data对象出现的次数和
+        var sortMap = {};
+        for(var i = 0 ; i < data.length ; i++){
+            for(var prop in data[i]){
+                if(prop == fieldName){
+                    var key = data[i][prop]     //fieldName的value
+                    console.log(key)
+                    if(sortMap.hasOwnProperty(key)){
+                        sortMap[key] = sortMap[key] * 1 + 1;
+                    } else {
+                        sortMap[key] = 1;
+                    }
+                    break;
+                }
+            }
+        }
+        /*for(var prop in sortMap){
+            console.log(prop,sortMap[prop])
+        }*/
+        //合并单元格
+        var index = 0;
+        for(var prop in sortMap){
+            var count = sortMap[prop] * 1;
+            $(target).bootstrapTable('mergeCells',{index:index, field:fieldName, colspan: colspan, rowspan: count});
+            index += count;
+        }
+    }
+    function paramsMatter(value,row,index) {
+        if(null == value || undefined == value || '' == value){
+            value = "-";
+        }
+        var span=document.createElement('span');
+        span.setAttribute('title',value);
+        span.innerHTML = value;
+        return span.outerHTML;
+    }
+
+
+	  if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端
+
+
+		  $('#dataTable').bootstrapTable("toggleView");
+		}
+
+	  $('#dataTable').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+                'check-all.bs.table uncheck-all.bs.table', function () {
+            $('#remove').prop('disabled', ! $('#dataTable').bootstrapTable('getSelections').length);
+            $('#view,#edit').prop('disabled', $('#dataTable').bootstrapTable('getSelections').length!=1);
+        });
+    $("#btnImport").click(function(){
+        jp.open({
+            type: 2,
+            area: [800, 250],
+            auto: true,
+            title:"导入数据",
+            content: "${ctx}/budgetSpectaculars/budgetSpectaculars/importExcel" ,
+            btn: ['确定', '关闭'],
+            btn1: function(index, layero){
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+
+                iframeWin.contentWindow.importExcel('${ctx}/budgetSpectaculars/budgetSpectaculars/import', function (data) {
+                    console.log(data);
+                    var result= data.success;
+                    if(result){
+                        var body = data.body;
+                        var projectIdStr = data.projectIdStr;
+                        var repetitionProjectSize = body.repetitionProjectIdList;
+                        var uuid = body.uuid;
+                        var year = body.year;
+                        if(repetitionProjectSize>0){
+                            jp.confirm('项目数据有 '+repetitionProjectSize + ' 个项目编码重复,是否需要替换?', function(){
+                                jp.loading();
+                                jp.get("${ctx}/budgetSpectaculars/budgetSpectaculars/repetitionSave?uuid="+uuid+"&year="+year, function(data){
+                                    if(data.success){
+                                        $('#reportTable').bootstrapTable('refresh');
+                                        jp.success(data.msg);
+                                        location.reload();
+                                    }else{
+                                        jp.error(data.msg);
+                                        location.reload();
+                                    }
+                                })
+
+                            });
+                        }else{
+                            $('#reportTable').bootstrapTable('refresh');
+                            jp.success(data.msg);
+                            location.reload();
+                        }
+                    }else{
+                        jp.success(data.msg);
+                    }
+
+                    /*if(data.success){
+                        jp.success(data.msg);
+                        refresh();
+                    }else{
+                        jp.error(data.msg);
+                    }*/
+                    jp.close(index);
+                });//调用保存事件
+                return false;
+            },
+            btn2: function(index){
+                //  jp.close(index);
+            }
+        });
+    });
+
+    $("#importProjectDetail").click(function(){
+        jp.open({
+            type: 2,
+            area: [500, 200],
+            auto: true,
+            title:"导入数据",
+            content: "${ctx}/tag/importExcel" ,
+            btn: ['确定', '关闭'],
+            btn1: function(index, layero){
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+
+                iframeWin.contentWindow.importExcel('${ctx}/budgetSpectaculars/budgetSpectaculars/importProjectDetailFile', function (data) {
+                    if(data.success){
+                        jp.success(data.msg);
+                        refresh();
+                    }else{
+                        jp.error(data.msg);
+                    }
+                    jp.close(index);
+                });//调用保存事件
+                return false;
+            },
+            btn2: function(index){
+                //  jp.close(index);
+            }
+        });
+    });
+
+    $("#importProjectSettlement").click(function(){
+        jp.open({
+            type: 2,
+            area: [500, 200],
+            auto: true,
+            title:"导入数据",
+            content: "${ctx}/tag/importExcel" ,
+            btn: ['确定', '关闭'],
+            btn1: function(index, layero){
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+
+                iframeWin.contentWindow.importExcel('${ctx}/budgetSpectaculars/budgetSpectaculars/importProjectSettlementFile', function (data) {
+                    if(data.success){
+                        jp.success(data.msg);
+                        refresh();
+                    }else{
+                        jp.error(data.msg);
+                    }
+                    jp.close(index);
+                });//调用保存事件
+                return false;
+            },
+            btn2: function(index){
+                //  jp.close(index);
+            }
+        });
+    });
+
+    $("#importWhichMaterial").click(function(){
+        jp.open({
+            type: 2,
+            area: [500, 200],
+            auto: true,
+            title:"导入数据",
+            content: "${ctx}/tag/importExcel" ,
+            btn: ['确定', '关闭'],
+            btn1: function(index, layero){
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+
+                iframeWin.contentWindow.importExcel('${ctx}/budgetSpectaculars/budgetSpectaculars/importWhichMaterialFile', function (data) {
+                    if(data.success){
+                        jp.success(data.msg);
+                        refresh();
+                    }else{
+                        jp.error(data.msg);
+                    }
+                    jp.close(index);
+                });//调用保存事件
+                return false;
+            },
+            btn2: function(index){
+                //  jp.close(index);
+            }
+        });
+    });
+
+    $("#importHandmadeVindicate").click(function(){
+        jp.open({
+            type: 2,
+            area: [500, 200],
+            auto: true,
+            title:"导入数据",
+            content: "${ctx}/tag/importExcel" ,
+            btn: ['确定', '关闭'],
+            btn1: function(index, layero){
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+
+                iframeWin.contentWindow.importExcel('${ctx}/budgetSpectaculars/budgetSpectaculars/importHandmadeVindicateFile', function (data) {
+                    if(data.success){
+                        jp.success(data.msg);
+                        refresh();
+                    }else{
+                        jp.error(data.msg);
+                    }
+                    jp.close(index);
+                });//调用保存事件
+                return false;
+            },
+            btn2: function(index){
+                //  jp.close(index);
+            }
+        });
+    });
+
+
+
+	 $("#export").click(function(){//导出Excel文件物料
+            var reserveProjectName = $("#reserveProjectName").val();//储备项目暂定名称:
+            var projectName = $("#projectName").val();//项目名称
+            var reserveCode = $("#reserveCode").val();//储备编码
+            var projectCode = $("#projectCode").val();//项目编码
+            var projectAttribute = $("#projectAttribute").val();//项目属性
+            var projectDefine = $("#projectDefine").val();//项目定义
+            var bat = $("#bat").val();//项目批次
+			jp.downloadFile('${ctx}/budgetSpectaculars/budgetSpectaculars/export?reserveProjectName='+reserveProjectName+'&projectName='+projectName+'&reserveCode='+reserveCode+'&projectCode='+projectCode+'&projectAttribute='+projectAttribute+'&projectBatch='+bat+'&projectDefine='+projectDefine);
+	  });
+    $("#exportpro").click(function(){//导出Excel文件
+         jp.downloadFile('${ctx}/budgetSpectaculars/budgetSpectaculars/exportpro');
+    });
+
+
+	  $("#search").click("click", function() {// 绑定查询按扭
+		  $('#dataTable').bootstrapTable('refresh');
+		});
+
+	 $("#reset").click("click", function() {// 绑定查询按扭
+		  $("#searchForm  input").val("");
+		  $("#searchForm  select").val("");
+		  $("#searchForm  .select-item").html("");
+		  $('#dataTable').bootstrapTable('refresh');
+		});
+
+
+	});
+
+  function getIdSelections() {
+        return $.map($("#dataTable").bootstrapTable('getSelections'), function (row) {
+            return row.id
+        });
+    }
+
+  function deleteAll(){
+		jp.confirm('确认要删除该项目信息?,会删除该项目所有基础信息及流程信息。', function(){
+			jp.loading();
+			jp.get("${ctx}/budgetSpectaculars/budgetSpectaculars/deleteAll?ids=" + getIdSelections(), function(data){
+         	  		if(data.success){
+         	  			$('#dataTable').bootstrapTable('refresh');
+         	  			jp.success(data.msg);
+         	  		}else{
+         	  			jp.error(data.msg);
+         	  		}
+         	  	})
+
+		})
+  }
+
+    //刷新列表
+  function refresh(){
+  	$('#dataTable').bootstrapTable('refresh');
+  }
+
+   function add(){
+	  jp.openSaveDialog('新增', "${ctx}/budgetSpectaculars/budgetSpectaculars/form",'800px', '500px');
+  }
+
+
+
+   function edit(id){//没有权限时,不显示确定按钮
+       if(id == undefined){
+	      id = getIdSelections();
+	}
+	jp.openSaveDialog('编辑', "${ctx}/budgetSpectaculars/budgetSpectaculars/form?id=" + id, '800px', '500px');
+  }
+
+ function view(id){//没有权限时,不显示确定按钮
+      if(id == undefined){
+             id = getIdSelections();
+      }
+        jp.openViewDialog('查看', "${ctx}/budgetSpectaculars/budgetSpectaculars/form?id=" + id, '800px', '500px');
+ }
+
+
+
+</script>

+ 96 - 0
src/main/webapp/webpage/modules/sg/project/projectScheduleStat/projectScheduleStatList.jsp

@@ -0,0 +1,96 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>项目底表</title>
+	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
+	<meta name="decorator" content="ani"/>
+	<%@ include file="/webpage/include/bootstraptable.jsp"%>
+	<%@include file="/webpage/include/treeview.jsp" %>
+	<%@include file="projectScheduleStatList.js" %>
+</head>
+<body>
+	<div class="wrapper wrapper-content">
+	<div class="panel panel-primary">
+	<div class="panel-heading">
+		<h3 class="panel-title">项目底表列表信息</h3>
+	</div>
+	<div class="panel-body">
+
+	<!-- 搜索 -->
+	<div id="search-collapse" class="collapse">
+		<div class="accordion-inner">
+			<form:form id="searchForm" modelAttribute="projectScheduleStatInfo" class="form form-horizontal well clearfix">
+				<div class="col-xs-12 col-sm-6 col-md-4">
+					<label class="label-item single-overflow pull-left" title="项目名称:">地区:</label>
+					<form:input path="secondLevelUnit" htmlEscape="false" maxlength="64"  class=" form-control"/>
+				</div>
+				<%--<div class="col-xs-12 col-sm-6 col-md-4">
+					<label class="label-item single-overflow pull-left" title="国网项目编码:">国网项目编码:</label>
+					<form:input path="projectNumber" htmlEscape="false" maxlength="64"  class=" form-control"/>
+				</div>--%>
+				 <div class="col-xs-12 col-sm-6 col-md-4">
+					<div style="margin-top:26px">
+					  <a  id="search" class="btn btn-primary btn-rounded  btn-bordered btn-sm"><i class="fa fa-search"></i> 查询</a>
+					  <a  id="reset" class="btn btn-primary btn-rounded  btn-bordered btn-sm" ><i class="fa fa-refresh"></i> 重置</a>
+					 </div>
+				</div>
+			</form:form>
+		</div>
+	</div>
+
+		<!-- 工具栏 -->
+			<div id="toolbar">
+				<%--<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:import">
+					<button id="btnImport" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入综合查询
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:importProjectDetail">
+					<button id="importProjectDetail" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入项目明细
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:importProjectSettlement">
+					<button id="importProjectSettlement" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入工程结算信息
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:importWhichMaterial">
+					<button id="importWhichMaterial" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入甲供材信息
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:importHandmadeVindicate">
+					<button id="importHandmadeVindicate" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入手工维护信息
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:delete">
+					<button id="remove" class="btn btn-danger" disabled onclick="deleteAll()">
+						<i class="glyphicon glyphicon-remove"></i> 删除
+					</button>
+				</shiro:hasPermission>--%>
+			</div>
+
+	<!-- 表格 -->
+	<table id="dataTable"   data-toolbar="#toolbar"></table>
+
+    <!-- context menu -->
+    <ul id="context-menu" class="dropdown-menu">
+    	<shiro:hasPermission name="managementcenter:materialproject:add">
+        <li data-item="view"><a>查看</a></li>
+        </shiro:hasPermission>
+    	<shiro:hasPermission name="managementcenter:materialproject:edit">
+        <li data-item="edit"><a>编辑</a></li>
+        </shiro:hasPermission>
+        <shiro:hasPermission name="managementcenter:materialproject:del">
+        <li data-item="delete"><a>删除</a></li>
+        </shiro:hasPermission>
+        <li data-item="action1"><a>取消</a></li>
+    </ul>
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 441 - 0
src/main/webapp/webpage/modules/sg/project/projectWarnExamine/projectWarnExamineList.js

@@ -0,0 +1,441 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script>
+$(document).ready(function() {
+	$('#dataTable').bootstrapTable({
+            //请求方法
+            method: 'post',
+            //类型json
+            dataType: "json",
+            contentType: "application/x-www-form-urlencoded",
+            //显示检索按钮
+            showSearch: true,
+            //显示刷新按钮
+            showRefresh: true,
+            //显示切换手机试图按钮
+            showToggle: true,
+            //显示 内容列下拉框
+            showColumns: true,
+            //显示到处按钮
+            showExport: true,
+            //显示切换分页按钮
+            showPaginationSwitch: true,
+            //最低显示2行
+            minimumCountColumns: 2,
+            //是否显示行间隔色
+            striped: true,
+            //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
+            cache: false,
+            //是否显示分页(*)
+            pagination: true,
+            //排序方式
+            sortOrder: "asc",
+            //初始化加载第一页,默认第一页
+            pageNumber:1,
+            //每页的记录行数(*)
+            pageSize: 10,
+            //可供选择的每页的行数(*)
+            pageList: [10, 25, 50, 100],
+            //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+               url: "${ctx}/warnExamine/warnExamine/data",
+               //默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
+               //queryParamsType:'',
+               ////查询参数,每次调用是会带上这个参数,可自定义
+               queryParams : function(params) {
+               	var searchParam = $("#searchForm").serializeJSON();
+               	searchParam.pageNo = params.limit === undefined? "1" :params.offset/params.limit+1;
+               	searchParam.pageSize = params.limit === undefined? -1 : params.limit;
+               	searchParam.orderBy = params.sort === undefined? "" : params.sort+ " "+  params.order;
+                   return searchParam;
+               },
+               //分页方式:client客户端分页,server服务端分页(*)
+               sidePagination: "server",
+               contextMenuTrigger:"right",//pc端 按右键弹出菜单
+               contextMenuTriggerMobile:"press",//手机端 弹出菜单,click:单击, press:长按。
+               contextMenu: '#context-menu',
+               onContextMenuItem: function(row, $el){
+                   if($el.data("item") == "edit"){
+                   		edit(row.id);
+                   }else if($el.data("item") == "view"){
+                       view(row.id);
+                   } else if($el.data("item") == "delete"){
+                        jp.confirm('确认要删除该数据记录吗?', function(){
+                       	jp.loading();
+                       	jp.get("${ctx}/warnExamine/warnExamine/delete?id="+row.id, function(data){
+                   	  		if(data.success){
+                   	  			$('#dataTable').bootstrapTable('refresh');
+                   	  			jp.success(data.msg);
+                   	  		}else{
+                   	  			jp.error(data.msg);
+                   	  		}
+                   	  	})
+
+                   	});
+
+                   }
+               },
+
+               onClickRow: function(row, $el){
+               },
+               	onShowSearch: function () {
+			$("#search-collapse").slideToggle();
+		},
+               columns: [[
+                   {
+                    field: 'secondLevelUnit',
+                    title: '地区',
+                       width: 60,
+                       formatter:paramsMatter,
+                    rowspan:2
+		    }
+			,{
+                      field: 'projectType',
+                      title: '项目类型',
+                       width: 80,
+                       formatter:paramsMatter,
+                      rowspan:2
+		    }
+			,{
+                      field: 'schedule',
+                      title: '进度',
+                       width: 60,
+                       formatter:paramsMatter,
+                      rowspan:2
+		    }
+			,{
+                      title: '计划开工日期准确性',
+                       align: 'center',
+                       width: 200,
+                      colspan:4
+		    }
+			,{
+                      title: '结算送审日期及时性',
+                       align: 'center',
+                       width: 200,
+                      colspan:4
+		    }
+			,{
+                      title: '结算审定日期及时性',
+                       align: 'center',
+                       width: 200,
+                      colspan:4
+		    }
+			,{
+                      title: '施工费入账日期及时性',
+                       align: 'center',
+                       width: 200,
+                      colspan:4
+		    }
+			,{
+                      title: '核对甲供材是否一致',
+                       align: 'center',
+                       width: 200,
+                      colspan:4
+		    }
+			,{
+                      title: '提报竣工决算日期及时性',
+                       align: 'center',
+                       width: 200,
+                      colspan:4
+		    }
+			,{
+                      title: '决算送审日期及时性',
+                       align: 'center',
+                       width: 200,
+                      colspan:4
+		    }
+			,{
+                      title: '出具决算审计报告及时性',
+                       align: 'center',
+                       width: 200,
+                      colspan:4
+		    }
+		    ],
+            [{
+                field: 'planStartUpRedCount',
+                formatter:paramsMatterTable,
+                title: '红'
+            },{
+                field: 'planStartUpYellowCount',
+                formatter:paramsMatterTable,
+                title: '黄'
+            },{
+                field: 'planStartUpGreenCount',
+                formatter:paramsMatterTable,
+                title: '绿'
+            },{
+                field: 'planStartUpErrorCount',
+                formatter:paramsMatterTable,
+                title: '逻辑错误'
+            },{
+                field: 'calculationForReviewRedCount',
+                formatter:paramsMatterTable,
+                title: '红'
+            },{
+                field: 'calculationForReviewYellowCount',
+                formatter:paramsMatterTable,
+                title: '黄'
+            },{
+                field: 'calculationForReviewGreenCount',
+                formatter:paramsMatterTable,
+                title: '绿'
+            },{
+                field: 'calculationForReviewErrorCount',
+                formatter:paramsMatterTable,
+                title: '逻辑错误'
+            },{
+                field: 'calculationExamineRedCount',
+                formatter:paramsMatterTable,
+                title: '红'
+            },{
+                field: 'calculationExamineYellowCount',
+                formatter:paramsMatterTable,
+                title: '黄'
+            },{
+                field: 'calculationExamineGreenCount',
+                formatter:paramsMatterTable,
+                title: '绿'
+            },{
+                field: 'calculationExamineErrorCount',
+                formatter:paramsMatterTable,
+                title: '逻辑错误'
+            },{
+                field: 'constructionFeeRecordedRedCount',
+                formatter:paramsMatterTable,
+                title: '红'
+            },{
+                field: 'constructionFeeRecordedYellowCount',
+                formatter:paramsMatterTable,
+                title: '黄'
+            },{
+                field: 'constructionFeeRecordedGreenCount',
+                formatter:paramsMatterTable,
+                title: '绿'
+            },{
+                field: 'constructionFeeRecordedErrorCount',
+                formatter:paramsMatterTable,
+                title: '逻辑错误'
+            },{
+                field: 'whichMaterialStoresReturnedRedCount',
+                formatter:paramsMatterTable,
+                title: '红'
+            },{
+                field: 'whichMaterialStoresReturnedYellowCount',
+                formatter:paramsMatterTable,
+                title: '黄'
+            },{
+                field: 'whichMaterialStoresReturnedGreenCount',
+                formatter:paramsMatterTable,
+                title: '绿'
+            },{
+                field: 'whichMaterialStoresReturnedErrorCount',
+                formatter:paramsMatterTable,
+                title: '逻辑错误'
+            },{
+                field: 'completedActualBudgetRedCount',
+                formatter:paramsMatterTable,
+                title: '红'
+            },{
+                field: 'completedActualBudgetYellowCount',
+                formatter:paramsMatterTable,
+                title: '黄'
+            },{
+                field: 'completedActualBudgetGreenCount',
+                formatter:paramsMatterTable,
+                title: '绿'
+            },{
+                field: 'completedActualBudgetErrorCount',
+                formatter:paramsMatterTable,
+                title: '逻辑错误'
+            },{
+                field: 'actualBudgetSubmittalsRedCount',
+                formatter:paramsMatterTable,
+                title: '红'
+            },{
+                field: 'actualBudgetSubmittalsYellowCount',
+                formatter:paramsMatterTable,
+                title: '黄'
+            },{
+                field: 'actualBudgetSubmittalsGreenCount',
+                formatter:paramsMatterTable,
+                title: '绿'
+            },{
+                field: 'actualBudgetSubmittalsErrorCount',
+                formatter:paramsMatterTable,
+                title: '逻辑错误'
+            },{
+                field: 'actualBudgetauditReportRedCount',
+                formatter:paramsMatterTable,
+                title: '红'
+            },{
+                field: 'actualBudgetauditReportYellowCount',
+                formatter:paramsMatterTable,
+                title: '黄'
+            },{
+                field: 'actualBudgetauditReportGreenCount',
+                formatter:paramsMatterTable,
+                title: '绿'
+            },{
+                field: 'actualBudgetauditReportErrorCount',
+                formatter:paramsMatterTable,
+                title: '逻辑错误'
+            }
+            ]
+],
+        onLoadSuccess: function () {//当所有数据被加载时触发处理函数
+            var data = $('#dataTable').bootstrapTable('getData', true);//获取当前页数据
+            mergeCells(data,'secondLevelUnit',1,$('#dataTable'));
+            mergeCellsTow(data,'projectType',1,$('#dataTable'));
+        },
+        onPageChange: function (){//当页面更改页码或页面大小时触发
+            var data = $('#dataTable').bootstrapTable('getData', true);
+            mergeCells(data,'secondLevelUnit',1,$('#dataTable'));
+        }
+		});
+
+    function mergeCells(data,fieldName,colspan,target){
+        console.log(data)
+        //声明一个map计算相同属性值在data对象出现的次数和
+        var sortMap = {};
+        for(var i = 0 ; i < data.length ; i++){
+            for(var prop in data[i]){
+                if(prop == fieldName){
+                    var key = data[i][prop]     //fieldName的value
+                    console.log(key)
+                    if(sortMap.hasOwnProperty(key)){
+                        sortMap[key] = sortMap[key] * 1 + 1;
+                    } else {
+                        sortMap[key] = 1;
+                    }
+                    break;
+                }
+            }
+        }
+        /*for(var prop in sortMap){
+            console.log(prop,sortMap[prop])
+        }*/
+        //合并单元格
+        var index = 0;
+        for(var prop in sortMap){
+            var count = sortMap[prop] * 1;
+            $(target).bootstrapTable('mergeCells',{index:index, field:fieldName, colspan: colspan, rowspan: count});
+            index += count;
+        }
+    }
+
+    function mergeCellsTow(data,fieldName,colspan,target){
+        console.log(data)
+        //声明一个map计算相同属性值在data对象出现的次数和
+        var sortMap = {};
+        for(var i = 0 ; i < data.length ; i++){
+            for(var prop in data[i]){
+                if(prop == fieldName){
+                    var key = data[i][prop]     //fieldName的value
+                    console.log(key)
+                    if(sortMap.hasOwnProperty(key)){
+                        sortMap[key] = sortMap[key] * 1 + 1;
+                    } else {
+                        sortMap[key] = 1;
+                    }
+                    break;
+                }
+            }
+        }
+        /*for(var prop in sortMap){
+            console.log(prop,sortMap[prop])
+        }*/
+        //合并单元格
+        var index = 0;
+        for(var prop in sortMap){
+            var count = sortMap[prop] * 1;
+            if(count>3){
+                var number = count/3;
+                for(var i = 0 ; i < number ; i++){
+                    $(target).bootstrapTable('mergeCells',{index:index, field:fieldName, colspan: colspan, rowspan: 3});
+                    index += 3;
+                }
+            }else{
+                $(target).bootstrapTable('mergeCells',{index:index, field:fieldName, colspan: colspan, rowspan: count});
+                index += count;
+            }
+        }
+    }
+    function paramsMatter(value,row,index) {
+        if(null == value || undefined == value || '' == value){
+            value = "-";
+        }
+        var span=document.createElement('span');
+        span.setAttribute('title',value);
+        span.innerHTML = value;
+        return span.outerHTML;
+    }
+
+    function paramsMatterTable(value,row,index) {
+        if(null == value || undefined == value || '' == value){
+            value = "0";
+        }
+        var span=document.createElement('span');
+        span.setAttribute('title',value);
+        span.innerHTML = value;
+        return span.outerHTML;
+    }
+
+
+	  if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端
+
+
+		  $('#dataTable').bootstrapTable("toggleView");
+		}
+
+	  $('#dataTable').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+                'check-all.bs.table uncheck-all.bs.table', function () {
+            $('#remove').prop('disabled', ! $('#dataTable').bootstrapTable('getSelections').length);
+            $('#view,#edit').prop('disabled', $('#dataTable').bootstrapTable('getSelections').length!=1);
+        });
+
+
+	  $("#search").click("click", function() {// 绑定查询按扭
+		  $('#dataTable').bootstrapTable('refresh');
+		});
+
+	 $("#reset").click("click", function() {// 绑定查询按扭
+		  $("#searchForm  input").val("");
+		  $("#searchForm  select").val("");
+		  $("#searchForm  .select-item").html("");
+		  $('#dataTable').bootstrapTable('refresh');
+		});
+
+
+	});
+
+  function getIdSelections() {
+        return $.map($("#dataTable").bootstrapTable('getSelections'), function (row) {
+            return row.id
+        });
+    }
+
+
+    //刷新列表
+  function refresh(){
+  	$('#dataTable').bootstrapTable('refresh');
+  }
+
+
+
+
+   function edit(id){//没有权限时,不显示确定按钮
+       if(id == undefined){
+	      id = getIdSelections();
+	}
+	jp.openSaveDialog('编辑', "${ctx}/budgetSpectaculars/budgetSpectaculars/form?id=" + id, '800px', '500px');
+  }
+
+ function view(id){//没有权限时,不显示确定按钮
+      if(id == undefined){
+             id = getIdSelections();
+      }
+        jp.openViewDialog('查看', "${ctx}/budgetSpectaculars/budgetSpectaculars/form?id=" + id, '800px', '500px');
+ }
+
+
+
+</script>

+ 101 - 0
src/main/webapp/webpage/modules/sg/project/projectWarnExamine/projectWarnExamineList.jsp

@@ -0,0 +1,101 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>项目底表</title>
+	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
+	<meta name="decorator" content="ani"/>
+	<%@ include file="/webpage/include/bootstraptable.jsp"%>
+	<%@include file="/webpage/include/treeview.jsp" %>
+	<%@include file="projectWarnExamineList.js" %>
+	<style>
+		.table{
+			table-layout: fixed;
+		}
+	</style>
+</head>
+<body>
+	<div class="wrapper wrapper-content">
+	<div class="panel panel-primary">
+	<div class="panel-heading">
+		<h3 class="panel-title">项目预警检查</h3>
+	</div>
+	<div class="panel-body">
+
+	<!-- 搜索 -->
+	<div id="search-collapse" class="collapse">
+		<div class="accordion-inner">
+			<form:form id="searchForm" modelAttribute="projectWarnExamineInfo" class="form form-horizontal well clearfix">
+				<div class="col-xs-12 col-sm-6 col-md-4">
+					<label class="label-item single-overflow pull-left" title="项目名称:">地区:</label>
+					<form:input path="secondLevelUnit" htmlEscape="false" maxlength="64"  class=" form-control"/>
+				</div>
+				<%--<div class="col-xs-12 col-sm-6 col-md-4">
+					<label class="label-item single-overflow pull-left" title="国网项目编码:">国网项目编码:</label>
+					<form:input path="projectNumber" htmlEscape="false" maxlength="64"  class=" form-control"/>
+				</div>--%>
+				 <div class="col-xs-12 col-sm-6 col-md-4">
+					<div style="margin-top:26px">
+					  <a  id="search" class="btn btn-primary btn-rounded  btn-bordered btn-sm"><i class="fa fa-search"></i> 查询</a>
+					  <a  id="reset" class="btn btn-primary btn-rounded  btn-bordered btn-sm" ><i class="fa fa-refresh"></i> 重置</a>
+					 </div>
+				</div>
+			</form:form>
+		</div>
+	</div>
+
+		<!-- 工具栏 -->
+			<div id="toolbar">
+				<%--<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:import">
+					<button id="btnImport" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入综合查询
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:importProjectDetail">
+					<button id="importProjectDetail" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入项目明细
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:importProjectSettlement">
+					<button id="importProjectSettlement" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入工程结算信息
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:importWhichMaterial">
+					<button id="importWhichMaterial" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入甲供材信息
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:importHandmadeVindicate">
+					<button id="importHandmadeVindicate" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入手工维护信息
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:delete">
+					<button id="remove" class="btn btn-danger" disabled onclick="deleteAll()">
+						<i class="glyphicon glyphicon-remove"></i> 删除
+					</button>
+				</shiro:hasPermission>--%>
+			</div>
+
+	<!-- 表格 -->
+	<table id="dataTable"   data-toolbar="#toolbar"></table>
+
+    <!-- context menu -->
+    <ul id="context-menu" class="dropdown-menu">
+    	<shiro:hasPermission name="managementcenter:materialproject:add">
+        <li data-item="view"><a>查看</a></li>
+        </shiro:hasPermission>
+    	<shiro:hasPermission name="managementcenter:materialproject:edit">
+        <li data-item="edit"><a>编辑</a></li>
+        </shiro:hasPermission>
+        <shiro:hasPermission name="managementcenter:materialproject:del">
+        <li data-item="delete"><a>删除</a></li>
+        </shiro:hasPermission>
+        <li data-item="action1"><a>取消</a></li>
+    </ul>
+	</div>
+	</div>
+	</div>
+</body>
+</html>