Merge remote-tracking branch 'origin/20241118-upframework' into prod-250107-from104-master-teacher-1202

# Conflicts:
#	servers/boe-server-all/pom.xml
#	servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java
#	servers/boe-server-all/src/main/resources/application-pro.properties
#	servers/boe-server-all/src/main/resources/application-test.properties
#	servers/boe-server-all/src/main/resources/application.properties
This commit is contained in:
hui
2025-01-07 18:35:18 +08:00
592 changed files with 1374 additions and 67049 deletions

View File

@@ -1,14 +1,33 @@
package com.xboe.api;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.lang.Opt;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.boe.feign.api.courseweb.entity.ExamTestDto;
import com.boe.feign.api.courseweb.entity.ProjectStudyDto;
import com.boe.feign.api.courseweb.remote.OffCourseRemoteClient;
import com.boe.feign.api.courseweb.remote.ProjectAdminRemoteClient;
import com.boe.feign.api.courseweb.remote.ProjectRemoteClient;
import com.boe.feign.api.infrastructure.entity.CommonSearchVo;
import com.boe.feign.api.infrastructure.entity.Dict;
import com.boe.feign.api.infrastructure.remote.DictRemoteClient;
import com.boe.feign.api.stat.remote.UserDynamicApiRemoteClient;
import com.boe.feign.api.usercenter.entity.*;
import com.boe.feign.api.usercenter.remote.AudienceRemoteClient;
import com.boe.feign.api.usercenter.remote.UserRemoteClient;
import com.boe.feign.api.usercenter.reps.AudienceMemberVo;
import com.boe.feign.api.usercenter.reps.Response;
import com.xboe.api.infrastructure.res.InfraResult;
import com.xboe.api.vo.*;
import com.xboe.module.course.dto.CourseParam;
import com.xboe.module.course.dto.ScoreParam;
import com.xboe.common.PageList;
import com.xboe.common.Pagination;
import com.xboe.core.JsonResponse;
import com.xboe.module.course.vo.StudyCourseVo;
import com.xboe.module.course.vo.TeacherInfoVo;
import com.xboe.module.course.vo.TeacherVo;
import com.xboe.module.dict.entity.DictDto;
import com.xboe.module.exam.entity.ExamTest;
@@ -20,9 +39,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
@@ -36,43 +57,34 @@ public class ThirdApi {
public static final ForkJoinPool REQUEST_TASK = new ForkJoinPool(100);
//没有找到
@Value("${orgTree.orgChildTreeList}")
private String orgChildTreeListUrl;
@Value("${audience.usersByAudienceList}")
private String usersByAudienceList;
@Value("${userBasic.searchUserList}")
private String searchUserListUrl;
@Value("${statApi.userdynamicList}")
private String userdynamicListUrl;
@Autowired
UserDao userDao;
@Value("${infrasApi.dict}")
private String infarasApiUrl;
@Value("${manageApi.stu.offcourse}")
private String manageApiStu;
@Resource
private ProjectAdminRemoteClient projectAdminRemoteClient;
@Value("${audience.getOrgUsers}")
private String searchOrgUsersUrl;
@Resource
private OffCourseRemoteClient offCourseRemoteClient;
@Value("${userBasic.getTeacherIds}")
private String getTeacherIds;
@Resource
private ProjectRemoteClient projectRemoteClient;
@Resource
private DictRemoteClient dictRemoteClient;
@Value("${coursesuilt.getStudyStatus}")
private String getStudyStatus;
@Resource
private UserRemoteClient userRemoteClient;
@Value("${manageApi.editExam}")
private String editExam;
@Resource
private AudienceRemoteClient audienceRemoteClient;
@Value("${userBasic.getUserBasicInfo}")
private String getUserBasicInfo;
@Resource
private UserDynamicApiRemoteClient userDynamicApiRemoteClient;
@Value("${coursesuilt.updateOrSaveCourse}")
private String updateOrSaveCourse;
@@ -85,9 +97,12 @@ public class ThirdApi {
//获取例外人员的id
public List<String> getUserId(){
String responseBody = Optional.ofNullable(HttpRequest.get(infarasApiUrl+"?pid=316&type=1").execute() //prod 316
.body()).orElseThrow(() -> new RuntimeException("token校验失败"));
public List<String> getUserId() {
CommonSearchVo searcher = new CommonSearchVo();
searcher.setPid(316L);
searcher.setType(1);
List<Dict> dictList = dictRemoteClient.getList(searcher);
String responseBody = JSON.toJSONString(InfraResult.suc(dictList));
log.info("正在获取例外人员工号 responseBody = " + responseBody);
try {
Optional<DictResult> dictResultOptional = Optional.of(responseBody)
@@ -100,54 +115,56 @@ public class ThirdApi {
throw new RuntimeException("DictResult中的data字段为空。");
}
return dictDtos.stream().map(DictDto::getValue).collect(Collectors.toList());
}catch (Exception e){
} catch (Exception e) {
throw new RuntimeException("解析过程发生异常:" + e.getMessage(), e);
}
}
//获取面授课id
public List<String>getOffCourseId(String userId,String token){
public List<String> getOffCourseId(String userId, String token) {
log.info("正在获取面授课id");
String s = Optional.ofNullable(HttpRequest.get(manageApiStu+"?userId="+userId).header("token", token).execute()
.body()).orElseThrow(() -> new RuntimeException("token校验失败"));
return Opt.ofBlankAble(s).map(t -> JSONUtil.toBean(t, StringResult.class)).map(StringResult::getData).orElseThrow();
return offCourseRemoteClient.getOffCourseId(userId);
}
//获取离职教师信息
public List<TeacherVo>getTeacherInfo(List<String> teacherIds, String token){
TeacherInfoVo teacherInfoVo=new TeacherInfoVo();
teacherInfoVo.setTeacherIds(teacherIds);
public List<TeacherVo> getTeacherInfo(List<String> teacherIds, String token) {
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校验失败"));
com.boe.feign.api.usercenter.entity.TeacherInfoVo teacherInfoFeignVo = new com.boe.feign.api.usercenter.entity.TeacherInfoVo();
teacherInfoFeignVo.setTeacherIds(teacherIds);
Response<List<com.boe.feign.api.usercenter.entity.TeacherVo>> response = userRemoteClient.getTeacherInfo(teacherInfoFeignVo);
String resp = JSON.toJSONString(response);
GetTeacherIdsResult getTeacherIdsResult = JSONUtil.toBean(resp, GetTeacherIdsResult.class);
log.info("getTeacherIdsResult = " + getTeacherIdsResult.getResult());
return getTeacherIdsResult.getResult();
}
public List<TeacherVo>getTeacherInfoByCode(List<String> teacherCode,String token){
TeacherInfoVo teacherInfoVo=new TeacherInfoVo();
teacherInfoVo.setTeacherCode(teacherCode);
public List<TeacherVo> getTeacherInfoByCode(List<String> teacherCode, String token) {
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校验失败"));
com.boe.feign.api.usercenter.entity.TeacherInfoVo teacherInfoFeignVo = new com.boe.feign.api.usercenter.entity.TeacherInfoVo();
teacherInfoFeignVo.setTeacherCode(teacherCode);
Response<List<com.boe.feign.api.usercenter.entity.TeacherVo>> response = userRemoteClient.getTeacherInfo(teacherInfoFeignVo);
String resp = JSON.toJSONString(response);
GetTeacherIdsResult getTeacherIdsResult = JSONUtil.toBean(resp, GetTeacherIdsResult.class);
log.info("getTeacherIdsResult = " + getTeacherIdsResult);
return getTeacherIdsResult.getResult();
}
public List<UserInfoListVo> getAllUserList(UserListParam userListParam, String token) {
log.info("获取用户:url:{}", searchOrgUsersUrl);
log.info("获取用户:params:{}", JSONUtil.toJsonStr(userListParam));
String resp = Optional.ofNullable(HttpRequest.post(searchOrgUsersUrl).body(JSONUtil.toJsonStr(userListParam)).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
UserQueryDto userQueryDto = new UserQueryDto();
userQueryDto.setOrganizationId(userListParam.getOrganizationId());
userQueryDto.setPageNo(userListParam.getPageNo());
userQueryDto.setPageSize(userListParam.getPageSize());
Response<PageResult<UserOrgSearchVo>> response = userRemoteClient.getOrgUserForRpc(userQueryDto);
String resp = JSON.toJSONString(response);
UserInfoListRootBean userInfoListRootBean1 = JSONUtil.toBean(resp, UserInfoListRootBean.class);
log.info("userInfoListRootBean1 = " + userInfoListRootBean1);
List<UserInfoListVo> list = userInfoListRootBean1.getResult().getList();
log.info("list = " + list);
log.info("获取用户返回值1 {}",resp);
log.info("获取用户返回值1 {}", resp);
return Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(resp, UserInfoListRootBean.class).success())
.map(UserInfoListRootBean::getResult)
.map(result -> Opt.ofEmptyAble(result.getList()).peek(t -> nextPage(userListParam, token, t, result)).orElse(ListUtil.toList()))
@@ -156,8 +173,13 @@ public class ThirdApi {
private void getAllUserList(UserListParam userListParam, String token, List<UserInfoListVo> userInfoLists) {
log.info("获取用户2");
String resp = Optional.ofNullable(HttpRequest.post(searchOrgUsersUrl).body(JSONUtil.toJsonStr(userListParam)).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
log.info("获取用户返回值2 {}",resp);
UserQueryDto userQueryDto = new UserQueryDto();
userQueryDto.setOrganizationId(userListParam.getOrganizationId());
userQueryDto.setPageNo(userListParam.getPageNo());
userQueryDto.setPageSize(userListParam.getPageSize());
Response<PageResult<UserOrgSearchVo>> response = userRemoteClient.getOrgUserForRpc(userQueryDto);
String resp = JSON.toJSONString(response);
log.info("获取用户返回值2 {}", resp);
Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, UserInfoListRootBean.class).success()).map(UserInfoListRootBean::getResult).map(UserInfoListRootBean.ResultData::getList).stream().flatMap(Collection::stream).forEach(userInfoLists::add);
}
@@ -177,7 +199,12 @@ public class ThirdApi {
}
public List<AuditList> getAllAudienceList(AuditListParam userListParam, String token) {
String resp = Optional.ofNullable(HttpRequest.post(usersByAudienceList).body(JSONUtil.toJsonStr(userListParam)).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
AudienceDto userMemberVo = new AudienceDto();
userMemberVo.setPageSize(userListParam.getPageSize());
userMemberVo.setPageNo(userListParam.getPageNo());
userMemberVo.setAudienceId(userListParam.getAudienceId());
PageList<AudienceMemberVo> pageList = audienceRemoteClient.memberList(userMemberVo);
String resp = JSON.toJSONString(pageList);
return Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(resp, AuditRootBean.class).success())
.map(AuditRootBean::getResult)
.map(result -> Opt.ofEmptyAble(result.getList()).peek(t -> nextPage(userListParam, t, result, token)).orElse(ListUtil.toList()))
@@ -191,65 +218,82 @@ public class ThirdApi {
}
private void getAllAudienceList(AuditListParam userListParam, List<AuditList> list, String token) {
String resp = Optional.ofNullable(HttpRequest.post(usersByAudienceList).body(JSONUtil.toJsonStr(userListParam)).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
AudienceDto userMemberVo = new AudienceDto();
userMemberVo.setPageSize(userListParam.getPageSize());
userMemberVo.setPageNo(userListParam.getPageNo());
userMemberVo.setAudienceId(userListParam.getAudienceId());
PageList<AudienceMemberVo> pageList = audienceRemoteClient.memberList(userMemberVo);
String resp = JSON.toJSONString(pageList);
Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, AuditRootBean.class).success()).map(AuditRootBean::getResult).map(Result::getList).stream().flatMap(Collection::stream).forEach(list::add);
}
public List<UserDynamic> getAllUserdynamicList(UserdynamicParam userdynamicParam, String token) {
String resp = Optional.ofNullable(HttpRequest.post(userdynamicListUrl).body(JSONUtil.toJsonStr(userdynamicParam)).header("XBOE-Access-Token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
log.error("=1----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + resp );
Pagination pagination = new Pagination();
pagination.setPageSize(userdynamicParam.getPageSize());
pagination.setPageIndex(userdynamicParam.getPageIndex());
com.boe.feign.api.stat.entity.UserDynamic udd = new com.boe.feign.api.stat.entity.UserDynamic();
udd.setAid(userdynamicParam.getAid() == null ? null : userdynamicParam.getAid().toString());
udd.setHidden("true".equals(userdynamicParam.getHidden()));
udd.setContentType(userdynamicParam.getContentType() == null ? null : userdynamicParam.getContentType().toString());
JsonResponse<PageList<com.boe.feign.api.stat.entity.UserDynamic>> jsonResponse = userDynamicApiRemoteClient.pageList(pagination, udd, null);
String resp = JSON.toJSONString(jsonResponse);
log.error("=1----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + resp);
return Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(resp, DynamicBean.class).success())
.map(DynamicBean::getResult)
.map(result -> Opt.ofEmptyAble(result.getList()).peek(t -> nextPage(userdynamicParam, t, result, token)).orElse(ListUtil.toList()))
.orElse(ListUtil.toList());
}
private void nextPage(UserdynamicParam userdynamicParam, List<UserDynamic> t, UserDynamicResult result, String token) {
log.error("=2----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + userdynamicParam );
log.error("=2----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + userdynamicParam);
if (result.getTotalPages() > userdynamicParam.getPageIndex()) {
REQUEST_TASK.submit(() -> IntStream.range(userdynamicParam.getPageIndex(), result.getTotalPages()).parallel().forEach(i -> getAllUserdynamicList(userdynamicParam.withPageIndex(i + 1), t, token))).join();
}
}
private void getAllUserdynamicList(UserdynamicParam userdynamicParam, List<UserDynamic> list, String token) {
log.error("=3----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + userdynamicParam );
String resp = Optional.ofNullable(HttpRequest.post(usersByAudienceList).body(JSONUtil.toJsonStr(userdynamicParam.builder().pageSize(1000).build())).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
log.error("=3----getAllUserdynamicList----- 开始课程信息 ---------------------------------resp = " + userdynamicParam);
AudienceDto userMemberVo = new AudienceDto();
userMemberVo.setPageSize(1000);
userMemberVo.setPageNo(userdynamicParam.getPageIndex());
PageList<AudienceMemberVo> pageList = audienceRemoteClient.memberList(userMemberVo);
String resp = JSON.toJSONString(pageList);
Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, DynamicBean.class).success()).map(DynamicBean::getResult).map(UserDynamicResult::getList).stream().flatMap(Collection::stream).forEach(list::add);
}
public List<StudyCourse>getStudyCourseList(String studyId,String courseId, String token){
public List<StudyCourse> getStudyCourseList(String studyId, String courseId, String token) {
StudyCourseVo studyCourseVo = new StudyCourseVo();
studyCourseVo.setStudyId(studyId);
studyCourseVo.setCourseId(courseId);
String resp = Optional.ofNullable(
HttpRequest.post(getStudyStatus).body(JSONUtil.toJsonStr(studyCourseVo)).header("token", token).execute()
.body()).orElseThrow(() -> new RuntimeException("token校验失败"));
StudyCourseResult studyCourseResult = JSONUtil.toBean(resp, StudyCourseResult.class);
log.info("getTeacherIdsResult = " + studyCourseResult);
return studyCourseResult.getResult();
ProjectStudyDto projectStudyDto = new ProjectStudyDto();
BeanUtil.copyProperties(studyCourseVo, studyCourseVo);
projectRemoteClient.updateStudyStatus(projectStudyDto);
return new ArrayList<>();
}
public void sqlUpdate(ExamTest examTest, String token) {
examTest.setSysUpdateTime(null);
examTest.setSysCreateTime(null);
examTest.setPublishTime(null);
String resp = Optional.ofNullable(HttpRequest.post(editExam).body(JSONUtil.toJsonStr(examTest)).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, DynamicBean.class).success());
ExamTestDto examTestDto = new ExamTestDto();
BeanUtil.copyProperties(examTest, examTestDto);
examTestDto.setShowAnswer(examTest.getShowAnswer() ? "true" : "false");
projectAdminRemoteClient.editExam(examTestDto);
}
public static void main(String[] args) {
String token = "eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJjb21wYW55Q29kZSI6IkMwMDEiLCJ1SWQiOiI5NjUzNDIwMjc0OTc2MDcxNjgiLCJjb21wYW55SWQiOiIxMDQxNjczOTc3Mzc5OTQ2NDk2IiwibG9naW5JZCI6IjE2ODg0NDg5MjIwNzY0OTE3NzgiLCJpc3MiOiJodHRwOi8vdS5ib2UuY29tIiwiR2l2ZW5OYW1lIjoiYm9ldSIsImV4cCI6MTY5MTM5OTc2NzU1OCwidXNlck5hbWUiOiLmnY7njonlhrAiLCJ1c2VySWQiOiI2QjA0OUZBRi1DMzE0LTdDQ0YtMEQyOC0wRDIzRjRDNDI1MzEifQ==.8b52dcf4d48a790ed258b9ca2b279bb269f5301722095382fbd352705b51c893";
String resp = Optional.ofNullable(HttpRequest.post("https://u-pre.boe.com/statApi/xboe/m/stat/userdynamic/list").body(JSONUtil.toJsonStr(UserdynamicParam.builder().
aid(Long.parseLong("965342027497607168")).pageSize(1000).pageIndex(1).build())).header("XBOE-Access-Token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
System.out.println(" resp = " +resp);
System.out.println(" resp = " + resp);
DynamicBean a = JSONUtil.toBean(resp, DynamicBean.class);
System.out.println(" a = " +a);
System.out.println(" a = " + a);
System.out.println(" a = " + a.getResult().getCount());
List<UserDynamic> list = a.getResult().getList();
System.out.println(" list = " +list.size());
System.out.println(" list = " +list);
System.out.println(" list = " + list.size());
System.out.println(" list = " + list);
}
/**
@@ -257,13 +301,16 @@ public class ThirdApi {
*/
public UserDynamicResult getAllUserdynamicListOfCaseRead(UserdynamicParam userdynamicParam, String token) {
String s = buildFormData(userdynamicParam);
String resp = Optional.ofNullable(HttpRequest
.post(userdynamicListUrl)
.header("Content-Type", "application/x-www-form-urlencoded")
.body(s)
.header("XBOE-Access-Token", token)
.execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
Pagination pagination = new Pagination();
pagination.setPageSize(userdynamicParam.getPageSize());
pagination.setPageIndex(userdynamicParam.getPageIndex());
com.boe.feign.api.stat.entity.UserDynamic udd = new com.boe.feign.api.stat.entity.UserDynamic();
udd.setAid(userdynamicParam.getAid() == null ? null : userdynamicParam.getAid().toString());
udd.setHidden("true".equals(userdynamicParam.getHidden()));
udd.setContentType(userdynamicParam.getContentType() == null ? null : userdynamicParam.getContentType().toString());
udd.setEventKey("ReadCase");
JsonResponse<PageList<com.boe.feign.api.stat.entity.UserDynamic>> jsonResponse = userDynamicApiRemoteClient.pageList(pagination, udd, udd.getAid());
String resp = JSON.toJSONString(jsonResponse);
DynamicBean dynamicBean = JSONUtil.toBean(resp, DynamicBean.class);
UserDynamicResult userdynamicResult = dynamicBean.getResult();
return userdynamicResult;
@@ -273,7 +320,6 @@ public class ThirdApi {
StringBuilder builder = new StringBuilder();
try {
builder.append("pageIndex=").append(URLEncoder.encode(param.getPageIndex().toString(), "UTF-8"));
builder.append("&pageSize=").append(URLEncoder.encode(param.getPageSize().toString(), "UTF-8"));
builder.append("&contentType=").append(URLEncoder.encode(param.getContentType().toString(), "UTF-8"));
builder.append("&aid=").append(URLEncoder.encode(param.getAid().toString(), "UTF-8"));
@@ -299,15 +345,10 @@ public class ThirdApi {
token = request.getHeader("x-access-token");
}
// 将userIds列表转换为逗号分隔的字符串
String userIdsStr = userIds.stream()
.collect(Collectors.joining(","));
String url = getUserBasicInfo +"?userIds=" + userIdsStr;
String respStr = Optional.ofNullable(HttpRequest
.get(url)
.header("token", token)
.execute().body()).orElseThrow(() -> new RuntimeException("用户中心用户数据获取失败"));
UserBasicInfoDto userBasicInfoDto = new UserBasicInfoDto();
userBasicInfoDto.setUserIds(userIds);
Response<List<UserAccount>> response = userRemoteClient.getUserBasicInfo(userBasicInfoDto);
String respStr = JSON.toJSONString(response);
UserBasicInfoResult userBasicInfoResult = JSONUtil.parseObj(respStr).toBean(UserBasicInfoResult.class);
List<UserBasicInfo> basicInfos = userBasicInfoResult.getResult();