Browse Source

预算看板代码开发

user5 3 years ago
parent
commit
fdf962d2e9
28 changed files with 6754 additions and 0 deletions
  1. 676 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/BudgetExecuteInfo.java
  2. 93 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/HandmadeVindicateInfo.java
  3. 441 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/PostEvaluationInfo.java
  4. 222 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectBasicsInfo.java
  5. 441 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectCourseControlInfo.java
  6. 291 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectDetailInfo.java
  7. 539 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectSettlementInfo.java
  8. 183 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/WhichMaterialInfo.java
  9. 52 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/ProjectBasicsMapper.java
  10. 14 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/ProjectCourseMapper.java
  11. 14 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/ProjectPostEvaluationMapper.java
  12. 282 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/xml/ProjectBasicsMapper.xml
  13. 78 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/xml/ProjectCourseMapper.xml
  14. 78 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/xml/ProjectPostEvaluationMapper.xml
  15. 558 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectBasicsService.java
  16. 251 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectCourseService.java
  17. 177 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectPostEvaluationService.java
  18. 200 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/web/ProjectBasicsController.java
  19. 73 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/web/ProjectCourseControlController.java
  20. 73 0
      src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/web/ProjectPostEvaluationController.java
  21. 512 0
      src/main/webapp/webpage/modules/sg/project/postEvaluation/projectPostEvaluationList.js
  22. 148 0
      src/main/webapp/webpage/modules/sg/project/postEvaluation/projectPostEvaluationList.jsp
  23. 49 0
      src/main/webapp/webpage/modules/sg/project/projectBasics/importExcel.jsp
  24. 118 0
      src/main/webapp/webpage/modules/sg/project/projectBasics/projectBasicsForm.jsp
  25. 426 0
      src/main/webapp/webpage/modules/sg/project/projectBasics/projectBasicsList.js
  26. 91 0
      src/main/webapp/webpage/modules/sg/project/projectBasics/projectBasicsList.jsp
  27. 512 0
      src/main/webapp/webpage/modules/sg/project/projectCourse/projectCourseList.js
  28. 162 0
      src/main/webapp/webpage/modules/sg/project/projectCourse/projectCourseList.jsp

+ 676 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/BudgetExecuteInfo.java

@@ -0,0 +1,676 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.entity;
+
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 预算执行管理表
+ * @author: 徐滕
+ * @create: 2021-09-15 09:17
+ **/
+public class BudgetExecuteInfo {
+
+    private String projectId;    //项目ID
+    private String projectName;    //项目名称
+    private String reserveCoding;    //储备编码
+    private String projectNumber;    //国网项目编码
+    private String projectBagNumber;    //项目包编码
+    private String projectBagName;    //项目包名称
+    private String importanceProjectInvest;    //重要项目投向
+    private String firstLevelUnit;    //一级单位
+    private String secondLevelUnit;    //二级单位
+    private String relevantDepartment;    //归口部门
+
+    private String projectImplementationDepartment;    //项目实施部门
+    private String firstSlassify;    //一级分类
+    private String secondSlassify;    //二级分类
+    private String thirdlySlassify;    //三级分类
+    private String projectBagType;    //项目包类型
+    private String commitmentOne;    //承诺项1
+    private String projectType;    //项目类型
+    private String projectProperty;    //项目性质
+    private String ifArrangeProject;    //是否预安排项目
+    private String projectStatus;    //项目流转状态
+
+    private String projectAllBudget;    //项目总预算(万元)
+    private String cumulativeInvestmentPlan;    //累计投资计划(万元)
+    private String accumulativeFinanceExpend;    //累计财务支出(万元)
+    private String accumulativeTaxes;    //累计税金
+    private String accumulativeFinishFee;    //累计完成值(含税)(万元)
+    private String projectAccumulativeTaxes;    //项目累计完成率(%)
+    private String investmentPlanFee;    //当年投资计划(万元)
+    private String budgetFee;    //当年预算(万元)
+    private String financeExpend;    //当年财务支出(万元)
+    private String budgetTaxes;    //年度预算完成率(%)
+
+    private String taxationExpense;    //当年税金(万元)
+    private String completeValue;    //当年完成值(含税)(万元)
+    private String projectCommitment;    //当年项目承诺
+    private String accumulativeProjectCommitment;    //累计项目承诺
+    private String projectPagNumber;    //国网项目包编码
+    private String sendStatusSubProject;    //发送国网状态(配网子项目)
+    private String underConstructionProjectBalance;    //在建工程余额(万元)
+    private String underConstructionProjectCardBalance;    //在建工程卡片余额(万元)
+    private String accumulativeWorkingCapitalFee;    //累计转资金额(万元)
+    private String year;    //年度
+
+    private String monomer;    //单体/打捆
+    private String projectWarehouseOutTime;    //项目出库时间
+    private String suggestBudget;    //建议预算(万元)
+    private String startWorkingTime;    //开工时间
+    private String budgetFinishTime;    //预计完成时间
+    private String sustainableArchitectureReason;    //续建结转原因
+    private String voltageLevel;    //电压等级
+    private String sendVillageStatus;    //发送配农网状态
+    private String sapProjectApprovalTime;    //SAP立项时间
+    private String customOne;    //自定义字段1
+
+    private String customTwo;    //自定义字段2
+    private String customThree;    //自定义字段3
+    private String customFour;    //自定义字段4
+    private String customFive;    //自定义字段5
+    private String projectStartTime;    //项目打开时间
+    private String projectCloseTime;    //项目关闭时间
+    private String operationalAction;    //业务活动
+    private String assetType;    //资产类型
+    private String professionalSubdivision;    //专业细分
+    private String pathType;    //线路类型
+
+    private String underTheLimitedCeiling;    //限上限下
+    private String ifEpibolyProject;    //是否外包项目
+    private String budgetReleaseStatus;    //预算释放状态
+    private String sendStatus;    //发送国网状态
+    private String businessEpibolyFee;    //业务外包金额(万元)
+    private String budgetAdjustmentCount;    //预算调整次数
+    private String accumulativeBudgetAdjustmentCount;    //累计预算调整次数
+    private String beginningYearBudget;    //年初预算
+    private String newestUpdateTime;    //最新变更时间
+    private String epibolyLaborCost;    //外包人工成本(万元)
+
+    private String ctrateByName;    //创建人
+    private String commitmentTwo;    //承诺项2
+    private String commitmentThree;    //承诺项3
+    @ExcelField(title="项目ID", align=2, sort=1)
+    public String getProjectId() {
+        return projectId;
+    }
+    @ExcelField(title="项目名称", align=2, sort=2)
+    public String getProjectName() {
+        return projectName;
+    }
+    @ExcelField(title="储备编码", align=2, sort=3)
+    public String getReserveCoding() {
+        return reserveCoding;
+    }
+    @ExcelField(title="国网项目编码", align=2, sort=4)
+    public String getProjectNumber() {
+        return projectNumber;
+    }
+    @ExcelField(title="项目包编码", align=2, sort=5)
+    public String getProjectBagNumber() {
+        return projectBagNumber;
+    }
+    @ExcelField(title="项目包名称", align=2, sort=6)
+    public String getProjectBagName() {
+        return projectBagName;
+    }
+    @ExcelField(title="重要项目投向", align=2, sort=7)
+    public String getImportanceProjectInvest() {
+        return importanceProjectInvest;
+    }
+    @ExcelField(title="一级单位", align=2, sort=8)
+    public String getFirstLevelUnit() {
+        return firstLevelUnit;
+    }
+    @ExcelField(title="二级单位", align=2, sort=9)
+    public String getSecondLevelUnit() {
+        return secondLevelUnit;
+    }
+    @ExcelField(title="归口部门", align=2, sort=10)
+    public String getRelevantDepartment() {
+        return relevantDepartment;
+    }
+    @ExcelField(title="项目实施部门", align=2, sort=11)
+    public String getProjectImplementationDepartment() {
+        return projectImplementationDepartment;
+    }
+    @ExcelField(title="一级分类", align=2, sort=12)
+    public String getFirstSlassify() {
+        return firstSlassify;
+    }
+    @ExcelField(title="二级分类", align=2, sort=13)
+    public String getSecondSlassify() {
+        return secondSlassify;
+    }
+    @ExcelField(title="三级分类", align=2, sort=14)
+    public String getThirdlySlassify() {
+        return thirdlySlassify;
+    }
+    @ExcelField(title="项目包类型", align=2, sort=15)
+    public String getProjectBagType() {
+        return projectBagType;
+    }
+    @ExcelField(title="承诺项1", align=2, sort=16)
+    public String getCommitmentOne() {
+        return commitmentOne;
+    }
+    @ExcelField(title="项目类型", align=2, sort=17)
+    public String getProjectType() {
+        return projectType;
+    }
+    @ExcelField(title="项目性质", align=2, sort=18)
+    public String getProjectProperty() {
+        return projectProperty;
+    }
+    @ExcelField(title="是否预安排项目", align=2, sort=19)
+    public String getIfArrangeProject() {
+        return ifArrangeProject;
+    }
+    @ExcelField(title="项目流转状态", align=2, sort=20)
+    public String getProjectStatus() {
+        return projectStatus;
+    }
+    @ExcelField(title="项目总预算(万元)", align=2, sort=21)
+    public String getProjectAllBudget() {
+        return projectAllBudget;
+    }
+    @ExcelField(title="累计投资计划(万元)", align=2, sort=22)
+    public String getCumulativeInvestmentPlan() {
+        return cumulativeInvestmentPlan;
+    }
+    @ExcelField(title="累计财务支出(万元)", align=2, sort=23)
+    public String getAccumulativeFinanceExpend() {
+        return accumulativeFinanceExpend;
+    }
+    @ExcelField(title="累计税金", align=2, sort=24)
+    public String getAccumulativeTaxes() {
+        return accumulativeTaxes;
+    }
+    @ExcelField(title="累计完成值(含税)(万元)", align=2, sort=25)
+    public String getAccumulativeFinishFee() {
+        return accumulativeFinishFee;
+    }
+    @ExcelField(title="项目累计完成率(%)", align=2, sort=26)
+    public String getProjectAccumulativeTaxes() {
+        return projectAccumulativeTaxes;
+    }
+    @ExcelField(title="当年投资计划(万元)", align=2, sort=27)
+    public String getInvestmentPlanFee() {
+        return investmentPlanFee;
+    }
+    @ExcelField(title="当年预算(万元)", align=2, sort=28)
+    public String getBudgetFee() {
+        return budgetFee;
+    }
+    @ExcelField(title="当年财务支出(万元)", align=2, sort=29)
+    public String getFinanceExpend() {
+        return financeExpend;
+    }
+    @ExcelField(title="年度预算完成率(%)", align=2, sort=30)
+    public String getBudgetTaxes() {
+        return budgetTaxes;
+    }
+    @ExcelField(title="当年税金(万元)", align=2, sort=31)
+    public String getTaxationExpense() {
+        return taxationExpense;
+    }
+    @ExcelField(title="当年完成值(含税)(万元)", align=2, sort=32)
+    public String getCompleteValue() {
+        return completeValue;
+    }
+    @ExcelField(title="当年项目承诺", align=2, sort=33)
+    public String getProjectCommitment() {
+        return projectCommitment;
+    }
+    @ExcelField(title="累计项目承诺", align=2, sort=34)
+    public String getAccumulativeProjectCommitment() {
+        return accumulativeProjectCommitment;
+    }
+    @ExcelField(title="国网项目包编码", align=2, sort=35)
+    public String getProjectPagNumber() {
+        return projectPagNumber;
+    }
+    @ExcelField(title="发送国网状态(配网子项目)", align=2, sort=36)
+    public String getSendStatusSubProject() {
+        return sendStatusSubProject;
+    }
+    @ExcelField(title="在建工程余额(万元)", align=2, sort=37)
+    public String getUnderConstructionProjectBalance() {
+        return underConstructionProjectBalance;
+    }
+    @ExcelField(title="在建工程卡片余额(万元)", align=2, sort=38)
+    public String getUnderConstructionProjectCardBalance() {
+        return underConstructionProjectCardBalance;
+    }
+    @ExcelField(title="累计转资金额(万元)", align=2, sort=39)
+    public String getAccumulativeWorkingCapitalFee() {
+        return accumulativeWorkingCapitalFee;
+    }
+    @ExcelField(title="年度", align=2, sort=40)
+    public String getYear() {
+        return year;
+    }
+    @ExcelField(title="单体/打捆", align=2, sort=41)
+    public String getMonomer() {
+        return monomer;
+    }
+    @ExcelField(title="项目出库时间", align=2, sort=42)
+    public String getProjectWarehouseOutTime() {
+        return projectWarehouseOutTime;
+    }
+    @ExcelField(title="建议预算(万元)", align=2, sort=43)
+    public String getSuggestBudget() {
+        return suggestBudget;
+    }
+    @ExcelField(title="开工时间", align=2, sort=44)
+    public String getStartWorkingTime() {
+        return startWorkingTime;
+    }
+    @ExcelField(title="预计完成时间", align=2, sort=45)
+    public String getBudgetFinishTime() {
+        return budgetFinishTime;
+    }
+    @ExcelField(title="续建结转原因", align=2, sort=46)
+    public String getSustainableArchitectureReason() {
+        return sustainableArchitectureReason;
+    }
+    @ExcelField(title="电压等级", align=2, sort=47)
+    public String getVoltageLevel() {
+        return voltageLevel;
+    }
+    @ExcelField(title="发送配农网状态", align=2, sort=48)
+    public String getSendVillageStatus() {
+        return sendVillageStatus;
+    }
+    @ExcelField(title="SAP立项时间", align=2, sort=49)
+    public String getSapProjectApprovalTime() {
+        return sapProjectApprovalTime;
+    }
+    @ExcelField(title="自定义字段1", align=2, sort=50)
+    public String getCustomOne() {
+        return customOne;
+    }
+    @ExcelField(title="自定义字段2", align=2, sort=51)
+    public String getCustomTwo() {
+        return customTwo;
+    }
+    @ExcelField(title="自定义字段3", align=2, sort=52)
+    public String getCustomThree() {
+        return customThree;
+    }
+    @ExcelField(title="自定义字段4", align=2, sort=53)
+    public String getCustomFour() {
+        return customFour;
+    }
+    @ExcelField(title="自定义字段5", align=2, sort=54)
+    public String getCustomFive() {
+        return customFive;
+    }
+    @ExcelField(title="项目打开时间", align=2, sort=55)
+    public String getProjectStartTime() {
+        return projectStartTime;
+    }
+    @ExcelField(title="项目关闭时间", align=2, sort=56)
+    public String getProjectCloseTime() {
+        return projectCloseTime;
+    }
+    @ExcelField(title="业务活动", align=2, sort=57)
+    public String getOperationalAction() {
+        return operationalAction;
+    }
+    @ExcelField(title="资产类型", align=2, sort=58)
+    public String getAssetType() {
+        return assetType;
+    }
+    @ExcelField(title="专业细分", align=2, sort=59)
+    public String getProfessionalSubdivision() {
+        return professionalSubdivision;
+    }
+    @ExcelField(title="线路类型", align=2, sort=60)
+    public String getPathType() {
+        return pathType;
+    }
+    @ExcelField(title="限上限下", align=2, sort=61)
+    public String getUnderTheLimitedCeiling() {
+        return underTheLimitedCeiling;
+    }
+    @ExcelField(title="是否外包项目", align=2, sort=62)
+    public String getIfEpibolyProject() {
+        return ifEpibolyProject;
+    }
+    @ExcelField(title="预算释放状态", align=2, sort=63)
+    public String getBudgetReleaseStatus() {
+        return budgetReleaseStatus;
+    }
+    @ExcelField(title="发送国网状态", align=2, sort=64)
+    public String getSendStatus() {
+        return sendStatus;
+    }
+    @ExcelField(title="业务外包金额(万元)", align=2, sort=65)
+    public String getBusinessEpibolyFee() {
+        return businessEpibolyFee;
+    }
+    @ExcelField(title="预算调整次数", align=2, sort=66)
+    public String getBudgetAdjustmentCount() {
+        return budgetAdjustmentCount;
+    }
+    @ExcelField(title="累计预算调整次数", align=2, sort=67)
+    public String getAccumulativeBudgetAdjustmentCount() {
+        return accumulativeBudgetAdjustmentCount;
+    }
+    @ExcelField(title="年初预算", align=2, sort=68)
+    public String getBeginningYearBudget() {
+        return beginningYearBudget;
+    }
+    @ExcelField(title="最新变更时间", align=2, sort=69)
+    public String getNewestUpdateTime() {
+        return newestUpdateTime;
+    }
+    @ExcelField(title="外包人工成本(万元)", align=2, sort=70)
+    public String getEpibolyLaborCost() {
+        return epibolyLaborCost;
+    }
+    @ExcelField(title="创建人", align=2, sort=71)
+    public String getCtrateByName() {
+        return ctrateByName;
+    }
+    @ExcelField(title="承诺项2", align=2, sort=72)
+    public String getCommitmentTwo() {
+        return commitmentTwo;
+    }
+    @ExcelField(title="承诺项3", align=2, sort=73)
+    public String getCommitmentThree() {
+        return commitmentThree;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public void setReserveCoding(String reserveCoding) {
+        this.reserveCoding = reserveCoding;
+    }
+
+    public void setProjectNumber(String projectNumber) {
+        this.projectNumber = projectNumber;
+    }
+
+    public void setProjectBagNumber(String projectBagNumber) {
+        this.projectBagNumber = projectBagNumber;
+    }
+
+    public void setProjectBagName(String projectBagName) {
+        this.projectBagName = projectBagName;
+    }
+
+    public void setImportanceProjectInvest(String importanceProjectInvest) {
+        this.importanceProjectInvest = importanceProjectInvest;
+    }
+
+    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 setProjectImplementationDepartment(String projectImplementationDepartment) {
+        this.projectImplementationDepartment = projectImplementationDepartment;
+    }
+
+    public void setFirstSlassify(String firstSlassify) {
+        this.firstSlassify = firstSlassify;
+    }
+
+    public void setSecondSlassify(String secondSlassify) {
+        this.secondSlassify = secondSlassify;
+    }
+
+    public void setThirdlySlassify(String thirdlySlassify) {
+        this.thirdlySlassify = thirdlySlassify;
+    }
+
+    public void setProjectBagType(String projectBagType) {
+        this.projectBagType = projectBagType;
+    }
+
+    public void setCommitmentOne(String commitmentOne) {
+        this.commitmentOne = commitmentOne;
+    }
+
+    public void setProjectType(String projectType) {
+        this.projectType = projectType;
+    }
+
+    public void setProjectProperty(String projectProperty) {
+        this.projectProperty = projectProperty;
+    }
+
+    public void setIfArrangeProject(String ifArrangeProject) {
+        this.ifArrangeProject = ifArrangeProject;
+    }
+
+    public void setProjectStatus(String projectStatus) {
+        this.projectStatus = projectStatus;
+    }
+
+    public void setProjectAllBudget(String projectAllBudget) {
+        this.projectAllBudget = projectAllBudget;
+    }
+
+    public void setCumulativeInvestmentPlan(String cumulativeInvestmentPlan) {
+        this.cumulativeInvestmentPlan = cumulativeInvestmentPlan;
+    }
+
+    public void setAccumulativeFinanceExpend(String accumulativeFinanceExpend) {
+        this.accumulativeFinanceExpend = accumulativeFinanceExpend;
+    }
+
+    public void setAccumulativeTaxes(String accumulativeTaxes) {
+        this.accumulativeTaxes = accumulativeTaxes;
+    }
+
+    public void setAccumulativeFinishFee(String accumulativeFinishFee) {
+        this.accumulativeFinishFee = accumulativeFinishFee;
+    }
+
+    public void setProjectAccumulativeTaxes(String projectAccumulativeTaxes) {
+        this.projectAccumulativeTaxes = projectAccumulativeTaxes;
+    }
+
+    public void setInvestmentPlanFee(String investmentPlanFee) {
+        this.investmentPlanFee = investmentPlanFee;
+    }
+
+    public void setBudgetFee(String budgetFee) {
+        this.budgetFee = budgetFee;
+    }
+
+    public void setFinanceExpend(String financeExpend) {
+        this.financeExpend = financeExpend;
+    }
+
+    public void setBudgetTaxes(String budgetTaxes) {
+        this.budgetTaxes = budgetTaxes;
+    }
+
+    public void setTaxationExpense(String taxationExpense) {
+        this.taxationExpense = taxationExpense;
+    }
+
+    public void setCompleteValue(String completeValue) {
+        this.completeValue = completeValue;
+    }
+
+    public void setProjectCommitment(String projectCommitment) {
+        this.projectCommitment = projectCommitment;
+    }
+
+    public void setAccumulativeProjectCommitment(String accumulativeProjectCommitment) {
+        this.accumulativeProjectCommitment = accumulativeProjectCommitment;
+    }
+
+    public void setProjectPagNumber(String projectPagNumber) {
+        this.projectPagNumber = projectPagNumber;
+    }
+
+    public void setSendStatusSubProject(String sendStatusSubProject) {
+        this.sendStatusSubProject = sendStatusSubProject;
+    }
+
+    public void setUnderConstructionProjectBalance(String underConstructionProjectBalance) {
+        this.underConstructionProjectBalance = underConstructionProjectBalance;
+    }
+
+    public void setUnderConstructionProjectCardBalance(String underConstructionProjectCardBalance) {
+        this.underConstructionProjectCardBalance = underConstructionProjectCardBalance;
+    }
+
+    public void setAccumulativeWorkingCapitalFee(String accumulativeWorkingCapitalFee) {
+        this.accumulativeWorkingCapitalFee = accumulativeWorkingCapitalFee;
+    }
+
+    public void setYear(String year) {
+        this.year = year;
+    }
+
+    public void setMonomer(String monomer) {
+        this.monomer = monomer;
+    }
+
+    public void setProjectWarehouseOutTime(String projectWarehouseOutTime) {
+        this.projectWarehouseOutTime = projectWarehouseOutTime;
+    }
+
+    public void setSuggestBudget(String suggestBudget) {
+        this.suggestBudget = suggestBudget;
+    }
+
+    public void setStartWorkingTime(String startWorkingTime) {
+        this.startWorkingTime = startWorkingTime;
+    }
+
+    public void setBudgetFinishTime(String budgetFinishTime) {
+        this.budgetFinishTime = budgetFinishTime;
+    }
+
+    public void setSustainableArchitectureReason(String sustainableArchitectureReason) {
+        this.sustainableArchitectureReason = sustainableArchitectureReason;
+    }
+
+    public void setVoltageLevel(String voltageLevel) {
+        this.voltageLevel = voltageLevel;
+    }
+
+    public void setSendVillageStatus(String sendVillageStatus) {
+        this.sendVillageStatus = sendVillageStatus;
+    }
+
+    public void setSapProjectApprovalTime(String sapProjectApprovalTime) {
+        this.sapProjectApprovalTime = sapProjectApprovalTime;
+    }
+
+    public void setCustomOne(String customOne) {
+        this.customOne = customOne;
+    }
+
+    public void setCustomTwo(String customTwo) {
+        this.customTwo = customTwo;
+    }
+
+    public void setCustomThree(String customThree) {
+        this.customThree = customThree;
+    }
+
+    public void setCustomFour(String customFour) {
+        this.customFour = customFour;
+    }
+
+    public void setCustomFive(String customFive) {
+        this.customFive = customFive;
+    }
+
+    public void setProjectStartTime(String projectStartTime) {
+        this.projectStartTime = projectStartTime;
+    }
+
+    public void setProjectCloseTime(String projectCloseTime) {
+        this.projectCloseTime = projectCloseTime;
+    }
+
+    public void setOperationalAction(String operationalAction) {
+        this.operationalAction = operationalAction;
+    }
+
+    public void setAssetType(String assetType) {
+        this.assetType = assetType;
+    }
+
+    public void setProfessionalSubdivision(String professionalSubdivision) {
+        this.professionalSubdivision = professionalSubdivision;
+    }
+
+    public void setPathType(String pathType) {
+        this.pathType = pathType;
+    }
+
+    public void setUnderTheLimitedCeiling(String underTheLimitedCeiling) {
+        this.underTheLimitedCeiling = underTheLimitedCeiling;
+    }
+
+    public void setIfEpibolyProject(String ifEpibolyProject) {
+        this.ifEpibolyProject = ifEpibolyProject;
+    }
+
+    public void setBudgetReleaseStatus(String budgetReleaseStatus) {
+        this.budgetReleaseStatus = budgetReleaseStatus;
+    }
+
+    public void setSendStatus(String sendStatus) {
+        this.sendStatus = sendStatus;
+    }
+
+    public void setBusinessEpibolyFee(String businessEpibolyFee) {
+        this.businessEpibolyFee = businessEpibolyFee;
+    }
+
+    public void setBudgetAdjustmentCount(String budgetAdjustmentCount) {
+        this.budgetAdjustmentCount = budgetAdjustmentCount;
+    }
+
+    public void setAccumulativeBudgetAdjustmentCount(String accumulativeBudgetAdjustmentCount) {
+        this.accumulativeBudgetAdjustmentCount = accumulativeBudgetAdjustmentCount;
+    }
+
+    public void setBeginningYearBudget(String beginningYearBudget) {
+        this.beginningYearBudget = beginningYearBudget;
+    }
+
+    public void setNewestUpdateTime(String newestUpdateTime) {
+        this.newestUpdateTime = newestUpdateTime;
+    }
+
+    public void setEpibolyLaborCost(String epibolyLaborCost) {
+        this.epibolyLaborCost = epibolyLaborCost;
+    }
+
+    public void setCtrateByName(String ctrateByName) {
+        this.ctrateByName = ctrateByName;
+    }
+
+    public void setCommitmentTwo(String commitmentTwo) {
+        this.commitmentTwo = commitmentTwo;
+    }
+
+    public void setCommitmentThree(String commitmentThree) {
+        this.commitmentThree = commitmentThree;
+    }
+}

+ 93 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/HandmadeVindicateInfo.java

@@ -0,0 +1,93 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.entity;
+
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 手工维护表
+ * @author: 徐滕
+ * @create: 2021-09-15 16:39
+ **/
+public class HandmadeVindicateInfo extends DataEntity<HandmadeVindicateInfo> {
+    private String projectName;    //项目名称
+    private String projectNumber;    //国网项目编码
+    private String planStartUpDate;    //计划开工日期
+    private String plancompletionDate; //计划竣工日期
+    private String practicalcompletionDate; //实际竣工日期
+    private String whichMaterialStoresReturnedTime;    //发起甲供材领退料日期
+    private String completedActualBudgetTime;    //提报竣工决算日期
+    private String actualBudgetSubmittalsTime;    //决算送审日期
+    private String actualBudgetauditReportTime;    //出具决算审计报告日期
+    @ExcelField(title="项目名称", align=2, sort=1)
+    public String getProjectName() {
+        return projectName;
+    }
+    @ExcelField(title="国网项目编码", align=2, sort=2)
+    public String getProjectNumber() {
+        return projectNumber;
+    }
+    @ExcelField(title="计划开工日期", align=2, sort=3)
+    public String getPlanStartUpDate() {
+        return planStartUpDate;
+    }
+    @ExcelField(title="计划竣工日期", align=2, sort=4)
+    public String getPlancompletionDate() {
+        return plancompletionDate;
+    }
+    @ExcelField(title="实际竣工日期", align=2, sort=5)
+    public String getPracticalcompletionDate() {
+        return practicalcompletionDate;
+    }
+    @ExcelField(title="发起甲供材领退料日期", align=2, sort=6)
+    public String getWhichMaterialStoresReturnedTime() {
+        return whichMaterialStoresReturnedTime;
+    }
+    @ExcelField(title="提报竣工决算日期", align=2, sort=7)
+    public String getCompletedActualBudgetTime() {
+        return completedActualBudgetTime;
+    }
+    @ExcelField(title="决算送审日期", align=2, sort=8)
+    public String getActualBudgetSubmittalsTime() {
+        return actualBudgetSubmittalsTime;
+    }
+    @ExcelField(title="出具决算审计报告日期", align=2, sort=9)
+    public String getActualBudgetauditReportTime() {
+        return actualBudgetauditReportTime;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public void setProjectNumber(String projectNumber) {
+        this.projectNumber = projectNumber;
+    }
+
+    public void setPlanStartUpDate(String planStartUpDate) {
+        this.planStartUpDate = planStartUpDate;
+    }
+
+    public void setPlancompletionDate(String plancompletionDate) {
+        this.plancompletionDate = plancompletionDate;
+    }
+
+    public void setPracticalcompletionDate(String practicalcompletionDate) {
+        this.practicalcompletionDate = practicalcompletionDate;
+    }
+
+    public void setWhichMaterialStoresReturnedTime(String whichMaterialStoresReturnedTime) {
+        this.whichMaterialStoresReturnedTime = whichMaterialStoresReturnedTime;
+    }
+
+    public void setCompletedActualBudgetTime(String completedActualBudgetTime) {
+        this.completedActualBudgetTime = completedActualBudgetTime;
+    }
+
+    public void setActualBudgetSubmittalsTime(String actualBudgetSubmittalsTime) {
+        this.actualBudgetSubmittalsTime = actualBudgetSubmittalsTime;
+    }
+
+    public void setActualBudgetauditReportTime(String actualBudgetauditReportTime) {
+        this.actualBudgetauditReportTime = actualBudgetauditReportTime;
+    }
+}

+ 441 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/PostEvaluationInfo.java

@@ -0,0 +1,441 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.entity;
+
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 后评价显示表
+ * @author: 徐滕
+ * @create: 2021-09-15 16:06
+ **/
+public class PostEvaluationInfo extends DataEntity<PostEvaluationInfo> {
+    private String projectName;    //项目名称
+    private String projectNumber;    //国网项目编码
+    private String firstLevelUnit;    //一级单位
+    private String secondLevelUnit;    //二级单位
+    private String relevantDepartment;    //归口部门
+    private String projectType;    //项目类型
+    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
+
+    @ExcelField(title="项目名称", align=2, sort=1)
+    public String getProjectName() {
+        return projectName;
+    }
+    @ExcelField(title="国网项目编码", align=2, sort=2)
+    public String getProjectNumber() {
+        return projectNumber;
+    }
+    @ExcelField(title="一级单位", align=2, sort=3)
+    public String getFirstLevelUnit() {
+        return firstLevelUnit;
+    }
+    @ExcelField(title="二级单位", align=2, sort=4)
+    public String getSecondLevelUnit() {
+        return secondLevelUnit;
+    }
+    @ExcelField(title="归口部门", align=2, sort=5)
+    public String getRelevantDepartment() {
+        return relevantDepartment;
+    }
+    @ExcelField(title="项目类型", align=2, sort=6)
+    public String getProjectType() {
+        return projectType;
+    }
+    @ExcelField(title="项目性质", align=2, sort=7)
+    public String getProjectProperty() {
+        return projectProperty;
+    }
+    @ExcelField(title="计划开工日期准确性", align=2, sort=8)
+    public String getPlanStartWorkingTimeAccuracy() {
+        return planStartWorkingTimeAccuracy;
+    }
+    @ExcelField(title="计划竣工日期准确性", align=2, sort=9)
+    public String getPlanCompletionTimeAccuracy() {
+        return planCompletionTimeAccuracy;
+    }
+    @ExcelField(title="隐藏列1", align=2, sort=10)
+    public String getConcealColumnOne() {
+        return concealColumnOne;
+    }
+    @ExcelField(title="实际开工及时性", align=2, sort=11)
+    public String getPracticalStartWorkingTimely() {
+        return practicalStartWorkingTimely;
+    }
+    @ExcelField(title="项目竣工及时性", align=2, sort=12)
+    public String getProjectCompletionTimely() {
+        return projectCompletionTimely;
+    }
+    @ExcelField(title="隐藏列2", align=2, sort=13)
+    public String getConcealColumnTwo() {
+        return concealColumnTwo;
+    }
+    @ExcelField(title="结算送审日期及时性", align=2, sort=14)
+    public String getCalculateAuditDateTimely() {
+        return calculateAuditDateTimely;
+    }
+    @ExcelField(title="结算审定日期及时性", align=2, sort=15)
+    public String getCalculateExamineDateTimely() {
+        return calculateExamineDateTimely;
+    }
+    @ExcelField(title="施工费入账日期及时性", align=2, sort=16)
+    public String getConstructionFeeRecordedTimely() {
+        return constructionFeeRecordedTimely;
+    }
+    @ExcelField(title="核对甲供材是否一致", align=2, sort=17)
+    public String getIfCoincideCheckWhichMaterial() {
+        return ifCoincideCheckWhichMaterial;
+    }
+    @ExcelField(title="监理费入账日期及时性", align=2, sort=18)
+    public String getSupervisionFeeRecordedTimely() {
+        return supervisionFeeRecordedTimely;
+    }
+    @ExcelField(title="结算费用入账及时性", align=2, sort=19)
+    public String getClearingFeeRecordedTimely() {
+        return clearingFeeRecordedTimely;
+    }
+    @ExcelField(title="决算费用入账及时性(成本项目不适用)", align=2, sort=20)
+    public String getFinalFeeRecordedTimely() {
+        return finalFeeRecordedTimely;
+    }
+    @ExcelField(title="提报竣工决算日期及时性", align=2, sort=21)
+    public String getCompletionSettlementDateTimely() {
+        return completionSettlementDateTimely;
+    }
+    @ExcelField(title="决算送审日期及时性", align=2, sort=22)
+    public String getFinalAuditDateTimely() {
+        return finalAuditDateTimely;
+    }
+    @ExcelField(title="出具决算审计报告及时性", align=2, sort=23)
+    public String getFinalAccountsAuditReportTimely() {
+        return finalAccountsAuditReportTimely;
+    }
+
+    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 setProjectType(String projectType) {
+        this.projectType = projectType;
+    }
+
+    public void setProjectProperty(String projectProperty) {
+        this.projectProperty = projectProperty;
+    }
+
+    public void setPlanStartWorkingTimeAccuracy(String planStartWorkingTimeAccuracy) {
+        this.planStartWorkingTimeAccuracy = planStartWorkingTimeAccuracy;
+    }
+
+    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 setCalculateExamineDateTimely(String calculateExamineDateTimely) {
+        this.calculateExamineDateTimely = calculateExamineDateTimely;
+    }
+
+    public void setConstructionFeeRecordedTimely(String constructionFeeRecordedTimely) {
+        this.constructionFeeRecordedTimely = constructionFeeRecordedTimely;
+    }
+
+    public void setIfCoincideCheckWhichMaterial(String ifCoincideCheckWhichMaterial) {
+        this.ifCoincideCheckWhichMaterial = ifCoincideCheckWhichMaterial;
+    }
+
+    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 setFinalAuditDateTimely(String finalAuditDateTimely) {
+        this.finalAuditDateTimely = finalAuditDateTimely;
+    }
+
+    public void setFinalAccountsAuditReportTimely(String finalAccountsAuditReportTimely) {
+        this.finalAccountsAuditReportTimely = finalAccountsAuditReportTimely;
+    }
+
+    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;
+    }
+
+    public Integer getPlanStartWorkingTimeAccuracyFlag() {
+        return planStartWorkingTimeAccuracyFlag;
+    }
+
+    public void setPlanStartWorkingTimeAccuracyFlag(Integer planStartWorkingTimeAccuracyFlag) {
+        this.planStartWorkingTimeAccuracyFlag = planStartWorkingTimeAccuracyFlag;
+    }
+
+    public Integer getCalculateAuditDateTimelyFlag() {
+        return calculateAuditDateTimelyFlag;
+    }
+
+    public void setCalculateAuditDateTimelyFlag(Integer calculateAuditDateTimelyFlag) {
+        this.calculateAuditDateTimelyFlag = calculateAuditDateTimelyFlag;
+    }
+
+    public Integer getCalculateExamineDateTimelyFlag() {
+        return calculateExamineDateTimelyFlag;
+    }
+
+    public void setCalculateExamineDateTimelyFlag(Integer calculateExamineDateTimelyFlag) {
+        this.calculateExamineDateTimelyFlag = calculateExamineDateTimelyFlag;
+    }
+
+    public Integer getConstructionFeeRecordedTimelyFlag() {
+        return constructionFeeRecordedTimelyFlag;
+    }
+
+    public void setConstructionFeeRecordedTimelyFlag(Integer constructionFeeRecordedTimelyFlag) {
+        this.constructionFeeRecordedTimelyFlag = constructionFeeRecordedTimelyFlag;
+    }
+
+    public Integer getIfCoincideCheckWhichMaterialFlag() {
+        return ifCoincideCheckWhichMaterialFlag;
+    }
+
+    public void setIfCoincideCheckWhichMaterialFlag(Integer ifCoincideCheckWhichMaterialFlag) {
+        this.ifCoincideCheckWhichMaterialFlag = ifCoincideCheckWhichMaterialFlag;
+    }
+
+    public Integer getCompletionSettlementDateTimelyFlag() {
+        return completionSettlementDateTimelyFlag;
+    }
+
+    public void setCompletionSettlementDateTimelyFlag(Integer completionSettlementDateTimelyFlag) {
+        this.completionSettlementDateTimelyFlag = completionSettlementDateTimelyFlag;
+    }
+
+    public Integer getFinalAuditDateTimelyFlag() {
+        return finalAuditDateTimelyFlag;
+    }
+
+    public void setFinalAuditDateTimelyFlag(Integer finalAuditDateTimelyFlag) {
+        this.finalAuditDateTimelyFlag = finalAuditDateTimelyFlag;
+    }
+
+    public Integer getFinalAccountsAuditReportTimelyFlag() {
+        return finalAccountsAuditReportTimelyFlag;
+    }
+
+    public void setFinalAccountsAuditReportTimelyFlag(Integer finalAccountsAuditReportTimelyFlag) {
+        this.finalAccountsAuditReportTimelyFlag = finalAccountsAuditReportTimelyFlag;
+    }
+}

+ 222 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectBasicsInfo.java

@@ -0,0 +1,222 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.entity;
+
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 项目基础底表
+ * @author: 徐滕
+ * @create: 2021-09-15 14:35
+ **/
+public class ProjectBasicsInfo extends DataEntity<ProjectBasicsInfo> {
+    private String projectName;    //项目名称
+    private String projectNumber;    //国网项目编码
+    private String firstLevelUnit;    //一级单位
+    private String secondLevelUnit;    //二级单位
+    private String relevantDepartment;    //归口部门
+    private String projectType;    //项目类型
+    private String projectProperty;    //项目性质
+    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;    //年份
+
+    @ExcelField(title="项目名称", align=2, sort=1)
+    public String getProjectName() {
+        return projectName;
+    }
+    @ExcelField(title="国网项目编码", align=2, sort=2)
+    public String getProjectNumber() {
+        return projectNumber;
+    }
+    @ExcelField(title="一级单位", align=2, sort=3)
+    public String getFirstLevelUnit() {
+        return firstLevelUnit;
+    }
+    @ExcelField(title="二级单位", align=2, sort=4)
+    public String getSecondLevelUnit() {
+        return secondLevelUnit;
+    }
+    @ExcelField(title="归口部门", align=2, sort=5)
+    public String getRelevantDepartment() {
+        return relevantDepartment;
+    }
+    @ExcelField(title="项目类型", align=2, sort=6)
+    public String getProjectType() {
+        return projectType;
+    }
+    @ExcelField(title="项目性质", align=2, sort=7)
+    public String getProjectProperty() {
+        return projectProperty;
+    }
+    @ExcelField(title="计划开工日期", align=2, sort=8)
+    public String getPlanStartUpDate() {
+        return planStartUpDate;
+    }
+    @ExcelField(title="计划竣工日期", align=2, sort=9)
+    public String getPlancompletionDate() {
+        return plancompletionDate;
+    }
+    @ExcelField(title="实际开工日期", align=2, sort=10)
+    public String getPracticalStartUpDate() {
+        return practicalStartUpDate;
+    }
+    @ExcelField(title="实际竣工日期", align=2, sort=11)
+    public String getPracticalcompletionDate() {
+        return practicalcompletionDate;
+    }
+    @ExcelField(title="首次领料日期", align=2, sort=12)
+    public String getFirstAcquisitionTime() {
+        return firstAcquisitionTime;
+    }
+    @ExcelField(title="首笔施工费入账日期", align=2, sort=13)
+    public String getFirstConstructionFeeRecordedTime() {
+        return firstConstructionFeeRecordedTime;
+    }
+    @ExcelField(title="结算送审日期", align=2, sort=14)
+    public String getCalculationForReviewTime() {
+        return calculationForReviewTime;
+    }
+    @ExcelField(title="结算审定日期", align=2, sort=15)
+    public String getCalculationExamineTime() {
+        return calculationExamineTime;
+    }
+    @ExcelField(title="发起甲供材领退料日期", align=2, sort=16)
+    public String getWhichMaterialStoresReturnedTime() {
+        return whichMaterialStoresReturnedTime;
+    }
+    @ExcelField(title="领退料是否完成", align=2, sort=17)
+    public String getIfGetRejectedMaterialFinish() {
+        return ifGetRejectedMaterialFinish;
+    }
+    @ExcelField(title="提报竣工决算日期", align=2, sort=18)
+    public String getCompletedActualBudgetTime() {
+        return completedActualBudgetTime;
+    }
+    @ExcelField(title="决算送审日期", align=2, sort=19)
+    public String getActualBudgetSubmittalsTime() {
+        return actualBudgetSubmittalsTime;
+    }
+    @ExcelField(title="出具决算审计报告日期", align=2, sort=20)
+    public String getActualBudgetauditReportTime() {
+        return actualBudgetauditReportTime;
+    }
+    @ExcelField(title="firstWorkingCapitalTime", align=2, sort=21)
+    public String getFirstWorkingCapitalTime() {
+        return firstWorkingCapitalTime;
+    }
+    @ExcelField(title="ifProjectClose", align=2, sort=22)
+    public String getIfProjectClose() {
+        return ifProjectClose;
+    }
+
+    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 setProjectType(String projectType) {
+        this.projectType = projectType;
+    }
+
+    public void setProjectProperty(String projectProperty) {
+        this.projectProperty = projectProperty;
+    }
+
+    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 String getYear() {
+        return year;
+    }
+
+    public void setYear(String year) {
+        this.year = year;
+    }
+}

+ 441 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectCourseControlInfo.java

@@ -0,0 +1,441 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.entity;
+
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 过程管控表
+ * @author: 徐滕
+ * @create: 2021-09-15 15:36
+ **/
+public class ProjectCourseControlInfo  extends DataEntity<ProjectCourseControlInfo> {
+    private String projectName;    //项目名称
+    private String projectNumber;    //国网项目编码
+    private String firstLevelUnit;    //一级单位
+    private String secondLevelUnit;    //二级单位
+    private String relevantDepartment;    //归口部门
+    private String projectType;    //项目类型
+    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
+
+    @ExcelField(title="项目名称", align=2, sort=1)
+    public String getProjectName() {
+        return projectName;
+    }
+    @ExcelField(title="国网项目编码", align=2, sort=2)
+    public String getProjectNumber() {
+        return projectNumber;
+    }
+    @ExcelField(title="一级单位", align=2, sort=3)
+    public String getFirstLevelUnit() {
+        return firstLevelUnit;
+    }
+    @ExcelField(title="二级单位", align=2, sort=4)
+    public String getSecondLevelUnit() {
+        return secondLevelUnit;
+    }
+    @ExcelField(title="归口部门", align=2, sort=5)
+    public String getRelevantDepartment() {
+        return relevantDepartment;
+    }
+    @ExcelField(title="项目类型", align=2, sort=6)
+    public String getProjectType() {
+        return projectType;
+    }
+    @ExcelField(title="项目性质", align=2, sort=7)
+    public String getProjectProperty() {
+        return projectProperty;
+    }
+    @ExcelField(title="计划开工日期准确性", align=2, sort=8)
+    public String getPlanStartWorkingTimeAccuracy() {
+        return planStartWorkingTimeAccuracy;
+    }
+    @ExcelField(title="计划竣工日期准确性", align=2, sort=9)
+    public String getPlanCompletionTimeAccuracy() {
+        return planCompletionTimeAccuracy;
+    }
+    @ExcelField(title="隐藏列1", align=2, sort=10)
+    public String getConcealColumnOne() {
+        return concealColumnOne;
+    }
+    @ExcelField(title="实际开工及时性", align=2, sort=11)
+    public String getPracticalStartWorkingTimely() {
+        return practicalStartWorkingTimely;
+    }
+    @ExcelField(title="项目竣工及时性", align=2, sort=12)
+    public String getProjectCompletionTimely() {
+        return projectCompletionTimely;
+    }
+    @ExcelField(title="隐藏列2", align=2, sort=13)
+    public String getConcealColumnTwo() {
+        return concealColumnTwo;
+    }
+    @ExcelField(title="结算送审日期及时性", align=2, sort=14)
+    public String getCalculateAuditDateTimely() {
+        return calculateAuditDateTimely;
+    }
+    @ExcelField(title="结算审定日期及时性", align=2, sort=15)
+    public String getCalculateExamineDateTimely() {
+        return calculateExamineDateTimely;
+    }
+    @ExcelField(title="施工费入账日期及时性", align=2, sort=16)
+    public String getConstructionFeeRecordedTimely() {
+        return constructionFeeRecordedTimely;
+    }
+    @ExcelField(title="核对甲供材是否一致", align=2, sort=17)
+    public String getIfCoincideCheckWhichMaterial() {
+        return ifCoincideCheckWhichMaterial;
+    }
+    @ExcelField(title="监理费入账日期及时性", align=2, sort=18)
+    public String getSupervisionFeeRecordedTimely() {
+        return supervisionFeeRecordedTimely;
+    }
+    @ExcelField(title="结算费用入账及时性", align=2, sort=19)
+    public String getClearingFeeRecordedTimely() {
+        return clearingFeeRecordedTimely;
+    }
+    @ExcelField(title="决算费用入账及时性(成本项目不适用)", align=2, sort=20)
+    public String getFinalFeeRecordedTimely() {
+        return finalFeeRecordedTimely;
+    }
+    @ExcelField(title="提报竣工决算日期及时性", align=2, sort=21)
+    public String getCompletionSettlementDateTimely() {
+        return completionSettlementDateTimely;
+    }
+    @ExcelField(title="决算送审日期及时性", align=2, sort=22)
+    public String getFinalAuditDateTimely() {
+        return finalAuditDateTimely;
+    }
+    @ExcelField(title="出具决算审计报告及时性", align=2, sort=23)
+    public String getFinalAccountsAuditReportTimely() {
+        return finalAccountsAuditReportTimely;
+    }
+
+    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 setProjectType(String projectType) {
+        this.projectType = projectType;
+    }
+
+    public void setProjectProperty(String projectProperty) {
+        this.projectProperty = projectProperty;
+    }
+
+    public void setPlanStartWorkingTimeAccuracy(String planStartWorkingTimeAccuracy) {
+        this.planStartWorkingTimeAccuracy = planStartWorkingTimeAccuracy;
+    }
+
+    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 setCalculateExamineDateTimely(String calculateExamineDateTimely) {
+        this.calculateExamineDateTimely = calculateExamineDateTimely;
+    }
+
+    public void setConstructionFeeRecordedTimely(String constructionFeeRecordedTimely) {
+        this.constructionFeeRecordedTimely = constructionFeeRecordedTimely;
+    }
+
+    public void setIfCoincideCheckWhichMaterial(String ifCoincideCheckWhichMaterial) {
+        this.ifCoincideCheckWhichMaterial = ifCoincideCheckWhichMaterial;
+    }
+
+    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 setFinalAuditDateTimely(String finalAuditDateTimely) {
+        this.finalAuditDateTimely = finalAuditDateTimely;
+    }
+
+    public void setFinalAccountsAuditReportTimely(String finalAccountsAuditReportTimely) {
+        this.finalAccountsAuditReportTimely = finalAccountsAuditReportTimely;
+    }
+
+    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;
+    }
+
+    public Integer getPlanStartWorkingTimeAccuracyFlag() {
+        return planStartWorkingTimeAccuracyFlag;
+    }
+
+    public void setPlanStartWorkingTimeAccuracyFlag(Integer planStartWorkingTimeAccuracyFlag) {
+        this.planStartWorkingTimeAccuracyFlag = planStartWorkingTimeAccuracyFlag;
+    }
+
+    public Integer getCalculateAuditDateTimelyFlag() {
+        return calculateAuditDateTimelyFlag;
+    }
+
+    public void setCalculateAuditDateTimelyFlag(Integer calculateAuditDateTimelyFlag) {
+        this.calculateAuditDateTimelyFlag = calculateAuditDateTimelyFlag;
+    }
+
+    public Integer getCalculateExamineDateTimelyFlag() {
+        return calculateExamineDateTimelyFlag;
+    }
+
+    public void setCalculateExamineDateTimelyFlag(Integer calculateExamineDateTimelyFlag) {
+        this.calculateExamineDateTimelyFlag = calculateExamineDateTimelyFlag;
+    }
+
+    public Integer getConstructionFeeRecordedTimelyFlag() {
+        return constructionFeeRecordedTimelyFlag;
+    }
+
+    public void setConstructionFeeRecordedTimelyFlag(Integer constructionFeeRecordedTimelyFlag) {
+        this.constructionFeeRecordedTimelyFlag = constructionFeeRecordedTimelyFlag;
+    }
+
+    public Integer getIfCoincideCheckWhichMaterialFlag() {
+        return ifCoincideCheckWhichMaterialFlag;
+    }
+
+    public void setIfCoincideCheckWhichMaterialFlag(Integer ifCoincideCheckWhichMaterialFlag) {
+        this.ifCoincideCheckWhichMaterialFlag = ifCoincideCheckWhichMaterialFlag;
+    }
+
+    public Integer getCompletionSettlementDateTimelyFlag() {
+        return completionSettlementDateTimelyFlag;
+    }
+
+    public void setCompletionSettlementDateTimelyFlag(Integer completionSettlementDateTimelyFlag) {
+        this.completionSettlementDateTimelyFlag = completionSettlementDateTimelyFlag;
+    }
+
+    public Integer getFinalAuditDateTimelyFlag() {
+        return finalAuditDateTimelyFlag;
+    }
+
+    public void setFinalAuditDateTimelyFlag(Integer finalAuditDateTimelyFlag) {
+        this.finalAuditDateTimelyFlag = finalAuditDateTimelyFlag;
+    }
+
+    public Integer getFinalAccountsAuditReportTimelyFlag() {
+        return finalAccountsAuditReportTimelyFlag;
+    }
+
+    public void setFinalAccountsAuditReportTimelyFlag(Integer finalAccountsAuditReportTimelyFlag) {
+        this.finalAccountsAuditReportTimelyFlag = finalAccountsAuditReportTimelyFlag;
+    }
+}

+ 291 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectDetailInfo.java

@@ -0,0 +1,291 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.entity;
+
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 项目明细表
+ * @author: 徐滕
+ * @create: 2021-09-14 16:05
+ **/
+public class ProjectDetailInfo {
+    private String companyCode;     //公司代码
+    private String profitCenter;    //利润中心
+    private String postingDate;     //过账日期
+    private String voucherNumber;   //凭证编码
+    private String filingDocumentsType; //归档凭证类型
+    private String filingDocumentsNumber; //归档凭证编码
+    private String voucherRise;     //凭证抬头文本
+    private String hookWBSNumber;   //挂接WBS编码
+    private String wbsNumber;       //wbs编码
+    private String wbsDescription;  //wbs描述
+    private String projectDefinitionNumber; //项目定义编码
+    private String projectDefinitionDescription;    //项目定义描述
+    private String courseCode;      //科目代码
+    private String courseName;      //科目名称
+    private String costBreakdown;   //费用明细
+    private String costBreakdownName;   //费用明细名称
+    private String receivablesAndPayables;      //往来款项性质
+    private String receivablesAndPayablesName;  //往来款项性质名称
+    private String borrowingTheDirection;   //借贷方向
+    private String rowProjectMoney;     //行项目金额
+    private String count;       //数量
+    private String batch;       //批次
+    private String materialCode;    //物料编码
+    private String materialDescription; //物料描述
+    private String unit;        //单位
+    private String vatPaid;     //进项税额
+    private String rollOutVATPaid;  //转出进项税额
+    private String rollOutEvidenceNo;   //转出凭证号码
+    private String rollOutEvidenceDate; //转出凭证过账日期
+    private String supplier;        //供应商
+    private String supplierName;    //供应商名称
+
+    @ExcelField(title="公司代码", align=2, sort=1)
+    public String getCompanyCode() {
+        return companyCode;
+    }
+    @ExcelField(title="利润中心", align=2, sort=2)
+    public String getProfitCenter() {
+        return profitCenter;
+    }
+    @ExcelField(title="过账日期", align=2, sort=3)
+    public String getPostingDate() {
+        return postingDate;
+    }
+    @ExcelField(title="凭证编码", align=2, sort=4)
+    public String getVoucherNumber() {
+        return voucherNumber;
+    }
+    @ExcelField(title="归档凭证类型", align=2, sort=5)
+    public String getFilingDocumentsType() {
+        return filingDocumentsType;
+    }
+    @ExcelField(title="归档凭证编码", align=2, sort=6)
+    public String getFilingDocumentsNumber() {
+        return filingDocumentsNumber;
+    }
+    @ExcelField(title="凭证抬头文本", align=2, sort=7)
+    public String getVoucherRise() {
+        return voucherRise;
+    }
+    @ExcelField(title="挂接WBS编码", align=2, sort=8)
+    public String getHookWBSNumber() {
+        return hookWBSNumber;
+    }
+    @ExcelField(title="wbs编码", align=2, sort=9)
+    public String getWbsNumber() {
+        return wbsNumber;
+    }
+    @ExcelField(title="wbs描述", align=2, sort=10)
+    public String getWbsDescription() {
+        return wbsDescription;
+    }
+    @ExcelField(title="项目定义编码", align=2, sort=11)
+    public String getProjectDefinitionNumber() {
+        return projectDefinitionNumber;
+    }
+    @ExcelField(title="项目定义描述", align=2, sort=12)
+    public String getProjectDefinitionDescription() {
+        return projectDefinitionDescription;
+    }
+    @ExcelField(title="科目代码", align=2, sort=13)
+    public String getCourseCode() {
+        return courseCode;
+    }
+    @ExcelField(title="科目名称", align=2, sort=14)
+    public String getCourseName() {
+        return courseName;
+    }
+    @ExcelField(title="费用明细", align=2, sort=15)
+    public String getCostBreakdown() {
+        return costBreakdown;
+    }
+    @ExcelField(title="费用明细名称", align=2, sort=16)
+    public String getCostBreakdownName() {
+        return costBreakdownName;
+    }
+    @ExcelField(title="往来款项性质", align=2, sort=17)
+    public String getReceivablesAndPayables() {
+        return receivablesAndPayables;
+    }
+    @ExcelField(title="往来款项性质名称", align=2, sort=18)
+    public String getReceivablesAndPayablesName() {
+        return receivablesAndPayablesName;
+    }
+    @ExcelField(title="借贷方向", align=2, sort=19)
+    public String getBorrowingTheDirection() {
+        return borrowingTheDirection;
+    }
+    @ExcelField(title="行项目金额", align=2, sort=20)
+    public String getRowProjectMoney() {
+        return rowProjectMoney;
+    }
+    @ExcelField(title="数量", align=2, sort=21)
+    public String getCount() {
+        return count;
+    }
+    @ExcelField(title="批次", align=2, sort=22)
+    public String getBatch() {
+        return batch;
+    }
+    @ExcelField(title="物料编码", align=2, sort=23)
+    public String getMaterialCode() {
+        return materialCode;
+    }
+    @ExcelField(title="物料描述", align=2, sort=24)
+    public String getMaterialDescription() {
+        return materialDescription;
+    }
+    @ExcelField(title="单位", align=2, sort=25)
+    public String getUnit() {
+        return unit;
+    }
+    @ExcelField(title="进项税额", align=2, sort=26)
+    public String getVatPaid() {
+        return vatPaid;
+    }
+    @ExcelField(title="转出进项税额", align=2, sort=27)
+    public String getRollOutVATPaid() {
+        return rollOutVATPaid;
+    }
+    @ExcelField(title="转出凭证号码", align=2, sort=28)
+    public String getRollOutEvidenceNo() {
+        return rollOutEvidenceNo;
+    }
+    @ExcelField(title="转出凭证过账日期", align=2, sort=29)
+    public String getRollOutEvidenceDate() {
+        return rollOutEvidenceDate;
+    }
+    @ExcelField(title="供应商", align=2, sort=30)
+    public String getSupplier() {
+        return supplier;
+    }
+    @ExcelField(title="供应商名称", align=2, sort=31)
+    public String getSupplierName() {
+        return supplierName;
+    }
+
+    public void setCompanyCode(String companyCode) {
+        this.companyCode = companyCode;
+    }
+
+    public void setProfitCenter(String profitCenter) {
+        this.profitCenter = profitCenter;
+    }
+
+    public void setPostingDate(String postingDate) {
+        this.postingDate = postingDate;
+    }
+
+    public void setVoucherNumber(String voucherNumber) {
+        this.voucherNumber = voucherNumber;
+    }
+
+    public void setFilingDocumentsType(String filingDocumentsType) {
+        this.filingDocumentsType = filingDocumentsType;
+    }
+
+    public void setFilingDocumentsNumber(String filingDocumentsNumber) {
+        this.filingDocumentsNumber = filingDocumentsNumber;
+    }
+
+    public void setVoucherRise(String voucherRise) {
+        this.voucherRise = voucherRise;
+    }
+
+    public void setHookWBSNumber(String hookWBSNumber) {
+        this.hookWBSNumber = hookWBSNumber;
+    }
+
+    public void setWbsNumber(String wbsNumber) {
+        this.wbsNumber = wbsNumber;
+    }
+
+    public void setWbsDescription(String wbsDescription) {
+        this.wbsDescription = wbsDescription;
+    }
+
+    public void setProjectDefinitionNumber(String projectDefinitionNumber) {
+        this.projectDefinitionNumber = projectDefinitionNumber;
+    }
+
+    public void setProjectDefinitionDescription(String projectDefinitionDescription) {
+        this.projectDefinitionDescription = projectDefinitionDescription;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public void setCostBreakdown(String costBreakdown) {
+        this.costBreakdown = costBreakdown;
+    }
+
+    public void setCostBreakdownName(String costBreakdownName) {
+        this.costBreakdownName = costBreakdownName;
+    }
+
+    public void setReceivablesAndPayables(String receivablesAndPayables) {
+        this.receivablesAndPayables = receivablesAndPayables;
+    }
+
+    public void setReceivablesAndPayablesName(String receivablesAndPayablesName) {
+        this.receivablesAndPayablesName = receivablesAndPayablesName;
+    }
+
+    public void setBorrowingTheDirection(String borrowingTheDirection) {
+        this.borrowingTheDirection = borrowingTheDirection;
+    }
+
+    public void setRowProjectMoney(String rowProjectMoney) {
+        this.rowProjectMoney = rowProjectMoney;
+    }
+
+    public void setCount(String count) {
+        this.count = count;
+    }
+
+    public void setBatch(String batch) {
+        this.batch = batch;
+    }
+
+    public void setMaterialCode(String materialCode) {
+        this.materialCode = materialCode;
+    }
+
+    public void setMaterialDescription(String materialDescription) {
+        this.materialDescription = materialDescription;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public void setVatPaid(String vatPaid) {
+        this.vatPaid = vatPaid;
+    }
+
+    public void setRollOutVATPaid(String rollOutVATPaid) {
+        this.rollOutVATPaid = rollOutVATPaid;
+    }
+
+    public void setRollOutEvidenceNo(String rollOutEvidenceNo) {
+        this.rollOutEvidenceNo = rollOutEvidenceNo;
+    }
+
+    public void setRollOutEvidenceDate(String rollOutEvidenceDate) {
+        this.rollOutEvidenceDate = rollOutEvidenceDate;
+    }
+
+    public void setSupplier(String supplier) {
+        this.supplier = supplier;
+    }
+
+    public void setSupplierName(String supplierName) {
+        this.supplierName = supplierName;
+    }
+}

+ 539 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/ProjectSettlementInfo.java

@@ -0,0 +1,539 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.entity;
+
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 工程结算信息表
+ * @author: 徐滕
+ * @create: 2021-09-14 16:06
+ **/
+public class ProjectSettlementInfo {
+    private String no;  //序号
+    private String projectDefinitionNo; //项目定义号
+    private String projectName; //项目名称
+    private String projectType; //项目类型
+    private String voltageClasses;  //电压等级
+    private String projectIssuedYear;   //项目下达年度
+    private String projectBudgetYear;   //项目预算年度
+    private String projectAllInvest;    //项目总投资
+    private String approvalDocumentNumber;  //可批复文号
+    private String monomerWbsNumber;    //单体工程WBS编号
+
+    private String engineeringtNumber;  //工程编号
+    private String engineeringName;     //工程名称
+    private String linkman; //联系人
+    private String linkPhone;   //联系电话
+    private String practicalStartUpDate;    //实际开工日期
+    private String practicalcompletionDate; //实际竣工日期
+    private String constructionUnit;    //施工单位
+    private String contractNumber;      //合同编号
+    private String contractMoney;       //合同金额(元)
+    private String settlementDiscountRate;  //结算折扣率
+
+    private String planStartUpDate;    //计划开工日期
+    private String plancompletionDate; //计划竣工日期
+    private String tjSubmittalsMoney;   //土建送审金额
+    private String azSubmittalsMoney;   //安装送审金额
+    private String submittalsConstructionMoney; //送审施工费小计(元)
+    private String whichMaterialSubmittalsMoney;    //甲供材送审金额
+    private String submittalsRemarks;   //送审备注
+    private String tjExamineAndApproveMoney;    //土建审定金额
+    private String azExamineAndApproveMoney;    //安装审定金额
+    private String examineAndApproveConstructionMoney;  //审定施工费小计(元)
+
+    private String whichMaterialExamineAndApproveMoney; //甲供材审定金额
+    private String constructionFeeDecreaseMoney;    //施工费核减金额
+    private String constructionFeeDecreaseRate;     //施工费核减率
+    private String constructionOrganizationCharge;  //施工单位诚信扣款
+    private String suggestSettlementMoney;  //建议结算款(元)
+    private String longitude;   //经度
+    private String latitude;    //纬度
+    private String auditFee;    //审计费
+    private String auditOpinionReferenceNumber; //审计意见文号
+    private String auditOpinionReportNumber;    //审计报告号
+
+    private String auditOpinionRemarks; //审计备注
+    private String businessPremisesName;    //事务所名称
+    private String businessPremisesAuditUser;   //事务所审计人员
+    private String submittedForReviewDate;  //提交送审日期
+    private String auditIssuedDate; //审计任务下达日期
+    private String auditShouldEndDate;  //审计应结束日期
+    private String uploadingResultDate; //上传结果日期
+    private String approvalDate;    //审定日期
+    private String ifTheTimeout;    //是否超时
+    private String auditManagementLevel;    //审计管理级别
+
+    private String auditMode;   //审计方式
+    private String auditFullTime;   //审计专职
+    private String reviewPeople;    //送审人
+    private String reviewDepartment;    //送审部门
+    private String secondLevelUnit; //二级单位
+    private String firstLevelUnit;  //一级单位
+    private String status;  //送审状态
+    private String singleConstructionId;    //送审单id
+
+    @ExcelField(title="序号", align=2, sort=1)
+    public String getNo() {
+        return no;
+    }
+    @ExcelField(title="项目定义号", align=2, sort=2)
+    public String getProjectDefinitionNo() {
+        return projectDefinitionNo;
+    }
+    @ExcelField(title="项目名称", align=2, sort=3)
+    public String getProjectName() {
+        return projectName;
+    }
+    @ExcelField(title="项目类型", align=2, sort=4)
+    public String getProjectType() {
+        return projectType;
+    }
+    @ExcelField(title="电压等级", align=2, sort=5)
+    public String getVoltageClasses() {
+        return voltageClasses;
+    }
+    @ExcelField(title="项目下达年度", align=2, sort=6)
+    public String getProjectIssuedYear() {
+        return projectIssuedYear;
+    }
+    @ExcelField(title="项目预算年度", align=2, sort=7)
+    public String getProjectBudgetYear() {
+        return projectBudgetYear;
+    }
+    @ExcelField(title="项目总投资", align=2, sort=8)
+    public String getProjectAllInvest() {
+        return projectAllInvest;
+    }
+    @ExcelField(title="可批复文号", align=2, sort=9)
+    public String getApprovalDocumentNumber() {
+        return approvalDocumentNumber;
+    }
+    @ExcelField(title="单体工程WBS编号", align=2, sort=10)
+    public String getMonomerWbsNumber() {
+        return monomerWbsNumber;
+    }
+    @ExcelField(title="工程编号", align=2, sort=11)
+    public String getEngineeringtNumber() {
+        return engineeringtNumber;
+    }
+    @ExcelField(title="工程名称", align=2, sort=12)
+    public String getEngineeringName() {
+        return engineeringName;
+    }
+    @ExcelField(title="联系人", align=2, sort=13)
+    public String getLinkman() {
+        return linkman;
+    }
+    @ExcelField(title="联系电话", align=2, sort=14)
+    public String getLinkPhone() {
+        return linkPhone;
+    }
+    @ExcelField(title="实际开工日期", align=2, sort=15)
+    public String getPracticalStartUpDate() {
+        return practicalStartUpDate;
+    }
+    @ExcelField(title="实际竣工日期", align=2, sort=16)
+    public String getPracticalcompletionDate() {
+        return practicalcompletionDate;
+    }
+    @ExcelField(title="施工单位", align=2, sort=17)
+    public String getConstructionUnit() {
+        return constructionUnit;
+    }
+    @ExcelField(title="合同编号", align=2, sort=18)
+    public String getContractNumber() {
+        return contractNumber;
+    }
+    @ExcelField(title="合同金额(元)", align=2, sort=19)
+    public String getContractMoney() {
+        return contractMoney;
+    }
+    @ExcelField(title="结算折扣率", align=2, sort=20)
+    public String getSettlementDiscountRate() {
+        return settlementDiscountRate;
+    }
+    @ExcelField(title="计划开工日期", align=2, sort=21)
+    public String getPlanStartUpDate() {
+        return planStartUpDate;
+    }
+    @ExcelField(title="计划竣工日期", align=2, sort=22)
+    public String getPlancompletionDate() {
+        return plancompletionDate;
+    }
+    @ExcelField(title="土建送审金额", align=2, sort=23)
+    public String getTjSubmittalsMoney() {
+        return tjSubmittalsMoney;
+    }
+    @ExcelField(title="安装送审金额", align=2, sort=24)
+    public String getAzSubmittalsMoney() {
+        return azSubmittalsMoney;
+    }
+    @ExcelField(title="送审施工费小计(元)", align=2, sort=25)
+    public String getSubmittalsConstructionMoney() {
+        return submittalsConstructionMoney;
+    }
+    @ExcelField(title="甲供材送审金额", align=2, sort=26)
+    public String getWhichMaterialSubmittalsMoney() {
+        return whichMaterialSubmittalsMoney;
+    }
+    @ExcelField(title="送审备注", align=2, sort=27)
+    public String getSubmittalsRemarks() {
+        return submittalsRemarks;
+    }
+    @ExcelField(title="土建审定金额", align=2, sort=28)
+    public String getTjExamineAndApproveMoney() {
+        return tjExamineAndApproveMoney;
+    }
+    @ExcelField(title="安装审定金额", align=2, sort=29)
+    public String getAzExamineAndApproveMoney() {
+        return azExamineAndApproveMoney;
+    }
+    @ExcelField(title="审定施工费小计(元)", align=2, sort=30)
+    public String getExamineAndApproveConstructionMoney() {
+        return examineAndApproveConstructionMoney;
+    }
+    @ExcelField(title="甲供材审定金额", align=2, sort=31)
+    public String getWhichMaterialExamineAndApproveMoney() {
+        return whichMaterialExamineAndApproveMoney;
+    }
+    @ExcelField(title="施工费核减金额", align=2, sort=32)
+    public String getConstructionFeeDecreaseMoney() {
+        return constructionFeeDecreaseMoney;
+    }
+    @ExcelField(title="施工费核减率", align=2, sort=33)
+    public String getConstructionFeeDecreaseRate() {
+        return constructionFeeDecreaseRate;
+    }
+    @ExcelField(title="施工单位诚信扣款", align=2, sort=34)
+    public String getConstructionOrganizationCharge() {
+        return constructionOrganizationCharge;
+    }
+    @ExcelField(title="建议结算款(元)", align=2, sort=35)
+    public String getSuggestSettlementMoney() {
+        return suggestSettlementMoney;
+    }
+    @ExcelField(title="经度", align=2, sort=36)
+    public String getLongitude() {
+        return longitude;
+    }
+    @ExcelField(title="纬度", align=2, sort=37)
+    public String getLatitude() {
+        return latitude;
+    }
+    @ExcelField(title="审计费", align=2, sort=38)
+    public String getAuditFee() {
+        return auditFee;
+    }
+    @ExcelField(title="审计意见文号", align=2, sort=39)
+    public String getAuditOpinionReferenceNumber() {
+        return auditOpinionReferenceNumber;
+    }
+    @ExcelField(title="审计报告号", align=2, sort=40)
+    public String getAuditOpinionReportNumber() {
+        return auditOpinionReportNumber;
+    }
+    @ExcelField(title="审计备注", align=2, sort=41)
+    public String getAuditOpinionRemarks() {
+        return auditOpinionRemarks;
+    }
+    @ExcelField(title="事务所名称", align=2, sort=42)
+    public String getBusinessPremisesName() {
+        return businessPremisesName;
+    }
+    @ExcelField(title="事务所审计人员", align=2, sort=43)
+    public String getBusinessPremisesAuditUser() {
+        return businessPremisesAuditUser;
+    }
+    @ExcelField(title="提交送审日期", align=2, sort=44)
+    public String getSubmittedForReviewDate() {
+        return submittedForReviewDate;
+    }
+    @ExcelField(title="审计任务下达日期", align=2, sort=45)
+    public String getAuditIssuedDate() {
+        return auditIssuedDate;
+    }
+    @ExcelField(title="审计应结束日期", align=2, sort=46)
+    public String getAuditShouldEndDate() {
+        return auditShouldEndDate;
+    }
+    @ExcelField(title="上传结果日期", align=2, sort=47)
+    public String getUploadingResultDate() {
+        return uploadingResultDate;
+    }
+    @ExcelField(title="审定日期", align=2, sort=48)
+    public String getApprovalDate() {
+        return approvalDate;
+    }
+    @ExcelField(title="是否超时", align=2, sort=49)
+    public String getIfTheTimeout() {
+        return ifTheTimeout;
+    }
+    @ExcelField(title="审计管理级别", align=2, sort=50)
+    public String getAuditManagementLevel() {
+        return auditManagementLevel;
+    }
+    @ExcelField(title="审计方式", align=2, sort=51)
+    public String getAuditMode() {
+        return auditMode;
+    }
+    @ExcelField(title="审计专职", align=2, sort=52)
+    public String getAuditFullTime() {
+        return auditFullTime;
+    }
+    @ExcelField(title="送审人", align=2, sort=53)
+    public String getReviewPeople() {
+        return reviewPeople;
+    }
+    @ExcelField(title="送审部门", align=2, sort=54)
+    public String getReviewDepartment() {
+        return reviewDepartment;
+    }
+    @ExcelField(title="二级单位", align=2, sort=55)
+    public String getSecondLevelUnit() {
+        return secondLevelUnit;
+    }
+    @ExcelField(title="一级单位", align=2, sort=56)
+    public String getFirstLevelUnit() {
+        return firstLevelUnit;
+    }
+    @ExcelField(title="送审状态", align=2, sort=57)
+    public String getStatus() {
+        return status;
+    }
+    @ExcelField(title="送审单id", align=2, sort=58)
+    public String getSingleConstructionId() {
+        return singleConstructionId;
+    }
+
+    public void setNo(String no) {
+        this.no = no;
+    }
+
+    public void setProjectDefinitionNo(String projectDefinitionNo) {
+        this.projectDefinitionNo = projectDefinitionNo;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public void setProjectType(String projectType) {
+        this.projectType = projectType;
+    }
+
+    public void setVoltageClasses(String voltageClasses) {
+        this.voltageClasses = voltageClasses;
+    }
+
+    public void setProjectIssuedYear(String projectIssuedYear) {
+        this.projectIssuedYear = projectIssuedYear;
+    }
+
+    public void setProjectBudgetYear(String projectBudgetYear) {
+        this.projectBudgetYear = projectBudgetYear;
+    }
+
+    public void setProjectAllInvest(String projectAllInvest) {
+        this.projectAllInvest = projectAllInvest;
+    }
+
+    public void setApprovalDocumentNumber(String approvalDocumentNumber) {
+        this.approvalDocumentNumber = approvalDocumentNumber;
+    }
+
+    public void setMonomerWbsNumber(String monomerWbsNumber) {
+        this.monomerWbsNumber = monomerWbsNumber;
+    }
+
+    public void setEngineeringtNumber(String engineeringtNumber) {
+        this.engineeringtNumber = engineeringtNumber;
+    }
+
+    public void setEngineeringName(String engineeringName) {
+        this.engineeringName = engineeringName;
+    }
+
+    public void setLinkman(String linkman) {
+        this.linkman = linkman;
+    }
+
+    public void setLinkPhone(String linkPhone) {
+        this.linkPhone = linkPhone;
+    }
+
+    public void setPracticalStartUpDate(String practicalStartUpDate) {
+        this.practicalStartUpDate = practicalStartUpDate;
+    }
+
+    public void setPracticalcompletionDate(String practicalcompletionDate) {
+        this.practicalcompletionDate = practicalcompletionDate;
+    }
+
+    public void setConstructionUnit(String constructionUnit) {
+        this.constructionUnit = constructionUnit;
+    }
+
+    public void setContractNumber(String contractNumber) {
+        this.contractNumber = contractNumber;
+    }
+
+    public void setContractMoney(String contractMoney) {
+        this.contractMoney = contractMoney;
+    }
+
+    public void setSettlementDiscountRate(String settlementDiscountRate) {
+        this.settlementDiscountRate = settlementDiscountRate;
+    }
+
+    public void setPlanStartUpDate(String planStartUpDate) {
+        this.planStartUpDate = planStartUpDate;
+    }
+
+    public void setPlancompletionDate(String plancompletionDate) {
+        this.plancompletionDate = plancompletionDate;
+    }
+
+    public void setTjSubmittalsMoney(String tjSubmittalsMoney) {
+        this.tjSubmittalsMoney = tjSubmittalsMoney;
+    }
+
+    public void setAzSubmittalsMoney(String azSubmittalsMoney) {
+        this.azSubmittalsMoney = azSubmittalsMoney;
+    }
+
+    public void setSubmittalsConstructionMoney(String submittalsConstructionMoney) {
+        this.submittalsConstructionMoney = submittalsConstructionMoney;
+    }
+
+    public void setWhichMaterialSubmittalsMoney(String whichMaterialSubmittalsMoney) {
+        this.whichMaterialSubmittalsMoney = whichMaterialSubmittalsMoney;
+    }
+
+    public void setSubmittalsRemarks(String submittalsRemarks) {
+        this.submittalsRemarks = submittalsRemarks;
+    }
+
+    public void setTjExamineAndApproveMoney(String tjExamineAndApproveMoney) {
+        this.tjExamineAndApproveMoney = tjExamineAndApproveMoney;
+    }
+
+    public void setAzExamineAndApproveMoney(String azExamineAndApproveMoney) {
+        this.azExamineAndApproveMoney = azExamineAndApproveMoney;
+    }
+
+    public void setExamineAndApproveConstructionMoney(String examineAndApproveConstructionMoney) {
+        this.examineAndApproveConstructionMoney = examineAndApproveConstructionMoney;
+    }
+
+    public void setWhichMaterialExamineAndApproveMoney(String whichMaterialExamineAndApproveMoney) {
+        this.whichMaterialExamineAndApproveMoney = whichMaterialExamineAndApproveMoney;
+    }
+
+    public void setConstructionFeeDecreaseMoney(String constructionFeeDecreaseMoney) {
+        this.constructionFeeDecreaseMoney = constructionFeeDecreaseMoney;
+    }
+
+    public void setConstructionFeeDecreaseRate(String constructionFeeDecreaseRate) {
+        this.constructionFeeDecreaseRate = constructionFeeDecreaseRate;
+    }
+
+    public void setConstructionOrganizationCharge(String constructionOrganizationCharge) {
+        this.constructionOrganizationCharge = constructionOrganizationCharge;
+    }
+
+    public void setSuggestSettlementMoney(String suggestSettlementMoney) {
+        this.suggestSettlementMoney = suggestSettlementMoney;
+    }
+
+    public void setLongitude(String longitude) {
+        this.longitude = longitude;
+    }
+
+    public void setLatitude(String latitude) {
+        this.latitude = latitude;
+    }
+
+    public void setAuditFee(String auditFee) {
+        this.auditFee = auditFee;
+    }
+
+    public void setAuditOpinionReferenceNumber(String auditOpinionReferenceNumber) {
+        this.auditOpinionReferenceNumber = auditOpinionReferenceNumber;
+    }
+
+    public void setAuditOpinionReportNumber(String auditOpinionReportNumber) {
+        this.auditOpinionReportNumber = auditOpinionReportNumber;
+    }
+
+    public void setAuditOpinionRemarks(String auditOpinionRemarks) {
+        this.auditOpinionRemarks = auditOpinionRemarks;
+    }
+
+    public void setBusinessPremisesName(String businessPremisesName) {
+        this.businessPremisesName = businessPremisesName;
+    }
+
+    public void setBusinessPremisesAuditUser(String businessPremisesAuditUser) {
+        this.businessPremisesAuditUser = businessPremisesAuditUser;
+    }
+
+    public void setSubmittedForReviewDate(String submittedForReviewDate) {
+        this.submittedForReviewDate = submittedForReviewDate;
+    }
+
+    public void setAuditIssuedDate(String auditIssuedDate) {
+        this.auditIssuedDate = auditIssuedDate;
+    }
+
+    public void setAuditShouldEndDate(String auditShouldEndDate) {
+        this.auditShouldEndDate = auditShouldEndDate;
+    }
+
+    public void setUploadingResultDate(String uploadingResultDate) {
+        this.uploadingResultDate = uploadingResultDate;
+    }
+
+    public void setApprovalDate(String approvalDate) {
+        this.approvalDate = approvalDate;
+    }
+
+    public void setIfTheTimeout(String ifTheTimeout) {
+        this.ifTheTimeout = ifTheTimeout;
+    }
+
+    public void setAuditManagementLevel(String auditManagementLevel) {
+        this.auditManagementLevel = auditManagementLevel;
+    }
+
+    public void setAuditMode(String auditMode) {
+        this.auditMode = auditMode;
+    }
+
+    public void setAuditFullTime(String auditFullTime) {
+        this.auditFullTime = auditFullTime;
+    }
+
+    public void setReviewPeople(String reviewPeople) {
+        this.reviewPeople = reviewPeople;
+    }
+
+    public void setReviewDepartment(String reviewDepartment) {
+        this.reviewDepartment = reviewDepartment;
+    }
+
+    public void setSecondLevelUnit(String secondLevelUnit) {
+        this.secondLevelUnit = secondLevelUnit;
+    }
+
+    public void setFirstLevelUnit(String firstLevelUnit) {
+        this.firstLevelUnit = firstLevelUnit;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public void setSingleConstructionId(String singleConstructionId) {
+        this.singleConstructionId = singleConstructionId;
+    }
+}

+ 183 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/entity/WhichMaterialInfo.java

@@ -0,0 +1,183 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.entity;
+
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 甲供材信息表
+ * @author: 徐滕
+ * @create: 2021-09-15 14:07
+ **/
+public class WhichMaterialInfo {
+    private String no;    //序号
+    private String projectDefinition;    //项目定义号
+    private String projectName;    //项目名称
+    private String materialNumber;    //物料编码
+    private String materialDescribe;    //物料描述
+    private String outboundAmount;    //出库金额(元)
+    private String authorizedAmount;    //审定金额(元)
+    private String differenceFeeH;    //差额(元)(H)
+    private String outboundCount;    //出库数量
+    private String authorizedCount;    //审定数量
+
+    private String differenceFeeK;    //差额(K)
+    private String weightingAverageUnitPrice;    //加权平均单价(元)
+    private String unit;    //单位
+    private String materialSmallType;    //物料小类
+    private String materialMediumType;    //物料中类
+    private String materialBigType;    //物料大类
+    private String constructionDepartment;    //送审部门
+    private String secondLevelUnit;    //二级单位
+    private String firstLevelUnit;    //一级单位
+    @ExcelField(title="序号", align=2, sort=1)
+    public String getNo() {
+        return no;
+    }
+    @ExcelField(title="项目定义号", align=2, sort=2)
+    public String getProjectDefinition() {
+        return projectDefinition;
+    }
+    @ExcelField(title="项目名称", align=2, sort=3)
+    public String getProjectName() {
+        return projectName;
+    }
+    @ExcelField(title="物料编码", align=2, sort=4)
+    public String getMaterialNumber() {
+        return materialNumber;
+    }
+    @ExcelField(title="物料描述", align=2, sort=5)
+    public String getMaterialDescribe() {
+        return materialDescribe;
+    }
+    @ExcelField(title="出库金额(元)", align=2, sort=6)
+    public String getOutboundAmount() {
+        return outboundAmount;
+    }
+    @ExcelField(title="审定金额(元)", align=2, sort=7)
+    public String getAuthorizedAmount() {
+        return authorizedAmount;
+    }
+    @ExcelField(title="差额(元)", align=2, sort=8)
+    public String getDifferenceFeeH() {
+        return differenceFeeH;
+    }
+    @ExcelField(title="出库数量", align=2, sort=9)
+    public String getOutboundCount() {
+        return outboundCount;
+    }
+    @ExcelField(title="审定数量", align=2, sort=10)
+    public String getAuthorizedCount() {
+        return authorizedCount;
+    }
+    @ExcelField(title="差额", align=2, sort=11)
+    public String getDifferenceFeeK() {
+        return differenceFeeK;
+    }
+    @ExcelField(title="加权平均单价(元)", align=2, sort=12)
+    public String getWeightingAverageUnitPrice() {
+        return weightingAverageUnitPrice;
+    }
+    @ExcelField(title="单位", align=2, sort=13)
+    public String getUnit() {
+        return unit;
+    }
+    @ExcelField(title="物料小类", align=2, sort=14)
+    public String getMaterialSmallType() {
+        return materialSmallType;
+    }
+    @ExcelField(title="物料中类", align=2, sort=15)
+    public String getMaterialMediumType() {
+        return materialMediumType;
+    }
+    @ExcelField(title="物料大类", align=2, sort=16)
+    public String getMaterialBigType() {
+        return materialBigType;
+    }
+    @ExcelField(title="送审部门", align=2, sort=17)
+    public String getConstructionDepartment() {
+        return constructionDepartment;
+    }
+    @ExcelField(title="二级单位", align=2, sort=18)
+    public String getSecondLevelUnit() {
+        return secondLevelUnit;
+    }
+    @ExcelField(title="一级单位", align=2, sort=19)
+    public String getFirstLevelUnit() {
+        return firstLevelUnit;
+    }
+
+    public void setNo(String no) {
+        this.no = no;
+    }
+
+    public void setProjectDefinition(String projectDefinition) {
+        this.projectDefinition = projectDefinition;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public void setMaterialNumber(String materialNumber) {
+        this.materialNumber = materialNumber;
+    }
+
+    public void setMaterialDescribe(String materialDescribe) {
+        this.materialDescribe = materialDescribe;
+    }
+
+    public void setOutboundAmount(String outboundAmount) {
+        this.outboundAmount = outboundAmount;
+    }
+
+    public void setAuthorizedAmount(String authorizedAmount) {
+        this.authorizedAmount = authorizedAmount;
+    }
+
+    public void setDifferenceFeeH(String differenceFeeH) {
+        this.differenceFeeH = differenceFeeH;
+    }
+
+    public void setOutboundCount(String outboundCount) {
+        this.outboundCount = outboundCount;
+    }
+
+    public void setAuthorizedCount(String authorizedCount) {
+        this.authorizedCount = authorizedCount;
+    }
+
+    public void setDifferenceFeeK(String differenceFeeK) {
+        this.differenceFeeK = differenceFeeK;
+    }
+
+    public void setWeightingAverageUnitPrice(String weightingAverageUnitPrice) {
+        this.weightingAverageUnitPrice = weightingAverageUnitPrice;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public void setMaterialSmallType(String materialSmallType) {
+        this.materialSmallType = materialSmallType;
+    }
+
+    public void setMaterialMediumType(String materialMediumType) {
+        this.materialMediumType = materialMediumType;
+    }
+
+    public void setMaterialBigType(String materialBigType) {
+        this.materialBigType = materialBigType;
+    }
+
+    public void setConstructionDepartment(String constructionDepartment) {
+        this.constructionDepartment = constructionDepartment;
+    }
+
+    public void setSecondLevelUnit(String secondLevelUnit) {
+        this.secondLevelUnit = secondLevelUnit;
+    }
+
+    public void setFirstLevelUnit(String firstLevelUnit) {
+        this.firstLevelUnit = firstLevelUnit;
+    }
+}

+ 52 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/ProjectBasicsMapper.java

@@ -0,0 +1,52 @@
+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.HandmadeVindicateInfo;
+import com.jeeplus.modules.sg.budgetSpectaculars.entity.ProjectBasicsInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author: 徐滕
+ * @create: 2021-09-15 16:54
+ **/
+@MyBatisMapper
+public interface ProjectBasicsMapper extends BaseMapper<ProjectBasicsInfo> {
+
+    /**
+     * 批量插入
+     * @param projectBasicsInfo
+     * @return
+     */
+    Integer insertList(@Param("projectBasicsInfo")List<ProjectBasicsInfo> projectBasicsInfo);
+
+    /**
+     * 批量修改
+     * @param projectBasicsInfo
+     * @return
+     */
+    Integer modifyList(@Param("projectBasicsInfo")List<ProjectBasicsInfo> projectBasicsInfo);
+
+    /**
+     * 批量修改(甲供材)
+     * @param projectBasicsInfo
+     * @return
+     */
+    Integer modifyWhichMaterialList(@Param("projectBasicsInfo")List<ProjectBasicsInfo> projectBasicsInfo);
+
+    /**
+     * 批量修改(工程结算信息用)
+     * @param projectBasicsInfo
+     * @return
+     */
+    Integer modifyProjectSettlementList(@Param("projectBasicsInfo")List<ProjectBasicsInfo> projectBasicsInfo);
+
+    /**
+     * 批量修改(手工录入信息修改)
+     * @param handmadeVindicateInfo
+     * @return
+     */
+    Integer modifyHandmadeVindicateList(@Param("handmadeVindicateInfo")List<HandmadeVindicateInfo> handmadeVindicateInfo);
+}

+ 14 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/ProjectCourseMapper.java

@@ -0,0 +1,14 @@
+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.ProjectCourseControlInfo;
+
+/**
+ * @author: 徐滕
+ * @create: 2021-09-22 17:29
+ **/
+@MyBatisMapper
+public interface ProjectCourseMapper extends BaseMapper<ProjectCourseControlInfo> {
+
+}

+ 14 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/ProjectPostEvaluationMapper.java

@@ -0,0 +1,14 @@
+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.PostEvaluationInfo;
+
+/**
+ * @author: 徐滕
+ * @create: 2021-09-22 17:29
+ **/
+@MyBatisMapper
+public interface ProjectPostEvaluationMapper extends BaseMapper<PostEvaluationInfo> {
+
+}

+ 282 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/xml/ProjectBasicsMapper.xml

@@ -0,0 +1,282 @@
+<?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.ProjectBasicsMapper">
+	<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="ProjectBasicsInfo" >
+		SELECT
+			<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="findList" resultType="ProjectBasicsInfo" >
+		SELECT
+			<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="projectName != null and projectName != ''">
+				AND a.project_name LIKE
+				<if test="dbName == 'oracle'">'%'||#{projectName}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{projectName}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{projectName},'%')</if>
+			</if>
+			<if test="projectNumber != null and projectNumber != ''">
+				AND a.project_number LIKE
+				<if test="dbName == 'oracle'">'%'||#{projectNumber}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{projectNumber}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{projectNumber},'%')</if>
+			</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>
+
+	<insert id="insert">
+		INSERT INTO project_basics_info(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag}
+		)
+	</insert>
+
+	<insert id="insertList">
+		insert into project_basics_info(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			del_flag,
+			remarks,
+			project_name,
+			project_number,
+			first_level_unit,
+			second_level_unit,
+			relevant_department,
+			project_type,
+			project_property,
+			plan_start_upDate,
+			plancompletion_date,
+			practical_start_upDate,
+			practicalcompletion_date,
+			first_acquisition_time,
+			first_construction_fee_recorded_time,
+			calculation_for_review_time,
+			calculation_examine_time,
+			which_material_stores_returned_time,
+			if_get_rejected_material_finish,
+			completed_actual_budget_time,
+			actual_budget_submittals_time,
+			actual_budgetaudit_report_time,
+			first_working_capital_time,
+			if_project_close,
+			year
+		)VALUES
+		<foreach collection="projectBasicsInfo" item="item" index="index" separator=",">
+			(
+			#{item.id},
+			#{item.createBy.id},
+			#{item.createDate},
+			#{item.updateBy.id},
+			#{item.updateDate},
+			#{item.delFlag},
+			#{item.remarks},
+
+			#{item.projectName},
+			#{item.projectNumber},
+			#{item.firstLevelUnit},
+			#{item.secondLevelUnit},
+			#{item.relevantDepartment},
+			#{item.projectType},
+			#{item.projectProperty},
+			#{item.planStartUpDate},
+			#{item.plancompletionDate},
+			#{item.practicalStartUpDate},
+			#{item.practicalcompletionDate},
+			#{item.firstAcquisitionTime},
+			#{item.firstConstructionFeeRecordedTime},
+			#{item.calculationForReviewTime},
+			#{item.calculationExamineTime},
+			#{item.whichMaterialStoresReturnedTime},
+			#{item.ifGetRejectedMaterialFinish},
+			#{item.completedActualBudgetTime},
+			#{item.actualBudgetSubmittalsTime},
+			#{item.actualBudgetauditReportTime},
+			#{item.firstWorkingCapitalTime},
+			#{item.ifProjectClose},
+			#{item.year}
+			)
+		</foreach>
+	</insert>
+
+
+	<update id="update">
+		UPDATE project_basics_info SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks}
+		WHERE id = #{id}
+	</update>
+
+
+	<!--物理删除-->
+	<update id="delete">
+		DELETE FROM project_basics_info
+		WHERE id = #{id}
+	</update>
+
+	<!--逻辑删除-->
+	<update id="deleteByLogic">
+		UPDATE project_basics_info SET
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE id = #{id}
+	</update>
+
+	<update id="modifyList">
+		<foreach collection="projectBasicsInfo" item="item" index="index"  separator=";">
+			update project_basics_info set
+			<choose>
+				<when test="item.firstAcquisitionTime !=null and item.firstAcquisitionTime != ''">
+					first_acquisition_time = #{item.firstAcquisitionTime},
+					practical_start_upDate = #{item.practicalStartUpDate},
+				</when>
+				<otherwise>
+					first_acquisition_time = null,
+					practical_start_upDate = null,
+				</otherwise>
+			</choose>
+			<choose>
+				<when test="item.firstConstructionFeeRecordedTime !=null and item.firstConstructionFeeRecordedTime != ''">
+					first_construction_fee_recorded_time = #{item.firstConstructionFeeRecordedTime}
+				</when>
+				<otherwise>
+					first_construction_fee_recorded_time = null
+				</otherwise>
+			</choose>
+			where project_number = #{item.projectNumber}
+		</foreach>
+	</update>
+
+	<update id="modifyWhichMaterialList">
+		<foreach collection="projectBasicsInfo" item="item" index="index"  separator=";">
+			update project_basics_info set
+			<if test="null !=item.ifGetRejectedMaterialFinish and '' != item.ifGetRejectedMaterialFinish">
+				if_get_rejected_material_finish = #{item.ifGetRejectedMaterialFinish}
+			</if>
+			where project_number = #{item.projectNumber}
+		</foreach>
+	</update>
+
+	<update id="modifyProjectSettlementList">
+		<foreach collection="projectBasicsInfo" item="item" index="index"  separator=";">
+			update project_basics_info set
+			<choose>
+				<when test="item.calculationForReviewTime !=null and item.calculationForReviewTime != ''">
+					calculation_for_review_time = #{item.calculationForReviewTime},
+				</when>
+				<otherwise>
+					calculation_for_review_time = null,
+				</otherwise>
+			</choose>
+			<choose>
+				<when test="item.calculationExamineTime !=null and item.calculationExamineTime != ''">
+					calculation_examine_time = #{item.calculationExamineTime}
+				</when>
+				<otherwise>
+					calculation_examine_time = null
+				</otherwise>
+			</choose>
+			where project_number = #{item.projectNumber}
+		</foreach>
+	</update>
+
+	<update id="modifyHandmadeVindicateList">
+		<foreach collection="handmadeVindicateInfo" item="item" index="index"  separator=";">
+			update project_basics_info set
+			update_by = #{item.updateBy.id}
+			,update_date = #{item.updateDate}
+			<if test="null != item.projectName and '' != item.projectName">
+				,project_name = #{item.projectName}
+			</if>
+			<if test="null != item.planStartUpDate and '' != item.planStartUpDate">
+				,plan_start_upDate = #{item.planStartUpDate}
+			</if>
+			<if test="null != item.plancompletionDate and '' != item.plancompletionDate">
+				,plancompletion_date = #{item.plancompletionDate}
+			</if>
+			<if test="null != item.practicalcompletionDate and '' != item.practicalcompletionDate">
+				,practicalcompletion_date = #{item.practicalcompletionDate}
+			</if>
+			<if test="null != item.whichMaterialStoresReturnedTime and '' != item.whichMaterialStoresReturnedTime">
+				,which_material_stores_returned_time = #{item.whichMaterialStoresReturnedTime}
+			</if>
+			<if test="null != item.completedActualBudgetTime and '' != item.completedActualBudgetTime">
+				,completed_actual_budget_time = #{item.completedActualBudgetTime}
+			</if>
+			<if test="null != item.actualBudgetSubmittalsTime and '' != item.actualBudgetSubmittalsTime">
+				,actual_budget_submittals_time = #{item.actualBudgetSubmittalsTime}
+			</if>
+			<if test="null != item.actualBudgetauditReportTime and '' != item.actualBudgetauditReportTime">
+				,actual_budgetaudit_report_time = #{item.actualBudgetauditReportTime}
+			</if>
+			where project_number = #{item.projectNumber}
+		</foreach>
+	</update>
+
+
+</mapper>

+ 78 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/xml/ProjectCourseMapper.xml

@@ -0,0 +1,78 @@
+<?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.ProjectCourseMapper">
+	<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="ProjectCourseControlInfo" >
+		SELECT
+			<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="findList" resultType="ProjectCourseControlInfo" >
+		SELECT
+			<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="projectName != null and projectName != ''">
+				AND a.project_name LIKE
+				<if test="dbName == 'oracle'">'%'||#{projectName}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{projectName}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{projectName},'%')</if>
+			</if>
+			<if test="projectNumber != null and projectNumber != ''">
+				AND a.project_number LIKE
+				<if test="dbName == 'oracle'">'%'||#{projectNumber}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{projectNumber}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{projectNumber},'%')</if>
+			</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>

+ 78 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/xml/ProjectPostEvaluationMapper.xml

@@ -0,0 +1,78 @@
+<?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.ProjectPostEvaluationMapper">
+	<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="PostEvaluationInfo" >
+		SELECT
+			<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="findList" resultType="PostEvaluationInfo" >
+		SELECT
+			<include refid="resourceColumns"/>
+		FROM project_basics_info a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="projectName != null and projectName != ''">
+				AND a.project_name LIKE
+				<if test="dbName == 'oracle'">'%'||#{projectName}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{projectName}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{projectName},'%')</if>
+			</if>
+			<if test="projectNumber != null and projectNumber != ''">
+				AND a.project_number LIKE
+				<if test="dbName == 'oracle'">'%'||#{projectNumber}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{projectNumber}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{projectNumber},'%')</if>
+			</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>

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

@@ -0,0 +1,558 @@
+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.*;
+import com.jeeplus.modules.sg.budgetSpectaculars.mapper.ProjectBasicsMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.Collator;
+import java.util.*;
+
+/**
+ * 基础底表展示处理
+ * 预算执行管理-综合查询表导入数据处理service
+ * @author: 徐滕
+ * @create: 2021-09-15 16:52
+ **/
+@Service
+@Transactional(readOnly = true)
+public class ProjectBasicsService extends CrudService<ProjectBasicsMapper, ProjectBasicsInfo> {
+
+    @Autowired
+    private ProjectBasicsMapper mapper;
+
+    public Page<ProjectBasicsInfo> findPage(Page<ProjectBasicsInfo> page, ProjectBasicsInfo entity) {
+        Page<ProjectBasicsInfo> page1 = super.findPage(page, entity);
+        return page1;
+    }
+
+    /**
+     * 综合查询表数据处理
+     * @param budgetExecuteList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String disposeBudgetExecuteInfo(List<BudgetExecuteInfo> budgetExecuteList,String year){
+        List<ProjectBasicsInfo> projectBasicsList = Lists.newArrayList();
+        //遍历综合查询表数据信息
+        for (BudgetExecuteInfo budgetExecuteInfo: budgetExecuteList) {
+            //如果国网项目编码为空则不进行记录
+            if(StringUtils.isBlank(budgetExecuteInfo.getProjectNumber())){
+                continue;
+            }
+            //将综合查询中的部分数据添加到项目底表list中
+            ProjectBasicsInfo projectBasicsInfo = new ProjectBasicsInfo();
+            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectType()) && StringUtils.isNotBlank(budgetExecuteInfo.getThirdlySlassify())){
+                if("配网建设改造项目".equals(budgetExecuteInfo.getProjectType()) && "10KV(20KV)中低压配电建设与改造工程项目".equals(budgetExecuteInfo.getThirdlySlassify())){
+                    projectBasicsInfo.setProjectType("配网资本项目");
+                }else if("配网建设改造项目".equals(budgetExecuteInfo.getProjectType()) && "业扩配套工程".equals(budgetExecuteInfo.getThirdlySlassify())){
+                    projectBasicsInfo.setProjectType("业扩资本项目");
+                }else if("配网建设改造项目".equals(budgetExecuteInfo.getProjectType()) && "变电站出线配套10KV(20KV)工程项目".equals(budgetExecuteInfo.getThirdlySlassify())){
+                    projectBasicsInfo.setProjectType("出线配套项目");
+                }else if("配网专项成本".equals(budgetExecuteInfo.getProjectType()) && "Z701配网专项成本".equals(budgetExecuteInfo.getThirdlySlassify())){
+                    projectBasicsInfo.setProjectType("配网成本项目");
+                }else if("配网专项成本".equals(budgetExecuteInfo.getProjectType()) && "Z703业扩专项成本".equals(budgetExecuteInfo.getThirdlySlassify())){
+                    projectBasicsInfo.setProjectType("业扩成本项目");
+                }else if("配网专项成本".equals(budgetExecuteInfo.getProjectType()) && "Z702农网专项成本(主业)".equals(budgetExecuteInfo.getThirdlySlassify())){
+                    projectBasicsInfo.setProjectType("农网项目");
+                }else{
+                    projectBasicsInfo.setProjectType("");
+                }
+            }else{
+                projectBasicsInfo.setProjectType("");
+            }
+            //添加项目名称
+            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectName())){
+                projectBasicsInfo.setProjectName(budgetExecuteInfo.getProjectName());
+            }
+            //添加国网项目编码
+            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectNumber())){
+                projectBasicsInfo.setProjectNumber(budgetExecuteInfo.getProjectNumber());
+            }
+            //添加一级单位
+            if(StringUtils.isNotBlank(budgetExecuteInfo.getFirstLevelUnit())){
+                projectBasicsInfo.setFirstLevelUnit(budgetExecuteInfo.getFirstLevelUnit());
+            }
+            //添加二级单位
+            if(StringUtils.isNotBlank(budgetExecuteInfo.getSecondLevelUnit())){
+                projectBasicsInfo.setSecondLevelUnit(budgetExecuteInfo.getSecondLevelUnit());
+            }
+            //添加归口部门
+            if(StringUtils.isNotBlank(budgetExecuteInfo.getRelevantDepartment())){
+                projectBasicsInfo.setRelevantDepartment(budgetExecuteInfo.getRelevantDepartment());
+            }
+            //添加项目性质
+            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectProperty())){
+                projectBasicsInfo.setProjectProperty(budgetExecuteInfo.getProjectProperty());
+            }
+            //添加结算送审日期
+            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectProperty())){
+                projectBasicsInfo.setProjectProperty(budgetExecuteInfo.getProjectProperty());
+            }
+            //添加结算审定日期
+            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectProperty())){
+                projectBasicsInfo.setProjectProperty(budgetExecuteInfo.getProjectProperty());
+            }
+            //添加项目是否关闭
+            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectCloseTime())){
+                projectBasicsInfo.setIfProjectClose("是");
+            }else{
+                projectBasicsInfo.setIfProjectClose("否");
+            }
+            //将数据添加到list中
+            projectBasicsList.add(projectBasicsInfo);
+
+        }
+        for (ProjectBasicsInfo info: projectBasicsList) {
+            info.preInsert();
+            info.setYear(year);
+        }
+        insertAllProjectBasicsInfo(projectBasicsList);
+        return "";
+    }
+
+    /**
+     * 批量插入数据信息
+     * @param projectBasicsList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String insertAllProjectBasicsInfo(List<ProjectBasicsInfo> projectBasicsList){
+        //分批处理
+        if(null!=projectBasicsList && projectBasicsList.size()>0){
+            int pointsDataLimit = 100;//限制条数
+            Integer size = projectBasicsList.size();
+            //判断是否有必要分批
+            if(pointsDataLimit<size){
+                int part = size/pointsDataLimit;//分批数
+                //
+                for (int i = 0; i < part; i++) {
+                    //100条
+                    List<ProjectBasicsInfo> listPage = projectBasicsList.subList(0, pointsDataLimit);
+                    mapper.insertList(listPage);
+                    //剔除
+                    projectBasicsList.subList(0, pointsDataLimit).clear();
+                }
+                if(!projectBasicsList.isEmpty()){
+                    mapper.insertList(projectBasicsList);
+                }
+            }else{
+                mapper.insertList(projectBasicsList);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 项目明细帐导入文件处理
+     * @param projectDetailList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String disposeProjectDetailInfo(List<ProjectDetailInfo> projectDetailList){
+        Set set = new HashSet();
+        //遍历列表将项目定义编码去重取出
+        for (ProjectDetailInfo info: projectDetailList) {
+            //判定如果不为空则将项目定义编码添加到set中进行去重
+            if(StringUtils.isNotBlank(info.getProjectDefinitionNumber())){
+                set.add(info.getProjectDefinitionNumber());
+            }
+        }
+        //将set转换为List;
+        List<String> projectDefinitionNumberList = new ArrayList<>(set);
+        //创建项目基础底表List,用于之后的批量修改数据信息
+        List<ProjectBasicsInfo> projectBasicsList = Lists.newArrayList();
+        //遍历并从列表中取出相对应的数据存储到List中
+        for (String projectDefinitionNumber: projectDefinitionNumberList) {
+            //创建list
+            List<ProjectDetailInfo> infoByProjectDefinitionNumberList = Lists.newArrayList();
+            Iterator<ProjectDetailInfo> it = projectDetailList.iterator();
+            while(it.hasNext()){
+                ProjectDetailInfo info = it.next();
+                if(StringUtils.isBlank(info.getProjectDefinitionNumber())){//判定是否相同
+                    it.remove();
+                    continue;
+                }
+                if(projectDefinitionNumber.equals(info.getProjectDefinitionNumber())
+                    && ("生产成本-外包材料费".equals(info.getCourseName())
+                    || "生产成本-外包检修费".equals(info.getCourseName())
+                    || "生产成本-自营材料费".equals(info.getCourseName())
+                    || "项目建设成本-成本".equals(info.getCourseName())
+                    ) && StringUtils.isNotBlank(info.getPostingDate())){//判定是否相同
+                    infoByProjectDefinitionNumberList.add(info);
+                    it.remove();
+                }
+            }
+            //对时间进行排序
+            projectDetailDateSort(infoByProjectDefinitionNumberList);
+            if(infoByProjectDefinitionNumberList.size()>0){
+                ProjectBasicsInfo projectBasics = new ProjectBasicsInfo();
+                projectBasics.setProjectNumber(projectDefinitionNumber);
+                //添加首次领料日期
+                for (ProjectDetailInfo detailsInfo: infoByProjectDefinitionNumberList) {
+                    if(StringUtils.isNotBlank(detailsInfo.getPostingDate())){
+                        projectBasics.setFirstAcquisitionTime(detailsInfo.getPostingDate());
+                        //实际开工日期 == 首次领料日期
+                        projectBasics.setPracticalStartUpDate(detailsInfo.getPostingDate());
+                        break;
+                    }
+                }
+                //判定项目定义编码类型添加首笔施工费入账日期信息
+                for (ProjectDetailInfo detailsInfo: infoByProjectDefinitionNumberList) {
+                    if(detailsInfo.getProjectDefinitionNumber().startsWith("1810")){    //①资本类(项目定义编码(K列)为1810)
+                        //筛选科目名称(N)列为“生产成本-外包材料费”或“生产成本-外包检修费”或“生产成本-自营材料费”或“项目建设成本-成本”,物料描述(X列)为空,且wbs描述(j列)为“安装工程支出”或“建筑工程支出”的最早过账日期(C列)
+                        if(("生产成本-外包材料费".equals(detailsInfo.getCourseName())
+                            || "生产成本-外包检修费".equals(detailsInfo.getCourseName())
+                            || "生产成本-自营材料费".equals(detailsInfo.getCourseName())
+                            || "项目建设成本-成本".equals(detailsInfo.getCourseName())
+                        ) && StringUtils.isBlank(detailsInfo.getMaterialDescription())
+                        && ("安装工程支出".equals(detailsInfo.getWbsDescription()) || "建筑工程支出".equals(detailsInfo.getWbsDescription()))){//判定是否相同
+                            projectBasics.setFirstConstructionFeeRecordedTime(detailsInfo.getPostingDate());
+                            break;
+                        }
+                    }else if(detailsInfo.getProjectDefinitionNumber().startsWith("B11")){   //②成本类(项目定义编码(K列)为B11)
+                        //供应商名称为“镇江大照电力建设有限公司”或“镇江市金龙电业发展有限公司” 的最早过账日期(C列)
+                        if("镇江大照电力建设有限公司".equals(detailsInfo.getSupplierName()) || "镇江市金龙电业发展有限公司".equals(detailsInfo.getSupplierName())){
+                            projectBasics.setFirstConstructionFeeRecordedTime(detailsInfo.getPostingDate());
+                            break;
+                        }
+                    }
+                }
+                projectBasicsList.add(projectBasics);
+            }
+        }
+        //批量修改
+        modifyAllProjectBasicsInfo(projectBasicsList);
+        return null;
+    }
+
+    /**
+     * 项目明细帐时间数据排序
+     * @param list
+     * @return
+     */
+    public static List<ProjectDetailInfo> projectDetailDateSort(List<ProjectDetailInfo> list){
+        //根据指定比较器产生的顺序对指定列表进行排序。
+        Collections.sort(list, new Comparator<ProjectDetailInfo>() {
+            @Override
+            public int compare(ProjectDetailInfo o1, ProjectDetailInfo o2) {
+                //获取所需语言环境的 Collator,根据所需切换其他语言环境
+                Collator collator = Collator.getInstance(Locale.CANADA);
+                return collator.compare(o1.getPostingDate(), o2.getPostingDate());
+            }
+        });
+        return list;
+    }
+
+    /**
+     * 批量修改数据信息
+     * @param projectBasicsList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String modifyAllProjectBasicsInfo(List<ProjectBasicsInfo> projectBasicsList){
+        //分批处理
+        if(null!=projectBasicsList && projectBasicsList.size()>0){
+            int pointsDataLimit = 100;//限制条数
+            Integer size = projectBasicsList.size();
+            //判断是否有必要分批
+            if(pointsDataLimit<size){
+                int part = size/pointsDataLimit;//分批数
+                //
+                for (int i = 0; i < part; i++) {
+                    //100条
+                    List<ProjectBasicsInfo> listPage = projectBasicsList.subList(0, pointsDataLimit);
+                    mapper.modifyList(listPage);
+                    //剔除
+                    projectBasicsList.subList(0, pointsDataLimit).clear();
+                }
+                if(!projectBasicsList.isEmpty()){
+                    mapper.modifyList(projectBasicsList);
+                }
+            }else{
+                mapper.modifyList(projectBasicsList);
+            }
+        }
+        return null;
+    }
+
+
+
+    /**
+     * 导入工程结算明细Excel数据
+     * @param projectSettlementList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String disposeProjectSettlementInfo(List<ProjectSettlementInfo> projectSettlementList){
+        Set set = new HashSet();
+        //遍历列表将项目定义号去重取出
+        for (ProjectSettlementInfo info: projectSettlementList) {
+            //判定如果不为空则将项目定义编码添加到set中进行去重
+            if(StringUtils.isNotBlank(info.getProjectDefinitionNo())){
+                set.add(info.getProjectDefinitionNo());
+            }
+        }
+        //将set转换为List;
+        List<String> projectDefinitionList = new ArrayList<>(set);
+        //创建项目基础底表List,用于之后的批量修改数据信息
+        List<ProjectBasicsInfo> projectBasicsList = Lists.newArrayList();
+        for (String projectDefinition: projectDefinitionList) {
+            //创建list
+            List<ProjectSettlementInfo> infoByProjectDefinitionList = Lists.newArrayList();
+            Iterator<ProjectSettlementInfo> it = projectSettlementList.iterator();
+            while(it.hasNext()){
+                ProjectSettlementInfo info = it.next();
+                if(StringUtils.isBlank(info.getProjectDefinitionNo())){//判定项目定义号是否为空,为空则将其删除
+                    it.remove();
+                    continue;
+                }
+                if(projectDefinition.equals(info.getProjectDefinitionNo())){//判定是否相同
+                    infoByProjectDefinitionList.add(info);
+                    it.remove();
+                }
+            }
+            if(infoByProjectDefinitionList.size()>0){
+                //正序排列结算送审日期
+                sortSubmittedForReviewDate(infoByProjectDefinitionList);
+                ProjectBasicsInfo projectBasics = new ProjectBasicsInfo();
+                projectBasics.setProjectNumber(projectDefinition);
+                //添加结算送审日期和结算审定日期
+                for (ProjectSettlementInfo materialInfo: infoByProjectDefinitionList) {
+                    if(StringUtils.isNotBlank(materialInfo.getSubmittedForReviewDate())){
+                        projectBasics.setCalculationForReviewTime(materialInfo.getSubmittedForReviewDate());
+                        break;
+                    }
+                }
+                //倒叙排列结算送审日期
+                invertedSubmittedForReviewDate(infoByProjectDefinitionList);
+                for (ProjectSettlementInfo materialInfo: infoByProjectDefinitionList) {
+                    if(StringUtils.isNotBlank(materialInfo.getApprovalDate())){
+                        projectBasics.setCalculationExamineTime(materialInfo.getApprovalDate());
+                        break;
+                    }
+                }
+                projectBasicsList.add(projectBasics);
+            }
+        }
+        //批量修改(工程结算)
+        modifyProjectSettlementList(projectBasicsList);
+        return null;
+    }
+
+    /**
+     * 数据排序(正序)
+     * @param list
+     * @return
+     */
+    public static List<ProjectSettlementInfo> sortSubmittedForReviewDate(List<ProjectSettlementInfo> list){
+        //根据指定比较器产生的顺序对指定列表进行排序。
+        Collections.sort(list, new Comparator<ProjectSettlementInfo>() {
+            @Override
+            public int compare(ProjectSettlementInfo o1, ProjectSettlementInfo o2) {
+                //获取所需语言环境的 Collator,根据所需切换其他语言环境
+                Collator collator = Collator.getInstance(Locale.CANADA);
+                return collator.compare(o1.getSubmittedForReviewDate(), o2.getSubmittedForReviewDate());
+            }
+        });
+        return list;
+    }
+
+    /**
+     * 数据排序(倒序)
+     * @param list
+     * @return
+     */
+    public static List<ProjectSettlementInfo> invertedSubmittedForReviewDate(List<ProjectSettlementInfo> list){
+        //根据指定比较器产生的顺序对指定列表进行排序。
+        Collections.sort(list, new Comparator<ProjectSettlementInfo>() {
+            @Override
+            public int compare(ProjectSettlementInfo o1, ProjectSettlementInfo o2) {
+                //获取所需语言环境的 Collator,根据所需切换其他语言环境
+                Collator collator = Collator.getInstance(Locale.CANADA);
+                return collator.compare(o2.getApprovalDate(), o1.getApprovalDate());
+            }
+        });
+        return list;
+    }
+
+
+    /**
+     * 批量修改数据信息(工程结算)
+     * @param projectBasicsList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String modifyProjectSettlementList(List<ProjectBasicsInfo> projectBasicsList){
+        //分批处理
+        if(null!=projectBasicsList && projectBasicsList.size()>0){
+            int pointsDataLimit = 100;//限制条数
+            Integer size = projectBasicsList.size();
+            //判断是否有必要分批
+            if(pointsDataLimit<size){
+                int part = size/pointsDataLimit;//分批数
+                //
+                for (int i = 0; i < part; i++) {
+                    //100条
+                    List<ProjectBasicsInfo> listPage = projectBasicsList.subList(0, pointsDataLimit);
+                    mapper.modifyProjectSettlementList(listPage);
+                    //剔除
+                    projectBasicsList.subList(0, pointsDataLimit).clear();
+                }
+                if(!projectBasicsList.isEmpty()){
+                    mapper.modifyProjectSettlementList(projectBasicsList);
+                }
+            }else{
+                mapper.modifyProjectSettlementList(projectBasicsList);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 导入甲供材超欠供物资明细Excel数据
+     * @param whichMaterialList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String disposeWhichMaterialInfo(List<WhichMaterialInfo> whichMaterialList){
+        Set set = new HashSet();
+        //遍历列表将项目定义号去重取出
+        for (WhichMaterialInfo info: whichMaterialList) {
+            //判定如果不为空则将项目定义编码添加到set中进行去重
+            if(StringUtils.isNotBlank(info.getProjectDefinition())){
+                set.add(info.getProjectDefinition());
+            }
+        }
+        //将set转换为List;
+        List<String> projectDefinitionList = new ArrayList<>(set);
+        //创建项目基础底表List,用于之后的批量修改数据信息
+        List<ProjectBasicsInfo> projectBasicsList = Lists.newArrayList();
+        for (String projectDefinition: projectDefinitionList) {
+            //创建list
+            List<WhichMaterialInfo> infoByProjectDefinitionList = Lists.newArrayList();
+            Iterator<WhichMaterialInfo> it = whichMaterialList.iterator();
+            while(it.hasNext()){
+                WhichMaterialInfo info = it.next();
+                if(StringUtils.isBlank(info.getProjectDefinition())){//判定项目定义号是否为空,为空则删除该条记录
+                    it.remove();
+                    continue;
+                }
+                if(projectDefinition.equals(info.getProjectDefinition())){//判定是否相同
+                    infoByProjectDefinitionList.add(info);
+                    it.remove();
+                }
+            }
+            if(infoByProjectDefinitionList.size()>0){
+                ProjectBasicsInfo projectBasics = new ProjectBasicsInfo();
+                projectBasics.setProjectNumber(projectDefinition);
+                //添加首次领料日期
+                for (WhichMaterialInfo materialInfo: infoByProjectDefinitionList) {
+                    if(StringUtils.isNotBlank(materialInfo.getDifferenceFeeK()) && "0".equals(materialInfo.getDifferenceFeeK())){
+                        projectBasics.setIfGetRejectedMaterialFinish("是");
+                    }else{
+                        projectBasics.setIfGetRejectedMaterialFinish("否");
+                    }
+                }
+                projectBasicsList.add(projectBasics);
+            }
+        }
+        //批量修改(甲供材)
+        modifyWhichMaterialList(projectBasicsList);
+        return null;
+    }
+
+
+    /**
+     * 批量修改数据信息
+     * @param projectBasicsList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String modifyWhichMaterialList(List<ProjectBasicsInfo> projectBasicsList){
+        //分批处理
+        if(null!=projectBasicsList && projectBasicsList.size()>0){
+            int pointsDataLimit = 100;//限制条数
+            Integer size = projectBasicsList.size();
+            //判断是否有必要分批
+            if(pointsDataLimit<size){
+                int part = size/pointsDataLimit;//分批数
+                //
+                for (int i = 0; i < part; i++) {
+                    //100条
+                    List<ProjectBasicsInfo> listPage = projectBasicsList.subList(0, pointsDataLimit);
+                    mapper.modifyWhichMaterialList(listPage);
+                    //剔除
+                    projectBasicsList.subList(0, pointsDataLimit).clear();
+                }
+                if(!projectBasicsList.isEmpty()){
+                    mapper.modifyWhichMaterialList(projectBasicsList);
+                }
+            }else{
+                mapper.modifyWhichMaterialList(projectBasicsList);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 导入人工维护Excel数据
+     * @param handmadeVindicateList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String disposeHandmadeVindicateInfo(List<HandmadeVindicateInfo> handmadeVindicateList){
+        Iterator<HandmadeVindicateInfo> it = handmadeVindicateList.iterator();
+        //删除项目编号为空的数据信息
+        while(it.hasNext()){
+            HandmadeVindicateInfo info = it.next();
+            if(StringUtils.isBlank(info.getProjectNumber())){//判定项目定义号是否为空,为空则删除该条记录
+                it.remove();
+            }else{
+                info.preUpdate();//添加修改人和时间记录信息
+            }
+        }
+        //批量修改(人工维护)
+        modifyHandmadeVindicateList(handmadeVindicateList);
+        return null;
+    }
+
+
+    /**
+     * 批量修改手工上传数据信息
+     * @param projectBasicsList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String modifyHandmadeVindicateList(List<HandmadeVindicateInfo> projectBasicsList){
+        //分批处理
+        if(null!=projectBasicsList && projectBasicsList.size()>0){
+            int pointsDataLimit = 100;//限制条数
+            Integer size = projectBasicsList.size();
+            //判断是否有必要分批
+            if(pointsDataLimit<size){
+                int part = size/pointsDataLimit;//分批数
+                //
+                for (int i = 0; i < part; i++) {
+                    //100条
+                    List<HandmadeVindicateInfo> listPage = projectBasicsList.subList(0, pointsDataLimit);
+                    mapper.modifyHandmadeVindicateList(listPage);
+                    //剔除
+                    projectBasicsList.subList(0, pointsDataLimit).clear();
+                }
+                if(!projectBasicsList.isEmpty()){
+                    mapper.modifyHandmadeVindicateList(projectBasicsList);
+                }
+            }else{
+                mapper.modifyHandmadeVindicateList(projectBasicsList);
+            }
+        }
+        return null;
+    }
+
+}

+ 251 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectCourseService.java

@@ -0,0 +1,251 @@
+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.ProjectCourseControlInfo;
+import com.jeeplus.modules.sg.budgetSpectaculars.mapper.ProjectCourseMapper;
+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;
+
+/**
+ * @author: 徐滕
+ * @create: 2021-09-22 17:28
+ **/
+@Service
+@Transactional(readOnly = true)
+public class ProjectCourseService extends CrudService<ProjectCourseMapper, ProjectCourseControlInfo> {
+
+    @Autowired
+    private ProjectCourseMapper mapper;
+
+    public Page<ProjectCourseControlInfo> findPage(Page<ProjectCourseControlInfo> page, ProjectCourseControlInfo entity) {
+        Page<ProjectCourseControlInfo> page1 = super.findPage(page, entity);
+        disposeProjectBasics(page1.getList());
+        return page1;
+    }
+
+    private void disposeProjectBasics(List<ProjectCourseControlInfo> projectCourseControlList){
+        for (ProjectCourseControlInfo info: projectCourseControlList) {
+            //处理计划开工日期准确性   |计划开工日期- 首次领料日期| 两个日期均有为绿灯 0-15天(含15天)灰色 15-30天(含30天)黄灯 30天以上红灯(字体颜色)
+            Integer differenceValue = dateDifferenceValue(info.getPlanStartUpDate(), info.getFirstAcquisitionTime());
+            if(StringUtils.isNotBlank(info.getPlanStartUpDate()) && StringUtils.isNotBlank(info.getFirstAcquisitionTime())){
+                info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
+                info.setPlanStartWorkingTimeAccuracyFlag(0);
+            }else{
+                if(null == differenceValue){
+                    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());
+                        info.setPlanStartWorkingTimeAccuracyFlag(2);
+                    }else if (30 < differenceValue) {
+                        info.setPlanStartWorkingTimeAccuracy(differenceValue.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())){
+                info.setCalculateAuditDateTimely(differenceValue.toString());
+                info.setCalculateAuditDateTimelyFlag(0);
+            }else{
+                if(null == differenceValue){
+                    info.setCalculateAuditDateTimely("");
+                    info.setCalculateAuditDateTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 15) {
+                        info.setCalculateAuditDateTimely(differenceValue.toString());
+                        info.setCalculateAuditDateTimelyFlag(1);
+                    } 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());
+                info.setCalculateExamineDateTimelyFlag(0);
+            }else{
+                if(null == differenceValue){
+                    info.setCalculateExamineDateTimely("");
+                    info.setCalculateExamineDateTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 15) {
+                        info.setCalculateExamineDateTimely(differenceValue.toString());
+                        info.setCalculateExamineDateTimelyFlag(1);
+                    } 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());
+                info.setConstructionFeeRecordedTimelyFlag(0);
+            }else{
+                if(null == differenceValue){
+                    info.setConstructionFeeRecordedTimely("");
+                    info.setConstructionFeeRecordedTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 3) {
+                        info.setConstructionFeeRecordedTimely(differenceValue.toString());
+                        info.setConstructionFeeRecordedTimelyFlag(1);
+                    } 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());
+                info.setCompletionSettlementDateTimelyFlag(0);
+            }else{
+                if(null == differenceValue){
+                    info.setCompletionSettlementDateTimely("");
+                    info.setCompletionSettlementDateTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 2) {
+                        info.setCompletionSettlementDateTimely(differenceValue.toString());
+                        info.setCompletionSettlementDateTimelyFlag(1);
+                    } 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());
+                info.setFinalAuditDateTimelyFlag(0);
+            }else{
+                if(null == differenceValue){
+                    info.setFinalAuditDateTimely("");
+                    info.setFinalAuditDateTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 3) {
+                        info.setFinalAuditDateTimely(differenceValue.toString());
+                        info.setFinalAuditDateTimelyFlag(1);
+                    } 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());
+                info.setFinalAccountsAuditReportTimelyFlag(0);
+            }else{
+                if(null == differenceValue){
+                    info.setFinalAccountsAuditReportTimely("");
+                    info.setFinalAccountsAuditReportTimelyFlag(2);
+                }else {
+                    if (0 <= differenceValue && differenceValue <= 7) {
+                        info.setFinalAccountsAuditReportTimely(differenceValue.toString());
+                        info.setFinalAccountsAuditReportTimelyFlag(1);
+                    } 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);
+                    }
+                }
+            }
+        }
+
+    }
+
+    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;
+    }
+}

+ 177 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectPostEvaluationService.java

@@ -0,0 +1,177 @@
+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.PostEvaluationInfo;
+import com.jeeplus.modules.sg.budgetSpectaculars.mapper.ProjectPostEvaluationMapper;
+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;
+
+/**
+ * @author: 徐滕
+ * @create: 2021-09-22 17:28
+ **/
+@Service
+@Transactional(readOnly = true)
+public class ProjectPostEvaluationService extends CrudService<ProjectPostEvaluationMapper, PostEvaluationInfo> {
+
+    @Autowired
+    private ProjectPostEvaluationMapper mapper;
+
+    public Page<PostEvaluationInfo> findPage(Page<PostEvaluationInfo> page, PostEvaluationInfo entity) {
+        Page<PostEvaluationInfo> page1 = super.findPage(page, entity);
+        disposeProjectBasics(page1.getList());
+        return page1;
+    }
+
+    private void disposeProjectBasics(List<PostEvaluationInfo> projectCourseControlList){
+        for (PostEvaluationInfo info: projectCourseControlList) {
+            //处理计划开工日期准确性   |计划开工日期- 首次领料日期| 0-30天(含30天)绿灯 30天以上红灯(前后数据均不能为空)
+            if(StringUtils.isNotBlank(info.getPlanStartUpDate()) && StringUtils.isNotBlank(info.getFirstAcquisitionTime())){
+                Integer differenceValue = dateDifferenceValue(info.getPlanStartUpDate(), info.getFirstAcquisitionTime());
+                if (0 <= differenceValue &&  differenceValue<= 15) {
+                    info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
+                    info.setPlanStartWorkingTimeAccuracyFlag(0);
+                }else if(differenceValue > 30){
+                    info.setPlanStartWorkingTimeAccuracy(differenceValue.toString());
+                    info.setPlanStartWorkingTimeAccuracyFlag(4);
+                }if(differenceValue<0){
+                    info.setPlanStartWorkingTimeAccuracy("逻辑错误");
+                    info.setPlanStartWorkingTimeAccuracyFlag(4);
+                }
+            }else{
+                info.setPlanStartWorkingTimeAccuracy("");
+            }
+            //处理 结算送审日期及时性  结算送审日期-实际竣工日期 0-30天(含30天)绿灯 30天以上红灯 小于0天,显示“逻辑错误”
+            if(StringUtils.isNotBlank(info.getPlanStartUpDate()) && StringUtils.isNotBlank(info.getPracticalcompletionDate())){
+                Integer differenceValue = dateDifferenceValue(info.getPlanStartUpDate(), 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("");
+            }
+            //处理 结算审定日期及时性  结算审定日期-结算送审日期  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("");
+            }
+            //处理 施工费入账日期及时性  施工费入账日期-结算审定日期 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("");
+            }
+            //处理 核对甲供材是否一致  甲供材系统中是否一致列 一致绿灯 不一致红灯
+            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("");
+            }
+            //处理 决算送审日期及时性  决算送审日期-提报竣工决算日期 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("");
+            }
+            //处理 出具决算审计报告及时性  决算审计报告出具日期-决算送审日期 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("");
+            }
+        }
+
+    }
+
+    private Integer dateDifferenceValue(String dataOne,String dateTwo){
+        Integer betweenDaysValue = null;
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//注意月份是MM
+        try {
+            Date date1 = simpleDateFormat.parse(dataOne);
+            Date date2 = simpleDateFormat.parse(dateTwo);
+            Long betweenDays = (date1.getTime() - date2.getTime()) / (1000L*3600L*24L);
+            betweenDaysValue = betweenDays.intValue();
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return betweenDaysValue;
+    }
+}

+ 200 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/web/ProjectBasicsController.java

@@ -0,0 +1,200 @@
+package com.jeeplus.modules.sg.budgetSpectaculars.web;
+
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ImportExcel;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.sg.budgetSpectaculars.entity.*;
+import com.jeeplus.modules.sg.budgetSpectaculars.service.ProjectBasicsService;
+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 org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 基础底表展示处理
+ * 预算执行管理-综合查询表导入数据处理
+ * @author: 徐滕
+ * @create: 2021-09-14 15:04
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/budgetSpectaculars/budgetSpectaculars")
+public class ProjectBasicsController extends BaseController {
+    @Autowired
+    private ProjectBasicsService service;
+
+    @ModelAttribute
+    public ProjectBasicsInfo get(@RequestParam(required=false) String id) {
+        ProjectBasicsInfo entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = service.get(id);
+        }
+        if (entity == null){
+            entity = new ProjectBasicsInfo();
+        }
+        return entity;
+    }
+
+    /**
+     * 基础底表展示信息 列表页面
+     * @param projectBasicsInfo
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("budgetSpectaculars:budgetSpectaculars:list")
+    @RequestMapping(value = "list")
+    public String list(ProjectBasicsInfo projectBasicsInfo, Model model) {
+        model.addAttribute("projectBasicsInfo", projectBasicsInfo);
+        return "modules/sg/project/projectBasics/projectBasicsList";
+    }
+
+    /**
+     * 基础底表展示信息 列表数据
+     * @param projectBasicsInfo
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("budgetSpectaculars:budgetSpectaculars:list")
+    @RequestMapping(value = "data")
+    public Map<String, Object> data(ProjectBasicsInfo projectBasicsInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<ProjectBasicsInfo> page = service.findPage(new Page<ProjectBasicsInfo>(request, response), projectBasicsInfo);
+        return getBootstrapData(page);
+    }
+
+
+    /**
+     * 文件上传
+     */
+    @RequestMapping(value = "importExcel")
+    public String importExcel() {
+        return "modules/sg/project/projectBasics/importExcel";
+    }
+
+    /**
+     * 导入综合查询Excel数据
+
+     */
+    @ResponseBody
+    @RequiresPermissions("budgetSpectaculars:budgetSpectaculars:import")
+    @RequestMapping(value = "import")
+    public AjaxJson importFile(@RequestParam("file") MultipartFile file,@RequestParam("year") String year) {
+        AjaxJson j = new AjaxJson();
+        try {
+            ImportExcel ei = new ImportExcel(file, 0, 0);
+            List<BudgetExecuteInfo> budgetExecuteList = ei.getDataList(BudgetExecuteInfo.class);
+            //数据处理
+            service.disposeBudgetExecuteInfo(budgetExecuteList,year);
+            j.setSuccess(true);
+            j.setMsg( "导入项目信息成功");
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入项目信息失败!失败信息:"+e.getMessage());
+        }
+        return j;
+    }
+
+    /**
+     * 导入项目明细帐Excel数据
+     */
+    @ResponseBody
+    @RequiresPermissions("budgetSpectaculars:budgetSpectaculars:importProjectDetail")
+    @RequestMapping(value = "importProjectDetailFile")
+    public AjaxJson importProjectDetailFile(@RequestParam("file") MultipartFile file) {
+        AjaxJson j = new AjaxJson();
+        try {
+            ImportExcel ei = new ImportExcel(file, 0, 0);
+            List<ProjectDetailInfo> projectDetailList = ei.getDataList(ProjectDetailInfo.class);
+            //数据处理
+            service.disposeProjectDetailInfo(projectDetailList);
+            j.setSuccess(true);
+            j.setMsg( "导入项目明细信息成功");
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入项目明细信息失败!失败信息:"+e.getMessage());
+        }
+        return j;
+    }
+
+    /**
+     * 导入工程结算Excel数据
+
+     */
+    @ResponseBody
+    @RequiresPermissions("budgetSpectaculars:budgetSpectaculars:importProjectSettlement")
+    @RequestMapping(value = "importProjectSettlementFile")
+    public AjaxJson importProjectSettlementFile(@RequestParam("file") MultipartFile file) {
+        AjaxJson j = new AjaxJson();
+        try {
+            ImportExcel ei = new ImportExcel(file, 1, 0);
+            List<ProjectSettlementInfo> budgetExecuteList = ei.getDataList(ProjectSettlementInfo.class);
+            //数据处理
+            service.disposeProjectSettlementInfo(budgetExecuteList);
+            j.setSuccess(true);
+            j.setMsg( "导入工程结算成功");
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入工程结算失败!失败信息:"+e.getMessage());
+        }
+        return j;
+    }
+
+    /**
+     * 导入甲供材超欠供物资明细Excel数据
+     */
+    @ResponseBody
+    @RequiresPermissions("budgetSpectaculars:budgetSpectaculars:importWhichMaterial")
+    @RequestMapping(value = "importWhichMaterialFile")
+    public AjaxJson importWhichMaterialFile(@RequestParam("file") MultipartFile file) {
+        AjaxJson j = new AjaxJson();
+        try {
+            ImportExcel ei = new ImportExcel(file, 0, 0);
+            List<WhichMaterialInfo> projectDetailList = ei.getDataList(WhichMaterialInfo.class);
+            //数据处理
+            service.disposeWhichMaterialInfo(projectDetailList);
+            j.setSuccess(true);
+            j.setMsg( "导入甲供材超欠供物资明细成功");
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入甲供材超欠供物资明细失败!失败信息:"+e.getMessage());
+        }
+        return j;
+    }
+
+
+    /**
+     * 导入人工维护Excel数据
+     */
+    @ResponseBody
+    @RequiresPermissions("budgetSpectaculars:budgetSpectaculars:importHandmadeVindicate")
+    @RequestMapping(value = "importHandmadeVindicateFile")
+    public AjaxJson importHandmadeVindicateFile(@RequestParam("file") MultipartFile file) {
+        AjaxJson j = new AjaxJson();
+        try {
+            ImportExcel ei = new ImportExcel(file, 1, 0);
+            List<HandmadeVindicateInfo> projectDetailList = ei.getDataList(HandmadeVindicateInfo.class);
+            //数据处理
+            service.disposeHandmadeVindicateInfo(projectDetailList);
+            j.setSuccess(true);
+            j.setMsg( "导入手工维护表成功");
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入手工维护表失败!失败信息:"+e.getMessage());
+        }
+        return j;
+    }
+
+}

+ 73 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/web/ProjectCourseControlController.java

@@ -0,0 +1,73 @@
+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.*;
+import com.jeeplus.modules.sg.budgetSpectaculars.service.ProjectCourseService;
+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-09-22 17:24
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/projectCourseControl/projectCourseControl")
+public class ProjectCourseControlController extends BaseController {
+    @Autowired
+    private ProjectCourseService service;
+
+    @ModelAttribute
+    public ProjectCourseControlInfo get(@RequestParam(required=false) String id) {
+        ProjectCourseControlInfo entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = service.get(id);
+        }
+        if (entity == null){
+            entity = new ProjectCourseControlInfo();
+        }
+        return entity;
+    }
+
+    /**
+     * 过程管控页 列表页面
+     * @param projectBasicsInfo
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("projectCourseControl:projectCourseControl:list")
+    @RequestMapping(value = "list")
+    public String list(ProjectCourseControlInfo projectBasicsInfo, Model model) {
+        model.addAttribute("projectBasicsInfo", projectBasicsInfo);
+        return "modules/sg/project/projectCourse/projectCourseList";
+    }
+
+    /**
+     * 基础底表展示信息 列表数据
+     * @param projectBasicsInfo
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("projectCourseControl:projectCourseControl:list")
+    @RequestMapping(value = "data")
+    public Map<String, Object> data(ProjectCourseControlInfo projectBasicsInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<ProjectCourseControlInfo> page = service.findPage(new Page<ProjectCourseControlInfo>(request, response), projectBasicsInfo);
+        return getBootstrapData(page);
+    }
+
+}

+ 73 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/web/ProjectPostEvaluationController.java

@@ -0,0 +1,73 @@
+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.PostEvaluationInfo;
+import com.jeeplus.modules.sg.budgetSpectaculars.service.ProjectPostEvaluationService;
+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-09-24 09:26
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/projectPostEvaluation/projectPostEvaluation")
+public class ProjectPostEvaluationController extends BaseController {
+    @Autowired
+    private ProjectPostEvaluationService service;
+
+    @ModelAttribute
+    public PostEvaluationInfo get(@RequestParam(required=false) String id) {
+        PostEvaluationInfo entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = service.get(id);
+        }
+        if (entity == null){
+            entity = new PostEvaluationInfo();
+        }
+        return entity;
+    }
+
+    /**
+     * 后评价显示表 列表页面
+     * @param projectBasicsInfo
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("projectPostEvaluation:projectPostEvaluation:list")
+    @RequestMapping(value = "list")
+    public String list(PostEvaluationInfo projectBasicsInfo, Model model) {
+        model.addAttribute("projectBasicsInfo", projectBasicsInfo);
+        return "modules/sg/project/postEvaluation/projectPostEvaluationList";
+    }
+
+    /**
+     * 基础底表展示信息 列表数据
+     * @param projectBasicsInfo
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("projectPostEvaluation:projectPostEvaluation:list")
+    @RequestMapping(value = "data")
+    public Map<String, Object> data(PostEvaluationInfo projectBasicsInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<PostEvaluationInfo> page = service.findPage(new Page<PostEvaluationInfo>(request, response), projectBasicsInfo);
+        return getBootstrapData(page);
+    }
+
+}

+ 512 - 0
src/main/webapp/webpage/modules/sg/project/postEvaluation/projectPostEvaluationList.js

@@ -0,0 +1,512 @@
+<%@ 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}/projectPostEvaluation/projectPostEvaluation/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}/projectPostEvaluation/projectPostEvaluation/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: [/*{
+		        checkbox: true
+
+		    }
+			,*/{
+                    field: 'projectName',
+                    title: '项目名称',
+                    sortable: true,
+                    sortName: 'projectName'
+		    }
+			,{
+                      field: 'projectNumber',
+                      title: '国网项目编码',
+                       sortable: true,
+                       sortName: 'projectNumber'
+		    }
+			,{
+		              field: 'firstLevelUnit',
+		              title: '一级单位'
+		    }
+		    ,{
+					   field: 'secondLevelUnit',
+					   title: '二级单位'
+               }
+             ,{
+					   field: 'relevantDepartment',
+					   title: '归口部门'
+               }
+             ,{
+					   field: 'projectType',
+					   title: '项目类型'
+               }
+             ,{
+					   field: 'projectProperty',
+					   title: '项目性质'
+               }
+
+               ,{
+                       field: 'planStartWorkingTimeAccuracy',
+                       title: '计划开工日期准确性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.planStartWorkingTimeAccuracyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'calculateAuditDateTimely',
+                       title: '结算送审日期及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.calculateAuditDateTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+                }
+               ,{
+                       field: 'calculateExamineDateTimely',
+                       title: '结算审定日期及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.calculateExamineDateTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'constructionFeeRecordedTimely',
+                       title: '施工费入账日期及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.constructionFeeRecordedTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'ifCoincideCheckWhichMaterial',
+                       title: '核对甲供材是否一致',
+                       formatter:  function(value,row,index) {
+                           var flag = row.ifCoincideCheckWhichMaterialFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "4") {
+                               if(null == value || undefined == value || '' == value){
+                                   a = '';
+                               }else{
+                                   a = '<span style="color:#FF0000">'+value+'</span>';
+                               }
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'completionSettlementDateTimely',
+                       title: '提报竣工决算日期及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.completionSettlementDateTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'finalAuditDateTimely',
+                       title: '决算送审日期及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.finalAuditDateTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'finalAccountsAuditReportTimely',
+                       title: '出具决算审计报告及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.finalAccountsAuditReportTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+
+		     ]
+
+		});
+
+	  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) {
+                    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>

+ 148 - 0
src/main/webapp/webpage/modules/sg/project/postEvaluation/projectPostEvaluationList.jsp

@@ -0,0 +1,148 @@
+<%@ 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="projectPostEvaluationList.js" %>
+	<script>
+
+		$(function(){
+			//table的最后一列不给其title赋值
+			var cellIndex=parseInt($("#dataTable th").length)-1;
+			$("#dataTable tr th").each(function(){
+				var text = $(this).text();
+				if("计划开工日期准确性" == text){
+					var titleValue = "计划开工日期- 首次领料日期\n" +
+							"0-30天(含30天)绿色\n" +
+							"30天以上红色";
+					$(this).attr("title",titleValue);
+				} else if("结算送审日期及时性" == text){
+					var titleValue = "结算送审日期-实际竣工日期\n" +
+							"0-30天(含30天)绿色\n" +
+							"30天以上红色\n" +
+							"小于0天,显示“逻辑错误”";
+					$(this).attr("title",titleValue);
+				} else if("结算审定日期及时性" == text){
+					var titleValue = "结算审定日期-结算送审日期\n" +
+							"0-30天(含30天)绿色\n" +
+							"30天以上红色\n" +
+							"小于0天,显示“逻辑错误”";
+					$(this).attr("title",titleValue);
+				} else if("施工费入账日期及时性" == text){
+					var titleValue = "施工费入账日期-结算审定日期\n" +
+							"0-6天(含6天)绿色\n" +
+							"6天以上红色\n" +
+							"小于0天,显示“逻辑错误”";
+					$(this).attr("title",titleValue);
+				} else if("核对甲供材是否一致" == text){
+					var titleValue = "甲供材系统中是否一致列\n" +
+							"一致绿色\n" +
+							"不一致红色";
+					$(this).attr("title",titleValue);
+				} else if("提报竣工决算日期及时性" == text){
+					var titleValue = "提报竣工决算日期-施工费入账日期\n" +
+							"0-5天(含5天)绿色\n" +
+							"5天以上红色\n" +
+							"小于0天,显示“逻辑错误”";
+					$(this).attr("title",titleValue);
+				} else if("决算送审日期及时性" == text){
+					var titleValue = "决算送审日期-提报竣工决算日期\n" +
+							"0-5天(含5天)绿色\n" +
+							"5天以上红色\n" +
+							"小于0天,显示“逻辑错误”";
+					$(this).attr("title",titleValue);
+				} else if("出具决算审计报告及时性" == text){
+					var titleValue = "决算审计报告出具日期-决算送审日期\n" +
+							"0-15天(含15天)绿色\n" +
+							"15天以上红色\n" +
+							"小于0天,显示“逻辑错误”";
+					$(this).attr("title",titleValue);
+				}
+			});
+		});
+	</script>
+</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="postEvaluationInfo" 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="projectName" 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:import">
+					<button id="importProjectDetail" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入项目明细
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:import">
+					<button id="importProjectSettlement" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入工程结算信息
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:import">
+					<button id="importWhichMaterial" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入甲供材信息
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:import">
+					<button id="importHandmadeVindicate" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></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>

+ 49 - 0
src/main/webapp/webpage/modules/sg/project/projectBasics/importExcel.jsp

@@ -0,0 +1,49 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>导入Excel</title>
+    <meta name="decorator" content="ani"/>
+    <script>
+        function importExcel(url, fn) {
+            var importForm =$("#importForm")[0];
+            var year = $("#year").val();
+            if(null == year || undefined == year || '' == year){
+                jp.error("请填写年份信息!");
+                return false;
+            }
+            jp.loading('  正在导入,请稍等...');
+            jp.uploadFile(importForm, url,function (data) {
+               fn(data);
+            })
+        }
+    </script>
+</head>
+<body class="bg-white">
+    <div class="wrapper wrapper-content">
+        <div id="importBox" >
+            <form id="importForm" action="${url}" method="post" enctype="multipart/form-data" style="padding-left:20px;text-align:center;" onsubmit="loading('正在导入,请稍等...');">
+                <table class="table table-bordered">
+                    <tbody>
+                        <tr>
+                            <td class="width-15 active"><label class="pull-right"><font color="red">*</font>年份:</label></td>
+                            <td class="width-35">
+                                <input type="text" id="year" name="year" value="" required="required" class="form-control required">
+                            </td>
+                            <td class="width-15 active"><label class="pull-right">上传文件:</label></td>
+                            <td class="width-35">
+                                <input id="uploadFile" name="file" type="file" class="form-control" style="width:300px"/>
+                            </td>
+                        </tr>
+                        <tr>
+                            导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!
+                        </tr>
+                    </tbody>
+                </table>
+
+
+            </form>
+        </div>
+    </div>
+</body>
+</html>

+ 118 - 0
src/main/webapp/webpage/modules/sg/project/projectBasics/projectBasicsForm.jsp

@@ -0,0 +1,118 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>年度物资上报统计</title>
+	<meta name="decorator" content="ani"/>
+	<script type="text/javascript">
+
+		$(document).ready(function() {
+			// $('#startDate').datetimepicker({
+			// 	format: "YYYY-MM-DD"
+			// });
+			// $('#endDate').datetimepicker({
+			// 	format: "YYYY-MM-DD"
+			// });
+		});
+		function save() {
+            var isValidate = jp.validateForm('#inputForm');//校验表单
+            if(!isValidate){
+                return false;
+			}else{
+                jp.loading();
+                jp.post("${ctx}/managementcenter/materialproject/save",$('#inputForm').serialize(),function(data){
+                    if(data.success){
+                        jp.getParent().refresh();
+                        var dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+                        parent.layer.close(dialogIndex);
+                        jp.success(data.msg)
+
+                    }else{
+                        jp.error(data.msg);
+                    }
+                })
+			}
+
+        }
+	</script>
+</head>
+<body class="bg-white">
+		<form:form id="inputForm" modelAttribute="materialProject" class="form-horizontal">
+		<form:hidden path="id"/>	
+		<table class="table table-bordered">
+		   <tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">储备项目名称:</label></td>
+					<td class="width-35">
+						<form:input path="reserveProjectName" htmlEscape="false"    class="form-control required" readonly="true"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">储备编码:</label></td>
+					<td class="width-35">
+						<form:input path="reserveCode" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">项目类型:</label></td>
+					<td class="width-35">
+						<form:input path="projectType" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">项目计划年度批次:</label></td>
+					<td class="width-35">
+						<form:input path="batchPlan" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">项目正式发文批次:</label></td>
+					<td class="width-35">
+						<form:input path="issuePlan" htmlEscape="false"    class="form-control "/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">项目年度实施计划(月份):</label></td>
+					<td class="width-35">
+						<form:input path="monthPlan" htmlEscape="false"    class="form-control "/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">年度计划有无预测:</label></td>
+					<td class="width-35">
+						<form:input path="hasPlan" htmlEscape="false"    class="form-control required"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">项目物资执行计划(上半年/下半年):</label></td>
+					<td class="width-35">
+						<form:input path="halfPlan" htmlEscape="false"    class="form-control required"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">项目定义:</label></td>
+					<td class="width-35">
+						<c:choose>
+							<c:when test="${!aBoolean}">
+								<form:input path="projectId" readonly="true" htmlEscape="false"  class="form-control"/>
+							</c:when>
+							<c:otherwise>
+								<form:input path="projectId" htmlEscape="false"  class="form-control"/>
+							</c:otherwise>
+						</c:choose>
+					</td>
+					<td class="width-15 active"><label class="pull-right">项目名称:</label></td>
+					<td class="width-35">
+						<c:choose>
+							<c:when test="${!aBoolean}">
+								<form:input path="projectName" readonly="true" htmlEscape="false"  class="form-control"/>
+							</c:when>
+							<c:otherwise>
+								<form:input path="projectName" htmlEscape="false"  class="form-control"/>
+							</c:otherwise>
+						</c:choose>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">归属年份:</label></td>
+					<td class="width-35">
+						<form:input path="attributionYear" htmlEscape="false" class="form-control required"/>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

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

@@ -0,0 +1,426 @@
+<%@ 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}/budgetSpectaculars/budgetSpectaculars/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: [/*{
+		        checkbox: true
+
+		    }
+			,*/{
+                    field: 'projectName',
+                    title: '项目名称',
+                    sortable: true,
+                    sortName: 'projectName',
+                    formatter:paramsMatter
+		    }
+			,{
+                      field: 'projectNumber',
+                      title: '国网项目编码',
+                       sortable: true,
+                       sortName: 'projectNumber'
+		    }
+			,{
+		              field: 'firstLevelUnit',
+		              title: '一级单位'
+		    }
+		    ,{
+					   field: 'secondLevelUnit',
+					   title: '二级单位'
+               }
+             ,{
+					   field: 'relevantDepartment',
+					   title: '归口部门'
+               }
+             ,{
+					   field: 'projectType',
+					   title: '项目类型'
+               }
+             ,{
+					   field: 'projectProperty',
+					   title: '项目性质'
+               }
+               ,{
+                       field: 'planStartUpDate',
+                       title: '计划开工日期'
+               }
+               ,{
+                       field: 'plancompletionDate',
+                       title: '计划竣工日期'
+                }
+               ,{
+                       field: 'practicalStartUpDate',
+                       title: '实际开工日期'
+               }
+               ,{
+                       field: 'practicalcompletionDate',
+                       title: '实际竣工日期'
+               }
+               ,{
+                       field: 'firstAcquisitionTime',
+                       title: '首次领料日期'
+               }
+               ,{
+                       field: 'firstConstructionFeeRecordedTime',
+                       title: '首笔施工费入账日期'
+               }
+               ,{
+                       field: 'calculationForReviewTime',
+                       title: '结算送审日期'
+               }
+               ,{
+                       field: 'calculationExamineTime',
+                       title: '结算审定日期'
+               }
+               ,{
+                       field: 'whichMaterialStoresReturnedTime',
+                       title: '发起甲供材领退料日期'
+               }
+               ,{
+                       field: 'ifGetRejectedMaterialFinish',
+                       title: '领退料是否完成'
+               }
+               ,{
+                       field: 'completedActualBudgetTime',
+                       title: '提报竣工决算日期'
+               }
+               ,{
+                       field: 'actualBudgetSubmittalsTime',
+                       title: '决算送审日期'
+               }
+               ,{
+                       field: 'actualBudgetauditReportTime',
+                       title: '出具决算审计报告日期'
+               }
+               ,{
+                       field: 'firstWorkingCapitalTime',
+                       title: '首笔转资日期'
+               }
+               ,{
+                       field: 'ifProjectClose',
+                       title: '项目是否关闭'
+               }
+               ,{
+                       field: 'year',
+                       title: '年份'
+               }
+
+		     ]
+
+		});
+
+    function paramsMatter(value,row,index) {
+        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) {
+                    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>

+ 91 - 0
src/main/webapp/webpage/modules/sg/project/projectBasics/projectBasicsList.jsp

@@ -0,0 +1,91 @@
+<%@ 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="projectBasicsList.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="projectBasicsInfo" 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="projectName" 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>
+			</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>

+ 512 - 0
src/main/webapp/webpage/modules/sg/project/projectCourse/projectCourseList.js

@@ -0,0 +1,512 @@
+<%@ 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}/projectCourseControl/projectCourseControl/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}/projectCourseControl/projectCourseControl/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: [/*{
+		        checkbox: true
+
+		    }
+			,*/{
+                    field: 'projectName',
+                    title: '项目名称',
+                    sortable: true,
+                    sortName: 'projectName'
+		    }
+			,{
+                      field: 'projectNumber',
+                      title: '国网项目编码',
+                       sortable: true,
+                       sortName: 'projectNumber'
+		    }
+			,{
+		              field: 'firstLevelUnit',
+		              title: '一级单位'
+		    }
+		    ,{
+					   field: 'secondLevelUnit',
+					   title: '二级单位'
+               }
+             ,{
+					   field: 'relevantDepartment',
+					   title: '归口部门'
+               }
+             ,{
+					   field: 'projectType',
+					   title: '项目类型'
+               }
+             ,{
+					   field: 'projectProperty',
+					   title: '项目性质'
+               }
+
+               ,{
+                       field: 'planStartWorkingTimeAccuracy',
+                       title: '计划开工日期准确性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.planStartWorkingTimeAccuracyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'calculateAuditDateTimely',
+                       title: '结算送审日期及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.calculateAuditDateTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+                }
+               ,{
+                       field: 'calculateExamineDateTimely',
+                       title: '结算审定日期及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.calculateExamineDateTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'constructionFeeRecordedTimely',
+                       title: '施工费入账日期及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.constructionFeeRecordedTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'ifCoincideCheckWhichMaterial',
+                       title: '核对甲供材是否一致',
+                       formatter:  function(value,row,index) {
+                           var flag = row.ifCoincideCheckWhichMaterialFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "4") {
+                               if(null == value || undefined == value || '' == value){
+                                   a = '';
+                               }else{
+                                   a = '<span style="color:#FF0000">'+value+'</span>';
+                               }
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'completionSettlementDateTimely',
+                       title: '提报竣工决算日期及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.completionSettlementDateTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'finalAuditDateTimely',
+                       title: '决算送审日期及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.finalAuditDateTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+               ,{
+                       field: 'finalAccountsAuditReportTimely',
+                       title: '出具决算审计报告及时性',
+                       formatter:  function(value,row,index) {
+                           var flag = row.finalAccountsAuditReportTimelyFlag
+                           var a = "";
+                           if(flag == "0") {
+                               a = '<span style="color:#00ff00">'+value+'</span>';
+                           }else if(flag == "1"){
+                               a = '<span style="color:#A9A9A9">'+value+'</span>';
+                           }else if(flag == "2") {
+                               a = '<span style="color:#fa9f00">'+value+'</span>';
+                           }else if(flag == "3") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }else if(flag == "4") {
+                               a = '<span style="color:#FF0000">'+value+'</span>';
+                           }
+                           return a;
+                       }
+               }
+
+		     ]
+
+		});
+
+	  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) {
+                    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>

+ 162 - 0
src/main/webapp/webpage/modules/sg/project/projectCourse/projectCourseList.jsp

@@ -0,0 +1,162 @@
+<%@ 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="projectCourseList.js" %>
+	<script>
+
+		$(function(){
+			//table的最后一列不给其title赋值
+			var cellIndex=parseInt($("#dataTable th").length)-1;
+			$("#dataTable tr th").each(function(){
+				var text = $(this).text();
+				if("计划开工日期准确性" == text){
+					var titleValue = "计划开工日期- 首次领料日期\n" +
+							"两个日期均有为绿色\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" +
+							"15-30天(含30天)黄色\n" +
+							"30天以上红色\n" +
+							"小于0天,显示“逻辑错误”";
+					$(this).attr("title",titleValue);
+				} else if("结算审定日期及时性" == text){
+					var titleValue = "结算审定日期-结算送审日期\n" +
+							"两个日期均有为绿色\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" +
+							"3-6天(含6天)黄色\n" +
+							"6天以上红色\n" +
+							"小于0天,显示“逻辑错误”";
+					$(this).attr("title",titleValue);
+				} else if("核对甲供材是否一致" == text){
+					var titleValue = "甲供材系统中是否一致列\n" +
+							"一致绿色\n" +
+							"不一致红色\n";
+					$(this).attr("title",titleValue);
+				} else if("提报竣工决算日期及时性" == text){
+					var titleValue = "提报竣工决算日期-施工费入账日期\n" +
+							"两个日期均有为绿色\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" +
+							"4-5天(含5天)黄色\n" +
+							"5天以上红色\n" +
+							"小于0天,显示“逻辑错误”";
+					$(this).attr("title",titleValue);
+				} else if("出具决算审计报告及时性" == text){
+					var titleValue = "决算审计报告出具日期-决算送审日期\n" +
+							"两个日期均有为绿色\n" +
+							"0-7天(含7天)灰色\n" +
+							"8-15天(含15天)黄色\n" +
+							"15天以上\n" +
+							"小于0天,显示“逻辑错误”";
+					$(this).attr("title",titleValue);
+				}
+			});
+		});
+	</script>
+</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="projectBasicsInfo" 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="projectName" 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:import">
+					<button id="importProjectDetail" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入项目明细
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:import">
+					<button id="importProjectSettlement" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入工程结算信息
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:import">
+					<button id="importWhichMaterial" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></i> 导入甲供材信息
+					</button>
+				</shiro:hasPermission>
+				<shiro:hasPermission name="budgetSpectaculars:budgetSpectaculars:import">
+					<button id="importHandmadeVindicate" class="btn btn-info">
+						<i class="fa fa-folder-open-o"></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>