TeacherbaseManagerServiceImpl.java 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671
  1. package com.xjrsoft.module.teacher.service.impl;
  2. import cn.dev33.satoken.secure.BCrypt;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import cn.hutool.core.collection.CollectionUtil;
  5. import cn.hutool.core.convert.Convert;
  6. import cn.hutool.core.util.StrUtil;
  7. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  8. import com.baomidou.mybatisplus.core.toolkit.StringPool;
  9. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  10. import com.github.yulichang.base.MPJBaseServiceImpl;
  11. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  12. import com.xjrsoft.common.constant.GlobalConstant;
  13. import com.xjrsoft.common.enums.DeleteMark;
  14. import com.xjrsoft.common.enums.GenderDictionaryEnum;
  15. import com.xjrsoft.common.enums.RoleEnum;
  16. import com.xjrsoft.common.utils.RedisUtil;
  17. import com.xjrsoft.common.utils.VoToColumnUtil;
  18. import com.xjrsoft.config.CommonPropertiesConfig;
  19. import com.xjrsoft.module.courseTable.entity.ClassTime;
  20. import com.xjrsoft.module.organization.entity.Department;
  21. import com.xjrsoft.module.organization.entity.Post;
  22. import com.xjrsoft.module.organization.entity.User;
  23. import com.xjrsoft.module.organization.entity.UserDeptRelation;
  24. import com.xjrsoft.module.organization.entity.UserPostRelation;
  25. import com.xjrsoft.module.organization.entity.UserRoleRelation;
  26. import com.xjrsoft.module.organization.mapper.UserDeptRelationMapper;
  27. import com.xjrsoft.module.organization.mapper.UserRoleRelationMapper;
  28. import com.xjrsoft.module.organization.service.IDepartmentService;
  29. import com.xjrsoft.module.organization.service.IPostService;
  30. import com.xjrsoft.module.organization.service.IUserDeptRelationService;
  31. import com.xjrsoft.module.organization.service.IUserPostRelationService;
  32. import com.xjrsoft.module.organization.service.IUserService;
  33. import com.xjrsoft.module.system.entity.DictionaryDetail;
  34. import com.xjrsoft.module.system.service.IDictionarydetailService;
  35. import com.xjrsoft.module.teacher.dto.AddXjrUserDto;
  36. import com.xjrsoft.module.teacher.dto.UpdateXjrUserDto;
  37. import com.xjrsoft.module.teacher.entity.BaseTeacher;
  38. import com.xjrsoft.module.teacher.entity.BaseTeacherContact;
  39. import com.xjrsoft.module.teacher.entity.BaseTeacherEducation;
  40. import com.xjrsoft.module.teacher.entity.BaseTeacherEmploy;
  41. import com.xjrsoft.module.teacher.entity.BaseTeacherFamily;
  42. import com.xjrsoft.module.teacher.entity.BaseTeacherFamilyMember;
  43. import com.xjrsoft.module.teacher.entity.BaseTeacherRegular;
  44. import com.xjrsoft.module.teacher.entity.XjrUser;
  45. import com.xjrsoft.module.teacher.mapper.BaseTeacherContactMapper;
  46. import com.xjrsoft.module.teacher.mapper.BaseTeacherEducationMapper;
  47. import com.xjrsoft.module.teacher.mapper.BaseTeacherEmployMapper;
  48. import com.xjrsoft.module.teacher.mapper.BaseTeacherFamilyMapper;
  49. import com.xjrsoft.module.teacher.mapper.BaseTeacherFamilyMemberMapper;
  50. import com.xjrsoft.module.teacher.mapper.BaseTeacherMapper;
  51. import com.xjrsoft.module.teacher.mapper.BaseTeacherRegularMapper;
  52. import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
  53. import com.xjrsoft.module.teacher.service.ITeacherbaseManagerService;
  54. import lombok.AllArgsConstructor;
  55. import org.springframework.stereotype.Service;
  56. import org.springframework.transaction.annotation.Transactional;
  57. import java.time.LocalDateTime;
  58. import java.util.ArrayList;
  59. import java.util.Arrays;
  60. import java.util.List;
  61. import java.util.Map;
  62. import java.util.Objects;
  63. import java.util.stream.Collectors;
  64. /**
  65. * @title: service
  66. * @Author 管理员
  67. * @Date: 2023-08-08
  68. * @Version 1.0
  69. */
  70. @Service
  71. @AllArgsConstructor
  72. public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMapper, XjrUser> implements ITeacherbaseManagerService {
  73. private final XjrUserMapper teacherbaseManagerXjrUserMapper;
  74. private final BaseTeacherMapper teacherbaseManagerBaseTeacherMapper;
  75. private final BaseTeacherContactMapper teacherbaseManagerBaseTeacherContactMapper;
  76. private final BaseTeacherEducationMapper teacherbaseManagerBaseTeacherEducationMapper;
  77. private final BaseTeacherEmployMapper teacherbaseManagerBaseTeacherEmployMapper;
  78. private final BaseTeacherFamilyMapper teacherbaseManagerBaseTeacherFamilyMapper;
  79. private final BaseTeacherFamilyMemberMapper teacherbaseManagerBaseTeacherFamilyMemberMapper;
  80. private final BaseTeacherRegularMapper teacherbaseManagerBaseTeacherRegularMapper;
  81. private final UserRoleRelationMapper userRoleRelationMapper;
  82. private final IUserDeptRelationService userDeptRelationService;
  83. private final RedisUtil redisUtil;
  84. private final UserDeptRelationMapper userDeptRelationMapper;
  85. private final IUserService userService;
  86. private final CommonPropertiesConfig propertiesConfig;
  87. private final IUserPostRelationService userPostRelationService;
  88. private final IDictionarydetailService dictionaryService;
  89. private final IDepartmentService departmentService;
  90. private final IPostService postService;
  91. private IDictionarydetailService dictionarydetailService;
  92. @Override
  93. @Transactional(rollbackFor = Exception.class)
  94. public Boolean add(AddXjrUserDto dto) {
  95. XjrUser xjrUser = BeanUtil.toBean(dto, XjrUser.class);
  96. xjrUser.setCode(dto.getUserName());
  97. // 使用系统配置的默认密码
  98. xjrUser.setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
  99. teacherbaseManagerXjrUserMapper.insert(xjrUser);
  100. for (BaseTeacher baseTeacher : xjrUser.getBaseTeacherList()) {
  101. baseTeacher.setUserId(xjrUser.getId());
  102. if (StrUtil.isNotBlank(baseTeacher.getJobState())) {
  103. baseTeacher.setIsNormal(1);
  104. } else {
  105. DictionaryDetail dictionaryDetail = dictionarydetailService.getOne(Wrappers.<DictionaryDetail>query()
  106. .lambda()
  107. .eq(DictionaryDetail::getCode, baseTeacher.getJobState()));
  108. if (dictionaryDetail != null) {
  109. if (dictionaryDetail.getExtendField1().equals("0")) {
  110. baseTeacher.setIsNormal(0);
  111. } else {
  112. baseTeacher.setIsNormal(1);
  113. }
  114. }
  115. }
  116. teacherbaseManagerBaseTeacherMapper.insert(baseTeacher);
  117. }
  118. for (BaseTeacherContact baseTeacherContact : xjrUser.getBaseTeacherContactList()) {
  119. baseTeacherContact.setUserId(xjrUser.getId());
  120. teacherbaseManagerBaseTeacherContactMapper.insert(baseTeacherContact);
  121. }
  122. for (BaseTeacherEducation baseTeacherEducation : xjrUser.getBaseTeacherEducationList()) {
  123. baseTeacherEducation.setUserId(xjrUser.getId());
  124. teacherbaseManagerBaseTeacherEducationMapper.insert(baseTeacherEducation);
  125. }
  126. for (BaseTeacherEmploy baseTeacherEmploy : xjrUser.getBaseTeacherEmployList()) {
  127. baseTeacherEmploy.setUserId(xjrUser.getId());
  128. teacherbaseManagerBaseTeacherEmployMapper.insert(baseTeacherEmploy);
  129. }
  130. for (BaseTeacherFamily baseTeacherFamily : xjrUser.getBaseTeacherFamilyList()) {
  131. baseTeacherFamily.setUserId(xjrUser.getId());
  132. teacherbaseManagerBaseTeacherFamilyMapper.insert(baseTeacherFamily);
  133. }
  134. for (BaseTeacherFamilyMember baseTeacherFamilyMember : xjrUser.getBaseTeacherFamilyMemberList()) {
  135. baseTeacherFamilyMember.setUserId(xjrUser.getId());
  136. teacherbaseManagerBaseTeacherFamilyMemberMapper.insert(baseTeacherFamilyMember);
  137. }
  138. for (BaseTeacherRegular baseTeacherRegular : xjrUser.getBaseTeacherRegularList()) {
  139. baseTeacherRegular.setUserId(xjrUser.getId());
  140. teacherbaseManagerBaseTeacherRegularMapper.insert(baseTeacherRegular);
  141. }
  142. List<UserDeptRelation> userDeptRelationList = new ArrayList<>();
  143. if (StrUtil.isNotBlank(dto.getDepartmentIds())) {
  144. String allDeptIdStr = StrUtil.join(StringPool.COMMA, dto.getDepartmentIds());
  145. List<Long> departmentIds = Arrays.stream(allDeptIdStr.split(StringPool.COMMA)).map(Convert::toLong).collect(Collectors.toList());
  146. if (CollectionUtil.isNotEmpty(departmentIds)) {
  147. for (Long deptId : departmentIds) {
  148. //将用户所选部门保存到关联表中
  149. UserDeptRelation userDeptRelation = new UserDeptRelation();
  150. userDeptRelation.setUserId(xjrUser.getId());
  151. userDeptRelation.setDeptId(deptId);
  152. userDeptRelationList.add(userDeptRelation);
  153. }
  154. }
  155. userDeptRelationService.saveBatch(userDeptRelationList);
  156. }
  157. List<UserPostRelation> userPostRelationList = new ArrayList<>();
  158. if (StrUtil.isNotBlank(dto.getPostIds())) {
  159. String allPostIdStr = StrUtil.join(StringPool.COMMA, dto.getPostIds());
  160. List<Long> postIds = Arrays.stream(allPostIdStr.split(StringPool.COMMA)).map(Convert::toLong).collect(Collectors.toList());
  161. if (CollectionUtil.isNotEmpty(postIds)) {
  162. for (Long postId : postIds) {
  163. //将用户所选岗位保存到关联表中
  164. UserPostRelation userPostRelation = new UserPostRelation();
  165. userPostRelation.setUserId(xjrUser.getId());
  166. userPostRelation.setPostId(postId);
  167. userPostRelationList.add(userPostRelation);
  168. }
  169. }
  170. userPostRelationService.saveBatch(userPostRelationList);
  171. }
  172. // 添加角色
  173. UserRoleRelation userRoleRelation = new UserRoleRelation();
  174. userRoleRelation.setUserId(xjrUser.getId());
  175. userRoleRelation.setRoleId(RoleEnum.TEACHER.getCode());
  176. userRoleRelationMapper.insert(userRoleRelation);
  177. List<User> list = userService.list();
  178. list.add(BeanUtil.toBean(xjrUser, User.class));
  179. redisUtil.set(GlobalConstant.USER_CACHE_KEY, list);
  180. List<UserDeptRelation> deptRelationList = userDeptRelationMapper.selectList(Wrappers.lambdaQuery(UserDeptRelation.class));
  181. redisUtil.set(GlobalConstant.USER_DEPT_RELATION_CACHE_KEY, deptRelationList);
  182. List<UserRoleRelation> userRoleRelationList = userRoleRelationMapper.selectList(Wrappers.lambdaQuery(UserRoleRelation.class));
  183. redisUtil.set(GlobalConstant.USER_ROLE_RELATION_CACHE_KEY, userRoleRelationList);
  184. return true;
  185. }
  186. @Override
  187. @Transactional(rollbackFor = Exception.class)
  188. public Boolean update(UpdateXjrUserDto dto) {
  189. XjrUser xjrUser = BeanUtil.toBean(dto, XjrUser.class);
  190. teacherbaseManagerXjrUserMapper.updateById(xjrUser);
  191. //先删除再新增
  192. userDeptRelationService.remove(Wrappers.<UserDeptRelation>query().lambda().eq(UserDeptRelation::getUserId, xjrUser.getId()));
  193. List<UserDeptRelation> userDeptRelationList = new ArrayList<>();
  194. if (StrUtil.isNotBlank(dto.getDepartmentIds())) {
  195. String allDeptIdStr = StrUtil.join(StringPool.COMMA, dto.getDepartmentIds());
  196. List<Long> departmentIds = Arrays.stream(allDeptIdStr.split(StringPool.COMMA)).map(Convert::toLong).collect(Collectors.toList());
  197. if (CollectionUtil.isNotEmpty(departmentIds)) {
  198. for (Long deptId : departmentIds) {
  199. //将用户所选部门保存到关联表中
  200. UserDeptRelation userDeptRelation = new UserDeptRelation();
  201. userDeptRelation.setUserId(xjrUser.getId());
  202. userDeptRelation.setDeptId(deptId);
  203. userDeptRelationList.add(userDeptRelation);
  204. }
  205. }
  206. userDeptRelationService.saveBatch(userDeptRelationList);
  207. }
  208. userPostRelationService.remove(Wrappers.<UserPostRelation>query().lambda().eq(UserPostRelation::getUserId,xjrUser.getId()));
  209. List<UserPostRelation> userPostRelationList = new ArrayList<>();
  210. if (StrUtil.isNotBlank(dto.getPostIds())) {
  211. String allPostIdStr = StrUtil.join(StringPool.COMMA, dto.getPostIds());
  212. List<Long> postIds = Arrays.stream(allPostIdStr.split(StringPool.COMMA)).map(Convert::toLong).collect(Collectors.toList());
  213. if (CollectionUtil.isNotEmpty(postIds)) {
  214. for (Long postId : postIds) {
  215. //将用户所选岗位保存到关联表中
  216. UserPostRelation userPostRelation = new UserPostRelation();
  217. userPostRelation.setUserId(xjrUser.getId());
  218. userPostRelation.setPostId(postId);
  219. userPostRelationList.add(userPostRelation);
  220. }
  221. }
  222. userPostRelationService.saveBatch(userPostRelationList);
  223. }
  224. //********************************* BaseTeacher 增删改 开始 *******************************************/
  225. {
  226. // 查出所有子级的id
  227. List<BaseTeacher> baseTeacherList = teacherbaseManagerBaseTeacherMapper.selectList(Wrappers.lambdaQuery(BaseTeacher.class).eq(BaseTeacher::getUserId, xjrUser.getId()).select(BaseTeacher::getId));
  228. List<Long> baseTeacherIds = baseTeacherList.stream().map(BaseTeacher::getId).collect(Collectors.toList());
  229. //原有子表单 没有被删除的主键
  230. List<Long> baseTeacherOldIds = xjrUser.getBaseTeacherList().stream().map(BaseTeacher::getId).filter(Objects::nonNull).collect(Collectors.toList());
  231. //找到需要删除的id
  232. List<Long> baseTeacherRemoveIds = baseTeacherIds.stream().filter(item -> !baseTeacherOldIds.contains(item)).collect(Collectors.toList());
  233. for (BaseTeacher baseTeacher : xjrUser.getBaseTeacherList()) {
  234. if (StrUtil.isNotBlank(baseTeacher.getJobState())) {
  235. baseTeacher.setIsNormal(1);
  236. } else {
  237. DictionaryDetail dictionaryDetail = dictionarydetailService.getOne(Wrappers.<DictionaryDetail>query()
  238. .lambda()
  239. .eq(DictionaryDetail::getCode, baseTeacher.getJobState()));
  240. if (dictionaryDetail != null) {
  241. if (dictionaryDetail.getExtendField1().equals("0")) {
  242. baseTeacher.setIsNormal(0);
  243. } else {
  244. baseTeacher.setIsNormal(1);
  245. }
  246. }
  247. }
  248. //如果不等于空则修改
  249. if (baseTeacher.getId() != null) {
  250. teacherbaseManagerBaseTeacherMapper.updateById(baseTeacher);
  251. }
  252. //如果等于空 则新增
  253. else {
  254. //已经不存在的id 删除
  255. baseTeacher.setUserId(xjrUser.getId());
  256. teacherbaseManagerBaseTeacherMapper.insert(baseTeacher);
  257. }
  258. }
  259. //已经不存在的id 删除
  260. if(baseTeacherRemoveIds.size() > 0){
  261. teacherbaseManagerBaseTeacherMapper.deleteBatchIds(baseTeacherRemoveIds);
  262. }
  263. }
  264. //********************************* BaseTeacher 增删改 结束 *******************************************/
  265. //********************************* BaseTeacherContact 增删改 开始 *******************************************/
  266. {
  267. // 查出所有子级的id
  268. List<BaseTeacherContact> baseTeacherContactList = teacherbaseManagerBaseTeacherContactMapper.selectList(Wrappers.lambdaQuery(BaseTeacherContact.class).eq(BaseTeacherContact::getUserId, xjrUser.getId()).select(BaseTeacherContact::getId));
  269. List<Long> baseTeacherContactIds = baseTeacherContactList.stream().map(BaseTeacherContact::getId).collect(Collectors.toList());
  270. //原有子表单 没有被删除的主键
  271. List<Long> baseTeacherContactOldIds = xjrUser.getBaseTeacherContactList().stream().map(BaseTeacherContact::getId).filter(Objects::nonNull).collect(Collectors.toList());
  272. //找到需要删除的id
  273. List<Long> baseTeacherContactRemoveIds = baseTeacherContactIds.stream().filter(item -> !baseTeacherContactOldIds.contains(item)).collect(Collectors.toList());
  274. for (BaseTeacherContact baseTeacherContact : xjrUser.getBaseTeacherContactList()) {
  275. //如果不等于空则修改
  276. if (baseTeacherContact.getId() != null) {
  277. teacherbaseManagerBaseTeacherContactMapper.updateById(baseTeacherContact);
  278. }
  279. //如果等于空 则新增
  280. else {
  281. //已经不存在的id 删除
  282. baseTeacherContact.setUserId(xjrUser.getId());
  283. teacherbaseManagerBaseTeacherContactMapper.insert(baseTeacherContact);
  284. }
  285. }
  286. //已经不存在的id 删除
  287. if(baseTeacherContactRemoveIds.size() > 0){
  288. teacherbaseManagerBaseTeacherContactMapper.deleteBatchIds(baseTeacherContactRemoveIds);
  289. }
  290. }
  291. //********************************* BaseTeacherContact 增删改 结束 *******************************************/
  292. //********************************* BaseTeacherEducation 增删改 开始 *******************************************/
  293. {
  294. // 查出所有子级的id
  295. List<BaseTeacherEducation> baseTeacherEducationList = teacherbaseManagerBaseTeacherEducationMapper.selectList(Wrappers.lambdaQuery(BaseTeacherEducation.class).eq(BaseTeacherEducation::getUserId, xjrUser.getId()).select(BaseTeacherEducation::getId));
  296. List<Long> baseTeacherEducationIds = baseTeacherEducationList.stream().map(BaseTeacherEducation::getId).collect(Collectors.toList());
  297. //原有子表单 没有被删除的主键
  298. List<Long> baseTeacherEducationOldIds = xjrUser.getBaseTeacherEducationList().stream().map(BaseTeacherEducation::getId).filter(Objects::nonNull).collect(Collectors.toList());
  299. //找到需要删除的id
  300. List<Long> baseTeacherEducationRemoveIds = baseTeacherEducationIds.stream().filter(item -> !baseTeacherEducationOldIds.contains(item)).collect(Collectors.toList());
  301. for (BaseTeacherEducation baseTeacherEducation : xjrUser.getBaseTeacherEducationList()) {
  302. //如果不等于空则修改
  303. if (baseTeacherEducation.getId() != null) {
  304. teacherbaseManagerBaseTeacherEducationMapper.updateById(baseTeacherEducation);
  305. }
  306. //如果等于空 则新增
  307. else {
  308. //已经不存在的id 删除
  309. baseTeacherEducation.setUserId(xjrUser.getId());
  310. teacherbaseManagerBaseTeacherEducationMapper.insert(baseTeacherEducation);
  311. }
  312. }
  313. //已经不存在的id 删除
  314. if(baseTeacherEducationRemoveIds.size() > 0){
  315. teacherbaseManagerBaseTeacherEducationMapper.deleteBatchIds(baseTeacherEducationRemoveIds);
  316. }
  317. }
  318. //********************************* BaseTeacherEducation 增删改 结束 *******************************************/
  319. //********************************* BaseTeacherEmploy 增删改 开始 *******************************************/
  320. {
  321. // 查出所有子级的id
  322. List<BaseTeacherEmploy> baseTeacherEmployList = teacherbaseManagerBaseTeacherEmployMapper.selectList(Wrappers.lambdaQuery(BaseTeacherEmploy.class).eq(BaseTeacherEmploy::getUserId, xjrUser.getId()).select(BaseTeacherEmploy::getId));
  323. List<Long> baseTeacherEmployIds = baseTeacherEmployList.stream().map(BaseTeacherEmploy::getId).collect(Collectors.toList());
  324. //原有子表单 没有被删除的主键
  325. List<Long> baseTeacherEmployOldIds = xjrUser.getBaseTeacherEmployList().stream().map(BaseTeacherEmploy::getId).filter(Objects::nonNull).collect(Collectors.toList());
  326. //找到需要删除的id
  327. List<Long> baseTeacherEmployRemoveIds = baseTeacherEmployIds.stream().filter(item -> !baseTeacherEmployOldIds.contains(item)).collect(Collectors.toList());
  328. for (BaseTeacherEmploy baseTeacherEmploy : xjrUser.getBaseTeacherEmployList()) {
  329. //如果不等于空则修改
  330. if (baseTeacherEmploy.getId() != null) {
  331. teacherbaseManagerBaseTeacherEmployMapper.updateById(baseTeacherEmploy);
  332. }
  333. //如果等于空 则新增
  334. else {
  335. //已经不存在的id 删除
  336. baseTeacherEmploy.setUserId(xjrUser.getId());
  337. teacherbaseManagerBaseTeacherEmployMapper.insert(baseTeacherEmploy);
  338. }
  339. }
  340. //已经不存在的id 删除
  341. if(baseTeacherEmployRemoveIds.size() > 0){
  342. teacherbaseManagerBaseTeacherEmployMapper.deleteBatchIds(baseTeacherEmployRemoveIds);
  343. }
  344. }
  345. //********************************* BaseTeacherEmploy 增删改 结束 *******************************************/
  346. //********************************* BaseTeacherFamily 增删改 开始 *******************************************/
  347. {
  348. // 查出所有子级的id
  349. List<BaseTeacherFamily> baseTeacherFamilyList = teacherbaseManagerBaseTeacherFamilyMapper.selectList(Wrappers.lambdaQuery(BaseTeacherFamily.class).eq(BaseTeacherFamily::getUserId, xjrUser.getId()).select(BaseTeacherFamily::getId));
  350. List<Long> baseTeacherFamilyIds = baseTeacherFamilyList.stream().map(BaseTeacherFamily::getId).collect(Collectors.toList());
  351. //原有子表单 没有被删除的主键
  352. List<Long> baseTeacherFamilyOldIds = xjrUser.getBaseTeacherFamilyList().stream().map(BaseTeacherFamily::getId).filter(Objects::nonNull).collect(Collectors.toList());
  353. //找到需要删除的id
  354. List<Long> baseTeacherFamilyRemoveIds = baseTeacherFamilyIds.stream().filter(item -> !baseTeacherFamilyOldIds.contains(item)).collect(Collectors.toList());
  355. for (BaseTeacherFamily baseTeacherFamily : xjrUser.getBaseTeacherFamilyList()) {
  356. //如果不等于空则修改
  357. if (baseTeacherFamily.getId() != null) {
  358. teacherbaseManagerBaseTeacherFamilyMapper.updateById(baseTeacherFamily);
  359. }
  360. //如果等于空 则新增
  361. else {
  362. //已经不存在的id 删除
  363. baseTeacherFamily.setUserId(xjrUser.getId());
  364. teacherbaseManagerBaseTeacherFamilyMapper.insert(baseTeacherFamily);
  365. }
  366. }
  367. //已经不存在的id 删除
  368. if(baseTeacherFamilyRemoveIds.size() > 0){
  369. teacherbaseManagerBaseTeacherFamilyMapper.deleteBatchIds(baseTeacherFamilyRemoveIds);
  370. }
  371. }
  372. //********************************* BaseTeacherFamily 增删改 结束 *******************************************/
  373. //********************************* BaseTeacherFamilyMember 增删改 开始 *******************************************/
  374. {
  375. // 查出所有子级的id
  376. List<BaseTeacherFamilyMember> baseTeacherFamilyMemberList = teacherbaseManagerBaseTeacherFamilyMemberMapper.selectList(Wrappers.lambdaQuery(BaseTeacherFamilyMember.class).eq(BaseTeacherFamilyMember::getUserId, xjrUser.getId()).select(BaseTeacherFamilyMember::getId));
  377. List<Long> baseTeacherFamilyMemberIds = baseTeacherFamilyMemberList.stream().map(BaseTeacherFamilyMember::getId).collect(Collectors.toList());
  378. //原有子表单 没有被删除的主键
  379. List<Long> baseTeacherFamilyMemberOldIds = xjrUser.getBaseTeacherFamilyMemberList().stream().map(BaseTeacherFamilyMember::getId).filter(Objects::nonNull).collect(Collectors.toList());
  380. //找到需要删除的id
  381. List<Long> baseTeacherFamilyMemberRemoveIds = baseTeacherFamilyMemberIds.stream().filter(item -> !baseTeacherFamilyMemberOldIds.contains(item)).collect(Collectors.toList());
  382. for (BaseTeacherFamilyMember baseTeacherFamilyMember : xjrUser.getBaseTeacherFamilyMemberList()) {
  383. //如果不等于空则修改
  384. if (baseTeacherFamilyMember.getId() != null) {
  385. teacherbaseManagerBaseTeacherFamilyMemberMapper.updateById(baseTeacherFamilyMember);
  386. }
  387. //如果等于空 则新增
  388. else {
  389. //已经不存在的id 删除
  390. baseTeacherFamilyMember.setUserId(xjrUser.getId());
  391. teacherbaseManagerBaseTeacherFamilyMemberMapper.insert(baseTeacherFamilyMember);
  392. }
  393. }
  394. //已经不存在的id 删除
  395. if(baseTeacherFamilyMemberRemoveIds.size() > 0){
  396. teacherbaseManagerBaseTeacherFamilyMemberMapper.deleteBatchIds(baseTeacherFamilyMemberRemoveIds);
  397. }
  398. }
  399. //********************************* BaseTeacherFamilyMember 增删改 结束 *******************************************/
  400. //********************************* BaseTeacherRegular 增删改 开始 *******************************************/
  401. {
  402. // 查出所有子级的id
  403. List<BaseTeacherRegular> baseTeacherRegularList = teacherbaseManagerBaseTeacherRegularMapper.selectList(Wrappers.lambdaQuery(BaseTeacherRegular.class).eq(BaseTeacherRegular::getUserId, xjrUser.getId()).select(BaseTeacherRegular::getId));
  404. List<Long> baseTeacherRegularIds = baseTeacherRegularList.stream().map(BaseTeacherRegular::getId).collect(Collectors.toList());
  405. //原有子表单 没有被删除的主键
  406. List<Long> baseTeacherRegularOldIds = xjrUser.getBaseTeacherRegularList().stream().map(BaseTeacherRegular::getId).filter(Objects::nonNull).collect(Collectors.toList());
  407. //找到需要删除的id
  408. List<Long> baseTeacherRegularRemoveIds = baseTeacherRegularIds.stream().filter(item -> !baseTeacherRegularOldIds.contains(item)).collect(Collectors.toList());
  409. for (BaseTeacherRegular baseTeacherRegular : xjrUser.getBaseTeacherRegularList()) {
  410. //如果不等于空则修改
  411. if (baseTeacherRegular.getId() != null) {
  412. teacherbaseManagerBaseTeacherRegularMapper.updateById(baseTeacherRegular);
  413. }
  414. //如果等于空 则新增
  415. else {
  416. //已经不存在的id 删除
  417. baseTeacherRegular.setUserId(xjrUser.getId());
  418. teacherbaseManagerBaseTeacherRegularMapper.insert(baseTeacherRegular);
  419. }
  420. }
  421. //已经不存在的id 删除
  422. if(baseTeacherRegularRemoveIds.size() > 0){
  423. teacherbaseManagerBaseTeacherRegularMapper.deleteBatchIds(baseTeacherRegularRemoveIds);
  424. }
  425. }
  426. //********************************* BaseTeacherRegular 增删改 结束 *******************************************/
  427. return true;
  428. }
  429. @Override
  430. @Transactional(rollbackFor = Exception.class)
  431. public Boolean delete(List<Long> ids) {
  432. teacherbaseManagerXjrUserMapper.deleteBatchIds(ids);
  433. teacherbaseManagerBaseTeacherMapper.delete(Wrappers.lambdaQuery(BaseTeacher.class).in(BaseTeacher::getUserId, ids));
  434. teacherbaseManagerBaseTeacherContactMapper.delete(Wrappers.lambdaQuery(BaseTeacherContact.class).in(BaseTeacherContact::getUserId, ids));
  435. teacherbaseManagerBaseTeacherEducationMapper.delete(Wrappers.lambdaQuery(BaseTeacherEducation.class).in(BaseTeacherEducation::getUserId, ids));
  436. teacherbaseManagerBaseTeacherEmployMapper.delete(Wrappers.lambdaQuery(BaseTeacherEmploy.class).in(BaseTeacherEmploy::getUserId, ids));
  437. teacherbaseManagerBaseTeacherFamilyMapper.delete(Wrappers.lambdaQuery(BaseTeacherFamily.class).in(BaseTeacherFamily::getUserId, ids));
  438. teacherbaseManagerBaseTeacherFamilyMemberMapper.delete(Wrappers.lambdaQuery(BaseTeacherFamilyMember.class).in(BaseTeacherFamilyMember::getUserId, ids));
  439. teacherbaseManagerBaseTeacherRegularMapper.delete(Wrappers.lambdaQuery(BaseTeacherRegular.class).in(BaseTeacherRegular::getUserId, ids));
  440. return true;
  441. }
  442. /**
  443. * 导入,根据第一个工号查询是否有相关信息
  444. * 1、批量新增或者修改xjr_user、base_teacher、xjr_user_dept_relation、xjr_user_post_relation
  445. * 2、更新redis里面的缓存
  446. * @param excelDataList 导入的数据
  447. * @return 成功
  448. */
  449. @Override
  450. @Transactional(rollbackFor = Exception.class)
  451. public Boolean importData(List<Map<Integer, Object>> excelDataList) {
  452. List<User> userList = userService.list(
  453. new MPJLambdaWrapper<User>()
  454. .select(User::getId)
  455. .select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty()))
  456. .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
  457. );
  458. Map<String, User> userMap = userList.stream().collect(Collectors.toMap(User::getUserName, x -> x));
  459. List<BaseTeacher> teacherList = teacherbaseManagerBaseTeacherMapper.selectJoinList(BaseTeacher.class,
  460. new MPJLambdaWrapper<BaseTeacher>()
  461. .select(BaseTeacher::getId)
  462. .select(BaseTeacher.class, x -> VoToColumnUtil.fieldsToColumns(BaseTeacher.class).contains(x.getProperty()))
  463. .innerJoin(User.class, User::getId, BaseTeacher::getUserId)
  464. );
  465. Map<Long, BaseTeacher> teacherMap = teacherList.stream().collect(Collectors.toMap(BaseTeacher::getUserId, x -> x));
  466. List<Long> itemList = new ArrayList<>();
  467. itemList.add(2023000000000000016L);
  468. itemList.add(2023000000000000006L);
  469. List<DictionaryDetail> dictionaryList = dictionaryService.list(
  470. new QueryWrapper<DictionaryDetail>().lambda()
  471. .in(DictionaryDetail::getItemId, itemList)
  472. .eq(DictionaryDetail::getDeleteMark, DeleteMark.NODELETE.getCode())
  473. );
  474. Map<String, String> dictionaryMap = dictionaryList.stream().collect(Collectors.toMap(DictionaryDetail::getName, DictionaryDetail::getCode));
  475. List<Department> departmentList = departmentService.list(
  476. new QueryWrapper<Department>().lambda()
  477. .eq(Department::getDeleteMark, DeleteMark.NODELETE.getCode())
  478. );
  479. Map<String, Long> departmentMap = departmentList.stream().collect(Collectors.toMap(Department::getName, Department::getId));
  480. List<Post> postList = postService.list(
  481. new QueryWrapper<Post>().lambda()
  482. .eq(Post::getDeleteMark, DeleteMark.NODELETE.getCode())
  483. );
  484. Map<String, Long> postMap = postList.stream().collect(Collectors.toMap(Post::getName, Post::getId));
  485. List<UserPostRelation> postRelations = userPostRelationService.list(
  486. new MPJLambdaWrapper<UserPostRelation>()
  487. .select(UserPostRelation::getId)
  488. .select(UserPostRelation.class, x -> VoToColumnUtil.fieldsToColumns(UserPostRelation.class).contains(x.getProperty()))
  489. .innerJoin(User.class, User::getId, UserPostRelation::getUserId)
  490. .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
  491. );
  492. Map<Long, List<Long>> userPostMap = postRelations.stream()
  493. .collect(Collectors.groupingBy(UserPostRelation::getUserId, Collectors.mapping(UserPostRelation::getPostId, Collectors.toList())));
  494. List<UserDeptRelation> deptRelations = userDeptRelationMapper.selectList(
  495. new MPJLambdaWrapper<UserDeptRelation>()
  496. .select(UserDeptRelation::getId)
  497. .select(UserDeptRelation.class, x -> VoToColumnUtil.fieldsToColumns(UserDeptRelation.class).contains(x.getProperty()))
  498. .innerJoin(User.class, User::getId, UserDeptRelation::getUserId)
  499. .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
  500. );
  501. Map<Long, List<Long>> userDeptMap = postRelations.stream()
  502. .collect(Collectors.groupingBy(UserPostRelation::getUserId, Collectors.mapping(UserPostRelation::getPostId, Collectors.toList())));
  503. List<User> updateUserList = new ArrayList<>();
  504. List<BaseTeacher> updateTeacherList = new ArrayList<>();
  505. List<UserDeptRelation> updateDeptList = new ArrayList<>();
  506. List<UserPostRelation> updatePostList = new ArrayList<>();
  507. for (Map<Integer, Object> rowData : excelDataList) {
  508. String jobCode = rowData.get(0).toString();
  509. if(userMap.containsKey(jobCode)){
  510. User user = userMap.get(jobCode);
  511. user.setName(rowData.get(1).toString());
  512. user.setGender(GenderDictionaryEnum.getCode(rowData.get(2).toString()));
  513. user.setCredentialType(dictionaryMap.get(rowData.get(3).toString()));
  514. user.setCredentialNumber(rowData.get(4).toString());
  515. user.setMobile(rowData.get(5).toString());
  516. updateUserList.add(user);
  517. BaseTeacher teacher = teacherMap.get(user.getId());
  518. teacher.setEmployType(dictionaryMap.get(rowData.get(6).toString()));
  519. updateTeacherList.add(teacher);
  520. List<Long> deptIds = userDeptMap.get(user.getId());
  521. if(deptIds == null || !deptIds.contains(departmentMap.get(rowData.get(7).toString()))){
  522. UserDeptRelation userDeptRelation = new UserDeptRelation();
  523. userDeptRelation.setDeptId(departmentMap.get(rowData.get(7).toString()));
  524. userDeptRelation.setUserId(user.getId());
  525. updateDeptList.add(userDeptRelation);
  526. }
  527. List<Long> postIds = userPostMap.get(user.getId());
  528. if(postIds == null || !postIds.contains(postMap.get(rowData.get(8).toString()))){
  529. UserPostRelation postRelation = new UserPostRelation();
  530. postRelation.setPostId(postMap.get(rowData.get(8).toString()));
  531. postRelation.setUserId(user.getId());
  532. updatePostList.add(postRelation);
  533. }
  534. continue;
  535. }
  536. User user = new User();
  537. user.setUserName(rowData.get(0).toString());
  538. user.setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
  539. user.setIsChangePassword(1);
  540. user.setName(rowData.get(1).toString());
  541. user.setGender(GenderDictionaryEnum.getCode(rowData.get(2).toString()));
  542. user.setCredentialType(dictionaryMap.get(rowData.get(3).toString()));
  543. user.setCredentialNumber(rowData.get(4).toString());
  544. user.setMobile(rowData.get(5).toString());
  545. user.setCreateDate(LocalDateTime.now());
  546. userService.save(user);
  547. BaseTeacher teacher = new BaseTeacher();
  548. teacher.setEmployType(dictionaryMap.get(rowData.get(6).toString()));
  549. teacher.setUserId(user.getId());
  550. teacher.setCreateDate(LocalDateTime.now());
  551. teacherbaseManagerBaseTeacherMapper.insert(teacher);
  552. UserDeptRelation userDeptRelation = new UserDeptRelation();
  553. userDeptRelation.setDeptId(departmentMap.get(rowData.get(7).toString()));
  554. userDeptRelation.setUserId(user.getId());
  555. userDeptRelationMapper.insert(userDeptRelation);
  556. UserPostRelation postRelation = new UserPostRelation();
  557. postRelation.setPostId(postMap.get(rowData.get(8).toString()));
  558. postRelation.setUserId(user.getId());
  559. userPostRelationService.save(postRelation);
  560. UserRoleRelation roleRelation = new UserRoleRelation();
  561. roleRelation.setUserId(user.getId());
  562. roleRelation.setRoleId(RoleEnum.TEACHER.getCode());
  563. userRoleRelationMapper.insert(roleRelation);
  564. }
  565. if(!updateUserList.isEmpty()){
  566. userService.updateBatchById(updateUserList);
  567. }
  568. if(!updateDeptList.isEmpty()){
  569. for (UserDeptRelation relation : updateDeptList) {
  570. userDeptRelationMapper.insert(relation);
  571. }
  572. }
  573. if(!updatePostList.isEmpty()){
  574. userPostRelationService.saveBatch(updatePostList);
  575. }
  576. if(!updateTeacherList.isEmpty()){
  577. for (BaseTeacher teacher : updateTeacherList) {
  578. teacherbaseManagerBaseTeacherMapper.updateById(teacher);
  579. }
  580. }
  581. List<User> list = userService.list();
  582. redisUtil.set(GlobalConstant.USER_CACHE_KEY, list);
  583. List<UserDeptRelation> deptRelationList = userDeptRelationMapper.selectList(Wrappers.lambdaQuery(UserDeptRelation.class));
  584. redisUtil.set(GlobalConstant.USER_DEPT_RELATION_CACHE_KEY, deptRelationList);
  585. List<UserRoleRelation> userRoleRelationList = userRoleRelationMapper.selectList(Wrappers.lambdaQuery(UserRoleRelation.class));
  586. redisUtil.set(GlobalConstant.USER_ROLE_RELATION_CACHE_KEY, userRoleRelationList);
  587. List<UserPostRelation> postRelationList = userPostRelationService.list(Wrappers.lambdaQuery(UserPostRelation.class));
  588. redisUtil.set(GlobalConstant.USER_POST_RELATION_CACHE_KEY, postRelationList);
  589. return true;
  590. }
  591. @Override
  592. @Transactional(rollbackFor = Exception.class)
  593. public void changeIsNormal(String jobState,Integer isNormal){
  594. List<BaseTeacher> baseTeacherList = teacherbaseManagerBaseTeacherMapper.selectList(Wrappers.lambdaQuery(BaseTeacher.class)
  595. .eq(BaseTeacher::getJobState, jobState));
  596. for (BaseTeacher baseTeacher : baseTeacherList) {
  597. baseTeacher.setIsNormal(isNormal);
  598. teacherbaseManagerBaseTeacherMapper.updateById(baseTeacher);
  599. }
  600. }
  601. }