教师端管理功能

bugfix/ai-assessment-evidence-rescore
yz 1 year ago
parent 20de6611fd
commit 4cd09ee93c

@ -241,7 +241,11 @@
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version> <!-- 改为 2.5.0 -->
</dependency>
<!-- 情感分析--> <!-- 情感分析-->
<dependency> <dependency>

@ -16,46 +16,14 @@ public class Constant {
*/ */
public static final String BASIC = "Basic"; public static final String BASIC = "Basic";
public static final String PRO_GYQDGL="供应渠道管理";
public static final String[] MODULES={"数字贸易概论","数字贸易标准和规则","数字贸易法律法规","数字贸易知识产权保护","数字贸易技术","数字产品物流","数字贸易金融", public static final String MODULE_CGXQYC="采购需求预测";
"数字产品贸易","数字技术贸易","数字服务贸易","数据贸易","数字贸易营销","aigc数字运营"}; public static final String MODULE_CGCPDW="采购产品定位";
public static final String MODULE_GYSPGYXZ="供应商评估与选择";
public static final String[] PROJECTS={"项目一","项目二","项目三","项目四","项目五","项目六","项目七", public static final String PRO_CPPGYKH="产品评估与考核";
"项目八","项目九","项目十","项目十","项目十二","项目十三"}; public static final String MODULE_CPBXFX="产品表现分析";
public static final String MODULE_CPWTZD="产品问题诊断";
public static final String PRO_XXSC="学习时长"; public static final String MODULE_PNJGYH="品类结构优化";
public static final String PRO_ZYXX="资源学习";
public static final String PRO_XXCP="学习测评";
public static final String PRO_SYSX="实验实训";
public static final String PRO_SXBG="实训报告";
public static final String DANDUGOUMAI = "单独购买";
public static final String PINDUANGOUMAI = "我要开团";
public static final String COMMENT_NUMBER="评论数";
public static final String BROWSE_NUMBER="被浏览数";
public static final String ZSGY_TCHMODULE = "学习时长";
public static final String ZYXX_TCHMODULE = "资源学习";
public static final String XXCP_TCHMODULE = "学习测评";
public static final String SYSX_TCHMODULE = "实验实训";
public static final String SYBG_TCHMODULE = "实验报告";
public static final String PRO_XXMB="学习目标";
public static final String PRO_LLZS="理论知识";
public static final String PRO_RWZJ="任务总结";
public static final String PRO_KHTS="课后提升";
public static final String CODE = "code";
public static final String IP = "ip";
public static final String END = "END";
public static final String READY = "READY";
public static final String MANUAL = "manual";
public static final String YONGHUSHUXINGBIAO= "客户细分数据表"; public static final String YONGHUSHUXINGBIAO= "客户细分数据表";

@ -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;
}
}
}

@ -69,6 +69,27 @@ public class Userinfo {
@ApiModelProperty(notes = "班级ID(关联班级表,教师账号为null)") @ApiModelProperty(notes = "班级ID(关联班级表,教师账号为null)")
private String schoolClassId; private String schoolClassId;
@ApiModelProperty("班级名称 回显用")
private String className;
@ApiModelProperty("学校名称 回显用")
private String schoolName;
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getSchoolName() {
return schoolName;
}
public void setSchoolName(String schoolName) {
this.schoolName = schoolName;
}
public String getUserId() { public String getUserId() {
return userId; return userId;
} }

@ -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;
}

@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper;
import com.sztzjy.linkCommerce.entity.CgxqycAnswer; import com.sztzjy.linkCommerce.entity.CgxqycAnswer;
import com.sztzjy.linkCommerce.entity.CgxqycAnswerExample; import com.sztzjy.linkCommerce.entity.CgxqycAnswerExample;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface CgxqycAnswerMapper { public interface CgxqycAnswerMapper {
long countByExample(CgxqycAnswerExample example); long countByExample(CgxqycAnswerExample example);

@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper;
import com.sztzjy.linkCommerce.entity.CgxqycStuAnswer; import com.sztzjy.linkCommerce.entity.CgxqycStuAnswer;
import com.sztzjy.linkCommerce.entity.CgxqycStuAnswerExample; import com.sztzjy.linkCommerce.entity.CgxqycStuAnswerExample;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface CgxqycStuAnswerMapper { public interface CgxqycStuAnswerMapper {
long countByExample(CgxqycStuAnswerExample example); long countByExample(CgxqycStuAnswerExample example);

@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper;
import com.sztzjy.linkCommerce.entity.SchoolClass; import com.sztzjy.linkCommerce.entity.SchoolClass;
import com.sztzjy.linkCommerce.entity.SchoolClassExample; import com.sztzjy.linkCommerce.entity.SchoolClassExample;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface SchoolClassMapper { public interface SchoolClassMapper {
long countByExample(SchoolClassExample example); long countByExample(SchoolClassExample example);

@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper;
import com.sztzjy.linkCommerce.entity.SchoolFaculty; import com.sztzjy.linkCommerce.entity.SchoolFaculty;
import com.sztzjy.linkCommerce.entity.SchoolFacultyExample; import com.sztzjy.linkCommerce.entity.SchoolFacultyExample;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface SchoolFacultyMapper { public interface SchoolFacultyMapper {
long countByExample(SchoolFacultyExample example); long countByExample(SchoolFacultyExample example);

@ -3,8 +3,11 @@ package com.sztzjy.linkCommerce.mapper;
import com.sztzjy.linkCommerce.entity.SchoolMajor; import com.sztzjy.linkCommerce.entity.SchoolMajor;
import com.sztzjy.linkCommerce.entity.SchoolMajorExample; import com.sztzjy.linkCommerce.entity.SchoolMajorExample;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.sztzjy.linkCommerce.entity.dto.SchoolMajorDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface SchoolMajorMapper { public interface SchoolMajorMapper {
long countByExample(SchoolMajorExample example); long countByExample(SchoolMajorExample example);
@ -27,4 +30,6 @@ public interface SchoolMajorMapper {
int updateByPrimaryKeySelective(SchoolMajor record); int updateByPrimaryKeySelective(SchoolMajor record);
int updateByPrimaryKey(SchoolMajor record); int updateByPrimaryKey(SchoolMajor record);
List<SchoolMajorDto> findSchoolMajorList(@Param("schoolMajorName") String schoolMajorName,@Param("schoolFacultyId")String schoolFacultyId);
} }

@ -3,8 +3,12 @@ package com.sztzjy.linkCommerce.mapper;
import com.sztzjy.linkCommerce.entity.School; import com.sztzjy.linkCommerce.entity.School;
import com.sztzjy.linkCommerce.entity.SchoolExample; import com.sztzjy.linkCommerce.entity.SchoolExample;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface SchoolMapper { public interface SchoolMapper {
long countByExample(SchoolExample example); long countByExample(SchoolExample example);
@ -27,4 +31,7 @@ public interface SchoolMapper {
int updateByPrimaryKeySelective(School record); int updateByPrimaryKeySelective(School record);
int updateByPrimaryKey(School record); int updateByPrimaryKey(School record);
@Select("select school_name from school where school_id =#{schoolId}")
String selectSchoolNameById(@Param("schoolId") String schoolId);
} }

@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper;
import com.sztzjy.linkCommerce.entity.StuGrade; import com.sztzjy.linkCommerce.entity.StuGrade;
import com.sztzjy.linkCommerce.entity.StuGradeExample; import com.sztzjy.linkCommerce.entity.StuGradeExample;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface StuGradeMapper { public interface StuGradeMapper {
long countByExample(StuGradeExample example); long countByExample(StuGradeExample example);

@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper;
import com.sztzjy.linkCommerce.entity.Userinfo; import com.sztzjy.linkCommerce.entity.Userinfo;
import com.sztzjy.linkCommerce.entity.UserinfoExample; import com.sztzjy.linkCommerce.entity.UserinfoExample;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface UserinfoMapper { public interface UserinfoMapper {
long countByExample(UserinfoExample example); long countByExample(UserinfoExample example);

@ -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,236 @@
package com.sztzjy.linkCommerce.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sztzjy.linkCommerce.entity.*;
import com.sztzjy.linkCommerce.entity.dto.SchoolClassDto;
import com.sztzjy.linkCommerce.entity.dto.SchoolFacultyDto;
import com.sztzjy.linkCommerce.entity.dto.SchoolMajorDto;
import com.sztzjy.linkCommerce.mapper.SchoolClassMapper;
import com.sztzjy.linkCommerce.mapper.SchoolFacultyMapper;
import com.sztzjy.linkCommerce.mapper.SchoolMajorMapper;
import com.sztzjy.linkCommerce.mapper.SchoolMapper;
import com.sztzjy.linkCommerce.service.SchoolService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@Service
public class SchoolServiceImpl implements SchoolService {
@Autowired
SchoolMapper schoolMapper;
@Autowired
SchoolFacultyMapper schoolFacultyMapper;
@Autowired
SchoolMajorMapper schoolMajorMapper;
@Autowired
SchoolClassMapper schoolClassMapper;
@Override
public Integer addSchool(School school) {
//新增院校
String schoolId = UUID.randomUUID().toString();
school.setSchoolId(schoolId);
int insert = schoolMapper.insert(school);
return insert;
}
@Override
public Integer updateSchool(School school) {
int i = schoolMapper.updateByPrimaryKey(school);
return i;
}
@Override
public Integer deleteSchool(String schoolId) {
int i = schoolMapper.deleteByPrimaryKey(schoolId);
return i;
}
@Override
public PageInfo<SchoolFacultyDto> seleteSchoolFaculty(Integer index, Integer size, String schoolId, String schoolFacultyName) {
PageHelper.startPage(index, size);
// 查询院系信息,假设您有相应的 DAO 或 Mapper 可以用来执行查询
SchoolFacultyExample schoolFacultyExample = new SchoolFacultyExample();
SchoolFacultyExample.Criteria criteria = schoolFacultyExample.createCriteria();
if (schoolId != null) {
criteria.andSchoolIdEqualTo(schoolId);
}
if (schoolFacultyName != null) {
criteria.andSchoolFacultyNameLike("%" + schoolFacultyName + "%");
}
List<SchoolFaculty> schoolFaculties = schoolFacultyMapper.selectByExample(schoolFacultyExample);
// 将院系信息转换为 DTO
List<SchoolFacultyDto> dtoList = schoolFaculties.stream()
.map(schoolFaculty -> {
SchoolFacultyDto dto = new SchoolFacultyDto();
dto.setSchoolFaculty(schoolFaculty);
// 设置信息学校名称,假设在 schoolFaculty 对象中有 school_id,您可以通过服务获取学校名称
String schoolName = schoolMapper.selectSchoolNameById(schoolFaculty.getSchoolId());
dto.setSchoolName(schoolName);
return dto;
})
.collect(Collectors.toList());
// 创建 PageInfo 对象,将 DTO 列表封装成分页结果
return new PageInfo<>(dtoList);
}
@Override
public PageInfo<SchoolMajorDto> seleteSchoolMajor(Integer index, Integer size, String schoolId, String schoolMajorName, String schoolFacultyId) {
// 使用 PageHelper 进行分页
PageHelper.startPage(index, size);
// 调用 Mapper 查询数据
List<SchoolMajorDto> schoolMajorList = schoolMajorMapper.findSchoolMajorList(schoolMajorName, schoolFacultyId);
// 返回分页结果
return new PageInfo<>(schoolMajorList);
}
@Override
public PageInfo<SchoolClassDto> seleteSchoolClass(Integer index, Integer size, String schoolId, String className, String classSn, String schoolMajorId) {
PageHelper.startPage(index, size);
// 查询院系信息,假设您有相应的 DAO 或 Mapper 可以用来执行查询
SchoolClassExample schoolClassExample = new SchoolClassExample();
SchoolClassExample.Criteria criteria = schoolClassExample.createCriteria();
if (className != null) {
criteria.andClassNameLike("%" + className + "%");
}
if (classSn != null) {
criteria.andClassSnEqualTo(classSn);
}
if (schoolMajorId != null) {
criteria.andSchoolMajorIdEqualTo(schoolMajorId);
}
List<SchoolClass> schoolClasses = schoolClassMapper.selectByExample(schoolClassExample);
// 将院系信息转换为 DTO
List<SchoolClassDto> dtoList = schoolClasses.stream()
.map(schoolClass -> {
SchoolClassDto dto = new SchoolClassDto();
dto.setSchoolClass(schoolClass);
String schoolName = schoolMapper.selectSchoolNameById(schoolId);
dto.setSchoolName(schoolName);
return dto;
})
.collect(Collectors.toList());
// 创建 PageInfo 对象,将 DTO 列表封装成分页结果
return new PageInfo<>(dtoList);
}
@Override
public boolean existsBySchoolMajorName(String schoolName, String schoolMajorName, String schoolFacultyName) {
SchoolExample schoolExample = new SchoolExample();
schoolExample.createCriteria().andSchoolNameEqualTo(schoolName);
List<School> schoolList = schoolMapper.selectByExample(schoolExample);
if (schoolList.isEmpty() || schoolList == null) {
return false;
} else {
School school = schoolList.get(0);
String schoolId = school.getSchoolId();
SchoolFacultyExample schoolFacultyExample = new SchoolFacultyExample();
schoolFacultyExample.createCriteria().andSchoolIdEqualTo(schoolId).andSchoolFacultyNameEqualTo(schoolFacultyName);
List<SchoolFaculty> schoolFacultyList = schoolFacultyMapper.selectByExample(schoolFacultyExample);
if (schoolFacultyList.isEmpty() || schoolFacultyList == null) {
return false;
} else {
SchoolFaculty schoolFaculty = schoolFacultyList.get(0);
String schoolFacultyId = schoolFaculty.getSchoolFacultyId();
SchoolMajorExample schoolMajorExample = new SchoolMajorExample();
schoolMajorExample.createCriteria().andSchoolMajorNameEqualTo(schoolMajorName).andSchoolFacultyIdEqualTo(schoolFacultyId);
List<SchoolMajor> schoolMajorList = schoolMajorMapper.selectByExample(schoolMajorExample);
if (schoolMajorList.isEmpty() || schoolMajorList == null) {
return false;
} else {
return true;
}
}
}
}
@Override
public boolean existsBySchoolClassName(String schoolName, String schoolMajorName, String schoolFacultyName, String schoolClassName) {
SchoolExample schoolExample = new SchoolExample();
schoolExample.createCriteria().andSchoolNameEqualTo(schoolName);
List<School> schoolList = schoolMapper.selectByExample(schoolExample);
if (schoolList.isEmpty() || schoolList == null) {
return false;
} else {
School school = schoolList.get(0);
String schoolId = school.getSchoolId();
SchoolFacultyExample schoolFacultyExample = new SchoolFacultyExample();
schoolFacultyExample.createCriteria().andSchoolIdEqualTo(schoolId).andSchoolFacultyNameEqualTo(schoolFacultyName);
List<SchoolFaculty> schoolFacultyList = schoolFacultyMapper.selectByExample(schoolFacultyExample);
if (schoolFacultyList.isEmpty() || schoolFacultyList == null) {
return false;
} else {
SchoolFaculty schoolFaculty = schoolFacultyList.get(0);
String schoolFacultyId = schoolFaculty.getSchoolFacultyId();
SchoolMajorExample schoolMajorExample = new SchoolMajorExample();
schoolMajorExample.createCriteria().andSchoolMajorNameEqualTo(schoolMajorName).andSchoolFacultyIdEqualTo(schoolFacultyId);
List<SchoolMajor> schoolMajorList = schoolMajorMapper.selectByExample(schoolMajorExample);
if (schoolMajorList.isEmpty() || schoolMajorList == null) {
return false;
} else {
SchoolMajor schoolMajor = schoolMajorList.get(0);
String schoolMajorId = schoolMajor.getSchoolMajorId();
SchoolClassExample schoolClassExample = new SchoolClassExample();
schoolClassExample.createCriteria().andClassNameEqualTo(schoolClassName).andSchoolMajorIdEqualTo(schoolMajorId);
List<SchoolClass> schoolClasseList = schoolClassMapper.selectByExample(schoolClassExample);
if(schoolClasseList.isEmpty() || schoolClasseList==null){
return false;
}else {
return true;
}
}
}
}
}
//根据学校名称查询学校ID
@Override
public String selectSchoolIdBySchoolName(String schoolName) {
SchoolExample schoolExample = new SchoolExample();
schoolExample.createCriteria().andSchoolNameEqualTo(schoolName);
List<School> schoolList = schoolMapper.selectByExample(schoolExample);
if (schoolList.isEmpty() || schoolList == null) {
return null;
} else {
return schoolList.get(0).getSchoolId();
}
}
//根据学校ID和院系名查询院系ID
@Override
public String selectFacultyIdBySchoolIdAndFacultyName(String schoolId, String schoolFacultyName) {
SchoolFacultyExample schoolFacultyExample = new SchoolFacultyExample();
schoolFacultyExample.createCriteria().andSchoolIdEqualTo(schoolId).andSchoolFacultyNameEqualTo(schoolFacultyName);
List<SchoolFaculty> schoolFacultyList = schoolFacultyMapper.selectByExample(schoolFacultyExample);
if (schoolFacultyList.isEmpty() || schoolFacultyList == null) {
return null;
} else {
return schoolFacultyList.get(0).getSchoolFacultyId();
}
}
//根据院系ID和专业名称查询专业ID
@Override
public String selectMajorIdByFacultyIdAndMajorName(String schoolFacultyId, String schoolMajorName) {
SchoolMajorExample schoolMajorExample = new SchoolMajorExample();
schoolMajorExample.createCriteria().andSchoolMajorNameEqualTo(schoolMajorName).andSchoolFacultyIdEqualTo(schoolFacultyId);
List<SchoolMajor> schoolMajorList = schoolMajorMapper.selectByExample(schoolMajorExample);
if (schoolMajorList.isEmpty() || schoolMajorList == null) {
return null;
} else {
return schoolMajorList.get(0).getSchoolMajorId();
}
}
}

@ -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());
// }
}

@ -241,4 +241,28 @@
create_time = #{createTime,jdbcType=TIMESTAMP} create_time = #{createTime,jdbcType=TIMESTAMP}
where school_major_id = #{schoolMajorId,jdbcType=VARCHAR} where school_major_id = #{schoolMajorId,jdbcType=VARCHAR}
</update> </update>
<select id="findSchoolMajorList" resultMap="SchoolMajorDtoResultMap">
SELECT
s.school_name AS school_name,
sf.school_faculty_name AS school_faculty_name,
m.school_major_id AS school_major_id,
m.school_faculty_id AS school_faculty_id,
m.school_major_name AS school_major_name,
m.school_major_contact AS school_major_contact,
m.school_major_contact_tel AS school_major_contact_tel,
m.create_time AS create_time
FROM
school_major m
JOIN
school_faculty sf ON m.school_faculty_id = sf.school_faculty_id
WHERE
m.status !=2
<if test="schoolMajorName != null and schoolMajorName != ''">
AND m.school_major_name LIKE CONCAT('%', #{schoolMajorName}, '%')
</if>
<if test="schoolFacultyId != null and schoolFacultyId != ''">
AND m.school_faculty_id LIKE CONCAT('%', #{schoolFacultyId}, '%')
</if>
</select>
</mapper> </mapper>
Loading…
Cancel
Save