diff --git a/pom.xml b/pom.xml index 9d0f048..4a3c5ff 100644 --- a/pom.xml +++ b/pom.xml @@ -241,7 +241,11 @@ - + + com.belerweb + pinyin4j + 2.5.0 + diff --git a/src/main/java/com/sztzjy/linkCommerce/config/Constant.java b/src/main/java/com/sztzjy/linkCommerce/config/Constant.java index 492d7c6..8241226 100644 --- a/src/main/java/com/sztzjy/linkCommerce/config/Constant.java +++ b/src/main/java/com/sztzjy/linkCommerce/config/Constant.java @@ -16,46 +16,14 @@ public class Constant { */ public static final String BASIC = "Basic"; - - public static final String[] MODULES={"数字贸易概论","数字贸易标准和规则","数字贸易法律法规","数字贸易知识产权保护","数字贸易技术","数字产品物流","数字贸易金融", - "数字产品贸易","数字技术贸易","数字服务贸易","数据贸易","数字贸易营销","aigc数字运营"}; - - public static final String[] PROJECTS={"项目一","项目二","项目三","项目四","项目五","项目六","项目七", - "项目八","项目九","项目十","项目十","项目十二","项目十三"}; - - public static final String PRO_XXSC="学习时长"; - 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 PRO_GYQDGL="供应渠道管理"; + public static final String MODULE_CGXQYC="采购需求预测"; + public static final String MODULE_CGCPDW="采购产品定位"; + public static final String MODULE_GYSPGYXZ="供应商评估与选择"; + public static final String PRO_CPPGYKH="产品评估与考核"; + public static final String MODULE_CPBXFX="产品表现分析"; + public static final String MODULE_CPWTZD="产品问题诊断"; + public static final String MODULE_PNJGYH="品类结构优化"; public static final String YONGHUSHUXINGBIAO= "客户细分数据表"; diff --git a/src/main/java/com/sztzjy/linkCommerce/controller/stu/CgxqycController.java b/src/main/java/com/sztzjy/linkCommerce/controller/stu/CgxqycController.java new file mode 100644 index 0000000..1c954f5 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/controller/stu/CgxqycController.java @@ -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 selectCgxqycAnswer(@RequestParam String userId) { + CgxqycStuAnswerExample cgxqycStuAnswerExample = new CgxqycStuAnswerExample(); + cgxqycStuAnswerExample.createCriteria().andUserIdEqualTo(userId); + List 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 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 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 errorPositions; + + Result(int errorCount, List errorPositions) { + this.errorCount = errorCount; + this.errorPositions = errorPositions; + } + } +} diff --git a/src/main/java/com/sztzjy/linkCommerce/controller/stu/UserController.java b/src/main/java/com/sztzjy/linkCommerce/controller/stu/UserController.java index 0f2ef5f..acef749 100644 --- a/src/main/java/com/sztzjy/linkCommerce/controller/stu/UserController.java +++ b/src/main/java/com/sztzjy/linkCommerce/controller/stu/UserController.java @@ -2,39 +2,36 @@ package com.sztzjy.linkCommerce.controller.stu; -import cn.hutool.core.convert.Convert; -import cn.hutool.core.util.IdUtil; + +import com.alibaba.excel.EasyExcel; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import com.sztzjy.linkCommerce.annotation.AnonymousAccess; -import com.sztzjy.linkCommerce.annotation.OperateLog; -import com.sztzjy.linkCommerce.config.exception.UnAuthorizedException; -import com.sztzjy.linkCommerce.config.security.JwtUser; -import com.sztzjy.linkCommerce.config.security.LoginResult; -import com.sztzjy.linkCommerce.config.security.TokenProvider; -import com.sztzjy.linkCommerce.entity.StuUser; -import com.sztzjy.linkCommerce.entity.StuUserExample; -import com.sztzjy.linkCommerce.entity.ZYUserInfo; -import com.sztzjy.linkCommerce.mapper.StuUserMapper; -import com.sztzjy.linkCommerce.service.StuUserService; +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.entity.importDto.StudentImportDTO; +import com.sztzjy.linkCommerce.entity.importDto.TeacherImportDTO; +import com.sztzjy.linkCommerce.mapper.*; +import com.sztzjy.linkCommerce.service.ImportService; +import com.sztzjy.linkCommerce.service.SchoolService; +import com.sztzjy.linkCommerce.service.UserInfoService; +import com.sztzjy.linkCommerce.service.ValidateService; import com.sztzjy.linkCommerce.util.*; +import com.sztzjy.linkCommerce.util.excel.FilePortUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; +import java.io.InputStream; import java.util.*; @@ -42,297 +39,816 @@ import java.util.*; @RequestMapping("api/user") @RestController public class UserController { + @Autowired + SchoolService schoolService; + @Autowired + SchoolMapper schoolMapper; + @Autowired + UserinfoMapper userinfoMapper; + @Autowired + SchoolMajorMapper schoolMajorMapper; + @Autowired + SchoolClassMapper schoolClassMapper; + @Autowired + Pinyin4jUtil pinyin4jUtil; + @Autowired + UserInfoService userInfoService; + @Autowired + ValidateService validateService; + @Autowired + ImportService importService; - @Resource - private StuUserService stuUserService; - @Resource - private HttpServletRequest request; - @Autowired - private StuUserMapper userMapper; - @Resource - private AuthenticationManagerBuilder authenticationManagerBuilder; + @PostMapping("/addSchool") + @ApiOperation("院校管理-院校新增") + @AnonymousAccess + public ResultEntity addSchool(@RequestBody School school) { + //参数校验 + if (org.apache.commons.lang3.StringUtils.isBlank(school.getSchoolName())) { + return new ResultEntity<>(HttpStatus.ACCEPTED, "院校名称不能为空"); + } + if (org.apache.commons.lang3.StringUtils.isBlank(school.getSchoolGrade())) { + return new ResultEntity<>(HttpStatus.ACCEPTED, "院校层次不能为空"); + } + if (org.apache.commons.lang3.StringUtils.isBlank(school.getSchoolProvince())) { + return new ResultEntity<>(HttpStatus.ACCEPTED, "所属省不能为空"); + } + if (org.apache.commons.lang3.StringUtils.isBlank(school.getSchoolCity())) { + return new ResultEntity<>(HttpStatus.ACCEPTED, "所属城市不能为空"); + } + if (org.apache.commons.lang3.StringUtils.isBlank(school.getSchoolContacts())) { + return new ResultEntity<>(HttpStatus.ACCEPTED, "院校联系人不能为空"); + } + Integer result = schoolService.addSchool(school); + if (result > 0) { + return new ResultEntity<>(HttpStatus.OK, "新增成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "新增失败"); + } + } - @Autowired - private RedisUtil redisUtil; + @PostMapping("/updateSchool") + @ApiOperation("院校管理-院校编辑") + @AnonymousAccess + public ResultEntity updateSchool(@RequestBody School school) { + Integer result = schoolService.updateSchool(school); + if (result > 0) { + return new ResultEntity<>(HttpStatus.OK, "编辑成功"); + } else { + return new ResultEntity<>(HttpStatus.ACCEPTED, "编辑失败"); + } + } + @GetMapping("/deleteSchool") + @ApiOperation("院校管理-院校删除") + public ResultEntity deleteSchool(String schoolId) { -// @Value("${item.name}") -// String itemName; + Integer result = schoolService.deleteSchool(schoolId); + if (result > 0) { + return new ResultEntity<>(HttpStatus.OK, "删除成功"); + } else { + return new ResultEntity<>(HttpStatus.ACCEPTED, "删除失败"); + } + } + + @GetMapping("/getSchoolList") + @ApiOperation("院校管理-院校列表查询") + @AnonymousAccess + public ResultEntity> getSchoolList(@ApiParam("当前页") Integer index, + @ApiParam("每页条数") Integer size, + @ApiParam("院校名称") @RequestParam(required = false) String schoolName) { + + PageHelper.startPage(index, size); + SchoolExample schoolExample=new SchoolExample(); + SchoolExample.Criteria criteria = schoolExample.createCriteria(); + + if(StringUtils.isNotEmpty(schoolName)){ + criteria.andSchoolNameLike("%"+schoolName+"%"); + } + List schools = schoolMapper.selectByExample(schoolExample); + PageInfo schoolPageInfo = new PageInfo<>(schools); + return new ResultEntity<>(HttpStatus.OK, "院校列表查询-查询成功", schoolPageInfo); + } + + + //*****************************************院系管理********************************************* + //*****************************************院系管理********************************************* + //*****************************************院系管理********************************************* @Autowired - private StuUserMapper stuUserMapper; + SchoolFacultyMapper schoolFacultyMapper; + @PostMapping("/addSchoolFaculty") + @ApiOperation("院系管理-添加院系") + @AnonymousAccess + public ResultEntity addSchoolFaculty(@ApiParam("学校ID") @RequestParam String schoolId, + @ApiParam("院系名称") @RequestParam String schoolFacultyName, + @ApiParam("联系人") @RequestParam(required = false) String schoolFacultyContact, + @ApiParam("联系人电话") @RequestParam(required = false) String schoolFacultyContactTel, + @ApiParam("联系人地址") @RequestParam(required = false) String schoolFacultyContactAddress) { + //先根据schoolId进行查询 如果不存在则返回 + School school = schoolMapper.selectByPrimaryKey(schoolId); + if (school == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该学校不存在"); + } + //查询该学校下院系下 专业名称是否重复 + SchoolFacultyExample schoolFacultyExample = new SchoolFacultyExample(); + schoolFacultyExample.createCriteria().andSchoolIdEqualTo(schoolId).andSchoolFacultyNameEqualTo(schoolFacultyName); + List schoolFaculties = schoolFacultyMapper.selectByExample(schoolFacultyExample); + if (!schoolFaculties.isEmpty()) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "院系名称重复"); + } + SchoolFaculty schoolFaculty = new SchoolFaculty(); + schoolFaculty.setSchoolFacultyId(String.valueOf(UUID.randomUUID())); + schoolFaculty.setSchoolId(schoolId); + schoolFaculty.setSchoolFacultyName(schoolFacultyName); + schoolFaculty.setSchoolFacultyContact(schoolFacultyContact); + schoolFaculty.setSchoolFacultyContactTel(schoolFacultyContactTel); + schoolFaculty.setSchoolFacultyContactAddress(schoolFacultyContactAddress); + schoolFaculty.setCreateTime(new Date()); + int insert = schoolFacultyMapper.insert(schoolFaculty); + if (insert == 1) { + return new ResultEntity<>(HttpStatus.OK, "新增院系成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "新增院系失败"); + } + } + + @PostMapping("/seleteSchoolFaculty") + @ApiOperation("院系管理-查询") + @AnonymousAccess + public ResultEntity> seleteSchoolFaculty(@ApiParam("当前页") Integer index, + @ApiParam("每页条数") Integer size, + @ApiParam("学校ID") @RequestParam(required = false) String schoolId, + @ApiParam("院系名称") @RequestParam(required = false) String schoolFacultyName) { + PageInfo pageInfo = schoolService.seleteSchoolFaculty(index, size, schoolId, schoolFacultyName); + return new ResultEntity<>(HttpStatus.OK, "院系管理-查询成功", pageInfo); + } + @PostMapping("/deleteSchoolFaculty") + @ApiOperation("院系管理-删除") @AnonymousAccess - @ApiOperation("用户登录") - @PostMapping("login") - @OperateLog(description = "登录授权") - public ResultDataEntity login(@ApiParam("用户名") String username, - @ApiParam("加密后的密码") String passwordEncode, - @ApiParam("智云携带的token")@RequestParam(required = false) String TOKEN, - @RequestParam(required = false) Integer type, - HttpServletResponse response) throws IOException { - JwtUser jwtUser; - String password; - - if(org.apache.commons.lang3.StringUtils.isBlank(TOKEN)){ //子系统登录 - try { - password = RsaUtil.decryptByPrivateKey(passwordEncode); - } catch (Exception e) { - return new ResultDataEntity(HttpStatus.BAD_REQUEST, "密码错误"); - } - try { - StuUserExample example = new StuUserExample(); - StuUserExample.Criteria criteria = example.createCriteria(); - criteria.andStudentIdEqualTo(username); - List stuUsers = userMapper.selectByExample(example); - if(stuUsers.isEmpty()){ - throw new UnAuthorizedException("账号不存在"); - }else { - StuUser stuUser = stuUsers.get(0); - LoginResult loginResult = new LoginResult(); - if(org.apache.commons.lang3.StringUtils.isBlank(stuUser.getPassword()) && "123qwe".equals(password)){ - stuUser.setPassword("123qwe"); - if(org.apache.commons.lang3.StringUtils.isBlank(stuUser.getClassId())){ - stuUser.setRoleId(3); - }else { - stuUser.setRoleId(4); - } - userMapper.updateByPrimaryKeySelective(stuUser); - UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); - Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); - SecurityContextHolder.getContext().setAuthentication(authentication); - jwtUser = (JwtUser) authentication.getPrincipal(); - String token = TokenProvider.createToken(jwtUser); - loginResult.setClassId(Convert.toInt(stuUser.getClassId())); - loginResult.setUserId(stuUser.getUserId()); - loginResult.setUsername(stuUser.getStudentId()); - loginResult.setName(stuUser.getName()); - loginResult.setRoleId(stuUser.getRoleId()); - loginResult.setSchoolName(stuUser.getSchoolName()); - loginResult.setSchoolId(Integer.valueOf(stuUser.getSchoolId())); - loginResult.setAccessToken(token); - loginResult.setStudentId(stuUser.getStudentId()); -// redisUtil.set(itemName+"-token:"+jwtUser.getUserId(),token,43200); -// -// //redisUtil.set(itemName+"-userId:"+jwtUser.getUserId(),System.currentTimeMillis(),36000); -// // 设置 loginTime -// Long newLoginTime = System.currentTimeMillis(); -// Long newLastActiveTime = System.currentTimeMillis(); -// redisUtil.hset(itemName+"-userId:"+jwtUser.getUserId(), "loginTime", newLoginTime,43200); -// -// -// // 设置 lastActiveTime -// redisUtil.hset(itemName+"-userId:"+jwtUser.getUserId(), "lastActiveTime", newLastActiveTime,43200); - - - return new ResultDataEntity<>(HttpStatus.OK,loginResult); - }else { - if(password.equals(stuUser.getPassword())){ - UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); - Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); - SecurityContextHolder.getContext().setAuthentication(authentication); - jwtUser = (JwtUser) authentication.getPrincipal(); - String token = TokenProvider.createToken(jwtUser); - loginResult.setClassId(Convert.toInt(stuUser.getClassId())); - loginResult.setUserId(stuUser.getUserId()); - loginResult.setName(stuUser.getName()); - loginResult.setUsername(stuUser.getStudentId()); - loginResult.setRoleId(stuUser.getRoleId()); - loginResult.setSchoolId(Integer.valueOf(stuUser.getSchoolId())); - loginResult.setStudentId(stuUser.getStudentId()); - loginResult.setAccessToken(token); - loginResult.setSchoolName(stuUser.getSchoolName()); -// redisUtil.set(itemName+"-token:"+jwtUser.getUserId(),token,43200); -// // redisUtil.set(itemName+"-userId:"+jwtUser.getUserId(),System.currentTimeMillis(),3600); -// -// Long newLoginTime = System.currentTimeMillis(); -// Long newLastActiveTime = System.currentTimeMillis(); -// -// // 设置 loginTime -// redisUtil.hset(itemName+"-userId:"+jwtUser.getUserId(), "loginTime", newLoginTime,43200); -// -// -// // 设置 lastActiveTime -// redisUtil.hset(itemName+"-userId:"+jwtUser.getUserId(), "lastActiveTime", newLastActiveTime,43200); - - return new ResultDataEntity<>(HttpStatus.OK,loginResult); - }else { - throw new UnAuthorizedException("密码错误"); - } - } + public ResultEntity deleteSchoolFaculty(@ApiParam("院系ID") @RequestParam String schoolFacultyId, @RequestParam String userId) { + //先查询useriD 是否够权限 + Userinfo userInfo = userinfoMapper.selectByPrimaryKey(userId); + if (userInfo.getRole() == 1 || userInfo.getRole() == 2) { + if (userInfo.getRole() == 2) { + SchoolFaculty schoolFaculty = schoolFacultyMapper.selectByPrimaryKey(schoolFacultyId); + if (!schoolFaculty.getSchoolId().equals(userInfo.getSchoolId())) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "院系管理-删除失败-权限不足"); } - } catch (Exception e) { - throw new UnAuthorizedException("密码错误"); } - }else { //单点登录 - if (!StringUtils.hasText(username) && !StringUtils.hasText(passwordEncode) && !StringUtils.hasText(TOKEN)) { - throw new IllegalArgumentException("请提供登录凭据"); + int i = schoolFacultyMapper.deleteByPrimaryKey(schoolFacultyId); + if (i == 1) { + return new ResultEntity<>(HttpStatus.OK, "院系管理-删除成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "院系管理-删除失败"); } - if (StringUtils.hasText(TOKEN)) { + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "院系管理-删除失败-权限不足"); + } + } - if (type==null) - { - type = 0; + @PostMapping("/updateSchoolFaculty") + @ApiOperation("院系管理-编辑") + @AnonymousAccess + public ResultEntity updateSchoolFaculty(@RequestBody SchoolFaculty schoolFaculty, @RequestParam String userId) { + if (StringUtils.isBlank(schoolFaculty.getSchoolFacultyId())) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "院系管理-编辑失败-主键ID缺失"); + } + //先查询useriD 是否够权限 + Userinfo userInfo = userinfoMapper.selectByPrimaryKey(userId); + if (userInfo.getRole() == 1 || userInfo.getRole() == 2) { + if (userInfo.getRole() == 2) { + SchoolFaculty schoolFacultyT = schoolFacultyMapper.selectByPrimaryKey(schoolFaculty.getSchoolFacultyId()); + if (!schoolFacultyT.getSchoolId().equals(userInfo.getSchoolId())) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "院系管理-编辑失败-权限不足"); } + } + int i = schoolFacultyMapper.updateByPrimaryKey(schoolFaculty); + if (i == 1) { + return new ResultEntity<>(HttpStatus.OK, "院系管理-编辑成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "院系管理-编辑失败"); + } + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "院系管理-编辑失败-权限不足"); + } + } - if (type ==1 ) - { - jwtUser = TokenProvider.getJWTUserOne(TOKEN); - }else { - jwtUser = TokenProvider.getJWTUserByZhiYun(TOKEN); - } + //*****************************************专业管理********************************************* + //*****************************************专业管理********************************************* + //*****************************************专业管理********************************************* - // jwtUser = TokenProvider.getJWTUserByZhiYun(TOKEN); + @PostMapping("/addSchoolMajor") + @ApiOperation("专业管理-添加专业") + @AnonymousAccess + public ResultEntity addSchoolMajor(@ApiParam("学校ID") @RequestParam String schoolId, + @ApiParam("院系ID") @RequestParam String schoolFacultyId, + @ApiParam("专业名称") @RequestParam String schoolMajorName, + @ApiParam("联系人") @RequestParam(required = false) String schoolMajorContact, + @ApiParam("联系人电话") @RequestParam(required = false) String schoolMajorContactTel) { + //先根据schoolId进行查询 如果不存在则返回 + School school = schoolMapper.selectByPrimaryKey(schoolId); + if (school == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该学校不存在"); + } + //再根据schoolFacultyId查询 如果不存在则返回 + SchoolFaculty schoolFaculty = schoolFacultyMapper.selectByPrimaryKey(schoolFacultyId); + if (schoolFaculty == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该院系不存在"); + } + //查询该学校下院系下 专业名称是否重复 + SchoolMajorExample schoolMajorExample = new SchoolMajorExample(); + schoolMajorExample.createCriteria().andSchoolFacultyIdEqualTo(schoolFacultyId).andSchoolMajorNameEqualTo(schoolMajorName); + List schoolMajors = schoolMajorMapper.selectByExample(schoolMajorExample); + if (!schoolMajors.isEmpty()) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "专业名称重复"); + } + SchoolMajor schoolMajor = new SchoolMajor(); + schoolMajor.setSchoolMajorId(String.valueOf(UUID.randomUUID())); + schoolMajor.setSchoolFacultyId(schoolFacultyId); + schoolMajor.setSchoolMajorName(schoolMajorName); + schoolMajor.setSchoolMajorContact(schoolMajorContact); + schoolMajor.setSchoolMajorContactTel(schoolMajorContactTel); + schoolMajor.setCreateTime(new Date()); + int insert = schoolMajorMapper.insert(schoolMajor); + if (insert == 1) { + return new ResultEntity<>(HttpStatus.OK, "新增专业成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "新增专业失败"); + } + } - if (jwtUser == null) { - throw new UnAuthorizedException("token无效"); - } - } else { - try { - password = RsaUtil.decryptByPrivateKey(passwordEncode); - } catch (Exception e) { - throw new UnAuthorizedException("密码错误"); - } + @PostMapping("/selectSchoolMajor") + @ApiOperation("专业管理-查询") + @AnonymousAccess + public ResultEntity> selectSchoolMajor(@ApiParam("当前页") Integer index, + @ApiParam("每页条数") Integer size, + @ApiParam("学校ID") @RequestParam(required = false) String schoolId, + @ApiParam("院系ID-学校管理员使用") @RequestParam(required = false) String schoolFacultyId, + @ApiParam("专业名称") @RequestParam(required = false) String schoolMajorName) { + PageInfo pageInfo = schoolService.seleteSchoolMajor(index, size, schoolId, schoolMajorName, schoolFacultyId); + return new ResultEntity<>(HttpStatus.OK, "专业管理-查询成功", pageInfo); + } - jwtUser = TzApi.foreignExchangeTradingLogin(username, password); - if (jwtUser == null) { - throw new UnAuthorizedException("用户名或密码错误"); - } - } + @PostMapping("/deleteSchoolMajor") + @ApiOperation("专业管理-删除") + @AnonymousAccess + public ResultEntity deleteSchoolMajor(@ApiParam("专业ID") @RequestParam String schoolMajorId, @RequestParam String userId) { + int i = schoolMajorMapper.deleteByPrimaryKey(schoolMajorId); + if (i == 1) { + return new ResultEntity<>(HttpStatus.OK, "专业管理-删除成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "专业管理-删除失败"); + } + } - String studentId = jwtUser.getStudentId(); - if (!StringUtils.hasText(studentId)) { - studentId= jwtUser.getUsername(); - if (!StringUtils.hasText(studentId)) { - studentId= jwtUser.getName(); - } + + @PostMapping("/updateSchoolMajor") + @ApiOperation("专业管理-编辑") + @AnonymousAccess + public ResultEntity updateSchoolMajor(@RequestBody SchoolMajor schoolMajor, @RequestParam String userId) { + if (StringUtils.isBlank(schoolMajor.getSchoolMajorId())) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "专业管理-编辑失败-主键ID缺失"); + } + int i = schoolMajorMapper.updateByPrimaryKey(schoolMajor); + if (i == 1) { + return new ResultEntity<>(HttpStatus.OK, "专业管理-编辑成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "专业管理-编辑失败"); + } + } + + //*****************************************班级管理********************************************* + //*****************************************班级管理********************************************* + //*****************************************班级管理********************************************* + + + @PostMapping("/addSchoolClass") + @ApiOperation("班级管理-添加班级") + @AnonymousAccess + public ResultEntity addSchoolClass(@ApiParam("学校ID") @RequestParam String schoolId, + @ApiParam("院系ID") @RequestParam String schoolFacultyId, + @ApiParam("专业ID") @RequestParam String schoolMajorId, + @ApiParam("班级名称") @RequestParam String className) { + //先根据schoolId进行查询 如果不存在则返回 + School school = schoolMapper.selectByPrimaryKey(schoolId); + if (school == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该学校不存在"); + } + //再根据schoolFacultyId查询 如果不存在则返回 + SchoolFaculty schoolFaculty = schoolFacultyMapper.selectByPrimaryKey(schoolFacultyId); + if (schoolFaculty == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该院系不存在"); + } + //再根据schoolMajorId查询 如果不存在则返回 + SchoolMajor schoolMajor = schoolMajorMapper.selectByPrimaryKey(schoolMajorId); + if (schoolMajor == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该专业不存在"); + } + //查询班级名称是否存在 + SchoolClassExample schoolClassExample = new SchoolClassExample(); + schoolClassExample.createCriteria().andSchoolMajorIdEqualTo(schoolMajorId).andClassNameEqualTo(className); + List schoolClasses = schoolClassMapper.selectByExample(schoolClassExample); + if (!schoolClasses.isEmpty()) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "班级名称重复"); + } + SchoolClass schoolClass = new SchoolClass(); + schoolClass.setSchoolClassId(String.valueOf(UUID.randomUUID())); + schoolClass.setSchoolMajorId(schoolMajorId); + schoolClass.setClassName(className); + //设置classSn 先获取学校名称 + String schoolName = school.getSchoolName(); + String schoolNamePY = pinyin4jUtil.convertToPinyin(schoolName); + String classNamePY = pinyin4jUtil.convertToPinyin(className); + schoolClass.setClassSn(schoolNamePY + "_" + classNamePY); + schoolClass.setCreateTime(new Date()); + + int insert = schoolClassMapper.insert(schoolClass); + if (insert == 1) { + return new ResultEntity<>(HttpStatus.OK, "新增班级成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "新增班级失败"); + } + } + + @PostMapping("/seleteSchoolClass") + @ApiOperation("班级管理-查询") + @AnonymousAccess + public ResultEntity> seleteSchoolClass(@ApiParam("当前页") Integer index, + @ApiParam("每页条数") Integer size, + @ApiParam("学校ID") @RequestParam(required = false) String schoolId, + @ApiParam("专业ID-学校管理员使用") @RequestParam(required = false) String schoolMajorId, + @ApiParam("班级名称") @RequestParam(required = false) String className, + @ApiParam("班级编号") @RequestParam(required = false) String classSn) { + PageInfo pageInfo = schoolService.seleteSchoolClass(index, size, schoolId, className, classSn, schoolMajorId); + return new ResultEntity<>(HttpStatus.OK, "班级管理-查询成功", pageInfo); + } + + @PostMapping("/deleteSchoolClass") + @ApiOperation("班级管理-删除") + @AnonymousAccess + public ResultEntity deleteSchoolClass(@ApiParam("班级ID") @RequestParam String schoolClassId, @RequestParam String userId) { + //先查询useriD 是否够权限 + Userinfo userInfo = userinfoMapper.selectByPrimaryKey(userId); + if (userInfo.getRole() == 1 || userInfo.getRole() == 2) { + int i = schoolClassMapper.deleteByPrimaryKey(schoolClassId); + if (i == 1) { + return new ResultEntity<>(HttpStatus.OK, "班级管理-删除成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "班级管理-删除失败"); } + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "班级管理-删除失败-权限不足"); + } + } - //根据StudentId查询用户数据 并且赋予userId - StuUserExample stuUserExample = new StuUserExample(); - stuUserExample.createCriteria().andStudentIdEqualTo(studentId); - List stuUserList = stuUserMapper.selectByExample(stuUserExample); - String userId = null; - if (CollectionUtils.isEmpty(stuUserList)) { - StuUser student = new StuUser(); - userId = IdUtil.randomUUID(); - - student.setUserId(userId); - student.setStudentId(studentId); - if (StringUtils.hasText(jwtUser.getName())){ - student.setName(jwtUser.getName()); - }else { - student.setName(studentId); - } - student.setPassword(jwtUser.getPassword()); - student.setRoleId(jwtUser.getRoleId()); - student.setClassId(String.valueOf(jwtUser.getClassId())); - student.setClassName(jwtUser.getClassName()); - student.setMajor(jwtUser.getMajorName()); - student.setSchoolId(String.valueOf(jwtUser.getSchoolId())); - student.setSchoolName(jwtUser.getSchoolName()); - stuUserMapper.insertSelective(student); + + @PostMapping("/updateSchoolClass") + @ApiOperation("班级管理-编辑") + @AnonymousAccess + public ResultEntity updateSchoolClass(@RequestBody SchoolClass schoolClass, @RequestParam String userId) { + if (StringUtils.isBlank(schoolClass.getSchoolClassId())) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "班级管理-编辑失败-主键ID缺失"); + } + //先查询useriD 是否够权限 + Userinfo userInfo = userinfoMapper.selectByPrimaryKey(userId); + if (userInfo.getRole() == 1 || userInfo.getRole() == 2) { + int i = schoolClassMapper.updateByPrimaryKey(schoolClass); + if (i == 1) { + return new ResultEntity<>(HttpStatus.OK, "班级管理-编辑成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "班级管理-编辑失败"); } - if (StringUtils.hasText(userId)){ - jwtUser.setUserId(userId); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "班级管理-编辑失败-权限不足"); + } + } + + //新增 同步子系统账户 + @PostMapping("/addTeacherAccount") + @ApiOperation("教师管理-添加教师账号") + @AnonymousAccess + public ResultEntity addTeacherAccount(@ApiParam("学校ID") @RequestParam String schoolId, + @ApiParam("学校名称") @RequestParam String schoolName, + @ApiParam("院系ID") @RequestParam String schoolFacultyId, + @ApiParam("专业ID") @RequestParam String schoolMajorId, + @ApiParam("专业名称") @RequestParam String schoolMajorName, + @ApiParam("教师名称") @RequestParam String name, + @ApiParam("教师工号") @RequestParam String userName, + @ApiParam("电话号码") @RequestParam(required = false) String phone, + @ApiParam("电子邮箱") @RequestParam(required = false) String email) throws JsonProcessingException { + //先根据schoolId进行查询 如果不存在则返回 + School school = schoolMapper.selectByPrimaryKey(schoolId); + if (school == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该学校不存在"); + } + //再根据schoolFacultyId查询 如果不存在则返回 + SchoolFaculty schoolFaculty = schoolFacultyMapper.selectByPrimaryKey(schoolFacultyId); + if (schoolFaculty == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该院系不存在"); + } + //再根据schoolMajorId查询 如果不存在则返回 + SchoolMajor schoolMajor = schoolMajorMapper.selectByPrimaryKey(schoolMajorId); + if (schoolMajor == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该专业不存在"); + } + //检查userName是否已经存在 + boolean b = userInfoService.existsByUserName(userName); + if(b){ + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "账号已存在"); + } + Userinfo userInfo = new Userinfo(); + userInfo.setUserId(UUID.randomUUID().toString()); + userInfo.setName(name); + userInfo.setUsername(userName); + userInfo.setPassword("123qwe"); + userInfo.setPhone(phone); + userInfo.setEmail(email); + userInfo.setCreateTime(new Date()); + userInfo.setRole(3); + userInfo.setSchoolId(schoolId); + userInfo.setSchoolFacultyId(schoolFacultyId); + userInfo.setSchoolMajorId(schoolMajorId); + userInfo.setSchoolClassId(null); + userInfo.setCodeFrom("添加"); + + int insert = userinfoMapper.insert(userInfo); + if (insert == 1) { + return new ResultEntity<>(HttpStatus.OK, "教师管理-添加教师账号成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "教师管理-添加教师账号失败"); + } + } + + //分页条件查询 + @PostMapping("/selectTeacher") + @ApiOperation("教师管理-查询教师账号信息") + @AnonymousAccess + public ResultEntity> selectTeacher(@ApiParam("学校ID") @RequestParam(required = false) String schoolId, + @ApiParam("教师名称") @RequestParam(required = false) String name, + @ApiParam("教师工号") @RequestParam(required = false) String userName, + @RequestParam Integer index, + @RequestParam Integer size) { + PageHelper.startPage(index, size); + UserinfoExample userInfoExample = new UserinfoExample(); + UserinfoExample.Criteria criteria = userInfoExample.createCriteria(); + School school=new School(); + if (StringUtils.isNotBlank(schoolId)) { + school = schoolMapper.selectByPrimaryKey(schoolId); + criteria.andSchoolIdEqualTo(schoolId); + } + if (StringUtils.isNotBlank(name)) { + criteria.andNameEqualTo(name); + } + if (StringUtils.isNotBlank(userName)) { + criteria.andUsernameEqualTo(userName); + } + List userInfoList = userinfoMapper.selectByExample(userInfoExample); + for (int i = 0; i < userInfoList.size(); i++) { + if(StringUtils.isNotBlank(schoolId)){ + userInfoList.get(i).setSchoolName(school.getSchoolName()); }else { - jwtUser.setUserId(stuUserList.get(0).getUserId()); + String schoolId1 = userInfoList.get(i).getSchoolId(); + school = schoolMapper.selectByPrimaryKey(schoolId1); + userInfoList.get(i).setSchoolName(school.getSchoolName()); } - - Authentication authentication = new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities()); - SecurityContextHolder.getContext().setAuthentication(authentication); - String token = TokenProvider.createToken(jwtUser); -// -// redisUtil.set(itemName+"-token:"+jwtUser.getUserId(),token,43200); -// -// // redisUtil.set(itemName+"-userId:"+jwtUser.getUserId(),System.currentTimeMillis(),3600); -// -// Long newLoginTime = System.currentTimeMillis(); -// Long newLastActiveTime = System.currentTimeMillis(); -// -// // 设置 loginTime -// redisUtil.hset(itemName+"-userId:"+jwtUser.getUserId(), "loginTime", newLoginTime,43200); -// -// // 设置 lastActiveTime -// redisUtil.hset(itemName+"-userId:"+jwtUser.getUserId(), "lastActiveTime", newLastActiveTime,43200); - - return new ResultDataEntity(HttpStatus.OK,LoginResult.create(jwtUser, token)); } + PageInfo pageInfo = new PageInfo<>(userInfoList); + return new ResultEntity<>(HttpStatus.OK, "查询教师账号信息成功!", pageInfo); + } + //编辑 + @PostMapping("/updateTeacher") + @ApiOperation("教师管理-编辑教师账号信息") + @AnonymousAccess + public ResultEntity updateTeacher(@RequestBody Userinfo userInfo) { + int i = userinfoMapper.updateByPrimaryKey(userInfo); + if(i==1){ + return new ResultEntity<>(HttpStatus.OK, "编辑教师账号信息成功!"); + } + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "编辑教师账号信息失败!"); } + //初始化密码 + @PostMapping("/updateTeacherPassword") + @ApiOperation("教师管理-初始化密码") + @AnonymousAccess + public ResultEntity updateTeacher(@RequestParam String userId) { + Userinfo userInfo = userinfoMapper.selectByPrimaryKey(userId); + userInfo.setPassword("123qwe"); + int i = userinfoMapper.updateByPrimaryKey(userInfo); + if(i==1){ + return new ResultEntity<>(HttpStatus.OK, "初始化密码成功!"); + } + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "初始化密码失败!"); + } + //微信绑定 ***** - @ApiOperation("明文密码公钥加密方法(该方法仅在开发阶段开放用于测试接口)") + //删除 + @PostMapping("/deleteTeacher") + @ApiOperation("教师管理-删除") @AnonymousAccess - @GetMapping("encrypt") - public ResultDataEntity encrypt(@ApiParam("明文密码") String pwd) throws Exception { - return new ResultDataEntity<>(HttpStatus.OK,"加密成功",RsaUtil.encryptByPublicKey(pwd)); + public ResultEntity deleteTeacher(@RequestParam String userId) { + int i = userinfoMapper.deleteByPrimaryKey(userId); + if(i==1){ + return new ResultEntity<>(HttpStatus.OK, "删除成功!"); + } + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "删除失败!"); } + //导入 同步子系统账户 + @PostMapping("/uploadTeacherUserInfo") + @ApiOperation("教师管理-导入教师账号") + @AnonymousAccess + public ResultEntity uploadTeacherUserInfo(@RequestParam MultipartFile file){ + // 基本校验 + if (file.isEmpty()) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "上传文件不能为空!"); + } + + String originalFilename = file.getOriginalFilename(); + if (!originalFilename.endsWith(".xls") && !originalFilename.endsWith(".xlsx")) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "请上传Excel文件!"); + } + if (file.getSize() > 10 * 1024 * 1024) { // 10MB限制 + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "文件大小不能超过10MB!"); + } + try (InputStream inputStream = file.getInputStream()) { + // 解析Excel + List teacherList = EasyExcel.read(inputStream) + .head(TeacherImportDTO.class) + .sheet() + .doReadSync(); + + // 数据校验 + List errorMessages = validateService.validateTeacherData(teacherList); + if (!errorMessages.isEmpty()) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "数据校验失败!",errorMessages); + } - @ApiOperation("同步学生信息") - @PostMapping("synchronizationStudentInfo") - public ResultDataEntity synchronizationStudentInfo() { - JwtUser user = TokenProvider.getJWTUser(request); - stuUserService.insertAll(user); - return new ResultDataEntity(HttpStatus.OK); + // 异步处理导入***** + importService.processTeacherImport(teacherList); + return new ResultEntity<>(HttpStatus.OK, "导入成功!"); + + } catch (Exception e) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "数据校验失败!",e.getMessage()); + } } + //导出 + @PostMapping("/exportTeacherUserInfo") + @ApiOperation("教师管理-导出") + @AnonymousAccess + public void exportTeacherUserInfo(HttpServletResponse response, + @RequestParam String schoolId) { + if(StringUtils.isNotBlank(schoolId)){ + UserinfoExample userInfoExample = new UserinfoExample(); + userInfoExample.createCriteria().andSchoolIdEqualTo(schoolId).andRoleEqualTo(3); + List list = userinfoMapper.selectByExample(userInfoExample); + //导出的表名 + String title = "老师账号汇总"; + //表中第一行表头字段 + String[] headers = {"姓名", "工号", "性别", "手机号", "邮箱"}; + + //具体需要写入excel需要哪些字段,这些字段取自UserReward类,也就是上面的实际数据结果集的泛型 + List listColumn = Arrays.asList("name", "username", "sex", "phone", "email"); + try { + FilePortUtil.exportExcel(response, title, headers, list, listColumn); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + //*****************************************学生管理********************************************* + //*****************************************学生管理********************************************* + //*****************************************学生管理********************************************* + //新增 *****创建资金账户 + @PostMapping("/addStudentAccount") + @ApiOperation("学生管理-添加学生账号") + @AnonymousAccess + public ResultEntity addStudentAccount(@ApiParam("学校ID") @RequestParam String schoolId, + @ApiParam("学校名称") @RequestParam String schoolName, + @ApiParam("院系ID") @RequestParam String schoolFacultyId, + @ApiParam("专业ID") @RequestParam String schoolMajorId, + @ApiParam("专业名称") @RequestParam String schoolMajorName, + @ApiParam("班级名称") @RequestParam String schoolClassName, + @ApiParam("班级Id") @RequestParam String schoolClassId, + @ApiParam("学生姓名") @RequestParam String name, + @ApiParam("学号") @RequestParam String userName, + @ApiParam("电话号码") @RequestParam(required = false) String phone, + @ApiParam("电子邮箱") @RequestParam(required = false) String email) throws JsonProcessingException { + //先根据schoolId进行查询 如果不存在则返回 + School school = schoolMapper.selectByPrimaryKey(schoolId); + if (school == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该学校不存在"); + } + //再根据schoolFacultyId查询 如果不存在则返回 + SchoolFaculty schoolFaculty = schoolFacultyMapper.selectByPrimaryKey(schoolFacultyId); + if (schoolFaculty == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该院系不存在"); + } + //再根据schoolMajorId查询 如果不存在则返回 + SchoolMajor schoolMajor = schoolMajorMapper.selectByPrimaryKey(schoolMajorId); + if (schoolMajor == null) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该专业不存在"); + } + SchoolClass schoolClass = schoolClassMapper.selectByPrimaryKey(schoolClassId); + if(schoolClass==null){ + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该班级不存在"); + } + //检查userName是否已经存在 + boolean b = userInfoService.existsByUserName(userName); + if(b){ + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "账号已存在"); + } + Userinfo userInfo = new Userinfo(); + userInfo.setUserId(UUID.randomUUID().toString()); + userInfo.setName(name); + userInfo.setUsername(userName); + userInfo.setPassword("123qwe"); + userInfo.setPhone(phone); + userInfo.setEmail(email); + userInfo.setCreateTime(new Date()); + userInfo.setRole(4); + userInfo.setSchoolId(schoolId); + userInfo.setSchoolFacultyId(schoolFacultyId); + userInfo.setSchoolMajorId(schoolMajorId); + userInfo.setSchoolClassId(null); + userInfo.setCodeFrom("添加"); + + int insert = userinfoMapper.insert(userInfo); + if (insert == 1) { + return new ResultEntity<>(HttpStatus.OK, "学生管理-添加学生账号成功"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "学生管理-添加学生账号失败"); + } + } - @ApiOperation("开放接口,自动同步学生信息") - @PostMapping("synchronizationStudentInfoByAuto") + //查询 + @PostMapping("/selectStudent") + @ApiOperation("学生管理-查询学生账号信息") @AnonymousAccess - public String synchronizationStudentInfoByAuto(@RequestBody List zyUserInfoList) { -// JwtUser user = TokenProvider.getJWTUser(request); -// stuUserService.insertAllByAuto(studentList); - List users = new ArrayList<>(); - for (int i = 0; i < zyUserInfoList.size(); i++) { - ZYUserInfo zyUserInfo = zyUserInfoList.get(i); - String username = zyUserInfo.getUsername(); // studentid - String name = zyUserInfo.getName(); - String password = zyUserInfo.getPassword(); - Integer roleId = zyUserInfo.getRoleId(); //3教师 4学生 - - StuUserExample userInfoExample = new StuUserExample(); - userInfoExample.createCriteria().andStudentIdEqualTo(username); - List userInfos = stuUserMapper.selectByExample(userInfoExample); - if(userInfos.isEmpty() || userInfos==null){ - StuUser stuUser = new StuUser(); - stuUser.setUserId(IdUtil.randomUUID()); - stuUser.setStudentId(zyUserInfo.getUsername()); - if (!StringUtils.hasText(name)){ - stuUser.setName(username); + public ResultEntity> selectStudent(@ApiParam("学校ID") @RequestParam(required = false) String schoolId, + @ApiParam("班级ID") @RequestParam(required = false) String schoolClassId, + @ApiParam("学生姓名") @RequestParam(required = false) String name, + @ApiParam("学生学号") @RequestParam(required = false) String userName, + @RequestParam Integer index, + @RequestParam Integer size) { + PageHelper.startPage(index, size); + UserinfoExample userInfoExample = new UserinfoExample(); + UserinfoExample.Criteria criteria = userInfoExample.createCriteria(); + School school=new School(); + SchoolClass schoolClass = new SchoolClass(); + if (StringUtils.isNotBlank(schoolId)) { + school = schoolMapper.selectByPrimaryKey(schoolId); + criteria.andSchoolIdEqualTo(schoolId); + } + if (StringUtils.isNotBlank(name)) { + criteria.andNameEqualTo(name); + } + if (StringUtils.isNotBlank(userName)) { + criteria.andUsernameEqualTo(userName); + } + if(StringUtils.isNotBlank(schoolClassId)){ + schoolClass=schoolClassMapper.selectByPrimaryKey(schoolClassId); + criteria.andSchoolClassIdEqualTo(schoolClassId); + } + List userInfoList = userinfoMapper.selectByExample(userInfoExample); + for (int i = 0; i < userInfoList.size(); i++) { + if(StringUtils.isNotBlank(schoolId)){ + userInfoList.get(i).setSchoolName(school.getSchoolName()); + if(StringUtils.isNotBlank(schoolClassId)){ + userInfoList.get(i).setClassName(schoolClass.getClassName()); }else { - stuUser.setName(name); + String schoolClassId1 = userInfoList.get(i).getSchoolClassId(); + schoolClass = schoolClassMapper.selectByPrimaryKey(schoolClassId1); + userInfoList.get(i).setClassName(schoolClass.getClassName()); + } + }else { + String schoolId1 = userInfoList.get(i).getSchoolId(); + school = schoolMapper.selectByPrimaryKey(schoolId1); + userInfoList.get(i).setSchoolName(school.getSchoolName()); + if(StringUtils.isNotBlank(schoolClassId)){ + userInfoList.get(i).setClassName(schoolClass.getClassName()); + }else { + String schoolClassId1 = userInfoList.get(i).getSchoolClassId(); + schoolClass = schoolClassMapper.selectByPrimaryKey(schoolClassId1); + userInfoList.get(i).setClassName(schoolClass.getClassName()); } -// stuUser.setUsername(username); - stuUser.setPassword(password); - stuUser.setRoleId(roleId); - stuUser.setClassId(zyUserInfo.getClassId().toString()); -// stuUser.setPhone(zyUserInfo.getPhone()); - stuUser.setClassName(zyUserInfo.getClassName()); - stuUser.setMajor(zyUserInfo.getMajorName()); - stuUser.setSchoolId(zyUserInfo.getSchoolId().toString()); - stuUser.setSchoolName(zyUserInfo.getSchoolName()); -// stuUser.setCreateTime(new Date()); - users.add(stuUser); } } - if (users.isEmpty()) { - return "账号已全部存在"; + PageInfo pageInfo = new PageInfo<>(userInfoList); + return new ResultEntity<>(HttpStatus.OK, "查询学生账号信息成功!", pageInfo); + } + + //编辑 + @PostMapping("/updateStudent") + @ApiOperation("学生管理-编辑学生账号信息") + @AnonymousAccess + public ResultEntity updateStudent(@RequestBody Userinfo userInfo) { + int i = userinfoMapper.updateByPrimaryKey(userInfo); + if(i==1){ + return new ResultEntity<>(HttpStatus.OK, "编辑学生账号信息成功!"); + } + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "编辑学生账号信息失败!"); + } + + //删除 + @PostMapping("/deleteStudent") + @ApiOperation("学生管理-删除") + @AnonymousAccess + public ResultEntity deleteStudent(@RequestParam String userId) { + int i = userinfoMapper.deleteByPrimaryKey(userId); + if(i==1){ + return new ResultEntity<>(HttpStatus.OK, "删除成功!"); } - users.forEach(stuUser -> { - stuUserMapper.insertSelective(stuUser); - }); - return "自动同步学生信息成功!"+"同步"+users.size()+"条用户数据"; + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "删除失败!"); + } + //初始化密码 + @PostMapping("/updateStudentPassword") + @ApiOperation("学生管理-初始化密码") + @AnonymousAccess + public ResultEntity updateStudentPassword(@RequestParam String userId) { + Userinfo userInfo = userinfoMapper.selectByPrimaryKey(userId); + userInfo.setPassword("123qwe"); + int i = userinfoMapper.updateByPrimaryKey(userInfo); + if(i==1){ + return new ResultEntity<>(HttpStatus.OK, "初始化密码成功!"); + } + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "初始化密码失败!"); } + //微信绑定***** + //导入 ***** 创建资金账户 + @PostMapping("/uploadStudentUserInfo") + @ApiOperation("学生管理-导入学生账号") + @AnonymousAccess + public ResultEntity uploadStudentUserInfo(@RequestParam MultipartFile file){ + // 基本校验 + if (file.isEmpty()) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "上传文件不能为空!"); + } + + String originalFilename = file.getOriginalFilename(); + if (!originalFilename.endsWith(".xls") && !originalFilename.endsWith(".xlsx")) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "请上传Excel文件!"); + } + if (file.getSize() > 10 * 1024 * 1024) { // 10MB限制 + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "文件大小不能超过10MB!"); + } + try (InputStream inputStream = file.getInputStream()) { + // 解析Excel + List studentList = EasyExcel.read(inputStream) + .head(StudentImportDTO.class) + .sheet() + .doReadSync(); + + // 数据校验 + List errorMessages = validateService.validateStudentData(studentList); + if (!errorMessages.isEmpty()) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "数据校验失败!",errorMessages); + } + + // 异步处理导入***** + importService.processStudentImport(studentList); + return new ResultEntity<>(HttpStatus.OK, "导入成功!"); + + } catch (Exception e) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "数据校验失败!",e.getMessage()); + } + } + + //导出 + @PostMapping("/exportStudentUserInfo") + @ApiOperation("学生管理-导出") + @AnonymousAccess + public void exportStudentUserInfo(HttpServletResponse response, + @RequestParam String schoolId) { + if(StringUtils.isNotBlank(schoolId)){ + UserinfoExample userInfoExample = new UserinfoExample(); + userInfoExample.createCriteria().andSchoolIdEqualTo(schoolId).andRoleEqualTo(4); + List list = userinfoMapper.selectByExample(userInfoExample); + //导出的表名 + String title = "学生账号汇总"; + //表中第一行表头字段 + String[] headers = {"姓名", "学号", "性别", "手机号", "邮箱"}; + + //具体需要写入excel需要哪些字段,这些字段取自UserReward类,也就是上面的实际数据结果集的泛型 + List listColumn = Arrays.asList("name", "username", "sex", "phone", "email"); + try { + FilePortUtil.exportExcel(response, title, headers, list, listColumn); + } catch (Exception e) { + e.printStackTrace(); + } + } + } } diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/Userinfo.java b/src/main/java/com/sztzjy/linkCommerce/entity/Userinfo.java index fc6c3e7..70a6478 100644 --- a/src/main/java/com/sztzjy/linkCommerce/entity/Userinfo.java +++ b/src/main/java/com/sztzjy/linkCommerce/entity/Userinfo.java @@ -69,6 +69,27 @@ public class Userinfo { @ApiModelProperty(notes = "班级ID(关联班级表,教师账号为null)") 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() { return userId; } diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/dto/SchoolClassDto.java b/src/main/java/com/sztzjy/linkCommerce/entity/dto/SchoolClassDto.java new file mode 100644 index 0000000..4ebc9d0 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/entity/dto/SchoolClassDto.java @@ -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; +} diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/dto/SchoolFacultyDto.java b/src/main/java/com/sztzjy/linkCommerce/entity/dto/SchoolFacultyDto.java new file mode 100644 index 0000000..95ed2ea --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/entity/dto/SchoolFacultyDto.java @@ -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; +} diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/dto/SchoolMajorDto.java b/src/main/java/com/sztzjy/linkCommerce/entity/dto/SchoolMajorDto.java new file mode 100644 index 0000000..66d0195 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/entity/dto/SchoolMajorDto.java @@ -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; +} diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/importDto/StudentImportDTO.java b/src/main/java/com/sztzjy/linkCommerce/entity/importDto/StudentImportDTO.java new file mode 100644 index 0000000..639bb2f --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/entity/importDto/StudentImportDTO.java @@ -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; +} diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/importDto/TeacherImportDTO.java b/src/main/java/com/sztzjy/linkCommerce/entity/importDto/TeacherImportDTO.java new file mode 100644 index 0000000..8eaba68 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/entity/importDto/TeacherImportDTO.java @@ -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; +} diff --git a/src/main/java/com/sztzjy/linkCommerce/mapper/CgxqycAnswerMapper.java b/src/main/java/com/sztzjy/linkCommerce/mapper/CgxqycAnswerMapper.java index 7a4259b..db171b2 100644 --- a/src/main/java/com/sztzjy/linkCommerce/mapper/CgxqycAnswerMapper.java +++ b/src/main/java/com/sztzjy/linkCommerce/mapper/CgxqycAnswerMapper.java @@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper; import com.sztzjy.linkCommerce.entity.CgxqycAnswer; import com.sztzjy.linkCommerce.entity.CgxqycAnswerExample; 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 { long countByExample(CgxqycAnswerExample example); diff --git a/src/main/java/com/sztzjy/linkCommerce/mapper/CgxqycStuAnswerMapper.java b/src/main/java/com/sztzjy/linkCommerce/mapper/CgxqycStuAnswerMapper.java index f302bda..39d7cb5 100644 --- a/src/main/java/com/sztzjy/linkCommerce/mapper/CgxqycStuAnswerMapper.java +++ b/src/main/java/com/sztzjy/linkCommerce/mapper/CgxqycStuAnswerMapper.java @@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper; import com.sztzjy.linkCommerce.entity.CgxqycStuAnswer; import com.sztzjy.linkCommerce.entity.CgxqycStuAnswerExample; 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 { long countByExample(CgxqycStuAnswerExample example); diff --git a/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolClassMapper.java b/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolClassMapper.java index e5c088e..5c8fdae 100644 --- a/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolClassMapper.java +++ b/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolClassMapper.java @@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper; import com.sztzjy.linkCommerce.entity.SchoolClass; import com.sztzjy.linkCommerce.entity.SchoolClassExample; 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 { long countByExample(SchoolClassExample example); diff --git a/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolFacultyMapper.java b/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolFacultyMapper.java index 036a5ae..4cf8ddd 100644 --- a/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolFacultyMapper.java +++ b/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolFacultyMapper.java @@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper; import com.sztzjy.linkCommerce.entity.SchoolFaculty; import com.sztzjy.linkCommerce.entity.SchoolFacultyExample; 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 { long countByExample(SchoolFacultyExample example); diff --git a/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolMajorMapper.java b/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolMajorMapper.java index cea0359..31a0006 100644 --- a/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolMajorMapper.java +++ b/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolMajorMapper.java @@ -3,8 +3,11 @@ package com.sztzjy.linkCommerce.mapper; import com.sztzjy.linkCommerce.entity.SchoolMajor; import com.sztzjy.linkCommerce.entity.SchoolMajorExample; 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 { long countByExample(SchoolMajorExample example); @@ -27,4 +30,6 @@ public interface SchoolMajorMapper { int updateByPrimaryKeySelective(SchoolMajor record); int updateByPrimaryKey(SchoolMajor record); + + List findSchoolMajorList(@Param("schoolMajorName") String schoolMajorName,@Param("schoolFacultyId")String schoolFacultyId); } \ No newline at end of file diff --git a/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolMapper.java b/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolMapper.java index 2dcab38..e711c40 100644 --- a/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolMapper.java +++ b/src/main/java/com/sztzjy/linkCommerce/mapper/SchoolMapper.java @@ -3,8 +3,12 @@ package com.sztzjy.linkCommerce.mapper; import com.sztzjy.linkCommerce.entity.School; import com.sztzjy.linkCommerce.entity.SchoolExample; import java.util.List; + +import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +@Mapper public interface SchoolMapper { long countByExample(SchoolExample example); @@ -27,4 +31,7 @@ public interface SchoolMapper { int updateByPrimaryKeySelective(School record); int updateByPrimaryKey(School record); + + @Select("select school_name from school where school_id =#{schoolId}") + String selectSchoolNameById(@Param("schoolId") String schoolId); } \ No newline at end of file diff --git a/src/main/java/com/sztzjy/linkCommerce/mapper/StuGradeMapper.java b/src/main/java/com/sztzjy/linkCommerce/mapper/StuGradeMapper.java index 6684d89..a0abeb4 100644 --- a/src/main/java/com/sztzjy/linkCommerce/mapper/StuGradeMapper.java +++ b/src/main/java/com/sztzjy/linkCommerce/mapper/StuGradeMapper.java @@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper; import com.sztzjy.linkCommerce.entity.StuGrade; import com.sztzjy.linkCommerce.entity.StuGradeExample; 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 { long countByExample(StuGradeExample example); diff --git a/src/main/java/com/sztzjy/linkCommerce/mapper/UserinfoMapper.java b/src/main/java/com/sztzjy/linkCommerce/mapper/UserinfoMapper.java index a9abd98..a6da269 100644 --- a/src/main/java/com/sztzjy/linkCommerce/mapper/UserinfoMapper.java +++ b/src/main/java/com/sztzjy/linkCommerce/mapper/UserinfoMapper.java @@ -3,8 +3,10 @@ package com.sztzjy.linkCommerce.mapper; import com.sztzjy.linkCommerce.entity.Userinfo; import com.sztzjy.linkCommerce.entity.UserinfoExample; 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 { long countByExample(UserinfoExample example); diff --git a/src/main/java/com/sztzjy/linkCommerce/service/ImportService.java b/src/main/java/com/sztzjy/linkCommerce/service/ImportService.java new file mode 100644 index 0000000..7af701b --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/ImportService.java @@ -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 teacherList); + + void processStudentImport(List studentList); +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/SchoolService.java b/src/main/java/com/sztzjy/linkCommerce/service/SchoolService.java new file mode 100644 index 0000000..6f26970 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/SchoolService.java @@ -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 seleteSchoolFaculty(Integer index, Integer size, String schoolId, String schoolFacultyName); + + PageInfo seleteSchoolMajor(Integer index, Integer size, String schoolId, String schoolMajorName, String schoolFacultyId); + + PageInfo 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); +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/UserInfoService.java b/src/main/java/com/sztzjy/linkCommerce/service/UserInfoService.java new file mode 100644 index 0000000..473371b --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/UserInfoService.java @@ -0,0 +1,6 @@ +package com.sztzjy.linkCommerce.service; + +public interface UserInfoService { + + boolean existsByUserName(String userName); +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/ValidateService.java b/src/main/java/com/sztzjy/linkCommerce/service/ValidateService.java new file mode 100644 index 0000000..e2f962e --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/ValidateService.java @@ -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 validateTeacherData(List teacherList); + + List validateStudentData(List studentList); +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/ImportServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/ImportServiceImpl.java new file mode 100644 index 0000000..590a3e2 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/ImportServiceImpl.java @@ -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 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 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); + } + } +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/SchoolServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/SchoolServiceImpl.java new file mode 100644 index 0000000..bff02a3 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/SchoolServiceImpl.java @@ -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 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 schoolFaculties = schoolFacultyMapper.selectByExample(schoolFacultyExample); + + // 将院系信息转换为 DTO + List 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 seleteSchoolMajor(Integer index, Integer size, String schoolId, String schoolMajorName, String schoolFacultyId) { + // 使用 PageHelper 进行分页 + PageHelper.startPage(index, size); + // 调用 Mapper 查询数据 + List schoolMajorList = schoolMajorMapper.findSchoolMajorList(schoolMajorName, schoolFacultyId); + // 返回分页结果 + return new PageInfo<>(schoolMajorList); + } + + @Override + public PageInfo 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 schoolClasses = schoolClassMapper.selectByExample(schoolClassExample); + + // 将院系信息转换为 DTO + List 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 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 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 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 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 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 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 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 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 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 schoolMajorList = schoolMajorMapper.selectByExample(schoolMajorExample); + if (schoolMajorList.isEmpty() || schoolMajorList == null) { + return null; + } else { + return schoolMajorList.get(0).getSchoolMajorId(); + } + } + +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/UserInfoServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/UserInfoServiceImpl.java new file mode 100644 index 0000000..807a8ea --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/UserInfoServiceImpl.java @@ -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 userInfos = userInfoMapper.selectByExample(userInfoExample); + if(userInfos.isEmpty() || userInfos==null){ + return false; + }else { + return true; + } + } +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/ValidateServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/ValidateServiceImpl.java new file mode 100644 index 0000000..7124469 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/ValidateServiceImpl.java @@ -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 validateTeacherData(List teacherList) { + List errors = new ArrayList<>(); + + if (teacherList == null || teacherList.isEmpty()) { + errors.add("Excel中没有数据"); + return errors; + } + + // 用于检查工号重复 + Set 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 validateStudentData(List studentList) { + List errors = new ArrayList<>(); + + if (studentList == null || studentList.isEmpty()) { + errors.add("Excel中没有数据"); + return errors; + } + + // 用于检查工号重复 + Set 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; + } +} diff --git a/src/main/java/com/sztzjy/linkCommerce/util/Pinyin4jUtil.java b/src/main/java/com/sztzjy/linkCommerce/util/Pinyin4jUtil.java new file mode 100644 index 0000000..abc98f0 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/util/Pinyin4jUtil.java @@ -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()); +// } +} diff --git a/src/main/resources/mappers/SchoolMajorMapper.xml b/src/main/resources/mappers/SchoolMajorMapper.xml index 9b28b10..69ae1bd 100644 --- a/src/main/resources/mappers/SchoolMajorMapper.xml +++ b/src/main/resources/mappers/SchoolMajorMapper.xml @@ -241,4 +241,28 @@ create_time = #{createTime,jdbcType=TIMESTAMP} where school_major_id = #{schoolMajorId,jdbcType=VARCHAR} + + \ No newline at end of file