BaseNewStudentController.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. package com.xjrsoft.module.student.controller;
  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import cn.dev33.satoken.secure.BCrypt;
  4. import cn.dev33.satoken.stp.StpUtil;
  5. import cn.hutool.core.bean.BeanUtil;
  6. import com.alibaba.excel.EasyExcel;
  7. import com.alibaba.excel.support.ExcelTypeEnum;
  8. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  9. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  10. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  11. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  12. import com.xjrsoft.common.constant.GlobalConstant;
  13. import com.xjrsoft.common.enums.EnabledMark;
  14. import com.xjrsoft.common.model.result.RT;
  15. import com.xjrsoft.common.page.ConventPage;
  16. import com.xjrsoft.common.page.PageOutput;
  17. import com.xjrsoft.common.utils.RedisUtil;
  18. import com.xjrsoft.common.utils.VoToColumnUtil;
  19. import com.xjrsoft.config.CommonPropertiesConfig;
  20. import com.xjrsoft.module.base.entity.BaseSemester;
  21. import com.xjrsoft.module.base.entity.BaseUserStudent;
  22. import com.xjrsoft.module.base.entity.WhitelistManagement;
  23. import com.xjrsoft.module.base.service.IBaseSemesterService;
  24. import com.xjrsoft.module.base.service.IBaseUserStudentService;
  25. import com.xjrsoft.module.base.service.IWhitelistManagementService;
  26. import com.xjrsoft.module.organization.entity.User;
  27. import com.xjrsoft.module.organization.entity.UserRoleRelation;
  28. import com.xjrsoft.module.organization.service.IUserRoleRelationService;
  29. import com.xjrsoft.module.organization.service.IUserService;
  30. import com.xjrsoft.module.student.dto.ActiveAccountDto;
  31. import com.xjrsoft.module.student.dto.AddBaseNewStudentDto;
  32. import com.xjrsoft.module.student.dto.BaseNewStudentPageDto;
  33. import com.xjrsoft.module.student.dto.DeleteNewStudentDto;
  34. import com.xjrsoft.module.student.dto.UpdateBaseNewStudentDto;
  35. import com.xjrsoft.module.student.entity.BaseNewStudent;
  36. import com.xjrsoft.module.student.entity.BaseStudentFamilyMember;
  37. import com.xjrsoft.module.student.service.IBaseNewStudentService;
  38. import com.xjrsoft.module.student.service.IBaseStudentFamilyMemberService;
  39. import com.xjrsoft.module.student.vo.BaseNewStudentExportVo;
  40. import com.xjrsoft.module.student.vo.BaseNewStudentPageVo;
  41. import com.xjrsoft.module.student.vo.BaseNewStudentScoreExcelVo;
  42. import com.xjrsoft.module.student.vo.BaseNewStudentTreeVo;
  43. import com.xjrsoft.module.student.vo.BaseNewStudentVo;
  44. import com.xjrsoft.module.student.vo.EnrollmentPlanGradeVo;
  45. import com.xjrsoft.module.student.vo.EnrollmentPlanTreeVo;
  46. import io.swagger.annotations.Api;
  47. import io.swagger.annotations.ApiOperation;
  48. import lombok.AllArgsConstructor;
  49. import org.springframework.http.ResponseEntity;
  50. import org.springframework.web.bind.annotation.DeleteMapping;
  51. import org.springframework.web.bind.annotation.GetMapping;
  52. import org.springframework.web.bind.annotation.PostMapping;
  53. import org.springframework.web.bind.annotation.PutMapping;
  54. import org.springframework.web.bind.annotation.RequestBody;
  55. import org.springframework.web.bind.annotation.RequestMapping;
  56. import org.springframework.web.bind.annotation.RequestParam;
  57. import org.springframework.web.bind.annotation.RestController;
  58. import org.springframework.web.multipart.MultipartFile;
  59. import javax.validation.Valid;
  60. import java.io.ByteArrayOutputStream;
  61. import java.io.IOException;
  62. import java.time.LocalDateTime;
  63. import java.time.format.DateTimeFormatter;
  64. import java.util.ArrayList;
  65. import java.util.Date;
  66. import java.util.LinkedHashMap;
  67. import java.util.List;
  68. import java.util.Map;
  69. import java.util.concurrent.CompletableFuture;
  70. /**
  71. * @title: 新生维护信息
  72. * @Author dzx
  73. * @Date: 2024-06-27
  74. * @Version 1.0
  75. */
  76. @RestController
  77. @RequestMapping("/student" + "/baseNewStudent")
  78. @Api(value = "/student" + "/baseNewStudent",tags = "新生维护信息代码")
  79. @AllArgsConstructor
  80. public class BaseNewStudentController {
  81. private final IUserService userService;
  82. private final IBaseNewStudentService baseNewStudentService;
  83. private final IBaseStudentFamilyMemberService familyMemberService;
  84. private final IWhitelistManagementService whitelistManagementService;
  85. private final IUserRoleRelationService userRoleRelationService;
  86. private final RedisUtil redisUtil;
  87. private final IBaseUserStudentService userStudentService;
  88. private final CommonPropertiesConfig propertiesConfig;
  89. private final IBaseSemesterService semesterService;
  90. @GetMapping(value = "/page")
  91. @ApiOperation(value="新生维护信息列表(分页)")
  92. @SaCheckPermission("basenewstudent:detail")
  93. public RT<PageOutput<BaseNewStudentPageVo>> page(@Valid BaseNewStudentPageDto dto){
  94. Page<BaseNewStudentPageVo> page = baseNewStudentService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
  95. PageOutput<BaseNewStudentPageVo> pageOutput = ConventPage.getPageOutput(page, BaseNewStudentPageVo.class);
  96. return RT.ok(pageOutput);
  97. }
  98. @GetMapping(value = "/report-page")
  99. @ApiOperation(value="新生报到(分页)")
  100. @SaCheckPermission("basenewstudent:detail")
  101. public RT<PageOutput<BaseNewStudentPageVo>> reportPage(@Valid BaseNewStudentPageDto dto){
  102. List<String> roleList = StpUtil.getRoleList();
  103. if(roleList.contains("CLASSTE") && roleList.contains("TEACHER") && dto.getTeacherId() == null){
  104. dto.setTeacherId(StpUtil.getLoginIdAsLong());
  105. }
  106. if(dto.getBaseSemesterId() == null){
  107. LambdaQueryWrapper<BaseSemester> queryWrapper = new LambdaQueryWrapper<>();
  108. queryWrapper
  109. .orderByDesc(BaseSemester::getStartDate)
  110. .select(BaseSemester.class,x -> VoToColumnUtil.fieldsToColumns(BaseSemester.class).contains(x.getProperty()));
  111. List<BaseSemester> semesterList = semesterService.list(queryWrapper);
  112. if(!semesterList.isEmpty()){
  113. dto.setBaseSemesterId(semesterList.get(0).getId());
  114. }
  115. }
  116. Page<BaseNewStudentPageVo> page = baseNewStudentService.getReportPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
  117. PageOutput<BaseNewStudentPageVo> pageOutput = ConventPage.getPageOutput(page, BaseNewStudentPageVo.class);
  118. return RT.ok(pageOutput);
  119. }
  120. @GetMapping(value = "/tree")
  121. @ApiOperation(value="新生维护信息树")
  122. @SaCheckPermission("basenewstudent:detail")
  123. public RT<List<BaseNewStudentTreeVo>> tree(){
  124. List<EnrollmentPlanGradeVo> gradeList = baseNewStudentService.getGradeList();
  125. List<EnrollmentPlanTreeVo> list = baseNewStudentService.getEnrollmentPlanList();
  126. List<BaseNewStudentTreeVo> result = new ArrayList<>();
  127. for (EnrollmentPlanGradeVo gradeVo : gradeList) {
  128. BaseNewStudentTreeVo treeVo = new BaseNewStudentTreeVo() {{
  129. setId(gradeVo.getId());
  130. setName(gradeVo.getName());
  131. setTreeType(1);
  132. }};
  133. List<BaseNewStudentTreeVo> children = new ArrayList<>();
  134. for (EnrollmentPlanTreeVo planTreeVo : list) {
  135. if(planTreeVo.getGradeId().equals(gradeVo.getId())){
  136. children.add(new BaseNewStudentTreeVo() {{
  137. setId(planTreeVo.getId());
  138. setName(planTreeVo.getEnrollTypeCn());
  139. setTreeType(2);
  140. }});
  141. }
  142. }
  143. treeVo.setChildren(children);
  144. result.add(treeVo);
  145. }
  146. return RT.ok(result);
  147. }
  148. @GetMapping(value = "/info")
  149. @ApiOperation(value="根据id查询新生维护信息信息")
  150. @SaCheckPermission("basenewstudent:detail")
  151. public RT<BaseNewStudentVo> info(@RequestParam Long id){
  152. BaseNewStudent baseNewStudent = baseNewStudentService.getById(id);
  153. if (baseNewStudent == null) {
  154. return RT.error("找不到此数据!");
  155. }
  156. return RT.ok(BeanUtil.toBean(baseNewStudent, BaseNewStudentVo.class));
  157. }
  158. @PostMapping
  159. @ApiOperation(value = "新增新生维护信息")
  160. @SaCheckPermission("basenewstudent:add")
  161. public RT<Boolean> add(@Valid @RequestBody AddBaseNewStudentDto dto){
  162. BaseNewStudent baseNewStudent = BeanUtil.toBean(dto, BaseNewStudent.class);
  163. baseNewStudent.setFirstAmbitionId(Long.parseLong(dto.getFirstAmbition()));
  164. baseNewStudent.setSecondAmbitionId(Long.parseLong(dto.getSecondAmbition()));
  165. baseNewStudent.setCreateDate(new Date());
  166. boolean isSuccess = baseNewStudentService.save(baseNewStudent);
  167. return RT.ok(isSuccess);
  168. }
  169. @PutMapping
  170. @ApiOperation(value = "修改新生维护信息")
  171. @SaCheckPermission("basenewstudent:edit")
  172. public RT<Boolean> update(@Valid @RequestBody UpdateBaseNewStudentDto dto){
  173. BaseNewStudent baseNewStudent = BeanUtil.toBean(dto, BaseNewStudent.class);
  174. return RT.ok(baseNewStudentService.updateById(baseNewStudent));
  175. }
  176. @DeleteMapping
  177. @ApiOperation(value = "删除新生维护信息")
  178. @SaCheckPermission("basenewstudent:delete")
  179. public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
  180. return RT.ok(baseNewStudentService.removeBatchByIds(ids));
  181. }
  182. @DeleteMapping("deleteByUserIds")
  183. @ApiOperation(value = "删除新生(保留新生信息,删除基础信息)")
  184. @SaCheckPermission("basenewstudent:delete")
  185. public RT<Boolean> deleteByUserIds(@Valid @RequestBody DeleteNewStudentDto dto){
  186. return RT.ok(baseNewStudentService.deleteByUserIds(dto));
  187. }
  188. @PostMapping("/import")
  189. @ApiOperation(value = "导入")
  190. public RT<List<Map<String, String>>> importData(@RequestParam Long treeId, @RequestParam MultipartFile file) throws IOException {
  191. List<Map<Integer, Object>> errorList = baseNewStudentService.importData(treeId, file);
  192. List<Map<String, String>> result = new ArrayList<>();
  193. for (Map<Integer, Object> objectMap : errorList) {
  194. Map<String, String> object = new LinkedHashMap<>();
  195. object.put("毕业学校", objectMap.get(0)==null?"":objectMap.get(0).toString());
  196. object.put("学生姓名", objectMap.get(1)==null?"":objectMap.get(1).toString());
  197. object.put("性别", objectMap.get(2)==null?"":objectMap.get(2).toString());
  198. object.put("身份证号", objectMap.get(3)==null?"":objectMap.get(3).toString());
  199. object.put("身高(cm)", objectMap.get(4)==null?"":objectMap.get(4).toString());
  200. object.put("体重(kg)", objectMap.get(5)==null?"":objectMap.get(5).toString());
  201. object.put("毕业班级", objectMap.get(6)==null?"":objectMap.get(6).toString());
  202. object.put("学生来源", objectMap.get(7)==null?"":objectMap.get(7).toString());
  203. object.put("住宿类型", objectMap.get(8)==null?"":objectMap.get(8).toString());
  204. object.put("手机号", objectMap.get(9)==null?"":objectMap.get(9).toString());
  205. object.put("第一志愿", objectMap.get(10)==null?"":objectMap.get(10).toString());
  206. object.put("第二志愿", objectMap.get(11)==null?"":objectMap.get(11).toString());
  207. object.put("是否可调配", objectMap.get(12)==null?"":objectMap.get(12).toString());
  208. object.put("家庭电话", objectMap.get(13)==null?"":objectMap.get(13).toString());
  209. object.put("家庭地址", objectMap.get(14)==null?"":objectMap.get(14).toString());
  210. object.put("错误信息", objectMap.get(15)==null?"":objectMap.get(15).toString());
  211. result.add(object);
  212. }
  213. return RT.ok(result);
  214. }
  215. @PostMapping("/score-import")
  216. @ApiOperation(value = "成绩导入")
  217. public RT<List<Map<String, String>>> scoreImport(@RequestParam MultipartFile file) throws IOException {
  218. List<BaseNewStudentScoreExcelVo> errorList = baseNewStudentService.scoreImport(file);
  219. List<Map<String, String>> result = new ArrayList<>();
  220. for (BaseNewStudentScoreExcelVo objectMap : errorList) {
  221. Map<String, String> object = new LinkedHashMap<>();
  222. object.put("毕业学校", objectMap.getGraduateSchool());
  223. object.put("姓名", objectMap.getName());
  224. object.put("性别", objectMap.getGender());
  225. object.put("班级", objectMap.getGraduateClass());
  226. object.put("总成绩", objectMap.getScore().intValue() + "");
  227. object.put("错误信息", "未能查询到该学生或该学生存在多个");
  228. result.add(object);
  229. }
  230. return RT.ok(result);
  231. }
  232. @PostMapping("/active-account")
  233. @ApiOperation(value = "激活账号")
  234. public RT<Boolean> activeAccount(@Valid @RequestBody ActiveAccountDto dto) {
  235. User user = userService.getById(dto.getId());
  236. user.setMobile(dto.getMobile());
  237. user.setEnabledMark(EnabledMark.ENABLED.getCode());
  238. user.setModifyDate(LocalDateTime.now());
  239. userService.updateById(user);
  240. // 新增家庭成员信息
  241. List<BaseStudentFamilyMember> list = familyMemberService.list(
  242. new QueryWrapper<BaseStudentFamilyMember>().lambda()
  243. .eq(BaseStudentFamilyMember::getName, dto.getParentName())
  244. .eq(BaseStudentFamilyMember::getUserId, dto.getId())
  245. .eq(BaseStudentFamilyMember::getMobile, dto.getParentMobile())
  246. );
  247. BaseStudentFamilyMember member;
  248. if(list.isEmpty()){
  249. member = new BaseStudentFamilyMember();
  250. member.setUserId(user.getId());
  251. member.setName(dto.getParentName());
  252. member.setMobile(dto.getParentMobile());
  253. member.setCreateDate(LocalDateTime.now());
  254. member.setCreateUserId(StpUtil.getLoginIdAsLong());
  255. familyMemberService.save(member);
  256. }else{
  257. member = list.get(0);
  258. }
  259. List<User> parents = userService.list(
  260. new QueryWrapper<User>().lambda()
  261. .eq(User::getUserName, dto.getParentMobile())
  262. .or()
  263. .eq(User::getMobile, dto.getParentMobile())
  264. );
  265. if(parents.isEmpty()){
  266. User parentUser = new User() {{
  267. setUserName(dto.getParentMobile());
  268. setName(dto.getParentName());
  269. setIsChangePassword(1);
  270. setDeleteMark(0);
  271. setEnabledMark(1);
  272. setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
  273. setMobile(dto.getParentMobile());
  274. }};
  275. userService.save(parentUser);
  276. userRoleRelationService.save(new UserRoleRelation(){{
  277. setUserId(parentUser.getId());
  278. setRoleId(4L);
  279. }});
  280. BaseUserStudent userStudent = new BaseUserStudent();
  281. userStudent.setStudentId(user.getId());
  282. userStudent.setStudentNane(user.getName());
  283. userStudent.setStudentIdentity(user.getCredentialNumber());
  284. userStudent.setCreateDate(new Date());
  285. userStudent.setUserId(parentUser.getId());
  286. userStudent.setStatus(1);
  287. userStudentService.save(userStudent);
  288. }else{
  289. User parentUser = parents.get(0);
  290. BaseUserStudent userStudent = new BaseUserStudent();
  291. userStudent.setStudentId(user.getId());
  292. userStudent.setStudentNane(user.getName());
  293. userStudent.setStudentIdentity(user.getCredentialNumber());
  294. userStudent.setCreateDate(new Date());
  295. userStudent.setUserId(parentUser.getId());
  296. userStudent.setStatus(1);
  297. userStudentService.save(userStudent);
  298. }
  299. //新增白名单信息
  300. List<WhitelistManagement> managementList = whitelistManagementService.list(
  301. new QueryWrapper<WhitelistManagement>().lambda()
  302. .eq(WhitelistManagement::getUserId, dto.getId())
  303. );
  304. if(managementList.isEmpty()){
  305. WhitelistManagement whitelistManagement = new WhitelistManagement() {{
  306. setName(user.getName());
  307. setUserId(user.getId());
  308. setCreateDate(new Date());
  309. setCredentialNumber(user.getCredentialNumber());
  310. setPhone(user.getMobile());
  311. }};
  312. whitelistManagementService.save(whitelistManagement);
  313. }
  314. CompletableFuture.runAsync(() -> {
  315. List<User> userList = userService.list();
  316. redisUtil.set(GlobalConstant.USER_CACHE_KEY, userList);
  317. List<UserRoleRelation> userRoleRelationList = userRoleRelationService.list(Wrappers.lambdaQuery(UserRoleRelation.class));
  318. redisUtil.set(GlobalConstant.USER_ROLE_RELATION_CACHE_KEY, userRoleRelationList);
  319. whitelistManagementService.loadCaches();
  320. });
  321. return RT.ok(true);
  322. }
  323. @PostMapping("/report-export-query")
  324. @ApiOperation(value = "导出")
  325. public ResponseEntity<byte[]> exportData(@Valid BaseNewStudentPageDto dto) {
  326. List<BaseNewStudentPageVo> reportList = baseNewStudentService.getReportList(dto);
  327. List<BaseNewStudentExportVo> exportVos = new ArrayList<>();
  328. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  329. for (BaseNewStudentPageVo el : reportList) {
  330. BaseNewStudentExportVo vo = BeanUtil.toBean(el, BaseNewStudentExportVo.class);
  331. if(el.getIsAdjust() == 1){
  332. vo.setReportStatus("是");
  333. }else if(el.getIsAdjust() == 0){
  334. vo.setReportStatus("否");
  335. }
  336. if(el.getReportTime() != null){
  337. vo.setReportTime(el.getReportTime().format(formatter));
  338. }
  339. exportVos.add(vo);
  340. }
  341. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  342. EasyExcel.write(bot, BaseNewStudentExportVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(exportVos);
  343. return RT.fileStream(bot.toByteArray(), "RoomBed" + ExcelTypeEnum.XLSX.getValue());
  344. }
  345. }