AssessmentTemplatePlanServiceImpl.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483
  1. package com.xjrsoft.module.assessment.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import cn.hutool.core.util.IdUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import com.alibaba.fastjson.JSONObject;
  7. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  8. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  9. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  10. import com.github.yulichang.base.MPJBaseServiceImpl;
  11. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  12. import com.xjrsoft.common.enums.DeleteMark;
  13. import com.xjrsoft.common.utils.VoToColumnUtil;
  14. import com.xjrsoft.config.CommonPropertiesConfig;
  15. import com.xjrsoft.module.assessment.dto.AddAssessmentTemplatePlanDto;
  16. import com.xjrsoft.module.assessment.dto.AssessmentPlanAnswerPageDto;
  17. import com.xjrsoft.module.assessment.dto.AssessmentPlanAnswerStudentDto;
  18. import com.xjrsoft.module.assessment.dto.AssessmentPlanAnswerSubmitDto;
  19. import com.xjrsoft.module.assessment.dto.AssessmentPlanSubmitDto;
  20. import com.xjrsoft.module.assessment.dto.AssessmentQuestionResultDto;
  21. import com.xjrsoft.module.assessment.dto.AssessmentTemplatePlanPageDto;
  22. import com.xjrsoft.module.assessment.dto.AssessmentTemplatePlanSureDto;
  23. import com.xjrsoft.module.assessment.dto.UpdateAssessmentTemplatePlanDto;
  24. import com.xjrsoft.module.assessment.dto.UpdateAssessmentTemplatePlanTimeDto;
  25. import com.xjrsoft.module.assessment.entity.AssessmentPlanAnswerClass;
  26. import com.xjrsoft.module.assessment.entity.AssessmentPlanAnswerResult;
  27. import com.xjrsoft.module.assessment.entity.AssessmentPlanAnswerStudent;
  28. import com.xjrsoft.module.assessment.entity.AssessmentPlanQuestion;
  29. import com.xjrsoft.module.assessment.entity.AssessmentQuestion;
  30. import com.xjrsoft.module.assessment.entity.AssessmentTemplate;
  31. import com.xjrsoft.module.assessment.entity.AssessmentTemplatePlan;
  32. import com.xjrsoft.module.assessment.mapper.AssessmentPlanAnswerClassMapper;
  33. import com.xjrsoft.module.assessment.mapper.AssessmentPlanAnswerResultMapper;
  34. import com.xjrsoft.module.assessment.mapper.AssessmentPlanAnswerStudentMapper;
  35. import com.xjrsoft.module.assessment.mapper.AssessmentPlanQuestionMapper;
  36. import com.xjrsoft.module.assessment.mapper.AssessmentQuestionMapper;
  37. import com.xjrsoft.module.assessment.mapper.AssessmentTemplateMapper;
  38. import com.xjrsoft.module.assessment.mapper.AssessmentTemplatePlanMapper;
  39. import com.xjrsoft.module.assessment.service.IAssessmentTemplatePlanService;
  40. import com.xjrsoft.module.assessment.vo.AssessmentPlanAnswerClassResultVo;
  41. import com.xjrsoft.module.assessment.vo.AssessmentPlanAnswerDetailVo;
  42. import com.xjrsoft.module.assessment.vo.AssessmentPlanAnswerStudentPageVo;
  43. import com.xjrsoft.module.assessment.vo.AssessmentPlanAnswerStudentVo;
  44. import com.xjrsoft.module.assessment.vo.AssessmentPlanAnswerTeacherPageVo;
  45. import com.xjrsoft.module.assessment.vo.AssessmentQuestionResultVo;
  46. import com.xjrsoft.module.assessment.vo.AssessmentQuestionVo;
  47. import com.xjrsoft.module.assessment.vo.AssessmentTemplatePlanPageVo;
  48. import com.xjrsoft.module.assessment.vo.AssessmentTemplatePlanQuestionVo;
  49. import com.xjrsoft.module.base.entity.BaseClass;
  50. import com.xjrsoft.module.base.mapper.BaseClassMapper;
  51. import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
  52. import com.xjrsoft.module.organization.service.IWeChatService;
  53. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  54. import com.xjrsoft.module.teacher.entity.XjrUser;
  55. import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
  56. import lombok.AllArgsConstructor;
  57. import org.springframework.stereotype.Service;
  58. import org.springframework.transaction.annotation.Transactional;
  59. import java.text.SimpleDateFormat;
  60. import java.util.ArrayList;
  61. import java.util.Date;
  62. import java.util.HashMap;
  63. import java.util.List;
  64. import java.util.Map;
  65. import java.util.Random;
  66. /**
  67. * @title: 考核计划
  68. * @Author dzx
  69. * @Date: 2024-04-01
  70. * @Version 1.0
  71. */
  72. @Service
  73. @AllArgsConstructor
  74. public class AssessmentTemplatePlanServiceImpl extends MPJBaseServiceImpl<AssessmentTemplatePlanMapper, AssessmentTemplatePlan> implements IAssessmentTemplatePlanService {
  75. private final AssessmentTemplatePlanMapper templatePlanMapper;
  76. private final AssessmentPlanQuestionMapper planQuestionMapper;
  77. private final AssessmentPlanAnswerClassMapper answerClassMapper;
  78. private final AssessmentPlanAnswerStudentMapper studentMapper;
  79. private final AssessmentTemplateMapper assessmentTemplateMapper;
  80. private final AssessmentQuestionMapper questionMapper;
  81. private final AssessmentPlanAnswerResultMapper resultMapper;
  82. private final XjrUserMapper xjrUserMapper;
  83. private final IWeChatService weChatService;
  84. private final CommonPropertiesConfig commonPropertiesConfig;
  85. private final BaseClassMapper baseClassMapper;
  86. @Override
  87. @Transactional(rollbackFor = Exception.class)
  88. public Boolean add(AddAssessmentTemplatePlanDto dto) {
  89. AssessmentTemplate template = assessmentTemplateMapper.selectById(dto.getAssessmentTemplateId());
  90. AssessmentTemplatePlan assessmentTemplatePlan = BeanUtil.toBean(dto, AssessmentTemplatePlan.class);
  91. assessmentTemplatePlan.setScore(template.getScore());
  92. templatePlanMapper.insert(assessmentTemplatePlan);
  93. //查询模板下面的题目信息
  94. List<AssessmentQuestion> questionList = questionMapper.selectList(
  95. new QueryWrapper<AssessmentQuestion>().lambda()
  96. .eq(AssessmentQuestion::getDeleteMark, DeleteMark.NODELETE.getCode())
  97. .eq(AssessmentQuestion::getAssessmentTemplateId, dto.getAssessmentTemplateId())
  98. );
  99. Map<Long, Long> parentMap = new HashMap<>();
  100. for (AssessmentQuestion assessmentQuestion : questionList) {
  101. parentMap.put(assessmentQuestion.getId(), IdUtil.getSnowflakeNextId());
  102. }
  103. for (AssessmentQuestion assessmentQuestion : questionList) {
  104. AssessmentPlanQuestion planQuestion = BeanUtil.toBean(assessmentQuestion, AssessmentPlanQuestion.class);
  105. planQuestion.setId(parentMap.get(assessmentQuestion.getId()));
  106. planQuestion.setParentId(parentMap.get(assessmentQuestion.getParentId()));
  107. planQuestion.setAssessmentTemplatePlanId(assessmentTemplatePlan.getId());
  108. planQuestionMapper.insert(planQuestion);
  109. }
  110. List<BaseClass> classList = baseClassMapper.selectList(
  111. new QueryWrapper<BaseClass>().lambda()
  112. .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
  113. .eq(BaseClass::getIsGraduate, 1)
  114. );
  115. List<Long> classIds = new ArrayList<>();
  116. if("all".equals(dto.getType())){
  117. for (BaseClass baseClass : classList) {
  118. classIds.add(baseClass.getId());
  119. }
  120. }else if("random".equals(dto.getType())){
  121. List<Integer> randomList = new ArrayList<>();
  122. Random random = new Random();
  123. while(randomList.size() < dto.getRandomNumber()){
  124. int nextInt = random.nextInt(classList.size());
  125. if(!randomList.contains(nextInt) && nextInt >= 0){
  126. randomList.add(nextInt);
  127. }
  128. }
  129. for (Integer i : randomList) {
  130. classIds.add(classList.get(i).getId());
  131. }
  132. }
  133. //存入班级,并根据选人方式存入答题学生
  134. for (Long classId : dto.getClassIds()) {
  135. AssessmentPlanAnswerClass answerClass = new AssessmentPlanAnswerClass();
  136. answerClass.setAssessmentTemplatePlanId(assessmentTemplatePlan.getId());
  137. answerClass.setClassId(classId);
  138. answerClassMapper.insert(answerClass);
  139. MPJLambdaWrapper<XjrUser> query = new MPJLambdaWrapper<>();
  140. query.leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, XjrUser::getId)
  141. .eq(BaseStudentSchoolRoll::getClassId, classId);
  142. List<XjrUser> studentList = xjrUserMapper.selectJoinList(XjrUser.class, query);
  143. for (XjrUser xjrUser : studentList) {
  144. AssessmentPlanAnswerStudent answer = new AssessmentPlanAnswerStudent();
  145. answer.setAssessmentTemplatePlanId(assessmentTemplatePlan.getId());
  146. answer.setStudentUserId(xjrUser.getId());
  147. studentMapper.insert(answer);
  148. }
  149. }
  150. return true;
  151. }
  152. @Override
  153. @Transactional(rollbackFor = Exception.class)
  154. public Boolean update(UpdateAssessmentTemplatePlanDto dto) {
  155. AssessmentTemplate template = assessmentTemplateMapper.selectById(dto.getAssessmentTemplateId());
  156. AssessmentTemplatePlan assessmentTemplatePlan = BeanUtil.toBean(dto, AssessmentTemplatePlan.class);
  157. assessmentTemplatePlan.setScore(template.getScore());
  158. templatePlanMapper.updateById(assessmentTemplatePlan);
  159. //删除以前的题目
  160. planQuestionMapper.deleteByPlanId(assessmentTemplatePlan.getId(), StpUtil.getLoginIdAsLong());
  161. //查询模板下面的题目信息
  162. List<AssessmentQuestion> questionList = questionMapper.selectList(
  163. new QueryWrapper<AssessmentQuestion>().lambda()
  164. .eq(AssessmentQuestion::getDeleteMark, DeleteMark.NODELETE.getCode())
  165. .eq(AssessmentQuestion::getAssessmentTemplateId, dto.getAssessmentTemplateId())
  166. .orderByAsc(AssessmentQuestion::getCategory)
  167. );
  168. Map<Long, Long> parentMap = new HashMap<>();
  169. for (AssessmentQuestion assessmentQuestion : questionList) {
  170. parentMap.put(assessmentQuestion.getId(), IdUtil.getSnowflakeNextId());
  171. }
  172. for (AssessmentQuestion assessmentQuestion : questionList) {
  173. AssessmentPlanQuestion planQuestion = BeanUtil.toBean(assessmentQuestion, AssessmentPlanQuestion.class);
  174. planQuestion.setId(parentMap.get(assessmentQuestion.getId()));
  175. planQuestion.setParentId(parentMap.get(assessmentQuestion.getParentId()));
  176. planQuestion.setAssessmentTemplatePlanId(assessmentTemplatePlan.getId());
  177. planQuestionMapper.insert(planQuestion);
  178. }
  179. //删除班级和学生
  180. answerClassMapper.deleteByPlanId(assessmentTemplatePlan.getId(), StpUtil.getLoginIdAsLong());
  181. studentMapper.deleteByPlanId(assessmentTemplatePlan.getId(), StpUtil.getLoginIdAsLong());
  182. List<BaseClass> classList = baseClassMapper.selectList(
  183. new QueryWrapper<BaseClass>().lambda()
  184. .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
  185. .eq(BaseClass::getIsGraduate, 1)
  186. );
  187. List<Long> classIds = new ArrayList<>();
  188. if("all".equals(dto.getType())){
  189. for (BaseClass baseClass : classList) {
  190. classIds.add(baseClass.getId());
  191. }
  192. }else if("random".equals(dto.getType())){
  193. List<Integer> randomList = new ArrayList<>();
  194. Random random = new Random();
  195. while(randomList.size() < dto.getRandomNumber()){
  196. int nextInt = random.nextInt(classList.size());
  197. if(!randomList.contains(nextInt) && nextInt >= 0){
  198. randomList.add(nextInt);
  199. }
  200. }
  201. for (Integer i : randomList) {
  202. classIds.add(classList.get(i).getId());
  203. }
  204. }
  205. //存入班级,并根据选人方式存入答题学生
  206. for (Long classId : dto.getClassIds()) {
  207. AssessmentPlanAnswerClass answerClass = new AssessmentPlanAnswerClass();
  208. answerClass.setAssessmentTemplatePlanId(assessmentTemplatePlan.getId());
  209. answerClass.setClassId(classId);
  210. answerClassMapper.insert(answerClass);
  211. MPJLambdaWrapper<XjrUser> query = new MPJLambdaWrapper<>();
  212. query.leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, XjrUser::getId)
  213. .eq(BaseStudentSchoolRoll::getClassId, classId);
  214. List<XjrUser> studentList = xjrUserMapper.selectJoinList(XjrUser.class, query);
  215. for (XjrUser xjrUser : studentList) {
  216. AssessmentPlanAnswerStudent answer = new AssessmentPlanAnswerStudent();
  217. answer.setAssessmentTemplatePlanId(assessmentTemplatePlan.getId());
  218. answer.setStudentUserId(xjrUser.getId());
  219. studentMapper.insert(answer);
  220. }
  221. }
  222. return true;
  223. }
  224. @Override
  225. public Boolean updateTime(UpdateAssessmentTemplatePlanTimeDto dto) {
  226. AssessmentTemplatePlan assessmentTemplatePlan = BeanUtil.toBean(dto, AssessmentTemplatePlan.class);
  227. templatePlanMapper.updateById(assessmentTemplatePlan);
  228. return true;
  229. }
  230. @Override
  231. @Transactional(rollbackFor = Exception.class)
  232. public Boolean delete(List<Long> ids) {
  233. templatePlanMapper.deleteBatchIds(ids);
  234. planQuestionMapper.delete(Wrappers.lambdaQuery(AssessmentPlanQuestion.class).in(AssessmentPlanQuestion::getAssessmentTemplatePlanId, ids));
  235. answerClassMapper.delete(Wrappers.lambdaQuery(AssessmentPlanAnswerClass.class).in(AssessmentPlanAnswerClass::getAssessmentTemplatePlanId, ids));
  236. studentMapper.delete(Wrappers.lambdaQuery(AssessmentPlanAnswerStudent.class).in(AssessmentPlanAnswerStudent::getAssessmentTemplatePlanId, ids));
  237. return true;
  238. }
  239. @Override
  240. public Page<AssessmentTemplatePlanPageVo> getPage(Page<AssessmentTemplatePlanPageVo> page, AssessmentTemplatePlanPageDto dto) {
  241. return templatePlanMapper.getPage(page, dto);
  242. }
  243. @Override
  244. public Page<AssessmentPlanAnswerStudentPageVo> getStudentPage(Page<AssessmentPlanAnswerStudentPageVo> page, AssessmentPlanAnswerPageDto dto) {
  245. return templatePlanMapper.getStudentPage(page, dto);
  246. }
  247. @Override
  248. public Page<AssessmentPlanAnswerTeacherPageVo> getTeacherPage(Page<AssessmentPlanAnswerTeacherPageVo> page, AssessmentPlanAnswerPageDto dto) {
  249. return templatePlanMapper.getTeacherPage(page, dto);
  250. }
  251. @Override
  252. public Boolean sure(AssessmentTemplatePlanSureDto dto) {
  253. long teacherId = StpUtil.getLoginIdAsLong();
  254. answerClassMapper.sure(dto, teacherId);
  255. studentMapper.sure(dto, teacherId);
  256. return true;
  257. }
  258. @Override
  259. public AssessmentTemplatePlanQuestionVo getQuestionsById(Long id) {
  260. AssessmentTemplatePlan templatePlan = templatePlanMapper.selectById(id);
  261. AssessmentTemplatePlanQuestionVo vo = BeanUtil.toBean(templatePlan, AssessmentTemplatePlanQuestionVo.class);
  262. List<AssessmentPlanQuestion> questionList = planQuestionMapper.selectList(
  263. new QueryWrapper<AssessmentPlanQuestion>().lambda()
  264. .eq(AssessmentPlanQuestion::getDeleteMark, DeleteMark.NODELETE.getCode())
  265. .eq(AssessmentPlanQuestion::getAssessmentTemplatePlanId, id)
  266. );
  267. Integer submitStatus = studentMapper.getSubmitStatus(id, StpUtil.getLoginIdAsLong());
  268. vo.setSubmitStatus(submitStatus);
  269. AssessmentQuestionResultDto resultDto = new AssessmentQuestionResultDto();
  270. resultDto.setAssessmentTemplatePlanId(id);
  271. resultDto.setUserId(StpUtil.getLoginIdAsLong());
  272. List<AssessmentQuestionResultVo> resultList = resultMapper.getResultList(resultDto);
  273. Map<Long, String> resultMap = new HashMap<>();
  274. for (AssessmentQuestionResultVo resultVo : resultList) {
  275. resultMap.put(resultVo.getQuestionId(), resultVo.getAnswer());
  276. }
  277. //循环大题
  278. List<AssessmentQuestionVo> oneList = new ArrayList<>();
  279. for (AssessmentPlanQuestion assessmentQuestion : questionList) {
  280. if(assessmentQuestion.getCategory() == 1){
  281. oneList.add(BeanUtil.toBean(assessmentQuestion, AssessmentQuestionVo.class));
  282. }
  283. }
  284. //循环小题
  285. for (AssessmentQuestionVo oneQuestion : oneList) {
  286. List<AssessmentQuestionVo> twoList = new ArrayList<>();
  287. for (AssessmentPlanQuestion assessmentQuestion : questionList) {
  288. if(assessmentQuestion.getCategory() == 2 && assessmentQuestion.getParentId().equals(oneQuestion.getId())){
  289. AssessmentQuestionVo questionVo = BeanUtil.toBean(assessmentQuestion, AssessmentQuestionVo.class);
  290. questionVo.setValue(resultMap.get(questionVo.getId()));
  291. twoList.add(questionVo);
  292. }
  293. }
  294. oneQuestion.setChildren(twoList);
  295. }
  296. //循环选项
  297. for (AssessmentQuestionVo oneQuestion : oneList) {
  298. for (AssessmentQuestionVo twoQuestion : oneQuestion.getChildren()) {
  299. List<AssessmentQuestionVo> optionList = new ArrayList<>();
  300. for (AssessmentPlanQuestion assessmentQuestion : questionList) {
  301. if(assessmentQuestion.getCategory() == 3 && assessmentQuestion.getParentId().equals(twoQuestion.getId())){
  302. optionList.add(BeanUtil.toBean(assessmentQuestion, AssessmentQuestionVo.class));
  303. }
  304. }
  305. twoQuestion.setOptions(optionList);
  306. }
  307. }
  308. vo.setChildren(oneList);
  309. return vo;
  310. }
  311. @Override
  312. public Boolean saveAnswer(AssessmentPlanSubmitDto dto) {
  313. long studentUserId = StpUtil.getLoginIdAsLong();
  314. Date date = new Date();
  315. // 学生提交
  316. studentMapper.submitAnswer(dto.getAssessmentTemplatePlanId(), studentUserId);
  317. for (AssessmentPlanAnswerSubmitDto answerSubmitDto : dto.getAnswerList()) {
  318. AssessmentPlanAnswerResult answerStudent = new AssessmentPlanAnswerResult();
  319. answerStudent.setAssessmentTemplatePlanId(dto.getAssessmentTemplatePlanId());
  320. answerStudent.setStudentUserId(studentUserId);
  321. answerStudent.setCreateDate(date);
  322. answerStudent.setQuestionId(answerSubmitDto.getQuestionId());
  323. answerStudent.setAnswerId(answerSubmitDto.getAnswerId());
  324. resultMapper.insert(answerStudent);
  325. }
  326. return true;
  327. }
  328. @Override
  329. public List<AssessmentTemplatePlanPageVo> getMobilePage(AssessmentTemplatePlanPageDto dto) {
  330. return templatePlanMapper.getMobilePage(dto);
  331. }
  332. @Override
  333. public List<AssessmentPlanAnswerStudentVo> getAnswerStudent(AssessmentPlanAnswerStudentDto dto) {
  334. List<String> roleList = StpUtil.getRoleList();
  335. if(roleList.size() == 2 && roleList.contains("CLASSTE") && roleList.contains("TEACHER")){
  336. dto.setTeacherId(StpUtil.getLoginIdAsLong());
  337. }
  338. return templatePlanMapper.getAnswerStudent(dto);
  339. }
  340. @Override
  341. public List<Long> getSemesterClass(Long id) {
  342. return templatePlanMapper.getSemesterClass(id);
  343. }
  344. @Override
  345. public List<AssessmentPlanAnswerClassResultVo> getClassResult(Long id) {
  346. return resultMapper.getClassResult(id);
  347. }
  348. @Override
  349. public AssessmentTemplatePlanQuestionVo getQuestionResult(Long id) {
  350. AssessmentTemplatePlan templatePlan = templatePlanMapper.selectById(id);
  351. AssessmentTemplatePlanQuestionVo vo = BeanUtil.toBean(templatePlan, AssessmentTemplatePlanQuestionVo.class);
  352. vo.setStudentCount(studentMapper.getStudentCount(id));
  353. List<AssessmentPlanQuestion> questionList = planQuestionMapper.selectList(
  354. new QueryWrapper<AssessmentPlanQuestion>().lambda()
  355. .eq(AssessmentPlanQuestion::getDeleteMark, DeleteMark.NODELETE.getCode())
  356. .eq(AssessmentPlanQuestion::getAssessmentTemplatePlanId, id)
  357. );
  358. List<AssessmentPlanAnswerDetailVo> questionResult = resultMapper.getQuestionResult(id);
  359. Map<String, Integer> answerCountMap = new HashMap<>();
  360. for (AssessmentPlanAnswerDetailVo countVo : questionResult) {
  361. answerCountMap.put(countVo.getQuestionId().toString() + countVo.getAnswerId(), countVo.getChooseCount());
  362. }
  363. //循环大题
  364. List<AssessmentQuestionVo> oneList = new ArrayList<>();
  365. for (AssessmentPlanQuestion assessmentQuestion : questionList) {
  366. if(assessmentQuestion.getCategory() == 1){
  367. oneList.add(BeanUtil.toBean(assessmentQuestion, AssessmentQuestionVo.class));
  368. }
  369. }
  370. //循环小题
  371. for (AssessmentQuestionVo oneQuestion : oneList) {
  372. List<AssessmentQuestionVo> twoList = new ArrayList<>();
  373. for (AssessmentPlanQuestion assessmentQuestion : questionList) {
  374. if(assessmentQuestion.getCategory() == 2 && assessmentQuestion.getParentId().equals(oneQuestion.getId())){
  375. AssessmentQuestionVo questionVo = BeanUtil.toBean(assessmentQuestion, AssessmentQuestionVo.class);
  376. twoList.add(questionVo);
  377. }
  378. }
  379. oneQuestion.setChildren(twoList);
  380. }
  381. //循环选项
  382. for (AssessmentQuestionVo oneQuestion : oneList) {
  383. for (AssessmentQuestionVo twoQuestion : oneQuestion.getChildren()) {
  384. List<AssessmentQuestionVo> optionList = new ArrayList<>();
  385. for (AssessmentPlanQuestion assessmentQuestion : questionList) {
  386. if(assessmentQuestion.getCategory() == 3 && assessmentQuestion.getParentId().equals(twoQuestion.getId())){
  387. AssessmentQuestionVo questionVo = BeanUtil.toBean(assessmentQuestion, AssessmentQuestionVo.class);
  388. questionVo.setChooseCount(answerCountMap.get(assessmentQuestion.getParentId().toString() + assessmentQuestion.getId().toString()));
  389. optionList.add(questionVo);
  390. }
  391. if(assessmentQuestion.getCategory() == 2 && "judge_question".equals(assessmentQuestion.getType())){
  392. optionList.add(new AssessmentQuestionVo(){{
  393. setId(1L);
  394. setChooseCount(answerCountMap.get(assessmentQuestion.getId().toString() + "1"));
  395. }});
  396. optionList.add(new AssessmentQuestionVo(){{
  397. setId(2L);
  398. setChooseCount(answerCountMap.get(assessmentQuestion.getId().toString() + "2"));
  399. }});
  400. }
  401. }
  402. twoQuestion.setOptions(optionList);
  403. }
  404. }
  405. vo.setChildren(oneList);
  406. return vo;
  407. }
  408. @Override
  409. public Boolean sendMsg(AssessmentTemplatePlanSureDto dto) {
  410. //先查询班上的所有学生
  411. MPJLambdaWrapper<XjrUser> queryWrapper = new MPJLambdaWrapper<>();
  412. queryWrapper
  413. .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
  414. .innerJoin(AssessmentPlanAnswerStudent.class, AssessmentPlanAnswerStudent::getStudentUserId,XjrUser::getId)
  415. .innerJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId,XjrUser::getId)
  416. .eq(BaseStudentSchoolRoll::getClassId , dto.getClassId())
  417. .eq(AssessmentPlanAnswerStudent::getAssessmentTemplatePlanId , dto.getId())
  418. .disableSubLogicDel();
  419. List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class, queryWrapper);
  420. AssessmentTemplatePlan templatePlan = templatePlanMapper.selectById(dto.getId());
  421. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
  422. for (XjrUser user : userList) {
  423. WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
  424. weChatSendMessageDto.setUserId(user.getOpenId());
  425. weChatSendMessageDto.setTemplateId("ehYfXni7exZUmt6dJX4Ukbm9ETarFfKLfXVYwNnjKMc");
  426. weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/student/canteen/evaluate?id={}", commonPropertiesConfig.getDomainApp(), dto.getId()));
  427. weChatSendMessageDto.setMsgId(dto.getId().toString());
  428. JSONObject data = new JSONObject();
  429. data.put("thing1.DATA", templatePlan.getName());
  430. data.put("time2.DATA", sdf.format(templatePlan.getStartTime()));
  431. data.put("time3.DATA", sdf.format(templatePlan.getEndTime()));
  432. data.put("thing5.DATA", "test");
  433. data.put("thing8.DATA", "test");
  434. weChatSendMessageDto.setContent(data);
  435. weChatService.sendTemplateMessage(weChatSendMessageDto);
  436. }
  437. return true;
  438. }
  439. }