|
|
@@ -1,12 +1,24 @@
|
|
|
package com.xjrsoft.module.teacher.controller;
|
|
|
|
|
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
|
import com.xjrsoft.common.model.result.RT;
|
|
|
import com.xjrsoft.common.page.ConventPage;
|
|
|
import com.xjrsoft.common.page.PageOutput;
|
|
|
+import com.xjrsoft.common.utils.VoToColumnUtil;
|
|
|
+import com.xjrsoft.module.teacher.dto.TeacherAwardDetailPageDto;
|
|
|
import com.xjrsoft.module.teacher.dto.TeacherAwardStatisticsPageDto;
|
|
|
+import com.xjrsoft.module.teacher.entity.TeacherAward;
|
|
|
+import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
|
|
|
import com.xjrsoft.module.teacher.service.ITeacherAwardItemService;
|
|
|
+import com.xjrsoft.module.teacher.service.ITeacherAwardService;
|
|
|
+import com.xjrsoft.module.teacher.vo.TeacherAwardDetailPageVo;
|
|
|
+import com.xjrsoft.module.teacher.vo.TeacherAwardItemPageVo;
|
|
|
+import com.xjrsoft.module.teacher.vo.TeacherAwardItemVo;
|
|
|
import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
@@ -16,6 +28,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
import javax.validation.Valid;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @title: 教师奖项
|
|
|
@@ -32,6 +48,8 @@ public class TeacherAwardController {
|
|
|
|
|
|
private final ITeacherAwardItemService teacherAwardItemService;
|
|
|
|
|
|
+ private final ITeacherAwardService teacherAwardService;
|
|
|
+
|
|
|
@GetMapping(value = "/statistics-page")
|
|
|
@ApiOperation(value="教师获奖统计")
|
|
|
@SaCheckPermission("teacheraward:detail")
|
|
|
@@ -42,5 +60,66 @@ public class TeacherAwardController {
|
|
|
return RT.ok(pageOutput);
|
|
|
}
|
|
|
|
|
|
+ @GetMapping(value = "/detail-page")
|
|
|
+ @ApiOperation(value="教师获奖详情页")
|
|
|
+ @SaCheckPermission("teacheraward:detail")
|
|
|
+ public RT<PageOutput<TeacherAwardDetailPageVo>> detailPage(@Valid TeacherAwardDetailPageDto dto){
|
|
|
+ MPJLambdaWrapper<TeacherAward> teacherAwardMPJLambdaWrapper = new MPJLambdaWrapper<>();
|
|
|
+ teacherAwardMPJLambdaWrapper
|
|
|
+ .disableSubLogicDel()
|
|
|
+ .selectAs(TeacherAwardItem::getIsThesis, TeacherAwardDetailPageVo::getIsThesis)
|
|
|
+ .select(TeacherAward.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardDetailPageVo.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(TeacherAwardItem.class, TeacherAwardItem::getId, TeacherAward::getTeacherAwardItemId)
|
|
|
+ .eq(dto.getApplicantUserId() != null && dto.getApplicantUserId() > 0,TeacherAward::getApplicantUserId, dto.getApplicantUserId())
|
|
|
+ .eq(dto.getIsThesis() != null,TeacherAwardItem::getIsThesis, dto.getIsThesis())
|
|
|
+ .like(dto.getCompetitionName() != null && !dto.getCompetitionName().equals(""),TeacherAward::getCompetitionName, dto.getCompetitionName())
|
|
|
+ .orderByDesc(TeacherAward::getCreateDate)
|
|
|
+ ;
|
|
|
+ IPage<TeacherAwardDetailPageVo> page = teacherAwardService.selectJoinListPage(ConventPage.getPage(dto), TeacherAwardDetailPageVo.class, teacherAwardMPJLambdaWrapper);
|
|
|
+
|
|
|
+ //处理父级
|
|
|
+ LambdaQueryWrapper<TeacherAwardItem> teacherAwardItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ teacherAwardItemLambdaQueryWrapper
|
|
|
+ .orderByDesc(TeacherAwardItem::getId)
|
|
|
+ .select(TeacherAwardItem.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardItemPageVo.class).contains(x.getProperty()));
|
|
|
+ List<TeacherAwardItem> list = teacherAwardItemService.list(teacherAwardItemLambdaQueryWrapper);
|
|
|
+ List<TeacherAwardItemVo> itemVos = BeanUtil.copyToList(list, TeacherAwardItemVo.class);
|
|
|
+
|
|
|
+ for(TeacherAwardDetailPageVo t : page.getRecords()){
|
|
|
+ List<TeacherAwardItemVo> ancestors = findAncestors(itemVos, t.getTeacherAwardItemId());
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ for (int i = 0; i < ancestors.size(); i++) {
|
|
|
+ TeacherAwardItemVo teacherAwardItemVo = ancestors.get(i);
|
|
|
+ if(teacherAwardItemVo != null && teacherAwardItemVo.getName() != null && !teacherAwardItemVo.getName().equals("")){
|
|
|
+ sb.insert(0, ">");
|
|
|
+ sb.insert(0, teacherAwardItemVo.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sb.deleteCharAt(sb.length() - 1);
|
|
|
+ t.setWholeCompetitionName(sb.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ PageOutput<TeacherAwardDetailPageVo> pageOutput = ConventPage.getPageOutput(page, TeacherAwardDetailPageVo.class);
|
|
|
+ return RT.ok(pageOutput);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<TeacherAwardItemVo> findAncestors(List<TeacherAwardItemVo> itemVos, Long targetId) {
|
|
|
+ List<TeacherAwardItemVo> ancestors = new ArrayList<>();
|
|
|
+ Map<Long, TeacherAwardItemVo> itemMap = itemVos.stream()
|
|
|
+ .collect(Collectors.toMap(TeacherAwardItemVo::getId, item -> item));
|
|
|
+ findAncestorsHelper(itemMap, targetId, ancestors);
|
|
|
+ return ancestors;
|
|
|
+ }
|
|
|
|
|
|
+ private void findAncestorsHelper(Map<Long, TeacherAwardItemVo> itemMap, Long targetId, List<TeacherAwardItemVo> ancestors) {
|
|
|
+ if (itemMap.get(targetId) != null) {
|
|
|
+ TeacherAwardItemVo teacherAwardItemVo = itemMap.get(targetId);
|
|
|
+ ancestors.add(teacherAwardItemVo);
|
|
|
+ if(teacherAwardItemVo.getParentId() != null && teacherAwardItemVo.getParentId() > 0){
|
|
|
+ findAncestorsHelper(itemMap, teacherAwardItemVo.getParentId(), ancestors);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|