Ver código fonte

出图、特殊物资参数统计表功能代码,导出规范性审核单功能代码

wangqiang 1 ano atrás
pai
commit
66702f1f28
27 arquivos alterados com 3565 adições e 5 exclusões
  1. 227 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/AuditForm.java
  2. 10 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/MaterialData.java
  3. 315 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/PlotProgressStats.java
  4. 297 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/SpecialParameterStats.java
  5. 8 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/NormativeAuditMapper.java
  6. 44 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/PlotProgressStatsMapper.java
  7. 52 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/SpecialParameterStatsMapper.java
  8. 59 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/NormativeAuditMapper.xml
  9. 149 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/PlotProgressStatsMapper.xml
  10. 160 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/SpecialParameterStatsMapper.xml
  11. 6 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/NormativeAuditService.java
  12. 69 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/PlotProgressStatsService.java
  13. 87 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/SpecialParameterStatsService.java
  14. 304 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/util/ExcelExportUtil.java
  15. 307 4
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/util/ExcelImportUtil.java
  16. 19 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/NormativeAuditController.java
  17. 298 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/PlotProgressStatsController.java
  18. 306 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/SpecialParameterStatsController.java
  19. BIN
      src/main/resources/freemarker/excelmodel/auditForm.xlsx
  20. BIN
      src/main/resources/freemarker/excelmodel/plotProgressStats.xlsx
  21. BIN
      src/main/resources/freemarker/excelmodel/specialParameterStats.xlsx
  22. 14 1
      src/main/webapp/webpage/modules/cg/statisticalTable/normative/normative.js
  23. 5 0
      src/main/webapp/webpage/modules/cg/statisticalTable/normative/normative.jsp
  24. 301 0
      src/main/webapp/webpage/modules/cg/statisticalTable/plotProgressStats/plotProgressStats.js
  25. 112 0
      src/main/webapp/webpage/modules/cg/statisticalTable/plotProgressStats/plotProgressStats.jsp
  26. 304 0
      src/main/webapp/webpage/modules/cg/statisticalTable/specialParameterStats/specialParameterStats.js
  27. 112 0
      src/main/webapp/webpage/modules/cg/statisticalTable/specialParameterStats/specialParameterStats.jsp

+ 227 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/AuditForm.java

@@ -0,0 +1,227 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * @author 王强
+ * @version 1.0
+ * @date 2023-10-09 8:54
+ */
+public class AuditForm extends DataEntity<AuditForm> {
+    private String projectYear;             //项目年份
+    private String reserveBatches;          //储备批次
+    private String projectReserveId;        //项目储备编号
+    private String projectName;             //项目名称
+    private String noStopWorkPlan;           //不停电作业方案
+    private String hotLineWorkTypeNo;        //带电作业类型编号/次数  B8:10次,B9:5次
+    private String siteSurveyor;             //现场查勘人
+    private String reasonsForNotWorkInterruption;  //无法不停电作业原因
+    private String projectManager;          //业主储备项目经理
+    private String completeDiscloseTime;    //交底完成时间
+    private String officeProgress;           //政处描述
+    private String otherProblemDescribe;     //其他问题描述
+    private String reviewMaterial;           //甲供材优选审核
+    private String aSupplyTob;               //甲供转乙供情况
+    private String templateCorrect;          //预算模板是否正确
+    private String correctApplication;       //定额套用是否正确
+    private String workloadConsistent;       //工作量是否一致
+    private String feeCorrect;               //取费是否正确
+    private String materialSupplyA;          //甲供物资是否正确
+    private String materialSupplyB;          //乙供物资是否正确
+    private String chargeLiveWork;           //带电作业费是否正确
+    private String chargeDemolitionWork;     //拆除工程取费是否正确
+    private String otherProblem;             //其他问题
+    private String reserveProgress;          //储备进度
+
+    public String getProjectYear() {
+        return projectYear;
+    }
+
+    public void setProjectYear(String projectYear) {
+        this.projectYear = projectYear;
+    }
+
+    public String getReserveBatches() {
+        return reserveBatches;
+    }
+
+    public void setReserveBatches(String reserveBatches) {
+        this.reserveBatches = reserveBatches;
+    }
+
+    public String getProjectReserveId() {
+        return projectReserveId;
+    }
+
+    public void setProjectReserveId(String projectReserveId) {
+        this.projectReserveId = projectReserveId;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getNoStopWorkPlan() {
+        return noStopWorkPlan;
+    }
+
+    public void setNoStopWorkPlan(String noStopWorkPlan) {
+        this.noStopWorkPlan = noStopWorkPlan;
+    }
+
+    public String getHotLineWorkTypeNo() {
+        return hotLineWorkTypeNo;
+    }
+
+    public void setHotLineWorkTypeNo(String hotLineWorkTypeNo) {
+        this.hotLineWorkTypeNo = hotLineWorkTypeNo;
+    }
+
+    public String getSiteSurveyor() {
+        return siteSurveyor;
+    }
+
+    public void setSiteSurveyor(String siteSurveyor) {
+        this.siteSurveyor = siteSurveyor;
+    }
+
+    public String getReasonsForNotWorkInterruption() {
+        return reasonsForNotWorkInterruption;
+    }
+
+    public void setReasonsForNotWorkInterruption(String reasonsForNotWorkInterruption) {
+        this.reasonsForNotWorkInterruption = reasonsForNotWorkInterruption;
+    }
+
+    public String getProjectManager() {
+        return projectManager;
+    }
+
+    public void setProjectManager(String projectManager) {
+        this.projectManager = projectManager;
+    }
+
+    public String getCompleteDiscloseTime() {
+        return completeDiscloseTime;
+    }
+
+    public void setCompleteDiscloseTime(String completeDiscloseTime) {
+        this.completeDiscloseTime = completeDiscloseTime;
+    }
+
+    public String getOfficeProgress() {
+        return officeProgress;
+    }
+
+    public void setOfficeProgress(String officeProgress) {
+        this.officeProgress = officeProgress;
+    }
+
+    public String getOtherProblemDescribe() {
+        return otherProblemDescribe;
+    }
+
+    public void setOtherProblemDescribe(String otherProblemDescribe) {
+        this.otherProblemDescribe = otherProblemDescribe;
+    }
+
+    public String getReviewMaterial() {
+        return reviewMaterial;
+    }
+
+    public void setReviewMaterial(String reviewMaterial) {
+        this.reviewMaterial = reviewMaterial;
+    }
+
+    public String getaSupplyTob() {
+        return aSupplyTob;
+    }
+
+    public void setaSupplyTob(String aSupplyTob) {
+        this.aSupplyTob = aSupplyTob;
+    }
+
+    public String getTemplateCorrect() {
+        return templateCorrect;
+    }
+
+    public void setTemplateCorrect(String templateCorrect) {
+        this.templateCorrect = templateCorrect;
+    }
+
+    public String getCorrectApplication() {
+        return correctApplication;
+    }
+
+    public void setCorrectApplication(String correctApplication) {
+        this.correctApplication = correctApplication;
+    }
+
+    public String getWorkloadConsistent() {
+        return workloadConsistent;
+    }
+
+    public void setWorkloadConsistent(String workloadConsistent) {
+        this.workloadConsistent = workloadConsistent;
+    }
+
+    public String getFeeCorrect() {
+        return feeCorrect;
+    }
+
+    public void setFeeCorrect(String feeCorrect) {
+        this.feeCorrect = feeCorrect;
+    }
+
+    public String getMaterialSupplyA() {
+        return materialSupplyA;
+    }
+
+    public void setMaterialSupplyA(String materialSupplyA) {
+        this.materialSupplyA = materialSupplyA;
+    }
+
+    public String getMaterialSupplyB() {
+        return materialSupplyB;
+    }
+
+    public void setMaterialSupplyB(String materialSupplyB) {
+        this.materialSupplyB = materialSupplyB;
+    }
+
+    public String getChargeLiveWork() {
+        return chargeLiveWork;
+    }
+
+    public void setChargeLiveWork(String chargeLiveWork) {
+        this.chargeLiveWork = chargeLiveWork;
+    }
+
+    public String getChargeDemolitionWork() {
+        return chargeDemolitionWork;
+    }
+
+    public void setChargeDemolitionWork(String chargeDemolitionWork) {
+        this.chargeDemolitionWork = chargeDemolitionWork;
+    }
+
+    public String getOtherProblem() {
+        return otherProblem;
+    }
+
+    public void setOtherProblem(String otherProblem) {
+        this.otherProblem = otherProblem;
+    }
+
+    public String getReserveProgress() {
+        return reserveProgress;
+    }
+
+    public void setReserveProgress(String reserveProgress) {
+        this.reserveProgress = reserveProgress;
+    }
+}

+ 10 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/MaterialData.java

@@ -6,7 +6,9 @@ package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
  * @create: 2022-08-22 09:27
  **/
 public class MaterialData {
+
     private String remarks;             //备注信息
+    private String projectName;         //项目名称
     private String materialCode;        //物料编码
     private String materialName;        //物料名称
     private String extendDescription;   //扩展描述
@@ -17,6 +19,14 @@ public class MaterialData {
     private String supplyType;          //甲乙供
     private String note;                //备注
 
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
     public String getRemarks() {
         return remarks;
     }

+ 315 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/PlotProgressStats.java

@@ -0,0 +1,315 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 储备项目出图进度统计表
+ * @author 王强
+ * @version 1.0
+ * @date 2023-10-08 9:23
+ */
+public class PlotProgressStats extends DataEntity<PlotProgressStats> {
+
+    //储备项目基本信息
+    private String projectYear;             //项目年份
+    private String projectNature;           //项目性质
+    private String demandUnit;              //需求单位
+    private String district;                //区域
+    private String projectGroup;            //项目分组
+    private String projectManager;          //业主储备项目经理
+    private String reserveBatches;          //储备批次
+    private String blockSupply;             //供电区域
+    private String gridNumber;              //网格编号
+    private String cellNumber;              //单元格编号
+    private String projectName;             //项目名称
+    private String stateGridProjectCode;    //国网项目编码
+    private String stateGridProjectName;    //国网项目名称
+    private String constructionNecessityAndContent;           //建设必要性及内容
+    private String substationName;           //变电站名称
+    private String circuitName;              //线路名称
+    private String netRackProjectDivide;     //网架项目划分
+    private String requirementType;          //需求类型
+    private String costEstimate;             //费用估算
+    private String basicRemarks;             //备注
+
+    private String reserveProgress;          //储备进度
+    private String implementPlan;            //是否纳入实施计划
+    private String implementBatch;           //初定实施批次
+
+    private String projectReserveId;                //项目储备编号
+    private String needPaperDrawing;                //是否需出纸质图
+    private String askPaperDrawingTime;             //要求移交纸质图纸时间
+    private String paperDrawing;                    //是否移交纸质图
+    private String paperDrawingTime;                //纸质图移交时间
+    private String arrivePlanAndApprovalDrawing;    //是否需出规划报批图
+    private String askPlanAndApprovalDrawingTime;   //要求移交规划报批图时间
+    private String planAndApprovalDrawing;          //是否移交规划报批图
+    private String planAndApprovalDrawingTime;      //规划报批图移交时间
+    private String remarks;                         //备注
+
+    public String getProjectYear() {
+        return projectYear;
+    }
+
+    public void setProjectYear(String projectYear) {
+        this.projectYear = projectYear;
+    }
+
+    public String getProjectNature() {
+        return projectNature;
+    }
+
+    public void setProjectNature(String projectNature) {
+        this.projectNature = projectNature;
+    }
+
+    public String getDemandUnit() {
+        return demandUnit;
+    }
+
+    public void setDemandUnit(String demandUnit) {
+        this.demandUnit = demandUnit;
+    }
+
+    public String getDistrict() {
+        return district;
+    }
+
+    public void setDistrict(String district) {
+        this.district = district;
+    }
+
+    public String getProjectGroup() {
+        return projectGroup;
+    }
+
+    public void setProjectGroup(String projectGroup) {
+        this.projectGroup = projectGroup;
+    }
+
+    public String getProjectManager() {
+        return projectManager;
+    }
+
+    public void setProjectManager(String projectManager) {
+        this.projectManager = projectManager;
+    }
+
+    public String getReserveBatches() {
+        return reserveBatches;
+    }
+
+    public void setReserveBatches(String reserveBatches) {
+        this.reserveBatches = reserveBatches;
+    }
+
+    public String getBlockSupply() {
+        return blockSupply;
+    }
+
+    public void setBlockSupply(String blockSupply) {
+        this.blockSupply = blockSupply;
+    }
+
+    public String getGridNumber() {
+        return gridNumber;
+    }
+
+    public void setGridNumber(String gridNumber) {
+        this.gridNumber = gridNumber;
+    }
+
+    public String getCellNumber() {
+        return cellNumber;
+    }
+
+    public void setCellNumber(String cellNumber) {
+        this.cellNumber = cellNumber;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getStateGridProjectCode() {
+        return stateGridProjectCode;
+    }
+
+    public void setStateGridProjectCode(String stateGridProjectCode) {
+        this.stateGridProjectCode = stateGridProjectCode;
+    }
+
+    public String getStateGridProjectName() {
+        return stateGridProjectName;
+    }
+
+    public void setStateGridProjectName(String stateGridProjectName) {
+        this.stateGridProjectName = stateGridProjectName;
+    }
+
+    public String getConstructionNecessityAndContent() {
+        return constructionNecessityAndContent;
+    }
+
+    public void setConstructionNecessityAndContent(String constructionNecessityAndContent) {
+        this.constructionNecessityAndContent = constructionNecessityAndContent;
+    }
+
+    public String getSubstationName() {
+        return substationName;
+    }
+
+    public void setSubstationName(String substationName) {
+        this.substationName = substationName;
+    }
+
+    public String getCircuitName() {
+        return circuitName;
+    }
+
+    public void setCircuitName(String circuitName) {
+        this.circuitName = circuitName;
+    }
+
+    public String getNetRackProjectDivide() {
+        return netRackProjectDivide;
+    }
+
+    public void setNetRackProjectDivide(String netRackProjectDivide) {
+        this.netRackProjectDivide = netRackProjectDivide;
+    }
+
+    public String getRequirementType() {
+        return requirementType;
+    }
+
+    public void setRequirementType(String requirementType) {
+        this.requirementType = requirementType;
+    }
+
+    public String getCostEstimate() {
+        return costEstimate;
+    }
+
+    public void setCostEstimate(String costEstimate) {
+        this.costEstimate = costEstimate;
+    }
+
+    public String getBasicRemarks() {
+        return basicRemarks;
+    }
+
+    public void setBasicRemarks(String basicRemarks) {
+        this.basicRemarks = basicRemarks;
+    }
+
+    public String getReserveProgress() {
+        return reserveProgress;
+    }
+
+    public void setReserveProgress(String reserveProgress) {
+        this.reserveProgress = reserveProgress;
+    }
+
+    public String getImplementPlan() {
+        return implementPlan;
+    }
+
+    public void setImplementPlan(String implementPlan) {
+        this.implementPlan = implementPlan;
+    }
+
+    public String getImplementBatch() {
+        return implementBatch;
+    }
+
+    public void setImplementBatch(String implementBatch) {
+        this.implementBatch = implementBatch;
+    }
+
+    public String getProjectReserveId() {
+        return projectReserveId;
+    }
+
+    public void setProjectReserveId(String projectReserveId) {
+        this.projectReserveId = projectReserveId;
+    }
+
+    public String getNeedPaperDrawing() {
+        return needPaperDrawing;
+    }
+
+    public void setNeedPaperDrawing(String needPaperDrawing) {
+        this.needPaperDrawing = needPaperDrawing;
+    }
+
+    public String getAskPaperDrawingTime() {
+        return askPaperDrawingTime;
+    }
+
+    public void setAskPaperDrawingTime(String askPaperDrawingTime) {
+        this.askPaperDrawingTime = askPaperDrawingTime;
+    }
+
+    public String getPaperDrawing() {
+        return paperDrawing;
+    }
+
+    public void setPaperDrawing(String paperDrawing) {
+        this.paperDrawing = paperDrawing;
+    }
+
+    public String getPaperDrawingTime() {
+        return paperDrawingTime;
+    }
+
+    public void setPaperDrawingTime(String paperDrawingTime) {
+        this.paperDrawingTime = paperDrawingTime;
+    }
+
+    public String getArrivePlanAndApprovalDrawing() {
+        return arrivePlanAndApprovalDrawing;
+    }
+
+    public void setArrivePlanAndApprovalDrawing(String arrivePlanAndApprovalDrawing) {
+        this.arrivePlanAndApprovalDrawing = arrivePlanAndApprovalDrawing;
+    }
+
+    public String getAskPlanAndApprovalDrawingTime() {
+        return askPlanAndApprovalDrawingTime;
+    }
+
+    public void setAskPlanAndApprovalDrawingTime(String askPlanAndApprovalDrawingTime) {
+        this.askPlanAndApprovalDrawingTime = askPlanAndApprovalDrawingTime;
+    }
+
+    public String getPlanAndApprovalDrawing() {
+        return planAndApprovalDrawing;
+    }
+
+    public void setPlanAndApprovalDrawing(String planAndApprovalDrawing) {
+        this.planAndApprovalDrawing = planAndApprovalDrawing;
+    }
+
+    public String getPlanAndApprovalDrawingTime() {
+        return planAndApprovalDrawingTime;
+    }
+
+    public void setPlanAndApprovalDrawingTime(String planAndApprovalDrawingTime) {
+        this.planAndApprovalDrawingTime = planAndApprovalDrawingTime;
+    }
+
+    @Override
+    public String getRemarks() {
+        return remarks;
+    }
+
+    @Override
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+}

+ 297 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/SpecialParameterStats.java

@@ -0,0 +1,297 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 储备项目设计特殊物资参数统计表
+ * @author: 王强
+ * @create: 2022-08-16 09:57
+ **/
+public class SpecialParameterStats extends DataEntity<SpecialParameterStats> {
+
+    //储备项目基本信息
+    private String projectYear;             //项目年份
+    private String projectNature;           //项目性质
+    private String demandUnit;              //需求单位
+    private String district;                //区域
+    private String projectGroup;            //项目分组
+    private String projectManager;          //项目经理
+    private String reserveBatches;          //储备批次
+    private String blockSupply;             //供电区域
+    private String gridNumber;              //网格编号
+    private String cellNumber;              //单元格编号
+    private String projectReserveId;        //项目储备编号
+    private String projectName;             //项目名称
+    private String stateGridProjectCode;    //国网项目编码
+    private String stateGridProjectName;    //国网项目名称
+    private String constructionNecessityAndContent;           //建设必要性及内容
+    private String substationName;           //变电站名称
+    private String circuitName;              //线路名称
+    private String netRackProjectDivide;     //网架项目划分
+    private String requirementType;          //需求类型
+    private String projectType;              //项目类型
+    private String costEstimate;             //费用估算
+    //其他
+    private String reserveProgress;          //储备进度
+    private String implementPlan;            //是否纳入实施计划
+    private String implementBatch;           //初定实施批次
+
+    private String materialName;             //物资名称
+    private String specificationAndModel;    //规格型号
+    private String materialDescription;      //物资描述
+    private String number;                   //数量
+    private String parameter;                //参数
+    private String remarks;                  //备注
+
+    private String speId;
+
+    public String getSpeId() {
+        return speId;
+    }
+
+    public void setSpeId(String speId) {
+        this.speId = speId;
+    }
+
+    public String getProjectYear() {
+        return projectYear;
+    }
+
+    public void setProjectYear(String projectYear) {
+        this.projectYear = projectYear;
+    }
+
+    public String getProjectNature() {
+        return projectNature;
+    }
+
+    public void setProjectNature(String projectNature) {
+        this.projectNature = projectNature;
+    }
+
+    public String getDemandUnit() {
+        return demandUnit;
+    }
+
+    public void setDemandUnit(String demandUnit) {
+        this.demandUnit = demandUnit;
+    }
+
+    public String getDistrict() {
+        return district;
+    }
+
+    public void setDistrict(String district) {
+        this.district = district;
+    }
+
+    public String getProjectGroup() {
+        return projectGroup;
+    }
+
+    public void setProjectGroup(String projectGroup) {
+        this.projectGroup = projectGroup;
+    }
+
+    public String getProjectManager() {
+        return projectManager;
+    }
+
+    public void setProjectManager(String projectManager) {
+        this.projectManager = projectManager;
+    }
+
+    public String getReserveBatches() {
+        return reserveBatches;
+    }
+
+    public void setReserveBatches(String reserveBatches) {
+        this.reserveBatches = reserveBatches;
+    }
+
+    public String getBlockSupply() {
+        return blockSupply;
+    }
+
+    public void setBlockSupply(String blockSupply) {
+        this.blockSupply = blockSupply;
+    }
+
+    public String getGridNumber() {
+        return gridNumber;
+    }
+
+    public void setGridNumber(String gridNumber) {
+        this.gridNumber = gridNumber;
+    }
+
+    public String getCellNumber() {
+        return cellNumber;
+    }
+
+    public void setCellNumber(String cellNumber) {
+        this.cellNumber = cellNumber;
+    }
+
+    public String getProjectReserveId() {
+        return projectReserveId;
+    }
+
+    public void setProjectReserveId(String projectReserveId) {
+        this.projectReserveId = projectReserveId;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getStateGridProjectCode() {
+        return stateGridProjectCode;
+    }
+
+    public void setStateGridProjectCode(String stateGridProjectCode) {
+        this.stateGridProjectCode = stateGridProjectCode;
+    }
+
+    public String getStateGridProjectName() {
+        return stateGridProjectName;
+    }
+
+    public void setStateGridProjectName(String stateGridProjectName) {
+        this.stateGridProjectName = stateGridProjectName;
+    }
+
+    public String getConstructionNecessityAndContent() {
+        return constructionNecessityAndContent;
+    }
+
+    public void setConstructionNecessityAndContent(String constructionNecessityAndContent) {
+        this.constructionNecessityAndContent = constructionNecessityAndContent;
+    }
+
+    public String getSubstationName() {
+        return substationName;
+    }
+
+    public void setSubstationName(String substationName) {
+        this.substationName = substationName;
+    }
+
+    public String getCircuitName() {
+        return circuitName;
+    }
+
+    public void setCircuitName(String circuitName) {
+        this.circuitName = circuitName;
+    }
+
+    public String getNetRackProjectDivide() {
+        return netRackProjectDivide;
+    }
+
+    public void setNetRackProjectDivide(String netRackProjectDivide) {
+        this.netRackProjectDivide = netRackProjectDivide;
+    }
+
+    public String getRequirementType() {
+        return requirementType;
+    }
+
+    public void setRequirementType(String requirementType) {
+        this.requirementType = requirementType;
+    }
+
+    public String getProjectType() {
+        return projectType;
+    }
+
+    public void setProjectType(String projectType) {
+        this.projectType = projectType;
+    }
+
+    public String getCostEstimate() {
+        return costEstimate;
+    }
+
+    public void setCostEstimate(String costEstimate) {
+        this.costEstimate = costEstimate;
+    }
+
+    public String getReserveProgress() {
+        return reserveProgress;
+    }
+
+    public void setReserveProgress(String reserveProgress) {
+        this.reserveProgress = reserveProgress;
+    }
+
+    public String getImplementPlan() {
+        return implementPlan;
+    }
+
+    public void setImplementPlan(String implementPlan) {
+        this.implementPlan = implementPlan;
+    }
+
+    public String getImplementBatch() {
+        return implementBatch;
+    }
+
+    public void setImplementBatch(String implementBatch) {
+        this.implementBatch = implementBatch;
+    }
+
+    public String getMaterialName() {
+        return materialName;
+    }
+
+    public void setMaterialName(String materialName) {
+        this.materialName = materialName;
+    }
+
+    public String getSpecificationAndModel() {
+        return specificationAndModel;
+    }
+
+    public void setSpecificationAndModel(String specificationAndModel) {
+        this.specificationAndModel = specificationAndModel;
+    }
+
+    public String getMaterialDescription() {
+        return materialDescription;
+    }
+
+    public void setMaterialDescription(String materialDescription) {
+        this.materialDescription = materialDescription;
+    }
+
+    public String getNumber() {
+        return number;
+    }
+
+    public void setNumber(String number) {
+        this.number = number;
+    }
+
+    public String getParameter() {
+        return parameter;
+    }
+
+    public void setParameter(String parameter) {
+        this.parameter = parameter;
+    }
+
+    @Override
+    public String getRemarks() {
+        return remarks;
+    }
+
+    @Override
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+}

+ 8 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/NormativeAuditMapper.java

@@ -3,6 +3,7 @@ package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper;
 import com.jeeplus.core.persistence.BaseMapper;
 import com.jeeplus.core.persistence.annotation.MyBatisMapper;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.DocumentInfo;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.AuditForm;
 import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
 import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.NormativeAudit;
 
@@ -37,6 +38,13 @@ public interface NormativeAuditMapper extends BaseMapper<NormativeAudit> {
     List<NormativeAudit> exportFindList(NormativeAudit audit);
 
     /**
+     * 导出数据查询
+     * @param audit
+     * @return
+     */
+    AuditForm exportFindAuditFormList(AuditForm audit);
+
+    /**
      * 根据projectReserveId来判断是否有拆旧清册数据
      * @param projectReserveId
      * @return

+ 44 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/PlotProgressStatsMapper.java

@@ -0,0 +1,44 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.BudgetStats;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.PlotProgressStats;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author 王强
+ * @version 1.0
+ * @date 2023-10-08 9:26
+ */
+@MyBatisMapper
+public interface PlotProgressStatsMapper extends BaseMapper<PlotProgressStats> {
+
+    /**
+     * 根据项目储备id删除对应数据
+     * @param proId
+     */
+    void deleteByProId(String proId);
+
+    /**
+     * 获取所有的  项目储备编号
+     * @return
+     */
+    List<String> getAllProId();
+
+    /**
+     * 导出数据查询
+     * @param budgetStats
+     * @return
+     */
+    List<PlotProgressStats> exportFindList(PlotProgressStats budgetStats);
+
+    /**
+     * 批量添加储备项目出图进度统计表信息
+     * @param list
+     * @return
+     */
+    void insertList(@Param("list") List<PlotProgressStats> list);
+}

+ 52 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/SpecialParameterStatsMapper.java

@@ -0,0 +1,52 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.MaterialData;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialParameterStats;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author 王强
+ * @version 1.0
+ * @date 2023-10-08 15:23
+ */
+@MyBatisMapper
+public interface SpecialParameterStatsMapper extends BaseMapper<SpecialParameterStats> {
+
+    /**
+     * 根据项目储备id删除对应数据
+     * @param proId
+     */
+    void deleteByProId(String proId);
+
+    /**
+     * 获取所有的  项目储备编号
+     * @return
+     */
+    List<String> getAllProId();
+
+    /**
+     * 导出数据查询
+     * @param budgetStats
+     * @return
+     */
+    List<SpecialParameterStats> exportFindList(SpecialParameterStats budgetStats);
+
+    /**
+     * 批量添加储备项目出图进度统计表信息
+     * @param list
+     * @return
+     */
+    void insertList(@Param("list") List<SpecialParameterStats> list);
+
+    /**
+     * 获取所有的在线开甲供材物料数据
+     * @return
+     */
+    List<MaterialData> getAllMaterialData();
+
+    void deleteById(String id);
+}

+ 59 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/NormativeAuditMapper.xml

@@ -46,6 +46,65 @@
 		IFNULL(d.projectManagerOtherProblem,"") as projectManagerOtherProblem,
 		tv.projectNatureArtificial AS projectNature
     </sql>
+
+    <sql id="auditFormColumns">
+        a.projectYear,
+        a.reserveBatches,
+        a.projectReserveId,
+        a.projectName,
+        a.ownerReserveProjectManagre as projectManager,
+        b.noStopWorkPlan,
+        b.hotLineWorkTypeNo,
+        b.siteSurveyor,
+        b.reasonsForNotWorkInterruption,
+        c.completeDiscloseTime,
+        c.otherProblemDescribe,
+        IFNULL(e.officeProgress,"") as officeProgress,
+        IFNULL(d.preferedCase,"") as reviewMaterial,
+		IFNULL(d.transferSituation,"") as aSupplyTob,
+		IFNULL(d.budgetTemplateCheck,"") as templateCorrect,
+		IFNULL(d.quotaApplicationCheck,"") as correctApplication,
+		IFNULL(d.workLoadCheck,"") as workloadConsistent,
+		IFNULL(d.checkTheFee,"") as feeCorrect,
+		IFNULL(d.supplyCheck,"") as materialSupplyA,
+		IFNULL(d.materialCheck,"") as materialSupplyB,
+		IFNULL(d.liveWorkFeeCheck,"") as chargeLiveWork,
+		IFNULL(d.demolitionEngineeringProblems,"") as chargeDemolitionWork,
+		IFNULL(d.otherProblem,"") as otherProblem,
+		IFNULL(d.drawingAndSiteProblem,"") as drawingAndSiteProblem,
+		IFNULL(d.communicationProblem,"") as communicationProblem,
+		IFNULL(d.civilPrefabricateProblem,"") as civilPrefabricateProblem,
+		IFNULL(d.liveWorkNumProblem,"") as liveWorkNumProblem,
+		IFNULL(d.projectManagerOtherProblem,"") as projectManagerOtherProblem
+    </sql>
+
+    <select id="exportFindAuditFormList"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.AuditForm">
+        select
+        <include refid="auditFormColumns"/>
+        from cg_reserve_process a
+        left join cg_reserve_electricity_work_information b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_reserve_summary_statistics c
+        on a.projectReserveId = c.projectReserveId
+        left join cg_feedback_on_budget d
+        on a.projectReserveId = d.projectReserveId
+        left join cg_reserve_policy_handing_information e
+        on a.projectReserveId = e.projectReserveId
+        <where>
+            a.del_flag = 0
+            <if test="projectReserveId!=null and projectReserveId!=''">
+                and a.projectReserveId like concat('%', #{projectReserveId}, '%')
+            </if>
+            <if test="projectName!=null and projectName!=''">
+                and a.projectName like concat('%', #{projectName}, '%')
+            </if>
+            <if test="dataScope != null and dataScope != ''">
+                ${dataScope}
+            </if>
+        </where>
+    </select>
+
     <update id="updateDocumentInfo">
         update cg_document_info set
         update_by = #{updateBy.id},

+ 149 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/PlotProgressStatsMapper.xml

@@ -0,0 +1,149 @@
+<?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.cg.reservemanagementcenter.statisticalTable.mapper.PlotProgressStatsMapper">
+
+    <sql id="reserveManagementColumns">
+        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.del_flag AS "delFlag",
+		a.projectYear,
+		a.demandUnit,
+		a.district,
+		a.projectGroup,
+		a.reserveBatches,
+		a.blockSupply,
+		a.gridNumber,
+		a.cellNumber,
+		a.projectReserveId,
+		a.projectName,
+		a.constructionNecessityAndContent,
+		a.ownerReserveProjectManagre as projectManager,
+		a.substationName,
+		a.circuitName,
+		a.netRackProjectDivide,
+		a.requirementType,
+		a.costEstimate,
+		a.basicRemarks,
+		IFNULL(b.paper_drawing,"") as paperDrawing,
+		IFNULL(b.paper_drawing_time,"") as paperDrawingTime,
+		IFNULL(b.plan_and_approval_drawing,"") as planAndApprovalDrawing,
+		IFNULL(b.plan_and_approval_drawing_time,"") as planAndApprovalDrawingTime,
+		IFNULL(b.remarks,"") as remarks,
+		IFNULL(c.implementPlan,"") as implementPlan,
+		IFNULL(c.implementBatchScreen,"") as implementBatch
+    </sql>
+    <insert id="insertList">
+        insert into cg_plot_progress_stats (
+        id,
+        create_by,
+        create_date,
+        update_by,
+        update_date,
+        del_flag,
+        projectReserveId,
+        paper_drawing,
+        paper_drawing_time,
+        plan_and_approval_drawing,
+        plan_and_approval_drawing_time,
+        remarks
+        )
+        values
+        <foreach collection="list" item="item" index="index" separator="," >
+            (
+            #{item.id},
+            #{item.createBy.id},
+            #{item.createDate},
+            #{item.updateBy.id},
+            #{item.updateDate},
+            #{item.delFlag},
+            #{item.projectReserveId},
+            #{item.paperDrawing},
+            #{item.paperDrawingTime},
+            #{item.planAndApprovalDrawing},
+            #{item.planAndApprovalDrawingTime},
+            #{item.remarks}
+            )
+        </foreach>
+    </insert>
+
+    <delete id="deleteByProId">
+        delete from cg_plot_progress_stats where projectReserveId = #{proId}
+    </delete>
+
+    <select id="getAllProId" resultType="java.lang.String">
+        select projectReserveId from cg_reserve_process
+    </select>
+
+    <select id="get" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.PlotProgressStats">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_reserve_process a
+        left join cg_plot_progress_stats b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_project_screen c
+        on a.projectReserveId = c.projectReserveId
+        where a.id = #{id}
+    </select>
+    <select id="findList" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.PlotProgressStats">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_reserve_process a
+        left join cg_plot_progress_stats b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_project_screen c
+        on a.projectReserveId = c.projectReserveId
+        <where>
+            a.del_flag = 0
+            <if test="projectReserveId!=null and projectReserveId!=''">
+                and a.projectReserveId like concat('%', #{projectReserveId}, '%')
+            </if>
+            <if test="projectName!=null and projectName!=''">
+                and b.projectName like concat('%', #{projectName}, '%')
+            </if>
+            <if test="dataScope != null and dataScope != ''">
+                ${dataScope}
+            </if>
+        </where>
+        <choose>
+            <when test="page !=null and page.orderBy != null and page.orderBy != ''">
+                ORDER BY ${page.orderBy}
+            </when>
+            <otherwise>
+                ORDER BY a.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
+    <select id="exportFindList"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.PlotProgressStats">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_reserve_process a
+        left join cg_plot_progress_stats b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_project_screen c
+        on a.projectReserveId = c.projectReserveId
+        <where>
+            a.del_flag = 0
+            <if test="projectReserveId!=null and projectReserveId!=''">
+                and a.projectReserveId like concat('%', #{projectReserveId}, '%')
+            </if>
+            <if test="projectName!=null and projectName!=''">
+                and b.projectName like concat('%', #{projectName}, '%')
+            </if>
+            <if test="dataScope != null and dataScope != ''">
+                ${dataScope}
+            </if>
+        </where>
+        <choose>
+            <when test="page !=null and page.orderBy != null and page.orderBy != ''">
+                ORDER BY ${page.orderBy}
+            </when>
+            <otherwise>
+                ORDER BY a.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
+</mapper>

+ 160 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/SpecialParameterStatsMapper.xml

@@ -0,0 +1,160 @@
+<?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.cg.reservemanagementcenter.statisticalTable.mapper.SpecialParameterStatsMapper">
+
+    <sql id="reserveManagementColumns">
+        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.del_flag AS "delFlag",
+		a.projectYear,
+		a.demandUnit,
+		a.district,
+		a.projectGroup,
+		a.reserveBatches,
+		a.blockSupply,
+		a.gridNumber,
+		a.cellNumber,
+		a.projectReserveId,
+		a.projectName,
+		a.constructionNecessityAndContent,
+		a.ownerReserveProjectManagre as projectManager,
+		a.substationName,
+		a.circuitName,
+		a.netRackProjectDivide,
+		a.requirementType,
+		a.costEstimate,
+		a.basicRemarks,
+		IFNULL(b.material_name,"") as materialName,
+		IFNULL(b.id,"") as speId,
+		IFNULL(b.specification_and_model,"") as specificationAndModel,
+		IFNULL(b.material_description,"") as materialDescription,
+		IFNULL(b.number,"") as number,
+		IFNULL(b.parameter,"") as parameter,
+		IFNULL(b.remarks,"") as remarks,
+		IFNULL(c.implementPlan,"") as implementPlan,
+		IFNULL(c.implementBatchScreen,"") as implementBatch
+    </sql>
+	<insert id="insertList">
+		insert into cg_special_parameter_stats (
+		id,
+		create_by,
+		create_date,
+		update_by,
+		update_date,
+		del_flag,
+		projectReserveId,
+		material_name,
+		specification_and_model,
+		material_description,
+		number,
+		parameter,
+		remarks
+		)
+		values
+		<foreach collection="list" item="item" index="index" separator="," >
+			(
+			#{item.id},
+			#{item.createBy.id},
+			#{item.createDate},
+			#{item.updateBy.id},
+			#{item.updateDate},
+			#{item.delFlag},
+			#{item.projectReserveId},
+			#{item.materialName},
+			#{item.specificationAndModel},
+			#{item.materialDescription},
+			#{item.number},
+			#{item.parameter},
+			#{item.remarks}
+			)
+		</foreach>
+	</insert>
+	<delete id="deleteByProId">
+		delete from cg_special_parameter_stats where projectReserveId = #{proId}
+	</delete>
+	<delete id="deleteById">
+		delete from cg_special_parameter_stats where id = #{id}
+	</delete>
+
+	<select id="get" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialParameterStats">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_reserve_process a
+        left join cg_special_parameter_stats b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_project_screen c
+        on a.projectReserveId = c.projectReserveId
+        where a.id = #{id}
+    </select>
+
+	<select id="findList" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialParameterStats">
+		select
+		<include refid="reserveManagementColumns"/>
+		from cg_reserve_process a
+		left join cg_special_parameter_stats b
+		on a.projectReserveId = b.projectReserveId
+		left join cg_project_screen c
+		on a.projectReserveId = c.projectReserveId
+		<where>
+			a.del_flag = 0
+			<if test="projectReserveId!=null and projectReserveId!=''">
+				and a.projectReserveId like concat('%', #{projectReserveId}, '%')
+			</if>
+			<if test="projectName!=null and projectName!=''">
+				and b.projectName like concat('%', #{projectName}, '%')
+			</if>
+			<if test="dataScope != null and dataScope != ''">
+				${dataScope}
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY b.number DESC
+			</otherwise>
+		</choose>
+	</select>
+	<select id="getAllProId" resultType="java.lang.String">
+		select projectReserveId from cg_reserve_process
+	</select>
+	<select id="exportFindList"
+			resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialParameterStats">
+		select
+		<include refid="reserveManagementColumns"/>
+		from cg_reserve_process a
+		left join cg_special_parameter_stats b
+		on a.projectReserveId = b.projectReserveId
+		left join cg_project_screen c
+		on a.projectReserveId = c.projectReserveId
+		<where>
+			a.del_flag = 0
+			<if test="projectReserveId!=null and projectReserveId!=''">
+				and a.projectReserveId like concat('%', #{projectReserveId}, '%')
+			</if>
+			<if test="projectName!=null and projectName!=''">
+				and b.projectName like concat('%', #{projectName}, '%')
+			</if>
+			<if test="dataScope != null and dataScope != ''">
+				${dataScope}
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	<select id="getAllMaterialData"
+			resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.MaterialData">
+		select projectName,remarks,materialCode,materialName,extendDescription,unit,totalCount,weightKg,weightTon,supplyType,note
+		from cg_material_data where del_flag = '0'
+	</select>
+</mapper>

+ 6 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/NormativeAuditService.java

@@ -3,6 +3,7 @@ package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service;
 import com.jeeplus.core.persistence.Page;
 import com.jeeplus.core.service.CrudService;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.DocumentInfo;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.AuditForm;
 import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
 import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.NormativeAudit;
 import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper.NormativeAuditMapper;
@@ -53,6 +54,11 @@ public class NormativeAuditService extends CrudService<NormativeAuditMapper, Nor
         return pageList;
     }
 
+    public AuditForm exportFindAuditFormList(AuditForm auditForm) {
+        AuditForm auditForm1 = auditMapper.exportFindAuditFormList(auditForm);
+        return auditForm1;
+    }
+
     public int getCountByProjectReserveId(String projectReserveId){
         return auditMapper.getCountByProjectReserveId(projectReserveId);
     }

+ 69 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/PlotProgressStatsService.java

@@ -0,0 +1,69 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service;
+
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.BudgetStats;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.PlotProgressStats;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper.PlotProgressStatsMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @author 王强
+ * @version 1.0
+ * @date 2023-10-08 9:28
+ */
+@Service
+@Transactional(readOnly = true)
+public class PlotProgressStatsService extends CrudService<PlotProgressStatsMapper, PlotProgressStats> {
+
+    @Autowired
+    private PlotProgressStatsMapper dao;
+
+
+    /**
+     * 根据项目储备编号删除方法
+     * @param proId
+     */
+    @Transactional(readOnly = false)
+    public void deleteByProId(String proId) {
+        dao.deleteByProId(proId);
+    }
+
+    /**
+     * 获取所有的  项目储备编号
+     * @return
+     */
+    public List<String> getAllProId(){
+        return dao.getAllProId();
+    }
+
+    @Transactional(readOnly = false)
+    public void insertList(@Param("list") List<PlotProgressStats> list){
+        List<PlotProgressStats> statsList = dao.exportFindList(null);
+        for(PlotProgressStats budgetStats : list){
+            statsList.forEach(sta->{
+                if (sta.getProjectReserveId().equals(budgetStats.getProjectReserveId())){
+                    dao.deleteByProId(sta.getProjectReserveId());
+                }
+            });
+            budgetStats.preInsert();
+        }
+
+        dao.insertList(list);
+    }
+
+    public List<PlotProgressStats> exportFindList(PlotProgressStats budgetStats) {
+        List<PlotProgressStats> pageList = dao.exportFindList(budgetStats);
+        return pageList;
+    }
+
+    public Page<PlotProgressStats> findPage(Page<PlotProgressStats> page, PlotProgressStats budgetStats) {
+        Page<PlotProgressStats> pageList = super.findPage(page, budgetStats);
+        return pageList;
+    }
+}

+ 87 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/SpecialParameterStatsService.java

@@ -0,0 +1,87 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service;
+
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.MaterialData;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialParameterStats;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper.SpecialParameterStatsMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @author 王强
+ * @version 1.0
+ * @date 2023-10-08 15:24
+ */
+@Service
+@Transactional(readOnly = true)
+public class SpecialParameterStatsService extends CrudService<SpecialParameterStatsMapper, SpecialParameterStats> {
+
+    @Autowired
+    private SpecialParameterStatsMapper dao;
+
+    public Page<SpecialParameterStats> findPage(Page<SpecialParameterStats> page, SpecialParameterStats budgetStats) {
+        Page<SpecialParameterStats> pageList = super.findPage(page, budgetStats);
+        return pageList;
+    }
+
+    /**
+     * 根据项目储备编号删除方法
+     * @param proId
+     */
+    @Transactional(readOnly = false)
+    public void deleteByProId(String proId) {
+        dao.deleteByProId(proId);
+    }
+
+    /**
+     * 删除方法
+     * @param id
+     */
+    @Transactional(readOnly = false)
+    public void deleteById(String id) {
+        dao.deleteById(id);
+    }
+
+    /**
+     * 获取所有的  项目储备编号
+     * @return
+     */
+    public List<String> getAllProId(){
+        return dao.getAllProId();
+    }
+
+    @Transactional(readOnly = false)
+    public void insertList(@Param("list") List<SpecialParameterStats> list){
+        List<SpecialParameterStats> statsList = dao.exportFindList(null);
+        for(SpecialParameterStats budgetStats : list){
+            statsList.forEach(sta->{
+                if (sta.getProjectReserveId().equals(budgetStats.getProjectReserveId())){
+                    dao.deleteByProId(sta.getProjectReserveId());
+                }
+            });
+            // 生成id值
+            budgetStats.preInsert();
+            String id = UUID.randomUUID().toString().replace("-", "");
+            budgetStats.setId(id);
+
+
+        }
+
+        dao.insertList(list);
+    }
+
+    public List<SpecialParameterStats> exportFindList(SpecialParameterStats budgetStats) {
+        List<SpecialParameterStats> pageList = dao.exportFindList(budgetStats);
+        return pageList;
+    }
+
+    public List<MaterialData> getAllMaterialData() {
+        return dao.getAllMaterialData();
+    }
+}

+ 304 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/util/ExcelExportUtil.java

@@ -292,6 +292,208 @@ public class ExcelExportUtil {
     }
 
     /**
+     * 导出储备项目概预算统计表信息
+     * @param response
+     * @param workbook
+     * @param list
+     */
+    public void exportProgressStats(HttpServletResponse response, XSSFWorkbook workbook, List<PlotProgressStats> list){
+        try {
+            int index = 1;//第一列序号
+            int rowNum = 2;//数据起始列
+            Sheet sheet = workbook.getSheetAt(0);
+            for(int i=0;i<list.size();i++){
+                Row row = sheet.createRow(rowNum+i);
+                Cell cell0 = crateCell(workbook,row,0); //序号
+                Cell cell1 = crateCell(workbook,row,1); //项目年份
+                Cell cell2 = crateCell(workbook,row,2); //项目性质
+                Cell cell3 = crateCell(workbook,row,3); //需求单位
+                Cell cell4 = crateCell(workbook,row,4); //区域
+                Cell cell5 = crateCell(workbook,row,5); //项目分组
+                Cell cell6 = crateCell(workbook,row,6); //业主储备项目经理
+                Cell cell7 = crateCell(workbook,row,7); //储备批次
+                Cell cell8 = crateCell(workbook,row,8); //供电区域
+                Cell cell9 = crateCell(workbook,row,9); //网格编号
+                Cell cell10 = crateCell(workbook,row,10); //单元格编号
+                Cell cell11 = crateCell(workbook,row,11); //项目储备编号
+                Cell cell12 = crateCell(workbook,row,12); //项目名称
+                Cell cell13 = crateCell(workbook,row,13); //国网项目编码
+                Cell cell14 = crateCell(workbook,row,14); //国网项目名称
+                Cell cell15 = crateCell(workbook,row,15); //建设必要性及内容
+                Cell cell16 = crateCell(workbook,row,16); //变电站名称
+                Cell cell17 = crateCell(workbook,row,17); //线路名称
+                Cell cell18 = crateCell(workbook,row,18); //网架项目划分
+                Cell cell19 = crateCell(workbook,row,19); //需求类型
+                Cell cell20 = crateCell(workbook,row,20); //费用估算
+                Cell cell21 = crateCell(workbook,row,21); //备注
+
+                Cell cell22 = crateCell(workbook,row,22); //储备进度
+                Cell cell23 = crateCell(workbook,row,23); //是否纳入实施计划
+                Cell cell24 = crateCell(workbook,row,24); //初定实施批次
+                Cell cell25 = crateCell(workbook,row,25); //是否需出纸质图
+                Cell cell26 = crateCell(workbook,row,26); //要求移交纸质图纸时间
+                Cell cell27 = crateCell(workbook,row,27); //是否移交纸质图
+                Cell cell28 = crateCell(workbook,row,28); //纸质图移交时间
+                Cell cell29 = crateCell(workbook,row,29); //是否需出规划报批图
+                Cell cell30 = crateCell(workbook,row,30); //要求移交规划报批图时间
+                Cell cell31 = crateCell(workbook,row,31); //是否移交规划报批图
+                Cell cell32 = crateCell(workbook,row,32); //规划报批图移交时间
+                Cell cell33 = crateCell(workbook,row,33); //备注
+
+                PlotProgressStats budgetStats = list.get(i);
+
+                cell0.setCellValue(String.valueOf(index++));
+                cell1.setCellValue(budgetStats.getProjectYear());
+                cell2.setCellValue(budgetStats.getProjectNature());
+                cell3.setCellValue(budgetStats.getDemandUnit());
+                cell4.setCellValue(budgetStats.getDistrict());
+                cell5.setCellValue(budgetStats.getProjectGroup());
+                cell6.setCellValue(budgetStats.getProjectManager());
+                cell7.setCellValue(budgetStats.getReserveBatches());
+                cell8.setCellValue(budgetStats.getBlockSupply());
+                cell9.setCellValue(budgetStats.getGridNumber());
+                cell10.setCellValue(budgetStats.getCellNumber());
+                cell11.setCellValue(budgetStats.getProjectReserveId());
+                cell12.setCellValue(budgetStats.getProjectName());
+                cell13.setCellValue(budgetStats.getStateGridProjectCode());
+                cell14.setCellValue(budgetStats.getStateGridProjectName());
+                cell15.setCellValue(budgetStats.getConstructionNecessityAndContent());
+                cell16.setCellValue(budgetStats.getSubstationName());
+                cell17.setCellValue(budgetStats.getCircuitName());
+                cell18.setCellValue(budgetStats.getNetRackProjectDivide());
+                cell19.setCellValue(budgetStats.getRequirementType());
+
+                String costEstimateStr= budgetStats.getCostEstimate();
+                if(StringUtils.isNotEmpty(costEstimateStr)){
+                    cell20.setCellValue(Double.parseDouble(costEstimateStr));
+                }
+                cell21.setCellValue(budgetStats.getBasicRemarks());
+                cell22.setCellValue(budgetStats.getReserveProgress());
+                cell23.setCellValue(budgetStats.getImplementPlan());
+                cell24.setCellValue(budgetStats.getImplementBatch());
+                cell25.setCellValue(budgetStats.getNeedPaperDrawing());
+                cell26.setCellValue(budgetStats.getAskPaperDrawingTime());
+                cell27.setCellValue(budgetStats.getPaperDrawing());
+                cell28.setCellValue(budgetStats.getPaperDrawingTime());
+                cell29.setCellValue(budgetStats.getArrivePlanAndApprovalDrawing());
+                cell30.setCellValue(budgetStats.getAskPlanAndApprovalDrawingTime());
+                cell31.setCellValue(budgetStats.getPlanAndApprovalDrawing());
+                cell32.setCellValue(budgetStats.getPlanAndApprovalDrawingTime());
+                cell33.setCellValue(budgetStats.getRemarks());
+            }
+
+            String str = URLEncoder.encode("储备项目出图进度统计表.xlsx", "UTF8");
+            response.setHeader("Content-Disposition", "attachment;filename="+str);
+            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+            OutputStream outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+            outputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 导出储备项目设计特殊物资参数统计表信息
+     * @param response
+     * @param workbook
+     * @param list
+     */
+    public void exportSpecialParameterStats(HttpServletResponse response, XSSFWorkbook workbook, List<SpecialParameterStats> list){
+        try {
+            int index = 1;//第一列序号
+            int rowNum = 2;//数据起始列
+            Sheet sheet = workbook.getSheetAt(0);
+            for(int i=0;i<list.size();i++){
+                Row row = sheet.createRow(rowNum+i);
+                Cell cell0 = crateCell(workbook,row,0); //序号
+                Cell cell1 = crateCell(workbook,row,1); //项目年份
+                Cell cell2 = crateCell(workbook,row,2); //项目性质
+                Cell cell3 = crateCell(workbook,row,3); //需求单位
+                Cell cell4 = crateCell(workbook,row,4); //区域
+                Cell cell5 = crateCell(workbook,row,5); //项目分组
+                Cell cell6 = crateCell(workbook,row,6); //业主储备项目经理
+                Cell cell7 = crateCell(workbook,row,7); //储备批次
+                Cell cell8 = crateCell(workbook,row,8); //供电区域
+                Cell cell9 = crateCell(workbook,row,9); //网格编号
+                Cell cell10 = crateCell(workbook,row,10); //单元格编号
+                Cell cell11 = crateCell(workbook,row,11); //项目储备编号
+                Cell cell12 = crateCell(workbook,row,12); //项目名称
+                Cell cell13 = crateCell(workbook,row,13); //国网项目编码
+                Cell cell14 = crateCell(workbook,row,14); //国网项目名称
+                Cell cell15 = crateCell(workbook,row,15); //建设必要性及内容
+                Cell cell16 = crateCell(workbook,row,16); //变电站名称
+                Cell cell17 = crateCell(workbook,row,17); //线路名称
+                Cell cell18 = crateCell(workbook,row,18); //网架项目划分
+                Cell cell19 = crateCell(workbook,row,19); //需求类型
+                Cell cell20 = crateCell(workbook,row,20); //项目类型
+                Cell cell21 = crateCell(workbook,row,21); //费用估算
+
+                Cell cell22 = crateCell(workbook,row,22); //储备进度
+                Cell cell23 = crateCell(workbook,row,23); //是否纳入实施计划
+                Cell cell24 = crateCell(workbook,row,24); //初定实施批次
+
+                Cell cell25 = crateCell(workbook,row,25); //物资名称
+                Cell cell26 = crateCell(workbook,row,26); //规格型号
+                Cell cell27 = crateCell(workbook,row,27); //物资描述
+                Cell cell28 = crateCell(workbook,row,28); //数量
+                Cell cell29 = crateCell(workbook,row,29); //参数
+                Cell cell30 = crateCell(workbook,row,30); //备注
+
+                SpecialParameterStats budgetStats = list.get(i);
+
+                cell0.setCellValue(String.valueOf(index++));
+                cell1.setCellValue(budgetStats.getProjectYear());
+                cell2.setCellValue(budgetStats.getProjectNature());
+                cell3.setCellValue(budgetStats.getDemandUnit());
+                cell4.setCellValue(budgetStats.getDistrict());
+                cell5.setCellValue(budgetStats.getProjectGroup());
+                cell6.setCellValue(budgetStats.getProjectManager());
+                cell7.setCellValue(budgetStats.getReserveBatches());
+                cell8.setCellValue(budgetStats.getBlockSupply());
+                cell9.setCellValue(budgetStats.getGridNumber());
+                cell10.setCellValue(budgetStats.getCellNumber());
+                cell11.setCellValue(budgetStats.getProjectReserveId());
+                cell12.setCellValue(budgetStats.getProjectName());
+                cell13.setCellValue(budgetStats.getStateGridProjectCode());
+                cell14.setCellValue(budgetStats.getStateGridProjectName());
+                cell15.setCellValue(budgetStats.getConstructionNecessityAndContent());
+                cell16.setCellValue(budgetStats.getSubstationName());
+                cell17.setCellValue(budgetStats.getCircuitName());
+                cell18.setCellValue(budgetStats.getNetRackProjectDivide());
+                cell19.setCellValue(budgetStats.getRequirementType());
+                cell20.setCellValue(budgetStats.getProjectType());
+
+                String costEstimateStr= budgetStats.getCostEstimate();
+                if(StringUtils.isNotEmpty(costEstimateStr)){
+                    cell21.setCellValue(Double.parseDouble(costEstimateStr));
+                }
+                cell22.setCellValue(budgetStats.getReserveProgress());
+                cell23.setCellValue(budgetStats.getImplementPlan());
+                cell24.setCellValue(budgetStats.getImplementBatch());
+
+                cell25.setCellValue(budgetStats.getMaterialName());
+                cell26.setCellValue(budgetStats.getSpecificationAndModel());
+                cell27.setCellValue(budgetStats.getMaterialDescription());
+                cell28.setCellValue(budgetStats.getNumber());
+                cell29.setCellValue(budgetStats.getParameter());
+                cell30.setCellValue(budgetStats.getRemarks());
+            }
+
+            String str = URLEncoder.encode("储备项目出图进度统计表.xlsx", "UTF8");
+            response.setHeader("Content-Disposition", "attachment;filename="+str);
+            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+            OutputStream outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+            outputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
      * 导出储备进度统计表信息
      * @param response
      * @param workbook
@@ -970,4 +1172,106 @@ public class ExcelExportUtil {
             e.printStackTrace();
         }
     }
+
+    /**
+     * 导出规范性审核单
+     * @param response
+     * @param workbook
+     * @param auditForm
+     */
+    public void exportAuditForm(HttpServletResponse response, XSSFWorkbook workbook, AuditForm auditForm){
+        try {
+            Sheet sheet = workbook.getSheetAt(0);
+
+            Row row = sheet.getRow(1);
+            Cell cell = row.getCell(1);
+            cell.setCellValue(auditForm.getProjectYear());
+            cell = row.getCell(3);
+            cell.setCellValue(auditForm.getReserveBatches());
+            cell = row.getCell(5);
+            cell.setCellValue(auditForm.getProjectReserveId());
+
+            row = sheet.getRow(2);
+            cell = row.getCell(1);
+            cell.setCellValue(auditForm.getProjectName());
+
+            row = sheet.getRow(4);
+            cell = row.getCell(3);
+            cell.setCellValue(auditForm.getNoStopWorkPlan());
+            cell = row.getCell(5);
+            cell.setCellValue(auditForm.getHotLineWorkTypeNo());
+            cell = row.getCell(7);
+            cell.setCellValue(auditForm.getSiteSurveyor());
+
+            row = sheet.getRow(5);
+            cell = row.getCell(4);
+            cell.setCellValue(auditForm.getReasonsForNotWorkInterruption());
+            cell = row.getCell(7);
+            cell.setCellValue(auditForm.getProjectManager());
+
+            row = sheet.getRow(7);
+            cell = row.getCell(1);
+            cell.setCellValue(auditForm.getCompleteDiscloseTime());
+            cell = row.getCell(3);
+            cell.setCellValue(auditForm.getProjectManager());
+
+            row = sheet.getRow(10);
+            cell = row.getCell(1);
+            cell.setCellValue(auditForm.getOfficeProgress());
+
+            row = sheet.getRow(11);
+            cell = row.getCell(4);
+            cell.setCellValue(auditForm.getOtherProblemDescribe());
+
+            row = sheet.getRow(15);
+            cell = row.getCell(5);
+            cell.setCellValue(auditForm.getProjectManager());
+
+            row = sheet.getRow(16);
+            cell = row.getCell(2);
+            cell.setCellValue(auditForm.getReviewMaterial());
+            cell = row.getCell(5);
+            cell.setCellValue(auditForm.getaSupplyTob());
+
+            row = sheet.getRow(17);
+            cell = row.getCell(2);
+            cell.setCellValue(auditForm.getTemplateCorrect());
+            cell = row.getCell(5);
+            cell.setCellValue(auditForm.getCorrectApplication());
+
+            row = sheet.getRow(18);
+            cell = row.getCell(2);
+            cell.setCellValue(auditForm.getWorkloadConsistent());
+            cell = row.getCell(5);
+            cell.setCellValue(auditForm.getFeeCorrect());
+
+            row = sheet.getRow(19);
+            cell = row.getCell(2);
+            cell.setCellValue(auditForm.getMaterialSupplyA());
+            cell = row.getCell(5);
+            cell.setCellValue(auditForm.getMaterialSupplyB());
+
+            row = sheet.getRow(20);
+            cell = row.getCell(2);
+            cell.setCellValue(auditForm.getChargeLiveWork());
+            cell = row.getCell(5);
+            cell.setCellValue(auditForm.getChargeDemolitionWork());
+
+            row = sheet.getRow(21);
+            cell = row.getCell(2);
+            cell.setCellValue(auditForm.getOtherProblem());
+            cell = row.getCell(5);
+            cell.setCellValue(auditForm.getReserveProgress());
+
+            String str = URLEncoder.encode("储备项目规范性审核记录表.xlsx", "UTF8");
+            response.setHeader("Content-Disposition", "attachment;filename="+str);
+            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+            OutputStream outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+            outputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
 }

+ 307 - 4
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/util/ExcelImportUtil.java

@@ -3,13 +3,19 @@ package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.util;
 import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.*;
 import com.jeeplus.modules.sg.managementcenter.materialproject.util.ImportUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
-
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.BeanUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * @author: 王强
@@ -109,6 +115,303 @@ public class ExcelImportUtil {
     }
 
     /**
+     * 储备项目出图进度统计表
+     *
+     * @param importUtil
+     * @return List<PlotProgressStats> 导入表格数据
+     */
+    public static List<PlotProgressStats> getPlotProgressUtil(ImportUtil importUtil,List<String> proIdList) throws Exception {
+        int lastRow = importUtil.getLastDataRowNum();
+        List<PlotProgressStats> list = new ArrayList<PlotProgressStats>();
+        PlotProgressStats budgetStats = null;
+
+        for(int i=2; i<=lastRow;i++) {
+            budgetStats = new PlotProgressStats();
+            Row row = importUtil.getRow(i);
+
+//            String reserveProjectName = (String) importUtil.getCellValue(row, 1);
+            //获取项目储备编号
+            String projectReserveId = (String) importUtil.getCellValue(row, 11);
+            if (StringUtils.isNotBlank(projectReserveId)) {
+
+                budgetStats.setProjectReserveId((String) importUtil.getCellValue(row, 11));
+                budgetStats.setPaperDrawing((String) importUtil.getCellValue(row, 27));
+                budgetStats.setPaperDrawingTime((String) importUtil.getCellValue(row, 28));
+                budgetStats.setPlanAndApprovalDrawing((String) importUtil.getCellValue(row, 31));
+                budgetStats.setPlanAndApprovalDrawingTime((String) importUtil.getCellValue(row, 32));
+                budgetStats.setRemarks((String) importUtil.getCellValue(row, 33));
+                //和基本信息表比对,是否有对应的数据
+                getBmList2(proIdList,budgetStats.getProjectReserveId());
+
+                list.add(budgetStats);
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 储备项目设计特殊物资参数统计表
+     *
+     * @param importUtil
+     * @return List<SpecialParameterStats> 导入表格数据
+     */
+    public static List<SpecialParameterStats> getSpecialParameterStatsUtil(MultipartFile file,ImportUtil importUtil, List<String> proIdList, Map<String, List<MaterialData>> materialDataMap) throws Exception {
+
+        int lastRow = importUtil.getLastDataRowNum();
+        List<SpecialParameterStats> list = new ArrayList<SpecialParameterStats>();
+        SpecialParameterStats budgetStats = null;
+
+        int bj = 0;
+        int bj2 = 0;
+        for(int i=2; i<=lastRow;i++) {
+            budgetStats = new SpecialParameterStats();
+            Row row = importUtil.getRow(i);
+
+            //获取项目储备编号
+            String projectReserveId = (String) importUtil.getCellValue(row, 11);
+            //当获取到的projectReserveId为空的时候,那么判断是否是最后一行,如果不是最后一行,那么取标记行的值
+            if (StringUtils.isBlank(projectReserveId)){
+                if (bj != 0) {
+                    bj = i - bj2 + 1;
+                    bj2 = i;
+                } else {
+                    bj = i-1;
+                    bj2 = i;
+                }
+                row = importUtil.getRow(bj);
+                Row newRow = importUtil.getRow(i);
+                budgetStats.setProjectReserveId((String) importUtil.getCellValue(row, 11));
+                budgetStats.setProjectName((String) importUtil.getCellValue(row, 12));
+                getBmList2(proIdList,budgetStats.getProjectReserveId());
+
+                budgetStats.setMaterialName((String) importUtil.getCellValue(newRow, 25));
+                budgetStats.setParameter((String) importUtil.getCellValue(newRow, 29));
+                budgetStats.setRemarks((String) importUtil.getCellValue(newRow, 30));
+                if (budgetStats.getMaterialName().equals("箱式变电站") || budgetStats.getMaterialName().equals("低压开关柜")
+                        || budgetStats.getMaterialName().equals("低压分支箱")){
+                    //根据项目名称去materialDataMap中查对应的甲供材数据
+                    //将查出的甲供材信息与提供的编号进行对bi
+                    //最后将物料编码与扩展编码相同的将值添加起来
+                    List<SpecialParameterStats> completeInfos = getCompleteInfo(budgetStats, materialDataMap);
+                    list.addAll(completeInfos);
+                } else {
+                    budgetStats.setSpecificationAndModel((String) importUtil.getCellValue(newRow, 26));
+                    budgetStats.setMaterialDescription((String) importUtil.getCellValue(newRow, 27));
+                    budgetStats.setNumber((String) importUtil.getCellValue(newRow, 28));
+                    list.add(budgetStats);
+                }
+            } else {
+                bj = 0;
+                bj2 = 0;
+            }
+            if (StringUtils.isNotBlank(projectReserveId)) {
+                //和基本信息表比对,是否有对应的数据
+                budgetStats.setProjectReserveId((String) importUtil.getCellValue(row, 11));
+                budgetStats.setProjectName((String) importUtil.getCellValue(row, 12));
+                getBmList2(proIdList,budgetStats.getProjectReserveId());
+
+                budgetStats.setMaterialName((String) importUtil.getCellValue(row, 25));
+                budgetStats.setParameter((String) importUtil.getCellValue(row, 29));
+                budgetStats.setRemarks((String) importUtil.getCellValue(row, 30));
+                if (budgetStats.getMaterialName().equals("箱式变电站") || budgetStats.getMaterialName().equals("低压开关柜")
+                || budgetStats.getMaterialName().equals("低压分支箱")){
+                    //根据项目名称去materialDataMap中查对应的甲供材数据
+                    //将查出的甲供材信息与提供的编号进行对bi
+                    //最后将物料编码与扩展编码相同的将值添加起来
+                    List<SpecialParameterStats> completeInfos = getCompleteInfo(budgetStats, materialDataMap);
+                    list.addAll(completeInfos);
+                } else {
+                    budgetStats.setSpecificationAndModel((String) importUtil.getCellValue(row, 26));
+                    budgetStats.setMaterialDescription((String) importUtil.getCellValue(row, 27));
+                    budgetStats.setNumber((String) importUtil.getCellValue(row, 28));
+                    list.add(budgetStats);
+                }
+
+            }
+        }
+        list.forEach(li->{
+            if (StringUtils.isBlank(li.getProjectReserveId())){
+                try {
+                    throw new Exception("项目储备编号不能为空");
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+        return list;
+    }
+
+    public static List<SpecialParameterStats> getCompleteInfo(SpecialParameterStats budgetStats, Map<String, List<MaterialData>> materialDataMap){
+        List<SpecialParameterStats> stats = new ArrayList<>();
+        //根据项目名称获取对应的在线开甲供材信息
+        List<MaterialData> materialData = materialDataMap.get(budgetStats.getProjectName());
+
+        if (null != materialData) {
+            if (budgetStats.getMaterialName().equals("箱式变电站")) {
+
+                for (int i=0;i<materialData.size();i++) {
+                    SpecialParameterStats parameterStats = new SpecialParameterStats();
+                    BeanUtils.copyProperties(budgetStats,parameterStats);
+
+                    if (materialData.get(i).getMaterialCode().equals("500061873")) {
+                        if (materialData.get(i).getExtendDescription().equals("标准化,环网型,金属外壳,低压组屏,紧凑型,能效2级")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                        if (materialData.get(i).getExtendDescription().equals("标准化,终端型,金属外壳,低压组屏,紧凑型,能效2级")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                        if (materialData.get(i).getExtendDescription().equals("标准化,环网型,金属外壳,低压组屏,标准型,能效2级")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                        if (materialData.get(i).getExtendDescription().equals("标准化,终端型,金属外壳,低压组屏,标准型,能效2级")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                    } else if (materialData.get(i).getMaterialCode().equals("500061857")) {
+                        if (materialData.get(i).getExtendDescription().equals("标准化,环网型,金属外壳,低压组屏,紧凑型,能效2级")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                        if (materialData.get(i).getExtendDescription().equals("标准化,终端型,金属外壳,低压组屏,紧凑型,能效2级")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                        if (materialData.get(i).getExtendDescription().equals("标准化,环网型,金属外壳,低压组屏,标准型,能效2级")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                        if (materialData.get(i).getExtendDescription().equals("标准化,终端型,金属外壳,低压组屏,标准型,能效2级")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                    }
+                }
+            }else if (budgetStats.getMaterialName().equals("低压开关柜")){
+                for (int i=0;i<materialData.size();i++){
+                    SpecialParameterStats parameterStats = new SpecialParameterStats();
+                    BeanUtils.copyProperties(budgetStats,parameterStats);
+                    if (materialData.get(i).getMaterialCode().equals("500006556")){
+                        if (materialData.get(i).getExtendDescription().equals("低压开关柜,AC380V,抽屉式,分段,2500A,65kA。800×1000×2200")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                    } else if (materialData.get(i).getMaterialCode().equals("500006630")){
+                        if (materialData.get(i).getExtendDescription().equals("低压开关柜,AC380V,抽屉式,进线,2500A,65kA。800×1000×2200")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                    } else if (materialData.get(i).getMaterialCode().equals("500006703")){
+                        if (materialData.get(i).getExtendDescription().equals("低压开关柜,AC380V,抽屉式,馈线,2500A,50kA。4×400A+1×160A,600×1000×2200")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                    } else if (materialData.get(i).getMaterialCode().equals("500112470")){
+                        if (materialData.get(i).getExtendDescription().equals("低压电容器柜,AC380V,固定式,130kvar。2000A,智能型,1000×1000×2200")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                    }
+                }
+            } else if (budgetStats.getMaterialName().equals("低压分支箱")) {
+                for (int i=0;i<materialData.size();i++){
+                    SpecialParameterStats parameterStats = new SpecialParameterStats();
+                    BeanUtils.copyProperties(budgetStats,parameterStats);
+                    if (materialData.get(i).getMaterialCode().equals("500107555")){
+                        if (materialData.get(i).getExtendDescription().equals("电缆分支箱,AC400V,条形开关,四路,400A。进线隔离开关400A,出线条形开关,3×250A,304不锈钢,落地式,户外")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                    } else if (materialData.get(i).getMaterialCode().equals("500107558")){
+                        if (materialData.get(i).getExtendDescription().equals("电缆分支箱,AC400V,塑壳断路器,五路,630A。进线隔离开关630A,出线塑壳断路器,4×250A,304不锈钢,落地式,户外")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                    } else if (materialData.get(i).getMaterialCode().equals("500107562")){
+                        if (materialData.get(i).getExtendDescription().equals("电缆分支箱,AC400V,塑壳断路器,七路,630A。进线隔离开关630A,出线塑壳断路器,2×250A+4×160A,304不锈钢,落地式,户外")) {
+                            parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
+                            parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
+                            parameterStats.setNumber(materialData.get(i).getTotalCount());
+                            stats.add(parameterStats);
+                        }
+                    }
+                }
+            }
+        }
+        Map<String, Double> materialNameToTotal = new HashMap<>();
+
+        // 创建一个 Map 来保存与 materialName 相关的其他数据
+        Map<String, SpecialParameterStats> materialNameToData = new HashMap<>();
+
+        for (SpecialParameterStats stat : stats) {
+            String materialName = stat.getSpecificationAndModel();
+            double number = Double.parseDouble(stat.getNumber());
+
+            // 如果 materialName 已经存在于 map 中,就累加它的 number
+            if (materialNameToTotal.containsKey(materialName)) {
+                double currentTotal = materialNameToTotal.get(materialName);
+                materialNameToTotal.put(materialName, currentTotal + number);
+            } else {
+                // 如果 materialName 不在 map 中,就添加它
+                materialNameToTotal.put(materialName, number);
+            }
+
+            // 保存与 materialName 相关的其他数据
+            materialNameToData.put(materialName, stat);
+        }
+
+        // 清空原始 stats 列表
+        stats.clear();
+
+        // 根据 map 中的内容重新构建 stats 列表
+        for (Map.Entry<String, Double> entry : materialNameToTotal.entrySet()) {
+            String materialName = entry.getKey();
+            double totalNumber = entry.getValue();
+
+            // 获取与 materialName 相关的其他数据
+            SpecialParameterStats originalStat = materialNameToData.get(materialName);
+
+            // 设置合并后的 number
+            originalStat.setNumber(String.valueOf(totalNumber));
+
+            // 将原始数据添加回 stats 列表
+            stats.add(originalStat);
+        }
+
+        return stats;
+    }
+
+    /**
      * 获取储备项目特殊物资统计表表格数据
      *
      * @param importUtil

+ 19 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/NormativeAuditController.java

@@ -11,6 +11,7 @@ import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.Docum
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.DemoliteService;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ReserveProcessProjectService;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.utils.ReserveProcessProjectProUtil;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.AuditForm;
 import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.NormativeAudit;
 import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service.BudgetStatsService;
 import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service.NormativeAuditService;
@@ -176,6 +177,24 @@ public class NormativeAuditController extends BaseController {
         util.exportNormative(response,workbook,auditList);
     }
 
+    //导出规范性审核单
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:normative:auditFormExport")
+    @RequestMapping(value = "auditFormExport")
+    public void auditFormExportExcel(AuditForm auditForm, HttpServletRequest request, HttpServletResponse response) {
+        AuditForm audit = auditService.exportFindAuditFormList(auditForm);
+        //设置储备进度
+        if (statsService.getReserveProgress(audit.getProjectReserveId()).equals("设计委托修改审核完成")){
+            audit.setReserveProgress("是");
+        } else {
+            audit.setReserveProgress("否");
+        }
+
+        ExcelExportUtil util = ExcelExportUtil.getOne();
+        XSSFWorkbook workbook = util.getWorkbook("auditForm");
+        util.exportAuditForm(response,workbook,audit);
+    }
+
     /**
      * 专职人员增加,编辑表单页面
      * @param normativeAudit

+ 298 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/PlotProgressStatsController.java

@@ -0,0 +1,298 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.web;
+
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ProjectScreen;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ProjectScreenService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ProjectTypeVerificateService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ReserveElectricityWorkService;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.PlotProgressStats;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service.PlotProgressStatsService;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.util.ExcelExportUtil;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.util.ExcelImportUtil;
+import com.jeeplus.modules.sg.managementcenter.materialproject.util.ImportUtil;
+import com.jeeplus.modules.sg.picking.activiti.entity.PickList;
+import com.jeeplus.modules.sg.raiseCapital.service.RaiseCapitalService;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.shiro.authz.annotation.Logical;
+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.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 王强
+ * @version 1.0
+ * @date 2023-10-08 9:29
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/cg/reservemanagementcenter/plotProgressStats")
+public class PlotProgressStatsController extends BaseController {
+    @Autowired
+    private PlotProgressStatsService statsService;
+
+    @Autowired
+    private RaiseCapitalService raiseCapitalService;
+
+    @Autowired
+    private ReserveElectricityWorkService workService;
+
+    @Autowired
+    private ProjectTypeVerificateService verificateService;
+
+    @Autowired
+    private ProjectScreenService service;
+
+    @ModelAttribute
+    public PlotProgressStats get(@RequestParam(required = false) String id) {
+        PlotProgressStats entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = statsService.get(id);
+        }
+        if (entity == null) {
+            entity = new PlotProgressStats();
+        }
+        return entity;
+    }
+
+    /**
+     * 储备项目出图进度统计表列表页面
+     * @param budgetStats
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("cg:reservemanagementcenter:plotProgressStats:list")
+    @RequestMapping(value = "budgetList")
+    public String budgetList(PlotProgressStats budgetStats, Model model) {
+        model.addAttribute("budgetStats", budgetStats);
+        return "modules/cg/statisticalTable/plotProgressStats/plotProgressStats";
+    }
+
+    /**
+     * 储备项目概预算数据列表
+     * @param budgetStats
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:plotProgressStats:list")
+    @RequestMapping(value = "list")
+    public Map<String, Object> basicData(PlotProgressStats budgetStats, HttpServletRequest request, HttpServletResponse response, Model model) throws ParseException {
+
+        Page<PlotProgressStats> page = statsService.findPage(new Page<PlotProgressStats>(request, response), budgetStats);
+
+        List<PlotProgressStats> list = page.getList();
+        List<PlotProgressStats> workList = new ArrayList<>();
+
+        //获取所有小类的名称
+        List<String> nameList = new ArrayList<>();
+        List<PickList> pickListList = raiseCapitalService.newAllList();
+        if (null != pickListList) {
+            pickListList.forEach(k->{
+                if (k.getName().equals("三、设备")){
+                    k.getMdTheClassList().forEach(v->{
+                        v.getMdSmallClassList().forEach(na->{
+                            nameList.add(na.getName());
+                        });
+                    });
+                }
+            });
+        }
+
+        for (PlotProgressStats work : list) {
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = service.getByProjectReserveId(work.getProjectReserveId());
+            //根据procInsId查出历史流程名称和时间
+            if (StringUtils.isNotEmpty(procInsId)){
+                List<History> histories = service.getHistoryByExecuteId(procInsId);
+                String historyName = workService.getHistoryName(procInsId);
+                //当size>0时待办有历史流程,
+                if (histories.size()>0){
+                    //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+                    String name = service.getByExecuteId(procInsId);
+                    //设置项目进度
+                    if (StringUtils.isNotEmpty(name)){
+                        work.setReserveProgress(name);
+                    }else {
+                        if (StringUtils.isNotBlank(historyName) && historyName.equals("技经人员审预算")){
+                            work.setReserveProgress("储备完成");
+                        } else {
+                            work.setReserveProgress("");
+                        }
+                    }
+                }else {
+                    work.setReserveProgress("");
+                }
+            }else {
+                work.setReserveProgress("");
+            }
+
+            //根据项目储备id去在线开甲供材表中查询物理信息
+            List<String> materialNameList = verificateService.getMaterialName(work.getProjectName());
+            if (null != nameList & null != materialNameList){
+                nameList.forEach(n->{
+                    if (StringUtils.isBlank(work.getProjectNature())){
+                        if (materialNameList.contains(n)){
+                            work.setProjectNature("资本");
+                        } else {
+                            work.setProjectNature("成本");
+                        }
+                    }
+                });
+            }
+            if (StringUtils.isBlank(work.getStateGridProjectCode())){
+                work.setStateGridProjectCode("");
+            }
+            if (StringUtils.isBlank(work.getStateGridProjectName())){
+                work.setStateGridProjectName("");
+            }
+
+
+            workList.add(work);
+        }
+        return getBootstrapData(page);
+    }
+
+    /**
+     * 删除表单
+     */
+    @ResponseBody
+    @RequiresPermissions(value={"cg:reservemanagementcenter:plotProgressStats:del"},logical= Logical.OR)
+    @RequestMapping(value = "deleteAll")
+    public AjaxJson delete(String ids){
+        AjaxJson j = new AjaxJson();
+        String idArray[] =ids.split(",");
+        for(String id : idArray){
+            statsService.deleteByProId(statsService.get(id).getProjectReserveId());
+        }
+        j.setMsg("删除储备项目出图进度统计表信息成功");
+        return j;
+    }
+
+    /**
+     *  导入Excel数据
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:plotProgressStats:import")
+    @RequestMapping(value = "import")
+    public AjaxJson importBasic(@RequestParam("file") MultipartFile file, HttpServletResponse response, HttpServletRequest request) {
+        AjaxJson j = new AjaxJson();
+        try {
+            ImportUtil importUtil = new ImportUtil(file, 0, 0);
+
+            //从数据库中查出所有的 项目储备编号
+            List<String> proIdList = statsService.getAllProId();
+            //获取导入表格所有数据
+            List<PlotProgressStats> plotProgressStats = ExcelImportUtil.getPlotProgressUtil(importUtil,proIdList);
+            statsService.insertList(plotProgressStats);
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入储备项目概预算信息失败!失败信息:" + e.getMessage());
+        }
+        return j;
+    }
+
+    //导出excel
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:plotProgressStats:export")
+    @RequestMapping(value = "export")
+    public void exportExcel(PlotProgressStats budgetStats, HttpServletRequest request, HttpServletResponse response) throws ParseException {
+        List<PlotProgressStats> list = statsService.exportFindList(budgetStats);
+
+        List<PlotProgressStats> workList = new ArrayList<>();
+
+        //获取所有小类的名称
+        List<String> nameList = new ArrayList<>();
+        List<PickList> pickListList = raiseCapitalService.newAllList();
+        if (null != pickListList) {
+            pickListList.forEach(k->{
+                if (k.getName().equals("三、设备")){
+                    k.getMdTheClassList().forEach(v->{
+                        v.getMdSmallClassList().forEach(na->{
+                            nameList.add(na.getName());
+                        });
+                    });
+                }
+            });
+        }
+
+        for (PlotProgressStats work : list) {
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = service.getByProjectReserveId(work.getProjectReserveId());
+            //根据procInsId查出历史流程名称和时间
+            if (StringUtils.isNotEmpty(procInsId)){
+                List<History> histories = service.getHistoryByExecuteId(procInsId);
+                String historyName = workService.getHistoryName(procInsId);
+                //当size>0时待办有历史流程,
+                if (histories.size()>0){
+                    //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+                    String name = service.getByExecuteId(procInsId);
+                    //设置项目进度
+                    if (StringUtils.isNotEmpty(name)){
+                        work.setReserveProgress(name);
+                    }else {
+                        if (StringUtils.isNotBlank(historyName) && historyName.equals("技经人员审预算")){
+                            work.setReserveProgress("储备完成");
+                        } else {
+                            work.setReserveProgress("");
+                        }
+                    }
+                }else {
+                    work.setReserveProgress("");
+                }
+            }else {
+                work.setReserveProgress("");
+            }
+
+            //根据项目储备id去在线开甲供材表中查询物理信息
+            List<String> materialNameList = verificateService.getMaterialName(work.getProjectName());
+            if (null != nameList & null != materialNameList){
+                nameList.forEach(n->{
+                    if (StringUtils.isBlank(work.getProjectNature())){
+                        if (materialNameList.contains(n)){
+                            work.setProjectNature("资本");
+                        } else {
+                            work.setProjectNature("成本");
+                        }
+                    }
+                });
+            }
+            if (StringUtils.isBlank(work.getStateGridProjectCode())){
+                work.setStateGridProjectCode("");
+            }
+            if (StringUtils.isBlank(work.getStateGridProjectName())){
+                work.setStateGridProjectName("");
+            }
+
+
+            workList.add(work);
+        }
+        //生成序列号
+        int i = 1;
+        for (PlotProgressStats s : workList) {
+            s.setId(String.valueOf(i));
+            i++;
+        }
+
+        ExcelExportUtil util = ExcelExportUtil.getOne();
+        XSSFWorkbook workbook = util.getWorkbook("plotProgressStats");
+        util.exportProgressStats(response,workbook,workList);
+    }
+}

+ 306 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/SpecialParameterStatsController.java

@@ -0,0 +1,306 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.web;
+
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ProjectScreenService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ProjectTypeVerificateService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ReserveElectricityWorkService;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.MaterialData;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialParameterStats;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service.SpecialParameterStatsService;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.util.ExcelExportUtil;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.util.ExcelImportUtil;
+import com.jeeplus.modules.sg.managementcenter.materialproject.util.ImportUtil;
+import com.jeeplus.modules.sg.picking.activiti.entity.PickList;
+import com.jeeplus.modules.sg.raiseCapital.service.RaiseCapitalService;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.shiro.authz.annotation.Logical;
+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.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author 王强
+ * @version 1.0
+ * @date 2023-10-08 15:25
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/cg/reservemanagementcenter/specialParameterStats")
+public class SpecialParameterStatsController extends BaseController {
+
+    @Autowired
+    private SpecialParameterStatsService statsService;
+
+    @Autowired
+    private ProjectScreenService service;
+
+    @Autowired
+    private ReserveElectricityWorkService workService;
+
+    @Autowired
+    private RaiseCapitalService raiseCapitalService;
+
+    @Autowired
+    private ProjectTypeVerificateService verificateService;
+
+    @ModelAttribute
+    public SpecialParameterStats get(@RequestParam(required = false) String id) {
+        SpecialParameterStats entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = statsService.get(id);
+        }
+        if (entity == null) {
+            entity = new SpecialParameterStats();
+        }
+        return entity;
+    }
+
+    /**
+     * 储备项目设计特殊物资参数统计表页面
+     * @param budgetStats
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("cg:reservemanagementcenter:specialParameterStats:list")
+    @RequestMapping(value = "budgetList")
+    public String budgetList(SpecialParameterStats budgetStats, Model model) {
+        model.addAttribute("budgetStats", budgetStats);
+        return "modules/cg/statisticalTable/specialParameterStats/specialParameterStats";
+    }
+
+    /**
+     * 储备项目设计特殊物资参数统计表数据列表
+     * @param budgetStats
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:specialParameterStats:list")
+    @RequestMapping(value = "list")
+    public Map<String, Object> basicData(SpecialParameterStats budgetStats, HttpServletRequest request, HttpServletResponse response, Model model) throws ParseException {
+
+        Page<SpecialParameterStats> page = statsService.findPage(new Page<SpecialParameterStats>(request, response), budgetStats);
+
+        List<SpecialParameterStats> list = page.getList();
+        List<SpecialParameterStats> workList = new ArrayList<>();
+
+        //获取所有小类的名称
+        List<String> nameList = new ArrayList<>();
+        List<PickList> pickListList = raiseCapitalService.newAllList();
+        if (null != pickListList) {
+            pickListList.forEach(k->{
+                if (k.getName().equals("三、设备")){
+                    k.getMdTheClassList().forEach(v->{
+                        v.getMdSmallClassList().forEach(na->{
+                            nameList.add(na.getName());
+                        });
+                    });
+                }
+            });
+        }
+
+        for (SpecialParameterStats work : list) {
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = service.getByProjectReserveId(work.getProjectReserveId());
+            //根据procInsId查出历史流程名称和时间
+            if (StringUtils.isNotEmpty(procInsId)){
+                List<History> histories = service.getHistoryByExecuteId(procInsId);
+                String historyName = workService.getHistoryName(procInsId);
+                //当size>0时待办有历史流程,
+                if (histories.size()>0){
+                    //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+                    String name = service.getByExecuteId(procInsId);
+                    //设置项目进度
+                    if (StringUtils.isNotEmpty(name)){
+                        work.setReserveProgress(name);
+                    }else {
+                        if (StringUtils.isNotBlank(historyName) && historyName.equals("技经人员审预算")){
+                            work.setReserveProgress("储备完成");
+                        } else {
+                            work.setReserveProgress("");
+                        }
+                    }
+                }else {
+                    work.setReserveProgress("");
+                }
+            }else {
+                work.setReserveProgress("");
+            }
+
+            //根据项目储备id去在线开甲供材表中查询物理信息
+            List<String> materialNameList = verificateService.getMaterialName(work.getProjectName());
+            if (null != nameList & null != materialNameList){
+                nameList.forEach(n->{
+                    if (StringUtils.isBlank(work.getProjectNature())){
+                        if (materialNameList.contains(n)){
+                            work.setProjectNature("资本");
+                        } else {
+                            work.setProjectNature("成本");
+                        }
+                    }
+                });
+            }
+            if (StringUtils.isBlank(work.getStateGridProjectCode())){
+                work.setStateGridProjectCode("");
+            }
+            if (StringUtils.isBlank(work.getStateGridProjectName())){
+                work.setStateGridProjectName("");
+            }
+
+
+            workList.add(work);
+        }
+        return getBootstrapData(page);
+    }
+
+    /**
+     * 删除表单
+     */
+    @ResponseBody
+    @RequiresPermissions(value={"cg:reservemanagementcenter:specialParameterStats:del"},logical= Logical.OR)
+    @RequestMapping(value = "deleteAll")
+    public AjaxJson delete(String ids){
+        AjaxJson j = new AjaxJson();
+        String idArray[] =ids.split(",");
+        for(String id : idArray){
+            statsService.deleteById(id);
+        }
+        j.setMsg("删除储备项目设计特殊物资参数统计表信息成功");
+        return j;
+    }
+
+    /**
+     *  导入Excel数据
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:specialParameterStats:import")
+    @RequestMapping(value = "import")
+    public AjaxJson importBasic(@RequestParam("file") MultipartFile file, HttpServletResponse response, HttpServletRequest request) {
+        AjaxJson j = new AjaxJson();
+        try {
+            ImportUtil importUtil = new ImportUtil(file, 0, 0);
+
+            //从数据库中查出所有的 项目储备编号
+            List<String> proIdList = statsService.getAllProId();
+            //从甲供材表中获取所有的数据信息
+            List<MaterialData> materialData = statsService.getAllMaterialData();
+
+            // 使用Java 8+的流操作和Collectors.groupingBy来创建Map
+            Map<String, List<MaterialData>> materialDataMap = materialData.stream()
+                    .collect(Collectors.groupingBy(MaterialData::getProjectName));
+            //获取导入表格所有数据
+            List<SpecialParameterStats> plotProgressStats = ExcelImportUtil.getSpecialParameterStatsUtil(file,importUtil,proIdList,materialDataMap);
+            statsService.insertList(plotProgressStats);
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入储备项目概预算信息失败!失败信息:" + e.getMessage());
+        }
+        return j;
+    }
+
+    //导出excel
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:specialParameterStats:export")
+    @RequestMapping(value = "export")
+    public void exportExcel(SpecialParameterStats budgetStats, HttpServletRequest request, HttpServletResponse response) throws ParseException {
+        List<SpecialParameterStats> list = statsService.exportFindList(budgetStats);
+
+        List<SpecialParameterStats> workList = new ArrayList<>();
+
+        //获取所有小类的名称
+        List<String> nameList = new ArrayList<>();
+        List<PickList> pickListList = raiseCapitalService.newAllList();
+        if (null != pickListList) {
+            pickListList.forEach(k->{
+                if (k.getName().equals("三、设备")){
+                    k.getMdTheClassList().forEach(v->{
+                        v.getMdSmallClassList().forEach(na->{
+                            nameList.add(na.getName());
+                        });
+                    });
+                }
+            });
+        }
+
+        for (SpecialParameterStats work : list) {
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = service.getByProjectReserveId(work.getProjectReserveId());
+            //根据procInsId查出历史流程名称和时间
+            if (StringUtils.isNotEmpty(procInsId)){
+                List<History> histories = service.getHistoryByExecuteId(procInsId);
+                String historyName = workService.getHistoryName(procInsId);
+                //当size>0时待办有历史流程,
+                if (histories.size()>0){
+                    //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+                    String name = service.getByExecuteId(procInsId);
+                    //设置项目进度
+                    if (StringUtils.isNotEmpty(name)){
+                        work.setReserveProgress(name);
+                    }else {
+                        if (StringUtils.isNotBlank(historyName) && historyName.equals("技经人员审预算")){
+                            work.setReserveProgress("储备完成");
+                        } else {
+                            work.setReserveProgress("");
+                        }
+                    }
+                }else {
+                    work.setReserveProgress("");
+                }
+            }else {
+                work.setReserveProgress("");
+            }
+
+            //根据项目储备id去在线开甲供材表中查询物理信息
+            List<String> materialNameList = verificateService.getMaterialName(work.getProjectName());
+            if (null != nameList & null != materialNameList){
+                nameList.forEach(n->{
+                    if (StringUtils.isBlank(work.getProjectNature())){
+                        if (materialNameList.contains(n)){
+                            work.setProjectNature("资本");
+                        } else {
+                            work.setProjectNature("成本");
+                        }
+                    }
+                });
+            }
+            if (StringUtils.isBlank(work.getStateGridProjectCode())){
+                work.setStateGridProjectCode("");
+            }
+            if (StringUtils.isBlank(work.getStateGridProjectName())){
+                work.setStateGridProjectName("");
+            }
+
+
+            workList.add(work);
+        }
+        //生成序列号
+        int i = 1;
+        for (SpecialParameterStats s : workList) {
+            s.setId(String.valueOf(i));
+            i++;
+        }
+
+        ExcelExportUtil util = ExcelExportUtil.getOne();
+        XSSFWorkbook workbook = util.getWorkbook("specialParameterStats");
+        util.exportSpecialParameterStats(response,workbook,workList);
+    }
+}

BIN
src/main/resources/freemarker/excelmodel/auditForm.xlsx


BIN
src/main/resources/freemarker/excelmodel/plotProgressStats.xlsx


BIN
src/main/resources/freemarker/excelmodel/specialParameterStats.xlsx


+ 14 - 1
src/main/webapp/webpage/modules/cg/statisticalTable/normative/normative.js

@@ -282,7 +282,7 @@ $(document).ready(function () {
     $('#projectTable').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
         'check-all.bs.table uncheck-all.bs.table', function () {
         $('#remove').prop('disabled', !$('#projectTable').bootstrapTable('getSelections').length);
-        $('#view,#edit,#jlEdit').prop('disabled', $('#projectTable').bootstrapTable('getSelections').length != 1);
+        $('#view,#edit,#jlEdit,#auditFormExport').prop('disabled', $('#projectTable').bootstrapTable('getSelections').length != 1);
     });
 
     $("#btnImport").click(function () {
@@ -376,6 +376,13 @@ function edit(id) {//没有权限时,不显示确定按钮
     jp.openSaveDialog('编辑流程上传文件信息', "${ctx}/cg/reservemanagementcenter/normative/form?id=" + id, '800px', '500px');
 }
 
+function auditFormExport(projectReserveId) {
+    if (projectReserveId == undefined) {
+        projectReserveId = getProjectReserveIdSelections();
+    }
+    jp.downloadFile('${ctx}/cg/reservemanagementcenter/normative/auditFormExport?projectReserveId=' + projectReserveId);
+}
+
 function fileUpLoad() {
     jp.open({
         type: 2,
@@ -408,6 +415,12 @@ function getIdSelections() {
     });
 }
 
+function getProjectReserveIdSelections() {
+    return $.map($("#projectTable").bootstrapTable('getSelections'), function (row) {
+        console.log('row', row)
+        return row.projectReserveId
+    });
+}
 
 //刷新列表
 function refresh() {

+ 5 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/normative/normative.jsp

@@ -83,6 +83,11 @@
 					<i class="fa fa-file-excel-o"></i> 导出
 				</button>
 			</shiro:hasPermission>
+				<shiro:hasPermission name="cg:reservemanagementcenter:normative:auditFormExport">
+					<button id="auditFormExport" class="btn btn-warning" onclick="auditFormExport()">
+						<i class="fa fa-file-excel-o"></i> 导出规范性审核单
+					</button>
+				</shiro:hasPermission>
 	</div>
 	<!-- 表格 -->
 	<table id="projectTable" style="table-layout:fixed" class="table" data-toolbar="#toolbar"></table>

+ 301 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/plotProgressStats/plotProgressStats.js

@@ -0,0 +1,301 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script >
+$(document).ready(function () {
+    $('#projectTable').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: 25,
+        //可供选择的每页的行数(*)
+        pageList: [5, 10, 25, 50, 100],
+        //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+        url: "${ctx}/cg/reservemanagementcenter/plotProgressStats/list",
+        //默认值为 '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}/cg/reservemanagementcenter/project/delete?id=" + row.id, function (data) {
+                        if (data.success) {
+                            $('#projectTable').bootstrapTable('refresh');
+                            jp.success(data.msg);
+                        } else {
+                            jp.error(data.msg);
+                        }
+                    })
+                });
+            }
+        },
+
+        onClickRow: function (row, $el) {
+        },
+        onShowSearch: function () {
+            $("#search-collapse").slideToggle();
+        },
+        columns:
+            [
+                [
+                    {checkbox:true,width: 36},
+                    {"title":"储备项目基本信息","colspan":21,"halign":"center","align": "center",width: "4200px"},
+                    {"title":"储备进度","colspan":3,"halign":"center","align": "center",width: "600px"},
+                    {"title":"出图计划","colspan":9,"halign":"center","align": "center",width: "1800px"},
+                ],
+                [
+                    {checkbox:true,width: 36},
+                    { field: 'projectYear', title: "项目年份", valign:"middle", align:"center", colspan: 1},
+                    { field: 'projectNature', title: "项目性质", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'demandUnit', title: "需求单位", valign:"middle", align:"center", colspan: 1},
+                    { field: 'district', title: "区域", valign:"middle", align:"center", colspan: 1},
+                    { field: 'projectGroup', title: "项目分组", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'projectManager', title: "业主储备项目经理", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'reserveBatches', title: "储备批次", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'blockSupply', title: "供电区域", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'gridNumber', title: "网格编号", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'cellNumber', title: "单元格编号", valign:"middle", align:"center", colspan: 1 ,formatter:paramsMatter},
+                    { field: 'projectReserveId', title: "项目储备编号", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'projectName', title: "项目名称", valign:"middle", align:"center", colspan: 1,formatter:paramsMatter},
+                    { field: 'stateGridProjectCode', title: "国网项目编码", valign:"middle", align:"center", colspan: 1},
+                    { field: 'stateGridProjectName', title: "国网项目名称", valign:"middle", align:"center", colspan: 1,formatter:paramsMatter},
+                    { field: 'constructionNecessityAndContent', title: "建设必要性及内容", valign:"middle", align:"center", colspan: 1,formatter:paramsMatter},
+                    { field: 'substationName', title: "变电站名称", valign:"middle", align:"center", colspan: 1},
+                    { field: 'circuitName', title: "线路名称", valign:"middle", align:"center", colspan: 1},
+                    { field: 'netRackProjectDivide', title: "网架项目划分", valign:"middle", align:"center", colspan: 1},
+                    { field: 'requirementType', title: "需求类型", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'costEstimate', title: "费用估算", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'basicRemarks', title: "备注", valign:"middle", align:"center", colspan: 1 ,formatter:paramsMatter},
+                    { field: 'reserveProgress', title: "储备进度", valign:"middle", align:"center", colspan: 1},
+                    { field: 'implementPlan', title: "是否纳入实施计划", valign:"middle", align:"center", colspan: 1},
+                    { field: 'implementBatch', title: "初定实施批次", valign:"middle", align:"center", colspan: 1},
+                    { field: 'needPaperDrawing', title: "是否需出纸质图", valign:"middle", align:"center", colspan: 1},
+                    { field: 'askPaperDrawingTime', title: "要求移交纸质图纸时间", valign:"middle", align:"center", colspan: 1},
+                    { field: 'paperDrawing', title: "是否移交纸质图", valign:"middle", align:"center", colspan: 1},
+                    { field: 'paperDrawingTime', title: "纸质图移交时间", valign:"middle", align:"center", colspan: 1},
+                    { field: 'arrivePlanAndApprovalDrawing', title: "是否需出规划报批图", valign:"middle", align:"center", colspan: 1},
+                    { field: 'askPlanAndApprovalDrawingTime', title: "要求移交规划报批图时间", valign:"middle", align:"center", colspan: 1},
+                    { field: 'planAndApprovalDrawing', title: "是否移交规划报批图", valign:"middle", align:"center", colspan: 1},
+                    { field: 'planAndApprovalDrawingTime', title: "规划报批图移交时间", valign:"middle", align:"center", colspan: 1},
+                    { field: 'remarks', title: "备注", valign:"middle", align:"center", colspan: 1,formatter:paramsMatter},
+
+                ],
+
+            ]
+    });
+
+
+    if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端
+        $('#projectTable').bootstrapTable("toggleView");
+    }
+
+    $('#projectTable').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+        'check-all.bs.table uncheck-all.bs.table', function () {
+        $('#remove').prop('disabled', !$('#projectTable').bootstrapTable('getSelections').length);
+        $('#view,#edit,#jlEdit').prop('disabled', $('#projectTable').bootstrapTable('getSelections').length != 1);
+    });
+
+    $("#btnImport").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}/cg/reservemanagementcenter/plotProgressStats/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);
+            }
+        });
+    });
+
+    $("#jlImport").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}/cg/reservemanagementcenter/reserveManage/jlImport', 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);
+            }
+        });
+    });
+
+    $("#btnExport").click(function () {
+        var projectReserveId = $("#projectReserveId").val();
+        var projectName = $("#projectName").val();
+        console.log(projectReserveId)
+        jp.downloadFile('${ctx}/cg/reservemanagementcenter/plotProgressStats/export?projectReserveId=' + projectReserveId + '&projectName=' + projectName);
+    });
+
+    $("#search").click("click", function () {// 绑定查询按扭
+        $('#projectTable').bootstrapTable('refresh');
+    });
+
+    $("#reset").click("click", function () {// 绑定查询按扭
+        $("#searchForm  input").val("");
+        $("#searchForm  select").val("");
+        $("#searchForm  .select-item").html("");
+        $('#projectTable').bootstrapTable('refresh');
+    });
+
+    $('#beginBeginDate').datetimepicker({
+        format: "YYYY-MM-DD HH:mm:ss"
+    });
+    $('#endBeginDate').datetimepicker({
+        format: "YYYY-MM-DD HH:mm:ss"
+    });
+    $('#endDate').datetimepicker({
+        format: "YYYY-MM-DD HH:mm:ss"
+    });
+});
+
+//表格超出宽度鼠标悬停显示td内容
+function paramsMatter(value,row,index,field) {
+    var span = document.createElement('span');
+    span.setAttribute('title',value);
+    span.innerHTML = value;
+    return span.outerHTML;
+}
+
+function getIdSelections() {
+    return $.map($("#projectTable").bootstrapTable('getSelections'), function (row) {
+        return row.id
+    });
+}
+
+
+//刷新列表
+function refresh() {
+    $('#projectTable').bootstrapTable('refresh');
+}
+
+function add() {
+    jp.openSaveDialog('新增储备项目基本信息', "${ctx}/cg/reservemanagementcenter/reserveManage/form", '800px', '500px');
+}
+
+
+function edit(id) {//没有权限时,不显示确定按钮
+    if (id == undefined) {
+        id = getIdSelections();
+    }
+    jp.openSaveDialog('编辑储备项目基本信息', "${ctx}/cg/reservemanagementcenter/reserveManage/form?id=" + id, '800px', '500px');
+}
+
+function jlEdit(id) {//没有权限时,不显示确定按钮
+    if (id == undefined) {
+        id = getIdSelections();
+    }
+    jp.openSaveDialog('编辑储备项目基本信息', "${ctx}/cg/reservemanagementcenter/reserveManage/jlEdit?id=" + id, '800px', '500px');
+}
+
+function view(id) {//没有权限时,不显示确定按钮
+    if (id == undefined) {
+        id = getIdSelections();
+    }
+    jp.openViewDialog('查看储备项目基本信息', "${ctx}/cg/reservemanagementcenter/reserveManage/view?id=" + id, '800px', '500px');
+}
+
+function deleteAll(){
+
+    jp.confirm('确认要删除该出图进度统计表信息吗?', function(){
+        jp.loading();
+        jp.get("${ctx}/cg/reservemanagementcenter/plotProgressStats/deleteAll?ids=" + getIdSelections(), function(data){
+            if(data.success){
+                $('#projectTable').bootstrapTable('refresh');
+                jp.success(data.msg);
+            }else{
+                jp.error(data.msg);
+            }
+        })
+
+    })
+}
+//转换日期格式(时间戳转换为datetime格式)
+function changeDateFormat(cellval) {
+    var dateVal = cellval + "";
+    if (cellval != null) {
+        var date = new Date(parseInt(dateVal.replace("/Date(", "").replace(")/", ""), 10));
+        var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
+        var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+
+        /*var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+        var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+        var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();*/
+
+        return date.getFullYear() + "-" + month + "-" + currentDate /*+ " " + hours + ":" + minutes + ":" + seconds*/;
+    }
+}
+
+</script>

+ 112 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/plotProgressStats/plotProgressStats.jsp

@@ -0,0 +1,112 @@
+<%@ 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="plotProgressStats.js" %>
+	<style type="text/css">
+		.table {
+			table-layout: fixed;
+			word-break: break-all;
+			word-wrap: break-word;
+			text-align: center;
+		}
+		.table th, .table td {
+			text-align: center;
+			vertical-align: middle !important;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			word-wrap:break-word;
+		}
+		.bootstrap-table .table thead>tr>th {
+			padding: 0;
+			margin: 0;
+			width: 3000px;
+		}
+	</style>
+</head>
+<body>
+	<div class="wrapper wrapper-content">
+	<div class="panel panel-primary">
+	<div class="panel-heading">
+		<h3 class="panel-title">项目储备信息</h3>
+	</div>
+	<div class="panel-body">
+		<!-- 搜索 -->
+		<div id="search-collapse" class="collapse">
+			<div class="accordion-inner">
+				<form:form id="searchForm" modelAttribute="budgetStats" 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="projectReserveId" htmlEscape="false" maxlength="100"  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="projectName" htmlEscape="false" maxlength="100"  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="cg:reservemanagementcenter:reserveManage:add">
+				<button id="add" class="btn btn-primary" onclick="add()">
+					<i class="glyphicon glyphicon-plus"></i> 新增
+				</button>
+			</shiro:hasPermission>
+			<shiro:hasPermission name="cg:reservemanagementcenter:reserveManage:edit">
+				<button id="edit" class="btn btn-primary" onclick="edit()">
+					<i class="glyphicon glyphicon-edit"></i> 修改 <!--专职修改-->
+				</button>
+			</shiro:hasPermission>
+			<shiro:hasPermission name="sg:managementcenter:reserveManagement:jlEdit">
+				<button id="jlEdit" class="btn btn-primary" onclick="jlEdit()">
+					<i class="glyphicon glyphicon-edit"></i> 修改 <!--经理修改-->
+				</button>
+			</shiro:hasPermission>
+			<shiro:hasPermission name="cg:reservemanagementcenter:reserveManage:del">
+				<button id="remove" class="btn btn-danger" onclick="deleteAll()">
+					<i class="glyphicon glyphicon-remove"></i> 删除
+				</button>
+			</shiro:hasPermission>--%>
+			<shiro:hasPermission name="cg:reservemanagementcenter:plotProgressStats:del">
+				<button id="remove" class="btn btn-danger" onclick="deleteAll()">
+					<i class="glyphicon glyphicon-remove"></i> 删除
+				</button>
+			</shiro:hasPermission>
+			<shiro:hasPermission name="cg:reservemanagementcenter:plotProgressStats:import">
+				<button id="btnImport" class="btn btn-info">
+					<i class="fa fa-folder-open-o"></i> 导入
+				</button>
+			</shiro:hasPermission>
+			<%--<shiro:hasPermission name="sg:managementcenter:reserveManagement:jlImport">
+				<button id="jlImport" class="btn btn-info">
+					<i class="fa fa-folder-open-o"></i> 导入  <!--经理导入-->
+				</button>
+			</shiro:hasPermission>--%>
+			<shiro:hasPermission name="cg:reservemanagementcenter:plotProgressStats:export">
+				<button id="btnExport" class="btn btn-warning">
+					<i class="fa fa-file-excel-o"></i> 导出
+				</button>
+			</shiro:hasPermission>
+	</div>
+	<!-- 表格 -->
+	<table id="projectTable" style="table-layout:fixed" class="table" data-toolbar="#toolbar"></table>
+
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 304 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/specialParameterStats/specialParameterStats.js

@@ -0,0 +1,304 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script >
+$(document).ready(function () {
+    $('#projectTable').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: 25,
+        //可供选择的每页的行数(*)
+        pageList: [5, 10, 25, 50, 100],
+        //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+        url: "${ctx}/cg/reservemanagementcenter/specialParameterStats/list",
+        //默认值为 '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}/cg/reservemanagementcenter/project/delete?id=" + row.id, function (data) {
+                        if (data.success) {
+                            $('#projectTable').bootstrapTable('refresh');
+                            jp.success(data.msg);
+                        } else {
+                            jp.error(data.msg);
+                        }
+                    })
+                });
+            }
+        },
+
+        onClickRow: function (row, $el) {
+        },
+        onShowSearch: function () {
+            $("#search-collapse").slideToggle();
+        },
+        columns:
+            [
+                [
+                    {checkbox:true,width: 36},
+                    {"title":"储备项目基本信息","colspan":21,"halign":"center","align": "center",width: "4200px"},
+                    {"title":"储备进度","colspan":3,"halign":"center","align": "center",width: "600px"},
+                    {"title":"特殊物资统计","colspan":6,"halign":"center","align": "center",width: "1200px"},
+                ],
+                [
+                    {checkbox:true,width: 36},
+                    { field: 'projectYear', title: "项目年份", valign:"middle", align:"center", colspan: 1},
+                    { field: 'projectNature', title: "项目性质", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'demandUnit', title: "需求单位", valign:"middle", align:"center", colspan: 1},
+                    { field: 'district', title: "区域", valign:"middle", align:"center", colspan: 1},
+                    { field: 'projectGroup', title: "项目分组", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'projectManager', title: "项目经理", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'reserveBatches', title: "储备批次", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'blockSupply', title: "供电区域", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'gridNumber', title: "网格编号", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'cellNumber', title: "单元格编号", valign:"middle", align:"center", colspan: 1 ,formatter:paramsMatter},
+                    { field: 'projectReserveId', title: "项目储备编号", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'projectName', title: "项目名称", valign:"middle", align:"center", colspan: 1,formatter:paramsMatter},
+                    { field: 'stateGridProjectCode', title: "国网项目编码", valign:"middle", align:"center", colspan: 1},
+                    { field: 'stateGridProjectName', title: "国网项目名称", valign:"middle", align:"center", colspan: 1,formatter:paramsMatter},
+                    { field: 'constructionNecessityAndContent', title: "建设必要性及内容", valign:"middle", align:"center", colspan: 1,formatter:paramsMatter},
+                    { field: 'substationName', title: "变电站名称", valign:"middle", align:"center", colspan: 1},
+                    { field: 'circuitName', title: "线路名称", valign:"middle", align:"center", colspan: 1},
+                    { field: 'netRackProjectDivide', title: "网架项目划分", valign:"middle", align:"center", colspan: 1},
+                    { field: 'requirementType', title: "需求类型", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'projectType', title: "项目类型", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'costEstimate', title: "费用估算", valign:"middle", align:"center", colspan: 1 },
+                    { field: 'reserveProgress', title: "储备进度", valign:"middle", align:"center", colspan: 1},
+                    { field: 'implementPlan', title: "是否纳入实施计划", valign:"middle", align:"center", colspan: 1},
+                    { field: 'implementBatch', title: "初定实施批次", valign:"middle", align:"center", colspan: 1},
+                    { field: 'materialName', title: "物资名称", valign:"middle", align:"center", colspan: 1,formatter:paramsMatter},
+                    { field: 'specificationAndModel', title: "规格型号", valign:"middle", align:"center", colspan: 1,formatter:paramsMatter},
+                    { field: 'materialDescription', title: "物资描述", valign:"middle", align:"center", colspan: 1,formatter:paramsMatter},
+                    { field: 'number', title: "数量", valign:"middle", align:"center", colspan: 1},
+                    { field: 'parameter', title: "参数", valign:"middle", align:"center", colspan: 1},
+                    { field: 'remarks', title: "备注", valign:"middle", align:"center", colspan: 1},
+
+                ],
+
+            ]
+    });
+
+
+    if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端
+        $('#projectTable').bootstrapTable("toggleView");
+    }
+
+    $('#projectTable').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+        'check-all.bs.table uncheck-all.bs.table', function () {
+        $('#remove').prop('disabled', !$('#projectTable').bootstrapTable('getSelections').length);
+        $('#view,#edit,#jlEdit').prop('disabled', $('#projectTable').bootstrapTable('getSelections').length != 1);
+    });
+
+    $("#btnImport").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}/cg/reservemanagementcenter/specialParameterStats/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);
+            }
+        });
+    });
+
+    $("#jlImport").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}/cg/reservemanagementcenter/reserveManage/jlImport', 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);
+            }
+        });
+    });
+
+    $("#btnExport").click(function () {
+        var projectReserveId = $("#projectReserveId").val();
+        var projectName = $("#projectName").val();
+        console.log(projectReserveId)
+        jp.downloadFile('${ctx}/cg/reservemanagementcenter/specialParameterStats/export?projectReserveId=' + projectReserveId + '&projectName=' + projectName);
+    });
+
+    $("#search").click("click", function () {// 绑定查询按扭
+        $('#projectTable').bootstrapTable('refresh');
+    });
+
+    $("#reset").click("click", function () {// 绑定查询按扭
+        $("#searchForm  input").val("");
+        $("#searchForm  select").val("");
+        $("#searchForm  .select-item").html("");
+        $('#projectTable').bootstrapTable('refresh');
+    });
+
+    $('#beginBeginDate').datetimepicker({
+        format: "YYYY-MM-DD HH:mm:ss"
+    });
+    $('#endBeginDate').datetimepicker({
+        format: "YYYY-MM-DD HH:mm:ss"
+    });
+    $('#endDate').datetimepicker({
+        format: "YYYY-MM-DD HH:mm:ss"
+    });
+});
+
+//表格超出宽度鼠标悬停显示td内容
+function paramsMatter(value,row,index,field) {
+    var span = document.createElement('span');
+    span.setAttribute('title',value);
+    span.innerHTML = value;
+    return span.outerHTML;
+}
+
+function getIdSelections() {
+    return $.map($("#projectTable").bootstrapTable('getSelections'), function (row) {
+        return row.id
+    });
+}
+
+function getSpeIdSelections() {
+    return $.map($("#projectTable").bootstrapTable('getSelections'), function (row) {
+        return row.speId
+    });
+}
+
+
+//刷新列表
+function refresh() {
+    $('#projectTable').bootstrapTable('refresh');
+}
+
+function add() {
+    jp.openSaveDialog('新增储备项目基本信息', "${ctx}/cg/reservemanagementcenter/reserveManage/form", '800px', '500px');
+}
+
+
+function edit(id) {//没有权限时,不显示确定按钮
+    if (id == undefined) {
+        id = getIdSelections();
+    }
+    jp.openSaveDialog('编辑储备项目基本信息', "${ctx}/cg/reservemanagementcenter/reserveManage/form?id=" + id, '800px', '500px');
+}
+
+function jlEdit(id) {//没有权限时,不显示确定按钮
+    if (id == undefined) {
+        id = getIdSelections();
+    }
+    jp.openSaveDialog('编辑储备项目基本信息', "${ctx}/cg/reservemanagementcenter/reserveManage/jlEdit?id=" + id, '800px', '500px');
+}
+
+function view(id) {//没有权限时,不显示确定按钮
+    if (id == undefined) {
+        id = getIdSelections();
+    }
+    jp.openViewDialog('查看储备项目基本信息', "${ctx}/cg/reservemanagementcenter/reserveManage/view?id=" + id, '800px', '500px');
+}
+
+function deleteAll(){
+
+    jp.confirm('确认要删除该出图进度统计表信息吗?', function(){
+        jp.loading();
+        jp.get("${ctx}/cg/reservemanagementcenter/specialParameterStats/deleteAll?ids=" + getSpeIdSelections(), function(data){
+            if(data.success){
+                $('#projectTable').bootstrapTable('refresh');
+                jp.success(data.msg);
+            }else{
+                jp.error(data.msg);
+            }
+        })
+
+    })
+}
+//转换日期格式(时间戳转换为datetime格式)
+function changeDateFormat(cellval) {
+    var dateVal = cellval + "";
+    if (cellval != null) {
+        var date = new Date(parseInt(dateVal.replace("/Date(", "").replace(")/", ""), 10));
+        var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
+        var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+
+        /*var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+        var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+        var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();*/
+
+        return date.getFullYear() + "-" + month + "-" + currentDate /*+ " " + hours + ":" + minutes + ":" + seconds*/;
+    }
+}
+
+</script>

+ 112 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/specialParameterStats/specialParameterStats.jsp

@@ -0,0 +1,112 @@
+<%@ 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="specialParameterStats.js" %>
+	<style type="text/css">
+		.table {
+			table-layout: fixed;
+			word-break: break-all;
+			word-wrap: break-word;
+			text-align: center;
+		}
+		.table th, .table td {
+			text-align: center;
+			vertical-align: middle !important;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			word-wrap:break-word;
+		}
+		.bootstrap-table .table thead>tr>th {
+			padding: 0;
+			margin: 0;
+			width: 3000px;
+		}
+	</style>
+</head>
+<body>
+	<div class="wrapper wrapper-content">
+	<div class="panel panel-primary">
+	<div class="panel-heading">
+		<h3 class="panel-title">项目储备信息</h3>
+	</div>
+	<div class="panel-body">
+		<!-- 搜索 -->
+		<div id="search-collapse" class="collapse">
+			<div class="accordion-inner">
+				<form:form id="searchForm" modelAttribute="budgetStats" 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="projectReserveId" htmlEscape="false" maxlength="100"  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="projectName" htmlEscape="false" maxlength="100"  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="cg:reservemanagementcenter:reserveManage:add">
+				<button id="add" class="btn btn-primary" onclick="add()">
+					<i class="glyphicon glyphicon-plus"></i> 新增
+				</button>
+			</shiro:hasPermission>
+			<shiro:hasPermission name="cg:reservemanagementcenter:reserveManage:edit">
+				<button id="edit" class="btn btn-primary" onclick="edit()">
+					<i class="glyphicon glyphicon-edit"></i> 修改 <!--专职修改-->
+				</button>
+			</shiro:hasPermission>
+			<shiro:hasPermission name="sg:managementcenter:reserveManagement:jlEdit">
+				<button id="jlEdit" class="btn btn-primary" onclick="jlEdit()">
+					<i class="glyphicon glyphicon-edit"></i> 修改 <!--经理修改-->
+				</button>
+			</shiro:hasPermission>
+			<shiro:hasPermission name="cg:reservemanagementcenter:reserveManage:del">
+				<button id="remove" class="btn btn-danger" onclick="deleteAll()">
+					<i class="glyphicon glyphicon-remove"></i> 删除
+				</button>
+			</shiro:hasPermission>--%>
+			<shiro:hasPermission name="cg:reservemanagementcenter:specialParameterStats:del">
+				<button id="remove" class="btn btn-danger" onclick="deleteAll()">
+					<i class="glyphicon glyphicon-remove"></i> 删除
+				</button>
+			</shiro:hasPermission>
+			<shiro:hasPermission name="cg:reservemanagementcenter:specialParameterStats:import">
+				<button id="btnImport" class="btn btn-info">
+					<i class="fa fa-folder-open-o"></i> 导入
+				</button>
+			</shiro:hasPermission>
+			<%--<shiro:hasPermission name="sg:managementcenter:reserveManagement:jlImport">
+				<button id="jlImport" class="btn btn-info">
+					<i class="fa fa-folder-open-o"></i> 导入  <!--经理导入-->
+				</button>
+			</shiro:hasPermission>--%>
+			<shiro:hasPermission name="cg:reservemanagementcenter:specialParameterStats:export">
+				<button id="btnExport" class="btn btn-warning">
+					<i class="fa fa-file-excel-o"></i> 导出
+				</button>
+			</shiro:hasPermission>
+	</div>
+	<!-- 表格 -->
+	<table id="projectTable" style="table-layout:fixed" class="table" data-toolbar="#toolbar"></table>
+
+	</div>
+	</div>
+	</div>
+</body>
+</html>