ソースを参照

Merge remote-tracking branch 'origin/master'

lem 5 年 前
コミット
f798af1f2e
41 ファイル変更7801 行追加1 行削除
  1. 9 1
      src/main/java/com/jeeplus/modules/sg/managementcenter/materialproject/entity/MaterialProject.java
  2. 24 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/entity/ProjectActProcIns.java
  3. 167 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/entity/ProjectActProclnsAss.java
  4. 251 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/entity/ProjectAssignment.java
  5. 178 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/entity/ProjectPlanArrage.java
  6. 126 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/entity/ProjectQuantity.java
  7. 39 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/mapper/ProjectPlanActMapper.java
  8. 26 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/mapper/ProjectPlanArrageMapper.java
  9. 209 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/mapper/xml/ProjectPlanActMapper.xml
  10. 259 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/mapper/xml/ProjectPlanArrageMapper.xml
  11. 454 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/service/ProjectPlanActService.java
  12. 457 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/service/ProjectPlanArrageService.java
  13. 79 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/BookStrapTreeUtil.java
  14. 79 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/ImportProUtil.java
  15. 394 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/ImportUtil.java
  16. 267 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/PackagingUtil.java
  17. 309 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/RecursiveUtil.java
  18. 43 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/Result.java
  19. 152 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/TreeTableUtil.java
  20. 905 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/web/ProjectPlanArrageController.java
  21. 245 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/constructionDateList.js
  22. 34 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/constructionDateList.jsp
  23. 401 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/constructionManageAct.js
  24. 67 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/constructionManageAct.jsp
  25. 180 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/disList2ManageAct.js
  26. 67 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/disList2ManageAct.jsp
  27. 278 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/netActPowerList.js
  28. 33 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/netActPowerList.jsp
  29. 358 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/netWorkManageAct.js
  30. 61 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/netWorkManageAct.jsp
  31. 238 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/newDateList.js
  32. 34 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/newDateList.jsp
  33. 177 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/runListManageAct.js
  34. 74 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/runListManageAct.jsp
  35. 73 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectDateForm.jsp
  36. 320 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPlanArrageForm.js
  37. 54 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPlanArrageForm.jsp
  38. 268 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPlanArrageList.js
  39. 103 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPlanArrageList.jsp
  40. 276 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPlanPowerList.js
  41. 33 0
      src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPowerList.jsp

+ 9 - 1
src/main/java/com/jeeplus/modules/sg/managementcenter/materialproject/entity/MaterialProject.java

@@ -28,13 +28,21 @@ public class MaterialProject extends DataEntity<MaterialProject>{
     //项目名称
     private String projectName;
 
-
+    private String arrageProject;//项目计划安排
 
     private String projectStatus;
 
     private String[] reserveCodes;//储备编码(多条)
     private String[] projectCodes;//项目编码(多条)
 
+    public String getArrageProject() {
+        return arrageProject;
+    }
+
+    public void setArrageProject(String arrageProject) {
+        this.arrageProject = arrageProject;
+    }
+
     public String[] getReserveCodes() {
         return reserveCodes;
     }

+ 24 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/entity/ProjectActProcIns.java

@@ -0,0 +1,24 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+public class ProjectActProcIns extends DataEntity<ProjectActProcIns> {
+    private String procInsId;//流程id
+    private String customId;//相关id
+
+    public String getProcInsId() {
+        return procInsId;
+    }
+
+    public void setProcInsId(String procInsId) {
+        this.procInsId = procInsId;
+    }
+
+    public String getCustomId() {
+        return customId;
+    }
+
+    public void setCustomId(String customId) {
+        this.customId = customId;
+    }
+}

+ 167 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/entity/ProjectActProclnsAss.java

@@ -0,0 +1,167 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.core.persistence.DataEntity;
+import com.jeeplus.modules.act.entity.Act;
+
+import java.util.Date;
+
+public class ProjectActProclnsAss extends DataEntity<ProjectActProclnsAss> {
+    private String procInsId;//流程实例编号
+    private String customId;//项目号
+    private String projectName;//项目名称
+    private String projectNumber;//项目定义号
+    private String projectLine;//线路
+    private String projectPowerRange;//停电范围
+    private String projectSwitch;//停电开关
+    private Date projectMonthDate;//停电月份
+    private Date projectDate;//停电日
+    private String projectPowerOut;//是否停电
+    private String status;//状态
+    private String distributionNetwork;//配网项目经理
+    private String constructionUnit;//施工单位项目经理
+    private String operationUnit;//运行单位项目经理
+    private String backToStauts;//是否退回0-初始状态,1-退回,2-新增
+    private String backToText;//退回备注
+    private Act act;
+
+    public Act getAct() {
+        return act;
+    }
+
+    public void setAct(Act act) {
+        this.act = act;
+    }
+
+    public String getProcInsId() {
+        return procInsId;
+    }
+
+    public void setProcInsId(String procInsId) {
+        this.procInsId = procInsId;
+    }
+
+    public String getCustomId() {
+        return customId;
+    }
+
+    public void setCustomId(String customId) {
+        this.customId = customId;
+    }
+    @ExcelField(title="项目名称", align=2, sort=2)
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+    @ExcelField(title="项目定义号", align=2, sort=1)
+    public String getProjectNumber() {
+        return projectNumber;
+    }
+
+    public void setProjectNumber(String projectNumber) {
+        this.projectNumber = projectNumber;
+    }
+
+    public String getProjectLine() {
+        return projectLine;
+    }
+
+    public void setProjectLine(String projectLine) {
+        this.projectLine = projectLine;
+    }
+    @ExcelField(title="停电范围", align=2, sort=3)
+    public String getProjectPowerRange() {
+        return projectPowerRange;
+    }
+
+    public void setProjectPowerRange(String projectPowerRange) {
+        this.projectPowerRange = projectPowerRange;
+    }
+
+    public String getProjectSwitch() {
+        return projectSwitch;
+    }
+
+    public void setProjectSwitch(String projectSwitch) {
+        this.projectSwitch = projectSwitch;
+    }
+    @ExcelField(title="月份", align=2, sort=6)
+    @JsonFormat(pattern = "YYYY-MM")
+    public Date getProjectMonthDate() {
+        return projectMonthDate;
+    }
+
+    public void setProjectMonthDate(Date projectMonthDate) {
+        this.projectMonthDate = projectMonthDate;
+    }
+    @ExcelField(title="具体日期", align=2, sort=5)
+    @JsonFormat(pattern = "YYYY-MM-dd")
+    public Date getProjectDate() {
+        return projectDate;
+    }
+
+    public void setProjectDate(Date projectDate) {
+        this.projectDate = projectDate;
+    }
+    @ExcelField(title="是否停电", align=2, sort=7)
+    public String getProjectPowerOut() {
+        return projectPowerOut;
+    }
+
+    public void setProjectPowerOut(String projectPowerOut) {
+        this.projectPowerOut = projectPowerOut;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getDistributionNetwork() {
+        return distributionNetwork;
+    }
+
+    public void setDistributionNetwork(String distributionNetwork) {
+        this.distributionNetwork = distributionNetwork;
+    }
+
+    public String getConstructionUnit() {
+        return constructionUnit;
+    }
+
+    public void setConstructionUnit(String constructionUnit) {
+        this.constructionUnit = constructionUnit;
+    }
+
+    public String getOperationUnit() {
+        return operationUnit;
+    }
+
+    public void setOperationUnit(String operationUnit) {
+        this.operationUnit = operationUnit;
+    }
+
+    public String getBackToStauts() {
+        return backToStauts;
+    }
+
+    public void setBackToStauts(String backToStauts) {
+        this.backToStauts = backToStauts;
+    }
+
+
+    public String getBackToText() {
+        return backToText;
+    }
+
+    public void setBackToText(String backToText) {
+        this.backToText = backToText;
+    }
+}

+ 251 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/entity/ProjectAssignment.java

@@ -0,0 +1,251 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity;
+
+import com.jeeplus.modules.act.entity.Act;
+
+public class ProjectAssignment {
+
+    private String reserveProjectName;//储备项目名称
+    private String disclosureType;//交底类型
+    private String projectReleaseBatch;//项目下达批次
+    private String deliveryDate;//正式图交付日期
+    private String packageNo;//施工包号
+    private String rate;//费率
+    private String assignedUnit;//合同单位
+    private String constructionUnit;//施工单位
+    private String constructionSubcontractor;//施工分包单位
+    private String behalf;//甲方代表
+    private String constructionFullTime;//施工单位物资专职
+    private String constructionTechnical;//施工单位技经专职
+    private String constructionManage;//施工项目经理
+    private String constructionLeader;//施工单位领导
+    private String subcontractingContact;//分包联系人
+    private String designer;//设计人员
+    private String designLeader;//设计单位领导
+    private String ownerManager;//业主项目经理
+    private String distribution;//配网工程专职
+    private String distributionFullTime;//配网物资专职
+    private String distributionSystem;//配网系统维护专职
+    private String distributionPolicy;//配网政策处理
+    private String centerLeader;//项目管理中心领导
+    private String centerTechnical;//项目管理中心技经专职
+    private String instituteRole;//经研所角色
+    private String repUnit;//运行单位业主代表
+    private String inspectionUnit;//运行单位运检专职
+
+
+    public String getReserveProjectName() {
+        return reserveProjectName;
+    }
+
+    public void setReserveProjectName(String reserveProjectName) {
+        this.reserveProjectName = reserveProjectName;
+    }
+
+    public String getDisclosureType() {
+        return disclosureType;
+    }
+
+    public void setDisclosureType(String disclosureType) {
+        this.disclosureType = disclosureType;
+    }
+
+    public String getProjectReleaseBatch() {
+        return projectReleaseBatch;
+    }
+
+    public void setProjectReleaseBatch(String projectReleaseBatch) {
+        this.projectReleaseBatch = projectReleaseBatch;
+    }
+
+    public String getDeliveryDate() {
+        return deliveryDate;
+    }
+
+    public void setDeliveryDate(String deliveryDate) {
+        this.deliveryDate = deliveryDate;
+    }
+
+    public String getPackageNo() {
+        return packageNo;
+    }
+
+    public void setPackageNo(String packageNo) {
+        this.packageNo = packageNo;
+    }
+
+    public String getRate() {
+        return rate;
+    }
+
+    public void setRate(String rate) {
+        this.rate = rate;
+    }
+
+    public String getAssignedUnit() {
+        return assignedUnit;
+    }
+
+    public void setAssignedUnit(String assignedUnit) {
+        this.assignedUnit = assignedUnit;
+    }
+
+    public String getConstructionUnit() {
+        return constructionUnit;
+    }
+
+    public void setConstructionUnit(String constructionUnit) {
+        this.constructionUnit = constructionUnit;
+    }
+
+    public String getConstructionSubcontractor() {
+        return constructionSubcontractor;
+    }
+
+    public void setConstructionSubcontractor(String constructionSubcontractor) {
+        this.constructionSubcontractor = constructionSubcontractor;
+    }
+
+    public String getBehalf() {
+        return behalf;
+    }
+
+    public void setBehalf(String behalf) {
+        this.behalf = behalf;
+    }
+
+    public String getConstructionFullTime() {
+        return constructionFullTime;
+    }
+
+    public void setConstructionFullTime(String constructionFullTime) {
+        this.constructionFullTime = constructionFullTime;
+    }
+
+    public String getConstructionTechnical() {
+        return constructionTechnical;
+    }
+
+    public void setConstructionTechnical(String constructionTechnical) {
+        this.constructionTechnical = constructionTechnical;
+    }
+
+    public String getConstructionManage() {
+        return constructionManage;
+    }
+
+    public void setConstructionManage(String constructionManage) {
+        this.constructionManage = constructionManage;
+    }
+
+    public String getConstructionLeader() {
+        return constructionLeader;
+    }
+
+    public void setConstructionLeader(String constructionLeader) {
+        this.constructionLeader = constructionLeader;
+    }
+
+    public String getSubcontractingContact() {
+        return subcontractingContact;
+    }
+
+    public void setSubcontractingContact(String subcontractingContact) {
+        this.subcontractingContact = subcontractingContact;
+    }
+
+    public String getDesigner() {
+        return designer;
+    }
+
+    public void setDesigner(String designer) {
+        this.designer = designer;
+    }
+
+    public String getDesignLeader() {
+        return designLeader;
+    }
+
+    public void setDesignLeader(String designLeader) {
+        this.designLeader = designLeader;
+    }
+
+    public String getOwnerManager() {
+        return ownerManager;
+    }
+
+    public void setOwnerManager(String ownerManager) {
+        this.ownerManager = ownerManager;
+    }
+
+    public String getDistribution() {
+        return distribution;
+    }
+
+    public void setDistribution(String distribution) {
+        this.distribution = distribution;
+    }
+
+    public String getDistributionFullTime() {
+        return distributionFullTime;
+    }
+
+    public void setDistributionFullTime(String distributionFullTime) {
+        this.distributionFullTime = distributionFullTime;
+    }
+
+    public String getDistributionSystem() {
+        return distributionSystem;
+    }
+
+    public void setDistributionSystem(String distributionSystem) {
+        this.distributionSystem = distributionSystem;
+    }
+
+    public String getDistributionPolicy() {
+        return distributionPolicy;
+    }
+
+    public void setDistributionPolicy(String distributionPolicy) {
+        this.distributionPolicy = distributionPolicy;
+    }
+
+    public String getCenterLeader() {
+        return centerLeader;
+    }
+
+    public void setCenterLeader(String centerLeader) {
+        this.centerLeader = centerLeader;
+    }
+
+    public String getCenterTechnical() {
+        return centerTechnical;
+    }
+
+    public void setCenterTechnical(String centerTechnical) {
+        this.centerTechnical = centerTechnical;
+    }
+
+    public String getInstituteRole() {
+        return instituteRole;
+    }
+
+    public void setInstituteRole(String instituteRole) {
+        this.instituteRole = instituteRole;
+    }
+
+    public String getRepUnit() {
+        return repUnit;
+    }
+
+    public void setRepUnit(String repUnit) {
+        this.repUnit = repUnit;
+    }
+
+    public String getInspectionUnit() {
+        return inspectionUnit;
+    }
+
+    public void setInspectionUnit(String inspectionUnit) {
+        this.inspectionUnit = inspectionUnit;
+    }
+}

+ 178 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/entity/ProjectPlanArrage.java

@@ -0,0 +1,178 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.core.persistence.DataEntity;
+
+import java.util.Date;
+
+public class ProjectPlanArrage extends DataEntity<ProjectPlanArrage> {
+    private String projectName; //项目名称
+    private String projectNumber; //项目定义号
+    private String projectLine; //线路
+    private String projectPowerRange; //停电范围
+    private String projectSwitch; //停电开关
+    private Date projectMonthDate; //停电月份
+    private Date projectDate; //停电日
+    private String projectPowerOut; //是否停电
+    private String status; //状态
+
+
+    private String distributionNetwork;//配网项目经理
+    private String constructionUnit;//施工单位项目经理
+    private String operationUnit;//运行单位项目经理
+
+
+    private String arrageFlag;//未安排标识
+    private String whetherStatus;//是否未父类
+
+    private String htmlStatus;//验证开关字段 0-无提示 1-有提示
+
+    private String backToStauts;//是否退回0-初始状态,1-退回,2-新增
+    private String backToText;//退回备注
+    private String operationStatus;//是否允许操作 0- 允许操作 1-不允许
+
+    public String getOperationStatus() {
+        return operationStatus;
+    }
+
+    public void setOperationStatus(String operationStatus) {
+        this.operationStatus = operationStatus;
+    }
+
+    public String getBackToStauts() {
+        return backToStauts;
+    }
+
+    public void setBackToStauts(String backToStauts) {
+        this.backToStauts = backToStauts;
+    }
+
+    public String getBackToText() {
+        return backToText;
+    }
+
+    public void setBackToText(String backToText) {
+        this.backToText = backToText;
+    }
+
+    public String getHtmlStatus() {
+        return htmlStatus;
+    }
+
+    public void setHtmlStatus(String htmlStatus) {
+        this.htmlStatus = htmlStatus;
+    }
+
+    public String getDistributionNetwork() {
+        return distributionNetwork;
+    }
+
+    public void setDistributionNetwork(String distributionNetwork) {
+        this.distributionNetwork = distributionNetwork;
+    }
+
+    public String getConstructionUnit() {
+        return constructionUnit;
+    }
+
+    public void setConstructionUnit(String constructionUnit) {
+        this.constructionUnit = constructionUnit;
+    }
+
+    public String getOperationUnit() {
+        return operationUnit;
+    }
+
+    public void setOperationUnit(String operationUnit) {
+        this.operationUnit = operationUnit;
+    }
+
+    public String getArrageFlag() {
+        return arrageFlag;
+    }
+
+    public void setArrageFlag(String arrageFlag) {
+        this.arrageFlag = arrageFlag;
+    }
+
+    public String getWhetherStatus() {
+        return whetherStatus;
+    }
+
+    public void setWhetherStatus(String whetherStatus) {
+        this.whetherStatus = whetherStatus;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getProjectNumber() {
+        return projectNumber;
+    }
+
+    public void setProjectNumber(String projectNumber) {
+        this.projectNumber = projectNumber;
+    }
+
+    public String getProjectLine() {
+        return projectLine;
+    }
+
+    public void setProjectLine(String projectLine) {
+        this.projectLine = projectLine;
+    }
+
+    public String getProjectPowerRange() {
+        return projectPowerRange;
+    }
+
+    public void setProjectPowerRange(String projectPowerRange) {
+        this.projectPowerRange = projectPowerRange;
+    }
+
+    public String getProjectSwitch() {
+        return projectSwitch;
+    }
+
+    public void setProjectSwitch(String projectSwitch) {
+        this.projectSwitch = projectSwitch;
+    }
+    @JsonFormat(pattern = "YYYY-MM")
+    public Date getProjectMonthDate() {
+        return projectMonthDate;
+    }
+
+    public void setProjectMonthDate(Date projectMonthDate) {
+        this.projectMonthDate = projectMonthDate;
+    }
+
+    @JsonFormat(pattern = "YYYY-MM-dd")
+    public Date getProjectDate() {
+        return projectDate;
+    }
+
+    public void setProjectDate(Date projectDate) {
+        this.projectDate = projectDate;
+    }
+
+    public String getProjectPowerOut() {
+        return projectPowerOut;
+    }
+
+    public void setProjectPowerOut(String projectPowerOut) {
+        this.projectPowerOut = projectPowerOut;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}

+ 126 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/entity/ProjectQuantity.java

@@ -0,0 +1,126 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 获取停电范围实体类
+ */
+public class ProjectQuantity extends DataEntity<ProjectQuantity> {
+    private String reserveProjectName; //储备项目暂定名称
+    private String includeAutomation; //是否含自动化
+    private String wayOf; //通信方式
+    private String assignmentStyle; //作业方式
+    private String operationSubstation; //是否含变电站新间隔投运
+    private String namingNumber; //是否需调整命名编号
+    private String engineeringAcceptance; //是否存在土建验收
+    private String electricalAcceptance; //是否存在电气验收
+    private String blackoutLine; //停电线路
+    private String outageRange; //停电范围初步校核
+    private String policyIssues; //是否存在政策处理问题
+    private String processingType; //政策处理类型
+    private String processingDescription; //政策处理描述
+
+    public String getReserveProjectName() {
+        return reserveProjectName;
+    }
+
+    public void setReserveProjectName(String reserveProjectName) {
+        this.reserveProjectName = reserveProjectName;
+    }
+
+    public String getIncludeAutomation() {
+        return includeAutomation;
+    }
+
+    public void setIncludeAutomation(String includeAutomation) {
+        this.includeAutomation = includeAutomation;
+    }
+
+    public String getWayOf() {
+        return wayOf;
+    }
+
+    public void setWayOf(String wayOf) {
+        this.wayOf = wayOf;
+    }
+
+    public String getAssignmentStyle() {
+        return assignmentStyle;
+    }
+
+    public void setAssignmentStyle(String assignmentStyle) {
+        this.assignmentStyle = assignmentStyle;
+    }
+
+    public String getOperationSubstation() {
+        return operationSubstation;
+    }
+
+    public void setOperationSubstation(String operationSubstation) {
+        this.operationSubstation = operationSubstation;
+    }
+
+    public String getNamingNumber() {
+        return namingNumber;
+    }
+
+    public void setNamingNumber(String namingNumber) {
+        this.namingNumber = namingNumber;
+    }
+
+    public String getEngineeringAcceptance() {
+        return engineeringAcceptance;
+    }
+
+    public void setEngineeringAcceptance(String engineeringAcceptance) {
+        this.engineeringAcceptance = engineeringAcceptance;
+    }
+
+    public String getElectricalAcceptance() {
+        return electricalAcceptance;
+    }
+
+    public void setElectricalAcceptance(String electricalAcceptance) {
+        this.electricalAcceptance = electricalAcceptance;
+    }
+
+    public String getBlackoutLine() {
+        return blackoutLine;
+    }
+
+    public void setBlackoutLine(String blackoutLine) {
+        this.blackoutLine = blackoutLine;
+    }
+
+    public String getOutageRange() {
+        return outageRange;
+    }
+
+    public void setOutageRange(String outageRange) {
+        this.outageRange = outageRange;
+    }
+
+    public String getPolicyIssues() {
+        return policyIssues;
+    }
+
+    public void setPolicyIssues(String policyIssues) {
+        this.policyIssues = policyIssues;
+    }
+
+    public String getProcessingType() {
+        return processingType;
+    }
+
+    public void setProcessingType(String processingType) {
+        this.processingType = processingType;
+    }
+
+    public String getProcessingDescription() {
+        return processingDescription;
+    }
+
+    public void setProcessingDescription(String processingDescription) {
+        this.processingDescription = processingDescription;
+    }
+}

+ 39 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/mapper/ProjectPlanActMapper.java

@@ -0,0 +1,39 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.mapper;
+
+import com.jeeplus.core.persistence.BaseEntity;
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectActProcIns;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectActProclnsAss;
+import io.swagger.models.auth.In;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@MyBatisMapper
+public interface ProjectPlanActMapper extends BaseMapper<ProjectActProclnsAss> {
+    //添加流程记录列表
+    Integer insertProcInsList(@Param("list") List<ProjectActProcIns> list);
+
+    //添加流程项目记录
+    Integer insertProcInsAssList(@Param("list")List<ProjectActProclnsAss> projectActProclnsAsses);
+
+    //根据流程key获取最大版本号的id
+    String actModelId(String key);
+
+    //保存流程业务表
+    Integer processAct(ProjectActProcIns projectActProcIns);
+
+    //查询方法
+    List<ProjectActProclnsAss> findListAss(ProjectActProclnsAss projectActProclnsAss);
+
+
+    //施工单位项目经理
+    Integer deleteConsAss(ProjectActProclnsAss projectActProclnsAss);
+
+    //配网项目经理
+    Integer deleteNetAss(ProjectActProclnsAss projectActProclnsAss);
+
+    //修改项目状态
+    Integer updateMaterialProject(@Param("list")List<String> strings);
+}

+ 26 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/mapper/ProjectPlanArrageMapper.java

@@ -0,0 +1,26 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.sg.managementcenter.materialproject.entity.MaterialProject;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectAssignment;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectPlanArrage;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectQuantity;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@MyBatisMapper
+public interface ProjectPlanArrageMapper extends BaseMapper<ProjectPlanArrage> {
+    //保存-批处理
+    Integer insertList(@Param("list") List<ProjectPlanArrage> list);
+
+    //根据项目名称查找人员表
+    List<ProjectAssignment> findListAssignment(@Param("list") List<ProjectPlanArrage> list);
+
+    //查找项目表中状态未未安排计划的项目
+    List<MaterialProject> findListMaterialProject(MaterialProject materialProject);
+
+    //根据项目名称查找项目
+    List<ProjectQuantity> findListQuantity(@Param("list") List<ProjectPlanArrage> list);
+}

+ 209 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/mapper/xml/ProjectPlanActMapper.xml

@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.sg.managementcenter.projectPlanArrage.mapper.ProjectPlanActMapper">
+	<sql id="proclnsColumns">
+		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.proc_ins_id AS "procInsId",
+		a.custom_id AS "customId"
+	</sql>
+
+	<sql id="assColumns">
+		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.proc_ins_id AS "procInsId",
+		a.custom_id AS "customId",
+		a.projectName AS "projectName",
+		a.projectNumber AS "projectNumber",
+		a.projectLine AS "projectLine",
+		a.projectPowerRange AS "projectPowerRange",
+		a.projectSwitch AS "projectSwitch",
+		a.projectMonthDate AS "projectMonthDate",
+		a.projectDate AS "projectDate",
+		a.projectPowerOut AS "projectPowerOut",
+		a.status AS "status",
+		a.distributionNetwork AS "distributionNetwork",
+		a.constructionUnit AS "constructionUnit",
+		a.operationUnit AS "operationUnit",
+		a.backToStauts AS "backToStauts",
+		a.backToText AS "backToText"
+	</sql>
+
+	<!--<select id="findListAssList">-->
+		<!--SELECT-->
+		<!--<include refid="assColumns"/>-->
+		<!--FROM xm_project_plan_ass a-->
+		<!--where a.proc_ins_id in-->
+		<!--<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">-->
+			<!--#{item.procInsId}-->
+		<!--</foreach>-->
+	<!--</select>-->
+
+	<select id="findListAss" resultType="com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectActProclnsAss">
+		SELECT
+		<include refid="assColumns"/>
+		FROM xm_project_plan_ass a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+			<if test="procInsId != null and procInsId != ''">
+				AND a.proc_ins_id = #{procInsId}
+			</if>
+			<if test="operationUnit!=null and operationUnit != ''">
+				AND a.operationUnit = #{operationUnit}
+			</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>
+
+
+
+	<insert id="processAct">
+        INSERT INTO xm_project_arrange_procIns(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			proc_ins_id,
+			custom_id
+		) VALUES
+		(
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{procInsId},
+			#{customId}
+		)
+    </insert>
+
+
+	<insert id="insertProcInsList">
+		replace INTO xm_project_arrange_procIns(
+		id,
+		create_by,
+		create_date,
+		update_by,
+		update_date,
+		remarks,
+		del_flag,
+		proc_ins_id,
+		custom_id
+		) 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.procInsId},
+			#{item.customId}
+			)
+		</foreach>
+	</insert>
+
+	<insert id="insertProcInsAssList">
+		replace INTO xm_project_plan_ass(
+		id,
+		create_by,
+		create_date,
+		update_by,
+		update_date,
+		remarks,
+		del_flag,
+		proc_ins_id,
+		custom_id,
+		projectName,
+		projectNumber,
+		projectLine,
+		projectPowerRange,
+		projectSwitch,
+		projectMonthDate,
+		projectDate,
+		projectPowerOut,
+		status,
+		distributionNetwork,
+		constructionUnit,
+		operationUnit,
+		backToStauts,
+		backToText
+		) 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.procInsId},
+			#{item.customId},
+			#{item.projectName},
+			#{item.projectNumber},
+			#{item.projectLine},
+			#{item.projectPowerRange},
+			#{item.projectSwitch},
+			#{item.projectMonthDate},
+			#{item.projectDate},
+			#{item.projectPowerOut},
+			#{item.status},
+			#{item.distributionNetwork},
+			#{item.constructionUnit},
+			#{item.operationUnit},
+			#{item.backToStauts},
+			#{item.backToText}
+			)
+		</foreach>
+	</insert>
+
+	<!-- 根据流程key获取最大版本号的id -->
+	<select id="actModelId" resultType="java.lang.String">
+		select ID_ FROM act_re_procdef where KEY_ = #{key} and  VERSION_ =
+		(select MAX(VERSION_) FROM act_re_procdef where KEY_ = #{key})
+	</select>
+
+	<delete id="deleteConsAss">
+		delete from xm_project_plan_ass
+		where constructionUnit = #{constructionUnit}  and proc_ins_id = #{procInsId}
+	</delete>
+
+	<delete id="deleteNetAss">
+		delete from xm_project_plan_ass
+		where proc_ins_id = #{procInsId}
+	</delete>
+
+	<update id="updateMaterialProject">
+		UPDATE xm_material_project SET
+		arrageProject = '1'
+		WHERE reserveProjectName in
+		<foreach collection="list" open="(" close=")" item="item" separator=",">
+			#{item}
+		</foreach>
+	</update>
+
+</mapper>

+ 259 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/mapper/xml/ProjectPlanArrageMapper.xml

@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.sg.managementcenter.projectPlanArrage.mapper.ProjectPlanArrageMapper">
+    
+	<sql id="constructionColumns">
+		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.projectName AS "projectName",
+		a.projectNumber AS "projectNumber",
+		a.projectLine AS "projectLine",
+		a.projectPowerRange AS "projectPowerRange",
+		a.projectSwitch AS "projectSwitch",
+		a.projectMonthDate AS "projectMonthDate",
+		a.projectDate AS "projectDate",
+		a.projectPowerOut AS "projectPowerOut",
+		a.status AS "status"
+	</sql>
+
+	<sql id="infoColumns">
+        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.reserveProjectName,
+		a.reserveCode,
+		a.projectType,
+		a.batchPlan,
+		a.issuePlan,
+		a.monthPlan,
+		a.hasPlan,
+		a.halfPlan,
+		a.projectName,
+		a.projectId
+    </sql>
+
+	<sql id="quantityColumns">
+		 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.reserveProjectName AS "reserveProjectName",
+		a.includeAutomation AS "includeAutomation",
+		a.wayOf AS "wayOf",
+		a.assignmentStyle AS "assignmentStyle",
+		a.operationSubstation AS "operationSubstation",
+		a.namingNumber AS "namingNumber",
+		a.engineeringAcceptance AS "engineeringAcceptance",
+		a.electricalAcceptance AS "electricalAcceptance",
+		a.blackoutLine AS "blackoutLine",
+		a.outageRange AS "outageRange",
+		a.policyIssues AS "policyIssues",
+		a.processingType AS "processingType",
+		a.processingDescription AS "processingDescription"
+	</sql>
+
+	<select id="findListMaterialProject" resultType="com.jeeplus.modules.sg.managementcenter.materialproject.entity.MaterialProject">
+		SELECT
+		<include refid="infoColumns"/>
+		FROM xm_material_project a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+			<if test="arrageProject != null and arrageProject != ''">
+				AND a.arrageProject = #{arrageProject}
+			</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="findListQuantity" resultType="com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectQuantity">
+		SELECT
+		<include refid="quantityColumns"/>
+		FROM xm_project_quantity a
+		where a.reserveProjectName in
+		<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
+			#{item.projectName}
+		</foreach>
+	</select>
+
+	<select id="get" resultType="com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectPlanArrage" >
+		SELECT 
+			<include refid="constructionColumns"/>
+		FROM xm_project_plan_arrange a
+		WHERE a.id = #{id}
+	</select>
+	
+	<select id="findList" resultType="com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectPlanArrage" >
+		SELECT
+			<include refid="constructionColumns"/>
+		FROM xm_project_plan_arrange a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+		</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>
+
+	<insert id="insert">
+		  INSERT INTO xm_project_plan_arrange(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			projectName,
+			projectNumber,
+			projectLine,
+			projectPowerRange,
+			projectSwitch,
+			projectMonthDate,
+			projectDate,
+			projectPowerOut,
+			status
+		) VALUES
+		(
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{projectName},
+			#{projectNumber},
+			#{projectLine},
+			#{projectPowerRange},
+			#{projectSwitch},
+			#{projectMonthDate},
+			#{projectDate},
+			#{projectPowerOut},
+			#{status}
+		)
+	</insert>
+
+	<insert id="insertList">
+		replace INTO xm_project_plan_arrange(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			projectName,
+			projectNumber,
+			projectLine,
+			projectPowerRange,
+			projectSwitch,
+			projectMonthDate,
+			projectDate,
+			projectPowerOut	,
+			status
+		) 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.projectNumber},
+			#{item.projectLine},
+			#{item.projectPowerRange},
+			#{item.projectSwitch},
+			#{item.projectMonthDate},
+			#{item.projectDate},
+			#{item.projectPowerOut},
+			#{item.status}
+			)
+		</foreach>
+	</insert>
+
+	<update id="update">
+		UPDATE xm_project_plan_arrange SET
+
+		WHERE id = #{id}
+	</update>
+
+	<!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
+	<select id="findUniqueByProperty" resultType="com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectPlanArrage" statementType="STATEMENT">
+		select * FROM xm_project_plan_arrange where ${id} = '${value}'
+	</select>
+
+	<sql id="assignmentColumns">
+		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.reserveProjectName AS "reserveProjectName",
+		a.disclosureType AS "disclosureType",
+		a.projectReleaseBatch AS "projectReleaseBatch",
+		a.deliveryDate AS "deliveryDate",
+		a.packageNo AS "packageNo",
+		a.rate AS "rate",
+		a.assignedUnit AS "assignedUnit",
+		a.constructionUnit AS "constructionUnit",
+		a.constructionSubcontractor AS "constructionSubcontractor",
+		a.behalf AS "behalf",
+		a.constructionFullTime AS "constructionFullTime",
+		a.constructionTechnical AS "constructionTechnical",
+		a.constructionManage AS "constructionManage",
+		a.constructionLeader AS "constructionLeader",
+		a.subcontractingContact AS "subcontractingContact",
+		a.designer AS "designer",
+		a.designLeader AS "designLeader",
+		a.ownerManager AS "ownerManager",
+		a.distribution AS "distribution",
+		a.distributionFullTime AS "distributionFullTime",
+		a.distributionSystem AS "distributionSystem",
+		a.distributionPolicy AS "distributionPolicy",
+		a.centerLeader AS "centerLeader",
+		a.centerTechnical AS "centerTechnical",
+		a.instituteRole AS "instituteRole",
+		a.repUnit AS "repUnit",
+		a.inspectionUnit AS "inspectionUnit"
+	</sql>
+
+
+	<select id="findListAssignment" resultType="com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectAssignment">
+		SELECT
+		<include refid="assignmentColumns"/>
+		FROM xm_project_assignment a
+		where a.reserveProjectName in
+		<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
+			#{item.projectName}
+		</foreach>
+	</select>
+</mapper>

+ 454 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/service/ProjectPlanActService.java

@@ -0,0 +1,454 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.service;
+
+import com.google.common.collect.Maps;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.mapper.ActMapper;
+import com.jeeplus.modules.act.service.ActProcessService;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectActProcIns;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectActProclnsAss;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectPlanArrage;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.mapper.ProjectPlanActMapper;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util.PackagingUtil;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import org.activiti.engine.IdentityService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.spring.ProcessEngineFactoryBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service
+@Transactional(readOnly = true)
+public class ProjectPlanActService{
+    @Autowired
+    private ProjectPlanActMapper projectPlanActMapper;
+    @Autowired
+    private ActMapper actMapper;
+    @Autowired
+    private ProcessEngineFactoryBean processEngine;
+    @Autowired
+    private RuntimeService runtimeService;
+    @Autowired
+    private IdentityService identityService;
+    @Autowired
+    private ActProcessService actProcessService;
+    @Autowired
+    private ActTaskService actTaskService;
+
+    //查询配网项目经理当前安排的计划
+    public List<ProjectActProclnsAss> findListAss(ProjectActProclnsAss projectActProclnsAss){
+        return projectPlanActMapper.findListAss(projectActProclnsAss);
+    }
+
+    //启动工作流流程
+    @Transactional(readOnly = false)
+    public void startProjectArrangeAct(List<ProjectPlanArrage> projectPlanArrages){
+        ProjectActProcIns projectActProcIns = new ProjectActProcIns();
+        projectActProcIns.preInsert();
+        projectActProcIns.setCustomId("0");//初始状态为完成
+        projectPlanActMapper.processAct(projectActProcIns);//保存
+
+        String procDefKey="jhap";//流程定义KEY
+        String businessTable="xm_project_arrange_procIns";//业务表表名
+        String businessId="0739e9eafe034e05930c4202e6368b9d";//业务表编号
+        //根据key获取最大版本的版本号
+        String procDefId = projectPlanActMapper.actModelId(procDefKey);
+        //启动流程
+        ProcessDefinition p = actProcessService.getProcessDefinition(procDefId);
+        //定义Map
+        Map<String, Object> vars = Maps.newHashMap();
+        //流程标题
+        String title=UserUtils.getUser().getName()+ "在" + DateUtils.getDateTime() + "发起" + p.getName();//流程标题,显示在待办任务标题
+        List<String> personName = getPersonName(projectPlanArrages, "1");//获取施工单位项目经理集合
+        getConsMaps(vars,personName);
+        startProcessConsProject(procDefKey,businessTable,businessId,title,vars,projectActProcIns,projectPlanArrages);
+    }
+    public void getConsMaps(Map<String, Object> vars,List<String> personName){
+        int len = personName.size();
+        String cons = "";
+        String constructionManager = "";
+        boolean flag = false;
+        for (int i = 1; i <= 20; i++) {
+            flag = false;
+            cons = "cons"+i;
+            if (i-1<len){
+                flag = true;
+            }
+            vars.put(cons,flag);
+        }
+        int count = 1;
+        for (String ct:personName){
+            constructionManager = "constructionManager"+count;
+            vars.put(constructionManager,UserUtils.getByUserName(ct).getLoginName());
+            count++;
+        }
+    }
+
+    @Transactional(readOnly = false)
+    public void startProcessConsProject(String procDefKey, String businessTable, String businessId, String title, Map<String, Object> vars,ProjectActProcIns projectActProcIns,List<ProjectPlanArrage> projectPlanArrages) {
+        // 设置流程变量
+        if (vars == null) {
+            vars = Maps.newHashMap();
+        }
+
+        String userId = (String) vars.get("applyUserId");
+        if (userId == null) {
+            userId = UserUtils.getUser().getLoginName();
+        }
+        String userName = UserUtils.getByLoginName(userId).getName();
+        vars.put("userName", userName);
+
+        // 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
+        identityService.setAuthenticatedUserId(userId);
+
+        // 设置流程标题
+        if (StringUtils.isNotBlank(title)) {
+            vars.put("title", title);
+        }
+
+        // 启动流程
+        ProcessInstance procIns = runtimeService.startProcessInstanceByKey(procDefKey, businessTable + ":" + businessId, vars);
+        Act act = new Act();
+        act.setBusinessTable(businessTable);// 业务表名
+        act.setBusinessId(projectActProcIns.getId());    // 业务表ID
+        act.setProcInsId(procIns.getId());
+        act.setVars(vars);
+        actMapper.updateProcInsIdByBusinessId(act);
+        // 更新业务表流程实例ID
+        List<ProjectActProclnsAss> projectActProclnsAss = getProjectActProclnsAss(projectPlanArrages, procIns.getId());
+        projectPlanActMapper.insertProcInsAssList(projectActProclnsAss);
+    }
+
+    //获取不同执行人:施工单位项目经理  施工单位项目经理1 配网项目经理 2 运行单位项目经理 3
+    public List<String> getPersonName(List<ProjectPlanArrage> projectPlanArrages,String str){
+        HashSet<String> hashSet = new HashSet<String>();
+        for (ProjectPlanArrage planArrage:projectPlanArrages){
+            if (str.equals("1")){//施工单位项目经理  = 1
+                if (null!=planArrage.getConstructionUnit()&&!"".equals(planArrage.getConstructionUnit())){
+                    hashSet.add(planArrage.getConstructionUnit());
+                }
+            }
+            if (str.equals("2")){//配网项目经理  = 1
+                if (null!=planArrage.getDistributionNetwork()&&!"".equals(planArrage.getDistributionNetwork())){
+                    hashSet.add(planArrage.getDistributionNetwork());
+                }
+            }
+            if (str.equals("3")){//运行单位项目经理  = 1
+                if (null!=planArrage.getOperationUnit()&&!"".equals(planArrage.getOperationUnit())){
+                    hashSet.add(planArrage.getOperationUnit());
+                }
+            }
+
+        }
+        List<String> stringList = new ArrayList<String>();
+        for (String s :hashSet){
+            stringList.add(s);
+        }
+        return stringList;
+    }
+
+    //替换类
+    public List<ProjectActProclnsAss> getProjectActProclnsAss(List<ProjectPlanArrage> projectPlanArrages,String procInsId){
+        List<ProjectActProclnsAss> projectActProclnsAsses = new ArrayList<ProjectActProclnsAss>();
+        ProjectActProclnsAss projectActProclnsAss = null;
+        for (ProjectPlanArrage planArrage:projectPlanArrages){
+            projectActProclnsAss = new ProjectActProclnsAss();
+            projectActProclnsAss.preInsert();
+            projectActProclnsAss.setProcInsId(procInsId);
+            projectActProclnsAss.setCustomId("0");
+            projectActProclnsAss.setProjectName(planArrage.getProjectName());
+            projectActProclnsAss.setProjectNumber(planArrage.getProjectNumber());
+            projectActProclnsAss.setProjectLine(planArrage.getProjectLine());
+            projectActProclnsAss.setProjectPowerRange(planArrage.getProjectPowerRange());
+            projectActProclnsAss.setProjectSwitch(planArrage.getProjectSwitch());
+            projectActProclnsAss.setProjectMonthDate(planArrage.getProjectMonthDate());
+            projectActProclnsAss.setProjectDate(planArrage.getProjectDate());
+            projectActProclnsAss.setProjectPowerOut(planArrage.getProjectPowerOut());
+            projectActProclnsAss.setStatus("0");
+            projectActProclnsAss.setDistributionNetwork(planArrage.getDistributionNetwork());
+            projectActProclnsAss.setConstructionUnit(planArrage.getConstructionUnit());
+            projectActProclnsAss.setOperationUnit(planArrage.getOperationUnit());
+            projectActProclnsAss.setBackToStauts("0");
+            projectActProclnsAsses.add(projectActProclnsAss);
+        }
+        return projectActProclnsAsses;
+    }
+
+    /**
+     * 生成随机数
+     * @return
+     */
+    public String getStatus(){
+        int machineId = 1;
+        int hashCodeV = UUID.randomUUID().toString().hashCode();
+        if (hashCodeV<0){
+            hashCodeV=-hashCodeV;
+        }
+        return  (machineId+String.format("%015d",hashCodeV));
+    }
+
+
+    //获取当前的项目定义号
+    public String getMapProjectId(List<ProjectActProclnsAss> listAss){
+        String str = "";
+        for (ProjectActProclnsAss proclnsAss:listAss){
+            if (null!=proclnsAss.getProjectName()&&!"".equals(proclnsAss.getProjectName())&&null!=proclnsAss.getProjectNumber()&&!"".equals(proclnsAss.getProjectNumber())){
+                str+=proclnsAss.getProjectNumber()+",";
+            }
+        }
+        str = str.substring(0,str.length()-1);
+        return str;
+    }
+
+    //得到安排计划月份
+    public Date getMouthDate(List<ProjectActProclnsAss> listAss){
+        Date date = new Date();
+        for (ProjectActProclnsAss proclnsAss:listAss){
+            if (null!=proclnsAss.getProjectMonthDate()&&!"".equals(proclnsAss.getProjectMonthDate())){
+                date = proclnsAss.getProjectMonthDate();
+                break;
+            }
+        }
+        return date;
+    }
+
+    //得到安排计划月份
+    public String getProjectPowerOut(List<ProjectActProclnsAss> listAss){
+        String string = "停电";
+        for (ProjectActProclnsAss proclnsAss:listAss){
+            if (null!=proclnsAss.getProjectPowerOut()&&!"".equals(proclnsAss.getProjectPowerOut())){
+                string = proclnsAss.getProjectPowerOut();
+                break;
+            }
+        }
+        return string;
+    }
+
+
+    //提取月份日期
+    public Date getProjectMonthDate(List<ProjectActProclnsAss> listAss){
+        Date date = null;
+        for (ProjectActProclnsAss proclnsAss:listAss){
+            date = proclnsAss.getProjectMonthDate();
+            break;
+        }
+        return date;
+    }
+
+    //汇总,获取最终集合--施工单位项目经理
+    public List<ProjectPlanArrage> getSummaryService(List<ProjectPlanArrage> projectPlanArrages,List<ProjectActProclnsAss> projectActProclnsAsses){
+        String name = UserUtils.getUser().getName();//获取当前操作人
+        for (ProjectActProclnsAss proclnsAss:projectActProclnsAsses){
+            for (ProjectPlanArrage planArrage:projectPlanArrages){
+                if (planArrage.getProjectName().equals(proclnsAss.getProjectName())&&planArrage.getProjectNumber().equals(proclnsAss.getProjectNumber())){
+                    planArrage.setProjectMonthDate(proclnsAss.getProjectMonthDate());
+                    planArrage.setProjectDate(proclnsAss.getProjectDate());
+                    planArrage.setBackToStauts(proclnsAss.getBackToStauts());
+                    planArrage.setBackToText(proclnsAss.getBackToText());
+                    planArrage.setConstructionUnit(proclnsAss.getConstructionUnit());
+                    planArrage.setProjectPowerOut(proclnsAss.getProjectPowerOut());
+                    if (proclnsAss.getConstructionUnit().equals(name)){
+                        planArrage.setOperationStatus("0");//允许操作
+                    }else {
+                        planArrage.setOperationStatus("1");//不允许操作
+                    }
+                    break;
+                }
+            }
+        }
+        return projectPlanArrages;
+    }
+
+    //汇总,获取最终集合--配网项目经理
+    public List<ProjectPlanArrage> getNetworkService(List<ProjectPlanArrage> projectPlanArrages,List<ProjectActProclnsAss> projectActProclnsAsses){
+        for (ProjectActProclnsAss proclnsAss:projectActProclnsAsses){
+            for (ProjectPlanArrage planArrage:projectPlanArrages){
+                if (planArrage.getProjectName().equals(proclnsAss.getProjectName())&&planArrage.getProjectNumber().equals(proclnsAss.getProjectNumber())){
+                    planArrage.setProjectMonthDate(proclnsAss.getProjectMonthDate());
+                    planArrage.setProjectDate(proclnsAss.getProjectDate());
+                    planArrage.setBackToStauts(proclnsAss.getBackToStauts());
+                    planArrage.setBackToText(proclnsAss.getBackToText());
+                    planArrage.setConstructionUnit(proclnsAss.getConstructionUnit());
+                    planArrage.setProjectPowerOut(proclnsAss.getProjectPowerOut());
+                    break;
+                }
+            }
+        }
+        return projectPlanArrages;
+    }
+
+    //验证当前自己操作的项目时间为空的判断---施工单位项目经理
+    public boolean getJudgePlanTimeNULL(List<ProjectPlanArrage> projectPlanArrages){
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        boolean flag = false;
+        String name = UserUtils.getUser().getName();
+        for (ProjectPlanArrage planArrage:projectPlanArrages){
+            //得到计划安排的项目
+            if (planArrage.getWhetherStatus().equals("0")&&planArrage.getArrageFlag().equals("1")){
+                if (name.equals(planArrage.getConstructionUnit())){
+                    if (null==planArrage.getProjectDate()){
+                        flag = true;
+                        break;
+                    }
+                }
+            }
+        }
+        return flag;
+    }
+
+    //验证时间集合时间不一致--施工单位项目项目经理
+    public boolean getJudgePlanTimeService(List<ProjectPlanArrage> projectPlanArrages){
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        boolean flag = false;
+        List<ProjectPlanArrage> projectPlanArrageList = new ArrayList<ProjectPlanArrage>();
+        for (ProjectPlanArrage plan:projectPlanArrages){
+            projectPlanArrageList.add(plan);
+        }
+        HashSet<String> stringHashSet = new HashSet<String>();
+        for (ProjectPlanArrage planArrage:projectPlanArrages){
+            flag = false;
+            //如果时间不为空
+            if (null!=planArrage.getProjectDate()){
+                stringHashSet = new HashSet<String>();
+                PackagingUtil.getSplice(planArrage.getProjectPowerRange(),stringHashSet);
+                for (ProjectPlanArrage planArrage1:projectPlanArrageList){
+                    if (null!=planArrage1.getProjectDate()){
+                        for (String s:stringHashSet){
+                            if (planArrage1.getProjectPowerRange().contains(s)){
+                                if (!sdf.format(planArrage.getProjectDate()).equals(sdf.format(planArrage1.getProjectDate()))){
+                                    flag = true;
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                    if (flag){
+                        break;
+                    }
+                }
+            }
+            if (flag){
+                break;
+            }
+        }
+        return  flag;
+    }
+
+    //施工单位项目 经理 向配网项目经理发送流程
+    @Transactional(readOnly = false)
+    public void conRunProInsId(Act act,List<ProjectPlanArrage> projectPlans,List<ProjectPlanArrage> presentActProInsAss){
+        // 设置意见
+        act.setComment(("yes".equals(act.getFlag()) ? "[同意] " : "[驳回] ") + act.getComment());
+        act.preUpdate();
+        // 对不同环节的业务逻辑进行操作
+        String taskDefKey = act.getTaskDefKey();
+        // 提交流程任务
+        Map<String, Object> vars = Maps.newHashMap();
+        String admin = UserUtils.getByUserName("肖文和").getLoginName();
+        vars.put("disManager",admin);
+        actTaskService.complete(act.getTaskId(), act.getProcInsId(), act.getComment(), vars);
+        //业务 处理保存 流程表
+        //获取流程id
+        String procInsId = act.getProcInsId();
+        String name = UserUtils.getUser().getName();//获取当前登录名
+        //得到所有安排计划的项目
+        List<ProjectActProclnsAss> projectActProcInsAssList = PackagingUtil.getProjectActProcInsAssList(projectPlans, procInsId);
+        ProjectActProclnsAss proclnsAss = new ProjectActProclnsAss();
+        proclnsAss.setProcInsId(procInsId);
+        proclnsAss.setConstructionUnit(name);
+        projectPlanActMapper.deleteConsAss(proclnsAss);
+        projectPlanActMapper.insertProcInsAssList(projectActProcInsAssList);
+    }
+
+
+    //配网项目 经理 向运行单位人员发送流程
+    @Transactional(readOnly = false)
+    public void newWorkRunProInsId(Act act,List<ProjectPlanArrage> projectPlans){
+        // 设置意见
+        act.setComment(("yes".equals(act.getFlag()) ? "[同意] " : "[驳回] ") + act.getComment());
+        act.preUpdate();
+        // 对不同环节的业务逻辑进行操作
+        String taskDefKey = act.getTaskDefKey();
+        //获取人
+        List<String> personName = getPersonName(projectPlans, "3");//获取施工单位项目经理集合
+        // 提交流程任务
+        Map<String, Object> vars = Maps.newHashMap();
+        getRunsMaps(vars,personName);
+        actTaskService.complete(act.getTaskId(), act.getProcInsId(), act.getComment(), vars);
+        //业务 处理保存 流程表
+        //获取流程id
+        String procInsId = act.getProcInsId();
+        ProjectActProclnsAss procNet = new ProjectActProclnsAss();
+        procNet.setProcInsId(procInsId);
+        //删除
+        projectPlanActMapper.deleteNetAss(procNet);
+        List<ProjectActProclnsAss> netList = PackagingUtil.getNetList(projectPlans, procInsId);
+        projectPlanActMapper.insertProcInsAssList(netList);
+    }
+    public void getRunsMaps(Map<String, Object> vars,List<String> personName){
+        int len = personName.size();
+        String cons = "";
+        String constructionManager = "";
+        boolean flag = false;
+        for (int i = 1; i <= 20; i++) {
+            flag = false;
+            cons = "runs"+i;
+            if (i-1<len){
+                flag = true;
+            }
+            vars.put(cons,flag);
+        }
+        int count = 1;
+        for (String ct:personName){
+            constructionManager = "runPerson"+count;
+            vars.put(constructionManager,UserUtils.getByUserName(ct).getLoginName());
+            count++;
+        }
+    }
+
+
+    //配网项目 经理 向运行单位人员发送流程
+    @Transactional(readOnly = false)
+    public void runListRunProInsId(Act act){
+        // 设置意见
+        act.setComment(("yes".equals(act.getFlag()) ? "[同意] " : "[驳回] ") + act.getComment());
+        act.preUpdate();
+        // 对不同环节的业务逻辑进行操作
+        String taskDefKey = act.getTaskDefKey();
+        // 提交流程任务
+        Map<String, Object> vars = Maps.newHashMap();
+//        String admin = UserUtils.getByUserName("李云龙").getLoginName();
+        vars.put("disManager2","xiaowh");
+        actTaskService.complete(act.getTaskId(), act.getProcInsId(), act.getComment(), vars);
+    }
+
+    //配网项目 经理 ---结束流程
+    @Transactional(readOnly = false)
+    public void disList2ProInsId(Act act,List<ProjectActProclnsAss> listAss){
+        // 设置意见
+        act.setComment(("yes".equals(act.getFlag()) ? "[同意] " : "[驳回] ") + act.getComment());
+        act.preUpdate();
+        // 对不同环节的业务逻辑进行操作
+        String taskDefKey = act.getTaskDefKey();
+        // 提交流程任务
+        Map<String, Object> vars = Maps.newHashMap();
+        actTaskService.complete(act.getTaskId(), act.getProcInsId(), act.getComment(), vars);
+        //获取项目名称
+        List<String> strings = new ArrayList<String>();
+        for (ProjectActProclnsAss proclnsAss:listAss){
+            if (null!=proclnsAss.getProjectName()&&!"".equals(proclnsAss.getProjectName())){
+                strings.add(proclnsAss.getProjectName());
+            }
+        }
+        projectPlanActMapper.updateMaterialProject(strings);
+    }
+}

+ 457 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/service/ProjectPlanArrageService.java

@@ -0,0 +1,457 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.service;
+
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.sg.managementcenter.materialproject.entity.MaterialProject;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectAssignment;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectPlanArrage;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectQuantity;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.mapper.ProjectPlanArrageMapper;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util.ImportUtil;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util.PackagingUtil;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.annotations.Param;
+import org.apache.poi.ss.usermodel.Row;
+import org.omg.CORBA.PUBLIC_MEMBER;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+
+@Service
+@Transactional(readOnly = true)
+public class ProjectPlanArrageService extends CrudService<ProjectPlanArrageMapper, ProjectPlanArrage> {
+    @Autowired
+    private ProjectPlanArrageMapper projectPlanArrageMapper;
+
+    //保存项目计划安排
+    @Transactional(readOnly = false)
+    public void insertList(List<ProjectPlanArrage> projectPlanArrages){
+        for (ProjectPlanArrage planArrage:projectPlanArrages){
+            planArrage.preInsert();
+        }
+        projectPlanArrageMapper.insertList(projectPlanArrages);
+    }
+
+    //查询项目计划的里,查询状态未安排的计划的项目
+    public List<MaterialProject> findListMaterialProject(MaterialProject materialProject) {
+        return projectPlanArrageMapper.findListMaterialProject(materialProject);
+    }
+
+    //根据项目名称查找项目
+    public List<ProjectQuantity> findListQuantity(List<ProjectPlanArrage> list) {
+        return projectPlanArrageMapper.findListQuantity(list);
+    }
+
+    //根据项目名称查找人员表
+    public List<ProjectAssignment> findListAssignment(List<ProjectPlanArrage> projectPlanArrages) {
+        return projectPlanArrageMapper.findListAssignment(projectPlanArrages);
+    }
+
+    //获取两张表相同的数据
+    public List<ProjectPlanArrage> getPlanArrageList(List<ProjectPlanArrage> projectPlanArrageList, List<ProjectAssignment> listAssignment) {
+        List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+        for (ProjectAssignment projectAssignment : listAssignment) {
+            for (ProjectPlanArrage planArrage : projectPlanArrageList) {
+                if (projectAssignment.getReserveProjectName().equals(planArrage.getProjectName())) {
+                    planArrage.setDistributionNetwork(projectAssignment.getOwnerManager());
+                    planArrage.setConstructionUnit(projectAssignment.getConstructionManage());
+                    planArrage.setOperationUnit(projectAssignment.getRepUnit());
+                    planArrages.add(planArrage);
+                    break;
+                }
+            }
+        }
+        return planArrages;
+    }
+
+    //获取最终待安排的项目list  --树形
+    public List<ProjectPlanArrage> getProjectPlanArrageList(){
+        //初始list
+        List<ProjectPlanArrage> projectPlanArrages = new ArrayList<ProjectPlanArrage>();
+        //获取项目计划安排的初始项目
+        MaterialProject materialProject = new MaterialProject();
+        materialProject.setArrageProject("0");
+        //得到所有未安排的计划
+        List<MaterialProject> listMaterialProject = findListMaterialProject(materialProject);
+        //得到所有立项信息的项目--有项目定义号:项目名称
+        ProjectPlanArrage projectPlanArrage = new ProjectPlanArrage();
+        for (MaterialProject m:listMaterialProject){
+            //判断是否存在项目定义号以及项目名称
+            if (null!=m.getReserveProjectName()&& null!=m.getProjectId() &&!"".equals(m.getReserveProjectName())&&!"".equals(m.getProjectId())){
+                projectPlanArrage = new ProjectPlanArrage();
+                projectPlanArrage.setProjectName(m.getReserveProjectName());//获取项目定义号
+                projectPlanArrage.setProjectNumber(m.getProjectId());//获取项目id
+                projectPlanArrages.add(projectPlanArrage);//添加入集合
+            }
+        }
+        //得到停电范围和信息数据
+        List<ProjectQuantity> listQuantity = new ArrayList<ProjectQuantity>();
+        if (!projectPlanArrages.isEmpty()){
+            listQuantity = findListQuantity(projectPlanArrages);
+        }
+        //合并未一个实体类集合获得未安排的计划
+        List<ProjectPlanArrage> list = new ArrayList<ProjectPlanArrage>();
+        String projectName = "";//项目定义号
+        String projectId = "";//项目id
+        ProjectPlanArrage planArrage = null;
+        for (ProjectPlanArrage p: projectPlanArrages){
+            projectName = p.getProjectName();//获取项目定义号
+            projectId = p.getProjectNumber();//项目定义号
+            for (ProjectQuantity q:listQuantity){
+                if (q.getReserveProjectName().equals(projectName)){
+                    planArrage = new ProjectPlanArrage();
+                    planArrage.setProjectName(projectName);//获取名称
+                    planArrage.setProjectNumber(projectId);//项目id
+                    planArrage.setProjectLine(q.getBlackoutLine());//项目线路
+                    planArrage.setProjectPowerRange(q.getOutageRange());//停电范围
+                    list.add(planArrage);//添加集合
+                    break;
+                }
+            }
+        }
+        return list;
+    }
+
+    //定义树形基本List状态-包含开关的list--同处一级
+    public List<ProjectPlanArrage> getProjectList(List<ProjectPlanArrage> projectPlanArrages){
+        //获取所有开关集合
+        HashSet<String> outageRanges = new HashSet<String>();
+        //获取所有的停电开关
+        String[] split;
+        List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+        ProjectPlanArrage projectPlanArrage = null;
+        for (ProjectPlanArrage pr:projectPlanArrages){
+            pr.setArrageFlag("0");
+            pr.setWhetherStatus("0");//子类
+            planArrages.add(pr);
+            split = pr.getProjectPowerRange().split(",");
+            for (String str:split){
+                outageRanges.add(str);
+            }
+        }
+        //加入集合
+        for (String range:outageRanges){
+            projectPlanArrage = new ProjectPlanArrage();//定义新的对象
+            projectPlanArrage.preInsert();
+            projectPlanArrage.setProjectName(range);
+            projectPlanArrage.setArrageFlag("0");//0-未安排 1-已安排
+            projectPlanArrage.setWhetherStatus("1");//父类
+            planArrages.add(projectPlanArrage);
+        }
+        return planArrages;
+    }
+
+
+    //安排项目计划 -- 按钮功能 获取相同id相同以及包含开关的方法--配网项目经理初始安排计划
+    public void getUnplannedService(List<ProjectPlanArrage> projectPlanArrages,List<String> idList){
+
+        //复制所有数据集合,以供使用
+        List<ProjectPlanArrage> copyProjectPlanArrage = PackagingUtil.getCopyProjectPlanArrage(projectPlanArrages);
+        //获取用户选择安排计划项目定义号的项目
+        List<ProjectPlanArrage> planArragesChild = new ArrayList<ProjectPlanArrage>();//子类集合
+
+        HashSet<String> hashSet = new HashSet<String>();
+        //得到集合
+        for (String id:idList){
+            for (ProjectPlanArrage projectPlanArrage:copyProjectPlanArrage){
+                if (id.equals(projectPlanArrage.getId())){
+                    if (projectPlanArrage.getWhetherStatus().equals("0")){
+                        planArragesChild.add(projectPlanArrage);
+                        PackagingUtil.getSplice(projectPlanArrage.getProjectPowerRange(),hashSet);
+                        break;
+                    }
+                }
+            }
+        }
+        PackagingUtil.getRecursive(copyProjectPlanArrage,hashSet);
+        //处理子类集合 -- 如果子类集合不为空
+        if (!planArragesChild.isEmpty()){
+            for (ProjectPlanArrage pa:projectPlanArrages){
+                if (!pa.getWhetherStatus().equals("1")){
+                    for (String s:hashSet){
+                        if (pa.getProjectPowerRange().contains(s)){
+                            pa.setArrageFlag("1");
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    //退回操作--第二次配网项目经理
+    public void getNetWorkSecond(List<ProjectPlanArrage> projectPlanArrages,List<String> idList){
+        for (String id:idList){
+            for (ProjectPlanArrage planArrage:projectPlanArrages){
+                if (planArrage.getId().equals(id)){
+                    planArrage.setArrageFlag("0");
+                    break;
+                }
+            }
+        }
+    }
+
+
+    //退回项目计划 -- 按钮功能 获取相同id相同以及包含开关的方法
+    public void getTheRoBackService(List<ProjectPlanArrage> projectPlanArrages,List<String> idList){
+        //复制所有数据集合,以供使用
+        List<ProjectPlanArrage> copyProjectPlanArrage = PackagingUtil.getCopyProjectPlanArrage(projectPlanArrages);
+        //获取用户选择安排计划项目定义号的项目
+        List<ProjectPlanArrage> planArragesChild = new ArrayList<ProjectPlanArrage>();//子类集合
+
+        HashSet<String> hashSet = new HashSet<String>();
+        //得到集合
+        for (String id:idList){
+            for (ProjectPlanArrage projectPlanArrage:copyProjectPlanArrage){
+                if (id.equals(projectPlanArrage.getId())){
+                    if (projectPlanArrage.getWhetherStatus().equals("0")){
+                        planArragesChild.add(projectPlanArrage);
+                        PackagingUtil.getSplice(projectPlanArrage.getProjectPowerRange(),hashSet);
+                        break;
+                    }
+                }
+            }
+        }
+        PackagingUtil.getRecursive(copyProjectPlanArrage,hashSet);
+        //处理子类集合 -- 如果子类集合不为空
+        if (!planArragesChild.isEmpty()){
+            for (ProjectPlanArrage pa:projectPlanArrages){
+                if (!pa.getWhetherStatus().equals("1")){
+                    for (String s:hashSet){
+                        if (pa.getProjectPowerRange().contains(s)){
+                            pa.setArrageFlag("0");
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    //检验开关是否为同一停电包--检验功能
+    public List<ProjectPlanArrage> inspectionService(String ids,List<ProjectPlanArrage> projectPlans){
+        //根据id进行截取
+        List<ProjectPlanArrage> inspectionFunction = getInspectionFunction(ids);
+        //复制给现有集合
+        for (ProjectPlanArrage planArrage1:projectPlans){
+            for (ProjectPlanArrage planArrage2:inspectionFunction){
+                if (planArrage1.getId().equals(planArrage2.getId())){
+                    planArrage1.setProjectPowerOut(planArrage2.getProjectPowerOut());
+                }
+            }
+        }
+        //带电
+        List<ProjectPlanArrage> planYesArrageList = new ArrayList<ProjectPlanArrage>();
+        //停电
+        List<ProjectPlanArrage> planNoArrageList = new ArrayList<ProjectPlanArrage>();
+
+        //循环打包
+        for (ProjectPlanArrage planArrage:projectPlans){
+            //安排的计划
+            if (planArrage.getArrageFlag().equals("1")&&planArrage.getWhetherStatus().equals("0")){
+                if (planArrage.getProjectPowerOut().equals("停电")){
+                    planNoArrageList.add(planArrage);
+                }else {
+                    planYesArrageList.add(planArrage);
+                }
+            }
+        }
+        HashSet<String> powerString = getPowerString(planNoArrageList);
+        List<ProjectPlanArrage> judgeProject = getJudgeProject(projectPlans, powerString);
+        return judgeProject;
+    }
+
+    //检验开关是否为同一停电包 -- 定义检验状态
+    public List<ProjectPlanArrage> getJudgeProject(List<ProjectPlanArrage> projectPlans,HashSet<String> powerString){
+        boolean flag = false;
+        for (ProjectPlanArrage planArrage:projectPlans){
+            flag = true;
+            if (planArrage.getArrageFlag().equals("1")&&planArrage.getWhetherStatus().equals("0")){
+                if (planArrage.getProjectPowerOut().equals("带电")){
+                    for (String s:powerString){
+                        if (planArrage.getProjectPowerRange().contains(s)){
+                            planArrage.setHtmlStatus("1");
+                            flag = false;
+                            break;
+                        }
+                    }
+                }
+            }
+            if (flag){
+                planArrage.setHtmlStatus("0");
+            }
+        }
+
+//        boolean flag = true;
+//        for (String s:powerString){
+//            for (ProjectPlanArrage planArrage:projectPlans){
+//                //安排的计划
+//                flag = true;
+//                if (planArrage.getArrageFlag().equals("1")&&planArrage.getWhetherStatus().equals("0")){
+//                    if (planArrage.getProjectPowerOut().equals("带电")){
+//                        if (planArrage.getProjectPowerRange().contains(s)){
+//                            planArrage.setHtmlStatus("1");
+//                            flag = false;
+//                        }
+//                    }
+//                }
+//                if (flag){
+//                    planArrage.setHtmlStatus("0");
+//                }
+//            }
+//        }
+        return projectPlans;
+    }
+
+    //检验开关是否为同一停电包 -- 停电范围
+    public HashSet<String> getPowerString(List<ProjectPlanArrage> projectPlanArrages){
+        HashSet<String> hashSet = new HashSet<String>();
+        for (ProjectPlanArrage planArrage:projectPlanArrages){
+            PackagingUtil.getSplice(planArrage.getProjectPowerRange(),hashSet);
+        }
+        return hashSet;
+    }
+
+    //检验开关是否为同一停电包--获取用户传入的数据功能
+    public List<ProjectPlanArrage> getInspectionFunction(String ids){
+        //创建list
+        List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+        String[] idsSplite = null;
+        String[] idsSpliteChild = null;
+        String id="";
+        String powerFlag = "";
+        ProjectPlanArrage projectPlanArrage = new ProjectPlanArrage();
+        if (null!=ids){
+            idsSplite = ids.split(";");
+            for (String str : idsSplite){
+                id="";
+                powerFlag="";
+                idsSpliteChild = str.split(",");
+                for (String strChild:idsSpliteChild){
+                    if (strChild.equals("停电")||strChild.equals("带电")){
+                        powerFlag = strChild;
+                    }else {
+                        id = strChild;
+                    }
+                }
+                if (!"".equals(id)){
+                    projectPlanArrage = new ProjectPlanArrage();
+                    projectPlanArrage.setId(id);
+                    projectPlanArrage.setProjectPowerOut(powerFlag);
+                    planArrages.add(projectPlanArrage);
+                }
+            }
+        }
+        return planArrages;
+    }
+
+
+    //安排项目计划 -- 按钮功能 获取相同id相同以及包含开关的方法--施工项目经理初始安排计划
+    public void getConsPlanArranageService(List<ProjectPlanArrage> projectPlanArrages, List<String> idList, Date mouthDate){
+        //复制所有数据集合,以供使用
+        List<ProjectPlanArrage> copyProjectPlanArrage = PackagingUtil.getCopyProjectPlanArrage(projectPlanArrages);
+        //获取用户选择安排计划项目定义号的项目
+        List<ProjectPlanArrage> planArragesChild = new ArrayList<ProjectPlanArrage>();//子类集合
+
+        HashSet<String> hashSet = new HashSet<String>();//存放停电范围
+        //得到集合
+        for (String id:idList){
+            for (ProjectPlanArrage projectPlanArrage:copyProjectPlanArrage){
+                if (id.equals(projectPlanArrage.getId())){
+                    if (projectPlanArrage.getWhetherStatus().equals("0")){
+                        planArragesChild.add(projectPlanArrage);
+                        PackagingUtil.getSplice(projectPlanArrage.getProjectPowerRange(),hashSet);
+                        break;
+                    }
+                }
+            }
+        }
+        PackagingUtil.getRecursive(copyProjectPlanArrage,hashSet);
+        //处理子类集合 -- 如果子类集合不为空
+        if (!planArragesChild.isEmpty()){
+            for (ProjectPlanArrage pa:projectPlanArrages){
+                if (!pa.getWhetherStatus().equals("1")){
+                    for (String s:hashSet){
+                        if (pa.getProjectPowerRange().contains(s)){
+                            pa.setArrageFlag("1");
+                            pa.setBackToStauts("2");//说明这是施工单位项目经理新增的状态
+                            pa.setOperationStatus("0");//循序操作
+                            pa.setProjectMonthDate(mouthDate);//自动配置月份
+                            pa.setProjectPowerOut("停电");
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    //删除已经安排的项目-----施工单位项目经理 --添加备注
+    public void deletePlanArrange(List<ProjectPlanArrage> projectPlans,List<String> strings,String backToText){
+        for (String id:strings){
+            for (ProjectPlanArrage planArrage:projectPlans){
+                if (id.equals(planArrage.getId())){
+                    planArrage.setBackToStauts("0");
+                    planArrage.setBackToText(backToText);
+                    break;
+                }
+            }
+        }
+    }
+
+    //删除已经安排的项目-----施工单位项目经理 --添加备注
+    public boolean deleteJudgePlanArrange(List<ProjectPlanArrage> projectPlans,List<String> strings){
+        String name = UserUtils.getUser().getName();
+        boolean flag = true;
+        for (String id:strings){
+            for (ProjectPlanArrage planArrage:projectPlans){
+                if (id.equals(planArrage.getId())){
+                    if (!planArrage.getConstructionUnit().equals(name)){
+                        flag = false;
+                        break;
+                    }
+                }
+            }
+            if (!flag){
+                break;
+            }
+        }
+        return flag;
+    }
+
+
+
+    //导入数据
+    /**
+     * 获取表格数据
+     * @param importUtil
+     * @return List<ErpAccount> 导入表格数据
+     */
+    public List<ProjectPlanArrage> getMaterProUtil(ImportUtil importUtil) throws Exception {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        int lastRow = importUtil.getLastDataRowNum();
+        List<ProjectPlanArrage> list = new ArrayList<ProjectPlanArrage>();
+        ProjectPlanArrage projectPlanArrage = null;
+        String projectId="";//物料编码
+        for(int i=2; i<lastRow;i++){
+            projectPlanArrage = new ProjectPlanArrage();
+            Row row = importUtil.getRow(i);
+            projectId = (String)importUtil.getCellValue(row,0);
+            if (StringUtils.isNotBlank(projectId)){
+                projectPlanArrage.setProjectNumber(projectId);
+                projectPlanArrage.setProjectName((String)importUtil.getCellValue(row,1));
+                projectPlanArrage.setProjectPowerRange((String)importUtil.getCellValue(row,2));
+                projectPlanArrage.setProjectDate(format.parse((String)importUtil.getCellValue(row,3)));
+                projectPlanArrage.setProjectMonthDate(format.parse((String)importUtil.getCellValue(row,4)));
+                projectPlanArrage.setProjectPowerOut((String)importUtil.getCellValue(row,5));
+                list.add(projectPlanArrage);
+            }
+        }
+        return list;
+    }
+}

+ 79 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/BookStrapTreeUtil.java

@@ -0,0 +1,79 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectPlanArrage;
+import com.jeeplus.modules.sys.utils.UserUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class BookStrapTreeUtil {
+
+    public static List<Map<String,Object>> getAllBookStrapTree(List<Map<String,Object>> objects, List<ProjectPlanArrage> projectPlanArrages,String bs){
+        List<Map<String, Object>> bookStrapTree = getBookStrapTree(objects, projectPlanArrages,bs);
+        List<Map<String,Object>> allBookStrapTree = Lists.newArrayList();
+        Map<String,Object> allMap = Maps.newHashMap();
+        allMap.put("id","-1");
+        allMap.put("name","未安排的项目计划");
+        allMap.put("children",bookStrapTree);
+        allBookStrapTree.add(allMap);
+        return allBookStrapTree;
+    }
+
+    //获取树
+    public static List<Map<String,Object>> getBookStrapTree(List<Map<String,Object>> objects, List<ProjectPlanArrage> projectPlanArrages,String bs){
+        Map<String, Object> maps = Maps.newHashMap();
+        String outRange = "";
+        for (ProjectPlanArrage projectPlanArrage:projectPlanArrages){
+            //判断是否为父类
+            if ("1".equals(projectPlanArrage.getWhetherStatus())){
+                maps = Maps.newHashMap();//获取一级父类maps的集合
+                outRange = projectPlanArrage.getProjectName();//获取停电开关
+                Boolean childTree = getChildTree(maps, projectPlanArrages, outRange,bs);
+                if (childTree){
+                    maps.put("id",projectPlanArrage.getId());
+                    maps.put("name",projectPlanArrage.getProjectName());
+                    objects.add(maps);
+                }
+            }
+        }
+        return objects;
+    }
+    //获取子类树
+    public static Boolean getChildTree(Map<String,Object> maps,List<ProjectPlanArrage> projectPlanArrages,String outRange,String bs){
+        boolean flag = false;
+        List<Map<String,Object>> lists = Lists.newArrayList();
+        Map<String,Object> ms = Maps.newHashMap();//获取集合
+        String name = UserUtils.getUser().getName();
+        for (ProjectPlanArrage projectPlanArrage:projectPlanArrages){
+            if (!"1".equals(projectPlanArrage.getWhetherStatus())) {
+                if (bs.equals("2")){
+                    if (name.equals(projectPlanArrage.getConstructionUnit())){
+                       if (!"1".equals(projectPlanArrage.getArrageFlag())){
+                           if (projectPlanArrage.getProjectPowerRange().contains(outRange)) {
+                               ms = Maps.newHashMap();
+                               ms.put("id", projectPlanArrage.getId());//获取id
+                               ms.put("name", projectPlanArrage.getProjectName());//获取名字
+                               lists.add(ms);
+                           }
+                       }
+                    }
+                }else {
+                    if (projectPlanArrage.getProjectPowerRange().contains(outRange)) {
+                        ms = Maps.newHashMap();
+                        ms.put("id", projectPlanArrage.getId());//获取id
+                        ms.put("name", projectPlanArrage.getProjectName());//获取名字
+                        lists.add(ms);
+                    }
+                }
+            }
+        }
+        if (!lists.isEmpty()){
+            flag = true;
+            maps.put("children",lists);
+        }
+        return flag;
+    }
+}

+ 79 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/ImportProUtil.java

@@ -0,0 +1,79 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util;
+
+import com.jeeplus.common.utils.excel.ImportExcel;
+import com.jeeplus.modules.sg.managementcenter.constructionProject.entity.ConstructionProject;
+import com.jeeplus.modules.sg.managementcenter.constructionProject.util.ImportUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Row;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public  class ImportProUtil {
+    /**
+     * 获取表格数据
+     * @param importUtil
+     * @return List<MaterialProjectMapper> 导入表格数据
+     */
+    public static List<ConstructionProject> getProjectUtil(com.jeeplus.modules.sg.managementcenter.constructionProject.util.ImportUtil importUtil)  {
+        int lastRow = importUtil.getLastDataRowNum();
+        List<ConstructionProject> list = new ArrayList<ConstructionProject>();
+        ConstructionProject constructionProject = null;
+        String projectName="";
+        for(int i=2; i<=lastRow;i++){
+            constructionProject = new ConstructionProject();
+            Row row = importUtil.getRow(i);
+            projectName = (String) importUtil.getCellValue(row,8);
+            if(StringUtils.isNotBlank(projectName)) {
+                constructionProject.setProjectName(projectName);
+                constructionProject.setCityCompany((String)importUtil.getCellValue(row,1));//  市公司
+                constructionProject.setCountyCompany((String)importUtil.getCellValue(row,2));//  县公司
+                constructionProject.setProjectNature((String)importUtil.getCellValue(row,3));//  项目性质
+                constructionProject.setPowerSupplyArea((String)importUtil.getCellValue(row,4));//  供电区域
+                constructionProject.setGridNumber((String)importUtil.getCellValue(row,5));//  网格编号
+                constructionProject.setCellNumber((String)importUtil.getCellValue(row,6));//  单元格编号
+                constructionProject.setReserveNumber((String)importUtil.getCellValue(row,7));//  项目储备编号
+                constructionProject.setProjectNumber((String)importUtil.getCellValue(row,9));//  项目定义号
+                constructionProject.setSubstationName((String)importUtil.getCellValue(row,10));//  变电站名称
+                constructionProject.setLineName((String)importUtil.getCellValue(row,11));//  线路名称
+                constructionProject.setProjectType((String)importUtil.getCellValue(row,12));//  项目类型
+                constructionProject.setInstructions((String)importUtil.getCellValue(row,13));//  说明
+                constructionProject.setWorkAreaNote((String)importUtil.getCellValue(row,14));//  工区备注
+//                constructionProject.setContructiveContent((String)importUtil.getCellValue(row,15));//  建设必要性内容
+//                constructionProject.setCostEstimate(ImportProUtil.getDouble(importUtil,row,16));//  费用估算
+//                constructionProject.setWhetherGraceProject((String)importUtil.getCellValue(row,17));///  是否迎风度夏项目
+//                constructionProject.setProjectNote((String)importUtil.getCellValue(row,18));//  项目备注
+//                constructionProject.setConstructionUnit((String)importUtil.getCellValue(row,19));//  施工单位
+                constructionProject.setProjectStatus("0");
+                list.add(constructionProject);
+            }
+        }
+        return list;
+    }
+    //验证表格数据是否正确
+    public static Boolean getMaterialProjectFlag(com.jeeplus.modules.sg.managementcenter.constructionProject.util.ImportUtil importUtil){
+        Boolean flag = false;
+        Row row = importUtil.getRow(0);
+        String index =  (String)importUtil.getCellValue(row,0);
+        String two = (String)importUtil.getCellValue(row,1);
+        if (!index.contains("储备")){
+            flag = true;
+        }
+        if (!two.contains("项目")){
+            flag = true;
+        }
+        return flag;
+    }
+    /**
+     *获取excel double类型的值
+     */
+    private static double getDouble(ImportUtil importUtil, Row row, int col){
+        double d = 0.00;
+        Object o = importUtil.getCellValue(row,col);
+        if(!o.equals("")){
+            d = Double.parseDouble(o.toString());
+        }
+        return d;
+    }
+}

+ 394 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/ImportUtil.java

@@ -0,0 +1,394 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.Reflections;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.modules.sys.entity.Area;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.DictUtils;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.text.NumberFormat;
+import java.text.SimpleDateFormat;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 导入Excel文件(支持“XLS”和“XLSX”格式)
+ * @author jeeplus
+ * @version 2016-03-10
+ */
+public class ImportUtil {
+
+	private static Logger log = LoggerFactory.getLogger(ImportUtil.class);
+
+	/**
+	 * 工作薄对象
+	 */
+	private Workbook wb;
+
+	/**
+	 * 工作表对象
+	 */
+	private Sheet sheet;
+
+	/**
+	 * 标题行号
+	 */
+	private int headerNum;
+
+	/**
+	 * 构造函数
+	 * @param path 导入文件,读取第一个工作表
+	 * @param headerNum 标题行号,数据行号=标题行号+1
+	 * @throws InvalidFormatException
+	 * @throws IOException
+	 */
+	public ImportUtil(String fileName, int headerNum)
+			throws InvalidFormatException, IOException {
+		this(new File(fileName), headerNum);
+	}
+
+	/**
+	 * 构造函数
+	 * @param path 导入文件对象,读取第一个工作表
+	 * @param headerNum 标题行号,数据行号=标题行号+1
+	 * @throws InvalidFormatException
+	 * @throws IOException
+	 */
+	public ImportUtil(File file, int headerNum)
+			throws InvalidFormatException, IOException {
+		this(file, headerNum, 0);
+	}
+
+	/**
+	 * 构造函数
+	 * @param path 导入文件
+	 * @param headerNum 标题行号,数据行号=标题行号+1
+	 * @param sheetIndex 工作表编号
+	 * @throws InvalidFormatException
+	 * @throws IOException
+	 */
+	public ImportUtil(String fileName, int headerNum, int sheetIndex)
+			throws InvalidFormatException, IOException {
+		this(new File(fileName), headerNum, sheetIndex);
+	}
+
+	/**
+	 * 构造函数
+	 * @param path 导入文件对象
+	 * @param headerNum 标题行号,数据行号=标题行号+1
+	 * @param sheetIndex 工作表编号
+	 * @throws InvalidFormatException
+	 * @throws IOException
+	 */
+	public ImportUtil(File file, int headerNum, int sheetIndex)
+			throws InvalidFormatException, IOException {
+		this(file.getName(), new FileInputStream(file), headerNum, sheetIndex);
+	}
+
+	/**
+	 * 构造函数
+	 * @param file 导入文件对象
+	 * @param headerNum 标题行号,数据行号=标题行号+1
+	 * @param sheetIndex 工作表编号
+	 * @throws InvalidFormatException
+	 * @throws IOException
+	 */
+	public ImportUtil(MultipartFile multipartFile, int headerNum, int sheetIndex)
+			throws InvalidFormatException, IOException {
+		this(multipartFile.getOriginalFilename(), multipartFile.getInputStream(), headerNum, sheetIndex);
+	}
+
+	/**
+	 * 构造函数
+	 * @param path 导入文件对象
+	 * @param headerNum 标题行号,数据行号=标题行号+1
+	 * @param sheetIndex 工作表编号
+	 * @throws InvalidFormatException
+	 * @throws IOException
+	 */
+	public ImportUtil(String fileName, InputStream is, int headerNum, int sheetIndex)
+			throws InvalidFormatException, IOException {
+		if (StringUtils.isBlank(fileName)){
+			throw new RuntimeException("导入文档为空!");
+		}else if(fileName.toLowerCase().endsWith("xls")){    
+			this.wb = new HSSFWorkbook(is);    
+        }else if(fileName.toLowerCase().endsWith("xlsx")){  
+        	this.wb = new XSSFWorkbook(is);
+        }else{  
+        	throw new RuntimeException("文档格式不正确!");
+        }  
+		if (this.wb.getNumberOfSheets()<sheetIndex){
+			throw new RuntimeException("文档中没有工作表!");
+		}
+		this.sheet = this.wb.getSheetAt(sheetIndex);
+		this.headerNum = headerNum;
+		log.debug("Initialize success.");
+	}
+	
+	/**
+	 * 获取行对象
+	 * @param rownum
+	 * @return
+	 */
+	public Row getRow(int rownum){
+		return this.sheet.getRow(rownum);
+	}
+
+	/**
+	 * 获取数据行号
+	 * @return
+	 */
+	public int getDataRowNum(){
+		return headerNum+1;
+	}
+	
+	/**
+	 * 获取最后一个数据行号
+	 * @return
+	 */
+	public int getLastDataRowNum(){
+		return this.sheet.getLastRowNum()+headerNum;
+	}
+	
+	/**
+	 * 获取最后一个列号
+	 * @return
+	 */
+	public int getLastCellNum(){
+		return this.getRow(headerNum).getLastCellNum();
+	}
+	
+	/**
+	 * 获取单元格值
+	 * @param row 获取的行
+	 * @param column 获取单元格列号
+	 * @return 单元格值
+	 */
+	public Object getCellValue(Row row, int column) {
+		Object val = "";
+		try {
+			Cell cell = row.getCell(column);
+			if (cell != null) {
+				if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
+					// val = cell.getNumericCellValue();
+					// 当excel 中的数据为数值或日期是需要特殊处理
+					if (HSSFDateUtil.isCellDateFormatted(cell)) {
+						double d = cell.getNumericCellValue();
+						Date date = HSSFDateUtil.getJavaDate(d);
+						SimpleDateFormat dformat = new SimpleDateFormat(
+								"yyyy-MM-dd");
+						val = dformat.format(date);
+					} else {
+						NumberFormat nf = NumberFormat.getInstance();
+						nf.setGroupingUsed(false);// true时的格式:1,234,567,890
+						val = nf.format(cell.getNumericCellValue());// 数值类型的数据为double,所以需要转换一下
+					}
+				} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
+					val = cell.getStringCellValue();
+				} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
+					val = cell.getCellFormula();
+				} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
+					val = cell.getBooleanCellValue();
+				} else if (cell.getCellType() == Cell.CELL_TYPE_ERROR) {
+					val = cell.getErrorCellValue();
+				}
+			}
+		} catch (Exception e) {
+			return val;
+		}
+		return val;
+	}
+	
+	/**
+	 * 获取导入数据列表
+	 * @param cls 导入对象类型
+	 * @param groups 导入分组
+	 */
+	public <E> List<E> getDataList(Class<E> cls, int... groups) throws InstantiationException, IllegalAccessException{
+		List<Object[]> annotationList = Lists.newArrayList();
+		// Get annotation field 
+		Field[] fs = cls.getDeclaredFields();
+		for (Field f : fs){
+			ExcelField ef = f.getAnnotation(ExcelField.class);
+			if (ef != null && (ef.type()==0 || ef.type()==2)){
+				if (groups!=null && groups.length>0){
+					boolean inGroup = false;
+					for (int g : groups){
+						if (inGroup){
+							break;
+						}
+						for (int efg : ef.groups()){
+							if (g == efg){
+								inGroup = true;
+								annotationList.add(new Object[]{ef, f});
+								break;
+							}
+						}
+					}
+				}else{
+					annotationList.add(new Object[]{ef, f});
+				}
+			}
+		}
+		// Get annotation method
+		Method[] ms = cls.getDeclaredMethods();
+		for (Method m : ms){
+			ExcelField ef = m.getAnnotation(ExcelField.class);
+			if (ef != null && (ef.type()==0 || ef.type()==2)){
+				if (groups!=null && groups.length>0){
+					boolean inGroup = false;
+					for (int g : groups){
+						if (inGroup){
+							break;
+						}
+						for (int efg : ef.groups()){
+							if (g == efg){
+								inGroup = true;
+								annotationList.add(new Object[]{ef, m});
+								break;
+							}
+						}
+					}
+				}else{
+					annotationList.add(new Object[]{ef, m});
+				}
+			}
+		}
+		// Field sorting
+		Collections.sort(annotationList, new Comparator<Object[]>() {
+			public int compare(Object[] o1, Object[] o2) {
+				return new Integer(((ExcelField)o1[0]).sort()).compareTo(
+						new Integer(((ExcelField)o2[0]).sort()));
+			};
+		});
+		//log.debug("Import column count:"+annotationList.size());
+		// Get excel data
+		List<E> dataList = Lists.newArrayList();
+		for (int i = this.getDataRowNum(); i < this.getLastDataRowNum(); i++) {
+			E e = (E)cls.newInstance();
+			int column = 0;
+			Row row = this.getRow(i);
+			StringBuilder sb = new StringBuilder();
+			for (Object[] os : annotationList){
+				Object val = this.getCellValue(row, column++);
+				if (val != null){
+					ExcelField ef = (ExcelField)os[0];
+					// If is dict type, get dict value
+					if (StringUtils.isNotBlank(ef.dictType())){
+						val = DictUtils.getDictValue(val.toString(), ef.dictType(), "");
+						//log.debug("Dictionary type value: ["+i+","+colunm+"] " + val);
+					}
+					// Get param type and type cast
+					Class<?> valType = Class.class;
+					if (os[1] instanceof Field){
+						valType = ((Field)os[1]).getType();
+					}else if (os[1] instanceof Method){
+						Method method = ((Method)os[1]);
+						if ("get".equals(method.getName().substring(0, 3))){
+							valType = method.getReturnType();
+						}else if("set".equals(method.getName().substring(0, 3))){
+							valType = ((Method)os[1]).getParameterTypes()[0];
+						}
+					}
+					//log.debug("Import value type: ["+i+","+column+"] " + valType);
+					try {
+						//如果导入的java对象,需要在这里自己进行变换。
+						if (valType == String.class){
+							String s = String.valueOf(val.toString());
+							if(StringUtils.endsWith(s, ".0")){
+								val = StringUtils.substringBefore(s, ".0");
+							}else{
+								val = String.valueOf(val.toString());
+							}
+						}else if (valType == Integer.class){
+							val = Double.valueOf(val.toString()).intValue();
+						}else if (valType == Long.class){
+							val = Double.valueOf(val.toString()).longValue();
+						}else if (valType == Double.class){
+							val = Double.valueOf(val.toString());
+						}else if (valType == Float.class){
+							val = Float.valueOf(val.toString());
+						}else if (valType == Date.class){
+							SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
+							val=sdf.parse(val.toString()); 
+						}else if (valType == User.class){
+							val = UserUtils.getByUserName(val.toString());
+						}else if (valType == Office.class){
+							val = UserUtils.getByOfficeName(val.toString());
+						}else if (valType == Area.class){
+							val = UserUtils.getByAreaName(val.toString());
+						}else{
+							if (ef.fieldType() != Class.class){
+								val = ef.fieldType().getMethod("getValue", String.class).invoke(null, val.toString());
+							}else{
+								val = Class.forName(this.getClass().getName().replaceAll(this.getClass().getSimpleName(), 
+										"fieldtype."+valType.getSimpleName()+"Type")).getMethod("getValue", String.class).invoke(null, val.toString());
+							}
+						}
+					} catch (Exception ex) {
+						log.info("Get cell value ["+i+","+column+"] error: " + ex.toString());
+						val = null;
+					}
+					// set entity value
+					if (os[1] instanceof Field){
+						Reflections.invokeSetter(e, ((Field)os[1]).getName(), val);
+					}else if (os[1] instanceof Method){
+						String mthodName = ((Method)os[1]).getName();
+						if ("get".equals(mthodName.substring(0, 3))){
+							mthodName = "set"+StringUtils.substringAfter(mthodName, "get");
+						}
+						Reflections.invokeMethod(e, mthodName, new Class[] {valType}, new Object[] {val});
+					}
+				}
+				sb.append(val+", ");
+			}
+			dataList.add(e);
+			log.debug("Read success: ["+i+"] "+sb.toString());
+		}
+		return dataList;
+	}
+
+//	/**
+//	 * 导入测试
+//	 */
+//	public static void main(String[] args) throws Throwable {
+//		
+//		ImportExcel ei = new ImportExcel("target/export.xlsx", 1);
+//		
+//		for (int i = ei.getDataRowNum(); i < ei.getLastDataRowNum(); i++) {
+//			Row row = ei.getRow(i);
+//			for (int j = 0; j < ei.getLastCellNum(); j++) {
+//				Object val = ei.getCellValue(row, j);
+//				System.out.print(val+", ");
+//			}
+//			System.out.print("\n");
+//		}
+//		
+//	}
+}

+ 267 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/PackagingUtil.java

@@ -0,0 +1,267 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util;
+
+import com.jeeplus.modules.sg.managementcenter.project.entity.Project;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectActProclnsAss;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectPlanArrage;
+import com.jeeplus.modules.sys.utils.UserUtils;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * 打包工具类
+ */
+public class PackagingUtil {
+    //列表展示数据
+    public static List<ProjectPlanArrage> getProjectPlanList(ProjectPlanArrage projectPlanArrage,List<ProjectPlanArrage> projectPlanArrages){
+        //关联停电包信息
+        HashSet<String> currentSwitch = getCurrentSwitch(projectPlanArrage, projectPlanArrages);
+        //获取list
+        List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+        //循环
+        for (ProjectPlanArrage pa:projectPlanArrages){
+           if (!pa.getWhetherStatus().equals("1")){
+               for (String s:currentSwitch){
+                   if (pa.getProjectPowerRange().contains(s)){
+                       pa.setArrageFlag("1");
+                       break;
+                   }
+               }
+           }
+        }
+        return projectPlanArrages;
+    }
+
+    //获取当前用户输入项目定义号的所有开关
+    public static HashSet<String> getCurrentSwitch(ProjectPlanArrage projectPlanArrage,List<ProjectPlanArrage> projectPlanArrageList){
+        //复制所有数据集合,以供使用
+        List<ProjectPlanArrage> copyProjectPlanArrage = getCopyProjectPlanArrage(projectPlanArrageList);
+        //获取项目定义号
+        List<String> splitProjectNumber = getSplitProjectNumber(projectPlanArrage);
+        //获取当前用户根据项目定义号获得的开关
+        HashSet<String> hashSetRange = getHashSetRange(splitProjectNumber, copyProjectPlanArrage);
+        //获取项目名称
+        if (null!=projectPlanArrage.getProjectName()&&!"".equals(projectPlanArrage.getProjectName())){
+            List<String> splitProjectName = getSplitProjectName(projectPlanArrage);
+            getHashSetRangeName(splitProjectName,copyProjectPlanArrage,hashSetRange);
+        }
+        //方法执行完会获取hashSetRange会获取所有开关信息
+        getRecursive(copyProjectPlanArrage,hashSetRange);
+        return hashSetRange;
+    }
+
+    //获取所有相关联的开关
+    public static void getRecursive(List<ProjectPlanArrage> projects, HashSet<String> hashSetAll){
+        HashSet<String> hashSet = new HashSet<String>();
+        for (String string:hashSetAll){
+            for (int i = 0; i < projects.size(); i++) {
+                if (projects.get(i).getProjectPowerRange().contains(string)){
+                    getSplice(projects.get(i).getProjectPowerRange(),hashSet);
+                    projects.remove(i);
+                    i--;
+                }
+            }
+        }
+        if (!hashSet.isEmpty()){
+            for (String has:hashSet){
+                hashSetAll.add(has);
+            }
+            getRecursive(projects,hashSetAll);
+        }
+    }
+
+    //获取当前存在的开关
+    public static HashSet<String> getHashSetRange(List<String> splitProjectNumber,List<ProjectPlanArrage> projectPlanArrageList){
+        HashSet<String> hashSet = new HashSet<String>();
+        for (String s:splitProjectNumber){
+            for (ProjectPlanArrage projectPlanArrage:projectPlanArrageList){
+                if (s.equals(projectPlanArrage.getProjectNumber())){
+                    //获取当前的开关
+                    getSplice(projectPlanArrage.getProjectPowerRange(),hashSet);
+                }
+            }
+        }
+        return hashSet;
+    }
+
+    //获取当前存在的开关---项目名称
+    public static void getHashSetRangeName(List<String> splitProjectNumber,List<ProjectPlanArrage> projectPlanArrageList,HashSet<String> hashSet){
+        for (String s:splitProjectNumber){
+            for (ProjectPlanArrage projectPlanArrage:projectPlanArrageList){
+                if (s.equals(projectPlanArrage.getProjectName())){
+                    //获取当前的开关
+                    getSplice(projectPlanArrage.getProjectPowerRange(),hashSet);
+                }
+            }
+        }
+    }
+    //截取开关
+    public static void getSplice(String powerScope,HashSet<String> strings){
+        String[] splice = null;
+        if (powerScope.contains(";")){
+            splice = powerScope.split(";");
+            for (String str:splice){
+                strings.add(str);
+            }
+        }else if(powerScope.contains(";")){
+            splice = powerScope.split(";");
+            for (String str:splice){
+                strings.add(str);
+            }
+        }else if (powerScope.contains(",")){
+            splice = powerScope.split(",");
+            for (String str:splice){
+                strings.add(str);
+            }
+        }else if (powerScope.contains(",")){
+            splice = powerScope.split(",");
+            for (String str:splice){
+                strings.add(str);
+            }
+        }else {
+            strings.add(powerScope);
+        }
+    }
+
+
+    //截取项目定义号
+    public static List<String> getSplitProjectNumber(ProjectPlanArrage projectPlanArrage){
+        String[] split = null;
+        List<String> list = new ArrayList<String>();
+        if (null!=projectPlanArrage.getProjectNumber()&&!"".equals(projectPlanArrage.getProjectNumber())){
+            split = projectPlanArrage.getProjectNumber().split(",");
+            for (String s:split){
+                list.add(s);
+            }
+        }
+        return list;
+    }
+    //截取名称
+    public static List<String> getSplitProjectName(ProjectPlanArrage projectPlanArrage){
+        String[] split = null;
+        List<String> list = new ArrayList<String>();
+        if (null!=projectPlanArrage.getProjectName()&&!"".equals(projectPlanArrage.getProjectName())){
+            split = projectPlanArrage.getProjectName().split(",");
+            for (String s:split){
+                list.add(s);
+            }
+        }
+        return list;
+    }
+
+    //去重--并得到复制的集合
+    public static List<ProjectPlanArrage> getCopyProjectPlanArrage(List<ProjectPlanArrage> projectPlanArrages){
+        List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+        boolean flag = false;
+        for (ProjectPlanArrage p1:projectPlanArrages){
+            flag = true;
+            if (!p1.getWhetherStatus().equals("1")){
+                for (ProjectPlanArrage p2:planArrages){
+                    if (p1.getProjectNumber().equals(p2.getProjectNumber())&&p1.getProjectName().equals(p2.getProjectName())){
+                        flag = false;
+                        break;
+                    }
+                }
+                if (flag){
+                    planArrages.add(p1);
+                }
+            }
+        }
+        return planArrages;
+    }
+
+    //获取id
+    public static List<String> getString(String ids){
+        String[] strings = null;
+        List<String> idList = new ArrayList<String>();
+        if (null!=ids&&!"".equals(ids)){
+            if (ids.contains(",")){
+                strings = ids.split(",");
+                for (String str:strings){
+                    idList.add(str);
+                }
+            }else {
+                idList.add(ids);
+            }
+        }
+        return idList;
+    }
+
+    //替换集合--施工单位项目经理
+    public static List<ProjectActProclnsAss> getProjectActProcInsAssList(List<ProjectPlanArrage> projectPlans,String procIns){
+        List<ProjectActProclnsAss> projectActProclnsAsses = new ArrayList<ProjectActProclnsAss>();
+        ProjectActProclnsAss proclnsAss = null;
+        String name = UserUtils.getUser().getName();
+        for (ProjectPlanArrage planArrage:projectPlans){
+            if (!planArrage.getWhetherStatus().equals("1")&&planArrage.getArrageFlag().equals("1")){
+                if (planArrage.getConstructionUnit().equals(name)){
+                    proclnsAss = new ProjectActProclnsAss();
+                    proclnsAss.preInsert();
+                    proclnsAss.setProcInsId(procIns);//流程定义号
+                    proclnsAss.setCustomId("0");
+                    proclnsAss.setProjectName(planArrage.getProjectName());//项目名称
+                    proclnsAss.setProjectNumber(planArrage.getProjectNumber());//项目定义号
+                    proclnsAss.setProjectLine(planArrage.getProjectLine());
+                    proclnsAss.setProjectPowerRange(planArrage.getProjectPowerRange());//停电范围
+                    proclnsAss.setProjectSwitch(planArrage.getProjectSwitch());//停电开关
+                    proclnsAss.setProjectMonthDate(planArrage.getProjectMonthDate());//月份
+                    proclnsAss.setProjectDate(planArrage.getProjectDate());//停电日
+                    proclnsAss.setDistributionNetwork(planArrage.getDistributionNetwork());//配网项目经理
+                    proclnsAss.setConstructionUnit(planArrage.getConstructionUnit());//施工单位项目经理
+                    proclnsAss.setOperationUnit(planArrage.getOperationUnit());//运行单位项目经理
+                    proclnsAss.setBackToStauts(planArrage.getBackToStauts());//状态
+                    proclnsAss.setBackToText(planArrage.getBackToText());//备注
+                    proclnsAss.setProjectPowerOut(planArrage.getProjectPowerOut());
+                    proclnsAss.setStatus("0");
+                    projectActProclnsAsses.add(proclnsAss);
+                }
+            }
+        }
+        return projectActProclnsAsses;
+    }
+
+    //替换集合--配网项目经理
+    public static List<ProjectActProclnsAss> getNetList(List<ProjectPlanArrage> projectPlans,String procIns){
+        List<ProjectActProclnsAss> projectActProclnsAsses = new ArrayList<ProjectActProclnsAss>();
+        ProjectActProclnsAss proclnsAss = null;
+        for (ProjectPlanArrage planArrage:projectPlans){
+            if (!planArrage.getWhetherStatus().equals("1")&&planArrage.getArrageFlag().equals("1")){
+                proclnsAss = new ProjectActProclnsAss();
+                proclnsAss.preInsert();
+                proclnsAss.setProcInsId(procIns);//流程定义号
+                proclnsAss.setCustomId("0");
+                proclnsAss.setProjectName(planArrage.getProjectName());//项目名称
+                proclnsAss.setProjectNumber(planArrage.getProjectNumber());//项目定义号
+                proclnsAss.setProjectLine(planArrage.getProjectLine());
+                proclnsAss.setProjectPowerRange(planArrage.getProjectPowerRange());//停电范围
+                proclnsAss.setProjectSwitch(planArrage.getProjectSwitch());//停电开关
+                proclnsAss.setProjectMonthDate(planArrage.getProjectMonthDate());//月份
+                proclnsAss.setProjectDate(planArrage.getProjectDate());//停电日
+                proclnsAss.setDistributionNetwork(planArrage.getDistributionNetwork());//配网项目经理
+                proclnsAss.setConstructionUnit(planArrage.getConstructionUnit());//施工单位项目经理
+                proclnsAss.setOperationUnit(planArrage.getOperationUnit());//运行单位项目经理
+                proclnsAss.setBackToStauts(planArrage.getBackToStauts());//状态
+                proclnsAss.setBackToText(planArrage.getBackToText());//备注
+                proclnsAss.setProjectPowerOut(planArrage.getProjectPowerOut());
+                proclnsAss.setStatus("0");
+                projectActProclnsAsses.add(proclnsAss);
+//                if (planArrage.getConstructionUnit().equals(name)){
+//
+//                }
+            }
+        }
+        return projectActProclnsAsses;
+    }
+
+    //得到自己项目
+    public static List<ProjectActProclnsAss> getUtitName(List<ProjectActProclnsAss> projectActProclnsAsses,String name){
+        List<ProjectActProclnsAss> proclnsAssList = new ArrayList<ProjectActProclnsAss>();
+        for (ProjectActProclnsAss proclnsAss:projectActProclnsAsses){
+            if (name.equals(proclnsAss.getConstructionUnit())){
+                proclnsAssList.add(proclnsAss);
+            }
+        }
+        return proclnsAssList;
+    }
+}

+ 309 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/RecursiveUtil.java

@@ -0,0 +1,309 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util;
+
+import com.jeeplus.modules.sg.managementcenter.constructionProject.entity.ConstructionProjectTemporary;
+import com.jeeplus.modules.sg.managementcenter.project.entity.Project1;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+/*8
+    递归类
+ */
+public class RecursiveUtil {
+
+    //获取级联的工程------------增加入库操作
+    public static List<Project1> getAllProjectRecursive(List<Project1> projects, List<String> projectNumbers){
+        List<Project1> sureProject = getDuplicateRemoval(projects);//确定的project集合
+        List<Project1> duplicateRemoval = getDuplicateRemoval(projects);//备用集合
+        List<Project1> areProject = getThereAreProject(sureProject, projectNumbers);//查找项目定义号的工程
+        HashSet<String> hashSetAll = getProjectScopeList(areProject);//获取去重的停电线路
+        getRecursive(duplicateRemoval,hashSetAll);//递归
+        List<Project1> returnProject = getReturnProject(sureProject, hashSetAll);
+        return returnProject;
+    }
+    //其他
+    public static List<Project1> getAllProjectNo(List<Project1> projects, List<String> projectNumbers){
+        List<Project1> projectList = getDuplicateRemoval(projects);//确定集合
+        List<Project1> duplicateRemoval = getDuplicateRemoval(projects);
+        List<Project1> noNoProject = getNoNoProject(projectList, projectNumbers);//主用
+        List<Project1> noNoProject11 = getNoNoProject(duplicateRemoval, projectNumbers);//备用
+        HashSet<String> projectScopeList = getProjectScopeList(noNoProject11);
+        getRecursive(noNoProject11,projectScopeList);
+        List<Project1> returnProject = getReturnProject(noNoProject, projectScopeList);
+        return returnProject;
+    }
+
+    public static List<Project1> getNoNoProject(List<Project1> projects, List<String> projectNumbers){
+        for (int i = 0; i < projects.size(); i++) {
+            for (String string:projectNumbers){
+                if (projects.get(i).getProjectNumber().equals(string)){
+                    projects.remove(i);
+                    i--;
+                    break;
+                }
+            }
+        }
+        return projects;
+    }
+    //获取确定的list<project>集合
+    public static List<Project1> getReturnProject(List<Project1> projects, HashSet<String> hashSetAll){
+        List<Project1> projectList = new ArrayList<Project1>();
+        for (Project1 project : projects){
+            for (String string:hashSetAll){
+                if (project.getPowerScope().contains(string)){
+                    projectList.add(project);
+                    break;
+                }
+            }
+        }
+        return projectList;
+    }
+
+    //递归
+    public static void getRecursive(List<Project1> projects, HashSet<String> hashSetAll){
+        HashSet<String> hashSet = new HashSet<String>();
+        for (String string:hashSetAll){
+            for (int i = 0; i < projects.size(); i++) {
+                if (projects.get(i).getPowerScope().contains(string)){
+                    getSplice(projects.get(i).getPowerScope(),hashSet);
+                    projects.remove(i);
+                    i--;
+                }
+            }
+        }
+        if (!hashSet.isEmpty()){
+            for (String has:hashSet){
+                hashSetAll.add(has);
+            }
+            getRecursive(projects,hashSetAll);
+        }
+    }
+    public static void getSplice(String powerScope,HashSet<String> strings){
+        String[] splice = null;
+        if (powerScope.contains(";")){
+            splice = powerScope.split(";");
+            for (String str:splice){
+                strings.add(str);
+            }
+        }else if(powerScope.contains(";")){
+            splice = powerScope.split(";");
+            for (String str:splice){
+                strings.add(str);
+            }
+        }else if (powerScope.contains(",")){
+            splice = powerScope.split(",");
+            for (String str:splice){
+                strings.add(str);
+            }
+        }else if (powerScope.contains(",")){
+            splice = powerScope.split(",");
+            for (String str:splice){
+                strings.add(str);
+            }
+        }else {
+            strings.add(powerScope);
+        }
+    }
+
+    //获取当前搜索项目定义号的停电范围
+    public static HashSet<String> getProjectScopeList(List<Project1> areProject){
+        HashSet<String> setProject = new HashSet<String>();
+        String[] arrayProject = null;
+        String projectScope = "";
+        for (Project1 project : areProject){
+            if (null!= project.getPowerScope()){
+                projectScope = project.getPowerScope();
+                if (projectScope.contains(";")){
+                    arrayProject = projectScope.split(";");
+                    for (String str:arrayProject){
+                        setProject.add(str);
+                    }
+                }else if (projectScope.contains(";")){
+                    arrayProject = projectScope.split(";");
+                    for (String str:arrayProject){
+                        setProject.add(str);
+                    }
+                }else if (projectScope.contains(",")){
+                    arrayProject = projectScope.split(",");
+                    for (String str:arrayProject){
+                        setProject.add(str);
+                    }
+                }else if (projectScope.contains(",")){
+                    arrayProject = projectScope.split(",");
+                    for (String str:arrayProject){
+                        setProject.add(str);
+                    }
+                }else {
+                    setProject.add(projectScope);
+                }
+            }
+        }
+        return setProject;
+    }
+    //获取查找的集合
+    public static List<Project1> getThereAreProject(List<Project1> projects, List<String> projectNumbers){
+        List<Project1> projectList = new ArrayList<Project1>();
+        for (String string:projectNumbers){
+            for (Project1 project : projects){
+                if (string.equals(project.getProjectNumber())){
+                    projectList.add(project);
+                    break;
+                }
+            }
+        }
+        return projectList;
+    }
+    //list project去重
+    public static List<Project1> getDuplicateRemoval(List<Project1> projects){
+        List<Project1> projectList = new ArrayList<Project1>();
+        boolean flag = false;
+        String projectNumber = "";
+        String newProjectNumber = "";
+        for(Project1 project : projects){
+            if (null!= project.getProjectNumber()&&!"".equals(project.getProjectNumber())){
+                flag = true;
+                projectNumber = project.getProjectNumber();
+                for (Project1 newProject : projectList){
+                    if (null!= newProject.getProjectNumber()&&!"".equals(newProject.getProjectNumber())){
+                        newProjectNumber = newProject.getProjectNumber();
+                        if (projectNumber.equals(newProjectNumber)){
+                            flag = false;
+                            break;
+                        }
+                    }
+                }
+                if (flag){
+                    projectList.add(project);
+                }
+            }
+        }
+        return projectList;
+    }
+    //获取级联的工程------------
+    //添加操作项目--------!
+        public static List<ConstructionProjectTemporary> getAddPlanList(List<ConstructionProjectTemporary> constructionProjectTemporaries,String ids[]){
+            //获取移动操作的数据--父级
+            List<ConstructionProjectTemporary> constructionProjectParent = new ArrayList<ConstructionProjectTemporary>();
+            //获取移动操作的数据--子集
+            List<ConstructionProjectTemporary> constructionProjectChild = new ArrayList<ConstructionProjectTemporary>();
+            for (String id:ids){
+                for (ConstructionProjectTemporary constructionProjectTemporary:constructionProjectTemporaries){
+                    if (id.equals(constructionProjectTemporary.getId())){
+                        if ("0".equals(constructionProjectTemporary.getParentId())){
+                            constructionProjectParent.add(constructionProjectTemporary);
+                        }else {
+                            constructionProjectChild.add(constructionProjectTemporary);
+                        }
+                        break;
+                    }
+                }
+            }
+            if (null!=constructionProjectParent && constructionProjectParent.size()>0){
+                for (ConstructionProjectTemporary projectTemporary:constructionProjectParent){
+                    for (ConstructionProjectTemporary temporary:constructionProjectTemporaries){
+                        if (temporary.getParentId().contains(projectTemporary.getId())){
+                            constructionProjectChild.add(temporary);
+                        }
+                    }
+                }
+            }
+            //去重
+            List<ConstructionProjectTemporary> qcConstruction = getQcConstruction(constructionProjectChild);//主
+            List<ConstructionProjectTemporary> qcConstructionCopy = getQcConstruction(constructionProjectChild);//备用
+            HashSet<String> hashSet = getHashSet(qcConstruction);//获取奴前存在的开关
+            getConstructionRecurse(qcConstructionCopy,hashSet);
+            //获取最终的集合
+            List<ConstructionProjectTemporary> returnConstructionProjectTemporary = getReturnConstructionProjectTemporary(constructionProjectTemporaries, hashSet);
+            //父类添加进入
+            for (ConstructionProjectTemporary constructionProjectTemporary:constructionProjectParent){
+                returnConstructionProjectTemporary.add(constructionProjectTemporary);
+            }
+            return returnConstructionProjectTemporary;
+        }
+        //获取确定的list<project>集合
+        public static List<ConstructionProjectTemporary> getReturnConstructionProjectTemporary(List<ConstructionProjectTemporary> constructionProjectTemporaries,HashSet<String> hashSetAll){
+            List<ConstructionProjectTemporary> constructionProjectTemporaryList = new ArrayList<ConstructionProjectTemporary>();
+            for (ConstructionProjectTemporary constructionProjectTemporary:constructionProjectTemporaries){
+               if (!"0".equals(constructionProjectTemporary.getParentId())){
+                   for (String string:hashSetAll){
+                       if (constructionProjectTemporary.getPowerScope().contains(string)){
+                           constructionProjectTemporaryList.add(constructionProjectTemporary);
+                           break;
+                       }
+                   }
+               }
+            }
+            return constructionProjectTemporaryList;
+        }
+        //递归
+        public static void getConstructionRecurse(List<ConstructionProjectTemporary> constructionProjectTemporaries,HashSet<String> hashSet){
+            HashSet<String> stringHashSet = new HashSet<String>();
+            for (String s:stringHashSet){
+                for (int i = 0; i < constructionProjectTemporaries.size(); i++) {
+                    if (constructionProjectTemporaries.get(i).getPowerScope().contains(s)){
+                        getSplice(constructionProjectTemporaries.get(i).getPowerScope(),stringHashSet);
+                        constructionProjectTemporaries.remove(i);
+                        i--;
+                    }
+                }
+            }
+            if (!stringHashSet.isEmpty()){
+                for (String string:stringHashSet){
+                    hashSet.add(string);
+                }
+                getConstructionRecurse(constructionProjectTemporaries,hashSet);
+            }
+        }
+
+        //获取目前的开关
+        public static HashSet<String> getHashSet(List<ConstructionProjectTemporary> constructionProjectTemporaries){
+            HashSet<String> stringHashSet = new HashSet<String>();
+            String[] powerScopes = null;
+            for (ConstructionProjectTemporary constructionProjectTemporary:constructionProjectTemporaries){
+                if (null!=constructionProjectTemporary.getPowerScope()){
+                    if (constructionProjectTemporary.getPowerScope().equals(";")){
+                        powerScopes = constructionProjectTemporary.getPowerScope().split(";");
+                        for (String power:powerScopes){
+                            stringHashSet.add(power);
+                        }
+                    }else if (constructionProjectTemporary.getPowerScope().equals(";")){
+                        powerScopes = constructionProjectTemporary.getPowerScope().split(";");
+                        for (String power:powerScopes){
+                            stringHashSet.add(power);
+                        }
+                    }else if (constructionProjectTemporary.getPowerScope().equals(",")){
+                        powerScopes = constructionProjectTemporary.getPowerScope().split(",");
+                        for (String power:powerScopes){
+                            stringHashSet.add(power);
+                        }
+                    }else if (constructionProjectTemporary.getPowerScope().equals(",")){
+                        powerScopes = constructionProjectTemporary.getPowerScope().split(",");
+                        for (String power:powerScopes){
+                            stringHashSet.add(power);
+                        }
+                    }else {
+                        stringHashSet.add(constructionProjectTemporary.getPowerScope());
+                    }
+                }
+            }
+            return stringHashSet;
+        }
+        //去重
+        public static List<ConstructionProjectTemporary> getQcConstruction(List<ConstructionProjectTemporary> constructionProjectTemporaries){
+            List<ConstructionProjectTemporary> constructionProjectTemporaryList = new ArrayList<ConstructionProjectTemporary>();
+            boolean flag = false;
+            for (ConstructionProjectTemporary constructionProjectTemporary:constructionProjectTemporaries){
+                flag = true;
+                for (ConstructionProjectTemporary projectTemporary:constructionProjectTemporaryList){
+                    if (constructionProjectTemporary.getId().equals(projectTemporary.getId())){
+                        flag = false;
+                    }
+                }
+                if (flag){
+                    constructionProjectTemporaryList.add(constructionProjectTemporary);
+                }
+            }
+            return constructionProjectTemporaryList;
+        }
+    //添加操作项目--------!
+}

+ 43 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/Result.java

@@ -0,0 +1,43 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util;
+
+import java.util.List;
+import java.util.Map;
+
+public class Result {
+    private boolean success;
+    private String  message;
+    private List<Map<String,Object>> mapList;
+    private List<Map<String,Object>> mapListTree;
+
+    public List<Map<String, Object>> getMapListTree() {
+        return mapListTree;
+    }
+
+    public void setMapListTree(List<Map<String, Object>> mapListTree) {
+        this.mapListTree = mapListTree;
+    }
+
+    public boolean isSuccess() {
+        return success;
+    }
+
+    public void setSuccess(boolean success) {
+        this.success = success;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public List<Map<String, Object>> getMapList() {
+        return mapList;
+    }
+
+    public void setMapList(List<Map<String, Object>> mapList) {
+        this.mapList = mapList;
+    }
+}

+ 152 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/TreeTableUtil.java

@@ -0,0 +1,152 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.jeeplus.modules.sg.managementcenter.constructionProject.entity.ConstructionProject;
+import com.jeeplus.modules.sg.managementcenter.constructionProject.entity.ConstructionProjectTemporary;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+public class TreeTableUtil {
+    //树生成
+    public static List<Map<String,Object>> getBootstrapTreeTable(List<Map<String,Object>> objects,List<ConstructionProjectTemporary> listTemporary){
+        Map<String,Object> maps = Maps.newHashMap();
+        boolean treeChild = false;
+        for (ConstructionProjectTemporary constructionProjectTemporary:listTemporary){
+            if ("0".equals(constructionProjectTemporary.getParentId())){
+                maps = Maps.newHashMap();
+                treeChild = getTreeChild(maps, listTemporary, constructionProjectTemporary.getId());
+                if (treeChild){
+                    maps.put("id",constructionProjectTemporary.getId());
+                    maps.put("name",constructionProjectTemporary.getProjectName());
+                    objects.add(maps);
+                }
+            }
+        }
+        return objects;
+    }
+    //子集
+    public static boolean  getTreeChild(Map<String,Object> maps,List<ConstructionProjectTemporary> constructionProjectTemporaries,String id){
+        boolean flag = false;
+        List<Map<String,Object>> lists = Lists.newArrayList();
+        Map<String,Object> mapList = null;
+        String[] split = null;//截取多个父类的集合
+        for (ConstructionProjectTemporary constructionProjectTemporary:constructionProjectTemporaries){
+            if (constructionProjectTemporary.getParentId().contains(",")){
+                split = constructionProjectTemporary.getParentId().split(",");
+                for (String string:split){
+                    if (string.equals(id)){
+                        mapList = Maps.newHashMap();
+                        mapList.put("id",constructionProjectTemporary.getId());
+                        mapList.put("name",constructionProjectTemporary.getProjectName());
+                        lists.add(mapList);
+                    }
+                }
+            }else {
+                if (constructionProjectTemporary.getParentId().equals(id)){
+                    mapList = Maps.newHashMap();
+                    mapList.put("id",constructionProjectTemporary.getId());
+                    mapList.put("name",constructionProjectTemporary.getProjectName());
+                    lists.add(mapList);
+                }
+            }
+        }
+        if (lists.size()>0){
+            flag = true;
+            maps.put("children",lists);
+        }
+        return flag;
+    }
+//    public static void getTreeChild(Map<String,Object> mapList,List<ConstructionProject> constructionProjects,String lineName){
+//        List<Map<String,Object>> lists = Lists.newArrayList();
+//        Map<String,Object> maps =Maps.newHashMap();
+//        for (ConstructionProject constructionProject:constructionProjects){
+//            if (lineName.equals(constructionProject.getLineName())){
+//                maps = Maps.newHashMap();
+//                maps.put("id",constructionProject.getId());
+//                maps.put("name",constructionProject.getProjectName());
+//                lists.add(maps);
+//            }
+//        }
+//        if (lists.size()>0){
+//            mapList.put("children",lists);
+//        }
+//    }
+    //获取月份
+    public static List<ConstructionProject> getMonths(List<ConstructionProject> constructionProjects,String time){
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+        String arrangeTime = "";//安排计划
+        List<ConstructionProject> constructionProjectList = new ArrayList<ConstructionProject>();
+        for (ConstructionProject constructionProject:constructionProjects){
+            if (null!=constructionProject.getArrangeTime()){
+                arrangeTime = sdf.format(constructionProject.getArrangeTime());
+                if (arrangeTime.equals(time)){
+                    constructionProjectList.add(constructionProject);
+                }
+            }
+        }
+        return constructionProjectList;
+    }
+
+    //获取id类型
+    public static String getConstructionId(ConstructionProject constructionProject){
+        String projectId = "";
+        String cid= "";
+        String status = "";//状态默认为0
+        if (null!=constructionProject.getId()&&!"".equals(constructionProject.getId())){
+            cid = constructionProject.getId();
+            projectId = cid.substring(0,cid.length()-4);
+            if (cid.substring(cid.length()-4).equals("time")){
+                status = "time";
+            }
+            if (cid.substring(cid.length()-4).equals("line")){
+                status = "line";
+            }
+        }
+        if ("".equals(status)){
+            constructionProject.setId(constructionProject.getId());
+        }else {
+            constructionProject.setId(projectId);
+        }
+        return status;
+    }
+
+
+    //获取修改的值:
+    public static List<ConstructionProjectTemporary> getUpdateConstruction(List<ConstructionProjectTemporary> constructionProjectTemporaries){
+        for (ConstructionProjectTemporary constructionProjectTemporary:constructionProjectTemporaries){
+            //线路修改的状态
+            if ("0".equals(constructionProjectTemporary.getParentId())){
+                    constructionProjectTemporary.setStatus("2");
+//                getUpdateConstructionChild1(constructionProjectTemporaries,constructionProjectTemporary.getId());
+            }else {
+                if ("0".equals(constructionProjectTemporary.getStatus())){
+                    constructionProjectTemporary.setStatus("1");
+//                    getUpdateConstructionChild2(constructionProjectTemporaries,constructionProjectTemporary);
+                }
+            }
+        }
+        return constructionProjectTemporaries;
+    }
+    //线路修改的状态-----01
+    public static void getUpdateConstructionChild1(List<ConstructionProjectTemporary> constructionProjectTemporaries,String id){
+        for (ConstructionProjectTemporary constructionProjectTemporary:constructionProjectTemporaries){
+            if (!"0".equals(constructionProjectTemporary.getParentId())){
+                if (constructionProjectTemporary.getParentId().equals(id)){
+                    constructionProjectTemporary.setStatus("1");
+                }
+            }
+        }
+    }
+    //项目修改的状态----02
+    public static void getUpdateConstructionChild2(List<ConstructionProjectTemporary> constructionProjectTemporaries,ConstructionProjectTemporary constructionProjectTemporary){
+        String parentId = constructionProjectTemporary.getParentId();
+        for (ConstructionProjectTemporary project : constructionProjectTemporaries){
+            if (parentId.equals(project.getId())){
+                project.setStatus("2");
+                break;
+            }
+        }
+    }
+}

+ 905 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/web/ProjectPlanArrageController.java

@@ -0,0 +1,905 @@
+package com.jeeplus.modules.sg.managementcenter.projectPlanArrage.web;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.common.utils.DateUtils;
+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.act.service.ActTaskService;
+import com.jeeplus.modules.sg.managementcenter.materialplan.entity.MaterialPlan;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectActProclnsAss;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectAssignment;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.entity.ProjectPlanArrage;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.service.ProjectPlanActService;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.service.ProjectPlanArrageService;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util.BookStrapTreeUtil;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util.ImportUtil;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util.PackagingUtil;
+import com.jeeplus.modules.sg.managementcenter.projectPlanArrage.util.Result;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+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.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import static com.jeeplus.core.service.BaseService.dataRuleFilter;
+
+@Controller
+@RequestMapping(value = "${adminPath}/sg/managementCenter/projectPlanArrage")
+public class ProjectPlanArrageController extends BaseController {
+    @Autowired
+    private ProjectPlanArrageService projectPlanArrageService;
+    @Autowired
+    private ProjectPlanActService projectPlanActService;
+    @Autowired
+    private ActTaskService actTaskService;
+
+
+    @RequestMapping(value = {"list", ""})
+    public String list(ProjectPlanArrage projectPlanArrage, Model model) {
+        model.addAttribute("projectPlanArrage", projectPlanArrage);
+        return "modules/sg/managementcenter/projectPlanArrage/projectPlanArrageList";
+    }
+
+    /**
+     * 列表数据
+     */
+    /**
+     * 列表数据
+     */
+    @ResponseBody
+//	@RequiresPermissions("managementcenter:materialproject:list")
+    @RequestMapping(value = "data")
+    public Map<String, Object> data(ProjectPlanArrage projectPlanArrage, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<ProjectPlanArrage> page = projectPlanArrageService.findPage(new Page<ProjectPlanArrage>(request, response), projectPlanArrage);
+        return getBootstrapData(page);
+    }
+
+
+    //安排项目计划 -- 跳转配网项目经理操作页面
+    @RequestMapping(value = "arrageProjectPlan")
+    public String arrageProjectPlan(ProjectPlanArrage projectPlanArrage,Model model){
+        return "modules/sg/managementcenter/projectPlanArrage/projectDateForm";
+    }
+    //设置停电开关页面
+    @RequestMapping(value = "arrangementElectrified")
+    public String arrangementElectrified(ProjectPlanArrage projectPlanArrage){
+        return "modules/sg/managementcenter/projectPlanArrage/projectPowerList";
+    }
+
+    //返回安排计划列表,操作计划安排.
+    @RequestMapping(value = "isArranging")
+    public String lsArranging(ProjectPlanArrage projectPlanArrage,Model model,HttpServletRequest request){
+        try {
+            if (null!=projectPlanArrage.getProjectName()&&!"".equals(projectPlanArrage.getProjectName())){
+                String name = URLDecoder.decode(projectPlanArrage.getProjectName(),"utf-8");
+                projectPlanArrage.setProjectName(name);
+            }
+
+            //初始安排计划项目列表
+            List<ProjectPlanArrage> planArrageList = projectPlanArrageService.getProjectPlanArrageList();
+            if (!planArrageList.isEmpty()){
+                //根据项目名称查询人员
+                List<ProjectAssignment> listAssignment = projectPlanArrageService.findListAssignment(planArrageList);
+                //获得最终集合
+                List<ProjectPlanArrage> projectPlanArrageList = projectPlanArrageService.getPlanArrageList(planArrageList, listAssignment);
+
+                //区分开关与项目--整体集合
+                List<ProjectPlanArrage> projectList = projectPlanArrageService.getProjectList(projectPlanArrageList);
+                //开关 - 项目 统一集合 用WhetherStatus区分
+                List<ProjectPlanArrage> projectPlanList = PackagingUtil.getProjectPlanList(projectPlanArrage,projectList);
+                for (ProjectPlanArrage par:projectList){
+                    par.setProjectMonthDate(projectPlanArrage.getProjectMonthDate());
+                    par.setHtmlStatus("0");
+                    par.preInsert();
+                }
+                request.getSession().setAttribute("projectPlan",projectPlanList);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "modules/sg/managementcenter/projectPlanArrage/projectPlanArrageForm";
+    }
+
+    //初始安排的计划项目--跳转树形操作列表
+    @ResponseBody
+    @RequestMapping(value = "initArragePlanProject")
+    public Map<String, Object> initArragePlanProject(ProjectPlanArrage projectPlanArrage,Model model,HttpServletRequest request,HttpServletResponse response){
+        projectPlanArrage.setArrageFlag("1");
+        projectPlanArrage.setWhetherStatus("0");
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("projectPlan");
+        Page<ProjectPlanArrage> page = findPageList(new Page<ProjectPlanArrage>(request, response),projectPlanArrage,projectPlans);
+        return getBootstrapData(page);
+    }
+
+    public Page<ProjectPlanArrage> findPageList(Page<ProjectPlanArrage> page, ProjectPlanArrage entity,List<ProjectPlanArrage> list) {
+        dataRuleFilter(entity);
+        entity.setPage(page);
+        List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+        if (null!=list){
+            for (ProjectPlanArrage projectPlanArrage:list){
+                if (entity.getWhetherStatus().equals(projectPlanArrage.getWhetherStatus())&&entity.getArrageFlag().equals(projectPlanArrage.getArrageFlag())){
+                    planArrages.add(projectPlanArrage);
+                }
+            }
+        }
+        page.setList(planArrages);
+        return page;
+    }
+
+    //所有未安排的计划-树形表格展示
+    @ResponseBody
+    @RequestMapping(value = "bootstrapTreeTable")
+    public List<Map<String,Object>> getArrageNoPlan(ProjectPlanArrage projectPlanArrage,HttpServletRequest request){
+        //创建树形表格
+        List<Map<String,Object>> objects = Lists.newArrayList();
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("projectPlan");
+        List<ProjectPlanArrage> planArrageList = new ArrayList<ProjectPlanArrage>();
+        if (null!=projectPlans){
+            for (ProjectPlanArrage p:projectPlans){
+                if (p.getArrageFlag().equals("0")){
+                    planArrageList.add(p);
+                }
+            }
+        }
+        List<Map<String, Object>> bookStrapTree = BookStrapTreeUtil.getAllBookStrapTree(objects, planArrageList,"1");
+        return bookStrapTree;
+    }
+
+    //安排项目计划
+    @ResponseBody
+    @RequestMapping(value = "unplanned")
+    public Result getUnplanned(ProjectPlanArrage projectPlanArrage,String ids,HttpServletRequest request){
+        Result j = new Result();
+        List<String> strings = PackagingUtil.getString(ids);
+        j.setSuccess(false);
+        j.setMessage("安排计划项目失败");
+        try {
+            //获取项目信息
+            List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("projectPlan");
+            if (!projectPlans.isEmpty()&&!strings.isEmpty()){
+                projectPlanArrageService.getUnplannedService(projectPlans,strings);
+            }else {
+                j.setSuccess(false);
+                j.setMessage("安排计划项目失败");
+            }
+            List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+            for (ProjectPlanArrage planArrage:projectPlans){
+                if (planArrage.getArrageFlag().equals("0")){
+                    planArrages.add(planArrage);
+                }
+            }
+            List<Map<String,Object>> objects = Lists.newArrayList();
+            List<Map<String, Object>> bookStrapTree = BookStrapTreeUtil.getAllBookStrapTree(objects, planArrages,"1");
+            j.setMapListTree(bookStrapTree);
+            j.setSuccess(true);
+            j.setMessage("安排计划成功");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return j;
+    }
+
+    //退回操作
+    @ResponseBody
+    @RequestMapping(value = "deleteAll")
+    public Result getTheRoBack(ProjectPlanArrage projectPlanArrage, String ids, HttpServletRequest request){
+        Result j = new Result();
+        j.setSuccess(true);
+        j.setMessage("退回成功");
+        List<String> strings = PackagingUtil.getString(ids);
+        try {
+            //获取项目信息
+            List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("projectPlan");
+            if (!projectPlans.isEmpty()&&!strings.isEmpty()){
+                projectPlanArrageService.getTheRoBackService(projectPlans,strings);
+            }else {
+                j.setSuccess(false);
+                j.setMessage("退回计划项目失败");
+            }
+            List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+            for (ProjectPlanArrage planArrage:projectPlans){
+                if (planArrage.getArrageFlag().equals("0")){
+                    planArrages.add(planArrage);
+                }
+            }
+            List<Map<String,Object>> objects = Lists.newArrayList();
+            List<Map<String, Object>> bookStrapTree = BookStrapTreeUtil.getAllBookStrapTree(objects, planArrages,"1");
+            j.setMapListTree(bookStrapTree);
+            j.setSuccess(true);
+            j.setMessage("退回计划成功");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return j;
+    }
+
+    //安排带电项目展示form
+    @ResponseBody
+//	@RequiresPermissions("managementcenter:materialproject:list")
+    @RequestMapping(value = "dataPower")
+    public Map<String, Object> dataPower(ProjectPlanArrage projectPlanArrage, HttpServletRequest request, HttpServletResponse response, Model model) {
+        projectPlanArrage.setArrageFlag("1");
+        projectPlanArrage.setWhetherStatus("0");
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("projectPlan");
+        Page<ProjectPlanArrage> page = findPageList(new Page<ProjectPlanArrage>(request, response),projectPlanArrage,projectPlans);
+        return getBootstrapData(page);
+    }
+
+    //检验开关
+    @ResponseBody
+    @RequestMapping(value = "inspection")
+    public AjaxJson inspection(String ids,ProjectPlanArrage projectPlanArrage,Model model,HttpServletRequest request,HttpServletResponse response){
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("projectPlan");
+        List<ProjectPlanArrage> planArrages = projectPlanArrageService.inspectionService(ids, projectPlans);
+        request.getSession().setAttribute("projectPlan",planArrages);
+        AjaxJson j = new AjaxJson();
+        j.setSuccess(true);
+        j.setMsg("检验成功");
+        return j;
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "sureInspection")
+    public AjaxJson sureInspection(String ids,ProjectPlanArrage projectPlanArrage,Model model,HttpServletRequest request,HttpServletResponse response){
+        AjaxJson j = new AjaxJson();
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("projectPlan");
+        List<ProjectPlanArrage> planArrages = projectPlanArrageService.inspectionService(ids, projectPlans);
+        request.getSession().setAttribute("projectPlan",planArrages);
+        boolean flag = true;
+        for (ProjectPlanArrage planArrage:planArrages){
+            if (planArrage.getHtmlStatus().equals("1")){
+                flag = false;
+                break;
+            }
+        }
+        if (flag){
+            j.setSuccess(false);
+        }else {
+            j.setSuccess(true);
+        }
+        return j;
+    }
+    //保存并且发送流程
+    @ResponseBody
+    @RequestMapping(value = "save")
+    public AjaxJson saveStartupProcess(ProjectPlanArrage projectPlanArrage,Model model,HttpServletRequest request,HttpServletResponse response) throws Exception{
+        AjaxJson ajaxJson= new AjaxJson();
+        ajaxJson.setSuccess(true);
+        //得到所有项目
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("projectPlan");
+        //安排项目 --- 得到安排项目
+        List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+        for (ProjectPlanArrage planArrage:projectPlans){
+            if (planArrage.getArrageFlag().equals("1")&&planArrage.getWhetherStatus().equals("0")){
+                planArrages.add(planArrage);
+            }
+        }
+        //发送流程---施工单位项目经理
+        projectPlanActService.startProjectArrangeAct(planArrages);
+        return ajaxJson;
+    }
+
+    //施工单位项目经理处理页面
+    @RequestMapping(value = "conList")
+    public String getConstructionList(ProjectActProclnsAss projectActProclnsAss, Model model,HttpServletRequest request){
+        //得到当前流程
+        Act act = projectActProclnsAss.getAct();
+        act.setId(projectActProclnsAss.getId());
+        projectActProclnsAss.setProcInsId(act.getProcInsId());//赋值项目id
+        //配网项目经理安排的项目
+        List<ProjectActProclnsAss> listAss = projectPlanActService.findListAss(projectActProclnsAss);//查找当前流程节点的项目
+        //目前安排的存入session中
+        request.getSession().setAttribute("presentActProInsAss",listAss);
+        //项目已经安排项目定义号拼接
+        String projectId = projectPlanActService.getMapProjectId(listAss);
+        //获取计划安排月份
+        Date mouthDate = projectPlanActService.getMouthDate(listAss);
+        request.getSession().setAttribute("mouthDate",mouthDate);
+
+        //初始安排计划项目列表
+        List<ProjectPlanArrage> planArrageList = projectPlanArrageService.getProjectPlanArrageList();
+        //根据项目名称查询人员
+        List<ProjectAssignment> listAssignment = projectPlanArrageService.findListAssignment(planArrageList);
+        //获得最终集合
+        List<ProjectPlanArrage> projectPlanArrageList = projectPlanArrageService.getPlanArrageList(planArrageList, listAssignment);
+        //区分开关与项目--整体集合
+        List<ProjectPlanArrage> projectList = projectPlanArrageService.getProjectList(projectPlanArrageList);
+        //开关 - 项目 统一集合 用WhetherStatus区分
+        ProjectPlanArrage planArrage = new ProjectPlanArrage();
+        planArrage.setProjectNumber(projectId);//赋值项目定义号
+        List<ProjectPlanArrage> projectPlanList = PackagingUtil.getProjectPlanList(planArrage,projectList);
+
+        //当前项目与配网项目经理安排项目会合
+        List<ProjectPlanArrage> summaryService = projectPlanActService.getSummaryService(projectPlanList, listAss);
+        for (ProjectPlanArrage planArrage1:summaryService){
+            planArrage1.preInsert();
+        }
+        request.getSession().setAttribute("summaryList",summaryService);
+        request.getSession().setAttribute("planAct",act);
+        model.addAttribute("act",act);
+        return "modules/sg/managementcenter/projectPlanArrage/act/constructionManageAct";
+    }
+
+    //初始安排的计划项目--跳转树形操作列表--施工单位项目经理
+    @ResponseBody
+    @RequestMapping(value = "initConstructionArragePlanProject")
+    public Map<String, Object> initConstructionArragePlanProject(ProjectPlanArrage projectPlanArrage,Model model,HttpServletRequest request,HttpServletResponse response){
+        projectPlanArrage.setArrageFlag("1");
+        projectPlanArrage.setWhetherStatus("0");
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("summaryList");
+        Page<ProjectPlanArrage> page = findPageListCons(new Page<ProjectPlanArrage>(request, response),projectPlanArrage,projectPlans);
+        return getBootstrapData(page);
+    }
+
+    //所有未安排的计划-树形表格展示--施工单位项目经理
+    @ResponseBody
+    @RequestMapping(value = "bootstrapConstructionTreeTable")
+    public List<Map<String,Object>> getConstructionArrageNoPlan(ProjectPlanArrage projectPlanArrage,HttpServletRequest request){
+        //创建树形表格
+        List<Map<String,Object>> objects = Lists.newArrayList();
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("summaryList");
+        List<ProjectPlanArrage> planArrageList = new ArrayList<ProjectPlanArrage>();
+//        String name = UserUtils.getUser().getName();
+//        for (ProjectPlanArrage p:projectPlans){
+//            if (p.getArrageFlag().equals("0")){
+//                if (null!=p.getConstructionUnit()){
+//                    if (p.getConstructionUnit().equals(name)){
+//                        planArrageList.add(p);
+//                    }
+//                }
+//            }
+//        }
+        List<Map<String, Object>> bookStrapTree = BookStrapTreeUtil.getAllBookStrapTree(objects, projectPlans,"2");
+        return bookStrapTree;
+    }
+    //安排项目计划---施工单位项目经理
+    @ResponseBody
+    @RequestMapping(value = "consPlanArranage")
+    public Result getConsPlanArranage(ProjectPlanArrage projectPlanArrage,String ids,HttpServletRequest request){
+        Result j = new Result();
+        try{
+            //得到拼接id
+            List<String> strings = PackagingUtil.getString(ids);
+            //获得安排月份
+            Date mouthDate = (Date) request.getSession().getAttribute("mouthDate");
+            //获取安排的项目
+            List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("summaryList");
+            if (null!=projectPlans&&!projectPlans.isEmpty()){
+                //安排计划
+                projectPlanArrageService.getConsPlanArranageService(projectPlans,strings,mouthDate);
+            }
+            List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+            String name = UserUtils.getUser().getName();
+            for (ProjectPlanArrage planArrage:projectPlans){
+                if (planArrage.getArrageFlag().equals("0")){
+                    if (null!=planArrage.getConstructionUnit()){
+                        if (planArrage.getConstructionUnit().equals(name)){
+                            planArrages.add(planArrage);
+                        }
+                    }
+                }
+            }
+            List<Map<String,Object>> objects = Lists.newArrayList();
+            List<Map<String, Object>> bookStrapTree = BookStrapTreeUtil.getAllBookStrapTree(objects, planArrages,"2");
+            j.setMapListTree(bookStrapTree);
+            j.setSuccess(true);
+            j.setMessage("安排计划成功");
+            return j;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        j.setSuccess(false);
+        j.setMessage("安排计划失败");
+        return j;
+    }
+
+    //删除项目 -- 填写备注--施工单位项目经理 -- 填写完成后由配网项目经理同意删除
+    @ResponseBody
+    @RequestMapping(value = "deletePlanArrange")
+    public Result deletePlanArrange(String ids,String backToText,HttpServletRequest request){
+        Result ajaxJson = new Result();
+
+        try {
+            //获取ids的集合
+            String comment ="[退回项目]:"+URLDecoder.decode(backToText, "UTF-8");
+            List<String> strings = PackagingUtil.getString(ids);
+            //获取安排的项目
+            List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("summaryList");
+            //验证是否允许
+            boolean flag = projectPlanArrageService.deleteJudgePlanArrange(projectPlans, strings);
+            if (!flag){
+                ajaxJson.setSuccess(false);
+                ajaxJson.setMessage("只允许删除本人的项目!");
+                return ajaxJson;
+            }
+            //删除项目
+            projectPlanArrageService.deletePlanArrange(projectPlans,strings,comment);
+            List<Map<String,Object>> objects = Lists.newArrayList();
+            List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+            for (ProjectPlanArrage planArrage:projectPlans){
+                if (planArrage.getArrageFlag().equals("0")){
+                    planArrages.add(planArrage);
+                }
+            }
+            List<Map<String, Object>> bookStrapTree = BookStrapTreeUtil.getAllBookStrapTree(objects, planArrages,"2");
+            ajaxJson.setMapListTree(bookStrapTree);
+            ajaxJson.setSuccess(true);
+            ajaxJson.setMessage("删除成功");
+            return ajaxJson;
+        }catch (Exception e){
+            ajaxJson.setSuccess(false);
+            ajaxJson.setMessage("删除失败!");
+            e.printStackTrace();
+        }
+        return ajaxJson;
+    }
+
+
+    //安排计划设置时间 --返回页面 --- 施工单位项目经理
+    @RequestMapping(value = "planDate")
+    public String planDate(Model model){
+        return "modules/sg/managementcenter/projectPlanArrage/act/constructionDateList";
+    }
+
+    //安排计划时间列表
+    @ResponseBody
+    @RequestMapping(value = "planDateTable")
+    public Map<String, Object> planDateTable(ProjectPlanArrage projectPlanArrage,HttpServletRequest request,HttpServletResponse response){
+        projectPlanArrage.setArrageFlag("1");
+        projectPlanArrage.setWhetherStatus("0");
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("summaryList");
+        Page<ProjectPlanArrage> page = findPageListCons(new Page<ProjectPlanArrage>(request, response),projectPlanArrage,projectPlans);
+        return getBootstrapData(page);
+    }
+
+    public Page<ProjectPlanArrage> findPageListCons(Page<ProjectPlanArrage> page, ProjectPlanArrage entity,List<ProjectPlanArrage> list) {
+        dataRuleFilter(entity);
+        entity.setPage(page);
+        List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+        String name = UserUtils.getUser().getName();
+        for (ProjectPlanArrage projectPlanArrage:list){
+            if (entity.getWhetherStatus().equals(projectPlanArrage.getWhetherStatus())&&entity.getArrageFlag().equals(projectPlanArrage.getArrageFlag())){
+                if (name.equals(projectPlanArrage.getConstructionUnit())){
+                    planArrages.add(projectPlanArrage);
+                }
+            }
+        }
+        for (ProjectPlanArrage projectPlanArrage:list){
+            if (entity.getWhetherStatus().equals(projectPlanArrage.getWhetherStatus())&&entity.getArrageFlag().equals(projectPlanArrage.getArrageFlag())){
+                if (!name.equals(projectPlanArrage.getConstructionUnit())){
+                    planArrages.add(projectPlanArrage);
+                }
+            }
+        }
+        page.setList(planArrages);
+        return page;
+    }
+    //添加 -- 修改 时间
+    @ResponseBody
+    @RequestMapping(value = "addtime")
+    public AjaxJson getAddtime(ProjectPlanArrage projectPlanArrage,HttpServletRequest request){
+        AjaxJson ajaxJson = new AjaxJson();
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("summaryList");
+        try {
+            for (ProjectPlanArrage planArrage:projectPlans){
+                if (projectPlanArrage.getId().equals(planArrage.getId())){
+                    planArrage.setProjectDate(projectPlanArrage.getProjectDate());
+                    break;
+                }
+            }
+            ajaxJson.setSuccess(true);
+            ajaxJson.setMsg("安排时间成功");
+            return ajaxJson;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        ajaxJson.setSuccess(false);
+        ajaxJson.setMsg("安排时间失败");
+        return ajaxJson;
+    }
+
+    //确定安排计划时间验证
+    @ResponseBody
+    @RequestMapping(value = "judgeAddTime")
+    public AjaxJson getJudgeAddTime(HttpServletRequest request){
+        AjaxJson ajaxJson = new AjaxJson();
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("summaryList");
+        try {
+            boolean judgePlanTimeNULL = projectPlanActService.getJudgePlanTimeNULL(projectPlans);
+            if (judgePlanTimeNULL){
+                ajaxJson.setSuccess(false);
+                ajaxJson.setMsg("1");
+                return ajaxJson;
+            }
+            boolean flag = projectPlanActService.getJudgePlanTimeService(projectPlans);
+            if (flag){
+                ajaxJson.setSuccess(false);
+                ajaxJson.setMsg("时间不一致");
+                return ajaxJson;
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return ajaxJson;
+    }
+
+    //施工项目经理发起流程到配网项目经理
+    @ResponseBody
+    @RequestMapping(value = "conRunProInsId")
+    public AjaxJson conRunProInsId(String flag,String comment,HttpServletRequest request) {
+        AjaxJson j = new AjaxJson();
+        try {
+            Act act = (Act)request.getSession().getAttribute("planAct");
+            String comment1 = URLDecoder.decode(comment, "UTF-8");
+            act.setComment(comment1);
+            act.setFlag(flag);
+            //项目经理安排的时间
+            List<ProjectPlanArrage> presentActProInsAss = (List<ProjectPlanArrage>)request.getSession().getAttribute("presentActProInsAss");
+            //得到项目--所以项目(包括安排和待安排的)
+            List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("summaryList");
+            projectPlanActService.conRunProInsId(act,projectPlans,presentActProInsAss);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        j.setSuccess(true);
+        j.setMsg("审批成功");
+        return j;
+    }
+
+    //配网项目经理--审核界面
+    @RequestMapping(value = "disList")
+    public String getDisList(ProjectActProclnsAss projectActProclnsAss, Model model,HttpServletRequest request){
+        //得到当前流程
+        Act act = projectActProclnsAss.getAct();
+        act.setId(projectActProclnsAss.getId());
+        projectActProclnsAss.setProcInsId(act.getProcInsId());//赋值项目id
+        //配网项目经理安排的项目
+        List<ProjectActProclnsAss> listAss = projectPlanActService.findListAss(projectActProclnsAss);//查找当前流程节点的项目
+        //目前安排的存入session中
+        request.getSession().setAttribute("networkActProInsAss",listAss);
+        //项目已经安排项目定义号拼接
+        String projectId = projectPlanActService.getMapProjectId(listAss);
+
+        //初始安排计划项目列表
+        List<ProjectPlanArrage> planArrageList = projectPlanArrageService.getProjectPlanArrageList();
+        //根据项目名称查询人员
+        List<ProjectAssignment> listAssignment = projectPlanArrageService.findListAssignment(planArrageList);
+        //获得最终集合
+        List<ProjectPlanArrage> projectPlanArrageList = projectPlanArrageService.getPlanArrageList(planArrageList, listAssignment);
+        //区分开关与项目--整体集合
+        List<ProjectPlanArrage> projectList = projectPlanArrageService.getProjectList(projectPlanArrageList);
+        //开关 - 项目 统一集合 用WhetherStatus区分
+        ProjectPlanArrage planArrage = new ProjectPlanArrage();
+        planArrage.setProjectNumber(projectId);//赋值项目定义号
+        List<ProjectPlanArrage> projectPlanList = PackagingUtil.getProjectPlanList(planArrage,projectList);
+        //当前项目与配网项目经理汇合项目汇总
+        List<ProjectPlanArrage> planArrages = projectPlanActService.getNetworkService(projectPlanList,listAss);
+        for (ProjectPlanArrage planArrage1:planArrages){
+            planArrage1.preInsert();
+        }
+        request.getSession().setAttribute("networkList",planArrages);
+        request.getSession().setAttribute("networkPlanAct",act);
+        model.addAttribute("act",act);
+        return "modules/sg/managementcenter/projectPlanArrage/act/netWorkManageAct";
+    }
+
+    //初始安排的计划项目--跳转树形操作列表--配网项目经理
+    @ResponseBody
+    @RequestMapping(value = "initNetWorkArragePlanProject")
+    public Map<String, Object> initNetWorkArragePlanProject(ProjectPlanArrage projectPlanArrage,Model model,HttpServletRequest request,HttpServletResponse response){
+        projectPlanArrage.setArrageFlag("1");
+        projectPlanArrage.setWhetherStatus("0");
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("networkList");
+        Page<ProjectPlanArrage> page = findPageListNetWorkArragePlan(new Page<ProjectPlanArrage>(request, response),projectPlanArrage,projectPlans);
+        return getBootstrapData(page);
+    }
+    public Page<ProjectPlanArrage> findPageListNetWorkArragePlan(Page<ProjectPlanArrage> page, ProjectPlanArrage entity,List<ProjectPlanArrage> list) {
+        dataRuleFilter(entity);
+        entity.setPage(page);
+        List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+        if (null!=list){
+            for (ProjectPlanArrage projectPlanArrage:list){
+                if (entity.getWhetherStatus().equals(projectPlanArrage.getWhetherStatus())&&entity.getArrageFlag().equals(projectPlanArrage.getArrageFlag())){
+                    if (projectPlanArrage.getBackToStauts().equals("2")){
+                        projectPlanArrage.setHtmlStatus("2");//新增项目
+                    }
+                    if (null!=projectPlanArrage.getBackToText()&&!"".equals(projectPlanArrage.getBackToText())){
+                        projectPlanArrage.setHtmlStatus("1");//删除项目
+                    }
+                    planArrages.add(projectPlanArrage);
+                }
+            }
+        }
+        page.setList(planArrages);
+        return page;
+    }
+    //所有未安排的计划-树形表格展示--配网项目经理
+    @ResponseBody
+    @RequestMapping(value = "bootstrapNetWorkTreeTable")
+    public List<Map<String,Object>> getNetWorkArrageNoPlan(ProjectPlanArrage projectPlanArrage,HttpServletRequest request){
+        //创建树形表格
+        List<Map<String,Object>> objects = Lists.newArrayList();
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("networkList");
+        List<ProjectPlanArrage> planArrageList = new ArrayList<ProjectPlanArrage>();
+        for (ProjectPlanArrage p:projectPlans){
+            if (p.getArrageFlag().equals("0")){
+                planArrageList.add(p);
+            }
+        }
+        List<Map<String, Object>> bookStrapTree = BookStrapTreeUtil.getAllBookStrapTree(objects, planArrageList,"1");
+        return bookStrapTree;
+    }
+    //添加 -- 修改 时间
+    @ResponseBody
+    @RequestMapping(value = "addtimeNet")
+    public AjaxJson getAddtimeNet(ProjectPlanArrage projectPlanArrage,HttpServletRequest request){
+        AjaxJson ajaxJson = new AjaxJson();
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("networkList");
+        try {
+            for (ProjectPlanArrage planArrage:projectPlans){
+                if (projectPlanArrage.getId().equals(planArrage.getId())){
+                    planArrage.setProjectDate(projectPlanArrage.getProjectDate());
+                    break;
+                }
+            }
+            ajaxJson.setSuccess(true);
+            ajaxJson.setMsg("安排时间成功");
+            return ajaxJson;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        ajaxJson.setSuccess(false);
+        ajaxJson.setMsg("安排时间失败");
+        return ajaxJson;
+    }
+    //退回操作--配网项目经理退回
+    @ResponseBody
+    @RequestMapping(value = "deleteNetWork")
+    public Result getNetWorkTheRoBack(ProjectPlanArrage projectPlanArrage, String ids, HttpServletRequest request){
+        Result j = new Result();
+        j.setSuccess(true);
+        j.setMessage("退回成功");
+        List<String> strings = PackagingUtil.getString(ids);
+        try {
+            //获取项目信息
+            List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("networkList");
+            if (!projectPlans.isEmpty()&&!strings.isEmpty()){
+                projectPlanArrageService.getNetWorkSecond(projectPlans,strings);
+            }else {
+                j.setSuccess(false);
+                j.setMessage("退回计划项目失败");
+            }
+//            List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+//            for (ProjectPlanArrage planArrage:projectPlans){
+//                if (planArrage.getArrageFlag().equals("0")){
+//                    planArrages.add(planArrage);
+//                }
+//            }
+//            List<Map<String,Object>> objects = Lists.newArrayList();
+//            List<Map<String, Object>> bookStrapTree = BookStrapTreeUtil.getAllBookStrapTree(objects, planArrages);
+//            j.setMapListTree(bookStrapTree);
+            j.setSuccess(true);
+            j.setMessage("退回计划成功");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return j;
+    }
+
+    //安排项目计划
+    @ResponseBody
+    @RequestMapping(value = "unNetWorkplanned")
+    public Result unNetWorkplanned(ProjectPlanArrage projectPlanArrage,String ids,HttpServletRequest request){
+        Result j = new Result();
+        List<String> strings = PackagingUtil.getString(ids);
+        j.setSuccess(false);
+        j.setMessage("安排计划项目失败");
+        try {
+            //获取项目信息
+            List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("networkList");
+            if (!projectPlans.isEmpty()&&!strings.isEmpty()){
+                projectPlanArrageService.getUnplannedService(projectPlans,strings);
+            }else {
+                j.setSuccess(false);
+                j.setMessage("安排计划项目失败");
+            }
+            List<ProjectPlanArrage> planArrages = new ArrayList<ProjectPlanArrage>();
+            for (ProjectPlanArrage planArrage:projectPlans){
+                if (planArrage.getArrageFlag().equals("0")){
+                    planArrages.add(planArrage);
+                }
+            }
+            List<Map<String,Object>> objects = Lists.newArrayList();
+            List<Map<String, Object>> bookStrapTree = BookStrapTreeUtil.getAllBookStrapTree(objects, planArrages,"1");
+            j.setMapListTree(bookStrapTree);
+            j.setSuccess(true);
+            j.setMessage("安排计划成功");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return j;
+    }
+
+    //安排计划设置时间 --返回页面 --- 施工单位项目经理
+    @RequestMapping(value = "planNetDate")
+    public String planNetDate(Model model){
+        return "modules/sg/managementcenter/projectPlanArrage/act/newDateList";
+    }
+
+    //安排计划时间列表
+    @ResponseBody
+    @RequestMapping(value = "planNetDateTable")
+    public Map<String, Object> planNetDateTable(ProjectPlanArrage projectPlanArrage,HttpServletRequest request,HttpServletResponse response){
+        projectPlanArrage.setArrageFlag("1");
+        projectPlanArrage.setWhetherStatus("0");
+        List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("networkList");
+        Page<ProjectPlanArrage> page = findPageList(new Page<ProjectPlanArrage>(request, response),projectPlanArrage,projectPlans);
+        return getBootstrapData(page);
+    }
+
+
+    //配网项目经理发起流程到配网运行人员
+    @ResponseBody
+    @RequestMapping(value = "newWorkRunProInsId")
+    public AjaxJson newWorkRunProInsId(String flag,String comment,HttpServletRequest request) {
+        AjaxJson j = new AjaxJson();
+        try {
+            Act act = (Act)request.getSession().getAttribute("networkPlanAct");
+            String comment1 = URLDecoder.decode(comment, "UTF-8");
+            act.setComment(comment1);
+            act.setFlag(flag);
+            //得到项目
+            List<ProjectPlanArrage> projectPlans = (List<ProjectPlanArrage>)request.getSession().getAttribute("networkList");
+            projectPlanActService.newWorkRunProInsId(act,projectPlans);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        j.setSuccess(true);
+        j.setMsg("审批成功");
+        return j;
+    }
+
+    //运行项目经理--审核界面
+    @RequestMapping(value = "runList")
+    public String getRunList(ProjectActProclnsAss projectActProclnsAss, Model model,HttpServletRequest request){
+        //得到当前流程
+        Act act = projectActProclnsAss.getAct();
+        act.setId(projectActProclnsAss.getId());
+        projectActProclnsAss.setProcInsId(act.getProcInsId());//赋值项目id
+        model.addAttribute("act",act);
+        model.addAttribute("projectActProclnsAss",projectActProclnsAss);
+        return "modules/sg/managementcenter/projectPlanArrage/act/runListManageAct";
+    }
+
+    //初始安排的计划项目--跳转树形操作列表--配网运行人员
+    @ResponseBody
+    @RequestMapping(value = "runListArragePlanProject")
+    public Map<String, Object> runListArragePlanProject(ProjectActProclnsAss projectActProclnsAss,Model model,HttpServletRequest request,HttpServletResponse response){
+        String name = UserUtils.getUser().getName();
+        projectActProclnsAss.setOperationUnit(name);
+        Page<ProjectActProclnsAss> page = findPageRunList(new Page<ProjectActProclnsAss>(request, response),projectActProclnsAss);
+        return getBootstrapData(page);
+    }
+
+    public Page<ProjectActProclnsAss> findPageRunList(Page<ProjectActProclnsAss> page, ProjectActProclnsAss entity) {
+        dataRuleFilter(entity);
+        entity.setPage(page);
+        page.setList(projectPlanActService.findListAss(entity));
+        return page;
+    }
+
+    //运行单位人员发起流程到配网项目经理
+    @ResponseBody
+    @RequestMapping(value = "runListRunProInsId")
+    public AjaxJson runListRunProInsId(Act act) {
+        AjaxJson j = new AjaxJson();
+        try {
+            String comment1 = URLDecoder.decode(act.getComment(), "UTF-8");
+            act.setComment(comment1);
+            projectPlanActService.runListRunProInsId(act);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        j.setSuccess(true);
+        j.setMsg("审批成功");
+        return j;
+    }
+
+    //运行项目经理--审核界面
+    @RequestMapping(value = "disList2")
+    public String getDisList2(ProjectActProclnsAss projectActProclnsAss, Model model,HttpServletRequest request){
+        //得到当前流程
+        Act act = projectActProclnsAss.getAct();
+        act.setId(projectActProclnsAss.getId());
+        projectActProclnsAss.setProcInsId(act.getProcInsId());//赋值项目id
+        model.addAttribute("act",act);
+        model.addAttribute("projectActProclnsAss",projectActProclnsAss);
+        return "modules/sg/managementcenter/projectPlanArrage/act/disList2ManageAct";
+    }
+
+    //初始安排的计划项目--跳转树形操作列表--配网项目经理
+    @ResponseBody
+    @RequestMapping(value = "disList2ArragePlanProject")
+    public Map<String, Object> disList2ArragePlanProject(ProjectActProclnsAss projectActProclnsAss,Model model,HttpServletRequest request,HttpServletResponse response){
+        Page<ProjectActProclnsAss> page = findPageRunList(new Page<ProjectActProclnsAss>(request, response),projectActProclnsAss);
+        return getBootstrapData(page);
+    }
+
+    //运行单位人员发起流程到配网项目经理
+    @ResponseBody
+    @RequestMapping(value = "disList2RunProInsId")
+    public AjaxJson disList2RunProInsId(Act act) {
+        AjaxJson j = new AjaxJson();
+        try {
+            String comment1 = URLDecoder.decode(act.getComment(), "UTF-8");
+            act.setComment(comment1);
+            ProjectActProclnsAss proclnsAss = new ProjectActProclnsAss();
+            proclnsAss.setProcInsId(act.getProcInsId());
+            List<ProjectActProclnsAss> listAss = projectPlanActService.findListAss(proclnsAss);
+            projectPlanActService.disList2ProInsId(act,listAss);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        j.setSuccess(true);
+        j.setMsg("审批成功");
+        return j;
+    }
+
+    /**
+     * 导出excel文件
+     */
+    @ResponseBody
+    @RequestMapping(value = "export")
+    public AjaxJson exportFile(ProjectActProclnsAss projectActProclnsAss, HttpServletRequest request, HttpServletResponse response) {
+        AjaxJson j = new AjaxJson();
+        try {
+            String fileName = "项目计划安排表"+ DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<ProjectActProclnsAss> page = findPageRunList(new Page<ProjectActProclnsAss>(request, response, -1), projectActProclnsAss);
+            new ExportExcel("项目计划安排表", ProjectActProclnsAss.class).setDataList(page.getList()).write(response, fileName).dispose();
+            j.setSuccess(true);
+            j.setMsg("导出成功!");
+            return j;
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导出项目计划安排记录失败!失败信息:"+e.getMessage());
+        }
+        return j;
+    }
+    //导入
+    /**
+     * 导入Excel数据
+
+     */
+    @ResponseBody
+    @RequestMapping(value = "import")
+    public AjaxJson importFile(@RequestParam("file") MultipartFile file, HttpServletResponse response, HttpServletRequest request){
+        AjaxJson j = new AjaxJson();
+        try {
+            StringBuilder failureMsg = new StringBuilder();
+            ImportUtil importUtil = new ImportUtil(file,0,0);
+            List<ProjectPlanArrage> materProUtil = projectPlanArrageService.getMaterProUtil(importUtil);
+            projectPlanArrageService.insertList(materProUtil);
+            j.setMsg( "已成功导入项目"+materProUtil.size()+"条计划安排记录记录");
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入失败!失败信息:"+e.getMessage());
+        }
+        return j;
+    }
+}

+ 245 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/constructionDateList.js

@@ -0,0 +1,245 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script>
+$(document).ready(function() {
+	$('#projectTable').bootstrapTable({
+		  //请求方法
+               method: 'post',
+               //类型json
+               dataType: "json",
+               contentType: "application/x-www-form-urlencoded",
+                height:'400',
+               // //显示检索按钮
+	           // 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: 5000,
+               // //可供选择的每页的行数(*)
+               // pageList: [5,10, 25, 50, 100],
+               //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+               url: "${ctx}/sg/managementCenter/projectPlanArrage/planDateTable",
+               //默认值为 '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}/sg/managementcenter/project/delete?id="+row.id, function(data){
+                   	  		if(data.success){
+                   	  			$('#projectTable').bootstrapTable('refresh');
+                   	  			jp.success(data.msg);
+                   	  		}else{
+                   	  			jp.error(data.msg);
+                   	  		}
+                   	  	})
+
+                   	});
+
+                   }
+               },
+        onLoadSuccess:function(data) {
+            var split = data.rows;
+            for (var i = 0; i < split.length; i++) {
+                var arrangeTime = split[i].projectMonthDate;
+                var date = new Date(arrangeTime);
+                var date1 = new Date(arrangeTime);
+                date1.setMonth(date1.getMonth()+1);
+                $('#' + split[i].id).datetimepicker({
+                    format: "YYYY-MM-DD"
+                    // minDate:date,
+                    // maxDate:date1,
+                }).on('dp.change', function (i) {
+                    return function (ev) {
+                        var newDateTime = ev.date ? ev.date.format('YYYY-MM-DD') : "";
+                        var oldDateTime = ev.oldDate ? ev.oldDate.format('YYYY-MM-DD') : "";
+                        if (newDateTime != oldDateTime) {
+                            if ("" != oldDateTime) {
+                                jp.confirm('确认要更新时间吗?', function () {
+                                    jp.get("${ctx}/sg/managementCenter/projectPlanArrage/addtime?id=" + split[i].id + "&projectDate=" + newDateTime, function (data) {
+                                        if (data.success) {
+                                            jp.success(data.msg);
+                                        } else {
+                                            jp.error(data.msg);
+                                        }
+                                    })
+                                })
+                            } else {
+                                jp.get("${ctx}/sg/managementCenter/projectPlanArrage/addtime?id=" + split[i].id + "&projectDate=" + newDateTime, function (data) {
+                                    if (data.success) {
+                                        // jp.success(data.msg);
+                                    } else {
+                                        jp.error(data.msg);
+                                    }
+                                })
+                            }
+
+                        }
+                    }
+                }(i));
+            }
+        },
+               onClickRow: function(row, $el){
+               },
+
+            onShowSearch: function () {
+			$("#search-collapse").slideToggle();
+		},
+               columns: [
+                   {
+		        field: 'projectNumber',
+		        title: '项目定义号',
+                width:160
+
+            }
+                   ,{
+                       field: 'projectName',
+                       title: '项目名称',
+                       width:120
+
+                   }
+                   ,{
+                       field: 'projectPowerRange',
+                       title: '停电范围',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectMonthDate',
+                       title: '计划月份',
+                       width:160
+                   }
+                   ,{
+                       field: 'constructionUnit',
+                       title: '施工单位项目经理',
+                       width:160
+                   }
+                   ,{
+                       field: 'projectDate',
+                       title: '安排计划时间',
+                       width:160,
+                       formatter: getTime
+                   }
+		     ]
+		
+		});
+
+    function getTime(value, row, index) {
+        if (row.operationStatus == '0'){
+            return [
+                "<div class='input-group form_datetime' id="+row.id+"> <input type='text' id="+row.id+"input"+"   name='deliverySchedule' class='form-control required'  value="+row.projectDate+"/> <span class='input-group-addon'> <span class='glyphicon glyphicon-calendar'></span> </span></div>" ,
+            ].join('');
+        }else {
+            return [
+                "<div class='input-group' id="+row.id+"> <input readonly='readonly' type='text' id="+row.id+"input1234"+" class='form-control required'  value="+row.projectDate+"/></div>" ,
+            ].join('');
+        }
+
+    }
+	  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').prop('disabled', $('#projectTable').bootstrapTable('getSelections').length!=1);
+        });
+		    
+	  $("#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 getDate() {
+        return $.map($("#projectTable").bootstrapTable('getData'), function (row) {
+            return row
+        });
+    }
+    //刷新列表
+  function refresh(){
+  	$('#projectTable').bootstrapTable('refresh');
+  }
+    function save() {
+        // var date = getDate();
+        // var idPower = "";
+        // var id = ""
+        // var flag = false;
+        // for (var i = 0; i < date.length; i++){
+        //     id = date[i].id;
+        //     idPower = $("#"+id+"input").val();
+        //     alert(idPower);
+        //     if (null == idPower||"" == idPower){
+        //         flag = true;
+        //     }
+        // }
+        // if (flag){
+        //     jp.error("请选择具体时间!")
+        //     return false;
+        // } else {
+        //     return true;
+        // }
+        return true;
+    }
+</script>

+ 34 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/constructionDateList.jsp

@@ -0,0 +1,34 @@
+<%@ 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="constructionDateList.js" %>
+</head>
+<script>
+    // function save() {
+    //     var dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+    //     parent.layer.close(dialogIndex);
+    // }
+</script>
+<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">
+	<!-- 工具栏 -->
+
+	<!-- 表格 -->
+	<table id="projectTable" data-toolbar="#toolbar"></table>
+
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 401 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/constructionManageAct.js

@@ -0,0 +1,401 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script type="text/javascript">
+    $(document).ready(function() {
+        var projectId = $('#projectId').val();
+        //zTree初始化
+        $.getJSON("${ctx}/sg/managementCenter/projectPlanArrage/bootstrapConstructionTreeTable?projectId="+projectId,function(data){
+            jstree(data);
+            dateTimeValue('1');
+        });
+        $('#selectId').click(function () {
+            var object = $('#jstree').treeview('getChecked');
+            if (object.length<1){
+                jp.error("请选择项目!")
+                return false;
+            }
+            var str = "";
+            for (var  i = 0; i < object.length; i++) {
+                str+=object[i].id+",";
+            }
+            var sureStr  = str.substring(0,str.length-1);
+            $("#parentIds").val(sureStr);
+            add(sureStr);
+        });
+        //搜索
+        var findSearchableNodes = function() {
+            return $('#jstree').treeview('search', [ $.trim($('#input-search').val()), { ignoreCase: false, exactMatch: false } ]);
+        };
+        var search = function(e) {
+            var pattern = $.trim($('#input-search').val());
+            var options = {
+                ignoreCase: $('#chk-ignore-case').is(':checked'),
+                exactMatch: $('#chk-exact-match').is(':checked'),
+                revealResults: $('#chk-reveal-results').is(':checked')
+            };
+            $('#jstree').treeview('search', [ $.trim($('#input-search').val()), { ignoreCase: false, exactMatch: false } ]);
+            var results = $('#jstree').treeview('search', [ pattern, options ]);
+        }
+        $('#btn-search').on('click', search);
+        $('#btn-clear-search').on('click', function (e) {
+            $('#jstree').treeview('clearSearch');
+            $('#input-search').val('');
+            $('#jstree').treeview('collapseAll', {
+                silent : false//设置初始化节点关闭
+            });
+        });
+        $('#selectId1').click(function () {
+            var object = $('#jstreeTime').treeview('getChecked');
+            if (object.length<1){
+                jp.error("请选择项目!");
+                return false;
+            }
+            var str = "";
+            for (var  i = 0; i < object.length; i++) {
+                str+=object[i].id+",";
+            }
+            var sureStr  = str.substring(0,str.length-1);
+            minus(sureStr);
+        })
+        //表格初始化
+        $('#table').bootstrapTable({
+            //请求方法
+            method: 'post',
+            //类型json
+            dataType: "json",
+            contentType: "application/x-www-form-urlencoded",
+            //是否显示行间隔色
+            //显示刷新按钮
+            showRefresh: true,
+            //是否显示分页(*)
+            // pagination: true,
+            //排序方式
+            sortOrder: "asc",
+            //初始化加载第一页,默认第一页
+            pageNumber:1,
+            //每页的记录行数(*)
+            pageSize: 5,
+            //可供选择的每页的行数(*)
+            pageList: [5,10, 25, 50, 100],
+            //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+            url: "${ctx}/sg/managementCenter/projectPlanArrage/initConstructionArragePlanProject?projectId="+projectId,
+            //默认值为 '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") == "delete"){
+                    deleteAll(row.id);
+                }
+            },
+            onClickRow: function(row, $el){
+            },
+            onLoadSuccess:function(data) {
+                var split = data.rows;
+                var tb = document.getElementById('table');    // table 的 id
+                var rows = tb.rows;                           // 获取表格所有行
+                for (var i =0;i<split.length;i++){
+                    if (split[i].htmlStatus=="2"){
+                        // this.data.rows[i].setAttribute("style","color: red;");
+                        rows[i+1].style.backgroundColor = "#e6e6e6"
+                    }
+                }
+            },
+            onShowSearch: function () {
+                $("#search-collapse").slideToggle();
+            },
+            columns: [{
+                checkbox: true
+
+            }, {
+                field: 'projectNumber',
+                title: '项目定义号'
+
+            }, {
+                field: 'projectName',
+                title: '项目名称'
+            }, {
+                field: 'projectPowerRange',
+                title: '停电范围'
+            }, {
+                field: 'projectMonthDate',
+                title: '停电月份'
+            }, {
+                field: 'projectDate',
+                title: '停电日'
+            }, {
+                field: 'projectPowerOut',
+                title: '是否停电'
+            }, {
+                field: 'constructionUnit',
+                title: '当前操作经理'
+            }, {
+                field: 'backToText',
+                title: '备注'
+            }
+
+
+            ]
+
+        });
+
+    })
+
+if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端
+    $('#table').bootstrapTable("toggleView");
+}
+
+$('#table').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+    'check-all.bs.table uncheck-all.bs.table', function () {
+    $('#remove').prop('disabled', ! $('#table').bootstrapTable('getSelections').length);
+    $('#edit').prop('disabled', $('#table').bootstrapTable('getSelections').length!=1);
+});
+//安排计划时间
+function add(ids){
+    jp.loading();
+    jp.post("${ctx}/sg/managementCenter/projectPlanArrage/consPlanArranage",{'ids':ids},function(data){
+        if(data.success){
+            refresh();
+            // jstreeTime(data.mapList);
+            jstree(data.mapListTree);
+            jp.success("安排计划成功")
+        }else{
+            jp.error(data.message);
+        }
+    })
+}
+function getIds() {
+    return $("#parentIds").val();
+}
+function jstree(date) {
+    $('#jstree').treeview({
+        data: date,
+        levels: 1,
+        highlightSelected:false,
+        showCheckbox:true,
+        onNodeChecked: function (event, node) { //选中节点
+            var selectNodes = getChildNodeIdArr(node); //获取所有子节点
+            if (selectNodes) { //子节点不为空,则选中所有子节点
+                $('#jstree').treeview('checkNode', [selectNodes, { silent: true }]);
+            }
+            // var parentNode = $("#jstree").treeview("getNode", node.parentId);
+            // setParentNodeCheck(node);
+        },
+        onNodeUnchecked: function (event, node) { //取消选中节点
+            // 取消父节点 子节点取消
+            var selectNodes = setChildNodeUncheck(node); //获取未被选中的子节点
+            var childNodes = getChildNodeIdArr(node);    //获取所有子节点
+            if (selectNodes && selectNodes.length == 0) { //有子节点且未被选中的子节点数目为0,则取消选中所有子节点
+                $('#tree').treeview('uncheckNode', [childNodes, { silent: true }]);
+            }
+            // 取消节点 父节点取消
+            var parentNode = $("#jstree").treeview("getNode", node.parentId);  //获取父节点
+            var selectNodes = getChildNodeIdArr(node);
+            setParentNodeCheck(node);
+        }
+    });
+}
+function dateTimeValue(value) {
+    if (value != '1'){
+        $("#dateTimeId").val(value);
+    }else {
+        var date = new Date();
+        var str = date.toISOString();
+        $("#dateTimeId").val( str.substring(0,7));
+    }
+}
+
+function selected(data){
+    if(data.nodeId == undefined){
+        for (var i = 0; i < data.nodes.length; i++) {
+            $("#jstree").treeview('checkNode', [ data.nodes[i], {silent: true}]);
+        }
+    }else{
+        var parentNode = $('#jstree').treeview('getParent', data.nodeId);
+        $("#jstree").treeview('checkNode', [ parentNode, {silent: true}]);
+    }
+}
+function unSelected(node){
+    if(node.id == undefined){
+        for (var i = 0; i < node.nodes.length; i++) {
+            $("#jstree").treeview('uncheckNode', [ node.nodes[i], {silent: true}]);
+        }
+    }else{
+        var parentNode = $('#jstree').treeview('getParent', node.nodeId);
+        var num;
+        for (var i = 0; i < parentNode.nodes.length; i++) {
+            if(parentNode.nodes[i].state.checked == true){
+                num=1;
+            }
+        }
+        if(num!=1){
+            $("#jstree").treeview('uncheckNode', [ parentNode, {silent: true}]);
+        }
+        console.log(parentNode);
+    }
+}
+function refresh() {
+    $('#table').bootstrapTable('refresh');
+}
+function deleteAll(ids){
+    if(!ids){
+        ids =  getIdSelections();
+    }
+    if ("" == ids || ids==null){
+        jp.error("请选择项目");
+        return false;
+    }
+    $("#ids").val(ids);
+    jp.prompt("填写备注", function (message) {
+        jp.post("${ctx}/sg/managementCenter/projectPlanArrage/deletePlanArrange",
+            {
+                "ids": $("#ids").val(),
+                "backToText": window.encodeURI(message)
+            },
+            function (data) {
+                if(data.success){
+                    jstree(data.mapListTree);
+                    refresh();
+                    jp.success(data.message);
+                }else{
+                    jp.error(data.message);
+                }
+            })
+    });
+}
+function getIdSelections() {
+    return $.map($("#table").bootstrapTable('getSelections'), function (row) {
+        return row.id
+    });
+}
+//确定安排计划
+function surePlan() {
+    top.layer.open({
+        type: 2,
+        area: ['900px', '500px'],
+        title: '设计项目时间',
+        maxmin: true, //开启最大化最小化按钮
+        content: "${ctx}/sg/managementCenter/projectPlanArrage/planDate" ,
+        btn: ['确定', '关闭'],
+        yes: function(index, layero){
+            var iframeWin = layero.find('iframe')[0]; //得到弹出的窗口对象,执行窗口内iframe页的方法:iframeWin.method();
+            var flag = iframeWin.contentWindow.save();
+            if (flag){
+                $.get("${ctx}/sg/managementCenter/projectPlanArrage/judgeAddTime", function(data){
+                    if(data.success){
+                        // jp.success("安排计划成功");
+                        withTheProcess();
+                        top.layer.close(index);
+                    }else if (data.msg == "1"){
+                        jp.error("您还要项目具体安排时间未填!");
+                    }else{
+                        jp.confirm('您安排的同一开关的项目时间不相同,是否继续?', function(){
+                            withTheProcess();
+                            top.layer.close(index);
+                        })
+                    }
+                })
+                // refresh();
+            }
+        },
+        btn2: function(index){
+            
+            top.layer.close(index);
+        },
+        cancel:function (index) {
+            top.layer.close(index);
+        }
+    });
+}
+function withTheProcess(){
+    jp.prompt("审核通过", function (message) {
+        jp.post("${ctx}/sg/managementCenter/projectPlanArrage/conRunProInsId",
+            {
+                "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);
+                }
+            })
+    });
+}
+
+function getChildNodeIdArr(node) {
+    var ts = [];
+    if (node.children) {
+        for (x in node.children) {
+            ts.push(node.children[x].nodeId);
+            if (node.children[x].children) {
+                var getNodeDieDai = getChildNodeIdArr(node.children[x]);
+                for (j in getNodeDieDai) {
+                    ts.push(getNodeDieDai[j]);
+                }
+            }
+        }
+    } else {
+        ts.push(node.nodeId);
+    }
+    return ts;
+}
+
+// 选中所有子节点时,选中父节点 取消子节点时取消父节点
+function setParentNodeCheck(node) {
+    var parentNode = $("#jstree").treeview("getNode", node.parentId);
+    if (parentNode.children) {
+        var checkedCount = 0;
+        for (x in parentNode.children) {
+            if (parentNode.children[x].state.checked) {
+                checkedCount++;
+            } else {
+                break;
+            }
+        }
+        if (checkedCount == parentNode.children.length) {  //如果子节点全部被选 父全选
+            $("#jstree").treeview("checkNode", parentNode.nodeId);
+            setParentNodeCheck(parentNode);
+        } else {   //如果子节点未全部被选 父未全选
+            $('#jstree').treeview('uncheckNode', parentNode.nodeId);
+            setParentNodeCheck(parentNode);
+        }
+    }
+}
+
+// 取消父节点时 取消所有子节点
+function setChildNodeUncheck(node) {
+    if (node.children) {
+        var ts = [];    //当前节点子集中未被选中的集合
+        for (x in node.children) {
+            if (!node.children[x].state.checked) {
+                ts.push(node.children[x].nodeId);
+            }
+            if (node.children[x].nodes) {
+                var getNodeDieDai = node.children[x];
+                console.log(getNodeDieDai);
+                for (j in getNodeDieDai) {
+                    if (!getNodeDieDai.state.checked) {
+                        ts.push(getNodeDieDai[j]);
+                    }
+                }
+            }
+        }
+    }
+    return ts;
+}
+</script>

+ 67 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/constructionManageAct.jsp

@@ -0,0 +1,67 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>施工单位审核页面</title>
+    <meta name="decorator" content="ani"/>
+    <%@ include file="/webpage/include/bootstraptable.jsp"%>
+    <link href="${ctxStatic}/plugin/bootstrapTree/bootstrap-treeview.css" rel="stylesheet" type="text/css"/>
+    <script src="${ctxStatic}/plugin/bootstrapTree/bootstrap-treeview.js" type="text/javascript"></script>
+    <%@include file="/webpage/include/treeview.jsp" %>
+    <%@include file="constructionManageAct.js" %>
+</head>
+<body style="background-color:white">
+<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 class="wrapper wrapper-content">
+            <input type="text" value="${projectId}" id="projectId" hidden="hidden"/>
+            <input type="text" value="" id="ids" hidden="hidden">
+            <div class="row">
+                <%--未安排计划的树形--%>
+                <div class="col-sm-3 col-md-3">
+                    <div style="margin-top: 11px">
+                        <label>
+                            <input type="input" class="form-control" id="input-search" style="width: 200px;float: left">
+                            <button type="button" class="btn btn-success select-node" id="btn-search" style="float: left" >搜索</button>
+                        </label>
+                    </div>
+                    <div id="jstree" style="height:370px;overflow:auto;"></div>
+                </div>
+                <div  class="col-sm-9 col-md-9 animated fadeInRight">
+                    <!-- 工具栏 -->
+                    <div id="toolbar">
+                        <button id="selectId" class="btn btn-primary">
+                            <i class="glyphicon glyphicon-plus"></i>安排选择计划
+                        </button>
+                        <button id="remove" class="btn btn-danger"  onclick="deleteAll()">
+                            <i class="glyphicon glyphicon-remove"></i> 删除
+                        </button>
+                    </div><!-- 工具栏结束 -->
+                    <div style="height:370px;overflow:auto">
+                        <table id="table" data-toolbar="#toolbar">
+                        </table>
+                    </div>
+                </div>
+            </div>
+            <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="button" value="确认安排此计划" onclick="surePlan()" />&nbsp;
+                    </div>
+                </div>
+            </div>
+            <c:if test="${not empty act.id}">
+                <act:flowChart procInsId="${act.procInsId}"/>
+                <act:histoicFlow procInsId="${act.procInsId}" />
+            </c:if>
+        </div>
+        </div>
+    </div>
+</div>
+</body>
+</html>

+ 180 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/disList2ManageAct.js

@@ -0,0 +1,180 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script>
+$(document).ready(function() {
+    var procInsId = $("#procInsId").val();
+	$('#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}/sg/managementCenter/projectPlanArrage/disList2ArragePlanProject?procInsId="+procInsId,
+               //默认值为 '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){
+               },
+              
+               onClickRow: function(row, $el){
+               },
+               	onShowSearch: function () {
+			$("#search-collapse").slideToggle();
+		},
+               columns: [{
+                   checkbox: true
+               },
+			{
+		        field: 'projectNumber',
+		        title: '项目定义号',
+                width:160
+
+            }
+                   ,{
+                       field: 'projectName',
+                       title: '项目名称',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectPowerRange',
+                       title: '停电范围',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectPowerOut',
+                       title: '是否停电/带电',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectMonthDate',
+                       title: '月份',
+                       width:110,
+                       sortName: 'beginBeginDate'
+
+                   }
+                   ,{
+                       field: 'projectDate',
+                       title: '具体时间',
+                       width:120,
+                       sortName: 'endDate'
+
+                   }
+		     ]
+		
+		});
+
+
+	  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').prop('disabled', $('#projectTable').bootstrapTable('getSelections').length!=1);
+        });
+		    
+	  $("#search").click("click", function() {// 绑定查询按扭
+		  $('#projectTable').bootstrapTable('refresh');
+		});
+	 
+	 $("#reset").click("click", function() {// 绑定查询按扭
+		  $("#searchForm  input").val("");
+		  $("#searchForm  select").val("");
+		  $("#searchForm  .select-item").html("");
+		  $('#projectTable').bootstrapTable('refresh');
+		});
+        $("#export").click(function(){//导出Excel文件
+            var procInsId1 = $("#procInsId").val();
+            jp.downloadFile('${ctx}/sg/managementCenter/projectPlanArrage/export?procInsId='+procInsId1);
+        });
+		$('#beginBeginDate').datetimepicker({
+			 format: "YYYY-MM"
+		});
+		$('#endBeginDate').datetimepicker({
+			 format: "YYYY-MM-DD"
+		});
+		$('#endDate').datetimepicker({
+			 format: "YYYY-MM-DD"
+		});
+		
+	});
+		
+  function getIdSelections() {
+        return $.map($("#projectTable").bootstrapTable('getSelections'), function (row) {
+            return row.id
+        });
+    }
+    //刷新列表
+  function refresh(){
+  	$('#projectTable').bootstrapTable('refresh');
+  }
+  function runListSubmit() {
+      jp.prompt("审核通过", function (message) {
+          jp.post("${ctx}/sg/managementCenter/projectPlanArrage/disList2RunProInsId",
+              {
+                  "taskId":"${projectActProclnsAss.act.taskId}",
+                  "taskName":"${projectActProclnsAss.act.taskName}",
+                  "taskDefKey":"${projectActProclnsAss.act.taskDefKey}",
+                  "procInsId":"${projectActProclnsAss.act.procInsId}",
+                  "procDefId":"${projectActProclnsAss.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);
+                  }
+              })
+      });
+  }
+
+</script>

+ 67 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/disList2ManageAct.jsp

@@ -0,0 +1,67 @@
+<%@ 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="disList2ManageAct.js" %>
+</head>
+<body>
+	<div class="wrapper wrapper-content">
+	<div class="panel panel-primary">
+	<div class="panel-heading">
+		<h3 class="panel-title">项目计划审核操作</h3>
+	</div>
+	<div class="panel-body">
+		<!-- 搜索 -->
+		<div id="search-collapse" class="collapse">
+			<div class="accordion-inner">
+				<form:form id="searchForm" modelAttribute="projectActProclnsAss" class="form form-horizontal well clearfix">
+					<input type="hidden" id="procInsId" value="${projectActProclnsAss.act.procInsId}"/>
+					<div class="col-xs-12 col-sm-6 col-md-4">
+						<label class="label-item single-overflow pull-left" title="项目定义号:">项目定义号:</label>
+						<form:input path="projectNumber" htmlEscape="false" maxlength="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">
+		<button id="export" class="btn btn-warning">
+			<i class="fa fa-file-excel-o"></i> 导出
+		</button>
+	 </div>
+
+	<!-- 表格 -->
+	<table id="projectTable"  style="table-layout:fixed"  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="button" value="确认提交" onclick="runListSubmit()" />&nbsp;
+				</div>
+			</div>
+		</div>
+		<c:if test="${not empty act.id}">
+			<act:flowChart procInsId="${act.procInsId}"/>
+			<act:histoicFlow procInsId="${act.procInsId}" />
+		</c:if>
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 278 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/netActPowerList.js

@@ -0,0 +1,278 @@
+<%@ 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: false,
+                //排序方式
+               sortOrder: "asc",
+               //初始化加载第一页,默认第一页
+                pageNumber:1,
+                // useCurrentPage:true,
+               //每页的记录行数(*)
+               // pageSize: 3000,
+               //可供选择的每页的行数(*)
+               // pageList: [5,10, 25, 50, 100],
+               //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+               url: "${ctx}/sg/managementCenter/projectPlanArrage/planNetDateTable",
+               //默认值为 '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}/sg/managementcenter/project/delete?id="+row.id, function(data){
+                   	  		if(data.success){
+                   	  			$('#projectTable').bootstrapTable('refresh');
+                   	  			jp.success(data.msg);
+                   	  		}else{
+                   	  			jp.error(data.msg);
+                   	  		}
+                   	  	})
+
+                   	});
+
+                   }
+               },
+                onLoadSuccess:function(data) {
+                    var split = data.rows;
+                    var tb = document.getElementById('projectTable');    // table 的 id
+                    var rows = tb.rows;                           // 获取表格所有行
+                    for (var i =0;i<split.length;i++){
+                        if (split[i].htmlStatus=="1"){
+                            // this.data.rows[i].setAttribute("style","color: red;");
+                            rows[i+1].style.color = "red"
+                        }
+                    }
+                },
+                onClickRow: function(row, $el){
+               },
+
+            onShowSearch: function () {
+			$("#search-collapse").slideToggle();
+		},
+               columns: [
+                   {
+		        field: 'projectNumber',
+		        title: '项目定义号',
+                width:160
+
+            }
+                   ,{
+                       field: 'projectName',
+                       title: '项目名称',
+                       width:120
+
+                   }
+                   ,{
+                       field: 'projectMonthDate',
+                       title: '停电月份',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectPowerRange',
+                       title: '停电范围',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectPowerOut',
+                       title: '是否带电',
+                       width:160,
+                       formatter: getTime
+                   }
+		     ]
+		});
+    function getTime(value, row, index) {
+        if(row.projectPowerOut == "带电") {
+            return [
+                "<select class='form-control' id=" + row.id + "><option value='停电'>停电</option><option value='带电'  selected>带电</option><select>",
+            ].join('');
+        }else {
+            return [
+                "<select class='form-control' id=" + row.id + "><option value='停电'  selected>停电</option><option value='带电' >带电</option><select>",
+            ].join('');
+        }
+    }
+    // onclick='submit("+row.id+")'
+	  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').prop('disabled', $('#projectTable').bootstrapTable('getSelections').length!=1);
+        });
+		    
+	  $("#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 getDate() {
+        return $.map($("#projectTable").bootstrapTable('getData'), function (row) {
+            return row
+        });
+    }
+    // function f() {
+    //
+    // }
+    //刷新列表
+  function refresh(){
+  	$('#projectTable').bootstrapTable('refresh');
+  }
+  
+   function add(){
+	  jp.openSaveDialog('新增项目计划安排', "${ctx}/sg/managementCenter/constructionProject/form",'800px', '500px');
+  }
+  // function submit(data) {
+  //     alert("1");
+  //     alert(data);
+  // }
+
+  
+   function edit(id){//没有权限时,不显示确定按钮
+       if(id == undefined){
+	      id = getIdSelections();
+	}
+	jp.openSaveDialog('编辑项目管理表单', "${ctx}/sg/managementcenter/project/form?id=" + id, '800px', '500px');
+  }
+  
+ function view(id){//没有权限时,不显示确定按钮
+      if(id == undefined){
+             id = getIdSelections();
+      }
+        jp.openViewDialog('查看项目管理表单', "${ctx}/sg/managementcenter/project/form?id=" + id, '800px', '500px');
+ }
+
+function save() {
+    var date = getDate();
+    var idPower = "";
+    var id = "";
+    for (var i = 0; i < date.length; i++){
+        id = date[i].id;
+        idPower += date[i].id + "," + $("#"+id).val() + ";";
+    }
+    idPower = idPower.substring(0,idPower.length-1);
+    $("#idPower").val(idPower);
+    jp.loading();
+    jp.post("${ctx}/sg/managementCenter/projectPlanArrage/inspection",$('#inputForm').serialize(),function(data){
+        if(data.success){
+            refresh();
+            // $('#projectTable').bootstrapTable('refresh');
+            jp.success(data.msg);
+        }else{
+            jp.error(data.msg);
+        }
+    })
+}
+
+function saveSure(){
+    var date = getDate();
+    var idPower = "";
+    var id = "";
+    for (var i = 0; i < date.length; i++){
+        id = date[i].id;
+        idPower += date[i].id + "," + $("#"+id).val() + ";";
+    }
+    idPower = idPower.substring(0,idPower.length-1);
+    $("#idPower").val(idPower);
+    jp.loading();
+    jp.post("${ctx}/sg/managementCenter/projectPlanArrage/sureInspection",$('#inputForm').serialize(),function(data){
+        if(data.success){
+            refresh();
+            jp.confirm('带电项目在停电开关集合,是否通过?', function () {
+                refresh();
+                alert("!");
+                var dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+                parent.layer.close(dialogIndex);
+
+                addDatePlan();
+            })
+        }else{
+            var dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+            parent.layer.close(dialogIndex);
+            addDatePlan();
+        }
+    })
+    return false;
+}
+
+
+function addDatePlan() {
+    jp.post("${ctx}/sg/managementCenter/projectPlanArrage/save",function(data){
+        if(data.success){
+            jp.success("安排计划成功");
+        }else{
+            jp.error("安排计划失败");
+        }
+    })
+}
+</script>

+ 33 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/netActPowerList.jsp

@@ -0,0 +1,33 @@
+<%@ 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="netActPowerList.js" %>
+</head>
+<script>
+
+</script>
+<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">
+	<!-- 工具栏 -->
+
+	<!-- 表格 -->
+		<form id="inputForm">
+			<input value="" name="ids" id="idPower" type="hidden">
+		</form>
+		<table id="projectTable"  style="table-layout:fixed"  data-toolbar="#toolbar"></table>
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 358 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/netWorkManageAct.js

@@ -0,0 +1,358 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script type="text/javascript">
+    $(document).ready(function() {
+        var projectId = $('#projectId').val();
+        //zTree初始化
+        // $.getJSON("${ctx}/sg/managementCenter/projectPlanArrage/bootstrapNetWorkTreeTable?projectId="+projectId,function(data){
+        //     jstree(data);
+        //     dateTimeValue('1');
+        // });
+        $('#selectId').click(function () {
+            var object = $('#jstree').treeview('getChecked');
+            if (object.length<1){
+                jp.error("请选择项目!")
+                return false;
+            }
+            var str = "";
+            for (var  i = 0; i < object.length; i++) {
+                str+=object[i].id+",";
+            }
+            var sureStr  = str.substring(0,str.length-1);
+            $("#parentIds").val(sureStr);
+            add(sureStr);
+        });
+        //搜索
+        var findSearchableNodes = function() {
+            return $('#jstree').treeview('search', [ $.trim($('#input-search').val()), { ignoreCase: false, exactMatch: false } ]);
+        };
+        var search = function(e) {
+            var pattern = $.trim($('#input-search').val());
+            var options = {
+                ignoreCase: $('#chk-ignore-case').is(':checked'),
+                exactMatch: $('#chk-exact-match').is(':checked'),
+                revealResults: $('#chk-reveal-results').is(':checked')
+            };
+            $('#jstree').treeview('search', [ $.trim($('#input-search').val()), { ignoreCase: false, exactMatch: false } ]);
+            var results = $('#jstree').treeview('search', [ pattern, options ]);
+        }
+        $('#btn-search').on('click', search);
+        $('#btn-clear-search').on('click', function (e) {
+            $('#jstree').treeview('clearSearch');
+            $('#input-search').val('');
+            $('#jstree').treeview('collapseAll', {
+                silent : false//设置初始化节点关闭
+            });
+        });
+        //搜索
+        var search1 = function(e) {
+            var pattern = $.trim($('#input-search1').val());
+            var options = {
+                ignoreCase: $('#chk-ignore-case').is(':checked'),
+                exactMatch: $('#chk-exact-match').is(':checked'),
+                revealResults: $('#chk-reveal-results').is(':checked')
+            };
+            $('#jstreeTime').treeview('search', [ $.trim($('#input-search1').val()), { ignoreCase: false, exactMatch: false } ]);
+            var results = $('#jstreeTime').treeview('search', [ pattern, options ]);
+        }
+        $('#btn-search1').on('click', search1);
+        $('#btn-clear-search1').on('click', function (e) {
+            $('#jstreeTime').treeview('clearSearch');
+            $('#input-search1').val('');
+            $('#jstreeTime').treeview('collapseAll', {
+                silent : false//设置初始化节点关闭
+            });
+        });
+        $('#selectId1').click(function () {
+            var object = $('#jstreeTime').treeview('getChecked');
+            if (object.length<1){
+                jp.error("请选择项目!");
+                return false;
+            }
+            var str = "";
+            for (var  i = 0; i < object.length; i++) {
+                str+=object[i].id+",";
+            }
+            var sureStr  = str.substring(0,str.length-1);
+            minus(sureStr);
+        })
+        //表格初始化
+        $('#table').bootstrapTable({
+            //请求方法
+            method: 'post',
+            //类型json
+            dataType: "json",
+            contentType: "application/x-www-form-urlencoded",
+            //是否显示行间隔色
+            //显示刷新按钮
+            showRefresh: true,
+            //是否显示分页(*)
+            // pagination: true,
+            //排序方式
+            sortOrder: "asc",
+            //初始化加载第一页,默认第一页
+            pageNumber:1,
+            //每页的记录行数(*)
+            pageSize: 5,
+            //可供选择的每页的行数(*)
+            pageList: [5,10, 25, 50, 100],
+            //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+            url: "${ctx}/sg/managementCenter/projectPlanArrage/initNetWorkArragePlanProject?projectId="+projectId,
+            //默认值为 '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") == "delete"){
+                    deleteAll(row.id);
+                }
+            },
+            onClickRow: function(row, $el){
+            },
+            onLoadSuccess:function(data) {
+                var split = data.rows;
+                var tb = document.getElementById('table');    // table 的 id
+                var rows = tb.rows;                           // 获取表格所有行
+                for (var i =0;i<split.length;i++){
+                    // if (split[i].htmlStatus=="1"){
+                    //     // this.data.rows[i].setAttribute("style","color: red;");
+                    //     rows[i+1].style.backgroundColor = "#d25138"
+                    // }
+                    if (split[i].htmlStatus=="2"){
+                        // this.data.rows[i].setAttribute("style","color: red;");
+                        rows[i+1].style.backgroundColor = "#BDD2AE"
+                    }
+                }
+            },
+            onShowSearch: function () {
+                $("#search-collapse").slideToggle();
+            },
+            columns: [{
+                checkbox: true
+
+            }, {
+                field: 'projectNumber',
+                title: '项目定义号'
+
+            }, {
+                field: 'projectName',
+                title: '项目名称'
+            }, {
+                field: 'projectPowerRange',
+                title: '停电范围'
+            }, {
+                field: 'projectMonthDate',
+                title: '停电月份'
+            }, {
+                field: 'projectDate',
+                title: '停电日'
+            }, {
+                field: 'projectPowerOut',
+                title: '是否停电'
+            }, {
+                field: 'constructionUnit',
+                title: '施工单位项目经理'
+            }, {
+                field: 'backToText',
+                title: '备注'
+            }
+
+
+            ]
+
+        });
+
+    })
+
+if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端
+    $('#table').bootstrapTable("toggleView");
+}
+
+$('#table').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+    'check-all.bs.table uncheck-all.bs.table', function () {
+    $('#remove').prop('disabled', ! $('#table').bootstrapTable('getSelections').length);
+    $('#edit').prop('disabled', $('#table').bootstrapTable('getSelections').length!=1);
+});
+//安排计划时间
+function add(ids){
+    jp.loading();
+    jp.post("${ctx}/sg/managementCenter/projectPlanArrage/unNetWorkplanned",{'ids':ids},function(data){
+        if(data.success){
+            refresh();
+            // jstreeTime(data.mapList);
+            jstree(data.mapListTree);
+            jp.success("安排计划成功")
+        }else{
+            jp.error(data.message);
+        }
+    })
+}
+function getIds() {
+    return $("#parentIds").val();
+}
+function jstree(date) {
+    $('#jstree').treeview({
+        data: date,
+        levels: 1,
+        highlightSelected:false,
+        showCheckbox:true,
+    });
+}
+function jstreeTime(date) {
+    $('#jstreeTime').treeview({
+        data: date,
+        levels: 1,
+        highlightSelected:false,
+        showCheckbox:true,
+        onNodeSelected: function(event, treeNode) {
+            var id = treeNode.id;
+            jp.openSaveDialog('编辑安排计划项目', "${ctx}/sg/managementCenter/constructionProject/formPlan?id=" + id, '800px', '500px');
+        },
+
+    });
+}
+function dateTimeValue(value) {
+    if (value != '1'){
+        $("#dateTimeId").val(value);
+    }else {
+        var date = new Date();
+        var str = date.toISOString();
+        $("#dateTimeId").val( str.substring(0,7));
+    }
+}
+
+function selected(data){
+    if(data.nodeId == undefined){
+        for (var i = 0; i < data.nodes.length; i++) {
+            $("#jstree").treeview('checkNode', [ data.nodes[i], {silent: true}]);
+        }
+    }else{
+        var parentNode = $('#jstree').treeview('getParent', data.nodeId);
+        $("#jstree").treeview('checkNode', [ parentNode, {silent: true}]);
+    }
+}
+function unSelected(node){
+    if(node.id == undefined){
+        for (var i = 0; i < node.nodes.length; i++) {
+            $("#jstree").treeview('uncheckNode', [ node.nodes[i], {silent: true}]);
+        }
+    }else{
+        var parentNode = $('#jstree').treeview('getParent', node.nodeId);
+        var num;
+        for (var i = 0; i < parentNode.nodes.length; i++) {
+            if(parentNode.nodes[i].state.checked == true){
+                num=1;
+            }
+        }
+        if(num!=1){
+            $("#jstree").treeview('uncheckNode', [ parentNode, {silent: true}]);
+        }
+        console.log(parentNode);
+    }
+}
+function refresh() {
+    $('#table').bootstrapTable('refresh');
+}
+function deleteAll(ids){
+    if(!ids){
+        ids =  getIdSelections();
+    }
+    jp.confirm('确认要退回项目吗?', function(){
+        $.get("${ctx}/sg/managementCenter/projectPlanArrage/deleteNetWork?ids=" +ids, function(data){
+            if(data.success){
+                jstree(data.mapListTree);
+                refresh();
+                jp.success(data.message);
+            }else{
+                jp.error(data.message);
+            }
+        })
+    })
+}
+function getIdSelections() {
+    return $.map($("#table").bootstrapTable('getSelections'), function (row) {
+        return row.id
+    });
+}
+function newWorkSubmit() {
+    top.layer.open({
+        type: 2,
+        area: ['900px', '500px'],
+        title: '设计项目时间',
+        maxmin: true, //开启最大化最小化按钮
+        content: "${ctx}/sg/managementCenter/projectPlanArrage/planNetDate" ,
+        btn: ['确定', '关闭'],
+        yes: function(index, layero){
+            var iframeWin = layero.find('iframe')[0]; //得到弹出的窗口对象,执行窗口内iframe页的方法:iframeWin.method();
+            var flag = iframeWin.contentWindow.save();
+            if (flag){
+                jp.prompt("审核通过", function (message) {
+                    jp.post("${ctx}/sg/managementCenter/projectPlanArrage/newWorkRunProInsId",
+                        {
+                            "flag": "yes",
+                            "comment": window.encodeURI(message)
+                        },
+                        function (data) {
+                            if(data.success){
+                                jp.success(data.msg);
+                                top.layer.close(index);
+                                jp.go("${ctx}/act/task/todo")
+                            }else {
+                                jp.error(data.msg);
+                            }
+                        })
+                });
+                // $.get("${ctx}/sg/managementCenter/projectPlanArrage/judgeAddTime", function(data){
+                //     if(data.success){
+                //         jp.success("安排计划成功");
+                //         withTheProcess();
+                //         top.layer.close(index);
+                //     }else{
+                //         // jp.confirm('您安排的计划时间与其他项目经理安排时间不一致,是否继续执行?', function(){
+                //         //     withTheProcess();
+                //         // })
+                //         jp.error(data.msg);
+                //         top.layer.close(index);
+                //     }
+                // })
+                // refresh();
+            }
+        },
+        btn2: function(index){
+
+            top.layer.close(index);
+        },
+        cancel:function (index) {
+            top.layer.close(index);
+        }
+    });
+    // jp.prompt("审核通过", function (message) {
+    //     jp.post("${ctx}/sg/managementCenter/projectPlanArrage/newWorkRunProInsId",
+    //         {
+    //             "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);
+    //             }
+    //         })
+    // });
+}
+
+</script>

+ 61 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/netWorkManageAct.jsp

@@ -0,0 +1,61 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>配网项目经理审核页面</title>
+    <meta name="decorator" content="ani"/>
+    <%@ include file="/webpage/include/bootstraptable.jsp"%>
+    <link href="${ctxStatic}/plugin/bootstrapTree/bootstrap-treeview.css" rel="stylesheet" type="text/css"/>
+    <script src="${ctxStatic}/plugin/bootstrapTree/bootstrap-treeview.js" type="text/javascript"></script>
+    <%@include file="/webpage/include/treeview.jsp" %>
+    <%@include file="netWorkManageAct.js" %>
+</head>
+<body style="background-color:white">
+<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 class="wrapper wrapper-content">
+                <input type="text" value="${projectId}" id="projectId" hidden="hidden"/>
+                <div class="row">
+                    <%--未安排计划的树形--%>
+                    <%--<div class="col-sm-3 col-md-3">--%>
+                        <%--<div id="jstree" style="height:400px;overflow:auto;"></div>--%>
+                    <%--</div>--%>
+                    <%--<div  class="col-sm-9 col-md-9 animated fadeInRight">--%>
+                        <!-- 工具栏 -->
+                        <div id="toolbar">
+                            <%--<button id="selectId" class="btn btn-warning">--%>
+                                <%--安排选择计划--%>
+                            <%--</button>--%>
+                            <button id="remove" class="btn btn-danger"  onclick="deleteAll()">
+                                <i class="glyphicon glyphicon-remove"></i> 删除
+                            </button>
+                        </div><!-- 工具栏结束 -->
+                        <div style="height:400px;overflow:auto">
+                            <table id="table" data-toolbar="#toolbar">
+                            </table>
+                        </div>
+                    <%--</div>--%>
+                </div>
+                <div class="row" style="margin-top: 20px">
+                    <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="button" value="确认提交" onclick="newWorkSubmit()" />&nbsp;
+                        </div>
+                    </div>
+                </div>
+                <c:if test="${not empty act.id}">
+                    <act:flowChart procInsId="${act.procInsId}"/>
+                    <act:histoicFlow procInsId="${act.procInsId}" />
+                </c:if>
+            </div>
+        </div>
+    </div>
+</div>
+<%--<span style="background-color: #0e90d2"></span>--%>
+</body>
+</html>

+ 238 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/newDateList.js

@@ -0,0 +1,238 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script>
+$(document).ready(function() {
+	$('#projectTable').bootstrapTable({
+		  //请求方法
+               method: 'post',
+               //类型json
+               dataType: "json",
+               contentType: "application/x-www-form-urlencoded",
+                height:'400',
+               // //显示检索按钮
+	           // 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: 5000,
+               // //可供选择的每页的行数(*)
+               // pageList: [5,10, 25, 50, 100],
+               //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+               url: "${ctx}/sg/managementCenter/projectPlanArrage/planNetDateTable",
+               //默认值为 '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}/sg/managementcenter/project/delete?id="+row.id, function(data){
+                   	  		if(data.success){
+                   	  			$('#projectTable').bootstrapTable('refresh');
+                   	  			jp.success(data.msg);
+                   	  		}else{
+                   	  			jp.error(data.msg);
+                   	  		}
+                   	  	})
+
+                   	});
+
+                   }
+               },
+        onLoadSuccess:function(data) {
+            var split = data.rows;
+            for (var i = 0; i < split.length; i++) {
+                var arrangeTime = split[i].projectMonthDate;
+                var date = new Date(arrangeTime);
+                var date1 = new Date(arrangeTime);
+                date1.setMonth(date1.getMonth()+1);
+                $('#' + split[i].id).datetimepicker({
+                    format: "YYYY-MM-DD"
+                    // minDate:date,
+                    // maxDate:date1,
+                }).on('dp.change', function (i) {
+                    return function (ev) {
+                        var newDateTime = ev.date ? ev.date.format('YYYY-MM-DD') : "";
+                        var oldDateTime = ev.oldDate ? ev.oldDate.format('YYYY-MM-DD') : "";
+                        if (newDateTime != oldDateTime) {
+                            if ("" != oldDateTime) {
+                                jp.confirm('确认要更新时间吗?', function () {
+                                    jp.get("${ctx}/sg/managementCenter/projectPlanArrage/addtimeNet?id=" + split[i].id + "&projectDate=" + newDateTime, function (data) {
+                                        if (data.success) {
+                                            jp.success(data.msg);
+                                        } else {
+                                            jp.error(data.msg);
+                                        }
+                                    })
+                                })
+                            } else {
+                                jp.get("${ctx}/sg/managementCenter/projectPlanArrage/addtimeNet?id=" + split[i].id + "&projectDate=" + newDateTime, function (data) {
+                                    if (data.success) {
+                                        // jp.success(data.msg);
+                                    } else {
+                                        jp.error(data.msg);
+                                    }
+                                })
+                            }
+
+                        }
+                    }
+                }(i));
+            }
+        },
+               onClickRow: function(row, $el){
+               },
+
+            onShowSearch: function () {
+			$("#search-collapse").slideToggle();
+		},
+               columns: [
+                   {
+		        field: 'projectNumber',
+		        title: '项目定义号',
+                width:160
+
+            }
+                   ,{
+                       field: 'projectName',
+                       title: '项目名称',
+                       width:120
+
+                   }
+                   ,{
+                       field: 'projectPowerRange',
+                       title: '停电范围',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectMonthDate',
+                       title: '计划月份',
+                       width:160
+                   }
+                   ,{
+                       field: 'constructionUnit',
+                       title: '施工单位项目经理',
+                       width:160
+                   }
+                   ,{
+                       field: 'projectDate',
+                       title: '安排计划时间',
+                       width:160,
+                       formatter: getTime
+                   }
+		     ]
+		
+		});
+
+    function getTime(value, row, index) {
+        return [
+            "<div class='input-group form_datetime' id="+row.id+"> <input type='text' id="+row.id+"input"+"   name='deliverySchedule' class='form-control required'  value="+row.projectDate+"/> <span class='input-group-addon'> <span class='glyphicon glyphicon-calendar'></span> </span></div>" ,
+        ].join('');
+
+    }
+	  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').prop('disabled', $('#projectTable').bootstrapTable('getSelections').length!=1);
+        });
+		    
+	  $("#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 getDate() {
+        return $.map($("#projectTable").bootstrapTable('getData'), function (row) {
+            return row
+        });
+    }
+    //刷新列表
+  function refresh(){
+  	$('#projectTable').bootstrapTable('refresh');
+  }
+    function save() {
+        var date = getDate();
+        var idPower = "";
+        var id = ""
+        var flag = false;
+        for (var i = 0; i < date.length; i++){
+            id = date[i].id;
+            idPower = $("#"+id+"input").val();
+            if (null == idPower||"" == idPower){
+                flag = true;
+            }
+        }
+        if (flag){
+            jp.error("请选择具体时间!")
+            return false;
+        } else {
+            return true;
+        }
+        return true;
+    }
+</script>

+ 34 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/newDateList.jsp

@@ -0,0 +1,34 @@
+<%@ 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="newDateList.js" %>
+</head>
+<script>
+    // function save() {
+    //     var dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+    //     parent.layer.close(dialogIndex);
+    // }
+</script>
+<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">
+	<!-- 工具栏 -->
+
+	<!-- 表格 -->
+	<table id="projectTable" data-toolbar="#toolbar"></table>
+
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 177 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/runListManageAct.js

@@ -0,0 +1,177 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script>
+$(document).ready(function() {
+    var procInsId = $("#procInsId").val();
+	$('#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}/sg/managementCenter/projectPlanArrage/runListArragePlanProject?procInsId="+procInsId,
+               //默认值为 '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){
+               },
+              
+               onClickRow: function(row, $el){
+               },
+               	onShowSearch: function () {
+			$("#search-collapse").slideToggle();
+		},
+               columns: [{
+                   checkbox: true
+               },
+			{
+		        field: 'projectNumber',
+		        title: '项目定义号',
+                width:160
+
+            }
+                   ,{
+                       field: 'projectName',
+                       title: '项目名称',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectPowerRange',
+                       title: '停电范围',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectPowerOut',
+                       title: '是否停电/带电',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectMonthDate',
+                       title: '月份',
+                       width:110,
+                       sortName: 'beginBeginDate'
+
+                   }
+                   ,{
+                       field: 'projectDate',
+                       title: '具体时间',
+                       width:120,
+                       sortName: 'endDate'
+
+                   }
+		     ]
+		
+		});
+
+
+	  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').prop('disabled', $('#projectTable').bootstrapTable('getSelections').length!=1);
+        });
+		    
+	  $("#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"
+		});
+		$('#endBeginDate').datetimepicker({
+			 format: "YYYY-MM-DD"
+		});
+		$('#endDate').datetimepicker({
+			 format: "YYYY-MM-DD"
+		});
+		
+	});
+		
+  function getIdSelections() {
+        return $.map($("#projectTable").bootstrapTable('getSelections'), function (row) {
+            return row.id
+        });
+    }
+    //刷新列表
+  function refresh(){
+  	$('#projectTable').bootstrapTable('refresh');
+  }
+  function runListSubmit() {
+      jp.prompt("审核通过", function (message) {
+          jp.post("${ctx}/sg/managementCenter/projectPlanArrage/runListRunProInsId",
+              {
+                  "taskId":"${projectActProclnsAss.act.taskId}",
+                  "taskName":"${projectActProclnsAss.act.taskName}",
+                  "taskDefKey":"${projectActProclnsAss.act.taskDefKey}",
+                  "procInsId":"${projectActProclnsAss.act.procInsId}",
+                  "procDefId":"${projectActProclnsAss.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);
+                  }
+              })
+      });
+  }
+
+</script>

+ 74 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/act/runListManageAct.jsp

@@ -0,0 +1,74 @@
+<%@ 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="runListManageAct.js" %>
+</head>
+<body>
+	<div class="wrapper wrapper-content">
+	<div class="panel panel-primary">
+	<div class="panel-heading">
+		<h3 class="panel-title">项目计划审核操作</h3>
+	</div>
+	<div class="panel-body">
+		<!-- 搜索 -->
+		<div id="search-collapse" class="collapse">
+			<div class="accordion-inner">
+				<form:form id="searchForm" modelAttribute="projectActProclnsAss" class="form form-horizontal well clearfix">
+					<input type="hidden" id="procInsId" value="${projectActProclnsAss.act.procInsId}"/>
+					<div class="col-xs-12 col-sm-6 col-md-4">
+						<label class="label-item single-overflow pull-left" title="项目定义号:">项目定义号:</label>
+						<form:input path="projectNumber" htmlEscape="false" maxlength="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">--%>
+			<%--&lt;%&ndash;<shiro:hasPermission name="sg:managementCenter:constructionProject:add">&ndash;%&gt;--%>
+				<%--<button id="add" class="btn btn-primary" onclick="add()">--%>
+					<%--<i class="glyphicon glyphicon-plus"></i> 安排项目计划--%>
+				<%--</button>--%>
+			<%--&lt;%&ndash;</shiro:hasPermission>&ndash;%&gt;--%>
+			<%--&lt;%&ndash;<shiro:hasPermission name="sg:managementCenter:constructionProject:del">&ndash;%&gt;--%>
+				<%--<button id="remove" class="btn btn-danger" disabled onclick="deleteAll()">--%>
+					<%--<i class="glyphicon glyphicon-remove"></i> 删除--%>
+				<%--</button>--%>
+			<%--&lt;%&ndash;</shiro:hasPermission>&ndash;%&gt;--%>
+	 <%--</div>--%>
+
+	<!-- 表格 -->
+	<table id="projectTable"  style="table-layout:fixed"  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="button" value="确认提交" onclick="runListSubmit()" />&nbsp;
+				</div>
+			</div>
+		</div>
+		<c:if test="${not empty act.id}">
+			<act:flowChart procInsId="${act.procInsId}"/>
+			<act:histoicFlow procInsId="${act.procInsId}" />
+		</c:if>
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 73 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectDateForm.jsp

@@ -0,0 +1,73 @@
+<%@ 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() {
+	        $('#arrangeTime').datetimepicker({
+                format: "YYYY-MM",
+                minDate:new Date()-1
+		    })
+		});
+		function save() {
+		    var projectName= $("#projectName").val();
+		    var projectNumber = $("#projectNumber").val();
+		    var arrangeTime = $("#arrange").val();
+		    // if (null==projectNumber ||"" == projectNumber){
+		    //     jp.error("请输入项目定义号!");
+		    //     return false;
+			// }
+			if (null == arrangeTime || "" == arrangeTime){
+			    jp.error("请选择时间!")
+				return false;
+            }
+            jp.getParent().addList(projectNumber,arrangeTime,projectName);
+            var dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+            parent.layer.close(dialogIndex);
+            <%--jp.get("${ctx}/sg/managementCenter/projectPlanArrage/isArranging?arrangeTime="+arrangeTime,function(data){--%>
+                <%--if (data.success){--%>
+                    <%--jp.getParent().addList(projectNumber,arrangeTime);--%>
+                    <%--var dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引--%>
+                    <%--parent.layer.close(dialogIndex);--%>
+				<%--}else {--%>
+				    <%--jp.error(data.msg);--%>
+				<%--}--%>
+            <%--})--%>
+
+        }
+	</script>
+</head>
+<body class="bg-white">
+		<form:form id="inputForm" modelAttribute="projectPlanArrage" class="form-horizontal">
+		<form:hidden path="id"/>	
+		<table class="table table-bordered">
+			<tbody>
+			<tr>
+				<td class="width-15 active"><label class="">项目名称:</label></td>
+				<td class="width-35">
+					<form:input path="projectName" htmlEscape="false"  id="projectName"  class="form-control"/>
+				</td>
+				<td class="width-15 active"><label class="">项目定义号:</label></td>
+				<td class="width-35">
+					<form:input path="projectNumber" htmlEscape="false"  id="projectNumber"  class="form-control"/>
+				</td>
+			</tr>
+			<tr>
+				<td class="width-15 active"><label class="">选择月份:</label></td>
+				<td class="width-35">
+					<div class='input-group form_datetime' id='arrangeTime'>
+						<input type='text'  name="projectMonthDate" class="form-control required" id="arrange"  value="<fmt:formatDate value="${constructionProjectTemporary.arrangeTime}" pattern="yyyy-MM"/>"/>
+						<span class="input-group-addon">
+			                        <span class="glyphicon glyphicon-calendar"></span>
+			            </span>
+					</div>
+				</td>
+			</tr>
+			</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 320 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPlanArrageForm.js

@@ -0,0 +1,320 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script type="text/javascript">
+		$(document).ready(function() {
+		//zTree初始化
+			$.getJSON("${ctx}/sg/managementCenter/projectPlanArrage/bootstrapTreeTable",function(data){
+                jstree(data);
+                dateTimeValue('1');
+			});
+            $('#selectId').click(function () {
+                var object = $('#jstree').treeview('getChecked');
+                if (object.length<1){
+                    jp.error("请选择项目!")
+                    return false;
+                }
+                var str = "";
+                for (var  i = 0; i < object.length; i++) {
+                    str+=object[i].id+",";
+                }
+                var sureStr  = str.substring(0,str.length-1);
+                $("#parentIds").val(sureStr);
+                // alert(sureStr);
+                add(sureStr);
+            });
+            //搜索
+            var findSearchableNodes = function() {
+                return $('#jstree').treeview('search', [ $.trim($('#input-search').val()), { ignoreCase: false, exactMatch: false } ]);
+            };
+            var search = function(e) {
+                var pattern = $.trim($('#input-search').val());
+                var options = {
+                    ignoreCase: $('#chk-ignore-case').is(':checked'),
+                    exactMatch: $('#chk-exact-match').is(':checked'),
+                    revealResults: $('#chk-reveal-results').is(':checked')
+                };
+                $('#jstree').treeview('search', [ $.trim($('#input-search').val()), { ignoreCase: false, exactMatch: false } ]);
+                var results = $('#jstree').treeview('search', [ pattern, options ]);
+            }
+            $('#btn-search').on('click', search);
+            $('#btn-clear-search').on('click', function (e) {
+                $('#jstree').treeview('clearSearch');
+                $('#input-search').val('');
+                $('#jstree').treeview('collapseAll', {
+                    silent : false//设置初始化节点关闭
+                });
+            });
+            //表格初始化
+            $('#table').bootstrapTable({
+                //请求方法
+                method: 'post',
+                //类型json
+                dataType: "json",
+                contentType: "application/x-www-form-urlencoded",
+                //是否显示行间隔色
+                //显示刷新按钮
+                showRefresh: true,
+                //是否显示分页(*)
+                // pagination: true,
+                //排序方式
+                sortOrder: "asc",
+                //初始化加载第一页,默认第一页
+                pageNumber:1,
+                //每页的记录行数(*)
+                pageSize: 5,
+                //可供选择的每页的行数(*)
+                pageList: [5,10, 25, 50, 100],
+                //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+                url: "${ctx}/sg/managementCenter/projectPlanArrage/initArragePlanProject",
+                //默认值为 '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") == "delete"){
+                        deleteAll(row.id);
+                    }
+                },
+                onClickRow: function(row, $el){
+                },
+                onLoadSuccess:function(data) {
+                    var split = data.rows;
+                    var tb = document.getElementById('table');    // table 的 id
+                    var rows = tb.rows;                           // 获取表格所有行
+                    for (var i =0;i<split.length;i++){
+                        if (split[i].htmlStatus=="2"){
+                            // this.data.rows[i].setAttribute("style","color: red;");
+                            rows[i+1].style.backgroundColor = "#e6e6e6"
+                        }
+                    }
+                },
+                onShowSearch: function () {
+                    $("#search-collapse").slideToggle();
+                },
+                columns: [{
+                    checkbox: true
+
+                }, {
+                    field: 'projectNumber',
+                    title: '项目定义号'
+
+                }, {
+                    field: 'projectName',
+                    title: '项目名称'
+                }, {
+                    field: 'projectPowerRange',
+                    title: '停电范围'
+                },{
+                    field:'projectMonthDate',
+                    title:'停电月份'
+                }
+                ]
+
+            });
+
+        })
+
+        if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端
+            $('#table').bootstrapTable("toggleView");
+        }
+
+        $('#table').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+            'check-all.bs.table uncheck-all.bs.table', function () {
+            $('#remove').prop('disabled', ! $('#table').bootstrapTable('getSelections').length);
+            $('#edit').prop('disabled', $('#table').bootstrapTable('getSelections').length!=1);
+        });
+    //安排计划时间
+    function add(ids){
+        jp.post("${ctx}/sg/managementCenter/projectPlanArrage/unplanned",{'ids':ids},function(data){
+            if(data.success){
+                refresh();
+                // jstreeTime(data.mapList);
+                jstree(data.mapListTree);
+                jp.success("安排计划成功")
+            }else{
+                jp.error(data.message);
+            }
+        })
+    }
+    function getIds() {
+        return $("#parentIds").val();
+    }
+    function jstree(date) {
+        $('#jstree').treeview({
+            data: date,
+            levels: 1,
+            highlightSelected:false,
+            showCheckbox:true,
+            onNodeChecked: function (event, node) { //选中节点
+                var selectNodes = getChildNodeIdArr(node); //获取所有子节点
+                if (selectNodes) { //子节点不为空,则选中所有子节点
+                    $('#jstree').treeview('checkNode', [selectNodes, { silent: true }]);
+                }
+                // var parentNode = $("#jstree").treeview("getNode", node.parentId);
+                // setParentNodeCheck(node);
+            },
+            onNodeUnchecked: function (event, node) { //取消选中节点
+                // 取消父节点 子节点取消
+                var selectNodes = setChildNodeUncheck(node); //获取未被选中的子节点
+                var childNodes = getChildNodeIdArr(node);    //获取所有子节点
+                if (selectNodes && selectNodes.length == 0) { //有子节点且未被选中的子节点数目为0,则取消选中所有子节点
+                    $('#tree').treeview('uncheckNode', [childNodes, { silent: true }]);
+                }
+                // 取消节点 父节点取消
+                var parentNode = $("#jstree").treeview("getNode", node.parentId);  //获取父节点
+                var selectNodes = getChildNodeIdArr(node);
+                setParentNodeCheck(node);
+            }
+        });
+    }
+    // function jstreeTime(date) {
+    //     $('#jstreeTime').treeview({
+    //         data: date,
+    //         levels: 1,
+    //         highlightSelected:false,
+    //         showCheckbox:true,
+    //         onNodeSelected: function(event, treeNode) {
+    //             var id = treeNode.id;
+    //             jp.openSaveDialog('编辑安排计划项目', "${ctx}/sg/managementCenter/constructionProject/formPlan?id=" + id, '800px', '500px');
+    //         },
+    //
+    //     });
+    // }
+    function dateTimeValue(value) {
+        if (value != '1'){
+            $("#dateTimeId").val(value);
+        }else {
+            var date = new Date();
+            var str = date.toISOString();
+            $("#dateTimeId").val( str.substring(0,7));
+        }
+    }
+
+    function selected(data){
+        if(data.nodeId == undefined){
+            for (var i = 0; i < data.nodes.length; i++) {
+                $("#jstree").treeview('checkNode', [ data.nodes[i], {silent: true}]);
+            }
+        }else{
+            var parentNode = $('#jstree').treeview('getParent', data.nodeId);
+            $("#jstree").treeview('checkNode', [ parentNode, {silent: true}]);
+        }
+    }
+    function unSelected(node){
+        if(node.id == undefined){
+            for (var i = 0; i < node.nodes.length; i++) {
+                $("#jstree").treeview('uncheckNode', [ node.nodes[i], {silent: true}]);
+            }
+        }else{
+            var parentNode = $('#jstree').treeview('getParent', node.nodeId);
+            var num;
+            for (var i = 0; i < parentNode.nodes.length; i++) {
+                if(parentNode.nodes[i].state.checked == true){
+                    num=1;
+                }
+            }
+            if(num!=1){
+                $("#jstree").treeview('uncheckNode', [ parentNode, {silent: true}]);
+            }
+            console.log(parentNode);
+        }
+    }
+    function refresh() {
+        $('#table').bootstrapTable('refresh');
+    }
+    function deleteAll(ids){
+        if(!ids){
+            ids =  getIdSelections();
+        }
+        jp.confirm('确认要退回项目吗?', function(){
+            jp.loading();
+            $.get("${ctx}/sg/managementCenter/projectPlanArrage/deleteAll?ids=" +ids, function(data){
+                if(data.success){
+                    jstree(data.mapListTree);
+                    refresh();
+                    jp.success(data.message);
+                }else{
+                    jp.error(data.message);
+                }
+            })
+        })
+    }
+    function getIdSelections() {
+        return $.map($("#table").bootstrapTable('getSelections'), function (row) {
+            return row.id
+        });
+    }
+function getChildNodeIdArr(node) {
+    var ts = [];
+    if (node.children) {
+        for (x in node.children) {
+            ts.push(node.children[x].nodeId);
+            if (node.children[x].children) {
+                var getNodeDieDai = getChildNodeIdArr(node.children[x]);
+                for (j in getNodeDieDai) {
+                    ts.push(getNodeDieDai[j]);
+                }
+            }
+        }
+    } else {
+        ts.push(node.nodeId);
+    }
+    return ts;
+}
+
+// 选中所有子节点时,选中父节点 取消子节点时取消父节点
+function setParentNodeCheck(node) {
+    var parentNode = $("#jstree").treeview("getNode", node.parentId);
+    if (parentNode.children) {
+        var checkedCount = 0;
+        for (x in parentNode.children) {
+            if (parentNode.children[x].state.checked) {
+                checkedCount++;
+            } else {
+                break;
+            }
+        }
+        if (checkedCount == parentNode.children.length) {  //如果子节点全部被选 父全选
+            $("#jstree").treeview("checkNode", parentNode.nodeId);
+            setParentNodeCheck(parentNode);
+        } else {   //如果子节点未全部被选 父未全选
+            $('#jstree').treeview('uncheckNode', parentNode.nodeId);
+            setParentNodeCheck(parentNode);
+        }
+    }
+}
+
+// 取消父节点时 取消所有子节点
+function setChildNodeUncheck(node) {
+    if (node.children) {
+        var ts = [];    //当前节点子集中未被选中的集合
+        for (x in node.children) {
+            if (!node.children[x].state.checked) {
+                ts.push(node.children[x].nodeId);
+            }
+            if (node.children[x].nodes) {
+                var getNodeDieDai = node.children[x];
+                console.log(getNodeDieDai);
+                for (j in getNodeDieDai) {
+                    if (!getNodeDieDai.state.checked) {
+                        ts.push(getNodeDieDai[j]);
+                    }
+                }
+            }
+        }
+    }
+    return ts;
+}
+</script>

+ 54 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPlanArrageForm.jsp

@@ -0,0 +1,54 @@
+<%@ 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"%>
+    <link href="${ctxStatic}/plugin/bootstrapTree/bootstrap-treeview.css" rel="stylesheet" type="text/css"/>
+    <script src="${ctxStatic}/plugin/bootstrapTree/bootstrap-treeview.js" type="text/javascript"></script>
+    <%@include file="/webpage/include/treeview.jsp" %>
+    <%@ include file="projectPlanArrageForm.js"%>
+    <script>
+        function save() {
+            var dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+            parent.layer.close(dialogIndex);
+            jp.getParent().addDate();
+        }
+    </script>
+</head>
+<style>
+</style>
+<body style="background: white">
+<div class="wrapper wrapper-content">
+    <div class="row">
+        <%--未安排计划的树形--%>
+        <div class="col-sm-3 col-md-2">
+            <%--<input type="text" id="input-search" class="">--%>
+            <div style="margin-top: 11px">
+                <label>
+                <input type="input" class="form-control" id="input-search" style="width: 70%;float: left">
+                <button type="button" class="btn btn-success select-node" id="btn-search" style="float: left" >搜索</button>
+                </label>
+            </div>
+            <div id="jstree" style="height:370px;overflow:auto;margin-top: 10px;margin-top: 1px"></div>
+        </div>
+        <div  class="col-sm-9 col-md-10 animated fadeInRight">
+            <!-- 工具栏 -->
+            <div id="toolbar">
+                <button id="selectId" class="btn btn-primary">
+                    <i class="glyphicon glyphicon-plus"></i>安排选择计划
+                </button>
+                <button id="remove" class="btn btn-danger"  onclick="deleteAll()">
+                    <i class="glyphicon glyphicon-remove"></i> 退回
+                </button>
+            </div><!-- 工具栏结束 -->
+            <div style="height:370px;overflow:auto">
+                <table id="table" data-toolbar="#toolbar">
+                </table>
+            </div>
+        </div>
+    </div>
+</div>
+</body>
+</html>

+ 268 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPlanArrageList.js

@@ -0,0 +1,268 @@
+<%@ 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}/sg/managementCenter/projectPlanArrage/data",
+               //默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
+               //queryParamsType:'',   
+               ////查询参数,每次调用是会带上这个参数,可自定义                         
+               queryParams : function(params) {
+               	var searchParam = $("#searchForm").serializeJSON();
+               	searchParam.pageNo = params.limit === undefined? "1" :params.offset/params.limit+1;
+               	searchParam.pageSize = params.limit === undefined? -1 : params.limit;
+               	searchParam.orderBy = params.sort === undefined? "" : params.sort+ " "+  params.order;
+                   return searchParam;
+               },
+               //分页方式:client客户端分页,server服务端分页(*)
+               sidePagination: "server",
+               contextMenuTrigger:"right",//pc端 按右键弹出菜单
+               contextMenuTriggerMobile:"press",//手机端 弹出菜单,click:单击, press:长按。
+               contextMenu: '#context-menu',
+               onContextMenuItem: function(row, $el){
+               },
+              
+               onClickRow: function(row, $el){
+               },
+               	onShowSearch: function () {
+			$("#search-collapse").slideToggle();
+		},
+               columns: [{
+                   checkbox: true
+               },
+			{
+		        field: 'projectNumber',
+		        title: '项目定义号',
+                width:160
+
+            }
+                   ,{
+                       field: 'projectName',
+                       title: '项目名称',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectPowerRange',
+                       title: '停电范围',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectPowerOut',
+                       title: '是否停电/带电',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectMonthDate',
+                       title: '月份',
+                       width:110,
+                       sortName: 'beginBeginDate'
+
+                   }
+                   ,{
+                       field: 'projectDate',
+                       title: '具体时间',
+                       width:120,
+                       sortName: 'endDate'
+
+                   }
+		     ]
+		
+		});
+
+    $("#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}/sg/managementCenter/projectPlanArrage/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);
+            }
+        });
+    });
+	  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').prop('disabled', $('#projectTable').bootstrapTable('getSelections').length!=1);
+        });
+		    
+	  $("#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"
+		});
+		$('#endBeginDate').datetimepicker({
+			 format: "YYYY-MM-DD"
+		});
+		$('#endDate').datetimepicker({
+			 format: "YYYY-MM-DD"
+		});
+		
+	});
+
+  function getIdSelections() {
+        return $.map($("#projectTable").bootstrapTable('getSelections'), function (row) {
+            return row.id
+        });
+    }
+    //刷新列表
+  function refresh(){
+  	$('#projectTable').bootstrapTable('refresh');
+  }
+  //跳转安排计划时间
+   function add(){
+	  jp.openSaveDialog('新增项目计划安排', "${ctx}/sg/managementCenter/projectPlanArrage/arrageProjectPlan",'800px', '500px');
+  }
+
+  function addDate() {
+      jp.post("${ctx}/sg/managementCenter/projectPlanArrage/save",function(data){
+          if(data.success){
+              jp.success("安排计划成功");
+          }else{
+              jp.error("安排计划失败");
+          }
+      })
+  }
+    function addPowerFlag() {
+        top.layer.open({
+            type: 2,
+            area: ['900px', '500px'],
+            title: '人工选择是否带电',
+            maxmin: true, //开启最大化最小化按钮
+            content: "${ctx}/sg/managementCenter/projectPlanArrage/arrangementElectrified",
+            btn: ['检验','确定','关闭'],
+            btn1:function(index,layero){
+                var iframeWin = layero.find('iframe')[0]; //得到弹出的窗口对象,执行窗口内iframe页的方法:iframeWin.method();
+                iframeWin.contentWindow.save();//调用保存事件,在 弹出页内,需要定义save方法。处理保存事件。s
+            },
+            btn2: function(index,layero){
+                var iframeWin = layero.find('iframe')[0]; //得到弹出的窗口对象,执行窗口内iframe页的方法:iframeWin.method();
+                var flag = iframeWin.contentWindow.saveSure();
+                jp.success("项目计划流程发起");
+                // jp.go("${ctx}/act/task/todo");
+                return false;
+            },
+            btn3: function(index){
+                top.layer.close(index);
+            },
+            cancel:function (index) {
+                top.layer.close(index);
+            }
+        });
+    }
+    function addList(projectNumber,arrangeTime,projectName) {
+        top.layer.open({
+            type: 2,
+            area: ['900px', '500px'],
+            title: '项目计划安排',
+            maxmin: true, //开启最大化最小化按钮
+            content: "${ctx}/sg/managementCenter/projectPlanArrage/isArranging?projectNumber="+projectNumber+"&projectMonthDate="+arrangeTime+"&projectName="+window.encodeURI(projectName),
+            btn: ['确定', '关闭'],
+            yes: function(index, layero){
+                top.layer.close(index);
+                addPowerFlag();
+            },
+            btn2: function(index){
+                top.layer.close(index);
+            },
+            cancel:function (index) {
+                top.layer.close(index);
+            }
+        });
+    }
+   function edit(id){//没有权限时,不显示确定按钮
+       if(id == undefined){
+	      id = getIdSelections();
+	}
+	jp.openSaveDialog('编辑项目管理表单', "${ctx}/sg/managementcenter/project/form?id=" + id, '800px', '500px');
+  }
+
+ function view(id){//没有权限时,不显示确定按钮
+      if(id == undefined){
+             id = getIdSelections();
+      }
+        jp.openViewDialog('查看项目管理表单', "${ctx}/sg/managementcenter/project/form?id=" + id, '800px', '500px');
+ }
+
+function deleteAll(){
+    jp.confirm('确认要删除计划表单记录吗?', function(){
+        jp.loading();
+        jp.get("${ctx}/sg/managementCenter/constructionProject/deleteAll?ids=" + getIdSelections(), function(data){
+            if(data.success){
+                $('#projectTable').bootstrapTable('refresh');
+                jp.success(data.msg);
+            }else{
+                jp.error(data.msg);
+            }
+        })
+    })
+}
+
+</script>

+ 103 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPlanArrageList.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="projectPlanArrageList.js" %>
+</head>
+<body>
+	<div class="wrapper wrapper-content">
+	<div class="panel panel-primary">
+	<div class="panel-heading">
+		<h3 class="panel-title">项目计划安排</h3>
+	</div>
+	<div class="panel-body">
+		<!-- 搜索 -->
+		<div id="search-collapse" class="collapse">
+			<div class="accordion-inner">
+				<form:form id="searchForm" modelAttribute="projectPlanArrage" 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="projectNumber" 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 class="form-group">
+							<label class="label-item single-overflow pull-left" title="月份:">&nbsp;月份:</label>
+							<div class="col-xs-12">
+								<div class='input-group date' id='beginBeginDate' >
+									<input type='text'  name="projectMonthDate" class="form-control"  />
+									<span class="input-group-addon">
+			                       <span class="glyphicon glyphicon-calendar"></span>
+			                   </span>
+								</div>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-12 col-sm-6 col-md-4">
+						<div class="form-group">
+							<label class="label-item single-overflow pull-left" title="具体时间:">&nbsp;具体时间:</label>
+							<div class="col-xs-12">
+								<div class='input-group date' id='endDate' >
+									<input type='text'  name="projectDate" class="form-control"  />
+									<span class="input-group-addon">
+			                       <span class="glyphicon glyphicon-calendar"></span>
+			                   </span>
+								</div>
+							</div>
+						</div>
+					</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="sg:managementCenter:constructionProject:add">--%>
+				<button id="add" class="btn btn-primary" onclick="add()">
+					<i class="glyphicon glyphicon-plus"></i> 安排项目计划
+				</button>
+				<button id="btnImport" class="btn btn-info"><i class="fa fa-folder-open-o"></i> 导入</button>
+			<%--</shiro:hasPermission>--%>
+			<%--<shiro:hasPermission name="sg:managementCenter:constructionProject:del">--%>
+				<%--<button id="remove" class="btn btn-danger" disabled onclick="deleteAll()">--%>
+					<%--<i class="glyphicon glyphicon-remove"></i> 删除--%>
+				<%--</button>--%>
+
+			<%--</shiro:hasPermission>--%>
+	 </div>
+		
+	<!-- 表格 -->
+	<table id="projectTable"  style="table-layout:fixed"  data-toolbar="#toolbar"></table>
+
+    <!-- context menu -->
+    <ul id="context-menu" class="dropdown-menu">
+    	<%--<shiro:hasPermission name="sg:managementcenter:project:view">--%>
+        <%--<li data-item="view"><a>查看</a></li>--%>
+        <%--</shiro:hasPermission>--%>
+    	<%--<shiro:hasPermission name="sg:managementcenter:project:edit">--%>
+        <%--<li data-item="edit"><a>编辑</a></li>--%>
+        <%--&lt;%&ndash;</shiro:hasPermission>&ndash;%&gt;--%>
+        <%--&lt;%&ndash;<shiro:hasPermission name="sg:managementcenter:project:del">&ndash;%&gt;--%>
+        <%--<li data-item="delete"><a>删除</a></li>--%>
+        <%--&lt;%&ndash;</shiro:hasPermission>&ndash;%&gt;--%>
+        <%--<li data-item="action1"><a>取消</a></li>--%>
+    </ul>  
+	</div>
+	</div>
+	</div>
+</body>
+</html>

+ 276 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPlanPowerList.js

@@ -0,0 +1,276 @@
+<%@ 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: false,
+                //排序方式
+               sortOrder: "asc",
+               //初始化加载第一页,默认第一页
+                pageNumber:1,
+                // useCurrentPage:true,
+               //每页的记录行数(*)
+               // pageSize: 3000,
+               //可供选择的每页的行数(*)
+               // pageList: [5,10, 25, 50, 100],
+               //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+               url: "${ctx}/sg/managementCenter/projectPlanArrage/dataPower",
+               //默认值为 '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}/sg/managementcenter/project/delete?id="+row.id, function(data){
+                   	  		if(data.success){
+                   	  			$('#projectTable').bootstrapTable('refresh');
+                   	  			jp.success(data.msg);
+                   	  		}else{
+                   	  			jp.error(data.msg);
+                   	  		}
+                   	  	})
+
+                   	});
+
+                   }
+               },
+                onLoadSuccess:function(data) {
+                    var split = data.rows;
+                    var tb = document.getElementById('projectTable');    // table 的 id
+                    var rows = tb.rows;                           // 获取表格所有行
+                    for (var i =0;i<split.length;i++){
+                        if (split[i].htmlStatus=="1"){
+                            // this.data.rows[i].setAttribute("style","color: red;");
+                            rows[i+1].style.color = "red"
+                        }
+                    }
+                },
+                onClickRow: function(row, $el){
+               },
+
+            onShowSearch: function () {
+			$("#search-collapse").slideToggle();
+		},
+               columns: [
+                   {
+		        field: 'projectNumber',
+		        title: '项目定义号',
+                width:160
+
+            }
+                   ,{
+                       field: 'projectName',
+                       title: '项目名称',
+                       width:120
+
+                   }
+                   ,{
+                       field: 'projectMonthDate',
+                       title: '停电月份',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectPowerRange',
+                       title: '停电范围',
+                       width:110
+
+                   }
+                   ,{
+                       field: 'projectPowerOut',
+                       title: '是否带电',
+                       width:160,
+                       formatter: getTime
+                   }
+		     ]
+		});
+    function getTime(value, row, index) {
+        if(row.projectPowerOut == "带电") {
+            return [
+                "<select class='form-control' id=" + row.id + "><option value='停电'>停电</option><option value='带电'  selected>带电</option><select>",
+            ].join('');
+        }else {
+            return [
+                "<select class='form-control' id=" + row.id + "><option value='停电'  selected>停电</option><option value='带电' >带电</option><select>",
+            ].join('');
+        }
+    }
+    // onclick='submit("+row.id+")'
+	  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').prop('disabled', $('#projectTable').bootstrapTable('getSelections').length!=1);
+        });
+		    
+	  $("#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 getDate() {
+        return $.map($("#projectTable").bootstrapTable('getData'), function (row) {
+            return row
+        });
+    }
+    // function f() {
+    //
+    // }
+    //刷新列表
+  function refresh(){
+  	$('#projectTable').bootstrapTable('refresh');
+  }
+  
+   function add(){
+	  jp.openSaveDialog('新增项目计划安排', "${ctx}/sg/managementCenter/constructionProject/form",'800px', '500px');
+  }
+  // function submit(data) {
+  //     alert("1");
+  //     alert(data);
+  // }
+
+  
+   function edit(id){//没有权限时,不显示确定按钮
+       if(id == undefined){
+	      id = getIdSelections();
+	}
+	jp.openSaveDialog('编辑项目管理表单', "${ctx}/sg/managementcenter/project/form?id=" + id, '800px', '500px');
+  }
+  
+ function view(id){//没有权限时,不显示确定按钮
+      if(id == undefined){
+             id = getIdSelections();
+      }
+        jp.openViewDialog('查看项目管理表单', "${ctx}/sg/managementcenter/project/form?id=" + id, '800px', '500px');
+ }
+
+function save() {
+    var date = getDate();
+    var idPower = "";
+    var id = "";
+    for (var i = 0; i < date.length; i++){
+        id = date[i].id;
+        idPower += date[i].id + "," + $("#"+id).val() + ";";
+    }
+    idPower = idPower.substring(0,idPower.length-1);
+    $("#idPower").val(idPower);
+    jp.loading();
+    jp.post("${ctx}/sg/managementCenter/projectPlanArrage/inspection",$('#inputForm').serialize(),function(data){
+        if(data.success){
+            refresh();
+            // $('#projectTable').bootstrapTable('refresh');
+            jp.success(data.msg);
+        }else{
+            jp.error(data.msg);
+        }
+    })
+}
+
+function saveSure(){
+    var date = getDate();
+    var idPower = "";
+    var id = "";
+    for (var i = 0; i < date.length; i++){
+        id = date[i].id;
+        idPower += date[i].id + "," + $("#"+id).val() + ";";
+    }
+    idPower = idPower.substring(0,idPower.length-1);
+    $("#idPower").val(idPower);
+    jp.loading();
+    jp.post("${ctx}/sg/managementCenter/projectPlanArrage/sureInspection",$('#inputForm').serialize(),function(data){
+        if(data.success){
+            jp.confirm('带电项目在停电开关集合,是否通过?', function () {
+                var dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+                parent.layer.close(dialogIndex);
+                addDatePlan();
+            })
+        }else{
+            var dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+            parent.layer.close(dialogIndex);
+            addDatePlan();
+        }
+    })
+    return false;
+}
+
+
+function addDatePlan() {
+    jp.post("${ctx}/sg/managementCenter/projectPlanArrage/save",function(data){
+        alert(data.success);
+        if(data.success){
+            jp.success("项目计划流程发起");
+            jp.go("${ctx}/act/task/todo")
+        }else {
+            jp.error("流程发起失败,请重新发起!");
+        }
+    })
+}
+</script>

+ 33 - 0
src/main/webapp/webpage/modules/sg/managementcenter/projectPlanArrage/projectPowerList.jsp

@@ -0,0 +1,33 @@
+<%@ 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="projectPlanPowerList.js" %>
+</head>
+<script>
+
+</script>
+<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">
+	<!-- 工具栏 -->
+
+	<!-- 表格 -->
+		<form id="inputForm">
+			<input value="" name="ids" id="idPower" type="hidden">
+		</form>
+		<table id="projectTable"  style="table-layout:fixed"  data-toolbar="#toolbar"></table>
+	</div>
+	</div>
+	</div>
+</body>
+</html>