新增修改教职工参数校验;获取教职工导入模板;教职工信息导入;
This commit is contained in:
parent
5e0629e74a
commit
4cd97ae5e3
|
@ -73,6 +73,11 @@
|
||||||
<groupId>org.dromara</groupId>
|
<groupId>org.dromara</groupId>
|
||||||
<artifactId>ruoyi-common-excel</artifactId>
|
<artifactId>ruoyi-common-excel</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.dromara</groupId>
|
||||||
|
<artifactId>ruoyi-system</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import org.dromara.common.core.validate.AddGroup;
|
import org.dromara.common.core.validate.AddGroup;
|
||||||
import org.dromara.common.core.validate.EditGroup;
|
import org.dromara.common.core.validate.EditGroup;
|
||||||
|
import org.dromara.common.excel.core.ExcelResult;
|
||||||
import org.dromara.common.excel.utils.ExcelUtil;
|
import org.dromara.common.excel.utils.ExcelUtil;
|
||||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||||
import org.dromara.common.log.annotation.Log;
|
import org.dromara.common.log.annotation.Log;
|
||||||
|
@ -16,11 +17,16 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.web.core.BaseController;
|
import org.dromara.common.web.core.BaseController;
|
||||||
import org.dromara.file.domain.bo.SysTeacherBo;
|
import org.dromara.file.domain.bo.SysTeacherBo;
|
||||||
|
import org.dromara.file.domain.vo.SysTeacherImportVo;
|
||||||
import org.dromara.file.domain.vo.SysTeacherVo;
|
import org.dromara.file.domain.vo.SysTeacherVo;
|
||||||
|
import org.dromara.file.listener.SysTeacherImportListener;
|
||||||
import org.dromara.file.service.ISysTeacherService;
|
import org.dromara.file.service.ISysTeacherService;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -67,6 +73,27 @@ public class SysTeacherController extends BaseController {
|
||||||
ExcelUtil.exportExcel(list, "教职工信息", SysTeacherVo.class, response);
|
ExcelUtil.exportExcel(list, "教职工信息", SysTeacherVo.class, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入数据
|
||||||
|
*
|
||||||
|
* @param file 导入文件
|
||||||
|
*/
|
||||||
|
@Log(title = "用户管理", businessType = BusinessType.IMPORT)
|
||||||
|
@SaCheckPermission("school:teacher:import")
|
||||||
|
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||||
|
public R<Void> importData(@RequestPart("file") MultipartFile file) throws Exception {
|
||||||
|
ExcelResult<SysTeacherImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysTeacherImportVo.class, new SysTeacherImportListener());
|
||||||
|
return R.ok(result.getAnalysis());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取导入模板
|
||||||
|
*/
|
||||||
|
@PostMapping("/importTemplate")
|
||||||
|
public void importTemplate(HttpServletResponse response) {
|
||||||
|
ExcelUtil.exportExcel(new ArrayList<>(), "教职工数据", SysTeacherImportVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取教职工信息详细信息
|
* 获取教职工信息详细信息
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.dromara.file.domain.bo;
|
package org.dromara.file.domain.bo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import io.github.linpeilie.annotations.AutoMapper;
|
import io.github.linpeilie.annotations.AutoMapper;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
@ -9,7 +10,6 @@ import org.dromara.common.core.validate.AddGroup;
|
||||||
import org.dromara.common.core.validate.EditGroup;
|
import org.dromara.common.core.validate.EditGroup;
|
||||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||||
import org.dromara.file.domain.SysTeacher;
|
import org.dromara.file.domain.SysTeacher;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ public class SysTeacherBo extends BaseEntity {
|
||||||
/**
|
/**
|
||||||
* 出生日期
|
* 出生日期
|
||||||
*/
|
*/
|
||||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
private Date birthday;
|
private Date birthday;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
package org.dromara.file.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||||
|
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 教职工对象导入VO
|
||||||
|
*
|
||||||
|
* @author cjw
|
||||||
|
* @version V1.0.0
|
||||||
|
* @date 2024/5/30 14:53
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class SysTeacherImportVo {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门ID
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "年级/班级名称")
|
||||||
|
private String deptName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 教职工姓名
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "教职工姓名")
|
||||||
|
private String teacherName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 手机号码
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "手机号码")
|
||||||
|
private String phonenumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作号码
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "工作号码")
|
||||||
|
private String telephone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户邮箱
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "用户邮箱")
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学历
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "教职工学历", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(dictType = "sys_education")
|
||||||
|
private String educationCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学位
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "教职工学位", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(dictType = "sys_degree")
|
||||||
|
private String degreeCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学科
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "教职工学科", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(dictType = "sys_subject")
|
||||||
|
private String subjectCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 职务
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "教职工职务", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(dictType = "sys_post")
|
||||||
|
private String post;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户性别(0男 1女 2未知)
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "教职工性别", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(dictType = "sys_user_sex")
|
||||||
|
private String sex;
|
||||||
|
}
|
|
@ -1,14 +1,12 @@
|
||||||
package org.dromara.file.domain.vo;
|
package org.dromara.file.domain.vo;
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
|
||||||
import org.dromara.file.domain.SysTeacher;
|
|
||||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
|
||||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
|
||||||
import io.github.linpeilie.annotations.AutoMapper;
|
import io.github.linpeilie.annotations.AutoMapper;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||||
|
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||||
|
import org.dromara.file.domain.SysTeacher;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
package org.dromara.file.listener;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.alibaba.excel.context.AnalysisContext;
|
||||||
|
import com.alibaba.excel.event.AnalysisEventListener;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
|
import org.dromara.common.core.utils.SpringUtils;
|
||||||
|
import org.dromara.common.core.utils.ValidatorUtils;
|
||||||
|
import org.dromara.common.excel.core.ExcelListener;
|
||||||
|
import org.dromara.common.excel.core.ExcelResult;
|
||||||
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
|
import org.dromara.file.domain.bo.SysTeacherBo;
|
||||||
|
import org.dromara.file.domain.vo.SysTeacherImportVo;
|
||||||
|
import org.dromara.file.domain.vo.SysTeacherVo;
|
||||||
|
import org.dromara.file.service.ISysTeacherService;
|
||||||
|
import org.dromara.system.service.ISysDeptService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统用户自定义导入
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class SysTeacherImportListener extends AnalysisEventListener<SysTeacherImportVo> implements ExcelListener<SysTeacherImportVo> {
|
||||||
|
|
||||||
|
private final ISysTeacherService teacherService;
|
||||||
|
private final ISysDeptService deptService;
|
||||||
|
private final Long operUserId;
|
||||||
|
private int successNum = 0;
|
||||||
|
private int failureNum = 0;
|
||||||
|
private final StringBuilder successMsg = new StringBuilder();
|
||||||
|
private final StringBuilder failureMsg = new StringBuilder();
|
||||||
|
|
||||||
|
public SysTeacherImportListener() {
|
||||||
|
this.teacherService = SpringUtils.getBean(ISysTeacherService.class);
|
||||||
|
this.deptService = SpringUtils.getBean(ISysDeptService.class);
|
||||||
|
this.operUserId = LoginHelper.getUserId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invoke(SysTeacherImportVo userVo, AnalysisContext context) {
|
||||||
|
SysTeacherVo sysTeacher = this.teacherService.selectTeacherByPhonenumber(userVo.getPhonenumber());
|
||||||
|
try {
|
||||||
|
// 验证是否存在这个用户
|
||||||
|
if (ObjectUtil.isNull(sysTeacher)) {
|
||||||
|
Long deptId = this.deptService.selectIdBuName(userVo.getDeptName());
|
||||||
|
SysTeacherBo teacher = BeanUtil.toBean(userVo, SysTeacherBo.class);
|
||||||
|
ValidatorUtils.validate(teacher);
|
||||||
|
teacher.setCreateBy(operUserId);
|
||||||
|
teacher.setDeptId(deptId);
|
||||||
|
teacherService.insertByBo(teacher);
|
||||||
|
successNum++;
|
||||||
|
successMsg.append("<br/>").append(successNum).append("、账号 ").append(teacher.getTeacherName()).append(" 导入成功");
|
||||||
|
} else {
|
||||||
|
failureNum++;
|
||||||
|
failureMsg.append("<br/>").append(failureNum).append("、账号 ").append(sysTeacher.getTeacherName()).append(" 已存在");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
failureNum++;
|
||||||
|
String msg = "<br/>" + failureNum + "、账号 " + userVo.getTeacherName() + " 导入失败:";
|
||||||
|
failureMsg.append(msg).append(e.getMessage());
|
||||||
|
log.error(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAfterAllAnalysed(AnalysisContext context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExcelResult<SysTeacherImportVo> getExcelResult() {
|
||||||
|
return new ExcelResult<>() {
|
||||||
|
@Override
|
||||||
|
public String getAnalysis() {
|
||||||
|
if (failureNum > 0) {
|
||||||
|
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
|
||||||
|
throw new ServiceException(failureMsg.toString());
|
||||||
|
} else {
|
||||||
|
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
|
||||||
|
}
|
||||||
|
return successMsg.toString();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public List<SysTeacherImportVo> getList() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getErrorList() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -65,4 +65,12 @@ public interface ISysTeacherService {
|
||||||
* @return 是否删除成功
|
* @return 是否删除成功
|
||||||
*/
|
*/
|
||||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过手机号查询教职工
|
||||||
|
*
|
||||||
|
* @param phonenumber 用户名
|
||||||
|
* @return 用户对象信息
|
||||||
|
*/
|
||||||
|
SysTeacherVo selectTeacherByPhonenumber(String phonenumber);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.dromara.file.service.impl;
|
package org.dromara.file.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
|
@ -38,7 +40,7 @@ public class SysTeacherServiceImpl implements ISysTeacherService {
|
||||||
* @return 教职工信息
|
* @return 教职工信息
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public SysTeacherVo queryById(Long teacherId){
|
public SysTeacherVo queryById(Long teacherId) {
|
||||||
return baseMapper.selectVoById(teacherId);
|
return baseMapper.selectVoById(teacherId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,8 +120,19 @@ public class SysTeacherServiceImpl implements ISysTeacherService {
|
||||||
/**
|
/**
|
||||||
* 保存前的数据校验
|
* 保存前的数据校验
|
||||||
*/
|
*/
|
||||||
private void validEntityBeforeSave(SysTeacher entity){
|
private void validEntityBeforeSave(SysTeacher entity) {
|
||||||
//TODO 做一些数据校验,如唯一约束
|
SysTeacherVo sysTeacherVo = baseMapper.selectVoOne(new LambdaQueryWrapper<SysTeacher>().eq(SysTeacher::getPhonenumber, entity.getPhonenumber()));
|
||||||
|
if(ObjectUtil.isNull(entity.getTeacherId())) {
|
||||||
|
if (ObjectUtil.isNotNull(sysTeacherVo)) {
|
||||||
|
throw new ServiceException("存在相同手机号,请确认后再新增");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if (ObjectUtil.isNotNull(sysTeacherVo)) {
|
||||||
|
if(ObjectUtil.equals(sysTeacherVo.getTeacherId().toString(),entity.getTeacherId().toString()) ){
|
||||||
|
throw new ServiceException("存在相同手机号,请确认后再新增");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -131,9 +144,14 @@ public class SysTeacherServiceImpl implements ISysTeacherService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
if(isValid){
|
if (isValid) {
|
||||||
//TODO 做一些业务上的校验,判断是否需要校验
|
//TODO 做一些业务上的校验,判断是否需要校验
|
||||||
}
|
}
|
||||||
return baseMapper.deleteBatchIds(ids) > 0;
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SysTeacherVo selectTeacherByPhonenumber(String phonenumber) {
|
||||||
|
return baseMapper.selectVoOne(new LambdaQueryWrapper<SysTeacher>().eq(SysTeacher::getPhonenumber, phonenumber));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,4 +130,6 @@ public interface ISysDeptService {
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
int deleteDeptById(Long deptId);
|
int deleteDeptById(Long deptId);
|
||||||
|
|
||||||
|
Long selectIdBuName(String deptName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -348,4 +348,9 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
|
||||||
return baseMapper.deleteById(deptId);
|
return baseMapper.deleteById(deptId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long selectIdBuName(String deptName) {
|
||||||
|
SysDept sysDept = baseMapper.selectOne(new LambdaQueryWrapper<SysDept>().select(SysDept::getDeptId).eq(SysDept::getDeptName, deptName));
|
||||||
|
return sysDept.getDeptId();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue