河南机电职业学院-首页数据统计

main
zhc077 4 months ago
parent f6a39b0c63
commit a10bb33c59
  1. 38
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/homepage/controller/UserHomePageController.java
  2. 12
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/homepage/service/UserHomePageService.java
  3. 237
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/homepage/service/UserHomePageServiceImpl.java
  4. 57
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/homepage/vo/HomePageCompVo.java
  5. 35
      jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/homepage/vo/Last5YearDataVo.java

@ -0,0 +1,38 @@
package org.jeecg.modules.demo.homepage.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.demo.homepage.service.UserHomePageService;
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.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
* @Description: 用户登录首页
* @Author: Z.H.C
* @CreateTime: 2024-07-16 09:20
* @Version: 1.0
*/
@Api(tags = "河南机电比赛系统-用户登录首页")
@RestController
@RequestMapping("/user/login/homepage")
@Slf4j
public class UserHomePageController {
@Autowired
private UserHomePageService homePageService;
@ApiOperation(value = "河南机电-学校首页", notes = "河南机电-学校首页")
@GetMapping(value = "/school")
public Result composite(HttpServletRequest req) {
Map<String, Object> result = homePageService.homePage4School();
return Result.ok(result);
}
}

@ -0,0 +1,12 @@
package org.jeecg.modules.demo.homepage.service;
import java.util.List;
import java.util.Map;
public interface UserHomePageService {
Map<String, Object> homePage4Depart(String departId);
Map<String, Object> homePage4School();
}

@ -0,0 +1,237 @@
package org.jeecg.modules.demo.homepage.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.jeecg.common.util.ComputeUtils;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.demo.abilityEvaluation.entity.DepartAbilityEvaluation;
import org.jeecg.modules.demo.abilityEvaluation.service.IDepartAbilityEvaluationService;
import org.jeecg.modules.demo.abilityEvaluation.service.IPersonalAbilityEvaluationCollectService;
import org.jeecg.modules.demo.abilityEvaluation.service.IPersonalAbilityEvaluationService;
import org.jeecg.modules.demo.annual.entity.Annual;
import org.jeecg.modules.demo.annual.service.IAnnualService;
import org.jeecg.modules.demo.annualCompPoint.entity.AnnualCompPoint;
import org.jeecg.modules.demo.annualCompPoint.service.IAnnualCompPointService;
import org.jeecg.modules.demo.annualScore.entity.DepartCompTotalScore;
import org.jeecg.modules.demo.annualScore.entity.PersonalCompScore;
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.annualcompetitionprojectregistration.entity.AnnualCompetitionProjectRegistration;
import org.jeecg.modules.demo.annualcompetitionprojectregistration.service.IAnnualCompetitionProjectRegistrationService;
import org.jeecg.modules.demo.annualcompetitionprojectregistration.service.ITeamManagementService;
import org.jeecg.modules.demo.comp.entity.Comp;
import org.jeecg.modules.demo.comp.service.ICompService;
import org.jeecg.modules.demo.homepage.vo.HomePageCompVo;
import org.jeecg.modules.demo.projectlevel.entity.Projectlevel;
import org.jeecg.modules.demo.projectlevel.service.IProjectlevelService;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.service.ISysDepartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description: TODO
* @Author: Z.H.C
* @CreateTime: 2024-07-16 09:28
* @Version: 1.0
*/
@Service
public class UserHomePageServiceImpl implements UserHomePageService {
@Autowired
private IAnnualCompPointService iAnnualCompPointService;
@Autowired
private IAnnualCompService iAnnualCompService;
@Autowired
private ICompService iCompService;
// @Autowired
// private ICompTypeService iCompTypeService;
//
@Autowired
private ISysDepartService iSysDepartService;
@Autowired
private IDepartCompTotalScoreService iDepartCompTotalScoreService;
@Autowired
private IAnnualCompetitionProjectRegistrationService iAnnualCompetitionProjectRegistrationService;
@Autowired
private ITeamManagementService iTeamManagementService;
// @Autowired
// private IAwardPersionService iAwardPersionService;
//
// @Autowired
// private ISysUserService iSysUserService;
@Autowired
private IPersonalCompTotalScoreService iPersonalCompTotalScoreService;
@Autowired
private IPersonalCompScoreService iPersonalCompScoreService;
@Autowired
private IDepartAbilityEvaluationService iDepartAbilityEvaluationService;
@Autowired
private IPersonalAbilityEvaluationService iPersonalAbilityEvaluationService;
@Autowired
private IPersonalAbilityEvaluationCollectService iPersonalAbilityEvaluationCollectService;
@Autowired
private IAnnualService iAnnualService;
@Autowired
private IProjectlevelService iProjectlevelService;
@Override
public Map<String, Object> homePage4Depart(String departId) {
return null;
}
@Override
public Map<String, Object> homePage4School() {
Map<String, Object> resultMap = new LinkedHashMap<>();
int currentYear = DateUtils.getCurrentYear();
//当前年度
Annual annual = iAnnualService.getOne(new LambdaQueryWrapper<Annual>().eq(Annual::getAnnualName, currentYear + ""));
List<AnnualComp> annualCompList = iAnnualCompService.list(new LambdaQueryWrapper<AnnualComp>()
.eq(AnnualComp::getAnnualid, annual.getId()));
Set<String> compIds = Optional.ofNullable(annualCompList).orElse(new LinkedList<>()).stream().map(obj -> obj.getId()).collect(Collectors.toSet());
List<AnnualCompPoint> annualCompPointList = iAnnualCompPointService.list(new LambdaQueryWrapper<AnnualCompPoint>().in(AnnualCompPoint::getAnnualCompId, compIds));
//未评奖的项目为进行中
List<AnnualCompPoint> pj0PointList = Optional.ofNullable(annualCompPointList).orElse(new LinkedList<>()).stream().filter(bo -> "0".equals(bo.getIsPj())).collect(Collectors.toList());
Map<String, Object> countMap = this.convertProjectLevel(annualCompPointList);
countMap.put("本年度已开展比赛项目数", annualCompPointList.size());
countMap.put("本年度参加比赛队伍数", 0);
countMap.put("正在进行的比赛数", pj0PointList.size());
int donePointCount = annualCompPointList.size() - pj0PointList.size();
countMap.put("已完成的比赛", donePointCount);
countMap.put("未完成的比赛", pj0PointList.size());
if (donePointCount > 0) {
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setMaximumFractionDigits(2); // 保留两位小数
decimalFormat.setRoundingMode(RoundingMode.HALF_UP); // 设置具体的进位机制
double val = ComputeUtils.div2(donePointCount, annualCompPointList.size());
countMap.put("已完成比赛比率", val);
} else {
countMap.put("已完成比赛比率", 0);
}
Set<String> annualCompPointIds = Optional.ofNullable(annualCompPointList).orElse(new ArrayList<>()).stream().map(annualCompPoint -> annualCompPoint.getId()).collect(Collectors.toSet());
if (!ObjectUtils.isEmpty(annualCompPointIds)) {
//报名表,只存本次的报名编号和项目id
List<AnnualCompetitionProjectRegistration> annualCompetitionProjectRegistrationList = iAnnualCompetitionProjectRegistrationService
.list(new LambdaQueryWrapper<AnnualCompetitionProjectRegistration>()
.in(AnnualCompetitionProjectRegistration::getAnnualCompid, annualCompPointIds)
.eq(AnnualCompetitionProjectRegistration::getEntryFormat, "1"));
countMap.put("本年度参加比赛队伍数", annualCompetitionProjectRegistrationList.size());
}
resultMap.putAll(countMap);
List<Map<String, Object>> abilityList = new LinkedList<>();
List<Integer> years = DateUtils.getLastxYear(2);
List<Annual> annualList = iAnnualService.list(new LambdaQueryWrapper<Annual>().in(Annual::getAnnualName, years).orderByAsc(Annual::getAnnualName));
Optional.ofNullable(annualList).orElse(new LinkedList<>()).stream().forEach(bo -> {
Map<String, Object> abilityResultMap = new LinkedHashMap<>();
List<DepartAbilityEvaluation> departAbilityEvaluations = iDepartAbilityEvaluationService.list(new LambdaQueryWrapper<DepartAbilityEvaluation>()
.eq(DepartAbilityEvaluation::getAnnualId, bo.getId()));
List<DepartAbilityEvaluation> vos = new LinkedList<>();
Map<String, List<DepartAbilityEvaluation>> capacityIdListMap = Optional.ofNullable(departAbilityEvaluations).orElse(new LinkedList<>()).stream()
.collect(Collectors.groupingBy(DepartAbilityEvaluation::getCapacityId));
//遍历分组后的结果
Optional.ofNullable(capacityIdListMap).orElse(new LinkedHashMap<>()).forEach((key, value) -> {
List<DepartAbilityEvaluation> departAbilityEvaluationList = value;
double sum = departAbilityEvaluationList.stream().mapToDouble(obj -> obj.getValue()).sum();
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setMaximumFractionDigits(2); // 保留两位小数
decimalFormat.setRoundingMode(RoundingMode.HALF_UP); // 设置具体的进位机制
double val = ComputeUtils.div2(sum, departAbilityEvaluationList.size());
DepartAbilityEvaluation vo = new DepartAbilityEvaluation();
vo.setAnnualId(bo.getId());
vo.setValue(val);
vo.setCapacityId(key);
vo.setCapacityName(departAbilityEvaluationList.get(0).getCapacityName());
vos.add(vo);
});
abilityResultMap.put(bo.getAnnualName(), vos);
abilityList.add(abilityResultMap);
});
resultMap.put("近2年能力分析", abilityList);
List<HomePageCompVo> scoreList4Point = new LinkedList<>();
List<PersonalCompScore> personalCompScores = iPersonalCompScoreService.list(new LambdaQueryWrapper<PersonalCompScore>().eq(PersonalCompScore::getAnnualCompP, annualCompPointIds));
Map<String, List<PersonalCompScore>> AnnualCompPointIdsMap = Optional.ofNullable(personalCompScores).orElse(new LinkedList<>()).stream()
.collect(Collectors.groupingBy(PersonalCompScore::getAnnualCompP));
Optional.ofNullable(AnnualCompPointIdsMap).orElse(new LinkedHashMap<>()).forEach((key, value) -> {
double sum = value.stream().mapToDouble(obj -> obj.getScore()).sum();
HomePageCompVo vo = new HomePageCompVo();
AnnualCompPoint point = iAnnualCompPointService.getById(key);
vo.setAnnualCompPointName(point.getObjName());
AnnualComp annualComp = iAnnualCompService.getById(point.getAnnualCompId());
if (!ObjectUtils.isEmpty(annualComp)) {
Comp comp = iCompService.getById(annualComp.getCompid());
if (!ObjectUtils.isEmpty(comp)) {
vo.setCompName(comp.getCompName());
}
}
vo.setTotalScore(sum);
scoreList4Point.add(vo);
});
scoreList4Point.stream().sorted(Comparator.comparing(HomePageCompVo::getTotalScore)).collect(Collectors.toList());
resultMap.put("本年度项目积分排名", scoreList4Point);
List<HomePageCompVo> scoreList4Depart = new LinkedList<>();
List<DepartCompTotalScore> departCompTotalScoreList = iDepartCompTotalScoreService.list(new LambdaQueryWrapper<DepartCompTotalScore>()
.eq(DepartCompTotalScore::getAnnualId, annual.getId()));
Map<String, List<DepartCompTotalScore>> departCompTotalScoresMap = Optional.ofNullable(departCompTotalScoreList).orElse(new LinkedList<>()).stream()
.collect(Collectors.groupingBy(DepartCompTotalScore::getDepet));
Optional.ofNullable(departCompTotalScoresMap).orElse(new LinkedHashMap<>()).forEach((key, value) -> {
double sum = value.stream().mapToDouble(obj -> obj.getScore()).sum();
HomePageCompVo vo = new HomePageCompVo();
SysDepart depart = iSysDepartService.getById(key);
vo.setCompOrganName(depart.getDepartName());
vo.setTotalScore(sum);
scoreList4Depart.add(vo);
});
scoreList4Depart.stream().sorted(Comparator.comparing(HomePageCompVo::getTotalScore)).collect(Collectors.toList());
resultMap.put("本年度全校部门积分排名", scoreList4Depart);
return resultMap;
}
Map<String, Object> convertProjectLevel(List<AnnualCompPoint> annualCompPointList) {
Map<String, Object> map = new LinkedHashMap<>();
Map<String, List<AnnualCompPoint>> objLevelIdsMap = Optional.ofNullable(annualCompPointList).orElse(new LinkedList<>()).stream()
.collect(Collectors.groupingBy(AnnualCompPoint::getObjLevel));
Optional.ofNullable(objLevelIdsMap).orElse(new LinkedHashMap<>()).forEach((key, value) -> {
Map<String, Object> levelMap = new LinkedHashMap<>();
Projectlevel projectlevel = iProjectlevelService.getById(key);
levelMap.put(projectlevel.getName(), value.size());
map.putAll(levelMap);
});
return map;
}
}

@ -0,0 +1,57 @@
package org.jeecg.modules.demo.homepage.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecg.modules.demo.projectlevel.entity.Projectlevel;
import java.io.Serializable;
/**
* @Description: TODO
* @Author: Z.H.C
* @CreateTime: 2023-11-29 15:52
* @Version: 1.0
*/
@Data
public class HomePageCompVo implements Serializable {
@ApiModelProperty(value = "比赛id")
private String compId;
@ApiModelProperty(value = "年度比赛项目名称")
private String annualCompPointName;
/**
* 比赛名称
*/
@ApiModelProperty(value = "比赛名称")
private String compName;
// @ApiModelProperty(value = "部门id")
// private String compOrganId;
@ApiModelProperty(value = "部门名称")
private String compOrganName;
//
// @ApiModelProperty(value = "奖项名称")
// private String awardName;
//
@ApiModelProperty(value = "项目总积分")
private double totalScore;
//
// @ApiModelProperty(value = "年度比赛项目数")
// private Integer annualCompPointNumber;
//
// @ApiModelProperty(value = "获取人数")
// private Integer awardNumber;
//
// @ApiModelProperty(value = "获取比率")
// private String awardRatio;
//
// @ApiModelProperty(value = "年度比赛状态")
// private String status;
//
// @ApiModelProperty(value = "比赛级别list")
// private Projectlevel projectLevelList;
}

@ -0,0 +1,35 @@
package org.jeecg.modules.demo.homepage.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @Description: TODO
* @Author: Z.H.C
* @CreateTime: 2023-11-30 16:08
* @Version: 1.0
*/
@Data
public class Last5YearDataVo implements Serializable {
// @ApiModelProperty(value = "主键")
// private String id;
/**
* 比赛名称
*/
// @ApiModelProperty(value = "比赛名称")
// private String compName;
@ApiModelProperty(value = "年度")
private String year;
@ApiModelProperty(value = "比赛数量")
private Integer compCount;
@ApiModelProperty(value = "参赛人数量")
private Integer personCount;
}
Loading…
Cancel
Save