河南机电职业学院-大屏数据统计

main
zhc077 4 months ago
parent 98c684a1b0
commit dcd20cc645
  1. 144
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/bigScreen/service/CompSystemBigScreenServiceImpl.java

@ -1,6 +1,8 @@
package org.jeecg.modules.demo.bigScreen.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.util.ComputeUtils;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.demo.abilityEvaluation.entity.DepartAbilityEvaluation;
@ -15,11 +17,12 @@ import org.jeecg.modules.demo.annualCompPoint.entity.AnnualCompPoint;
import org.jeecg.modules.demo.annualCompPoint.service.IAnnualCompPointService;
import org.jeecg.modules.demo.annualScore.entity.PersonalCompScore;
import org.jeecg.modules.demo.annualScore.entity.PersonalCompTotalScore;
import org.jeecg.modules.demo.annualScore.service.IDepartCompTotalScoreService;
import org.jeecg.modules.demo.annualScore.service.IPersonalCompScoreService;
import org.jeecg.modules.demo.annualScore.service.IPersonalCompTotalScoreService;
import org.jeecg.modules.demo.annualcomp.entity.AnnualComp;
import org.jeecg.modules.demo.annualcomp.service.IAnnualCompService;
import org.jeecg.modules.demo.annualcompaward.entity.AnnualCompAward;
import org.jeecg.modules.demo.annualcompaward.service.IAnnualCompAwardService;
import org.jeecg.modules.demo.annualcompetitionprojectregistration.entity.AnnualCompetitionProjectRegistration;
import org.jeecg.modules.demo.annualcompetitionprojectregistration.entity.TeamManagement;
import org.jeecg.modules.demo.annualcompetitionprojectregistration.service.IAnnualCompetitionProjectRegistrationService;
@ -30,6 +33,8 @@ import org.jeecg.modules.demo.bigScreen.vo.CompVo;
import org.jeecg.modules.demo.bigScreen.vo.Last5YearDataVo;
import org.jeecg.modules.demo.comp.entity.Comp;
import org.jeecg.modules.demo.comp.service.ICompService;
import org.jeecg.modules.demo.comptype.entity.CompType;
import org.jeecg.modules.demo.comptype.service.ICompTypeService;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysDepartService;
@ -54,6 +59,7 @@ import java.util.stream.Collectors;
* @Version: 1.0
*/
@Service
@Slf4j
public class CompSystemBigScreenServiceImpl implements CompSystemBigScreenService {
@Autowired
@ -65,11 +71,14 @@ public class CompSystemBigScreenServiceImpl implements CompSystemBigScreenServic
@Autowired
private ICompService iCompService;
@Autowired
private ICompTypeService iCompTypeService;
@Autowired
private ISysDepartService iSysDepartService;
@Autowired
private IDepartCompTotalScoreService iDepartCompTotalScoreService;
private IAnnualCompAwardService iAnnualCompAwardService;
@Autowired
private IAnnualCompetitionProjectRegistrationService iAnnualCompetitionProjectRegistrationService;
@ -104,6 +113,10 @@ public class CompSystemBigScreenServiceImpl implements CompSystemBigScreenServic
//二级部门id
private final String BASE_PARENT_ID = "1693446350597038081";
private static final Integer ONE_HUNDRED = 100;
private static final Double ZERO_POINT_FIVE = 0.5;
private static final Double ZERO_POINT_TWO = 0.2;
@Override
public List<Map<String, Object>> canSai() {
@ -231,35 +244,112 @@ public class CompSystemBigScreenServiceImpl implements CompSystemBigScreenServic
List<SysDepart> departList = iSysDepartService.list(new LambdaQueryWrapper<SysDepart>().eq(SysDepart::getParentId, BASE_PARENT_ID));
Optional.ofNullable(departList).orElse(new LinkedList<>()).stream().forEach(depart -> {
Map<String, Object> resultMap = new LinkedHashMap<>();
List<Comp> compList = iCompService.list(new LambdaQueryWrapper<Comp>().eq(Comp::getCompOrgan, depart.getParentId()));
List<Comp> compList = iCompService.list(new LambdaQueryWrapper<Comp>().eq(Comp::getCompOrgan, depart.getId()));
//比赛类型
Map<String, List<Comp>> compTypeListMap = Optional.ofNullable(compList).orElse(new LinkedList<>()).stream()
.collect(Collectors.groupingBy(Comp::getCompTypeId));
//TODO
//遍历分组后的结果
// DecimalFormat decimalFormat = new DecimalFormat();
// decimalFormat.setMaximumFractionDigits(2); // 保留两位小数
// decimalFormat.setRoundingMode(RoundingMode.HALF_UP); // 设置具体的进位机制
// List<CompVo> vos = new ArrayList<>();
// Optional.ofNullable(compTypeListMap).orElse(new LinkedHashMap<>()).forEach((key, value) -> {
//
// double ratio = ComputeUtils.div2(value.size(), registrationList.size());
// CompVo vo = new CompVo();
// vo.setCompOrganId(depart.getId());
// vo.setCompOrganName(depart.getDepartName());
// vo.setNumber(registrationList.size());
// vo.setAwardName(key);
// vo.setAwardNumber(value.size());
// vo.setAwardRatio(ratio + "");
// vos.add(vo);
// });
resultMap.put(depart.getDepartName(), null);
List<Map<String, Object>> vos = new ArrayList<>();
Optional.ofNullable(compTypeListMap).orElse(new LinkedHashMap<>()).forEach((key, comps) -> {
AtomicReference<BigDecimal> score4CompType = new AtomicReference<>(new BigDecimal(0));
CompType compType = iCompTypeService.getById(key.toString());
Optional.ofNullable(comps).orElse(new ArrayList<>()).stream().forEach(comp -> {
List<AnnualComp> annualComps = iAnnualCompService.list(new LambdaQueryWrapper<AnnualComp>().eq(AnnualComp::getCompid, comp.getId()));
Set<String> annualCompIds = Optional.ofNullable(annualComps).orElse(new ArrayList<>()).stream().map(bo -> bo.getAnnualid()).collect(Collectors.toSet());
if (!ObjectUtils.isEmpty(annualCompIds)) {
List<AnnualCompPoint> annualCompPointList = iAnnualCompPointService.list(new LambdaQueryWrapper<AnnualCompPoint>().in(AnnualCompPoint::getAnnualCompId, annualCompIds));
Optional.ofNullable(annualCompPointList).orElse(new ArrayList<>()).stream().forEach(annualCompPoint -> {
BigDecimal score = convertScore(annualCompPoint, comp);
score4CompType.getAndUpdate(val -> val.add(new BigDecimal(score.toString())));
});
}
});
Map<String, Object> typeMap = new LinkedHashMap<>();
typeMap.put(compType.getTypeName(), score4CompType.get());
vos.add(typeMap);
});
resultMap.put(depart.getDepartName(), vos);
resultList.add(resultMap);
});
return resultList;
}
BigDecimal convertScore(AnnualCompPoint annualCompPoint, Comp comp) {
AtomicReference<BigDecimal> score4Point = new AtomicReference<>(new BigDecimal(0));
if (!ObjectUtils.isEmpty(annualCompPoint) && !ObjectUtils.isEmpty(comp)) {
//年度比赛项目 奖项设置
AnnualCompAward annualCompAward = iAnnualCompAwardService.getOne(new LambdaQueryWrapper<AnnualCompAward>()
.eq(AnnualCompAward::getAnnucompid, annualCompPoint.getId()));
if (ObjectUtils.isEmpty(annualCompAward)) return score4Point.get();
//1、根据年度比赛项目id,查询获取管理(award_persion)列表,即参赛人员及获取奖项顺序号
List<AwardPersion> awardPersionList = iAwardPersionService.list(new LambdaQueryWrapper<AwardPersion>()
.eq(AwardPersion::getAnnualCompP, annualCompPoint.getId()));
//项目分值
double compweight_val = comp.getCompweight().doubleValue();
//2、遍历获奖管理(award_persion)列表,根据奖项id查询比赛奖项设置表(annual_comp_award)
Optional.ofNullable(awardPersionList).orElse(new LinkedList<>()).forEach(en -> {
//2.1、比赛奖项设置 根据awardsort奖项顺序,获取对应的奖项权重值
//奖项顺序与奖项权重值映射关系: wardsort(1:first_weight,2:second_weight,3:third_weight,4:fourth_weight,5:fifth_weight)
//奖项权重值 百分比
String weightVal;
switch (en.getAwardsort()) {
case 1:
weightVal = annualCompAward.getFirstWeight();
break;
case 2:
weightVal = annualCompAward.getSecondWeight();
break;
case 3:
weightVal = annualCompAward.getThirdWeight();
break;
case 4:
weightVal = annualCompAward.getFourthWeight();
break;
case 5:
weightVal = annualCompAward.getFifthWeight();
break;
default:
weightVal = "100";
}
//参与形式 个人、团队,键值对 N-个人 Y-团队
String entryForm = annualCompPoint.getEntryForm();
//2.2 根据报名编号查询参赛者信息
List<TeamManagement> managementList = iTeamManagementService.list(new LambdaQueryWrapper<TeamManagement>()
.eq(TeamManagement::getEnrollCode, en.getEnrollCode())
);
if (ObjectUtils.isEmpty(managementList)) return;
//3、计算积分 项目分值*项目奖项权重值/100
log.info("***************年度比赛项目-{},项目分值:{},奖项权重值:{}", annualCompPoint.getObjName(), compweight_val, weightVal);
double baseScore = ComputeUtils.mul(compweight_val, ComputeUtils.div2(new Double(weightVal), ONE_HUNDRED));
AtomicReference<Double> score = new AtomicReference<>((double) 0);
if (StringUtils.equals("Y", entryForm)) { //团队赛
Optional.ofNullable(managementList).orElse(new ArrayList<>()).forEach(e -> {
// 参与形式是团队时,队长积分*0.5,职员积分*0.2
//captain 是否队长
if (StringUtils.equals("0", e.getCaptain())) {
// score.set(ComputeUtils.mul(baseScore, ZERO_POINT_FIVE));
score4Point.getAndUpdate(val -> val.add(new BigDecimal(ComputeUtils.mul(baseScore, ZERO_POINT_FIVE))));
} else {
// score.set(ComputeUtils.mul(baseScore, ZERO_POINT_TWO));
score4Point.getAndUpdate(val -> val.add(new BigDecimal(ComputeUtils.mul(baseScore, ZERO_POINT_TWO))));
}
});
} else { //个人赛
// score.set(baseScore);
score4Point.getAndUpdate(val -> val.add(new BigDecimal(baseScore)));
}
});
}
return score4Point.get();
}
/**
* @description: 单项比赛数据展示
* 使用大数据页面的形式全面展示某项比赛的各种综合数据包括年度比赛列表比赛项目数参赛人数统计多维度能力评价分析数据近五年比赛人数对比比赛获奖列表参赛人员积分列表需要提供功能截图
@ -459,7 +549,7 @@ public class CompSystemBigScreenServiceImpl implements CompSystemBigScreenServic
// compCounts.put("pointCount", pointCount);
//总报名数
long count = Optional.ofNullable(compVoList).orElse(new LinkedList<>()).stream().mapToInt(vo -> vo.getNumber()).sum();
//总报名数
//总报名
compCounts.put("count", count);
Long personCount = iAnnualCompetitionProjectRegistrationService.count(new LambdaQueryWrapper<AnnualCompetitionProjectRegistration>()
.eq(AnnualCompetitionProjectRegistration::getEntryFormat, "0")
@ -467,8 +557,12 @@ public class CompSystemBigScreenServiceImpl implements CompSystemBigScreenServic
//学生人数
compCounts.put("personCompCount", personCount);
Long teamCount = count - personCount;
//队伍数
compCounts.put("teamCompCount", teamCount);
if (count < personCount) {
compCounts.put("teamCompCount", 0);//队伍数
} else {
//队伍数
compCounts.put("teamCompCount", teamCount);
}
//比赛统计
resultMap.put("compCounts", compCounts);

Loading…
Cancel
Save