From e4a30e02824cea4bf6a0b51743904843a364a1e4 Mon Sep 17 00:00:00 2001 From: xiaozhequ <792962424@qq.com> Date: Wed, 17 Jan 2024 14:04:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E7=A6=BB=E8=81=8C=E4=BA=BA?= =?UTF-8?q?=E5=91=98=E4=BF=A1=E6=81=AF2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/xboe/api/ThirdApi.java | 31 ++++- .../com/xboe/api/vo/GetTeacherIdsResult.java | 27 ++++ .../module/course/api/CourseFullTextApi.java | 128 +++++++++++++++--- .../module/course/api/CoursePortalApi.java | 34 +++++ .../xboe/module/course/vo/TeacherInfoVo.java | 11 ++ .../com/xboe/module/course/vo/TeacherVo.java | 10 ++ .../src/main/resources/application.properties | 4 +- 7 files changed, 222 insertions(+), 23 deletions(-) create mode 100644 servers/boe-server-all/src/main/java/com/xboe/api/vo/GetTeacherIdsResult.java create mode 100644 servers/boe-server-all/src/main/java/com/xboe/module/course/vo/TeacherInfoVo.java create mode 100644 servers/boe-server-all/src/main/java/com/xboe/module/course/vo/TeacherVo.java diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java index 2e1c34c5..3c8a883a 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java @@ -5,6 +5,8 @@ import cn.hutool.core.lang.Opt; import cn.hutool.http.HttpRequest; import cn.hutool.json.JSONUtil; import com.xboe.api.vo.*; +import com.xboe.module.course.vo.TeacherInfoVo; +import com.xboe.module.course.vo.TeacherVo; import com.xboe.module.dict.entity.DictDto; import com.xboe.system.user.dao.UserDao; import com.xboe.system.user.entity.User; @@ -52,6 +54,9 @@ public class ThirdApi { @Value("${audience.getOrgUsers}") private String searchOrgUsersUrl; + @Value("${userBasic.getTeacherIds}") + private String getTeacherIds; + //获取例外人员的id public List getUserId(){ String s = Optional.ofNullable(HttpRequest.get(infarasApiUrl).execute() @@ -78,7 +83,31 @@ public class ThirdApi { .body()).orElseThrow(() -> new RuntimeException("token校验失败")); return Opt.ofBlankAble(s).map(t -> JSONUtil.toBean(t, StringResult.class)).map(StringResult::getData).orElseThrow(); } - + //获取离职教师信息 + public ListgetTeacherInfo(List teacherIds, String token){ + TeacherInfoVo teacherInfoVo=new TeacherInfoVo(); + teacherInfoVo.setTeacherIds(teacherIds); + log.info("获取离职教师信息"); + log.info(JSONUtil.toJsonStr(teacherInfoVo)); + String resp = Optional.ofNullable( + HttpRequest.post(getTeacherIds).body(JSONUtil.toJsonStr(teacherInfoVo)).header("token", token).execute() + .body()).orElseThrow(() -> new RuntimeException("token校验失败")); + GetTeacherIdsResult getTeacherIdsResult = JSONUtil.toBean(resp, GetTeacherIdsResult.class); + log.info("getTeacherIdsResult = " + getTeacherIdsResult.getResult()); + return getTeacherIdsResult.getResult(); + } + public ListgetTeacherInfoByCode(List teacherCode,String token){ + TeacherInfoVo teacherInfoVo=new TeacherInfoVo(); + teacherInfoVo.setTeacherIds(teacherCode); + log.info("获取离职教师信息"); + log.info("参数为"+JSONUtil.toJsonStr(teacherCode)); + String resp = Optional.ofNullable( + HttpRequest.post(getTeacherIds).body(JSONUtil.toJsonStr(teacherInfoVo)).header("token", token).execute() + .body()).orElseThrow(() -> new RuntimeException("token校验失败")); + GetTeacherIdsResult getTeacherIdsResult = JSONUtil.toBean(resp, GetTeacherIdsResult.class); + log.info("getTeacherIdsResult = " + getTeacherIdsResult); + return getTeacherIdsResult.getResult(); + } public List getAllUserList(UserListParam userListParam, String token) { log.info("获取用户:url:{}", searchOrgUsersUrl); log.info("获取用户:params:{}", JSONUtil.toJsonStr(userListParam)); diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/GetTeacherIdsResult.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/GetTeacherIdsResult.java new file mode 100644 index 00000000..553744d3 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/GetTeacherIdsResult.java @@ -0,0 +1,27 @@ +package com.xboe.api.vo; + +import cn.hutool.json.JSONUtil; +import com.xboe.module.course.vo.TeacherVo; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; +import java.util.List; +@Data +@Slf4j +public class GetTeacherIdsResult { + private String error; + private String message; + private String permissions; + private List result; + private int status; + private Date timestamp; + + public GetTeacherIdsResult success() { + if (this.status != 200) { + log.error("获取学员列表失败----{}", JSONUtil.toJsonPrettyStr(this)); + return null; + } + return this; + } +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFullTextApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFullTextApi.java index 1b649c5c..33c1e590 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFullTextApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseFullTextApi.java @@ -4,16 +4,20 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import com.fasterxml.jackson.core.JsonProcessingException; import com.xboe.api.ThirdApi; import com.xboe.data.dto.UserData; import com.xboe.data.outside.IOutSideDataService; +import com.xboe.module.course.vo.TeacherVo; import com.xboe.school.study.entity.StudyCourse; import com.xboe.school.study.service.IStudyCourseService; import com.xboe.system.organization.service.IOrganizationService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -44,16 +48,16 @@ import javax.servlet.http.HttpServletRequest; @RestController @RequestMapping(value="/xboe/m/course/fulltext") public class CourseFullTextApi extends ApiBaseController{ - + @Autowired ICourseService courseService; - + @Autowired ICourseTeacherService courseTeacherService; - + @Autowired ICourseContentService ccourseService; - + @Autowired(required = false) ICourseFullTextSearch fullTextSearch; @Resource @@ -68,6 +72,8 @@ public class CourseFullTextApi extends ApiBaseController{ @Autowired IOutSideDataService outsideDataService; + @Autowired + StringRedisTemplate redisTemplate; /** * 课程的初始化 @@ -75,17 +81,17 @@ public class CourseFullTextApi extends ApiBaseController{ */ @GetMapping("/init") public JsonResponse initAllCourse(String flag) throws Exception{ - + if(fullTextSearch==null) { return error("初始化失败:未实现全文检索功能"); } //重新创建索引,如果已经存在,不会重新建 fullTextSearch.reCreateIndex(ICourseFullTextSearch.DEFAULT_INDEX_NAME); - + //提取课程信息,因为现在课程没有太多,所以一次性全部查出来, CourseQueryDto dto =new CourseQueryDto(); dto.setPublish(true);//必须是已发布的 - + List clist = courseService.findList(dto); for(Course c:clist) { CourseFullText cft=CourseToCourseFullText.convert(c); @@ -95,7 +101,7 @@ public class CourseFullTextApi extends ApiBaseController{ //计算课程时长 int duration=ccourseService.sumDurationByCourseId(c.getId()); cft.setDuration(duration); - + //查询教师 CourseTeacherDto teacherDto = courseTeacherService.getTeacherByCourseId(c.getId()); if(teacherDto!=null && !teacherDto.getNames().isEmpty()) { @@ -116,19 +122,19 @@ public class CourseFullTextApi extends ApiBaseController{ }else { cft.setIsSetAudience(0);//无受众 } - + String fullTextId=fullTextSearch.republish(ICourseFullTextSearch.DEFAULT_INDEX_NAME, cft,c.getFullTextId()); log.info("发布课程全文检索成功:"+fullTextId); c.setFullTextId(fullTextId); if(StringUtils.isNotBlank(fullTextId)) { courseService.updateFieldById(c.getId(),"fullTextId", fullTextId); } - + }catch(Exception e) { log.error("发布课程【"+c.getName()+"("+c.getId()+")】全文检索及更新数据库失败",e); } - - + + } return success(true); } @@ -151,7 +157,7 @@ public class CourseFullTextApi extends ApiBaseController{ } @PostMapping("/republish") public JsonResponse republish(String id) throws Exception{ - + if(fullTextSearch==null) { return error("初始化失败:未实现全文检索功能"); } @@ -163,13 +169,13 @@ public class CourseFullTextApi extends ApiBaseController{ if(c.getPublished()==null || !c.getPublished()) { return error("此课程还未发布,请发布课程,不用在这里重新发布"); } - + CourseFullText cft=CourseToCourseFullText.convert(c); try { //计算课程时长 int duration=ccourseService.sumDurationByCourseId(c.getId()); cft.setDuration(duration); - + //查询教师 CourseTeacherDto teacherDto = courseTeacherService.getTeacherByCourseId(c.getId()); if(teacherDto!=null && !teacherDto.getNames().isEmpty()) { @@ -193,14 +199,14 @@ public class CourseFullTextApi extends ApiBaseController{ }else { cft.setIsSetAudience(0);//无受众 } - + String fullTextId=fullTextSearch.republish(ICourseFullTextSearch.DEFAULT_INDEX_NAME, cft,c.getFullTextId()); log.info("发布课程全文检索成功:"+fullTextId); c.setFullTextId(fullTextId); if(StringUtils.isNotBlank(fullTextId)) { courseService.updateFieldById(c.getId(),"fullTextId", fullTextId); } - + }catch(Exception e) { log.error("发布课程【"+c.getName()+"("+c.getId()+")】全文检索及更新数据库失败",e); return error("重新发布失败",e.getMessage()); @@ -208,8 +214,8 @@ public class CourseFullTextApi extends ApiBaseController{ return success(true); } - - + + /** * 全文检索查询 * @param pager @@ -217,7 +223,7 @@ public class CourseFullTextApi extends ApiBaseController{ * @return */ @PostMapping("/search") - public JsonResponse> search(Pagination pager, CourseQueryDto dto, Integer minDuration, Integer maxDuration, HttpServletRequest request){ + public JsonResponse> search(Pagination pager, CourseQueryDto dto, Integer minDuration, Integer maxDuration, HttpServletRequest request) throws JsonProcessingException { //获取例外人员id List userId = thirdApi.getUserId(); @@ -226,6 +232,7 @@ public class CourseFullTextApi extends ApiBaseController{ // String userIds="132,123"; //获取没报名课程的id String token = request.getHeader("Xboe-Access-Token"); + // if (StringUtils.isEmpty(token)) { token = request.getHeader("token"); } @@ -317,6 +324,36 @@ public class CourseFullTextApi extends ApiBaseController{ clist=courseService.findStudysScoreByIds(cids); } List teachers = courseService.findTeachersByCourseIds(ids); + //教师id + List teacherIds =new ArrayList<>(); + for(CourseFullText course :coursePageList.getList()) { + for (CourseTeacher ct : teachers) { + if (ct.getCourseId().equals(course.getId())) { + teacherIds.add(ct.getTeacherId()); + } + } + } + //为面授课的时候 + if(teachers.size()==0){ + log.info("查询面授课"); + for (CourseFullText courseFullText : coursePageList.getList()) { + log.info("教师状态="+redisTemplate.opsForValue().get(courseFullText.getTeacherCode())); + if (redisTemplate.opsForValue().get(courseFullText.getTeacherCode())==null){ + getTeacherStatusByCode(token, coursePageList); + if(Objects.equals(redisTemplate.opsForValue().get(courseFullText.getTeacherCode()), "1")){ + log.info("redis无信息设置教师"); + courseFullText.setTeacher("BOE教师"); + } + }else { + if(Objects.equals(redisTemplate.opsForValue().get(courseFullText.getTeacherCode()), "1")){ + log.info("状态="+redisTemplate.opsForValue().get(courseFullText.getTeacherCode())); + courseFullText.setTeacher("BOE教师"); + } + } + } + } + + // //注意对于多个教师的情况,这里只是设置第一个教师 for(CourseFullText c :coursePageList.getList()) { if(clist!=null) { @@ -330,7 +367,19 @@ public class CourseFullTextApi extends ApiBaseController{ } for(CourseTeacher ct : teachers) { if(ct.getCourseId().equals(c.getId())) { - c.setTeacher(ct.getTeacherName()); + //根据ct.getTeacherId()从redis取数据 + if(redisTemplate.opsForValue().get(ct.getTeacherId())==null){ + getTeacherInfo(token, teacherIds); + } + if (Objects.equals(redisTemplate.opsForValue().get(ct.getTeacherId()), "1")) { + log.info("课程id="+c.getId()); + log.info("教师id="+ct.getTeacherId()); + log.info("教师在职状态"+redisTemplate.opsForValue().get(ct.getTeacherId())); + c.setTeacher("BOE教师"); + }else{ + c.setTeacher(ct.getTeacherName()); + } + } } @@ -354,4 +403,41 @@ public class CourseFullTextApi extends ApiBaseController{ } } + + private void getTeacherStatusByCode(String token, PageList coursePageList) { + log.info("获取教师信息通过工号 "); + List teacherCoeds = new ArrayList<>(); + for (CourseFullText courseFullText : coursePageList.getList()) { + teacherCoeds.add(courseFullText.getTeacherCode()); + } + if(!teacherCoeds.isEmpty()) { + List teacherInfoByCode = thirdApi.getTeacherInfoByCode(teacherCoeds, token); + if(teacherInfoByCode.size()!=0){ + for (TeacherVo teacherVo : teacherInfoByCode) { + redisTemplate.opsForValue().set(teacherVo.getTeacherCode(), teacherVo.getStatus()); + //设置过期时间为1天 + redisTemplate.expire(teacherVo.getTeacherId(), 24 * 60 * 60, TimeUnit.SECONDS); + } + } + + } + } + + private void getTeacherInfo(String token, List teacherIds) { + List teacherInfo = thirdApi.getTeacherInfo(teacherIds, token); +// log.info("根据教师id查询教师信息 teacherInfo = " + teacherInfo); +// log.info("根据教师id查询教师信息 teacherInfo.size = " + teacherInfo.size()); + if(teacherInfo== null){ + log.info("根据教师id查询教师信息 teacherInfo = " + teacherInfo); + }else { + //将teacherInfo中的teacherId作为key和status作为value存到redis中 + for (TeacherVo teacherVo : teacherInfo) { + //teacherVo.getTeacherId()存到redis中 + redisTemplate.opsForValue().set(teacherVo.getTeacherId(), teacherVo.getStatus()); + //设置过期时间为1天 + redisTemplate.expire(teacherVo.getTeacherId(), 24 * 60 * 60, TimeUnit.SECONDS); + } + } + + } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java index fbf593ae..1b8801a7 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java @@ -1,6 +1,7 @@ package com.xboe.module.course.api; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import javax.annotation.Resource; @@ -13,9 +14,11 @@ import com.xboe.api.vo.UserDynamic; import com.xboe.api.vo.UserdynamicParam; import com.xboe.common.OrderCondition; import com.xboe.core.JsonResponseStatus; +import com.xboe.module.course.vo.TeacherVo; import com.xboe.module.usergroup.entity.UserGroupItem; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -86,6 +89,9 @@ public class CoursePortalApi extends ApiBaseController{ @Resource private ThirdApi thirdApi; + @Autowired + StringRedisTemplate redisTemplate; + /** * 根据多个课程id返回对应的课程的图片.返回结果如下, * { @@ -300,6 +306,18 @@ public class CoursePortalApi extends ApiBaseController{ Teacher t = teacherService.get(ct.getTeacherId()); if(t!=null) { ct.setRemark(t.getDescription()); + if(redisTemplate.opsForValue().get(ct.getTeacherId())!=null){ + if(Objects.equals(redisTemplate.opsForValue().get(ct.getTeacherId()), "1")){ + ct.setTeacherName("BOE教师"); + } + }else if (redisTemplate.opsForValue().get(ct.getTeacherId())==null){ + List list=new ArrayList<>(); + list.add(ct.getTeacherId()); + getTeacherInfo(request.getHeader("Xboe-Access-Token"),list); + if(Objects.equals(redisTemplate.opsForValue().get(ct.getTeacherId()), "1")){ + ct.setTeacherName("BOE教师"); + } + } } } @@ -312,7 +330,23 @@ public class CoursePortalApi extends ApiBaseController{ return success(rs); } + private void getTeacherInfo(String token, List teacherIds) { + List teacherInfo = thirdApi.getTeacherInfo(teacherIds, token); +// log.info("根据教师id查询教师信息 teacherInfo = " + teacherInfo); +// log.info("根据教师id查询教师信息 teacherInfo.size = " + teacherInfo.size()); + if(teacherInfo== null){ + log.info("根据教师id查询教师信息 teacherInfo = " + teacherInfo); + }else { + //将teacherInfo中的teacherId作为key和status作为value存到redis中 + for (TeacherVo teacherVo : teacherInfo) { + //teacherVo.getTeacherId()存到redis中 + redisTemplate.opsForValue().set(teacherVo.getTeacherId(), teacherVo.getStatus()); + //设置过期时间为1天 + redisTemplate.expire(teacherVo.getTeacherId(), 24 * 60 * 60, TimeUnit.SECONDS); + } + } + } @GetMapping("/detail-study") public JsonResponse> detailStudy(String courseId, String aid){ diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/TeacherInfoVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/TeacherInfoVo.java new file mode 100644 index 00000000..88de900f --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/TeacherInfoVo.java @@ -0,0 +1,11 @@ +package com.xboe.module.course.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class TeacherInfoVo { + List teacherIds; + List teacherCode; +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/TeacherVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/TeacherVo.java new file mode 100644 index 00000000..8d89c212 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/TeacherVo.java @@ -0,0 +1,10 @@ +package com.xboe.module.course.vo; + +import lombok.Data; + +@Data +public class TeacherVo { + String teacherId; + String status; + String teacherCode; +} \ No newline at end of file diff --git a/servers/boe-server-all/src/main/resources/application.properties b/servers/boe-server-all/src/main/resources/application.properties index cc8bb2bf..d55ef97b 100644 --- a/servers/boe-server-all/src/main/resources/application.properties +++ b/servers/boe-server-all/src/main/resources/application.properties @@ -69,4 +69,6 @@ audience.getOrgUsers=${boe.domain}/userbasic/user/getOrgUsers #获取工号 infrasApi.dict=${boe.domain}/infrasApi/dict/getCourseException #获取非报名课id -manageApi.stu.offcourse=${boe.domain}/manageApi/stu/offcourse/getOffCourseId \ No newline at end of file +manageApi.stu.offcourse=${boe.domain}/manageApi/stu/offcourse/getOffCourseId +#获取离职教师id +userBasic.getTeacherIds=${boe.domain}/userbasic/user/getTeacherInfo \ No newline at end of file