Browse Source

更新项目档案

jihs 4 years ago
parent
commit
edd38bc4ad
28 changed files with 1757 additions and 0 deletions
  1. 24 0
      src/main/java/org/jeecg/common/dto/archives/BsInfo.java
  2. 18 0
      src/main/java/org/jeecg/common/dto/archives/DeInfo.java
  3. 28 0
      src/main/java/org/jeecg/common/dto/archives/DeInfoRespDTO.java
  4. 18 0
      src/main/java/org/jeecg/common/dto/archives/IpInfo.java
  5. 28 0
      src/main/java/org/jeecg/common/dto/archives/IpInfoRespDTO.java
  6. 79 0
      src/main/java/org/jeecg/common/dto/archives/ProArchivesAddReqDTO.java
  7. 113 0
      src/main/java/org/jeecg/common/dto/archives/ProArchivesAddRespDTO.java
  8. 59 0
      src/main/java/org/jeecg/common/dto/archives/ProArchivesAndBusinessAddReqDTO.java
  9. 58 0
      src/main/java/org/jeecg/common/dto/archives/ProBusinessOtherAddReqDTO.java
  10. 162 0
      src/main/java/org/jeecg/common/dto/archives/ProBusinessOtherListRespDTO.java
  11. 18 0
      src/main/java/org/jeecg/common/dto/archives/SeInfo.java
  12. 23 0
      src/main/java/org/jeecg/common/dto/archives/SeInfoRespDTO.java
  13. 249 0
      src/main/java/org/jeecg/modules/archives/controller/ProjectManageArchivesController.java
  14. 119 0
      src/main/java/org/jeecg/modules/archives/entity/ProjectManageArchives.java
  15. 91 0
      src/main/java/org/jeecg/modules/archives/entity/ProjectManageArchivesAndBusiness.java
  16. 93 0
      src/main/java/org/jeecg/modules/archives/entity/ProjectManageBusinessOther.java
  17. 22 0
      src/main/java/org/jeecg/modules/archives/mapper/ProjectManageArchivesAndBusinessMapper.java
  18. 9 0
      src/main/java/org/jeecg/modules/archives/mapper/ProjectManageArchivesMapper.java
  19. 21 0
      src/main/java/org/jeecg/modules/archives/mapper/ProjectManageBusinessOtherMapper.java
  20. 13 0
      src/main/java/org/jeecg/modules/archives/mapper/xml/ProjectManageArchivesAndBusinessMapper.xml
  21. 36 0
      src/main/java/org/jeecg/modules/archives/mapper/xml/ProjectManageArchivesMapper.xml
  22. 12 0
      src/main/java/org/jeecg/modules/archives/mapper/xml/ProjectManageBusinessOtherMapper.xml
  23. 19 0
      src/main/java/org/jeecg/modules/archives/service/ProjectManageArchivesAndBusinessService.java
  24. 33 0
      src/main/java/org/jeecg/modules/archives/service/ProjectManageArchivesService.java
  25. 20 0
      src/main/java/org/jeecg/modules/archives/service/ProjectManageBusinessOtherService.java
  26. 32 0
      src/main/java/org/jeecg/modules/archives/service/impl/ProjectManageArchivesAndBusinessServiceImpl.java
  27. 328 0
      src/main/java/org/jeecg/modules/archives/service/impl/ProjectManageArchivesServiceImpl.java
  28. 32 0
      src/main/java/org/jeecg/modules/archives/service/impl/projectManageBusinessOtherServiceImpl.java

+ 24 - 0
src/main/java/org/jeecg/common/dto/archives/BsInfo.java

@@ -0,0 +1,24 @@
+package org.jeecg.common.dto.archives;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.List;
+
+/**
+   * @Author jihaosen
+   * @date 2021/2/24
+   */
+@ApiModel("项目档案—商务信息请求参数")
+@Data
+public class BsInfo {
+ @ApiModelProperty( "项目档案--里程碑信息")
+ private List<ProArchivesAndBusinessAddReqDTO> mileList;
+
+ public BsInfo() {
+ }
+
+ public BsInfo(List<ProArchivesAndBusinessAddReqDTO> mileList) {
+  this.mileList = mileList;
+ }
+}

+ 18 - 0
src/main/java/org/jeecg/common/dto/archives/DeInfo.java

@@ -0,0 +1,18 @@
+package org.jeecg.common.dto.archives;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.List;
+
+@ApiModel("项目档案—开发信息请求参数")
+@Data
+public class DeInfo {
+    @ApiModelProperty( "项目档案--里程碑信息")
+    private List<ProArchivesAndBusinessAddReqDTO> mileList;
+    @ApiModelProperty( "项目档案--计划信息新增请求参数")
+    private List<ProBusinessOtherAddReqDTO> planList;
+
+    public DeInfo() {
+    }
+}

+ 28 - 0
src/main/java/org/jeecg/common/dto/archives/DeInfoRespDTO.java

@@ -0,0 +1,28 @@
+package org.jeecg.common.dto.archives;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.List;
+
+/**
+   * @Author jihaosen
+   * @date 2021/2/25
+   * @desc
+   */
+ @ApiModel("项目档案—开发信息响应参数")
+ @Data
+public class DeInfoRespDTO {
+    @ApiModelProperty( "项目档案--里程碑信息")
+    private List<ProArchivesAndBusinessAddReqDTO> mileList;
+    @ApiModelProperty( "项目档案--计划信息")
+    private List<ProBusinessOtherListRespDTO> planList;
+
+    public DeInfoRespDTO() {
+    }
+
+    public DeInfoRespDTO(List<ProArchivesAndBusinessAddReqDTO> mileList, List<ProBusinessOtherListRespDTO> planList) {
+        this.mileList = mileList;
+        this.planList = planList;
+    }
+}

+ 18 - 0
src/main/java/org/jeecg/common/dto/archives/IpInfo.java

@@ -0,0 +1,18 @@
+package org.jeecg.common.dto.archives;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.List;
+
+@ApiModel("项目档案—实施信息参数")
+@Data
+public class IpInfo {
+    @ApiModelProperty( "项目档案--里程碑信息")
+    private List<ProArchivesAndBusinessAddReqDTO> mileList;
+    @ApiModelProperty( "项目档案--计划信息新增请求参数")
+    private List<ProBusinessOtherAddReqDTO> planList;
+
+    public IpInfo() {
+    }
+}

+ 28 - 0
src/main/java/org/jeecg/common/dto/archives/IpInfoRespDTO.java

@@ -0,0 +1,28 @@
+package org.jeecg.common.dto.archives;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author jihaosen
+ * @date 2021/2/25
+ */
+@ApiModel("项目档案—实施信息响应参数")
+@Data
+public class IpInfoRespDTO {
+    @ApiModelProperty( "项目档案--里程碑信息")
+    private List<ProArchivesAndBusinessAddReqDTO> mileList;
+    @ApiModelProperty( "项目档案--计划信息新增请求参数")
+    private List<ProBusinessOtherListRespDTO> planList;
+
+    public IpInfoRespDTO() {
+    }
+
+    public IpInfoRespDTO(List<ProArchivesAndBusinessAddReqDTO> mileList, List<ProBusinessOtherListRespDTO> planList) {
+        this.mileList = mileList;
+        this.planList = planList;
+    }
+}

+ 79 - 0
src/main/java/org/jeecg/common/dto/archives/ProArchivesAddReqDTO.java

@@ -0,0 +1,79 @@
+package org.jeecg.common.dto.archives;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotEmpty;
+import java.math.BigDecimal;
+
+@ApiModel("项目档案添加接口请求参数")
+@Data
+public class ProArchivesAddReqDTO {
+    private String id;
+    @ApiModelProperty("项目档案Id")
+    @NotEmpty(message = "参数proId不为空")
+    private String proId;
+    @ApiModelProperty("项目编码")
+    @NotEmpty(message = "参数proCode不为空")
+    private String proCode;
+    @ApiModelProperty("项目名称")
+    @NotEmpty(message = "参数proName不为空")
+    private String proName;
+    @ApiModelProperty("客户档案id")
+    @NotEmpty(message = "参数cusId不为空")
+    private String cusId;
+    @ApiModelProperty("客户编码")
+    @NotEmpty(message = "参数cusName不为空")
+    private String cusCode;
+    @ApiModelProperty("客户名称")
+    private String cusName;
+    @ApiModelProperty("项目总金额")
+    @NotEmpty(message = "参数totalPrice不为空")
+    private BigDecimal totalPrice;
+    @ApiModelProperty("销售经理id")
+    private String saleManagerId;
+    @ApiModelProperty("销售经理")
+    private String saleManager;
+    @ApiModelProperty("业务员id")
+    private String saleManId;
+    @ApiModelProperty("业务员")
+    private String saleMan;
+    @ApiModelProperty("实施项目经理id")
+    private String impManagerId;
+    @ApiModelProperty("实施项目经理")
+    private String impManager;
+    @ApiModelProperty("实施顾问id")
+    private String impConsultantId;
+    @ApiModelProperty("实施顾问")
+    private String impConsultant;
+    @ApiModelProperty("开发项目经理id")
+    private String deManagerId;
+    @ApiModelProperty("开发项目经理")
+    private String deManager;
+    @ApiModelProperty("开发工程师id")
+    private String deEngineerId;
+    @ApiModelProperty("开发工程师")
+    private String deEngineer;
+    @ApiModelProperty("服务经理id")
+    private String seManagerId;
+    @ApiModelProperty("服务经理")
+    private String seManager;
+    @ApiModelProperty("服务工程师id")
+    private String seEngineerId;
+    @ApiModelProperty("服务工程师")
+    private String seEngineer;
+    @ApiModelProperty("组织")
+    private String pkOrg;
+
+    @ApiModelProperty("项目档案—商务")
+    private BsInfo bsInfo;
+    @ApiModelProperty("项目档案—实施")
+    private IpInfo ipInfo;
+    @ApiModelProperty("项目档案—开发")
+    private DeInfo deInfo;
+    @ApiModelProperty("项目档案—服务")
+    private SeInfo seInfo;
+
+    public ProArchivesAddReqDTO() {
+    }
+}

+ 113 - 0
src/main/java/org/jeecg/common/dto/archives/ProArchivesAddRespDTO.java

@@ -0,0 +1,113 @@
+package org.jeecg.common.dto.archives;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.archives.entity.ProjectManageArchives;
+
+import javax.validation.constraints.NotEmpty;
+import java.math.BigDecimal;
+
+/**
+   * @Author jihaosen
+   * @date 2021/2/25
+   */
+ @ApiModel("批次档案响应参数")
+@Data
+public class ProArchivesAddRespDTO {
+    private String id;
+    @ApiModelProperty("项目档案Id")
+    @NotEmpty(message = "参数proId不为空")
+    private String proId;
+    @ApiModelProperty("项目编码")
+    @NotEmpty(message = "参数proCode不为空")
+    private String proCode;
+    @ApiModelProperty("项目名称")
+    @NotEmpty(message = "参数proName不为空")
+    private String proName;
+    @ApiModelProperty("客户档案id")
+    @NotEmpty(message = "参数cusId不为空")
+    private String cusId;
+    @ApiModelProperty("客户编码")
+    @NotEmpty(message = "参数cusName不为空")
+    private String cusCode;
+    @ApiModelProperty("客户名称")
+    private String cusName;
+    @ApiModelProperty("项目总金额")
+    @NotEmpty(message = "参数totalPrice不为空")
+    private BigDecimal totalPrice;
+    @ApiModelProperty("销售经理id")
+    private String saleManagerId;
+    @ApiModelProperty("销售经理")
+    private String saleManager;
+    @ApiModelProperty("业务员id")
+    private String saleManId;
+    @ApiModelProperty("业务员")
+    private String saleMan;
+    @ApiModelProperty("实施项目经理id")
+    private String impManagerId;
+    @ApiModelProperty("实施项目经理")
+    private String impManager;
+    @ApiModelProperty("实施顾问id")
+    private String impConsultantId;
+    @ApiModelProperty("实施顾问")
+    private String impConsultant;
+    @ApiModelProperty("开发项目经理id")
+    private String deManagerId;
+    @ApiModelProperty("开发项目经理")
+    private String deManager;
+    @ApiModelProperty("开发工程师id")
+    private String deEngineerId;
+    @ApiModelProperty("开发工程师")
+    private String deEngineer;
+    @ApiModelProperty("服务经理id")
+    private String seManagerId;
+    @ApiModelProperty("服务经理")
+    private String seManager;
+    @ApiModelProperty("服务工程师id")
+    private String seEngineerId;
+    @ApiModelProperty("服务工程师")
+    private String seEngineer;
+    @ApiModelProperty("组织")
+    private String pkOrg;
+
+    @ApiModelProperty("项目档案—商务")
+    private BsInfo bsInfo;
+    @ApiModelProperty("项目档案—实施")
+    private IpInfoRespDTO ipInfo;
+    @ApiModelProperty("项目档案—开发")
+    private DeInfoRespDTO deInfo;
+    @ApiModelProperty("项目档案—服务")
+    private SeInfoRespDTO seInfo;
+
+    public ProArchivesAddRespDTO() {
+    }
+
+    public ProArchivesAddRespDTO(ProjectManageArchives archives) {
+        this.id = archives.getId();
+        this.proId = archives.getProId();
+        this.proCode = archives.getProCode();
+        this.proName = archives.getProName();
+        this.cusId = archives.getCusId();
+        this.cusCode = archives.getCusCode();
+        this.cusName = archives.getCusName();
+        this.totalPrice = archives.getTotalPrice();
+        this.saleManagerId = archives.getSaleManagerId();
+        this.saleManager = archives.getSaleManager();
+        this.saleManId = archives.getSaleManId();
+        this.saleMan = archives.getSaleMan();
+        this.impManagerId = archives.getImpManagerId();
+        this.impManager = archives.getImpManager();
+        this.impConsultantId = archives.getImpConsultantId();
+        this.impConsultant = archives.getImpConsultant();
+        this.deManagerId = archives.getDeManagerId();
+        this.deManager = archives.getDeManager();
+        this.deEngineerId = archives.getDeEngineerId();
+        this.deEngineer = archives.getDeEngineer();
+        this.seManagerId = archives.getSeManagerId();
+        this.seManager = archives.getSeManager();
+        this.seEngineerId = archives.getSeEngineerId();
+        this.seEngineer = archives.getSeEngineer();
+        this.pkOrg = archives.getPkOrg();
+    }
+}

+ 59 - 0
src/main/java/org/jeecg/common/dto/archives/ProArchivesAndBusinessAddReqDTO.java

@@ -0,0 +1,59 @@
+package org.jeecg.common.dto.archives;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.archives.entity.ProjectManageArchivesAndBusiness;
+
+import java.math.BigDecimal;
+
+/**
+   * @Author jihaosen
+   * @date 2021/2/24
+   */
+@ApiModel("项目档案--里程碑信息表新增请求参数")
+@Data
+public class ProArchivesAndBusinessAddReqDTO {
+    @ApiModelProperty( "id")
+    private String id;
+    @ApiModelProperty( "计划名称")
+    private String planName;
+    @ApiModelProperty( "第一笔")
+    private BigDecimal price1;
+    @ApiModelProperty( "第二笔")
+    private BigDecimal price2;
+    @ApiModelProperty( "第三笔")
+    private BigDecimal price3;
+    @ApiModelProperty( "第四笔")
+    private BigDecimal price4;
+    @ApiModelProperty( "第五笔")
+    private BigDecimal price5;
+    @ApiModelProperty( "对应里程碑1")
+    private String milestone1;
+    @ApiModelProperty( "对应里程碑2")
+    private String milestone2;
+    @ApiModelProperty( "对应里程碑3")
+    private String milestone3;
+    @ApiModelProperty( "对应里程碑4")
+    private String milestone4;
+    @ApiModelProperty( "对应里程碑5")
+    private String milestone5;
+
+    public ProArchivesAndBusinessAddReqDTO() {
+    }
+
+    public ProArchivesAndBusinessAddReqDTO(ProjectManageArchivesAndBusiness business) {
+        this.planName = business.getId();
+        this.price1 = business.getPrice1();
+        this.price2 = business.getPrice2();
+        this.price3 = business.getPrice3();
+        this.price4 = business.getPrice4();
+        this.price5 = business.getPrice5();
+        this.milestone1 = business.getMilestone1();
+        this.milestone2 = business.getMilestone2();
+        this.milestone3 = business.getMilestone3();
+        this.milestone4 = business.getMilestone4();
+        this.milestone5 = business.getMilestone5();
+    }
+}

+ 58 - 0
src/main/java/org/jeecg/common/dto/archives/ProBusinessOtherAddReqDTO.java

@@ -0,0 +1,58 @@
+package org.jeecg.common.dto.archives;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+
+/**
+   * @Author jihaosen
+   * @date 2021/2/24
+   */
+@ApiModel("项目档案--计划信息新增请求参数")
+@Data
+public class ProBusinessOtherAddReqDTO {
+    @ApiModelProperty( "当前节点id")
+    private String keyId;
+    @ApiModelProperty( "父节点id")
+    private String parentId;
+    @ApiModelProperty( "里程碑id")
+    private String muilesId;
+    @ApiModelProperty( "里程碑名称")
+    private String muilesName;
+    @ApiModelProperty( "开始时间")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date startDate;
+    @ApiModelProperty( "结束时间")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date endDate;
+    @ApiModelProperty( "计划人天")
+    private String planTime;
+    @ApiModelProperty( "执行人")
+    private String executor;
+    @ApiModelProperty( "执行人id (来源角色表)")
+    private String executorId;
+    @ApiModelProperty( "实际人天")
+    private String realTime;
+
+    public ProBusinessOtherAddReqDTO() {
+    }
+
+    public ProBusinessOtherAddReqDTO(String keyId, String parentId, String muilesId, String muilesName, Date startDate, Date endDate,
+                                  String planTime, String executor, String executorId, String realTime) {
+        this.keyId = keyId;
+        this.parentId = parentId;
+        this.muilesId = muilesId;
+        this.muilesName = muilesName;
+        this.startDate = startDate;
+        this.endDate = endDate;
+        this.planTime = planTime;
+        this.executor = executor;
+        this.executorId = executorId;
+        this.realTime = realTime;
+    }
+}

+ 162 - 0
src/main/java/org/jeecg/common/dto/archives/ProBusinessOtherListRespDTO.java

@@ -0,0 +1,162 @@
+package org.jeecg.common.dto.archives;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.archives.entity.ProjectManageBusinessOther;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+   * @Author jihaosen
+   * @date 2021/2/25
+   * @desc
+   */
+ @Data
+public class ProBusinessOtherListRespDTO {
+    @ApiModelProperty( "id")
+     private String id;
+    @ApiModelProperty( "当前节点id")
+    private String key;
+    @ApiModelProperty( "父节点id")
+    private String parentId;
+    @ApiModelProperty( "里程碑id")
+    private String muilesId;
+    @ApiModelProperty( "里程碑名称")
+    private String muilesName;
+    @ApiModelProperty( "开始时间")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date startDate;
+    @ApiModelProperty( "结束时间")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date endDate;
+    @ApiModelProperty( "计划人天")
+    private String planTime;
+    @ApiModelProperty( "执行人")
+    private String executor;
+    @ApiModelProperty( "执行人id (来源角色表)")
+    private String executorId;
+    @ApiModelProperty( "实际人天")
+    private String realTime;
+    @ApiModelProperty(" 是否叶子节点: 1:是 0:不是")
+    private boolean isLeaf;
+
+    private List<ProBusinessOtherListRespDTO> children;
+
+    public ProBusinessOtherListRespDTO() {
+    }
+
+    public ProBusinessOtherListRespDTO(ProjectManageBusinessOther other) {
+        this.id = other.getId();
+        this.key = other.getKeyId();
+        this.parentId = other.getParentId();
+        this.muilesId = other.getMuilesId();
+        this.muilesName = other.getMuilesName();
+        this.startDate = other.getStartDate();
+        this.endDate = other.getEndDate();
+        this.planTime = other.getPlanTime();
+        this.executor = other.getExecutor();
+        this.executorId = other.getExecutorId();
+        this.realTime = other.getRealTime();
+        this.isLeaf = false;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(String parentId) {
+        this.parentId = parentId;
+    }
+
+    public String getMuilesId() {
+        return muilesId;
+    }
+
+    public void setMuilesId(String muilesId) {
+        this.muilesId = muilesId;
+    }
+
+    public String getMuilesName() {
+        return muilesName;
+    }
+
+    public void setMuilesName(String muilesName) {
+        this.muilesName = muilesName;
+    }
+
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(Date startDate) {
+        this.startDate = startDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getPlanTime() {
+        return planTime;
+    }
+
+    public void setPlanTime(String planTime) {
+        this.planTime = planTime;
+    }
+
+    public String getExecutor() {
+        return executor;
+    }
+
+    public void setExecutor(String executor) {
+        this.executor = executor;
+    }
+
+    public String getExecutorId() {
+        return executorId;
+    }
+
+    public void setExecutorId(String executorId) {
+        this.executorId = executorId;
+    }
+
+    public String getRealTime() {
+        return realTime;
+    }
+
+    public void setRealTime(String realTime) {
+        this.realTime = realTime;
+    }
+
+    public boolean getIsLeaf() {
+        return isLeaf;
+    }
+
+    public void setIsLeaf(boolean leaf) {
+        isLeaf = leaf;
+    }
+}

+ 18 - 0
src/main/java/org/jeecg/common/dto/archives/SeInfo.java

@@ -0,0 +1,18 @@
+package org.jeecg.common.dto.archives;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.List;
+
+@ApiModel("项目档案—服务信息请求参数")
+@Data
+public class SeInfo {
+    @ApiModelProperty( "项目档案--里程碑信息")
+    private List<ProArchivesAndBusinessAddReqDTO> mileList;
+    @ApiModelProperty( "项目档案--计划信息新增请求参数")
+    private List<ProBusinessOtherAddReqDTO> planList;
+
+    public SeInfo() {
+    }
+}

+ 23 - 0
src/main/java/org/jeecg/common/dto/archives/SeInfoRespDTO.java

@@ -0,0 +1,23 @@
+package org.jeecg.common.dto.archives;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.List;
+
+@ApiModel("项目档案—服务信息请求参数")
+@Data
+public class SeInfoRespDTO {
+    @ApiModelProperty( "项目档案--里程碑信息")
+    private List<ProArchivesAndBusinessAddReqDTO> mileList;
+    @ApiModelProperty( "项目档案--计划信息新增请求参数")
+    private List<ProBusinessOtherListRespDTO> planList;
+
+    public SeInfoRespDTO() {
+    }
+
+    public SeInfoRespDTO(List<ProArchivesAndBusinessAddReqDTO> mileList, List<ProBusinessOtherListRespDTO> planList) {
+        this.mileList = mileList;
+        this.planList = planList;
+    }
+}

+ 249 - 0
src/main/java/org/jeecg/modules/archives/controller/ProjectManageArchivesController.java

@@ -0,0 +1,249 @@
+package org.jeecg.modules.archives.controller;
+
+import javax.servlet.http.HttpServletRequest;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.NotDuplicate;
+import org.jeecg.common.dto.archives.ProArchivesAddReqDTO;
+import org.jeecg.common.dto.archives.ProArchivesAddRespDTO;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.archives.entity.ProjectManageArchives;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.archives.service.ProjectManageArchivesAndBusinessService;
+import org.jeecg.modules.archives.service.ProjectManageArchivesService;
+import org.jeecg.modules.archives.service.ProjectManageBusinessOtherService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+   * @Author jihaosen
+   * @date 2021/2/24
+   */
+@Api(value = "项目档案接口")
+@RestController
+@RequestMapping("/archives/projectManageArchives")
+@Slf4j
+public class ProjectManageArchivesController {
+	@Autowired
+	private ProjectManageArchivesService projectManageArchivesService;
+
+	@ApiOperation(value = "项目档案分页查询接口", notes = "项目档案分页查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ProjectManageArchives>> queryPageList(ProjectManageArchives projectManageArchives,
+			  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+			  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+			  HttpServletRequest req) {
+		Result<IPage<ProjectManageArchives>> result = new Result<IPage<ProjectManageArchives>>();
+		QueryWrapper<ProjectManageArchives> queryWrapper = QueryGenerator.initQueryWrapper(projectManageArchives, req.getParameterMap());
+		Page<ProjectManageArchives> page = new Page<ProjectManageArchives>(pageNo, pageSize);
+		queryWrapper.eq("del_flag","0").orderByDesc("create_time");
+		IPage<ProjectManageArchives> pageList = projectManageArchivesService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	@ApiOperation(value = "新增项目档案接口", notes = "新增项目档案")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name="proId", value="项目档案Id",required=true, dataType="String"),
+			@ApiImplicitParam(name="proCode", value="项目编码 (项目档案)",required=true, dataType="String"),
+			@ApiImplicitParam(name="proName", value="项目名称(项目档案)",required=true, dataType="String"),
+			@ApiImplicitParam(name="cusId", value="客户档案id",required=true, dataType="String"),
+			@ApiImplicitParam(name="cusCode", value="客户编码 (客户档案)",required=true, dataType="String"),
+			@ApiImplicitParam(name="cusName", value="客户名称 (客户档案)",required=true, dataType="String"),
+			@ApiImplicitParam(name="totalPrice", value="项目总金额",required=true, dataType="String"),
+			@ApiImplicitParam(name="saleManagerId", value="销售经理id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="saleManager", value="销售经理",required=false, dataType="String"),
+			@ApiImplicitParam(name="saleManId", value="业务员id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="saleMan", value="业务员",required=false, dataType="String"),
+			@ApiImplicitParam(name="impManagerId", value="实施项目经理id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="impManager", value="实施项目经理",required=false, dataType="String"),
+			@ApiImplicitParam(name="impConsultantId", value="实施顾问id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="impConsultant", value="实施顾问",required=false, dataType="String"),
+			@ApiImplicitParam(name="deManagerId", value="开发项目经理id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="deManager", value="开发项目经理",required=false, dataType="String"),
+			@ApiImplicitParam(name="deEngineerId", value="开发工程师id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="deEngineer", value="开发工程师",required=false, dataType="String"),
+			@ApiImplicitParam(name="seManagerId", value="服务经理id(角色档案)",required=true, dataType="String"),
+			@ApiImplicitParam(name="seManager", value="服务经理",required=true, dataType="String"),
+			@ApiImplicitParam(name="seEngineerId", value="服务工程师id",required=true, dataType="String"),
+			@ApiImplicitParam(name="seEngineer", value="服务工程师",required=true, dataType="String"),
+			@ApiImplicitParam(name="pkOrg", value="组织",required=false, dataType="String"),
+			@ApiImplicitParam(name="planName", value="计划名称",required=false, dataType="String"),
+			@ApiImplicitParam(name="price1", value="第一笔",required=false, dataType="String"),
+			@ApiImplicitParam(name="price2", value="第二笔",required=false, dataType="String"),
+			@ApiImplicitParam(name="price3", value="第三笔",required=false, dataType="String"),
+			@ApiImplicitParam(name="price4", value="第四笔",required=false, dataType="String"),
+			@ApiImplicitParam(name="price5", value="第五笔",required=false, dataType="String"),
+			@ApiImplicitParam(name="milestone1", value="对应里程碑1",required=false, dataType="String"),
+			@ApiImplicitParam(name="milestone2", value="对应里程碑2",required=false, dataType="String"),
+			@ApiImplicitParam(name="milestone3", value="对应里程碑3",required=false, dataType="String"),
+			@ApiImplicitParam(name="milestone4", value="对应里程碑4",required=false, dataType="String"),
+			@ApiImplicitParam(name="milestone5", value="对应里程碑5",required=false, dataType="String"),
+			@ApiImplicitParam(name="proArchivesId", value="项目档案id",required=false, dataType="String"),
+			@ApiImplicitParam(name="keyId", value="当前节点id",required=false, dataType="String"),
+			@ApiImplicitParam(name="parentId", value="父节点id",required=false, dataType="String"),
+			@ApiImplicitParam(name="muilesId", value="里程碑id",required=false, dataType="String"),
+			@ApiImplicitParam(name="muilesName", value="里程碑名称",required=false, dataType="String"),
+			@ApiImplicitParam(name="startDate", value="开始时间",required=false, dataType="String"),
+			@ApiImplicitParam(name="endDate", value="结束时间",required=false, dataType="String"),
+			@ApiImplicitParam(name="planTime", value="计划人天",required=false, dataType="String"),
+			@ApiImplicitParam(name="executor", value="执行人",required=false, dataType="String"),
+			@ApiImplicitParam(name="executorId", value="执行人id",required=false, dataType="String"),
+			@ApiImplicitParam(name="realTime", value="实际人天",required=false, dataType="String"),
+	})
+	@PostMapping(value = "/add")
+	@NotDuplicate
+	public Result<ProjectManageArchives> add(@RequestBody ProArchivesAddReqDTO reqDTO, BindingResult bindingResult) {
+		Result<ProjectManageArchives> result = new Result<ProjectManageArchives>();
+		try {
+			StringBuilder sb = new StringBuilder();
+			if (bindingResult.hasErrors()){
+				//记录错误信息
+				bindingResult.getAllErrors().stream().forEach(error -> sb.append(error.getDefaultMessage() + "<br/>"));
+				result.error500(sb.toString());
+				return result;
+			}
+			projectManageArchivesService.add(reqDTO);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			e.printStackTrace();
+			log.info(e.getMessage());
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	@ApiOperation(value = "编辑项目档案接口", notes = "编辑项目档案")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name="id", value="id",required=true, dataType="String"),
+			@ApiImplicitParam(name="proId", value="项目档案Id",required=true, dataType="String"),
+			@ApiImplicitParam(name="proCode", value="项目编码 (项目档案)",required=true, dataType="String"),
+			@ApiImplicitParam(name="proName", value="项目名称(项目档案)",required=true, dataType="String"),
+			@ApiImplicitParam(name="cusId", value="客户档案id",required=true, dataType="String"),
+			@ApiImplicitParam(name="cusCode", value="客户编码 (客户档案)",required=true, dataType="String"),
+			@ApiImplicitParam(name="cusName", value="客户名称 (客户档案)",required=true, dataType="String"),
+			@ApiImplicitParam(name="totalPrice", value="项目总金额",required=true, dataType="String"),
+			@ApiImplicitParam(name="saleManagerId", value="销售经理id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="saleManager", value="销售经理",required=false, dataType="String"),
+			@ApiImplicitParam(name="saleManId", value="业务员id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="saleMan", value="业务员",required=false, dataType="String"),
+			@ApiImplicitParam(name="impManagerId", value="实施项目经理id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="impManager", value="实施项目经理",required=false, dataType="String"),
+			@ApiImplicitParam(name="impConsultantId", value="实施顾问id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="impConsultant", value="实施顾问",required=false, dataType="String"),
+			@ApiImplicitParam(name="deManagerId", value="开发项目经理id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="deManager", value="开发项目经理",required=false, dataType="String"),
+			@ApiImplicitParam(name="deEngineerId", value="开发工程师id(角色档案)",required=false, dataType="String"),
+			@ApiImplicitParam(name="deEngineer", value="开发工程师",required=false, dataType="String"),
+			@ApiImplicitParam(name="seManagerId", value="服务经理id(角色档案)",required=true, dataType="String"),
+			@ApiImplicitParam(name="seManager", value="服务经理",required=true, dataType="String"),
+			@ApiImplicitParam(name="seEngineerId", value="服务工程师id",required=true, dataType="String"),
+			@ApiImplicitParam(name="seEngineer", value="服务工程师",required=true, dataType="String"),
+			@ApiImplicitParam(name="pkOrg", value="组织",required=false, dataType="String"),
+			@ApiImplicitParam(name="planName", value="计划名称",required=false, dataType="String"),
+			@ApiImplicitParam(name="price1", value="第一笔",required=false, dataType="String"),
+			@ApiImplicitParam(name="price2", value="第二笔",required=false, dataType="String"),
+			@ApiImplicitParam(name="price3", value="第三笔",required=false, dataType="String"),
+			@ApiImplicitParam(name="price4", value="第四笔",required=false, dataType="String"),
+			@ApiImplicitParam(name="price5", value="第五笔",required=false, dataType="String"),
+			@ApiImplicitParam(name="milestone1", value="对应里程碑1",required=false, dataType="String"),
+			@ApiImplicitParam(name="milestone2", value="对应里程碑2",required=false, dataType="String"),
+			@ApiImplicitParam(name="milestone3", value="对应里程碑3",required=false, dataType="String"),
+			@ApiImplicitParam(name="milestone4", value="对应里程碑4",required=false, dataType="String"),
+			@ApiImplicitParam(name="milestone5", value="对应里程碑5",required=false, dataType="String"),
+			@ApiImplicitParam(name="proArchivesId", value="项目档案id",required=false, dataType="String"),
+			@ApiImplicitParam(name="keyId", value="当前节点id",required=false, dataType="String"),
+			@ApiImplicitParam(name="parentId", value="父节点id",required=false, dataType="String"),
+			@ApiImplicitParam(name="muilesId", value="里程碑id",required=false, dataType="String"),
+			@ApiImplicitParam(name="muilesName", value="里程碑名称",required=false, dataType="String"),
+			@ApiImplicitParam(name="startDate", value="开始时间",required=false, dataType="String"),
+			@ApiImplicitParam(name="endDate", value="结束时间",required=false, dataType="String"),
+			@ApiImplicitParam(name="planTime", value="计划人天",required=false, dataType="String"),
+			@ApiImplicitParam(name="executor", value="执行人",required=false, dataType="String"),
+			@ApiImplicitParam(name="executorId", value="执行人id",required=false, dataType="String"),
+			@ApiImplicitParam(name="realTime", value="实际人天",required=false, dataType="String"),
+	})
+	@PostMapping(value = "/edit")
+	public Result<ProjectManageArchives> edit(@RequestBody ProArchivesAddReqDTO reqDTO) {
+		Result<ProjectManageArchives> result = new Result<ProjectManageArchives>();
+		ProjectManageArchives projectManageArchivesEntity = projectManageArchivesService.getById(reqDTO.getId());
+		if(projectManageArchivesEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = projectManageArchivesService.edit(reqDTO);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		
+		return result;
+	}
+	
+	@ApiOperation(value = "项目档案通过id删除接口", notes = "通过id删除项目档案")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name="id", value="id",required=true, dataType="String")
+	})
+	@PostMapping(value = "/delete")
+	public Result<ProjectManageArchives> delete(@RequestBody ProjectManageArchives archives) {
+		Result<ProjectManageArchives> result = new Result<ProjectManageArchives>();
+		ProjectManageArchives projectManageArchives = projectManageArchivesService.getById(archives.getId());
+		if(projectManageArchives==null) {
+			result.error500("未找到对应实体");
+		}else {
+			projectManageArchives.setDelFlag("1");
+			boolean ok = projectManageArchivesService.deleteById(projectManageArchives);
+			if(ok) {
+				result.success("删除成功!");
+			}
+		}
+		return result;
+	}
+	
+	@ApiOperation(value = "项目档案通过id查询接口", notes = "根据id查询项目档案")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name="id", value="id",required=true, dataType="String")
+	})
+	@GetMapping(value = "/queryById")
+	public Result<ProjectManageArchives> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<ProjectManageArchives> result = new Result<ProjectManageArchives>();
+		ProjectManageArchives projectManageArchives = projectManageArchivesService.getById(id);
+		if(projectManageArchives==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(projectManageArchives);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+	@ApiOperation(value = "项目档案主子表查询接口", notes = "根据id查询项目档案主子表")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name="id", value="id",required=true, dataType="String")
+	})
+	@GetMapping(value = "/getListById")
+	public Result<ProArchivesAddRespDTO> getListById(@RequestParam(name="id",required=true) String id) {
+		Result<ProArchivesAddRespDTO> result = new Result<ProArchivesAddRespDTO>();
+		ProjectManageArchives projectManageArchives = projectManageArchivesService.getById(id);
+		if(projectManageArchives==null) {
+			result.error500("未找到对应实体");
+		}else {
+			ProArchivesAddRespDTO respDTO = projectManageArchivesService.getListById(projectManageArchives);
+			result.setResult(respDTO);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+}

+ 119 - 0
src/main/java/org/jeecg/modules/archives/entity/ProjectManageArchives.java

@@ -0,0 +1,119 @@
+package org.jeecg.modules.archives.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+import org.jeecg.common.dto.archives.ProArchivesAddReqDTO;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * project_manage_archives
+ * @author 
+ */
+@Data
+@ApiModel("项目档案")
+public class ProjectManageArchives implements Serializable {
+    private static final long serialVersionUID = -2411456544820868464L;
+    @ApiModelProperty("id")
+    @TableId(type = IdType.UUID)
+    private String id;
+    @ApiModelProperty("项目立项档案id")
+    private String proId;
+    @ApiModelProperty("项目编码(来自项目立项)")
+    private String proCode;
+    @ApiModelProperty("项目名称(来自项目立项)")
+    private String proName;
+    @ApiModelProperty("客户档案id")
+    private String cusId;
+    @ApiModelProperty("客户编码(来自客户档案)")
+    private String cusCode;
+    @ApiModelProperty("客户名称(来自客户档案)")
+    private String cusName;
+    @ApiModelProperty("项目总金额")
+    private BigDecimal totalPrice;
+    @ApiModelProperty("销售经理id")
+    private String saleManagerId;
+    @ApiModelProperty("销售经理")
+    private String saleManager;
+    @ApiModelProperty("业务员id")
+    private String saleManId;
+    @ApiModelProperty("业务员")
+    private String saleMan;
+    @ApiModelProperty("实施项目经理id")
+    private String impManagerId;
+    @ApiModelProperty("实施项目经理")
+    private String impManager;
+    @ApiModelProperty("实施顾问id")
+    private String impConsultantId;
+    @ApiModelProperty("实施顾问")
+    private String impConsultant;
+    @ApiModelProperty("开发项目经理id")
+    private String deManagerId;
+    @ApiModelProperty("开发项目经理")
+    private String deManager;
+    @ApiModelProperty("开发工程师id")
+    private String deEngineerId;
+    @ApiModelProperty("开发工程师")
+    private String deEngineer;
+    @ApiModelProperty("服务经理id")
+    private String seManagerId;
+    @ApiModelProperty("服务经理")
+    private String seManager;
+    @ApiModelProperty("服务工程师id")
+    private String seEngineerId;
+    @ApiModelProperty("服务工程师")
+    private String seEngineer;
+    @ApiModelProperty("创建时间")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    @ApiModelProperty("创建人")
+    private String createBy;
+    @ApiModelProperty("修改时间")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+    @ApiModelProperty("修改人")
+    private String updateBy;
+    @ApiModelProperty("删除状态(0,正常,1已删除)")
+    private String delFlag;
+    @ApiModelProperty("组织")
+    private String pkOrg;
+
+    public ProjectManageArchives() {
+    }
+
+    public ProjectManageArchives(ProArchivesAddReqDTO reqDTO) {
+        this.proId = reqDTO.getProId();
+        this.proCode = reqDTO.getProCode();
+        this.proName = reqDTO.getProName();
+        this.cusId = reqDTO.getCusId();
+        this.cusCode = reqDTO.getCusCode();
+        this.cusName = reqDTO.getCusName();
+        this.totalPrice = reqDTO.getTotalPrice();
+        this.saleManagerId = reqDTO.getSaleManagerId();
+        this.saleManager = reqDTO.getSaleManager();
+        this.saleManId = reqDTO.getSaleManId();
+        this.saleMan = reqDTO.getSaleMan();
+        this.impManagerId = reqDTO.getImpManagerId();
+        this.impManager = reqDTO.getImpManager();
+        this.impConsultantId = reqDTO.getImpConsultantId();
+        this.impConsultant = reqDTO.getImpConsultant();
+        this.deManagerId = reqDTO.getDeManagerId();
+        this.deManager = reqDTO.getDeManager();
+        this.deEngineerId = reqDTO.getDeEngineerId();
+        this.deEngineer = reqDTO.getDeEngineer();
+        this.seManagerId = reqDTO.getSeEngineerId();
+        this.seManager = reqDTO.getSeManager();
+        this.seEngineerId = reqDTO.getSeEngineerId();
+        this.seEngineer = reqDTO.getSeEngineer();
+        this.delFlag = "0";
+        this.pkOrg = reqDTO.getPkOrg();
+    }
+}

+ 91 - 0
src/main/java/org/jeecg/modules/archives/entity/ProjectManageArchivesAndBusiness.java

@@ -0,0 +1,91 @@
+package org.jeecg.modules.archives.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.jeecg.common.dto.archives.ProArchivesAndBusinessAddReqDTO;
+import org.springframework.format.annotation.DateTimeFormat;
+
+ /** 
+   * @Author jihaosen
+   * @date 2021/2/24 
+   */
+ 
+@ApiModel("项目档案--里程碑信息表")
+@Data
+@TableName("project_manage_archives_and_business")
+public class ProjectManageArchivesAndBusiness implements Serializable {
+	 private static final long serialVersionUID = -3625006826554966271L;
+	 @TableId(type = IdType.UUID)
+	private String id;
+	@ApiModelProperty( "项目档案id")
+	private String proArchivesId;
+	@ApiModelProperty( "计划类型 1.商务 2.实施 3.开发 4.服务")
+	private Integer planType;
+	@ApiModelProperty( "计划名称")
+	private String planName;
+	@ApiModelProperty( "第一笔")
+	private BigDecimal price1;
+	@ApiModelProperty( "第二笔")
+	private BigDecimal price2;
+	@ApiModelProperty( "第三笔")
+	private BigDecimal price3;
+	@ApiModelProperty( "第四笔")
+	private BigDecimal price4;
+	@ApiModelProperty( "第五笔")
+	private BigDecimal price5;
+	@ApiModelProperty( "对应里程碑1")
+	private String milestone1;
+	@ApiModelProperty( "对应里程碑2")
+	private String milestone2;
+	@ApiModelProperty( "对应里程碑3")
+	private String milestone3;
+	@ApiModelProperty( "对应里程碑4")
+	private String milestone4;
+	@ApiModelProperty( "对应里程碑5")
+	private String milestone5;
+	@ApiModelProperty( "创建时间")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	private java.util.Date createTime;
+	@ApiModelProperty( "创建人")
+	private String createBy;
+	@ApiModelProperty( "修改时间")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	private java.util.Date updateTime;
+	@ApiModelProperty( "修改人")
+	private String updateBy;
+	@ApiModelProperty( "删除状态(0,正常,1已删除)")
+	private String delFlag;
+	@ApiModelProperty( "组织")
+	private String pkOrg;
+
+	 public ProjectManageArchivesAndBusiness() {
+	 }
+
+	 public ProjectManageArchivesAndBusiness(ProArchivesAndBusinessAddReqDTO mile, String proArchivesId, Integer planType, String pkOrg) {
+		 this.proArchivesId = proArchivesId;
+		 this.planType = planType;
+		 this.planName = mile.getPlanName();
+		 this.price1 = mile.getPrice1();
+		 this.price2 = mile.getPrice2();
+		 this.price3 = mile.getPrice3();
+		 this.price4 = mile.getPrice4();
+		 this.price5 = mile.getPrice5();
+		 this.milestone1 = mile.getMilestone1();
+		 this.milestone2 = mile.getMilestone2();
+		 this.milestone3 = mile.getMilestone3();
+		 this.milestone4 = mile.getMilestone4();
+		 this.milestone5 = mile.getMilestone5();
+		 this.delFlag = "0";
+		 this.pkOrg = pkOrg;
+	 }
+ }

+ 93 - 0
src/main/java/org/jeecg/modules/archives/entity/ProjectManageBusinessOther.java

@@ -0,0 +1,93 @@
+package org.jeecg.modules.archives.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.jeecg.common.dto.archives.ProBusinessOtherAddReqDTO;
+import org.springframework.format.annotation.DateTimeFormat;
+
+ /** 
+   * @Author jihaosen
+   * @date 2021/2/24 
+   */
+@ApiModel("项目档案--计划表")
+@Data
+@TableName("project_manage_business_other")
+public class ProjectManageBusinessOther implements Serializable {
+	 private static final long serialVersionUID = -5948784030717976932L;
+    @TableId(type = IdType.UUID)
+	private String id;
+    @ApiModelProperty( "项目档案id")
+    private String proArchivesId;
+	 @ApiModelProperty( "计划类型 1.商务 2.实施 3.开发 4.服务")
+    private Integer planType;
+    @ApiModelProperty( "当前节点id")
+	private String keyId;
+	@ApiModelProperty( "父节点id")
+	private String parentId;
+	@ApiModelProperty( "里程碑id")
+	private String muilesId;
+	@ApiModelProperty( "里程碑名称")
+	private String muilesName;
+	@ApiModelProperty( "开始时间")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	private Date startDate;
+	@ApiModelProperty( "结束时间")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	private Date endDate;
+	@ApiModelProperty( "计划人天")
+	private String planTime;
+	@ApiModelProperty( "执行人")
+	private String executor;
+	@ApiModelProperty( "执行人id (来源角色表)")
+	private String executorId;
+	@ApiModelProperty( "实际人天")
+	private String realTime;
+	@ApiModelProperty( "创建时间")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	@ApiModelProperty( "创建人")
+	private String createBy;
+	@ApiModelProperty( "修改时间")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	@ApiModelProperty( "修改人")
+	private String updateBy;
+	@ApiModelProperty( "删除状态(0,正常,1已删除)")
+	private String delFlag;
+	@ApiModelProperty( "组织")
+	private String pkOrg;
+
+	 public ProjectManageBusinessOther() {
+	 }
+
+	 /**
+	  * @desc 添加用
+	  */
+	 public ProjectManageBusinessOther(ProBusinessOtherAddReqDTO plan, String proArchivesId, Integer planType, String pkOrg) {
+		 this.proArchivesId = proArchivesId;
+		 this.planType = planType;
+		 this.keyId = plan.getKeyId();
+		 this.parentId = plan.getParentId();
+		 this.muilesId = plan.getMuilesId();
+		 this.muilesName = plan.getMuilesName();
+		 this.startDate = plan.getStartDate();
+		 this.endDate = plan.getEndDate();
+		 this.planTime = plan.getPlanTime();
+		 this.executor = plan.getExecutor();
+		 this.executorId = plan.getExecutorId();
+		 this.realTime = plan.getRealTime();
+		 this.delFlag = "0";
+		 this.pkOrg = pkOrg;
+	 }
+ }

+ 22 - 0
src/main/java/org/jeecg/modules/archives/mapper/ProjectManageArchivesAndBusinessMapper.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.archives.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.archives.entity.ProjectManageArchivesAndBusiness;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * @Description: 项目档案--里程碑信息Mapper
+ * @author: jeecg-boot
+ * @date2021-02-24
+ * @version: V1.0
+ */
+@Mapper
+public interface ProjectManageArchivesAndBusinessMapper extends BaseMapper<ProjectManageArchivesAndBusiness> {
+    /**
+     * @desc 批量删除(逻辑删除)
+     */
+    void deleteBatch(@Param("businessList") List<ProjectManageArchivesAndBusiness> businessList);
+}

+ 9 - 0
src/main/java/org/jeecg/modules/archives/mapper/ProjectManageArchivesMapper.java

@@ -0,0 +1,9 @@
+package org.jeecg.modules.archives.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.jeecg.modules.archives.entity.ProjectManageArchives;
+
+@Mapper
+public interface ProjectManageArchivesMapper extends BaseMapper<ProjectManageArchives> {
+}

+ 21 - 0
src/main/java/org/jeecg/modules/archives/mapper/ProjectManageBusinessOtherMapper.java

@@ -0,0 +1,21 @@
+package org.jeecg.modules.archives.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.archives.entity.ProjectManageBusinessOther;
+import java.util.List;
+
+/**
+ * @Description: 项目档案--计划表
+ * @author: jeecg-boot
+ * @date2021-02-24
+ * @version: V1.0
+ */
+@Mapper
+public interface ProjectManageBusinessOtherMapper extends BaseMapper<ProjectManageBusinessOther> {
+    /**
+     * @desc 批量删除(逻辑删除)
+     */
+    void deleteBatch(@Param("others") List<ProjectManageBusinessOther> businessOtherList);
+}

+ 13 - 0
src/main/java/org/jeecg/modules/archives/mapper/xml/ProjectManageArchivesAndBusinessMapper.xml

@@ -0,0 +1,13 @@
+<?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="org.jeecg.modules.archives.mapper.ProjectManageArchivesAndBusinessMapper">
+      <update id="deleteBatch">
+          UPDATE project_manage_archives_and_business
+          SET del_flag = '1'
+          WHERE 1 = 1 AND id IN
+          <foreach collection="businessList" separator="," item="business" open="(" close=")">
+              #{business.id}
+          </foreach>
+
+      </update>
+</mapper>

+ 36 - 0
src/main/java/org/jeecg/modules/archives/mapper/xml/ProjectManageArchivesMapper.xml

@@ -0,0 +1,36 @@
+<?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="org.jeecg.modules.archives.mapper.ProjectManageArchivesMapper">
+  <resultMap id="BaseResultMap" type="org.jeecg.modules.archives.entity.ProjectManageArchives">
+    <id column="id"  property="id" />
+    <result column="pro_id"  property="proId" />
+    <result column="pro_code"  property="proCode" />
+    <result column="pro_name"  property="proName" />
+    <result column="cus_id"  property="cusId" />
+    <result column="cus_code"  property="cusCode" />
+    <result column="cus_name"  property="cusName" />
+    <result column="total_price" jdbcType="DECIMAL" property="totalPrice" />
+    <result column="sale_manager_id"  property="saleManagerId" />
+    <result column="sale_manager"  property="saleManager" />
+    <result column="sale_man_id"  property="saleManId" />
+    <result column="sale_man"  property="saleMan" />
+    <result column="imp_manager_id"  property="impManagerId" />
+    <result column="imp_manager"  property="impManager" />
+    <result column="imp_consultant_id"  property="impConsultantId" />
+    <result column="imp_consultant"  property="impConsultant" />
+    <result column="de_manager_id"  property="deManagerId" />
+    <result column="de_manager"  property="deManager" />
+    <result column="de_engineer_id"  property="deEngineerId" />
+    <result column="de_engineer"  property="deEngineer" />
+    <result column="se_manager_id"  property="seManagerId" />
+    <result column="se_manager"  property="seManager" />
+    <result column="se_engineer_id"  property="seEngineerId" />
+    <result column="se_engineer"  property="seEngineer" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="create_by"  property="createBy" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="update_by"  property="updateBy" />
+    <result column="del_flag"  property="delFlag" />
+    <result column="pk_org"  property="pkOrg" />
+  </resultMap>
+</mapper>

+ 12 - 0
src/main/java/org/jeecg/modules/archives/mapper/xml/ProjectManageBusinessOtherMapper.xml

@@ -0,0 +1,12 @@
+<?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="org.jeecg.modules.archives.mapper.ProjectManageBusinessOtherMapper">
+    <update id="deleteBatch">
+        UPDATE project_manage_business_other
+        SET del_flag = '1'
+        WHERE 1 = 1 AND id IN
+        <foreach collection="others" separator="," item="other" open="(" close=")">
+            #{other.id}
+        </foreach>
+    </update>
+</mapper>

+ 19 - 0
src/main/java/org/jeecg/modules/archives/service/ProjectManageArchivesAndBusinessService.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.archives.service;
+
+import org.jeecg.modules.archives.entity.ProjectManageArchivesAndBusiness;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * @Description: 项目档案--收款信息表
+ * @author: jeecg-boot
+ * @date2021-02-24
+ * @version: V1.0
+ */
+public interface ProjectManageArchivesAndBusinessService extends IService<ProjectManageArchivesAndBusiness> {
+    /**
+     * @desc 批量删除(逻辑删除)
+     */
+    void deleteBatch(List<ProjectManageArchivesAndBusiness> businessList);
+}

+ 33 - 0
src/main/java/org/jeecg/modules/archives/service/ProjectManageArchivesService.java

@@ -0,0 +1,33 @@
+package org.jeecg.modules.archives.service;
+
+import org.jeecg.common.dto.archives.ProArchivesAddReqDTO;
+import org.jeecg.common.dto.archives.ProArchivesAddRespDTO;
+import org.jeecg.modules.archives.entity.ProjectManageArchives;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: project_manage_archives
+ * @author: jeecg-boot
+ * @date2021-02-24
+ * @version: V1.0
+ */
+public interface ProjectManageArchivesService extends IService<ProjectManageArchives> {
+    /**
+     * @desc 新增
+     */
+    void add(ProArchivesAddReqDTO reqDTO) throws Exception;
+    /**
+     * @desc 新增
+     */
+    boolean edit(ProArchivesAddReqDTO reqDTO);
+
+    /**
+     * @desc 项目档案主子表查询接口
+     */
+    ProArchivesAddRespDTO getListById(ProjectManageArchives projectManageArchives);
+
+    /**
+     * @desc 通过id删除项目档案
+     */
+    boolean deleteById(ProjectManageArchives projectManageArchives);
+}

+ 20 - 0
src/main/java/org/jeecg/modules/archives/service/ProjectManageBusinessOtherService.java

@@ -0,0 +1,20 @@
+package org.jeecg.modules.archives.service;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.jeecg.modules.archives.entity.ProjectManageBusinessOther;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 项目档案--计划表
+ * @author: jeecg-boot
+ * @date2021-02-24
+ * @version: V1.0
+ */
+@Mapper
+public interface ProjectManageBusinessOtherService extends IService<ProjectManageBusinessOther> {
+    /**
+     * @desc 批量删除(逻辑删除)
+     */
+    void deleteBatch(List<ProjectManageBusinessOther> businessOtherList);
+}

+ 32 - 0
src/main/java/org/jeecg/modules/archives/service/impl/ProjectManageArchivesAndBusinessServiceImpl.java

@@ -0,0 +1,32 @@
+package org.jeecg.modules.archives.service.impl;
+
+import org.jeecg.modules.archives.entity.ProjectManageArchivesAndBusiness;
+import org.jeecg.modules.archives.mapper.ProjectManageArchivesAndBusinessMapper;
+import org.jeecg.modules.archives.service.ProjectManageArchivesAndBusinessService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import java.util.List;
+
+/**
+ * @Description: 项目档案--收款信息表
+ * @author: jeecg-boot
+ * @date2021-02-24
+ * @version: V1.0
+ */
+@Service
+@Transactional
+public class ProjectManageArchivesAndBusinessServiceImpl extends ServiceImpl<ProjectManageArchivesAndBusinessMapper, ProjectManageArchivesAndBusiness> implements ProjectManageArchivesAndBusinessService {
+
+    @Autowired
+    private ProjectManageArchivesAndBusinessMapper projectManageArchivesAndBusinessMapper;
+
+    /**
+     * @desc 批量删除(逻辑删除)
+     */
+    @Override
+    public void deleteBatch(List<ProjectManageArchivesAndBusiness> businessList) {
+        projectManageArchivesAndBusinessMapper.deleteBatch(businessList);
+    }
+}

+ 328 - 0
src/main/java/org/jeecg/modules/archives/service/impl/ProjectManageArchivesServiceImpl.java

@@ -0,0 +1,328 @@
+package org.jeecg.modules.archives.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Lists;
+import org.jeecg.common.dto.archives.BsInfo;
+import org.jeecg.common.dto.archives.DeInfo;
+import org.jeecg.common.dto.archives.DeInfoRespDTO;
+import org.jeecg.common.dto.archives.IpInfo;
+import org.jeecg.common.dto.archives.IpInfoRespDTO;
+import org.jeecg.common.dto.archives.ProArchivesAddReqDTO;
+import org.jeecg.common.dto.archives.ProArchivesAddRespDTO;
+import org.jeecg.common.dto.archives.ProArchivesAndBusinessAddReqDTO;
+import org.jeecg.common.dto.archives.ProBusinessOtherAddReqDTO;
+import org.jeecg.common.dto.archives.ProBusinessOtherListRespDTO;
+import org.jeecg.common.dto.archives.SeInfo;
+import org.jeecg.common.dto.archives.SeInfoRespDTO;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.modules.archives.entity.ProjectManageArchives;
+import org.jeecg.modules.archives.entity.ProjectManageArchivesAndBusiness;
+import org.jeecg.modules.archives.entity.ProjectManageBusinessOther;
+import org.jeecg.modules.archives.mapper.ProjectManageArchivesMapper;
+import org.jeecg.modules.archives.service.ProjectManageArchivesAndBusinessService;
+import org.jeecg.modules.archives.service.ProjectManageArchivesService;
+import org.jeecg.modules.archives.service.ProjectManageBusinessOtherService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: project_manage_archives
+ * @author: jeecg-boot
+ * @date2021-02-24
+ * @version: V1.0
+ */
+@Service
+@Transactional
+public class ProjectManageArchivesServiceImpl extends ServiceImpl<ProjectManageArchivesMapper, ProjectManageArchives> implements ProjectManageArchivesService {
+    @Autowired
+    private ProjectManageArchivesMapper projectManageArchivesMapper;
+    @Autowired
+    private ProjectManageArchivesAndBusinessService projectManageArchivesAndBusinessService;
+    @Autowired
+    private ProjectManageBusinessOtherService projectManageBusinessOtherService;
+
+    /**
+     * @desc 新增
+     */
+    @Override
+    public void add(ProArchivesAddReqDTO reqDTO) throws Exception{
+        if(reqDTO == null){
+            throw new JeecgBootException("项目档案不能为空");
+        }
+        //保存项目档案数据
+        ProjectManageArchives projectManageArchives = new ProjectManageArchives(reqDTO);
+        save(projectManageArchives);
+
+        //保存子表数据
+        reqDTO.setId(projectManageArchives.getId());
+        saveArchivesAndBusiness(reqDTO);
+
+    }
+
+    /**
+     * @desc 编辑
+     */
+    @Override
+    public boolean edit(ProArchivesAddReqDTO reqDTO) {
+        //修改项目档案数据
+        ProjectManageArchives projectManageArchives = new ProjectManageArchives(reqDTO);
+        projectManageArchives.setId(reqDTO.getId());
+        updateById(projectManageArchives);
+
+        //逻辑删除 相关子表
+        deleteArchivesAndBusiness(reqDTO.getId());
+
+        //保存子表数据
+        saveArchivesAndBusiness(reqDTO);
+        return true;
+    }
+
+    /**
+     * @desc 根据id查询项目档案主子表
+     */
+    @Override
+    public ProArchivesAddRespDTO getListById(ProjectManageArchives projectManageArchives) {
+        ProArchivesAddRespDTO respDTO = new ProArchivesAddRespDTO(projectManageArchives);
+        QueryWrapper<ProjectManageArchivesAndBusiness> queryWrapper = new QueryWrapper();
+        queryWrapper.eq("del_flag","0");
+        queryWrapper.eq("pro_archives_id",projectManageArchives.getId());
+        List<ProjectManageArchivesAndBusiness>  businessList = projectManageArchivesAndBusinessService.list(queryWrapper);
+
+        QueryWrapper<ProjectManageBusinessOther> otherQueryWrapper = new QueryWrapper();
+        otherQueryWrapper.eq("del_flag","0");
+        otherQueryWrapper.eq("pro_archives_id",projectManageArchives.getId());
+        List<ProjectManageBusinessOther>  otherList = projectManageBusinessOtherService.list(otherQueryWrapper);
+        Map<Integer, List<ProjectManageBusinessOther>> otherMap = otherList.stream().collect(Collectors.groupingBy(ProjectManageBusinessOther :: getPlanType));
+
+        setRespDTO(respDTO, businessList, otherMap);
+
+        return  respDTO;
+    }
+
+    /**
+     * @desc 通过id删除项目档案
+     */
+    @Override
+    public boolean deleteById(ProjectManageArchives projectManageArchives) {
+        updateById(projectManageArchives);
+        //逻辑删除 相关子表
+        deleteArchivesAndBusiness(projectManageArchives.getId());
+        return true;
+    }
+
+
+
+    /**
+     * @desc 设置里程碑数据
+     */
+    private void setRespDTO(ProArchivesAddRespDTO respDTO, List<ProjectManageArchivesAndBusiness> businessList, Map<Integer, List<ProjectManageBusinessOther>> otherMap) {
+        respDTO.setBsInfo(new BsInfo(getBsInfoData(businessList, 1)));
+        respDTO.setIpInfo(new IpInfoRespDTO(getBsInfoData(businessList, 2), getPlanList(otherMap.get(2))));
+        respDTO.setDeInfo(new DeInfoRespDTO(getBsInfoData(businessList, 3), getPlanList(otherMap.get(3))));
+        respDTO.setSeInfo(new SeInfoRespDTO(getBsInfoData(businessList, 4), getPlanList(otherMap.get(4))));
+    }
+
+    /**
+     * @desc 将里程碑计划数据转成树状结构
+     */
+    private List<ProBusinessOtherListRespDTO> getPlanList(List<ProjectManageBusinessOther> otherList) {
+        List<ProBusinessOtherListRespDTO> resp = Lists.newArrayList();
+        //根据parentId分组
+        Map<String, List<ProjectManageBusinessOther>> postMap = otherList.stream().collect(Collectors.groupingBy(ProjectManageBusinessOther :: getParentId));
+        List<ProjectManageBusinessOther>  baseArchivesMilestones = postMap.get("0");
+        if(CollectionUtils.isEmpty(baseArchivesMilestones)){
+            return null;
+        }
+        for(ProjectManageBusinessOther other : baseArchivesMilestones){
+            ProBusinessOtherListRespDTO respDTO = new ProBusinessOtherListRespDTO(other);
+            respDTO.setChildren(getChildes(otherList, respDTO.getKey(), postMap));
+            //判断是否为末节点
+            List<ProjectManageBusinessOther> posts = postMap.get(respDTO.getKey());
+            if(CollectionUtils.isEmpty(posts)){
+                respDTO.setIsLeaf(true);
+            }
+            resp.add(respDTO);
+        }
+        return resp;
+    }
+
+    /**
+     * @desc 获取子节点数据
+     */
+    private List<ProBusinessOtherListRespDTO> getChildes(List<ProjectManageBusinessOther> list, String key, Map<String, List<ProjectManageBusinessOther>> postMap) {
+        List<ProBusinessOtherListRespDTO> resp = Lists.newArrayList();
+        for(ProjectManageBusinessOther other : list){
+            if(other.getParentId().equals(key)){
+                ProBusinessOtherListRespDTO respDTO = new ProBusinessOtherListRespDTO(other);
+                respDTO.setChildren(getChildes(list, respDTO.getKey(), postMap));
+                //判断是否为末节点
+                List<ProjectManageBusinessOther> posts = postMap.get(respDTO.getKey());
+                if(CollectionUtils.isEmpty(posts)){
+                    respDTO.setIsLeaf(true);
+                }
+                resp.add(respDTO);
+            }
+        }
+        return resp;
+    }
+
+    /**
+     * @desc 获取里程碑数据
+     */
+    private List<ProArchivesAndBusinessAddReqDTO> getBsInfoData(List<ProjectManageArchivesAndBusiness> businessList, int planType) {
+        List<ProArchivesAndBusinessAddReqDTO> reqDTOS = Lists.newArrayList();
+        for(ProjectManageArchivesAndBusiness business : businessList){
+           int currentPlanType = business.getPlanType();
+            if(planType == currentPlanType){
+                reqDTOS.add(new ProArchivesAndBusinessAddReqDTO(business));
+            }
+        }
+        return reqDTOS;
+    }
+
+    /**
+     * @desc 逻辑删除 子表
+     */
+    private void deleteArchivesAndBusiness(String id) {
+        //删除项目档案--里程碑信息表
+        QueryWrapper<ProjectManageArchivesAndBusiness> businessQueryWrapper = new QueryWrapper<>();
+        businessQueryWrapper.eq("del_flag", 0).eq("pro_archives_id", id);
+        List<ProjectManageArchivesAndBusiness> businessList = projectManageArchivesAndBusinessService.list(businessQueryWrapper);
+        if(!CollectionUtils.isEmpty(businessList)){
+            projectManageArchivesAndBusinessService.deleteBatch(businessList);
+        }
+        //删除项目档案--计划表
+        QueryWrapper<ProjectManageBusinessOther> archivesAndBusinessQueryWrapper = new QueryWrapper<>();
+        archivesAndBusinessQueryWrapper.eq("del_flag", 0).eq("pro_archives_id", id);
+        List<ProjectManageBusinessOther>  businessOtherList = projectManageBusinessOtherService.list(archivesAndBusinessQueryWrapper);
+        if(!CollectionUtils.isEmpty(businessOtherList)){
+            projectManageBusinessOtherService.deleteBatch(businessOtherList);
+        }
+    }
+
+    /**
+     * @desc 添加项目档案--商务,实施,开发,服务的数据
+     */
+    private void saveArchivesAndBusiness(ProArchivesAddReqDTO reqDTO) {
+        //添加 项目档案—商务
+        saveBsInfo(reqDTO);
+        //添加 项目档案—实施
+        saveIpInfo(reqDTO);
+        //添加 项目档案—开发
+        saveDeInfo(reqDTO);
+        //添加 项目档案—服务
+        saveSeInfo(reqDTO);
+    }
+
+    //添加 项目档案—商务
+    private void saveBsInfo(ProArchivesAddReqDTO reqDTO){
+        BsInfo bsInfo = reqDTO.getBsInfo();
+        if(bsInfo == null){
+            throw new JeecgBootException("项目档案—商务的数据不能为空");
+        }
+        List<ProArchivesAndBusinessAddReqDTO> mileList = bsInfo.getMileList();
+        if(CollectionUtils.isEmpty(mileList)){
+            throw new JeecgBootException("项目档案—商务的list数据不能为空");
+        }
+        //保存里程碑数据
+        saveMileData( mileList,  reqDTO, 1);
+    }
+
+    /**
+     * @desc 添加 项目档案—实施
+     */
+    private void saveIpInfo(ProArchivesAddReqDTO reqDTO) {
+        IpInfo ipInfo =reqDTO.getIpInfo();
+        if(ipInfo == null){
+            throw new JeecgBootException("项目档案—实施的数据不能为空");
+        }
+        List<ProArchivesAndBusinessAddReqDTO> mileList = ipInfo.getMileList();
+        if(CollectionUtils.isEmpty(mileList)){
+            throw new JeecgBootException("项目档案—实施的里程碑数据不能为空");
+        }
+        //保存里程碑数据
+        saveMileData(mileList, reqDTO, 2);
+
+        List<ProBusinessOtherAddReqDTO> planList = ipInfo.getPlanList();
+        if(CollectionUtils.isEmpty(planList)){
+            throw new JeecgBootException("项目档案—实施的里程碑计划数据不能为空");
+        }
+        //保存里程碑计划数据
+        saveMolePlanData(planList, reqDTO, 2);
+
+    }
+
+     /** 
+       * @desc 添加 项目档案—开发
+       */
+    private void saveDeInfo(ProArchivesAddReqDTO reqDTO) {
+        DeInfo deInfo =reqDTO.getDeInfo();
+        if(deInfo == null){
+            throw new JeecgBootException("项目档案—开发的数据不能为空");
+        }
+        List<ProArchivesAndBusinessAddReqDTO> mileList = deInfo.getMileList();
+        if(CollectionUtils.isEmpty(mileList)){
+            throw new JeecgBootException("项目档案—开发的里程碑数据不能为空");
+        }
+       //保存里程碑数据
+        saveMileData(mileList, reqDTO, 3);
+
+        List<ProBusinessOtherAddReqDTO> planList = deInfo.getPlanList();
+        if(CollectionUtils.isEmpty(planList)){
+            throw new JeecgBootException("项目档案—开发的里程碑计划数据不能为空");
+        }
+        //保存里程碑计划数据
+        saveMolePlanData(planList, reqDTO, 3);
+    }
+
+    /**
+     * @desc 添加 项目档案—服务
+     */
+    private void saveSeInfo(ProArchivesAddReqDTO reqDTO) {
+        SeInfo seInfo =reqDTO.getSeInfo();
+        if(seInfo == null){
+            throw new JeecgBootException("项目档案—服务的数据不能为空");
+        }
+        List<ProArchivesAndBusinessAddReqDTO> mileList = seInfo.getMileList();
+        if(CollectionUtils.isEmpty(mileList)){
+            throw new JeecgBootException("项目档案—服务的里程碑数据不能为空");
+        }
+        //保存里程碑数据
+        saveMileData(mileList, reqDTO, 4);
+
+        List<ProBusinessOtherAddReqDTO> planList = seInfo.getPlanList();
+        if(CollectionUtils.isEmpty(planList)){
+            throw new JeecgBootException("项目档案—服务的里程碑计划数据不能为空");
+        }
+        //保存里程碑计划数据
+        saveMolePlanData(planList, reqDTO, 4);
+    }
+    /**
+     * @desc 保存里程碑数据
+     */
+    private void saveMileData(List<ProArchivesAndBusinessAddReqDTO> mileList, ProArchivesAddReqDTO reqDTO, Integer planType) {
+        List<ProjectManageArchivesAndBusiness> list = Lists.newArrayList();
+        for(ProArchivesAndBusinessAddReqDTO mile :  mileList) {
+            list.add(new ProjectManageArchivesAndBusiness(mile, reqDTO.getId(), planType, reqDTO.getPkOrg()));
+        }
+        projectManageArchivesAndBusinessService.saveBatch(list);
+    }
+
+    /**
+     * @desc 保存里程碑计划数据
+     */
+    private void saveMolePlanData(List<ProBusinessOtherAddReqDTO> planList, ProArchivesAddReqDTO reqDTO, Integer planType) {
+        List<ProjectManageBusinessOther> list = Lists.newArrayList();
+        for(ProBusinessOtherAddReqDTO plan :  planList) {
+            list.add(new ProjectManageBusinessOther(plan, reqDTO.getId(), planType, reqDTO.getPkOrg()));
+        }
+        projectManageBusinessOtherService.saveBatch(list);
+    }
+
+}

+ 32 - 0
src/main/java/org/jeecg/modules/archives/service/impl/projectManageBusinessOtherServiceImpl.java

@@ -0,0 +1,32 @@
+package org.jeecg.modules.archives.service.impl;
+
+import org.jeecg.modules.archives.entity.ProjectManageBusinessOther;
+import org.jeecg.modules.archives.mapper.ProjectManageBusinessOtherMapper;
+import org.jeecg.modules.archives.service.ProjectManageBusinessOtherService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @Description: 项目档案--计划表
+ * @author: jeecg-boot
+ * @date2021-02-24
+ * @version: V1.0
+ */
+@Service
+@Transactional
+public class projectManageBusinessOtherServiceImpl extends ServiceImpl<ProjectManageBusinessOtherMapper, ProjectManageBusinessOther> implements ProjectManageBusinessOtherService {
+    @Autowired
+    private ProjectManageBusinessOtherMapper projectManageBusinessOtherMapper;
+
+    /**
+     * @desc 批量删除(逻辑删除)
+     */
+    @Override
+    public void deleteBatch(List<ProjectManageBusinessOther> businessOtherList) {
+        projectManageBusinessOtherMapper.deleteBatch(businessOtherList);
+    }
+}