diff --git a/servers/boe-server-all/src/main/java/com/xboe/outsize/api/userGroupTaskApi.java b/servers/boe-server-all/src/main/java/com/xboe/outsize/api/userGroupTaskApi.java new file mode 100644 index 00000000..65313b7e --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/outsize/api/userGroupTaskApi.java @@ -0,0 +1,83 @@ +package com.xboe.outsize.api; + +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.module.exam.dto.ExamTestDto; +import com.xboe.module.exam.entity.ExamUserTask; +import com.xboe.module.exam.service.IExamUserTaskService; +import com.xboe.outsize.service.IuserGroupTaskService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +@Slf4j +@RestController +@RequestMapping(value = "/xboe/m/oldusergroup/task") +public class userGroupTaskApi extends ApiBaseController { + + @Resource + private IExamUserTaskService service; + + @Resource + private IuserGroupTaskService iuserGroupTaskService; + + + + /** + *考试的推送记录 + **/ +// @PostMapping("/list") +// public JsonResponse> list(String testId){ +// List list = service.findByTestId(testId); +// return success(list); +// } +// +// @PostMapping("/check-paper") +// public JsonResponse checkByPaperId(String paperId){ +// if(StringUtils.isBlank(paperId)) { +// return badRequest("参数错误,未指定试卷id"); +// } +// boolean ok=service.hasByPaperId(paperId); +// return success(ok); +// } + + /** + * 执行推送处理 + * */ + @PostMapping("execute") + @AutoLog(module = "考试管理",action = "推送考试",info = "") + public JsonResponse save(ExamTestDto task){ + if(StringUtil.isBlank(task.getTestId())){ + return badRequest("未指定考虑"); + } + if(StringUtil.isBlank(task.getTestName())){ + return badRequest("缺少考试标题"); + } + if(StringUtil.isBlank(task.getGroupId())){ + return badRequest("未指定受众"); + } + ExamUserTask hasTask=service.findByTestIdAndGroupId(task.getTestId(),task.getGroupId()); + + try { + if(hasTask!=null) { + //return badRequest("此受众已推送过了,不能重复推送"); + iuserGroupTaskService.rePushTask(task); + }else { + iuserGroupTaskService.addTask(task); + } + + return success(true); + } catch (Exception e) { + log.error("推送考试错误",e); + return error("推送考试失败",e.getMessage()); + } + } + +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/outsize/service/IuserGroupTaskService.java b/servers/boe-server-all/src/main/java/com/xboe/outsize/service/IuserGroupTaskService.java new file mode 100644 index 00000000..e012023f --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/outsize/service/IuserGroupTaskService.java @@ -0,0 +1,18 @@ +package com.xboe.outsize.service; + +import com.xboe.module.exam.dto.ExamTestDto; + +public interface IuserGroupTaskService { + + /** + * 推送 + * @param task + */ + void addTask(ExamTestDto task); + + /** + * 再次推送同一个任务 + * @param task + */ + void rePushTask(ExamTestDto task); +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/outsize/service/impl/UserGroupTaskServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/outsize/service/impl/UserGroupTaskServiceImpl.java new file mode 100644 index 00000000..3220a50c --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/outsize/service/impl/UserGroupTaskServiceImpl.java @@ -0,0 +1,160 @@ +package com.xboe.outsize.service.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.xboe.core.SysConstant; +import com.xboe.core.api.TokenProxy; +import com.xboe.core.orm.FieldFilters; +import com.xboe.core.utils.OkHttpUtil; +import com.xboe.module.exam.dao.AloneExamDao; +import com.xboe.module.exam.dto.ExamTestDto; +import com.xboe.module.exam.entity.AloneExam; +import com.xboe.module.exam.entity.AloneExamAnswer; +import com.xboe.module.exam.entity.ExamUserTask; +import com.xboe.module.exam.service.IExamUserTaskService; +import com.xboe.module.usergroup.entity.UserGroupItem; +import com.xboe.outsize.service.IuserGroupTaskService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +@Transactional +@Slf4j +public class UserGroupTaskServiceImpl implements IuserGroupTaskService { + + @Autowired + private HttpServletRequest request; + + @Autowired + private OkHttpUtil okHttpUtil; + + @Autowired + private AloneExamDao aloneExamDao; + + private String getNodeText(JsonNode jn) { + if(jn!=null) { + return jn.asText(); + }else { + return ""; + } + } + + + + + @Override + public void addTask(ExamTestDto task) { + String token = TokenProxy.getToken(request); + String type="application/json"; + String[] headers=new String[] {"token",token,"Content-Type",type}; + String url= SysConstant.getConfigValue("xboe.old.base.url")+"/userbasic/audience/memberList"; + Map params = new HashMap<>(); + params.put("audienceId", ""); + String json = null; + try { + ObjectMapper mapper=new ObjectMapper(); + json = mapper.writeValueAsString(params); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + String responseStr = okHttpUtil.doPostJson(url, json, headers); + JsonNode rootNode=null; + try { + ObjectMapper objectMapper = new ObjectMapper(); + rootNode = objectMapper.readTree(responseStr); + } catch (JsonProcessingException e) { + log.error("结构解析错误"); + } + + JsonNode result = rootNode.get("result")!=null ?( rootNode.get("result").get("data") !=null ? rootNode.get("result").get("data"):null):null; + if(rootNode.get("result")!=null & rootNode.get("result").isArray()) { + //防止加入两条的问题,应该是先查询,再添加 + Map amap= aloneExamDao.findMap("aid", "name",FieldFilters.eq("testId", task.getTestId())); + + //这里应该是单独的线程去处理 + for(JsonNode JsonNode :result) { + if(amap.containsKey(result.get("userId"))) { + continue; + } + //检查是否存在 + AloneExam aloneExam = new AloneExam(); + aloneExam.setAid(getNodeText(result.get("personId"))); + aloneExam.setTestId(task.getTestId()); + aloneExam.setTestName(task.getTestName()); + aloneExam.setName(getNodeText(result.get("userName"))); + aloneExam.setUcode(getNodeText(result.get("userNo"))); + aloneExam.setTestDuration(task.getDuration()); + aloneExam.setTaskTime(LocalDateTime.now()); + aloneExam.setStartTime(task.getStartTime()); + aloneExam.setStatus(AloneExamAnswer.STATUS_NONE);//未考试过 + aloneExam.setScore(0f); + aloneExamDao.save(aloneExam); + } + } +// examUserTask.setStatus(ExamUserTask.STATUS_FINISH); +// dao.update(examUserTask); + } + + @Override + public void rePushTask(ExamTestDto task) { + //查询受众的信息,2022、11、30 这个的返回需要从接口获取人员信息,然后推送 +// List items = ugroupDao.findList("groupId", task.getGroupId()); + String token = TokenProxy.getToken(request); + String type="application/json"; + String[] headers=new String[] {"token",token,"Content-Type",type}; + String url= SysConstant.getConfigValue("xboe.old.base.url")+"/userbasic/audience/memberList"; + Map params = new HashMap<>(); + params.put("audienceId", ""); + String json = null; + try { + ObjectMapper mapper=new ObjectMapper(); + json = mapper.writeValueAsString(params); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + String responseStr = okHttpUtil.doPostJson(url, json, headers); + JsonNode rootNode=null; + try { + ObjectMapper objectMapper = new ObjectMapper(); + rootNode = objectMapper.readTree(responseStr); + } catch (JsonProcessingException e) { + log.error("结构解析错误"); + } + + JsonNode result = rootNode.get("result")!=null ?( rootNode.get("result").get("data") !=null ? rootNode.get("result").get("data"):null):null; + if(rootNode.get("result")!=null & rootNode.get("result").isArray()) { + //防止加入两条的问题,应该是先查询,再添加 + Map amap= aloneExamDao.findMap("aid", "name",FieldFilters.eq("testId", task.getTestId())); + //这里应该是单独的线程去处理 + for(JsonNode JsonNode :result) { + if(amap.containsKey(result.get("userId"))) { + continue; + } + //检查是否存在 + AloneExam aloneExam = new AloneExam(); + aloneExam.setAid(getNodeText(result.get("personId"))); + aloneExam.setTestId(task.getTestId()); + aloneExam.setTestName(task.getTestName()); + aloneExam.setName(getNodeText(result.get("userName"))); + aloneExam.setUcode(getNodeText(result.get("userNo"))); + aloneExam.setTestDuration(task.getDuration()); + aloneExam.setTaskTime(LocalDateTime.now()); + aloneExam.setStartTime(task.getStartTime()); + aloneExam.setStatus(AloneExamAnswer.STATUS_NONE);//未考试过 + aloneExam.setScore(0f); + aloneExamDao.update(aloneExam); + } + } + //examUserTask.setStatus(ExamUserTask.STATUS_FINISH); + //dao.update(examUserTask); + } +}