TeacherbaseManagerServiceImpl.java 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881
  1. package com.xjrsoft.module.teacher.service.impl;
  2. import cn.dev33.satoken.secure.BCrypt;
  3. import cn.dev33.satoken.stp.StpUtil;
  4. import cn.hutool.core.bean.BeanUtil;
  5. import cn.hutool.core.collection.CollectionUtil;
  6. import cn.hutool.core.convert.Convert;
  7. import cn.hutool.core.util.StrUtil;
  8. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  9. import com.baomidou.mybatisplus.core.toolkit.StringPool;
  10. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  11. import com.github.yulichang.base.MPJBaseServiceImpl;
  12. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  13. import com.xjrsoft.common.constant.GlobalConstant;
  14. import com.xjrsoft.common.enums.DeleteMark;
  15. import com.xjrsoft.common.enums.EnabledMark;
  16. import com.xjrsoft.common.enums.GenderDictionaryEnum;
  17. import com.xjrsoft.common.enums.JobStateEnum;
  18. import com.xjrsoft.common.enums.RoleEnum;
  19. import com.xjrsoft.common.enums.TeaChangeTypeEnum;
  20. import com.xjrsoft.common.exception.MyException;
  21. import com.xjrsoft.common.utils.RedisUtil;
  22. import com.xjrsoft.common.utils.VoToColumnUtil;
  23. import com.xjrsoft.config.CommonPropertiesConfig;
  24. import com.xjrsoft.module.hikvision.util.DataUtil;
  25. import com.xjrsoft.module.organization.entity.Department;
  26. import com.xjrsoft.module.organization.entity.Post;
  27. import com.xjrsoft.module.organization.entity.User;
  28. import com.xjrsoft.module.organization.entity.UserDeptRelation;
  29. import com.xjrsoft.module.organization.entity.UserPostRelation;
  30. import com.xjrsoft.module.organization.entity.UserRoleRelation;
  31. import com.xjrsoft.module.organization.mapper.UserDeptRelationMapper;
  32. import com.xjrsoft.module.organization.mapper.UserRoleRelationMapper;
  33. import com.xjrsoft.module.organization.service.IDepartmentService;
  34. import com.xjrsoft.module.organization.service.IPostService;
  35. import com.xjrsoft.module.organization.service.IUserDeptRelationService;
  36. import com.xjrsoft.module.organization.service.IUserPostRelationService;
  37. import com.xjrsoft.module.organization.service.IUserService;
  38. import com.xjrsoft.module.personnel.entity.CarMessageApply;
  39. import com.xjrsoft.module.personnel.mapper.CarMessageApplyMapper;
  40. import com.xjrsoft.module.personnel.service.ITeacherFaceProcessService;
  41. import com.xjrsoft.module.system.entity.DictionaryDetail;
  42. import com.xjrsoft.module.system.entity.DictionaryItem;
  43. import com.xjrsoft.module.system.service.IDictionarydetailService;
  44. import com.xjrsoft.module.teacher.dto.AddXjrUserDto;
  45. import com.xjrsoft.module.teacher.dto.UpdateXjrUserDto;
  46. import com.xjrsoft.module.teacher.entity.BaseTeacher;
  47. import com.xjrsoft.module.teacher.entity.BaseTeacherChangeRecord;
  48. import com.xjrsoft.module.teacher.entity.BaseTeacherContact;
  49. import com.xjrsoft.module.teacher.entity.BaseTeacherEducation;
  50. import com.xjrsoft.module.teacher.entity.BaseTeacherEmploy;
  51. import com.xjrsoft.module.teacher.entity.BaseTeacherFamily;
  52. import com.xjrsoft.module.teacher.entity.BaseTeacherFamilyMember;
  53. import com.xjrsoft.module.teacher.entity.BaseTeacherRegular;
  54. import com.xjrsoft.module.teacher.entity.WfTeacherDepart;
  55. import com.xjrsoft.module.teacher.entity.XjrUser;
  56. import com.xjrsoft.module.teacher.mapper.BaseTeacherChangeRecordMapper;
  57. import com.xjrsoft.module.teacher.mapper.BaseTeacherContactMapper;
  58. import com.xjrsoft.module.teacher.mapper.BaseTeacherEducationMapper;
  59. import com.xjrsoft.module.teacher.mapper.BaseTeacherEmployMapper;
  60. import com.xjrsoft.module.teacher.mapper.BaseTeacherFamilyMapper;
  61. import com.xjrsoft.module.teacher.mapper.BaseTeacherFamilyMemberMapper;
  62. import com.xjrsoft.module.teacher.mapper.BaseTeacherMapper;
  63. import com.xjrsoft.module.teacher.mapper.BaseTeacherRegularMapper;
  64. import com.xjrsoft.module.teacher.mapper.WfTeacherDepartMapper;
  65. import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
  66. import com.xjrsoft.module.teacher.service.ITeacherbaseManagerService;
  67. import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
  68. import com.xjrsoft.module.workflow.mapper.WorkflowFormRelationMapper;
  69. import lombok.AllArgsConstructor;
  70. import org.apache.commons.collections.CollectionUtils;
  71. import org.apache.commons.lang3.ObjectUtils;
  72. import org.apache.commons.lang3.StringUtils;
  73. import org.camunda.bpm.engine.history.HistoricProcessInstance;
  74. import org.springframework.stereotype.Service;
  75. import org.springframework.transaction.annotation.Transactional;
  76. import java.time.LocalDateTime;
  77. import java.util.ArrayList;
  78. import java.util.Arrays;
  79. import java.util.Date;
  80. import java.util.List;
  81. import java.util.Map;
  82. import java.util.Objects;
  83. import java.util.stream.Collectors;
  84. /**
  85. * @title: service
  86. * @Author 管理员
  87. * @Date: 2023-08-08
  88. * @Version 1.0
  89. */
  90. @Service
  91. @AllArgsConstructor
  92. public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMapper, XjrUser> implements ITeacherbaseManagerService {
  93. private final XjrUserMapper teacherbaseManagerXjrUserMapper;
  94. private final BaseTeacherMapper teacherbaseManagerBaseTeacherMapper;
  95. private final BaseTeacherContactMapper teacherbaseManagerBaseTeacherContactMapper;
  96. private final BaseTeacherEducationMapper teacherbaseManagerBaseTeacherEducationMapper;
  97. private final BaseTeacherEmployMapper teacherbaseManagerBaseTeacherEmployMapper;
  98. private final BaseTeacherFamilyMapper teacherbaseManagerBaseTeacherFamilyMapper;
  99. private final BaseTeacherFamilyMemberMapper teacherbaseManagerBaseTeacherFamilyMemberMapper;
  100. private final BaseTeacherRegularMapper teacherbaseManagerBaseTeacherRegularMapper;
  101. private final UserRoleRelationMapper userRoleRelationMapper;
  102. private final IUserDeptRelationService userDeptRelationService;
  103. private final RedisUtil redisUtil;
  104. private final UserDeptRelationMapper userDeptRelationMapper;
  105. private final IUserService userService;
  106. private final CommonPropertiesConfig propertiesConfig;
  107. private final IUserPostRelationService userPostRelationService;
  108. private final IDictionarydetailService dictionaryService;
  109. private final IDepartmentService departmentService;
  110. private final IPostService postService;
  111. private final BaseTeacherMapper baseTeacherMapper;
  112. private IDictionarydetailService dictionarydetailService;
  113. private WfTeacherDepartMapper wfTeacherDepartMapper;
  114. private BaseTeacherChangeRecordMapper baseTeacherChangeRecordMapper;
  115. private WorkflowFormRelationMapper workflowFormRelationMapper;
  116. private final ITeacherFaceProcessService teacherFaceProcessService;
  117. private final CarMessageApplyMapper carMessageApplyMapper;
  118. @Override
  119. @Transactional(rollbackFor = Exception.class)
  120. public Boolean add(AddXjrUserDto dto) {
  121. XjrUser xjrUser = BeanUtil.toBean(dto, XjrUser.class);
  122. xjrUser.setCode(dto.getUserName());
  123. // 使用系统配置的默认密码
  124. xjrUser.setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
  125. teacherbaseManagerXjrUserMapper.insert(xjrUser);
  126. for (BaseTeacher baseTeacher : xjrUser.getBaseTeacherList()) {
  127. baseTeacher.setUserId(xjrUser.getId());
  128. if (!StrUtil.isNotBlank(baseTeacher.getJobState())) {
  129. baseTeacher.setIsNormal(1);
  130. } else {
  131. DictionaryDetail dictionaryDetail = dictionarydetailService.getOne(Wrappers.<DictionaryDetail>query()
  132. .lambda()
  133. .eq(DictionaryDetail::getCode, baseTeacher.getJobState())
  134. .inSql(DictionaryDetail::getItemId, "SELECT id from xjr_dictionary_item where code='job_state'")
  135. );
  136. if (dictionaryDetail != null) {
  137. if ("0".equals(dictionaryDetail.getExtendField1())) {
  138. baseTeacher.setIsNormal(0);
  139. } else {
  140. baseTeacher.setIsNormal(1);
  141. }
  142. }
  143. }
  144. teacherbaseManagerBaseTeacherMapper.insert(baseTeacher);
  145. }
  146. for (BaseTeacherContact baseTeacherContact : xjrUser.getBaseTeacherContactList()) {
  147. baseTeacherContact.setUserId(xjrUser.getId());
  148. teacherbaseManagerBaseTeacherContactMapper.insert(baseTeacherContact);
  149. }
  150. for (BaseTeacherEducation baseTeacherEducation : xjrUser.getBaseTeacherEducationList()) {
  151. baseTeacherEducation.setUserId(xjrUser.getId());
  152. teacherbaseManagerBaseTeacherEducationMapper.insert(baseTeacherEducation);
  153. }
  154. for (BaseTeacherEmploy baseTeacherEmploy : xjrUser.getBaseTeacherEmployList()) {
  155. baseTeacherEmploy.setUserId(xjrUser.getId());
  156. teacherbaseManagerBaseTeacherEmployMapper.insert(baseTeacherEmploy);
  157. }
  158. for (BaseTeacherFamily baseTeacherFamily : xjrUser.getBaseTeacherFamilyList()) {
  159. baseTeacherFamily.setUserId(xjrUser.getId());
  160. teacherbaseManagerBaseTeacherFamilyMapper.insert(baseTeacherFamily);
  161. }
  162. for (BaseTeacherFamilyMember baseTeacherFamilyMember : xjrUser.getBaseTeacherFamilyMemberList()) {
  163. baseTeacherFamilyMember.setUserId(xjrUser.getId());
  164. teacherbaseManagerBaseTeacherFamilyMemberMapper.insert(baseTeacherFamilyMember);
  165. }
  166. for (BaseTeacherRegular baseTeacherRegular : xjrUser.getBaseTeacherRegularList()) {
  167. baseTeacherRegular.setUserId(xjrUser.getId());
  168. teacherbaseManagerBaseTeacherRegularMapper.insert(baseTeacherRegular);
  169. }
  170. List<UserDeptRelation> userDeptRelationList = new ArrayList<>();
  171. if (StrUtil.isNotBlank(dto.getDepartmentIds())) {
  172. String allDeptIdStr = StrUtil.join(StringPool.COMMA, dto.getDepartmentIds());
  173. List<Long> departmentIds = Arrays.stream(allDeptIdStr.split(StringPool.COMMA)).map(Convert::toLong).collect(Collectors.toList());
  174. if (CollectionUtil.isNotEmpty(departmentIds)) {
  175. for (Long deptId : departmentIds) {
  176. //将用户所选部门保存到关联表中
  177. UserDeptRelation userDeptRelation = new UserDeptRelation();
  178. userDeptRelation.setUserId(xjrUser.getId());
  179. userDeptRelation.setDeptId(deptId);
  180. userDeptRelationList.add(userDeptRelation);
  181. }
  182. }
  183. userDeptRelationService.saveBatch(userDeptRelationList);
  184. }
  185. List<UserPostRelation> userPostRelationList = new ArrayList<>();
  186. if (StrUtil.isNotBlank(dto.getPostIds())) {
  187. String allPostIdStr = StrUtil.join(StringPool.COMMA, dto.getPostIds());
  188. List<Long> postIds = Arrays.stream(allPostIdStr.split(StringPool.COMMA)).map(Convert::toLong).collect(Collectors.toList());
  189. if (CollectionUtil.isNotEmpty(postIds)) {
  190. for (Long postId : postIds) {
  191. //将用户所选岗位保存到关联表中
  192. UserPostRelation userPostRelation = new UserPostRelation();
  193. userPostRelation.setUserId(xjrUser.getId());
  194. userPostRelation.setPostId(postId);
  195. userPostRelationList.add(userPostRelation);
  196. }
  197. }
  198. userPostRelationService.saveBatch(userPostRelationList);
  199. }
  200. // 添加角色
  201. UserRoleRelation userRoleRelation = new UserRoleRelation();
  202. userRoleRelation.setUserId(xjrUser.getId());
  203. userRoleRelation.setRoleId(RoleEnum.TEACHER.getCode());
  204. userRoleRelationMapper.insert(userRoleRelation);
  205. List<User> list = userService.list();
  206. list.add(BeanUtil.toBean(xjrUser, User.class));
  207. redisUtil.set(GlobalConstant.USER_CACHE_KEY, list);
  208. List<UserDeptRelation> deptRelationList = userDeptRelationMapper.selectList(Wrappers.lambdaQuery(UserDeptRelation.class));
  209. redisUtil.set(GlobalConstant.USER_DEPT_RELATION_CACHE_KEY, deptRelationList);
  210. List<UserRoleRelation> userRoleRelationList = userRoleRelationMapper.selectList(Wrappers.lambdaQuery(UserRoleRelation.class));
  211. redisUtil.set(GlobalConstant.USER_ROLE_RELATION_CACHE_KEY, userRoleRelationList);
  212. return true;
  213. }
  214. @Override
  215. @Transactional(rollbackFor = Exception.class)
  216. public Boolean update(UpdateXjrUserDto dto) {
  217. XjrUser old = this.getByIdDeep(dto.getId());
  218. if(ObjectUtils.isEmpty(old)){
  219. throw new MyException("教职工信息不存在");
  220. }
  221. // 处理在职状态
  222. // 获取字典值
  223. List<DictionaryDetail> detailList = dictionarydetailService.list(
  224. new MPJLambdaWrapper<DictionaryDetail>()
  225. .select(DictionaryDetail::getId)
  226. .select(DictionaryDetail.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryDetail.class).contains(x.getProperty()))
  227. .leftJoin(DictionaryItem.class, DictionaryItem::getId, DictionaryDetail::getItemId)
  228. .eq(DictionaryItem::getCode, "job_state")
  229. );
  230. Map<String, String> dictionaryDetailMap = detailList.stream()
  231. .collect(Collectors.toMap(DictionaryDetail::getCode, DictionaryDetail::getName));
  232. // 定义常量
  233. final String NO_JOB_STATE = "无在职状态";
  234. // 获取新旧在职状态
  235. String oldJobState = null;
  236. String newJobState = null;
  237. if (CollectionUtils.isNotEmpty(old.getBaseTeacherList()) && StringUtils.isNotEmpty(old.getBaseTeacherList().get(0).getJobState())) {
  238. oldJobState = old.getBaseTeacherList().get(0).getJobState();
  239. }
  240. if (CollectionUtils.isNotEmpty(dto.getBaseTeacherList()) && StringUtils.isNotEmpty(dto.getBaseTeacherList().get(0).getJobState())) {
  241. newJobState = dto.getBaseTeacherList().get(0).getJobState();
  242. }
  243. // 只有在职状态被修改时,才触发 insert
  244. if (!Objects.equals(oldJobState, newJobState)) {
  245. BaseTeacherChangeRecord insetBaseTeacherChangeRecord = new BaseTeacherChangeRecord();
  246. insetBaseTeacherChangeRecord.setCreateUserId(StpUtil.getLoginIdAsLong());
  247. insetBaseTeacherChangeRecord.setCreateDate(new Date());
  248. insetBaseTeacherChangeRecord.setUserId(dto.getId());
  249. insetBaseTeacherChangeRecord.setChangeType(TeaChangeTypeEnum.TCT0001.getCode());
  250. // 设置旧状态
  251. if (StringUtils.isNotEmpty(oldJobState)) {
  252. insetBaseTeacherChangeRecord.setOldJobState(dictionaryDetailMap.getOrDefault(oldJobState, oldJobState));
  253. } else {
  254. insetBaseTeacherChangeRecord.setOldJobState(NO_JOB_STATE);
  255. }
  256. // 设置新状态
  257. if (StringUtils.isNotEmpty(newJobState)) {
  258. insetBaseTeacherChangeRecord.setNewJobState(dictionaryDetailMap.getOrDefault(newJobState, newJobState));
  259. } else {
  260. insetBaseTeacherChangeRecord.setNewJobState(NO_JOB_STATE);
  261. }
  262. // 插入变更记录
  263. baseTeacherChangeRecordMapper.insert(insetBaseTeacherChangeRecord);
  264. //如果在职状态改为了非在职,禁用账号,并清空海康相关信息
  265. if(!JobStateEnum.isBeOnTheJobByCode(oldJobState)){
  266. disabledUser(dto.getId());
  267. }
  268. }
  269. XjrUser xjrUser = BeanUtil.toBean(dto, XjrUser.class);
  270. teacherbaseManagerXjrUserMapper.updateById(xjrUser);
  271. //先删除再新增
  272. userDeptRelationService.remove(Wrappers.<UserDeptRelation>query().lambda().eq(UserDeptRelation::getUserId, xjrUser.getId()));
  273. List<UserDeptRelation> userDeptRelationList = new ArrayList<>();
  274. if (StrUtil.isNotBlank(dto.getDepartmentIds())) {
  275. String allDeptIdStr = StrUtil.join(StringPool.COMMA, dto.getDepartmentIds());
  276. List<Long> departmentIds = Arrays.stream(allDeptIdStr.split(StringPool.COMMA)).map(Convert::toLong).collect(Collectors.toList());
  277. if (CollectionUtil.isNotEmpty(departmentIds)) {
  278. for (Long deptId : departmentIds) {
  279. //将用户所选部门保存到关联表中
  280. UserDeptRelation userDeptRelation = new UserDeptRelation();
  281. userDeptRelation.setUserId(xjrUser.getId());
  282. userDeptRelation.setDeptId(deptId);
  283. userDeptRelationList.add(userDeptRelation);
  284. }
  285. }
  286. userDeptRelationService.saveBatch(userDeptRelationList);
  287. }
  288. userPostRelationService.remove(Wrappers.<UserPostRelation>query().lambda().eq(UserPostRelation::getUserId, xjrUser.getId()));
  289. List<UserPostRelation> userPostRelationList = new ArrayList<>();
  290. if (StrUtil.isNotBlank(dto.getPostIds())) {
  291. String allPostIdStr = StrUtil.join(StringPool.COMMA, dto.getPostIds());
  292. List<Long> postIds = Arrays.stream(allPostIdStr.split(StringPool.COMMA)).map(Convert::toLong).collect(Collectors.toList());
  293. if (CollectionUtil.isNotEmpty(postIds)) {
  294. for (Long postId : postIds) {
  295. //将用户所选岗位保存到关联表中
  296. UserPostRelation userPostRelation = new UserPostRelation();
  297. userPostRelation.setUserId(xjrUser.getId());
  298. userPostRelation.setPostId(postId);
  299. userPostRelationList.add(userPostRelation);
  300. }
  301. }
  302. userPostRelationService.saveBatch(userPostRelationList);
  303. }
  304. //********************************* BaseTeacher 增删改 开始 *******************************************/
  305. {
  306. // 查出所有子级的id
  307. List<BaseTeacher> baseTeacherList = teacherbaseManagerBaseTeacherMapper.selectList(Wrappers.lambdaQuery(BaseTeacher.class).eq(BaseTeacher::getUserId, xjrUser.getId()).select(BaseTeacher::getId));
  308. List<Long> baseTeacherIds = baseTeacherList.stream().map(BaseTeacher::getId).collect(Collectors.toList());
  309. //原有子表单 没有被删除的主键
  310. List<Long> baseTeacherOldIds = xjrUser.getBaseTeacherList().stream().map(BaseTeacher::getId).filter(Objects::nonNull).collect(Collectors.toList());
  311. //找到需要删除的id
  312. List<Long> baseTeacherRemoveIds = baseTeacherIds.stream().filter(item -> !baseTeacherOldIds.contains(item)).collect(Collectors.toList());
  313. for (BaseTeacher baseTeacher : xjrUser.getBaseTeacherList()) {
  314. if (!StrUtil.isNotBlank(baseTeacher.getJobState())) {
  315. baseTeacher.setIsNormal(1);
  316. } else {
  317. DictionaryDetail dictionaryDetail = dictionarydetailService.getOne(Wrappers.<DictionaryDetail>query()
  318. .lambda()
  319. .eq(DictionaryDetail::getCode, baseTeacher.getJobState())
  320. .inSql(DictionaryDetail::getItemId, "SELECT id from xjr_dictionary_item where code='job_state'")
  321. );
  322. if (dictionaryDetail != null) {
  323. if ("0".equals(dictionaryDetail.getExtendField1())) {
  324. baseTeacher.setIsNormal(0);
  325. } else {
  326. baseTeacher.setIsNormal(1);
  327. }
  328. }
  329. }
  330. //如果不等于空则修改
  331. if (baseTeacher.getId() != null) {
  332. teacherbaseManagerBaseTeacherMapper.updateById(baseTeacher);
  333. }
  334. //如果等于空 则新增
  335. else {
  336. //已经不存在的id 删除
  337. baseTeacher.setUserId(xjrUser.getId());
  338. teacherbaseManagerBaseTeacherMapper.insert(baseTeacher);
  339. }
  340. }
  341. //已经不存在的id 删除
  342. if (baseTeacherRemoveIds.size() > 0) {
  343. teacherbaseManagerBaseTeacherMapper.deleteBatchIds(baseTeacherRemoveIds);
  344. }
  345. }
  346. //********************************* BaseTeacher 增删改 结束 *******************************************/
  347. //********************************* BaseTeacherContact 增删改 开始 *******************************************/
  348. {
  349. // 查出所有子级的id
  350. List<BaseTeacherContact> baseTeacherContactList = teacherbaseManagerBaseTeacherContactMapper.selectList(Wrappers.lambdaQuery(BaseTeacherContact.class).eq(BaseTeacherContact::getUserId, xjrUser.getId()).select(BaseTeacherContact::getId));
  351. List<Long> baseTeacherContactIds = baseTeacherContactList.stream().map(BaseTeacherContact::getId).collect(Collectors.toList());
  352. //原有子表单 没有被删除的主键
  353. List<Long> baseTeacherContactOldIds = xjrUser.getBaseTeacherContactList().stream().map(BaseTeacherContact::getId).filter(Objects::nonNull).collect(Collectors.toList());
  354. //找到需要删除的id
  355. List<Long> baseTeacherContactRemoveIds = baseTeacherContactIds.stream().filter(item -> !baseTeacherContactOldIds.contains(item)).collect(Collectors.toList());
  356. for (BaseTeacherContact baseTeacherContact : xjrUser.getBaseTeacherContactList()) {
  357. //如果不等于空则修改
  358. if (baseTeacherContact.getId() != null) {
  359. teacherbaseManagerBaseTeacherContactMapper.updateById(baseTeacherContact);
  360. }
  361. //如果等于空 则新增
  362. else {
  363. //已经不存在的id 删除
  364. baseTeacherContact.setUserId(xjrUser.getId());
  365. teacherbaseManagerBaseTeacherContactMapper.insert(baseTeacherContact);
  366. }
  367. }
  368. //已经不存在的id 删除
  369. if (baseTeacherContactRemoveIds.size() > 0) {
  370. teacherbaseManagerBaseTeacherContactMapper.deleteBatchIds(baseTeacherContactRemoveIds);
  371. }
  372. }
  373. //********************************* BaseTeacherContact 增删改 结束 *******************************************/
  374. //********************************* BaseTeacherEducation 增删改 开始 *******************************************/
  375. {
  376. // 查出所有子级的id
  377. List<BaseTeacherEducation> baseTeacherEducationList = teacherbaseManagerBaseTeacherEducationMapper.selectList(Wrappers.lambdaQuery(BaseTeacherEducation.class).eq(BaseTeacherEducation::getUserId, xjrUser.getId()).select(BaseTeacherEducation::getId));
  378. List<Long> baseTeacherEducationIds = baseTeacherEducationList.stream().map(BaseTeacherEducation::getId).collect(Collectors.toList());
  379. //原有子表单 没有被删除的主键
  380. List<Long> baseTeacherEducationOldIds = xjrUser.getBaseTeacherEducationList().stream().map(BaseTeacherEducation::getId).filter(Objects::nonNull).collect(Collectors.toList());
  381. //找到需要删除的id
  382. List<Long> baseTeacherEducationRemoveIds = baseTeacherEducationIds.stream().filter(item -> !baseTeacherEducationOldIds.contains(item)).collect(Collectors.toList());
  383. for (BaseTeacherEducation baseTeacherEducation : xjrUser.getBaseTeacherEducationList()) {
  384. //如果不等于空则修改
  385. if (baseTeacherEducation.getId() != null) {
  386. teacherbaseManagerBaseTeacherEducationMapper.updateById(baseTeacherEducation);
  387. }
  388. //如果等于空 则新增
  389. else {
  390. //已经不存在的id 删除
  391. baseTeacherEducation.setUserId(xjrUser.getId());
  392. teacherbaseManagerBaseTeacherEducationMapper.insert(baseTeacherEducation);
  393. }
  394. }
  395. //已经不存在的id 删除
  396. if (baseTeacherEducationRemoveIds.size() > 0) {
  397. teacherbaseManagerBaseTeacherEducationMapper.deleteBatchIds(baseTeacherEducationRemoveIds);
  398. }
  399. }
  400. //********************************* BaseTeacherEducation 增删改 结束 *******************************************/
  401. //********************************* BaseTeacherEmploy 增删改 开始 *******************************************/
  402. {
  403. // 查出所有子级的id
  404. List<BaseTeacherEmploy> baseTeacherEmployList = teacherbaseManagerBaseTeacherEmployMapper.selectList(Wrappers.lambdaQuery(BaseTeacherEmploy.class).eq(BaseTeacherEmploy::getUserId, xjrUser.getId()).select(BaseTeacherEmploy::getId));
  405. List<Long> baseTeacherEmployIds = baseTeacherEmployList.stream().map(BaseTeacherEmploy::getId).collect(Collectors.toList());
  406. //原有子表单 没有被删除的主键
  407. List<Long> baseTeacherEmployOldIds = xjrUser.getBaseTeacherEmployList().stream().map(BaseTeacherEmploy::getId).filter(Objects::nonNull).collect(Collectors.toList());
  408. //找到需要删除的id
  409. List<Long> baseTeacherEmployRemoveIds = baseTeacherEmployIds.stream().filter(item -> !baseTeacherEmployOldIds.contains(item)).collect(Collectors.toList());
  410. for (BaseTeacherEmploy baseTeacherEmploy : xjrUser.getBaseTeacherEmployList()) {
  411. //如果不等于空则修改
  412. if (baseTeacherEmploy.getId() != null) {
  413. teacherbaseManagerBaseTeacherEmployMapper.updateById(baseTeacherEmploy);
  414. }
  415. //如果等于空 则新增
  416. else {
  417. //已经不存在的id 删除
  418. baseTeacherEmploy.setUserId(xjrUser.getId());
  419. teacherbaseManagerBaseTeacherEmployMapper.insert(baseTeacherEmploy);
  420. }
  421. }
  422. //已经不存在的id 删除
  423. if (baseTeacherEmployRemoveIds.size() > 0) {
  424. teacherbaseManagerBaseTeacherEmployMapper.deleteBatchIds(baseTeacherEmployRemoveIds);
  425. }
  426. }
  427. //********************************* BaseTeacherEmploy 增删改 结束 *******************************************/
  428. //********************************* BaseTeacherFamily 增删改 开始 *******************************************/
  429. {
  430. // 查出所有子级的id
  431. List<BaseTeacherFamily> baseTeacherFamilyList = teacherbaseManagerBaseTeacherFamilyMapper.selectList(Wrappers.lambdaQuery(BaseTeacherFamily.class).eq(BaseTeacherFamily::getUserId, xjrUser.getId()).select(BaseTeacherFamily::getId));
  432. List<Long> baseTeacherFamilyIds = baseTeacherFamilyList.stream().map(BaseTeacherFamily::getId).collect(Collectors.toList());
  433. //原有子表单 没有被删除的主键
  434. List<Long> baseTeacherFamilyOldIds = xjrUser.getBaseTeacherFamilyList().stream().map(BaseTeacherFamily::getId).filter(Objects::nonNull).collect(Collectors.toList());
  435. //找到需要删除的id
  436. List<Long> baseTeacherFamilyRemoveIds = baseTeacherFamilyIds.stream().filter(item -> !baseTeacherFamilyOldIds.contains(item)).collect(Collectors.toList());
  437. for (BaseTeacherFamily baseTeacherFamily : xjrUser.getBaseTeacherFamilyList()) {
  438. //如果不等于空则修改
  439. if (baseTeacherFamily.getId() != null) {
  440. teacherbaseManagerBaseTeacherFamilyMapper.updateById(baseTeacherFamily);
  441. }
  442. //如果等于空 则新增
  443. else {
  444. //已经不存在的id 删除
  445. baseTeacherFamily.setUserId(xjrUser.getId());
  446. teacherbaseManagerBaseTeacherFamilyMapper.insert(baseTeacherFamily);
  447. }
  448. }
  449. //已经不存在的id 删除
  450. if (baseTeacherFamilyRemoveIds.size() > 0) {
  451. teacherbaseManagerBaseTeacherFamilyMapper.deleteBatchIds(baseTeacherFamilyRemoveIds);
  452. }
  453. }
  454. //********************************* BaseTeacherFamily 增删改 结束 *******************************************/
  455. //********************************* BaseTeacherFamilyMember 增删改 开始 *******************************************/
  456. {
  457. // 查出所有子级的id
  458. List<BaseTeacherFamilyMember> baseTeacherFamilyMemberList = teacherbaseManagerBaseTeacherFamilyMemberMapper.selectList(Wrappers.lambdaQuery(BaseTeacherFamilyMember.class).eq(BaseTeacherFamilyMember::getUserId, xjrUser.getId()).select(BaseTeacherFamilyMember::getId));
  459. List<Long> baseTeacherFamilyMemberIds = baseTeacherFamilyMemberList.stream().map(BaseTeacherFamilyMember::getId).collect(Collectors.toList());
  460. //原有子表单 没有被删除的主键
  461. List<Long> baseTeacherFamilyMemberOldIds = xjrUser.getBaseTeacherFamilyMemberList().stream().map(BaseTeacherFamilyMember::getId).filter(Objects::nonNull).collect(Collectors.toList());
  462. //找到需要删除的id
  463. List<Long> baseTeacherFamilyMemberRemoveIds = baseTeacherFamilyMemberIds.stream().filter(item -> !baseTeacherFamilyMemberOldIds.contains(item)).collect(Collectors.toList());
  464. for (BaseTeacherFamilyMember baseTeacherFamilyMember : xjrUser.getBaseTeacherFamilyMemberList()) {
  465. //如果不等于空则修改
  466. if (baseTeacherFamilyMember.getId() != null) {
  467. teacherbaseManagerBaseTeacherFamilyMemberMapper.updateById(baseTeacherFamilyMember);
  468. }
  469. //如果等于空 则新增
  470. else {
  471. //已经不存在的id 删除
  472. baseTeacherFamilyMember.setUserId(xjrUser.getId());
  473. teacherbaseManagerBaseTeacherFamilyMemberMapper.insert(baseTeacherFamilyMember);
  474. }
  475. }
  476. //已经不存在的id 删除
  477. if (baseTeacherFamilyMemberRemoveIds.size() > 0) {
  478. teacherbaseManagerBaseTeacherFamilyMemberMapper.deleteBatchIds(baseTeacherFamilyMemberRemoveIds);
  479. }
  480. }
  481. //********************************* BaseTeacherFamilyMember 增删改 结束 *******************************************/
  482. //********************************* BaseTeacherRegular 增删改 开始 *******************************************/
  483. {
  484. // 查出所有子级的id
  485. List<BaseTeacherRegular> baseTeacherRegularList = teacherbaseManagerBaseTeacherRegularMapper.selectList(Wrappers.lambdaQuery(BaseTeacherRegular.class).eq(BaseTeacherRegular::getUserId, xjrUser.getId()).select(BaseTeacherRegular::getId));
  486. List<Long> baseTeacherRegularIds = baseTeacherRegularList.stream().map(BaseTeacherRegular::getId).collect(Collectors.toList());
  487. //原有子表单 没有被删除的主键
  488. List<Long> baseTeacherRegularOldIds = xjrUser.getBaseTeacherRegularList().stream().map(BaseTeacherRegular::getId).filter(Objects::nonNull).collect(Collectors.toList());
  489. //找到需要删除的id
  490. List<Long> baseTeacherRegularRemoveIds = baseTeacherRegularIds.stream().filter(item -> !baseTeacherRegularOldIds.contains(item)).collect(Collectors.toList());
  491. for (BaseTeacherRegular baseTeacherRegular : xjrUser.getBaseTeacherRegularList()) {
  492. //如果不等于空则修改
  493. if (baseTeacherRegular.getId() != null) {
  494. teacherbaseManagerBaseTeacherRegularMapper.updateById(baseTeacherRegular);
  495. }
  496. //如果等于空 则新增
  497. else {
  498. //已经不存在的id 删除
  499. baseTeacherRegular.setUserId(xjrUser.getId());
  500. teacherbaseManagerBaseTeacherRegularMapper.insert(baseTeacherRegular);
  501. }
  502. }
  503. //已经不存在的id 删除
  504. if (baseTeacherRegularRemoveIds.size() > 0) {
  505. teacherbaseManagerBaseTeacherRegularMapper.deleteBatchIds(baseTeacherRegularRemoveIds);
  506. }
  507. }
  508. //********************************* BaseTeacherRegular 增删改 结束 *******************************************/
  509. return true;
  510. }
  511. @Override
  512. @Transactional(rollbackFor = Exception.class)
  513. public Boolean delete(List<Long> ids) {
  514. teacherbaseManagerXjrUserMapper.deleteBatchIds(ids);
  515. teacherbaseManagerBaseTeacherMapper.delete(Wrappers.lambdaQuery(BaseTeacher.class).in(BaseTeacher::getUserId, ids));
  516. teacherbaseManagerBaseTeacherContactMapper.delete(Wrappers.lambdaQuery(BaseTeacherContact.class).in(BaseTeacherContact::getUserId, ids));
  517. teacherbaseManagerBaseTeacherEducationMapper.delete(Wrappers.lambdaQuery(BaseTeacherEducation.class).in(BaseTeacherEducation::getUserId, ids));
  518. teacherbaseManagerBaseTeacherEmployMapper.delete(Wrappers.lambdaQuery(BaseTeacherEmploy.class).in(BaseTeacherEmploy::getUserId, ids));
  519. teacherbaseManagerBaseTeacherFamilyMapper.delete(Wrappers.lambdaQuery(BaseTeacherFamily.class).in(BaseTeacherFamily::getUserId, ids));
  520. teacherbaseManagerBaseTeacherFamilyMemberMapper.delete(Wrappers.lambdaQuery(BaseTeacherFamilyMember.class).in(BaseTeacherFamilyMember::getUserId, ids));
  521. teacherbaseManagerBaseTeacherRegularMapper.delete(Wrappers.lambdaQuery(BaseTeacherRegular.class).in(BaseTeacherRegular::getUserId, ids));
  522. return true;
  523. }
  524. /**
  525. * 导入,根据第一个工号查询是否有相关信息
  526. * 1、批量新增或者修改xjr_user、base_teacher、xjr_user_dept_relation、xjr_user_post_relation
  527. * 2、更新redis里面的缓存
  528. *
  529. * @param excelDataList 导入的数据
  530. * @return 成功
  531. */
  532. @Override
  533. @Transactional(rollbackFor = Exception.class)
  534. public Boolean importData(List<Map<Integer, Object>> excelDataList) {
  535. List<User> userList = userService.list(
  536. new MPJLambdaWrapper<User>()
  537. .select(User::getId)
  538. .select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty()))
  539. .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
  540. );
  541. Map<String, User> userMap = userList.stream().collect(Collectors.toMap(User::getUserName, x -> x));
  542. List<BaseTeacher> teacherList = teacherbaseManagerBaseTeacherMapper.selectJoinList(BaseTeacher.class,
  543. new MPJLambdaWrapper<BaseTeacher>()
  544. .select(BaseTeacher::getId)
  545. .select(BaseTeacher.class, x -> VoToColumnUtil.fieldsToColumns(BaseTeacher.class).contains(x.getProperty()))
  546. .innerJoin(User.class, User::getId, BaseTeacher::getUserId)
  547. );
  548. Map<Long, BaseTeacher> teacherMap = teacherList.stream().collect(Collectors.toMap(BaseTeacher::getUserId, x -> x));
  549. List<Long> itemList = new ArrayList<>();
  550. itemList.add(2023000000000000016L);
  551. itemList.add(2023000000000000006L);
  552. List<DictionaryDetail> dictionaryList = dictionaryService.list(
  553. new QueryWrapper<DictionaryDetail>().lambda()
  554. .in(DictionaryDetail::getItemId, itemList)
  555. .eq(DictionaryDetail::getDeleteMark, DeleteMark.NODELETE.getCode())
  556. );
  557. Map<String, String> dictionaryMap = dictionaryList.stream().collect(Collectors.toMap(DictionaryDetail::getName, DictionaryDetail::getCode));
  558. List<Department> departmentList = departmentService.list(
  559. new QueryWrapper<Department>().lambda()
  560. .eq(Department::getDeleteMark, DeleteMark.NODELETE.getCode())
  561. );
  562. Map<String, Long> departmentMap = departmentList.stream().collect(Collectors.toMap(Department::getName, Department::getId));
  563. List<Post> postList = postService.list(
  564. new QueryWrapper<Post>().lambda()
  565. .eq(Post::getDeleteMark, DeleteMark.NODELETE.getCode())
  566. );
  567. Map<String, Long> postMap = postList.stream().collect(Collectors.toMap(Post::getName, Post::getId));
  568. List<UserPostRelation> postRelations = userPostRelationService.list(
  569. new MPJLambdaWrapper<UserPostRelation>()
  570. .select(UserPostRelation::getId)
  571. .select(UserPostRelation.class, x -> VoToColumnUtil.fieldsToColumns(UserPostRelation.class).contains(x.getProperty()))
  572. .innerJoin(User.class, User::getId, UserPostRelation::getUserId)
  573. .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
  574. );
  575. Map<Long, List<Long>> userPostMap = postRelations.stream()
  576. .collect(Collectors.groupingBy(UserPostRelation::getUserId, Collectors.mapping(UserPostRelation::getPostId, Collectors.toList())));
  577. List<UserDeptRelation> deptRelations = userDeptRelationMapper.selectList(
  578. new MPJLambdaWrapper<UserDeptRelation>()
  579. .select(UserDeptRelation::getId)
  580. .select(UserDeptRelation.class, x -> VoToColumnUtil.fieldsToColumns(UserDeptRelation.class).contains(x.getProperty()))
  581. .innerJoin(User.class, User::getId, UserDeptRelation::getUserId)
  582. .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
  583. );
  584. Map<Long, List<Long>> userDeptMap = postRelations.stream()
  585. .collect(Collectors.groupingBy(UserPostRelation::getUserId, Collectors.mapping(UserPostRelation::getPostId, Collectors.toList())));
  586. List<User> updateUserList = new ArrayList<>();
  587. List<BaseTeacher> updateTeacherList = new ArrayList<>();
  588. List<UserDeptRelation> updateDeptList = new ArrayList<>();
  589. List<UserPostRelation> updatePostList = new ArrayList<>();
  590. for (Map<Integer, Object> rowData : excelDataList) {
  591. String jobCode = rowData.get(0).toString();
  592. if (userMap.containsKey(jobCode)) {
  593. User user = userMap.get(jobCode);
  594. user.setName(rowData.get(1).toString());
  595. user.setGender(GenderDictionaryEnum.getCode(rowData.get(2).toString()));
  596. user.setCredentialType(dictionaryMap.get(rowData.get(3).toString()));
  597. user.setCredentialNumber(rowData.get(4).toString());
  598. user.setMobile(rowData.get(5).toString());
  599. updateUserList.add(user);
  600. BaseTeacher teacher = teacherMap.get(user.getId());
  601. teacher.setEmployType(dictionaryMap.get(rowData.get(6).toString()));
  602. updateTeacherList.add(teacher);
  603. List<Long> deptIds = userDeptMap.get(user.getId());
  604. if (deptIds == null || !deptIds.contains(departmentMap.get(rowData.get(7).toString()))) {
  605. UserDeptRelation userDeptRelation = new UserDeptRelation();
  606. userDeptRelation.setDeptId(departmentMap.get(rowData.get(7).toString()));
  607. userDeptRelation.setUserId(user.getId());
  608. updateDeptList.add(userDeptRelation);
  609. }
  610. List<Long> postIds = userPostMap.get(user.getId());
  611. if (postIds == null || !postIds.contains(postMap.get(rowData.get(8).toString()))) {
  612. UserPostRelation postRelation = new UserPostRelation();
  613. postRelation.setPostId(postMap.get(rowData.get(8).toString()));
  614. postRelation.setUserId(user.getId());
  615. updatePostList.add(postRelation);
  616. }
  617. continue;
  618. }
  619. User user = new User();
  620. user.setUserName(rowData.get(0).toString());
  621. user.setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
  622. user.setIsChangePassword(1);
  623. user.setName(rowData.get(1).toString());
  624. user.setGender(GenderDictionaryEnum.getCode(rowData.get(2).toString()));
  625. user.setCredentialType(dictionaryMap.get(rowData.get(3).toString()));
  626. user.setCredentialNumber(rowData.get(4).toString());
  627. user.setMobile(rowData.get(5).toString());
  628. user.setCreateDate(LocalDateTime.now());
  629. userService.save(user);
  630. BaseTeacher teacher = new BaseTeacher();
  631. teacher.setEmployType(dictionaryMap.get(rowData.get(6).toString()));
  632. teacher.setUserId(user.getId());
  633. teacher.setCreateDate(LocalDateTime.now());
  634. teacherbaseManagerBaseTeacherMapper.insert(teacher);
  635. UserDeptRelation userDeptRelation = new UserDeptRelation();
  636. userDeptRelation.setDeptId(departmentMap.get(rowData.get(7).toString()));
  637. userDeptRelation.setUserId(user.getId());
  638. userDeptRelationMapper.insert(userDeptRelation);
  639. UserPostRelation postRelation = new UserPostRelation();
  640. postRelation.setPostId(postMap.get(rowData.get(8).toString()));
  641. postRelation.setUserId(user.getId());
  642. userPostRelationService.save(postRelation);
  643. UserRoleRelation roleRelation = new UserRoleRelation();
  644. roleRelation.setUserId(user.getId());
  645. roleRelation.setRoleId(RoleEnum.TEACHER.getCode());
  646. userRoleRelationMapper.insert(roleRelation);
  647. }
  648. if (!updateUserList.isEmpty()) {
  649. userService.updateBatchById(updateUserList);
  650. }
  651. if (!updateDeptList.isEmpty()) {
  652. for (UserDeptRelation relation : updateDeptList) {
  653. userDeptRelationMapper.insert(relation);
  654. }
  655. }
  656. if (!updatePostList.isEmpty()) {
  657. userPostRelationService.saveBatch(updatePostList);
  658. }
  659. if (!updateTeacherList.isEmpty()) {
  660. for (BaseTeacher teacher : updateTeacherList) {
  661. teacherbaseManagerBaseTeacherMapper.updateById(teacher);
  662. }
  663. }
  664. List<User> list = userService.list();
  665. redisUtil.set(GlobalConstant.USER_CACHE_KEY, list);
  666. List<UserDeptRelation> deptRelationList = userDeptRelationMapper.selectList(Wrappers.lambdaQuery(UserDeptRelation.class));
  667. redisUtil.set(GlobalConstant.USER_DEPT_RELATION_CACHE_KEY, deptRelationList);
  668. List<UserRoleRelation> userRoleRelationList = userRoleRelationMapper.selectList(Wrappers.lambdaQuery(UserRoleRelation.class));
  669. redisUtil.set(GlobalConstant.USER_ROLE_RELATION_CACHE_KEY, userRoleRelationList);
  670. List<UserPostRelation> postRelationList = userPostRelationService.list(Wrappers.lambdaQuery(UserPostRelation.class));
  671. redisUtil.set(GlobalConstant.USER_POST_RELATION_CACHE_KEY, postRelationList);
  672. return true;
  673. }
  674. @Override
  675. @Transactional(rollbackFor = Exception.class)
  676. public void changeIsNormal(String jobState, Integer isNormal) {
  677. List<BaseTeacher> baseTeacherList = teacherbaseManagerBaseTeacherMapper.selectList(Wrappers.lambdaQuery(BaseTeacher.class)
  678. .eq(BaseTeacher::getJobState, jobState));
  679. for (BaseTeacher baseTeacher : baseTeacherList) {
  680. baseTeacher.setIsNormal(isNormal);
  681. teacherbaseManagerBaseTeacherMapper.updateById(baseTeacher);
  682. }
  683. }
  684. @Override
  685. @Transactional(rollbackFor = Exception.class)
  686. public void teacherDepartDataHandle(Long formId) {
  687. WfTeacherDepart wfTextbookRecede = wfTeacherDepartMapper.selectById(formId);
  688. Date nowDate = new Date();
  689. // 根据数据id找到所在流程得状态
  690. WorkflowFormRelation workflowFormRelation = workflowFormRelationMapper.selectOne(
  691. Wrappers.lambdaQuery(WorkflowFormRelation.class)
  692. .eq(WorkflowFormRelation::getFormKeyValue, formId)
  693. );
  694. if (ObjectUtils.isNotEmpty(wfTextbookRecede)
  695. && ObjectUtils.isNotEmpty(workflowFormRelation)
  696. && HistoricProcessInstance.STATE_COMPLETED.equals(workflowFormRelation.getCurrentState())
  697. ) {
  698. XjrUser old = this.getByIdDeep(wfTextbookRecede.getApplicantUserId());
  699. if(ObjectUtils.isEmpty(old)){
  700. throw new MyException("教职工信息不存在");
  701. }
  702. // 处理在职状态
  703. // 更新教职工在职状态
  704. List<BaseTeacher> baseTeacherList = old.getBaseTeacherList();
  705. BaseTeacher updateBaseTeacher;
  706. for (BaseTeacher baseTeacher : baseTeacherList){
  707. updateBaseTeacher = new BaseTeacher();
  708. updateBaseTeacher.setId(baseTeacher.getId());
  709. updateBaseTeacher.setJobState("JOB_LZ");
  710. baseTeacherMapper.updateById(updateBaseTeacher);
  711. }
  712. // 处理变更记录
  713. // 获取字典值
  714. List<DictionaryDetail> detailList = dictionarydetailService.list(
  715. new MPJLambdaWrapper<DictionaryDetail>()
  716. .select(DictionaryDetail::getId)
  717. .select(DictionaryDetail.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryDetail.class).contains(x.getProperty()))
  718. .leftJoin(DictionaryItem.class, DictionaryItem::getId, DictionaryDetail::getItemId)
  719. .eq(DictionaryItem::getCode, "job_state")
  720. );
  721. Map<String, String> dictionaryDetailMap = detailList.stream()
  722. .collect(Collectors.toMap(DictionaryDetail::getCode, DictionaryDetail::getName));
  723. // 定义常量
  724. final String NO_JOB_STATE = "无在职状态";
  725. // 获取新旧在职状态
  726. String oldJobState = null;
  727. String newJobState = null;
  728. if (CollectionUtils.isNotEmpty(old.getBaseTeacherList()) && StringUtils.isNotEmpty(old.getBaseTeacherList().get(0).getJobState())) {
  729. oldJobState = old.getBaseTeacherList().get(0).getJobState();
  730. }
  731. newJobState = "JOB_LZ";
  732. // 只有在职状态被修改时,才触发 insert
  733. if (!Objects.equals(oldJobState, newJobState)) {
  734. BaseTeacherChangeRecord insetBaseTeacherChangeRecord = new BaseTeacherChangeRecord();
  735. insetBaseTeacherChangeRecord.setCreateUserId(wfTextbookRecede.getApplicantUserId());
  736. insetBaseTeacherChangeRecord.setCreateDate(nowDate);
  737. insetBaseTeacherChangeRecord.setUserId(wfTextbookRecede.getApplicantUserId());
  738. insetBaseTeacherChangeRecord.setChangeType(TeaChangeTypeEnum.TCT0001.getCode());
  739. // 设置旧状态
  740. if (StringUtils.isNotEmpty(oldJobState)) {
  741. insetBaseTeacherChangeRecord.setOldJobState(dictionaryDetailMap.getOrDefault(oldJobState, oldJobState));
  742. } else {
  743. insetBaseTeacherChangeRecord.setOldJobState(NO_JOB_STATE);
  744. }
  745. // 设置新状态
  746. if (StringUtils.isNotEmpty(newJobState)) {
  747. insetBaseTeacherChangeRecord.setNewJobState(dictionaryDetailMap.getOrDefault(newJobState, newJobState));
  748. } else {
  749. insetBaseTeacherChangeRecord.setNewJobState(NO_JOB_STATE);
  750. }
  751. // 插入变更记录
  752. baseTeacherChangeRecordMapper.insert(insetBaseTeacherChangeRecord);
  753. }
  754. }
  755. }
  756. @Override
  757. @Transactional(rollbackFor = Exception.class)
  758. public void disabledUser(Long userId) {
  759. XjrUser xjrUser = this.getById(userId);
  760. xjrUser.setDeleteMark(DeleteMark.DELETED.getCode());
  761. xjrUser.setEnabledMark(EnabledMark.DISABLED.getCode());
  762. this.updateById(xjrUser);
  763. //清除海康人脸
  764. teacherFaceProcessService.removeByUserId(userId);
  765. DataUtil dataUtil = new DataUtil();
  766. List<Long> userIds = new ArrayList<>();
  767. userIds.add(userId);
  768. dataUtil.deletePerson(userIds);
  769. List<CarMessageApply> carList = carMessageApplyMapper.selectList(
  770. new QueryWrapper<CarMessageApply>().lambda()
  771. .eq(CarMessageApply::getDeleteMark, DeleteMark.NODELETE.getCode())
  772. .eq(CarMessageApply::getUserId, userId)
  773. );
  774. dataUtil.deleteCar(carList);
  775. }
  776. }