You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dianshang-houduan/src/main/java/com/sztzjy/linkCommerce/service/impl/UserInfoServiceImpl.java

253 lines
11 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.sztzjy.linkCommerce.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.IdUtil;
import com.sztzjy.linkCommerce.entity.*;
import com.sztzjy.linkCommerce.mapper.*;
import com.sztzjy.linkCommerce.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.*;
@Service
public class UserInfoServiceImpl implements UserInfoService {
@Autowired
UserinfoMapper userInfoMapper;
@Autowired
SchoolMapper schoolMapper;
@Autowired
SchoolFacultyMapper schoolFacultyMapper;
@Autowired
SchoolMajorMapper schoolMajorMapper;
@Autowired
SchoolClassMapper schoolClassMapper;
@Override
public boolean existsByUserName(String userName) {
UserinfoExample userInfoExample = new UserinfoExample();
userInfoExample.createCriteria().andUsernameEqualTo(userName);
List<Userinfo> userInfos = userInfoMapper.selectByExample(userInfoExample);
if(userInfos.isEmpty() || userInfos==null){
return false;
}else {
return true;
}
}
//根据学校ID查询该学校下的班级名
@Override
public List<String> getClassNameList(String userId) {
Userinfo userinfo = userInfoMapper.selectByPrimaryKey(userId);
String schoolMajorId = userinfo.getSchoolMajorId();
SchoolClassExample schoolClassExample = new SchoolClassExample();
schoolClassExample.createCriteria().andSchoolMajorIdEqualTo(schoolMajorId);
List<SchoolClass> schoolClasses = schoolClassMapper.selectByExample(schoolClassExample);
List<String> list=new ArrayList<>();
for (int i = 0; i < schoolClasses.size(); i++) {
list.add(schoolClasses.get(i).getClassName());
}
return list;
}
/**
* 同步智云
* @param zyUserInfoList
* @return
*/
@Override
public String insertAllByAuto(List<ZYUserInfo> zyUserInfoList) {
List<Userinfo> users = new ArrayList<>();
// 用于存储已处理的学校、学院、专业、班级信息,避免重复插入
Set<String> processedSchools = new HashSet<>();
Set<String> processedFaculties = new HashSet<>();
Set<String> processedMajors = new HashSet<>();
Set<String> processedClasses = new HashSet<>();
// 存储学院和专业的映射关系
Map<String, String> facultyIdMap = new HashMap<>(); // collegeName -> facultyId
Map<String, String> majorIdMap = new HashMap<>(); // majorName -> majorId
for (int i = 0; i < zyUserInfoList.size(); i++) {
ZYUserInfo zyUserInfo = zyUserInfoList.get(i);
String username = zyUserInfo.getUsername();
String name = zyUserInfo.getName();
String password = zyUserInfo.getPassword();
Integer roleId = zyUserInfo.getRoleId();
if (roleId == 3)
{
//查询班级名和班级ID
UserinfoExample userInfoExample = new UserinfoExample();
userInfoExample.createCriteria().andSchoolIdEqualTo(String.valueOf(zyUserInfo.getSchoolId())).andRoleEqualTo(4);
List<Userinfo> userInfos = userInfoMapper.selectByExample(userInfoExample);
if (userInfos.isEmpty() || userInfos==null){
//该学校暂未开通考试账号
zyUserInfo.setClassName(zyUserInfo.getSchoolName()+"-默认班级");
String schoolId = zyUserInfo.getSchoolId().toString() + "00";
zyUserInfo.setClassId(Convert.toInt(schoolId));
}else {
Userinfo userinfo = userInfos.get(0);
String schoolClassId = userinfo.getSchoolClassId();
//根据ClassId去查询班级名
SchoolClass existingClass = schoolClassMapper.selectByPrimaryKey(schoolClassId);
String className = existingClass.getClassName();
zyUserInfo.setClassId(Integer.valueOf(schoolClassId));
zyUserInfo.setClassName(className);
}
}
// 检查用户是否已存在
UserinfoExample userInfoExample = new UserinfoExample();
userInfoExample.createCriteria().andUsernameEqualTo(username);
List<Userinfo> userInfos = userInfoMapper.selectByExample(userInfoExample);
if (userInfos.isEmpty() || userInfos == null) {
// 处理学校信息
String schoolId = zyUserInfo.getSchoolId().toString();
if (!processedSchools.contains(schoolId)) {
// 检查数据库中是否已存在该学校
School existingSchool = schoolMapper.selectByPrimaryKey(schoolId);
if (existingSchool == null) {
School school = new School();
school.setSchoolId(schoolId);
school.setSchoolName(zyUserInfo.getSchoolName());
school.setStatus(false);
schoolMapper.insertSelective(school);
}
processedSchools.add(schoolId);
}
// 处理学院信息
String collegeName = zyUserInfo.getCollegeName();
String facultyId;
if (!facultyIdMap.containsKey(collegeName)) {
facultyId = UUID.randomUUID().toString();
facultyIdMap.put(collegeName, facultyId);
if (!processedFaculties.contains(collegeName)) {
// 检查数据库中是否已存在该学院(通过学校ID和学院名称)
SchoolFacultyExample facultyExample = new SchoolFacultyExample();
facultyExample.createCriteria()
.andSchoolIdEqualTo(schoolId)
.andSchoolFacultyNameEqualTo(collegeName);
List<SchoolFaculty> existingFaculties = schoolFacultyMapper.selectByExample(facultyExample);
if (existingFaculties.isEmpty()) {
SchoolFaculty schoolFaculty = new SchoolFaculty();
schoolFaculty.setSchoolId(schoolId);
schoolFaculty.setSchoolFacultyId(facultyId);
schoolFaculty.setSchoolFacultyName(collegeName);
schoolFacultyMapper.insertSelective(schoolFaculty);
} else {
// 如果学院已存在,使用现有的学院ID
facultyId = existingFaculties.get(0).getSchoolFacultyId();
facultyIdMap.put(collegeName, facultyId);
}
processedFaculties.add(collegeName);
}
} else {
facultyId = facultyIdMap.get(collegeName);
}
// 处理专业信息
String majorName = zyUserInfo.getMajorName();
String majorId;
String majorKey = collegeName + "_" + majorName; // 组合键,因为不同学院可能有同名专业
if (!majorIdMap.containsKey(majorKey)) {
majorId = UUID.randomUUID().toString();
majorIdMap.put(majorKey, majorId);
if (!processedMajors.contains(majorKey)) {
// 检查数据库中是否已存在该专业(通过学院ID和专业名称)
SchoolMajorExample majorExample = new SchoolMajorExample();
majorExample.createCriteria()
.andSchoolFacultyIdEqualTo(facultyId)
.andSchoolMajorNameEqualTo(majorName);
List<SchoolMajor> existingMajors = schoolMajorMapper.selectByExample(majorExample);
if (existingMajors.isEmpty()) {
SchoolMajor schoolMajor = new SchoolMajor();
schoolMajor.setSchoolFacultyId(facultyId);
schoolMajor.setSchoolMajorId(majorId);
schoolMajor.setSchoolMajorName(majorName);
schoolMajorMapper.insertSelective(schoolMajor);
} else {
// 如果专业已存在,使用现有的专业ID
majorId = existingMajors.get(0).getSchoolMajorId();
majorIdMap.put(majorKey, majorId);
}
processedMajors.add(majorKey);
}
} else {
majorId = majorIdMap.get(majorKey);
}
// 处理班级信息
String classId = zyUserInfo.getClassId().toString();
String className = zyUserInfo.getClassName();
if (!processedClasses.contains(classId)) {
// 检查数据库中是否已存在该班级
SchoolClass existingClass = schoolClassMapper.selectByPrimaryKey(classId);
if (existingClass == null) {
SchoolClass schoolClass = new SchoolClass();
schoolClass.setSchoolClassId(classId);
schoolClass.setSchoolMajorId(majorId);
schoolClass.setClassName(className);
schoolClassMapper.insertSelective(schoolClass);
}
processedClasses.add(classId);
}
// 创建用户信息
Userinfo stuUser = new Userinfo();
stuUser.setUserId(IdUtil.randomUUID());
stuUser.setUsername(username);
if (!StringUtils.hasText(name)) {
stuUser.setName(username);
} else {
stuUser.setName(name);
}
stuUser.setPassword(password);
stuUser.setRole(roleId);
stuUser.setSchoolClassId(classId);
stuUser.setPhone(zyUserInfo.getPhone());
stuUser.setClassName(className);
stuUser.setDisabledstatus(false);
stuUser.setSchoolId(schoolId);
stuUser.setSchoolName(zyUserInfo.getSchoolName());
stuUser.setCodeFrom("智云同步");
stuUser.setSchoolFacultyId(facultyId);
stuUser.setSchoolMajorId(majorId);
users.add(stuUser);
}
}
if (users.isEmpty()) {
return "账号已全部存在";
}
// 批量插入用户数据
users.forEach(stuUser -> {
userInfoMapper.insertSelective(stuUser);
});
return "自动同步学生信息成功!" + "同步" + users.size() + "条用户数据";
}
}