Files
java-servers/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java
2025-03-10 14:32:21 +08:00

394 lines
21 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.TeacherVo;
import com.xboe.module.dict.entity.DictDto;
import com.xboe.module.exam.entity.ExamTest;
import com.xboe.school.study.entity.StudyCourse;
import com.xboe.system.user.dao.UserDao;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
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;
import java.util.concurrent.ForkJoinPool;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Service
@Slf4j
public class ThirdApi {
public static final ForkJoinPool REQUEST_TASK = new ForkJoinPool(100);
//没有找到
@Value("${orgTree.orgChildTreeList}")
private String orgChildTreeListUrl;
@Autowired
UserDao userDao;
@Resource
private ProjectAdminRemoteClient projectAdminRemoteClient;
@Resource
private OffCourseRemoteClient offCourseRemoteClient;
@Resource
private ProjectRemoteClient projectRemoteClient;
@Resource
private DictRemoteClient dictRemoteClient;
@Resource
private UserRemoteClient userRemoteClient;
@Resource
private AudienceRemoteClient audienceRemoteClient;
@Resource
private UserDynamicApiRemoteClient userDynamicApiRemoteClient;
@Value("${coursesuilt.updateOrSaveCourse}")
private String updateOrSaveCourse;
@Value("${coursesuilt.syncCourseStudent}")
private String syncCourseStudent;
@Value("${coursesuilt.syncOnLineScore}")
private String syncOnLineScore;
@Value("${coursesuilt.updateOnLineStatua}")
private String updateOnLineStatua;
//获取例外人员的id
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)
.map(t -> JSONUtil.toBean(t, DictResult.class));
if (!dictResultOptional.isPresent()) {
throw new RuntimeException("解析DictResult失败字符串格式不正确。");
}
List<DictDto> dictDtos = dictResultOptional.get().getData();
if (dictDtos == null || dictDtos.isEmpty()) {
throw new RuntimeException("DictResult中的data字段为空。");
}
return dictDtos.stream().map(DictDto::getValue).collect(Collectors.toList());
} catch (Exception e) {
throw new RuntimeException("解析过程发生异常:" + e.getMessage(), e);
}
}
//获取面授课id
public List<String> getOffCourseId(String userId, String token) {
log.info("正在获取面授课id");
return offCourseRemoteClient.getOffCourseId(userId);
}
//获取离职教师信息
public List<TeacherVo> getTeacherInfo(List<String> teacherIds, String token) {
log.info("获取离职教师信息");
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) {
log.info("获取离职教师信息");
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("获取用户:params:{}", JSONUtil.toJsonStr(userListParam));
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);
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()))
.orElse(ListUtil.toList());
}
private void getAllUserList(UserListParam userListParam, String token, List<UserInfoListVo> userInfoLists) {
log.info("获取用户2");
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);
}
private void nextPage(UserListParam userListParam, String token, List<UserInfoListVo> userInfoLists, UserInfoListRootBean.ResultData t) {
log.info("nextPage 获取用户--" + userListParam.getPageNo());
if (t.getTotalPage() > userListParam.getPageNo()) {
REQUEST_TASK.submit(() -> IntStream.range(userListParam.getPageNo(), t.getTotalPage()).parallel().forEach(i -> getAllUserList(userListParam.withPageNo(i + 1), token, userInfoLists))).join();
}
}
public List<OrgRootBean.ResultData> getOrgChildTree(String id, String token) {
log.info("getOrgChildTree");
String resp = Optional.ofNullable(HttpRequest.post(orgChildTreeListUrl).header("token", token).body(JSONUtil.toJsonStr(TreeSearchVo.builder().orgId(id).build())).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
return Opt.ofNullable(JSONUtil.toBean(resp, OrgRootBean.class).success()).map(OrgRootBean::getResult).orElse(ListUtil.empty());
}
public List<AuditList> getAllAudienceList(AuditListParam userListParam, String 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()))
.orElse(ListUtil.toList());
}
private void nextPage(AuditListParam userListParam, List<AuditList> t, Result result, String token) {
if (result.getTotalPage() > userListParam.getPageNo()) {
REQUEST_TASK.submit(() -> IntStream.range(userListParam.getPageNo(), result.getTotalPage()).parallel().forEach(i -> getAllAudienceList(userListParam.withPageNo(i + 1), t, token))).join();
}
}
private void getAllAudienceList(AuditListParam userListParam, List<AuditList> list, String 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) {
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);
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);
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) {
log.info(" 1 studyId = "+ studyId + " ,courseId = " + courseId );
if ( studyId == null || courseId == null ){
log.error(" 在线课学习记录 参数不能为空 ");
return new ArrayList<>();
}
StudyCourseVo studyCourseVo = new StudyCourseVo();
studyCourseVo.setStudyId(studyId);
studyCourseVo.setCourseId(courseId);
ProjectStudyDto projectStudyDto = new ProjectStudyDto();
// BeanUtil.copyProperties(studyCourseVo, studyCourseVo);
projectStudyDto.setStudyId(Long.parseLong(studyId));
projectStudyDto.setCourseId(Long.parseLong(courseId));
log.info(" 12 在线课学习记录 studyId = "+ projectStudyDto.getStudyId() + " ,courseId = " + projectStudyDto.getCourseId() );
projectRemoteClient.updateStudyStatus(projectStudyDto);
return new ArrayList<>();
}
public void sqlUpdate(ExamTest examTest, String token) {
examTest.setSysUpdateTime(null);
examTest.setSysCreateTime(null);
examTest.setPublishTime(null);
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);
DynamicBean a = JSONUtil.toBean(resp, DynamicBean.class);
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);
}
/**
* 获取案例浏览记录
*/
public UserDynamicResult getAllUserdynamicListOfCaseRead(UserdynamicParam userdynamicParam, String token) {
String s = buildFormData(userdynamicParam);
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;
}
private String buildFormData(UserdynamicParam param) {
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"));
builder.append("&eventKey=").append(URLEncoder.encode("ReadCase", "UTF-8"));
if (param.getHidden() != null) {
builder.append("&hidden=").append(URLEncoder.encode(param.getHidden(), "UTF-8"));
}
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return builder.toString();
}
/**
* 虽然当前已存在接口查询用户基本信息目前仅仅包括用户名、工号、用户ID
*/
public List<UserBasicInfo> getUserBasicInfoByUserId(List<String> userIds, HttpServletRequest request) {
String token = request.getHeader("Xboe-Access-Token");
if (StringUtils.isEmpty(token)) {
token = request.getHeader("token");
}
if (StringUtils.isEmpty(token)) {
token = request.getHeader("x-access-token");
}
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();
return basicInfos;
}
public void updateOrSaveCourse(CourseParam param, String token){
log.info("---------------准备同步在线课到讲师管理完毕 ------- param " + param);
String resp = Optional.ofNullable(
HttpRequest.post(updateOrSaveCourse).body(JSONUtil.toJsonStr(param)).header("token", token).execute()
.body()).orElseThrow(() -> new RuntimeException("token校验失败"));
log.info("updateOrSaveCourse = " + resp);
}
public void syncCourseStudent(Long courseId, String token){
String resp = Optional.ofNullable(
HttpRequest.post(syncCourseStudent).body(JSONUtil.toJsonStr(courseId)).header("token", token).execute()
.body()).orElseThrow(() -> new RuntimeException("token校验失败"));
log.info("syncCourseStudent = " + resp);
}
public void syncOnLineScore(ScoreParam param, String token) {
String resp = Optional.ofNullable(
HttpRequest.post(syncOnLineScore).body(JSONUtil.toJsonStr(param)).header("token", token).execute()
.body()).orElseThrow(() -> new RuntimeException("token校验失败"));
log.info("syncOnLineScore = " + resp);
}
public void updateOnLineStatua(CourseParam param, String token){
String resp = Optional.ofNullable(
HttpRequest.post(updateOnLineStatua).body(JSONUtil.toJsonStr(param)).header("token", token).execute()
.body()).orElseThrow(() -> new RuntimeException("token校验失败"));
log.info("updateOrSaveCourse = " + resp);
}
}