瀏覽代碼

add 老师导入

周箭河 5 年之前
父節點
當前提交
ebbef0d468

+ 171 - 32
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/TeacherController.java

@@ -1,19 +1,39 @@
 package com.keao.edu.user.controller;
 
 
+import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.controller.BaseController;
 import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.tenant.OrganContextHolder;
 import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.dao.SubjectDao;
+import com.keao.edu.user.entity.Subject;
 import com.keao.edu.user.entity.Teacher;
+import com.keao.edu.user.enums.TeacherSettlementTypeEnum;
 import com.keao.edu.user.page.TeacherQueryInfo;
 import com.keao.edu.user.service.TeacherService;
+import com.keao.edu.util.collection.MapUtil;
+import com.keao.edu.util.date.DateUtil;
+import com.keao.edu.util.excel.POIUtil;
+import com.keao.edu.util.iniFile.IniFileEntity;
+import com.keao.edu.util.iniFile.IniFileUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.ResourceUtils;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.util.*;
 
 /**
  * 系统配置控制层
@@ -23,48 +43,167 @@ import org.springframework.web.bind.annotation.*;
 @RequestMapping(value = "teacher")
 public class TeacherController extends BaseController {
 
-	@Autowired
-	private TeacherService teacherService;
+    @Autowired
+    private TeacherService teacherService;
+    @Autowired
+    private SubjectDao subjectDao;
 
-	@ApiOperation(value = "教师列表")
-	@GetMapping(value = "list")
+    @ApiOperation(value = "教师列表")
+    @GetMapping(value = "list")
     @PreAuthorize("@pcs.hasPermissions('teacher/list')")
-	public HttpResponseResult<PageInfo<Teacher>> list(TeacherQueryInfo queryInfo) {
+    public HttpResponseResult<PageInfo<Teacher>> list(TeacherQueryInfo queryInfo) {
 		/*if(queryInfo.getOrganId() != null){
 			queryInfo.setOrganIds(organizationService.getChildOrganIds(queryInfo.getOrganId(),true));
 		}*/
-		return succeed(teacherService.queryTeacherPage(queryInfo));
-	}
+        return succeed(teacherService.queryTeacherPage(queryInfo));
+    }
 
-	@ApiOperation(value = "修改教师")
-	@PostMapping(value = "update")
+    @ApiOperation(value = "修改教师")
+    @PostMapping(value = "update")
     @PreAuthorize("@pcs.hasPermissions('teacher/update')")
-	public HttpResponseResult update(@RequestBody Teacher teacher) {
-		teacherService.updateTeacher(teacher);
-		return succeed();
-	}
+    public HttpResponseResult update(@RequestBody Teacher teacher) {
+        teacherService.updateTeacher(teacher);
+        return succeed();
+    }
 
-	@ApiOperation(value = "新增教师")
-	@PostMapping(value = "add")
+    @ApiOperation(value = "新增教师")
+    @PostMapping(value = "add")
     @PreAuthorize("@pcs.hasPermissions('teacher/add')")
-	public HttpResponseResult add(@RequestBody Teacher teacher) {
-		teacher.setTenantId(TenantContextHolder.getTenantId());
-		teacher.setOrganId(OrganContextHolder.getOrganId());
-		return succeed(teacherService.add(teacher));
-	}
-
-	@ApiOperation(value = "查询教师")
-	@GetMapping(value = "get")
+    public HttpResponseResult add(@RequestBody Teacher teacher) {
+        teacher.setTenantId(TenantContextHolder.getTenantId());
+        teacher.setOrganId(OrganContextHolder.getOrganId());
+        return succeed(teacherService.add(teacher));
+    }
+
+    @ApiOperation(value = "查询教师")
+    @GetMapping(value = "get")
     @PreAuthorize("@pcs.hasPermissions('teacher/get')")
-	public HttpResponseResult<Teacher> get(Integer id) {
-		return succeed(teacherService.get(id));
-	}
+    public HttpResponseResult<Teacher> get(Integer id) {
+        return succeed(teacherService.get(id));
+    }
 
-	@ApiOperation(value = "删除教师")
-	@PostMapping(value = "del")
+    @ApiOperation(value = "删除教师")
+    @PostMapping(value = "del")
     @PreAuthorize("@pcs.hasPermissions('teacher/del')")
-	public HttpResponseResult del(Integer id) {
-		teacherService.del(id);
-		return succeed();
-	}
+    public HttpResponseResult del(Integer id) {
+        teacherService.del(id);
+        return succeed();
+    }
+
+    @ApiOperation(value = "导入老师")
+    @PostMapping(value = "importTeacher")
+    @PreAuthorize("@pcs.hasPermissions('teacher/importTeacher')")
+    public HttpResponseResult<List<Teacher>> importTeacher(@RequestParam("file") MultipartFile file) throws IOException {
+        String tenantId = TenantContextHolder.getTenantId();
+        Integer organId = OrganContextHolder.getOrganId();
+
+        Map<String, List<Map<String, Object>>> sheetsListMap = POIUtil.importExcel(file.getInputStream(), 2, file.getOriginalFilename());
+
+        File columnFile = ResourceUtils.getFile("classpath:" + "columnMapper.ini");
+        List<IniFileEntity> columns = IniFileUtil.readIniFile(columnFile).get("teacher");
+        List<Subject> subSubjects = subjectDao.findSubSubjects();
+        List<Teacher> teachers = new ArrayList<>();
+        sheetsListMap.keySet().forEach(e -> {
+            List<Map<String, Object>> sheet = sheetsListMap.get(e);
+            for (Map<String, Object> row : sheet) {
+                SysUser user = new SysUser();
+                Map<String, Object> objectMap = new HashMap<>();
+
+                for (String s : row.keySet()) {
+                    for (IniFileEntity column : columns) {
+                        if (!s.equals(column.getKey())) continue;
+                        objectMap.put(column.getValue(), row.get(s));
+
+                        if (column.getValue().equals("phone")) {
+                            user.setPhone(row.get(s).toString());
+                        }
+                        if (column.getValue().equals("realName")) {
+                            user.setRealName(row.get(s).toString());
+                        }
+                        if (column.getValue().equals("salary")) {
+                            objectMap.put("salary", new BigDecimal(row.get(s).toString()));
+                        }
+
+                        if (column.getValue().equals("subjectIdList")) {
+                            if (row.get(s) == null) {
+                                throw new BizException("专业不能为空");
+                            }
+                            String[] subjects = row.get(s).toString().split(",");
+                            String subjectIds = "";
+                            for (String subject : subjects) {
+                                boolean has = false;
+                                for (Subject subSubject : subSubjects) {
+                                    if (subject.equals(subSubject.getName())) {
+                                        has = true;
+                                        subjectIds = subjectIds + "," + subSubject.getId();
+                                        break;
+                                    }
+                                }
+                                if (!has) {
+                                    throw new BizException(subject + "专业不存在,请核查");
+                                }
+                            }
+                            objectMap.put("subjectIdList", subjectIds.substring(1, subjectIds.length() - 1));
+                        }
+
+                        if (column.getValue().equals("salarySettlementType")) {
+                            for (TeacherSettlementTypeEnum settlementType : TeacherSettlementTypeEnum.values()) {
+                                if (settlementType.getMsg().equals(row.get(s).toString())) {
+                                    objectMap.put("salarySettlementType", settlementType);
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+
+                try {
+                    Teacher teacher = MapUtil.mapToJavaBean(Teacher.class, objectMap);
+                    teacher.setSysUser(user);
+                    teacher.setTenantId(tenantId);
+                    teacher.setOrganId(organId);
+                    teacherService.add(teacher);
+                    teachers.add(teacher);
+                } catch (Exception ex) {
+                    ex.printStackTrace();
+                }
+            }
+        });
+
+        return succeed(teachers);
+    }
+
+    @ApiOperation(value = "获取导入模板")
+    @GetMapping(value = "getImportTemplate")
+    @PreAuthorize("@pcs.hasPermissions('teacher/getImportTemplate')")
+    public void getImportTemplate(HttpServletResponse response) throws IOException {
+        File file = ResourceUtils.getFile("classpath:" + "columnMapper.ini");
+        Map<String, List<IniFileEntity>> stringListMap = IniFileUtil.readIniFile(file);
+        List<IniFileEntity> columns = stringListMap.get("teacher");
+
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            String[] header = columns.stream().map(IniFileEntity::getKey).toArray(String[]::new);
+
+            List<Teacher> teachers = new ArrayList<>();
+
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, null, teachers);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=teacher-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 }

+ 11 - 1
edu-user/edu-user-server/src/main/resources/columnMapper.ini

@@ -12,4 +12,14 @@
 联系人电话 = contactPhone
 角色= roleName
 分润方式 = settlementType
-分润比 = shareProfitAmount
+分润比 = shareProfitAmount
+
+[teacher]
+老师姓名 = realName
+手机号 = phone
+职称 = title
+专业(,分隔) = subjectIdList
+结算方式 = salarySettlementType
+薪酬 = salary
+证书编号 = certificateNo
+所在地 = city