Browse Source

Merge remote-tracking branch 'origin/master'

liuyc 2 years ago
parent
commit
23ee362f74
16 changed files with 281 additions and 7 deletions
  1. 5 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/entity/ArchiveInspection.java
  2. 1 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ArchiveFileVO.java
  3. 36 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  4. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ControlProjectInfoVO.java
  5. 14 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO.java
  6. 22 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO2.java
  7. 2 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveInspectionInfoController.java
  8. 1 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchiveInspectionMapper.xml
  9. 6 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml
  10. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ArchiveFileServiceImpl.java
  11. 40 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/MetadataClassificationServiceImpl.java
  12. 42 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java
  13. 9 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  14. 27 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  15. 7 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  16. 65 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

+ 5 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/entity/ArchiveInspection.java

@@ -48,4 +48,9 @@ public class ArchiveInspection extends BaseEntity {
      */
     private String archiveName;
 
+    /**
+     * 来源 0是巡检
+     * */
+    private Integer sourceType;
+
 }

+ 1 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ArchiveFileVO.java

@@ -90,7 +90,7 @@ public class ArchiveFileVO extends ArchiveFile {
      */
     private Integer isUpdateUrl;
     //所有的意见
-    private String allOpinion;
+    private String allopinion;
     /**
      * 案卷题名
      */

+ 36 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java

@@ -11,6 +11,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.Date;
 
 /**
  * @Param
@@ -76,6 +77,40 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "之前是否审批通过")
     private String approve;
 
-
+    @ApiModelProperty(value = "计划任务类型")
+    private Integer planTaskType;
+
+    @ApiModelProperty(value = "计划任务描述")
+    private String planTaskDesc;
+
+    @ApiModelProperty(value = "计划完成指标")
+    private String planTarget;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "计划开始日期")
+    private Date planStartDate;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "计划结束日期")
+    private Date planEndDate;
+
+    @ApiModelProperty(value = "计划天数")
+    private BigDecimal planDays;
+
+    @ApiModelProperty(value = "关联回款")
+    private Long contractReturnedId;
+
+    @ApiModelProperty(value = "父id")
+    private Long parentId;
 
 }

+ 3 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ControlProjectInfoVO.java

@@ -28,6 +28,9 @@ public class ControlProjectInfoVO extends ControlProjectInfo {
     private String implementPrincipalName;
     @ApiModelProperty(value = "维护负责人名称")
     private String maintainPrincipalName;
+
+    @ApiModelProperty(value = "项目当前进程名")
+    private String CurrentProcessName;
     @ApiModelProperty(value = "项目进程集合")
     private List<ProjectProcessVO> projectProcessList;
 }

+ 14 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO.java

@@ -7,6 +7,7 @@ import org.springblade.control.entity.ProjectCostBudget;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Param
@@ -16,6 +17,8 @@ import java.util.List;
 @Data
 @EqualsAndHashCode(callSuper = true)
 public class ProjectCostBudgetVO extends ProjectCostBudget {
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
 
     @ApiModelProperty(value = "费用分类值")
     private String costTypeValue;
@@ -32,4 +35,15 @@ public class ProjectCostBudgetVO extends ProjectCostBudget {
     @ApiModelProperty(value = "岗位类型值")
     private String postTypeValue;
 
+    @ApiModelProperty(value = "计划施工单位")
+    private Map<Integer,List<ProjectCostBudgetVO2>> buildUnit;
+
+    @ApiModelProperty(value = "计划监理单位")
+    private Map<Integer,List<ProjectCostBudgetVO2>> supervisorUnit;
+
+    @ApiModelProperty(value = "计划建设单位")
+    private Map<Integer,List<ProjectCostBudgetVO2>> constructUnit;
+
+
+
 }

+ 22 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO2.java

@@ -0,0 +1,22 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.control.entity.ProjectCostBudget;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Param  带子计划
+ * @Author wangwl
+ * @Date 2023/6/8 10:30
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProjectCostBudgetVO2 extends ProjectCostBudget {
+    @ApiModelProperty(value = "子计划")
+    private List<ProjectCostBudget> childrenList;
+
+}

+ 2 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveInspectionInfoController.java

@@ -48,7 +48,7 @@ public class ArchiveInspectionInfoController {
         }
         archiveInspection.setTenantId(AuthUtil.getTenantId());
         archiveInspection.setUserId(AuthUtil.getUserId());
-
+        archiveInspection.setSourceType(0);
         boolean success = archiveInspectionService.save(archiveInspection);
         if(success){
             archiveFileClient.updateRectificationById(archiveInspection.getFileId(),1);
@@ -80,6 +80,7 @@ public class ArchiveInspectionInfoController {
             archiveInspection.setId(null);
             return this.addArchiveInspection(archiveInspection);
         }
+        archiveInspectionMod.setSourceType(0);
         boolean b = archiveInspectionService.saveOrUpdate(archiveInspectionMod);
         if(b){
             archiveFileClient.updateRectificationById(archiveInspection.getFileId(),1);

+ 1 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchiveInspectionMapper.xml

@@ -12,6 +12,7 @@
         <result column="file_id" property="fileId" />
         <result column="archive_id" property="archiveId" />
         <result column="archive_name" property="archiveName" />
+        <result column="source_type" property="sourceType" />
     </resultMap>
     <!-- 示例:查询所有记录 -->
     <select id="selectAll" resultType="org.springblade.archive.entity.ArchiveInspection">

+ 6 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml

@@ -85,6 +85,9 @@
         <if test="vo.archiveId != null and vo.archiveId != ''">
             and u.archive_id = #{vo.archiveId}
         </if>
+        <if test="vo.rectification != null and vo.rectification != ''">
+            and u.rectification = #{vo.rectification}
+        </if>
         <choose>
             <when test="vo.isArchive != null and vo.isArchive != ''">
                 and u.is_auto_file = #{vo.isArchive}
@@ -132,6 +135,9 @@
         <if test="vo.archiveId != null and vo.archiveId != ''">
             and u.archive_id = #{vo.archiveId}
         </if>
+        <if test="vo.rectification != null and vo.rectification != ''">
+            and u.rectification = #{vo.rectification}
+        </if>
         <choose>
             <when test="vo.isArchive != null and vo.isArchive != ''">
                 and u.is_auto_file = #{vo.isArchive}

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ArchiveFileServiceImpl.java

@@ -85,7 +85,7 @@ public class ArchiveFileServiceImpl extends BaseServiceImpl<ArchiveFileMapper, A
                             vos.setArchiveName(map.get("ArchiveName").toString());
                         }
                         if (map.get("allOpinion") != null) {
-                            vos.setAllOpinion(map.get("allOpinion").toString());
+                            vos.setAllopinion(map.get("allOpinion").toString());
                         }
                     }
 

+ 40 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/MetadataClassificationServiceImpl.java

@@ -26,6 +26,8 @@ import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.feign.ArchiveTreeContractClient;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.vo.WbsTreeVO;
+import org.springblade.system.entity.DictBiz;
+import org.springblade.system.feign.IDictBizClient;
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
@@ -42,6 +44,7 @@ public class MetadataClassificationServiceImpl
     private final ContractClient contractClient;
     private final ArchiveAutoClient archiveAutoClient;
     private final JdbcTemplate jdbcTemplate;
+    private final IDictBizClient iDictBizClient;
 
     @Override
     public MetadataClassification classificationDetail(Integer type) {
@@ -180,17 +183,49 @@ public class MetadataClassificationServiceImpl
     public List<MetadataClassificationVO> getMetadataFile(Long fileId) {
         List<HashMap<String, Object>> metadataMapList = baseMapper.getMetadaFileByFileId(fileId);
         if (metadataMapList != null && metadataMapList.size() > 0) {
+            Map<String,String> storageTypeMap = new HashMap<>();
+            storageTypeMap.put("1","a");
+            storageTypeMap.put("2","b");
+            storageTypeMap.put("3","c");
+            storageTypeMap.put("4","d");
+            storageTypeMap.put("5","e");
+            storageTypeMap.put("7","f");
+            storageTypeMap.put("6","g");
+            storageTypeMap.put("8","h");
+            storageTypeMap.put("9","i");
             Map<String, Object> map = metadataMapList.get(0);
             QueryWrapper<MetadataClassification> metadata = new QueryWrapper<>();
             metadata.lambda().eq(MetadataClassification::getIsDeleted, 0);
             List<MetadataClassification> metadataClassifications = baseMapper.selectList(metadata);
             if (metadataClassifications != null && metadataClassifications.size() > 0) {
+                ArchiveFile byId = iArchiveFileService.getById(fileId);
+                ArchiveTreeContract archiveTreeContractById = archiveTreeContractClient.getArchiveTreeContractById(Long.parseLong(byId.getNodeId()));
+                String storageType ="";
+                if(archiveTreeContractById.getStorageType() != null) {
+                    storageType = storageTypeMap.get(archiveTreeContractById.getStorageType().toString());
+                }
+                List<MetadataClassificationVO> list = new ArrayList<>();
                 List<MetadataClassificationVO> metadataClassificationVOS = Objects.requireNonNull(BeanUtil.copy(metadataClassifications, MetadataClassificationVO.class));
                 for (MetadataClassificationVO vo : metadataClassificationVOS) {
-                    vo.setKeyValue(map.get(vo.getFieldKey()) == null ? null : map.get(vo.getFieldKey()).toString());
+                    if(!vo.getFileStorageType().contains(storageType)){
+                        continue;
+                    }
+                    if(vo.getContainerName().equals("生成方式")){
+                        vo.setKeyValue(map.get(vo.getFieldKey()) == null ? null : map.get(vo.getFieldKey()).toString().equals("1")?"原生":"数字化");
+                    }else if(vo.getContainerName().equals("密级") && map.get(vo.getFieldKey()) != null ){
+                        List<DictBiz> sheetSourceList = this.iDictBizClient.getList("security_level", "notRoot").getData();
+                        sheetSourceList.forEach(source -> {
+                            if( source.getDictKey().equals(map.get(vo.getFieldKey()))){
+                                vo.setKeyValue(source.getDictValue());
+                            }
+                        });
+                    }else{
+                        vo.setKeyValue(map.get(vo.getFieldKey()) == null ? null : map.get(vo.getFieldKey()).toString());
+                    }
                     vo.setFileId(fileId);
+                    list.add(vo);
                 }
-                return metadataClassificationVOS;
+                return list;
             }
         }
         return null;
@@ -287,6 +322,9 @@ public class MetadataClassificationServiceImpl
             if (byId.getArchiveId() != null) {
                 ArchivesAuto archivesAuto = archiveAutoClient.saveArchiveAutoById(byId.getArchiveId());
                 keyValue.put("密级", archivesAuto.getSecretLevel());
+
+                /**档号**/
+                keyValue.put("档号",archivesAuto.getFileNumber());
             }
 
 

+ 42 - 1
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java

@@ -10,6 +10,7 @@ import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.dto.ProjectCostBudgetDTO;
 import org.springblade.control.entity.ProjectCostBudget;
 import org.springblade.control.service.IProjectCostBudgetService;
+import org.springblade.control.vo.ProjectCostBudgetVO;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
@@ -22,9 +23,49 @@ import org.springframework.web.bind.annotation.*;
 @RestController
 @AllArgsConstructor
 @RequestMapping("/projectCostBudget")
-@Api(value = "项目成本测算接口", tags = "项目成本测算接口")
+@Api(value = "计划预算接口", tags = "计划预算接口")
 public class ProjectCostBudgetController {
 
     private final IProjectCostBudgetService budgetService;
 
+    /**
+     * 分页获取计划列表
+     */
+    @GetMapping("/page")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "分页获取计划列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "queryValue", value = "搜索值", required = false),
+    })
+    public R page(ControlProjectInfoDTO dto, Query query){
+        return R.data(budgetService.page(dto,query));
+    }
+
+    /**
+     * 获取项目计划
+     */
+    @GetMapping("/getPlanByProjectId")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "获取项目计划")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "项目id", required = true),
+    })
+    public R getPlanByProjectId(Long id){
+        return R.data(budgetService.getPlanByProjectId(id));
+    }
+
+    /**
+     * 编辑项目计划
+     */
+    @PostMapping("/updatePlan")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "获取项目计划")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "项目id", required = true),
+    })
+    public R updatePlan(@RequestBody ProjectCostBudgetVO vo){
+        budgetService.updatePlan(vo);
+        return R.success("保存成功");
+    }
+
 }

+ 9 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java

@@ -5,9 +5,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.control.dto.ControlContractInfoDTO;
+import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.entity.*;
 import org.springblade.control.vo.ControlContractInfoVO;
+import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.control.vo.ProjectCostBudgetVO;
+import org.springblade.control.vo.ProjectCostBudgetVO2;
+import org.springblade.core.mp.support.Query;
 
 import java.util.List;
 import java.util.Map;
@@ -26,4 +30,9 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
 
     ProjectCostBudgetStats getBudgetTotalByProjectId(@Param("projectId") Long projectId);
 
+    ControlProjectInfoVO page(IPage page,@Param("dto") ControlProjectInfoDTO dto);
+
+    List<ProjectCostBudgetVO2> getApprovePlan(@Param("id") Long id);
+
+    List<ProjectCostBudget> getAllChildrenPlan(@Param("id") Long id);
 }

+ 27 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -31,6 +31,33 @@
                 (select IFNULL(SUM(budget_count_money),0) FROM c_project_cost_budget WHERE project_id = #{projectId} and cost_type = 6) as outsourceCostTotal,
                 (select IFNULL(SUM(budget_count_money),0) FROM c_project_cost_budget WHERE project_id = #{projectId}) as projectCostTotal
     </select>
+    <select id="page" resultType="org.springblade.control.vo.ControlProjectInfoVO">
+        select
+            pi.*,
+            (select dict_name  from c_dict_info WHERE code = 'project_type' AND dict_value = pi.project_type) as projectTypeValue,
+            (select dict_name  from c_dict_info WHERE code = 'project_server_type' AND dict_value = pi.project_server_type) as projectServerTypeValue,
+            IFNULL((select cpp.name from c_project_process cpp WHERE cpp.project_id = pi.id and cpp.start_time &lt;= NOW() order by cpp.sort desc limit 1),
+                (select cpp.name from c_project_process cpp WHERE cpp.project_id = pi.id order by cpp.sort limit 1)) as CurrentProcessName
+        from c_control_project_info pi
+        WHERE 1=1
+        <if test="dto.projectType != null and dto.projectType != ''">
+            and pi.project_type = #{dto.projectType}
+        </if>
+        <if test="dto.projectServerType != null and dto.projectServerType != ''">
+            and pi.project_server_type = #{dto.projectServerType}
+        </if>
+        <if test="dto.queryValue != null and dto.queryValue != ''">
+            and pi.name like concat('%', #{dto.queryValue}, '%')
+        </if>
+        and id in (select cbs.project_id from c_project_cost_budget_stats cbs WHERE cbs.approve = 1)
+
+    </select>
+    <select id="getApprovePlan" resultType="org.springblade.control.vo.ProjectCostBudgetVO2">
+        SELECT * FROM c_project_cost_budget  WHERE project_id = #{id} AND  approve = 1
+    </select>
+    <select id="getAllChildrenPlan" resultType="org.springblade.control.entity.ProjectCostBudget">
+        SELECT * FROM c_project_cost_budget  WHERE project_id = #{id} AND parentId is not null
+    </select>
 
 
 </mapper>

+ 7 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -30,4 +30,11 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     List<ProjectCostBudget> budgetListByProjectId(Long projectId);
 
     void deleteByProjectId(Long projectId);
+
+    //分页获取列表
+    ControlProjectInfoVO page(ControlProjectInfoDTO dto, Query query);
+
+    ProjectCostBudgetVO getPlanByProjectId(Long id);
+
+    void updatePlan(ProjectCostBudgetVO vo);
 }

+ 65 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -19,6 +19,7 @@ import org.springblade.control.service.IProjectInfoService;
 import org.springblade.control.service.IProjectProcessService;
 import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.control.vo.ProjectCostBudgetVO;
+import org.springblade.control.vo.ProjectCostBudgetVO2;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Query;
 import org.springframework.beans.BeanUtils;
@@ -29,6 +30,8 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @Param
@@ -39,6 +42,7 @@ import java.util.Map;
 @AllArgsConstructor
 public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBudgetMapper, ProjectCostBudget> implements IProjectCostBudgetService {
 
+    private final IProjectInfoService projectInfoService;
     /**
      * 批量新增或修改预算
      * @param dto
@@ -112,6 +116,67 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         baseMapper.removeOldBudget(projectId);
     }
 
+    @Override
+    public ControlProjectInfoVO page(ControlProjectInfoDTO dto, Query query) {
+        IPage page = new Page(query.getCurrent(), query.getSize());
+        return baseMapper.page(page,dto);
+    }
+
+    /**
+     * 获取项目计划
+     * @param id
+     * @return
+     */
+    @Override
+    public ProjectCostBudgetVO getPlanByProjectId(Long id) {
+        //获取项目信息
+        ControlProjectInfo projectInfo = projectInfoService.getById(id);
+        ProjectCostBudgetVO vo = new ProjectCostBudgetVO();
+        vo.setProjectName(projectInfo.getName());
+        //获取项目下所有已审批的计划
+        List<ProjectCostBudgetVO2> list = baseMapper.getApprovePlan(id);
+        //获取项目下所有的子计划
+        List<ProjectCostBudget> childrenList = baseMapper.getAllChildrenPlan(id);
+        //把子计划按parentId分组
+        Map<Long, List<ProjectCostBudget>> listMap = childrenList.parallelStream()
+                .collect(Collectors.groupingBy(ProjectCostBudget::getParentId));
+        Set<Long> key = listMap.keySet();
+        //把子计划插入计划里
+        for (ProjectCostBudgetVO2 vo2 : list) {
+            if (key.contains(vo2.getId())){
+                vo2.setChildrenList(listMap.get(vo2.getId()));
+            }
+        }
+        //根据单位分类
+        Map<Integer, List<ProjectCostBudgetVO2>> map = list.parallelStream()
+                .collect(Collectors.groupingBy(ProjectCostBudgetVO2::getUnitType));
+        //在相同单位下,根据部门分类,1施工,2监理,3建设
+        if (map.get(1) != null && map.get(1).size() > 0){
+            Map<Integer, List<ProjectCostBudgetVO2>> build = map.get(1).parallelStream()
+                    .collect(Collectors.groupingBy(ProjectCostBudgetVO2::getCostType));
+            vo.setBuildUnit(build);
+        }
+        if (map.get(2) != null && map.get(2).size() > 0){
+            Map<Integer, List<ProjectCostBudgetVO2>> supervisor = map.get(2).parallelStream()
+                    .collect(Collectors.groupingBy(ProjectCostBudgetVO2::getCostType));
+            vo.setSupervisorUnit(supervisor);
+        }
+        if (map.get(3) != null && map.get(3).size() > 0){
+            Map<Integer, List<ProjectCostBudgetVO2>> construct = map.get(3).parallelStream()
+                    .collect(Collectors.groupingBy(ProjectCostBudgetVO2::getCostType));
+            vo.setConstructUnit(construct);
+        }
+        return vo;
+    }
+
+    /**
+     * 编辑项目计划
+     */
+    @Override
+    public void updatePlan(ProjectCostBudgetVO vo) {
+
+    }
+
     /**
      * 统计一行的几个总金额
      */