| | |
| | | package com.whyc.service; |
| | | |
| | | import com.whyc.constant.Com; |
| | | import com.whyc.dto.KPIDetail; |
| | | import com.whyc.dto.Response; |
| | | import com.whyc.pojo.BaoJiGroup; |
| | |
| | | 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 { |
| | |
| | | private BaoJiGroupUserService baoJiGroupUserService; |
| | | |
| | | |
| | | public Response annualDetail() { |
| | | public List<KPIDetail> getAnnualPersonalDetail() { |
| | | //放电任务,班组 |
| | | Map<String, Map<String, Integer>> planCount = planService.getPlanCount(); |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | } |