TeacherbaseManagerServiceImpl.java 54 KB

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