TextbookStudentClaimServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. package com.xjrsoft.module.textbook.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.github.yulichang.base.MPJBaseServiceImpl;
  7. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  8. import com.xjrsoft.common.exception.MyException;
  9. import com.xjrsoft.common.page.ConventPage;
  10. import com.xjrsoft.common.utils.VoToColumnUtil;
  11. import com.xjrsoft.module.base.entity.BaseClass;
  12. import com.xjrsoft.module.base.entity.BaseSemester;
  13. import com.xjrsoft.module.base.service.IBaseClassService;
  14. import com.xjrsoft.module.base.service.IBaseSemesterService;
  15. import com.xjrsoft.module.student.entity.BaseStudent;
  16. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  17. import com.xjrsoft.module.teacher.entity.AttendanceRecord;
  18. import com.xjrsoft.module.teacher.entity.XjrUser;
  19. import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
  20. import com.xjrsoft.module.textbook.dto.TeacherCheckByStuDto;
  21. import com.xjrsoft.module.textbook.dto.TeacherCheckByclassDto;
  22. import com.xjrsoft.module.textbook.dto.TeacherCheckStuClaimDto;
  23. import com.xjrsoft.module.textbook.dto.TextbookClaimStudentConfirmDto;
  24. import com.xjrsoft.module.textbook.entity.Textbook;
  25. import com.xjrsoft.module.textbook.entity.TextbookStudentClaim;
  26. import com.xjrsoft.module.textbook.entity.WfTextbookClaim;
  27. import com.xjrsoft.module.textbook.entity.WfTextbookClaimItem;
  28. import com.xjrsoft.module.textbook.mapper.TextbookStudentClaimMapper;
  29. import com.xjrsoft.module.textbook.mapper.WfTextbookClaimItemMapper;
  30. import com.xjrsoft.module.textbook.mapper.WfTextbookClaimMapper;
  31. import com.xjrsoft.module.textbook.service.ITextbookStudentClaimService;
  32. import com.xjrsoft.module.textbook.vo.*;
  33. import lombok.AllArgsConstructor;
  34. import org.springframework.stereotype.Service;
  35. import org.springframework.transaction.annotation.Transactional;
  36. import java.util.ArrayList;
  37. import java.util.Date;
  38. import java.util.List;
  39. /**
  40. * @title: 学生教材认领记录
  41. * @Author szs
  42. * @Date: 2023-12-26
  43. * @Version 1.0
  44. */
  45. @Service
  46. @AllArgsConstructor
  47. public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<TextbookStudentClaimMapper, TextbookStudentClaim> implements ITextbookStudentClaimService {
  48. private final XjrUserMapper xjrUserMapper;
  49. private final TextbookStudentClaimMapper textbookStudentClaimMapper;
  50. private final IBaseSemesterService baseSemesterService;
  51. private final IBaseClassService baseClassService;
  52. private final WfTextbookClaimMapper wfTextbookClaimMapper;
  53. private final WfTextbookClaimItemMapper wfTextbookClaimItemMapper;
  54. @Override
  55. public TextbookClaimStudentConfirmVo getStudentConfirmList(TextbookClaimStudentConfirmDto dto) {
  56. //获取当前登录学生的信息
  57. MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
  58. queryUser.selectAs(XjrUser::getName, TextbookClaimStudentConfirmVo::getStudentName).selectAs(BaseStudent::getStudentId, TextbookClaimStudentConfirmVo::getStudentId).selectAs(BaseClass::getName, TextbookClaimStudentConfirmVo::getClassCN).leftJoin(BaseStudent.class, BaseStudent::getUserId, XjrUser::getId).leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, XjrUser::getId).leftJoin(BaseClass.class, BaseClass::getId, BaseStudentSchoolRoll::getClassId).eq(XjrUser::getId, StpUtil.getLoginIdAsLong()).disableSubLogicDel().orderByDesc(AttendanceRecord::getId);
  59. TextbookClaimStudentConfirmVo textbookClaimStudentConfirmVo = xjrUserMapper.selectJoinOne(TextbookClaimStudentConfirmVo.class, queryUser);
  60. if (ObjectUtil.isNull(textbookClaimStudentConfirmVo)) {
  61. throw new MyException("登录信息出错,请重新登录");
  62. }
  63. //根据学期id查出学期名称
  64. BaseSemester baseSemester = baseSemesterService.getById(dto.getBaseSemesterId());
  65. textbookClaimStudentConfirmVo.setBaseSemesterCN(baseSemester.getName());
  66. dto.setStudentUserId(StpUtil.getLoginIdAsLong());
  67. List<TextbookClaimVO> textbookClaimVOList = textbookStudentClaimMapper.getTextbookClaimList(dto);
  68. textbookClaimStudentConfirmVo.setTextbookClaimVoList(textbookClaimVOList);
  69. return textbookClaimStudentConfirmVo;
  70. }
  71. @Override
  72. public List<TextbookStudentSemesterVo> getStudentSemesterList() {
  73. //获取当前学生领取记录的所有学期
  74. MPJLambdaWrapper<TextbookStudentClaim> qwerySemester = new MPJLambdaWrapper<>();
  75. qwerySemester
  76. .distinct()
  77. .disableSubLogicDel()
  78. .selectAs(BaseSemester::getName, TextbookStudentSemesterVo::getBaseSemesterIdCN)
  79. .select(TextbookStudentClaim.class, x -> VoToColumnUtil.fieldsToColumns(TextbookStudentSemesterVo.class).contains(x.getProperty()))
  80. .leftJoin(BaseSemester.class, BaseSemester::getId, TextbookStudentClaim::getBaseSemesterId)
  81. .eq(TextbookStudentClaim::getStudentUserId, StpUtil.getLoginIdAsLong());
  82. List<TextbookStudentSemesterVo> textbookStudentSemesterVoList = this.selectJoinList(TextbookStudentSemesterVo.class, qwerySemester);
  83. if (ObjectUtil.isNull(textbookStudentSemesterVoList) && textbookStudentSemesterVoList.size() == 0) {
  84. return null;
  85. }
  86. //为每个学期添加未领取人数
  87. for (TextbookStudentSemesterVo textbookStudentSemesterVo : textbookStudentSemesterVoList) {
  88. LambdaQueryWrapper<TextbookStudentClaim> queryWrapperNotClaimNum = new LambdaQueryWrapper<>();
  89. queryWrapperNotClaimNum.eq(TextbookStudentClaim::getStudentUserId, StpUtil.getLoginIdAsLong()).eq(TextbookStudentClaim::getBaseSemesterId, textbookStudentSemesterVo.getBaseSemesterId()).eq(TextbookStudentClaim::getIsClaim, 0);
  90. Long notClaimNum = this.count(queryWrapperNotClaimNum);
  91. textbookStudentSemesterVo.setNotClaimNum(notClaimNum);
  92. }
  93. return textbookStudentSemesterVoList;
  94. }
  95. @Override
  96. public IPage<TeacherCheckByclassVo> getTeacherCheckByclassList(TeacherCheckByclassDto dto) {
  97. //根据当前班主任用户查出所管理的班级Id
  98. LambdaQueryWrapper<BaseClass> queryWrapperClassId = new LambdaQueryWrapper<>();
  99. queryWrapperClassId.eq(BaseClass::getTeacherId, StpUtil.getLoginIdAsLong());
  100. List<BaseClass> baseClassList = baseClassService.list(queryWrapperClassId);
  101. if (ObjectUtil.isNull(baseClassList) && baseClassList.size() == 0) {
  102. return null;
  103. }
  104. List<Long> classIdList = new ArrayList<>();
  105. for (BaseClass baseClass : baseClassList) {
  106. classIdList.add(baseClass.getId());
  107. }
  108. dto.setClassIdList(classIdList);
  109. IPage<TeacherCheckByclassVo> teacherCheckByclassVoList = textbookStudentClaimMapper.getTeacherCheckByclassList(ConventPage.getPage(dto), dto);
  110. //为每本书添加数据
  111. for (TeacherCheckByclassVo t : teacherCheckByclassVoList.getRecords()) {
  112. MPJLambdaWrapper<WfTextbookClaim> qweryActualReceivedNum = new MPJLambdaWrapper<>();
  113. qweryActualReceivedNum.disableSubLogicDel().selectSum(WfTextbookClaimItem::getIssueNumber, TeacherCheckByclassVo::getActualReceivedNum).leftJoin(WfTextbookClaimItem.class, WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaim::getId).eq(WfTextbookClaim::getClassId, t.getClassId()).eq(WfTextbookClaimItem::getTextbookId, t.getTextbookId());
  114. TeacherCheckByclassVo teacherCheckByclassVo = wfTextbookClaimMapper.selectJoinOne(TeacherCheckByclassVo.class, qweryActualReceivedNum);
  115. t.setActualReceivedNum(teacherCheckByclassVo.getActualReceivedNum());
  116. LambdaQueryWrapper<TextbookStudentClaim> queryActualClaimNum = new LambdaQueryWrapper<>();
  117. queryActualClaimNum.eq(TextbookStudentClaim::getClassId, t.getClassId()).eq(TextbookStudentClaim::getTextbookId, t.getTextbookId());
  118. Long actualClaimNum = this.count(queryActualClaimNum);
  119. t.setActualClaimNum(actualClaimNum);
  120. }
  121. return teacherCheckByclassVoList;
  122. }
  123. @Override
  124. public IPage<TeacherCheckByStuVo> getTeacherCheckByStuList(TeacherCheckByStuDto dto) {
  125. //根据当前班主任用户查出所管理的班级Id
  126. LambdaQueryWrapper<BaseClass> queryWrapperClassId = new LambdaQueryWrapper<>();
  127. queryWrapperClassId.eq(BaseClass::getTeacherId, StpUtil.getLoginIdAsLong());
  128. List<BaseClass> baseClassList = baseClassService.list(queryWrapperClassId);
  129. if (ObjectUtil.isNull(baseClassList) && baseClassList.size() == 0) {
  130. return null;
  131. }
  132. List<Long> classIdList = new ArrayList<>();
  133. for (BaseClass baseClass : baseClassList) {
  134. classIdList.add(baseClass.getId());
  135. }
  136. dto.setClassIdList(classIdList);
  137. //将班上所有学生进行分组,查询出list集合
  138. IPage<TeacherCheckByStuVo> teacherCheckByStuVoList = textbookStudentClaimMapper.getTeacherCheckByStuList(ConventPage.getPage(dto), dto);
  139. //为每个学生添加教材领取记录集合
  140. for (TeacherCheckByStuVo t : teacherCheckByStuVoList.getRecords()) {
  141. List<TextbookClaimVO> textbookClaimVOList = textbookStudentClaimMapper.getTextbookClaimVOList(t.getStudentUserId());
  142. t.setTextbookClaimVOList(textbookClaimVOList);
  143. }
  144. return teacherCheckByStuVoList;
  145. }
  146. @Override
  147. @Transactional
  148. public Boolean updateByIds(List<Long> textbookStudentClaimIds) {
  149. for (Long textbookStudentClaimId : textbookStudentClaimIds) {
  150. this.updateById(new TextbookStudentClaim() {{
  151. setModifyUserId(StpUtil.getLoginIdAsLong());
  152. setModifyDate(new Date());
  153. setId(textbookStudentClaimId);
  154. setIsClaim(1);
  155. }});
  156. }
  157. return true;
  158. }
  159. @Override
  160. public List<TeacherCheckStuClaimVo> getTeacherCheckStuClaimList(TeacherCheckStuClaimDto dto) {
  161. List<TeacherCheckStuClaimVo> teacherCheckStuClaimVos = textbookStudentClaimMapper.getTeacherCheckStuClaimList(dto);
  162. return teacherCheckStuClaimVos;
  163. }
  164. @Override
  165. public List<TextbookClaimVO> getTeacherGetStuNoClaimList(Long studentUserId) {
  166. MPJLambdaWrapper<TextbookStudentClaim> queryTextbookClaimVOList = new MPJLambdaWrapper<>();
  167. queryTextbookClaimVOList.selectAs(TextbookStudentClaim::getId, TextbookClaimVO::getTextbookStudentClaimId).selectAs(Textbook::getBookName, TextbookClaimVO::getBookName).select(TextbookStudentClaim.class, x -> VoToColumnUtil.fieldsToColumns(TextbookClaimVO.class).contains(x.getProperty())).leftJoin(Textbook.class, Textbook::getId, TextbookStudentClaim::getTextbookId).eq(TextbookStudentClaim::getStudentUserId, studentUserId).disableSubLogicDel();
  168. List<TextbookClaimVO> textbookClaimVOList = this.selectJoinList(TextbookClaimVO.class, queryTextbookClaimVOList);
  169. return textbookClaimVOList;
  170. }
  171. }