diff --git a/ruoyi-modules/ruoyi-file/pom.xml b/ruoyi-modules/ruoyi-file/pom.xml
index d50d4ed..2228d29 100644
--- a/ruoyi-modules/ruoyi-file/pom.xml
+++ b/ruoyi-modules/ruoyi-file/pom.xml
@@ -73,6 +73,11 @@
org.dromara
ruoyi-common-excel
+
+
+ org.dromara
+ ruoyi-system
+
diff --git a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/controller/SysTeacherController.java b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/controller/SysTeacherController.java
index 11c2145..6eaa922 100644
--- a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/controller/SysTeacherController.java
+++ b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/controller/SysTeacherController.java
@@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
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.idempotent.annotation.RepeatSubmit;
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.web.core.BaseController;
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.listener.SysTeacherImportListener;
import org.dromara.file.service.ISysTeacherService;
+import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -67,6 +73,27 @@ public class SysTeacherController extends BaseController {
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 importData(@RequestPart("file") MultipartFile file) throws Exception {
+ ExcelResult 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);
+ }
+
/**
* 获取教职工信息详细信息
*
diff --git a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/domain/bo/SysTeacherBo.java b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/domain/bo/SysTeacherBo.java
index 5acda28..ee96036 100644
--- a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/domain/bo/SysTeacherBo.java
+++ b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/domain/bo/SysTeacherBo.java
@@ -1,5 +1,6 @@
package org.dromara.file.domain.bo;
+import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
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.mybatis.core.domain.BaseEntity;
import org.dromara.file.domain.SysTeacher;
-import org.springframework.format.annotation.DateTimeFormat;
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;
diff --git a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/domain/vo/SysTeacherImportVo.java b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/domain/vo/SysTeacherImportVo.java
new file mode 100644
index 0000000..c2aa0d1
--- /dev/null
+++ b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/domain/vo/SysTeacherImportVo.java
@@ -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;
+}
diff --git a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/domain/vo/SysTeacherVo.java b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/domain/vo/SysTeacherVo.java
index 6acafa4..8729585 100644
--- a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/domain/vo/SysTeacherVo.java
+++ b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/domain/vo/SysTeacherVo.java
@@ -1,14 +1,12 @@
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.ExcelProperty;
-import org.dromara.common.excel.annotation.ExcelDictFormat;
-import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
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.Serializable;
diff --git a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/listener/SysTeacherImportListener.java b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/listener/SysTeacherImportListener.java
new file mode 100644
index 0000000..8356e41
--- /dev/null
+++ b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/listener/SysTeacherImportListener.java
@@ -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 implements ExcelListener {
+
+ 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("
").append(successNum).append("、账号 ").append(teacher.getTeacherName()).append(" 导入成功");
+ } else {
+ failureNum++;
+ failureMsg.append("
").append(failureNum).append("、账号 ").append(sysTeacher.getTeacherName()).append(" 已存在");
+ }
+ } catch (Exception e) {
+ failureNum++;
+ String msg = "
" + failureNum + "、账号 " + userVo.getTeacherName() + " 导入失败:";
+ failureMsg.append(msg).append(e.getMessage());
+ log.error(msg, e);
+ }
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext context) {
+
+ }
+
+ @Override
+ public ExcelResult 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 getList() {
+ return null;
+ }
+
+ @Override
+ public List getErrorList() {
+ return null;
+ }
+ };
+ }
+}
diff --git a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/ISysTeacherService.java b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/ISysTeacherService.java
index b02f86d..554f29c 100644
--- a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/ISysTeacherService.java
+++ b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/ISysTeacherService.java
@@ -65,4 +65,12 @@ public interface ISysTeacherService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ /**
+ * 通过手机号查询教职工
+ *
+ * @param phonenumber 用户名
+ * @return 用户对象信息
+ */
+ SysTeacherVo selectTeacherByPhonenumber(String phonenumber);
}
diff --git a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysTeacherServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysTeacherServiceImpl.java
index 7b770df..8c00de2 100644
--- a/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysTeacherServiceImpl.java
+++ b/ruoyi-modules/ruoyi-file/src/main/java/org/dromara/file/service/impl/SysTeacherServiceImpl.java
@@ -1,5 +1,7 @@
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.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -38,7 +40,7 @@ public class SysTeacherServiceImpl implements ISysTeacherService {
* @return 教职工信息
*/
@Override
- public SysTeacherVo queryById(Long teacherId){
+ public SysTeacherVo queryById(Long teacherId) {
return baseMapper.selectVoById(teacherId);
}
@@ -118,8 +120,19 @@ public class SysTeacherServiceImpl implements ISysTeacherService {
/**
* 保存前的数据校验
*/
- private void validEntityBeforeSave(SysTeacher entity){
- //TODO 做一些数据校验,如唯一约束
+ private void validEntityBeforeSave(SysTeacher entity) {
+ SysTeacherVo sysTeacherVo = baseMapper.selectVoOne(new LambdaQueryWrapper().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
public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
- if(isValid){
+ if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
+
+ @Override
+ public SysTeacherVo selectTeacherByPhonenumber(String phonenumber) {
+ return baseMapper.selectVoOne(new LambdaQueryWrapper().eq(SysTeacher::getPhonenumber, phonenumber));
+ }
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java
index cd984d8..e00e0ab 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java
@@ -130,4 +130,6 @@ public interface ISysDeptService {
* @return 结果
*/
int deleteDeptById(Long deptId);
+
+ Long selectIdBuName(String deptName);
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java
index cb3f340..77a0f9b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java
@@ -348,4 +348,9 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
return baseMapper.deleteById(deptId);
}
+ @Override
+ public Long selectIdBuName(String deptName) {
+ SysDept sysDept = baseMapper.selectOne(new LambdaQueryWrapper().select(SysDept::getDeptId).eq(SysDept::getDeptName, deptName));
+ return sysDept.getDeptId();
+ }
}