From e144fde444d2f99a49d689b7d7eba03847bf33b3 Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Mon, 8 Jul 2024 11:12:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=90=E9=95=BF=E8=B7=AF=E5=BE=84=E5=9B=BE?= =?UTF-8?q?=EF=BC=8C=E8=80=83=E8=AF=95=E5=AE=9E=E6=97=B6=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/xboe/api/ThirdApi.java | 26 +++++++++++++++- .../xboe/api/vo/LocalDateTimeSerializer.java | 19 ++++++++++++ .../com/xboe/api/vo/SyncExamScoreBean.java | 31 +++++++++++++++++++ .../xboe/module/exam/api/AloneExamApi.java | 2 +- .../xboe/module/exam/entity/AloneExam.java | 1 + .../exam/service/IAloneExamService.java | 5 +-- .../service/impl/AloneExamServiceImpl.java | 30 +++++++++++++++++- .../src/main/resources/application.properties | 3 +- 8 files changed, 111 insertions(+), 6 deletions(-) create mode 100644 servers/boe-server-all/src/main/java/com/xboe/api/vo/LocalDateTimeSerializer.java create mode 100644 servers/boe-server-all/src/main/java/com/xboe/api/vo/SyncExamScoreBean.java diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java index b08b17cc..bcaa054e 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java @@ -4,18 +4,21 @@ 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.nacos.shaded.com.google.gson.Gson; +import com.alibaba.nacos.shaded.com.google.gson.*; import com.xboe.api.vo.*; 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.AloneExam; 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 java.time.LocalDateTime; import java.util.*; import java.util.concurrent.ForkJoinPool; import java.util.stream.Collectors; @@ -65,6 +68,9 @@ public class ThirdApi { @Value("${coursesuilt.checkBanding}") private String checkBanding; + @Value("${coursesuilt.syncExamScoreToCourseSuite}") + private String syncExamScoreToCourseSuite; + //获取例外人员的id public List getUserId(){ String responseBody = Optional.ofNullable(HttpRequest.get(infarasApiUrl+"?pid=316&type=1").execute() //prod 316 @@ -250,4 +256,22 @@ public class ThirdApi { return checkExamBandingBean.getData().toString(); } + + public void syncExamScoreToCourseSuite(AloneExam aloneExam,String token) { + Gson gson = new GsonBuilder() + .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()) + .create(); + + String json = gson.toJson(aloneExam); + String resp = HttpRequest.post(syncExamScoreToCourseSuite) + .body(json) + .header("token", token) + .execute() + .body(); + + if (StringUtils.isBlank(resp)){ + return; + } + JSONUtil.toBean(resp, SyncExamScoreBean.class).success(); + } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/LocalDateTimeSerializer.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/LocalDateTimeSerializer.java new file mode 100644 index 00000000..5f9fe399 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/LocalDateTimeSerializer.java @@ -0,0 +1,19 @@ +package com.xboe.api.vo; + +import com.alibaba.nacos.shaded.com.google.gson.JsonElement; +import com.alibaba.nacos.shaded.com.google.gson.JsonPrimitive; +import com.alibaba.nacos.shaded.com.google.gson.JsonSerializationContext; +import com.alibaba.nacos.shaded.com.google.gson.JsonSerializer; + +import java.lang.reflect.Type; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class LocalDateTimeSerializer implements JsonSerializer { + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + @Override + public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(formatter.format(src)); + } +} \ No newline at end of file diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/SyncExamScoreBean.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/SyncExamScoreBean.java new file mode 100644 index 00000000..3389dd04 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/SyncExamScoreBean.java @@ -0,0 +1,31 @@ +package com.xboe.api.vo; + +import cn.hutool.json.JSONUtil; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Data +@Slf4j +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SyncExamScoreBean { + + private boolean show; + private String version; + private int code; + private String msg; + private Object data; + private boolean success; + + public SyncExamScoreBean success() { + if (this.code!=200) { + log.error("同步考试到boe库失败----{}", JSONUtil.toJsonPrettyStr(this)); + return null; + } + return this; + } +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/exam/api/AloneExamApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/exam/api/AloneExamApi.java index 6021c186..0681d6a5 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/exam/api/AloneExamApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/exam/api/AloneExamApi.java @@ -547,7 +547,7 @@ public class AloneExamApi extends ApiBaseController { //Float realScore=this.calculateScore(answer); //转化成百分数 //answer.setScore(this.calculateScore(detail)); - service.submit(answer,scoreType); + service.submit(answer,scoreType,request); return success(map); } catch (Exception e) { log.error("提交答卷错误", e); diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/exam/entity/AloneExam.java b/servers/boe-server-all/src/main/java/com/xboe/module/exam/entity/AloneExam.java index 2f2a5c6a..33909cc7 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/exam/entity/AloneExam.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/exam/entity/AloneExam.java @@ -65,6 +65,7 @@ public class AloneExam extends IdBaseEntity { private String ucode; /**关联类型*/ + /**关联类型 新增关联类型14,代表成长路径图*/ @Column(name = "ref_type", length = 30) private String refType; diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/exam/service/IAloneExamService.java b/servers/boe-server-all/src/main/java/com/xboe/module/exam/service/IAloneExamService.java index 4546a777..d0acf6e7 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/exam/service/IAloneExamService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/exam/service/IAloneExamService.java @@ -1,6 +1,5 @@ package com.xboe.module.exam.service; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -95,9 +94,11 @@ public interface IAloneExamService { /** * 提交考试 + * * @param aea + * @param request */ - void submit(AloneExamAnswer aea,Integer scoreType); + void submit(AloneExamAnswer aea, Integer scoreType, HttpServletRequest request); /** * 更新答案 diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/exam/service/impl/AloneExamServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/exam/service/impl/AloneExamServiceImpl.java index adcf918e..57db3694 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/exam/service/impl/AloneExamServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/exam/service/impl/AloneExamServiceImpl.java @@ -2,6 +2,7 @@ package com.xboe.module.exam.service.impl; import java.time.LocalDateTime; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import javax.annotation.Resource; @@ -11,6 +12,8 @@ import com.xboe.api.ThirdApi; import com.xboe.module.exam.dao.ExamTestDao; import com.xboe.module.exam.dto.*; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -36,6 +39,7 @@ import org.springframework.transaction.support.DefaultTransactionDefinition; @Service public class AloneExamServiceImpl implements IAloneExamService{ + private static final Logger log = LoggerFactory.getLogger(AloneExamServiceImpl.class); @Resource AloneExamAnswerDao dao; @@ -65,7 +69,7 @@ public class AloneExamServiceImpl implements IAloneExamService{ @Override @Transactional - public void submit(AloneExamAnswer aea,Integer scoreType){ + public void submit(AloneExamAnswer aea, Integer scoreType, HttpServletRequest request){ //dao.update(aea); aea.setStatus(AloneExamAnswer.STATUS_FINISH); LocalDateTime now=LocalDateTime.now(); @@ -112,6 +116,30 @@ public class AloneExamServiceImpl implements IAloneExamService{ // //这种情况汶是不存在的 // } } + syncExamScoreToCourseSuite(aea, request); + } + + private void syncExamScoreToCourseSuite(AloneExamAnswer aea, HttpServletRequest request) { + String token = request.getHeader("Xboe-Access-Token"); + if (StringUtils.isEmpty(token)) { + token = request.getHeader("token"); + } + + String finalToken = token; + CompletableFuture.supplyAsync(() -> { + AloneExam aloneExam = aeDao.findOne(FieldFilters.eq("aid", aea.getAid()), FieldFilters.eq("testId", aea.getTestId())); + if (aloneExam.getRefType().equals("14")){ + int i = 1 / 0; // 这行将引发异常 + thirdApi.syncExamScoreToCourseSuite(aloneExam, finalToken); + } + return "完成结果"; + }).exceptionally(ex -> { + log.error("异步操作中发生错误: " + ex.getMessage(), ex); + return "发生错误"; + }).thenAccept(result -> { + log.info("同步考试成绩到课程项目完成:" + result); + }); + } @Override diff --git a/servers/boe-server-all/src/main/resources/application.properties b/servers/boe-server-all/src/main/resources/application.properties index a413cdaa..0e2ba023 100644 --- a/servers/boe-server-all/src/main/resources/application.properties +++ b/servers/boe-server-all/src/main/resources/application.properties @@ -75,4 +75,5 @@ manageApi.stu.offcourse=${boe.domain}/manageApi/stu/offcourse/getOffCourseId userBasic.getTeacherIds=${boe.domain}/userbasic/user/getTeacherInfo userBasic.getUserIdByWorkNum=${boe.domain}/userbasic/user/getUserIdByWorkNum coursesuilt.getStudyStatus=${boe.domain}/manageApi/stu/project/completeStatus -coursesuilt.checkBanding=${boe.domain}/manageApi/stu/task/exam/checkBanding \ No newline at end of file +coursesuilt.checkBanding=${boe.domain}/manageApi/stu/task/exam/checkBanding +coursesuilt.syncExamScoreToCourseSuite=${boe.domain}/manageApi/stu/task/exam/syncExamScoreToCourseSuite \ No newline at end of file