|
@@ -4,16 +4,24 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springblade.common.utils.SnowFlakeUtil;
|
|
|
import org.springblade.control.dto.ControlProjectInfoDTO;
|
|
|
+import org.springblade.control.entity.ProjectCostBudget;
|
|
|
import org.springblade.control.entity.ProjectProcess;
|
|
|
import org.springblade.control.mapper.ProjectProcessMapper;
|
|
|
+import org.springblade.control.service.IProjectCostBudgetService;
|
|
|
import org.springblade.control.service.IProjectProcessService;
|
|
|
import org.springblade.control.vo.ProjectProcessVO;
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
|
|
+import org.springblade.system.entity.TopMenu;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @Param
|
|
@@ -24,6 +32,7 @@ import java.util.List;
|
|
|
@AllArgsConstructor
|
|
|
public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMapper, ProjectProcess> implements IProjectProcessService {
|
|
|
private final ProjectProcessMapper processMapper;
|
|
|
+ private final IProjectCostBudgetService budgetService;
|
|
|
|
|
|
/**
|
|
|
* 新增项目时保存进程
|
|
@@ -109,6 +118,48 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMap
|
|
|
*/
|
|
|
@Override
|
|
|
public List<ProjectProcessVO> processService(Long projectId, Integer costType) {
|
|
|
+ //获取当前项目所有项目环节
|
|
|
+ List<ProjectProcessVO> list = processMapper.getProjectProcess(projectId);
|
|
|
+ //获取项目具体部门所有已闭环的任务
|
|
|
+ List<ProjectCostBudget> budgets = budgetService.getProjectAllFinishedTask(projectId,costType);
|
|
|
+ if (budgets != null || budgets.size() > 0){
|
|
|
+ //获取项目环节的set集合
|
|
|
+ Set<Long> set = budgets.stream().map(l -> l.getProjectProcess()).collect(Collectors.toSet());
|
|
|
+ //根据项目环节分组
|
|
|
+ Map<Long, List<ProjectCostBudget>> map = budgets.parallelStream()
|
|
|
+ .collect(Collectors.groupingBy(ProjectCostBudget::getProjectProcess));
|
|
|
+ //包含此环节就统计,不包含就跳出
|
|
|
+ for (ProjectProcessVO vo : list) {
|
|
|
+ if (set.contains(vo.getId())){
|
|
|
+ //设置参与
|
|
|
+ vo.setIsParticipate(1);
|
|
|
+ //时间成本统计总天数,人员投入统计总人数,成本支出统计当前环节总支出
|
|
|
+ List<ProjectCostBudget> budgetList = map.get(vo.getId());
|
|
|
+ BigDecimal costDisburse = new BigDecimal(0);
|
|
|
+ BigDecimal timeCost = new BigDecimal(0);
|
|
|
+ int staffTotal = budgetList.size();
|
|
|
+ for (ProjectCostBudget budget : budgetList) {
|
|
|
+ costDisburse = costDisburse.add(budget.getActualTotalMoney());
|
|
|
+ timeCost = timeCost.add(budget.getPracticalTaskDays());
|
|
|
+ }
|
|
|
+ //设置费用明细
|
|
|
+ List<ProjectProcessVO.costDetail> details = new ArrayList<>();
|
|
|
+ ProjectProcessVO.costDetail costDetail = new ProjectProcessVO.costDetail();
|
|
|
+ costDetail.setCostTypeValue("人工成本");
|
|
|
+ costDetail.setPrice(costDisburse);
|
|
|
+ costDetail.setTotal(costDisburse);
|
|
|
+ details.add(costDetail);
|
|
|
+ //目前环节费用的成本支出只统计了人工成本
|
|
|
+ vo.setCostDisburse(costDisburse);
|
|
|
+ vo.setTimeCost(timeCost);
|
|
|
+ vo.setStaffTotal(staffTotal);
|
|
|
+ vo.setCostDetails(details);
|
|
|
+ }else {
|
|
|
+ vo.setIsParticipate(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
return null;
|
|
|
}
|
|
|
}
|