whycxzp
2023-05-19 e3728f85c5f6672e59b265114a255ceb5d2cd9cf
更新
3个文件已修改
117 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/KPIController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/KPIDetail.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/KPIService.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/KPIController.java
@@ -7,6 +7,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
@@ -22,8 +23,20 @@
    @GetMapping("annualDetail")
    @ApiOperation("年度工作考核明细")
    public Response annualDetail(){
        return service.annualDetail();
    public Response getAnnualDetail(@RequestParam(required = false) Integer limitN){
        return service.getAnnualDetail(limitN);
    }
    @GetMapping("annualStatisticByGroupName")
    @ApiOperation("年度统计-班组")
    public Response getAnnualStatisticByGroupName(@RequestParam(required = false) Integer limitN){
        return service.getAnnualStatisticByGroupName(limitN);
    }
    @GetMapping("annualStatisticByGroupNameAndUser")
    @ApiOperation("年度统计-班组和用户")
    public Response getAnnualStatisticByGroupNameAndUser(){
        return service.getAnnualStatisticByGroupNameAndUser();
    }
}
src/main/java/com/whyc/dto/KPIDetail.java
@@ -19,8 +19,15 @@
    private Float groupAvgScore;
    //班组排名
    private Integer groupRank;
    //个人排名
    //个人得分
    private Float personalScore;
    //个人最高分
    private Float personalScoreMin;
    //个人最低分
    private Float personalScoreMax;
    public KPIDetail() {
    }
    public String getUserName() {
        return userName;
@@ -93,4 +100,20 @@
    public void setPersonalScore(Float personalScore) {
        this.personalScore = personalScore;
    }
    public Float getPersonalScoreMin() {
        return personalScoreMin;
    }
    public void setPersonalScoreMin(Float personalScoreMin) {
        this.personalScoreMin = personalScoreMin;
    }
    public Float getPersonalScoreMax() {
        return personalScoreMax;
    }
    public void setPersonalScoreMax(Float personalScoreMax) {
        this.personalScoreMax = personalScoreMax;
    }
}
src/main/java/com/whyc/service/KPIService.java
@@ -1,5 +1,6 @@
package com.whyc.service;
import com.whyc.constant.Com;
import com.whyc.dto.KPIDetail;
import com.whyc.dto.Response;
import com.whyc.pojo.BaoJiGroup;
@@ -10,10 +11,10 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class KPIService {
@@ -28,7 +29,7 @@
    private BaoJiGroupUserService baoJiGroupUserService;
    public Response annualDetail() {
    public List<KPIDetail> getAnnualPersonalDetail() {
        //放电任务,班组
        Map<String, Map<String, Integer>> planCount = planService.getPlanCount();
@@ -112,8 +113,70 @@
        }
        return kpiDetails;
    }
    public Response getAnnualDetail(Integer limitN) {
        List<KPIDetail> details = getAnnualPersonalDetail();
        if(limitN !=null){
            details = details.stream().sorted((a,b)->b.getPersonalScore().compareTo(a.getPersonalScore())).limit(limitN).collect(Collectors.toList());
        }
        return new Response().set(1,details);
    }
    public Response getAnnualStatisticByGroupName(Integer limitN) {
        List<KPIDetail> groupDetails = new LinkedList<>();
        List<KPIDetail> details = getAnnualPersonalDetail();
        //班组得分
        Map<String, List<KPIDetail>> groupNameListMap = details.stream().collect(Collectors.groupingBy(KPIDetail::getGroupName));
        Set<String> groupNameSet = groupNameListMap.keySet();
        for (String groupName : groupNameSet) {
            List<KPIDetail> tempList = groupNameListMap.get(groupName);
            double groupAvgScoreDouble = tempList.stream().mapToDouble(temp -> temp.getPersonalScore()).average().getAsDouble();
            float groupAvgScore = BigDecimal.valueOf(groupAvgScoreDouble).setScale(2, RoundingMode.HALF_UP).floatValue();
            KPIDetail groupDetail = new KPIDetail();
            groupDetail.setGroupName(groupName);
            groupDetail.setGroupAvgScore(groupAvgScore);
            groupDetails.add(groupDetail);
        }
        if(limitN!=null) {
            groupDetails = groupDetails.stream().sorted((a, b) -> b.getGroupAvgScore().compareTo(a.getGroupAvgScore())).limit(limitN).collect(Collectors.toList());
        }else{
            groupDetails = groupDetails.stream().sorted((a, b) -> b.getGroupAvgScore().compareTo(a.getGroupAvgScore())).collect(Collectors.toList());
        }
        return new Response().set(1,groupDetails);
    }
    public Response getAnnualStatisticByGroupNameAndUser() {
        List<KPIDetail> groupDetails = new LinkedList<>();
        List<KPIDetail> details = getAnnualPersonalDetail();
        //班组得分
        Map<String, List<KPIDetail>> groupNameListMap = details.stream().collect(Collectors.groupingBy(KPIDetail::getGroupName));
        Set<String> groupNameSet = groupNameListMap.keySet();
        for (String groupName : groupNameSet) {
            List<KPIDetail> tempList = groupNameListMap.get(groupName);
            double groupAvgScoreDouble = tempList.stream().mapToDouble(KPIDetail::getPersonalScore).average().getAsDouble();
            float groupAvgScore = BigDecimal.valueOf(groupAvgScoreDouble).setScale(2, RoundingMode.HALF_UP).floatValue();
            Float personalScoreMin = tempList.stream().min(Comparator.comparing(KPIDetail::getPersonalScore)).get().getPersonalScore();
            Float personalScoreMax = tempList.stream().max(Comparator.comparing(KPIDetail::getPersonalScore)).get().getPersonalScore();
            KPIDetail groupDetail = new KPIDetail();
            groupDetail.setGroupName(groupName);
            groupDetail.setGroupAvgScore(groupAvgScore);
            groupDetail.setPersonalScoreMin(personalScoreMin);
            groupDetail.setPersonalScoreMax(personalScoreMax);
            groupDetails.add(groupDetail);
        }
        //排名
        List<String> groupNameList = groupDetails.stream().sorted((a, b) -> b.getGroupAvgScore().compareTo(a.getGroupAvgScore())).map(KPIDetail::getGroupName).collect(Collectors.toList());
        for (KPIDetail groupDetail : groupDetails) {
            int rankIndex = groupNameList.indexOf(groupDetail.getGroupName());
            groupDetail.setGroupRank(rankIndex+1);
        }
        return new Response().set(1,kpiDetails);
        return new Response().set(1,groupDetails);
    }
}