ソースを参照

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

yonge 5 年 前
コミット
aa8257d8d6
38 ファイル変更376 行追加127 行削除
  1. 30 0
      edu-auth/edu-auth-api/src/main/java/com/keao/edu/auth/api/entity/LoginEntity.java
  2. 4 0
      edu-auth/edu-auth-server/pom.xml
  3. 1 1
      edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/AuthServerApplication.java
  4. 16 11
      edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/core/filter/PhoneLoginAuthenticationFilter.java
  5. 6 0
      edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/core/provider/PhoneAuthenticationProvider.java
  6. 7 0
      edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/service/SysUserService.java
  7. 18 0
      edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/service/impl/SysUserServiceImpl.java
  8. 12 6
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/EduUserFeignService.java
  9. 6 0
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/fallback/EduUserFeignServiceFallback.java
  10. 6 4
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/entity/ExamRoom.java
  11. 22 1
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/entity/Student.java
  12. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/UserServerApplication.java
  13. 0 3
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/config/ResourceServerConfig.java
  14. 3 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java
  15. 5 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRegistrationController.java
  16. 11 4
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomController.java
  17. 10 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/OrganizationController.java
  18. 11 6
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/StudentController.java
  19. 9 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamOrganizationRelationDao.java
  20. 10 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/OrganizationDao.java
  21. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/StudentDao.java
  22. 3 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamOrganizationRelationExtraDto.java
  23. 11 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamOrganizationRelation.java
  24. 1 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamRegistration.java
  25. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRoomService.java
  26. 9 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/OrganizationService.java
  27. 1 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/StudentService.java
  28. 27 19
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java
  29. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRegistrationServiceImpl.java
  30. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamReviewServiceImpl.java
  31. 13 12
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java
  32. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java
  33. 15 5
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/OrganizationServiceImpl.java
  34. 29 8
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/StudentServiceImpl.java
  35. 63 30
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamOrganizationRelationMapper.xml
  36. 1 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationMapper.xml
  37. 7 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/OrganizationMapper.xml
  38. 3 3
      edu-user/edu-user-server/src/main/resources/config/mybatis/StudentMapper.xml

+ 30 - 0
edu-auth/edu-auth-api/src/main/java/com/keao/edu/auth/api/entity/LoginEntity.java

@@ -9,6 +9,36 @@ public class LoginEntity {
 
     private String phone;
 
+    private String registerFlag;
+
+    private String tenantId;
+
+    private Integer organId;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getRegisterFlag() {
+        return registerFlag;
+    }
+
+    public void setRegisterFlag(String registerFlag) {
+        this.registerFlag = registerFlag;
+    }
+
+    public String getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(String tenantId) {
+        this.tenantId = tenantId;
+    }
+
     public String getSmsCode() {
         return smsCode;
     }

+ 4 - 0
edu-auth/edu-auth-server/pom.xml

@@ -91,6 +91,10 @@
             <version>1.0</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.keao.edu</groupId>
+            <artifactId>edu-user-client-api</artifactId>
+        </dependency>
     </dependencies>
 
 	<build>

+ 1 - 1
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/AuthServerApplication.java

@@ -16,7 +16,7 @@ import com.spring4all.swagger.EnableSwagger2Doc;
 
 @SpringBootApplication
 @EnableDiscoveryClient
-@EnableFeignClients({"com.keao.edu"})
+@EnableFeignClients({"com.keao.edu.auth.api.client"})
 @MapperScan("com.keao.edu.auth.dal.dao")
 @ComponentScan(basePackages="com.keao.edu")
 @Configuration

+ 16 - 11
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/core/filter/PhoneLoginAuthenticationFilter.java

@@ -1,12 +1,9 @@
 package com.keao.edu.auth.core.filter;
 
-import java.io.IOException;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.keao.edu.auth.api.entity.LoginEntity;
+import com.keao.edu.auth.api.util.SecurityConstants;
+import com.keao.edu.auth.config.token.PhoneAuthenticationToken;
+import com.keao.edu.datasource.DataSourceContextHolder;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.authentication.AbstractAuthenticationToken;
 import org.springframework.security.authentication.AuthenticationServiceException;
@@ -15,10 +12,11 @@ import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
 import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
 
-import com.keao.edu.auth.api.entity.LoginEntity;
-import com.keao.edu.auth.api.util.SecurityConstants;
-import com.keao.edu.auth.config.token.PhoneAuthenticationToken;
-import com.keao.edu.datasource.DataSourceContextHolder;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 
 public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
 
@@ -26,6 +24,8 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 	private static final String SPRING_SECURITY_RESTFUL_VERIFY_CODE_KEY = "smsCode";
 	private static final String clientIdParameter = "clientId";
 	private static final String tenantIdParameter = "tenantId";
+	private static final String registerFlagParameter = "registerFlag";
+	private static final String organIdParameter = "organId";
 
 	private static final String SPRING_SECURITY_RESTFUL_LOGIN_URL = "/smsLogin";
 	private boolean postOnly = true;
@@ -63,6 +63,11 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 		loginEntity.setClientId(clientId);
 		loginEntity.setPhone(principal);
 		loginEntity.setSmsCode(credentials);
+		String organId = obtainParameter(request, organIdParameter);
+		if(StringUtils.isNotEmpty(organId)){
+			loginEntity.setOrganId(Integer.parseInt(organId));
+		}
+		loginEntity.setRegisterFlag(obtainParameter(request, registerFlagParameter));
 
 		authRequest = new PhoneAuthenticationToken(SecurityConstants.PHONE_PRINCIPAL_PREFIX + principal, loginEntity);
 

+ 6 - 0
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/core/provider/PhoneAuthenticationProvider.java

@@ -1,5 +1,6 @@
 package com.keao.edu.auth.core.provider;
 
+import com.keao.edu.auth.api.dto.SysUserInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.InternalAuthenticationServiceException;
@@ -43,6 +44,11 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 
 		String smsCode = loginEntity.getSmsCode();
 
+		SysUserInfo userInfo = sysUserService.queryUserInfoByPhone(loginEntity.getPhone());
+		if (userInfo == null && StringUtils.isNotEmpty(loginEntity.getRegisterFlag())) {
+			sysUserService.initUser(loginEntity);
+		}
+
 		// 验证码验证
 		boolean b = smsCodeService.verifyValidCode(StringUtils.substringAfter(phone, SecurityConstants.PHONE_PRINCIPAL_PREFIX), smsCode);
 		if (!b) {

+ 7 - 0
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/service/SysUserService.java

@@ -1,6 +1,7 @@
 package com.keao.edu.auth.service;
 
 import com.keao.edu.auth.api.dto.SysUserInfo;
+import com.keao.edu.auth.api.entity.LoginEntity;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.service.BaseService;
 import com.keao.edu.im.api.entity.ImUserModel;
@@ -96,4 +97,10 @@ public interface SysUserService extends BaseService<Integer, SysUser> {
 	 */
     void refreshImToken(SysUser sysUser);
 
+	/**
+	 * 学员注册
+	 * @return
+	 */
+	SysUserInfo initUser(LoginEntity loginEntity);
+
 }

+ 18 - 0
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/service/impl/SysUserServiceImpl.java

@@ -1,6 +1,7 @@
 package com.keao.edu.auth.service.impl;
 
 import com.keao.edu.auth.api.dto.SysUserInfo;
+import com.keao.edu.auth.api.entity.LoginEntity;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.auth.dal.dao.SysUserDao;
 import com.keao.edu.auth.service.SysRoleMenuService;
@@ -12,7 +13,11 @@ import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.im.api.client.ImFeignService;
 import com.keao.edu.im.api.entity.ImResult;
 import com.keao.edu.im.api.entity.ImUserModel;
+import com.keao.edu.user.api.client.EduUserFeignService;
+import com.keao.edu.user.api.entity.Student;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -30,6 +35,8 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 	private SysRoleMenuService sysRoleMenuService;
 	@Autowired
 	private ImFeignService imFeignService;
+	@Autowired
+	private EduUserFeignService eduUserFeignService;
 
 	@Override
 	public BaseDAO<Integer, SysUser> getDAO() {
@@ -134,4 +141,15 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 		sysUserDao.refreshImToken(sysUser.getId(),sysUser.getImToken());
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public SysUserInfo initUser(LoginEntity loginEntity) {
+		if(StringUtils.equalsIgnoreCase(loginEntity.getClientId(),"STUDENT")){
+//			eduUserFeignService.studentApply(new Student(loginEntity.getOrganId(),loginEntity.getPhone()));
+			eduUserFeignService.getExamRoom(1);
+			return queryUserInfoByPhone(loginEntity.getPhone());
+		}
+		throw new UsernameNotFoundException("404.9");
+	}
+
 }

+ 12 - 6
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/EduUserFeignService.java

@@ -1,16 +1,22 @@
 package com.keao.edu.user.api.client;
 
 
+import com.keao.edu.common.config.FeignConfiguration;
 import com.keao.edu.user.api.client.fallback.EduUserFeignServiceFallback;
 import com.keao.edu.user.api.entity.ExamRoom;
-import com.keao.edu.common.config.FeignConfiguration;
+import com.keao.edu.user.api.entity.Student;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 
-@FeignClient(contextId = "eduUserFeignService", name = "user-server", configuration = { FeignConfiguration.class }, fallback = EduUserFeignServiceFallback.class)
+@FeignClient(name = "user-server", configuration = { FeignConfiguration.class }, fallback = EduUserFeignServiceFallback.class)
 public interface EduUserFeignService {
 
-	@GetMapping(value = "examRoom/get")
-	ExamRoom getExamRoom(@RequestParam("id") Integer id);
+	@RequestMapping(value = "examRoom/get", method = RequestMethod.GET)
+	ExamRoom getExamRoom(Integer id);
+
+	@PostMapping(value = "student/apply", consumes = MediaType.APPLICATION_JSON_VALUE)
+	Object studentApply(Student student);
 }

+ 6 - 0
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/fallback/EduUserFeignServiceFallback.java

@@ -2,6 +2,7 @@ package com.keao.edu.user.api.client.fallback;
 
 import com.keao.edu.user.api.client.EduUserFeignService;
 import com.keao.edu.user.api.entity.ExamRoom;
+import com.keao.edu.user.api.entity.Student;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestParam;
 
@@ -13,4 +14,9 @@ public class EduUserFeignServiceFallback implements EduUserFeignService {
 		return null;
 	}
 
+	@Override
+	public Object studentApply(Student student) {
+		return null;
+	}
+
 }

+ 6 - 4
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/entity/ExamRoom.java

@@ -3,6 +3,8 @@ package com.keao.edu.user.api.entity;
 import com.keao.edu.common.enums.YesOrNoEnum;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import java.util.Date;
+
 /**
  * 对应数据库表(exam_room):
  */
@@ -28,8 +30,8 @@ public class ExamRoom {
 	/** 助考老师(多个用逗号分隔) */
 	private String assistantTeacherUserIdList;
 	
-	/** 考试时间(json格式) */
-	private String examTime;
+	/** 考试时间 */
+	private Date examTime;
 
 	private Integer organId;
 
@@ -135,11 +137,11 @@ public class ExamRoom {
 		return this.updateTime;
 	}
 
-	public String getExamTime() {
+	public Date getExamTime() {
 		return examTime;
 	}
 
-	public void setExamTime(String examTime) {
+	public void setExamTime(Date examTime) {
 		this.examTime = examTime;
 	}
 

+ 22 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/Student.java → edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/entity/Student.java

@@ -1,4 +1,4 @@
-package com.keao.edu.user.entity;
+package com.keao.edu.user.api.entity;
 
 import com.keao.edu.auth.api.entity.SysUser;
 import io.swagger.annotations.ApiModelProperty;
@@ -21,8 +21,29 @@ public class Student extends SysUser {
 
 	private String tenantId;
 
+	private Integer organId;
+
 	private SysUser sysUser;
 
+	public Student(Integer organId, String phone) {
+		this.organId = organId;
+		SysUser user = new SysUser();
+		user.setPhone(phone);
+		this.sysUser = user;
+	}
+
+	public Student() {
+		super();
+	}
+
+	public Integer getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(Integer organId) {
+		this.organId = organId;
+	}
+
 	public SysUser getSysUser() {
 		return sysUser;
 	}

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/UserServerApplication.java

@@ -15,7 +15,7 @@ import org.springframework.web.client.RestTemplate;
 
 @SpringBootApplication
 @EnableDiscoveryClient
-@EnableFeignClients({"com.keao.edu"})
+@EnableFeignClients({"com.keao.edu.user.api.client"})
 @MapperScan({"com.keao.edu.user.dao"})
 @ComponentScan(basePackages="com.keao.edu")
 @Configuration

+ 0 - 3
edu-user/edu-user-server/src/main/java/com/keao/edu/user/config/ResourceServerConfig.java

@@ -27,9 +27,6 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 		http.authorizeRequests()
 				.antMatchers("/v2/api-docs", "/su/**")
 				.permitAll()
-				// 任何人不登录都可以获取的资源
-				// .antMatchers("/ipController/**").hasIpAddress("127.0.0.1") //特定ip可以不登录获取资源
-				// .antMatchers("/ipControll/**").access("isAuthenticated() and hasIpAddress('127.0.0.1')")// 特定ip必须登录才能获取
 				.anyRequest().authenticated().and().csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler)
 				.authenticationEntryPoint(baseAuthenticationEntryPoint).and();
 	}

+ 3 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java

@@ -36,7 +36,9 @@ public class ExamOrganizationRelationController extends BaseController {
         if(Objects.isNull(sysUser)){
             return failed("请重新登录");
         }
-        queryInfo.setOrganId(sysUser.getId());
+        if(Objects.isNull(queryInfo.getOrganId())){
+            queryInfo.setOrganId(sysUser.getId());
+        }
         return succeed(examOrganizationRelationService.queryExamOrgans(queryInfo));
     }
 

+ 5 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRegistrationController.java

@@ -14,6 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Objects;
+
 /**
  * @Author Joburgess
  * @Date 2020.06.23
@@ -33,7 +35,9 @@ public class ExamRegistrationController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('examRegistration/list')")
     public HttpResponseResult<PageInfo<ExamRegistration>> list(ExamRegistrationQueryInfo queryInfo) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        queryInfo.setOrganId(sysUser.getId());
+        if(Objects.isNull(queryInfo.getOrganId())){
+            queryInfo.setOrganId(sysUser.getId());
+        }
         return succeed(examRegistrationService.queryExamRegistrationStudents(queryInfo));
     }
 

+ 11 - 4
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomController.java

@@ -1,5 +1,7 @@
 package com.keao.edu.user.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.keao.edu.auth.api.client.SysUserFeignService;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.controller.BaseController;
@@ -15,6 +17,8 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Objects;
+
 @RestController
 @RequestMapping("examRoom")
 @Api(tags = "考场服务")
@@ -28,8 +32,10 @@ public class ExamRoomController extends BaseController {
     @ApiOperation("分页查询监考列表")
     @GetMapping(value = "/list")
     public HttpResponseResult<PageInfo<ExamRoomDto>> getList(ExamRoomQueryInfo queryInfo) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        queryInfo.setOrganId(sysUser.getId());
+        if(Objects.isNull(queryInfo.getOrganId())){
+            SysUser sysUser = sysUserFeignService.queryUserInfo();
+            queryInfo.setOrganId(sysUser.getId());
+        }
         return succeed(examRoomService.queryExamRoomPage(queryInfo));
     }
 
@@ -44,10 +50,11 @@ public class ExamRoomController extends BaseController {
 
     @ApiModelProperty("创建教室")
     @PostMapping(value = "/createExamRoom")
-    public HttpResponseResult<ExamRoom> createExamRoom(@RequestBody ExamRoom examRoom){
+    public HttpResponseResult createExamRoom(@RequestBody ExamRoom examRoom){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         examRoom.setOrganId(sysUser.getId());
-        return succeed(examRoomService.createExamRoom(examRoom));
+        examRoomService.createExamRoom(examRoom);
+        return succeed();
     }
 
     @ApiModelProperty("更新教室信息")

+ 10 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/OrganizationController.java

@@ -15,6 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * 合作单位服务
  */
@@ -67,4 +69,12 @@ public class OrganizationController extends BaseController {
 		organizationService.delete(id);
 		return succeed();
 	}
+
+	@ApiOperation(value = "获取当前分部及其所有子合作单位")
+	@GetMapping(value = "getChildOrgans")
+	@PreAuthorize("@pcs.hasPermissions('organization/getChildOrgans')")
+	public HttpResponseResult<List<Organization>> getChildOrgans(){
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		return succeed(organizationService.getChildOrgans(sysUser.getId()));
+	}
 }

+ 11 - 6
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/StudentController.java

@@ -5,15 +5,13 @@ 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.page.QueryInfo;
-import com.keao.edu.user.entity.Student;
+import com.keao.edu.user.api.entity.Student;
 import com.keao.edu.user.service.StudentService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 系统配置控制层
@@ -28,15 +26,22 @@ public class StudentController extends BaseController {
 
 	@ApiOperation(value = "学员列表")
 	@GetMapping(value = "list")
-    @PreAuthorize("@pcs.hasPermissions('teacher/list')")
+    @PreAuthorize("@pcs.hasPermissions('student/list')")
 	public HttpResponseResult<PageInfo<Student>> list(QueryInfo queryInfo) {
 		return succeed(studentService.queryPage(queryInfo));
 	}
 
 	@ApiOperation(value = "查询学员")
 	@GetMapping(value = "get")
-    @PreAuthorize("@pcs.hasPermissions('teacher/get')")
+    @PreAuthorize("@pcs.hasPermissions('student/get')")
 	public HttpResponseResult<Student> get(Integer id) {
 		return succeed(studentService.get(id));
 	}
+
+	@ApiOperation(value = "学员报名")
+	@PostMapping(value = "apply")
+	public HttpResponseResult apply(@RequestBody Student student) {
+		studentService.addStudent(student);
+		return succeed();
+	}
 }

+ 9 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamOrganizationRelationDao.java

@@ -21,6 +21,15 @@ public interface ExamOrganizationRelationDao extends BaseDAO<Long, ExamOrganizat
     int batchInsert(@Param("examOrganizationRelations") List<ExamOrganizationRelation> examOrganizationRelations);
 
     /**
+     * @describe 批量更新
+     * @author Joburgess
+     * @date 2020.06.29
+     * @param examOrganizationRelations:
+     * @return int
+     */
+    int batchUpdate(@Param("examOrganizationRelations") List<ExamOrganizationRelation> examOrganizationRelations);
+
+    /**
      * @describe 批量更新合作单位的链接发送状态
      * @author Joburgess
      * @date 2020.06.18

+ 10 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/OrganizationDao.java

@@ -19,7 +19,7 @@ public interface OrganizationDao extends BaseDAO<Integer, Organization> {
     List<Organization> getByTenant(@Param("tenantId") String tenantId);
 
     /**
-     * @describe 获取指定单位及其所有下级单位的编号
+     * @describe 获取指定单位所有下级单位的编号
      * @author Joburgess
      * @date 2020.06.28
      * @param parentOrganIdTag:
@@ -28,6 +28,15 @@ public interface OrganizationDao extends BaseDAO<Integer, Organization> {
     List<Integer> getChildOrganIds(@Param("parentOrganIdTag") String parentOrganIdTag);
 
     /**
+     * @describe 获取指定单位所有下级单位
+     * @author Joburgess
+     * @date 2020.06.28
+     * @param parentOrganIdTag:
+     * @return java.util.List<java.lang.Integer>
+     */
+    List<Organization> getChildOrgans(@Param("parentOrganIdTag") String parentOrganIdTag);
+
+    /**
      * @describe 获取下一级所有合作单位编号
      * @author Joburgess
      * @date 2020.06.28

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/StudentDao.java

@@ -1,7 +1,7 @@
 package com.keao.edu.user.dao;
 
 import com.keao.edu.common.dal.BaseDAO;
-import com.keao.edu.user.entity.Student;
+import com.keao.edu.user.api.entity.Student;
 
 public interface StudentDao extends BaseDAO<Integer, Student> {
 

+ 3 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamOrganizationRelationExtraDto.java

@@ -1,10 +1,12 @@
 package com.keao.edu.user.dto;
 
+import com.keao.edu.user.entity.ExamOrganizationRelation;
+
 /**
  * @Author Joburgess
  * @Date 2020.06.18
  */
-public class ExamOrganizationRelationExtraDto {
+public class ExamOrganizationRelationExtraDto extends ExamOrganizationRelation {
 
     private String organizationName;
 

+ 11 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamOrganizationRelation.java

@@ -41,6 +41,9 @@ public class ExamOrganizationRelation {
 	@ApiModelProperty(value = "是否已发送链接")
 	private YesOrNoEnum sendUrlFlag;
 
+	@ApiModelProperty(value = "是否允许排考")
+	private YesOrNoEnum isAllowArrangeExam;
+
 	private java.util.Date createTime;
 
 	private java.util.Date updateTime;
@@ -127,6 +130,14 @@ public class ExamOrganizationRelation {
 		this.sendUrlFlag = sendUrlFlag;
 	}
 
+	public YesOrNoEnum getIsAllowArrangeExam() {
+		return isAllowArrangeExam;
+	}
+
+	public void setIsAllowArrangeExam(YesOrNoEnum isAllowArrangeExam) {
+		this.isAllowArrangeExam = isAllowArrangeExam;
+	}
+
 	public void setCreateTime(java.util.Date createTime){
 		this.createTime = createTime;
 	}

+ 1 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamRegistration.java

@@ -1,6 +1,7 @@
 package com.keao.edu.user.entity;
 
 import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.user.api.entity.Student;
 import com.keao.edu.user.enums.StudentRegistrationStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRoomService.java

@@ -23,7 +23,7 @@ public interface ExamRoomService extends BaseService<Long, ExamRoom> {
      * @param examRoom:
      * @return com.keao.edu.user.api.entity.ExamRoom
      */
-    ExamRoom createExamRoom(ExamRoom examRoom);
+    void createExamRoom(ExamRoom examRoom);
 
     /**
      * @describe 更新教室信息

+ 9 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/OrganizationService.java

@@ -31,6 +31,15 @@ public interface OrganizationService extends BaseService<Integer, Organization>
     List<Integer> getChildOrganIds(Integer organId, boolean includeSelf);
 
     /**
+     * @describe 获取当前分部及其所有子合作单位
+     * @author Joburgess
+     * @date 2020.06.29
+     * @param organId:
+     * @return java.util.List<com.keao.edu.user.entity.Organization>
+     */
+    List<Organization> getChildOrgans(Integer organId);
+
+    /**
      * @describe 获取下一级所有合作单位编号
      * @author Joburgess
      * @date 2020.06.28

+ 1 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/StudentService.java

@@ -1,8 +1,7 @@
 package com.keao.edu.user.service;
 
 import com.keao.edu.common.service.BaseService;
-import com.keao.edu.user.entity.ExamSong;
-import com.keao.edu.user.entity.Student;
+import com.keao.edu.user.api.entity.Student;
 
 /**
  * @Author Joburgess

+ 27 - 19
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java

@@ -10,11 +10,13 @@ import com.keao.edu.user.dao.ExamOrganizationRelationDao;
 import com.keao.edu.user.dao.ExaminationBasicDao;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
 import com.keao.edu.user.entity.ExaminationBasic;
+import com.keao.edu.user.entity.Organization;
 import com.keao.edu.user.enums.ExamStatusEnum;
 import com.keao.edu.user.enums.YesOrNoEnum;
 import com.keao.edu.user.page.ExamOrganizationRelationQueryInfo;
 import com.keao.edu.user.service.ExamOrganizationRelationService;
 import com.keao.edu.user.service.OrganizationService;
+import com.keao.edu.user.service.ShortUrlService;
 import com.keao.edu.util.collection.MapUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.formula.functions.T;
@@ -37,6 +39,8 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 	private ExaminationBasicDao examinationBasicDao;
 	@Autowired
 	private OrganizationService organizationService;
+	@Autowired
+	private ShortUrlService shortUrlService;
 
 	@Override
 	public BaseDAO<Long, ExamOrganizationRelation> getDAO() {
@@ -49,7 +53,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
 
-		List<Integer> nextLevelOrganIds = organizationService.getNextLevelOrganIds(queryInfo.getOrganId(), true);
+		List<Integer> nextLevelOrganIds = organizationService.getChildOrganIds(queryInfo.getOrganId(), true);
 		params.put("organIds", nextLevelOrganIds);
 
 		List<ExamOrganizationRelation> dataList = new ArrayList<>();
@@ -82,8 +86,17 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 		if(Objects.isNull(examOrganizationRelation.getOrganId())){
 			throw new BizException("请指定合作单位");
 		}
+		Organization organization = organizationService.get(examOrganizationRelation.getOrganId());
+		if(Objects.isNull(organization)){
+			throw new BizException("合作单位不存在");
+		}
 		examOrganizationRelation.setTenantId(TenantContextHolder.getTenantId().toString());
-		examOrganizationRelation.setShareProfitAmount(BigDecimal.ZERO);
+		if(Objects.isNull(examOrganizationRelation.getSettlementType())){
+			examOrganizationRelation.setSettlementType(organization.getSettlementType());
+		}
+		if(Objects.isNull(organization.getShareProfitAmount())){
+			examOrganizationRelation.setShareProfitAmount(organization.getShareProfitAmount());
+		}
 		examOrganizationRelation.setTotalRegistrationStudentNum(BigDecimal.ZERO.intValue());
 		examOrganizationRelation.setTotalPaymentAmount(BigDecimal.ZERO);
 		Set<Integer> organIds = examOrganizationRelationDao.getOrganIdsWithExam(examOrganizationRelation.getExaminationBasicId());
@@ -103,32 +116,27 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 		if(StringUtils.isBlank(organIdStrs)){
 			throw new BizException("请指定合作单位");
 		}
-		Set<Integer> existOrganizationIds = examOrganizationRelationDao.getOrganIdsWithExam(examId);
+		List<ExamOrganizationRelation> examOrgans = examOrganizationRelationDao.getWithExam(examId);
+		Set<Integer> existOrganizationIds = examOrgans.stream().map(ExamOrganizationRelation::getOrganId).collect(Collectors.toSet());
 		List<Integer> organIds = Arrays.asList(organIdStrs.split(",")).stream().map(e -> Integer.valueOf(e)).collect(Collectors.toList());
-		List<Integer> updateSendFlagOrganizationIds=new ArrayList<>();
-		List<ExamOrganizationRelation> examOrganizationRelations=new ArrayList<>();
 		for (Integer organId : organIds) {
-			if(existOrganizationIds.contains(organId)){
-				updateSendFlagOrganizationIds.add(organId);
-				continue;
+			if(!existOrganizationIds.contains(organId)){
+				throw new BizException("存在未关联到考级项目的合作单位");
 			}
-			ExamOrganizationRelation examOrganizationRelation=new ExamOrganizationRelation();
-			examOrganizationRelation.setExaminationBasicId(examId);
-			examOrganizationRelation.setOrganId(organId);
-			examOrganizationRelation.setSendUrlFlag(YesOrNoEnum.YES);
-			examOrganizationRelation.setTenantId(TenantContextHolder.getTenantId().toString());
-			examOrganizationRelations.add(examOrganizationRelation);
 		}
+
 		ExaminationBasic examinationBasic = examinationBasicDao.get(examId.longValue());
 		if(Objects.isNull(examinationBasic)){
 			throw new BizException("考级项目不存在");
 		}
-		if(!CollectionUtils.isEmpty(updateSendFlagOrganizationIds)){
-			examOrganizationRelationDao.batchUpdateSendUrlFlag(examId, updateSendFlagOrganizationIds, YesOrNoEnum.YES);
-		}
-		if(!CollectionUtils.isEmpty(examOrganizationRelations)){
-			examOrganizationRelationDao.batchInsert(examOrganizationRelations);
+
+		for (ExamOrganizationRelation examOrgan : examOrgans) {
+			examOrgan.setUrl(shortUrlService.createShortUrl(""));
+			examOrgan.setSendUrlFlag(YesOrNoEnum.YES);
 		}
+
+		examOrganizationRelationDao.batchUpdate(examOrgans);
+
 		if(examinationBasic.getStatus().equals(ExamStatusEnum.SETTING)){
 			examinationBasic.setStatus(ExamStatusEnum.NOT_START);
 			examinationBasicDao.update(examinationBasic);

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRegistrationServiceImpl.java

@@ -82,7 +82,7 @@ public class ExamRegistrationServiceImpl extends BaseServiceImpl<Long, ExamRegis
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
 
-		List<Integer> nextLevelOrganIds = organizationService.getNextLevelOrganIds(queryInfo.getOrganId(), true);
+		List<Integer> nextLevelOrganIds = organizationService.getChildOrganIds(queryInfo.getOrganId(), true);
 		params.put("organIds", nextLevelOrganIds);
 
 		List<ExamRegistration> dataList = Collections.EMPTY_LIST;

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamReviewServiceImpl.java

@@ -42,7 +42,7 @@ public class ExamReviewServiceImpl extends BaseServiceImpl<Long, ExamReview> imp
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
 
-		List<Integer> nextLevelOrganIds = organizationService.getNextLevelOrganIds(queryInfo.getOrganId(), true);
+		List<Integer> nextLevelOrganIds = organizationService.getChildOrganIds(queryInfo.getOrganId(), true);
 		params.put("organIds", nextLevelOrganIds);
 
 		List<ExamReviewDto> dataList = null;

+ 13 - 12
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java

@@ -2,6 +2,7 @@ package com.keao.edu.user.service.impl;
 
 
 import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.common.enums.YesOrNoEnum;
 import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
@@ -65,17 +66,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 	}
 
 	@Override
-	public ExamRoom createExamRoom(ExamRoom examRoom) {
-		examRoom.setTenantId(TenantContextHolder.getTenantId().toString());
-		examRoomDao.insert(examRoom);
-		return examRoom;
-	}
-
-	@Override
-	public ExamRoom updateExamRoom(ExamRoom examRoom) {
-		if(Objects.isNull(examRoom.getId())){
-			throw new BizException("未生成教室编号");
-		}
+	public void createExamRoom(ExamRoom examRoom) {
 		if(Objects.isNull(examRoom.getExamMode())){
 			throw new BizException("请指定考试类型");
 		}
@@ -88,9 +79,19 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 		if(Objects.isNull(examRoom.getMainTeacherUserId())){
 			throw new BizException("请指定主考老师");
 		}
-		if(StringUtils.isBlank(examRoom.getExamTime())){
+		if(Objects.isNull(examRoom.getExamTime())){
 			throw new BizException("请指定考试时间");
 		}
+		examRoom.setTenantId(TenantContextHolder.getTenantId().toString());
+		examRoom.setExamPlanPushFlag(YesOrNoEnum.NO);
+		examRoomDao.insert(examRoom);
+	}
+
+	@Override
+	public ExamRoom updateExamRoom(ExamRoom examRoom) {
+		if(Objects.isNull(examRoom.getId())){
+			throw new BizException("请指定教室");
+		}
 		examRoomDao.update(examRoom);
 		return examRoom;
 	}

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java

@@ -82,7 +82,7 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
 
-		List<Integer> nextLevelOrganIds = organizationService.getNextLevelOrganIds(queryInfo.getOrganId(), true);
+		List<Integer> nextLevelOrganIds = organizationService.getChildOrganIds(queryInfo.getOrganId(), true);
 		params.put("organIds", nextLevelOrganIds);
 
 		List<ExamRoomStudentRelationDto> dataList = new ArrayList<>();

+ 15 - 5
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/OrganizationServiceImpl.java

@@ -137,10 +137,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 		if(Objects.isNull(organization)){
 			throw new BizException("当前声部不存在");
 		}
-		StringBuffer parentOrganIdTag= new StringBuffer(organization.getParentOrganIdTag());
-		parentOrganIdTag.append(",");
-		parentOrganIdTag.append(organization.getId());
-		List<Integer> selfAndChildOrganIds = organDao.getChildOrganIds(parentOrganIdTag.toString());
+		List<Integer> selfAndChildOrganIds = organDao.getChildOrganIds(organization.getParentOrganIdTag());
 		if(null == selfAndChildOrganIds){
 			selfAndChildOrganIds= Collections.EMPTY_LIST;
 		}
@@ -151,6 +148,19 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	}
 
 	@Override
+	public List<Organization> getChildOrgans(Integer organId) {
+		Organization organization = organDao.get(organId);
+		if(Objects.isNull(organization)){
+			throw new BizException("当前声部不存在");
+		}
+		List<Organization> selfAndChildOrgans = organDao.getChildOrgans(organization.getParentOrganIdTag());
+		if(null == selfAndChildOrgans){
+			selfAndChildOrgans= Collections.EMPTY_LIST;
+		}
+		return selfAndChildOrgans;
+	}
+
+	@Override
 	public List<Integer> getNextLevelOrganIds(Integer organId, boolean includeSelf) {
 		Organization organization = organDao.get(organId);
 		if(Objects.isNull(organization)){
@@ -163,6 +173,6 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 		if(includeSelf){
 			selfAndChildOrganIds.add(organization.getId());
 		}
-		return null;
+		return selfAndChildOrganIds;
 	}
 }

+ 29 - 8
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/StudentServiceImpl.java

@@ -4,9 +4,15 @@ import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
+import com.keao.edu.im.api.client.ImFeignService;
+import com.keao.edu.im.api.entity.ImResult;
+import com.keao.edu.im.api.entity.ImUserModel;
 import com.keao.edu.user.dao.StudentDao;
 import com.keao.edu.user.dao.SysUserDao;
-import com.keao.edu.user.entity.Student;
+import com.keao.edu.user.api.entity.Student;
+import com.keao.edu.user.entity.Organization;
+import com.keao.edu.user.enums.YesOrNoEnum;
+import com.keao.edu.user.service.OrganizationService;
 import com.keao.edu.user.service.StudentService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,6 +30,10 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     private StudentDao studentDao;
     @Autowired
     private SysUserDao sysUserDao;
+    @Autowired
+    private OrganizationService organizationService;
+    @Autowired
+    private ImFeignService imFeignService;
 
     @Override
     public BaseDAO<Integer, Student> getDAO() {
@@ -37,19 +47,30 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         if (sysUser == null || StringUtils.isEmpty(sysUser.getPhone())) {
             throw new BizException("参数校验失败");
         }
-        SysUser sysUser1 = sysUserDao.queryByPhone(sysUser.getPhone());
-        if (sysUser1 != null) {
-            if (sysUser1.getUserType().contains("STUDENT")) {
-                throw new BizException("手机号已被占用");
-            } else {
-                sysUser.setId(sysUser1.getId());
-                sysUser.setUserType(sysUser1.getUserType() + ",STUDENT");
+        SysUser user = sysUserDao.queryByPhone(sysUser.getPhone());
+        if (user != null && user.getId() != null) {
+            Student stu = studentDao.get(user.getId());
+            if(stu == null){
+                student.setUserId(user.getId());
+                student.setTenantId(user.getTenantId());
+                studentDao.insert(student);
+                sysUser.setId(user.getId());
+                sysUser.setUserType(user.getUserType() + ",STUDENT");
                 sysUserDao.update(sysUser);
                 return;
+            }else{
+                throw new BizException("用户已存在");
             }
         }
+        Organization organization = organizationService.get(student.getOrganId());
+        student.setTenantId(organization.getTenantId());
+        sysUser.setTenantId(organization.getTenantId());
         sysUser.setUserType("STUDENT");
         sysUserDao.insert(sysUser);
+        ImResult imResult = imFeignService.register(new ImUserModel(sysUser.getId().toString(), sysUser.getRealName(),null));
+        sysUser.setImToken(imResult.getToken());
+        sysUserDao.update(sysUser);
+        student.setUserId(sysUser.getId());
         studentDao.insert(student);
     }
 

+ 63 - 30
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamOrganizationRelationMapper.xml

@@ -8,7 +8,6 @@
 	
 	<resultMap type="com.keao.edu.user.entity.ExamOrganizationRelation" id="ExamOrganizationRelation">
 		<result column="id_" property="id" />
-
 		<result column="examination_basic_id_" property="examinationBasicId" />
 		<result column="organ_id_" property="organId" />
 		<result column="settlement_type_" property="settlementType" typeHandler="com.keao.edu.common.dal.CustomEnumTypeHandler" />
@@ -17,6 +16,7 @@
 		<result column="total_payment_amount_" property="totalPaymentAmount"/>
 		<result column="url_" property="url" />
 		<result column="send_url_flag_" property="sendUrlFlag" typeHandler="com.keao.edu.common.dal.CustomEnumTypeHandler" />
+		<result column="is_allow_arrange_exam_" property="isAllowArrangeExam" typeHandler="com.keao.edu.common.dal.CustomEnumTypeHandler" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 		<result column="tenant_id_" property="tenantId" />
@@ -38,15 +38,15 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.keao.edu.user.entity.ExamOrganizationRelation" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO exam_organization_relation (examination_basic_id_,organ_id_,settlement_type_,share_profit_amount_,total_registration_student_num_,total_payment_amount_,url_,send_url_flag_,create_time_,update_time_,tenant_id_)
-		VALUES(#{examinationBasicId},#{organId},#{settlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},#{shareProfitAmount},#{totalRegistrationStudentNum},#{totalPaymentAmount},#{url},#{sendUrlFlag,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},NOW(),NOW(),#{tenantId})
+		INSERT INTO exam_organization_relation (examination_basic_id_,organ_id_,settlement_type_,share_profit_amount_,total_registration_student_num_,total_payment_amount_,url_,send_url_flag_,is_allow_arrange_exam_,create_time_,update_time_,tenant_id_)
+		VALUES(#{examinationBasicId},#{organId},#{settlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},#{shareProfitAmount},#{totalRegistrationStudentNum},#{totalPaymentAmount},#{url},#{sendUrlFlag,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},#{isAllowArrangeExam,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},NOW(),NOW(),#{tenantId})
 	</insert>
 
     <insert id="batchInsert" parameterType="com.keao.edu.user.entity.ExamOrganizationRelation" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO exam_organization_relation (examination_basic_id_,organ_id_,settlement_type_,share_profit_amount_,total_registration_student_num_,total_payment_amount_,url_,send_url_flag_,create_time_,update_time_,tenant_id_)
+		INSERT INTO exam_organization_relation (examination_basic_id_,organ_id_,settlement_type_,share_profit_amount_,total_registration_student_num_,total_payment_amount_,url_,send_url_flag_,is_allow_arrange_exam_,create_time_,update_time_,tenant_id_)
 		VALUES
 		<foreach collection="examOrganizationRelations" item="examOrganizationRelation" separator=",">
-			(#{examOrganizationRelation.examinationBasicId},#{examOrganizationRelation.organId},#{examOrganizationRelation.settlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},#{examOrganizationRelation.shareProfitAmount},#{examOrganizationRelation.totalRegistrationStudentNum},#{examOrganizationRelation.totalPaymentAmount},#{examOrganizationRelation.url},#{examOrganizationRelation.sendUrlFlag,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},NOW(),NOW(),#{examOrganizationRelation.tenantId})
+			(#{examOrganizationRelation.examinationBasicId},#{examOrganizationRelation.organId},#{examOrganizationRelation.settlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},#{examOrganizationRelation.shareProfitAmount},#{examOrganizationRelation.totalRegistrationStudentNum},#{examOrganizationRelation.totalPaymentAmount},#{examOrganizationRelation.url},#{examOrganizationRelation.sendUrlFlag,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},#{examOrganizationRelation.isAllowArrangeExam,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},NOW(),NOW(),#{examOrganizationRelation.tenantId})
 		</foreach>
 	</insert>
 
@@ -55,25 +55,25 @@
 		UPDATE exam_organization_relation
 		<set>
 			<if test="examinationBasicId != null">
-			examination_basic_id_ = #{examinationBasicId},
+				examination_basic_id_ = #{examinationBasicId},
 			</if>
 			<if test="id != null">
-			id_ = #{id},
+				id_ = #{id},
 			</if>
 			<if test="sendUrlFlag != null">
-			send_url_flag_ = #{sendUrlFlag,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},
+				send_url_flag_ = #{sendUrlFlag,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},
+			</if>
+			<if test="isAllowArrangeExam != null">
+				is_allow_arrange_exam_ = #{isAllowArrangeExam,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},
 			</if>
 			<if test="url != null">
-			url_ = #{url},
+				url_ = #{url},
 			</if>
 			<if test="tenantId != null">
-			tenant_id_ = #{tenantId},
-			</if>
-			<if test="updateTime != null">
-			update_time_ = #{updateTime},
+				tenant_id_ = #{tenantId},
 			</if>
 			<if test="shareProfitAmount != null">
-			share_profit_amount_ = #{shareProfitAmount},
+				share_profit_amount_ = #{shareProfitAmount},
 			</if>
 			<if test="totalRegistrationStudentNum != null">
 				total_registration_student_num_ = #{totalRegistrationStudentNum},
@@ -82,16 +82,54 @@
 				total_payment_amount_ = #{totalPaymentAmount},
 			</if>
 			<if test="organId != null">
-			organ_id_ = #{organId},
+				organ_id_ = #{organId},
 			</if>
 			<if test="settlementType != null">
-			settlement_type_ = #{settlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},
-			</if>
-			<if test="createTime != null">
-			create_time_ = #{createTime},
+				settlement_type_ = #{settlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},
 			</if>
+				update_time_ = NOW()
 		</set> WHERE id_ = #{id}
 	</update>
+
+	<update id="batchUpdate" parameterType="com.keao.edu.user.entity.ExamOrganizationRelation">
+		<foreach collection="examOrganizationRelations" item="eo" separator=";">
+			UPDATE exam_organization_relation
+			<set>
+				<if test="eo.examinationBasicId != null">
+					examination_basic_id_ = #{eo.examinationBasicId},
+				</if>
+				<if test="eo.sendUrlFlag != null">
+					send_url_flag_ = #{eo.sendUrlFlag,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},
+				</if>
+				<if test="eo.isAllowArrangeExam != null">
+					is_allow_arrange_exam_ = #{eo.isAllowArrangeExam,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},
+				</if>
+				<if test="eo.url != null">
+					url_ = #{eo.url},
+				</if>
+				<if test="eo.tenantId != null">
+					tenant_id_ = #{eo.tenantId},
+				</if>
+				<if test="eo.shareProfitAmount != null">
+					share_profit_amount_ = #{eo.shareProfitAmount},
+				</if>
+				<if test="eo.totalRegistrationStudentNum != null">
+					total_registration_student_num_ = #{eo.totalRegistrationStudentNum},
+				</if>
+				<if test="eo.totalPaymentAmount != null">
+					total_payment_amount_ = #{eo.totalPaymentAmount},
+				</if>
+				<if test="eo.organId != null">
+					organ_id_ = #{eo.organId},
+				</if>
+				<if test="eo.settlementType != null">
+					settlement_type_ = #{eo.settlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},
+				</if>
+				update_time_ = NOW()
+			</set> WHERE id_ = #{eo.id}
+		</foreach>
+	</update>
+
 	<update id="batchUpdateSendUrlFlag">
 		UPDATE exam_organization_relation SET send_url_flag_=#{sendUrlFlag,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler}
 		WHERE examination_basic_id_=#{examId} AND organ_id_ IN
@@ -108,7 +146,8 @@
 	<sql id="queryCondition">
 		<where>
 			ear.tenant_id_=#{tenantId}
-			AND ear.orga_id_ IN
+			AND ear.examination_basic_id_=#{examId}
+			AND ear.organ_id_ IN
 			<foreach collection="organIds" item="organId" separator="," open="(" close=")">
 				#{organId}
 			</foreach>
@@ -126,22 +165,16 @@
 		SELECT
 			ear.*,
 			a.name_ organ_name_
-		FROM organization a
-		LEFT JOIN exam_organization_relation ear ON ear.organ_id_=a.id_
-		<if test="examId!=null">
-			AND ear.examination_basic_id_=#{examId}
-		</if>
+		FROM exam_organization_relation ear
+		LEFT JOIN organization a ON ear.organ_id_=a.id_
 		<include refid="queryCondition"/>
 		ORDER BY id_ <include refid="global.limit"/>
 	</select>
 	
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM organ a
-		LEFT JOIN exam_organization_relation ear ON ear.organ_id_=a.id_
-		<if test="examId!=null">
-			AND ear.examination_basic_id_=#{examId}
-		</if>
+		SELECT COUNT(*) FROM exam_organization_relation ear
+		LEFT JOIN organization a ON ear.organ_id_=a.id_
 		<include refid="queryCondition"/>
 	</select>
 

+ 1 - 1
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationMapper.xml

@@ -145,7 +145,7 @@
 	
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM exam_registration
+		SELECT COUNT(*) FROM exam_registration er
 		<include refid="queryCondition"/>
 	</select>
     <select id="countWithoutExamRoomStudentNum" resultType="int">

+ 7 - 1
edu-user/edu-user-server/src/main/resources/config/mybatis/OrganizationMapper.xml

@@ -120,9 +120,15 @@
 	<select id="getByTenant" resultMap="Organization">
 		SELECT * FROM organization WHERE tenant_id_ = #{tenantId} ORDER BY id_
 	</select>
-	<select id="getSelfAndChildOrganIds" resultType="int">
+
+	<select id="getChildOrganIds" resultType="int">
 		SELECT id_ FROM organization WHERE parent_organ_id_tag_ LIKE CONCAT(#{parentOrganIdTag}, '%');
 	</select>
+
+	<select id="getChildOrgans" resultMap="Organization">
+		SELECT * FROM organization WHERE parent_organ_id_tag_ LIKE CONCAT(#{parentOrganIdTag}, '%');
+	</select>
+
 	<select id="getNextLevelOrganIds" resultType="int">
 		SELECT id_ FROM organization WHERE parent_organ_id_ =#{organId};
 	</select>

+ 3 - 3
edu-user/edu-user-server/src/main/resources/config/mybatis/StudentMapper.xml

@@ -6,7 +6,7 @@
 -->
 <mapper namespace="com.keao.edu.user.dao.StudentDao">
 	
-	<resultMap type="com.keao.edu.user.entity.Student" id="Student">
+	<resultMap type="com.keao.edu.user.api.entity.Student" id="Student">
 		<result column="user_id_" property="userId" />
 		<result column="certificate_photo_" property="certificatePhoto" />
 		<result column="create_time_" property="createTime" />
@@ -27,13 +27,13 @@
 	</select>
 	
 	<!-- 向数据库增加一条记录 -->
-	<insert id="insert" parameterType="com.keao.edu.user.entity.Student" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+	<insert id="insert" parameterType="com.keao.edu.user.api.entity.Student" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO student (user_id_,certificate_photo_,create_time_,update_time_,tenant_id_)
 		VALUES(#{userId},#{certificatePhoto},#{createTime},#{updateTime},#{tenantId})
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
-	<update id="update" parameterType="com.keao.edu.user.entity.Student">
+	<update id="update" parameterType="com.keao.edu.user.api.entity.Student">
 		UPDATE student
 		<set>
 			<if test="certificatePhoto != null">