Browse Source

储备项目新-工作流代码提交

user5 2 years atrás
parent
commit
a241602066
100 changed files with 14450 additions and 94 deletions
  1. 24 29
      src/main/java/com/jeeplus/modules/act/web/ActTaskController.java
  2. 93 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/BudgetBook.java
  3. 66 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/Demolite.java
  4. 120 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/FeedBackBudget.java
  5. 39 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/MaterialSupply.java
  6. 2 4
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/ReserveSummary.java
  7. 313 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/ReserveSummaryProcess.java
  8. 20 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/BudgetBookMapper.java
  9. 29 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/DemoliteMapper.java
  10. 27 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/FeedBackBudgetMapper.java
  11. 28 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/MaterialSupplyMapper.java
  12. 7 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/ReserveProcessProjectMapper.java
  13. 62 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/ReserveSummaryProcessMapper.java
  14. 45 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/BudgetBookMapper.xml
  15. 39 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/DemoliteMapper.xml
  16. 55 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/FeedBackBudgetMapper.xml
  17. 33 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/MaterialSupplyMapper.xml
  18. 6 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/ReserveProcessProjectMapper.xml
  19. 247 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/ReserveSummaryProcessMapper.xml
  20. 2 4
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/SummaryStatisticMapper.xml
  21. 37 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/BudgetBookService.java
  22. 41 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/DemoliteService.java
  23. 40 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/FeedBackBudgetService.java
  24. 37 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/MaterialSupplyService.java
  25. 7 2
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/ReserveProcessProjectService.java
  26. 356 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/ReserveSummaryProcessService.java
  27. 0 4
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/utils/ReserveProcessProjectExportUtil.java
  28. 25 5
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/utils/ReserveProcessProjectProUtil.java
  29. 331 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/web/ProcessController.java
  30. 60 35
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/web/SummaryStatisticController.java
  31. 402 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/BudgetStats.java
  32. 377 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/ConstructeScale.java
  33. 75 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/DemoliteList.java
  34. 413 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/EnginnerQuery.java
  35. 36 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/History.java
  36. 18 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/HistoryComment.java
  37. 19 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/HistoryVarinst.java
  38. 99 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/MaterialData.java
  39. 21 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/NormativeAudit.java
  40. 429 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/ProgressStats.java
  41. 365 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/SpecialSupply.java
  42. 45 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/StandardDetail.java
  43. 69 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/BudgetStatsMapper.java
  44. 67 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/ConstructeScaleMapper.java
  45. 25 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/DemoliteListMapper.java
  46. 54 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/EnginnerQueryMapper.java
  47. 82 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/ProgressStatsMapper.java
  48. 53 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/SpecialSupplyMapper.java
  49. 219 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/BudgetStatsMapper.xml
  50. 170 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/ConstructeScaleMapper.xml
  51. 94 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/DemoliteListMapper.xml
  52. 119 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/EnginnerQueryMapper.xml
  53. 220 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/ProgressStatsMapper.xml
  54. 120 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/xml/SpecialSupplyMapper.xml
  55. 77 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/BudgetStatsService.java
  56. 78 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/ConstructeScaleService.java
  57. 43 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/DemoliteListService.java
  58. 51 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/EnginnerQueryService.java
  59. 87 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/ProgressStatsService.java
  60. 51 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/SpecialSupplyService.java
  61. 714 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/util/ExcelExportUtil.java
  62. 158 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/util/ExcelImportUtil.java
  63. 238 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/BudgetStatsController.java
  64. 481 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/ConstructeScaleController.java
  65. 114 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/DemoliteListController.java
  66. 215 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/EnginnerQueryController.java
  67. 523 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/ProgressStatsController.java
  68. 179 0
      src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/SpecialSupplyController.java
  69. 12 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/activiti/utils/MyActiviUtils.java
  70. 1 0
      src/main/java/com/jeeplus/modules/sg/picking/activiti/web/ShowListController.java
  71. 23 9
      src/main/java/com/jeeplus/modules/sg/raiseCapital/web/RaiseCapitalController.java
  72. 1 1
      src/main/java/com/jeeplus/modules/sys/web/FileController.java
  73. BIN
      src/main/resources/freemarker/excelmodel/budgetStats.xlsx
  74. BIN
      src/main/resources/freemarker/excelmodel/constructeScale.xlsx
  75. BIN
      src/main/resources/freemarker/excelmodel/demoliteList.xlsx
  76. BIN
      src/main/resources/freemarker/excelmodel/enginnerQuery.xlsx
  77. BIN
      src/main/resources/freemarker/excelmodel/progressStats.xlsx
  78. BIN
      src/main/resources/freemarker/excelmodel/specialSupply.xlsx
  79. BIN
      src/main/resources/freemarker/excelmodel/summaryStatistics.xlsx
  80. 1 1
      src/main/webapp/webpage/modules/bpm/task/todo/taskTodoList.js
  81. 390 0
      src/main/webapp/webpage/modules/cg/reservemanagementcenter/raiseCapital/raiseCapital.js
  82. 181 0
      src/main/webapp/webpage/modules/cg/reservemanagementcenter/raiseCapital/raiseCapital.jsp
  83. 395 0
      src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/budgetReview.jsp
  84. 305 0
      src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/designUnit.jsp
  85. 327 0
      src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/designUnitAgain.jsp
  86. 347 0
      src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/designUnitAgainTwo.jsp
  87. 337 0
      src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/drawingReview.js
  88. 263 0
      src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/drawingReview.jsp
  89. 459 0
      src/main/webapp/webpage/modules/cg/statisticalTable/budgetStats/budgetStats.js
  90. 103 0
      src/main/webapp/webpage/modules/cg/statisticalTable/budgetStats/budgetStats.jsp
  91. 449 0
      src/main/webapp/webpage/modules/cg/statisticalTable/constructeScale/constructeScale.js
  92. 80 0
      src/main/webapp/webpage/modules/cg/statisticalTable/constructeScale/constructeScale.jsp
  93. 290 0
      src/main/webapp/webpage/modules/cg/statisticalTable/demoliteList/demoliteList.js
  94. 83 0
      src/main/webapp/webpage/modules/cg/statisticalTable/demoliteList/demoliteList.jsp
  95. 464 0
      src/main/webapp/webpage/modules/cg/statisticalTable/enginnerQuery/enginnerQuery.js
  96. 80 0
      src/main/webapp/webpage/modules/cg/statisticalTable/enginnerQuery/enginnerQuery.jsp
  97. 544 0
      src/main/webapp/webpage/modules/cg/statisticalTable/progressStats/progressStats.js
  98. 80 0
      src/main/webapp/webpage/modules/cg/statisticalTable/progressStats/progressStats.jsp
  99. 444 0
      src/main/webapp/webpage/modules/cg/statisticalTable/specialSupply/specialSupply.js
  100. 0 0
      src/main/webapp/webpage/modules/cg/statisticalTable/specialSupply/specialSupply.jsp

+ 24 - 29
src/main/java/com/jeeplus/modules/act/web/ActTaskController.java

@@ -3,34 +3,26 @@
  */
 package com.jeeplus.modules.act.web;
 
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.util.Date;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import com.jeeplus.common.json.AjaxJson;
 import com.jeeplus.common.utils.SpringContextHolder;
 import com.jeeplus.common.websocket.service.system.SystemInfoSocketHandler;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.act.entity.Act;
 import com.jeeplus.modules.act.service.ActModelService;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.act.utils.ActUtils;
 import com.jeeplus.modules.oa.entity.OaNotify;
 import com.jeeplus.modules.oa.entity.OaNotifyRecord;
 import com.jeeplus.modules.oa.service.OaNotifyService;
-import com.jeeplus.modules.sg.managementcenter.activiti.entity.*;
+import com.jeeplus.modules.sg.managementcenter.activiti.entity.Construction;
+import com.jeeplus.modules.sg.managementcenter.activiti.entity.Disclose;
+import com.jeeplus.modules.sg.managementcenter.activiti.entity.Quantity;
+import com.jeeplus.modules.sg.managementcenter.activiti.entity.UploadImages;
 import com.jeeplus.modules.sg.managementcenter.activiti.service.ConstructionService;
 import com.jeeplus.modules.sg.managementcenter.activiti.service.DiscloseService;
-import com.jeeplus.modules.sg.managementcenter.activiti.service.ProcessPersonnelService;
 import com.jeeplus.modules.sg.managementcenter.activiti.service.UploadImagesService;
 import com.jeeplus.modules.sg.managementcenter.activiti.utils.MyActiviUtils;
-import com.jeeplus.modules.sg.managementcenter.constructionProject.entity.ConstructionProject;
 import com.jeeplus.modules.sg.managementcenter.materialinfo.entity.MaterialInfo;
 import com.jeeplus.modules.sg.managementcenter.materialproject.entity.MaterialProject;
 import com.jeeplus.modules.sg.managementcenter.materialproject.service.MaterialProjectService;
@@ -41,13 +33,12 @@ import com.jeeplus.modules.sg.materialmodule.activiti.entity.MaterialModule;
 import com.jeeplus.modules.sg.materialmodule.activiti.entity.NonPower;
 import com.jeeplus.modules.sg.materialmodule.activiti.service.MaterialModuleService;
 import com.jeeplus.modules.sg.materialmodule.activiti.service.NonPowerService;
-import com.jeeplus.modules.sg.picking.activiti.entity.PickApplication;
 import com.jeeplus.modules.sg.picking.activiti.entity.ShowList;
 import com.jeeplus.modules.sg.picking.activiti.service.PickIngService;
-import com.jeeplus.modules.sg.settActivi.entity.SettActivi;
 import com.jeeplus.modules.sg.settActivi.entity.SettList;
 import com.jeeplus.modules.sg.settActivi.service.SettActiviService;
 import com.jeeplus.modules.sys.service.SystemService;
+import com.jeeplus.modules.sys.utils.UserUtils;
 import org.activiti.engine.HistoryService;
 import org.activiti.engine.RepositoryService;
 import org.activiti.engine.RuntimeService;
@@ -74,12 +65,16 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
-import com.jeeplus.core.persistence.Page;
-import com.jeeplus.core.web.BaseController;
-import com.jeeplus.modules.act.entity.Act;
-import com.jeeplus.modules.act.service.ActTaskService;
-import com.jeeplus.modules.act.utils.ActUtils;
-import com.jeeplus.modules.sys.utils.UserUtils;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 流程个人任务相关Controller
@@ -156,11 +151,11 @@ public class ActTaskController extends BaseController {
     @ResponseBody
     @RequestMapping(value = "todo/data")
     public Map<String, Object> todoListData(Act act, HttpServletRequest request, HttpServletResponse response, Model model, String reserveProjectName, String projectId, String projectName) throws Exception {
-/*        Page<HashMap<String, String>> page = actTaskService.todoList(new Page<HashMap<String, String>>(request, response), act);
-        return getBootstrapData(page);*/
-        Page<HashMap<String, String>> page = actTaskService.newTodoList(new Page<HashMap<String, String>>(request, response), act, reserveProjectName, projectId, projectName);
-        Map<String, Object> map = new HashMap<String, Object>();
+        Page<HashMap<String, String>> page = actTaskService.todoList(new Page<HashMap<String, String>>(request, response), act);
         return getBootstrapData(page);
+//        Page<HashMap<String, String>> page = actTaskService.newTodoList(new Page<HashMap<String, String>>(request, response), act, reserveProjectName, projectId, projectName);
+//        Map<String, Object> map = new HashMap<String, Object>();
+//        return getBootstrapData(page);
     }
 
     /**

+ 93 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/BudgetBook.java

@@ -0,0 +1,93 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 预算书审前审后数据
+ * @author: 王强
+ * @create: 2022-08-10 10:39
+ **/
+public class BudgetBook extends DataEntity<BudgetBook> {
+
+    private String projectReserveId;                        //项目储备编号
+    private String pretrialBudgetTaxInclude;                //审前概算(含税)
+    private String pretrialBudgetTaxNoInclude;              //审前概算(不含税)
+    private String pretrialSupervisionFeeTaxNoInclude;      //审前监理费(不含税)
+    private String pretrialDesignFeeTaxNoInclude;           //审前设计费(不含税)
+    private String afterTrialBudgetTaxInclude;              //审后概算(含税)
+    private String afterTrialBudgetTaxNoInclude;            //审后概算(不含税)
+    private String afterTrialSupervisionFeeTaxNoInclude;    //审后监理费(不含税)
+    private String afterTrialDesignFeeTaxNoInclude;         //审后设计费(不含税)
+
+    public String getProjectReserveId() {
+        return projectReserveId;
+    }
+
+    public void setProjectReserveId(String projectReserveId) {
+        this.projectReserveId = projectReserveId;
+    }
+
+    public String getPretrialBudgetTaxInclude() {
+        return pretrialBudgetTaxInclude;
+    }
+
+    public void setPretrialBudgetTaxInclude(String pretrialBudgetTaxInclude) {
+        this.pretrialBudgetTaxInclude = pretrialBudgetTaxInclude;
+    }
+
+    public String getPretrialBudgetTaxNoInclude() {
+        return pretrialBudgetTaxNoInclude;
+    }
+
+    public void setPretrialBudgetTaxNoInclude(String pretrialBudgetTaxNoInclude) {
+        this.pretrialBudgetTaxNoInclude = pretrialBudgetTaxNoInclude;
+    }
+
+    public String getPretrialSupervisionFeeTaxNoInclude() {
+        return pretrialSupervisionFeeTaxNoInclude;
+    }
+
+    public void setPretrialSupervisionFeeTaxNoInclude(String pretrialSupervisionFeeTaxNoInclude) {
+        this.pretrialSupervisionFeeTaxNoInclude = pretrialSupervisionFeeTaxNoInclude;
+    }
+
+    public String getPretrialDesignFeeTaxNoInclude() {
+        return pretrialDesignFeeTaxNoInclude;
+    }
+
+    public void setPretrialDesignFeeTaxNoInclude(String pretrialDesignFeeTaxNoInclude) {
+        this.pretrialDesignFeeTaxNoInclude = pretrialDesignFeeTaxNoInclude;
+    }
+
+    public String getAfterTrialBudgetTaxInclude() {
+        return afterTrialBudgetTaxInclude;
+    }
+
+    public void setAfterTrialBudgetTaxInclude(String afterTrialBudgetTaxInclude) {
+        this.afterTrialBudgetTaxInclude = afterTrialBudgetTaxInclude;
+    }
+
+    public String getAfterTrialBudgetTaxNoInclude() {
+        return afterTrialBudgetTaxNoInclude;
+    }
+
+    public void setAfterTrialBudgetTaxNoInclude(String afterTrialBudgetTaxNoInclude) {
+        this.afterTrialBudgetTaxNoInclude = afterTrialBudgetTaxNoInclude;
+    }
+
+    public String getAfterTrialSupervisionFeeTaxNoInclude() {
+        return afterTrialSupervisionFeeTaxNoInclude;
+    }
+
+    public void setAfterTrialSupervisionFeeTaxNoInclude(String afterTrialSupervisionFeeTaxNoInclude) {
+        this.afterTrialSupervisionFeeTaxNoInclude = afterTrialSupervisionFeeTaxNoInclude;
+    }
+
+    public String getAfterTrialDesignFeeTaxNoInclude() {
+        return afterTrialDesignFeeTaxNoInclude;
+    }
+
+    public void setAfterTrialDesignFeeTaxNoInclude(String afterTrialDesignFeeTaxNoInclude) {
+        this.afterTrialDesignFeeTaxNoInclude = afterTrialDesignFeeTaxNoInclude;
+    }
+}

+ 66 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/Demolite.java

@@ -0,0 +1,66 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 拆旧材料清册
+ * @author: 王强
+ * @create: 2022-08-04 17:04
+ **/
+public class Demolite extends DataEntity<Demolite> {
+
+    private String name;                    //名称
+    private String specification;           //规格
+    private String unit;                    //单位
+    private String count;                   //数量
+    private String projectReserveId;        //项目储备编号
+    private String remark;                  //备注
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSpecification() {
+        return specification;
+    }
+
+    public void setSpecification(String specification) {
+        this.specification = specification;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public String getCount() {
+        return count;
+    }
+
+    public void setCount(String count) {
+        this.count = count;
+    }
+
+    public String getProjectReserveId() {
+        return projectReserveId;
+    }
+
+    public void setProjectReserveId(String projectReserveId) {
+        this.projectReserveId = projectReserveId;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}

+ 120 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/FeedBackBudget.java

@@ -0,0 +1,120 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 预算问题反馈记录
+ * @author: 王强
+ * @create: 2022-08-10 10:47
+ **/
+public class FeedBackBudget extends DataEntity<FeedBackBudget> {
+
+    private String projectReserveId;                     //项目储备编号
+    private String preferedCase;                         //甲供材优选情况
+    private String transferSituation;                    //甲供转乙供情况
+    private String budgetTemplateCheck;                  //预算模板核对
+    private String quotaApplicationCheck;                //定额套用核对
+    private String workLoadCheck;                        //工作流核对
+    private String checkTheFee;                          //取费核对
+    private String supplyCheck;                          //甲供物资核对
+    private String materialCheck;                        //乙供物资核对
+    private String liveWorkFeeCheck;                     //带电作业费核对
+    private String demolitionEngineeringProblems;        //拆除工程问题
+    private String otherProblem;                         //其他问题
+
+    public String getProjectReserveId() {
+        return projectReserveId;
+    }
+
+    public void setProjectReserveId(String projectReserveId) {
+        this.projectReserveId = projectReserveId;
+    }
+
+    public String getPreferedCase() {
+        return preferedCase;
+    }
+
+    public void setPreferedCase(String preferedCase) {
+        this.preferedCase = preferedCase;
+    }
+
+    public String getTransferSituation() {
+        return transferSituation;
+    }
+
+    public void setTransferSituation(String transferSituation) {
+        this.transferSituation = transferSituation;
+    }
+
+    public String getBudgetTemplateCheck() {
+        return budgetTemplateCheck;
+    }
+
+    public void setBudgetTemplateCheck(String budgetTemplateCheck) {
+        this.budgetTemplateCheck = budgetTemplateCheck;
+    }
+
+    public String getQuotaApplicationCheck() {
+        return quotaApplicationCheck;
+    }
+
+    public void setQuotaApplicationCheck(String quotaApplicationCheck) {
+        this.quotaApplicationCheck = quotaApplicationCheck;
+    }
+
+    public String getWorkLoadCheck() {
+        return workLoadCheck;
+    }
+
+    public void setWorkLoadCheck(String workLoadCheck) {
+        this.workLoadCheck = workLoadCheck;
+    }
+
+    public String getCheckTheFee() {
+        return checkTheFee;
+    }
+
+    public void setCheckTheFee(String checkTheFee) {
+        this.checkTheFee = checkTheFee;
+    }
+
+    public String getSupplyCheck() {
+        return supplyCheck;
+    }
+
+    public void setSupplyCheck(String supplyCheck) {
+        this.supplyCheck = supplyCheck;
+    }
+
+    public String getMaterialCheck() {
+        return materialCheck;
+    }
+
+    public void setMaterialCheck(String materialCheck) {
+        this.materialCheck = materialCheck;
+    }
+
+    public String getLiveWorkFeeCheck() {
+        return liveWorkFeeCheck;
+    }
+
+    public void setLiveWorkFeeCheck(String liveWorkFeeCheck) {
+        this.liveWorkFeeCheck = liveWorkFeeCheck;
+    }
+
+    public String getDemolitionEngineeringProblems() {
+        return demolitionEngineeringProblems;
+    }
+
+    public void setDemolitionEngineeringProblems(String demolitionEngineeringProblems) {
+        this.demolitionEngineeringProblems = demolitionEngineeringProblems;
+    }
+
+    public String getOtherProblem() {
+        return otherProblem;
+    }
+
+    public void setOtherProblem(String otherProblem) {
+        this.otherProblem = otherProblem;
+    }
+}

+ 39 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/MaterialSupply.java

@@ -0,0 +1,39 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 在线开甲供材
+ * @author: 王强
+ * @create: 2022-08-12 16:52
+ **/
+public class MaterialSupply extends DataEntity<MaterialSupply> {
+
+    private String  projectReserveId;       //项目储备编号
+    private String  materialCode;           //物料编码
+    private String  count;                  //总量
+
+    public String getProjectReserveId() {
+        return projectReserveId;
+    }
+
+    public void setProjectReserveId(String projectReserveId) {
+        this.projectReserveId = projectReserveId;
+    }
+
+    public String getMaterialCode() {
+        return materialCode;
+    }
+
+    public void setMaterialCode(String materialCode) {
+        this.materialCode = materialCode;
+    }
+
+    public String getCount() {
+        return count;
+    }
+
+    public void setCount(String count) {
+        this.count = count;
+    }
+}

+ 2 - 4
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/ReserveSummary.java

@@ -2,8 +2,6 @@ package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity;
 
 import com.jeeplus.core.persistence.DataEntity;
 
-import java.util.Date;
-
 /**
  * 储备项目交底信息汇总统计表
  * @author: 王强
@@ -51,7 +49,7 @@ public class ReserveSummary extends DataEntity<ReserveSummary> {
     private String preliminaryConstructionUnitProjectManager;    //初定施工单位项目经理
     private String handConstructionSketches; //是否移交施工草图
 
-    private String openProcessStatus;       //开启流程状态 0-未开启 1-开启
+    /*private String openProcessStatus;       //开启流程状态 0-未开启 1-开启
 
     public String getOpenProcessStatus() {
         return openProcessStatus;
@@ -59,7 +57,7 @@ public class ReserveSummary extends DataEntity<ReserveSummary> {
 
     public void setOpenProcessStatus(String openProcessStatus) {
         this.openProcessStatus = openProcessStatus;
-    }
+    }*/
 
     public String getProjectYear() {
         return projectYear;

+ 313 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/entity/ReserveSummaryProcess.java

@@ -0,0 +1,313 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity;
+
+import com.jeeplus.core.persistence.ActEntity;
+import com.jeeplus.modules.sg.managementcenter.reserveManagement.entity.ScaleDetails;
+
+/**
+ * 储备流程实体类
+ * @author: 王强
+ * @create: 2022-08-03 09:02
+ **/
+public class ReserveSummaryProcess extends ActEntity<ReserveSummaryProcess> {
+    /**
+     * 储备项目编号
+     * */
+    private String projectReserveId;
+
+    /**
+     * 项目名称
+     * */
+    private String projectName;
+
+    /**
+     * 储备项目基础数据
+     */
+    private ReserveSummary reserveSummary;
+
+
+    /**
+     * 预算问题反馈记录
+     */
+    private FeedBackBudget feedBackBudget;
+
+
+    /**
+     * 预算书
+     * */
+    private String budgetStatement;
+    /**
+     * 项目建议书
+     * */
+    private String projectProposal;
+    /**
+     * 图纸
+     * */
+    private String drawings;
+    /**
+     * 甲供材清册
+     * */
+    private ScaleDetails scaleDetails;
+    /**
+     * 施工图设计说明书
+     * */
+    private String drawingSpecification;
+
+    /**
+     * 拆旧材料清册
+     */
+    private String demolition;
+    //预算书审前审后数据
+    private String pretrialBudgetTaxInclude;                //审前概算(含税)
+    private String pretrialBudgetTaxNoInclude;              //审前概算(不含税)
+    private String pretrialSupervisionFeeTaxNoInclude;      //审前监理费(不含税)
+    private String pretrialDesignFeeTaxNoInclude;           //审前设计费(不含税)
+    private String afterTrialBudgetTaxInclude;              //审后概算(含税)
+    private String afterTrialBudgetTaxNoInclude;            //审后概算(不含税)
+    private String afterTrialSupervisionFeeTaxNoInclude;    //审后监理费(不含税)
+    private String afterTrialDesignFeeTaxNoInclude;         //审后设计费(不含税)
+
+    //预算问题反馈记录
+    private String preferedCase;                         //甲供材优选情况
+    private String transferSituation;                    //甲供转乙供情况
+    private String budgetTemplateCheck;                  //预算模板核对
+    private String quotaApplicationCheck;                //定额套用核对
+    private String workLoadCheck;                        //工作流核对
+    private String checkTheFee;                          //取费核对
+    private String supplyCheck;                          //甲供物资核对
+    private String materialCheck;                        //乙供物资核对
+    private String liveWorkFeeCheck;                     //带电作业费核对
+    private String demolitionEngineeringProblems;        //拆除工程问题
+    private String otherProblem;                         //其他问题
+
+    public String getPreferedCase() {
+        return preferedCase;
+    }
+
+    public void setPreferedCase(String preferedCase) {
+        this.preferedCase = preferedCase;
+    }
+
+    public String getTransferSituation() {
+        return transferSituation;
+    }
+
+    public void setTransferSituation(String transferSituation) {
+        this.transferSituation = transferSituation;
+    }
+
+    public String getBudgetTemplateCheck() {
+        return budgetTemplateCheck;
+    }
+
+    public void setBudgetTemplateCheck(String budgetTemplateCheck) {
+        this.budgetTemplateCheck = budgetTemplateCheck;
+    }
+
+    public String getQuotaApplicationCheck() {
+        return quotaApplicationCheck;
+    }
+
+    public void setQuotaApplicationCheck(String quotaApplicationCheck) {
+        this.quotaApplicationCheck = quotaApplicationCheck;
+    }
+
+    public String getWorkLoadCheck() {
+        return workLoadCheck;
+    }
+
+    public void setWorkLoadCheck(String workLoadCheck) {
+        this.workLoadCheck = workLoadCheck;
+    }
+
+    public String getCheckTheFee() {
+        return checkTheFee;
+    }
+
+    public void setCheckTheFee(String checkTheFee) {
+        this.checkTheFee = checkTheFee;
+    }
+
+    public String getSupplyCheck() {
+        return supplyCheck;
+    }
+
+    public void setSupplyCheck(String supplyCheck) {
+        this.supplyCheck = supplyCheck;
+    }
+
+    public String getMaterialCheck() {
+        return materialCheck;
+    }
+
+    public void setMaterialCheck(String materialCheck) {
+        this.materialCheck = materialCheck;
+    }
+
+    public String getLiveWorkFeeCheck() {
+        return liveWorkFeeCheck;
+    }
+
+    public void setLiveWorkFeeCheck(String liveWorkFeeCheck) {
+        this.liveWorkFeeCheck = liveWorkFeeCheck;
+    }
+
+    public String getDemolitionEngineeringProblems() {
+        return demolitionEngineeringProblems;
+    }
+
+    public void setDemolitionEngineeringProblems(String demolitionEngineeringProblems) {
+        this.demolitionEngineeringProblems = demolitionEngineeringProblems;
+    }
+
+    public String getOtherProblem() {
+        return otherProblem;
+    }
+
+    public void setOtherProblem(String otherProblem) {
+        this.otherProblem = otherProblem;
+    }
+
+    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 ReserveSummary getReserveSummary() {
+        return reserveSummary;
+    }
+
+    public void setReserveSummary(ReserveSummary reserveSummary) {
+        this.reserveSummary = reserveSummary;
+    }
+
+    public FeedBackBudget getFeedBackBudget() {
+        return feedBackBudget;
+    }
+
+    public void setFeedBackBudget(FeedBackBudget feedBackBudget) {
+        this.feedBackBudget = feedBackBudget;
+    }
+
+    public String getBudgetStatement() {
+        return budgetStatement;
+    }
+
+    public void setBudgetStatement(String budgetStatement) {
+        this.budgetStatement = budgetStatement;
+    }
+
+    public String getProjectProposal() {
+        return projectProposal;
+    }
+
+    public void setProjectProposal(String projectProposal) {
+        this.projectProposal = projectProposal;
+    }
+
+    public String getDrawings() {
+        return drawings;
+    }
+
+    public void setDrawings(String drawings) {
+        this.drawings = drawings;
+    }
+
+    public ScaleDetails getScaleDetails() {
+        return scaleDetails;
+    }
+
+    public void setScaleDetails(ScaleDetails scaleDetails) {
+        this.scaleDetails = scaleDetails;
+    }
+
+    public String getDrawingSpecification() {
+        return drawingSpecification;
+    }
+
+    public void setDrawingSpecification(String drawingSpecification) {
+        this.drawingSpecification = drawingSpecification;
+    }
+
+    public String getDemolition() {
+        return demolition;
+    }
+
+    public void setDemolition(String demolition) {
+        this.demolition = demolition;
+    }
+
+    public String getPretrialBudgetTaxInclude() {
+        return pretrialBudgetTaxInclude;
+    }
+
+    public void setPretrialBudgetTaxInclude(String pretrialBudgetTaxInclude) {
+        this.pretrialBudgetTaxInclude = pretrialBudgetTaxInclude;
+    }
+
+    public String getPretrialBudgetTaxNoInclude() {
+        return pretrialBudgetTaxNoInclude;
+    }
+
+    public void setPretrialBudgetTaxNoInclude(String pretrialBudgetTaxNoInclude) {
+        this.pretrialBudgetTaxNoInclude = pretrialBudgetTaxNoInclude;
+    }
+
+    public String getPretrialSupervisionFeeTaxNoInclude() {
+        return pretrialSupervisionFeeTaxNoInclude;
+    }
+
+    public void setPretrialSupervisionFeeTaxNoInclude(String pretrialSupervisionFeeTaxNoInclude) {
+        this.pretrialSupervisionFeeTaxNoInclude = pretrialSupervisionFeeTaxNoInclude;
+    }
+
+    public String getPretrialDesignFeeTaxNoInclude() {
+        return pretrialDesignFeeTaxNoInclude;
+    }
+
+    public void setPretrialDesignFeeTaxNoInclude(String pretrialDesignFeeTaxNoInclude) {
+        this.pretrialDesignFeeTaxNoInclude = pretrialDesignFeeTaxNoInclude;
+    }
+
+    public String getAfterTrialBudgetTaxInclude() {
+        return afterTrialBudgetTaxInclude;
+    }
+
+    public void setAfterTrialBudgetTaxInclude(String afterTrialBudgetTaxInclude) {
+        this.afterTrialBudgetTaxInclude = afterTrialBudgetTaxInclude;
+    }
+
+    public String getAfterTrialBudgetTaxNoInclude() {
+        return afterTrialBudgetTaxNoInclude;
+    }
+
+    public void setAfterTrialBudgetTaxNoInclude(String afterTrialBudgetTaxNoInclude) {
+        this.afterTrialBudgetTaxNoInclude = afterTrialBudgetTaxNoInclude;
+    }
+
+    public String getAfterTrialSupervisionFeeTaxNoInclude() {
+        return afterTrialSupervisionFeeTaxNoInclude;
+    }
+
+    public void setAfterTrialSupervisionFeeTaxNoInclude(String afterTrialSupervisionFeeTaxNoInclude) {
+        this.afterTrialSupervisionFeeTaxNoInclude = afterTrialSupervisionFeeTaxNoInclude;
+    }
+
+    public String getAfterTrialDesignFeeTaxNoInclude() {
+        return afterTrialDesignFeeTaxNoInclude;
+    }
+
+    public void setAfterTrialDesignFeeTaxNoInclude(String afterTrialDesignFeeTaxNoInclude) {
+        this.afterTrialDesignFeeTaxNoInclude = afterTrialDesignFeeTaxNoInclude;
+    }
+}

+ 20 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/BudgetBookMapper.java

@@ -0,0 +1,20 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.BudgetBook;
+
+/**
+ * 预算书审前审后数据 mapper
+ * @author: 王强
+ * @create: 2022-08-10 15:13
+ **/
+@MyBatisMapper
+public interface BudgetBookMapper extends BaseMapper<BudgetBook> {
+
+    /**
+     * 根据 projectReserveId将相关的材料拆旧清册数据清空
+     * @param projectReserveId
+     */
+    void deleteByProjectReserveId(String projectReserveId);
+}

+ 29 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/DemoliteMapper.java

@@ -0,0 +1,29 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.Demolite;
+import com.jeeplus.modules.sg.managementcenter.materialinfo.entity.MaterialInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 拆旧材料清册 mapper
+ * @author: 王强
+ * @create: 2022-08-04 17:18
+ **/
+@MyBatisMapper
+public interface DemoliteMapper extends BaseMapper<Demolite> {
+
+    /**
+     * 插入对应的项目甲供材信息
+     * */
+    void insertList(@Param("list") List<Demolite> list);
+
+    /**
+     * 根据 projectReserveId将相关的材料拆旧清册数据清空
+     * @param projectReserveId
+     */
+    void deleteByProjectReserveId(String projectReserveId);
+}

+ 27 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/FeedBackBudgetMapper.java

@@ -0,0 +1,27 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.FeedBackBudget;
+
+/**
+ * 预算问题反馈记录 mapper
+ * @author: 王强
+ * @create: 2022-08-10 16:01
+ **/
+@MyBatisMapper
+public interface FeedBackBudgetMapper extends BaseMapper<FeedBackBudget> {
+
+    /**
+     * 根据 projectReserveId将相关的材料拆旧清册数据清空
+     * @param projectReserveId
+     */
+    void deleteByProjectReserveId(String projectReserveId);
+
+    /**
+     * 根据projectReserveId查询出相关的预算问题反馈记录
+     * @param projectReserveId
+     * @return
+     */
+    FeedBackBudget findByProjectReserveId(String projectReserveId);
+}

+ 28 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/MaterialSupplyMapper.java

@@ -0,0 +1,28 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.MaterialSupply;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 在线开甲供材
+ * @author: 王强
+ * @create: 2022-08-12 16:58
+ **/
+@MyBatisMapper
+public interface MaterialSupplyMapper extends BaseMapper<MaterialSupply> {
+
+    /**
+     * 插入对应的项目甲供材信息
+     * */
+    void insertList(@Param("list") List<MaterialSupply> list);
+
+    /**
+     * 根据 projectReserveId将相关的材料拆旧清册数据清空
+     * @param projectReserveId
+     */
+    void deleteByProjectReserveId(String projectReserveId);
+}

+ 7 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/ReserveProcessProjectMapper.java

@@ -100,4 +100,11 @@ public interface ReserveProcessProjectMapper extends BaseMapper<ReserveProcessPr
      * @param key 流程定义表key标识
      * */
     String findDefId(String key);
+
+    /**
+     * 通过流程定实例id查询储备人员信息
+     * @return 人员流转信息
+     * @param procInsId 流程实例id
+     * */
+    ReserveProcessProject findCgUser(String procInsId);
 }

+ 62 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/ReserveSummaryProcessMapper.java

@@ -0,0 +1,62 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveSummaryProcess;
+import com.jeeplus.modules.sg.managementcenter.materialinfo.entity.MaterialInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author: 王强
+ * @create: 2022-08-03 10:13
+ **/
+@MyBatisMapper
+public interface ReserveSummaryProcessMapper extends BaseMapper<ReserveSummaryProcess> {
+
+    /**
+     * 通过procInsId查询项目定义号
+     * */
+    String findProjectId(ReserveSummaryProcess reserveProcess);
+
+    /**
+     * 通过项目名称删除对应甲供材信息数据
+     * */
+    void deleteMaterial(String projectName);
+
+    /**
+     * 插入对应的项目甲供材信息
+     * */
+    void insertList(@Param("list") List<MaterialInfo> list);
+
+    /**
+     * 通过储备项目编号查询项目是否有甲供材清册
+     */
+    Integer findMaterialData(String procInsId);
+
+    /**
+     * 修改项目设计单位信息
+     * */
+    void updateDesign(ReserveSummaryProcess reserveProcess);
+
+    /**
+     * 通过流程定义号删除流程对应信息
+     * */
+    void deleteAct(String projectReserveId);
+
+    /**
+     * 储备文件管理,
+     */
+    List<ReserveSummaryProcess> findAllUpload(ReserveSummaryProcess reserveProcess);
+
+    /**
+     * 储备流程当前流程所有的甲供材数据
+     */
+    List<MaterialInfo> findMaterialList(MaterialInfo entity);
+
+    /**
+     * 通过项目名称导出符合条件的数据
+     * */
+    List<MaterialInfo> findMaterialActiviti(String projectName);
+}

+ 45 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/BudgetBookMapper.xml

@@ -0,0 +1,45 @@
+<?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.reserveManage.mapper.BudgetBookMapper">
+
+    <insert id="insert">
+        insert into cg_budget_book (
+        id,
+        create_by,
+        create_date,
+        update_by,
+        update_date,
+        del_flag,
+        projectReserveId,
+        pretrialBudgetTaxInclude,
+        pretrialBudgetTaxNoInclude,
+        pretrialSupervisionFeeTaxNoInclude,
+        pretrialDesignFeeTaxNoInclude,
+        afterTrialBudgetTaxInclude,
+        afterTrialBudgetTaxNoInclude,
+        afterTrialSupervisionFeeTaxNoInclude,
+        afterTrialDesignFeeTaxNoInclude
+        )
+        values
+            (
+            #{id},
+            #{createBy.id},
+            #{createDate},
+            #{updateBy.id},
+            #{updateDate},
+            #{delFlag},
+            #{projectReserveId},
+            #{pretrialBudgetTaxInclude},
+            #{pretrialBudgetTaxNoInclude},
+            #{pretrialSupervisionFeeTaxNoInclude},
+            #{pretrialDesignFeeTaxNoInclude},
+            #{afterTrialBudgetTaxInclude},
+            #{afterTrialBudgetTaxNoInclude},
+            #{afterTrialSupervisionFeeTaxNoInclude},
+            #{afterTrialDesignFeeTaxNoInclude}
+            )
+    </insert>
+    <delete id="deleteByProjectReserveId">
+        delete from cg_budget_book where projectReserveId = #{projectReserveId}
+    </delete>
+</mapper>

+ 39 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/DemoliteMapper.xml

@@ -0,0 +1,39 @@
+<?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.reserveManage.mapper.DemoliteMapper">
+    <insert id="insertList">
+        insert INTO cg_demolition_list(
+        id,
+        create_by,
+        create_date,
+        update_by,
+        update_date,
+        del_flag,
+        name,
+        specification,
+        unit,
+        count,
+        projectReserveId,
+        remark
+        ) VALUES
+        <foreach collection="list" item="item" index="index" separator="," >
+            (
+            #{item.id},
+            #{item.createBy.id},
+            #{item.createDate},
+            #{item.updateBy.id},
+            #{item.updateDate},
+            #{item.delFlag},
+            #{item.name},
+            #{item.specification},
+            #{item.unit},
+            #{item.count},
+            #{item.projectReserveId},
+            #{item.remark}
+            )
+        </foreach>
+    </insert>
+    <delete id="deleteByProjectReserveId">
+        delete from cg_demolition_list where projectReserveId = #{projectReserveId}
+    </delete>
+</mapper>

+ 55 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/FeedBackBudgetMapper.xml

@@ -0,0 +1,55 @@
+<?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.reserveManage.mapper.FeedBackBudgetMapper">
+
+    <insert id="insert">
+        insert into cg_feedback_on_budget (
+        id,
+        create_by,
+        create_date,
+        update_by,
+        update_date,
+        del_flag,
+        projectReserveId,
+        preferedCase,
+        transferSituation,
+        budgetTemplateCheck,
+        quotaApplicationCheck,
+        workLoadCheck,
+        checkTheFee,
+        supplyCheck,
+        materialCheck,
+        liveWorkFeeCheck,
+        demolitionEngineeringProblems,
+        otherProblem
+        )
+        values
+            (
+            #{id},
+            #{createBy.id},
+            #{createDate},
+            #{updateBy.id},
+            #{updateDate},
+            #{delFlag},
+            #{projectReserveId},
+            #{preferedCase},
+            #{transferSituation},
+            #{budgetTemplateCheck},
+            #{quotaApplicationCheck},
+            #{workLoadCheck},
+            #{checkTheFee},
+            #{supplyCheck},
+            #{materialCheck},
+            #{liveWorkFeeCheck},
+            #{demolitionEngineeringProblems},
+            #{otherProblem}
+            )
+    </insert>
+    <delete id="deleteByProjectReserveId">
+        delete from cg_feedback_on_budget where projectReserveId = #{projectReserveId}
+    </delete>
+    <select id="findByProjectReserveId"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.FeedBackBudget">
+        select * from cg_feedback_on_budget where projectReserveId = #{projectReserveId}
+    </select>
+</mapper>

+ 33 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/MaterialSupplyMapper.xml

@@ -0,0 +1,33 @@
+<?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.reserveManage.mapper.MaterialSupplyMapper">
+    <insert id="insertList">
+        insert INTO cg_material_supply_online(
+        id,
+        create_by,
+        create_date,
+        update_by,
+        update_date,
+        del_flag,
+        projectReserveId,
+        materialCode,
+        count
+        ) VALUES
+        <foreach collection="list" item="item" index="index" separator="," >
+            (
+            #{item.id},
+            #{item.createBy.id},
+            #{item.createDate},
+            #{item.updateBy.id},
+            #{item.updateDate},
+            #{item.delFlag},
+            #{projectReserveId},
+            #{materialCode},
+            #{count}
+            )
+        </foreach>
+    </insert>
+    <delete id="deleteByProjectReserveId">
+        delete from cg_material_supply_online where projectReserveId = #{projectReserveId}
+    </delete>
+</mapper>

+ 6 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/ReserveProcessProjectMapper.xml

@@ -489,4 +489,10 @@
         where KEY_ = #{key}
           and VERSION_ = (select MAX(VERSION_) FROM act_re_procdef where KEY_ = #{key})
     </select>
+    <select id="findCgUser"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveProcessProject">
+        select *
+        from cg_reserve_process
+        where projectReserveId = (select projectReserveId from cg_personnel_activiti where proc_ins_id = #{procInsId})
+    </select>
 </mapper>

+ 247 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/ReserveSummaryProcessMapper.xml

@@ -0,0 +1,247 @@
+<?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.reserveManage.mapper.ReserveSummaryProcessMapper">
+
+    <sql id="standardColumns">
+        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.projectReserveId,
+        a.projectName,
+		a.projectYear as 'reserveSummary.projectYear',
+		a.projectNature as 'reserveSummary.projectNature',
+		a.demandUnit as 'reserveSummary.demandUnit',
+		a.district as 'reserveSummary.district',
+		a.projectGroup as 'reserveSummary.projectGroup',
+		a.reserveBatches as 'reserveSummary.reserveBatches',
+		a.blockSupply as 'reserveSummary.blockSupply',
+		a.gridNumber as 'reserveSummary.gridNumber',
+		a.cellNumber as 'reserveSummary.cellNumber',
+		a.projectReserveId as 'reserveSummary.projectReserveId',
+		a.projectName as 'reserveSummary.projectName',
+		a.constructionNecessityAndContent as 'reserveSummary.constructionNecessityAndContent',
+		a.substationName as 'reserveSummary.substationName',
+		a.circuitName as 'reserveSummary.circuitName',
+		a.netRackProjectDivide as 'reserveSummary.netRackProjectDivide',
+		a.requirementType as 'reserveSummary.requirementType',
+		a.costEstimate as 'reserveSummary.costEstimate',
+		a.basicRemarks as 'reserveSummary.basicRemarks',
+		a.reserveProgress as 'reserveSummary.reserveProgress',
+		a.includeReserve as 'reserveSummary.includeReserve',
+		a.majorProblemClassification as 'reserveSummary.majorProblemClassification',
+		a.problemDescription as 'reserveSummary.problemDescription',
+		a.changePlan as 'reserveSummary.changePlan',
+		a.programChangeDescription as 'reserveSummary.programChangeDescription',
+		a.cancelConfirmationDepartment as 'reserveSummary.cancelConfirmationDepartment',
+		a.truthRemark as 'reserveSummary.truthRemark',
+		a.demandUnitPriority as 'reserveSummary.demandUnitPriority',
+		a.implementPlan as 'reserveSummary.implementPlan',
+		a.initialImplementBatch as 'reserveSummary.initialImplementBatch',
+		a.preliminaryConstructionUnit as 'reserveSummary.preliminaryConstructionUnit',
+		a.preliminaryConstructionUnitProjectManager as 'reserveSummary.preliminaryConstructionUnitProjectManager',
+		a.handConstructionSketches as 'reserveSummary.handConstructionSketches'
+
+    </sql>
+
+    <insert id="insert">
+        insert into cg_personnel_activiti (
+                                 id,
+                                 create_by,
+                                 create_date,
+                                 update_by,
+                                 update_date,
+                                 del_flag,
+                                 remarks,
+                                 projectReserveId)
+        values (#{id},
+                #{createBy.id},
+                #{createDate},
+                #{updateBy.id},
+                #{updateDate},
+                #{delFlag},
+                #{remarks},
+                #{projectReserveId})
+    </insert>
+    <insert id="insertList">
+        insert INTO cg_material_data(
+        id,
+        create_by,
+        create_date,
+        update_by,
+        update_date,
+        remarks,
+        del_flag,
+        projectName,
+        materialCode,
+        materialName,
+        extendDescription ,
+        unit ,
+        totalCount,
+        weightKg,
+        weightTon,
+        supplyType,
+        note,
+        state
+        ) VALUES
+        <foreach collection="list" item="item" index="index" separator="," >
+            (
+            #{item.id},
+            #{item.createBy.id},
+            #{item.createDate},
+            #{item.updateBy.id},
+            #{item.updateDate},
+            #{item.remarks},
+            #{item.delFlag},
+            #{item.projectName},
+            #{item.materialCode},
+            #{item.materialName},
+            #{item.extendDescription},
+            #{item.unit},
+            #{item.totalCount},
+            #{item.weightKg},
+            #{item.weightTon},
+            #{item.supplyType},
+            #{item.note},
+            #{item.state}
+            )
+        </foreach>
+    </insert>
+    <update id="updateDesign">
+        update cg_personnel_activiti
+        set budgetStatement = #{budgetStatement},
+            projectProposal = #{projectProposal},
+            drawings = #{drawings},
+            drawingSpecification = #{drawingSpecification}
+        where projectReserveId = #{projectReserveId}
+    </update>
+    <delete id="deleteMaterial">
+        delete from cg_material_data
+        where projectName = #{projectName}
+    </delete>
+    <delete id="deleteAct">
+        delete
+        from cg_personnel_activiti
+        where projectReserveId = #{projectReserveId}
+    </delete>
+    <select id="findProjectId" resultType="java.lang.String">
+        select projectReserveId from cg_personnel_activiti where id = #{id};
+    </select>
+
+    <select id="get" resultType="com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveSummaryProcess">
+        select
+        <include refid="standardColumns"/>,
+        cpa.budgetStatement,
+        cpa.projectProposal,
+        cpa.drawings,
+        cpa.drawingSpecification,
+        cpa.submittedApproval,
+        cpa.constructionCost,
+        cpa.amountFunds,
+        cpa.otherExpenses,
+        cpa.preliminaryCost,
+        cpa.investigationFee,
+        cpa.designFee,
+        cpa.supervisionFee,
+        cpa.examineIncluding,
+        cpa.deductibleTaxes,
+        cpa.examineInExcluding,
+        cpa.constructionTax,
+        cpa.amountTax,
+        cpa.otherTax,
+        cpa.preliminaryTax,
+        cpa.investigationTax,
+        cpa.designTax,
+        cpa.supervisionTax,
+        fe.preferedCase,
+        fe.transferSituation,
+        fe.budgetTemplateCheck,
+        fe.quotaApplicationCheck,
+        fe.workLoadCheck,
+        fe.checkTheFee,
+        fe.supplyCheck,
+        fe.materialCheck,
+        fe.liveWorkFeeCheck,
+        fe.demolitionEngineeringProblems,
+        fe.otherProblem
+        from cg_reserve_summary_statistics a
+        left join cg_personnel_activiti cpa on a.projectReserveId = cpa.projectReserveId
+        left join cg_feedback_on_budget fe on a.projectReserveId = fe.projectReserveId
+        where a.projectReserveId = #{projectReserveId}
+    </select>
+    <select id="findMaterialData" resultType="java.lang.Integer">
+        select count(id)
+        from cg_material_data
+        where projectName =
+        (select projectName from cg_reserve_summary_statistics where projectReserveId = (
+            select projectReserveId from cg_personnel_activiti where proc_ins_id = #{procInsId}))
+    </select>
+    <select id="findAllUpload"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveSummaryProcess">
+        select
+        b.id,
+        b.projectReserveId,
+        b.projectName,
+        a.budgetStatement,
+        a.projectProposal,
+        a.drawings,
+        a.drawingSpecification
+        from cg_personnel_activiti a
+        left join cg_reserve_summary_statistics b on a.projectReserveId = b.projectReserveId
+        <where>
+            1=1
+            <if test="projectReserveId!=null and projectReserveId !=''">
+                and b.projectReserveId = #{projectReserveId}
+            </if>
+        </where>
+    </select>
+    <select id="findMaterialList"
+            resultType="com.jeeplus.modules.sg.managementcenter.materialinfo.entity.MaterialInfo">
+        SELECT
+        a.id AS "id",
+        a.create_by AS "createBy.id",
+        a.create_date AS "createDate",
+        a.update_by AS "updateBy.id",
+        a.update_date AS "updateDate",
+        a.remarks AS "remarks",
+        a.del_flag AS "delFlag",
+        a.projectName AS "projectName",
+        a.materialCode AS "materialCode",
+        a.materialName AS "materialName",
+        a.extendDescription AS "extendDescription",
+        a.unit AS "unit",
+        a.totalCount AS "totalCount",
+        a.weightKg AS "weightKg",
+        a.weightTon AS "weightTon",
+        a.supplyType AS "supplyType",
+        a.note AS "note",
+        a.state AS "state"
+        FROM cg_material_data a
+        <where>
+            1=1
+            <if test="projectName!=null and projectName != ''">
+                and a.projectName = #{projectName}
+            </if>
+        </where>
+    </select>
+    <select id="findMaterialActiviti"
+            resultType="com.jeeplus.modules.sg.managementcenter.materialinfo.entity.MaterialInfo">
+        select
+        projectName,
+        materialCode,
+        materialName,
+        extendDescription,
+        unit,
+        totalCount,
+        weightKg,
+        weightTon,
+        supplyType,
+        note,
+        state
+        from
+        cg_material_data
+        where projectName = #{projectName}
+    </select>
+</mapper>

+ 2 - 4
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/mapper/xml/SummaryStatisticMapper.xml

@@ -84,8 +84,7 @@
 		initialImplementBatch,
 		preliminaryConstructionUnit,
 		preliminaryConstructionUnitProjectManager,
-		handConstructionSketches,
-		openProcessStatus
+		handConstructionSketches
         )
         values
             (
@@ -126,8 +125,7 @@
             #{initialImplementBatch},
             #{preliminaryConstructionUnit},
             #{preliminaryConstructionUnitProjectManager},
-            #{handConstructionSketches},
-            #{openProcessStatus}
+            #{handConstructionSketches}
             )
     </insert>
 

+ 37 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/BudgetBookService.java

@@ -0,0 +1,37 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service;
+
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.BudgetBook;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.mapper.BudgetBookMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 预算书审前审后数据
+ * @author: 王强
+ * @create: 2022-08-10 15:21
+ **/
+@Service
+@Transactional(readOnly = true)
+public class BudgetBookService extends CrudService<BudgetBookMapper, BudgetBook> {
+
+    @Autowired
+    private BudgetBookMapper dao;
+
+    /**
+     * 新增方法
+     * @param entity
+     */
+    @Transactional(readOnly = false)
+    public void save(BudgetBook entity) {
+        entity.preInsert();
+        mapper.insert(entity);
+    }
+
+    @Transactional(readOnly = false)
+    public void deleteByProjectReserveId(String projectReserveId){
+        dao.deleteByProjectReserveId(projectReserveId);
+    }
+
+}

+ 41 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/DemoliteService.java

@@ -0,0 +1,41 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service;
+
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.Demolite;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.mapper.DemoliteMapper;
+import org.activiti.engine.TaskService;
+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: 王强
+ * @create: 2022-08-04 17:49
+ **/
+@Service
+@Transactional(readOnly = true)
+public class DemoliteService extends CrudService<DemoliteMapper, Demolite> {
+
+    @Autowired
+    private DemoliteMapper dao;
+
+    @Autowired
+    private TaskService taskService;
+
+    @Transactional(readOnly = false)
+    public void insertList(@Param("list") List<Demolite> list){
+        for(Demolite maintainData : list){
+            maintainData.preInsert();
+        }
+        dao.insertList(list);
+    }
+
+    @Transactional(readOnly = false)
+    public void deleteByProjectReserveId(String projectReserveId){
+        dao.deleteByProjectReserveId(projectReserveId);
+    }
+
+}

+ 40 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/FeedBackBudgetService.java

@@ -0,0 +1,40 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service;
+
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.FeedBackBudget;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.mapper.FeedBackBudgetMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 预算问题反馈记录 service
+ * @author: 王强
+ * @create: 2022-08-10 16:11
+ **/
+@Service
+@Transactional(readOnly = true)
+public class FeedBackBudgetService extends CrudService<FeedBackBudgetMapper, FeedBackBudget> {
+
+    @Autowired
+    private FeedBackBudgetMapper dao;
+
+    /**
+     * 新增方法
+     * @param entity
+     */
+    @Transactional(readOnly = false)
+    public void save(FeedBackBudget entity) {
+        entity.preInsert();
+        mapper.insert(entity);
+    }
+
+    @Transactional(readOnly = false)
+    public void deleteByProjectReserveId(String projectReserveId){
+        dao.deleteByProjectReserveId(projectReserveId);
+    }
+
+    public FeedBackBudget findByProjectReserveId(String projectReserveId){
+        return dao.findByProjectReserveId(projectReserveId);
+    }
+}

+ 37 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/MaterialSupplyService.java

@@ -0,0 +1,37 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service;
+
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.MaterialSupply;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.mapper.MaterialSupplyMapper;
+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: 王强
+ * @create: 2022-08-12 17:06
+ **/
+@Service
+@Transactional(readOnly = true)
+public class MaterialSupplyService extends CrudService<MaterialSupplyMapper, MaterialSupply> {
+
+    @Autowired
+    private MaterialSupplyMapper dao;
+
+    @Transactional(readOnly = false)
+    public void insertList(@Param("list") List<MaterialSupply> list){
+        for(MaterialSupply maintainData : list){
+            maintainData.preInsert();
+        }
+        dao.insertList(list);
+    }
+
+    @Transactional(readOnly = false)
+    public void deleteByProjectReserveId(String projectReserveId){
+        dao.deleteByProjectReserveId(projectReserveId);
+    }
+
+}

+ 7 - 2
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/ReserveProcessProjectService.java

@@ -4,9 +4,7 @@ import com.jeeplus.core.persistence.Page;
 import com.jeeplus.core.service.CrudService;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveProcessProject;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.mapper.ReserveProcessProjectMapper;
-import com.jeeplus.modules.sg.managementcenter.reserveManagement.entity.ExportScheme;
 import com.jeeplus.modules.sg.managementcenter.reserveManagement.entity.ProgressSchedule;
-import com.jeeplus.modules.sg.managementcenter.reserveManagement.entity.ReserveManagement;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -184,4 +182,11 @@ public class ReserveProcessProjectService extends CrudService<ReserveProcessProj
     public String findDefId(String key) {
         return dao.findDefId(key);
     }
+
+    /**
+     * 通过流程定实例id查询储备人员信息
+     */
+    public ReserveProcessProject findCgUser(String procInsId) {
+        return dao.findCgUser(procInsId);
+    }
 }

+ 356 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/service/ReserveSummaryProcessService.java

@@ -0,0 +1,356 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service;
+
+import com.google.common.collect.Maps;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ImportExcel;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.*;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.mapper.ReserveSummaryProcessMapper;
+import com.jeeplus.modules.sg.managementcenter.activiti.utils.MyActiviUtils;
+import com.jeeplus.modules.sg.managementcenter.materialinfo.entity.MaterialInfo;
+import com.jeeplus.modules.sg.managementcenter.materialinfo.util.MaterialInfoUtil;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import org.activiti.engine.TaskService;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author: 王强
+ * @create: 2022-08-03 10:15
+ **/
+@Service
+@Transactional(readOnly = true)
+public class ReserveSummaryProcessService extends CrudService<ReserveSummaryProcessMapper, ReserveSummaryProcess> {
+
+    @Autowired
+    private TaskService taskService;
+
+    @Autowired
+    private SummaryStatisticService statisticService;
+
+    @Autowired
+    private BudgetBookService budgetBookService;
+
+    @Autowired
+    private FeedBackBudgetService budgetService;
+
+
+
+    @Transactional(readOnly = false)
+    public void insert(ReserveSummaryProcess entity) {
+        mapper.insert(entity);
+    }
+
+    @Transactional(readOnly = false)
+    public void deleteAct(String projectReserveId) {
+        mapper.deleteAct(projectReserveId);
+    }
+
+
+
+    @Override
+    public ReserveSummaryProcess get(String id) {
+        ReserveSummaryProcess entity = new ReserveSummaryProcess();
+        entity.setId(id);
+        String projectId = mapper.findProjectId(entity);
+        ReserveSummaryProcess reserveProcess = mapper.get(projectId);
+        return reserveProcess;
+    }
+
+    /**
+     *在年度物资上报统计表中保存项目信息,在年度上报明细表中保存物资信息
+     */
+    @Transactional(readOnly = false)
+    public void saveData(MultipartFile file) throws IOException, InvalidFormatException {
+        ImportExcel module = new ImportExcel(file,1,"模块表");
+        Row row = module.getRow(0);
+        Object obj = module.getCellValue(row, 1);
+        if(obj==null){
+            throw new RuntimeException("找不到项目名称!");
+        }
+        String projectName = ((String) obj).trim();
+        //删除对应项目名称的甲供材信息
+        mapper.deleteMaterial(projectName);
+        ImportExcel pick = new ImportExcel(file,7,"领料清单");
+        List<MaterialInfo> materialInfos = MaterialInfoUtil.getCbData(pick,projectName);   //获取领料清单数据
+        List<MaterialInfo> list = MaterialInfoUtil.combineData(materialInfos);      //合并数据
+        //通过甲供材信息比对物料规范获得项目建设规模
+        saveList(list);
+    }
+
+    @Transactional(readOnly = false)
+    public void saveList(List<MaterialInfo> list) {
+        for(MaterialInfo maintainData : list){
+            maintainData.preInsert();
+        }
+        mapper.insertList(list);
+    }
+
+    private String returnKva(String materialDescription) {
+        if (null != materialDescription && !"".equals(materialDescription)) {
+            boolean kVA = materialDescription.contains("kVA");
+            if (kVA) {
+                int kVA1 = materialDescription.lastIndexOf("kVA");
+                String substring = materialDescription.substring(kVA1 - 3, kVA1+3);
+                return substring;
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 通过储备项目编号查询项目是否有甲供材清册
+     */
+    public Integer findMaterialData(String procInsId) {
+        return mapper.findMaterialData(procInsId);
+    }
+
+    /**
+     * 修改项目设计单位信息
+     */
+    @Transactional(readOnly = false)
+    public void updateDesign(ReserveSummaryProcess reserveProcess) {
+        mapper.updateDesign(reserveProcess);
+    }
+
+    /**
+     * 设计单位判定是否关闭
+     */
+    @Transactional(readOnly = false)
+    public void actDesignUnit(Act act, ReserveSummaryProcess reserveProcess) {
+
+        // 对不同环节的业务逻辑进行操作
+        String taskDefKey = act.getTaskDefKey();
+        //提交流程任务
+        Map<String, Object> vars = Maps.newHashMap();
+
+        ReserveProcessProject user = MyActiviUtils.findCgUser(act.getProcInsId());
+
+        //候选人
+        List list = new ArrayList<>();
+        list.add(UserUtils.getByUserName(user.getOwnerProjectManager()).getLoginName());
+        list.add(UserUtils.getByUserName(user.getOwnerReserveFullTime()).getLoginName());
+
+        vars.put("person",list);
+
+        //指定代理人
+        vars.put("manager",UserUtils.getByUserName(user.getOwnerProjectManager()).getLoginName());
+
+
+        // 提交流程任务
+        complete(act.getTaskId(), act.getProcInsId(), act.getComment(), vars);
+    }
+
+    /**
+     * 提交任务, 并保存意见
+     *
+     * @param taskId    任务ID
+     * @param procInsId 流程实例ID,如果为空,则不保存任务提交意见
+     * @param comment   任务提交意见的内容
+     * @param vars      任务变量
+     */
+    @Transactional(readOnly = false)
+    public void complete(String taskId, String procInsId, String comment, Map<String, Object> vars) {
+        complete(taskId, procInsId, comment, "", vars);
+    }
+
+    @Transactional(readOnly = false)
+    public void complete(String taskId, String procInsId, String comment, String title, Map<String, Object> vars) {
+        // 添加意见
+        if (StringUtils.isNotBlank(procInsId) && StringUtils.isNotBlank(comment)) {
+            taskService.addComment(taskId, procInsId, comment);
+        }
+
+        // 设置流程变量
+        if (vars == null) {
+            vars = Maps.newHashMap();
+        }
+
+        // 设置流程标题
+        if (StringUtils.isNotBlank(title)) {
+            vars.put("title", title);
+        }
+
+        // 提交任务
+        taskService.complete(taskId, vars);
+    }
+
+    public Page<ReserveSummaryProcess> findAllUploadPage(Page<ReserveSummaryProcess> page, ReserveSummaryProcess entity) {
+        dataRuleFilter(entity);
+        entity.setPage(page);
+        page.setList(mapper.findAllUpload(entity));
+        return page;
+    }
+
+    public Page<MaterialInfo> findMaterialPage(Page<MaterialInfo> page, MaterialInfo entity) {
+        dataRuleFilter(entity);
+        entity.setPage(page);
+        page.setList(mapper.findMaterialList(entity));
+        return page;
+    }
+
+    /**
+     * 通过项目名称导出符合条件的数据
+     */
+    public List<MaterialInfo> findMaterialActiviti(String projectName) {
+        return mapper.findMaterialActiviti(projectName);
+    }
+
+    /**
+     * 项目经理判定是否通过
+     */
+    @Transactional(readOnly = false)
+    public void actDrawingReview(Act act) {
+        Map<String, Object> vars = Maps.newHashMap();
+        String flag = act.getFlag();
+        ReserveProcessProject user = MyActiviUtils.findCgUser(act.getProcInsId());
+
+        //签收
+        /*taskService.claim(act.getTaskId(),UserUtils.getByUserName(user.getOwnerProjectManager()).getId());
+        logger.info(taskService.createTaskQuery().singleResult().getAssignee());
+        act.preUpdate();*/
+
+        if ("yes".equals(flag)) {
+            //通过流程到-设计人员上传预算书、项目建议书/可研报告、设计说明书
+            vars.put("manager", UserUtils.getByUserName(user.getDesigner()).getLoginName());
+            vars.put("pass",true);
+            vars.put("no",false);
+            vars.put("rural",false);
+            vars.put("tg",false);
+        } else if ("disagree".equals(flag)){
+            //不通过-回到上一个流程
+            vars.put("manager", UserUtils.getByUserName(user.getDesigner()).getLoginName());
+            vars.put("pass",false);
+            vars.put("tg",true);
+            vars.put("no",false);
+            vars.put("rural",false);
+
+        } else if ("cancel".equals(flag)){
+            //取消-项目取消,修改第六张表的状态
+            //先把表的状态改为取消
+            ReserveSummary reserveSummary = new ReserveSummary();
+            reserveSummary.setProjectReserveId(user.getProjectReserveId());
+            ReserveSummary summary = statisticService.queryByProjectReserveId(reserveSummary);
+            summary.setIncludeReserve("取消");
+            statisticService.update(summary);
+            vars.put("tg",false);
+            vars.put("pass",false);
+            vars.put("no",true);
+            vars.put("rural",false);
+
+        } else if ("pending".equals(flag)){
+            //待定 修改第六张表的状态
+            ReserveSummary reserveSummary = new ReserveSummary();
+            reserveSummary.setProjectReserveId(user.getProjectReserveId());
+            ReserveSummary summary = statisticService.queryByProjectReserveId(reserveSummary);
+            summary.setIncludeReserve("待定");
+            statisticService.update(summary);
+            vars.put("tg",false);
+            vars.put("pass",false);
+            vars.put("no",false);
+            vars.put("rural",true);
+
+        }
+
+        act.preUpdate();
+        // 对不同环节的业务逻辑进行操作
+        String taskDefKey = act.getTaskDefKey();
+        //查询出未完成的任务
+        /*List<Task> list = taskService.createTaskQuery().processInstanceId(act.getProcInsId()).list();
+        //将联合审图中未完成的任务设置为完成状态
+        taskService.complete(list.get(0).getId());*/
+        //完成后不显示给该用户
+//        taskService.deleteTask(list.get(0).getId(),true);
+
+
+        // 提交流程任务
+        complete(act.getTaskId(), act.getProcInsId(), act.getComment(), vars);
+    }
+
+    /**
+     * 技经人员判定是否关闭
+     */
+    @Transactional(readOnly = false)
+    public void actBudgetUnit(Act act,ReserveSummaryProcess reserveProcess) {
+        Map<String, Object> vars = Maps.newHashMap();
+        String flag = act.getFlag();
+        ReserveProcessProject user = MyActiviUtils.findCgUser(act.getProcInsId());
+
+        String projectReserveId = "";
+        String budgetRevision = "";
+        //修改储备项目概预算统计表的-是否完成概算修改 和 概算修改完成时间字段
+        if ("yes".equals(flag)) {
+            vars.put("pass",true);
+            //根据项目储备编号修改 是否完成概算修改状态
+            projectReserveId = reserveProcess.getProjectReserveId();
+            budgetRevision = "无需修改";
+
+            //将预算书审前审后数据放入数据库
+            BudgetBook budgetBook = new BudgetBook();
+            budgetBook.setProjectReserveId(reserveProcess.getProjectReserveId());
+            budgetBook.setPretrialBudgetTaxInclude(reserveProcess.getPretrialBudgetTaxInclude());
+            budgetBook.setPretrialBudgetTaxNoInclude(reserveProcess.getPretrialBudgetTaxNoInclude());
+            budgetBook.setPretrialSupervisionFeeTaxNoInclude(reserveProcess.getPretrialSupervisionFeeTaxNoInclude());
+            budgetBook.setPretrialDesignFeeTaxNoInclude(reserveProcess.getPretrialDesignFeeTaxNoInclude());
+            budgetBook.setAfterTrialBudgetTaxInclude(reserveProcess.getAfterTrialBudgetTaxInclude());
+            budgetBook.setAfterTrialBudgetTaxNoInclude(reserveProcess.getAfterTrialBudgetTaxNoInclude());
+            budgetBook.setAfterTrialSupervisionFeeTaxNoInclude(reserveProcess.getAfterTrialSupervisionFeeTaxNoInclude());
+            budgetBook.setAfterTrialDesignFeeTaxNoInclude(reserveProcess.getAfterTrialDesignFeeTaxNoInclude());
+            //插入前先清空该项目相关的预算书数据
+            budgetBookService.deleteByProjectReserveId(budgetBook.getProjectReserveId());
+            //插入
+            budgetBookService.save(budgetBook);
+        } else if ("no".equals(flag)){
+            //不通过-回到上一个流程
+            vars.put("manager", UserUtils.getByUserName(user.getDesigner()).getLoginName());
+            vars.put("pass",false);
+            //根据项目储备编号修改 是否完成概算修改状态
+            projectReserveId = reserveProcess.getProjectReserveId();
+            budgetRevision = "修改中";
+
+            //将预算问题反馈记录保存到数据库
+            FeedBackBudget budget = new FeedBackBudget();
+            budget.setProjectReserveId(reserveProcess.getProjectReserveId());
+            budget.setPreferedCase(reserveProcess.getPreferedCase());
+            budget.setTransferSituation(reserveProcess.getTransferSituation());
+            budget.setBudgetTemplateCheck(reserveProcess.getBudgetTemplateCheck());
+            budget.setQuotaApplicationCheck(reserveProcess.getQuotaApplicationCheck());
+            budget.setWorkLoadCheck(reserveProcess.getWorkLoadCheck());
+            budget.setCheckTheFee(reserveProcess.getCheckTheFee());
+            budget.setSupplyCheck(reserveProcess.getSupplyCheck());
+            budget.setMaterialCheck(reserveProcess.getMaterialCheck());
+            budget.setLiveWorkFeeCheck(reserveProcess.getLiveWorkFeeCheck());
+            budget.setDemolitionEngineeringProblems(reserveProcess.getDemolitionEngineeringProblems());
+            budget.setOtherProblem(reserveProcess.getOtherProblem());
+
+            budgetService.deleteByProjectReserveId(budget.getProjectReserveId());
+            budgetService.save(budget);
+        }
+
+        act.preUpdate();
+        // 对不同环节的业务逻辑进行操作
+        String taskDefKey = act.getTaskDefKey();
+
+        // 提交流程任务
+        complete(act.getTaskId(), act.getProcInsId(), act.getComment(), vars);
+        //设置完成时间
+        Date date = new Date();
+        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String time = format.format(date);
+
+    }
+}

+ 0 - 4
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/utils/ReserveProcessProjectExportUtil.java

@@ -648,10 +648,6 @@ public class ReserveProcessProjectExportUtil {
                 Cell cell38 = crateCell(workbook,row,38); //需求单位优先级
                 Cell cell39 = crateCell(workbook,row,39); //需求单位优先级
 
-
-
-
-
                 ReserveSummary reserveManagement = list.get(i);
 
                 cell0.setCellValue(String.valueOf(index++));

+ 25 - 5
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/utils/ReserveProcessProjectProUtil.java

@@ -1,14 +1,9 @@
 package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.utils;
 
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.*;
-import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ReserveProcessProjectService;
 import com.jeeplus.modules.sg.managementcenter.materialproject.util.ImportUtil;
-import com.jeeplus.modules.sg.managementcenter.project.service.ProjectService;
-import com.jeeplus.modules.sg.managementcenter.reserveManagement.entity.ReserveManagement;
-import com.jeeplus.modules.sg.managementcenter.reserveManagement.utils.ReserveManagementUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.Row;
-import org.springframework.beans.factory.annotation.Autowired;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -661,4 +656,29 @@ public class ReserveProcessProjectProUtil {
         }
         return list;
     }
+
+    /**
+     * 获取储备项目政策处理信息表格数据
+     * @param importUtil
+     * @return List<ReserveManagementMapper> 导入表格数据
+     */
+    public static List<Demolite> getDemoliteUtil(ImportUtil importUtil,String projectReserveId) throws ParseException {
+        int lastRow = importUtil.getLastDataRowNum();
+        List<Demolite> list = new ArrayList<Demolite>();
+
+        Demolite reserveManagement = null;
+        for(int i=1; i<=lastRow;i++){
+            reserveManagement = new Demolite();
+            Row row = importUtil.getRow(i);
+
+            reserveManagement.setName((String) importUtil.getCellValue(row,1));
+            reserveManagement.setSpecification((String) importUtil.getCellValue(row,2));
+            reserveManagement.setUnit((String) importUtil.getCellValue(row,3));
+            reserveManagement.setCount((String) importUtil.getCellValue(row,4));
+            reserveManagement.setRemark((String) importUtil.getCellValue(row,5));
+            reserveManagement.setProjectReserveId(projectReserveId);
+            list.add(reserveManagement);
+        }
+        return list;
+    }
 }

+ 331 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/web/ProcessController.java

@@ -0,0 +1,331 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.web;
+
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ExportExcel;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.Demolite;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.MaterialSupply;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveSummaryProcess;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.DemoliteService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.FeedBackBudgetService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.MaterialSupplyService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ReserveSummaryProcessService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.utils.ReserveProcessProjectProUtil;
+import com.jeeplus.modules.sg.managementcenter.materialinfo.entity.MaterialInfo;
+import com.jeeplus.modules.sg.managementcenter.materialproject.util.ImportUtil;
+import com.jeeplus.modules.sg.managementcenter.reserveManagement.entity.ReserveProcess;
+import com.jeeplus.modules.sg.raiseCapital.service.RaiseCapitalService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author: 王强
+ * @create: 2022-08-03 10:33
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/cg/reservemanagementcenter/process")
+public class ProcessController extends BaseController {
+
+    @Autowired
+    private ReserveSummaryProcessService reserveProcessService;
+
+    @Autowired
+    private DemoliteService demoliteService;
+
+    @Autowired
+    private FeedBackBudgetService budgetService;
+
+    @Autowired
+    private RaiseCapitalService raiseCapitalService;
+
+    @Autowired
+    private MaterialSupplyService materialSupplyService;
+
+    @ModelAttribute
+    public ReserveSummaryProcess get(@RequestParam(required = false) String id) {
+        ReserveSummaryProcess entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = reserveProcessService.get(id);
+        }
+        if (entity == null) {
+            entity = new ReserveSummaryProcess();
+        }
+        return entity;
+    }
+
+    /**
+     * 设计单位审核
+     */
+    @RequestMapping(value = "designUnit")
+    public String designUnit(ReserveSummaryProcess reserveProcess, Model model) {
+        model.addAttribute("reserveProcess", reserveProcess);
+        return "modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/designUnit";
+    }
+
+    /**
+     * 设计单位审核-上传预算书
+     */
+    @RequestMapping(value = "designUnitAgain")
+    public String designUnitAgain(ReserveSummaryProcess reserveProcess, Model model) {
+        model.addAttribute("reserveProcess", reserveProcess);
+        return "modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/designUnitAgain";
+    }
+
+    /**
+     * 设计单位审核-上传预算书,查看驳回意见
+     */
+    @RequestMapping(value = "designUnitAgainTwo")
+    public String designUnitAgainTwo(ReserveSummaryProcess reserveProcess, Model model) {
+        model.addAttribute("reserveProcess", reserveProcess);
+        return "modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/designUnitAgainTwo";
+    }
+
+    /**
+     * 联合审图(储备专职/配网项目经理)
+     */
+    @RequestMapping(value = "drawingReview")
+    public String drawingReview(ReserveSummaryProcess reserveProcess, Model model) {
+        model.addAttribute("reserveProcess", reserveProcess);
+        return "modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/drawingReview";
+    }
+
+    /**
+     * 技经人员审预算
+     */
+    @RequestMapping(value = "budgetReview")
+    public String budgetReview(ReserveSummaryProcess reserveProcess, Model model) {
+        reserveProcess.setPreferedCase("");
+        reserveProcess.setTransferSituation("");
+        reserveProcess.setBudgetTemplateCheck("");
+        reserveProcess.setQuotaApplicationCheck("");
+        reserveProcess.setWorkLoadCheck("");
+        reserveProcess.setCheckTheFee("");
+        reserveProcess.setSupplyCheck("");
+        reserveProcess.setMaterialCheck("");
+        reserveProcess.setLiveWorkFeeCheck("");
+        reserveProcess.setDemolitionEngineeringProblems("");
+        reserveProcess.setOtherProblem("");
+        model.addAttribute("reserveProcess", reserveProcess);
+        return "modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/budgetReview";
+    }
+
+    /**
+     * 年度物资上报明细 多文件导入验证
+     */
+    @ResponseBody
+    @RequestMapping(value = "importCGValidations")
+    public AjaxJson importCGValidations(@RequestParam("file") MultipartFile[] file) {
+        AjaxJson j = new AjaxJson();
+
+        try {
+            for (int k = 0; k < file.length; k++) {
+                reserveProcessService.saveData(file[k]);
+            }
+            j.setSuccess(true);
+            j.setErrorCode("0");
+            j.setMsg("导入成功");
+        } catch (Exception e) {
+            j.setSuccess(true);
+            j.setMsg("导入失败!失败信息:" + e.getMessage());
+        }
+        return j;
+    }
+
+    /***
+     * 设计单位审核
+     * */
+    @ResponseBody
+    @RequestMapping(value = "actDesignUnit")
+    public AjaxJson actDesignUnit(Act act, ReserveSummaryProcess reserveProcess) throws Exception {
+        AjaxJson j = new AjaxJson();
+        if (reserveProcess.getDemolition() != null) {
+            //在将拆旧清册数据存入数据库前先查出库中有没有这个project ReserveId的相关数据
+            String projectReserveId = reserveProcess.getProjectReserveId();
+            demoliteService.deleteByProjectReserveId(projectReserveId);
+            //获取拆旧清册数据
+            File file = new File(reserveProcess.getDemolition());
+            System.out.println("file.getAbsolutePath():" + file.getAbsolutePath());
+            String path = file.getAbsolutePath().replace("\\a", "");
+            System.out.println("path: " + path);
+            File demoFile = new File(path);
+
+            InputStream inputStream = new FileInputStream(demoFile);
+            MultipartFile multipartFile = new MockMultipartFile("file", demoFile.getName(), null, inputStream);
+            ImportUtil importUtil = new ImportUtil(multipartFile, 0, 0);
+            //获取导入表格所有数据
+            List<Demolite> reserveManagementList = ReserveProcessProjectProUtil.getDemoliteUtil(importUtil, projectReserveId);
+            //将数据存入数据库
+            demoliteService.insertList(reserveManagementList);
+        }
+        String flag = act.getFlag();
+        try {
+            String comment = URLDecoder.decode(act.getComment(), "UTF-8");
+            act.setComment(comment);
+            if ("yes".equals(flag)) {
+                //通过流程流程定义号查询项目编码,查询是否存在甲供材信息
+                Integer materialData = reserveProcessService.findMaterialData(act.getProcInsId());
+                if (materialData <= 0) {
+                    j.setMsg("该项目没有甲供材清册");
+                    j.setSuccess(false);
+                    return j;
+                } else {
+                    //修改项目设计单位上传文件部分
+                    reserveProcessService.updateDesign(reserveProcess);
+                    reserveProcessService.actDesignUnit(act, reserveProcess);
+                }
+            } else {
+                reserveProcessService.actDesignUnit(act, reserveProcess);
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        j.setMsg("审批成功");
+        return j;
+    }
+
+    /**
+     * 储备流程,文件显示管理
+     */
+    @ResponseBody
+    @RequestMapping(value = "allUploadData")
+    public Map<String, Object> allUploadData(ReserveSummaryProcess reserveProcess, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<ReserveSummaryProcess> page = reserveProcessService.findAllUploadPage(new Page<ReserveSummaryProcess>(request, response), reserveProcess);
+        //当判定系统为linux的时候
+        if (Global.SYS_TYPE.equals("2")) {
+            List<ReserveSummaryProcess> list = page.getList();
+            for (ReserveSummaryProcess upload :
+                    list) {
+                String a = "";
+                String b = "";
+                String c = "";
+                String d = "";
+                String path = upload.getBudgetStatement();
+                if (null != path && !"".equals(path)) {
+                    String[] split = path.split("\\|");
+                    for (int i = 0; i < split.length; i++) {
+                        a += "http://" + request.getServerName() + split[i] + "|";
+                    }
+                    upload.setBudgetStatement(a);
+                }
+
+                String projectProposal = upload.getProjectProposal();
+                if (null != projectProposal && !"".equals(projectProposal)) {
+                    String[] split1 = projectProposal.split("\\|");
+                    for (int i = 0; i < split1.length; i++) {
+                        b += "http://" + request.getServerName() + split1[i] + "|";
+                    }
+                    upload.setProjectProposal(b);
+                }
+
+                String drawings = upload.getDrawings();
+                if (null != drawings && !"".equals(drawings)) {
+                    String[] split2 = drawings.split("\\|");
+                    for (int i = 0; i < split2.length; i++) {
+                        c += "http://" + request.getServerName() + split2[i] + "|";
+                    }
+                    upload.setDrawings(c);
+                }
+
+                String drawingSpecification = upload.getDrawingSpecification();
+                if (null != drawingSpecification && !"".equals(drawingSpecification)) {
+                    String[] split3 = drawingSpecification.split("\\|");
+                    for (int i = 0; i < split3.length; i++) {
+                        d += "http://" + request.getServerName() + split3[i] + "|";
+                    }
+                    upload.setDrawingSpecification(d);
+                }
+            }
+        }
+        return getBootstrapData(page);
+    }
+
+    /**
+     * 甲供材 列表数据
+     */
+    @ResponseBody
+    @RequestMapping(value = "materialData")
+    public Map<String, Object> data(MaterialInfo materialInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<MaterialInfo> page = reserveProcessService.findMaterialPage(new Page<MaterialInfo>(request, response), materialInfo);
+        return getBootstrapData(page);
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "exportAct")
+    public AjaxJson exportAct(String projectName, ReserveProcess reserveProcess, HttpServletRequest request, HttpServletResponse response) {
+        AjaxJson j = new AjaxJson();
+        try {
+            String fileName = "甲供材清册" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+            List<MaterialInfo> list = reserveProcessService.findMaterialActiviti(projectName);
+            new ExportExcel("甲供材清册", MaterialInfo.class).setDataList(list).write(response, fileName).dispose();
+            j.setSuccess(true);
+            j.setMsg("导出成功!");
+            return j;
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导出甲供材清册失败!失败信息:" + e.getMessage());
+        }
+        return j;
+    }
+
+    /***
+     * 联合审图(储备专职/配网项目经理)
+     * */
+    @ResponseBody
+    @RequestMapping(value = "actDrawingReview")
+    public AjaxJson actDrawingReview(Act act) {
+        AjaxJson j = new AjaxJson();
+        try {
+            String comment = URLDecoder.decode(act.getComment(), "UTF-8");
+            act.setComment(comment);
+            reserveProcessService.actDrawingReview(act);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        j.setMsg("审批成功");
+        return j;
+    }
+
+    /***
+     * 技经人员审核
+     * */
+    @ResponseBody
+    @RequestMapping(value = "actBudgetUnit")
+    public AjaxJson actBudgetUnit(Act act, ReserveSummaryProcess reserveProcess) throws Exception {
+        AjaxJson j = new AjaxJson();
+
+        try {
+            String comment = URLDecoder.decode(act.getComment(), "UTF-8");
+            act.setComment(comment);
+            reserveProcessService.actBudgetUnit(act,reserveProcess);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        j.setMsg("审批成功");
+        return j;
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "saveJgc")
+    public void saveJgc(@RequestBody List<MaterialSupply> materialSupplyList){
+        materialSupplyService.insertList(materialSupplyList);
+    }
+}

+ 60 - 35
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/reserveManage/web/SummaryStatisticController.java

@@ -4,23 +4,21 @@ import com.google.common.collect.Maps;
 import com.jeeplus.common.json.AjaxJson;
 import com.jeeplus.common.utils.DateUtils;
 import com.jeeplus.common.utils.StringUtils;
-import com.jeeplus.common.utils.excel.ImportExcel;
 import com.jeeplus.core.persistence.Page;
 import com.jeeplus.core.web.BaseController;
 import com.jeeplus.modules.act.service.ActProcessService;
 import com.jeeplus.modules.act.service.ActTaskService;
-import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveProcessEntity;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveProcessProject;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveSummary;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveSummaryProcess;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ReserveProcessProjectService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ReserveSummaryProcessService;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.SummaryStatisticService;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.utils.ReserveProcessProjectExportUtil;
 import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.utils.ReserveProcessProjectProUtil;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service.BudgetStatsService;
 import com.jeeplus.modules.sg.managementcenter.materialproject.util.ImportUtil;
-import com.jeeplus.modules.sg.managementcenter.reserveManagement.entity.PersonnelTurnover;
-import com.jeeplus.modules.sg.managementcenter.reserveManagement.entity.ReserveProcess;
 import com.jeeplus.modules.sg.managementcenter.reserveManagement.service.PersonnelTurnoverService;
-import com.jeeplus.modules.sg.managementcenter.reserveManagement.service.ReserveProcessService;
 import com.jeeplus.modules.sys.utils.UserUtils;
 import org.activiti.engine.repository.ProcessDefinition;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -39,7 +37,6 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Map;
-import java.util.UUID;
 
 /**
  * 储备项目交底信息汇总统计 controller
@@ -66,7 +63,10 @@ public class SummaryStatisticController extends BaseController {
     private ActTaskService actTaskService;
 
     @Autowired
-    private ReserveProcessService reserveProcessService;
+    private ReserveSummaryProcessService reserveProcessService;
+
+    @Autowired
+    private BudgetStatsService statsService;
 
 
     @ModelAttribute
@@ -238,28 +238,61 @@ public class SummaryStatisticController extends BaseController {
             //已存在数据
             List<ReserveSummary> existList = (List<ReserveSummary>) map.get("exist");
 
-            for (ReserveSummary s : withoutList){
-                s.preInsert();
-                s.setOpenProcessStatus("1");
-                System.out.println("ReserveSummary:" + s);
-                statisticService.insert(s);
-
-                ReserveProcess reserveProcess = new ReserveProcess();
-                reserveProcess.preInsert();
-                reserveProcess.setProjectReserveId(s.getProjectReserveId());
-
-                //发送流程,更改项目状态
-                Map<String, Object> vars = Maps.newHashMap();
-
-                ReserveProcessProject processProject = projectService.queryByProjectId(s.getProjectReserveId());
-
-                vars.put("manager", UserUtils.getByUserName(processProject.getDesigner()).getLoginName());
-                String procDefId = projectService.findDefId("test");
-                ProcessDefinition p = actProcessService.getProcessDefinition(procDefId);
-                String title = s.getCurrentUser().getName() + "在" + DateUtils.getDateTime() + "发起" + p.getName();
-                actTaskService.startProcess(p.getKey(), "cg_personnel_activiti", reserveProcess.getId(), title, vars);
+            if (withoutList.size()>0){
+                for (ReserveSummary s : withoutList){
+                    /*s.setOpenProcessStatus("1");
+                    System.out.println("ReserveSummary:" + s);*/
+                    statisticService.insert(s);
+
+                    if (s.getIncludeReserve().equals("是")){
+
+                        ReserveSummaryProcess reserveProcess = new ReserveSummaryProcess();
+                        reserveProcess.preInsert();
+                        reserveProcess.setProjectReserveId(s.getProjectReserveId());
+                        //更新
+                        reserveProcessService.insert(reserveProcess);
+                        //发送流程,更改项目状态
+                        Map<String, Object> vars = Maps.newHashMap();
+
+                        ReserveProcessProject processProject = projectService.queryByProjectId(s.getProjectReserveId());
+                        //审核代理人
+                        vars.put("manager", UserUtils.getByUserName(processProject.getDesigner()).getLoginName());
+                        String procDefId = projectService.findDefId("cblc");
+                        ProcessDefinition p = actProcessService.getProcessDefinition(procDefId);
+                        String title = s.getCurrentUser().getName() + "在" + DateUtils.getDateTime() + "发起" + p.getName();
+                        actTaskService.startProcess(p.getKey(), "cg_personnel_activiti", reserveProcess.getId(), title, vars);
+                        /*int count = statsService.selectCount(reserveProcess.getProjectReserveId());
+                        if (count>0){
+                            statsService.updateStats("设计单位在线开甲供材",null,null,reserveProcess.getProjectReserveId());
+                        }*/
+                    }
+                }
             }
 
+            //对已存在的数据进行修改
+            if(existList.size()>0){
+                for (ReserveSummary reserveManagement : existList) {
+                    //去掉之前的流程,重新开始流程
+                    reserveProcessService.deleteAct(reserveManagement.getProjectReserveId());
+                    statisticService.update(reserveManagement);
+                    if (reserveManagement.getIncludeReserve().equals("是")){
+                        ReserveSummaryProcess reserveProcess = new ReserveSummaryProcess();
+                        reserveProcess.preInsert();
+                        reserveProcess.setProjectReserveId(reserveManagement.getProjectReserveId());
+                        //更新
+                        reserveProcessService.insert(reserveProcess);
+                        //发送流程,更改项目状态
+                        Map<String, Object> vars = Maps.newHashMap();
+
+                        ReserveProcessProject processProject = projectService.queryByProjectId(reserveManagement.getProjectReserveId());
+                        vars.put("manager", UserUtils.getByUserName(processProject.getDesigner()).getLoginName());
+                        String procDefId = projectService.findDefId("cblc");
+                        ProcessDefinition p = actProcessService.getProcessDefinition(procDefId);
+                        String title = reserveManagement.getCurrentUser().getName() + "在" + DateUtils.getDateTime() + "发起" + p.getName();
+                        actTaskService.startProcessNew(p.getKey(), "cg_personnel_activiti", reserveProcess.getId(), title, vars);
+                    }
+                }
+            }
 
             int i = withoutList.size() + existList.size();
             j.setMsg("已成功导入" + i + "条项目储备信息记录");
@@ -307,12 +340,4 @@ public class SummaryStatisticController extends BaseController {
         return "modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/reserveManagementModifyByzz";
     }
 
-    /**
-     * 设计单位审核
-     * */
-    @RequestMapping(value = "designUnit")
-    public String designUnit(ReserveProcess reserveProcess, Model model) {
-        model.addAttribute("reserveProcess", reserveProcess);
-        return "modules/sg/managementcenter/reserveManagement/designUnit";
-    }
 }

+ 402 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/BudgetStats.java

@@ -0,0 +1,402 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 储备项目概预算统计表
+ * @author: 王强
+ * @create: 2022-08-16 09:11
+ **/
+public class BudgetStats extends DataEntity<BudgetStats> {
+
+    private String reserveProgress;                     //储备进度
+    private String implementPlan;                       //是否纳入实施计划
+    private String implementBatch;                      //初定实施批次
+    private String projectReserveId;                    //项目储备编号
+    private String pretrialEstimateAmount;              //概算信息(审前)- 总概算金额(含税)
+    private String pretrialEstimateAmountExcludeTax;    //概算信息(审前)- 总概算金额(不含税)
+    private String pretrialDeductibleAmount;            //概算信息(审前)- 可抵扣金额(税金)
+    private String pretrialConstructeConsts;            //概算信息(审前)- 施工费(含税)
+    private String pretrialMaterialAmount;              //概算信息(审前)- 甲供物资金额(含税)
+    private String pretrialOtherExpanses;               //概算信息(审前)- 其他费用(含税)
+    private String pretrialPreliminaryConstructeFee;    //概算信息(审前)- 前期工程费(含税)
+    private String pretrialSurveyFee;                   //概算信息(审前)- 勘察费(含税)
+    private String pretrialDesignFee;                   //概算信息(审前)- 设计费(含税)
+    private String pretrialSupervisionFee;              //概算信息(审前)- 监理费(含税)
+    private String afterTrialEstimateAmount;            //概算信息(审后)- 总概算金额(含税)
+    private String afterTrialEstimateAmountExcludeTax;  //概算信息(审后)- 总概算金额(不含税)
+    private String afterTrialDeductibleAmount;          //概算信息(审后)- 可抵扣金额(税金)
+    private String afterTrialConstructeConsts;          //概算信息(审后)- 施工费(含税)
+    private String afterTrialMaterialAmount;            //概算信息(审后)- 甲供物资金额(含税)
+    private String afterTrialOtherExpanses;             //概算信息(审后)- 其他费用(含税)
+    private String afterTrialPreliminaryConstructeFee;  //概算信息(审后)- 前期工程费(含税)
+    private String afterTrialSurveyFee;                 //概算信息(审后)- 勘察费(含税)
+    private String afterTrialDesignFee;                 //概算信息(审后)- 设计费(含税)
+    private String afterTrialSupervisionFee;            //概算信息(审后)- 监理费(含税)
+    private String budgetRevision;                      //是否完成概算修改
+    private String completeTime;                        //概算修改完成时间
+
+    //储备项目基本信息
+    private String projectYear;             //项目年份
+    private String projectNature;           //项目性质
+    private String demandUnit;              //需求单位
+    private String district;                //区域
+    private String projectGroup;            //项目分组
+    private String reserveBatches;          //储备批次
+    private String blockSupply;             //供电区域
+    private String gridNumber;              //网格编号
+    private String cellNumber;              //单元格编号
+    private String projectName;             //项目名称
+    private String constructionNecessityAndContent;           //建设必要性及内容
+    private String substationName;           //变电站名称
+    private String circuitName;              //线路名称
+    private String netRackProjectDivide;     //网架项目划分
+    private String requirementType;          //需求类型
+    private String costEstimate;             //费用估算
+    private String 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 getPretrialEstimateAmount() {
+        return pretrialEstimateAmount;
+    }
+
+    public void setPretrialEstimateAmount(String pretrialEstimateAmount) {
+        this.pretrialEstimateAmount = pretrialEstimateAmount;
+    }
+
+    public String getPretrialEstimateAmountExcludeTax() {
+        return pretrialEstimateAmountExcludeTax;
+    }
+
+    public void setPretrialEstimateAmountExcludeTax(String pretrialEstimateAmountExcludeTax) {
+        this.pretrialEstimateAmountExcludeTax = pretrialEstimateAmountExcludeTax;
+    }
+
+    public String getPretrialDeductibleAmount() {
+        return pretrialDeductibleAmount;
+    }
+
+    public void setPretrialDeductibleAmount(String pretrialDeductibleAmount) {
+        this.pretrialDeductibleAmount = pretrialDeductibleAmount;
+    }
+
+    public String getPretrialConstructeConsts() {
+        return pretrialConstructeConsts;
+    }
+
+    public void setPretrialConstructeConsts(String pretrialConstructeConsts) {
+        this.pretrialConstructeConsts = pretrialConstructeConsts;
+    }
+
+    public String getPretrialMaterialAmount() {
+        return pretrialMaterialAmount;
+    }
+
+    public void setPretrialMaterialAmount(String pretrialMaterialAmount) {
+        this.pretrialMaterialAmount = pretrialMaterialAmount;
+    }
+
+    public String getPretrialOtherExpanses() {
+        return pretrialOtherExpanses;
+    }
+
+    public void setPretrialOtherExpanses(String pretrialOtherExpanses) {
+        this.pretrialOtherExpanses = pretrialOtherExpanses;
+    }
+
+    public String getPretrialPreliminaryConstructeFee() {
+        return pretrialPreliminaryConstructeFee;
+    }
+
+    public void setPretrialPreliminaryConstructeFee(String pretrialPreliminaryConstructeFee) {
+        this.pretrialPreliminaryConstructeFee = pretrialPreliminaryConstructeFee;
+    }
+
+    public String getPretrialSurveyFee() {
+        return pretrialSurveyFee;
+    }
+
+    public void setPretrialSurveyFee(String pretrialSurveyFee) {
+        this.pretrialSurveyFee = pretrialSurveyFee;
+    }
+
+    public String getPretrialDesignFee() {
+        return pretrialDesignFee;
+    }
+
+    public void setPretrialDesignFee(String pretrialDesignFee) {
+        this.pretrialDesignFee = pretrialDesignFee;
+    }
+
+    public String getPretrialSupervisionFee() {
+        return pretrialSupervisionFee;
+    }
+
+    public void setPretrialSupervisionFee(String pretrialSupervisionFee) {
+        this.pretrialSupervisionFee = pretrialSupervisionFee;
+    }
+
+    public String getAfterTrialEstimateAmount() {
+        return afterTrialEstimateAmount;
+    }
+
+    public void setAfterTrialEstimateAmount(String afterTrialEstimateAmount) {
+        this.afterTrialEstimateAmount = afterTrialEstimateAmount;
+    }
+
+    public String getAfterTrialEstimateAmountExcludeTax() {
+        return afterTrialEstimateAmountExcludeTax;
+    }
+
+    public void setAfterTrialEstimateAmountExcludeTax(String afterTrialEstimateAmountExcludeTax) {
+        this.afterTrialEstimateAmountExcludeTax = afterTrialEstimateAmountExcludeTax;
+    }
+
+    public String getAfterTrialDeductibleAmount() {
+        return afterTrialDeductibleAmount;
+    }
+
+    public void setAfterTrialDeductibleAmount(String afterTrialDeductibleAmount) {
+        this.afterTrialDeductibleAmount = afterTrialDeductibleAmount;
+    }
+
+    public String getAfterTrialConstructeConsts() {
+        return afterTrialConstructeConsts;
+    }
+
+    public void setAfterTrialConstructeConsts(String afterTrialConstructeConsts) {
+        this.afterTrialConstructeConsts = afterTrialConstructeConsts;
+    }
+
+    public String getAfterTrialMaterialAmount() {
+        return afterTrialMaterialAmount;
+    }
+
+    public void setAfterTrialMaterialAmount(String afterTrialMaterialAmount) {
+        this.afterTrialMaterialAmount = afterTrialMaterialAmount;
+    }
+
+    public String getAfterTrialOtherExpanses() {
+        return afterTrialOtherExpanses;
+    }
+
+    public void setAfterTrialOtherExpanses(String afterTrialOtherExpanses) {
+        this.afterTrialOtherExpanses = afterTrialOtherExpanses;
+    }
+
+    public String getAfterTrialPreliminaryConstructeFee() {
+        return afterTrialPreliminaryConstructeFee;
+    }
+
+    public void setAfterTrialPreliminaryConstructeFee(String afterTrialPreliminaryConstructeFee) {
+        this.afterTrialPreliminaryConstructeFee = afterTrialPreliminaryConstructeFee;
+    }
+
+    public String getAfterTrialSurveyFee() {
+        return afterTrialSurveyFee;
+    }
+
+    public void setAfterTrialSurveyFee(String afterTrialSurveyFee) {
+        this.afterTrialSurveyFee = afterTrialSurveyFee;
+    }
+
+    public String getAfterTrialDesignFee() {
+        return afterTrialDesignFee;
+    }
+
+    public void setAfterTrialDesignFee(String afterTrialDesignFee) {
+        this.afterTrialDesignFee = afterTrialDesignFee;
+    }
+
+    public String getAfterTrialSupervisionFee() {
+        return afterTrialSupervisionFee;
+    }
+
+    public void setAfterTrialSupervisionFee(String afterTrialSupervisionFee) {
+        this.afterTrialSupervisionFee = afterTrialSupervisionFee;
+    }
+
+    public String getBudgetRevision() {
+        return budgetRevision;
+    }
+
+    public void setBudgetRevision(String budgetRevision) {
+        this.budgetRevision = budgetRevision;
+    }
+
+    public String getCompleteTime() {
+        return completeTime;
+    }
+
+    public void setCompleteTime(String completeTime) {
+        this.completeTime = completeTime;
+    }
+
+    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 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 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;
+    }
+}

+ 377 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/ConstructeScale.java

@@ -0,0 +1,377 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 储备项目建设规模统计表
+ * @author: 王强
+ * @create: 2022-08-16 09:46
+ **/
+public class ConstructeScale extends DataEntity<ConstructeScale> {
+    private String cityCompany;              //市公司
+    private String projectReserveId;         //项目储备编号
+    private String constructePurpose;        //建设目的
+    private String factoryPrefab;            //土建工厂化预制
+    private String ancillaryFacility;        //附属设施
+    private String constructionWorkMethod;   //施工作业方式(完全不停电作业、部分不停电作业、停电作业)
+    private String workWithoutInterruption;  //不停电作业
+    private int powerFailureHouseNum;     //停电时户数
+    private String peakSummerProject;        //是否迎峰度夏项目
+    private String projectReview;            //通过第几批项目评审
+
+    //表一:储备项目基本信息字段
+    private String district;                //县公司
+    private String blockSupply;             //供电区域
+    private String gridNumber;              //网格编号
+    private String cellNumber;              //单元格编号
+    private String projectName;             //项目名称
+    private String constructionNecessityAndContent;     //建设必要性及内容
+    private String costEstimate;            //费用估算
+
+    //统计表-:概预算统计表
+    private String afterTrialEstimateAmount;        //概算
+
+    //从其字段
+    private String reserveProgress;            //项目进度
+    private String switchCabinet;              //开关柜
+    private String overheadLine;               //架空线路
+    private String powerCable;                 //电力电缆
+    private String cableBranchBox;             //电缆分支箱
+    private String outdoorRingCage;            //户外环网箱
+    private String ringRoom;                   //环网室(开关站)
+    private String onColumnSwitch;             //柱上开关
+    private String switchRoomKVA;              //配电室kva
+    private String switchRoom;                 //配电室
+    private String boxChangeKVA;               //箱变kva
+    private String boxChange;                  //箱变
+    private String distributionTransformerKVA; //配电变压器kva
+    private String distributionTransformer;    //配电变压器
+    private String lowVoltageLine;             //低压线路
+    private String lowVoltageCable;            //低压电缆
+    private String lowVoltageCableBox;         //低压电缆分支箱
+    private String lowVoltageCabinet;          //低压配电柜
+    private String distributeAutoMateTerminalFTU;          //配电自动化终端ftu
+    private String distributeAutoMateTerminalDTU;          //配电自动化终端dtu
+    private String opticalCable;                //光缆
+    private String cablePassage;                //电缆通道
+
+    public String getCityCompany() {
+        return cityCompany;
+    }
+
+    public void setCityCompany(String cityCompany) {
+        this.cityCompany = cityCompany;
+    }
+
+    public String getLowVoltageCable() {
+        return lowVoltageCable;
+    }
+
+    public void setLowVoltageCable(String lowVoltageCable) {
+        this.lowVoltageCable = lowVoltageCable;
+    }
+
+    public String getProjectReserveId() {
+        return projectReserveId;
+    }
+
+    public void setProjectReserveId(String projectReserveId) {
+        this.projectReserveId = projectReserveId;
+    }
+
+    public String getConstructePurpose() {
+        return constructePurpose;
+    }
+
+    public void setConstructePurpose(String constructePurpose) {
+        this.constructePurpose = constructePurpose;
+    }
+
+    public String getFactoryPrefab() {
+        return factoryPrefab;
+    }
+
+    public void setFactoryPrefab(String factoryPrefab) {
+        this.factoryPrefab = factoryPrefab;
+    }
+
+    public String getAncillaryFacility() {
+        return ancillaryFacility;
+    }
+
+    public void setAncillaryFacility(String ancillaryFacility) {
+        this.ancillaryFacility = ancillaryFacility;
+    }
+
+    public String getConstructionWorkMethod() {
+        return constructionWorkMethod;
+    }
+
+    public void setConstructionWorkMethod(String constructionWorkMethod) {
+        this.constructionWorkMethod = constructionWorkMethod;
+    }
+
+    public String getWorkWithoutInterruption() {
+        return workWithoutInterruption;
+    }
+
+    public void setWorkWithoutInterruption(String workWithoutInterruption) {
+        this.workWithoutInterruption = workWithoutInterruption;
+    }
+
+    public int getPowerFailureHouseNum() {
+        return powerFailureHouseNum;
+    }
+
+    public void setPowerFailureHouseNum(int powerFailureHouseNum) {
+        this.powerFailureHouseNum = powerFailureHouseNum;
+    }
+
+    public String getPeakSummerProject() {
+        return peakSummerProject;
+    }
+
+    public void setPeakSummerProject(String peakSummerProject) {
+        this.peakSummerProject = peakSummerProject;
+    }
+
+    public String getProjectReview() {
+        return projectReview;
+    }
+
+    public void setProjectReview(String projectReview) {
+        this.projectReview = projectReview;
+    }
+
+    public String getDistrict() {
+        return district;
+    }
+
+    public void setDistrict(String district) {
+        this.district = district;
+    }
+
+    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 getConstructionNecessityAndContent() {
+        return constructionNecessityAndContent;
+    }
+
+    public void setConstructionNecessityAndContent(String constructionNecessityAndContent) {
+        this.constructionNecessityAndContent = constructionNecessityAndContent;
+    }
+
+    public String getCostEstimate() {
+        return costEstimate;
+    }
+
+    public void setCostEstimate(String costEstimate) {
+        this.costEstimate = costEstimate;
+    }
+
+    public String getAfterTrialEstimateAmount() {
+        return afterTrialEstimateAmount;
+    }
+
+    public void setAfterTrialEstimateAmount(String afterTrialEstimateAmount) {
+        this.afterTrialEstimateAmount = afterTrialEstimateAmount;
+    }
+
+    public String getReserveProgress() {
+        return reserveProgress;
+    }
+
+    public void setReserveProgress(String reserveProgress) {
+        this.reserveProgress = reserveProgress;
+    }
+
+    public String getSwitchCabinet() {
+        return switchCabinet;
+    }
+
+    public void setSwitchCabinet(String switchCabinet) {
+        this.switchCabinet = switchCabinet;
+    }
+
+    public String getOverheadLine() {
+        return overheadLine;
+    }
+
+    public void setOverheadLine(String overheadLine) {
+        this.overheadLine = overheadLine;
+    }
+
+    public String getPowerCable() {
+        return powerCable;
+    }
+
+    public void setPowerCable(String powerCable) {
+        this.powerCable = powerCable;
+    }
+
+    public String getCableBranchBox() {
+        return cableBranchBox;
+    }
+
+    public void setCableBranchBox(String cableBranchBox) {
+        this.cableBranchBox = cableBranchBox;
+    }
+
+    public String getOutdoorRingCage() {
+        return outdoorRingCage;
+    }
+
+    public void setOutdoorRingCage(String outdoorRingCage) {
+        this.outdoorRingCage = outdoorRingCage;
+    }
+
+    public String getRingRoom() {
+        return ringRoom;
+    }
+
+    public void setRingRoom(String ringRoom) {
+        this.ringRoom = ringRoom;
+    }
+
+    public String getOnColumnSwitch() {
+        return onColumnSwitch;
+    }
+
+    public void setOnColumnSwitch(String onColumnSwitch) {
+        this.onColumnSwitch = onColumnSwitch;
+    }
+
+    public String getSwitchRoomKVA() {
+        return switchRoomKVA;
+    }
+
+    public void setSwitchRoomKVA(String switchRoomKVA) {
+        this.switchRoomKVA = switchRoomKVA;
+    }
+
+    public String getSwitchRoom() {
+        return switchRoom;
+    }
+
+    public void setSwitchRoom(String switchRoom) {
+        this.switchRoom = switchRoom;
+    }
+
+    public String getBoxChangeKVA() {
+        return boxChangeKVA;
+    }
+
+    public void setBoxChangeKVA(String boxChangeKVA) {
+        this.boxChangeKVA = boxChangeKVA;
+    }
+
+    public String getBoxChange() {
+        return boxChange;
+    }
+
+    public void setBoxChange(String boxChange) {
+        this.boxChange = boxChange;
+    }
+
+    public String getDistributionTransformerKVA() {
+        return distributionTransformerKVA;
+    }
+
+    public void setDistributionTransformerKVA(String distributionTransformerKVA) {
+        this.distributionTransformerKVA = distributionTransformerKVA;
+    }
+
+    public String getDistributionTransformer() {
+        return distributionTransformer;
+    }
+
+    public void setDistributionTransformer(String distributionTransformer) {
+        this.distributionTransformer = distributionTransformer;
+    }
+
+    public String getLowVoltageLine() {
+        return lowVoltageLine;
+    }
+
+    public void setLowVoltageLine(String lowVoltageLine) {
+        this.lowVoltageLine = lowVoltageLine;
+    }
+
+    public String getLowVoltageCableBox() {
+        return lowVoltageCableBox;
+    }
+
+    public void setLowVoltageCableBox(String lowVoltageCableBox) {
+        this.lowVoltageCableBox = lowVoltageCableBox;
+    }
+
+    public String getLowVoltageCabinet() {
+        return lowVoltageCabinet;
+    }
+
+    public void setLowVoltageCabinet(String lowVoltageCabinet) {
+        this.lowVoltageCabinet = lowVoltageCabinet;
+    }
+
+    public String getDistributeAutoMateTerminalFTU() {
+        return distributeAutoMateTerminalFTU;
+    }
+
+    public void setDistributeAutoMateTerminalFTU(String distributeAutoMateTerminalFTU) {
+        this.distributeAutoMateTerminalFTU = distributeAutoMateTerminalFTU;
+    }
+
+    public String getDistributeAutoMateTerminalDTU() {
+        return distributeAutoMateTerminalDTU;
+    }
+
+    public void setDistributeAutoMateTerminalDTU(String distributeAutoMateTerminalDTU) {
+        this.distributeAutoMateTerminalDTU = distributeAutoMateTerminalDTU;
+    }
+
+    public String getOpticalCable() {
+        return opticalCable;
+    }
+
+    public void setOpticalCable(String opticalCable) {
+        this.opticalCable = opticalCable;
+    }
+
+    public String getCablePassage() {
+        return cablePassage;
+    }
+
+    public void setCablePassage(String cablePassage) {
+        this.cablePassage = cablePassage;
+    }
+}

+ 75 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/DemoliteList.java

@@ -0,0 +1,75 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 储备项目拆旧物资汇总表
+ * @author: 王强
+ * @create: 2022-08-16 10:06
+ **/
+public class DemoliteList extends DataEntity<DemoliteList> {
+
+    private String projectReserveId;    //项目储备编号
+    private String projectName;         //项目名称
+    private String materialName;        //物料名称
+    private String specification;       //规格
+    private String unit;                //单位
+    private String count;               //数量
+    private String remark;              //备注
+
+    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 getMaterialName() {
+        return materialName;
+    }
+
+    public void setMaterialName(String materialName) {
+        this.materialName = materialName;
+    }
+
+    public String getSpecification() {
+        return specification;
+    }
+
+    public void setSpecification(String specification) {
+        this.specification = specification;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public String getCount() {
+        return count;
+    }
+
+    public void setCount(String count) {
+        this.count = count;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}

+ 413 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/EnginnerQuery.java

@@ -0,0 +1,413 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 立杆和土建工程量统计
+ * @author: 王强
+ * @create: 2022-08-16 09:51
+ **/
+public class EnginnerQuery extends DataEntity<EnginnerQuery> {
+
+    private String projectReserveId;        //项目储备编号
+    private String pole190X10;              //立杆信息Φ190×10×M×I
+    private String pole190X12;              //立杆信息Φ190×12×M×G
+    private String pole190X15;              //立杆信息Φ190×15×M×G
+    private String pole230X15;              //立杆信息Φ230×15×N
+    private String pole230X18;              //立杆信息Φ230×18×N×G
+    private String pole300X9;               //立杆信息Φ300×9
+    private String pole350X15;              //立杆信息Φ350×15×T×BY
+    private String steelPipeGNH31Contains;        //钢管杆信息GNH31-13B(含钢管桩)
+    private String steelPipeGNH31NoContains;      //钢管杆信息GNH31-13B(不含钢管桩)
+    private String steelPipeGNH3113DContains;     //钢管杆信息GNH31-13D(含钢管桩)
+    private String steelPipeGNH3113DNoContains;   //钢管杆信息GNH31-13D(不含钢管桩)
+    private String steelPipeCNH35Contains;        //钢管杆信息GNH35-13B(含钢管桩)
+    private String steelPipeCNH35NoContains;      //钢管杆信息GNH35-13B(不含钢管桩)
+    private String steelPipeCNH3513EContains;     //钢管杆信息GNH35-13E(含钢管桩)
+    private String steelPipeCNH3513ENoContains;   //钢管杆信息GNH35-13E(不含钢管桩)
+    private String steelPipeCNH39Contains;        //钢管杆信息GNH39-13B(含钢管桩)
+    private String steelPipeCNH39NoContains;      //钢管杆信息GNH39-13B(不含钢管桩)
+    //预制化信息
+    private String prefabricatedWell;             //预制化井
+    private String prefabricatedBase;             //预制化基础
+    private String prefabricatedPackage;          //预制化包封
+
+    //储备项目基本信息
+    private String projectYear;             //项目年份
+    private String projectNature;           //项目性质
+    private String demandUnit;              //需求单位
+    private String district;                //区域
+    private String projectGroup;            //项目分组
+    private String reserveBatches;          //储备批次
+    private String blockSupply;             //供电区域
+    private String gridNumber;              //网格编号
+    private String cellNumber;              //单元格编号
+    private String projectName;             //项目名称
+    private String constructionNecessityAndContent;           //建设必要性及内容
+    private String substationName;           //变电站名称
+    private String circuitName;              //线路名称
+    private String netRackProjectDivide;     //网架项目划分
+    private String requirementType;          //需求类型
+    private String projectType;              //项目类型
+    private String costEstimate;             //费用估算
+    private String basicRemarks;             //备注
+
+    //其他
+    private String reserveProgress;          //储备进度
+    private String implementPlan;            //是否纳入实施计划
+    private String implementBatch;           //初定实施批次
+    private String civilWork;                //是否含土建工作量
+    private String poleWorkload;             //是否立杆工作量
+
+    public String getProjectReserveId() {
+        return projectReserveId;
+    }
+
+    public void setProjectReserveId(String projectReserveId) {
+        this.projectReserveId = projectReserveId;
+    }
+
+    public String getPole190X10() {
+        return pole190X10;
+    }
+
+    public void setPole190X10(String pole190X10) {
+        this.pole190X10 = pole190X10;
+    }
+
+    public String getPole190X12() {
+        return pole190X12;
+    }
+
+    public void setPole190X12(String pole190X12) {
+        this.pole190X12 = pole190X12;
+    }
+
+    public String getPole190X15() {
+        return pole190X15;
+    }
+
+    public void setPole190X15(String pole190X15) {
+        this.pole190X15 = pole190X15;
+    }
+
+    public String getPole230X15() {
+        return pole230X15;
+    }
+
+    public void setPole230X15(String pole230X15) {
+        this.pole230X15 = pole230X15;
+    }
+
+    public String getPole230X18() {
+        return pole230X18;
+    }
+
+    public void setPole230X18(String pole230X18) {
+        this.pole230X18 = pole230X18;
+    }
+
+    public String getPole300X9() {
+        return pole300X9;
+    }
+
+    public void setPole300X9(String pole300X9) {
+        this.pole300X9 = pole300X9;
+    }
+
+    public String getPole350X15() {
+        return pole350X15;
+    }
+
+    public void setPole350X15(String pole350X15) {
+        this.pole350X15 = pole350X15;
+    }
+
+    public String getSteelPipeGNH31Contains() {
+        return steelPipeGNH31Contains;
+    }
+
+    public void setSteelPipeGNH31Contains(String steelPipeGNH31Contains) {
+        this.steelPipeGNH31Contains = steelPipeGNH31Contains;
+    }
+
+    public String getSteelPipeGNH31NoContains() {
+        return steelPipeGNH31NoContains;
+    }
+
+    public void setSteelPipeGNH31NoContains(String steelPipeGNH31NoContains) {
+        this.steelPipeGNH31NoContains = steelPipeGNH31NoContains;
+    }
+
+    public String getSteelPipeGNH3113DContains() {
+        return steelPipeGNH3113DContains;
+    }
+
+    public void setSteelPipeGNH3113DContains(String steelPipeGNH3113DContains) {
+        this.steelPipeGNH3113DContains = steelPipeGNH3113DContains;
+    }
+
+    public String getSteelPipeGNH3113DNoContains() {
+        return steelPipeGNH3113DNoContains;
+    }
+
+    public void setSteelPipeGNH3113DNoContains(String steelPipeGNH3113DNoContains) {
+        this.steelPipeGNH3113DNoContains = steelPipeGNH3113DNoContains;
+    }
+
+    public String getSteelPipeCNH35Contains() {
+        return steelPipeCNH35Contains;
+    }
+
+    public void setSteelPipeCNH35Contains(String steelPipeCNH35Contains) {
+        this.steelPipeCNH35Contains = steelPipeCNH35Contains;
+    }
+
+    public String getSteelPipeCNH35NoContains() {
+        return steelPipeCNH35NoContains;
+    }
+
+    public void setSteelPipeCNH35NoContains(String steelPipeCNH35NoContains) {
+        this.steelPipeCNH35NoContains = steelPipeCNH35NoContains;
+    }
+
+    public String getSteelPipeCNH3513EContains() {
+        return steelPipeCNH3513EContains;
+    }
+
+    public void setSteelPipeCNH3513EContains(String steelPipeCNH3513EContains) {
+        this.steelPipeCNH3513EContains = steelPipeCNH3513EContains;
+    }
+
+    public String getSteelPipeCNH3513ENoContains() {
+        return steelPipeCNH3513ENoContains;
+    }
+
+    public void setSteelPipeCNH3513ENoContains(String steelPipeCNH3513ENoContains) {
+        this.steelPipeCNH3513ENoContains = steelPipeCNH3513ENoContains;
+    }
+
+    public String getSteelPipeCNH39Contains() {
+        return steelPipeCNH39Contains;
+    }
+
+    public void setSteelPipeCNH39Contains(String steelPipeCNH39Contains) {
+        this.steelPipeCNH39Contains = steelPipeCNH39Contains;
+    }
+
+    public String getSteelPipeCNH39NoContains() {
+        return steelPipeCNH39NoContains;
+    }
+
+    public void setSteelPipeCNH39NoContains(String steelPipeCNH39NoContains) {
+        this.steelPipeCNH39NoContains = steelPipeCNH39NoContains;
+    }
+
+    public String getPrefabricatedWell() {
+        return prefabricatedWell;
+    }
+
+    public void setPrefabricatedWell(String prefabricatedWell) {
+        this.prefabricatedWell = prefabricatedWell;
+    }
+
+    public String getPrefabricatedBase() {
+        return prefabricatedBase;
+    }
+
+    public void setPrefabricatedBase(String prefabricatedBase) {
+        this.prefabricatedBase = prefabricatedBase;
+    }
+
+    public String getPrefabricatedPackage() {
+        return prefabricatedPackage;
+    }
+
+    public void setPrefabricatedPackage(String prefabricatedPackage) {
+        this.prefabricatedPackage = prefabricatedPackage;
+    }
+
+    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 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 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 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 getCivilWork() {
+        return civilWork;
+    }
+
+    public void setCivilWork(String civilWork) {
+        this.civilWork = civilWork;
+    }
+
+    public String getPoleWorkload() {
+        return poleWorkload;
+    }
+
+    public void setPoleWorkload(String poleWorkload) {
+        this.poleWorkload = poleWorkload;
+    }
+}

+ 36 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/History.java

@@ -0,0 +1,36 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+/**
+ * @author: 王强
+ * @create: 2022-08-17 17:43
+ **/
+public class History {
+
+    private String name;
+    private String startTime;
+    private String endTime;
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+}

+ 18 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/HistoryComment.java

@@ -0,0 +1,18 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+/**
+ * activity的历史意见表
+ * @author: 王强
+ * @create: 2022-08-18 17:35
+ **/
+public class HistoryComment {
+    private String message;
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}

+ 19 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/HistoryVarinst.java

@@ -0,0 +1,19 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+/**
+ * 历史变量表
+ * @author: 王强
+ * @create: 2022-08-19 09:14
+ **/
+public class HistoryVarinst {
+
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

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

@@ -0,0 +1,99 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+/**
+ * 在线开甲供材
+ * @author: 王强
+ * @create: 2022-08-22 09:27
+ **/
+public class MaterialData {
+    private String remarks;             //备注信息
+    private String materialCode;        //物料编码
+    private String materialName;        //物料名称
+    private String extendDescription;   //扩展描述
+    private String unit;                //单位
+    private String totalCount;          //总量
+    private String weightKg;            //单重/kg
+    private String weightTon;           //总重/吨
+    private String supplyType;          //甲乙供
+    private String note;                //备注
+
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+    public String getMaterialCode() {
+        return materialCode;
+    }
+
+    public void setMaterialCode(String materialCode) {
+        this.materialCode = materialCode;
+    }
+
+    public String getMaterialName() {
+        return materialName;
+    }
+
+    public void setMaterialName(String materialName) {
+        this.materialName = materialName;
+    }
+
+    public String getExtendDescription() {
+        return extendDescription;
+    }
+
+    public void setExtendDescription(String extendDescription) {
+        this.extendDescription = extendDescription;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public String getTotalCount() {
+        return totalCount;
+    }
+
+    public void setTotalCount(String totalCount) {
+        this.totalCount = totalCount;
+    }
+
+    public String getWeightKg() {
+        return weightKg;
+    }
+
+    public void setWeightKg(String weightKg) {
+        this.weightKg = weightKg;
+    }
+
+    public String getWeightTon() {
+        return weightTon;
+    }
+
+    public void setWeightTon(String weightTon) {
+        this.weightTon = weightTon;
+    }
+
+    public String getSupplyType() {
+        return supplyType;
+    }
+
+    public void setSupplyType(String supplyType) {
+        this.supplyType = supplyType;
+    }
+
+    public String getNote() {
+        return note;
+    }
+
+    public void setNote(String note) {
+        this.note = note;
+    }
+}

+ 21 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/NormativeAudit.java

@@ -0,0 +1,21 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 储备项目规范性审核记录表
+ * @author: 王强
+ * @create: 2022-08-16 10:18
+ **/
+public class NormativeAudit extends DataEntity<NormativeAudit> {
+
+    private String projectReserveId;        //项目储备编号
+
+    public String getProjectReserveId() {
+        return projectReserveId;
+    }
+
+    public void setProjectReserveId(String projectReserveId) {
+        this.projectReserveId = projectReserveId;
+    }
+}

+ 429 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/ProgressStats.java

@@ -0,0 +1,429 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 储备进度统计表
+ * @author: 王强
+ * @create: 2022-08-16 09:20
+ **/
+public class ProgressStats extends DataEntity<ProgressStats> {
+
+    private String projectReserveId;                //项目储备编号
+    private String reserveProgress;                 //储备进度
+    private String inspectDepartmentReview;         //是否通过运检部评审
+    private String inspectDepartmentReviewTime;     //通过运检部评审时间
+    private String releaseReserveTime;              //运检部下达储备时间
+    private String designCommission;                //是否发出设计委托
+    private String designCommissionIssueTime;       //设计委托发出时间
+    private String onSiteConfess;                   //是否进行现场交底
+    private String confessCompleteTime;             //交底完成时间
+    private String completeDesign;                  //是否完成初设
+    private String submitTime;                      //初设提交时间
+    private String completeDraw;                    //是否完成审图
+    private String drawAudit;                       //是否通过图纸审核
+    private String reasonForFailure;                //未通过原因分析
+    private String passAuditDate;                   //通过审核日期
+    private String changeDesign;                    //是否需设计变更
+    private String completeReview;                  //概预算-是否完成审核
+    private String expertReview;                    //概预算-是否通过专家审核
+    private String estimateReasonForFailure;        //概预算-未通过原因分析
+    private String estimatePassAuditDate;           //概预算-通过审核日期
+    private String estimateChangeDesign;            //概预算-是否需设计变更
+    private String provincialCompanyReview;         //是否参加省公司评审
+    private String provincialCompanyReviewBatch;    //省公司评审批次
+    private String passProvincialCompanyReview;     //是否通过省公司评审
+    private String causeAnalysis;                   //未通过原因分析
+    private String designChange;                    //是否需设计变更
+    private String drawingReview;                   //图纸联合审查-是否进行图纸审查
+    private String reviewDate;                      //图纸联合审查-审图日期
+    private String passDrawingReview;               //图纸联合审查-是否通过图纸审查
+    private String reviewComment;                   //图纸联合审查未通过审图意见
+    private String approvedDate;                    //图纸联合审查通过审核日期
+    private String jointReviewDesignChange;         //图纸联合审查-是否需设计变更
+    private String drawingFinalize;                 //图纸是否定稿
+    private String finalDate;                       //定稿日期
+    private String formalDrawing;                   //是否打印正式图纸
+    private String drawingDate;                     //通知出图日期
+    private String transferProjectCenterDate;       //正式图纸移交项目中心日期
+    private String transferToConstructionUnitDate;  //正式图纸移交施工单位日期
+
+    //储备项目基本信息
+    private String projectName;             //项目名称
+    private String requirementType;         //需求类型
+    private String demandUnit;              //需求单位
+    private String reserveBatches;          //储备批次
+    private String basicRemarks;            //备注
+    //储备项目交底信息汇总统计表
+    private String implementPlan;           //是否纳入实施计划
+    private String initialImplementBatch;   //初定实施批次
+    private String includeReserve;          //是否纳入储备
+
+    public String getProjectReserveId() {
+        return projectReserveId;
+    }
+
+    public void setProjectReserveId(String projectReserveId) {
+        this.projectReserveId = projectReserveId;
+    }
+
+    public String getReserveProgress() {
+        return reserveProgress;
+    }
+
+    public void setReserveProgress(String reserveProgress) {
+        this.reserveProgress = reserveProgress;
+    }
+
+    public String getInspectDepartmentReview() {
+        return inspectDepartmentReview;
+    }
+
+    public void setInspectDepartmentReview(String inspectDepartmentReview) {
+        this.inspectDepartmentReview = inspectDepartmentReview;
+    }
+
+    public String getInspectDepartmentReviewTime() {
+        return inspectDepartmentReviewTime;
+    }
+
+    public void setInspectDepartmentReviewTime(String inspectDepartmentReviewTime) {
+        this.inspectDepartmentReviewTime = inspectDepartmentReviewTime;
+    }
+
+    public String getReleaseReserveTime() {
+        return releaseReserveTime;
+    }
+
+    public void setReleaseReserveTime(String releaseReserveTime) {
+        this.releaseReserveTime = releaseReserveTime;
+    }
+
+    public String getDesignCommission() {
+        return designCommission;
+    }
+
+    public void setDesignCommission(String designCommission) {
+        this.designCommission = designCommission;
+    }
+
+    public String getDesignCommissionIssueTime() {
+        return designCommissionIssueTime;
+    }
+
+    public void setDesignCommissionIssueTime(String designCommissionIssueTime) {
+        this.designCommissionIssueTime = designCommissionIssueTime;
+    }
+
+    public String getOnSiteConfess() {
+        return onSiteConfess;
+    }
+
+    public void setOnSiteConfess(String onSiteConfess) {
+        this.onSiteConfess = onSiteConfess;
+    }
+
+    public String getConfessCompleteTime() {
+        return confessCompleteTime;
+    }
+
+    public void setConfessCompleteTime(String confessCompleteTime) {
+        this.confessCompleteTime = confessCompleteTime;
+    }
+
+    public String getCompleteDesign() {
+        return completeDesign;
+    }
+
+    public void setCompleteDesign(String completeDesign) {
+        this.completeDesign = completeDesign;
+    }
+
+    public String getSubmitTime() {
+        return submitTime;
+    }
+
+    public void setSubmitTime(String submitTime) {
+        this.submitTime = submitTime;
+    }
+
+    public String getCompleteDraw() {
+        return completeDraw;
+    }
+
+    public void setCompleteDraw(String completeDraw) {
+        this.completeDraw = completeDraw;
+    }
+
+    public String getDrawAudit() {
+        return drawAudit;
+    }
+
+    public void setDrawAudit(String drawAudit) {
+        this.drawAudit = drawAudit;
+    }
+
+    public String getReasonForFailure() {
+        return reasonForFailure;
+    }
+
+    public void setReasonForFailure(String reasonForFailure) {
+        this.reasonForFailure = reasonForFailure;
+    }
+
+    public String getPassAuditDate() {
+        return passAuditDate;
+    }
+
+    public void setPassAuditDate(String passAuditDate) {
+        this.passAuditDate = passAuditDate;
+    }
+
+    public String getChangeDesign() {
+        return changeDesign;
+    }
+
+    public void setChangeDesign(String changeDesign) {
+        this.changeDesign = changeDesign;
+    }
+
+    public String getCompleteReview() {
+        return completeReview;
+    }
+
+    public void setCompleteReview(String completeReview) {
+        this.completeReview = completeReview;
+    }
+
+    public String getExpertReview() {
+        return expertReview;
+    }
+
+    public void setExpertReview(String expertReview) {
+        this.expertReview = expertReview;
+    }
+
+    public String getEstimateReasonForFailure() {
+        return estimateReasonForFailure;
+    }
+
+    public void setEstimateReasonForFailure(String estimateReasonForFailure) {
+        this.estimateReasonForFailure = estimateReasonForFailure;
+    }
+
+    public String getEstimatePassAuditDate() {
+        return estimatePassAuditDate;
+    }
+
+    public void setEstimatePassAuditDate(String estimatePassAuditDate) {
+        this.estimatePassAuditDate = estimatePassAuditDate;
+    }
+
+    public String getEstimateChangeDesign() {
+        return estimateChangeDesign;
+    }
+
+    public void setEstimateChangeDesign(String estimateChangeDesign) {
+        this.estimateChangeDesign = estimateChangeDesign;
+    }
+
+    public String getProvincialCompanyReview() {
+        return provincialCompanyReview;
+    }
+
+    public void setProvincialCompanyReview(String provincialCompanyReview) {
+        this.provincialCompanyReview = provincialCompanyReview;
+    }
+
+    public String getProvincialCompanyReviewBatch() {
+        return provincialCompanyReviewBatch;
+    }
+
+    public void setProvincialCompanyReviewBatch(String provincialCompanyReviewBatch) {
+        this.provincialCompanyReviewBatch = provincialCompanyReviewBatch;
+    }
+
+    public String getPassProvincialCompanyReview() {
+        return passProvincialCompanyReview;
+    }
+
+    public void setPassProvincialCompanyReview(String passProvincialCompanyReview) {
+        this.passProvincialCompanyReview = passProvincialCompanyReview;
+    }
+
+    public String getCauseAnalysis() {
+        return causeAnalysis;
+    }
+
+    public void setCauseAnalysis(String causeAnalysis) {
+        this.causeAnalysis = causeAnalysis;
+    }
+
+    public String getDesignChange() {
+        return designChange;
+    }
+
+    public void setDesignChange(String designChange) {
+        this.designChange = designChange;
+    }
+
+    public String getDrawingReview() {
+        return drawingReview;
+    }
+
+    public void setDrawingReview(String drawingReview) {
+        this.drawingReview = drawingReview;
+    }
+
+    public String getReviewDate() {
+        return reviewDate;
+    }
+
+    public void setReviewDate(String reviewDate) {
+        this.reviewDate = reviewDate;
+    }
+
+    public String getPassDrawingReview() {
+        return passDrawingReview;
+    }
+
+    public void setPassDrawingReview(String passDrawingReview) {
+        this.passDrawingReview = passDrawingReview;
+    }
+
+    public String getReviewComment() {
+        return reviewComment;
+    }
+
+    public void setReviewComment(String reviewComment) {
+        this.reviewComment = reviewComment;
+    }
+
+    public String getApprovedDate() {
+        return approvedDate;
+    }
+
+    public void setApprovedDate(String approvedDate) {
+        this.approvedDate = approvedDate;
+    }
+
+    public String getJointReviewDesignChange() {
+        return jointReviewDesignChange;
+    }
+
+    public void setJointReviewDesignChange(String jointReviewDesignChange) {
+        this.jointReviewDesignChange = jointReviewDesignChange;
+    }
+
+    public String getDrawingFinalize() {
+        return drawingFinalize;
+    }
+
+    public void setDrawingFinalize(String drawingFinalize) {
+        this.drawingFinalize = drawingFinalize;
+    }
+
+    public String getFinalDate() {
+        return finalDate;
+    }
+
+    public void setFinalDate(String finalDate) {
+        this.finalDate = finalDate;
+    }
+
+    public String getFormalDrawing() {
+        return formalDrawing;
+    }
+
+    public void setFormalDrawing(String formalDrawing) {
+        this.formalDrawing = formalDrawing;
+    }
+
+    public String getDrawingDate() {
+        return drawingDate;
+    }
+
+    public void setDrawingDate(String drawingDate) {
+        this.drawingDate = drawingDate;
+    }
+
+    public String getTransferProjectCenterDate() {
+        return transferProjectCenterDate;
+    }
+
+    public void setTransferProjectCenterDate(String transferProjectCenterDate) {
+        this.transferProjectCenterDate = transferProjectCenterDate;
+    }
+
+    public String getTransferToConstructionUnitDate() {
+        return transferToConstructionUnitDate;
+    }
+
+    public void setTransferToConstructionUnitDate(String transferToConstructionUnitDate) {
+        this.transferToConstructionUnitDate = transferToConstructionUnitDate;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getRequirementType() {
+        return requirementType;
+    }
+
+    public void setRequirementType(String requirementType) {
+        this.requirementType = requirementType;
+    }
+
+    public String getDemandUnit() {
+        return demandUnit;
+    }
+
+    public void setDemandUnit(String demandUnit) {
+        this.demandUnit = demandUnit;
+    }
+
+    public String getReserveBatches() {
+        return reserveBatches;
+    }
+
+    public void setReserveBatches(String reserveBatches) {
+        this.reserveBatches = reserveBatches;
+    }
+
+    public String getBasicRemarks() {
+        return basicRemarks;
+    }
+
+    public void setBasicRemarks(String basicRemarks) {
+        this.basicRemarks = basicRemarks;
+    }
+
+    public String getImplementPlan() {
+        return implementPlan;
+    }
+
+    public void setImplementPlan(String implementPlan) {
+        this.implementPlan = implementPlan;
+    }
+
+    public String getInitialImplementBatch() {
+        return initialImplementBatch;
+    }
+
+    public void setInitialImplementBatch(String initialImplementBatch) {
+        this.initialImplementBatch = initialImplementBatch;
+    }
+
+    public String getIncludeReserve() {
+        return includeReserve;
+    }
+
+    public void setIncludeReserve(String includeReserve) {
+        this.includeReserve = includeReserve;
+    }
+}

+ 365 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/SpecialSupply.java

@@ -0,0 +1,365 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 特殊物资统计
+ * @author: 王强
+ * @create: 2022-08-16 09:57
+ **/
+public class SpecialSupply extends DataEntity<SpecialSupply> {
+
+    //储备项目基本信息
+    private String projectYear;             //项目年份
+    private String projectNature;           //项目性质
+    private String demandUnit;              //需求单位
+    private String district;                //区域
+    private String projectGroup;            //项目分组
+    private String reserveBatches;          //储备批次
+    private String blockSupply;             //供电区域
+    private String gridNumber;              //网格编号
+    private String cellNumber;              //单元格编号
+    private String projectReserveId;        //项目储备编号
+    private String projectName;             //项目名称
+    private String constructionNecessityAndContent;           //建设必要性及内容
+    private String substationName;           //变电站名称
+    private String circuitName;              //线路名称
+    private String netRackProjectDivide;     //网架项目划分
+    private String requirementType;          //需求类型
+    private String projectType;              //项目类型
+    private String costEstimate;             //费用估算
+    private String basicRemarks;             //备注
+    //其他
+    private String reserveProgress;                 //储备进度
+    private String implementPlan;                   //是否纳入实施计划
+    private String implementBatch;                  //初定实施批次
+    private String materialStatisticA;              //20kV物资统计-A物资
+    private String materialStatisticB;              //20kV物资统计-B物资
+    private String materialStatisticC;              //20kV物资统计-C物资
+    private String materialStatisticD;              //20kV物资统计-D物资
+    private String switchCabinet10KV;               //环网柜,AC10kV,630A,负荷开关柜,SF6,户内
+    private String switchCabinet10KV02;             //环网柜,AC10kV,630A,负荷开关柜,SF6,户内
+    private String switchCabinetIncomeLine;         //低压开关柜,AC380V,抽屉式,进线,2500A,65kA
+    private String switchCabinetSegment;            //低压开关柜,AC380V,抽屉式,分段,2500A,65kA
+    private String switchCabinetFeeder;             //低压开关柜,AC380V,抽屉式,馈线,2500A,50kA
+    private String numberOfBranchBoxFourWay;        //电缆分支箱,AC400V,塑壳断路器,四路,400A
+    private String numberOfBranchBoxFiveWay;        //电缆分支箱,AC400V,塑壳断路器,五路,630A
+    private String numberOfBranchBoxSevenWay;       //电缆分支箱,AC400V,塑壳断路器,七路,630A
+    private String numberOfBox;                     //箱变路数
+    private String specialSizeA;                    //特殊尺寸物资统计-特殊物资A
+    private String specialSizeB;                    //特殊尺寸物资统计-特殊物资B
+    private String specialSizeC;                    //特殊尺寸物资统计-特殊物资C
+    private String specialSizeD;                    //特殊尺寸物资统计-特殊物资D
+
+    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 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 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 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 getMaterialStatisticA() {
+        return materialStatisticA;
+    }
+
+    public void setMaterialStatisticA(String materialStatisticA) {
+        this.materialStatisticA = materialStatisticA;
+    }
+
+    public String getMaterialStatisticB() {
+        return materialStatisticB;
+    }
+
+    public void setMaterialStatisticB(String materialStatisticB) {
+        this.materialStatisticB = materialStatisticB;
+    }
+
+    public String getMaterialStatisticC() {
+        return materialStatisticC;
+    }
+
+    public void setMaterialStatisticC(String materialStatisticC) {
+        this.materialStatisticC = materialStatisticC;
+    }
+
+    public String getMaterialStatisticD() {
+        return materialStatisticD;
+    }
+
+    public void setMaterialStatisticD(String materialStatisticD) {
+        this.materialStatisticD = materialStatisticD;
+    }
+
+    public String getSwitchCabinet10KV() {
+        return switchCabinet10KV;
+    }
+
+    public void setSwitchCabinet10KV(String switchCabinet10KV) {
+        this.switchCabinet10KV = switchCabinet10KV;
+    }
+
+    public String getSwitchCabinet10KV02() {
+        return switchCabinet10KV02;
+    }
+
+    public void setSwitchCabinet10KV02(String switchCabinet10KV02) {
+        this.switchCabinet10KV02 = switchCabinet10KV02;
+    }
+
+    public String getSwitchCabinetIncomeLine() {
+        return switchCabinetIncomeLine;
+    }
+
+    public void setSwitchCabinetIncomeLine(String switchCabinetIncomeLine) {
+        this.switchCabinetIncomeLine = switchCabinetIncomeLine;
+    }
+
+    public String getSwitchCabinetSegment() {
+        return switchCabinetSegment;
+    }
+
+    public void setSwitchCabinetSegment(String switchCabinetSegment) {
+        this.switchCabinetSegment = switchCabinetSegment;
+    }
+
+    public String getSwitchCabinetFeeder() {
+        return switchCabinetFeeder;
+    }
+
+    public void setSwitchCabinetFeeder(String switchCabinetFeeder) {
+        this.switchCabinetFeeder = switchCabinetFeeder;
+    }
+
+    public String getNumberOfBranchBoxFourWay() {
+        return numberOfBranchBoxFourWay;
+    }
+
+    public void setNumberOfBranchBoxFourWay(String numberOfBranchBoxFourWay) {
+        this.numberOfBranchBoxFourWay = numberOfBranchBoxFourWay;
+    }
+
+    public String getNumberOfBranchBoxFiveWay() {
+        return numberOfBranchBoxFiveWay;
+    }
+
+    public void setNumberOfBranchBoxFiveWay(String numberOfBranchBoxFiveWay) {
+        this.numberOfBranchBoxFiveWay = numberOfBranchBoxFiveWay;
+    }
+
+    public String getNumberOfBranchBoxSevenWay() {
+        return numberOfBranchBoxSevenWay;
+    }
+
+    public void setNumberOfBranchBoxSevenWay(String numberOfBranchBoxSevenWay) {
+        this.numberOfBranchBoxSevenWay = numberOfBranchBoxSevenWay;
+    }
+
+    public String getNumberOfBox() {
+        return numberOfBox;
+    }
+
+    public void setNumberOfBox(String numberOfBox) {
+        this.numberOfBox = numberOfBox;
+    }
+
+    public String getSpecialSizeA() {
+        return specialSizeA;
+    }
+
+    public void setSpecialSizeA(String specialSizeA) {
+        this.specialSizeA = specialSizeA;
+    }
+
+    public String getSpecialSizeB() {
+        return specialSizeB;
+    }
+
+    public void setSpecialSizeB(String specialSizeB) {
+        this.specialSizeB = specialSizeB;
+    }
+
+    public String getSpecialSizeC() {
+        return specialSizeC;
+    }
+
+    public void setSpecialSizeC(String specialSizeC) {
+        this.specialSizeC = specialSizeC;
+    }
+
+    public String getSpecialSizeD() {
+        return specialSizeD;
+    }
+
+    public void setSpecialSizeD(String specialSizeD) {
+        this.specialSizeD = specialSizeD;
+    }
+}

+ 45 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/entity/StandardDetail.java

@@ -0,0 +1,45 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity;
+
+/**
+ * 物料规范数据
+ * @author: 王强
+ * @create: 2022-08-22 09:17
+ **/
+public class StandardDetail {
+    private String remarks;             //简介
+    private String projectCategory;     //项目类别
+    private String materialCode;        //物料编码
+    private String materialDescription; //物料描述
+
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+    public String getProjectCategory() {
+        return projectCategory;
+    }
+
+    public void setProjectCategory(String projectCategory) {
+        this.projectCategory = projectCategory;
+    }
+
+    public String getMaterialCode() {
+        return materialCode;
+    }
+
+    public void setMaterialCode(String materialCode) {
+        this.materialCode = materialCode;
+    }
+
+    public String getMaterialDescription() {
+        return materialDescription;
+    }
+
+    public void setMaterialDescription(String materialDescription) {
+        this.materialDescription = materialDescription;
+    }
+}

+ 69 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/BudgetStatsMapper.java

@@ -0,0 +1,69 @@
+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.History;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 储备项目概预算统计表
+ * @author: 王强
+ * @create: 2022-08-16 10:23
+ **/
+@MyBatisMapper
+public interface BudgetStatsMapper extends BaseMapper<BudgetStats> {
+
+    /**
+     * 批量添加储备项目概预算统计信息
+     * @param list
+     * @return
+     */
+    void insertList(@Param("list") List<BudgetStats> list);
+
+    int selectCount(String projectReserveId);
+
+    /**
+     * 导出数据查询
+     * @param budgetStats
+     * @return
+     */
+    List<BudgetStats> exportFindList(BudgetStats budgetStats);
+
+    /**
+     * 根据projectReserveId查出proc_ins_id
+     * @param projectReserveId
+     * @return
+     */
+    String getByProjectReserveId(String projectReserveId);
+    /**
+     * 根据executeId查出当前节点的名称
+     * @param executeId
+     * @return
+     */
+    String getByExecuteId(String executeId);
+
+    /**
+     * 根据executeId查出历史节点信息
+     * @param executeId
+     * @return
+     */
+    List<History> getHistoryByExecuteId(String executeId);
+
+    /**
+     * 根据executeId和节点名称查出历史节点信息
+     * @param executeId
+     * @return
+     */
+    List<History> getHistoryByActName(@Param("executeId") String executeId,
+                                @Param("name") String name);
+
+    /**
+     * 根据节点的时间和executeId来查找
+     * @param time
+     * @return
+     */
+    History getHistoryByTime(@Param("time")String time,@Param("executeId")String executeId);
+}

+ 67 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/ConstructeScaleMapper.java

@@ -0,0 +1,67 @@
+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.StandardDetail;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ConstructeScale;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 储备项目建设规模统计表
+ * @author: 王强
+ * @create: 2022-08-19 13:52
+ **/
+@MyBatisMapper
+public interface ConstructeScaleMapper extends BaseMapper<ConstructeScale> {
+
+    /**
+     * 批量添加储备项目概预算统计信息
+     * @param list
+     * @return
+     */
+    void insertList(@Param("list") List<ConstructeScale> list);
+
+    /**
+     * 导出数据查询
+     * @param constructeScale
+     * @return
+     */
+    List<ConstructeScale> exportFindList(ConstructeScale constructeScale);
+
+    /**
+     * 根据projectReserveId查出proc_ins_id
+     * @param projectReserveId
+     * @return
+     */
+    String getByProjectReserveId(String projectReserveId);
+
+    /**
+     * 根据executeId查出当前节点的名称
+     * @param executeId
+     * @return
+     */
+    String getByExecuteId(String executeId);
+
+    /**
+     * 根据executeId查出历史节点信息
+     * @param executeId
+     * @return
+     */
+    List<History> getHistoryByExecuteId(String executeId);
+
+    /**
+     * 查出物料规范数据
+     * @return
+     */
+    List<StandardDetail> getStandardDetail();
+
+    /**
+     * 获取在线开甲供材数据
+     * @return
+     */
+    List<MaterialData> getMaterialData(String projectName);
+}

+ 25 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/DemoliteListMapper.java

@@ -0,0 +1,25 @@
+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.DemoliteList;
+
+import java.util.List;
+
+/**
+ * 储备项目拆旧物资汇总表
+ * @author: 王强
+ * @create: 2022-08-23 08:39
+ **/
+@MyBatisMapper
+public interface DemoliteListMapper extends BaseMapper<DemoliteList> {
+
+    /**
+     * 导出数据查询
+     * @param demoliteList
+     * @return
+     */
+    List<DemoliteList> exportFindList(DemoliteList demoliteList);
+
+
+}

+ 54 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/EnginnerQueryMapper.java

@@ -0,0 +1,54 @@
+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.EnginnerQuery;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 立杆和土建工程量统计
+ * @author: 王强
+ * @create: 2022-08-22 15:06
+ **/
+@MyBatisMapper
+public interface EnginnerQueryMapper extends BaseMapper<EnginnerQuery> {
+
+    /**
+     * 导出数据查询
+     * @param enginnerQuery
+     * @return
+     */
+    List<EnginnerQuery> exportFindList(EnginnerQuery enginnerQuery);
+
+    /**
+     * 根据物料编码、甲乙供、扩展描述、备注获取在线开甲供材数据总量
+     * @return
+     */
+    Double getData(@Param("materialCode") String materialCode,
+                               @Param("extendDescription")String extendDescription,
+                               @Param("note")String note);
+
+    /**
+     * 根据projectReserveId查出proc_ins_id
+     * @param projectReserveId
+     * @return
+     */
+    String getByProjectReserveId(String projectReserveId);
+
+    /**
+     * 根据executeId查出历史节点信息
+     * @param executeId
+     * @return
+     */
+    List<History> getHistoryByExecuteId(String executeId);
+
+    /**
+     * 根据executeId查出当前节点的名称
+     * @param executeId
+     * @return
+     */
+    String getByExecuteId(String executeId);
+}

+ 82 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/ProgressStatsMapper.java

@@ -0,0 +1,82 @@
+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.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.HistoryComment;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.HistoryVarinst;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ProgressStats;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 储备进度统计表
+ * @author: 王强
+ * @create: 2022-08-17 15:23
+ **/
+@MyBatisMapper
+public interface ProgressStatsMapper extends BaseMapper<ProgressStats> {
+
+    /**
+     * 批量添加储备项目概预算统计信息
+     * @param list
+     * @return
+     */
+    void insertList(@Param("list") List<ProgressStats> list);
+
+    int selectCount(String projectReserveId);
+
+    /**
+     * 导出数据查询
+     * @param progressStats
+     * @return
+     */
+    List<ProgressStats> exportFindList(ProgressStats progressStats);
+
+    /**
+     * 根据projectReserveId查出proc_ins_id
+     * @param projectReserveId
+     * @return
+     */
+    String getByProjectReserveId(String projectReserveId);
+
+    /**
+     * 根据executeId查出当前节点的名称
+     * @param executeId
+     * @return
+     */
+    String getByExecuteId(String executeId);
+
+    /**
+     * 根据executeId查出历史节点信息
+     * @param executeId
+     * @return
+     */
+    List<History> getHistoryByExecuteId(String executeId);
+
+    /**
+     * 根据executeId和节点名称查出历史节点信息
+     * @param executeId
+     * @return
+     */
+    List<History> getHistoryByActName(@Param("executeId") String executeId,
+                                      @Param("name") String name);
+
+    /**
+     * 根据节点的时间和executeId来查找
+     * @param time
+     * @return
+     */
+    History getHistoryByTime(@Param("time")String time,@Param("executeId")String executeId);
+
+    HistoryComment getCommentByTime(@Param("time")String time,@Param("executeId")String executeId);
+
+    /**
+     * 在历史遍历表中,根据procInstId和时间来判断是哪条流程线
+     * @param time
+     * @param procInstId
+     * @return
+     */
+    HistoryVarinst getByProcInstId(@Param("time")String time,@Param("procInstId")String procInstId);
+}

+ 53 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/mapper/SpecialSupplyMapper.java

@@ -0,0 +1,53 @@
+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.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialSupply;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 特殊物资统计
+ * @author: 王强
+ * @create: 2022-08-22 17:52
+ **/
+@MyBatisMapper
+public interface SpecialSupplyMapper extends BaseMapper<SpecialSupply> {
+    /**
+     * 导出数据查询
+     * @param specialSupply
+     * @return
+     */
+    List<SpecialSupply> exportFindList(SpecialSupply specialSupply);
+
+    /**
+     * 根据物料编码、甲乙供、扩展描述、备注获取在线开甲供材数据总量
+     * @return
+     */
+    Double getData(@Param("materialCode") String materialCode,
+                   @Param("extendDescription")String extendDescription,
+                   @Param("note")String note);
+
+    /**
+     * 根据projectReserveId查出proc_ins_id
+     * @param projectReserveId
+     * @return
+     */
+    String getByProjectReserveId(String projectReserveId);
+
+    /**
+     * 根据executeId查出历史节点信息
+     * @param executeId
+     * @return
+     */
+    List<History> getHistoryByExecuteId(String executeId);
+
+    /**
+     * 根据executeId查出当前节点的名称
+     * @param executeId
+     * @return
+     */
+    String getByExecuteId(String executeId);
+}

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

@@ -0,0 +1,219 @@
+<?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.BudgetStatsMapper">
+
+    <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.projectReserveId,
+		a.pretrialEstimateAmount,
+        a.pretrialEstimateAmountExcludeTax,
+        a.pretrialDeductibleAmount,
+        a.pretrialConstructeConsts,
+        a.pretrialMaterialAmount,
+        a.pretrialOtherExpanses,
+        a.pretrialPreliminaryConstructeFee,
+        a.pretrialSurveyFee,
+        a.pretrialDesignFee,
+        a.pretrialSupervisionFee,
+        a.afterTrialEstimateAmount,
+        a.afterTrialEstimateAmountExcludeTax,
+        a.afterTrialDeductibleAmount,
+        a.afterTrialConstructeConsts,
+        a.afterTrialMaterialAmount,
+        a.afterTrialOtherExpanses,
+        a.afterTrialPreliminaryConstructeFee,
+        a.afterTrialSurveyFee,
+        a.afterTrialDesignFee,
+        a.afterTrialSupervisionFee,
+        b.projectYear,
+		b.projectNature,
+		b.demandUnit,
+		b.district,
+		b.projectGroup,
+		b.reserveBatches,
+		b.blockSupply,
+		b.gridNumber,
+		b.cellNumber,
+		b.projectName,
+		b.constructionNecessityAndContent,
+		b.substationName,
+		b.circuitName,
+		b.netRackProjectDivide,
+		b.requirementType,
+		b.costEstimate,
+		b.basicRemarks,
+		c.implementPlan,
+		c.initialImplementBatch as implementBatch
+    </sql>
+
+    <insert id="insertList">
+        insert into cg_budget_stats (
+        id,
+        create_by,
+        create_date,
+        update_by,
+        update_date,
+        del_flag,
+        projectReserveId,
+        pretrialEstimateAmount,
+        pretrialEstimateAmountExcludeTax,
+        pretrialDeductibleAmount,
+        pretrialConstructeConsts,
+        pretrialMaterialAmount,
+        pretrialOtherExpanses,
+        pretrialPreliminaryConstructeFee,
+        pretrialSurveyFee,
+        pretrialDesignFee,
+        pretrialSupervisionFee,
+        afterTrialEstimateAmount,
+        afterTrialEstimateAmountExcludeTax,
+        afterTrialDeductibleAmount,
+        afterTrialConstructeConsts,
+        afterTrialMaterialAmount,
+        afterTrialOtherExpanses,
+        afterTrialPreliminaryConstructeFee,
+        afterTrialSurveyFee,
+        afterTrialDesignFee,
+        afterTrialSupervisionFee
+        )
+        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.pretrialEstimateAmount},
+            #{item.pretrialEstimateAmountExcludeTax},
+            #{item.pretrialDeductibleAmount},
+            #{item.pretrialConstructeConsts},
+            #{item.pretrialMaterialAmount},
+            #{item.pretrialOtherExpanses},
+            #{item.pretrialPreliminaryConstructeFee},
+            #{item.pretrialSurveyFee},
+            #{item.pretrialDesignFee},
+            #{item.pretrialSupervisionFee},
+            #{item.afterTrialEstimateAmount},
+            #{item.afterTrialEstimateAmountExcludeTax},
+            #{item.afterTrialDeductibleAmount},
+            #{item.afterTrialConstructeConsts},
+            #{item.afterTrialMaterialAmount},
+            #{item.afterTrialOtherExpanses},
+            #{item.afterTrialPreliminaryConstructeFee},
+            #{item.afterTrialSurveyFee},
+            #{item.afterTrialDesignFee},
+            #{item.afterTrialSupervisionFee}
+            )
+        </foreach>
+    </insert>
+
+    <select id="findList" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.BudgetStats">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_budget_stats a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_reserve_summary_statistics 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>
+
+    <update id="delete">
+        delete from
+        cg_budget_stats
+        where id = #{id}
+    </update>
+
+    <select id="get" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.BudgetStats">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_budget_stats a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_reserve_summary_statistics c
+        on a.projectReserveId = c.projectReserveId
+        where a.id = #{id}
+    </select>
+    <select id="selectCount" resultType="java.lang.Integer">
+        select count(*) from cg_budget_stats where projectReserveId = #{projectReserveId}
+    </select>
+    <select id="exportFindList"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.BudgetStats">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_budget_stats a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_reserve_summary_statistics 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="getByExecuteId" resultType="java.lang.String">
+        SELECT NAME_ FROM `act_ru_task` WHERE EXECUTION_ID_ = #{executeId}
+    </select>
+    <select id="getByProjectReserveId" resultType="java.lang.String">
+        SELECT proc_ins_id from cg_personnel_activiti where projectReserveId = #{projectReserveId}
+    </select>
+    <select id="getHistoryByExecuteId" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History">
+        select ACT_NAME_ as name,START_TIME_ as startTime,END_TIME_ as endTime from act_hi_actinst
+        WHERE EXECUTION_ID_ = #{executeId} and ACT_NAME_ is not null ORDER BY startTime desc
+    </select>
+    <select id="getHistoryByActName"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History">
+        select ACT_NAME_ as name,START_TIME_ as startTime,END_TIME_ as endTime from act_hi_actinst
+        WHERE EXECUTION_ID_ = #{executeId} and ACT_NAME_ is not null and ACT_NAME_ = #{name}
+        ORDER BY startTime desc
+    </select>
+    <select id="getHistoryByTime"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History">
+        select ACT_NAME_ as name,START_TIME_ as startTime,END_TIME_ as endTime from act_hi_actinst
+        WHERE EXECUTION_ID_ = #{executeId}
+        and START_TIME_ = #{time} and ACT_NAME_ is not null
+    </select>
+</mapper>

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

@@ -0,0 +1,170 @@
+<?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.ConstructeScaleMapper">
+
+    <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.projectReserveId,
+		a.constructePurpose,
+		a.factoryPrefab,
+		a.ancillaryFacility,
+		a.constructionWorkMethod,
+		a.workWithoutInterruption,
+		a.powerFailureHouseNum,
+		a.peakSummerProject,
+		a.projectReview,
+		b.district,
+		b.blockSupply,
+		b.gridNumber,
+		b.cellNumber,
+		b.projectName,
+		b.constructionNecessityAndContent,
+		b.costEstimate,
+		c.afterTrialEstimateAmount
+
+    </sql>
+
+    <insert id="insertList">
+        insert into cg_constructe_scale (
+        id,
+        create_by,
+        create_date,
+        update_by,
+        update_date,
+        del_flag,
+        projectReserveId,
+        constructePurpose,
+        factoryPrefab,
+        ancillaryFacility,
+        constructionWorkMethod,
+        workWithoutInterruption,
+        powerFailureHouseNum,
+        peakSummerProject,
+        projectReview
+        )
+        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.constructePurpose},
+            #{item.factoryPrefab},
+            #{item.ancillaryFacility},
+            #{item.constructionWorkMethod},
+            #{item.workWithoutInterruption},
+            #{item.powerFailureHouseNum},
+            #{item.peakSummerProject},
+            #{item.projectReview}
+            )
+        </foreach>
+    </insert>
+
+    <select id="findList" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ConstructeScale">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_constructe_scale a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_budget_stats 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.ConstructeScale">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_constructe_scale a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_budget_stats 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>
+
+    <update id="delete">
+        delete from
+        cg_constructe_scale
+        where id = #{id}
+    </update>
+
+    <select id="get" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ConstructeScale">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_constructe_scale a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_budget_stats c
+        on a.projectReserveId = c.projectReserveId
+        where a.id = #{id}
+    </select>
+    <select id="getByProjectReserveId" resultType="java.lang.String">
+        SELECT proc_ins_id from cg_personnel_activiti where projectReserveId = #{projectReserveId}
+    </select>
+    <select id="getByExecuteId" resultType="java.lang.String">
+        SELECT NAME_ FROM `act_ru_task` WHERE EXECUTION_ID_ = #{executeId}
+    </select>
+    <select id="getHistoryByExecuteId"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History">
+        select ACT_NAME_ as name,START_TIME_ as startTime,END_TIME_ as endTime from act_hi_actinst
+        WHERE EXECUTION_ID_ = #{executeId} and ACT_NAME_ is not null
+        ORDER BY START_TIME_ desc
+    </select>
+    <select id="getStandardDetail"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.StandardDetail">
+        select remarks,projectCategory,materialCode,materialDescription from cb_standard_detail
+    </select>
+    <select id="getMaterialData"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.MaterialData">
+        select remarks,materialCode,materialName,extendDescription,unit,totalCount,weightKg,
+        weightTon,supplyType,note from cg_material_data where projectName = #{projectName}
+    </select>
+</mapper>

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

@@ -0,0 +1,94 @@
+<?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.DemoliteListMapper">
+
+    <sql id="reserveManagementColumns">
+        a.id,
+        a.projectReserveId,
+        a.specification,
+        a.unit,
+        a.count,
+        a.remark,
+        a.name as materialName,
+        b.projectName
+
+    </sql>
+
+    <select id="findList" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.DemoliteList">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_demolition_list a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.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="count!=null and count!=''">
+                and a.count = #{count}
+            </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.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
+    <select id="exportFindList"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.DemoliteList">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_demolition_list a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.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="count!=null and count!=''">
+                and a.count = #{count}
+            </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.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
+
+    <select id="get" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.DemoliteList">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_demolition_list a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.projectReserveId
+        where a.id = #{id}
+    </select>
+
+    <update id="delete">
+        delete from
+        cg_demolition_list
+        where id = #{id}
+    </update>
+
+</mapper>

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

@@ -0,0 +1,119 @@
+<?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.EnginnerQueryMapper">
+
+    <sql id="reserveManagementColumns">
+        b.projectYear,
+		b.projectNature,
+		b.demandUnit,
+		b.district,
+		b.projectGroup,
+		b.reserveBatches,
+		b.blockSupply,
+		b.gridNumber,
+		b.cellNumber,
+		b.projectReserveId,
+		b.projectName,
+		b.constructionNecessityAndContent,
+		b.substationName,
+		b.circuitName,
+		b.netRackProjectDivide,
+		b.requirementType,
+		b.costEstimate,
+		b.basicRemarks,
+		c.implementPlan,
+		c.initialImplementBatch as implementBatch
+    </sql>
+
+    <select id="findList" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.EnginnerQuery">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_reserve_process b
+        left join cg_reserve_summary_statistics c
+        on b.projectReserveId = c.projectReserveId
+        <where>
+            b.del_flag = 0
+            <if test="projectReserveId!=null and projectReserveId!=''">
+                and b.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.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
+
+    <select id="get" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.EnginnerQuery">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_reserve_process b
+        left join cg_reserve_summary_statistics c
+        on b.projectReserveId = c.projectReserveId
+        where b.id = #{id}
+    </select>
+
+    <select id="exportFindList"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.EnginnerQuery">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_reserve_process b
+        left join cg_reserve_summary_statistics c
+        on b.projectReserveId = c.projectReserveId
+        <where>
+            b.del_flag = 0
+            <if test="projectReserveId!=null and projectReserveId!=''">
+                and b.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.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
+    <select id="getData" resultType="java.lang.Double">
+        select sum(totalCount) from cg_material_data
+        <where>
+            <if test="materialCode!=null and materialCode!=''">
+                materialCode = #{materialCode}
+            </if>
+            <if test="extendDescription!=null and extendDescription!=''">
+                and extendDescription = #{extendDescription}
+            </if>
+            <if test="note!=null and note!=''">
+                and note = #{note}
+            </if>
+        </where>
+    </select>
+    <select id="getHistoryByExecuteId" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History">
+        select ACT_NAME_ as name,START_TIME_ as startTime,END_TIME_ as endTime from act_hi_actinst
+        WHERE EXECUTION_ID_ = #{executeId} and ACT_NAME_ is not null ORDER BY startTime desc
+    </select>
+
+    <select id="getByProjectReserveId" resultType="java.lang.String">
+        SELECT proc_ins_id from cg_personnel_activiti where projectReserveId = #{projectReserveId}
+    </select>
+
+    <select id="getByExecuteId" resultType="java.lang.String">
+        SELECT NAME_ FROM `act_ru_task` WHERE EXECUTION_ID_ = #{executeId}
+    </select>
+</mapper>

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

@@ -0,0 +1,220 @@
+<?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.ProgressStatsMapper">
+
+    <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.projectReserveId,
+		a.inspectDepartmentReview,
+		a.inspectDepartmentReviewTime,
+		a.releaseReserveTime,
+		a.onSiteConfess,
+		a.confessCompleteTime,
+		a.provincialCompanyReview,
+		a.provincialCompanyReviewBatch,
+		a.passProvincialCompanyReview,
+		a.causeAnalysis,
+		a.designChange,
+		a.drawingReview,
+		a.reviewDate,
+		a.passDrawingReview,
+		a.reviewComment,
+		a.approvedDate,
+		a.jointReviewDesignChange,
+		a.formalDrawing,
+		a.drawingDate,
+		a.transferProjectCenterDate,
+		a.transferToConstructionUnitDate,
+        b.projectName,
+        b.requirementType,
+        b.demandUnit,
+        b.reserveBatches,
+        b.basicRemarks,
+        c.implementPlan,
+        c.initialImplementBatch,
+        c.includeReserve
+    </sql>
+
+    <insert id="insertList">
+        insert into cg_progress_stats (
+        id,
+        create_by,
+        create_date,
+        update_by,
+        update_date,
+        del_flag,
+        projectReserveId,
+        inspectDepartmentReview,
+        inspectDepartmentReviewTime,
+        releaseReserveTime,
+        onSiteConfess,
+        confessCompleteTime,
+        provincialCompanyReview,
+        provincialCompanyReviewBatch,
+        passProvincialCompanyReview,
+        causeAnalysis,
+        designChange,
+        drawingReview,
+        reviewDate,
+        passDrawingReview,
+        reviewComment,
+        approvedDate,
+        jointReviewDesignChange,
+        formalDrawing,
+        drawingDate,
+        transferProjectCenterDate,
+        transferToConstructionUnitDate
+        )
+        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.inspectDepartmentReview},
+            #{item.inspectDepartmentReviewTime},
+            #{item.releaseReserveTime},
+            #{item.onSiteConfess},
+            #{item.confessCompleteTime},
+            #{item.provincialCompanyReview},
+            #{item.provincialCompanyReviewBatch},
+            #{item.passProvincialCompanyReview},
+            #{item.causeAnalysis},
+            #{item.designChange},
+            #{item.drawingReview},
+            #{item.reviewDate},
+            #{item.passDrawingReview},
+            #{item.reviewComment},
+            #{item.approvedDate},
+            #{item.jointReviewDesignChange},
+            #{item.formalDrawing},
+            #{item.drawingDate},
+            #{item.transferProjectCenterDate},
+            #{item.transferToConstructionUnitDate}
+            )
+        </foreach>
+    </insert>
+
+    <select id="findList" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ProgressStats">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_progress_stats a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_reserve_summary_statistics 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>
+
+    <update id="delete">
+        delete from
+        cg_progress_stats
+        where id = #{id}
+    </update>
+
+    <select id="get" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ProgressStats">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_progress_stats a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_reserve_summary_statistics c
+        on a.projectReserveId = c.projectReserveId
+        where a.id = #{id}
+    </select>
+    <select id="selectCount" resultType="java.lang.Integer">
+        select count(*) from cg_progress_stats where projectReserveId = #{projectReserveId}
+    </select>
+    <select id="exportFindList"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ProgressStats">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_progress_stats a
+        left join cg_reserve_process b
+        on a.projectReserveId = b.projectReserveId
+        left join cg_reserve_summary_statistics 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="getByProjectReserveId" resultType="java.lang.String">
+        SELECT proc_ins_id from cg_personnel_activiti where projectReserveId = #{projectReserveId}
+    </select>
+    <select id="getByExecuteId" resultType="java.lang.String">
+        SELECT NAME_ FROM `act_ru_task` WHERE EXECUTION_ID_ = #{executeId}
+    </select>
+    <select id="getHistoryByExecuteId" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History">
+        select ACT_NAME_ as name,START_TIME_ as startTime,END_TIME_ as endTime from act_hi_actinst
+        WHERE EXECUTION_ID_ = #{executeId} and ACT_NAME_ is not null
+        ORDER BY START_TIME_ desc
+    </select>
+    <select id="getHistoryByActName"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History">
+        select ACT_NAME_ as name,START_TIME_ as startTime,END_TIME_ as endTime from act_hi_actinst
+        WHERE EXECUTION_ID_ = #{executeId} and ACT_NAME_ is not null and ACT_NAME_ = #{name}
+        ORDER BY startTime desc
+    </select>
+    <select id="getHistoryByTime"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History">
+        select ACT_NAME_ as name,START_TIME_ as startTime,END_TIME_ as endTime from act_hi_actinst
+        WHERE EXECUTION_ID_ = #{executeId}
+        and START_TIME_ = #{time} and ACT_NAME_ is not null
+    </select>
+    <select id="getCommentByTime"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.HistoryComment">
+        SELECT MESSAGE_ FROM `act_hi_comment`
+        WHERE PROC_INST_ID_ = #{executeId} and TIME_ = #{time}
+    </select>
+    <select id="getByProcInstId"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.HistoryVarinst">
+        select * from act_hi_varinst where PROC_INST_ID_ = #{procInstId} and CREATE_TIME_ = #{time}
+        and LAST_UPDATED_TIME_ = #{time}
+        and LONG_ != 0
+    </select>
+</mapper>

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

@@ -0,0 +1,120 @@
+<?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.SpecialSupplyMapper">
+
+    <sql id="reserveManagementColumns">
+        b.projectYear,
+		b.projectNature,
+		b.demandUnit,
+		b.district,
+		b.projectGroup,
+		b.reserveBatches,
+		b.blockSupply,
+		b.gridNumber,
+		b.cellNumber,
+		b.projectReserveId,
+		b.projectName,
+		b.constructionNecessityAndContent,
+		b.substationName,
+		b.circuitName,
+		b.netRackProjectDivide,
+		b.requirementType,
+		b.costEstimate,
+		b.basicRemarks,
+		c.implementPlan,
+		c.initialImplementBatch as implementBatch
+    </sql>
+
+    <select id="findList" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialSupply">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_reserve_process b
+        left join cg_reserve_summary_statistics c
+        on b.projectReserveId = c.projectReserveId
+        <where>
+            b.del_flag = 0
+            <if test="projectReserveId!=null and projectReserveId!=''">
+                and b.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.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
+
+    <select id="exportFindList"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialSupply">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_reserve_process b
+        left join cg_reserve_summary_statistics c
+        on b.projectReserveId = c.projectReserveId
+        <where>
+            b.del_flag = 0
+            <if test="projectReserveId!=null and projectReserveId!=''">
+                and b.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.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
+
+    <select id="get" resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialSupply">
+        select
+        <include refid="reserveManagementColumns"/>
+        from cg_reserve_process b
+        left join cg_reserve_summary_statistics c
+        on b.projectReserveId = c.projectReserveId
+        where b.id = #{id}
+    </select>
+    <select id="getData" resultType="java.lang.Double">
+        select sum(totalCount) from cg_material_data
+        <where>
+            <if test="materialCode!=null and materialCode!=''">
+                materialCode = #{materialCode}
+            </if>
+            <if test="extendDescription!=null and extendDescription!=''">
+                and extendDescription = #{extendDescription}
+            </if>
+            <if test="note!=null and note!=''">
+                and note = #{note}
+            </if>
+        </where>
+    </select>
+    <select id="getByProjectReserveId" resultType="java.lang.String">
+        SELECT proc_ins_id from cg_personnel_activiti where projectReserveId = #{projectReserveId}
+    </select>
+    <select id="getHistoryByExecuteId"
+            resultType="com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History">
+        select ACT_NAME_ as name,START_TIME_ as startTime,END_TIME_ as endTime from act_hi_actinst
+        WHERE EXECUTION_ID_ = #{executeId} and ACT_NAME_ is not null ORDER BY startTime desc
+    </select>
+    <select id="getByExecuteId" resultType="java.lang.String">
+        SELECT NAME_ FROM `act_ru_task` WHERE EXECUTION_ID_ = #{executeId}
+    </select>
+
+
+</mapper>

+ 77 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/BudgetStatsService.java

@@ -0,0 +1,77 @@
+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.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper.BudgetStatsMapper;
+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: 王强
+ * @create: 2022-08-16 13:43
+ **/
+@Service
+@Transactional(readOnly = true)
+public class BudgetStatsService extends CrudService<BudgetStatsMapper, BudgetStats> {
+
+    @Autowired
+    private BudgetStatsMapper dao;
+
+    @Transactional(readOnly = false)
+    public void insertList(@Param("list") List<BudgetStats> list){
+        for(BudgetStats budgetStats : list){
+            budgetStats.preInsert();
+        }
+        dao.insertList(list);
+    }
+
+    public Page<BudgetStats> findPage(Page<BudgetStats> page, BudgetStats budgetStats) {
+        Page<BudgetStats> pageList = super.findPage(page, budgetStats);
+        return pageList;
+    }
+
+    /**
+     * 删除方法
+     * @param budgetStats
+     */
+    @Transactional(readOnly = false)
+    public void delete(BudgetStats budgetStats) {
+        super.delete(budgetStats);
+    }
+
+    public int selectCount(String projectReserveId){
+        return dao.selectCount(projectReserveId);
+    }
+
+    public List<BudgetStats> exportFindList( BudgetStats budgetStats) {
+        List<BudgetStats> pageList = dao.exportFindList(budgetStats);
+        return pageList;
+    }
+
+    public String getByProjectReserveId(String projectReserveId){
+        return dao.getByProjectReserveId(projectReserveId);
+    }
+
+    public String getByExecuteId(String executeId){
+        return dao.getByExecuteId(executeId);
+    }
+
+    public List<History> getHistoryByExecuteId(String executeId){
+        return dao.getHistoryByExecuteId(executeId);
+    }
+
+    public List<History> getHistoryByActName(String executeId,String name){
+        return dao.getHistoryByActName(executeId, name);
+    }
+
+    public History getHistoryByTime(String time,String executeId){
+        return dao.getHistoryByTime(time, executeId);
+    }
+}

+ 78 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/ConstructeScaleService.java

@@ -0,0 +1,78 @@
+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.StandardDetail;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ConstructeScale;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper.ConstructeScaleMapper;
+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: 王强
+ * @create: 2022-08-19 14:13
+ **/
+@Service
+@Transactional(readOnly = true)
+public class ConstructeScaleService extends CrudService<ConstructeScaleMapper, ConstructeScale> {
+
+    @Autowired
+    private ConstructeScaleMapper dao;
+
+    @Transactional(readOnly = false)
+    public void insertList(@Param("list") List<ConstructeScale> list) {
+        for (ConstructeScale constructeScale : list) {
+            constructeScale.preInsert();
+        }
+        dao.insertList(list);
+    }
+
+    public Page<ConstructeScale> findPage(Page<ConstructeScale> page, ConstructeScale constructeScale) {
+        Page<ConstructeScale> pageList = super.findPage(page, constructeScale);
+        return pageList;
+    }
+
+    /**
+     * 删除方法
+     *
+     * @param constructeScale
+     */
+    @Transactional(readOnly = false)
+    public void delete(ConstructeScale constructeScale) {
+        super.delete(constructeScale);
+    }
+
+    public List<ConstructeScale> exportFindList(ConstructeScale constructeScale) {
+        List<ConstructeScale> pageList = dao.exportFindList(constructeScale);
+        return pageList;
+    }
+
+    public String getByProjectReserveId(String projectReserveId) {
+        return dao.getByProjectReserveId(projectReserveId);
+    }
+
+    public String getByExecuteId(String executeId) {
+        return dao.getByExecuteId(executeId);
+    }
+
+    public List<History> getHistoryByExecuteId(String executeId) {
+        return dao.getHistoryByExecuteId(executeId);
+    }
+
+    public List<StandardDetail> getStandardDetail() {
+        return dao.getStandardDetail();
+    }
+
+    public List<MaterialData> getMaterialData(String projectName) {
+        return dao.getMaterialData(projectName);
+    }
+
+}

+ 43 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/DemoliteListService.java

@@ -0,0 +1,43 @@
+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.DemoliteList;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper.DemoliteListMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 储备项目拆旧物资汇总表
+ * @author: 王强
+ * @create: 2022-08-23 08:50
+ **/
+@Service
+@Transactional(readOnly = true)
+public class DemoliteListService extends CrudService<DemoliteListMapper, DemoliteList> {
+
+    @Autowired
+    private DemoliteListMapper mapper;
+
+    public Page<DemoliteList> findPage(Page<DemoliteList> page, DemoliteList demoliteList) {
+        Page<DemoliteList> pageList = super.findPage(page, demoliteList);
+        return pageList;
+    }
+
+    /**
+     * 删除方法
+     * @param demoliteList
+     */
+    @Transactional(readOnly = false)
+    public void delete(DemoliteList demoliteList) {
+        super.delete(demoliteList);
+    }
+
+    public List<DemoliteList> exportFindList(DemoliteList demoliteList) {
+        List<DemoliteList> pageList = mapper.exportFindList(demoliteList);
+        return pageList;
+    }
+}

+ 51 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/EnginnerQueryService.java

@@ -0,0 +1,51 @@
+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.EnginnerQuery;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper.EnginnerQueryMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 立杆和土建工程量统计
+ * @author: 王强
+ * @create: 2022-08-22 15:17
+ **/
+@Service
+@Transactional(readOnly = true)
+public class EnginnerQueryService extends CrudService<EnginnerQueryMapper, EnginnerQuery> {
+
+    @Autowired
+    private EnginnerQueryMapper queryMapper;
+
+    public Page<EnginnerQuery> findPage(Page<EnginnerQuery> page, EnginnerQuery enginnerQuery) {
+        Page<EnginnerQuery> pageList = super.findPage(page, enginnerQuery);
+        return pageList;
+    }
+
+    public List<EnginnerQuery> exportFindList(EnginnerQuery enginnerQuery) {
+        List<EnginnerQuery> pageList = queryMapper.exportFindList(enginnerQuery);
+        return pageList;
+    }
+
+    public Double getData(String code,String extendDescription,String note) {
+        return queryMapper.getData(code, extendDescription, note);
+    }
+
+    public String getByProjectReserveId(String projectReserveId){
+        return queryMapper.getByProjectReserveId(projectReserveId);
+    }
+
+    public List<History> getHistoryByExecuteId(String executeId){
+        return queryMapper.getHistoryByExecuteId(executeId);
+    }
+
+    public String getByExecuteId(String executeId){
+        return queryMapper.getByExecuteId(executeId);
+    }
+}

+ 87 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/ProgressStatsService.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.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.HistoryComment;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.HistoryVarinst;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ProgressStats;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper.ProgressStatsMapper;
+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: 王强
+ * @create: 2022-08-18 09:16
+ **/
+@Service
+@Transactional(readOnly = true)
+public class ProgressStatsService extends CrudService<ProgressStatsMapper, ProgressStats> {
+
+    @Autowired
+    private ProgressStatsMapper dao;
+
+    @Transactional(readOnly = false)
+    public void insertList(@Param("list") List<ProgressStats> list){
+        for(ProgressStats progressStats : list){
+            progressStats.preInsert();
+        }
+        dao.insertList(list);
+    }
+
+    public Page<ProgressStats> findPage(Page<ProgressStats> page, ProgressStats progressStats) {
+        Page<ProgressStats> pageList = super.findPage(page, progressStats);
+        return pageList;
+    }
+
+    /**
+     * 删除方法
+     * @param progressStats
+     */
+    @Transactional(readOnly = false)
+    public void delete(ProgressStats progressStats) {
+        super.delete(progressStats);
+    }
+
+    public int selectCount(String projectReserveId){
+        return dao.selectCount(projectReserveId);
+    }
+
+    public List<ProgressStats> exportFindList(ProgressStats progressStats) {
+        List<ProgressStats> pageList = dao.exportFindList(progressStats);
+        return pageList;
+    }
+
+    public String getByProjectReserveId(String projectReserveId){
+        return dao.getByProjectReserveId(projectReserveId);
+    }
+
+    public String getByExecuteId(String executeId){
+        return dao.getByExecuteId(executeId);
+    }
+
+    public List<History> getHistoryByExecuteId(String executeId){
+        return dao.getHistoryByExecuteId(executeId);
+    }
+
+    public List<History> getHistoryByActName(String executeId,String name){
+        return dao.getHistoryByActName(executeId, name);
+    }
+
+    public History getHistoryByTime(String time,String executeId){
+        return dao.getHistoryByTime(time, executeId);
+    }
+
+    public HistoryComment getCommentByTime(String time, String executeId){
+        return dao.getCommentByTime(time, executeId);
+    }
+
+    public HistoryVarinst getByProcInstId(String time, String procInstId){
+        return dao.getByProcInstId(time, procInstId);
+    }
+}

+ 51 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/service/SpecialSupplyService.java

@@ -0,0 +1,51 @@
+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.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialSupply;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.mapper.SpecialSupplyMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 特殊物资统计
+ * @author: 王强
+ * @create: 2022-08-22 17:58
+ **/
+@Service
+@Transactional(readOnly = true)
+public class SpecialSupplyService extends CrudService<SpecialSupplyMapper, SpecialSupply> {
+
+    @Autowired
+    private SpecialSupplyMapper supplyMapper;
+
+    public Page<SpecialSupply> findPage(Page<SpecialSupply> page, SpecialSupply specialSupply) {
+        Page<SpecialSupply> pageList = super.findPage(page, specialSupply);
+        return pageList;
+    }
+
+    public List<SpecialSupply> exportFindList(SpecialSupply specialSupply) {
+        List<SpecialSupply> pageList = supplyMapper.exportFindList(specialSupply);
+        return pageList;
+    }
+
+    public Double getData(String code,String extendDescription,String note) {
+        return supplyMapper.getData(code, extendDescription, note);
+    }
+
+    public String getByProjectReserveId(String projectReserveId){
+        return supplyMapper.getByProjectReserveId(projectReserveId);
+    }
+
+    public List<History> getHistoryByExecuteId(String executeId){
+        return supplyMapper.getHistoryByExecuteId(executeId);
+    }
+
+    public String getByExecuteId(String executeId){
+        return supplyMapper.getByExecuteId(executeId);
+    }
+}

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

@@ -0,0 +1,714 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.util;
+
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.*;
+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.xssf.usermodel.XSSFCellStyle;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
+import java.util.List;
+
+/**
+ * @author: 王强
+ * @create: 2022-08-17 13:59
+ **/
+public class ExcelExportUtil {
+
+    private XSSFCellStyle style = null;
+
+    public static ExcelExportUtil getOne(){
+
+        return new ExcelExportUtil();
+    }
+
+    /**
+     * 传入excel模板名称 获取workbook对象
+     * @param fileName excel模板名称
+     * @return
+     */
+    public  XSSFWorkbook getWorkbook(String fileName){
+        InputStream inputStream = null;
+        XSSFWorkbook workbook = null;
+        try {
+            File file = new File(this.getClass().getResource("/").getPath() + "/freemarker/excelmodel/"+fileName+".xlsx");
+            inputStream = new FileInputStream(file);// 将excel文件转为输入流
+            workbook = new XSSFWorkbook(inputStream);// 创建个workbook,
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return workbook;
+    }
+
+    /**
+     * 创建Cell对象 同时设置style
+     * @param workbook
+     * @param row
+     * @param num
+     * @return
+     */
+    Cell crateCell(XSSFWorkbook workbook,Row row, int num){
+        Cell cell = row.createCell(num);
+        if(style == null){
+            style =workbook.createCellStyle();
+            style.setWrapText(true);
+            style.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
+        }
+        cell.setCellStyle(style);
+        return cell;
+    }
+
+    /**
+     * 导出储备项目概预算统计表信息
+     * @param response
+     * @param workbook
+     * @param list
+     */
+    public void exportBasic(HttpServletResponse response, XSSFWorkbook workbook, List<BudgetStats> list){
+        try {
+            int index = 1;//第一列序号
+            int rowNum = 3;//数据起始列
+            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); //审后总概算金额(不含税)
+                Cell cell34 = crateCell(workbook,row,34); //审后可抵扣金额(税金)
+                Cell cell35 = crateCell(workbook,row,35); //审后施工费(含税)
+                Cell cell36 = crateCell(workbook,row,36); //审后甲供物资金额(含税)
+                Cell cell37 = crateCell(workbook,row,37); //审后其他费用(含税)
+                Cell cell38 = crateCell(workbook,row,38); //审后前期工程费(含税)
+                Cell cell39 = crateCell(workbook,row,39); //审后勘察费(含税)
+                Cell cell40 = crateCell(workbook,row,40); //审后设计费(含税)
+                Cell cell41 = crateCell(workbook,row,41); //审后监理费(含税)
+                Cell cell42 = crateCell(workbook,row,42); //是否完成概算修改
+                Cell cell43 = crateCell(workbook,row,43); //概算修改完成时间
+
+                BudgetStats 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.getReserveBatches());
+                cell7.setCellValue(budgetStats.getBlockSupply());
+                cell8.setCellValue(budgetStats.getGridNumber());
+                cell9.setCellValue(budgetStats.getCellNumber());
+                cell10.setCellValue(budgetStats.getProjectReserveId());
+                cell11.setCellValue(budgetStats.getProjectName());
+                cell12.setCellValue(budgetStats.getConstructionNecessityAndContent());
+                cell13.setCellValue(budgetStats.getSubstationName());
+                cell14.setCellValue(budgetStats.getCircuitName());
+                cell15.setCellValue(budgetStats.getNetRackProjectDivide());
+                cell16.setCellValue(budgetStats.getRequirementType());
+
+                String costEstimateStr= budgetStats.getCostEstimate().toString();
+                if(StringUtils.isNotBlank(costEstimateStr)){
+                    cell17.setCellValue(Double.parseDouble(costEstimateStr));
+                }
+                cell18.setCellValue(budgetStats.getBasicRemarks());
+                cell19.setCellValue(budgetStats.getReserveProgress());
+                cell20.setCellValue(budgetStats.getImplementPlan());
+                cell21.setCellValue(budgetStats.getImplementBatch());
+                cell22.setCellValue(budgetStats.getPretrialEstimateAmount());
+                cell23.setCellValue(budgetStats.getPretrialEstimateAmountExcludeTax());
+                cell24.setCellValue(budgetStats.getPretrialDeductibleAmount());
+                cell25.setCellValue(budgetStats.getPretrialConstructeConsts());
+                cell26.setCellValue(budgetStats.getPretrialMaterialAmount());
+                cell27.setCellValue(budgetStats.getPretrialOtherExpanses());
+                cell28.setCellValue(budgetStats.getPretrialPreliminaryConstructeFee());
+                cell29.setCellValue(budgetStats.getPretrialSurveyFee());
+                cell30.setCellValue(budgetStats.getPretrialDesignFee());
+                cell31.setCellValue(budgetStats.getPretrialSupervisionFee());
+                cell32.setCellValue(budgetStats.getAfterTrialEstimateAmount());
+                cell33.setCellValue(budgetStats.getAfterTrialEstimateAmountExcludeTax());
+                cell34.setCellValue(budgetStats.getAfterTrialDeductibleAmount());
+                cell35.setCellValue(budgetStats.getAfterTrialConstructeConsts());
+                cell36.setCellValue(budgetStats.getAfterTrialMaterialAmount());
+                cell37.setCellValue(budgetStats.getAfterTrialOtherExpanses());
+                cell38.setCellValue(budgetStats.getAfterTrialPreliminaryConstructeFee());
+                cell39.setCellValue(budgetStats.getAfterTrialSurveyFee());
+                cell40.setCellValue(budgetStats.getAfterTrialDesignFee());
+                cell41.setCellValue(budgetStats.getAfterTrialSupervisionFee());
+                cell42.setCellValue(budgetStats.getBudgetRevision());
+                cell43.setCellValue(budgetStats.getCompleteTime());
+            }
+
+            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 exportProgress(HttpServletResponse response, XSSFWorkbook workbook, List<ProgressStats> list){
+        try {
+            int index = 1;//第一列序号
+            int rowNum = 3;//数据起始列
+            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); //是否通过省公司评审
+                Cell cell34 = crateCell(workbook,row,34); //未通过原因分析
+                Cell cell35 = crateCell(workbook,row,35); //是否需设计变更
+                Cell cell36 = crateCell(workbook,row,36); //是否进行图纸审查
+                Cell cell37 = crateCell(workbook,row,37); //审图日期
+                Cell cell38 = crateCell(workbook,row,38); //是否通过图纸审查
+                Cell cell39 = crateCell(workbook,row,39); //未通过审图意见
+                Cell cell40 = crateCell(workbook,row,40); //通过审核日期
+                Cell cell41 = crateCell(workbook,row,41); //是否需设计变更
+                Cell cell42 = crateCell(workbook,row,42); //图纸是否定稿
+                Cell cell43 = crateCell(workbook,row,43); //定稿日期
+                Cell cell44 = crateCell(workbook,row,44); //是否打印正式图纸
+                Cell cell45 = crateCell(workbook,row,45); //通知出图日期
+                Cell cell46 = crateCell(workbook,row,46); //正式图纸移交项目中心日期
+                Cell cell47 = crateCell(workbook,row,47); //正式图纸移交施工单位日期
+
+                ProgressStats progressStats = list.get(i);
+
+                cell0.setCellValue(String.valueOf(index++));
+                cell1.setCellValue(progressStats.getProjectReserveId());
+                cell2.setCellValue(progressStats.getProjectName());
+                cell3.setCellValue(progressStats.getRequirementType());
+                cell4.setCellValue(progressStats.getDemandUnit());
+                cell5.setCellValue(progressStats.getReserveBatches());
+                cell6.setCellValue(progressStats.getBasicRemarks());
+                cell7.setCellValue(progressStats.getReserveProgress());
+                cell8.setCellValue(progressStats.getImplementPlan());
+                cell9.setCellValue(progressStats.getInitialImplementBatch());
+                cell10.setCellValue(progressStats.getInspectDepartmentReview());
+                cell11.setCellValue(progressStats.getInspectDepartmentReviewTime());
+                cell12.setCellValue(progressStats.getReleaseReserveTime());
+                cell13.setCellValue(progressStats.getDesignCommission());
+                cell14.setCellValue(progressStats.getDesignCommissionIssueTime());
+                cell15.setCellValue("");
+                cell16.setCellValue(progressStats.getOnSiteConfess());
+                cell17.setCellValue(progressStats.getConfessCompleteTime());
+                cell18.setCellValue(progressStats.getIncludeReserve());
+                cell19.setCellValue(progressStats.getCompleteDesign());
+                cell20.setCellValue(progressStats.getSubmitTime());
+                cell21.setCellValue(progressStats.getCompleteDraw());
+                cell22.setCellValue(progressStats.getDrawAudit());
+                cell23.setCellValue(progressStats.getReasonForFailure());
+                cell24.setCellValue(progressStats.getPassAuditDate());
+                cell25.setCellValue(progressStats.getChangeDesign());
+                cell26.setCellValue(progressStats.getCompleteReview());
+                cell27.setCellValue(progressStats.getExpertReview());
+                cell28.setCellValue(progressStats.getEstimateReasonForFailure());
+                cell29.setCellValue(progressStats.getEstimatePassAuditDate());
+                cell30.setCellValue(progressStats.getEstimateChangeDesign());
+                cell31.setCellValue(progressStats.getProvincialCompanyReview());
+                cell32.setCellValue(progressStats.getProvincialCompanyReviewBatch());
+                cell33.setCellValue(progressStats.getPassProvincialCompanyReview());
+                cell34.setCellValue(progressStats.getCauseAnalysis());
+                cell35.setCellValue(progressStats.getDesignChange());
+                cell36.setCellValue(progressStats.getDrawingReview());
+                cell37.setCellValue(progressStats.getReviewDate());
+                cell38.setCellValue(progressStats.getPassDrawingReview());
+                cell39.setCellValue(progressStats.getReviewComment());
+                cell40.setCellValue(progressStats.getApprovedDate());
+                cell41.setCellValue(progressStats.getJointReviewDesignChange());
+                cell42.setCellValue(progressStats.getDrawingFinalize());
+                cell43.setCellValue(progressStats.getFinalDate());
+                cell44.setCellValue(progressStats.getFormalDrawing());
+                cell45.setCellValue(progressStats.getDrawingDate());
+                cell46.setCellValue(progressStats.getTransferProjectCenterDate());
+                cell47.setCellValue(progressStats.getTransferToConstructionUnitDate());
+
+            }
+
+            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 exportConstructe(HttpServletResponse response, XSSFWorkbook workbook, List<ConstructeScale> 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); //配电室kva
+                Cell cell19 = crateCell(workbook,row,19); //配电室
+                Cell cell20 = crateCell(workbook,row,20); //箱变kva
+                Cell cell21 = crateCell(workbook,row,21); //箱变
+                Cell cell22 = crateCell(workbook,row,22); //配电变压器kva
+                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); //配电自动化终端(FTU)
+                Cell cell29 = crateCell(workbook,row,29); //配电自动化终端(DTU)
+                Cell cell30 = crateCell(workbook,row,30); //光缆
+                Cell cell31 = crateCell(workbook,row,31); //电缆通道
+                Cell cell32 = crateCell(workbook,row,32); //土建工厂化预制
+                Cell cell33 = crateCell(workbook,row,33); //附属设施
+                Cell cell34 = crateCell(workbook,row,34); //施工作业方式(完全不停电作业、部分不停电作业、停电作业)
+                Cell cell35 = crateCell(workbook,row,35); //不停电作业
+                Cell cell36 = crateCell(workbook,row,36); //停电时户数
+                Cell cell37 = crateCell(workbook,row,37); //费用估算
+                Cell cell38 = crateCell(workbook,row,38); //是否迎峰度夏项目
+                Cell cell39 = crateCell(workbook,row,39); //通过第几批项目评审
+                Cell cell40 = crateCell(workbook,row,40); //概算
+
+
+                ConstructeScale constructeScale = list.get(i);
+
+                cell0.setCellValue(String.valueOf(index++));
+                cell1.setCellValue("国网镇江供电公司");
+                cell2.setCellValue(constructeScale.getDistrict());
+                cell3.setCellValue(constructeScale.getBlockSupply());
+                cell4.setCellValue(constructeScale.getGridNumber());
+                cell5.setCellValue(constructeScale.getCellNumber());
+                cell6.setCellValue(constructeScale.getProjectReserveId());
+                cell7.setCellValue(constructeScale.getProjectName());
+                cell8.setCellValue(constructeScale.getConstructionNecessityAndContent());
+                cell9.setCellValue(constructeScale.getConstructePurpose());
+                cell10.setCellValue(constructeScale.getReserveProgress());
+                cell11.setCellValue(constructeScale.getSwitchCabinet());
+                cell12.setCellValue(constructeScale.getOverheadLine());
+                cell13.setCellValue(constructeScale.getPowerCable());
+                cell14.setCellValue(constructeScale.getCableBranchBox());
+                cell15.setCellValue(constructeScale.getOutdoorRingCage());
+                cell16.setCellValue(constructeScale.getRingRoom());
+                cell17.setCellValue(constructeScale.getOnColumnSwitch());
+                cell18.setCellValue(constructeScale.getSwitchRoomKVA());
+                cell19.setCellValue(constructeScale.getSwitchRoom());
+                cell20.setCellValue(constructeScale.getBoxChangeKVA());
+                cell21.setCellValue(constructeScale.getBoxChange());
+                cell22.setCellValue(constructeScale.getDistributionTransformerKVA());
+                cell23.setCellValue(constructeScale.getDistributionTransformer());
+                cell24.setCellValue(constructeScale.getLowVoltageLine());
+                cell25.setCellValue(constructeScale.getLowVoltageCable());
+                cell26.setCellValue(constructeScale.getLowVoltageCableBox());
+                cell27.setCellValue(constructeScale.getLowVoltageCabinet());
+                cell28.setCellValue(constructeScale.getDistributeAutoMateTerminalFTU());
+                cell29.setCellValue(constructeScale.getDistributeAutoMateTerminalDTU());
+                cell30.setCellValue(constructeScale.getOpticalCable());
+                cell31.setCellValue(constructeScale.getCablePassage());
+                cell32.setCellValue(constructeScale.getFactoryPrefab());
+                cell33.setCellValue(constructeScale.getAncillaryFacility());
+                cell34.setCellValue(constructeScale.getConstructionWorkMethod());
+                cell35.setCellValue(constructeScale.getWorkWithoutInterruption());
+                cell36.setCellValue(constructeScale.getPowerFailureHouseNum());
+                cell37.setCellValue(constructeScale.getCostEstimate());
+                cell38.setCellValue(constructeScale.getPeakSummerProject());
+                cell39.setCellValue(constructeScale.getProjectReview());
+                cell40.setCellValue(constructeScale.getAfterTrialEstimateAmount());
+
+            }
+
+            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 exportEnginnerQuery(HttpServletResponse response, XSSFWorkbook workbook, List<EnginnerQuery> list){
+        try {
+            int index = 1;//第一列序号
+            int rowNum = 3;//数据起始列
+            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); //立杆信息Φ190×10×M×I
+                Cell cell26 = crateCell(workbook,row,26); //立杆信息Φ190×12×M×G
+                Cell cell27 = crateCell(workbook,row,27); //立杆信息Φ190×15×M×G
+                Cell cell28 = crateCell(workbook,row,28); //立杆信息Φ230×15×N
+                Cell cell29 = crateCell(workbook,row,29); //立杆信息Φ230×18×N×G
+                Cell cell30 = crateCell(workbook,row,30); //立杆信息Φ300×9
+                Cell cell31 = crateCell(workbook,row,31); //立杆信息Φ350×15×T×BY
+                Cell cell32 = crateCell(workbook,row,32); //钢管杆信息GNH31-13B(含钢管桩)
+                Cell cell33 = crateCell(workbook,row,33); //钢管杆信息GNH31-13B(不含钢管桩)
+                Cell cell34 = crateCell(workbook,row,34); //钢管杆信息GNH31-13D(含钢管桩)
+                Cell cell35 = crateCell(workbook,row,35); //钢管杆信息GNH31-13D(不含钢管桩)
+                Cell cell36 = crateCell(workbook,row,36); //钢管杆信息GNH35-13B(含钢管桩)
+                Cell cell37 = crateCell(workbook,row,37); //钢管杆信息GNH35-13B(不含钢管桩)
+                Cell cell38 = crateCell(workbook,row,38); //钢管杆信息GNH35-13E(含钢管桩)
+                Cell cell39 = crateCell(workbook,row,39); //钢管杆信息GNH35-13E(不含钢管桩)
+                Cell cell40 = crateCell(workbook,row,40); //钢管杆信息GNH39-13B(含钢管桩)
+                Cell cell41 = crateCell(workbook,row,41); //钢管杆信息GNH39-13B(不含钢管桩)
+                Cell cell42 = crateCell(workbook,row,42); //预制化井
+                Cell cell43 = crateCell(workbook,row,43); //预制化基础
+                Cell cell44 = crateCell(workbook,row,44); //预制化包封
+
+                EnginnerQuery enginnerQuery = list.get(i);
+
+                cell0.setCellValue(String.valueOf(index++));
+                cell1.setCellValue(enginnerQuery.getProjectYear());
+                cell2.setCellValue(enginnerQuery.getProjectNature());
+                cell3.setCellValue(enginnerQuery.getDemandUnit());
+                cell4.setCellValue(enginnerQuery.getDistrict());
+                cell5.setCellValue(enginnerQuery.getProjectGroup());
+                cell6.setCellValue(enginnerQuery.getReserveBatches());
+                cell7.setCellValue(enginnerQuery.getBlockSupply());
+                cell8.setCellValue(enginnerQuery.getGridNumber());
+                cell9.setCellValue(enginnerQuery.getCellNumber());
+                cell10.setCellValue(enginnerQuery.getProjectReserveId());
+                cell11.setCellValue(enginnerQuery.getProjectName());
+                cell12.setCellValue(enginnerQuery.getConstructionNecessityAndContent());
+                cell13.setCellValue(enginnerQuery.getSubstationName());
+                cell14.setCellValue(enginnerQuery.getCircuitName());
+                cell15.setCellValue(enginnerQuery.getNetRackProjectDivide());
+                cell16.setCellValue(enginnerQuery.getRequirementType());
+                cell17.setCellValue(enginnerQuery.getProjectType());
+
+                String costEstimateStr= enginnerQuery.getCostEstimate().toString();
+                if(StringUtils.isNotBlank(costEstimateStr)){
+                    cell18.setCellValue(Double.parseDouble(costEstimateStr));
+                }
+                cell19.setCellValue(enginnerQuery.getBasicRemarks());
+                cell20.setCellValue(enginnerQuery.getReserveProgress());
+                cell21.setCellValue(enginnerQuery.getImplementPlan());
+                cell22.setCellValue(enginnerQuery.getImplementBatch());
+                cell23.setCellValue(enginnerQuery.getCivilWork());
+                cell24.setCellValue(enginnerQuery.getPoleWorkload());
+                cell25.setCellValue(enginnerQuery.getPole190X10());
+                cell26.setCellValue(enginnerQuery.getPole190X12());
+                cell27.setCellValue(enginnerQuery.getPole190X15());
+                cell28.setCellValue(enginnerQuery.getPole230X15());
+                cell29.setCellValue(enginnerQuery.getPole230X18());
+                cell30.setCellValue(enginnerQuery.getPole300X9());
+                cell31.setCellValue(enginnerQuery.getPole350X15());
+                cell32.setCellValue(enginnerQuery.getSteelPipeGNH31Contains());
+                cell33.setCellValue(enginnerQuery.getSteelPipeGNH31NoContains());
+                cell34.setCellValue(enginnerQuery.getSteelPipeGNH3113DContains());
+                cell35.setCellValue(enginnerQuery.getSteelPipeGNH3113DNoContains());
+                cell36.setCellValue(enginnerQuery.getSteelPipeCNH35Contains());
+                cell37.setCellValue(enginnerQuery.getSteelPipeCNH35NoContains());
+                cell38.setCellValue(enginnerQuery.getSteelPipeCNH3513EContains());
+                cell39.setCellValue(enginnerQuery.getSteelPipeCNH3513ENoContains());
+                cell40.setCellValue(enginnerQuery.getSteelPipeCNH39Contains());
+                cell41.setCellValue(enginnerQuery.getSteelPipeCNH39NoContains());
+                cell42.setCellValue(enginnerQuery.getPrefabricatedWell());
+                cell43.setCellValue(enginnerQuery.getPrefabricatedBase());
+                cell44.setCellValue(enginnerQuery.getPrefabricatedPackage());
+            }
+
+            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 exportSpecialSupply(HttpServletResponse response, XSSFWorkbook workbook, List<SpecialSupply> 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); //A物资
+                Cell cell24 = crateCell(workbook,row,24); //B物资
+                Cell cell25 = crateCell(workbook,row,25); //C物资
+                Cell cell26 = crateCell(workbook,row,26); //D物资
+                Cell cell27 = crateCell(workbook,row,27); //环网柜AC10kV
+                Cell cell28 = crateCell(workbook,row,28); //环网柜AC10kV02
+                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); //电缆分支箱五路
+                Cell cell34 = crateCell(workbook,row,34); //电缆分支箱七路
+                Cell cell35 = crateCell(workbook,row,35); //箱变路数
+                Cell cell36 = crateCell(workbook,row,36); //特殊物资A
+                Cell cell37 = crateCell(workbook,row,37); //特殊物资B
+                Cell cell38 = crateCell(workbook,row,38); //特殊物资C
+                Cell cell39 = crateCell(workbook,row,39); //特殊物资D
+
+
+                SpecialSupply specialSupply = list.get(i);
+
+                cell0.setCellValue(String.valueOf(index++));
+                cell1.setCellValue(specialSupply.getProjectYear());
+                cell2.setCellValue(specialSupply.getProjectNature());
+                cell3.setCellValue(specialSupply.getDemandUnit());
+                cell4.setCellValue(specialSupply.getDistrict());
+                cell5.setCellValue(specialSupply.getProjectGroup());
+                cell6.setCellValue(specialSupply.getReserveBatches());
+                cell7.setCellValue(specialSupply.getBlockSupply());
+                cell8.setCellValue(specialSupply.getGridNumber());
+                cell9.setCellValue(specialSupply.getCellNumber());
+                cell10.setCellValue(specialSupply.getProjectReserveId());
+                cell11.setCellValue(specialSupply.getProjectName());
+                cell12.setCellValue(specialSupply.getConstructionNecessityAndContent());
+                cell13.setCellValue(specialSupply.getSubstationName());
+                cell14.setCellValue(specialSupply.getCircuitName());
+                cell15.setCellValue(specialSupply.getNetRackProjectDivide());
+                cell16.setCellValue(specialSupply.getRequirementType());
+                cell17.setCellValue(specialSupply.getProjectType());
+
+                String costEstimateStr= specialSupply.getCostEstimate().toString();
+                if(StringUtils.isNotBlank(costEstimateStr)){
+                    cell18.setCellValue(Double.parseDouble(costEstimateStr));
+                }
+                cell19.setCellValue(specialSupply.getBasicRemarks());
+                cell20.setCellValue(specialSupply.getReserveProgress());
+                cell21.setCellValue(specialSupply.getImplementPlan());
+                cell22.setCellValue(specialSupply.getImplementBatch());
+                cell23.setCellValue(specialSupply.getMaterialStatisticA());
+                cell24.setCellValue(specialSupply.getMaterialStatisticB());
+                cell25.setCellValue(specialSupply.getMaterialStatisticC());
+                cell26.setCellValue(specialSupply.getMaterialStatisticD());
+                cell27.setCellValue(specialSupply.getSwitchCabinet10KV());
+                cell28.setCellValue(specialSupply.getSwitchCabinet10KV02());
+                cell29.setCellValue(specialSupply.getSwitchCabinetIncomeLine());
+                cell30.setCellValue(specialSupply.getSwitchCabinetSegment());
+                cell31.setCellValue(specialSupply.getSwitchCabinetFeeder());
+                cell32.setCellValue(specialSupply.getNumberOfBranchBoxFourWay());
+                cell33.setCellValue(specialSupply.getNumberOfBranchBoxFiveWay());
+                cell34.setCellValue(specialSupply.getNumberOfBranchBoxSevenWay());
+                cell35.setCellValue(specialSupply.getNumberOfBox());
+                cell36.setCellValue(specialSupply.getSpecialSizeA());
+                cell37.setCellValue(specialSupply.getSpecialSizeB());
+                cell38.setCellValue(specialSupply.getSpecialSizeC());
+                cell39.setCellValue(specialSupply.getSpecialSizeD());
+
+            }
+
+            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 exportDemoliteList(HttpServletResponse response, XSSFWorkbook workbook, List<DemoliteList> list){
+        try {
+            int index = 1;//第一列序号
+            int rowNum = 3;//数据起始列
+            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); //备注
+
+                DemoliteList demoliteList = list.get(i);
+
+                cell0.setCellValue(String.valueOf(index++));
+                cell1.setCellValue(demoliteList.getProjectName());
+                cell2.setCellValue(demoliteList.getProjectReserveId());
+                cell3.setCellValue(demoliteList.getMaterialName());
+                cell4.setCellValue(demoliteList.getSpecification());
+                cell5.setCellValue(demoliteList.getUnit());
+                cell6.setCellValue(demoliteList.getCount());
+                cell7.setCellValue(demoliteList.getRemark());
+
+            }
+
+            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();
+        }
+    }
+}

+ 158 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/util/ExcelImportUtil.java

@@ -0,0 +1,158 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.util;
+
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.BudgetStats;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ConstructeScale;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ProgressStats;
+import com.jeeplus.modules.sg.managementcenter.materialproject.util.ImportUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Row;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author: 王强
+ * @create: 2022-08-16 15:01
+ **/
+public class ExcelImportUtil {
+
+    /**
+     * 获取储备项目概预算统计表表格数据
+     *
+     * @param importUtil
+     * @return List<BudgetStats> 导入表格数据
+     */
+    public static List<BudgetStats> getBudgetUtil(ImportUtil importUtil) throws ParseException {
+        int lastRow = importUtil.getLastDataRowNum();
+        List<BudgetStats> list = new ArrayList<BudgetStats>();
+        BudgetStats budgetStats = null;
+
+        for(int i=2; i<=lastRow;i++) {
+            budgetStats = new BudgetStats();
+            Row row = importUtil.getRow(i);
+
+            String reserveProjectName = (String) importUtil.getCellValue(row, 1);
+            //获取项目储备编号
+            String projectReserveId = (String) importUtil.getCellValue(row, 10);
+            if (StringUtils.isNotBlank(reserveProjectName)) {
+                if (StringUtils.isNotBlank(projectReserveId)) {
+
+                    budgetStats.setProjectReserveId((String) importUtil.getCellValue(row, 10));
+                    budgetStats.setPretrialEstimateAmount((String) importUtil.getCellValue(row, 22));
+                    budgetStats.setPretrialEstimateAmountExcludeTax((String) importUtil.getCellValue(row, 23));
+                    budgetStats.setPretrialDeductibleAmount((String) importUtil.getCellValue(row, 24));
+                    budgetStats.setPretrialConstructeConsts((String) importUtil.getCellValue(row, 25));
+                    budgetStats.setPretrialMaterialAmount((String) importUtil.getCellValue(row, 26));
+                    budgetStats.setPretrialOtherExpanses((String) importUtil.getCellValue(row, 27));
+                    budgetStats.setPretrialPreliminaryConstructeFee((String) importUtil.getCellValue(row, 28));
+                    budgetStats.setPretrialSurveyFee((String) importUtil.getCellValue(row, 29));
+                    budgetStats.setPretrialDesignFee((String) importUtil.getCellValue(row, 30));
+                    budgetStats.setPretrialSupervisionFee((String) importUtil.getCellValue(row, 31));
+                    budgetStats.setAfterTrialEstimateAmount((String) importUtil.getCellValue(row, 32));
+                    budgetStats.setAfterTrialEstimateAmountExcludeTax((String) importUtil.getCellValue(row, 33));
+                    budgetStats.setAfterTrialDeductibleAmount((String) importUtil.getCellValue(row, 34));
+                    budgetStats.setAfterTrialConstructeConsts((String) importUtil.getCellValue(row, 35));
+                    budgetStats.setAfterTrialMaterialAmount((String) importUtil.getCellValue(row, 36));
+                    budgetStats.setAfterTrialOtherExpanses((String) importUtil.getCellValue(row, 37));
+                    budgetStats.setAfterTrialPreliminaryConstructeFee((String) importUtil.getCellValue(row, 38));
+                    budgetStats.setAfterTrialSurveyFee((String) importUtil.getCellValue(row, 39));
+                    budgetStats.setAfterTrialDesignFee((String) importUtil.getCellValue(row, 40));
+                    budgetStats.setAfterTrialSupervisionFee((String) importUtil.getCellValue(row, 41));
+
+                    list.add(budgetStats);
+                }
+
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 获取储备进度统计表表格数据
+     *
+     * @param importUtil
+     * @return List<BudgetStats> 导入表格数据
+     */
+    public static List<ProgressStats> getProgressUtil(ImportUtil importUtil) throws ParseException {
+        int lastRow = importUtil.getLastDataRowNum();
+        List<ProgressStats> list = new ArrayList<ProgressStats>();
+        ProgressStats progressStats = null;
+
+        for (int i = 3; i <= lastRow; i++) {
+            progressStats = new ProgressStats();
+            Row row = importUtil.getRow(i);
+
+            String reserveProjectName = (String) importUtil.getCellValue(row, 1);
+            //获取项目储备编号
+            String projectReserveId = (String) importUtil.getCellValue(row, 0);
+            if (StringUtils.isNotBlank(reserveProjectName)) {
+                if (StringUtils.isNotBlank(projectReserveId)) {
+                    progressStats.setProjectReserveId((String) importUtil.getCellValue(row, 0));//项目储备编号
+                    progressStats.setInspectDepartmentReview((String) importUtil.getCellValue(row, 9));//是否通过运检部评审
+                    progressStats.setInspectDepartmentReviewTime((String) importUtil.getCellValue(row, 10));//通过运检部评审时间
+                    progressStats.setReleaseReserveTime((String) importUtil.getCellValue(row, 11));//运检部下达储备时间
+                    progressStats.setOnSiteConfess((String) importUtil.getCellValue(row, 15));//是否进行现场交底
+                    progressStats.setConfessCompleteTime((String) importUtil.getCellValue(row, 16));//交底完成时间
+                    progressStats.setProvincialCompanyReview((String) importUtil.getCellValue(row, 30));//省公司评审-是否参加省公司评审
+                    progressStats.setProvincialCompanyReviewBatch((String) importUtil.getCellValue(row, 31));//省公司评审-省公司评审批次
+                    progressStats.setPassProvincialCompanyReview((String) importUtil.getCellValue(row, 32));//省公司评审-是否通过省公司评审
+                    progressStats.setCauseAnalysis((String) importUtil.getCellValue(row, 33));//省公司评审-未通过原因分析
+                    progressStats.setDesignChange((String) importUtil.getCellValue(row, 34));//省公司评审-是否需设计变更
+                    progressStats.setDrawingReview((String) importUtil.getCellValue(row, 35));//图纸联合审查-是否进行图纸审查
+                    progressStats.setReviewDate((String) importUtil.getCellValue(row, 36));//图纸联合审查-审图日期
+                    progressStats.setPassDrawingReview((String) importUtil.getCellValue(row, 37));//图纸联合审查-是否通过图纸审查
+                    progressStats.setReviewComment((String) importUtil.getCellValue(row, 38));//图纸联合审查-未通过审图意见
+                    progressStats.setApprovedDate((String) importUtil.getCellValue(row, 39));//图纸联合审查-通过审核日期
+                    progressStats.setJointReviewDesignChange((String) importUtil.getCellValue(row, 40));//图纸联合审查-是否需设计变更
+                    progressStats.setFormalDrawing((String) importUtil.getCellValue(row, 43));//是否打印正式图纸
+                    progressStats.setDrawingDate((String) importUtil.getCellValue(row, 44));//通知出图日期
+                    progressStats.setTransferProjectCenterDate((String) importUtil.getCellValue(row, 45));//正式图纸移交项目中心日期
+                    progressStats.setTransferToConstructionUnitDate((String) importUtil.getCellValue(row, 46));//正式图纸移交施工单位日期
+
+                    list.add(progressStats);
+                }
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 获取储备项目建设规模统计表表格数据
+     *
+     * @param importUtil
+     * @return List<BudgetStats> 导入表格数据
+     */
+    public static List<ConstructeScale> getConstructeUtil(ImportUtil importUtil) throws ParseException {
+        int lastRow = importUtil.getLastDataRowNum();
+        List<ConstructeScale> list = new ArrayList<ConstructeScale>();
+        ConstructeScale constructeScale = null;
+
+        for (int i = 3; i <= lastRow; i++) {
+            constructeScale = new ConstructeScale();
+            Row row = importUtil.getRow(i);
+
+            String reserveProjectName = (String) importUtil.getCellValue(row, 7);
+            //获取项目储备编号
+            String projectReserveId = (String) importUtil.getCellValue(row, 6);
+            if (StringUtils.isNotBlank(reserveProjectName)) {
+                if (StringUtils.isNotBlank(projectReserveId)) {
+                    constructeScale.setProjectReserveId((String) importUtil.getCellValue(row, 6));//项目储备编号
+                    constructeScale.setConstructePurpose((String) importUtil.getCellValue(row, 9));//建设目的
+                    constructeScale.setFactoryPrefab((String) importUtil.getCellValue(row, 32));//土建工厂化预制
+                    constructeScale.setAncillaryFacility((String) importUtil.getCellValue(row, 33));//附属设施
+                    constructeScale.setConstructionWorkMethod((String) importUtil.getCellValue(row, 34));//施工作业方式
+                    constructeScale.setWorkWithoutInterruption((String) importUtil.getCellValue(row, 35));//不停电作业
+                    String number = (String)importUtil.getCellValue(row, 36) == ""? "0" : (String)importUtil.getCellValue(row, 36);
+                    int num = Integer.parseInt(number);
+                    constructeScale.setPowerFailureHouseNum(num);//停电时户数
+                    constructeScale.setPeakSummerProject((String) importUtil.getCellValue(row, 38));//是否迎峰度夏项目
+                    constructeScale.setProjectReview((String) importUtil.getCellValue(row, 39));//通过第几批项目评审
+
+                    list.add(constructeScale);
+                }
+            }
+        }
+        return list;
+    }
+}

+ 238 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/BudgetStatsController.java

@@ -0,0 +1,238 @@
+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.SummaryStatisticService;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.BudgetStats;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service.BudgetStatsService;
+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 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.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 储备项目概预算统计表
+ * @author: 王强
+ * @create: 2022-08-16 13:47
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/cg/reservemanagementcenter/budgetStats")
+public class BudgetStatsController extends BaseController {
+
+    @Autowired
+    private BudgetStatsService statsService;
+
+    @Autowired
+    private SummaryStatisticService statisticService;
+
+    @ModelAttribute
+    public BudgetStats get(@RequestParam(required = false) String id) {
+        BudgetStats entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = statsService.get(id);
+        }
+        if (entity == null) {
+            entity = new BudgetStats();
+        }
+        return entity;
+    }
+
+    /**
+     * 储备项目概预算列表页面
+     * @param budgetStats
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("cg:reservemanagementcenter:budgetStats:list")
+    @RequestMapping(value = "budgetList")
+    public String budgetList(BudgetStats budgetStats, Model model) {
+        model.addAttribute("budgetStats", budgetStats);
+        return "modules/cg/statisticalTable/budgetStats/budgetStats";
+    }
+
+    /**
+     * 储备项目概预算数据列表
+     * @param budgetStats
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:budgetStats:list")
+    @RequestMapping(value = "list")
+    public Map<String, Object> basicData(BudgetStats budgetStats, HttpServletRequest request, HttpServletResponse response, Model model) {
+
+        Page<BudgetStats> page = statsService.findPage(new Page<BudgetStats>(request, response), budgetStats);
+        List<BudgetStats> list = page.getList();
+        List<BudgetStats> statsList = new ArrayList<>();
+        BudgetStats stats = null;
+        for (int i=0;i<list.size();i++){
+            stats = list.get(i);
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = statsService.getByProjectReserveId(stats.getProjectReserveId());
+            //根据procInsId查出历史流程名称和时间
+            List<History> histories = statsService.getHistoryByExecuteId(procInsId);
+            //当size>0时待办有历史流程,
+            if (histories.size()>0){
+                //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+                String name = statsService.getByExecuteId(procInsId);
+                //设置项目进度
+                stats.setReserveProgress(name);
+
+                //设置是否完成概算修改
+                //第一种情况,修改中 先在历史表中查出技经人员审预算相关的信息
+                List<History> his = statsService.getHistoryByActName(procInsId,"技经人员审预算");
+                if (his.size()>0){
+                    //根据他的完成时间来找下一个节点的信息
+                    String strTime = his.get(0).getEndTime();
+                    History history = statsService.getHistoryByTime(strTime,procInsId);
+                    if (history == null){
+                        stats.setBudgetRevision("无需修改");
+                        stats.setCompleteTime(strTime);
+                    }else {
+                        //修改中的状态
+                        if (history.getName().equals("设计单位查看错误原因")){
+                            List<History> historyByActName = statsService.getHistoryByActName(procInsId,"设计单位查看错误原因");
+                            String endTime = historyByActName.get(0).getEndTime();
+                            if (endTime == null){
+                                stats.setBudgetRevision("修改中");
+                                stats.setCompleteTime(strTime);
+                            }else {
+                                //未完成状态
+                                stats.setBudgetRevision("未完成");
+                                stats.setCompleteTime(strTime);
+                            }
+                        }
+                    }
+
+                }
+            }else {
+                stats.setReserveProgress("");
+            }
+            statsList.add(stats);
+        }
+        page.setList(statsList);
+        return getBootstrapData(page);
+    }
+
+    /**
+     *  导入Excel数据
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:budgetStats: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<BudgetStats> budgetStats = ExcelImportUtil.getBudgetUtil(importUtil);
+            statsService.insertList(budgetStats);
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入储备项目概预算信息失败!失败信息:" + e.getMessage());
+        }
+        return j;
+    }
+
+    /**
+     * 删除表单
+     */
+    @ResponseBody
+    @RequiresPermissions(value={"cg:reservemanagementcenter:budgetStats: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.delete(statsService.get(id));
+        }
+        j.setMsg("删除储备项目概预算信息成功");
+        return j;
+    }
+
+    //导出excel
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:budgetStats:export")
+    @RequestMapping(value = "export")
+    public void exportExcel(BudgetStats budgetStats, HttpServletRequest request, HttpServletResponse response) {
+        List<BudgetStats> list = statsService.exportFindList(budgetStats);
+
+        List<BudgetStats> statsList = new ArrayList<>();
+        BudgetStats stats = null;
+        for (int i=0;i<list.size();i++){
+            stats = list.get(i);
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = statsService.getByProjectReserveId(stats.getProjectReserveId());
+            //根据procInsId查出历史流程名称和时间
+            List<History> histories = statsService.getHistoryByExecuteId(procInsId);
+            //当size>0时待办有历史流程,
+            if (histories.size()>0){
+                //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+                String name = statsService.getByExecuteId(procInsId);
+                //设置项目进度
+                stats.setReserveProgress(name);
+                //设置是否完成概算修改
+                //第一种情况,修改中 先在历史表中查出技经人员审预算相关的信息
+                List<History> his = statsService.getHistoryByActName(procInsId,"技经人员审预算");
+                if (his.size()>0){
+                    //根据他的完成时间来找下一个节点的信息
+                    String strTime = his.get(0).getEndTime();
+                    History history = statsService.getHistoryByTime(strTime,procInsId);
+                    if (history == null){
+                        stats.setBudgetRevision("无需修改");
+                        stats.setCompleteTime(strTime);
+                    }else {
+                        //修改中的状态
+                        if (history.getName().equals("设计单位查看错误原因")){
+                            List<History> historyByActName = statsService.getHistoryByActName(procInsId,"设计单位查看错误原因");
+                            String endTime = historyByActName.get(0).getEndTime();
+                            if (endTime == null){
+                                stats.setBudgetRevision("修改中");
+                                stats.setCompleteTime(strTime);
+                            }else {
+                                //未完成状态
+                                stats.setBudgetRevision("未完成");
+                                stats.setCompleteTime(strTime);
+                            }
+                        }
+                    }
+
+                }
+            }else {
+                stats.setReserveProgress("");
+            }
+            statsList.add(stats);
+        }
+        //生成序列号
+        int i = 1;
+        for (BudgetStats s : statsList) {
+            s.setId(String.valueOf(i));
+            i++;
+        }
+
+        ExcelExportUtil util = ExcelExportUtil.getOne();
+        XSSFWorkbook workbook = util.getWorkbook("budgetStats");
+        util.exportBasic(response,workbook,statsList);
+    }
+}

+ 481 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/ConstructeScaleController.java

@@ -0,0 +1,481 @@
+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.statisticalTable.entity.MaterialData;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.StandardDetail;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.ConstructeScale;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service.ConstructeScaleService;
+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 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.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 储备项目建设规模统计表
+ * @author: 王强
+ * @create: 2022-08-19 14:17
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/cg/reservemanagementcenter/constructeScale")
+public class ConstructeScaleController extends BaseController {
+
+    @Autowired
+    private ConstructeScaleService scaleService;
+
+    @ModelAttribute
+    public ConstructeScale get(@RequestParam(required = false) String id) {
+        ConstructeScale entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = scaleService.get(id);
+        }
+        if (entity == null) {
+            entity = new ConstructeScale();
+        }
+        return entity;
+    }
+
+    /**
+     * 删除表单
+     */
+    @ResponseBody
+    @RequiresPermissions(value={"cg:reservemanagementcenter:constructeScale:del"},logical= Logical.OR)
+    @RequestMapping(value = "deleteAll")
+    public AjaxJson delete(String ids){
+        AjaxJson j = new AjaxJson();
+        String idArray[] =ids.split(",");
+        for(String id : idArray){
+            scaleService.delete(scaleService.get(id));
+        }
+        j.setMsg("删除储备进度信息成功");
+        return j;
+    }
+
+    /**
+     * 储备项目建设规模统计列表页面
+     * @param constructeScale
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("cg:reservemanagementcenter:constructeScale:list")
+    @RequestMapping(value = "scaleList")
+    public String scaleList(ConstructeScale constructeScale, Model model) {
+        model.addAttribute("constructeScale", constructeScale);
+        return "modules/cg/statisticalTable/constructeScale/constructeScale";
+    }
+
+    /**
+     *储备项目建设规模统计数据列表
+     * @param constructeScale
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:constructeScale:list")
+    @RequestMapping(value = "list")
+    public Map<String, Object> basicData(ConstructeScale constructeScale, HttpServletRequest request, HttpServletResponse response, Model model) {
+
+        Page<ConstructeScale> page = scaleService.findPage(new Page<ConstructeScale>(request, response), constructeScale);
+        //获取到建设规模统计数据
+        List<ConstructeScale> scaleList = page.getList();
+        //创建一个新的list来接收处理过后的数据
+        List<ConstructeScale> list = new ArrayList<>();
+        ConstructeScale scale = null;
+        //赋值操作
+        for (int i=0;i<scaleList.size();i++){
+            scale = scaleList.get(i);
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = scaleService.getByProjectReserveId(scale.getProjectReserveId());
+            //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+            String name = scaleService.getByExecuteId(procInsId);
+            //根据procInsId查出历史流程名称和时间
+            List<History> histories = scaleService.getHistoryByExecuteId(procInsId);
+            //当size>0时待办有历史流程,
+            if (histories.size()>0){
+                //设置项目进度
+                scale.setReserveProgress(name);
+                scale.setCityCompany("国网镇江供电公司");
+                //根据相关规则设置物料信息
+                //根物料规范的数据比对,判断在线开甲供材属于哪一类型的数据
+                //先从物料详细数据中查出规范数据
+                List<StandardDetail> detailList = scaleService.getStandardDetail();
+                //在从在线开甲供材的表中查出所有数据
+                List<MaterialData> materialDataList = scaleService.getMaterialData(scale.getProjectName());
+                //进行对比
+                if (materialDataList.size()>0){
+                    double kgSum = 0;
+                    double xlSum = 0;
+                    double dlSum = 0;
+                    double fzxSum = 0;
+                    double hwxSum = 0;
+                    double hwsSum = 0;
+                    double zskgSum = 0;
+                    double pdSum = 0;
+                    double pdsSum = 0;
+                    double xbSum = 0;
+                    double xbkvaSum = 0;
+                    double pdkvaSum = 0;
+                    double pdkSum = 0;
+                    double dyxlSum = 0;
+                    double dydlSum = 0;
+                    double dlfzxSum = 0;
+                    double dlfzgSum = 0;
+                    double pdftuSum = 0;
+                    double pddtuSum = 0;
+                    double glSum = 0;
+                    double dltdSum = 0;
+                    String num = "";
+                    for (int j=0;j<materialDataList.size();j++){
+
+                        for (int k=0;k<detailList.size();k++){
+
+                            //通过物料编码和物料描述来进行对比
+                            if (detailList.get(k).getMaterialCode().equals(materialDataList.get(j).getMaterialCode())
+                                    && detailList.get(k).getMaterialDescription().equals(materialDataList.get(j).getMaterialName())){
+                                if (detailList.get(k).getProjectCategory().equals("开关柜")){
+                                    kgSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    scale.setSwitchCabinet(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("架空线路")){
+                                    xlSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                   num = xlSum + "";
+                                    scale.setOverheadLine(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("电力电缆")){
+                                    dlSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dlSum + "";
+                                    scale.setPowerCable(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("电缆分支箱")){
+                                    fzxSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = fzxSum + "";
+                                    scale.setCableBranchBox(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("户外环网箱")){
+                                    hwxSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = hwxSum + "";
+                                    scale.setOutdoorRingCage(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("环网箱/室")){
+                                    hwsSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = hwsSum + "";
+                                    scale.setRingRoom(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("柱上开关")){
+                                    zskgSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = zskgSum + "";
+                                    scale.setOnColumnSwitch(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电室kva")){
+                                    pdSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pdSum + "";
+                                    scale.setSwitchRoomKVA(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电室")){
+                                    pdsSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pdsSum + "";
+                                    scale.setSwitchRoom(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("箱变kva")){
+                                    xbkvaSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = xbkvaSum + "";
+                                    scale.setBoxChangeKVA(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("箱变")){
+                                    xbSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = xbSum + "";
+                                    scale.setBoxChange(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电变压器kva")){
+                                    pdkvaSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pdkvaSum + "";
+                                    scale.setDistributionTransformerKVA(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电变压器")){
+                                    pdkSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pdkSum + "";
+                                    scale.setDistributionTransformer(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("低压线路")){
+                                    dyxlSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dyxlSum + "";
+                                    scale.setLowVoltageLine(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("低压电缆")){
+                                    dydlSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dydlSum + "";
+                                    scale.setLowVoltageCable(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("低压电缆分支箱")){
+                                    dlfzxSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dlfzxSum + "";
+                                    scale.setLowVoltageCableBox(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("低压配电箱(柜)")){
+                                    dlfzgSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dlfzgSum + "";
+                                    scale.setLowVoltageCabinet(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电自动化终端(FTU)")){
+                                    pdftuSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pdftuSum + "";
+                                    scale.setDistributeAutoMateTerminalFTU(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电自动化终端(DTU)")){
+                                    pddtuSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pddtuSum + "";
+                                    scale.setDistributeAutoMateTerminalDTU(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("光缆")){
+                                    glSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = glSum + "";
+                                    scale.setOpticalCable(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("电缆通道")){
+                                    dltdSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dltdSum + "";
+                                    scale.setCablePassage(num);
+                                }
+                            }
+                        }
+                    }
+                }
+            }else {
+                //设置项目进度
+                scale.setReserveProgress("");
+            }
+            list.add(scale);
+        }
+        System.out.println("list:" + list);
+        page.setList(list);
+        return getBootstrapData(page);
+    }
+
+    /**
+     *  导入Excel数据
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:constructeScale: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<ConstructeScale> budgetStats = ExcelImportUtil.getConstructeUtil(importUtil);
+            scaleService.insertList(budgetStats);
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入储备进度信息失败!失败信息:" + e.getMessage());
+        }
+        return j;
+    }
+
+    //导出excel
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:constructeScale:export")
+    @RequestMapping(value = "export")
+    public void exportExcel(ConstructeScale constructeScale, HttpServletRequest request, HttpServletResponse response) {
+        List<ConstructeScale> scaleList = scaleService.exportFindList(constructeScale);
+
+        //创建一个新的list来接收处理过后的数据
+        List<ConstructeScale> list = new ArrayList<>();
+        ConstructeScale scale = null;
+        //赋值操作
+        for (int i=0;i<scaleList.size();i++){
+            scale = scaleList.get(i);
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = scaleService.getByProjectReserveId(scale.getProjectReserveId());
+            //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+            String name = scaleService.getByExecuteId(procInsId);
+            //根据procInsId查出历史流程名称和时间
+            List<History> histories = scaleService.getHistoryByExecuteId(procInsId);
+            //当size>0时待办有历史流程,
+            if (histories.size()>0){
+                //设置项目进度
+                scale.setReserveProgress(name);
+                //根据相关规则设置物料信息
+                //根物料规范的数据比对,判断在线开甲供材属于哪一类型的数据
+                //先从物料详细数据中查出规范数据
+                List<StandardDetail> detailList = scaleService.getStandardDetail();
+                //在从在线开甲供材的表中查出所有数据
+                List<MaterialData> materialDataList = scaleService.getMaterialData(scale.getProjectName());
+                //进行对比
+                if (materialDataList.size()>0){
+                    double kgSum = 0;
+                    double xlSum = 0;
+                    double dlSum = 0;
+                    double fzxSum = 0;
+                    double hwxSum = 0;
+                    double hwsSum = 0;
+                    double zskgSum = 0;
+                    double pdSum = 0;
+                    double pdsSum = 0;
+                    double xbSum = 0;
+                    double xbkvaSum = 0;
+                    double pdkvaSum = 0;
+                    double pdkSum = 0;
+                    double dyxlSum = 0;
+                    double dydlSum = 0;
+                    double dlfzxSum = 0;
+                    double dlfzgSum = 0;
+                    double pdftuSum = 0;
+                    double pddtuSum = 0;
+                    double glSum = 0;
+                    double dltdSum = 0;
+                    String num = "";
+                    for (int j=0;j<materialDataList.size();j++){
+
+                        for (int k=0;k<detailList.size();k++){
+
+                            //通过物料编码和物料描述来进行对比
+                            if (detailList.get(k).getMaterialCode().equals(materialDataList.get(j).getMaterialCode())
+                                    && detailList.get(k).getMaterialDescription().equals(materialDataList.get(j).getMaterialName())){
+                                if (detailList.get(k).getProjectCategory().equals("开关柜")){
+                                    kgSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    scale.setSwitchCabinet(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("架空线路")){
+                                    xlSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = xlSum + "";
+                                    scale.setOverheadLine(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("电力电缆")){
+                                    dlSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dlSum + "";
+                                    scale.setPowerCable(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("电缆分支箱")){
+                                    fzxSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = fzxSum + "";
+                                    scale.setCableBranchBox(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("户外环网箱")){
+                                    hwxSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = hwxSum + "";
+                                    scale.setOutdoorRingCage(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("环网箱/室")){
+                                    hwsSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = hwsSum + "";
+                                    scale.setRingRoom(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("柱上开关")){
+                                    zskgSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = zskgSum + "";
+                                    scale.setOnColumnSwitch(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电室kva")){
+                                    pdSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pdSum + "";
+                                    scale.setSwitchRoomKVA(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电室")){
+                                    pdsSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pdsSum + "";
+                                    scale.setSwitchRoom(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("箱变kva")){
+                                    xbkvaSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = xbkvaSum + "";
+                                    scale.setBoxChangeKVA(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("箱变")){
+                                    xbSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = xbSum + "";
+                                    scale.setBoxChange(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电变压器kva")){
+                                    pdkvaSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pdkvaSum + "";
+                                    scale.setDistributionTransformerKVA(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电变压器")){
+                                    pdkSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pdkSum + "";
+                                    scale.setDistributionTransformer(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("低压线路")){
+                                    dyxlSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dyxlSum + "";
+                                    scale.setLowVoltageLine(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("低压电缆")){
+                                    dydlSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dydlSum + "";
+                                    scale.setLowVoltageCable(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("低压电缆分支箱")){
+                                    dlfzxSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dlfzxSum + "";
+                                    scale.setLowVoltageCableBox(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("低压配电箱(柜)")){
+                                    dlfzgSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dlfzgSum + "";
+                                    scale.setLowVoltageCabinet(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电自动化终端(FTU)")){
+                                    pdftuSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pdftuSum + "";
+                                    scale.setDistributeAutoMateTerminalFTU(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("配电自动化终端(DTU)")){
+                                    pddtuSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = pddtuSum + "";
+                                    scale.setDistributeAutoMateTerminalDTU(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("光缆")){
+                                    glSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = glSum + "";
+                                    scale.setOpticalCable(num);
+                                }
+                                if (detailList.get(k).getProjectCategory().equals("电缆通道")){
+                                    dltdSum += Double.parseDouble(materialDataList.get(j).getTotalCount());
+                                    num = dltdSum + "";
+                                    scale.setCablePassage(num);
+                                }
+                            }
+                        }
+                    }
+                }
+            }else {
+                //设置项目进度
+                scale.setReserveProgress("");
+            }
+            list.add(scale);
+        }
+        //生成序列号
+        int i = 1;
+        for (ConstructeScale s : list) {
+            s.setId(String.valueOf(i));
+            i++;
+        }
+
+        ExcelExportUtil util = ExcelExportUtil.getOne();
+        XSSFWorkbook workbook = util.getWorkbook("constructeScale");
+        util.exportConstructe(response,workbook,list);
+    }
+
+}

+ 114 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/DemoliteListController.java

@@ -0,0 +1,114 @@
+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.statisticalTable.entity.DemoliteList;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service.DemoliteListService;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.util.ExcelExportUtil;
+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 javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 储备项目拆旧物资汇总表
+ * @author: 王强
+ * @create: 2022-08-23 08:52
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/cg/reservemanagementcenter/demoliteList")
+public class DemoliteListController extends BaseController {
+
+    @Autowired
+    private DemoliteListService listService;
+
+    @ModelAttribute
+    public DemoliteList get(@RequestParam(required = false) String id) {
+        DemoliteList entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = listService.get(id);
+        }
+        if (entity == null) {
+            entity = new DemoliteList();
+        }
+        return entity;
+    }
+
+    /**
+     * 储备项目拆旧物资汇总表页面
+     * @param demoliteList
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("cg:reservemanagementcenter:demoliteList:list")
+    @RequestMapping(value = "demoliteList")
+    public String demoliteList(DemoliteList demoliteList, Model model) {
+        model.addAttribute("demoliteList", demoliteList);
+        return "modules/cg/statisticalTable/demoliteList/demoliteList";
+    }
+
+    /**
+     * 储备项目拆旧物资汇总列表
+     * @param demoliteList
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:demoliteList:list")
+    @RequestMapping(value = "list")
+    public Map<String, Object> basicData(DemoliteList demoliteList, HttpServletRequest request, HttpServletResponse response, Model model) {
+
+        Page<DemoliteList> page = listService.findPage(new Page<DemoliteList>(request, response), demoliteList);
+        return getBootstrapData(page);
+    }
+
+    /**
+     * 删除表单
+     */
+    @ResponseBody
+    @RequiresPermissions(value={"cg:reservemanagementcenter:demoliteList:del"},logical= Logical.OR)
+    @RequestMapping(value = "deleteAll")
+    public AjaxJson delete(String ids){
+        AjaxJson j = new AjaxJson();
+        String idArray[] =ids.split(",");
+        for(String id : idArray){
+            listService.delete(listService.get(id));
+        }
+        j.setMsg("删除储备项目拆旧物资汇总列表信息成功");
+        return j;
+    }
+
+    //导出excel
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:demoliteList:export")
+    @RequestMapping(value = "export")
+    public void exportExcel(DemoliteList demoliteList, HttpServletRequest request, HttpServletResponse response) {
+        List<DemoliteList> list = listService.exportFindList(demoliteList);
+
+        //生成序列号
+        int i = 1;
+        for (DemoliteList s : list) {
+            s.setId(String.valueOf(i));
+            i++;
+        }
+
+        ExcelExportUtil util = ExcelExportUtil.getOne();
+        XSSFWorkbook workbook = util.getWorkbook("demoliteList");
+        util.exportDemoliteList(response,workbook,list);
+    }
+}

+ 215 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/EnginnerQueryController.java

@@ -0,0 +1,215 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.web;
+
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.EnginnerQuery;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service.EnginnerQueryService;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.util.ExcelExportUtil;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 立杆和土建工程量统计
+ * @author: 王强
+ * @create: 2022-08-22 15:19
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/cg/reservemanagementcenter/enginnerQuery")
+public class EnginnerQueryController extends BaseController {
+
+    @Autowired
+    private EnginnerQueryService queryService;
+
+    @ModelAttribute
+    public EnginnerQuery get(@RequestParam(required = false) String id) {
+        EnginnerQuery entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = queryService.get(id);
+        }
+        if (entity == null) {
+            entity = new EnginnerQuery();
+        }
+        return entity;
+    }
+
+    /**
+     * 立杆和土建工程量统计列表页面
+     * @param enginnerQuery
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("cg:reservemanagementcenter:enginnerQuery:list")
+    @RequestMapping(value = "queryList")
+    public String budgetList(EnginnerQuery enginnerQuery, Model model) {
+        model.addAttribute("enginnerQuery", enginnerQuery);
+        return "modules/cg/statisticalTable/enginnerQuery/enginnerQuery";
+    }
+
+    /**
+     * 立杆和土建工程量统计数据列表
+     * @param enginnerQuery
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:enginnerQuery:list")
+    @RequestMapping(value = "list")
+    public Map<String, Object> basicData(EnginnerQuery enginnerQuery, HttpServletRequest request, HttpServletResponse response, Model model) {
+
+        Page<EnginnerQuery> page = queryService.findPage(new Page<EnginnerQuery>(request, response), enginnerQuery);
+        List<EnginnerQuery> list = page.getList();
+        List<EnginnerQuery> queryList = new ArrayList<>();
+        EnginnerQuery query = null;
+        for (int i=0;i<list.size();i++){
+            query = list.get(i);
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = queryService.getByProjectReserveId(query.getProjectReserveId());
+            //根据procInsId查出历史流程名称和时间
+            List<History> histories = queryService.getHistoryByExecuteId(procInsId);
+            //当size>0时待办有历史流程,
+            if (histories.size()>0){
+                //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+                String name = queryService.getByExecuteId(procInsId);
+                query.setReserveProgress(name);
+            }
+            //设置立杆信息数据
+            //根据物料编码查询物料总量
+            Double sum1 = queryService.getData("500033660","","");
+            Double sum2 = queryService.getData("500013972","","");
+            Double sum3 = queryService.getData("500013974","","");
+            Double sum4 = queryService.getData("500033743","","");
+            Double sum5 = queryService.getData("乙供","等径水泥杆,300mm,9m,18φ16,下","");
+            Double sum6 = queryService.getData("500124726","","");
+            query.setPole190X10(sum1 == null ? "" : sum1 + "");
+            query.setPole190X12(sum2 == null ? "" : sum2 + "");
+            query.setPole190X15(sum3 == null ? "" : sum3 + "");
+            query.setPole230X15("");
+            query.setPole230X18(sum4 == null ? "" : sum4 + "");
+            query.setPole300X9(sum5 == null ? "" : sum5 + "");
+            query.setPole350X15(sum6 == null ? "" : sum6 + "");
+            //设置钢管杆信息
+            Double guan1 = queryService.getData("","配农网用,整套杆,GNH31-13-B","每基6.18吨(含基础+地脚螺栓)");
+            Double guan2 = queryService.getData("","配农网用,整套杆,GNH31-13-B","每基2.78吨(不含基础,含地脚螺栓)");
+            Double guan3 = queryService.getData("","配农网用,整套杆,GNH31-13-D","每基6.42吨(含基础+地脚螺栓)");
+            Double guan4 = queryService.getData("","配农网用,整套杆,GNH31-13-D","每基3.02吨(不含基础,含地脚螺栓)");
+            Double guan5 = queryService.getData("","配农网用,整套杆,GNH35-13-B","每基8.71吨(含基础+地脚螺栓)");
+            Double guan6 = queryService.getData("","配农网用,整套杆,GNH35-13-B","每基4.01吨(不含基础,含地脚螺栓)");
+            Double guan7 = queryService.getData("","配农网用,整套杆,GNH35-13-E","每基8.1吨(含基础+地脚螺栓)");
+            Double guan8 = queryService.getData("","配农网用,整套杆,GNH35-13-E","每基4.31吨(不含基础,含地脚螺栓)");
+            Double guan9 = queryService.getData("","配农网用,整套杆,GNH39-13-B","每基11.24吨(含基础+地脚螺栓)");
+            Double guan10 = queryService.getData("","配农网用,整套杆,GNH39-13-B","每基5.8吨(不含基础,含地脚螺栓)");
+            query.setSteelPipeGNH31Contains(guan1 == null ? "" : guan1 + "");
+            query.setSteelPipeGNH31NoContains(guan2 == null ? "" : guan2 + "");
+            query.setSteelPipeGNH3113DContains(guan3 == null ? "" : guan3 + "");
+            query.setSteelPipeGNH3113DNoContains(guan4 == null ? "" : guan4 + "");
+            query.setSteelPipeCNH35Contains(guan5 == null ? "" : guan5 + "");
+            query.setSteelPipeCNH35NoContains(guan6 == null ? "" : guan6 + "");
+            query.setSteelPipeCNH3513EContains(guan7 == null ? "" : guan7 + "");
+            query.setSteelPipeCNH3513ENoContains(guan8 == null ? "" : guan8 + "");
+            query.setSteelPipeCNH39Contains(guan9 == null ? "" : guan9 + "");
+            query.setSteelPipeCNH39NoContains(guan10 == null ? "" : guan10 + "");
+            query.setPrefabricatedWell("");
+            query.setPrefabricatedBase("");
+            query.setPrefabricatedPackage("");
+
+
+            queryList.add(query);
+        }
+        page.setList(queryList);
+        return getBootstrapData(page);
+    }
+
+    //导出excel
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:enginnerQuery:export")
+    @RequestMapping(value = "export")
+    public void exportExcel(EnginnerQuery enginnerQuery, HttpServletRequest request, HttpServletResponse response) {
+        List<EnginnerQuery> list = queryService.exportFindList(enginnerQuery);
+
+        List<EnginnerQuery> queryList = new ArrayList<>();
+        EnginnerQuery query = null;
+        for (int i=0;i<list.size();i++){
+            query = list.get(i);
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = queryService.getByProjectReserveId(query.getProjectReserveId());
+            //根据procInsId查出历史流程名称和时间
+            List<History> histories = queryService.getHistoryByExecuteId(procInsId);
+            //当size>0时待办有历史流程,
+            if (histories.size()>0){
+                //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+                String name = queryService.getByExecuteId(procInsId);
+                query.setReserveProgress(name);
+            }
+            //设置立杆信息数据
+            //根据物料编码查询物料总量
+            Double sum1 = queryService.getData("500033660","","");
+            Double sum2 = queryService.getData("500013972","","");
+            Double sum3 = queryService.getData("500013974","","");
+            Double sum4 = queryService.getData("500033743","","");
+            Double sum5 = queryService.getData("乙供","等径水泥杆,300mm,9m,18φ16,下","");
+            Double sum6 = queryService.getData("500124726","","");
+            query.setPole190X10(sum1 == null ? "" : sum1 + "");
+            query.setPole190X12(sum2 == null ? "" : sum2 + "");
+            query.setPole190X15(sum3 == null ? "" : sum3 + "");
+            query.setPole230X15("");
+            query.setPole230X18(sum4 == null ? "" : sum4 + "");
+            query.setPole300X9(sum5 == null ? "" : sum5 + "");
+            query.setPole350X15(sum6 == null ? "" : sum6 + "");
+            //设置钢管杆信息
+            Double guan1 = queryService.getData("","配农网用,整套杆,GNH31-13-B","每基6.18吨(含基础+地脚螺栓)");
+            Double guan2 = queryService.getData("","配农网用,整套杆,GNH31-13-B","每基2.78吨(不含基础,含地脚螺栓)");
+            Double guan3 = queryService.getData("","配农网用,整套杆,GNH31-13-D","每基6.42吨(含基础+地脚螺栓)");
+            Double guan4 = queryService.getData("","配农网用,整套杆,GNH31-13-D","每基3.02吨(不含基础,含地脚螺栓)");
+            Double guan5 = queryService.getData("","配农网用,整套杆,GNH35-13-B","每基8.71吨(含基础+地脚螺栓)");
+            Double guan6 = queryService.getData("","配农网用,整套杆,GNH35-13-B","每基4.01吨(不含基础,含地脚螺栓)");
+            Double guan7 = queryService.getData("","配农网用,整套杆,GNH35-13-E","每基8.1吨(含基础+地脚螺栓)");
+            Double guan8 = queryService.getData("","配农网用,整套杆,GNH35-13-E","每基4.31吨(不含基础,含地脚螺栓)");
+            Double guan9 = queryService.getData("","配农网用,整套杆,GNH39-13-B","每基11.24吨(含基础+地脚螺栓)");
+            Double guan10 = queryService.getData("","配农网用,整套杆,GNH39-13-B","每基5.8吨(不含基础,含地脚螺栓)");
+            query.setSteelPipeGNH31Contains(guan1 == null ? "" : guan1 + "");
+            query.setSteelPipeGNH31NoContains(guan2 == null ? "" : guan2 + "");
+            query.setSteelPipeGNH3113DContains(guan3 == null ? "" : guan3 + "");
+            query.setSteelPipeGNH3113DNoContains(guan4 == null ? "" : guan4 + "");
+            query.setSteelPipeCNH35Contains(guan5 == null ? "" : guan5 + "");
+            query.setSteelPipeCNH35NoContains(guan6 == null ? "" : guan6 + "");
+            query.setSteelPipeCNH3513EContains(guan7 == null ? "" : guan7 + "");
+            query.setSteelPipeCNH3513ENoContains(guan8 == null ? "" : guan8 + "");
+            query.setSteelPipeCNH39Contains(guan9 == null ? "" : guan9 + "");
+            query.setSteelPipeCNH39NoContains(guan10 == null ? "" : guan10 + "");
+            query.setPrefabricatedWell("");
+            query.setPrefabricatedBase("");
+            query.setPrefabricatedPackage("");
+
+
+            queryList.add(query);
+        }
+
+        //生成序列号
+        int i = 1;
+        for (EnginnerQuery s : queryList) {
+            s.setId(String.valueOf(i));
+            i++;
+        }
+
+        ExcelExportUtil util = ExcelExportUtil.getOne();
+        XSSFWorkbook workbook = util.getWorkbook("enginnerQuery");
+        util.exportEnginnerQuery(response,workbook,queryList);
+    }
+}

+ 523 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/ProgressStatsController.java

@@ -0,0 +1,523 @@
+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.ReserveProcessProject;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveSummary;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ReserveProcessProjectService;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.SummaryStatisticService;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.*;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service.ProgressStatsService;
+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 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.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author: 王强
+ * @create: 2022-08-18 09:20
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/cg/reservemanagementcenter/progressStats")
+public class ProgressStatsController extends BaseController {
+
+    @Autowired
+    private ProgressStatsService statsService;
+
+    @Autowired
+    private SummaryStatisticService statisticService;
+
+    @Autowired
+    private ReserveProcessProjectService projectService;
+
+    @ModelAttribute
+    public ProgressStats get(@RequestParam(required = false) String id) {
+        ProgressStats entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = statsService.get(id);
+        }
+        if (entity == null) {
+            entity = new ProgressStats();
+        }
+        return entity;
+    }
+
+    /**
+     * 储备项目概预算列表页面
+     * @param progressStats
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("cg:reservemanagementcenter:progressStats:list")
+    @RequestMapping(value = "progressList")
+    public String progressList(ProgressStats progressStats, Model model) {
+        model.addAttribute("progressStats", progressStats);
+        return "modules/cg/statisticalTable/progressStats/progressStats";
+    }
+
+    /**
+     * 储备进度统计表数据列表
+     * @param progressStats
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:progressStats:list")
+    @RequestMapping(value = "list")
+    public Map<String, Object> basicData(ProgressStats progressStats, HttpServletRequest request, HttpServletResponse response, Model model) {
+
+        Page<ProgressStats> page = statsService.findPage(new Page<ProgressStats>(request, response), progressStats);
+        List<ProgressStats> list = page.getList();
+        List<ProgressStats> statsList = new ArrayList<>();
+        ProgressStats stats = null;
+        for (int i=0;i<list.size();i++){
+            //进行赋值操作
+            //查出proc_ins_id
+            stats = list.get(i);
+            String procInsId = statsService.getByProjectReserveId(stats.getProjectReserveId());
+            //设置是否纳入实施计划 及 初定实施批次 及是否纳入储备
+            ReserveSummary summary = new ReserveSummary();
+            summary.setProjectReserveId(stats.getProjectReserveId());
+            ReserveSummary reserveSummary = statisticService.queryByProjectReserveId(summary);
+            stats.setImplementPlan(reserveSummary.getImplementPlan());
+            stats.setInitialImplementBatch(reserveSummary.getInitialImplementBatch());
+            stats.setIncludeReserve(reserveSummary.getIncludeReserve());
+            //设置项目名称,储备项目类型,需求提出单位,储备批次,备注
+            ReserveProcessProject process = new ReserveProcessProject();
+            process.setProjectReserveId(stats.getProjectReserveId());
+            ReserveProcessProject project = projectService.queryByProjectReserveId(process);
+            stats.setProjectName(project.getProjectName());
+            stats.setRequirementType(project.getRequirementType());
+            stats.setDemandUnit(project.getDemandUnit());
+            stats.setReserveBatches(project.getReserveBatches());
+            stats.setBasicRemarks(project.getBasicRemarks());
+            //设置设计委托发出时间 及 是否发出设计委托
+            //查看历史流程节点信息
+            //根据procInsId查出历史流程名称和时间
+            List<History> histories = statsService.getHistoryByExecuteId(procInsId);
+            //没有流程的情况
+            if (histories.size()==0){
+                stats.setReserveProgress("");
+                //设置是否发出设计委托
+                stats.setDesignCommission("否");
+                stats.setDesignCommissionIssueTime(null);
+                //设置初设提交时间 及 是否完成初设
+                stats.setCompleteDesign("否");
+                stats.setSubmitTime(null);
+                //设置是否完成审图,是否通过图纸审核,未通过原因分析,通过审核日期,是否需设计变更
+                stats.setCompleteDraw("");
+                stats.setDrawAudit("");
+                stats.setReasonForFailure("");
+                stats.setPassAuditDate(null);
+                stats.setChangeDesign("");
+                //设置是否完成审核,是否通过专家审核,未通过原因分析,通过审核日期,是否需设计变更
+                stats.setCompleteReview("");
+                stats.setExpertReview("");
+                stats.setEstimateReasonForFailure("");
+                stats.setEstimatePassAuditDate(null);
+                stats.setEstimateChangeDesign("");
+                //设置图纸是否定稿,定稿日期
+                stats.setDrawingFinalize("");
+                stats.setFinalDate(null);
+            }else {
+                //根据procInsId查出当前流程名称
+                String name = statsService.getByExecuteId(procInsId);
+                if (name == null){
+                    stats.setReserveProgress("流程结束");
+                }else {
+                    //设置储备进度
+                    stats.setReserveProgress(name);
+                }
+                //有流程的情况
+                String startTime = histories.get(histories.size() - 1).getStartTime();
+                stats.setDesignCommission("是");
+                stats.setDesignCommissionIssueTime(startTime);
+                //设置初设提交时间 及 是否完成初设
+                //根据节点名称查找
+                List<History> history = statsService.getHistoryByActName(procInsId, "设计单位上传施工图纸");
+                String endTime = history.get(history.size() - 1).getEndTime();
+                if (endTime != null){
+                    stats.setCompleteDesign("是");
+                    stats.setSubmitTime(endTime);
+                }else {
+                    stats.setCompleteDesign("否");
+                    stats.setSubmitTime(null);
+                }
+                //设置是否完成审图,是否通过图纸审核,未通过原因分析,通过审核日期,是否需设计变更
+                //在历史表中根据节点名称查找
+                List<History> history02 = statsService.getHistoryByActName(procInsId, "联合审图配网项目经理审图");
+                if (history02.size()>0){
+                    String endTime02 = history02.get(0).getEndTime();
+                    //刚进入联合审图的情况
+                    if (endTime02 == null){
+                        stats.setCompleteDraw("");
+                        stats.setDrawAudit("");
+                        stats.setReasonForFailure("");
+                        stats.setPassAuditDate(null);
+                        stats.setChangeDesign("");
+                    }else {
+                        //根据时间来查找下一个节点的(联合审图下一步)信息
+                        History historyByTime = statsService.getHistoryByTime(endTime02, procInsId);
+                        HistoryComment comment = statsService.getCommentByTime(endTime02, procInsId);
+                        if (historyByTime != null){
+                            //通过的情况
+                            if (historyByTime.getName().equals("设计单位上传预算书")){
+                                stats.setCompleteDraw("是");
+                                stats.setDrawAudit("是");
+                                stats.setReasonForFailure("");
+                                stats.setPassAuditDate(endTime02);
+                                stats.setChangeDesign("否");
+                            }else if (historyByTime.getName().equals("设计单位上传施工图纸")){
+                                //不通过
+                                stats.setCompleteDraw("否");
+                                stats.setDrawAudit("不通过");
+                                stats.setReasonForFailure(comment.getMessage());
+                                stats.setPassAuditDate(endTime02);
+                                stats.setChangeDesign("是");
+                            }
+                        }else {
+                            //还有一种是  取消、待定的情况  流程结束
+                            stats.setCompleteDraw("否");
+                            //判断是哪条流程线
+                            HistoryVarinst byProcInstId = statsService.getByProcInstId(endTime02, procInsId);
+                            if (byProcInstId.getName().equals("no")){
+                                stats.setDrawAudit("取消");
+                                stats.setReasonForFailure(comment.getMessage());
+                                stats.setPassAuditDate(endTime02);
+                                stats.setChangeDesign("是");
+                            }else if (byProcInstId.getName().equals("rural")){
+                                stats.setDrawAudit("待定");
+                                stats.setReasonForFailure(comment.getMessage());
+                                stats.setPassAuditDate(endTime02);
+                                stats.setChangeDesign("是");
+                            }
+                        }
+                    }
+                }else {
+                    stats.setCompleteDraw("");
+                    stats.setDrawAudit("");
+                    stats.setReasonForFailure("");
+                    stats.setPassAuditDate(null);
+                    stats.setChangeDesign("");
+                }
+                //设置是否完成审核,是否通过专家审核,未通过原因分析,通过审核日期,是否需设计变更  概预算审核
+                //在历史表中根据节点名称查找是否就行了概预算审核
+                List<History> history03 = statsService.getHistoryByActName(procInsId, "技经人员审预算");
+                if (history03.size()>0){
+                    String endTime03 = history03.get(0).getEndTime();
+                    //刚进入审预算的情况
+                    if (endTime03 == null){
+                        stats.setCompleteReview("");
+                        stats.setExpertReview("");
+                        stats.setEstimateReasonForFailure("");
+                        stats.setEstimatePassAuditDate(null);
+                        stats.setEstimateChangeDesign("");
+                        //设置图纸是否定稿,定稿日期
+                        stats.setDrawingFinalize("");
+                        stats.setFinalDate(null);
+                    }else {
+                        //根据时间来查找下一个节点的信息(是通过还是驳回)
+                        History hi = statsService.getHistoryByTime(endTime03,procInsId);
+                        HistoryComment comment = statsService.getCommentByTime(endTime03, procInsId);
+                        //通过的情况
+                        if (hi == null){
+                            stats.setCompleteReview("是");
+                            stats.setExpertReview("是");
+                            stats.setEstimateReasonForFailure("");
+                            stats.setEstimatePassAuditDate(endTime03);
+                            stats.setEstimateChangeDesign("否");
+                            //设置图纸是否定稿,定稿日期
+                            stats.setDrawingFinalize("是");
+                            stats.setFinalDate(endTime03);
+                        }else {
+                            //驳回的情况
+                            stats.setCompleteReview("否");
+                            stats.setExpertReview("否");
+                            stats.setEstimateReasonForFailure(comment.getMessage());
+                            stats.setEstimatePassAuditDate(endTime03);
+                            stats.setEstimateChangeDesign("是");
+                            //设置图纸是否定稿,定稿日期
+                            stats.setDrawingFinalize("否");
+                            stats.setFinalDate("");
+                        }
+                    }
+                }else {
+                    stats.setCompleteReview("");
+                    stats.setExpertReview("");
+                    stats.setEstimateReasonForFailure("");
+                    stats.setEstimatePassAuditDate(null);
+                    stats.setEstimateChangeDesign("");
+                    //设置图纸是否定稿,定稿日期
+                    stats.setDrawingFinalize("");
+                    stats.setFinalDate(null);
+                }
+            }
+
+            statsList.add(stats);
+        }
+        page.setList(statsList);
+        System.out.println(list);
+        return getBootstrapData(page);
+    }
+
+    /**
+     * 删除表单
+     */
+    @ResponseBody
+    @RequiresPermissions(value={"cg:reservemanagementcenter:progressStats: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.delete(statsService.get(id));
+        }
+        j.setMsg("删除储备进度信息成功");
+        return j;
+    }
+
+    /**
+     *  导入Excel数据
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:progressStats: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<ProgressStats> budgetStats = ExcelImportUtil.getProgressUtil(importUtil);
+            statsService.insertList(budgetStats);
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入储备进度信息失败!失败信息:" + e.getMessage());
+        }
+        return j;
+    }
+
+    //导出excel
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:progressStats:export")
+    @RequestMapping(value = "export")
+    public void exportExcel(ProgressStats progressStats, HttpServletRequest request, HttpServletResponse response) {
+        List<ProgressStats> list = statsService.exportFindList(progressStats);
+
+        List<ProgressStats> statsList = new ArrayList<>();
+        ProgressStats stats = null;
+        for (int i=0;i<list.size();i++){
+            //进行赋值操作
+            //查出proc_ins_id
+            stats = list.get(i);
+            String procInsId = statsService.getByProjectReserveId(stats.getProjectReserveId());
+            //设置是否纳入实施计划 及 初定实施批次 及是否纳入储备
+            ReserveSummary summary = new ReserveSummary();
+            summary.setProjectReserveId(stats.getProjectReserveId());
+            ReserveSummary reserveSummary = statisticService.queryByProjectReserveId(summary);
+            stats.setImplementPlan(reserveSummary.getImplementPlan());
+            stats.setInitialImplementBatch(reserveSummary.getInitialImplementBatch());
+            stats.setIncludeReserve(reserveSummary.getIncludeReserve());
+            //设置项目名称,储备项目类型,需求提出单位,储备批次,备注
+            ReserveProcessProject process = new ReserveProcessProject();
+            process.setProjectReserveId(stats.getProjectReserveId());
+            ReserveProcessProject project = projectService.queryByProjectReserveId(process);
+            stats.setProjectName(project.getProjectName());
+            stats.setRequirementType(project.getRequirementType());
+            stats.setDemandUnit(project.getDemandUnit());
+            stats.setReserveBatches(project.getReserveBatches());
+            stats.setBasicRemarks(project.getBasicRemarks());
+            //设置设计委托发出时间 及 是否发出设计委托
+            //查看历史流程节点信息
+            //根据procInsId查出历史流程名称和时间
+            List<History> histories = statsService.getHistoryByExecuteId(procInsId);
+            //没有流程的情况
+            if (histories.size()==0){
+                //设置是否发出设计委托
+                stats.setDesignCommission("否");
+                stats.setDesignCommissionIssueTime(null);
+                //设置初设提交时间 及 是否完成初设
+                stats.setCompleteDesign("否");
+                stats.setSubmitTime(null);
+                //设置是否完成审图,是否通过图纸审核,未通过原因分析,通过审核日期,是否需设计变更
+                stats.setCompleteDraw("");
+                stats.setDrawAudit("");
+                stats.setReasonForFailure("");
+                stats.setPassAuditDate(null);
+                stats.setChangeDesign("");
+                //设置是否完成审核,是否通过专家审核,未通过原因分析,通过审核日期,是否需设计变更
+                stats.setCompleteReview("");
+                stats.setExpertReview("");
+                stats.setEstimateReasonForFailure("");
+                stats.setEstimatePassAuditDate(null);
+                stats.setEstimateChangeDesign("");
+                //设置图纸是否定稿,定稿日期
+                stats.setDrawingFinalize("");
+                stats.setFinalDate(null);
+            }else {
+                //根据procInsId查出当前流程名称
+                String name = statsService.getByExecuteId(procInsId);
+                if (name == null){
+                    stats.setReserveProgress("流程结束");
+                }else {
+                    //设置储备进度
+                    stats.setReserveProgress(name);
+                }
+                //有流程的情况
+                String startTime = histories.get(histories.size() - 1).getStartTime();
+                stats.setDesignCommission("是");
+                stats.setDesignCommissionIssueTime(startTime);
+                //设置初设提交时间 及 是否完成初设
+                //根据节点名称查找
+                List<History> history = statsService.getHistoryByActName(procInsId, "设计单位上传施工图纸");
+                String endTime = history.get(history.size() - 1).getEndTime();
+                if (endTime != null){
+                    stats.setCompleteDesign("是");
+                    stats.setSubmitTime(endTime);
+                }else {
+                    stats.setCompleteDesign("否");
+                    stats.setSubmitTime(null);
+                }
+                //设置是否完成审图,是否通过图纸审核,未通过原因分析,通过审核日期,是否需设计变更
+                //在历史表中根据节点名称查找
+                List<History> history02 = statsService.getHistoryByActName(procInsId, "联合审图配网项目经理审图");
+                if (history02.size()>0){
+                    String endTime02 = history02.get(0).getEndTime();
+                    //刚进入联合审图的情况
+                    if (endTime02 == null){
+                        stats.setCompleteDraw("");
+                        stats.setDrawAudit("");
+                        stats.setReasonForFailure("");
+                        stats.setPassAuditDate(null);
+                        stats.setChangeDesign("");
+                    }else {
+                        //根据时间来查找下一个节点的(联合审图下一步)信息
+                        History historyByTime = statsService.getHistoryByTime(endTime02, procInsId);
+                        HistoryComment comment = statsService.getCommentByTime(endTime02, procInsId);
+                        if (historyByTime != null){
+                            //通过的情况
+                            if (historyByTime.getName().equals("设计单位上传预算书")){
+                                stats.setCompleteDraw("是");
+                                stats.setDrawAudit("是");
+                                stats.setReasonForFailure("");
+                                stats.setPassAuditDate(endTime02);
+                                stats.setChangeDesign("否");
+                            }else if (historyByTime.getName().equals("设计单位上传施工图纸")){
+                                //不通过
+                                stats.setCompleteDraw("否");
+                                stats.setDrawAudit("不通过");
+                                stats.setReasonForFailure(comment.getMessage());
+                                stats.setPassAuditDate(endTime02);
+                                stats.setChangeDesign("是");
+                            }
+                        }else {
+                            //还有一种是  取消、待定的情况  流程结束
+                            stats.setCompleteDraw("否");
+                            //判断是哪条流程线
+                            HistoryVarinst byProcInstId = statsService.getByProcInstId(endTime02, procInsId);
+                            if (byProcInstId.getName().equals("no")){
+                                stats.setDrawAudit("取消");
+                                stats.setReasonForFailure(comment.getMessage());
+                                stats.setPassAuditDate(endTime02);
+                                stats.setChangeDesign("是");
+                            }else if (byProcInstId.getName().equals("rural")){
+                                stats.setDrawAudit("待定");
+                                stats.setReasonForFailure(comment.getMessage());
+                                stats.setPassAuditDate(endTime02);
+                                stats.setChangeDesign("是");
+                            }
+                        }
+                    }
+                }else {
+                    stats.setCompleteDraw("");
+                    stats.setDrawAudit("");
+                    stats.setReasonForFailure("");
+                    stats.setPassAuditDate(null);
+                    stats.setChangeDesign("");
+                }
+                //设置是否完成审核,是否通过专家审核,未通过原因分析,通过审核日期,是否需设计变更  概预算审核
+                //在历史表中根据节点名称查找是否就行了概预算审核
+                List<History> history03 = statsService.getHistoryByActName(procInsId, "技经人员审预算");
+                if (history03.size()>0){
+                    String endTime03 = history03.get(0).getEndTime();
+                    //刚进入审预算的情况
+                    if (endTime03 == null){
+                        stats.setCompleteReview("");
+                        stats.setExpertReview("");
+                        stats.setEstimateReasonForFailure("");
+                        stats.setEstimatePassAuditDate(null);
+                        stats.setEstimateChangeDesign("");
+                        //设置图纸是否定稿,定稿日期
+                        stats.setDrawingFinalize("");
+                        stats.setFinalDate(null);
+                    }else {
+                        //根据时间来查找下一个节点的信息(是通过还是驳回)
+                        History hi = statsService.getHistoryByTime(endTime03,procInsId);
+                        HistoryComment comment = statsService.getCommentByTime(endTime03, procInsId);
+                        //通过的情况
+                        if (hi == null){
+                            stats.setCompleteReview("是");
+                            stats.setExpertReview("是");
+                            stats.setEstimateReasonForFailure("");
+                            stats.setEstimatePassAuditDate(endTime03);
+                            stats.setEstimateChangeDesign("否");
+                            //设置图纸是否定稿,定稿日期
+                            stats.setDrawingFinalize("是");
+                            stats.setFinalDate(endTime03);
+                        }else {
+                            //驳回的情况
+                            stats.setCompleteReview("否");
+                            stats.setExpertReview("否");
+                            stats.setEstimateReasonForFailure(comment.getMessage());
+                            stats.setEstimatePassAuditDate(endTime03);
+                            stats.setEstimateChangeDesign("是");
+                            //设置图纸是否定稿,定稿日期
+                            stats.setDrawingFinalize("否");
+                            stats.setFinalDate("");
+                        }
+                    }
+                }else {
+                    stats.setCompleteReview("");
+                    stats.setExpertReview("");
+                    stats.setEstimateReasonForFailure("");
+                    stats.setEstimatePassAuditDate(null);
+                    stats.setEstimateChangeDesign("");
+                    //设置图纸是否定稿,定稿日期
+                    stats.setDrawingFinalize("");
+                    stats.setFinalDate(null);
+                }
+            }
+
+            statsList.add(stats);
+        }
+        //生成序列号
+        int i = 1;
+        for (ProgressStats s : statsList) {
+            s.setId(String.valueOf(i));
+            i++;
+        }
+
+        ExcelExportUtil util = ExcelExportUtil.getOne();
+        XSSFWorkbook workbook = util.getWorkbook("progressStats");
+        util.exportProgress(response,workbook,statsList);
+    }
+}

+ 179 - 0
src/main/java/com/jeeplus/modules/cg/reservemanagementcenter/statisticalTable/web/SpecialSupplyController.java

@@ -0,0 +1,179 @@
+package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.web;
+
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.History;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.SpecialSupply;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.service.SpecialSupplyService;
+import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.util.ExcelExportUtil;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 特殊物资统计
+ * @author: 王强
+ * @create: 2022-08-22 17:58
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/cg/reservemanagementcenter/specialSupply")
+public class SpecialSupplyController extends BaseController {
+
+    @Autowired
+    private SpecialSupplyService supplyService;
+
+    @ModelAttribute
+    public SpecialSupply get(@RequestParam(required = false) String id) {
+        SpecialSupply entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = supplyService.get(id);
+        }
+        if (entity == null) {
+            entity = new SpecialSupply();
+        }
+        return entity;
+    }
+
+    /**
+     * 特殊物资统计表页面
+     * @param specialSupply
+     * @param model
+     * @return
+     */
+    @RequiresPermissions("cg:reservemanagementcenter:specialSupply:list")
+    @RequestMapping(value = "supplyList")
+    public String supplyList(SpecialSupply specialSupply, Model model) {
+        model.addAttribute("specialSupply", specialSupply);
+        return "modules/cg/statisticalTable/specialSupply/specialSupply";
+    }
+
+    /**
+     * 特殊物资统计数据列表
+     * @param specialSupply
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:specialSupply:list")
+    @RequestMapping(value = "list")
+    public Map<String, Object> basicData(SpecialSupply specialSupply, HttpServletRequest request, HttpServletResponse response, Model model) {
+
+        Page<SpecialSupply> page = supplyService.findPage(new Page<SpecialSupply>(request, response), specialSupply);
+        List<SpecialSupply> list = page.getList();
+        List<SpecialSupply> supplyList = new ArrayList<>();
+        SpecialSupply supply = null;
+        for (int i=0;i<list.size();i++){
+            supply = list.get(i);
+            //进行赋值操作
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = supplyService.getByProjectReserveId(supply.getProjectReserveId());
+            //根据procInsId查出历史流程名称和时间
+            List<History> histories = supplyService.getHistoryByExecuteId(procInsId);
+            //当size>0时待办有历史流程,
+            if (histories.size()>0){
+                //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+                String name = supplyService.getByExecuteId(procInsId);
+                supply.setReserveProgress(name);
+            }
+            //设置20kv物资统计
+            //设置高低压开关柜统计
+            Double kgg1 = supplyService.getData("500116761", "环网柜,AC10kV,630A,负荷开关柜,SF6,户内。SF6灭弧,带避雷器,电动,端子排", "");
+            Double kgg2 = supplyService.getData("500116761", "环网柜,AC10kV,630A,负荷开关柜,SF6,户内。SF6灭弧,不带避雷器,电动,端子排", "");
+            Double kgg3 = supplyService.getData("500006630", "", "");
+            Double kgg4 = supplyService.getData("500006556", "", "");
+            Double kgg5 = supplyService.getData("500006703", "", "");
+            Double kgg6 = supplyService.getData("500107555", "", "");
+            Double kgg7 = supplyService.getData("500107558", "", "");
+            Double kgg8 = supplyService.getData("500107562", "", "");
+            supply.setSwitchCabinet10KV(kgg1 == null ? "" : kgg1 + "");
+            supply.setSwitchCabinet10KV02(kgg2 == null ? "" : kgg2 + "");
+            supply.setSwitchCabinetIncomeLine(kgg3 == null ? "" : kgg3 + "");
+            supply.setSwitchCabinetSegment(kgg4 == null ? "" : kgg4 + "");
+            supply.setSwitchCabinetFeeder(kgg5 == null ? "" : kgg5 + "");
+            supply.setNumberOfBranchBoxFourWay(kgg6 == null ? "" : kgg6 + "");
+            supply.setNumberOfBranchBoxFiveWay(kgg7 == null ? "" : kgg7 + "");
+            supply.setNumberOfBranchBoxSevenWay(kgg8 == null ? "" : kgg8 + "");
+            //设置低压分支箱路上统计
+            //设置箱变路数统计
+            //设置特殊尺寸物资统计
+
+            supplyList.add(supply);
+        }
+        page.setList(supplyList);
+        return getBootstrapData(page);
+    }
+
+    //导出excel
+    @ResponseBody
+    @RequiresPermissions("cg:reservemanagementcenter:specialSupply:export")
+    @RequestMapping(value = "export")
+    public void exportExcel(SpecialSupply specialSupply, HttpServletRequest request, HttpServletResponse response) {
+        List<SpecialSupply> list = supplyService.exportFindList(specialSupply);
+
+        List<SpecialSupply> supplyList = new ArrayList<>();
+        SpecialSupply supply = null;
+        for (int i=0;i<list.size();i++){
+            supply = list.get(i);
+            //进行赋值操作
+            //根据projectReserveId查出流程表的proc_ins_id
+            String procInsId = supplyService.getByProjectReserveId(supply.getProjectReserveId());
+            //根据procInsId查出历史流程名称和时间
+            List<History> histories = supplyService.getHistoryByExecuteId(procInsId);
+            //当size>0时待办有历史流程,
+            if (histories.size()>0){
+                //根据proc_ins_id去运行时任务节点表(act_ru_task)中查出当前流程名称
+                String name = supplyService.getByExecuteId(procInsId);
+                supply.setReserveProgress(name);
+            }
+            //设置20kv物资统计
+            //设置高低压开关柜统计
+            Double kgg1 = supplyService.getData("500116761", "环网柜,AC10kV,630A,负荷开关柜,SF6,户内。SF6灭弧,带避雷器,电动,端子排", "");
+            Double kgg2 = supplyService.getData("500116761", "环网柜,AC10kV,630A,负荷开关柜,SF6,户内。SF6灭弧,不带避雷器,电动,端子排", "");
+            Double kgg3 = supplyService.getData("500006630", "", "");
+            Double kgg4 = supplyService.getData("500006556", "", "");
+            Double kgg5 = supplyService.getData("500006703", "", "");
+            Double kgg6 = supplyService.getData("500107555", "", "");
+            Double kgg7 = supplyService.getData("500107558", "", "");
+            Double kgg8 = supplyService.getData("500107562", "", "");
+            supply.setSwitchCabinet10KV(kgg1 == null ? "" : kgg1 + "");
+            supply.setSwitchCabinet10KV02(kgg2 == null ? "" : kgg2 + "");
+            supply.setSwitchCabinetIncomeLine(kgg3 == null ? "" : kgg3 + "");
+            supply.setSwitchCabinetSegment(kgg4 == null ? "" : kgg4 + "");
+            supply.setSwitchCabinetFeeder(kgg5 == null ? "" : kgg5 + "");
+            supply.setNumberOfBranchBoxFourWay(kgg6 == null ? "" : kgg6 + "");
+            supply.setNumberOfBranchBoxFiveWay(kgg7 == null ? "" : kgg7 + "");
+            supply.setNumberOfBranchBoxSevenWay(kgg8 == null ? "" : kgg8 + "");
+            //设置低压分支箱路上统计
+            //设置箱变路数统计
+            //设置特殊尺寸物资统计
+
+            supplyList.add(supply);
+        }
+
+        //生成序列号
+        int i = 1;
+        for (SpecialSupply s : supplyList) {
+            s.setId(String.valueOf(i));
+            i++;
+        }
+
+        ExcelExportUtil util = ExcelExportUtil.getOne();
+        XSSFWorkbook workbook = util.getWorkbook("specialSupply");
+        util.exportSpecialSupply(response,workbook,supplyList);
+    }
+}

+ 12 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/activiti/utils/MyActiviUtils.java

@@ -2,6 +2,8 @@ package com.jeeplus.modules.sg.managementcenter.activiti.utils;
 
 import com.jeeplus.common.utils.SpringContextHolder;
 import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.entity.ReserveProcessProject;
+import com.jeeplus.modules.cg.reservemanagementcenter.reserveManage.service.ReserveProcessProjectService;
 import com.jeeplus.modules.sg.managementcenter.activiti.entity.Construction;
 import com.jeeplus.modules.sg.managementcenter.activiti.entity.FindTask;
 import com.jeeplus.modules.sg.managementcenter.activiti.mapper.ConstructionMapper;
@@ -40,6 +42,8 @@ public class MyActiviUtils {
     @Autowired
     private TaskService taskService;
     @Autowired
+    private static ReserveProcessProjectService processProjectService = SpringContextHolder.getBean(ReserveProcessProjectService.class);
+    @Autowired
     private RuntimeService runtimeService;
     @Autowired
     private static ConstructionService constructionService = SpringContextHolder.getBean(ConstructionService.class);
@@ -279,6 +283,14 @@ public class MyActiviUtils {
     }
 
     /**
+     * 通过流程定实例id查询储备人员信息
+     * */
+    public static ReserveProcessProject findCgUser(String procInsId) {
+        ReserveProcessProject user = processProjectService.findCgUser(procInsId);
+        return user;
+    }
+
+    /**
      * 通过流程定义号查询项目的流转人员信息-转资流程
      * */
     public static Project findFundUser(String procInsId) {

+ 1 - 0
src/main/java/com/jeeplus/modules/sg/picking/activiti/web/ShowListController.java

@@ -252,6 +252,7 @@ public class ShowListController extends BaseController {
     @RequestMapping(value = "raiseData")
     public Map<String, Object> raiseData(ShowList showList, HttpServletRequest request, HttpServletResponse response, Model model) {
         Page<ShowList> page = showListService.findRaisePage(new Page<ShowList>(request, response), showList);
+        System.out.println(showList);
         return getBootstrapData(page);
     }
 

+ 23 - 9
src/main/java/com/jeeplus/modules/sg/raiseCapital/web/RaiseCapitalController.java

@@ -64,7 +64,7 @@ public class RaiseCapitalController extends BaseController {
 
 	@Autowired
 	private ShowListService showListService;
-	
+
 	@ModelAttribute
 	public RaiseCapital get(@RequestParam(required=false) String id) {
 		RaiseCapital entity = null;
@@ -76,7 +76,7 @@ public class RaiseCapitalController extends BaseController {
 		}
 		return entity;
 	}
-	
+
 	/**
 	 * 提资表单列表页面
 	 */
@@ -88,7 +88,21 @@ public class RaiseCapitalController extends BaseController {
 		model.addAttribute("raiseCapital", raiseCapital);
 		return "modules/sg/raiseCapital/raiseCapital";
 	}
-	
+
+	/**
+	 * 在线开甲供材列表页面
+	 */
+	@RequiresPermissions("test:raiseCapital:jgcList")
+	@RequestMapping(value = {"jgcList", ""})
+	public String jgcList(RaiseCapital raiseCapital, Model model,String projectName,String projectReserveId) {
+		List<PickList> pickListList = raiseCapitalService.newAllList();
+//		raiseCapital.setProjectName(projectName);
+		model.addAttribute("pickListList", pickListList);
+		model.addAttribute("raiseCapital", raiseCapital);
+		model.addAttribute("projectName", projectName);
+		return "modules/cg/reservemanagementcenter/raiseCapital/raiseCapital";
+	}
+
 		/**
 	 * 提资表单列表数据
 	 */
@@ -96,7 +110,7 @@ public class RaiseCapitalController extends BaseController {
 	@RequiresPermissions("test:raiseCapital:list")
 	@RequestMapping(value = "data")
 	public Map<String, Object> data(RaiseCapital raiseCapital, HttpServletRequest request, HttpServletResponse response, Model model) {
-		Page<RaiseCapital> page = raiseCapitalService.findPage(new Page<RaiseCapital>(request, response), raiseCapital); 
+		Page<RaiseCapital> page = raiseCapitalService.findPage(new Page<RaiseCapital>(request, response), raiseCapital);
 		return getBootstrapData(page);
 	}
 
@@ -133,7 +147,7 @@ public class RaiseCapitalController extends BaseController {
 		j.setMsg("保存提资表单成功");
 		return j;
 	}
-	
+
 	/**
 	 * 删除提资表单
 	 */
@@ -146,7 +160,7 @@ public class RaiseCapitalController extends BaseController {
 		j.setMsg("删除提资表单成功");
 		return j;
 	}
-	
+
 	/**
 	 * 批量删除提资表单
 	 */
@@ -197,7 +211,7 @@ public class RaiseCapitalController extends BaseController {
 		}
 		return j;
     }
-	
+
 	/**
 	 * 下载导入提资表单数据模板
 	 */
@@ -208,7 +222,7 @@ public class RaiseCapitalController extends BaseController {
 		AjaxJson j = new AjaxJson();
 		try {
             String fileName = "提资表单数据导入模板.xlsx";
-    		List<RaiseCapital> list = Lists.newArrayList(); 
+    		List<RaiseCapital> list = Lists.newArrayList();
     		new ExportExcel("提资表单数据", RaiseCapital.class, 1).setDataList(list).write(response, fileName).dispose();
     		return null;
 		} catch (Exception e) {
@@ -275,4 +289,4 @@ public class RaiseCapitalController extends BaseController {
 		}
 		return j;
 	}
-}
+}

+ 1 - 1
src/main/java/com/jeeplus/modules/sys/web/FileController.java

@@ -350,4 +350,4 @@ public class FileController extends BaseController {
 	
 
 
-}
+}

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


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


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


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


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


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


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


+ 1 - 1
src/main/webapp/webpage/modules/bpm/task/todo/taskTodoList.js

@@ -208,4 +208,4 @@ function claim(taskId) {
     });
 }
 
-</script>
+</script>

+ 390 - 0
src/main/webapp/webpage/modules/cg/reservemanagementcenter/raiseCapital/raiseCapital.js

@@ -0,0 +1,390 @@
+<%@ page contentType = "text/html;charset=UTF-8" %>
+    <script>
+    $(document).ready(function () {
+        window.operateEvents = {
+            'change input': function (e, value, row, index) {
+                var ss = $('#' + row.id).val();
+                jp.confirm('确认要修改?', function () {
+                    jp.get("${ctx}/picking/activiti/raiseUpdate?id=" + row.id + "&mdTotalAmount=" + ss, function (data) {
+                        jp.success(data.msg);
+                        refresh();
+                    })
+                }, function () {
+                    $('#informationTable').bootstrapTable('refresh');
+                })
+            }
+        };
+        var item = "";
+        //bootstrapTable加载数据
+        $('#informationTable').bootstrapTable({
+            //请求方法
+            method: 'post',
+            //类型json
+            dataType: "json",
+            contentType: "application/x-www-form-urlencoded",
+            //显示检索按钮
+            showSearch: false,
+            //显示刷新按钮
+            showRefresh: false,
+            //显示切换手机试图按钮
+            showToggle: false,
+            //显示 内容列下拉框
+            showColumns: false,
+            //显示到处按钮
+            showExport: false,
+            //显示切换分页按钮
+            showPaginationSwitch: false,
+            //最低显示2行
+            minimumCountColumns: 2,
+            //是否显示行间隔色
+            striped: true,
+            //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
+            cache: false,
+            //是否显示分页(*)
+            pagination: false,
+            //排序方式
+            sortOrder: "asc",
+            //初始化加载第一页,默认第一页
+            pageNumber: 1,
+            //每页的记录行数(*)
+            pageSize: 10,
+            //可供选择的每页的行数(*)
+            pageList: [10, 25, 50, 100],
+            //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+            url: "${ctx}/picking/showlist/raiseData",
+            //默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
+            ////查询参数,每次调用是会带上这个参数,可自定义
+            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',
+            onClickRow: function (row, $el) {
+            },
+            onShowSearch: function () {
+                $("#search-collapse").slideToggle();
+            },
+            formatNoMatches: function () {
+                return "你的自定义文字说明";
+            },
+            columns: [
+                {
+                    checkbox: true
+                },
+                {
+                    field: 'materialCode',
+                    title: '物料编码',
+                }, {
+                    field: 'materialDescription',
+                    title: '物料名称',
+                }, {
+                    field: 'extensionDescription',
+                    title: '扩展描述',
+                }, {
+                    field: 'mdUnits',
+                    title: '单位',
+                }, {
+                    field: 'mdTotalAmount',
+                    title: '总量',
+                    events: operateEvents,
+                    formatter: getTime
+                }, {
+                    field: 'mdSingleWeight',
+                    title: '单重/kg',
+                }, {
+                    field: 'mdTotalWeight',
+                    title: '总重/吨',
+                }, {
+                    field: 'mdTheParty',
+                    title: '甲乙供',
+                }, {
+                    field: 'mdText',
+                    title: '备注',
+                }
+            ]
+        });
+
+        $('#informationTable2').bootstrapTable({
+            //请求方法
+            method: 'post',
+            //类型json
+            dataType: "json",
+            contentType: "application/x-www-form-urlencoded",
+            //显示检索按钮
+            showSearch: false,
+            //显示刷新按钮
+            showRefresh: false,
+            //显示切换手机试图按钮
+            showToggle: false,
+            //显示 内容列下拉框
+            showColumns: false,
+            //显示到处按钮
+            showExport: false,
+            //显示切换分页按钮
+            showPaginationSwitch: false,
+            //最低显示2行
+            minimumCountColumns: 2,
+            //是否显示行间隔色
+            striped: true,
+            //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
+            cache: false,
+            //是否显示分页(*)
+            pagination: false,
+            //排序方式
+            sortOrder: "asc",
+            //初始化加载第一页,默认第一页
+            pageNumber: 1,
+            //每页的记录行数(*)
+            pageSize: 10,
+            //可供选择的每页的行数(*)
+            pageList: [10, 25, 50, 100],
+            //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+            url: "${ctx}/picking/showlist/mkData",
+            //默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
+            ////查询参数,每次调用是会带上这个参数,可自定义
+            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',
+            onClickRow: function (row, $el) {
+            },
+            onShowSearch: function () {
+                $("#search-collapse").slideToggle();
+            },
+            formatNoMatches: function () {
+                return "你的自定义文字说明";
+            },
+            columns: [
+                {
+                    field: 'mdBigClass',
+                    title: '模块大类',
+                },
+                {
+                    field: 'mdTheClass',
+                    title: '模块中类',
+                },
+                {
+                    field: 'mdName',
+                    title: '模块名称',
+                },
+                {
+                    field: 'materialCode',
+                    title: '物料编码',
+                }, {
+                    field: 'materialDescription',
+                    title: '物料名称',
+                }, {
+                    field: 'extensionDescription',
+                    title: '扩展描述',
+                }, {
+                    field: 'mdUnits',
+                    title: '单位',
+                }, {
+                    field: 'mdTotalAmount',
+                    title: '总量',
+                }, {
+                    field: 'mdSingleWeight',
+                    title: '单重/kg',
+                }, {
+                    field: 'mdTotalWeight',
+                    title: '总重/吨',
+                }, {
+                    field: 'mdTheParty',
+                    title: '甲乙供',
+                }, {
+                    field: 'mdText',
+                    title: '备注',
+                }
+            ]
+        });
+
+        function getTime(value, row, index) {
+            return [
+                "<input  id=" + row.id + " type='number' name='changeAmount' class='form-control required deal'  value=" + row.mdTotalAmount + ">",
+            ].join('');
+        }
+
+        if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端
+            $('#informationTable').bootstrapTable("toggleView");
+        }
+
+        $('#informationTable').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+            'check-all.bs.table uncheck-all.bs.table', function () {
+            $('#remove').prop('disabled', !$('#informationTable').bootstrapTable('getSelections').length);
+        });
+
+        function getTime(value, row, index) {
+            return [
+                "<input  id=" + row.id + " type='number' name='changeAmount' class='form-control required deal'  value=" + row.mdTotalAmount + ">",
+            ].join('');
+        }
+
+        // 绑定查询按扭
+        $("#search").click("click", function () {
+            $('#informationTable').bootstrapTable('refresh');
+        });
+        $("#click1").click("click", function () {
+            // alert("1");
+            $("#click2").attr("style", "");
+            $("#click3").attr("style", "");
+            $("#click1").attr("style", "border-bottom: 0px;border-left: 1px solid rgb(221,221,221);border-right: 1px solid rgb(221,221,221);border-top: 1px solid rgb(221,221,221)");
+        });
+        $("#click2").click("click", function () {
+            $("#click1").attr("style", "");
+            $("#click3").attr("style", "");
+            $("#click2").attr("style", "border-bottom: 0px;border-left: 1px solid rgb(221,221,221);border-right: 1px solid rgb(221,221,221);border-top: 1px solid rgb(221,221,221)");
+        });
+        $("#click2").click("click", function () {
+            $("#click1").attr("style", "");
+            $("#click2").attr("style", "");
+            $("#click3").attr("style", "border-bottom: 0px;border-left: 1px solid rgb(221,221,221);border-right: 1px solid rgb(221,221,221);border-top: 1px solid rgb(221,221,221)");
+        });
+        // 绑定查询重置按扭
+        $("#reset").click("click", function () {
+            $("#searchForm  input").val("");
+            $("#searchForm  select").val("");
+            $('#informationTable').bootstrapTable('refresh');
+        });
+
+        $("#dq").click("click", function () {
+            $("#div1").attr("style", "display:block;");
+            $("#div2").attr("style", "display:none;");
+            $("#div3").attr("style", "display:none;");
+        });
+        $("#qd").click("click", function () {
+            let projectName = $("#projectName").val();
+            var item = "";
+            $('input[name="need"]').each(function () {
+                var val = $(this).val();
+                if (val != null && val != "" && val > 0) {
+                    item += $(this).attr("id") + ":" + val + ";"
+                }
+            })
+            //将item提交,遍历后保存数据
+            if (projectName == null || projectName == "") {
+                jp.error("项目名称不能为空!");
+            } else if (item == null || item == "") {
+                jp.error("请填写模块表");
+            } else {
+                $("#div1").attr("style", "display:none;");
+                $("#div2").attr("style", "display:block;");
+                $("#div3").attr("style", "display:none;");
+                jp.post("${ctx}/picking/showlist/saveData",
+                    {
+                        "item": item,
+                        "projectName": projectName
+                    },
+                    function (data) {
+                        // console.log(projectName);
+                        $('#informationTable').bootstrapTable('refresh', {
+                            query:
+                                {
+                                    projectName: projectName
+                                }
+                        });
+                    })
+            }
+        });
+        $("#mkqd").click("click", function () {
+            $("#div1").attr("style", "display:none;");
+            $("#div2").attr("style", "display:none;");
+            $("#div3").attr("style", "display:block;");
+            var item = "";
+            $('input[name="need"]').each(function () {
+                var val = $(this).val();
+                if (val != null && val != "" && val > 0) {
+                    item += $(this).attr("id") + ":" + val + ";"
+                    // console.log(item + "\t");
+                }
+            })
+            $('#informationTable2').bootstrapTable('refresh', {
+                query:
+                    {
+                        item: item
+                    }
+            });
+        });
+        /*$("#agree").click(function () {
+            var item = "";
+            $('input[name="need"]').each(function () {
+                var val = $(this).val();
+                if (val != null && val != "" && val > 0) {
+                    item += $(this).attr("id") + ":" + val + ";"
+                    console.log(item + "\t");
+                }
+            })
+
+            jp.post("${ctx}/raiseCapital/exportCache",
+                {
+                },
+                function (data) {
+                    if (data.success) {
+                        jp.downloadFile('${ctx}/raiseCapital/export?projectName=' + projectName, 'raiseCapital');//给个name是为了能够在某些条件下下载两个文件
+                        jp.success("下载成功")
+                        refreshWindows();
+                    }
+                })
+
+        });*/
+
+
+        function refreshWindows() {
+            location.reload();
+        }
+
+        function addRow(list, idx, tpl, row) {
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row
+            }));
+        }
+    })
+
+//刷新列表
+function refresh() {
+    let projectName = $("#projectName").val();
+    $('#informationTable').bootstrapTable('refresh', {
+        query:
+            {
+                projectName: projectName
+            }
+    });
+}
+
+function getIdSelections() {
+    return $.map($("#informationTable").bootstrapTable('getSelections'), function (row) {
+        return row.id
+    });
+}
+
+function deleteAll() {
+    jp.confirm('确认要删除该领料信息?', function () {
+        jp.loading();
+        jp.get("${ctx}/picking/activiti/deleteRaiseAll?ids=" + getIdSelections(), function (data) {
+            refresh();
+            jp.success(data.msg);
+        })
+    })
+}
+
+function add() {
+    var projectName = $("#projectName").val();
+    jp.openSaveDialog('新增领料信息', "${ctx}/picking/activiti/netRaise?projectName=" + projectName, '800px', '500px');
+}
+
+
+</script>

+ 181 - 0
src/main/webapp/webpage/modules/cg/reservemanagementcenter/raiseCapital/raiseCapital.jsp

@@ -0,0 +1,181 @@
+<%@ 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="raiseCapital.js" %>
+	<style type="text/css">
+		#div1{
+			margin-top: 10px;
+		}
+		.well-class-body{
+			width: 150px;
+			word-wrap: break-word;
+			word-break: break-all;
+			/*text-align: right;*/
+			margin: 2px;
+		}
+		.list-lig-one{
+			color: #0C0C0C;
+			/*text-align: center;*/
+			font-size: 17px;
+			background-color: whitesmoke;
+		}
+		.list-lig-two{
+			/*background-color: #6495ED;*/
+			color: #333333;
+			font-size: 14px;
+		}
+	</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>
+				<ul class="nav nav-tabs">
+					<li role="presentation" id="click1" style="border-bottom: 0px;border-left: 1px solid rgb(221,221,221);border-right: 1px solid rgb(221,221,221);border-top: 1px solid rgb(221,221,221)"><a id="dq" href="javascript:void(0)">填写需要材料</a></li>
+					<%--<li role="presentation" id="click3" ><a id="mkqd" href="javascript:void(0)">查看模块清单</a></li>--%>
+					<li role="presentation" id="click2" ><a id="qd" href="javascript:void(0)">查看领料清单</a></li>
+				</ul>
+			</div>
+			<!-- 表格 -->
+			<div id="div1">
+				<input type="hidden" id="projectName" value="${projectName}}">
+				<%--<table class="table table-bordered">
+					<tbody>
+					<tr>
+						<td class="width-15 active"><label class="pull-right">项目编号:</label></td>
+						<td class="width-35">
+							<input id="projectNo" cssClass="form-control" placeholder="项目编号"/>
+						</td>
+						<td class="width-15 active"><label class="pull-right">批准人:</label></td>
+						<td class="width-35">
+							<input id="approver" cssClass="form-control" placeholder="批准人"/>
+						</td>
+					</tr>
+					<tr>
+						<td class="width-15 active"><label class="pull-right">erp编码:</label></td>
+						<td class="width-35">
+							<input id="erpCode" cssClass="form-control" placeholder="erp编码"/>
+						</td>
+						<td class="width-15 active"><label class="pull-right">审核人:</label></td>
+						<td class="width-35">
+							<input id="reviewer" cssClass="form-control" placeholder="审核人"/>
+						</td>
+					</tr>
+					<tr>
+						<td class="width-15 active"><label class="pull-right">项目名称:<font color='red'>*</font></label></td>
+						<td class="width-35">
+							<input id="projectName" cssClass="form-control required" placeholder="必填"/>
+						</td>
+						<td class="width-15 active"><label class="pull-right">制单人:</label></td>
+						<td class="width-35">
+							<input id="preparedBy" cssClass="form-control required" placeholder="制单人"/>
+						</td>
+					</tr>
+					<tr>
+						<td class="width-15 active"><label class="pull-right">甲方项目经理确认:</label></td>
+						<td class="width-35">
+							<input id="manager" cssClass="form-control required" placeholder="甲方项目经理确认"/>
+						</td>
+						<td class="width-15 active"><label class="pull-right">领用单位:</label></td>
+						<td class="width-35">
+							<input id="reqUnit" cssClass="form-control required" placeholder="领用单位"/>
+						</td>
+					</tr>
+					<tr>
+						<td class="width-15 active"><label class="pull-right">制单时间:</label></td>
+						<td class="width-35">
+							<input id="preTime" cssClass="form-control" placeholder="制单时间"/>
+						</td>
+					</tr>
+					</tbody>
+				</table>--%>
+				<table class="table table-view">
+					<tbody>
+					<c:forEach items="${pickListList}" var="items" varStatus="status">
+						<c:if test="${status.count eq 1 || (status.count-1) % 1 eq 0}">
+						<tr>
+						</c:if>
+							<td colspan="4" class="list-lig-one">${items.name}</td>
+						<c:if test="${status.count % 1 eq 0 || status.count eq 1}">
+						</tr>
+						</c:if>
+
+						<c:forEach items="${items.mdTheClassList}" var="items" varStatus="status">
+							<c:if test="${status.count eq 1 || (status.count-1) % 1 eq 0}">
+								<tr>
+							</c:if>
+							<td colspan="4" class="list-lig-two">${items.name}</td>
+							<c:if test="${status.count % 1 eq 0 || status.count eq 1}">
+								</tr>
+							</c:if>
+
+							<c:forEach items="${items.mdSmallClassList}" var="itemss" varStatus="status">
+								<c:if test="${status.count eq 1 || (status.count-1) % 4 eq 0}">
+									<tr>
+								</c:if>
+								<td style="text-align: center;vertical-align: middle">
+										<div class="well-class-body" style="float: left;">
+											<a href="javascript:jp.openViewDialog('模块清单','${ctx}/managementcenter/moduleacquisition/moduleListing/list?blockId=${itemss.id}', '800px', '500px');">
+												${itemss.name}
+											</a>
+										</div>
+										<div style="float: left;margin-left: 5px;margin: auto">
+											<input style="width:40px;" placeholder="0" type="number" min="0" name="need" id="${itemss.id}"/><span>&nbsp;${itemss.mdUnit}</span>
+<%--											<span><img onclick="jp.showPic('${itemss.mdImg}')" src="${itemss.mdImg}" height="50px"></span>--%>
+											<c:if test="${not empty itemss.mdImg}">
+												<a id="imgButton" class="btn btn-success btn-xs waves-effect m-r-5" href="javascript:jp.openViewDialog('查看附件','${ctx}/picking/activiti/pickPic?id=${itemss.id}', '800px', '500px')">显示附件</a>
+											</c:if>
+										</div>
+								</td>
+								<c:if test="${status.count % 4 eq 0 || status.count eq 4}">
+									</tr>
+								</c:if>
+							</c:forEach>
+
+						</c:forEach>
+					</c:forEach>
+					</tbody>
+				</table>
+			</div>
+<%--			//领料--%>
+			<div id="div2" style="display: none">
+				<!-- 工具栏 -->
+				<div style="margin-top: 10px;">
+					<button id="add" class="btn btn-primary" onclick="add()">
+						<i class="glyphicon glyphicon-plus"></i> 新建
+					</button>
+					<button id="remove" class="btn btn-danger" disabled onclick="deleteAll()">
+						<i class="glyphicon glyphicon-remove"></i> 删除
+					</button>
+				</div>
+				<table id="informationTable"   data-toolbar="#toolbar" class="table"></table>
+				<%--<div class="row">
+					<div class="col-sm-3"></div>
+					<div class="col-sm-6">
+						<div class="form-group text-center">
+							<input id="agree" class="btn  btn-primary btn-lg btn-parsley" type="submit" value="导出文档" />&nbsp;
+						</div>
+					</div>
+				</div>--%>
+			</div>
+<%--			//模块清单
+			<div id="div3" style="display: none">
+				<table id="informationTable2"   data-toolbar="#toolbar" class="table"></table>
+			</div>--%>
+
+		</div>
+
+	</div>
+	</div>
+</body>
+</html>
+

+ 395 - 0
src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/budgetReview.jsp

@@ -0,0 +1,395 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp" %>
+<html>
+<head>
+    <title>技经人员审预算</title>
+    <meta name="decorator" content="ani"/>
+    <script type="text/javascript">
+
+        $(document).ready(function () {
+            $('#disclosureFinishDate').datetimepicker({
+                format: "YYYY-MM-DD"
+            });
+
+            $("#agree").click(function () {
+                jp.prompt("通过", function (message) {
+                    var projectReserveId = $("#projectReserveId").val();
+                    var projectName = $("#projectName").val();
+                    //预算书审前审后数据
+                    var pretrialBudgetTaxInclude = $("#pretrialBudgetTaxInclude").val();
+                    var pretrialBudgetTaxNoInclude = $("#pretrialBudgetTaxNoInclude").val();
+                    var pretrialSupervisionFeeTaxNoInclude = $("#pretrialSupervisionFeeTaxNoInclude").val();
+                    var pretrialDesignFeeTaxNoInclude = $("#pretrialDesignFeeTaxNoInclude").val();
+                    var afterTrialBudgetTaxInclude = $("#afterTrialBudgetTaxInclude").val();
+                    var afterTrialBudgetTaxNoInclude = $("#afterTrialBudgetTaxNoInclude").val();
+                    var afterTrialSupervisionFeeTaxNoInclude = $("#afterTrialSupervisionFeeTaxNoInclude").val();
+                    var afterTrialDesignFeeTaxNoInclude = $("#afterTrialDesignFeeTaxNoInclude").val();
+                    jp.post("${ctx}/cg/reservemanagementcenter/process/actBudgetUnit",
+                        {
+                            "taskId": "${reserveProcess.act.taskId}",
+                            "taskName": "${reserveProcess.act.taskName}",
+                            "taskDefKey": "${reserveProcess.act.taskDefKey}",
+                            "procInsId": "${reserveProcess.act.procInsId}",
+                            "procDefId": "${reserveProcess.act.procDefId}",
+                            "flag": "yes",
+                            "projectReserveId": projectReserveId,
+                            "projectName": projectName,
+                            "pretrialBudgetTaxInclude": pretrialBudgetTaxInclude,
+                            "pretrialBudgetTaxNoInclude": pretrialBudgetTaxNoInclude,
+                            "pretrialSupervisionFeeTaxNoInclude": pretrialSupervisionFeeTaxNoInclude,
+                            "pretrialDesignFeeTaxNoInclude": pretrialDesignFeeTaxNoInclude,
+                            "afterTrialBudgetTaxInclude": afterTrialBudgetTaxInclude,
+                            "afterTrialBudgetTaxNoInclude": afterTrialBudgetTaxNoInclude,
+                            "afterTrialSupervisionFeeTaxNoInclude": afterTrialSupervisionFeeTaxNoInclude,
+                            "afterTrialDesignFeeTaxNoInclude": afterTrialDesignFeeTaxNoInclude,
+                            "comment": window.encodeURI(message)
+                        },
+                        function (data) {
+                            if (data.success) {
+                                jp.success(data.msg);
+                                jp.go("${ctx}/act/task/todo");
+                            } else {
+                                jp.error(data.msg);
+                            }
+                        }
+                    );
+
+                })
+            });
+            $("#no").click(function () {
+                //预算问题反馈记录
+                var preferedCase = $("#preferedCase").val();
+                var transferSituation = $("#transferSituation").val();
+                var budgetTemplateCheck = $("#budgetTemplateCheck").val();
+                var quotaApplicationCheck = $("#quotaApplicationCheck").val();
+                var workLoadCheck = $("#workLoadCheck").val();
+                var checkTheFee = $("#checkTheFee").val();
+                var supplyCheck = $("#supplyCheck").val();
+                var materialCheck = $("#materialCheck").val();
+                var liveWorkFeeCheck = $("#liveWorkFeeCheck").val();
+                var demolitionEngineeringProblems = $("#demolitionEngineeringProblems").val();
+                var otherProblem = $("#otherProblem").val();
+                var projectName = $("#projectName").val();
+                jp.prompt("不通过", function (message) {
+                    var projectReserveId = $("#projectReserveId").val();
+                    jp.post("${ctx}/cg/reservemanagementcenter/process/actBudgetUnit", {
+                            "taskId": "${reserveProcess.act.taskId}",
+                            "taskName": "${reserveProcess.act.taskName}",
+                            "taskDefKey": "${reserveProcess.act.taskDefKey}",
+                            "procInsId": "${reserveProcess.act.procInsId}",
+                            "procDefId": "${reserveProcess.act.procDefId}",
+                            "flag": "no",
+                            "projectReserveId": projectReserveId,
+                            "projectName": projectName,
+                            "preferedCase": preferedCase,
+                            "transferSituation": transferSituation,
+                            "budgetTemplateCheck": budgetTemplateCheck,
+                            "quotaApplicationCheck": quotaApplicationCheck,
+                            "workLoadCheck": workLoadCheck,
+                            "checkTheFee": checkTheFee,
+                            "supplyCheck": supplyCheck,
+                            "materialCheck": materialCheck,
+                            "liveWorkFeeCheck": liveWorkFeeCheck,
+                            "demolitionEngineeringProblems": demolitionEngineeringProblems,
+                            "otherProblem": otherProblem,
+                            "comment": window.encodeURI(message)
+                        },
+                        function (data) {
+                            if (data.success) {
+                                jp.success(data.msg);
+                                jp.go("${ctx}/act/task/todo")
+                            }
+                        }
+                    )
+                })
+            });
+
+        });
+    </script>
+</head>
+<body class="bg-white">
+<div class="wrapper wrapper-content">
+    <div class="row">
+        <div class="col-md-12">
+            <div class="panel panel-primary">
+                <div class="panel-heading">
+                    <h3 class="panel-title">
+                        <h3 class="panel-title">技经人员审预算</h3>
+                    </h3>
+                </div>
+                <div class="panel-body">
+                    <form:form id="inputForm" modelAttribute="reserveProcess" class="form-horizontal">
+                        <form:hidden path="id"/>
+                        <form:hidden path="act.taskId"/>
+                        <form:hidden path="act.taskName"/>
+                        <form:hidden path="act.taskDefKey"/>
+                        <form:hidden path="act.procInsId"/>
+                        <form:hidden path="act.procDefId"/>
+                        <form:hidden id="flag" path="act.flag"/>
+                        <table class="table table-bordered">
+                            <tbody>
+                            <tr>
+                                <td colspan="4" class="width-15 active"><label class="">储备项目基本信息:</label></td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">项目年份:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.projectYear" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                                <td class="width-15 active"><label class="">项目性质:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.projectNature" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">需求单位:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.demandUnit" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                                <td class="width-15 active"><label class="">区域:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.district" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">项目分组:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.projectGroup" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                                <td class="width-15 active"><label class="">储备批次:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.reserveBatches" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">供电区域:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.blockSupply" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                                <td class="width-15 active"><label class="">网格编号:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.gridNumber" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">单元格编号:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.cellNumber" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                                <td class="width-15 active"><label class="">项目储备编号:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.projectReserveId" htmlEscape="false"
+                                                readonly="true" class="form-control"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">项目储备编号:</label></td>
+                                <td class="width-35">
+                                    <form:input path="projectReserveId" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                                <td class="width-15 active"><label class="">项目名称:</label></td>
+                                <td class="width-35">
+                                    <form:input path="projectName" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">建设必要性及内容:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.constructionNecessityAndContent" htmlEscape="false"
+                                                readonly="true" class="form-control"/>
+                                </td>
+                                <td class="width-15 active"><label class="">变电站名称:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.substationName" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">线路名称:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.circuitName" htmlEscape="false" readonly="true"
+                                                class="form-control"/>
+                                </td>
+                                <td class="width-15 active"><label class="">网架项目划分:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.netRackProjectDivide" htmlEscape="false"
+                                                readonly="true" class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">需求类型:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.requirementType" htmlEscape="false" readonly="true"
+                                                class="form-control number money"/>
+                                </td>
+                                <td class="width-15 active"><label class="">费用估算:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.costEstimate" htmlEscape="false" readonly="true"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">备注:</label></td>
+                                <td class="width-35">
+                                    <form:input path="reserveSummary.basicRemarks" htmlEscape="false" readonly="true"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td colspan="4" class="width-15 active"><label class="">预算书审前审后数据:</label></td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">审前概算(含税):</label></td>
+                                <td class="width-35">
+                                    <form:input path="pretrialBudgetTaxInclude" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                                <td class="width-15 active"><label class="">审前概算(不含税):</label></td>
+                                <td class="width-35">
+                                    <form:input path="pretrialBudgetTaxNoInclude" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">审前监理费(不含税):</label></td>
+                                <td class="width-35">
+                                    <form:input path="pretrialSupervisionFeeTaxNoInclude" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                                <td class="width-15 active"><label class="">审前设计费(不含税):</label></td>
+                                <td class="width-35">
+                                    <form:input path="pretrialDesignFeeTaxNoInclude" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">审后概算(含税):</label></td>
+                                <td class="width-35">
+                                    <form:input path="afterTrialBudgetTaxInclude" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                                <td class="width-15 active"><label class="">审后概算(不含税):</label></td>
+                                <td class="width-35">
+                                    <form:input path="afterTrialBudgetTaxNoInclude" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">审后监理费(不含税):</label></td>
+                                <td class="width-35">
+                                    <form:input path="afterTrialSupervisionFeeTaxNoInclude"
+                                                htmlEscape="false" class="form-control number money"/>
+                                </td>
+                                <td class="width-15 active"><label class="">审后设计费(不含税):</label></td>
+                                <td class="width-35">
+                                    <form:input path="afterTrialDesignFeeTaxNoInclude" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td colspan="4" class="width-15 active"><label class="">预算问题反馈记录:</label></td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">甲供材优选情况:</label></td>
+                                <td class="width-35">
+                                    <form:input path="preferedCase" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                                <td class="width-15 active"><label class="">甲供转乙供情况:</label></td>
+                                <td class="width-35">
+                                    <form:input path="transferSituation" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">预算模板核对:</label></td>
+                                <td class="width-35">
+                                    <form:input path="budgetTemplateCheck" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                                <td class="width-15 active"><label class="">定额套用核对:</label></td>
+                                <td class="width-35">
+                                    <form:input path="quotaApplicationCheck" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">工作流核对:</label></td>
+                                <td class="width-35">
+                                    <form:input path="workLoadCheck" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                                <td class="width-15 active"><label class="">取费核对:</label></td>
+                                <td class="width-35">
+                                    <form:input path="checkTheFee" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">甲供物资核对:</label></td>
+                                <td class="width-35">
+                                    <form:input path="supplyCheck" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                                <td class="width-15 active"><label class="">乙供物资核对:</label></td>
+                                <td class="width-35">
+                                    <form:input path="materialCheck" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">带电作业费核对:</label></td>
+                                <td class="width-35">
+                                    <form:input path="liveWorkFeeCheck" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                                <td class="width-15 active"><label class="">拆除工程问题:</label></td>
+                                <td class="width-35">
+                                    <form:input path="demolitionEngineeringProblems" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="width-15 active"><label class="">其他问题:</label></td>
+                                <td class="width-35">
+                                    <form:input path="otherProblem" htmlEscape="false"
+                                                class="form-control number money"/>
+                                </td>
+                            </tr>
+
+                            </tbody>
+                        </table>
+                    </form:form>
+
+                    <div class="row">
+                        <div class="col-sm-3"></div>
+                        <div class="col-sm-6">
+                            <div class="form-group text-center">
+                                <input id="agree" class="btn  btn-primary btn-lg btn-parsley" type="submit" value="通过"/>&nbsp;
+                                <input id="no" class="btn  btn-danger btn-lg btn-parsley" type="submit" value="不通过"/>
+                            </div>
+                        </div>
+                    </div>
+
+                    <c:if test="${not empty reserveProcess.id}">
+                        <act:flowChart procInsId="${reserveProcess.act.procInsId}"/>
+                        <act:histoicFlow procInsId="${reserveProcess.act.procInsId}"/>
+                    </c:if>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+</body>
+</html>

+ 305 - 0
src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/designUnit.jsp

@@ -0,0 +1,305 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>设计单位上传施工图</title>
+	<meta name="decorator" content="ani"/>
+<%--	<%@include file="/webpage/modules/bpm/task/history/taskHistoricList.js" %>--%>
+	<script type="text/javascript">
+
+		$(document).ready(function() {
+			$('#disclosureFinishDate').datetimepicker({
+				format: "YYYY-MM-DD"
+			});
+
+			$("#agree").click(function () {
+				jp.prompt("通过", function (message) {
+					// var budgetStatement = $("input[name='budgetStatement']").val();
+					// var projectProposal = $("input[name='projectProposal']").val();
+					var drawings = $("input[name='drawings']").val();
+					// var drawingSpecification = $("input[name='drawingSpecification']").val();
+					var projectReserveId = $("#projectReserveId").val();
+					var projectName = $("#projectName").val();
+					// console.log(budgetStatement)
+					// console.log(projectProposal)
+					console.log(drawings)
+					// console.log(drawingSpecification)
+
+					if (drawings == ""
+							|| drawings == undefined
+							|| drawings == 'undefined') {
+						jp.error("不能为空");
+					} else {
+						jp.post("${ctx}/cg/reservemanagementcenter/process/actDesignUnit",
+								{
+									"taskId": "${reserveProcess.act.taskId}",
+									"taskName": "${reserveProcess.act.taskName}",
+									"taskDefKey": "${reserveProcess.act.taskDefKey}",
+									"procInsId": "${reserveProcess.act.procInsId}",
+									"procDefId": "${reserveProcess.act.procDefId}",
+									"flag": "yes",
+									"projectReserveId":projectReserveId,
+									"projectName":projectName,
+									"drawings":drawings,
+									"comment": window.encodeURI(message)
+								},
+								function (data) {
+									if (data.success) {
+										jp.success(data.msg);
+										jp.go("${ctx}/act/task/todo");
+									} else {
+										jp.error(data.msg);
+									}
+								}
+						);
+					}
+
+
+				})
+			});
+			$("#no").click(function () {
+				jp.prompt("取消流程", function (message) {
+					var projectReserveId = $("#projectReserveId").val();
+					jp.post("${ctx}/cg/reservemanagementcenter/process/actDesignUnit",{
+								"taskId": "${reserveProcess.act.taskId}",
+								"taskName": "${reserveProcess.act.taskName}",
+								"taskDefKey": "${reserveProcess.act.taskDefKey}",
+								"procInsId": "${reserveProcess.act.procInsId}",
+								"procDefId": "${reserveProcess.act.procDefId}",
+								"flag": "no",
+								"projectReserveId":projectReserveId,
+								"comment": window.encodeURI(message)
+							},
+							function (data) {
+								if (data.success) {
+									jp.success(data.msg);
+									jp.go("${ctx}/act/task/todo")
+								}
+							}
+					)
+				})
+			});
+
+			$("#moreImport").click(function(){
+				jp.open({
+					type: 2,
+					area: [800, 400],
+					auto: true,
+					title:"导入数据",
+					content: "${ctx}/managementcenter/materialinfo/importMore/Process",
+					btn: ['确定', '关闭'],
+					btn1: function(index, layero){
+						var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+						iframeWin.contentWindow.importExcel('${ctx}/cg/reservemanagementcenter/process/importCGValidations', function (data) {
+							if(data.success){
+								jp.success(data.msg);
+								jp.close(index);
+							}else{
+								jp.error(data.msg);
+							}
+						});//调用保存事件
+						return false;
+					},
+
+					btn2: function(index){
+						jp.close(index);
+					}
+				});
+			});
+			$("#onLine").click(function(){
+				var projectName = $("#projectName").val();
+				var projectReserveId = $("#projectReserveId").val();
+				jp.open({
+					type: 2,
+					area: [1000, 600],
+					auto: true,
+					title:"在线开甲供材",
+					content: "${ctx}/raiseCapital/jgcList?projectReserveId=" + projectReserveId +"&projectName=" + projectName ,
+					btn: ['确定', '关闭'],
+					btn1: function(index, layero){
+						var body = top.layer.getChildFrame('body', index);
+						var materialCode = body.find('#materialCode');
+
+
+						jp.post("${ctx}/cg/reservemanagementcenter/process/saveJgc?materialCode=" + materialCode,informationTable.serialize(),function(data){
+							alert(data.msg);
+							console.log("测试")
+						});
+						console.log(informationTable)
+						// var inputForm = body.find('#inputForm');
+						jp.close(index);
+					},
+
+
+					btn2: function(index){
+						jp.close(index);
+					}
+				});
+			});
+
+		});
+	</script>
+</head>
+<body class="bg-white">
+	<div class="wrapper wrapper-content">
+		<div class="row">
+			<div class="col-md-12">
+				<div class="panel panel-primary">
+					<div class="panel-heading">
+						<h3 class="panel-title">
+							<h3 class="panel-title">设计单位上传施工图</h3>
+						</h3>
+					</div>
+					<div class="panel-body">
+						<form:form id="inputForm" modelAttribute="reserveProcess" class="form-horizontal">
+							<form:hidden path="id"/>
+							<form:hidden path="act.taskId"/>
+							<form:hidden path="act.taskName"/>
+							<form:hidden path="act.taskDefKey"/>
+							<form:hidden path="act.procInsId"/>
+							<form:hidden path="act.procDefId"/>
+							<form:hidden id="flag" path="act.flag"/>
+							<table class="table table-bordered">
+								<tbody>
+								<tr>
+									<td colspan="4" class="width-15 active"><label class="">储备项目基本信息:</label></td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目年份:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectYear" htmlEscape="false" readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目性质:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectNature" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">需求单位:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.demandUnit" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">区域:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.district" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目分组:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectGroup" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">储备批次:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.reserveBatches" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">供电区域:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.blockSupply" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">网格编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.gridNumber" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">单元格编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.cellNumber" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目储备编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectReserveId" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目储备编号:</label></td>
+									<td class="width-35">
+										<form:input path="projectReserveId" htmlEscape="false"  readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目名称:</label></td>
+									<td class="width-35">
+										<form:input path="projectName" htmlEscape="false"  readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">建设必要性及内容:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.constructionNecessityAndContent" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">变电站名称:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.substationName" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">线路名称:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.circuitName" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">网架项目划分:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.netRackProjectDivide" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">需求类型:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.requirementType" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+									<td class="width-15 active"><label class="">费用估算:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.costEstimate" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">备注:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.basicRemarks" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td colspan="4" class="width-15 active"><label class="">设计资料:</label></td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">施工图纸:</label></td>
+									<td class="width-35">
+										<sys:fileUpload path="drawings"  value="${reserveProcess.drawings}" type="*" uploadPath="/personnelTurnover"  readonly="false"/>
+									</td>
+									<td class="width-15 active"><label class="">甲供材清册:</label></td>
+									<td class="width-35">
+										<a id="moreImport" class="btn btn-info">
+											<i class="fa fa-file-excel-o"></i> 多文件导入
+										</a>
+										<a id="onLine" class="btn btn-info">
+											<i class="fa fa-file-excel-o"></i> 在线开甲供材
+										</a>
+									</td>
+								</tr>
+								</tbody>
+							</table>
+						</form:form>
+
+						<div class="row">
+							<div class="col-sm-3"></div>
+							<div class="col-sm-6">
+								<div class="form-group text-center">
+									<input id="agree" class="btn  btn-primary btn-lg btn-parsley" type="submit" value="通过"/>&nbsp;
+<%--									<input id="no" class="btn  btn-danger btn-lg btn-parsley" type="submit" value="取消流程"/>--%>
+								</div>
+							</div>
+						</div>
+
+						<c:if test="${not empty reserveProcess.id}">
+							<act:flowChart procInsId="${reserveProcess.act.procInsId}"/>
+							<act:histoicFlow procInsId="${reserveProcess.act.procInsId}" />
+						</c:if>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</body>
+</html>

+ 327 - 0
src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/designUnitAgain.jsp

@@ -0,0 +1,327 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>设计单位上传预算书</title>
+	<meta name="decorator" content="ani"/>
+	<script type="text/javascript">
+
+		$(document).ready(function() {
+			$('#disclosureFinishDate').datetimepicker({
+				format: "YYYY-MM-DD"
+			});
+
+			$("#agree").click(function () {
+				jp.prompt("通过", function (message) {
+					var budgetStatement = $("input[name='budgetStatement']").val();
+					var projectProposal = $("input[name='projectProposal']").val();
+					var drawings = $("input[name='drawings']").val();
+					var demolition = $("input[name='demolition']").val();
+					var drawingSpecification = $("input[name='drawingSpecification']").val();
+					var projectReserveId = $("#projectReserveId").val();
+					var projectName = $("#projectName").val();
+					console.log(drawings)
+
+					if (drawings == ""
+							|| drawings == undefined
+							|| drawings == 'undefined'
+							|| budgetStatement == ""
+							|| budgetStatement == undefined
+							|| budgetStatement == 'undefined'
+							|| projectProposal == ""
+							|| projectProposal == undefined
+							|| projectProposal == 'undefined'
+							|| demolition == ""
+							|| demolition == undefined
+							|| demolition == 'undefined'
+							|| drawingSpecification == ""
+							|| drawingSpecification == undefined
+							|| drawingSpecification == 'undefined') {
+						jp.error("不能为空");
+					} else {
+						jp.post("${ctx}/cg/reservemanagementcenter/process/actDesignUnit",
+								{
+									"taskId": "${reserveProcess.act.taskId}",
+									"taskName": "${reserveProcess.act.taskName}",
+									"taskDefKey": "${reserveProcess.act.taskDefKey}",
+									"procInsId": "${reserveProcess.act.procInsId}",
+									"procDefId": "${reserveProcess.act.procDefId}",
+									"flag": "yes",
+									"projectReserveId":projectReserveId,
+									"projectName":projectName,
+									"drawings":drawings,
+									"projectProposal":projectProposal,
+									"drawingSpecification":drawingSpecification,
+									"budgetStatement":budgetStatement,
+									"demolition":demolition,
+									"comment": window.encodeURI(message)
+								},
+								function (data) {
+									if (data.success) {
+										jp.success(data.msg);
+										jp.go("${ctx}/act/task/todo");
+									} else {
+										jp.error(data.msg);
+									}
+								}
+						);
+					}
+
+
+				})
+			});
+			$("#no").click(function () {
+				jp.prompt("取消流程", function (message) {
+					var projectReserveId = $("#projectReserveId").val();
+					jp.post("${ctx}/cg/reservemanagementcenter/process/actDesignUnit",{
+								"taskId": "${reserveProcess.act.taskId}",
+								"taskName": "${reserveProcess.act.taskName}",
+								"taskDefKey": "${reserveProcess.act.taskDefKey}",
+								"procInsId": "${reserveProcess.act.procInsId}",
+								"procDefId": "${reserveProcess.act.procDefId}",
+								"flag": "no",
+								"projectReserveId":projectReserveId,
+								"comment": window.encodeURI(message)
+							},
+							function (data) {
+								if (data.success) {
+									jp.success(data.msg);
+									jp.go("${ctx}/act/task/todo")
+								}
+							}
+					)
+				})
+			});
+
+			/*$("#moreImport").click(function(){
+				jp.open({
+					type: 2,
+					area: [800, 400],
+					auto: true,
+					title:"导入数据",
+					content: "${ctx}/managementcenter/materialinfo/importMore/Process" ,
+					btn: ['确定', '关闭'],
+					btn1: function(index, layero){
+						var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+						iframeWin.contentWindow.importExcel('${ctx}/cg/reservemanagementcenter/process/importCGValidations', function (data) {
+							if(data.success){
+								jp.success(data.msg);
+								jp.close(index);
+							}else{
+								jp.error(data.msg);
+							}
+						});//调用保存事件
+						return false;
+					},
+
+					btn2: function(index){
+						jp.close(index);
+					}
+				});
+			});
+			$("#onLine").click(function(){
+				jp.open({
+					type: 2,
+					area: [1000, 600],
+					auto: true,
+					title:"在线开甲供材",
+					content: "${ctx}/raiseCapital/list" ,
+					btn: ['确定', '关闭'],
+					btn1: function(index, layero){
+						var body = top.layer.getChildFrame('body',index);
+						var inputForm = body.find('#informationTable');
+						console.log('测试')
+						console.log(inputForm)
+					},
+
+					btn2: function(index){
+						jp.close(index);
+					}
+				});
+			});*/
+
+		});
+	</script>
+</head>
+<body class="bg-white">
+	<div class="wrapper wrapper-content">
+		<div class="row">
+			<div class="col-md-12">
+				<div class="panel panel-primary">
+					<div class="panel-heading">
+						<h3 class="panel-title">
+							<h3 class="panel-title">设计单位上传预算书</h3>
+						</h3>
+					</div>
+					<div class="panel-body">
+						<form:form id="inputForm" modelAttribute="reserveProcess" class="form-horizontal">
+							<form:hidden path="id"/>
+							<form:hidden path="act.taskId"/>
+							<form:hidden path="act.taskName"/>
+							<form:hidden path="act.taskDefKey"/>
+							<form:hidden path="act.procInsId"/>
+							<form:hidden path="act.procDefId"/>
+							<form:hidden id="flag" path="act.flag"/>
+							<table class="table table-bordered">
+								<tbody>
+								<tr>
+									<td colspan="4" class="width-15 active"><label class="">储备项目基本信息:</label></td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目年份:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectYear" htmlEscape="false" readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目性质:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectNature" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">需求单位:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.demandUnit" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">区域:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.district" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目分组:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectGroup" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">储备批次:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.reserveBatches" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">供电区域:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.blockSupply" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">网格编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.gridNumber" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">单元格编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.cellNumber" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目储备编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectReserveId" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目储备编号:</label></td>
+									<td class="width-35">
+										<form:input path="projectReserveId" htmlEscape="false"  readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目名称:</label></td>
+									<td class="width-35">
+										<form:input path="projectName" htmlEscape="false"  readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">建设必要性及内容:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.constructionNecessityAndContent" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">变电站名称:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.substationName" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">线路名称:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.circuitName" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">网架项目划分:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.netRackProjectDivide" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">需求类型:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.requirementType" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+									<td class="width-15 active"><label class="">费用估算:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.costEstimate" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">备注:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.basicRemarks" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td colspan="4" class="width-15 active"><label class="">设计资料:</label></td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">预算书:</label></td>
+									<td class="width-35">
+										<sys:fileUpload path="budgetStatement"  value="${reserveProcess.budgetStatement}" type="*" uploadPath="/personnelTurnover"  readonly="false"/>
+									</td>
+									<td class="width-15 active"><label class="">项目建议书:</label></td>
+									<td class="width-35">
+										<sys:fileUpload path="projectProposal"  value="${reserveProcess.projectProposal}" type="*" uploadPath="/personnelTurnover"  readonly="false"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">施工图纸:</label></td>
+									<td class="width-35">
+										<sys:fileUpload path="drawings"  value="${reserveProcess.drawings}" type="*" uploadPath="/personnelTurnover"  readonly="true"/>
+									</td>
+									<td class="width-15 active"><label class="">施工图设计说明书:</label></td>
+									<td class="width-35">
+										<sys:fileUpload path="drawingSpecification"  value="${reserveProcess.drawingSpecification}" type="*" uploadPath="/personnelTurnover"  readonly="false"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">甲供材清册:</label></td>
+									<td class="width-35">
+										<a id="moreImport" class="btn btn-info">
+											<i class="fa fa-file-excel-o"></i> 多文件导入
+										</a>
+										<a id="onLine" class="btn btn-info">
+											<i class="fa fa-file-excel-o"></i> 在线开甲供材
+										</a>
+									</td>
+									<td class="width-15 active"><label class="">拆旧清册:</label></td>
+									<td class="width-35">
+										<sys:fileUpload path="demolition"  value="${reserveProcess.demolition}" type="*" uploadPath="/personnelTurnover"  readonly="false"/>
+									</td>
+								</tr>
+								</tbody>
+							</table>
+						</form:form>
+
+						<div class="row">
+							<div class="col-sm-3"></div>
+							<div class="col-sm-6">
+								<div class="form-group text-center">
+									<input id="agree" class="btn  btn-primary btn-lg btn-parsley" type="submit" value="通过"/>&nbsp;
+								</div>
+							</div>
+						</div>
+
+						<c:if test="${not empty reserveProcess.id}">
+							<act:flowChart procInsId="${reserveProcess.act.procInsId}"/>
+							<act:histoicFlow procInsId="${reserveProcess.act.procInsId}" />
+						</c:if>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</body>
+</html>

+ 347 - 0
src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/designUnitAgainTwo.jsp

@@ -0,0 +1,347 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>设计单位上传预算书</title>
+	<meta name="decorator" content="ani"/>
+	<script type="text/javascript">
+
+		$(document).ready(function() {
+			$('#disclosureFinishDate').datetimepicker({
+				format: "YYYY-MM-DD"
+			});
+
+			$("#agree").click(function () {
+				jp.prompt("通过", function (message) {
+					var budgetStatement = $("input[name='budgetStatement']").val();
+					var projectProposal = $("input[name='projectProposal']").val();
+					var drawings = $("input[name='drawings']").val();
+					var demolition = $("input[name='demolition']").val();
+					var drawingSpecification = $("input[name='drawingSpecification']").val();
+					var projectReserveId = $("#projectReserveId").val();
+					var projectName = $("#projectName").val();
+					console.log(drawings)
+
+					if (drawings == ""
+							|| drawings == undefined
+							|| drawings == 'undefined'
+							|| budgetStatement == ""
+							|| budgetStatement == undefined
+							|| budgetStatement == 'undefined'
+							|| projectProposal == ""
+							|| projectProposal == undefined
+							|| projectProposal == 'undefined'
+							|| demolition == ""
+							|| demolition == undefined
+							|| demolition == 'undefined'
+							|| drawingSpecification == ""
+							|| drawingSpecification == undefined
+							|| drawingSpecification == 'undefined') {
+						jp.error("不能为空");
+					} else {
+						jp.post("${ctx}/cg/reservemanagementcenter/process/actDesignUnit",
+								{
+									"taskId": "${reserveProcess.act.taskId}",
+									"taskName": "${reserveProcess.act.taskName}",
+									"taskDefKey": "${reserveProcess.act.taskDefKey}",
+									"procInsId": "${reserveProcess.act.procInsId}",
+									"procDefId": "${reserveProcess.act.procDefId}",
+									"flag": "yes",
+									"projectReserveId":projectReserveId,
+									"projectName":projectName,
+									"drawings":drawings,
+									"demolition":demolition,
+									"comment": window.encodeURI(message)
+								},
+								function (data) {
+									if (data.success) {
+										jp.success(data.msg);
+										jp.go("${ctx}/act/task/todo");
+									} else {
+										jp.error(data.msg);
+									}
+								}
+						);
+					}
+
+
+				})
+			});
+			$("#no").click(function () {
+				jp.prompt("取消流程", function (message) {
+					var projectReserveId = $("#projectReserveId").val();
+					jp.post("${ctx}/cg/reservemanagementcenter/process/actDesignUnit",{
+								"taskId": "${reserveProcess.act.taskId}",
+								"taskName": "${reserveProcess.act.taskName}",
+								"taskDefKey": "${reserveProcess.act.taskDefKey}",
+								"procInsId": "${reserveProcess.act.procInsId}",
+								"procDefId": "${reserveProcess.act.procDefId}",
+								"flag": "no",
+								"projectReserveId":projectReserveId,
+								"comment": window.encodeURI(message)
+							},
+							function (data) {
+								if (data.success) {
+									jp.success(data.msg);
+									jp.go("${ctx}/act/task/todo")
+								}
+							}
+					)
+				})
+			});
+
+		});
+	</script>
+</head>
+<body class="bg-white">
+	<div class="wrapper wrapper-content">
+		<div class="row">
+			<div class="col-md-12">
+				<div class="panel panel-primary">
+					<div class="panel-heading">
+						<h3 class="panel-title">
+							<h3 class="panel-title">设计单位上传预算书</h3>
+						</h3>
+					</div>
+					<div class="panel-body">
+						<form:form id="inputForm" modelAttribute="reserveProcess" class="form-horizontal">
+							<form:hidden path="id"/>
+							<form:hidden path="act.taskId"/>
+							<form:hidden path="act.taskName"/>
+							<form:hidden path="act.taskDefKey"/>
+							<form:hidden path="act.procInsId"/>
+							<form:hidden path="act.procDefId"/>
+							<form:hidden id="flag" path="act.flag"/>
+							<table class="table table-bordered">
+								<tbody>
+								<tr>
+									<td colspan="4" class="width-15 active"><label class="">储备项目基本信息:</label></td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目年份:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectYear" htmlEscape="false" readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目性质:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectNature" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">需求单位:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.demandUnit" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">区域:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.district" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目分组:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectGroup" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">储备批次:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.reserveBatches" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">供电区域:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.blockSupply" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">网格编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.gridNumber" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">单元格编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.cellNumber" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目储备编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectReserveId" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目储备编号:</label></td>
+									<td class="width-35">
+										<form:input path="projectReserveId" htmlEscape="false"  readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目名称:</label></td>
+									<td class="width-35">
+										<form:input path="projectName" htmlEscape="false"  readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">建设必要性及内容:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.constructionNecessityAndContent" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">变电站名称:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.substationName" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">线路名称:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.circuitName" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">网架项目划分:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.netRackProjectDivide" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">需求类型:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.requirementType" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+									<td class="width-15 active"><label class="">费用估算:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.costEstimate" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">备注:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.basicRemarks" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td colspan="4" class="width-15 active"><label class="">设计资料:</label></td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">预算书:</label></td>
+									<td class="width-35">
+										<sys:fileUpload path="budgetStatement"  value="${reserveProcess.budgetStatement}" type="*" uploadPath="/personnelTurnover"  readonly="false"/>
+									</td>
+									<td class="width-15 active"><label class="">项目建议书:</label></td>
+									<td class="width-35">
+										<sys:fileUpload path="projectProposal"  value="${reserveProcess.projectProposal}" type="*" uploadPath="/personnelTurnover"  readonly="false"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">施工图纸:</label></td>
+									<td class="width-35">
+										<sys:fileUpload path="drawings"  value="${reserveProcess.drawings}" type="*" uploadPath="/personnelTurnover"  readonly="true"/>
+									</td>
+									<td class="width-15 active"><label class="">施工图设计说明书:</label></td>
+									<td class="width-35">
+										<sys:fileUpload path="drawingSpecification"  value="${reserveProcess.drawingSpecification}" type="*" uploadPath="/personnelTurnover"  readonly="false"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">甲供材清册:</label></td>
+									<td class="width-35">
+										<a id="moreImport" class="btn btn-info">
+											<i class="fa fa-file-excel-o"></i> 多文件导入
+										</a>
+										<a id="onLine" class="btn btn-info">
+											<i class="fa fa-file-excel-o"></i> 在线开甲供材
+										</a>
+									</td>
+									<td class="width-15 active"><label class="">拆旧清册:</label></td>
+									<td class="width-35">
+										<sys:fileUpload path="demolition"  value="${reserveProcess.demolition}" type="*" uploadPath="/personnelTurnover"  readonly="false"/>
+									</td>
+								</tr>
+								<tr>
+									<td colspan="4" class="width-15 active"><label class="">预算问题反馈记录:</label></td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">甲供材优选情况:</label></td>
+									<td class="width-35">
+										<form:input path="preferedCase" htmlEscape="false"
+													class="form-control number money" readonly="true"/>
+									</td>
+									<td class="width-15 active"><label class="">甲供转乙供情况:</label></td>
+									<td class="width-35">
+										<form:input path="transferSituation" htmlEscape="false"
+													class="form-control number money" readonly="true"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">预算模板核对:</label></td>
+									<td class="width-35">
+										<form:input path="budgetTemplateCheck" htmlEscape="false"
+													class="form-control number money" readonly="true"/>
+									</td>
+									<td class="width-15 active"><label class="">定额套用核对:</label></td>
+									<td class="width-35">
+										<form:input path="quotaApplicationCheck" htmlEscape="false"
+													class="form-control number money" readonly="true"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">工作流核对:</label></td>
+									<td class="width-35">
+										<form:input path="workLoadCheck" htmlEscape="false"
+													class="form-control number money" readonly="true"/>
+									</td>
+									<td class="width-15 active"><label class="">取费核对:</label></td>
+									<td class="width-35">
+										<form:input path="checkTheFee" htmlEscape="false"
+													class="form-control number money" readonly="true"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">甲供物资核对:</label></td>
+									<td class="width-35">
+										<form:input path="supplyCheck" htmlEscape="false"
+													class="form-control number money" readonly="true"/>
+									</td>
+									<td class="width-15 active"><label class="">乙供物资核对:</label></td>
+									<td class="width-35">
+										<form:input path="materialCheck" htmlEscape="false"
+													class="form-control number money" readonly="true"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">带电作业费核对:</label></td>
+									<td class="width-35">
+										<form:input path="liveWorkFeeCheck" htmlEscape="false"
+													class="form-control number money" readonly="true"/>
+									</td>
+									<td class="width-15 active"><label class="">拆除工程问题:</label></td>
+									<td class="width-35">
+										<form:input path="demolitionEngineeringProblems" htmlEscape="false"
+													class="form-control number money" readonly="true"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">其他问题:</label></td>
+									<td class="width-35">
+										<form:input path="otherProblem" htmlEscape="false"
+													class="form-control number money" readonly="true"/>
+									</td>
+								</tr>
+								</tbody>
+							</table>
+						</form:form>
+
+						<div class="row">
+							<div class="col-sm-3"></div>
+							<div class="col-sm-6">
+								<div class="form-group text-center">
+									<input id="agree" class="btn  btn-primary btn-lg btn-parsley" type="submit" value="通过"/>&nbsp;
+								</div>
+							</div>
+						</div>
+
+						<c:if test="${not empty reserveProcess.id}">
+							<act:flowChart procInsId="${reserveProcess.act.procInsId}"/>
+							<act:histoicFlow procInsId="${reserveProcess.act.procInsId}" />
+						</c:if>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</body>
+</html>

+ 337 - 0
src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/drawingReview.js

@@ -0,0 +1,337 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script>
+$(document).ready(function() {
+	$('#testPicTable').bootstrapTable({
+		  //请求方法
+               method: 'post',
+               //类型json
+               dataType: "json",
+               contentType: "application/x-www-form-urlencoded",
+               //显示检索按钮
+	           showSearch: false,
+               //显示刷新按钮
+               showRefresh: false,
+               //显示切换手机试图按钮
+               showToggle: false,
+               //显示 内容列下拉框
+    	       showColumns: false,
+    	       //显示到处按钮
+    	       showExport: false,
+    	       //显示切换分页按钮
+    	       showPaginationSwitch: false,
+    	       //最低显示2行
+    	       minimumCountColumns: 2,
+               //是否显示行间隔色
+               striped: true,
+               //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
+               cache: false,
+               //是否显示分页(*)
+               pagination: true,
+                //排序方式
+               sortOrder: "asc",
+               //初始化加载第一页,默认第一页
+               pageNumber:1,
+               //每页的记录行数(*)
+               pageSize: 10,
+               //可供选择的每页的行数(*)
+               pageList: [10, 25, 50, 100],
+               //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+               url: "${ctx}/cg/reservemanagementcenter/process/allUploadData",
+               //默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
+               //queryParamsType:'',
+               ////查询参数,每次调用是会带上这个参数,可自定义
+               queryParams : function(params) {
+			   	var searchParam = $("#inputForm").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){
+               },
+               onClickRow: function(row, $el){
+               },
+               	onShowSearch: function () {
+
+				},
+               columns: [
+				   {
+					   field: 'budgetStatement',
+					   title: '预算书',
+					   formatter:function(value, row , index){
+					   	if (value){
+							var valueArray = value.split("|");
+							var labelArray = [];
+							for(var i =0 ; i<valueArray.length; i++){
+								if(!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(valueArray[i]))
+								{
+									labelArray[i] = "<a href=\""+valueArray[i]+"\" url=\""+valueArray[i]+"\" target=\"_blank\">"+decodeURIComponent(valueArray[i].substring(valueArray[i].lastIndexOf("/")+1))+"</a>"
+								}else{
+									labelArray[i] = '<img   onclick="jp.showPic(\''+valueArray[i]+'\')"'+' height="50px" src="'+valueArray[i]+'">';
+								}
+							}
+							return labelArray.join(" ");
+						}
+					   }
+				   }, {
+					   field: 'projectProposal',
+					   title: '项目建议书',
+					   formatter:function(value, row , index){
+						   if (value){
+							   var valueArray = value.split("|");
+							   var labelArray = [];
+							   for(var i =0 ; i<valueArray.length; i++){
+								   if(!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(valueArray[i]))
+								   {
+									   labelArray[i] = "<a href=\""+valueArray[i]+"\" url=\""+valueArray[i]+"\" target=\"_blank\">"+decodeURIComponent(valueArray[i].substring(valueArray[i].lastIndexOf("/")+1))+"</a>"
+								   }else{
+									   labelArray[i] = '<img   onclick="jp.showPic(\''+valueArray[i]+'\')"'+' height="50px" src="'+valueArray[i]+'">';
+								   }
+							   }
+							   return labelArray.join(" ");
+						   }
+					   }
+
+				   }, {
+					   field: 'drawings',
+					   title: '图纸',
+					   formatter:function(value, row , index){
+						   if (value){
+							   var valueArray = value.split("|");
+							   var labelArray = [];
+							   for(var i =0 ; i<valueArray.length; i++){
+								   if(!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(valueArray[i]))
+								   {
+									   labelArray[i] = "<a href=\""+valueArray[i]+"\" url=\""+valueArray[i]+"\" target=\"_blank\">"+decodeURIComponent(valueArray[i].substring(valueArray[i].lastIndexOf("/")+1))+"</a>"
+								   }else{
+									   labelArray[i] = '<img   onclick="jp.showPic(\''+valueArray[i]+'\')"'+' height="50px" src="'+valueArray[i]+'">';
+								   }
+							   }
+							   return labelArray.join(" ");
+						   }
+					   }
+
+				   }, {
+					   field: 'drawingSpecification',
+					   title: '施工图设计说明书',
+					   formatter:function(value, row , index){
+						   console.log(value);
+						   if (value){
+							   var valueArray = value.split("|");
+							   var labelArray = [];
+							   for(var i =0 ; i<valueArray.length; i++){
+								   if(!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(valueArray[i]))
+								   {
+									   labelArray[i] = "<a href=\""+valueArray[i]+"\" url=\""+valueArray[i]+"\" target=\"_blank\">"+decodeURIComponent(valueArray[i].substring(valueArray[i].lastIndexOf("/")+1))+"</a>"
+								   }else{
+									   labelArray[i] = '<img   onclick="jp.showPic(\''+valueArray[i]+'\')"'+' height="50px" src="'+valueArray[i]+'">';
+								   }
+							   }
+							   return labelArray.join(" ");
+						   }
+					   }
+				   }
+			   ]
+		});
+
+	$('#dataTable').bootstrapTable({
+		//请求方法
+		method: 'post',
+		//类型json
+		dataType: "json",
+		contentType: "application/x-www-form-urlencoded",
+		//显示检索按钮
+		showSearch: false,
+		//显示刷新按钮
+		showRefresh: true,
+		//显示切换手机试图按钮
+		showToggle: false,
+		//显示 内容列下拉框
+		showColumns: false,
+		//显示到处按钮
+		showExport: false,
+		//显示切换分页按钮
+		showPaginationSwitch: false,
+		//最低显示2行
+		minimumCountColumns: 2,
+		//是否显示行间隔色
+		striped: true,
+		//是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
+		cache: false,
+		//是否显示分页(*)
+		pagination: true,
+		//排序方式
+		sortOrder: "asc",
+		//初始化加载第一页,默认第一页
+		pageNumber:1,
+		//每页的记录行数(*)
+		pageSize: 10,
+		//可供选择的每页的行数(*)
+		pageList: [10, 25, 50, 100],
+		//这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+		url: "${ctx}/cg/reservemanagementcenter/process/materialData",
+		//默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
+		//queryParamsType:'',
+		////查询参数,每次调用是会带上这个参数,可自定义
+		queryParams : function(params) {
+			var searchParam = $("#searchForm").serializeJSON();
+			searchParam.projectName = $("#projectName").val();
+			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){
+		},
+		onClickRow: function(row, $el){
+		},
+		onLoadSuccess: function () {  //加载成功时执行
+		},
+		onShowSearch: function () {
+			$("#search-collapse").slideToggle();
+		},
+		columns: [
+			{
+				field: 'projectName',
+				width:230,
+				title: '项目名称'
+			}
+			,{
+				field: 'materialCode',
+				width:100,
+				title: '物料编码'
+			}
+			,{
+				field: 'materialName',
+				width:200,
+				title: '物料名称'
+			}
+			,{
+				field: 'extendDescription',
+				width:200,
+				title: '扩展描述'
+			}
+			,{
+				field: 'unit',
+				width:60,
+				title: '单位'
+			}
+			,{
+				field: 'totalCount',
+				width:60,
+				title: '总量'
+			}
+			,{
+				field: 'weightKg',
+				width:80,
+				title: '单重/kg'
+			}
+			,{
+				field: 'weightTon',
+				width:80,
+				title: '总重/吨'
+			}
+			,{
+				field: 'supplyType',
+				width:80,
+				title: '甲乙供'
+			}
+		]
+
+	})
+
+
+	  if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端
+
+
+		  $('#testPicTable').bootstrapTable("toggleView");
+		}
+
+	  $('#testPicTable').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+                'check-all.bs.table uncheck-all.bs.table', function () {
+            $('#remove').prop('disabled', ! $('#testPicTable').bootstrapTable('getSelections').length);
+            $('#view,#edit').prop('disabled', $('#testPicTable').bootstrapTable('getSelections').length!=1);
+        });
+
+	$("#export").click(function(){//导出甲供材清册
+		var projectName = $("#projectName").val();
+		jp.downloadFile('${ctx}/cg/reservemanagementcenter/process/exportAct?projectName=' + projectName);
+	});
+
+
+
+	  $("#search").click("click", function() {// 绑定查询按扭
+		  $('#testPicTable').bootstrapTable('refresh');
+		});
+
+	 $("#reset").click("click", function() {// 绑定查询按扭
+		  $("#searchForm  input").val("");
+		  $("#searchForm  select").val("");
+		  $("#searchForm  .select-item").html("");
+		  $('#testPicTable').bootstrapTable('refresh');
+	});
+
+
+
+
+	});
+
+  function getIdSelections() {
+        return $.map($("#testPicTable").bootstrapTable('getSelections'), function (row) {
+            return row.id
+        });
+    }
+
+  function deleteAll(){
+		jp.confirm('确认要删除该图片管理记录吗?', function(){
+			jp.loading();
+			jp.get("${ctx}/managementcenter/upload/delete?ids=" + getIdSelections(), function(data){
+         	  		if(data.success){
+         	  			$('#testPicTable').bootstrapTable('refresh');
+         	  			jp.success(data.msg);
+         	  		}else{
+         	  			jp.error(data.msg);
+         	  		}
+         	  	})
+
+		})
+  }
+
+    //刷新列表
+  function refresh(){
+  	$('#testPicTable').bootstrapTable('refresh');
+  }
+
+   function add(){
+	  jp.openSaveDialog('新增图片管理', "${ctx}/managementcenter/upload/list",'800px', '500px');
+  }
+
+
+
+   function edit(id){//没有权限时,不显示确定按钮
+       if(id == undefined){
+	      id = getIdSelections();
+	}
+	jp.openSaveDialog('编辑图片管理', "${ctx}/managementcenter/upload/imagesForm?id=" + id, '800px', '500px');
+  }
+
+ function view(id){//没有权限时,不显示确定按钮
+      if(id == undefined){
+             id = getIdSelections();
+      }
+        jp.openViewDialog('查看图片管理', "${ctx}/managementcenter/upload/imagesForm?id=" + id, '800px', '500px');
+ }
+
+
+
+</script>

+ 263 - 0
src/main/webapp/webpage/modules/cg/reservemanagementcenter/reserveManage/summaryStatistics/drawingReview.jsp

@@ -0,0 +1,263 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+
+<html>
+<head>
+	<title>联合审图</title>
+	<meta name="decorator" content="ani"/>
+	<%@ include file="/webpage/include/bootstraptable.jsp"%>
+	<%@ include file="/webpage/include/treeview.jsp" %>
+	<%@ include file="drawingReview.js"%>
+	<script type="text/javascript">
+
+		$(document).ready(function() {
+			$('#disclosureFinishDate').datetimepicker({
+				format: "YYYY-MM-DD"
+			});
+
+			$("#agree").click(function () {
+				jp.prompt("通过", function (message) {
+					jp.post("${ctx}/cg/reservemanagementcenter/process/actDrawingReview",
+						{
+							"taskId": "${reserveProcess.act.taskId}",
+							"taskName": "${reserveProcess.act.taskName}",
+							"taskDefKey": "${reserveProcess.act.taskDefKey}",
+							"procInsId": "${reserveProcess.act.procInsId}",
+							"procDefId": "${reserveProcess.act.procDefId}",
+							"flag": "yes",
+							"comment": window.encodeURI(message)
+						},
+						function (data) {
+							if (data.success) {
+								jp.success(data.msg);
+								jp.go("${ctx}/act/task/todo");
+							} else {
+								jp.error(data.msg);
+							}
+						}
+				);
+				})
+			});
+			$("#disagree").click(function () {
+				jp.prompt("不通过", function (message) {
+					jp.post("${ctx}/cg/reservemanagementcenter/process/actDrawingReview",
+						{
+							"taskId": "${reserveProcess.act.taskId}",
+							"taskName": "${reserveProcess.act.taskName}",
+							"taskDefKey": "${reserveProcess.act.taskDefKey}",
+							"procInsId": "${reserveProcess.act.procInsId}",
+							"procDefId": "${reserveProcess.act.procDefId}",
+							"flag": "disagree",
+							"comment": window.encodeURI(message)
+						},
+						function (data) {
+							if (data.success) {
+								jp.success(data.msg);
+								jp.go("${ctx}/act/task/todo")
+							}
+						}
+					)
+				})
+			});
+			$("#cancel").click(function () {
+				jp.prompt("取消", function (message) {
+					jp.post("${ctx}/cg/reservemanagementcenter/process/actDrawingReview",
+							{
+								"taskId": "${reserveProcess.act.taskId}",
+								"taskName": "${reserveProcess.act.taskName}",
+								"taskDefKey": "${reserveProcess.act.taskDefKey}",
+								"procInsId": "${reserveProcess.act.procInsId}",
+								"procDefId": "${reserveProcess.act.procDefId}",
+								"flag": "cancel",
+								"comment": window.encodeURI(message)
+							},
+							function (data) {
+								if (data.success) {
+									jp.success(data.msg);
+									jp.go("${ctx}/act/task/todo")
+								}
+							}
+					)
+				})
+			});
+			$("#pending").click(function () {
+				jp.prompt("待定", function (message) {
+					jp.post("${ctx}/cg/reservemanagementcenter/process/actDrawingReview",
+							{
+								"taskId": "${reserveProcess.act.taskId}",
+								"taskName": "${reserveProcess.act.taskName}",
+								"taskDefKey": "${reserveProcess.act.taskDefKey}",
+								"procInsId": "${reserveProcess.act.procInsId}",
+								"procDefId": "${reserveProcess.act.procDefId}",
+								"flag": "pending",
+								"comment": window.encodeURI(message)
+							},
+							function (data) {
+								if (data.success) {
+									jp.success(data.msg);
+									jp.go("${ctx}/act/task/todo")
+								}
+							}
+					)
+				})
+			});
+
+		});
+	</script>
+</head>
+<body class="bg-white">
+	<div class="wrapper wrapper-content">
+		<div class="row">
+			<div class="col-md-12">
+				<div class="panel panel-primary">
+					<div class="panel-heading">
+						<h3 class="panel-title">
+							<h3 class="panel-title">联合审图</h3>
+						</h3>
+					</div>
+					<div class="panel-body">
+						<form:form id="inputForm" modelAttribute="reserveProcess" class="form-horizontal">
+							<form:hidden path="id"/>
+							<form:hidden path="act.taskId"/>
+							<form:hidden path="act.taskName"/>
+							<form:hidden path="act.taskDefKey"/>
+							<form:hidden path="act.procInsId"/>
+							<form:hidden path="act.procDefId"/>
+							<form:hidden id="flag" path="act.flag"/>
+							<table class="table table-bordered">
+								<tbody>
+								<tr>
+									<td colspan="4" class="width-15 active"><label class="">储备项目基本信息:</label></td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目年份:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectYear" htmlEscape="false" readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目性质:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectNature" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">需求单位:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.demandUnit" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">区域:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.district" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目分组:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectGroup" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">储备批次:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.reserveBatches" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">供电区域:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.blockSupply" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">网格编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.gridNumber" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">单元格编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.cellNumber" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目储备编号:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.projectReserveId" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">项目储备编号:</label></td>
+									<td class="width-35">
+										<form:input path="projectReserveId" htmlEscape="false"  readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">项目名称:</label></td>
+									<td class="width-35">
+										<form:input path="projectName" htmlEscape="false"  readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">建设必要性及内容:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.constructionNecessityAndContent" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">变电站名称:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.substationName" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">线路名称:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.circuitName" htmlEscape="false"    readonly="true"  class="form-control"/>
+									</td>
+									<td class="width-15 active"><label class="">网架项目划分:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.netRackProjectDivide" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">需求类型:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.requirementType" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+									<td class="width-15 active"><label class="">费用估算:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.costEstimate" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td class="width-15 active"><label class="">备注:</label></td>
+									<td class="width-35">
+										<form:input path="reserveSummary.basicRemarks" htmlEscape="false" readonly="true"    class="form-control number money"/>
+									</td>
+								</tr>
+								<tr>
+									<td colspan="4" class="width-15 active"><label class="">设计资料:</label></td>
+								</tr>
+								</tbody>
+							</table>
+						</form:form>
+						<table id="testPicTable"   data-toolbar="#toolbar"></table>
+						<div id="toolbar">
+							<button id="export" class="btn btn-warning">
+								<i class="fa fa-file-excel-o"></i> 导出甲供材清册
+							</button>
+						</div>
+						<table id="dataTable"   data-toolbar="#toolbar"></table>
+						<div class="row">
+							<div class="col-sm-3"></div>
+							<div class="col-sm-6">
+								<div class="form-group text-center">
+									<input id="agree" class="btn  btn-primary btn-lg btn-parsley" type="submit" value="通过"/>&nbsp;
+									<input id="disagree" class="btn  btn-danger btn-lg btn-parsley" type="submit" value="不通过"/>
+									<input id="cancel" class="btn  btn-danger btn-lg btn-parsley" type="submit" value="取消"/>
+									<input id="pending" class="btn  btn-danger btn-lg btn-parsley" type="submit" value="待定"/>
+								</div>
+							</div>
+						</div>
+
+						<c:if test="${not empty reserveProcess.id}">
+							<act:flowChart procInsId="${reserveProcess.act.procInsId}"/>
+							<act:histoicFlow procInsId="${reserveProcess.act.procInsId}" />
+						</c:if>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</body>
+</html>

+ 459 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/budgetStats/budgetStats.js

@@ -0,0 +1,459 @@
+<%@ 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: 5,
+        //可供选择的每页的行数(*)
+        pageList: [5, 10, 25, 50, 100],
+        //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+        url: "${ctx}/cg/reservemanagementcenter/budgetStats/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,
+
+                },
+                {
+                    field: 'projectYear',
+                    width: 65,
+                    title: '项目</br>年份',
+                }
+                , {
+                    field: 'projectNature',
+                    width:65,
+                    title: '项目</br>性质',
+
+                },{
+                    field: 'demandUnit',
+                    width:70,
+                    title: '需求</br>单位',
+
+                },{
+                    field: 'district',
+                    width:60,
+                    title: '区域',
+
+                },{
+                    field: 'projectGroup',
+                    width:70,
+                    title: '项目</br>分组',
+
+                },{
+                    field: 'reserveBatches',
+                    width:70,
+                    title: '储备</br>批次',
+
+                },{
+                    field: 'blockSupply',
+                    width:60,
+                    title: '供电</br>区域',
+
+                },{
+                    field: 'gridNumber',
+                    width:90,
+                    title: '网格编号',
+
+                },{
+                    field: 'cellNumber',
+                    width:100,
+                    title: '单元格编号',
+
+                },{
+                    field: 'projectReserveId',
+                    width:150,
+                    title: '项目储备编号',
+
+                    /*formatter:function(value, row , index){
+                        if(value == null || value ==""){
+                            value = "-";
+                        }
+                    <c:choose>
+                        <c:when test="${fns:hasPermission('cg:reservemanagementcenter:reserveManage:view')}">
+                        return "<a href='javascript:view(\""+row.id+"\")'>"+value+"</a>";
+                    </c:when>
+                        <c:otherwise>
+                        return value;
+                    </c:otherwise>
+                        </c:choose>
+
+                    }*/
+                },{
+                    field: 'projectName',
+                    width:200,
+                    title: '项目名称',
+
+                },{
+                    field: 'constructionNecessityAndContent',
+                    width:400,
+                    title: '建设必要性及内容',
+
+                },{
+                    field: 'substationName',
+                    width:80,
+                    title: '变电站</br>名称',
+
+                },{
+                    field: 'circuitName',
+                    width:100,
+                    title: '线路名称',
+
+                },{
+                    field: 'netRackProjectDivide',
+                    width:80,
+                    title: '网架项目</br>划分',
+
+                },{
+                    field: 'requirementType',
+                    width:100,
+                    title: '需求类型',
+
+                },{
+                    field: 'costEstimate',
+                    width:80,
+                    title: '费用</br>估算',
+
+                },{
+                    field: 'basicRemarks',
+                    width:200,
+                    title: '备注',
+                },{
+                    field: 'reserveProgress',
+                    width:100,
+                    title: '储备</br>进度',
+                },{
+                    field: 'implementPlan',
+                    width:100,
+                    title: '是否纳入</br>实施计划',
+                },{
+                    field: 'implementBatch',
+                    width:100,
+                    title: '初定实施</br>批次',
+                },{
+                    field: 'pretrialEstimateAmount',
+                    width:100,
+                    title: '总概算金额</br>(含税)',
+                },{
+                    field: 'pretrialEstimateAmountExcludeTax',
+                    width:120,
+                    title: '审前总概算</br>金额(不含税)',
+                },{
+                    field: 'pretrialDeductibleAmount',
+                    width:120,
+                    title: '审前可抵扣</br>金额(税金)',
+                },{
+                    field: 'pretrialConstructeConsts',
+                    width:100,
+                    title: '审前施工费</br>(含税)',
+                },{
+                    field: 'pretrialMaterialAmount',
+                    width:120,
+                    title: '审前甲供物资</br>金额(含税)',
+                },{
+                    field: 'pretrialOtherExpanses',
+                    width:110,
+                    title: '审前其他</br>费用(含税)',
+                },{
+                    field: 'pretrialPreliminaryConstructeFee',
+                    width:120,
+                    title: '审前前期工</br>程费(含税)',
+                },{
+                    field: 'pretrialSurveyFee',
+                    width:100,
+                    title: '审前勘察费</br>(含税)',
+                },{
+                    field: 'pretrialDesignFee',
+                    width:100,
+                    title: '审前设计费</br>(含税)',
+                },{
+                    field: 'pretrialSupervisionFee',
+                    width:100,
+                    title: '审前监理费</br>(含税)',
+                },{
+                    field: 'afterTrialEstimateAmount',
+                    width:120,
+                    title: '审后总概算</br>金额(含税)',
+                }
+                ,{
+                    field: 'afterTrialEstimateAmountExcludeTax',
+                    width:120,
+                    title: '审后总概算</br>金额(不含税)',
+                },{
+                    field: 'afterTrialDeductibleAmount',
+                    width:120,
+                    title: '审后可抵扣</br>金额(税金)',
+                },{
+                    field: 'afterTrialConstructeConsts',
+                    width:100,
+                    title: '审后施工费</br>(含税)',
+                },{
+                    field: 'afterTrialMaterialAmount',
+                    width:120,
+                    title: '审后甲供物资金额</br>(含税)',
+                },{
+                    field: 'afterTrialOtherExpanses',
+                    width:120,
+                    title: '审后其他费用</br>(含税)',
+                },{
+                    field: 'afterTrialPreliminaryConstructeFee',
+                    width:120,
+                    title: '审后前期工程费</br>(含税)',
+                },{
+                    field: 'afterTrialSurveyFee',
+                    width:120,
+                    title: '审后勘察费</br>(含税)',
+                },{
+                    field: 'afterTrialDesignFee',
+                    width:120,
+                    title: '审后设计费</br>(含税)',
+                },{
+                    field: 'afterTrialSupervisionFee',
+                    width:120,
+                    title: '审后监理费</br>(含税)',
+                },{
+                    field: 'budgetRevision',
+                    width:100,
+                    title: '是否完成</br>概算修改',
+                },{
+                    field: 'completeTime',
+                    width:100,
+                    title: '概算修改</br>完成时间',
+                },
+        ]
+    });
+
+
+    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/budgetStats/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/budgetStats/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"
+    });
+});
+
+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/budgetStats/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>

+ 103 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/budgetStats/budgetStats.jsp

@@ -0,0 +1,103 @@
+<%@ 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="budgetStats.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;
+		}
+	</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:budgetStats:del">
+				<button id="remove" class="btn btn-danger" onclick="deleteAll()">
+					<i class="glyphicon glyphicon-remove"></i> 删除
+				</button>
+			</shiro:hasPermission>
+			<shiro:hasPermission name="cg:reservemanagementcenter:budgetStats: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:budgetStats: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>

+ 449 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/constructeScale/constructeScale.js

@@ -0,0 +1,449 @@
+<%@ 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: 5,
+        //可供选择的每页的行数(*)
+        pageList: [5, 10, 25, 50, 100],
+        //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+        url: "${ctx}/cg/reservemanagementcenter/constructeScale/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,
+
+                },
+                {
+                    field: 'cityCompany',
+                    width:150,
+                    title: '市公司',
+                },
+                {
+                    field: 'district',
+                    width:150,
+                    title: '县公司',
+                },
+                {
+                    field: 'blockSupply',
+                    width:80,
+                    title: '供电区域',
+                },
+                {
+                    field: 'gridNumber',
+                    width:150,
+                    title: '网格编号',
+                },
+                {
+                    field: 'cellNumber',
+                    width:150,
+                    title: '单元格编号',
+                },
+                {
+                    field: 'projectName',
+                    width:150,
+                    title: '项目名称',
+                },
+                {
+                    field: 'constructionNecessityAndContent',
+                    width:150,
+                    title: '建设必要性及内容',
+                },
+                {
+                    field: 'constructePurpose',
+                    width:150,
+                    title: '建设目的',
+                },
+                {
+                    field: 'reserveProgress',
+                    width:80,
+                    title: '项目进度',
+                },
+                {
+                    field: 'switchCabinet',
+                    width:80,
+                    title: '开关柜',
+                },
+                {
+                    field: 'overheadLine',
+                    width:80,
+                    title: '架空线路',
+                },
+                {
+                    field: 'powerCable',
+                    width:80,
+                    title: '电力电缆',
+                },
+                {
+                    field: 'cableBranchBox',
+                    width:90,
+                    title: '电缆分支箱',
+                },
+                {
+                    field: 'outdoorRingCage',
+                    width:90,
+                    title: '户外环网箱',
+                },
+                {
+                    field: 'ringRoom',
+                    width:90,
+                    title: '环网室<br>(开关站)',
+                },
+                {
+                    field: 'onColumnSwitch',
+                    width:80,
+                    title: '柱上开关',
+                },
+                {
+                    field: 'switchRoomKVA',
+                    width:100,
+                    title: '配电室(KVA)',
+                },
+                {
+                    field: 'switchRoom',
+                    width:80,
+                    title: '配电室',
+                },
+                {
+                    field: 'boxChangeKVA',
+                    width:90,
+                    title: '箱变(KVA)',
+                },
+                {
+                    field: 'boxChange',
+                    width:80,
+                    title: '箱变',
+                },
+                {
+                    field: 'distributionTransformerKVA',
+                    width:90,
+                    title: '配电变压器<br>(KVA)',
+                },
+                {
+                    field: 'distributionTransformer',
+                    width:90,
+                    title: '配电变压器',
+                },
+                {
+                    field: 'lowVoltageLine',
+                    width:80,
+                    title: '低压线路',
+                },
+                {
+                    field: 'lowVoltageCable',
+                    width:80,
+                    title: '低压电缆',
+                },
+                {
+                    field: 'lowVoltageCableBox',
+                    width:90,
+                    title: '低压电缆<br>分支箱',
+                },
+                {
+                    field: 'lowVoltageCabinet',
+                    width:90,
+                    title: '低压配电柜',
+                },
+                {
+                    field: 'distributeAutoMateTerminalFTU',
+                    width:100,
+                    title: '配电自动<br>化终端(FTU)',
+                },
+                {
+                    field: 'distributeAutoMateTerminalDTU',
+                    width:100,
+                    title: '配电自动<br>化终端(DTU)',
+                },
+                {
+                    field: 'opticalCable',
+                    width:80,
+                    title: '光缆',
+                },
+                {
+                    field: 'cablePassage',
+                    width:80,
+                    title: '电缆通道',
+                },
+                {
+                    field: 'cablePassage',
+                    width:90,
+                    title: '土建工厂化<br>预制',
+                },
+                {
+                    field: 'ancillaryFacility',
+                    width:80,
+                    title: '附属设施',
+                },
+                {
+                    field: 'constructionWorkMethod',
+                    width:80,
+                    title: '施工作业<br>方式',
+                },
+                {
+                    field: 'workWithoutInterruption',
+                    width:90,
+                    title: '不停电作业',
+                },
+                {
+                    field: 'powerFailureHouseNum',
+                    width:90,
+                    title: '停电时户数',
+                },
+                {
+                    field: 'costEstimate',
+                    width:80,
+                    title: '费用估算',
+                },
+                {
+                    field: 'peakSummerProject',
+                    width:100,
+                    title: '是否迎峰<br>度夏项目',
+                },
+                {
+                    field: 'projectReview',
+                    width:90,
+                    title: '通过第几批<br>项目评审',
+                },
+                {
+                    field: 'afterTrialEstimateAmount',
+                    width:90,
+                    title: '概算',
+                },
+        ]
+    });
+
+
+    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/constructeScale/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/constructeScale/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"
+    });
+});
+
+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/constructeScale/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>

+ 80 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/constructeScale/constructeScale.jsp

@@ -0,0 +1,80 @@
+<%@ 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="constructeScale.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;
+		}
+	</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="constructeScale" 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:constructeScale:del">
+				<button id="remove" class="btn btn-danger" onclick="deleteAll()">
+					<i class="glyphicon glyphicon-remove"></i> 删除
+				</button>
+			</shiro:hasPermission>
+			<shiro:hasPermission name="cg:reservemanagementcenter:constructeScale:import">
+				<button id="btnImport" class="btn btn-info">
+					<i class="fa fa-folder-open-o"></i> 导入
+				</button>
+			</shiro:hasPermission>
+
+			<shiro:hasPermission name="cg:reservemanagementcenter:constructeScale: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>

+ 290 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/demoliteList/demoliteList.js

@@ -0,0 +1,290 @@
+<%@ 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: 5,
+        //可供选择的每页的行数(*)
+        pageList: [5, 10, 25, 50, 100],
+        //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+        url: "${ctx}/cg/reservemanagementcenter/demoliteList/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,
+
+                },
+                {
+                    field: 'projectName',
+                    width: 80,
+                    title: '项目名称',
+                }
+                , {
+                    field: 'projectReserveId',
+                    width:90,
+                    title: '项目储备编号',
+
+                },{
+                    field: 'materialName',
+                    width:80,
+                    title: '物料名称',
+
+                },{
+                    field: 'specification',
+                    width:80,
+                    title: '规格型号',
+
+                },{
+                    field: 'unit',
+                    width:80,
+                    title: '单位',
+
+                },{
+                    field: 'count',
+                    width:80,
+                    title: '数量',
+
+                },{
+                    field: 'remark',
+                    width:80,
+                    title: '备注',
+
+                },
+        ]
+    });
+
+
+    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/budgetStats/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/demoliteList/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"
+    });
+});
+
+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/demoliteList/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>

+ 83 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/demoliteList/demoliteList.jsp

@@ -0,0 +1,83 @@
+<%@ 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="demoliteList.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;
+		}
+	</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="demoliteList" 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">
+						<label class="label-item single-overflow pull-left" title="数量:">数量:</label>
+						<form:input path="count" 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:demoliteList:del">
+				<button id="remove" class="btn btn-danger" onclick="deleteAll()">
+					<i class="glyphicon glyphicon-remove"></i> 删除
+				</button>
+			</shiro:hasPermission>
+			<%--<shiro:hasPermission name="cg:reservemanagementcenter:budgetStats:import">
+				<button id="btnImport" class="btn btn-info">
+					<i class="fa fa-folder-open-o"></i> 导入
+				</button>
+			</shiro:hasPermission>--%>
+
+			<shiro:hasPermission name="cg:reservemanagementcenter:demoliteList: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>

+ 464 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/enginnerQuery/enginnerQuery.js

@@ -0,0 +1,464 @@
+<%@ 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: 5,
+        //可供选择的每页的行数(*)
+        pageList: [5, 10, 25, 50, 100],
+        //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+        url: "${ctx}/cg/reservemanagementcenter/enginnerQuery/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,
+
+                },
+                {
+                    field: 'projectYear',
+                    width: 65,
+                    title: '项目</br>年份',
+                }
+                , {
+                    field: 'projectNature',
+                    width:65,
+                    title: '项目</br>性质',
+
+                },{
+                    field: 'demandUnit',
+                    width:70,
+                    title: '需求</br>单位',
+
+                },{
+                    field: 'district',
+                    width:60,
+                    title: '区域',
+
+                },{
+                    field: 'projectGroup',
+                    width:70,
+                    title: '项目</br>分组',
+
+                },{
+                    field: 'reserveBatches',
+                    width:70,
+                    title: '储备</br>批次',
+
+                },{
+                    field: 'blockSupply',
+                    width:60,
+                    title: '供电</br>区域',
+
+                },{
+                    field: 'gridNumber',
+                    width:90,
+                    title: '网格编号',
+
+                },{
+                    field: 'cellNumber',
+                    width:100,
+                    title: '单元格编号',
+
+                },{
+                    field: 'projectReserveId',
+                    width:150,
+                    title: '项目储备编号',
+
+                    /*formatter:function(value, row , index){
+                        if(value == null || value ==""){
+                            value = "-";
+                        }
+                    <c:choose>
+                        <c:when test="${fns:hasPermission('cg:reservemanagementcenter:reserveManage:view')}">
+                        return "<a href='javascript:view(\""+row.id+"\")'>"+value+"</a>";
+                    </c:when>
+                        <c:otherwise>
+                        return value;
+                    </c:otherwise>
+                        </c:choose>
+
+                    }*/
+                },{
+                    field: 'projectName',
+                    width:200,
+                    title: '项目名称',
+
+                },{
+                    field: 'constructionNecessityAndContent',
+                    width:400,
+                    title: '建设必要性及内容',
+
+                },{
+                    field: 'substationName',
+                    width:80,
+                    title: '变电站</br>名称',
+
+                },{
+                    field: 'circuitName',
+                    width:100,
+                    title: '线路名称',
+
+                },{
+                    field: 'netRackProjectDivide',
+                    width:80,
+                    title: '网架项目</br>划分',
+
+                },{
+                    field: 'requirementType',
+                    width:100,
+                    title: '需求类型',
+
+                },{
+                    field: 'projectType',
+                    width:80,
+                    title: '项目类型',
+
+                },{
+                    field: 'costEstimate',
+                    width:80,
+                    title: '费用估算',
+
+                },{
+                    field: 'basicRemarks',
+                    width:200,
+                    title: '备注',
+                },{
+                    field: 'reserveProgress',
+                    width:100,
+                    title: '储备进度',
+                },{
+                    field: 'implementPlan',
+                    width:100,
+                    title: '是否纳入</br>实施计划',
+                },{
+                    field: 'implementBatch',
+                    width:100,
+                    title: '初定实施</br>批次',
+                },{
+                    field: 'civilWork',
+                    width:100,
+                    title: '是否含土</br>建工作量',
+                },{
+                    field: 'poleWorkload',
+                    width:100,
+                    title: '是否含立</br>杆工作量',
+                },{
+                    field: 'pole190X10',
+                    width:120,
+                    title: 'Φ190×10×M×I',
+                },{
+                    field: 'pole190X12',
+                    width:120,
+                    title: 'Φ190×12×M×G',
+                },{
+                    field: 'pole190X15',
+                    width:120,
+                    title: 'Φ190×15×M×G',
+                },{
+                    field: 'pole230X15',
+                    width:120,
+                    title: 'Φ230×15×N',
+                },{
+                    field: 'pole230X18',
+                    width:120,
+                    title: 'Φ230×18×N×G',
+                },{
+                    field: 'pole300X9',
+                    width:120,
+                    title: 'Φ300×9',
+                },{
+                    field: 'pole350X15',
+                    width:120,
+                    title: 'Φ350×15×T×BY',
+                },{
+                    field: 'steelPipeGNH31Contains',
+                    width:120,
+                    title: 'GNH31-13B<br>(含钢管桩)',
+                },{
+                    field: 'steelPipeGNH31NoContains',
+                    width:120,
+                    title: 'GNH31-13B<br>(不含钢管桩)',
+                },{
+                    field: 'steelPipeGNH3113DContains',
+                    width:120,
+                    title: 'GNH31-13D<br>(含钢管桩)',
+                },{
+                    field: 'steelPipeGNH3113DNoContains',
+                    width:120,
+                    title: 'GNH31-13D<br>(不含钢管桩)',
+                },{
+                    field: 'steelPipeCNH35Contains',
+                    width:120,
+                    title: 'GNH35-13B<br>(含钢管桩)',
+                },{
+                    field: 'steelPipeCNH35NoContains',
+                    width:120,
+                    title: 'GNH35-13B<br>(不含钢管桩)',
+                },{
+                    field: 'steelPipeCNH3513EContains',
+                    width:120,
+                    title: 'GNH35-13E<br>(含钢管桩)',
+                },{
+                    field: 'steelPipeCNH3513ENoContains',
+                    width:120,
+                    title: 'GNH35-13E<br>(不含钢管桩)',
+                },{
+                    field: 'steelPipeCNH39Contains',
+                    width:120,
+                    title: 'GNH39-13B<br>(含钢管桩)',
+                },{
+                    field: 'steelPipeCNH39NoContains',
+                    width:120,
+                    title: 'GNH39-13B<br>(不含钢管桩)',
+                },{
+                    field: 'prefabricatedWell',
+                    width:80,
+                    title: '预制化井',
+                },{
+                    field: 'prefabricatedBase',
+                    width:90,
+                    title: '预制化基础',
+                },{
+                    field: 'prefabricatedPackage',
+                    width:90,
+                    title: '预制化包封',
+                },
+
+        ]
+    });
+
+
+    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/budgetStats/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/enginnerQuery/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"
+    });
+});
+
+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/budgetStats/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>

+ 80 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/enginnerQuery/enginnerQuery.jsp

@@ -0,0 +1,80 @@
+<%@ 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="enginnerQuery.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;
+		}
+	</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="enginnerQuery" 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:budgetStats:del">
+				<button id="remove" class="btn btn-danger" onclick="deleteAll()">
+					<i class="glyphicon glyphicon-remove"></i> 删除
+				</button>
+			</shiro:hasPermission>--%>
+			<%--<shiro:hasPermission name="cg:reservemanagementcenter:budgetStats:import">
+				<button id="btnImport" class="btn btn-info">
+					<i class="fa fa-folder-open-o"></i> 导入
+				</button>
+			</shiro:hasPermission>--%>
+
+			<shiro:hasPermission name="cg:reservemanagementcenter:enginnerQuery: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>

+ 544 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/progressStats/progressStats.js

@@ -0,0 +1,544 @@
+<%@ 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: 5,
+        //可供选择的每页的行数(*)
+        pageList: [5, 10, 25, 50, 100],
+        //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+        url: "${ctx}/cg/reservemanagementcenter/progressStats/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,
+
+                },
+                {
+                    field: 'projectReserveId',
+                    width:150,
+                    title: '项目储备编号',
+
+                    /*formatter:function(value, row , index){
+                        if(value == null || value ==""){
+                            value = "-";
+                        }
+                    <c:choose>
+                        <c:when test="${fns:hasPermission('cg:reservemanagementcenter:reserveManage:view')}">
+                        return "<a href='javascript:view(\""+row.id+"\")'>"+value+"</a>";
+                    </c:when>
+                        <c:otherwise>
+                        return value;
+                    </c:otherwise>
+                        </c:choose>
+
+                    }*/
+                },
+                {
+                    field: 'projectName',
+                    width:200,
+                    title: '项目名称',
+
+                },
+                {
+                    field: 'requirementType',
+                    width:80,
+                    title: '项目类型',
+
+                },
+                {
+                    field: 'demandUnit',
+                    width:80,
+                    title: '需求提出<br>单位',
+
+                },
+                {
+                    field: 'reserveBatches',
+                    width:80,
+                    title: '储备批次',
+
+                },
+                {
+                    field: 'basicRemarks',
+                    width:200,
+                    title: '备注',
+
+                },
+                {
+                    field: 'reserveProgress',
+                    width:80,
+                    title: '储备进度',
+
+                },
+                {
+                    field: 'implementPlan',
+                    width:80,
+                    title: '是否纳入<br>实施计划',
+
+                },
+                {
+                    field: 'initialImplementBatch',
+                    width:80,
+                    title: '初定实施<br>批次',
+
+                },
+                {
+                    field: 'inspectDepartmentReview',
+                    width:100,
+                    title: '是否通过<br>运检部评审',
+
+                },
+                {
+                    field: 'inspectDepartmentReviewTime',
+                    width:160,
+                    title: '通过运检部<br>评审时间',
+
+                },
+                {
+                    field: 'releaseReserveTime',
+                    width:160,
+                    title: '运检部下达<br>储备时间',
+
+                },
+                {
+                    field: 'designCommission',
+                    width:100,
+                    title: '是否发出<br>设计委托',
+
+                },
+                {
+                    field: 'designCommissionIssueTime',
+                    width:160,
+                    title: '设计委托<br>发出时间',
+
+                },
+                {
+                    field: 'onSiteConfess',
+                    width:100,
+                    title: '是否进行<br>现场交底',
+
+                },
+                {
+                    field: 'confessCompleteTime',
+                    width:160,
+                    title: '交底完成时间',
+
+                },
+                {
+                    field: 'includeReserve',
+                    width:80,
+                    title: '是否进行<br>储备',
+
+                },
+                {
+                    field: 'completeDesign',
+                    width:80,
+                    title: '是否完成<br>初设',
+
+                },
+                {
+                    field: 'submitTime',
+                    width:160,
+                    title: '初设提交时间',
+
+                },
+                {
+                    field: 'completeDraw',
+                    width:80,
+                    title: '是否完成<br>审图',
+
+                },
+                {
+                    field: 'drawAudit',
+                    width:100,
+                    title: '是否通过<br>图纸审核',
+
+                },
+                {
+                    field: 'reasonForFailure',
+                    width:100,
+                    title: '未通过原因<br>分析',
+
+                },
+                {
+                    field: 'passAuditDate',
+                    width:160,
+                    title: '通过审核日期',
+
+                },
+                {
+                    field: 'changeDesign',
+                    width:100,
+                    title: '是否需设计<br>变更',
+
+                },
+                {
+                    field: 'completeReview',
+                    width:80,
+                    title: '是否完成<br>审核',
+
+                },
+                {
+                    field: 'expertReview',
+                    width:100,
+                    title: '是否通过<br>专家审核',
+
+                },
+                {
+                    field: 'estimateReasonForFailure',
+                    width:100,
+                    title: '未通过原因<br>分析',
+
+                },
+                {
+                    field: 'estimatePassAuditDate',
+                    width:160,
+                    title: '通过审核日期',
+
+                },
+                {
+                    field: 'estimateChangeDesign',
+                    width:100,
+                    title: '是否需设计<br>变更',
+
+                },
+                {
+                    field: 'provincialCompanyReview',
+                    width:100,
+                    title: '是否参加<br>省公司评审',
+
+                },
+                {
+                    field: 'provincialCompanyReviewBatch',
+                    width:100,
+                    title: '省公司评审<br>批次',
+
+                },
+                {
+                    field: 'passProvincialCompanyReview',
+                    width:100,
+                    title: '是否通过<br>省公司评审',
+
+                },
+                {
+                    field: 'causeAnalysis',
+                    width:100,
+                    title: '未通过原因<br>分析',
+
+                },
+                {
+                    field: 'designChange',
+                    width:100,
+                    title: '是否需设计<br>变更',
+
+                },
+                {
+                    field: 'drawingReview',
+                    width:80,
+                    title: '是否进行<br>图纸审查',
+
+                },
+                {
+                    field: 'reviewDate',
+                    width:160,
+                    title: '审图日期',
+
+                },
+                {
+                    field: 'passDrawingReview',
+                    width:80,
+                    title: '是否通过<br>图纸审查',
+
+                },
+                {
+                    field: 'reviewComment',
+                    width:100,
+                    title: '未通过审图<br>意见',
+
+                },
+                {
+                    field: 'approvedDate',
+                    width:160,
+                    title: '通过审核日期',
+
+                },
+                {
+                    field: 'jointReviewDesignChange',
+                    width:80,
+                    title: '是否需<br>设计变更',
+
+                },
+                {
+                    field: 'drawingFinalize',
+                    width:80,
+                    title: '图纸是否<br>定稿',
+
+                },
+                {
+                    field: 'finalDate',
+                    width:160,
+                    title: '定稿日期',
+
+                },
+                {
+                    field: 'formalDrawing',
+                    width:80,
+                    title: '是否打印<br>正式图纸',
+
+                },
+                {
+                    field: 'drawingDate',
+                    width:160,
+                    title: '通知出图日期',
+
+                },
+                {
+                    field: 'drawingDate',
+                    width:160,
+                    title: '正式图纸移交<br>项目中心日期',
+
+                },
+                {
+                    field: 'drawingDate',
+                    width:160,
+                    title: '正式图纸移交<br>施工单位日期',
+
+                },
+        ]
+    });
+
+
+    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/progressStats/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/progressStats/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"
+    });
+});
+
+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/progressStats/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>

+ 80 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/progressStats/progressStats.jsp

@@ -0,0 +1,80 @@
+<%@ 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="progressStats.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;
+		}
+	</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="progressStats" 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:progressStats:del">
+				<button id="remove" class="btn btn-danger" onclick="deleteAll()">
+					<i class="glyphicon glyphicon-remove"></i> 删除
+				</button>
+			</shiro:hasPermission>
+			<shiro:hasPermission name="cg:reservemanagementcenter:progressStats:import">
+				<button id="btnImport" class="btn btn-info">
+					<i class="fa fa-folder-open-o"></i> 导入
+				</button>
+			</shiro:hasPermission>
+
+			<shiro:hasPermission name="cg:reservemanagementcenter:progressStats: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>

+ 444 - 0
src/main/webapp/webpage/modules/cg/statisticalTable/specialSupply/specialSupply.js

@@ -0,0 +1,444 @@
+<%@ 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: 5,
+        //可供选择的每页的行数(*)
+        pageList: [5, 10, 25, 50, 100],
+        //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+        url: "${ctx}/cg/reservemanagementcenter/specialSupply/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,
+
+                },
+                {
+                    field: 'projectYear',
+                    width: 65,
+                    title: '项目</br>年份',
+                }
+                , {
+                    field: 'projectNature',
+                    width:65,
+                    title: '项目</br>性质',
+
+                },{
+                    field: 'demandUnit',
+                    width:70,
+                    title: '需求</br>单位',
+
+                },{
+                    field: 'district',
+                    width:60,
+                    title: '区域',
+
+                },{
+                    field: 'projectGroup',
+                    width:70,
+                    title: '项目</br>分组',
+
+                },{
+                    field: 'reserveBatches',
+                    width:70,
+                    title: '储备</br>批次',
+
+                },{
+                    field: 'blockSupply',
+                    width:60,
+                    title: '供电</br>区域',
+
+                },{
+                    field: 'gridNumber',
+                    width:90,
+                    title: '网格编号',
+
+                },{
+                    field: 'cellNumber',
+                    width:100,
+                    title: '单元格编号',
+
+                },{
+                    field: 'projectReserveId',
+                    width:150,
+                    title: '项目储备编号',
+
+                    /*formatter:function(value, row , index){
+                        if(value == null || value ==""){
+                            value = "-";
+                        }
+                    <c:choose>
+                        <c:when test="${fns:hasPermission('cg:reservemanagementcenter:reserveManage:view')}">
+                        return "<a href='javascript:view(\""+row.id+"\")'>"+value+"</a>";
+                    </c:when>
+                        <c:otherwise>
+                        return value;
+                    </c:otherwise>
+                        </c:choose>
+
+                    }*/
+                },{
+                    field: 'projectName',
+                    width:200,
+                    title: '项目名称',
+
+                },{
+                    field: 'constructionNecessityAndContent',
+                    width:400,
+                    title: '建设必要性及内容',
+
+                },{
+                    field: 'substationName',
+                    width:80,
+                    title: '变电站</br>名称',
+
+                },{
+                    field: 'circuitName',
+                    width:100,
+                    title: '线路名称',
+
+                },{
+                    field: 'netRackProjectDivide',
+                    width:80,
+                    title: '网架项目</br>划分',
+
+                },{
+                    field: 'requirementType',
+                    width:100,
+                    title: '需求类型',
+
+                },{
+                    field: 'projectType',
+                    width:80,
+                    title: '项目类型',
+
+                },{
+                    field: 'costEstimate',
+                    width:80,
+                    title: '费用估算',
+
+                },{
+                    field: 'basicRemarks',
+                    width:200,
+                    title: '备注',
+                },{
+                    field: 'reserveProgress',
+                    width:100,
+                    title: '储备进度',
+                },{
+                    field: 'implementPlan',
+                    width:100,
+                    title: '是否纳入</br>实施计划',
+                },{
+                    field: 'implementBatch',
+                    width:100,
+                    title: '初定实施</br>批次',
+                },{
+                    field: 'materialStatisticA',
+                    width:100,
+                    title: 'A物资',
+                },{
+                    field: 'materialStatisticB',
+                    width:100,
+                    title: 'B物资',
+                },{
+                    field: 'materialStatisticC',
+                    width:100,
+                    title: 'C物资',
+                },{
+                    field: 'materialStatisticD',
+                    width:100,
+                    title: 'D物资',
+                },{
+                    field: 'switchCabinet10KV',
+                    width:100,
+                    title: '环网柜</br>AC10kV',
+                },{
+                    field: 'switchCabinet10KV02',
+                    width:100,
+                    title: '环网柜</br>AC10kV02',
+                },{
+                    field: 'switchCabinetIncomeLine',
+                    width:100,
+                    title: '低压开关</br>柜进线',
+                },{
+                    field: 'switchCabinetSegment',
+                    width:100,
+                    title: '低压开关</br>柜分段',
+                },{
+                    field: 'switchCabinetFeeder',
+                    width:100,
+                    title: '低压开关</br>柜馈线',
+                },{
+                    field: 'numberOfBranchBoxFourWay',
+                    width:100,
+                    title: '电缆分支</br>箱四路',
+                },{
+                    field: 'numberOfBranchBoxFiveWay',
+                    width:100,
+                    title: '电缆分支</br>箱五路',
+                },{
+                    field: 'numberOfBranchBoxSevenWay',
+                    width:100,
+                    title: '电缆分支</br>箱七路',
+                },{
+                    field: 'numberOfBox',
+                    width:100,
+                    title: '箱变路数',
+                },{
+                    field: 'specialSizeA',
+                    width:100,
+                    title: '特殊物资A',
+                },{
+                    field: 'specialSizeB',
+                    width:100,
+                    title: '特殊物资B',
+                },{
+                    field: 'specialSizeC',
+                    width:100,
+                    title: '特殊物资C',
+                },{
+                    field: 'specialSizeD',
+                    width:100,
+                    title: '特殊物资D',
+                },
+
+        ]
+    });
+
+
+    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/specialSupply/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/specialSupply/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"
+    });
+});
+
+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/budgetStats/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>

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


Some files were not shown because too many files changed in this diff