浏览代码

任务统计所有接口

qianxb 2 年之前
父节点
当前提交
93bfe6d4ae
共有 15 个文件被更改,包括 355 次插入49 次删除
  1. 2 2
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  2. 20 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanFinishedRatioVO.java
  3. 41 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanStatisticVO2.java
  4. 0 27
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/RiskPlanByMonthOfYearVO.java
  5. 21 8
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java
  6. 11 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java
  7. 7 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  8. 28 5
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  9. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java
  10. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml
  11. 3 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  12. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java
  13. 4 4
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java
  14. 199 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  15. 9 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

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

@@ -79,8 +79,8 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "预算备注")
     private String budgetRemark;
 
-    @ApiModelProperty(value = "成本测算是否审批通过")
-    private String approve;
+    @ApiModelProperty(value = "成本测算是否审批通过,0未上报1已审批")
+    private Integer approve;
 
     @ApiModelProperty(value = "计划任务类型")
     private Integer planTaskType;

+ 20 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanFinishedRatioVO.java

@@ -0,0 +1,20 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Param  任务统计-任务完成率
+ * @Author wangwl
+ * @Date 2023/6/30 16:01
+ **/
+@Data
+public class PlanFinishedRatioVO {
+    @ApiModelProperty(value = "员工集合")
+    private List<String> userList;
+
+    @ApiModelProperty(value = "完成率集合")
+    private List<Integer> ratioList;
+}

+ 41 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanStatisticVO2.java

@@ -0,0 +1,41 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Param  门户普通权限,计划统计图-风险暂停计划
+ * @Author wangwl
+ * @Date 2023/6/30 14:32
+ **/
+@Data
+public class PlanStatisticVO2 {
+
+    @ApiModelProperty(value = "统计图集合")
+    private List<PlanStatisticVO> dataList;
+
+    @ApiModelProperty(value = "日期集合")
+    private List<String> dateList;
+
+    @ApiModelProperty(value = "风险计划集合")
+    private List<RiskPlan> riskPlans;
+
+    @Data
+    public static class RiskPlan {
+        @ApiModelProperty(value = "计划名称")
+        private String name;
+
+        @ApiModelProperty(value = "格式")
+        private String type;
+
+        @ApiModelProperty(value = "格式")
+        private String stack;
+
+        @ApiModelProperty(value = "计划数量")
+        private List<Integer> data;
+    }
+
+
+}

+ 0 - 27
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/RiskPlanByMonthOfYearVO.java

@@ -1,27 +0,0 @@
-package org.springblade.control.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @Param  任务统计-风险计划
- * @Author wangwl
- * @Date 2023/6/30 16:01
- **/
-@Data
-public class RiskPlanByMonthOfYearVO {
-    @ApiModelProperty(value = "计划名称")
-    private String name;
-
-    @ApiModelProperty(value = "格式")
-    private String type;
-
-    @ApiModelProperty(value = "格式")
-    private String stack;
-
-    @ApiModelProperty(value = "计划数量")
-    private List<Integer> data;
-
-}

+ 21 - 8
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java

@@ -10,10 +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.ControlProjectInfoVO;
-import org.springblade.control.vo.PlanStatisticVO;
-import org.springblade.control.vo.ProjectCostBudgetVO;
-import org.springblade.control.vo.ProjectCostBudgetVO3;
+import org.springblade.control.vo.*;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -146,13 +143,29 @@ public class ProjectCostBudgetController {
     }
 
     /**
-     * 任务统计-计划统计图
+     * 任务统计-计划统计图-风险暂停计划
      */
     @GetMapping("/MonthOfYearPlanOverview2")
     @ApiOperationSupport(order = 11)
-    @ApiOperation(value = "任务统计-计划统计图",notes = "有参数的计划统计图")
-    public R<List<PlanStatisticVO>> MonthOfYearPlanOverview2(Long deptId,Long UserId,LocalDate start,LocalDate end){
-        return R.data(budgetService.MonthOfYearPlanOverview2(deptId,UserId,start,end));
+    @ApiOperation(value = "任务统计-计划统计图-风险暂停计划",notes = "2张图的返回值都在其中")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "startDate", value = "开始日期", required = false),
+            @ApiImplicitParam(name = "endDate", value = "结束日期", required = false),
+            @ApiImplicitParam(name = "deptId", value = "部门id", required = false),
+            @ApiImplicitParam(name = "userId", value = "用户id", required = false),
+    })
+    public R<PlanStatisticVO2> MonthOfYearPlanOverview2(Long deptId, Long userId, String start, String end){
+        return R.data(budgetService.MonthOfYearPlanOverview2(deptId,userId,start,end));
+    }
+
+    /**
+     * 任务统计-任务完成率
+     */
+    @GetMapping("/planFinishedRatio")
+    @ApiOperationSupport(order = 11)
+    @ApiOperation(value = "任务统计-任务完成率")
+    public R<PlanFinishedRatioVO> planFinishedRatio(Long deptId, Long userId, String start, String end){
+        return R.data(budgetService.planFinishedRatio(deptId,userId,start,end));
     }
 
 

+ 11 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java

@@ -16,6 +16,7 @@ import org.springblade.control.vo.AllProjectStatsVO;
 import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.system.user.entity.User;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -145,4 +146,14 @@ public class ProjectInfoController {
         return R.data(projectInfoService.ProjectCostTypeStats(id));
     }
 
+    /**
+     * 获取实施负责人
+     */
+    @GetMapping("/getImplementUser")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "获取实施负责人")
+    public R<List<User>> getImplementUser() {
+        return R.data(projectInfoService.getImplementUser());
+    }
+
 }

+ 7 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java

@@ -9,11 +9,13 @@ import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.entity.*;
 import org.springblade.control.vo.*;
 import org.springblade.core.mp.support.Query;
+import org.springblade.system.user.entity.User;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @Param
@@ -68,5 +70,9 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
 
     List<ProjectCostBudget> getPlanPracticalCostByMonth(@Param("date") String date);
 
-    List<ProjectCostBudget> MonthOfYearPlanOverview2(@Param("deptId") Long deptId,@Param("userId") Long userId,@Param("start") LocalDate start,@Param("end") LocalDate end);
+    List<ProjectCostBudget> getPlanByDeptOrUserOrTime(@Param("deptId") Long deptId,@Param("userId") Long userId,@Param("start") LocalDate start,@Param("end") LocalDate end);
+
+    List<User> getAllEmployees(@Param("tenantId") String tenantId,@Param("deptId") Long deptId,@Param("userId") Long userId);
+
+    List<ProjectCostBudget> getPlanByDeptOrUserOrTime2(@Param("ids") Set<Long> ids, @Param("start") LocalDate start,@Param("end") LocalDate end);
 }

+ 28 - 5
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -191,11 +191,34 @@
             and DATE_FORMAT(pcb.plan_start_time ,'%Y-%m') = #{date}
         </if>
     </select>
-    <select id="MonthOfYearPlanOverview2" resultType="org.springblade.control.entity.ProjectCostBudget">
-        select pcb.*
-        from c_project_cost_budget pcb
-        where pcb.task_user = #{user} and pcb.is_deleted = 0
-            and DATE_FORMAT(pcb.plan_start_time,'%Y') = #{year} or DATE_FORMAT(pcb.plan_end_time,'%Y') = #{year}
+    <select id="getPlanByDeptOrUserOrTime" resultType="org.springblade.control.entity.ProjectCostBudget">
+        select * from c_project_cost_budget pcb
+        WHERE is_deleted = 0
+        <if test="deptId != null and deptId != ''">
+            and dept_id = #{deptId}
+        </if>
+        <if test="userId != null and userId != ''">
+            and task_user = #{userId}
+        </if>
+             and (plan_start_time BETWEEN  #{start} and #{end} or plan_end_time BETWEEN  #{start} and #{end})
+    </select>
+    <select id="getAllEmployees" resultType="org.springblade.system.user.entity.User">
+        select id, name from blade_user where tenant_id = #{tenantId} and is_deleted = 0
+        <if test="userId != null and userId != ''">
+            and id = #{userId}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and dept_id like concat('%', #{deptId}, '%')
+        </if>
+    </select>
+    <select id="getPlanByDeptOrUserOrTime2" resultType="org.springblade.control.entity.ProjectCostBudget">
+        select * from c_project_cost_budget
+        WHERE is_deleted = 0
+        and (plan_start_time BETWEEN  #{start} and #{end} or plan_end_time BETWEEN  #{start} and #{end})
+        and task_user in
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
     </select>
 
 

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java

@@ -9,6 +9,7 @@ import org.springblade.control.entity.DictInfo;
 import org.springblade.control.vo.AllProjectStatsVO;
 import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.system.entity.DictBiz;
+import org.springblade.system.user.entity.User;
 
 import java.util.List;
 
@@ -37,4 +38,6 @@ public interface ProjectInfoMapper extends BaseMapper<ControlProjectInfo> {
     ControlProjectInfo getById(@Param("id") Long id);
 
     List<ControlProjectInfo> listByYear(@Param("year") int year);
+
+    List<User> getImplementUser();
 }

+ 4 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml

@@ -81,6 +81,10 @@
     <select id="listByYear" resultType="org.springblade.control.entity.ControlProjectInfo">
         select * from c_control_project_info WHERE DATE_FORMAT(start_time,'%Y') &lt;= #{year} and DATE_FORMAT(end_time ,'%Y') &gt;= #{year}
     </select>
+    <select id="getImplementUser" resultType="org.springblade.system.user.entity.User">
+        select bu.id,bu.name from blade_user bu WHERE id in
+         (SELECT cpi.implement_principal from c_control_project_info cpi WHERE cpi.is_deleted = 0 GROUP by cpi.implement_principal)
+    </select>
 
 
 </mapper>

+ 3 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -52,7 +52,7 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
 
     List<PlanStatisticVO> MonthOfYearPlanOverview();
 
-    List<PlanStatisticVO> MonthOfYearPlanOverview2(Long deptId,Long UserId,LocalDate start,LocalDate end);
+    PlanStatisticVO2 MonthOfYearPlanOverview2(Long deptId,Long userId,String start,String end);
 
     List<ProjectCostBudget> getAllBudgetByProjectId(Long id);
 
@@ -69,4 +69,6 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     List<ProjectCostBudget> getRiskPlan(Long projectId,Integer costType);
 
     List<ProjectCostBudget> getPlanPracticalCostByMonth(String date);
+
+    PlanFinishedRatioVO planFinishedRatio(Long deptId, Long userId, String start, String end);
 }

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java

@@ -9,6 +9,7 @@ import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
 import org.springblade.system.entity.DictBiz;
+import org.springblade.system.user.entity.User;
 
 import java.util.List;
 
@@ -39,4 +40,6 @@ public interface IProjectInfoService extends BaseService<ControlProjectInfo> {
     List<AllProjectStatsVO> ProjectCostTypeStats(Long id);
 
     List<ControlProjectInfo> listByYear(int year);
+
+    List<User> getImplementUser();
 }

+ 4 - 4
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java

@@ -402,9 +402,9 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
             for (int i = year; i <= thisYear; i++) {
                 list.add(i + "年");
             }
-        }
-        if (type != 1) {
-            list.add("汇总所有");
+            if (type != 1) {
+                list.add("汇总所有");
+            }
         }
         return list;
     }
@@ -458,7 +458,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         }
         //获取当月所有计划,和计划工资
         List<ProjectCostBudgetVO2> planByMonth = budgetService.getPlanByMonth(date);
-        if (planByMonth != null || planByMonth.size() >= 0) {
+        if (planByMonth != null && planByMonth.size() > 0) {
             List<DeptMonthPlanRatioVO> vos = new ArrayList<>();
             //月计划包含的项目
             Set<Long> projectIds = new HashSet<>();

+ 199 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.ControlProjectInfoDTO;
@@ -23,12 +24,14 @@ import org.springblade.control.vo.*;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.system.user.entity.User;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -418,8 +421,128 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         }
     }
 
+
+    /**
+     * 任务统计-计划统计图
+     */
     @Override
-    public List<PlanStatisticVO> MonthOfYearPlanOverview2(Long deptId, Long UserId, LocalDate start, LocalDate end) {
+    public PlanStatisticVO2 MonthOfYearPlanOverview2(Long deptId, Long userId, String start, String end) {
+        LocalDate startDate;
+        LocalDate endDate;
+        //判断是否选择部门,如果选择了部门再判断是否选择了具体的人,如果没有选择具体的人则查询整个部门
+        if (StringUtils.isBlank(start) || StringUtils.isBlank(end)){
+            startDate = LocalDate.of(LocalDate.now().getYear(),1,1);
+            endDate = LocalDate.of(LocalDate.now().getYear(),12,31);
+        }else {
+            String[] s1 = start.split("-");
+            startDate = LocalDate.of(Integer.parseInt(s1[0]),Integer.parseInt(s1[1]),1);
+            String[] s2 = end.split("-");
+            endDate = LocalDate.of(Integer.parseInt(s2[0]),Integer.parseInt(s2[1]),1);
+            endDate = endDate.with(TemporalAdjusters.lastDayOfMonth());
+        }
+        //获取时间段中的计划,默认是今年
+        List<ProjectCostBudget> plans = baseMapper.getPlanByDeptOrUserOrTime(deptId, userId, startDate, endDate);
+        if (plans != null && plans.size() > 0) {
+            //结果
+            PlanStatisticVO2 vo2 = new PlanStatisticVO2();
+            List<PlanStatisticVO> list = new ArrayList<>();
+            //任务总量
+            PlanStatisticVO planTotal = new PlanStatisticVO();
+            planTotal.setName("任务总量");
+            List<Integer> l1 = new ArrayList<>();
+            //已完成
+            PlanStatisticVO finished = new PlanStatisticVO();
+            finished.setName("已完成");
+            List<Integer> l2 = new ArrayList<>();
+            //未完成
+            PlanStatisticVO unfinished = new PlanStatisticVO();
+            unfinished.setName("未完成");
+            List<Integer> l3 = new ArrayList<>();
+            //获取月数组
+            List<String> dateList = new ArrayList<>();
+
+            //风险计划集合
+            List<PlanStatisticVO2.RiskPlan> riskPlans = new ArrayList<>();
+            PlanStatisticVO2.RiskPlan riskPlan = new PlanStatisticVO2.RiskPlan();
+            riskPlan.setName("风险暂停计划");
+            riskPlan.setType("line");
+            riskPlan.setStack("Total");
+            List<Integer> list1 = new ArrayList<>();
+            PlanStatisticVO2.RiskPlan normalPlan = new PlanStatisticVO2.RiskPlan();
+            normalPlan.setName("正常计划");
+            normalPlan.setType("line");
+            normalPlan.setStack("Total");
+            List<Integer> list2 = new ArrayList<>();
+
+//            endDate = endDate.plusMonths(1);
+            while (startDate.isBefore(endDate)) {
+                //循环月,并且计算任务总量,已完成,未完成
+                Integer total = 0;
+                Integer finish = 0;
+                Integer unfinish = 0;
+
+                Integer risk = 0;
+                Integer normal = 0;
+                for (ProjectCostBudget plan : plans) {
+                    if ((plan.getPlanStartTime().getYear() == startDate.getYear() && plan.getPlanStartTime().getMonthValue() == startDate.getMonthValue())
+                            || (plan.getPlanEndTime().getYear() == startDate.getYear() && plan.getPlanEndTime().getMonthValue() == startDate.getMonthValue())) {
+                        //计划统计图
+                        total++;
+                        if (plan.getTaskApprove() == 1){
+                            finish++;
+                        }else {
+                            unfinish++;
+                        }
+
+                        //风险计划统计图
+                        if (plan.getStatus() == 4){
+                            if (plan.getPlanEndTime().isBefore(plan.getPracticalFinishTime())){
+                                //风险计划
+                                risk++;
+                            }else {
+                                normal++;
+                            }
+                        }else {
+                            if (plan.getPlanEndTime().isBefore(LocalDate.now())){
+                                //风险计划
+                                risk++;
+                            }else {
+                                normal++;
+                            }
+                        }
+
+                    }
+                }
+                list1.add(risk);
+                list2.add(normal);
+
+                l1.add(total);
+                l2.add(finish);
+                l3.add(unfinish);
+                dateList.add(startDate.getYear()+"年"+startDate.getMonthValue()+"月");
+                startDate = startDate.plusMonths(1);
+            }
+            //统计图集合
+            planTotal.setValue(l1);
+            finished.setValue(l2);
+            unfinished.setValue(l3);
+            list.add(planTotal);
+            list.add(finished);
+            list.add(unfinished);
+            vo2.setDataList(list);
+
+            //统计日期
+            vo2.setDateList(dateList);
+
+            //统计风险计划
+            riskPlan.setData(list1);
+            normalPlan.setData(list2);
+            riskPlans.add(riskPlan);
+            riskPlans.add(normalPlan);
+            vo2.setRiskPlans(riskPlans);
+
+            return vo2;
+        }
         return null;
     }
 
@@ -504,6 +627,81 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         return baseMapper.getPlanPracticalCostByMonth(date);
     }
 
+    /**
+     * 任务统计-任务完成率
+     */
+    @Override
+    public PlanFinishedRatioVO planFinishedRatio(Long deptId, Long userId, String start, String end) {
+        String tenantId = SecureUtil.getTenantId();
+        List<User> Employees = new ArrayList<>();
+        if (deptId == null){
+            //查询所有员工
+            Employees = baseMapper.getAllEmployees(tenantId,null,null);
+        }else if (userId == null){
+            //查询整个部门的员工
+            Employees = baseMapper.getAllEmployees(tenantId,deptId,null);
+        }else {
+            //查询指定员工
+            Employees = baseMapper.getAllEmployees(tenantId,deptId,userId);
+        }
+        if (Employees != null && Employees.size() > 0 ){
+            PlanFinishedRatioVO vo = new PlanFinishedRatioVO();
+            List<String> names = new ArrayList<>();
+            List<Integer> ratios = new ArrayList<>();
+            LocalDate startDate;
+            LocalDate endDate;
+            //判断是否选择部门,如果选择了部门再判断是否选择了具体的人,如果没有选择具体的人则查询整个部门
+            if (StringUtils.isBlank(start) || StringUtils.isBlank(end)){
+                startDate = LocalDate.of(LocalDate.now().getYear(),1,1);
+                endDate = LocalDate.of(LocalDate.now().getYear(),12,31);
+            }else {
+                String[] s1 = start.split("-");
+                startDate = LocalDate.of(Integer.parseInt(s1[0]),Integer.parseInt(s1[1]),1);
+                String[] s2 = end.split("-");
+                endDate = LocalDate.of(Integer.parseInt(s2[0]),Integer.parseInt(s2[1]),1);
+                endDate = endDate.with(TemporalAdjusters.lastDayOfMonth());
+            }
+            //获取员工id集合
+            Set<Long> ids = Employees.stream().map(l -> l.getId()).collect(Collectors.toSet());
+            //根据员工id查询时间范围内的任务
+            //获取时间段中的计划,默认是今年
+            List<ProjectCostBudget> plans = baseMapper.getPlanByDeptOrUserOrTime2(ids, startDate, endDate);
+            if (plans != null && plans.size() > 0) {
+                //通过员工id分组
+                Map<Long, List<ProjectCostBudget>> listMap = plans.parallelStream()
+                        .collect(Collectors.groupingBy(ProjectCostBudget::getTaskUser));
+                for (User employee : Employees) {
+                    names.add(employee.getName());
+                    BigDecimal total = new BigDecimal(0);
+                    BigDecimal finished = new BigDecimal(0);
+                    List<ProjectCostBudget> list = listMap.get(employee.getId());
+                    //判断此用户是否存在任务,不存在则直接比例为0
+                    if (list != null && list.size() > 0) {
+                        for (ProjectCostBudget plan : list) {
+                            if (plan.getTaskUser().equals(employee.getId())) {
+                                total = total.add(new BigDecimal(1));
+                                if (plan.getTaskApprove() == 1) {
+                                    finished = finished.add(new BigDecimal(1));
+                                }
+                            }
+                        }
+                        if (total.compareTo(new BigDecimal(0)) != 0) {
+                            ratios.add(finished.divide(total, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue());
+                        } else {
+                            ratios.add(0);
+                        }
+                    }else {
+                        ratios.add(0);
+                    }
+                }
+                vo.setUserList(names);
+                vo.setRatioList(ratios);
+                return vo;
+            }
+        }
+        return null;
+    }
+
     /**
      * 统计一行的几个总金额
      */

+ 9 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -15,6 +15,7 @@ import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Query;
 import org.springblade.system.entity.DictBiz;
+import org.springblade.system.user.entity.User;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -206,5 +207,13 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         return baseMapper.listByYear(year);
     }
 
+    /**
+     * 获取实施负责人
+     */
+    @Override
+    public List<User> getImplementUser() {
+        return baseMapper.getImplementUser();
+    }
+
 
 }