Explorar o código

项目计划安排

Enford %!s(int64=5) %!d(string=hai) anos
pai
achega
19de8c6e19
Modificáronse 15 ficheiros con 3402 adicións e 1 borrados
  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. 36 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. 200 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. 446 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. 267 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/util/PackagingUtil.java
  15. 877 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/projectPlanArrage/web/ProjectPlanArrageController.java

+ 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;
+    }
+}

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

@@ -0,0 +1,36 @@
+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);
+}

+ 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);
+}

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

@@ -0,0 +1,200 @@
+<?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>
+
+</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>

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

@@ -0,0 +1,446 @@
+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){
+        // 设置意见
+        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);
+    }
+}

+ 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;
+    }
+}

+ 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;
+    }
+}

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

@@ -0,0 +1,877 @@
+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();
+            //根据项目名称查询人员
+            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>();
+        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>();
+        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 = findPageList(new Page<ProjectPlanArrage>(request, response),projectPlanArrage,projectPlans);
+        return getBootstrapData(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);
+            projectPlanActService.disList2ProInsId(act);
+        } 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;
+    }
+}