package com.xjrsoft.module.student.service.impl; import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.xjrsoft.common.constant.GlobalConstant; import com.xjrsoft.common.enums.DeleteMark; import com.xjrsoft.common.enums.EnabledMark; import com.xjrsoft.common.enums.GenderDictionaryEnum; import com.xjrsoft.common.enums.RoleEnum; import com.xjrsoft.common.enums.YesOrNoEnum; import com.xjrsoft.common.exception.MyException; import com.xjrsoft.common.utils.RedisUtil; import com.xjrsoft.common.utils.TreeUtil; import com.xjrsoft.config.CommonPropertiesConfig; import com.xjrsoft.module.base.entity.BaseClass; import com.xjrsoft.module.base.entity.BaseGrade; import com.xjrsoft.module.base.entity.BaseMajorSet; import com.xjrsoft.module.base.mapper.BaseClassMapper; import com.xjrsoft.module.base.mapper.BaseGradeMapper; import com.xjrsoft.module.base.mapper.BaseMajorSetMapper; import com.xjrsoft.module.base.service.IBaseClassService; import com.xjrsoft.module.base.service.IBaseGradeService; import com.xjrsoft.module.organization.entity.Department; import com.xjrsoft.module.organization.entity.User; import com.xjrsoft.module.organization.entity.UserDeptRelation; import com.xjrsoft.module.organization.entity.UserRoleRelation; import com.xjrsoft.module.organization.mapper.UserDeptRelationMapper; import com.xjrsoft.module.organization.mapper.UserRoleRelationMapper; import com.xjrsoft.module.organization.service.IDepartmentService; import com.xjrsoft.module.organization.service.IUserDeptRelationService; import com.xjrsoft.module.organization.service.IUserService; import com.xjrsoft.module.student.dto.AddBaseStudentUserDto; import com.xjrsoft.module.student.dto.BaseStudentUserPageDto; import com.xjrsoft.module.student.dto.MajorGradeClassDto; import com.xjrsoft.module.student.dto.UpdateBaseStudentUserDto; import com.xjrsoft.module.student.entity.BaseClassMajorSet; import com.xjrsoft.module.student.entity.BaseMajor; import com.xjrsoft.module.student.entity.BaseStudent; import com.xjrsoft.module.student.entity.BaseStudentContact; import com.xjrsoft.module.student.entity.BaseStudentFamily; import com.xjrsoft.module.student.entity.BaseStudentFamilyMember; import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll; import com.xjrsoft.module.student.entity.BaseStudentSubsidize; import com.xjrsoft.module.student.entity.BaseStudentUser; import com.xjrsoft.module.student.entity.StudentChangeRecord; import com.xjrsoft.module.student.mapper.BaseStudentFamilyMapper; import com.xjrsoft.module.student.mapper.BaseStudentFamilyMemberMapper; import com.xjrsoft.module.student.mapper.BaseStudentMapper; import com.xjrsoft.module.student.mapper.BaseStudentUserMapper; import com.xjrsoft.module.student.service.IBaseMajorService; import com.xjrsoft.module.student.service.IBaseStudentContactService; import com.xjrsoft.module.student.service.IBaseStudentFamilyService; import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService; import com.xjrsoft.module.student.service.IBaseStudentService; import com.xjrsoft.module.student.service.IBaseStudentSubsidizeService; import com.xjrsoft.module.student.service.IStudentChangeRecordService; import com.xjrsoft.module.student.service.IStudentManagerService; import com.xjrsoft.module.student.vo.BaseClassMajorSetVo; import com.xjrsoft.module.student.vo.BaseDepMajorGradeClassStudenTreeVo; import com.xjrsoft.module.student.vo.BaseStudentClassVo; import com.xjrsoft.module.student.vo.BaseStudentUserPageVo; import com.xjrsoft.module.student.vo.PersonalPortraitPersonalInfoVo; import com.xjrsoft.module.student.vo.StudentPersonalInfoVo; import com.xjrsoft.module.system.entity.Area; import com.xjrsoft.module.system.entity.DictionaryDetail; import com.xjrsoft.module.system.entity.DictionaryItem; import com.xjrsoft.module.system.mapper.DictionarydetailMapper; import com.xjrsoft.module.system.mapper.DictionaryitemMapper; import com.xjrsoft.module.system.service.IAreaService; import com.xjrsoft.module.system.service.IDictionarydetailService; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.Arrays; import java.util.Base64; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @Service @AllArgsConstructor public class StudentManagerServiceImpl extends MPJBaseServiceImpl implements IStudentManagerService { private final com.xjrsoft.module.student.mapper.BaseStudentUserMapper studentbaseManagerBaseStudentUserMapper; private final IBaseStudentService baseStudentService; private final BaseClassMapper baseClassMapper; private final IBaseStudentContactService studentContactService; private final BaseStudentFamilyMapper familyMapper; private final BaseStudentFamilyMemberMapper familyMemberMapper; private final UserRoleRelationMapper userRoleRelationMapper; private final DictionarydetailMapper dictionarydetailMapper; private final IAreaService areaService; private final BaseGradeMapper baseGradeMapper; private final BaseMajorSetMapper baseMajorSetMapper; private final DictionaryitemMapper dictionaryitemMapper; private final IBaseStudentSchoolRollService schoolRollService; private final IBaseStudentSubsidizeService subsidizeService; private final IBaseStudentFamilyService familyService; private final BaseStudentMapper baseStudentMapper; private final IUserDeptRelationService userDeptRelationService; private final RedisUtil redisUtil; private final UserDeptRelationMapper userDeptRelationMapper; private final IUserService userService; private final CommonPropertiesConfig propertiesConfig; private final IDepartmentService baseDeparmentService; private final IBaseMajorService baseMajorService; private final IBaseClassService baseClassService; private final IBaseGradeService baseGradeService; private IDictionarydetailService dictionarydetailService; private final IStudentChangeRecordService recordService; @Override @Transactional(rollbackFor = Exception.class) public Long add(AddBaseStudentUserDto dto){ BaseStudentUser baseStudentUser = BeanUtil.toBean(dto, BaseStudentUser.class); baseStudentUser.setCode(dto.getUserName()); // 用户身份证后6位作为默认密码 baseStudentUser.setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt())); studentbaseManagerBaseStudentUserMapper.insert(baseStudentUser); for (BaseStudent baseStudent : baseStudentUser.getBaseStudentList()) { baseStudent.setUserId(baseStudentUser.getId()); BaseStudentSchoolRoll baseStudentSchoolRoll=baseStudentUser.getBaseStudentSchoolRollList().get(0); if (!StrUtil.isNotBlank(baseStudentSchoolRoll.getArchivesStatus())) { baseStudent.setIsNormal(1); } else { DictionaryDetail dictionaryDetail = dictionarydetailService.getOne(Wrappers.query() .lambda() .eq(DictionaryDetail::getCode, baseStudentSchoolRoll.getArchivesStatus()) .inSql(DictionaryDetail::getItemId,"SELECT id from xjr_dictionary_item where code='archives_status'")); if (dictionaryDetail != null) { if ("0".equals(dictionaryDetail.getExtendField1())) { baseStudent.setIsNormal(0); } else { baseStudent.setIsNormal(1); } } } baseStudentService.save(baseStudent); } for (BaseStudentContact baseStudentContact : baseStudentUser.getBaseStudentContactList()) { baseStudentContact.setUserId(baseStudentUser.getId()); studentContactService.save(baseStudentContact); } for (BaseStudentFamily BaseStudentFamily : baseStudentUser.getBaseStudentFamilyList()) { BaseStudentFamily.setUserId(baseStudentUser.getId()); familyMapper.insert(BaseStudentFamily); } for (BaseStudentFamilyMember BaseStudentFamilyMember : baseStudentUser.getBaseStudentFamilyMemberList()) { BaseStudentFamilyMember.setUserId(baseStudentUser.getId()); familyMemberMapper.insert(BaseStudentFamilyMember); } for (BaseStudentSchoolRoll baseStudentSchoolRoll : baseStudentUser.getBaseStudentSchoolRollList()) { baseStudentSchoolRoll.setUserId(baseStudentUser.getId()); schoolRollService.save(baseStudentSchoolRoll); } for (BaseStudentSubsidize baseStudentSubsidize : baseStudentUser.getBaseStudentSubsidizeList()) { baseStudentSubsidize.setUserId(baseStudentUser.getId()); subsidizeService.save(baseStudentSubsidize); } List userDeptRelationList = new ArrayList<>(); if (StrUtil.isNotBlank(dto.getDepartmentIds())) { String allDeptIdStr = StrUtil.join(StringPool.COMMA, dto.getDepartmentIds()); List departmentIds = Arrays.stream(allDeptIdStr.split(StringPool.COMMA)).map(Convert::toLong).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(departmentIds)) { for (Long deptId : departmentIds) { //将用户所选部门保存到关联表中 UserDeptRelation userDeptRelation = new UserDeptRelation(); userDeptRelation.setUserId(baseStudentUser.getId()); userDeptRelation.setDeptId(deptId); userDeptRelationList.add(userDeptRelation); } } userDeptRelationService.saveBatch(userDeptRelationList); } // 添加角色 UserRoleRelation userRoleRelation = new UserRoleRelation(); userRoleRelation.setUserId(baseStudentUser.getId()); userRoleRelation.setRoleId(RoleEnum.STUDENT.getCode()); userRoleRelationMapper.insert(userRoleRelation); CompletableFuture.runAsync(() -> { List list = userService.list(); redisUtil.set(GlobalConstant.USER_CACHE_KEY, list); List deptRelationList = userDeptRelationMapper.selectList(Wrappers.lambdaQuery(UserDeptRelation.class)); redisUtil.set(GlobalConstant.USER_DEPT_RELATION_CACHE_KEY, deptRelationList); List userRoleRelationList = userRoleRelationMapper.selectList(Wrappers.lambdaQuery(UserRoleRelation.class)); redisUtil.set(GlobalConstant.USER_ROLE_RELATION_CACHE_KEY, userRoleRelationList); }); return baseStudentUser.getId(); } @Override @Transactional(rollbackFor = Exception.class) public Boolean update(UpdateBaseStudentUserDto dto){ BaseStudentUser baseStudentUser = BeanUtil.toBean(dto, BaseStudentUser.class); baseStudentUser.setCode(dto.getUserName()); studentbaseManagerBaseStudentUserMapper.updateById(baseStudentUser); //先删除再新增 userDeptRelationService.remove(Wrappers.query().lambda().eq(UserDeptRelation::getUserId, baseStudentUser.getId())); List userDeptRelationList = new ArrayList<>(); if (StrUtil.isNotBlank(dto.getDepartmentIds())) { String allDeptIdStr = StrUtil.join(StringPool.COMMA, dto.getDepartmentIds()); List departmentIds = Arrays.stream(allDeptIdStr.split(StringPool.COMMA)).map(Convert::toLong).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(departmentIds)) { for (Long deptId : departmentIds) { //将用户所选部门保存到关联表中 UserDeptRelation userDeptRelation = new UserDeptRelation(); userDeptRelation.setUserId(baseStudentUser.getId()); userDeptRelation.setDeptId(deptId); userDeptRelationList.add(userDeptRelation); } } userDeptRelationService.saveBatch(userDeptRelationList); } //********************************* BaseStudent 增删改 开始 *******************************************/ { // 查出所有子级的id List baseStudentList = baseStudentService.list(Wrappers.lambdaQuery(BaseStudent.class).eq(BaseStudent::getUserId, baseStudentUser.getId()).select(BaseStudent::getId)); List baseStudentIds = baseStudentList.stream().map(BaseStudent::getId).collect(Collectors.toList()); //原有子表单 没有被删除的主键 List baseStudentOldIds = baseStudentUser.getBaseStudentList().stream().map(BaseStudent::getId).filter(Objects::nonNull).collect(Collectors.toList()); //找到需要删除的id List baseStudentRemoveIds = baseStudentIds.stream().filter(item -> !baseStudentOldIds.contains(item)).collect(Collectors.toList()); for (BaseStudent baseStudent : baseStudentUser.getBaseStudentList()) { BaseStudentSchoolRoll baseStudentSchoolRoll=baseStudentUser.getBaseStudentSchoolRollList().get(0); if (!StrUtil.isNotBlank(baseStudentSchoolRoll.getArchivesStatus())) { baseStudent.setIsNormal(1); } else { DictionaryDetail dictionaryDetail = dictionarydetailService.getOne(Wrappers.query() .lambda() .eq(DictionaryDetail::getCode, baseStudentSchoolRoll.getArchivesStatus()) .inSql(DictionaryDetail::getItemId,"SELECT id from xjr_dictionary_item where code='archives_status'")); if (dictionaryDetail != null) { if ("0".equals(dictionaryDetail.getExtendField1())) { baseStudent.setIsNormal(0); } else { baseStudent.setIsNormal(1); } } } //如果不等于空则修改 if (baseStudent.getId() != null) { baseStudentService.updateById(baseStudent); } //如果等于空 则新增 else { //已经不存在的id 删除 baseStudent.setUserId(baseStudentUser.getId()); baseStudentService.save(baseStudent); } } //已经不存在的id 删除 if (baseStudentRemoveIds.size() > 0) { baseStudentService.removeBatchByIds(baseStudentRemoveIds); } } //********************************* BaseStudent 增删改 结束 *******************************************/ //********************************* BaseStudentContact 增删改 开始 *******************************************/ { // 查出所有子级的id List baseStudentContactList = studentContactService.list(Wrappers.lambdaQuery(BaseStudentContact.class).eq(BaseStudentContact::getUserId, baseStudentUser.getId()).select(BaseStudentContact::getId)); List baseStudentContactIds = baseStudentContactList.stream().map(BaseStudentContact::getId).collect(Collectors.toList()); //原有子表单 没有被删除的主键 List baseStudentContactOldIds = baseStudentUser.getBaseStudentContactList().stream().map(BaseStudentContact::getId).filter(Objects::nonNull).collect(Collectors.toList()); //找到需要删除的id List baseStudentContactRemoveIds = baseStudentContactIds.stream().filter(item -> !baseStudentContactOldIds.contains(item)).collect(Collectors.toList()); for (BaseStudentContact baseStudentContact : baseStudentUser.getBaseStudentContactList()) { //如果不等于空则修改 if (baseStudentContact.getId() != null) { studentContactService.updateById(baseStudentContact); } //如果等于空 则新增 else { //已经不存在的id 删除 baseStudentContact.setUserId(baseStudentUser.getId()); studentContactService.save(baseStudentContact); } } //已经不存在的id 删除 if (baseStudentContactRemoveIds.size() > 0) { studentContactService.removeBatchByIds(baseStudentContactRemoveIds); } } //********************************* BaseStudentContact 增删改 结束 *******************************************/ //********************************* BaseStudentFamily 增删改 开始 *******************************************/ { // 查出所有子级的id List BaseStudentFamilyList = familyMapper.selectList(Wrappers.lambdaQuery(BaseStudentFamily.class).eq(BaseStudentFamily::getUserId, baseStudentUser.getId()).select(BaseStudentFamily::getId)); List BaseStudentFamilyIds = BaseStudentFamilyList.stream().map(BaseStudentFamily::getId).collect(Collectors.toList()); //原有子表单 没有被删除的主键 List BaseStudentFamilyOldIds = baseStudentUser.getBaseStudentFamilyList().stream().map(BaseStudentFamily::getId).filter(Objects::nonNull).collect(Collectors.toList()); //找到需要删除的id List BaseStudentFamilyRemoveIds = BaseStudentFamilyIds.stream().filter(item -> !BaseStudentFamilyOldIds.contains(item)).collect(Collectors.toList()); for (BaseStudentFamily BaseStudentFamily : baseStudentUser.getBaseStudentFamilyList()) { //如果不等于空则修改 if (BaseStudentFamily.getId() != null) { familyMapper.updateById(BaseStudentFamily); } //如果等于空 则新增 else { //已经不存在的id 删除 BaseStudentFamily.setUserId(baseStudentUser.getId()); familyMapper.insert(BaseStudentFamily); } } //已经不存在的id 删除 if (BaseStudentFamilyRemoveIds.size() > 0) { familyMapper.deleteBatchIds(BaseStudentFamilyRemoveIds); } } //********************************* BaseStudentFamily 增删改 结束 *******************************************/ //********************************* BaseStudentFamilyMember 增删改 开始 *******************************************/ { // 查出所有子级的id List BaseStudentFamilyMemberList = familyMemberMapper.selectList(Wrappers.lambdaQuery(BaseStudentFamilyMember.class).eq(BaseStudentFamilyMember::getUserId, baseStudentUser.getId()).select(BaseStudentFamilyMember::getId)); List BaseStudentFamilyMemberIds = BaseStudentFamilyMemberList.stream().map(BaseStudentFamilyMember::getId).collect(Collectors.toList()); //原有子表单 没有被删除的主键 List BaseStudentFamilyMemberOldIds = baseStudentUser.getBaseStudentFamilyMemberList().stream().map(BaseStudentFamilyMember::getId).filter(Objects::nonNull).collect(Collectors.toList()); //找到需要删除的id List BaseStudentFamilyMemberRemoveIds = BaseStudentFamilyMemberIds.stream().filter(item -> !BaseStudentFamilyMemberOldIds.contains(item)).collect(Collectors.toList()); for (BaseStudentFamilyMember BaseStudentFamilyMember : baseStudentUser.getBaseStudentFamilyMemberList()) { //如果不等于空则修改 if (BaseStudentFamilyMember.getId() != null) { familyMemberMapper.updateById(BaseStudentFamilyMember); } //如果等于空 则新增 else { //已经不存在的id 删除 BaseStudentFamilyMember.setUserId(baseStudentUser.getId()); familyMemberMapper.insert(BaseStudentFamilyMember); } } //已经不存在的id 删除 if (BaseStudentFamilyMemberRemoveIds.size() > 0) { familyMemberMapper.deleteBatchIds(BaseStudentFamilyMemberRemoveIds); } } //********************************* BaseStudentFamilyMember 增删改 结束 *******************************************/ //********************************* StudentSchoolRoll 增删改 开始 *******************************************/ { // 查出所有子级的id List baseStudentSchoolRollList = schoolRollService.list(Wrappers.lambdaQuery(BaseStudentSchoolRoll.class).eq(BaseStudentSchoolRoll::getUserId, baseStudentUser.getId()).select(BaseStudentSchoolRoll::getId)); List baseStudentSchoolRollIds = baseStudentSchoolRollList.stream().map(BaseStudentSchoolRoll::getId).collect(Collectors.toList()); //原有子表单 没有被删除的主键 List baseStudentSchoolRollOldIds = baseStudentUser.getBaseStudentSchoolRollList().stream().map(BaseStudentSchoolRoll::getId).filter(Objects::nonNull).collect(Collectors.toList()); //找到需要删除的id List baseStudentSchoolRollRemoveIds = baseStudentSchoolRollIds.stream().filter(item -> !baseStudentSchoolRollOldIds.contains(item)).collect(Collectors.toList()); for (BaseStudentSchoolRoll baseStudentSchoolRoll : baseStudentUser.getBaseStudentSchoolRollList()) { //如果不等于空则修改 if (baseStudentSchoolRoll.getId() != null) { BaseStudentSchoolRoll beforeRoll = schoolRollService.getById(baseStudentSchoolRoll.getId()); recordService.insertDataByStudentUpdate(beforeRoll, baseStudentSchoolRoll); schoolRollService.updateById(baseStudentSchoolRoll); } //如果等于空 则新增 else { //已经不存在的id 删除 baseStudentSchoolRoll.setUserId(baseStudentUser.getId()); schoolRollService.save(baseStudentSchoolRoll); } } //已经不存在的id 删除 if (baseStudentSchoolRollRemoveIds.size() > 0) { schoolRollService.removeBatchByIds(baseStudentSchoolRollRemoveIds); } } //********************************* StudentSchoolRoll 增删改 结束 *******************************************/ //********************************* BaseStudentSubsidize 增删改 开始 *******************************************/ { // 查出所有子级的id List baseStudentSubsidizeList = subsidizeService.list(Wrappers.lambdaQuery(BaseStudentSubsidize.class).eq(BaseStudentSubsidize::getUserId, baseStudentUser.getId()).select(BaseStudentSubsidize::getId)); List baseStudentSubsidizeIds = baseStudentSubsidizeList.stream().map(BaseStudentSubsidize::getId).collect(Collectors.toList()); //原有子表单 没有被删除的主键 List baseStudentSubsidizeOldIds = baseStudentUser.getBaseStudentSubsidizeList().stream().map(BaseStudentSubsidize::getId).filter(Objects::nonNull).collect(Collectors.toList()); //找到需要删除的id List baseStudentSubsidizeRemoveIds = baseStudentSubsidizeIds.stream().filter(item -> !baseStudentSubsidizeOldIds.contains(item)).collect(Collectors.toList()); for (BaseStudentSubsidize BaseStudentEducation : baseStudentUser.getBaseStudentSubsidizeList()) { //如果不等于空则修改 if (BaseStudentEducation.getId() != null) { subsidizeService.updateById(BaseStudentEducation); } //如果等于空 则新增 else { //已经不存在的id 删除 BaseStudentEducation.setUserId(baseStudentUser.getId()); subsidizeService.save(BaseStudentEducation); } } //已经不存在的id 删除 if (baseStudentSubsidizeRemoveIds.size() > 0) { subsidizeService.removeBatchByIds(baseStudentSubsidizeRemoveIds); } } //********************************* BaseStudentEducation 增删改 结束 *******************************************/ return true; } @Override @Transactional(rollbackFor = Exception.class) public Boolean delete(List ids) { studentbaseManagerBaseStudentUserMapper.deleteBatchIds(ids); baseStudentService.remove(Wrappers.lambdaQuery(BaseStudent.class).in(BaseStudent::getUserId, ids)); studentContactService.remove(Wrappers.lambdaQuery(BaseStudentContact.class).in(BaseStudentContact::getUserId, ids)); familyMapper.delete(Wrappers.lambdaQuery(BaseStudentFamily.class).in(BaseStudentFamily::getUserId, ids)); familyMemberMapper.delete(Wrappers.lambdaQuery(BaseStudentFamilyMember.class).in(BaseStudentFamilyMember::getUserId, ids)); schoolRollService.remove(Wrappers.lambdaQuery(BaseStudentSchoolRoll.class).in(BaseStudentSchoolRoll::getUserId, ids)); subsidizeService.remove(Wrappers.lambdaQuery(BaseStudentSubsidize.class).in(BaseStudentSubsidize::getUserId, ids)); return true; } @Override public BaseStudentClassVo getStudentClass(Long userId) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper .disableSubLogicDel() .innerJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getClassId, BaseStudent::getId) .eq(BaseStudentSchoolRoll::getUserId, userId) .selectAsClass(BaseClass.class, BaseStudentClassVo.class); BaseClass baseClass = baseClassMapper.selectOne(queryWrapper); return BeanUtil.toBean(baseClass, BaseStudentClassVo.class); } /** * 个人财务画像,获取学生个人信息 */ @Override public PersonalPortraitPersonalInfoVo getPersonalInfo(Long userId) { StudentPersonalInfoVo info = baseStudentService.getPersonalInfo(userId); PersonalPortraitPersonalInfoVo p = new PersonalPortraitPersonalInfoVo(); BeanUtils.copyProperties(info, p); List members = familyMemberMapper.selectList( new QueryWrapper().lambda() .eq(BaseStudentFamilyMember::getUserId, userId) .eq(BaseStudentFamilyMember::getIsGuardian, 1) ); String guardianPhone = ""; for (int i = 0; i < members.size(); i ++){ if(i > 0){ guardianPhone += ","; } guardianPhone += members.get(i).getMobile(); } if(StrUtil.isNotEmpty(guardianPhone)){ info.setGuardianPhone(guardianPhone); } return p; } @Override public Boolean importStudentData(List> excelDataList) throws ParseException { List idNumbers = new ArrayList<>(); for (Map integerObjectMap : excelDataList) { idNumbers.add(integerObjectMap.get(0).toString()); } //查询所有学生的用户信息,组装起来备用 List studentUsers = this.selectJoinList(BaseStudentUser.class, new MPJLambdaWrapper() .leftJoin(BaseStudent.class, BaseStudent::getUserId, BaseStudentUser::getId) .in(BaseStudentUser::getCredentialNumber, idNumbers) ); Map studentUserMap = new HashMap<>(); Set userIds = new HashSet<>(); for (BaseStudentUser studentUser : studentUsers) { studentUserMap.put(studentUser.getCredentialNumber(), studentUser); userIds.add(studentUser.getId()); } //查询所有的学生信息,组装起来备用 List baseStudents = baseStudentService.selectJoinList(BaseStudent.class, new MPJLambdaWrapper() .leftJoin(BaseStudentUser.class, BaseStudentUser::getId, BaseStudent::getUserId) .in(BaseStudentUser::getCredentialNumber, idNumbers) ); Map baseStudentMap = new HashMap<>(); for (BaseStudent studentUser : baseStudents) { baseStudentMap.put(studentUser.getUserId(), studentUser); } //查询所用到的字典 Map dictionary = initDictionary(); //查行政区划 List areaList = areaService.list(); Map areaMap = new HashMap<>(); for (Area area : areaList) { areaMap.put(area.getName(), Long.parseLong(area.getCode())); } List baseStudentSchoolRolls = schoolRollService.selectJoinList(BaseStudentSchoolRoll.class, new MPJLambdaWrapper() .leftJoin(BaseStudent.class, BaseStudent::getUserId, BaseStudentSchoolRoll::getUserId) .in(!userIds.isEmpty(), BaseStudentSchoolRoll::getUserId, userIds) ); Map studentSchoolRollMap = new HashMap<>(); for (BaseStudentSchoolRoll schoolRoll : baseStudentSchoolRolls) { studentSchoolRollMap.put(schoolRoll.getUserId(), schoolRoll); } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //查询年级 List gradeList = baseGradeMapper.selectList(new QueryWrapper().lambda().eq(BaseGrade::getDeleteMark, DeleteMark.NODELETE.getCode())); Map gradeMap = new HashMap<>(); for (BaseGrade grade : gradeList) { gradeMap.put(grade.getName(), grade.getId()); } //查询班级 List classList = baseClassMapper.selectList(new QueryWrapper().lambda().eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())); Map classMap = new HashMap<>(); for (BaseClass grade : classList) { classMap.put(grade.getName(), grade.getId()); } //查询专业 List majorSetList = baseMajorSetMapper.selectList(new QueryWrapper().lambda().eq(BaseMajorSet::getDeleteMark, DeleteMark.NODELETE.getCode())); Map majorSetMap = new HashMap<>(); for (BaseMajorSet baseMajorSet : majorSetList) { majorSetMap.put(baseMajorSet.getName(), baseMajorSet.getId()); } //查询资助 List baseStudentSubsidizes = subsidizeService.list(null); Map subsidizesMap = new HashMap<>(); for (BaseStudentSubsidize el : baseStudentSubsidizes) { subsidizesMap.put(el.getUserId(), el); } //查询家庭 List studentFamilies = familyMapper.selectList(null); Map familyMap = new HashMap<>(); for (BaseStudentFamily el : studentFamilies) { familyMap.put(el.getUserId(), el); } //查询联系信息 List contactList = studentContactService.list(); Map contactMap = new HashMap<>(); for (BaseStudentContact el : contactList) { contactMap.put(el.getUserId(), el); } List updateStudentUserList = new ArrayList(); List updateBaseStudentList = new ArrayList(); List updateSchoolRollList = new ArrayList(); List updateSubsidizeList = new ArrayList(); List updateFamilyList = new ArrayList(); List updateContactList = new ArrayList(); List insertStudentUserList = new ArrayList(); List insertBaseStudentList = new ArrayList(); List insertSchoolRollList = new ArrayList(); List insertSubsidizeList = new ArrayList(); List insertFamilyList = new ArrayList(); List insertContactList = new ArrayList(); //异动记录 List changeRecordList = new ArrayList(); long createUserId = StpUtil.getLoginIdAsLong(); // long createUserId = 1000000000000000000L; int row = 3; for (Map dataMaps : excelDataList) { if(dataMaps.get(0) == null){ throw new MyException("第" + row + "行数据身份证号为空,无法导入"); } String credentialNumber = dataMaps.get(0).toString();//身份证号 //已存在,更新 BaseStudentUser user = studentUserMap.get(credentialNumber); BaseStudent baseStudent; BaseStudentSchoolRoll schoolRoll; BaseStudentSubsidize subsidize; BaseStudentFamily studentFamily; BaseStudentContact contact; long userId = IdUtil.getSnowflakeNextId(); if(user != null){ userId = user.getId(); user.setDeleteMark(DeleteMark.NODELETE.getCode()); baseStudent = baseStudentMap.get(user.getId()); if(baseStudent == null){ baseStudent = new BaseStudent(); baseStudent.setUserId(userId); baseStudent.setCreateUserId(createUserId); baseStudent.setCreateDate(LocalDateTime.now()); } baseStudent.setDeleteMark(DeleteMark.NODELETE.getCode()); schoolRoll = studentSchoolRollMap.get(user.getId()); if(schoolRoll == null){ schoolRoll = new BaseStudentSchoolRoll(); schoolRoll.setUserId(userId); schoolRoll.setCreateUserId(createUserId); schoolRoll.setCreateDate(LocalDateTime.now()); } schoolRoll.setDeleteMark(DeleteMark.NODELETE.getCode()); subsidize = subsidizesMap.get(user.getId()); if(subsidize == null){ subsidize = new BaseStudentSubsidize(); subsidize.setUserId(userId); subsidize.setCreateUserId(createUserId); subsidize.setCreateDate(LocalDateTime.now()); } subsidize.setDeleteMark(DeleteMark.NODELETE.getCode()); studentFamily = familyMap.get(user.getId()); if(studentFamily == null){ studentFamily = new BaseStudentFamily(); studentFamily.setUserId(userId); studentFamily.setCreateUserId(createUserId); studentFamily.setCreateDate(LocalDateTime.now()); } studentFamily.setDeleteMark(DeleteMark.NODELETE.getCode()); contact = contactMap.get(user.getId()); if(contact == null){ contact = new BaseStudentContact(); contact.setUserId(userId); contact.setCreateUserId(createUserId); contact.setCreateDate(LocalDateTime.now()); } contact.setDeleteMark(DeleteMark.NODELETE.getCode()); }else{ user = new BaseStudentUser(); user.setId(userId); user.setUserName(credentialNumber); user.setCredentialNumber(credentialNumber); user.setCreateUserId(createUserId); user.setCreateDate(LocalDateTime.now()); baseStudent = new BaseStudent(); baseStudent.setUserId(userId); baseStudent.setCreateUserId(createUserId); baseStudent.setCreateDate(LocalDateTime.now()); schoolRoll = new BaseStudentSchoolRoll(); schoolRoll.setUserId(userId); schoolRoll.setCreateUserId(createUserId); schoolRoll.setCreateDate(LocalDateTime.now()); subsidize = new BaseStudentSubsidize(); subsidize.setUserId(userId); subsidize.setCreateUserId(createUserId); subsidize.setCreateDate(LocalDateTime.now()); studentFamily = new BaseStudentFamily(); studentFamily.setUserId(userId); studentFamily.setCreateUserId(createUserId); studentFamily.setCreateDate(LocalDateTime.now()); contact = new BaseStudentContact(); contact.setUserId(userId); contact.setCreateUserId(createUserId); contact.setCreateDate(LocalDateTime.now()); } //设置字段值 if(dataMaps.get(1) != null && !"".equals(dataMaps.get(1).toString())){ baseStudent.setStudentId(dataMaps.get(1).toString());//学号 } if(dataMaps.get(2) != null && !"".equals(dataMaps.get(2).toString())){ schoolRoll.setCandidateNumber(dataMaps.get(2).toString());//考号 } if(dataMaps.get(3) != null && !"".equals(dataMaps.get(3).toString())){ user.setName(dataMaps.get(3).toString());//姓名 } if(dataMaps.get(4) != null && !"".equals(dataMaps.get(4).toString())){ user.setGender(GenderDictionaryEnum.getCode(dataMaps.get(4).toString()));//性别 } if(dataMaps.get(5) != null && !"".equals(dataMaps.get(5).toString())){ user.setMobile(dataMaps.get(5).toString());//手机号 } if(dataMaps.get(6) != null && !"".equals(dataMaps.get(6).toString())){ user.setEmail(dataMaps.get(6).toString());//邮箱 } if(dataMaps.get(7) != null && !"".equals(dataMaps.get(7).toString())){ baseStudent.setAsName(dataMaps.get(7).toString());//别名 } if(dataMaps.get(8) != null && !"".equals(dataMaps.get(8).toString())){ baseStudent.setEnName(dataMaps.get(8).toString());//英文名 } if(dataMaps.get(9) != null && !"".equals(dataMaps.get(9).toString())){ baseStudent.setPyName(dataMaps.get(9).toString());//姓名拼音 } if(dataMaps.get(10) != null && !"".equals(dataMaps.get(10).toString())){ baseStudent.setFormerName(dataMaps.get(10).toString());//曾用名 } if(dataMaps.get(11) != null && !"".equals(dataMaps.get(11).toString())){ user.setCredentialType(dictionary.get("credential_type" + dataMaps.get(11).toString()));//证件类型 } if(dataMaps.get(12) != null && !"".equals(dataMaps.get(12).toString())){ LocalDateTime birthday = parseLocalDateTime(dataMaps.get(12).toString()); user.setBirthDate(birthday);//出生日期 baseStudent.setDayOfBirth(birthday.toLocalDate());//出生日期 } if(dataMaps.get(13) != null && !"".equals(dataMaps.get(13).toString())){ baseStudent.setBirthType(dictionary.get("date_type" + dataMaps.get(13).toString()));//生日类型 } if(dataMaps.get(14) != null && !"".equals(dataMaps.get(14).toString())){ baseStudent.setNation(dictionary.get("nation" + dataMaps.get(14).toString()));//民族 } if(dataMaps.get(15) != null && !"".equals(dataMaps.get(15).toString())){ baseStudent.setBloodType(dictionary.get("blood_type" + dataMaps.get(15).toString()));//血型 } if(dataMaps.get(16) != null && !"".equals(dataMaps.get(16).toString())){ baseStudent.setHealth(dictionary.get("health" + dataMaps.get(16).toString()));//健康状况 } if(dataMaps.get(17) != null && !"".equals(dataMaps.get(17).toString())){ baseStudent.setMaritalState(dictionary.get("marital_state" + dataMaps.get(17).toString()));//婚姻状况 } if(dataMaps.get(18) != null && !"".equals(dataMaps.get(18).toString())){ baseStudent.setPoliticalState(dictionary.get("political_state" + dataMaps.get(18).toString()));//政治面貌 } if(dataMaps.get(19) != null && !"".equals(dataMaps.get(19).toString())){ baseStudent.setNationality(dictionary.get("nationality" + dataMaps.get(19).toString()));//国籍地区 } if(dataMaps.get(20) != null && !"".equals(dataMaps.get(20).toString())){ baseStudent.setChineseType(dictionary.get("chinese_type" + dataMaps.get(20).toString()));//港澳台侨外 } if(dataMaps.get(21) != null && !"".equals(dataMaps.get(21).toString())){ baseStudent.setHouseHoldType(dictionary.get("house_hold_type" + dataMaps.get(21).toString()));//户口类别 } if(dataMaps.get(22) != null && !"".equals(dataMaps.get(22).toString())){ baseStudent.setNativePlaceType(dataMaps.get(22).toString());//籍贯类型 } if(dataMaps.get(23) != null && !"".equals(dataMaps.get(23).toString())){ baseStudent.setProvinces(areaMap.get(dataMaps.get(23).toString()));//省 } if(dataMaps.get(24) != null && !"".equals(dataMaps.get(24).toString())){ baseStudent.setCity(areaMap.get(dataMaps.get(24).toString()));//市 } if(dataMaps.get(25) != null && !"".equals(dataMaps.get(25).toString())){ baseStudent.setDistrict(areaMap.get(dataMaps.get(25).toString()));//区县 } if(dataMaps.get(26) != null && !"".equals(dataMaps.get(26).toString())){ baseStudent.setHouseProvinces(areaMap.get(dataMaps.get(26).toString()));//户口所在地省 } if(dataMaps.get(27) != null && !"".equals(dataMaps.get(27).toString())){ baseStudent.setHouseCity(areaMap.get(dataMaps.get(27).toString()));//户口所在地市 } if(dataMaps.get(28) != null && !"".equals(dataMaps.get(28).toString())){ baseStudent.setHouseDistrict(areaMap.get(dataMaps.get(28).toString()));//户口所在地区/县 } if(dataMaps.get(29) != null && !"".equals(dataMaps.get(29).toString())){ baseStudent.setBelongsPolice(dataMaps.get(29).toString());//户口所属派出所 } if(dataMaps.get(30) != null && !"".equals(dataMaps.get(30).toString())){ baseStudent.setBirthProvinces(areaMap.get(dataMaps.get(30).toString()));//出生所在地省 } if(dataMaps.get(31) != null && !"".equals(dataMaps.get(31).toString())){ baseStudent.setBirthCity(areaMap.get(dataMaps.get(31).toString()));//出生所在地市 } if(dataMaps.get(32) != null && !"".equals(dataMaps.get(32).toString())){ baseStudent.setBirthDistrict(areaMap.get(dataMaps.get(32).toString()));//出生所在地/区县 } if(dataMaps.get(33) != null && !"".equals(dataMaps.get(33).toString())){ baseStudent.setHouseHoldAddress(dataMaps.get(33).toString());//户籍地址 } if(dataMaps.get(34) != null && !"".equals(dataMaps.get(34).toString())){ baseStudent.setResidenceType(dictionary.get("residence_type" + dataMaps.get(34).toString()));//学生居住地类型 } if(dataMaps.get(35) != null && !"".equals(dataMaps.get(35).toString())){ baseStudent.setTrainInterval(dataMaps.get(35).toString());//乘火车区间 } if(dataMaps.get(36) != null && !"".equals(dataMaps.get(36).toString())){ baseStudent.setIsMigrateChildren(YesOrNoEnum.getCode(dataMaps.get(36).toString()));//是否随迁子女 } if(dataMaps.get(37) != null && !"".equals(dataMaps.get(37).toString())){ baseStudent.setIsFloatingPopulation(YesOrNoEnum.getCode(dataMaps.get(37).toString()));//是否流动人口 } if(dataMaps.get(38) != null && !"".equals(dataMaps.get(38).toString())){ baseStudent.setHeight(Double.parseDouble(dataMaps.get(38).toString()));//身高 } if(dataMaps.get(39) != null && !"".equals(dataMaps.get(39).toString())){ baseStudent.setWeight(Double.parseDouble(dataMaps.get(39).toString()));//体重 } if(dataMaps.get(40) != null && !"".equals(dataMaps.get(40).toString())){ baseStudent.setVision(Double.parseDouble(dataMaps.get(40).toString()));//视力 } if(dataMaps.get(41) != null && !"".equals(dataMaps.get(41).toString())){ baseStudent.setSpecialty(dataMaps.get(41).toString());//特长 } if(dataMaps.get(42) != null && !"".equals(dataMaps.get(42).toString())){ user.setQqNumber(dataMaps.get(42).toString());//QQ&MSN contact.setQqMsn(dataMaps.get(42).toString());//QQ&MSN } if(dataMaps.get(43) != null && !"".equals(dataMaps.get(43).toString())){ user.setWechatNumber(dataMaps.get(43).toString());//微信号码 contact.setWechat(dataMaps.get(43).toString());//微信号码 } if(dataMaps.get(44) != null && !"".equals(dataMaps.get(44).toString())){ contact.setUserPage(dataMaps.get(44).toString());//个人主页 } if(dataMaps.get(45) != null && !"".equals(dataMaps.get(45).toString())){ schoolRoll.setRollNumber(dataMaps.get(45).toString());//学籍号 } if(dataMaps.get(46) != null && !"".equals(dataMaps.get(46).toString())){ schoolRoll.setArchivesNumber(dataMaps.get(46).toString());//学生档案编号 } if(dataMaps.get(47) != null && !"".equals(dataMaps.get(47).toString())){ schoolRoll.setEnrollmentDate(sdf.parse(dataMaps.get(47).toString()));//入学年月 } if(dataMaps.get(48) != null && !"".equals(dataMaps.get(48).toString())){ schoolRoll.setEnrollmentType(dictionary.get("enrollment_type" + dataMaps.get(48).toString()));//入学方式 } if(dataMaps.get(49) != null && !"".equals(dataMaps.get(49).toString())){ schoolRoll.setGradeId(gradeMap.get(dataMaps.get(49).toString()));//入学年级 } if(dataMaps.get(50) != null && !"".equals(dataMaps.get(50).toString())){ schoolRoll.setEnrollType(dictionary.get("enroll_type" + dataMaps.get(50).toString()));//入学招生类型 } if(dataMaps.get(51) != null && !"".equals(dataMaps.get(51).toString())){ schoolRoll.setMajorSetId(majorSetMap.get(dataMaps.get(51).toString()));//在读专业方向 } if(dataMaps.get(52) != null && !"".equals(dataMaps.get(52).toString())){ schoolRoll.setStudyYear(Double.parseDouble(dataMaps.get(52).toString()));//学制 } if(dataMaps.get(53) != null && !"".equals(dataMaps.get(53).toString())){ //schoolRoll.setClassId(classMap.get(dataMaps.get(53).toString()));//班级 } if(dataMaps.get(54) != null && !"".equals(dataMaps.get(54).toString())){ schoolRoll.setStudentSource(dictionary.get("student_type" + dataMaps.get(54).toString()));//学生来源 } if(dataMaps.get(55) != null && !"".equals(dataMaps.get(55).toString())){ //schoolRoll.setStudentType(dictionary.get("student_type" + dataMaps.get(55).toString()));//学生类别 } if(dataMaps.get(56) != null && !"".equals(dataMaps.get(56).toString())){ //schoolRoll.setArchivesStatus(dictionary.get("archives_status" + dataMaps.get(56).toString()));//学籍状态 } if(dataMaps.get(57) != null && !"".equals(dataMaps.get(57).toString())){ //schoolRoll.setLearnStatus(dictionary.get("roll_modality" + dataMaps.get(57).toString()));//学习形式 //schoolRoll.setRollModality(dictionary.get("roll_modality" + dataMaps.get(57).toString()));//学习形式 } if(dataMaps.get(58) != null && !"".equals(dataMaps.get(58).toString())){ //schoolRoll.setStduyStatus(dictionary.get("stduy_status" + dataMaps.get(58).toString()));//就读方式 } if(dataMaps.get(59) != null && !"".equals(dataMaps.get(59).toString())){ schoolRoll.setChooseStatus(dictionary.get("choose_status" + dataMaps.get(59).toString()));//分流状态 } if(dataMaps.get(60) != null && !"".equals(dataMaps.get(60).toString())){ schoolRoll.setFosterType(dictionary.get("foster_type" + dataMaps.get(60).toString()));//分段培养方式 } if(dataMaps.get(61) != null && !"".equals(dataMaps.get(61).toString())){ schoolRoll.setRecruitType(dictionary.get("recruit_type" + dataMaps.get(61).toString()));//招生类型 } if(dataMaps.get(62) != null && !"".equals(dataMaps.get(62).toString())){ schoolRoll.setRecruitTarget(dictionary.get("recruit_target" + dataMaps.get(62).toString()));//招生对象 } if(dataMaps.get(63) != null && !"".equals(dataMaps.get(63).toString())){ schoolRoll.setHighestEducation(dictionary.get("education" + dataMaps.get(63).toString()));//入学前最高学历 } if(dataMaps.get(64) != null && !"".equals(dataMaps.get(64).toString())){ schoolRoll.setGraduatedUniversity(dataMaps.get(64).toString());//入学前毕业院校 } if(dataMaps.get(65) != null && !"".equals(dataMaps.get(65).toString())){ schoolRoll.setGraduatedScore(Double.parseDouble(dataMaps.get(65).toString()));//入学前毕业成绩 } if(dataMaps.get(66) != null && !"".equals(dataMaps.get(66).toString())){ schoolRoll.setExamineeNumber(dataMaps.get(66).toString());//入学考试准考证号 } if(dataMaps.get(67) != null && !"".equals(dataMaps.get(67).toString())){ schoolRoll.setTicketNumber(dataMaps.get(67).toString());//入学考试准考证号 } if(dataMaps.get(68) != null && !"".equals(dataMaps.get(68).toString())){ schoolRoll.setAdmissionScores(Double.parseDouble(dataMaps.get(68).toString()));//入学考试成绩 } if(dataMaps.get(69) != null && !"".equals(dataMaps.get(69).toString())){ schoolRoll.setRemark(dataMaps.get(69).toString());//备注 } if(dataMaps.get(69) != null && !"".equals(dataMaps.get(69).toString())){ schoolRoll.setRemark(dataMaps.get(69).toString());//备注 } if(dataMaps.get(70) != null && !"".equals(dataMaps.get(70).toString())){ subsidize.setIsIndemnify(YesOrNoEnum.getCode(dataMaps.get(70).toString()));//是否低保户 } if(dataMaps.get(71) != null && !"".equals(dataMaps.get(71).toString())){ subsidize.setIsStipend(YesOrNoEnum.getCode(dataMaps.get(71).toString()));//是否享受国家助学金 } if(dataMaps.get(72) != null && !"".equals(dataMaps.get(72).toString())){ subsidize.setStipendStand(Double.parseDouble(dataMaps.get(72).toString()));//助学金发放标准(元) } if(dataMaps.get(73) != null && !"".equals(dataMaps.get(73).toString())){ subsidize.setStipendNumber(dataMaps.get(73).toString());//学生资助卡号 } if(dataMaps.get(74) != null && !"".equals(dataMaps.get(74).toString())){ subsidize.setIsFree(YesOrNoEnum.getCode(dataMaps.get(74).toString()));//是否免学费 } if(dataMaps.get(75) != null && !"".equals(dataMaps.get(75).toString())){ subsidize.setIsFilingCard(YesOrNoEnum.getCode(dataMaps.get(75).toString()));//是否建档立卡 } if(dataMaps.get(76) != null && !"".equals(dataMaps.get(76).toString())){ studentFamily.setZipCode(dataMaps.get(76).toString());//家庭邮编 } if(dataMaps.get(77) != null && !"".equals(dataMaps.get(77).toString())){ studentFamily.setTelephone(dataMaps.get(77).toString());//家庭电话 } if(dataMaps.get(78) != null && !"".equals(dataMaps.get(78).toString())){ studentFamily.setContact(dataMaps.get(76).toString());//联系人姓名 } if(dataMaps.get(79) != null && !"".equals(dataMaps.get(79).toString())){ studentFamily.setPopulation(Integer.parseInt(dataMaps.get(79).toString()));//家庭人口 } if(dataMaps.get(80) != null && !"".equals(dataMaps.get(80).toString())){ studentFamily.setAddress(dataMaps.get(80).toString());//家庭地址 } if(dataMaps.get(81) != null && !"".equals(dataMaps.get(81).toString())){ studentFamily.setIncomeSource(dataMaps.get(81).toString());//家庭主要收入来源 } if(dataMaps.get(82) != null && !"".equals(dataMaps.get(82).toString())){ studentFamily.setIncomeNumber(Double.parseDouble(dataMaps.get(82).toString()));//家庭月收入(元) } if(dataMaps.get(83) != null && !"".equals(dataMaps.get(83).toString())){ studentFamily.setRailwayStation(dataMaps.get(83).toString());//离家最近火车站 } if(studentUserMap.containsKey(credentialNumber)){ updateStudentUserList.add(user); updateBaseStudentList.add(baseStudent); updateSchoolRollList.add(schoolRoll); updateSubsidizeList.add(subsidize); updateFamilyList.add(studentFamily); updateContactList.add(contact); }else{ insertStudentUserList.add(user); insertBaseStudentList.add(baseStudent); if(schoolRoll.getClassId() != null && schoolRoll.getGradeId() != null && schoolRoll.getMajorSetId() != null){ insertSchoolRollList.add(schoolRoll); } insertSubsidizeList.add(subsidize); insertFamilyList.add(studentFamily); insertContactList.add(contact); } row ++; } //批量修改 if(!updateStudentUserList.isEmpty()){ this.updateBatchById(updateStudentUserList); } if(!updateSchoolRollList.isEmpty()){ schoolRollService.updateBatchById(updateSchoolRollList); } if(!updateSubsidizeList.isEmpty()){ subsidizeService.updateBatchById(updateSubsidizeList); } if(!updateFamilyList.isEmpty()){ familyService.updateBatchById(updateFamilyList); } if(!updateBaseStudentList.isEmpty()){ baseStudentService.updateBatchById(updateBaseStudentList); } if(!updateContactList.isEmpty()){ studentContactService.updateBatchById(updateContactList); } //批量新增 if(!insertStudentUserList.isEmpty()){ this.saveBatch(insertStudentUserList); } if(!insertBaseStudentList.isEmpty()){ baseStudentService.saveBatch(insertBaseStudentList); } if(!insertSubsidizeList.isEmpty()){ subsidizeService.saveBatch(insertSubsidizeList); } if(!insertFamilyList.isEmpty()){ familyService.saveBatch(insertFamilyList); } if(!insertSchoolRollList.isEmpty()){ schoolRollService.saveBatch(insertSchoolRollList); } if(!insertContactList.isEmpty()){ studentContactService.saveBatch(insertContactList); } return true; } @Override public Page getStudentPage(Page page, BaseStudentUserPageDto dto) { return baseStudentMapper.getStudentPage(page, dto); } @Override public Boolean uploadImage(Long userId, MultipartFile file) throws IOException { BaseStudentUser studentUser = studentbaseManagerBaseStudentUserMapper.selectById(userId); String[] imgSuffix = new String[]{"png", "jpg", "jpeg"}; String suffix = StringUtils.substringAfterLast(file.getOriginalFilename(), StringPool.DOT); if (!Arrays.asList(imgSuffix).contains(suffix)) { throw new MyException("图片格式不正确!"); } String base64String = Base64.getEncoder().encodeToString(file.getBytes()); Map map = new HashMap() { { put("jpg", "data:image/jpg;base64,"); put("jpeg", "data:image/jpeg;base64,"); put("png", "data:image/png;base64,"); } }; studentUser.setAvatar(map.get(suffix) + base64String); studentbaseManagerBaseStudentUserMapper.updateById(studentUser); return true; } @Override public List deptMajorGradeClassTree(MajorGradeClassDto dto) { List voList = new ArrayList<>(); MPJLambdaWrapper baseClassMPJLambdaWrapper = new MPJLambdaWrapper<>(); baseClassMPJLambdaWrapper .selectAs(BaseClass::getId, BaseClassMajorSetVo::getClassId) .selectAs(BaseMajorSet::getMajorId, BaseClassMajorSetVo::getMajorId) .selectAs(BaseClass::getName, BaseClassMajorSetVo::getClassName) .selectAs(BaseClass::getGradeId, BaseClassMajorSetVo::getGradeId) .leftJoin(BaseClassMajorSet.class, BaseClassMajorSet::getClassId, BaseClass::getId) .leftJoin(BaseMajorSet.class, BaseMajorSet::getId, BaseClassMajorSet::getMajorSetId) .eq(dto.getIsGraduate() != null, BaseClass::getIsGraduate, dto.getIsGraduate()) .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode()) .eq(BaseClass::getEnabledMark, EnabledMark.ENABLED.getCode()) ; List majorSetList = baseClassService.selectJoinList(BaseClassMajorSetVo.class, baseClassMPJLambdaWrapper); if(majorSetList.isEmpty()){ return new ArrayList<>(); } Set gradeIds = majorSetList.stream().map(BaseClassMajorSetVo::getGradeId).collect(Collectors.toSet()); Set majorSetIds = majorSetList.stream().map(BaseClassMajorSetVo::getMajorId).collect(Collectors.toSet()); Map>> classMap = majorSetList.stream().collect(Collectors.groupingBy(BaseClassMajorSetVo::getMajorId, Collectors.groupingBy(BaseClassMajorSetVo::getGradeId))); List gradeList = baseGradeService.list( new QueryWrapper().lambda() .eq(BaseGrade::getDeleteMark, DeleteMark.NODELETE.getCode()) .in(!gradeIds.isEmpty(), BaseGrade::getId, gradeIds) .orderByDesc(BaseGrade::getTitle) ); List majorList = baseMajorService.list( new QueryWrapper().lambda() .eq(BaseMajor::getDeleteMark, DeleteMark.NODELETE.getCode()) .in(!majorSetIds.isEmpty(), BaseMajor::getId, majorSetIds) ); List deptIds = majorList.stream().map(BaseMajor::getDepartmentId).collect(Collectors.toList()); List departmentList =baseDeparmentService.list( new QueryWrapper().lambda() .eq(Department::getDeleteMark, DeleteMark.NODELETE.getCode()) .eq(Department::getIsMajor,1) .in(!deptIds.isEmpty(), Department::getId, deptIds) ); departmentList.forEach((node) -> { voList.add(new BaseDepMajorGradeClassStudenTreeVo(){{ setId(node.getId().toString()); setTreeType(1); setName(node.getName()); setParentId("0"); }}); }); majorList.forEach((node)->{ voList.add(new BaseDepMajorGradeClassStudenTreeVo(){{ setId(node.getId().toString()); setName(node.getName()); setTreeType(2); setParentId(node.getDepartmentId().toString()); }}); Map> gradeMap = classMap.get(node.getId()); gradeList.forEach((DDD)->{ List list = gradeMap.get(DDD.getId()); if(list == null|| list.isEmpty() || list.size() == 0){ return; } voList.add(new BaseDepMajorGradeClassStudenTreeVo(){{ setId(node.getId().toString()+"_"+DDD.getId().toString()); setName(DDD.getName()); setTreeType(3); setParentId(node.getId().toString()); }}); }); }); majorSetList.forEach((node)->{ voList.add(new BaseDepMajorGradeClassStudenTreeVo(){{ setId(node.getClassId().toString()); setName(node.getClassName()); setTreeType(4); setParentId(node.getMajorId().toString()+"_"+node.getGradeId()); }}); }); List treeVoList = TreeUtil.build(voList); return treeVoList; } /** * 初始化字典信息 * 身份证类型、 */ private Map initDictionary(){ List codeList = new ArrayList<>(); codeList.add("credential_type");codeList.add("nation"); codeList.add("blood_type");codeList.add("health"); codeList.add("marital_state");codeList.add("political_state"); codeList.add("nationality");codeList.add("chinese_type"); codeList.add("house_hold_type");codeList.add("residence_type"); codeList.add("enrollment_type");codeList.add("enroll_type"); codeList.add("student_type");codeList.add("archives_status"); codeList.add("roll_modality");codeList.add("stduy_status"); codeList.add("choose_status");codeList.add("foster_type"); codeList.add("recruit_type");codeList.add("recruit_target"); codeList.add("education");codeList.add("recruit_target"); codeList.add("date_type"); List detailList = dictionarydetailMapper.selectJoinList(DictionaryDetail.class, new MPJLambdaWrapper() .leftJoin(DictionaryItem.class, DictionaryItem::getId, DictionaryDetail::getItemId) .in(DictionaryItem::getCode, codeList) ); List dictionaryItemList = dictionaryitemMapper.selectList( new QueryWrapper().lambda() .eq(DictionaryItem::getDeleteMark, DeleteMark.NODELETE.getCode()) ); Map itemMap = new HashMap<>(); for (DictionaryItem dictionaryItem : dictionaryItemList) { itemMap.put(dictionaryItem.getId(), dictionaryItem.getCode()); } Map resultMap = new HashMap<>(); for (DictionaryDetail dictionaryDetail : detailList) { resultMap.put(itemMap.get(dictionaryDetail.getItemId()) + dictionaryDetail.getName(), dictionaryDetail.getCode()); } return resultMap; } private LocalDateTime parseLocalDateTime(String dateStr){ LocalDate time = null; try { time = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); }catch (DateTimeParseException e){ try { time = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy/MM/dd")); }catch (DateTimeParseException e2){ try { time = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy年MM月dd日")); }catch (DateTimeParseException e3){ try { time = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyyMMdd")); }catch (DateTimeParseException e4){ throw new MyException("日期格式不正确"); } } } } if(time != null){ return time.atStartOfDay(); } return null; } }