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,39 +1,41 @@
package com.xboe;
import java.io.File;
import java.io.IOException;
import javax.annotation.PostConstruct;
import org.springframework.retry.annotation.EnableRetry;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.system.ApplicationPid;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Configuration;
import org.springframework.retry.annotation.EnableRetry;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
@Configuration
@SpringBootApplication
@EnableCaching
@EnableAsync
@EnableRetry
@EnableScheduling
@EnableDiscoveryClient
@EnableFeignClients(basePackages = {"com.boe.feign.api.*.remote", "com.xboe.api"})
public class BoeServerAllApplication {
public static void main(String[] args) {
System.setProperty("jasypt.encryptor.password","jasypt");
SpringApplication.run(BoeServerAllApplication.class, args);
}
@PostConstruct
private void handlePid() throws IOException {
File file = new File("application.pid");
new ApplicationPid().write(file);
file.deleteOnExit();
}
public static void main(String[] args) {
System.setProperty("jasypt.encryptor.password", "jasypt");
SpringApplication.run(BoeServerAllApplication.class, args);
}
@PostConstruct
private void handlePid() throws IOException {
File file = new File("application.pid");
new ApplicationPid().write(file);
file.deleteOnExit();
}
}

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();

View File

@@ -0,0 +1,103 @@
package com.xboe.api.infrastructure.res;
import com.boe.feign.api.courseweb.reps.MessageEnum;
import com.boe.feign.api.courseweb.reps.ResultStatus;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.HashMap;
@Data
@Accessors(chain = true)
public class InfraResult<T> implements Serializable {
private boolean isSuccess = true;
private boolean show = false;
private String version = "1.1.0";
private int code;
private String msg;
private T data;
public InfraResult() {
}
public InfraResult(boolean isSuccess, int code, String msg) {
this.isSuccess = isSuccess;
this.code = code;
this.msg = msg;
}
public InfraResult(boolean isSuccess, int code, String msg, T data) {
this.isSuccess = isSuccess;
this.code = code;
this.msg = msg;
this.data = data;
}
public InfraResult(MessageEnum messageEnum) {
this.code = messageEnum.getCode();
this.msg = messageEnum.getMessage();
this.show = messageEnum.isShow();
}
public InfraResult(MessageEnum messageEnum, T data) {
this.code = messageEnum.getCode();
this.msg = messageEnum.getMessage();
this.show = messageEnum.isShow();
this.data = data;
}
public InfraResult(boolean isSuccess, MessageEnum messageEnum) {
this.isSuccess = isSuccess;
this.code = messageEnum.getCode();
this.msg = messageEnum.getMessage();
this.show = messageEnum.isShow();
}
public InfraResult(boolean isSuccess, MessageEnum messageEnum, T data) {
this.isSuccess = isSuccess;
this.code = messageEnum.getCode();
this.msg = messageEnum.getMessage();
this.show = messageEnum.isShow();
this.data = data;
}
public void setMessageEnum(MessageEnum messageEnum) {
this.code = messageEnum.getCode();
this.msg = messageEnum.getMessage();
}
public InfraResult(ResultStatus status, T data) {
this.code = status.getCode();
this.msg = status.getMessage();
this.data = data;
}
public static InfraResult error(String message) {
return new InfraResult(true, -1, message);
}
public static InfraResult error(MessageEnum messageEnum) {
return new InfraResult(messageEnum);
}
public static InfraResult error(MessageEnum messageEnum, String errMsg) {
return new InfraResult(messageEnum,errMsg);
}
public static InfraResult error(ResultStatus error) {
return new InfraResult(error, new HashMap<>(20));
}
public static InfraResult suc(Object data) {
return new InfraResult(ResultStatus.SUCCESS, data);
}
public static InfraResult ok() {
return new InfraResult(ResultStatus.SUCCESS, new HashMap<>(20));
}
}

View File

@@ -0,0 +1,56 @@
package com.xboe.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
import java.io.IOException;
import java.lang.reflect.Type;
public class LoggingMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
private static final Logger logger = LoggerFactory.getLogger(LoggingMappingJackson2HttpMessageConverter.class);
private final ObjectMapper objectMapper;
public LoggingMappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
@Override
protected void writeInternal(@NonNull Object object, @NonNull HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
// 记录转换前的数据
String jsonBefore = objectMapper.writeValueAsString(object);
logger.info("===========Response JSON Before Conversion: {}", jsonBefore);
// 调用父类方法进行实际的转换
super.writeInternal(object, outputMessage);
// 记录转换后的数据
// 注意:由于输出流已经写入,这里无法直接获取转换后的数据
// 可以考虑使用类似拦截器的方法来捕获响应体
}
/*
* 重写父类的writeInternal方法在响应体写入前记录原始数据
*/
@Override
public void writeInternal(@NonNull Object object, @Nullable Type type, @NonNull HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
// 记录转换前的数据
String jsonBefore = objectMapper.writeValueAsString(object);
logger.info("===========Response JSON type Before Conversion: {}", jsonBefore);
// 调用父类方法进行实际的转换
super.writeInternal(object, type, outputMessage);
// 记录转换后的数据
// 注意:由于输出流已经写入,这里无法直接获取转换后的数据
// 可以考虑使用类似拦截器的方法来捕获响应体
}
}

View File

@@ -0,0 +1,58 @@
package com.xboe.config;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Configuration
public class WebConfig implements WebMvcConfigurer {
private static final Logger logger = LoggerFactory.getLogger(WebConfig.class);
//结果处理器
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
return new LoggingMappingJackson2HttpMessageConverter(objectMapper);
}
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY,true);
return mapper;
}
/**
* 在默认的消息转换器基础上添加或移除某些转换器
* 保证StringHttpMessageConverter在FastJsonHttpMessageConverter前被调用
*
* @param converters the list of configured converters to be extended
*/
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.removeIf(t -> t instanceof MappingJackson2HttpMessageConverter || t instanceof MappingJackson2CborHttpMessageConverter);
converters.add(mappingJackson2HttpMessageConverter(objectMapper()));
for (HttpMessageConverter<?> converterLoop : converters) {
logger.info("==######### Registered e message converter: {}", converterLoop.getClass().getName());
}
}
// @Override
// public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// converters.add(mappingJackson2HttpMessageConverter(new ObjectMapper()));
// for (HttpMessageConverter<?> converter : converters) {
// logger.info("==#########Registered message converter: {}", converter.getClass().getName());
// }
// }
}

View File

@@ -1,5 +1,6 @@
package com.xboe.data.api;
import com.boe.feign.api.serverall.entity.UserData;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -12,7 +13,6 @@ import com.xboe.account.entity.Account;
import com.xboe.account.service.IAccountService;
import com.xboe.core.JsonResponse;
import com.xboe.core.api.ApiBaseController;
import com.xboe.data.dto.UserData;
import com.xboe.data.service.IDataUserSyncService;
import com.xboe.system.organization.service.IOrganizationService;
import com.xboe.system.user.service.IUserService;
@@ -40,6 +40,11 @@ public class UserDataSyncApi extends ApiBaseController {
@Autowired
IDataUserSyncService service;
/**
* 同步用户数据
* @param user 用户信息
* @return JsonResponse<Boolean>
*/
@PostMapping("/user")
public JsonResponse<Boolean> syncUser(@RequestBody UserData user) {
@@ -56,7 +61,12 @@ public class UserDataSyncApi extends ApiBaseController {
return error("同步处理用户失败", e.getMessage());
}
}
/**
* 删除用户信息
* @param id 用户id
* @return JsonResponse<Boolean>
*/
@PostMapping("/deluser")
public JsonResponse<Boolean> deleteUser(String id) {

View File

@@ -1,72 +0,0 @@
package com.xboe.data.dto;
import lombok.Data;
/**
* 用于同步的用户数据
* @author seastar
*
*/
@Data
public class UserData {
/**用户的id*/
private String id;
/**主要是为了兼容之前的使用,新用户可以为空*/
private String kid;
/**用户工号,用于登录名*/
private String code;
private String mobile;
/**band的级别*/
private Integer bandLevel;
/**姓名,对应realName*/
private String name;
/**用户的头像*/
private String avatar;
/**性别 1:男 2女*/
private Integer gender;
/**学习时长,秒*/
private Integer learningDuration;
/**部门id*/
private String departId;
/**部门名称*/
private String departName;
/**此字段主要是为了人员的显示*/
private String orgNamePath;
/**
* 用户类型1表学员 此在这只默认只表学员
*/
private Integer userType;
/**
* 表教师 是为1
* */
private Boolean teacher;
/**
* 表系统管理员 是为1
* */
private Boolean sysAdmin;
/**
* 管理员类型1表默认管理员2表非默认管理员0表不是管理员
* */
private Integer adminType;
/**
* 是否删除的如果是删除的上面所有的字段可以不提供只提供id就可以了
*/
private Boolean deleted;
}

View File

@@ -2,8 +2,8 @@ package com.xboe.data.outside;
import java.util.List;
import com.boe.feign.api.serverall.entity.UserData;
import com.xboe.data.dto.AudienceUser;
import com.xboe.data.dto.UserData;
import com.xboe.data.dto.UserOrgIds;
import com.xboe.system.user.vo.UserSimpleVo;

View File

@@ -4,6 +4,7 @@ import java.util.*;
import javax.servlet.http.HttpServletRequest;
import com.boe.feign.api.serverall.entity.UserData;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -14,7 +15,6 @@ import com.xboe.core.SysConstant;
import com.xboe.core.api.TokenProxy;
import com.xboe.core.utils.OkHttpUtil;
import com.xboe.data.dto.AudienceUser;
import com.xboe.data.dto.UserData;
import com.xboe.data.dto.UserOrgIds;
import com.xboe.system.user.vo.UserSimpleVo;

View File

@@ -1,6 +1,7 @@
package com.xboe.data.service;
import com.xboe.data.dto.UserData;
import com.boe.feign.api.serverall.entity.UserData;
/**
* 用户数据的更橷

View File

@@ -4,6 +4,7 @@ import java.time.LocalDateTime;
import javax.transaction.Transactional;
import com.boe.feign.api.serverall.entity.UserData;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.retry.annotation.Recover;
@@ -12,7 +13,6 @@ import org.springframework.stereotype.Service;
import com.xboe.account.dao.AccountDao;
import com.xboe.account.entity.Account;
import com.xboe.data.dto.UserData;
import com.xboe.data.service.IDataUserSyncService;
import com.xboe.module.teacher.dao.TeacherDao;
import com.xboe.module.teacher.entity.Teacher;

View File

@@ -6,6 +6,9 @@ import java.util.stream.Collectors;
import javax.annotation.Resource;
import com.boe.feign.api.serverall.entity.CaseVo;
import com.boe.feign.api.serverall.entity.CasesFiledVo;
import com.boe.feign.api.serverall.reps.CasesReps;
import com.xboe.core.orm.FieldFilters;
import com.xboe.module.boecase.dao.CasesMajorTypeDao;
import com.xboe.module.boecase.dto.*;
@@ -17,6 +20,7 @@ import com.xboe.module.excel.ExportsExcelSenderUtil;
import com.xboe.system.user.dao.UserDao;
import com.xboe.system.user.entity.User;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -177,12 +181,11 @@ public class CasesApi extends ApiBaseController {
/**
* 案例分页
*/
@PostMapping("/pagelist")
@PostMapping(value = "/pagelist" , produces = "application/json")
public JsonResponse<PageList<CasesFiledVo>> pageList(Pagination pager, CaseVo caseVo) {
PageList<CasesFiledVo> pageList = casesService.queryList(pager.getPageIndex(), pager.getPageSize(), caseVo);
return success(pageList);
}
/**
* 我的案例
*/
@@ -372,11 +375,15 @@ public class CasesApi extends ApiBaseController {
}
}
/**
* 案例详情
* @param id id
* @param addView 是否记录查看次数
* @return JsonResponse<CasesReps>
*/
@GetMapping("/detail")
public JsonResponse<Cases> selectById(String id, Boolean addView) {
public JsonResponse<CasesReps> selectById(String id, Boolean addView) {
if (StringUtil.isBlank(id)) {
return badRequest("参数错误");
}
@@ -386,11 +393,15 @@ public class CasesApi extends ApiBaseController {
}
try {
Cases cases = casesService.selectById(id, addView);
if (cases == null){
return badRequest("当前案例不存在");
}
if (cases.getDeleted()) {
return badRequest("当前案例已被删除");
}
return success(cases);
CasesReps reps=new CasesReps();
BeanUtils.copyProperties(cases,reps);
return success(reps);
} catch (Exception e) {
log.error("查看案例失败", e);
return error("查看失败", e.getMessage());

View File

@@ -66,7 +66,7 @@ public class CasesRecommendApi extends ApiBaseController {
* @param casesRecommendVo
* @return
*/
@PostMapping("/page")
@PostMapping(value = "/page",produces = "application/json")
public JsonResponse<PageList<CasesRecommend>> page(@RequestBody CasesRecommendVo casesRecommendVo) {
PageList<CasesRecommend> page = iCasesRecommendService.page(casesRecommendVo.getPageIndex(), casesRecommendVo.getPageSize(), casesRecommendVo);
// 组装查看率

View File

@@ -1,7 +1,6 @@
package com.xboe.module.boecase.dao;
import com.xboe.module.boecase.dto.CasePageVo;
import com.xboe.module.boecase.dto.CaseVo;
import com.xboe.module.boecase.entity.Cases;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

View File

@@ -1,32 +0,0 @@
package com.xboe.module.boecase.dto;
import lombok.Data;
@Data
public class CaseVo {
private String keyWord;
private Boolean breCommend;
private String orderField;
private Boolean orderAsc;
private String orgDomain;//后台查询一级
private String majorType;
private Boolean isTop;
private String caseType;
private Boolean excellent;
private String authorName;
}

View File

@@ -1,21 +0,0 @@
package com.xboe.module.boecase.dto;
import lombok.Data;
@Data
public class CasesFiledVo {
private String id;
private String companyId;
private String coverUrl;
private String title;
private String authorId;
private String authorName;
private Boolean excellent;
}

View File

@@ -1,5 +1,7 @@
package com.xboe.module.boecase.service;
import com.boe.feign.api.serverall.entity.CaseVo;
import com.boe.feign.api.serverall.entity.CasesFiledVo;
import com.xboe.common.PageList;
import com.xboe.core.CurrentUser;
import com.xboe.module.boecase.dto.*;
@@ -28,7 +30,7 @@ public interface ICasesService{
/**
* 案例管理列表搜索
* */
PageList<Cases> managerList(int pageIndex,int pageSize,CaseVo caseVo);
PageList<Cases> managerList(int pageIndex, int pageSize, CaseVo caseVo);
List<Cases> exportCase(CaseVo caseVo);
@@ -37,7 +39,7 @@ public interface ICasesService{
/**
* 案例分页
* */
PageList<CasesFiledVo> queryList(int pageIndex,int pageSize,CaseVo caseVo);
PageList<CasesFiledVo> queryList(int pageIndex, int pageSize, CaseVo caseVo);
/**

View File

@@ -6,6 +6,8 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.boe.feign.api.serverall.entity.CaseVo;
import com.boe.feign.api.serverall.entity.CasesFiledVo;
import com.xboe.api.ThirdApi;
import com.xboe.api.vo.UserDynamic;
import com.xboe.api.vo.UserDynamicResult;

View File

@@ -7,10 +7,10 @@ import java.util.stream.Collectors;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Opt;
import com.boe.feign.api.serverall.entity.UserData;
import com.fasterxml.jackson.core.JsonProcessingException;
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;

View File

@@ -16,7 +16,6 @@ import javax.management.Query;
import com.xboe.api.ThirdApi;
import com.xboe.core.orm.*;
import com.xboe.data.dto.UserData;
import com.xboe.school.study.dao.StudyCourseDao;
import com.xboe.school.study.entity.StudyCourse;
import org.apache.commons.lang3.StringUtils;

View File

@@ -5,6 +5,7 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.boe.feign.api.serverall.entity.UserData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -16,7 +17,6 @@ import com.xboe.core.CurrentUser;
import com.xboe.core.JsonResponse;
import com.xboe.core.api.ApiBaseController;
import com.xboe.core.api.TokenProxy;
import com.xboe.data.dto.UserData;
import com.xboe.data.outside.IOutSideDataService;
import com.xboe.module.teacher.service.ITeacherService;
import com.xboe.system.organization.service.IOrganizationService;

View File

@@ -10,6 +10,7 @@ import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.boe.feign.api.serverall.entity.UserData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
@@ -29,7 +30,6 @@ import com.xboe.core.IAuthorizationToken;
import com.xboe.core.JsonResponse;
import com.xboe.core.JsonResponseStatus;
import com.xboe.core.api.ApiBaseController;
import com.xboe.data.dto.UserData;
import com.xboe.data.outside.IOutSideDataService;
import com.xboe.data.service.IDataUserSyncService;
import com.xboe.externalinterface.system.service.IFwUserService;

View File

@@ -0,0 +1,109 @@
package com.xboe.school.study.api;
import com.xboe.common.beans.IdName;
import com.xboe.common.beans.KeyValue;
import com.xboe.core.JsonResponse;
import com.xboe.core.api.ApiBaseController;
import com.xboe.school.study.dto.BatchSignup;
import com.xboe.school.study.entity.StudySignup;
import com.xboe.school.study.service.IStudySignupService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 课程报名, 本控制器只有一个报名处理,没有其它的处理
*/
@Slf4j
@RestController
@RequestMapping(value = "/remote/xboe/school/study/signup")
public class StudySignupRpcController extends ApiBaseController {
@Resource
IStudySignupService signupService;
/**
* 批量添加学员
*
* @param batch 包含课程ID、课程名称、用户列表等信息的批量报名对象
* @return 返回操作结果,包括成功添加的学员数量
*/
@PostMapping("/batch-add")
public JsonResponse<Integer> BatchAdd(@RequestBody BatchSignup batch) {
if (isBlank(batch.getCourseId())) {
return error("无课程信息");
}
if (isBlank(batch.getCourseName())) {
return error("无课程名称信息");
}
if (batch.getUsers() == null) {
return error("无报名人员信息");
}
if (batch.getUsers().isEmpty()) {
return error("无报名人员信息");
}
//如果没有,就直接设置为录播课
if (batch.getCourseType() == null) {
batch.setCourseType(20);
}
try {
List<IdName> idNameList = batch.getUsers();
List<String> aids = idNameList.stream()
.map(IdName::getId)
.collect(Collectors.toList());
List<KeyValue> hasList = signupService.findByCourseAndUsers(batch.getCourseId(), aids);
Map<String, String> hasMap = new HashMap<>();
for (KeyValue has : hasList) {
hasMap.put((String) has.getValue(), has.getKey());
}
List<StudySignup> list = new ArrayList<>();
int n = 0;
for (IdName u : idNameList) {
//如果报名已经存在,就不再添加
if (hasMap.containsKey(u.getId())) {
continue;
}
StudySignup signup = new StudySignup();
signup.setAid(u.getId());
signup.setCourseId(batch.getCourseId());
signup.setCourseName(batch.getCourseName());
signup.setCourseType(batch.getCourseType());
signup.setName(u.getName());
signup.setSignTime(LocalDateTime.now());
signup.setSignType(StudySignup.SIGNTYPE_ADD);
signup.setSignInfo("");
list.add(signup);
n++;
}
signupService.addList(list);
return success(n);
} catch (Exception e) {
log.error("报名处理失败", e);
return error("报名失败,请与管理员联系", e.getMessage());
}
}
private static boolean isBlank(String string) {
return StringUtils.isBlank(string);
}
}

View File

@@ -62,7 +62,7 @@ public class SysUploaderApi extends ApiBaseController{
fileTypeSet.add("zip");
}
@RequestMapping(value = "/file/upload", method = RequestMethod.POST)
@RequestMapping(value = "/file/upload", method = RequestMethod.POST, produces = "application/json")
public JsonResponse<XUploadResult> save(HttpServletRequest request, String name,String dir) throws IOException {
//以下三项用于回调
String table = request.getParameter("t");//更新的表

View File

@@ -1,12 +1,8 @@
package com.xboe.system.user.api;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import com.xboe.common.PageList;
import com.xboe.common.Pagination;
import com.xboe.common.constant.CharacterConstant;
import com.xboe.common.utils.IDGenerator;
import com.xboe.common.utils.StringUtil;
import com.xboe.core.JsonResponse;
@@ -17,8 +13,14 @@ import com.xboe.system.user.service.IMessageService;
import com.xboe.system.user.service.MessageSender;
import com.xboe.system.user.vo.BatchMessage;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@@ -31,62 +33,69 @@ public class MessageApi extends ApiBaseController {
/**
* 查看当前账户消息列表 分页
* @param pager pageIndex 页数 pageSize 每页展示条数
* @param isRead true已读 false 未读
* */
*
* @param pager pageIndex 页数 pageSize 每页展示条数
* @param isRead true已读 false 未读
*/
@PostMapping("/list")
public JsonResponse<PageList<Message>> list(Pagination pager,Boolean isRead){
public JsonResponse<PageList<Message>> list(Pagination pager, Boolean isRead) {
String aid = this.getCurrent().getAccountId();
PageList<Message> list = service.query(pager.getPageIndex(), pager.getPageSize(), aid, isRead);
return success(list);
}
@PostMapping("/mobilelist")
public JsonResponse<PageList<Message>> mobileList(Pagination pager,Boolean isRead){
public JsonResponse<PageList<Message>> mobileList(Pagination pager, Boolean isRead) {
String aid = this.getCurrent().getAccountId();
PageList<Message> list = service.queryMobile(pager.getPageIndex(), pager.getPageSize(), aid, isRead);
return success(list);
}
/**
* 删除消息
*
* @param ids 所勾选的id集合
* 物理删除
* */
* 物理删除
*/
@PostMapping("/delete")
@AutoLog(module = "消息",action = "删除消息")
public JsonResponse<Boolean> delete(@RequestBody List<String> ids){
if(ids.isEmpty()){
@AutoLog(module = "消息", action = "删除消息")
public JsonResponse<Boolean> delete(@RequestBody List<String> ids) {
if (ids.isEmpty()) {
return badRequest("参数异常");
}
try {
service.delete(ids);
return success(true);
} catch (Exception e) {
log.error("删除失败",e);
return error("删除失败",e.getMessage());
log.error("删除失败", e);
return error("删除失败", e.getMessage());
}
}
/**
* 查看当前消息并且设置已读
* */
*/
@GetMapping("/detail")
public JsonResponse<Message> detail(String id){
if(StringUtil.isBlank(id)){
public JsonResponse<Message> detail(String id) {
if (StringUtil.isBlank(id)) {
return badRequest("参数异常");
}
Message message = service.detail(id);
return success(message);
}
/**
* 发布消息
* */
*/
@Deprecated
@PostMapping("/save")
@AutoLog(module = "消息",action = "发布消息")
public JsonResponse<Boolean> save(@RequestBody Message message){
if(StringUtil.isBlank(message.getTitle())){
@AutoLog(module = "消息", action = "发布消息")
public JsonResponse<Boolean> save(@RequestBody Message message) {
log.info(CharacterConstant.DEPRECATED_METHOD + "=MessageApi.save /xboe/sys/message/save");
if (StringUtil.isBlank(message.getTitle())) {
return badRequest("标题不能为空");
}
if(StringUtil.isBlank(message.getContent())){
if (StringUtil.isBlank(message.getContent())) {
return badRequest("内容不能为空");
}
try {
@@ -96,143 +105,144 @@ public class MessageApi extends ApiBaseController {
MessageSender.send(message);
return success(true);
} catch (Exception e) {
log.error("发布消息失败",e);
return error("发布消息失败",e.getMessage());
log.error("发布消息失败", e);
return error("发布消息失败", e.getMessage());
}
}
@PostMapping("/batch-send")
@AutoLog(module = "消息",action = "批量发送消息")
public JsonResponse<Boolean> batchSave(@RequestBody BatchMessage message){
if(message.getAcceptIds()==null || message.getAcceptIds().isEmpty()) {
return badRequest("无发送人信息");
}
if(message.getAcceptNames()==null || message.getAcceptNames().isEmpty()) {
return badRequest("无发送人姓名信息");
}
if(message.getAcceptIds().size()!=message.getAcceptNames().size()) {
return badRequest("发送人姓名信息不相符");
@AutoLog(module = "消息", action = "批量发送消息")
public JsonResponse<Boolean> batchSave(@RequestBody BatchMessage message) {
if (message.getAcceptIds() == null || message.getAcceptIds().isEmpty()) {
return badRequest("无发送人信息");
}
if(StringUtil.isBlank(message.getTitle())){
if (message.getAcceptNames() == null || message.getAcceptNames().isEmpty()) {
return badRequest("无发送人姓名信息");
}
if (message.getAcceptIds().size() != message.getAcceptNames().size()) {
return badRequest("发送人姓名信息不相符");
}
if (StringUtil.isBlank(message.getTitle())) {
return badRequest("标题不能为空");
}
if(StringUtil.isBlank(message.getTitle())){
if (StringUtil.isBlank(message.getTitle())) {
return badRequest("标题不能为空");
}
if(StringUtil.isBlank(message.getContent())){
if (StringUtil.isBlank(message.getContent())) {
return badRequest("内容不能为空");
}
try {
Message msg=new Message();
msg.setId(IDGenerator.generate());
Message msg = new Message();
msg.setId(IDGenerator.generate());
// msg.setAcceptId(aid);
// msg.setAcceptName(aname);
msg.setContent(message.getContent());
msg.setConType("0");
msg.setIsRead(false);
msg.setMsgType(1);
msg.setPageParams(message.getPageParams());
msg.setPageType(message.getPageType());
msg.setRefId(message.getRefId());
msg.setRefType(message.getRefType());
msg.setSendAid(message.getSendAid());
msg.setSendName(message.getSendName());
msg.setSendType(1);
msg.setSource(message.getSource());
msg.setTitle(message.getTitle());
MessageSender.batchSend(message.getAcceptIds(),message.getAcceptNames(),msg);
msg.setContent(message.getContent());
msg.setConType("0");
msg.setIsRead(false);
msg.setMsgType(1);
msg.setPageParams(message.getPageParams());
msg.setPageType(message.getPageType());
msg.setRefId(message.getRefId());
msg.setRefType(message.getRefType());
msg.setSendAid(message.getSendAid());
msg.setSendName(message.getSendName());
msg.setSendType(1);
msg.setSource(message.getSource());
msg.setTitle(message.getTitle());
MessageSender.batchSend(message.getAcceptIds(), message.getAcceptNames(), msg);
return success(true);
} catch (Exception e) {
log.error("发布消息失败",e);
return error("发布消息失败",e.getMessage());
log.error("发布消息失败", e);
return error("发布消息失败", e.getMessage());
}
}
/**
* 当前登陆人未读消息条数
* */
*/
@GetMapping("/isRead")
public JsonResponse<Integer> isRead(){
public JsonResponse<Integer> isRead() {
String aid = this.getCurrent().getAccountId();
Integer count = service.isRead(aid);
return success(count);
}
/**
* 设置已读
* */
*/
@PostMapping("/updateIsRead")
@AutoLog(module = "消息",action = "设置消息已读")
public JsonResponse<Boolean> updateIsRead(@RequestBody List<String> ids){
if(ids.isEmpty()){
@AutoLog(module = "消息", action = "设置消息已读")
public JsonResponse<Boolean> updateIsRead(@RequestBody List<String> ids) {
if (ids.isEmpty()) {
return badRequest("参数异常");
}
try {
service.updateIsRead(ids);
return success(true);
} catch (Exception e) {
log.error("设置已读失败",e);
return error("设置已读失败",e.getMessage());
log.error("设置已读失败", e);
return error("设置已读失败", e.getMessage());
}
}
/**
* 设置已读
* */
*/
//@AutoLog(module = "消息",action = "未的全部设置为已读")
@GetMapping("/readall")
public JsonResponse<Boolean> readAll(){
String aid=getCurrent().getAccountId();
if(StringUtils.isBlank(aid)) {
return badRequest("获取用户信息异常");
public JsonResponse<Boolean> readAll() {
String aid = getCurrent().getAccountId();
if (StringUtils.isBlank(aid)) {
return badRequest("获取用户信息异常");
}
try {
service.setReadByAcceptId(aid);
return success(true);
} catch (Exception e) {
log.error("设置已读失败",e);
return error("设置已读失败",e.getMessage());
log.error("设置已读失败", e);
return error("设置已读失败", e.getMessage());
}
}
@GetMapping("/clearall")
public JsonResponse<Boolean> clearAll(){
String aid=getCurrent().getAccountId();
if(StringUtils.isBlank(aid)) {
return badRequest("获取用户信息异常");
public JsonResponse<Boolean> clearAll() {
String aid = getCurrent().getAccountId();
if (StringUtils.isBlank(aid)) {
return badRequest("获取用户信息异常");
}
try {
service.cleanByAcceptId(aid);
return success(true);
} catch (Exception e) {
log.error("清空消息错误",e);
return error("清空消息失败",e.getMessage());
log.error("清空消息错误", e);
return error("清空消息失败", e.getMessage());
}
}
@GetMapping("/clearMessageNotCase")
public JsonResponse<Integer> clearMessageNotCase(){
public JsonResponse<Integer> clearMessageNotCase() {
String aid=getCurrent().getAccountId();
if(StringUtils.isBlank(aid)) {
String aid = getCurrent().getAccountId();
if (StringUtils.isBlank(aid)) {
return badRequest("获取用户信息异常");
}
try {
Integer type = service.clearMessageNotCase(aid);
return success(type);
} catch (Exception e) {
log.error("清空消息错误",e);
return error("清空消息失败",e.getMessage());
log.error("清空消息错误", e);
return error("清空消息失败", e.getMessage());
}
}
@@ -240,12 +250,11 @@ public class MessageApi extends ApiBaseController {
/**
* 移动端
* 消息页面,按用户分组返回 暂时不用
*
* */
*/
@GetMapping("/mess-group")
public JsonResponse<Map<String,Object>> messGroup(){
public JsonResponse<Map<String, Object>> messGroup() {
String aid = this.getCurrent().getAccountId();
if(StringUtil.isBlank(aid)){
if (StringUtil.isBlank(aid)) {
return badRequest("参数异常");
}
Map<String, Object> map = service.messGroup(aid);
@@ -255,27 +264,27 @@ public class MessageApi extends ApiBaseController {
/**
* 移动端
* 按用户删除消息 暂时不用
* */
*/
@GetMapping("/remove")
public JsonResponse<Boolean> remove(String aid){
if(StringUtil.isBlank(aid)){
public JsonResponse<Boolean> remove(String aid) {
if (StringUtil.isBlank(aid)) {
return badRequest("参数异常");
}
try {
service.remove(aid);
return success(true);
} catch (Exception e) {
return error("参数异常",e.getMessage());
return error("参数异常", e.getMessage());
}
}
/**
* 用户消息 查最新的一条
* */
*/
@GetMapping
public JsonResponse<List<Message>> userMess(){
public JsonResponse<List<Message>> userMess() {
String aid = this.getCurrent().getAccountId();
if(StringUtil.isBlank(aid)){
if (StringUtil.isBlank(aid)) {
return badRequest("参数异常");
}
List<Message> messages = service.userMess(aid);
@@ -287,5 +296,4 @@ public class MessageApi extends ApiBaseController {
* */
}

View File

@@ -0,0 +1,98 @@
package com.xboe.system.user.api;
import com.xboe.common.utils.IDGenerator;
import com.xboe.common.utils.StringUtil;
import com.xboe.core.JsonResponse;
import com.xboe.core.api.ApiBaseController;
import com.xboe.core.log.AutoLog;
import com.xboe.system.user.entity.Message;
import com.xboe.system.user.service.MessageSender;
import com.xboe.system.user.vo.BatchMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
@Slf4j
@RestController
@RequestMapping("/remote/xboe/sys/message")
public class MessageRpcController extends ApiBaseController {
/**
* 发布消息
*/
@PostMapping("/save")
@AutoLog(module = "消息", action = "发布消息")
public JsonResponse<Boolean> save(@RequestBody Message message) {
if (StringUtil.isBlank(message.getTitle())) {
return badRequest("标题不能为空");
}
if (StringUtil.isBlank(message.getContent())) {
return badRequest("内容不能为空");
}
try {
message.setIsRead(false);
message.setMsgType(1);
message.setMsgTime(LocalDateTime.now());
MessageSender.send(message);
return success(true);
} catch (Exception e) {
log.error("发布消息失败", e);
return error("发布消息失败", e.getMessage());
}
}
@PostMapping("/batch-send")
@AutoLog(module = "消息", action = "批量发送消息")
public JsonResponse<Boolean> batchSave(@RequestBody BatchMessage message) {
if (message.getAcceptIds() == null || message.getAcceptIds().isEmpty()) {
return badRequest("无发送人信息");
}
if (message.getAcceptNames() == null || message.getAcceptNames().isEmpty()) {
return badRequest("无发送人姓名信息");
}
if (message.getAcceptIds().size() != message.getAcceptNames().size()) {
return badRequest("发送人姓名信息不相符");
}
if (StringUtil.isBlank(message.getTitle())) {
return badRequest("标题不能为空");
}
if (StringUtil.isBlank(message.getTitle())) {
return badRequest("标题不能为空");
}
if (StringUtil.isBlank(message.getContent())) {
return badRequest("内容不能为空");
}
try {
Message msg = new Message();
msg.setId(IDGenerator.generate());
msg.setContent(message.getContent());
msg.setConType("0");
msg.setIsRead(false);
msg.setMsgType(1);
msg.setPageParams(message.getPageParams());
msg.setPageType(message.getPageType());
msg.setRefId(message.getRefId());
msg.setRefType(message.getRefType());
msg.setSendAid(message.getSendAid());
msg.setSendName(message.getSendName());
msg.setSendType(1);
msg.setSource(message.getSource());
msg.setTitle(message.getTitle());
MessageSender.batchSend(message.getAcceptIds(), message.getAcceptNames(), msg);
return success(true);
} catch (Exception e) {
log.error("发布消息失败", e);
return error("发布消息失败", e.getMessage());
}
}
}