教师端管理功能
parent
20de6611fd
commit
4cd09ee93c
@ -0,0 +1,114 @@
|
||||
package com.sztzjy.linkCommerce.controller.stu;
|
||||
|
||||
import com.sztzjy.linkCommerce.annotation.AnonymousAccess;
|
||||
import com.sztzjy.linkCommerce.config.Constant;
|
||||
import com.sztzjy.linkCommerce.entity.*;
|
||||
import com.sztzjy.linkCommerce.mapper.CgxqycAnswerMapper;
|
||||
import com.sztzjy.linkCommerce.mapper.CgxqycStuAnswerMapper;
|
||||
import com.sztzjy.linkCommerce.mapper.StuGradeMapper;
|
||||
import com.sztzjy.linkCommerce.util.ResultEntity;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "采购需求预测相关")
|
||||
@RequestMapping("api/cgxqyc")
|
||||
@RestController
|
||||
public class CgxqycController {
|
||||
@Autowired
|
||||
CgxqycStuAnswerMapper cgxqycStuAnswerMapper;
|
||||
@Autowired
|
||||
CgxqycAnswerMapper cgxqycAnswerMapper;
|
||||
@Autowired
|
||||
StuGradeMapper stuGradeMapper;
|
||||
|
||||
@PostMapping("/selectCgxqycAnswer")
|
||||
@ApiOperation("采购需求预测-回显")
|
||||
@AnonymousAccess
|
||||
public ResultEntity<CgxqycStuAnswer> selectCgxqycAnswer(@RequestParam String userId) {
|
||||
CgxqycStuAnswerExample cgxqycStuAnswerExample = new CgxqycStuAnswerExample();
|
||||
cgxqycStuAnswerExample.createCriteria().andUserIdEqualTo(userId);
|
||||
List<CgxqycStuAnswer> cgxqycStuAnswerList = cgxqycStuAnswerMapper.selectByExample(cgxqycStuAnswerExample);
|
||||
if (cgxqycStuAnswerList == null || cgxqycStuAnswerList.isEmpty()) {
|
||||
return new ResultEntity<>(HttpStatus.OK, "未提交");
|
||||
} else {
|
||||
return new ResultEntity<>(HttpStatus.OK, "采购需求预测-回显", cgxqycStuAnswerList.get(0));
|
||||
}
|
||||
}
|
||||
|
||||
// @PostMapping("/commitCgxqycAnswer")
|
||||
// @ApiOperation("采购需求预测-提交")
|
||||
// @AnonymousAccess
|
||||
// public ResultEntity commitCgxqycAnswer(@RequestBody CgxqycStuAnswer cgxqycStuAnswer, @RequestParam String userId) {
|
||||
// CgxqycAnswer cgxqycAnswer = cgxqycAnswerMapper.selectByExample(new CgxqycAnswerExample()).get(0);
|
||||
// String monthlyDataStu = cgxqycStuAnswer.getMonthlyData();
|
||||
// String monthlyData = cgxqycAnswer.getMonthlyData();
|
||||
// int monthlyDataErrorCount = compareLists(monthlyDataStu, monthlyData).errorCount;
|
||||
// String seasonalIndexStu = cgxqycStuAnswer.getSeasonalIndex();
|
||||
// String seasonalIndex = cgxqycAnswer.getSeasonalIndex();
|
||||
// int seasonalIndexErrorCount = compareLists(seasonalIndexStu, seasonalIndex).errorCount;
|
||||
// String demandForecastStu = cgxqycStuAnswer.getDemandForecast();
|
||||
// String demandForecast = cgxqycAnswer.getDemandForecast();
|
||||
// int demandForecastErrorCount = compareLists(demandForecastStu, demandForecast).errorCount;
|
||||
// int errorCount = monthlyDataErrorCount + seasonalIndexErrorCount + demandForecastErrorCount;
|
||||
// //先查询是否提交过
|
||||
// StuGradeExample stuGradeExample = new StuGradeExample();
|
||||
// stuGradeExample.createCriteria().andUserIdEqualTo(userId).andProjectEqualTo(Constant.PRO_GYQDGL).andModuleEqualTo(Constant.MODULE_CGXQYC);
|
||||
// List<StuGrade> stuGradeList = stuGradeMapper.selectByExample(stuGradeExample);
|
||||
// if (stuGradeList.isEmpty() || stuGradeList == null) {
|
||||
// //新建学生成绩
|
||||
//// stuGradeMapper.insert()
|
||||
// } else {
|
||||
// return new ResultEntity<>(HttpStatus.BAD_REQUEST, "已提交过");
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
public Result compareLists(String stulist, String answerList) {
|
||||
// 将字符串分割成数组
|
||||
String[] submitted = stulist.split(",");
|
||||
String[] answers = answerList.split(",");
|
||||
|
||||
int errorCount = 0; // 错误数量
|
||||
List<Integer> errorPositions = new ArrayList<>(); // 错误位置
|
||||
|
||||
// 获取较长数组的长度
|
||||
int maxLength = Math.max(submitted.length, answers.length);
|
||||
|
||||
// 遍历较长的数组
|
||||
for (int i = 0; i < maxLength; i++) {
|
||||
String submittedValue = (i < submitted.length) ? submitted[i] : null;
|
||||
String answerValue = (i < answers.length) ? answers[i] : null;
|
||||
|
||||
// 检查对应位置是否相同
|
||||
if (!equals(submittedValue, answerValue)) {
|
||||
errorCount++;
|
||||
errorPositions.add(i + 1); // +1 使位置从 1 开始
|
||||
}
|
||||
}
|
||||
|
||||
return new Result(errorCount, errorPositions);
|
||||
}
|
||||
|
||||
// 自定义 equals 方法处理 null 和空字符串的场景
|
||||
public static boolean equals(String a, String b) {
|
||||
return (a == null ? b == null : a.equals(b));
|
||||
}
|
||||
|
||||
// 内部类用来保存比较结果
|
||||
static class Result {
|
||||
int errorCount;
|
||||
List<Integer> errorPositions;
|
||||
|
||||
Result(int errorCount, List<Integer> errorPositions) {
|
||||
this.errorCount = errorCount;
|
||||
this.errorPositions = errorPositions;
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,14 @@
|
||||
package com.sztzjy.linkCommerce.entity.dto;
|
||||
|
||||
import com.sztzjy.linkCommerce.entity.SchoolClass;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SchoolClassDto {
|
||||
@ApiModelProperty("学校名称")
|
||||
String schoolName;
|
||||
|
||||
@ApiModelProperty("schoolClass对象")
|
||||
SchoolClass schoolClass;
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package com.sztzjy.linkCommerce.entity.dto;
|
||||
|
||||
import com.sztzjy.linkCommerce.entity.SchoolFaculty;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SchoolFacultyDto {
|
||||
|
||||
@ApiModelProperty("学校名称")
|
||||
String schoolName;
|
||||
|
||||
@ApiModelProperty("schoolFaculty对象")
|
||||
SchoolFaculty schoolFaculty;
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package com.sztzjy.linkCommerce.entity.dto;
|
||||
|
||||
import com.sztzjy.linkCommerce.entity.SchoolMajor;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SchoolMajorDto {
|
||||
@ApiModelProperty("专业ID")
|
||||
private String schoolMajorId;
|
||||
|
||||
@ApiModelProperty("学校名称")
|
||||
String schoolName;
|
||||
|
||||
@ApiModelProperty("院系名称")
|
||||
String schoolFacultyName;
|
||||
|
||||
@ApiModelProperty("专业对象")
|
||||
SchoolMajor schoolMajor;
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
package com.sztzjy.linkCommerce.entity.importDto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class StudentImportDTO {
|
||||
@ApiModelProperty("院校名称")
|
||||
private String schoolName;
|
||||
|
||||
@ApiModelProperty("院系名称")
|
||||
private String schoolFacultyName;
|
||||
|
||||
@ApiModelProperty("专业名称")
|
||||
private String schoolMajorName;
|
||||
|
||||
@ApiModelProperty("班级名称")
|
||||
private String schoolClassName;
|
||||
|
||||
@ApiModelProperty("学生姓名")
|
||||
private String studentName;
|
||||
|
||||
@ApiModelProperty("学号")
|
||||
private String userName;
|
||||
|
||||
@ApiModelProperty("电话")
|
||||
private String phone;
|
||||
|
||||
@ApiModelProperty("邮箱")
|
||||
private String email;
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package com.sztzjy.linkCommerce.entity.importDto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class TeacherImportDTO {
|
||||
@ApiModelProperty("院校名称")
|
||||
private String schoolName;
|
||||
|
||||
@ApiModelProperty("院系名称")
|
||||
private String schoolFacultyName;
|
||||
|
||||
@ApiModelProperty("专业名称")
|
||||
private String schoolMajorName;
|
||||
|
||||
@ApiModelProperty("教师姓名")
|
||||
private String teacherName;
|
||||
|
||||
@ApiModelProperty("工号")
|
||||
private String userName;
|
||||
|
||||
@ApiModelProperty("电话")
|
||||
private String phone;
|
||||
|
||||
@ApiModelProperty("邮箱")
|
||||
private String email;
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package com.sztzjy.linkCommerce.service;
|
||||
|
||||
import com.sztzjy.linkCommerce.entity.importDto.StudentImportDTO;
|
||||
import com.sztzjy.linkCommerce.entity.importDto.TeacherImportDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ImportService {
|
||||
void processTeacherImport(List<TeacherImportDTO> teacherList);
|
||||
|
||||
void processStudentImport(List<StudentImportDTO> studentList);
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
package com.sztzjy.linkCommerce.service;
|
||||
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.sztzjy.linkCommerce.entity.School;
|
||||
import com.sztzjy.linkCommerce.entity.dto.SchoolClassDto;
|
||||
import com.sztzjy.linkCommerce.entity.dto.SchoolFacultyDto;
|
||||
import com.sztzjy.linkCommerce.entity.dto.SchoolMajorDto;
|
||||
|
||||
public interface SchoolService {
|
||||
Integer addSchool(School school);
|
||||
|
||||
Integer updateSchool(School school);
|
||||
|
||||
Integer deleteSchool(String schoolId);
|
||||
|
||||
PageInfo<SchoolFacultyDto> seleteSchoolFaculty(Integer index, Integer size, String schoolId, String schoolFacultyName);
|
||||
|
||||
PageInfo<SchoolMajorDto> seleteSchoolMajor(Integer index, Integer size, String schoolId, String schoolMajorName, String schoolFacultyId);
|
||||
|
||||
PageInfo<SchoolClassDto> seleteSchoolClass(Integer index, Integer size, String schoolId, String className, String classSn, String schoolMajorId);
|
||||
|
||||
boolean existsBySchoolMajorName(String schoolName,String schoolMajorName, String schoolFacultyName);
|
||||
|
||||
boolean existsBySchoolClassName(String schoolName, String schoolMajorName, String schoolFacultyName, String schoolClassName);
|
||||
|
||||
String selectSchoolIdBySchoolName(String schoolName);
|
||||
|
||||
String selectFacultyIdBySchoolIdAndFacultyName(String schoolId, String schoolFacultyName);
|
||||
|
||||
String selectMajorIdByFacultyIdAndMajorName(String schoolFacultyId, String schoolMajorName);
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
package com.sztzjy.linkCommerce.service;
|
||||
|
||||
public interface UserInfoService {
|
||||
|
||||
boolean existsByUserName(String userName);
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package com.sztzjy.linkCommerce.service;
|
||||
|
||||
import com.sztzjy.linkCommerce.entity.importDto.StudentImportDTO;
|
||||
import com.sztzjy.linkCommerce.entity.importDto.TeacherImportDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ValidateService {
|
||||
List<String> validateTeacherData(List<TeacherImportDTO> teacherList);
|
||||
|
||||
List<String> validateStudentData(List<StudentImportDTO> studentList);
|
||||
}
|
||||
@ -0,0 +1,66 @@
|
||||
package com.sztzjy.linkCommerce.service.impl;
|
||||
|
||||
import com.sztzjy.linkCommerce.entity.Userinfo;
|
||||
import com.sztzjy.linkCommerce.entity.importDto.StudentImportDTO;
|
||||
import com.sztzjy.linkCommerce.entity.importDto.TeacherImportDTO;
|
||||
import com.sztzjy.linkCommerce.mapper.UserinfoMapper;
|
||||
import com.sztzjy.linkCommerce.service.ImportService;
|
||||
import com.sztzjy.linkCommerce.service.SchoolService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
//批量导入相关
|
||||
@Service
|
||||
public class ImportServiceImpl implements ImportService {
|
||||
@Autowired
|
||||
SchoolService schoolService;
|
||||
@Autowired
|
||||
UserinfoMapper userInfoMapper;
|
||||
@Override
|
||||
public void processTeacherImport(List<TeacherImportDTO> teacherList) {
|
||||
for (int i = 0; i < teacherList.size(); i++) {
|
||||
TeacherImportDTO teacherImportDTO = teacherList.get(i);
|
||||
Userinfo userInfo = new Userinfo();
|
||||
userInfo.setUserId(UUID.randomUUID().toString());
|
||||
userInfo.setName(teacherImportDTO.getTeacherName());
|
||||
userInfo.setUsername(teacherImportDTO.getUserName());
|
||||
userInfo.setPassword("123qwe");
|
||||
userInfo.setPhone(teacherImportDTO.getPhone());
|
||||
userInfo.setEmail(teacherImportDTO.getEmail());
|
||||
userInfo.setCreateTime(new Date());
|
||||
userInfo.setRole(3);
|
||||
userInfo.setSchoolId(schoolService.selectSchoolIdBySchoolName(teacherImportDTO.getSchoolName()));
|
||||
userInfo.setSchoolFacultyId(schoolService.selectFacultyIdBySchoolIdAndFacultyName(userInfo.getSchoolId(),teacherImportDTO.getSchoolFacultyName()));
|
||||
userInfo.setSchoolMajorId(schoolService.selectMajorIdByFacultyIdAndMajorName(userInfo.getSchoolFacultyId(),teacherImportDTO.getSchoolMajorName()));
|
||||
userInfo.setSchoolClassId(null);
|
||||
userInfo.setCodeFrom("导入");
|
||||
userInfoMapper.insert(userInfo);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processStudentImport(List<StudentImportDTO> studentList) {
|
||||
for (int i = 0; i < studentList.size(); i++) {
|
||||
StudentImportDTO studentImportDTO = studentList.get(i);
|
||||
Userinfo userInfo = new Userinfo();
|
||||
userInfo.setUserId(UUID.randomUUID().toString());
|
||||
userInfo.setName(studentImportDTO.getStudentName());
|
||||
userInfo.setUsername(studentImportDTO.getUserName());
|
||||
userInfo.setPassword("123qwe");
|
||||
userInfo.setPhone(studentImportDTO.getPhone());
|
||||
userInfo.setEmail(studentImportDTO.getEmail());
|
||||
userInfo.setCreateTime(new Date());
|
||||
userInfo.setRole(4);
|
||||
userInfo.setSchoolId(schoolService.selectSchoolIdBySchoolName(studentImportDTO.getSchoolName()));
|
||||
userInfo.setSchoolFacultyId(schoolService.selectFacultyIdBySchoolIdAndFacultyName(userInfo.getSchoolId(),studentImportDTO.getSchoolFacultyName()));
|
||||
userInfo.setSchoolMajorId(schoolService.selectMajorIdByFacultyIdAndMajorName(userInfo.getSchoolFacultyId(),studentImportDTO.getSchoolMajorName()));
|
||||
userInfo.setSchoolClassId(null);
|
||||
userInfo.setCodeFrom("导入");
|
||||
userInfoMapper.insert(userInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package com.sztzjy.linkCommerce.service.impl;
|
||||
|
||||
import com.sztzjy.linkCommerce.entity.Userinfo;
|
||||
import com.sztzjy.linkCommerce.entity.UserinfoExample;
|
||||
import com.sztzjy.linkCommerce.mapper.*;
|
||||
|
||||
import com.sztzjy.linkCommerce.service.UserInfoService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,185 @@
|
||||
package com.sztzjy.linkCommerce.service.impl;
|
||||
|
||||
import com.sztzjy.linkCommerce.entity.importDto.StudentImportDTO;
|
||||
import com.sztzjy.linkCommerce.entity.importDto.TeacherImportDTO;
|
||||
import com.sztzjy.linkCommerce.service.SchoolService;
|
||||
import com.sztzjy.linkCommerce.service.UserInfoService;
|
||||
import com.sztzjy.linkCommerce.service.ValidateService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
//数据校验
|
||||
@Service
|
||||
public class ValidateServiceImpl implements ValidateService {
|
||||
@Autowired
|
||||
SchoolService schoolService;
|
||||
@Autowired
|
||||
UserInfoService userInfoService;
|
||||
|
||||
@Override
|
||||
public List<String> validateTeacherData(List<TeacherImportDTO> teacherList) {
|
||||
List<String> errors = new ArrayList<>();
|
||||
|
||||
if (teacherList == null || teacherList.isEmpty()) {
|
||||
errors.add("Excel中没有数据");
|
||||
return errors;
|
||||
}
|
||||
|
||||
// 用于检查工号重复
|
||||
Set<String> teacherNos = new HashSet<>();
|
||||
|
||||
for (int i = 0; i < teacherList.size(); i++) {
|
||||
TeacherImportDTO teacher = teacherList.get(i);
|
||||
int rowNum = i + 2; // Excel行号(标题行+1)
|
||||
|
||||
// 1. 校验院校名称
|
||||
if (StringUtils.isBlank(teacher.getSchoolName())) {
|
||||
errors.add("第" + rowNum + "行: 院校名称不能为空");
|
||||
}
|
||||
|
||||
// 2. 校验院系名称
|
||||
if (StringUtils.isBlank(teacher.getSchoolFacultyName())) {
|
||||
errors.add("第" + rowNum + "行: 院系名称不能为空");
|
||||
}
|
||||
|
||||
// 3. 校验专业名称
|
||||
if (StringUtils.isBlank(teacher.getSchoolMajorName())) {
|
||||
errors.add("第" + rowNum + "行: 专业名称不能为空");
|
||||
} else if (!schoolService.existsBySchoolMajorName(teacher.getSchoolName(),teacher.getSchoolMajorName(), teacher.getSchoolFacultyName())) {
|
||||
errors.add("第" + rowNum + "行: 专业'" + teacher.getSchoolMajorName() +
|
||||
"'在院系'" + teacher.getSchoolFacultyName() + "'下不存在");
|
||||
}
|
||||
|
||||
// 4. 校验教师姓名
|
||||
if (StringUtils.isBlank(teacher.getTeacherName())) {
|
||||
errors.add("第" + rowNum + "行: 教师姓名不能为空");
|
||||
}
|
||||
|
||||
// 5. 校验工号
|
||||
if (StringUtils.isBlank(teacher.getUserName())) {
|
||||
errors.add("第" + rowNum + "行: 工号不能为空");
|
||||
} else {
|
||||
// 5.1 检查是否为数字
|
||||
if (!teacher.getUserName().matches("\\d+")) {
|
||||
errors.add("第" + rowNum + "行: 工号必须为数字");
|
||||
}
|
||||
|
||||
// 5.2 检查是否重复(在当前文件中)
|
||||
if (teacherNos.contains(teacher.getUserName())) {
|
||||
errors.add("第" + rowNum + "行: 工号" + teacher.getUserName() + "工号已存在");
|
||||
}
|
||||
teacherNos.add(teacher.getUserName());
|
||||
|
||||
// 5.3 检查是否已存在于数据库(异步检查,避免频繁查询)
|
||||
if (userInfoService.existsByUserName(teacher.getUserName())) {
|
||||
errors.add("第" + rowNum + "行: 工号" + teacher.getUserName() + "已存在");
|
||||
}
|
||||
}
|
||||
|
||||
// 6. 校验电话
|
||||
if (StringUtils.isNotBlank(teacher.getPhone())) {
|
||||
if (!teacher.getPhone().matches("^1[3-9]\\d{9}$")) {
|
||||
errors.add("第" + rowNum + "行: 电话格式不正确");
|
||||
}
|
||||
}
|
||||
|
||||
// 7. 校验邮箱
|
||||
if (StringUtils.isNotBlank(teacher.getEmail())) {
|
||||
if (!teacher.getEmail().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$")) {
|
||||
errors.add("第" + rowNum + "行: 邮箱格式不正确");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> validateStudentData(List<StudentImportDTO> studentList) {
|
||||
List<String> errors = new ArrayList<>();
|
||||
|
||||
if (studentList == null || studentList.isEmpty()) {
|
||||
errors.add("Excel中没有数据");
|
||||
return errors;
|
||||
}
|
||||
|
||||
// 用于检查工号重复
|
||||
Set<String> teacherNos = new HashSet<>();
|
||||
|
||||
for (int i = 0; i < studentList.size(); i++) {
|
||||
StudentImportDTO student = studentList.get(i);
|
||||
int rowNum = i + 2; // Excel行号(标题行+1)
|
||||
|
||||
// 1. 校验院校名称
|
||||
if (StringUtils.isBlank(student.getSchoolName())) {
|
||||
errors.add("第" + rowNum + "行: 院校名称不能为空");
|
||||
}
|
||||
|
||||
// 2. 校验院系名称
|
||||
if (StringUtils.isBlank(student.getSchoolFacultyName())) {
|
||||
errors.add("第" + rowNum + "行: 院系名称不能为空");
|
||||
}
|
||||
|
||||
// 3. 校验专业名称
|
||||
if (StringUtils.isBlank(student.getSchoolMajorName())) {
|
||||
errors.add("第" + rowNum + "行: 专业名称不能为空");
|
||||
}
|
||||
|
||||
// 4. 校验班级名称
|
||||
if (StringUtils.isBlank(student.getSchoolClassName())) {
|
||||
errors.add("第" + rowNum + "行: 专业名称不能为空");
|
||||
} else if (!schoolService.existsBySchoolClassName(student.getSchoolName(),student.getSchoolMajorName(), student.getSchoolFacultyName(),student.getSchoolClassName())) {
|
||||
errors.add("第" + rowNum + "行: 班级'" + student.getSchoolClassName() +
|
||||
"'在专业'" + student.getSchoolMajorName() + "'下不存在");
|
||||
}
|
||||
|
||||
// 4. 校验教师姓名
|
||||
if (StringUtils.isBlank(student.getStudentName())) {
|
||||
errors.add("第" + rowNum + "行: 学生姓名不能为空");
|
||||
}
|
||||
|
||||
// 5. 校验工号
|
||||
if (StringUtils.isBlank(student.getUserName())) {
|
||||
errors.add("第" + rowNum + "行: 学号号不能为空");
|
||||
} else {
|
||||
// 5.1 检查是否为数字
|
||||
if (!student.getUserName().matches("\\d+")) {
|
||||
errors.add("第" + rowNum + "行: 学号必须为数字");
|
||||
}
|
||||
|
||||
// 5.2 检查是否重复(在当前文件中)
|
||||
if (teacherNos.contains(student.getUserName())) {
|
||||
errors.add("第" + rowNum + "行: 学号" + student.getUserName() + "学号已存在");
|
||||
}
|
||||
teacherNos.add(student.getUserName());
|
||||
|
||||
// 5.3 检查是否已存在于数据库(异步检查,避免频繁查询)
|
||||
if (userInfoService.existsByUserName(student.getUserName())) {
|
||||
errors.add("第" + rowNum + "行: 学号" + student.getUserName() + "已存在");
|
||||
}
|
||||
}
|
||||
|
||||
// 6. 校验电话
|
||||
if (StringUtils.isNotBlank(student.getPhone())) {
|
||||
if (!student.getPhone().matches("^1[3-9]\\d{9}$")) {
|
||||
errors.add("第" + rowNum + "行: 电话格式不正确");
|
||||
}
|
||||
}
|
||||
|
||||
// 7. 校验邮箱
|
||||
if (StringUtils.isNotBlank(student.getEmail())) {
|
||||
if (!student.getEmail().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$")) {
|
||||
errors.add("第" + rowNum + "行: 邮箱格式不正确");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,45 @@
|
||||
package com.sztzjy.linkCommerce.util;
|
||||
|
||||
import net.sourceforge.pinyin4j.PinyinHelper;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class Pinyin4jUtil {
|
||||
|
||||
//将汉族首字母返回
|
||||
public String convertToPinyin(String chinese) {
|
||||
StringBuilder pinyinBuilder = new StringBuilder();
|
||||
|
||||
for (char c : chinese.toCharArray()) {
|
||||
// 判断是否为汉字字符
|
||||
String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c);
|
||||
if (pinyins != null && pinyins.length > 0) {
|
||||
// 取拼音的第一个发音并转换为小写
|
||||
pinyinBuilder.append(pinyins[0].toLowerCase().charAt(0)); // 仅取第一个拼音的第一个字母
|
||||
} else {
|
||||
// 追加非汉字字符(如数字和字母)
|
||||
pinyinBuilder.append(c);
|
||||
}
|
||||
}
|
||||
|
||||
return pinyinBuilder.toString();
|
||||
}
|
||||
|
||||
// public static void main(String[] args) {
|
||||
// String chinese = "广州科技1号一周大学";
|
||||
// StringBuilder pinyinBuilder = new StringBuilder();
|
||||
//
|
||||
// for (char c : chinese.toCharArray()) {
|
||||
// // 判断是否为汉字字符
|
||||
// String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c);
|
||||
// if (pinyins != null && pinyins.length > 0) {
|
||||
// // 取拼音的第一个发音并转换为小写
|
||||
// pinyinBuilder.append(pinyins[0].toLowerCase().charAt(0)); // 仅取第一个拼音的第一个字母
|
||||
// } else {
|
||||
// // 追加非汉字字符(如数字和字母)
|
||||
// pinyinBuilder.append(c);
|
||||
// }
|
||||
// }
|
||||
// System.out.println(pinyinBuilder.toString().trim());
|
||||
// }
|
||||
}
|
||||
Loading…
Reference in New Issue