Sfoglia il codice sorgente

Merge branch 'master' of http://git.dayaedu.com/yonge/edu-saas

zouxuan 5 anni fa
parent
commit
db5fa69ac2

+ 17 - 4
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/SysUserDao.java

@@ -1,5 +1,6 @@
 package com.keao.edu.user.dao;
 
+import com.keao.edu.auth.api.entity.SysRole;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.auth.api.enums.UserLockFlag;
 import com.keao.edu.common.dal.BaseDAO;
@@ -12,6 +13,7 @@ public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 
 	/**
 	 * 根据手机号查询对象
+	 *
 	 * @param phone
 	 * @return
 	 */
@@ -21,6 +23,7 @@ public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 
 	/**
 	 * 根据手机号查询对象
+	 *
 	 * @param phone
 	 * @return
 	 */
@@ -28,6 +31,7 @@ public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 
 	/**
 	 * 根据状态查询
+	 *
 	 * @param status
 	 * @return
 	 */
@@ -35,24 +39,29 @@ public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 
 	/**
 	 * 删除用户角色
+	 *
 	 * @param userId
 	 */
 	void delEmployeeRole(Integer userId);
 
 	/**
 	 * 删除用户角色
+	 *
 	 * @param userIds
 	 */
 	void batchDelEmployeeRole(@Param("userIds") Set<Integer> userIds);
 
 	/**
 	 * 批量新增用户角色
+	 *
 	 * @param id
 	 * @param roles
 	 */
 	void batchAddEmployeeRole(@Param("userId") Integer id, @Param("roles") Integer roles);
+
 	/**
 	 * 批量新增用户角色
+	 *
 	 * @param userIds
 	 * @param roles
 	 */
@@ -60,6 +69,7 @@ public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 
 	/**
 	 * 获取用户角色
+	 *
 	 * @param userId
 	 * @return
 	 */
@@ -67,26 +77,29 @@ public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 
 	/**
 	 * 修改userType
+	 *
 	 * @param userId
 	 * @param userType
 	 */
 	void updateUserType(@Param("userId") Integer userId, @Param("userType") String userType);
 
 	/**
+	 * @param organId:
+	 * @return com.keao.edu.auth.api.entity.SysUser
 	 * @describe 根据部门获取用户
 	 * @author Joburgess
 	 * @date 2020.07.16
-	 * @param organId:
-	 * @return com.keao.edu.auth.api.entity.SysUser
 	 */
 	SysUser getWithOrgan(@Param("organId") Integer organId);
 
 	/**
+	 * @param phones:
+	 * @return java.util.List<com.keao.edu.auth.api.entity.SysUser>
 	 * @describe 获取手机号对应的用户
 	 * @author Joburgess
 	 * @date 2020.07.27
-	 * @param phones:
-	 * @return java.util.List<com.keao.edu.auth.api.entity.SysUser>
 	 */
 	List<SysUser> getWithPones(@Param("phones") List<String> phones);
+
+	List<SysRole> getOrganRole(@Param("tenantId") Integer tenantId);
 }

+ 1 - 1
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/enums/SettlementTypeEnum.java

@@ -9,7 +9,7 @@ import com.keao.edu.common.enums.BaseEnum;
 public enum  SettlementTypeEnum implements BaseEnum<String, SettlementTypeEnum> {
 
     INCOME_RATIO("INCOME_RATIO", "收入比例"),
-    PEOPLE_NUM("PEOPLE_NUM", "人数"),
+    PEOPLE_NUM("PEOPLE_NUM", "人数结算"),
     SUBSIDY_NUM("SUBSIDY_NUM", "组合(补贴+人数)");
 
     private String code;

+ 7 - 27
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/page/ExamManualLedgerQueryInfo.java

@@ -1,9 +1,9 @@
 package com.keao.edu.user.page;
 
-import java.util.Date;
-
 import com.keao.edu.common.page.QueryInfo;
 
+import java.util.Date;
+
 /**
  * @Author Joburgess
  * @Date 2020.07.07
@@ -12,11 +12,7 @@ public class ExamManualLedgerQueryInfo extends QueryInfo {
 
     private Integer targetOrganId;
 
-    private String examId;
-    
-    private String tenantId;
-    
-    private Integer organId;
+    private Long examId;
     
     private Date startTime;
     
@@ -32,28 +28,12 @@ public class ExamManualLedgerQueryInfo extends QueryInfo {
         this.targetOrganId = targetOrganId;
     }
 
-    public String getExamId() {
-        return examId;
-    }
-
-    public void setExamId(String examId) {
-        this.examId = examId;
-    }
-
-	public String getTenantId() {
-		return tenantId;
-	}
-
-	public void setTenantId(String tenantId) {
-		this.tenantId = tenantId;
-	}
-
-	public Integer getOrganId() {
-		return organId;
+	public Long getExamId() {
+		return examId;
 	}
 
-	public void setOrganId(Integer organId) {
-		this.organId = organId;
+	public void setExamId(Long examId) {
+		this.examId = examId;
 	}
 
 	public Date getStartTime() {

+ 1 - 1
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/OrganizationServiceImpl.java

@@ -78,7 +78,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 //				throw new BizException("手机号已被占用");
 //			}
 			if(StringUtils.isNotEmpty(user.getUserType())){
-				throw new BizException("手机号已被占用");
+				throw new BizException("手机号已被占用("+user.getPhone()+")");
 			}
 			Organization organization = organDao.findByUserId(user.getId());
 			if(organization == null){

+ 5 - 2
edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamManualLedgerMapper.xml

@@ -138,7 +138,7 @@
 		LEFT JOIN sys_user su ON eml.operator_user_id_ = su.id_
 		left join examination_basic eb on eb.id_ = eml.examination_basic_id_
 		<include refid="queryExamManualLedgersCondition"/>
-		ORDER BY eml.id_
+		ORDER BY eml.id_ DESC
 		<include refid="global.limit"/>
 	</select>
 
@@ -168,7 +168,10 @@
 				AND organ_id_=#{organId}
 			</if>
 			AND trans_direction_ = 'EXPENDITURE'
-			<if test="targetOrganId!=null">
+			<if test="targetOrganId!=null and targetOrganId==-99">
+				AND target_organ_id_ IS NULL
+			</if>
+			<if test="targetOrganId!=null and targetOrganId!=-99">
 				AND target_organ_id_=#{targetOrganId}
 			</if>
 	</select>

+ 19 - 0
edu-user/edu-user-biz/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -223,4 +223,23 @@
         </foreach>
     </delete>
 
+    <!-- 分页查询 -->
+    <resultMap type="com.keao.edu.auth.api.entity.SysRole" id="SysRole">
+        <result column="id_" property="id"/>
+        <result column="role_name_" property="roleName"/>
+        <result column="role_code_" property="roleCode"/>
+        <result column="role_desc_" property="roleDesc"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+        <result column="del_flag_" property="delFlag"/>
+        <result column="tenant_id_" property="tenantId"/>
+    </resultMap>
+    <select id="getOrganRole" resultMap="SysRole">
+        SELECT * FROM sys_role WHERE del_flag_ = 0
+        <if test="tenantId != null">
+            AND tenant_id_ = #{tenantId}
+        </if>
+        ORDER BY update_time_ DESC
+    </select>
+
 </mapper>

+ 1 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamManualLedgerController.java

@@ -41,6 +41,7 @@ public class ExamManualLedgerController extends BaseController {
 		ModelMap model = new ModelMap();
 		model.put("pageInfo", pageInfo);
 		model.put("totalAmount", examManualLedgerService.queryTotalAmount(queryInfo));
+		model.put("statistics", examManualLedgerService.getExamManualLedgerStatistics(OrganContextHolder.getOrganId(),queryInfo.getExamId(),queryInfo.getTargetOrganId()));
 		return succeed(model);
 	}
 

+ 180 - 57
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/OrganizationController.java

@@ -2,22 +2,38 @@ package com.keao.edu.user.controller;
 
 
 import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysRole;
 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.page.PageInfo;
 import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.dao.SysUserDao;
 import com.keao.edu.user.entity.Organization;
+import com.keao.edu.user.enums.SettlementTypeEnum;
 import com.keao.edu.user.page.OrganizationQueryInfo;
 import com.keao.edu.user.service.OrganizationService;
+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 java.util.List;
-
+import javax.servlet.http.HttpServletResponse;
+import java.beans.IntrospectionException;
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.util.*;
 /**
  * 合作单位服务
  */
@@ -26,69 +42,176 @@ import java.util.List;
 @RequestMapping(value = "organization")
 public class OrganizationController extends BaseController {
 
-	@Autowired
-	private OrganizationService organizationService;
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private OrganizationService organizationService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysUserDao sysUserDao;
 
-	@ApiOperation(value = "合作单位列表")
-	@GetMapping(value = "list")
+    @ApiOperation(value = "合作单位列表")
+    @GetMapping(value = "list")
     @PreAuthorize("@pcs.hasPermissions('organization/list')")
-	public HttpResponseResult<PageInfo<Organization>> configList(OrganizationQueryInfo queryInfo) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		queryInfo.setParentId(sysUser.getId());
-		if(queryInfo.getOrganId() != null){
-			queryInfo.setOrganIds(organizationService.getChildOrganIds(queryInfo.getOrganId(),false));
-		}
-		return succeed(organizationService.queryPage(queryInfo));
-	}
-
-	@ApiOperation(value = "修改合作单位")
-	@PostMapping(value = "update")
+    public HttpResponseResult<PageInfo<Organization>> configList(OrganizationQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        queryInfo.setParentId(sysUser.getId());
+        if (queryInfo.getOrganId() != null) {
+            queryInfo.setOrganIds(organizationService.getChildOrganIds(queryInfo.getOrganId(), false));
+        }
+        return succeed(organizationService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "修改合作单位")
+    @PostMapping(value = "update")
     @PreAuthorize("@pcs.hasPermissions('organization/update')")
-	public HttpResponseResult updateOrganization(@RequestBody Organization organization) {
-		organizationService.updateOrganization(organization);
-		return succeed();
-	}
+    public HttpResponseResult updateOrganization(@RequestBody Organization organization) {
+        organizationService.updateOrganization(organization);
+        return succeed();
+    }
 
-	@ApiOperation(value = "新增合作单位")
-	@PostMapping(value = "add")
+    @ApiOperation(value = "新增合作单位")
+    @PostMapping(value = "add")
     @PreAuthorize("@pcs.hasPermissions('organization/add')")
-	public HttpResponseResult addConfig(@RequestBody Organization organization) {
-		organization.setTenantId(TenantContextHolder.getTenantId());
-		organizationService.add(organization);
-		return succeed();
-	}
-
-	@ApiOperation(value = "查询合作单位")
-	@GetMapping(value = "get")
+    public HttpResponseResult addConfig(@RequestBody Organization organization) {
+        organization.setTenantId(TenantContextHolder.getTenantId());
+        organizationService.add(organization);
+        return succeed();
+    }
+
+    @ApiOperation(value = "查询合作单位")
+    @GetMapping(value = "get")
     @PreAuthorize("@pcs.hasPermissions('organization/get')")
-	public HttpResponseResult<Organization> getConfig(Integer id) {
-		return succeed(organizationService.getOrganization(id));
-	}
+    public HttpResponseResult<Organization> getConfig(Integer id) {
+        return succeed(organizationService.getOrganization(id));
+    }
 
-	@ApiOperation(value = "删除合作单位")
-	@PostMapping(value = "del")
+    @ApiOperation(value = "删除合作单位")
+    @PostMapping(value = "del")
     @PreAuthorize("@pcs.hasPermissions('organization/del')")
-	public HttpResponseResult del(Integer id) {
-		organizationService.del(id);
-		return succeed();
-	}
+    public HttpResponseResult del(Integer id) {
+        organizationService.del(id);
+        return succeed();
+    }
 
-	@ApiOperation(value = "启用/停用合作单位")
-	@PostMapping(value = "lock")
+    @ApiOperation(value = "启用/停用合作单位")
+    @PostMapping(value = "lock")
     @PreAuthorize("@pcs.hasPermissions('organization/lock')")
-	public HttpResponseResult lock(Integer id,Integer lockFlag) {
-		organizationService.lock(id,lockFlag);
-		return succeed();
-	}
-
-	@ApiOperation(value = "获取当前分部及其所有子合作单位")
-	@GetMapping(value = "getChildOrgans")
-	@PreAuthorize("@pcs.hasPermissions('organization/getChildOrgans')")
-	public HttpResponseResult<List<Organization>> getChildOrgans(Integer includeSelf){
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		Organization organization = organizationService.findByUserId(sysUser.getId());
-		return succeed(organizationService.getChildOrgans(organization.getId(), includeSelf==1));
-	}
+    public HttpResponseResult lock(Integer id, Integer lockFlag) {
+        organizationService.lock(id, lockFlag);
+        return succeed();
+    }
+
+    @ApiOperation(value = "获取当前分部及其所有子合作单位")
+    @GetMapping(value = "getChildOrgans")
+    @PreAuthorize("@pcs.hasPermissions('organization/getChildOrgans')")
+    public HttpResponseResult<List<Organization>> getChildOrgans(Integer includeSelf) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Organization organization = organizationService.findByUserId(sysUser.getId());
+        return succeed(organizationService.getChildOrgans(organization.getId(), includeSelf == 1));
+    }
+
+    @ApiOperation(value = "导入合作单位")
+    @PostMapping(value = "importOrgan")
+    @PreAuthorize("@pcs.hasPermissions('organization/importOrgan')")
+    public HttpResponseResult importOrgan(@RequestParam("file") MultipartFile file) throws IOException {
+        String tenantId = TenantContextHolder.getTenantId();
+
+        Map<String, List<Map<String, Object>>> sheetsListMap = POIUtil.importExcel(file.getInputStream(), 2, file.getOriginalFilename());
+
+        File columnFile = ResourceUtils.getFile("classpath:" + "columnMapper.ini");
+        List<IniFileEntity> organizationColumns = IniFileUtil.readIniFile(columnFile).get("organization");
+
+        List<SysRole> organRoles = sysUserDao.getOrganRole(Integer.parseInt(tenantId));
+
+
+        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 organizationColumn : organizationColumns) {
+                                if (!s.equals(organizationColumn.getKey())) continue;
+                                objectMap.put(organizationColumn.getValue(), row.get(s));
+
+                                if (organizationColumn.getValue().equals("contactPhone")) {
+                                    user.setPhone(row.get(s).toString());
+                                }
+                                if (organizationColumn.getValue().equals("shareProfitAmount")) {
+                                    objectMap.put(organizationColumn.getValue(),new BigDecimal(row.get(s).toString()));
+                                }
+
+                                if (organizationColumn.getValue().equals("roleName")) {
+                                    for (SysRole organRole : organRoles) {
+                                        if (organRole.getRoleName().equals(row.get(s).toString())) {
+                                            user.setRoles(organRole.getId());
+                                            break;
+                                        }
+                                    }
+                                }
+                                if (organizationColumn.getValue().equals("settlementType")) {
+                                    for (SettlementTypeEnum settlementType : SettlementTypeEnum.values()) {
+                                        if (settlementType.getMsg().equals(row.get(s).toString())) {
+                                            objectMap.put("settlementType", settlementType);
+                                            break;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
+                        try {
+                            Organization organization = MapUtil.mapToJavaBean(Organization.class, objectMap);
+                            organization.setTenantId(tenantId);
+                            organization.setSysUser(user);
+                            organizationService.add(organization);
+                        } catch (IllegalAccessException ex) {
+                            ex.printStackTrace();
+                        } catch (IntrospectionException ex) {
+                            ex.printStackTrace();
+                        } catch (InstantiationException ex) {
+                            ex.printStackTrace();
+                        }
+                    }
+                }
+        );
+
+        return null;
+    }
+
+    @ApiOperation(value = "获取导入模板")
+    @GetMapping(value = "getImportTemplate")
+    @PreAuthorize("@pcs.hasPermissions('organization/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> organizationColumns = stringListMap.get("organization");
+
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            String[] header = organizationColumns.stream().map(IniFileEntity::getKey).toArray(String[]::new);
+
+            List<Organization> organizations = new ArrayList<>();
+
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, null, organizations);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=organization-" + 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();
+                }
+            }
+        }
+    }
+
 }

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

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

@@ -1,6 +1,25 @@
+[test]
 曲目名称=songName
 曲目作者=songAuthor
 曲目专业=subjectList
 曲目级别=levelList
 曲目类别(练习曲or演奏曲)=type
-曲谱=fileUrlList
+曲谱=fileUrlList
+
+[organization]
+合作单位名字 = name
+联系人名字 = contactName
+联系人电话 = contactPhone
+角色= roleName
+分润方式 = settlementType
+分润比 = shareProfitAmount
+
+[teacher]
+老师姓名 = realName
+手机号 = phone
+职称 = title
+专业(,分隔) = subjectIdList
+结算方式 = salarySettlementType
+薪酬 = salary
+证书编号 = certificateNo
+所在地 = city