BandingTaskClassStudentServiceImpl.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. package com.xjrsoft.module.banding.service.impl;
  2. import cn.dev33.satoken.secure.BCrypt;
  3. import cn.dev33.satoken.stp.StpUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.github.yulichang.base.MPJBaseServiceImpl;
  6. import com.xjrsoft.common.enums.ArchivesStatusEnum;
  7. import com.xjrsoft.common.enums.DeleteMark;
  8. import com.xjrsoft.common.enums.EnabledMark;
  9. import com.xjrsoft.common.enums.RoleEnum;
  10. import com.xjrsoft.config.CommonPropertiesConfig;
  11. import com.xjrsoft.module.banding.dto.BandingTaskClassStudentPageDto;
  12. import com.xjrsoft.module.banding.dto.ChangeClassDto;
  13. import com.xjrsoft.module.banding.entity.BandingTask;
  14. import com.xjrsoft.module.banding.entity.BandingTaskClass;
  15. import com.xjrsoft.module.banding.entity.BandingTaskClassStudent;
  16. import com.xjrsoft.module.banding.mapper.BandingTaskClassMapper;
  17. import com.xjrsoft.module.banding.mapper.BandingTaskClassStudentMapper;
  18. import com.xjrsoft.module.banding.mapper.BandingTaskMapper;
  19. import com.xjrsoft.module.banding.service.IBandingTaskClassStudentService;
  20. import com.xjrsoft.module.banding.service.IBandingTaskService;
  21. import com.xjrsoft.module.banding.vo.BandingTaskClassSureListVo;
  22. import com.xjrsoft.module.base.entity.BaseClass;
  23. import com.xjrsoft.module.base.service.IBaseClassService;
  24. import com.xjrsoft.module.organization.entity.User;
  25. import com.xjrsoft.module.organization.entity.UserRoleRelation;
  26. import com.xjrsoft.module.organization.service.IUserRoleRelationService;
  27. import com.xjrsoft.module.organization.service.IUserService;
  28. import com.xjrsoft.module.student.dto.BaseNewStudentPageDto;
  29. import com.xjrsoft.module.student.entity.BaseClassMajorSet;
  30. import com.xjrsoft.module.student.entity.BaseNewStudent;
  31. import com.xjrsoft.module.student.entity.BaseStudent;
  32. import com.xjrsoft.module.student.entity.BaseStudentFamily;
  33. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  34. import com.xjrsoft.module.student.mapper.BaseClassMajorSetMapper;
  35. import com.xjrsoft.module.student.service.IBaseNewStudentService;
  36. import com.xjrsoft.module.student.service.IBaseStudentFamilyService;
  37. import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
  38. import com.xjrsoft.module.student.service.IBaseStudentService;
  39. import lombok.AllArgsConstructor;
  40. import org.springframework.stereotype.Service;
  41. import org.springframework.transaction.annotation.Transactional;
  42. import java.time.LocalDate;
  43. import java.time.LocalDateTime;
  44. import java.time.format.DateTimeFormatter;
  45. import java.util.ArrayList;
  46. import java.util.Date;
  47. import java.util.HashMap;
  48. import java.util.List;
  49. import java.util.Map;
  50. import java.util.stream.Collectors;
  51. /**
  52. * @title: 新生分班任务
  53. * @Author dzx
  54. * @Date: 2024-07-01
  55. * @Version 1.0
  56. */
  57. @Service
  58. @AllArgsConstructor
  59. public class BandingTaskClassStudentServiceImpl extends MPJBaseServiceImpl<BandingTaskClassStudentMapper, BandingTaskClassStudent> implements IBandingTaskClassStudentService {
  60. private final BandingTaskClassMapper taskClassMapper;
  61. private final BandingTaskMapper bandingTaskMapper;
  62. private final IBaseNewStudentService newStudentService;
  63. private final IBaseClassService classService;
  64. private final BaseClassMajorSetMapper classMajorSetMapper;
  65. private final CommonPropertiesConfig propertiesConfig;
  66. private final IUserService userService;
  67. private final IUserRoleRelationService roleRelationService;
  68. private final IBaseStudentSchoolRollService schoolRollService;
  69. private final IBaseStudentService studentService;
  70. private final IBaseStudentFamilyService familyService;
  71. @Override
  72. public Boolean add(BandingTaskClassStudent bandingTaskClass) {
  73. bandingTaskClass.setCreateDate(new Date());
  74. this.baseMapper.insert(bandingTaskClass);
  75. return true;
  76. }
  77. @Override
  78. public Boolean update(BandingTaskClassStudent bandingTaskClass) {
  79. bandingTaskClass.setModifyDate(new Date());
  80. this.baseMapper.updateById(bandingTaskClass);
  81. return true;
  82. }
  83. @Override
  84. @Transactional(rollbackFor = Exception.class)
  85. public Boolean delete(List<Long> ids) {
  86. this.baseMapper.deleteBatchIds(ids);
  87. return true;
  88. }
  89. @Override
  90. public Boolean changeClass(ChangeClassDto dto) {
  91. this.baseMapper.delete(
  92. new QueryWrapper<BandingTaskClassStudent>().lambda()
  93. .in(BandingTaskClassStudent::getNewStudentId, dto.getNewStudentIds())
  94. );
  95. List<BandingTaskClassStudent> dataList = new ArrayList<>();
  96. long createUserId = StpUtil.getLoginIdAsLong();
  97. for (Long newStudentId : dto.getNewStudentIds()) {
  98. dataList.add(
  99. new BandingTaskClassStudent(){{
  100. setCreateDate(new Date());
  101. setNewStudentId(newStudentId);
  102. setBandingTaskClassId(dto.getBandingTaskClassId());
  103. setCreateUserId(createUserId);
  104. if(dto.getIsHandle() != null && dto.getIsHandle() == 1){
  105. setStatus(1);
  106. }
  107. }}
  108. );
  109. }
  110. if(!dataList.isEmpty()){
  111. this.saveBatch(dataList);
  112. }
  113. if(dto.getIsHandle() != null && dto.getIsHandle() == 1){
  114. BandingTaskClass taskClass = taskClassMapper.selectById(dto.getBandingTaskClassId());
  115. List<Long> studentIds = dataList.stream().map(BandingTaskClassStudent::getNewStudentId).collect(Collectors.toList());
  116. List<BaseNewStudent> list = newStudentService.list(
  117. new QueryWrapper<BaseNewStudent>().lambda()
  118. .in(BaseNewStudent::getId, studentIds)
  119. );
  120. List<BaseNewStudent> updateList = new ArrayList<>();
  121. for (BaseNewStudent student : list) {
  122. student.setStatus(1);
  123. updateList.add(student);
  124. }
  125. if(!updateList.isEmpty()){
  126. newStudentService.updateBatchById(updateList);
  127. }
  128. createStudentData(taskClass.getBandingTaskId(), dataList, updateList);
  129. }
  130. return true;
  131. }
  132. void createStudentData(Long badingTaskId,List<BandingTaskClassStudent> classStudents, List<BaseNewStudent> updateList){
  133. Date createDate = new Date();
  134. BandingTask bandingTask = bandingTaskMapper.selectById(badingTaskId);
  135. List<BandingTaskClassSureListVo> classSure = taskClassMapper.getClassSure(new BandingTaskClassStudentPageDto() {{
  136. setBandingTaskId(badingTaskId);
  137. }});
  138. Map<Long, Integer> classTotal = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getNumber));
  139. Map<Long, Integer> classBoy = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getMaleCount));
  140. Map<Long, Integer> classGirl = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getFemaleCount));
  141. //生成班级数据
  142. Map<Long, Long> classMap = new HashMap<>();
  143. Map<Long, Long> taskClassMajorMap = new HashMap<>();
  144. //查询出需要新增的班级信息
  145. List<Long> classIds = classStudents.stream().map(BandingTaskClassStudent::getBandingTaskClassId).collect(Collectors.toList());
  146. List<BandingTaskClass> classList = taskClassMapper.selectList(new QueryWrapper<BandingTaskClass>().lambda().in(BandingTaskClass::getId, classIds));
  147. for (BandingTaskClass taskClass : classList) {
  148. BaseClass baseClass = new BaseClass() {{
  149. setName(taskClass.getName());
  150. setClassroomId(taskClass.getClassroomId());
  151. setTeacherId(taskClass.getTeacherId());
  152. setIsGraduate(1);
  153. setIsOrderClass(taskClass.getIsOrderClass()==null?0:taskClass.getIsOrderClass().intValue());
  154. setGradeId(bandingTask.getGradeId());
  155. setDeleteMark(DeleteMark.NODELETE.getCode());
  156. setEnrollType(bandingTask.getEnrollType());
  157. }};
  158. classService.save(baseClass);
  159. BaseClassMajorSet majorSet = new BaseClassMajorSet() {{
  160. setCreateDate(createDate);
  161. setMajorSetId(taskClass.getMajorSetId());
  162. setClassId(baseClass.getId());
  163. setPlanTotalStudent(taskClass.getNumber());
  164. setTotalStudent(classTotal.get(taskClass.getId()));
  165. setBoyNum(classBoy.get(taskClass.getId()));
  166. setGirlNum(classGirl.get(taskClass.getId()));
  167. }};
  168. classMajorSetMapper.insert(majorSet);
  169. classMap.put(taskClass.getId(), baseClass.getId());
  170. taskClassMajorMap.put(taskClass.getId(), taskClass.getMajorSetId());
  171. }
  172. /**
  173. * 新增学生数据
  174. * 1、新增用户xjr_user
  175. * 2、新增用户与角色的关系xjr_user_role_relation
  176. * 3、新增学生基本信息base_student
  177. * 4、新增学籍信息表base_student_school_roll
  178. * 5、新增家庭信息表base_student_family
  179. */
  180. LocalDateTime now = LocalDateTime.now();
  181. Map<Long, Long> studentClassRelation = classStudents.stream().collect(Collectors.toMap(BandingTaskClassStudent::getNewStudentId, BandingTaskClassStudent::getBandingTaskClassId));
  182. for (BaseNewStudent student : updateList) {
  183. LocalDate birthDate = getBirthDate(student.getCredentialNumber());
  184. User xjrUser = new User() {{
  185. setCreateDate(now);
  186. setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
  187. setName(student.getName());
  188. setUserName(student.getCredentialNumber());
  189. setCredentialNumber(student.getCredentialNumber());
  190. setCredentialType("ZZLS10007");
  191. setMobile(student.getMobile());
  192. setEnabledMark(EnabledMark.DISABLED.getCode());
  193. setGender(student.getGender());
  194. setIsChangePassword(1);
  195. setBirthDate(birthDate.atStartOfDay());
  196. }};
  197. userService.save(xjrUser);
  198. UserRoleRelation userRoleRelation = new UserRoleRelation() {{
  199. setRoleId(RoleEnum.STUDENT.getCode());
  200. setUserId(xjrUser.getId());
  201. }};
  202. roleRelationService.save(userRoleRelation);
  203. BaseStudent baseStudent = new BaseStudent() {{
  204. setUserId(xjrUser.getId());
  205. setCreateDate(now);
  206. setStudentId(student.getCredentialNumber());
  207. setHeight(student.getHeight().doubleValue());
  208. setWeight(student.getWeight().doubleValue());
  209. }};
  210. studentService.save(baseStudent);
  211. BaseStudentSchoolRoll schoolRoll = new BaseStudentSchoolRoll() {{
  212. setUserId(xjrUser.getId());
  213. setGraduatedScore(student.getScore().doubleValue());
  214. setGraduatedUniversity(student.getGraduateSchool());
  215. setClassId(classMap.get(studentClassRelation.get(student.getId())));
  216. setMajorSetId(taskClassMajorMap.get(studentClassRelation.get(student.getId())));
  217. setStduyStatus(student.getStduyStatus());
  218. setEnrollType(bandingTask.getEnrollType());
  219. setStudentSource(student.getSource());
  220. setGradeId(bandingTask.getGradeId());
  221. setArchivesStatus(ArchivesStatusEnum.FB2901.getCode());
  222. setCreateDate(now);
  223. }};
  224. schoolRollService.save(schoolRoll);
  225. BaseStudentFamily studentFamily = new BaseStudentFamily() {{
  226. setCreateDate(now);
  227. setUserId(xjrUser.getId());
  228. setTelephone(student.getFamilyMobile());
  229. setAddress(student.getFamilyAddress());
  230. }};
  231. familyService.save(studentFamily);
  232. }
  233. }
  234. LocalDate getBirthDate(String idCardNumber){
  235. // 获取出生日期前6位,即yyyyMM
  236. String birthdayString = idCardNumber.substring(6, 14);
  237. // 将字符串解析为LocalDate对象
  238. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
  239. return LocalDate.parse(birthdayString, formatter);
  240. }
  241. @Override
  242. public Boolean removeStudent(ChangeClassDto dto) {
  243. this.baseMapper.delete(
  244. new QueryWrapper<BandingTaskClassStudent>().lambda()
  245. .in(BandingTaskClassStudent::getNewStudentId, dto.getNewStudentIds())
  246. .eq(BandingTaskClassStudent::getBandingTaskClassId, dto.getBandingTaskClassId())
  247. );
  248. return true;
  249. }
  250. @Override
  251. public List<BaseNewStudentPageDto> satisfyStudent(Long bandingTaskClassId) {
  252. return this.baseMapper.satisfyStudent(bandingTaskClassId);
  253. }
  254. @Override
  255. public List<BaseNewStudentPageDto> surplusStudent(Long bandingTaskClassId) {
  256. BandingTaskClass taskClass = taskClassMapper.selectById(bandingTaskClassId);
  257. return this.baseMapper.surplusStudent(taskClass);
  258. }
  259. @Override
  260. public Boolean insertStudent(ChangeClassDto dto) {
  261. List<BandingTaskClassStudent> dataList = new ArrayList<>();
  262. Date createDate = new Date();
  263. for (Long newStudentId : dto.getNewStudentIds()) {
  264. dataList.add(
  265. new BandingTaskClassStudent(){{
  266. setNewStudentId(newStudentId);
  267. setCreateDate(createDate);
  268. setStatus(0);
  269. setBandingTaskClassId(dto.getBandingTaskClassId());
  270. }}
  271. );
  272. }
  273. if(!dataList.isEmpty()){
  274. this.saveBatch(dataList);
  275. }
  276. return true;
  277. }
  278. }