Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

周箭河 5 gadi atpakaļ
vecāks
revīzija
44d9780e55
63 mainītis faili ar 1054 papildinājumiem un 387 dzēšanām
  1. 0 2
      edu-auth/edu-auth-api/pom.xml
  2. 0 6
      edu-auth/edu-auth-server/pom.xml
  3. 1 1
      edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/service/impl/SmsCodeServiceImpl.java
  4. 12 6
      edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/web/controller/SysMessageController.java
  5. 6 0
      edu-auth/edu-auth-server/src/main/resources/config/mybatis/SysMessageConfigMapper.xml
  6. 4 0
      edu-common/pom.xml
  7. 3 1
      edu-common/src/main/java/com/keao/edu/common/dao/SysMessageConfigDao.java
  8. 2 1
      edu-common/src/main/java/com/keao/edu/common/enums/MessageTypeEnum.java
  9. 5 3
      edu-common/src/main/java/com/keao/edu/common/service/SysMessageConfigService.java
  10. 1 33
      edu-common/src/main/java/com/keao/edu/common/service/SysMessageService.java
  11. 11 7
      edu-common/src/main/java/com/keao/edu/common/service/impl/SysMessageConfigServiceImpl.java
  12. 18 100
      edu-common/src/main/java/com/keao/edu/common/service/impl/SysMessageServiceImpl.java
  13. 2 0
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/SealClassApplication.java
  14. 14 1
      edu-im/edu-im-server/src/main/resources/application.yml
  15. 1 1
      edu-task/src/main/java/com/keao/edu/task/TaskApplication.java
  16. 2 2
      edu-task/src/main/resources/application.yml
  17. 0 3
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/EmployeeController.java
  18. 15 7
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamCertificationController.java
  19. 13 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java
  20. 11 4
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRegistrationController.java
  21. 9 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomController.java
  22. 13 7
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomStudentRelationController.java
  23. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/StudentController.java
  24. 9 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/StudentExamResultController.java
  25. 2 5
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/SysConfigController.java
  26. 32 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamCertificationDao.java
  27. 29 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java
  28. 9 8
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/SysUserDao.java
  29. 102 15
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamCertificationDto.java
  30. 176 9
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRegistrationDto.java
  31. 138 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/NeedCheckingDetailDto.java
  32. 10 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/Employee.java
  33. 0 11
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/Organization.java
  34. 0 22
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/page/ExamSongQueryInfo.java
  35. 11 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/page/StudentExamResultQueryInfo.java
  36. 21 4
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamCertificationService.java
  37. 12 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamOrganizationRelationService.java
  38. 2 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRegistrationService.java
  39. 15 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRoomStudentRelationService.java
  40. 56 38
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamCertificationServiceImpl.java
  41. 77 9
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java
  42. 2 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRegistrationServiceImpl.java
  43. 11 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java
  44. 42 3
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java
  45. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java
  46. 0 12
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/OrganizationServiceImpl.java
  47. 0 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/TenantInfoServiceImpl.java
  48. 7 3
      edu-user/edu-user-server/src/main/resources/config/mybatis/EmployeeMapper.xml
  49. 52 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamCertificationMapper.xml
  50. 1 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamOrganizationRelationMapper.xml
  51. 20 9
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationMapper.xml
  52. 1 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamReviewMapper.xml
  53. 26 2
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRoomStudentRelationMapper.xml
  54. 2 5
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamSongMapper.xml
  55. 1 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamSubjectSongMapper.xml
  56. 2 2
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamTeacherSalaryMapper.xml
  57. 5 5
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExaminationBasicMapper.xml
  58. 5 12
      edu-user/edu-user-server/src/main/resources/config/mybatis/OrganizationMapper.xml
  59. 5 2
      edu-user/edu-user-server/src/main/resources/config/mybatis/StudentExamResultMapper.xml
  60. 9 4
      edu-user/edu-user-server/src/main/resources/config/mybatis/SysConfigMapper.xml
  61. 10 5
      edu-user/edu-user-server/src/main/resources/config/mybatis/SysUserMapper.xml
  62. 1 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/TenantInfoMapper.xml
  63. 6 0
      pom.xml

+ 0 - 2
edu-auth/edu-auth-api/pom.xml

@@ -34,8 +34,6 @@
 		<dependency>
 			<groupId>com.keao.edu</groupId>
 			<artifactId>edu-thirdparty</artifactId>
-			<version>1.0</version>
-			<scope>compile</scope>
 		</dependency>
 	</dependencies>
 </project>

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

@@ -92,12 +92,6 @@
         </dependency>
         <dependency>
             <groupId>com.keao.edu</groupId>
-            <artifactId>edu-thirdparty</artifactId>
-            <version>1.0</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.keao.edu</groupId>
             <artifactId>edu-user-client-api</artifactId>
         </dependency>
     </dependencies>

+ 1 - 1
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/service/impl/SmsCodeServiceImpl.java

@@ -10,11 +10,11 @@ import org.springframework.stereotype.Service;
 import com.keao.edu.auth.api.client.SysUserFeignService;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.auth.service.SmsCodeService;
-import com.keao.edu.auth.service.SysMessageService;
 import com.keao.edu.common.entity.SysMessage;
 import com.keao.edu.common.enums.MessageSendMode;
 import com.keao.edu.common.enums.MessageTypeEnum;
 import com.keao.edu.common.exception.BizException;
+import com.keao.edu.common.service.SysMessageService;
 
 @Service
 public class SmsCodeServiceImpl implements SmsCodeService {

+ 12 - 6
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/web/controller/SysMessageController.java

@@ -1,19 +1,25 @@
 package com.keao.edu.auth.web.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.keao.edu.auth.api.client.SysUserFeignService;
 import com.keao.edu.auth.api.entity.SysMessageParams;
 import com.keao.edu.auth.api.entity.SysUser;
-import com.keao.edu.auth.service.SysMessageService;
 import com.keao.edu.auth.web.controller.queryInfo.SysMessageQueryInfo;
 import com.keao.edu.common.controller.BaseController;
 import com.keao.edu.common.entity.SysMessage;
 import com.keao.edu.common.enums.MessageSendMode;
 import com.keao.edu.common.page.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.*;
+import com.keao.edu.common.service.SysMessageService;
 
 /**
  * @Author Joburgess

+ 6 - 0
edu-auth/edu-auth-server/src/main/resources/config/mybatis/SysMessageConfigMapper.xml

@@ -110,10 +110,16 @@
 		select count(*) from sys_message_config
 		<include refid="queryCondition" />
 	</select>
+
 	<select id="queryByType" resultMap="SysMessageConfig">
 		SELECT * FROM sys_message_config WHERE message_type_ = #{messageType}
 	</select>
+
     <select id="findContent" resultType="java.lang.String">
 		SELECT content_ FROM sys_message_config WHERE message_type_ = #{messageType}
 	</select>
+
+	<select id="queryByEvent" resultMap="SysMessageConfig">
+		SELECT * FROM sys_message_config WHERE event_ = #{event}
+	</select>
 </mapper>

+ 4 - 0
edu-common/pom.xml

@@ -16,6 +16,10 @@
 	</properties>
 
 	<dependencies>
+        <dependency>
+            <groupId>com.keao.edu</groupId>
+            <artifactId>edu-thirdparty</artifactId>
+        </dependency>
 
 		<dependency>
 			<groupId>com.keao.edu</groupId>

+ 3 - 1
edu-common/src/main/java/com/keao/edu/common/dao/SysMessageConfigDao.java

@@ -14,5 +14,7 @@ public interface SysMessageConfigDao extends BaseDAO<Integer, SysMessageConfig>
 	 */
 	SysMessageConfig queryByType(@Param("messageType") String messageType);
 
+	SysMessageConfig queryByEvent(@Param("event") String event);
+
     String findContent(String messageType);
-}
+}

+ 2 - 1
edu-common/src/main/java/com/keao/edu/common/enums/MessageTypeEnum.java

@@ -3,7 +3,8 @@ package com.keao.edu.common.enums;
 public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     SMS_VERIFY_CODE_LOGIN("SMS_VERIFY_CODE_LOGIN", "验证码登录"),
-    EXAM_REGISTRATION_URL_PUSH("EXAM_REGISTRATION_URL_PUSH", "报名连接推送");
+    EXAM_REGISTRATION_URL_PUSH("EXAM_REGISTRATION_URL_PUSH", "报名连接推送"),
+    STUDENT_EXAM_START("STUDENT_EXAM_START", "考试已开始");
 
     MessageTypeEnum(String code, String msg) {
         this.code = code;

+ 5 - 3
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/service/SysMessageConfigService.java → edu-common/src/main/java/com/keao/edu/common/service/SysMessageConfigService.java

@@ -1,9 +1,8 @@
-package com.keao.edu.auth.service;
+package com.keao.edu.common.service;
 
 
 import com.keao.edu.common.entity.SysMessageConfig;
 import com.keao.edu.common.enums.MessageTypeEnum;
-import com.keao.edu.common.service.BaseService;
 
 public interface SysMessageConfigService extends BaseService<Integer, SysMessageConfig> {
 
@@ -13,4 +12,7 @@ public interface SysMessageConfigService extends BaseService<Integer, SysMessage
 	 * @return
 	 */
 	SysMessageConfig queryByType(MessageTypeEnum type);
-}
+
+
+	SysMessageConfig queryByEvent(MessageTypeEnum type);
+}

+ 1 - 33
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/service/SysMessageService.java → edu-common/src/main/java/com/keao/edu/common/service/SysMessageService.java

@@ -1,4 +1,4 @@
-package com.keao.edu.auth.service;
+package com.keao.edu.common.service;
 
 
 import java.util.Date;
@@ -9,7 +9,6 @@ import java.util.Set;
 import com.keao.edu.common.entity.SysMessage;
 import com.keao.edu.common.enums.MessageSendMode;
 import com.keao.edu.common.enums.MessageTypeEnum;
-import com.keao.edu.common.service.BaseService;
 import com.keao.edu.thirdparty.message.MessageSenderPlugin;
 
 public interface SysMessageService extends BaseService<Long, SysMessage> {
@@ -30,22 +29,6 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	boolean batchSeoMessage(Set<Integer> userIds, MessageTypeEnum messageType, String memo, Object... args);
 
 	/**
-	 * 推送im文本消息,包换调整链接
-	 * @param senderId
-	 * @param messageType
-	 * @return
-	 */
-	void batchSendImMessage(MessageTypeEnum messageType, String senderId, String extra, String[] targetIds, String url, Object... args);
-
-	/**
-	 * 推送im自定义节拍器消息
-	 * @param senderId
-	 * @param roomId
-	 * @param content
-	 */
-//	void batchSendImPlayMidiMessage(String senderId,String roomId, String content);
-
-	/**
 	 * 批量发送消息
 	 * @param messageSender 消息发送者
 	 * @param subject 消息主题
@@ -136,21 +119,6 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	public List<SysMessage> queryUserInRecentMinList(String mobile, int recentMin, MessageSendMode type);
 
 	/**
-	 * 发送私聊消息
-	 * @param studentId
-	 * @param content
-	 */
-    void sendPrivateMessage(String studentId, String content);
-
-	/**
-	 * 发送私聊消息
-	 * @param sender
-	 * @param receiver
-	 * @param content
-	 */
-	void sendNoAuthPrivateMessage(String sender, String receiver, String content);
-
-	/**
 	 * 删除消息
 	 * @param ids
 	 */

+ 11 - 7
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/service/impl/SysMessageConfigServiceImpl.java → edu-common/src/main/java/com/keao/edu/common/service/impl/SysMessageConfigServiceImpl.java

@@ -1,14 +1,14 @@
-package com.keao.edu.auth.service.impl;
+package com.keao.edu.common.service.impl;
 
 
-import com.keao.edu.auth.service.SysMessageConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.common.dao.SysMessageConfigDao;
 import com.keao.edu.common.entity.SysMessageConfig;
 import com.keao.edu.common.enums.MessageTypeEnum;
-import com.keao.edu.common.service.impl.BaseServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.keao.edu.common.service.SysMessageConfigService;
 
 @Service
 public class SysMessageConfigServiceImpl extends BaseServiceImpl<Integer, SysMessageConfig>  implements SysMessageConfigService {
@@ -25,5 +25,9 @@ public class SysMessageConfigServiceImpl extends BaseServiceImpl<Integer, SysMes
 	public SysMessageConfig queryByType(MessageTypeEnum type) {
 		return sysMessageConfigDao.queryByType(type.getCode());
 	}
-	
-}
+
+	@Override
+	public SysMessageConfig queryByEvent(MessageTypeEnum type) {
+		return sysMessageConfigDao.queryByEvent(type.getCode());
+	}
+}

+ 18 - 100
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/service/impl/SysMessageServiceImpl.java → edu-common/src/main/java/com/keao/edu/common/service/impl/SysMessageServiceImpl.java

@@ -1,26 +1,6 @@
-package com.keao.edu.auth.service.impl;
+package com.keao.edu.common.service.impl;
 
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
-import com.keao.edu.auth.api.client.SysUserFeignService;
-import com.keao.edu.auth.api.entity.SysUser;
-import com.keao.edu.auth.service.SysMessageConfigService;
-import com.keao.edu.auth.service.SysMessageService;
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.common.dao.SysMessageDao;
 import com.keao.edu.common.entity.Mapper;
@@ -31,14 +11,20 @@ import com.keao.edu.common.enums.MessageTypeEnum;
 import com.keao.edu.common.enums.SendStatusEnum;
 import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.redis.service.RedisCache;
-import com.keao.edu.common.service.impl.BaseServiceImpl;
-import com.keao.edu.im.api.client.ImFeignService;
-import com.keao.edu.im.api.entity.ImPrivateMessage;
-import com.keao.edu.im.api.entity.ImTxtMessage;
+import com.keao.edu.common.service.SysMessageConfigService;
+import com.keao.edu.common.service.SysMessageService;
 import com.keao.edu.thirdparty.message.MessageSenderPlugin;
 import com.keao.edu.thirdparty.message.MessageSenderPluginContext;
-import com.keao.edu.thirdparty.message.provider.YimeiSmsPlugin;
 import com.keao.edu.util.string.MessageFormatter;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
 
 @Service
 public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> implements SysMessageService {
@@ -55,12 +41,6 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	private MessageSenderPluginContext messageSenderPluginContext;
 
 	@Autowired
-	private SysUserFeignService sysUserFeignService;
-
-	@Autowired
-	private ImFeignService imFeignService;
-
-	@Autowired
 	private RedisCache<String, Object> redisCache;
 
 	// 验证码有效期
@@ -107,12 +87,6 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 			receiver = entry.getValue();
 
 			message = new SysMessage();
-			if (userId == null) {
-				SysUser user = sysUserFeignService.queryUserByMobile(receiver);
-				if (user != null) {
-					userId = user.getId();
-				}
-			}
 			message.setUserId(userId);
 			message.setContent(content);
 			message.setCreateOn(date);
@@ -146,7 +120,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		if (userIds == null || userIds.size() == 0) {
 			throw new BizException("接收地址不能为空");
 		}
-		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(messageType);
+		SysMessageConfig messageConfig = sysMessageConfigService.queryByEvent(messageType);
 		if (messageConfig == null) {
 			throw new BizException("消息类型错误");
 		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
@@ -179,61 +153,6 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	}
 
 	@Override
-	public void batchSendImMessage(MessageTypeEnum type, String senderId,String extra, String[] targetIds, String url, Object... args) {
-		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(type);
-		if (messageConfig == null) {
-			throw new BizException("消息类型错误");
-		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
-			return;
-		}
-		String content = MessageFormatter.arrayFormat(messageConfig.getContent(), args);
-		if(StringUtils.isNotEmpty(url)){
-			content += url;
-		}
-		ImPrivateMessage privateMessage = new ImPrivateMessage();
-		privateMessage.setObjectName("RC:TxtMsg");
-		privateMessage.setTargetId(targetIds);
-		privateMessage.setSenderId(senderId);
-		privateMessage.setContent(new ImTxtMessage(content,extra));
-		imFeignService.privateSend(privateMessage);
-	}
-
-	/*@Override
-	public void batchSendImPlayMidiMessage(String senderId,String roomId, String content) {
-		ImGroupMessage groupMessage = new ImGroupMessage();
-		privateMessage.setObjectName("DY:PlayMidiMessage");
-		groupMessage.setTargetId(roomId.split(","));
-		groupMessage.setSenderId(senderId);
-		groupMessage.setContent(new ImPlayMidiMessage(content,null));
-		groupMessage.setType("DY:PlayMidiMessage");
-		imFeignService.privateSendCustom(groupMessage);
-	}*/
-
-	@Override
-	public void sendPrivateMessage(String studentId, String content) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if(sysUser == null){
-			throw new BizException("用户信息获取失败");
-		}
-		ImPrivateMessage privateMessage = new ImPrivateMessage();
-		privateMessage.setObjectName("RC:TxtMsg");
-		privateMessage.setTargetId(studentId.split(","));
-		privateMessage.setSenderId(sysUser.getId().toString());
-		privateMessage.setContent(new ImTxtMessage(content,null));
-		imFeignService.privateSend(privateMessage);
-	}
-
-	@Override
-	public void sendNoAuthPrivateMessage(String sender, String receiver, String content) {
-		ImPrivateMessage privateMessage = new ImPrivateMessage();
-		privateMessage.setObjectName("RC:TxtMsg");
-		privateMessage.setTargetId(receiver.split(","));
-		privateMessage.setSenderId(sender);
-		privateMessage.setContent(new ImTxtMessage(content,null));
-		imFeignService.privateSend(privateMessage);
-	}
-
-	@Override
 	public void batchDelMessage(String ids) {
 		sysMessageDao.batchDelMessage(ids);
 	}
@@ -259,7 +178,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 				// 立即发送
 				if (triggerTime == null || date.after(triggerTime)) {
 					status = SendStatusEnum.SENDING;
-					if (debugMode == true || messageSenderPluginContext.batchSend(YimeiSmsPlugin.PLUGIN_NAME, subject, content, tos, memo,jpushType)) {
+					if (debugMode == true || messageSenderPluginContext.batchSend(jpushType, subject, content, tos, memo,jpushType)) {
 						status = SendStatusEnum.SUCCESSED;
 					} else {
 						status = SendStatusEnum.FAILED;
@@ -291,7 +210,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 			throw new BizException("接收地址不能为空");
 		}
 		String[] tos = receivers.values().toArray(new String[receivers.size()]);
-		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(type);
+		SysMessageConfig messageConfig = sysMessageConfigService.queryByEvent(type);
 		if (messageConfig == null) {
 			throw new BizException("消息类型错误");
 		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
@@ -300,13 +219,12 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		Date date = new Date();
 		SendStatusEnum status = SendStatusEnum.WAIT;
 		String errorMsg = null;
-		String pluginName = YimeiSmsPlugin.PLUGIN_NAME;
 		// 立即发送
 		if (triggerTime == null || date.after(triggerTime)) {
 			status = SendStatusEnum.SENDING;
 			try {
 				if (debugMode == true
-						|| messageSenderPluginContext.batchSend(pluginName, messageConfig.getDescription(),
+						|| messageSenderPluginContext.batchSend(jpushType, messageConfig.getDescription(),
 								MessageFormatter.arrayFormat(messageConfig.getContent(), args), tos, url,jpushType)) {
 					status = SendStatusEnum.SUCCESSED;
 				} else {
@@ -318,7 +236,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 				LOGGER.warn("消息发送失败", e);
 			}
 		}
-		MessageSenderPlugin senderPlugin = messageSenderPluginContext.getMessageSenderPlugin(pluginName);
+		MessageSenderPlugin senderPlugin = messageSenderPluginContext.getMessageSenderPlugin(jpushType);
 		MessageSendMode mode = MessageSendMode.SMS;
 		if (senderPlugin.getSendMode().equals("PUSH")) {
 			mode = MessageSendMode.PUSH;
@@ -343,7 +261,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		if (triggerTime == null || date.after(triggerTime)) {
 			status = SendStatusEnum.SENDING;
 			try {
-				if (debugMode == true || messageSenderPluginContext.send(YimeiSmsPlugin.PLUGIN_NAME, receiver, title, content, url,jpushType)) {
+				if (debugMode == true || messageSenderPluginContext.send(jpushType, receiver, title, content, url,jpushType)) {
 					status = SendStatusEnum.SUCCESSED;
 				} else {
 					status = SendStatusEnum.FAILED;

+ 2 - 0
edu-im/edu-im-server/src/main/java/com/keao/edu/im/SealClassApplication.java

@@ -1,6 +1,7 @@
 package com.keao.edu.im;
 
 import com.spring4all.swagger.EnableSwagger2Doc;
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@@ -18,6 +19,7 @@ import org.springframework.web.client.RestTemplate;
 @SpringBootApplication
 @EnableFeignClients("com.keao.edu")
 @ComponentScan("com.keao.edu")
+@MapperScan({"com.keao.edu.common.dao"})
 @EnableScheduling
 @EnableDiscoveryClient
 @Configuration

+ 14 - 1
edu-im/edu-im-server/src/main/resources/application.yml

@@ -117,4 +117,17 @@ cn:
       userIMOfflineKickTtl: 300000
 
 message:
-  debugMode: true
+  debugMode: true
+
+push:
+  jiguang:
+    reqURL: https://api.jpush.cn/v3/push
+    appKey:
+      student: 0e7422e1d6e73637e678716a
+      teacher: 7e0282ca92c12c8c45a93bb3
+      system: a003c997b1add94aa8d6caf9
+    masterSecret:
+      student: c2361016604eab56ab2db2ac
+      teacher: d47430e2f4755ef5dc050ac5
+      system: c281fe6a21acf2e8a9f9d628
+    apns_production: false

+ 1 - 1
edu-task/src/main/java/com/keao/edu/task/TaskApplication.java

@@ -17,7 +17,7 @@ import com.spring4all.swagger.EnableSwagger2Doc;
 @SpringBootApplication
 @EnableDiscoveryClient
 @EnableFeignClients("com.keao.edu")
-@MapperScan("com.keao.edu.task.dal.dao")
+@MapperScan({"com.keao.edu.task.dal.dao","com.keao.edu.common.dao"})
 @ComponentScan("com.keao.edu")
 @Configuration
 @EnableSwagger2Doc

+ 2 - 2
edu-task/src/main/resources/application.yml

@@ -79,8 +79,8 @@ logging:
 security:
   oauth2:
     client:
-      client-id: app
-      client-secret: app
+      client-id: system
+      client-secret: system
     resource:
       token-info-uri: http://localhost:8001/oauth/check_token
 

+ 0 - 3
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/EmployeeController.java

@@ -10,7 +10,6 @@ import com.keao.edu.common.tenant.TenantContextHolder;
 import com.keao.edu.user.entity.Employee;
 import com.keao.edu.user.page.EmployeeQueryInfo;
 import com.keao.edu.user.service.EmployeeService;
-import com.keao.edu.user.service.OrganizationService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
@@ -26,8 +25,6 @@ public class EmployeeController extends BaseController {
 	private EmployeeService employeeService;
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private OrganizationService organizationService;
 	
 	@ApiOperation("员工服务分页查询")
 	@GetMapping(value = "/list")

+ 15 - 7
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamCertificationController.java

@@ -5,6 +5,7 @@ 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.dto.ExamCertificationDto;
+import com.keao.edu.user.dto.NeedCheckingDetailDto;
 import com.keao.edu.user.entity.ExamCertification;
 import com.keao.edu.user.entity.ExamLocation;
 import com.keao.edu.user.page.ExamCertificationQueryInfo;
@@ -17,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
+import java.util.List;
 
 @RestController
 @RequestMapping("examCertification")
@@ -26,15 +28,21 @@ public class ExamCertificationController extends BaseController {
     @Autowired
     private ExamCertificationService examCertificationService;
 
-    @ApiOperation("获取学员准考证详情")
-    @GetMapping(value = "findByStuAndBasicId")
-    public HttpResponseResult<ExamCertification> findByStuAndBasicId(Integer studentId,Integer basicId) {
-        return succeed(examCertificationService.findByStuAndBasicId(studentId,basicId));
+    @ApiOperation("后台获取学员准考证详情")
+    @GetMapping(value = "findDetailByStudentId")
+    public HttpResponseResult<ExamCertificationDto> findDetailByStudentId(Integer studentId, Long examRegistrationId) {
+        return succeed(examCertificationService.findDetailByStudentId(studentId,examRegistrationId));
     }
 
-    @ApiOperation("获取学员准考证列表")
+    @ApiOperation("学生端获取学员准考证列表")
     @GetMapping(value = "queryCertificationPage")
-    public HttpResponseResult<PageInfo<ExamCertificationDto>> queryCertificationPage(ExamCertificationQueryInfo queryInfo) {
-        return succeed(examCertificationService.queryCertificationPage(queryInfo));
+    public HttpResponseResult<List<ExamCertificationDto>> queryCertification() {
+        return succeed(examCertificationService.queryCertificationPage());
+    }
+
+    @ApiOperation("学生端待考详情")
+    @GetMapping(value = "needCheckingDetail")
+    public HttpResponseResult<NeedCheckingDetailDto> needCheckingDetail(Long examRegistrationId) {
+        return succeed(examCertificationService.needCheckingDetail(examRegistrationId));
     }
 }

+ 13 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java

@@ -17,6 +17,7 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -54,8 +55,8 @@ public class ExamOrganizationRelationController extends BaseController {
 
     @ApiOperation("添加合作单位")
     @PostMapping(value = "/addExamOrganizations")
-    public HttpResponseResult addExamOrganizations(Long examId, String organIds){
-        examOrganizationRelationService.addExamOrganizations(examId, organIds);
+    public HttpResponseResult addExamOrganizations(@RequestBody List<ExamOrganizationRelation> organizationRelations){
+        examOrganizationRelationService.addExamOrganizations(organizationRelations);
         return succeed();
     }
 
@@ -76,6 +77,16 @@ public class ExamOrganizationRelationController extends BaseController {
     @ApiOperation("获取未关联到考级项目的合作单位")
     @GetMapping(value = "/queryUnRelatedOrgans")
     public HttpResponseResult<PageInfo<Organization>> queryUnRelatedOrgans(ExamOrganizationRelationQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed("请重新登录");
+        }
+        if(!sysUser.getIsSuperAdmin()&&Objects.isNull(queryInfo.getOrganId())){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.nonNull(employee)){
+                queryInfo.setOrganId(employee.getOrganId());
+            }
+        }
         return succeed(examOrganizationRelationService.queryUnRelatedOrgans(queryInfo));
     }
 

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

@@ -5,6 +5,7 @@ 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.page.QueryInfo;
 import com.keao.edu.thirdparty.ocr.Ocr;
 import com.keao.edu.user.dto.ExamRecordDto;
 import com.keao.edu.user.dto.ExamRegistrationDto;
@@ -63,9 +64,7 @@ public class ExamRegistrationController extends BaseController {
 
     @ApiOperation(value = "学生端学员报名记录查询")
     @GetMapping(value = "applyList")
-    public HttpResponseResult<PageInfo<ExamRegistrationDto>> applyList(ExamRegistrationQueryInfo queryInfo) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        queryInfo.setStudentId(sysUser.getId());
+    public HttpResponseResult<PageInfo<ExamRegistrationDto>> applyList(QueryInfo queryInfo) {
         return succeed(examRegistrationService.applyList(queryInfo));
     }
 
@@ -99,7 +98,15 @@ public class ExamRegistrationController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('examRegistration/getExamRegistrationStaticsInfo')")
     public HttpResponseResult<ExamRegistrationStatisticsDto> getExamRegistrationStaticsInfo(Integer examId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        return succeed(examRegistrationService.getExamRegistrationStaticsInfo(sysUser.getId(), examId));
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId=employee.getOrganId();
+        }
+        return succeed(examRegistrationService.getExamRegistrationStaticsInfo(organId, examId));
     }
 
 

+ 9 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomController.java

@@ -147,7 +147,15 @@ public class ExamRoomController extends BaseController {
     @GetMapping(value = "/getExamRoomStatisticsInfo")
     public HttpResponseResult<ExamRoomStatisticsDto> getExamRoomStatisticsInfo(Long examId){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        return succeed(examRoomService.getExamRoomStatisticsInfo(sysUser.getId(), examId));
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId=employee.getOrganId();
+        }
+        return succeed(examRoomService.getExamRoomStatisticsInfo(organId, examId));
     }
 
     @ApiOperation("获取报名学员可加入教室列表")

+ 13 - 7
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomStudentRelationController.java

@@ -42,18 +42,24 @@ public class ExamRoomStudentRelationController extends BaseController {
         return succeed();
     }*/
 
+    @ApiOperation("签到")
+    @PostMapping(value = "/signIn")
+    public HttpResponseResult signIn(Long examRegistrationId) {
+        examRoomStudentRelationService.signIn(examRegistrationId);
+        return succeed();
+    }
+
     @ApiOperation("下一位")
     @PostMapping(value = "/nextBit")
-    public HttpResponseResult nextBit(Long nextExamRoomStudentRelationId,Long examRoomStudentRelationId,Integer examStatus) {
-        examRoomStudentRelationService.nextBit(nextExamRoomStudentRelationId,examRoomStudentRelationId,examStatus);
+    public HttpResponseResult nextBit(Long nextExamRoomStudentRelationId,Long examRoomStudentRelationId,Integer examStatus,Long roomId) {
+        examRoomStudentRelationService.nextBit(nextExamRoomStudentRelationId,examRoomStudentRelationId,examStatus,roomId);
         return succeed();
     }
 
-    @ApiOperation("获取考场学员队列")
-    @PostMapping(value = "/queryStudentList")
-    public HttpResponseResult queryStudentList(Long roomId) {
-        List<RoomStudentListDto> roomStudentListDtos = examRoomStudentRelationService.queryStudentList(roomId);
-        return succeed();
+    @ApiOperation("获取后台考场待考队列")
+    @PostMapping(value = "/queryNeedCheckingList")
+    public HttpResponseResult queryNeedCheckingList(Long roomId) {
+        return succeed(examRoomStudentRelationService.queryNeedCheckingList(roomId));
     }
 
     @ApiOperation("获取教室学员关联")

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

@@ -41,7 +41,7 @@ public class StudentController extends BaseController {
         return succeed(studentService.queryStudentPage(queryInfo));
     }
 
-    @ApiOperation(value = "学员报考列表")
+    @ApiOperation(value = "学生端学员报考记录列表(包括详情)")
     @PostMapping(value = "applyList")
     @PreAuthorize("@pcs.hasPermissions('student/applyList')")
     public HttpResponseResult<PageInfo<StudentExamPaymentDto>> applyList(StudentApplyQueryInfo queryInfo) {

+ 9 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/StudentExamResultController.java

@@ -62,7 +62,15 @@ public class StudentExamResultController extends BaseController {
     @GetMapping(value = "/getStudentExamResultStatisticsInfo")
     public HttpResponseResult<StudentExamResultStatisticsDto> getStudentExamResultStatisticsInfo(Integer examId){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        return succeed(studentExamResultService.getStudentExamResultStatisticsInfo(sysUser.getId(), examId));
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId=employee.getOrganId();
+        }
+        return succeed(studentExamResultService.getStudentExamResultStatisticsInfo(organId, examId));
     }
 
 }

+ 2 - 5
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/SysConfigController.java

@@ -3,8 +3,6 @@ package com.keao.edu.user.controller;
 
 import com.keao.edu.common.controller.BaseController;
 import com.keao.edu.common.entity.SysConfig;
-import com.keao.edu.common.page.QueryInfo;
-import com.keao.edu.common.tenant.TenantContextHolder;
 import com.keao.edu.user.service.SysConfigService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -18,7 +16,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Date;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -36,10 +33,10 @@ public class SysConfigController extends BaseController {
 	@GetMapping(value = "list")
     @PreAuthorize("@pcs.hasPermissions('sysConfig/list')")
 	public Object configList(String group) {
-		String tenantId = TenantContextHolder.getTenantId();
+//		String tenantId = TenantContextHolder.getTenantId();
 		Map<String,Object> params = new HashMap<String, Object>();
 		params.put("group", group);
-		params.put("tenantId", tenantId);
+//		params.put("tenantId", tenantId);
 		return succeed(sysConfigService.findAll(params));
 	}
 

+ 32 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamCertificationDao.java

@@ -1,10 +1,13 @@
 package com.keao.edu.user.dao;
 
 import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.user.dto.ExamCertificationDto;
+import com.keao.edu.user.dto.NeedCheckingDetailDto;
 import com.keao.edu.user.entity.ExamCertification;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 public interface ExamCertificationDao extends BaseDAO<Long, ExamCertification> {
 
@@ -13,10 +16,37 @@ public interface ExamCertificationDao extends BaseDAO<Long, ExamCertification> {
     /**
      * 获取学员准考证
      * @param studentId
-     * @param basicId
+     * @param examRegistrationId
      * @return
      */
-    ExamCertification findByStuAndBasicId(@Param("studentId") Integer studentId, @Param("basicId") Integer basicId);
+    ExamCertification findByStuAndBasicId(@Param("studentId") Integer studentId, @Param("examRegistrationId") Long examRegistrationId);
 
     int deleteWithRegist(@Param("registIds") List<Long> registIds);
+
+    /**
+     * 获取学员准考证列表
+     * @param studentId
+     * @return
+     */
+    List<ExamCertificationDto> queryExamCertificationDtoPage(Integer studentId);
+    /**
+     * COUNT学员准考证列表
+     * @param params
+     * @return
+     */
+    Integer countExamCertificationDtoPage(Map<String, Object> params);
+
+    /**
+     * 学生端待考详情
+     * @param examRegistrationId
+     * @return
+     */
+    NeedCheckingDetailDto needCheckingDetail(Long examRegistrationId);
+
+    /**
+     * 获取监考端准考证详情
+     * @param examRegistrationId
+     * @return
+     */
+    ExamCertificationDto getExamCertificationDto(@Param("examRegistrationId") Long examRegistrationId);
 }

+ 29 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java

@@ -103,4 +103,33 @@ public interface ExamRoomStudentRelationDao extends BaseDAO<Long, ExamRoomStuden
      * @return
      */
     List<RoomStudentListDto> queryStudentList(Long roomId);
+
+    /**
+     * 获取签到总人数
+     * @param roomId
+     * @return
+     */
+    Integer querySignTotalNum(Long roomId);
+
+    /**
+     * 获取未签到总人数
+     * @param roomId
+     * @return
+     */
+    Integer queryNoSignTotalNum(Long roomId);
+
+    /**
+     * 获取未考试学院数
+     * @param roomId
+     * @return
+     */
+    Integer querySurplusNum(Long roomId);
+
+    /**
+     * 获取当前学员需要等待人数
+     * @param examRegistrationId
+     * @param signInTime
+     * @return
+     */
+    Integer sumWaitNum(@Param("examRegistrationId") Long examRegistrationId, @Param("signInTime") String signInTime, @Param("studentId") Integer studentId);
 }

+ 9 - 8
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/SysUserDao.java

@@ -6,18 +6,10 @@ import com.keao.edu.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
-import java.util.Set;
 
 public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 
 	/**
-	 * 根据用户名查询对象
-	 * @param username
-	 * @return
-	 */
-	SysUser queryByUsername(String username);
-
-	/**
 	 * 根据手机号查询对象
 	 * @param phone
 	 * @return
@@ -78,4 +70,13 @@ public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 	 * @param userType
 	 */
 	void updateUserType(@Param("userId") Integer userId, @Param("userType") String userType);
+
+	/**
+	 * @describe 根据部门获取用户
+	 * @author Joburgess
+	 * @date 2020.07.16
+	 * @param organId:
+	 * @return com.keao.edu.auth.api.entity.SysUser
+	 */
+	SysUser getWithOrgan(@Param("organId") Integer organId);
 }

+ 102 - 15
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamCertificationDto.java

@@ -1,25 +1,96 @@
 package com.keao.edu.user.dto;
 
-import com.keao.edu.user.entity.ExamCertification;
 import io.swagger.annotations.ApiModelProperty;
 
-public class ExamCertificationDto extends ExamCertification {
+public class ExamCertificationDto{
 
-    @ApiModelProperty(value = "考试项目")
-    private String examBaseName;
+    @ApiModelProperty(value = "报名编号")
+    private Long examRegistrationId;
 
-    @ApiModelProperty(value = "科目名称")
+    @ApiModelProperty(value = "准考证号")
+    private String cardNo;
+
+    @ApiModelProperty(value = "姓名")
+    private String realName;
+
+    @ApiModelProperty(value = "性别")
+    private Integer gender;
+
+    @ApiModelProperty(value = "科目")
     private String subjectName;
 
-    @ApiModelProperty(value = "是否考试")
-    private Integer finishedExam;
+    @ApiModelProperty(value = "科目")
+    private Integer subjectId;
+
+    @ApiModelProperty(value = "级别")
+    private Integer level;
+
+    @ApiModelProperty(value = "考试时间")
+    private String examTime;
+
+    @ApiModelProperty(value = "考试地点")
+    private String examAddress;
+
+    @ApiModelProperty(value = "证件照")
+    private String certificatePhoto;
+
+    @ApiModelProperty(value = "考试内容")
+    private String songJson;
+
+    public String getSongJson() {
+        return songJson;
+    }
+
+    public void setSongJson(String songJson) {
+        this.songJson = songJson;
+    }
+
+    public String getCertificatePhoto() {
+        return certificatePhoto;
+    }
+
+    public void setCertificatePhoto(String certificatePhoto) {
+        this.certificatePhoto = certificatePhoto;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public Long getExamRegistrationId() {
+        return examRegistrationId;
+    }
+
+    public void setExamRegistrationId(Long examRegistrationId) {
+        this.examRegistrationId = examRegistrationId;
+    }
+
+    public String getCardNo() {
+        return cardNo;
+    }
+
+    public void setCardNo(String cardNo) {
+        this.cardNo = cardNo;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
 
-    public String getExamBaseName() {
-        return examBaseName;
+    public Integer getGender() {
+        return gender;
     }
 
-    public void setExamBaseName(String examBaseName) {
-        this.examBaseName = examBaseName;
+    public void setGender(Integer gender) {
+        this.gender = gender;
     }
 
     public String getSubjectName() {
@@ -30,11 +101,27 @@ public class ExamCertificationDto extends ExamCertification {
         this.subjectName = subjectName;
     }
 
-    public Integer isFinishedExam() {
-        return finishedExam;
+    public Integer getLevel() {
+        return level;
+    }
+
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    public String getExamTime() {
+        return examTime;
+    }
+
+    public void setExamTime(String examTime) {
+        this.examTime = examTime;
+    }
+
+    public String getExamAddress() {
+        return examAddress;
     }
 
-    public void setFinishedExam(Integer finishedExam) {
-        this.finishedExam = finishedExam;
+    public void setExamAddress(String examAddress) {
+        this.examAddress = examAddress;
     }
 }

+ 176 - 9
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRegistrationDto.java

@@ -1,14 +1,61 @@
 package com.keao.edu.user.dto;
 
-import com.keao.edu.user.entity.ExamRegistration;
+import com.keao.edu.user.enums.StudentRegistrationStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
-public class ExamRegistrationDto extends ExamRegistration {
+import java.math.BigDecimal;
 
-    @ApiModelProperty(value = "学员姓名")
-    private String studentName;
+public class ExamRegistrationDto{
 
-    @ApiModelProperty(value = "考试项目")
+    @ApiModelProperty(value = "报名编号")
+    private Long id;
+
+    @ApiModelProperty(value = "考级项目编号")
+    private Long examinationBasicId;
+
+    @ApiModelProperty(value = "专业编号")
+    private Integer subjectId;
+
+    @ApiModelProperty(value = "报考级别")
+    private Integer level;
+
+    @ApiModelProperty(value = "考级费用")
+    private BigDecimal levelFee;
+
+    @ApiModelProperty(value = "乐理级别")
+    private Integer examMusicTheoryLevel;
+
+    @ApiModelProperty(value = "乐理考级费用")
+    private BigDecimal theoryLevelFee;
+
+    @ApiModelProperty(value = "考试内容")
+    private String songJson;
+
+    @ApiModelProperty(value = "上次报考级别")
+    private Integer lastExamLevel;
+
+    @ApiModelProperty(value = "上次报考证书")
+    private String lastExamCertificateUrl;
+
+    @ApiModelProperty(value = "上次乐理级别")
+    private Integer lastMusicTheoryLevel;
+
+    @ApiModelProperty(value = "上次乐理证书")
+    private String lastMusicTheoryCertificateUrl;
+
+    @ApiModelProperty(value = "证件号")
+    private String cardNo;
+
+    @ApiModelProperty(value = "报名状态(缴费状态)")
+    private StudentRegistrationStatusEnum status;
+
+    @ApiModelProperty(value = "备注")
+    private String memo;
+
+    @ApiModelProperty(value = "订单编号")
+    private String paymentOrderNo;
+
+    @ApiModelProperty(value = "考试项目名称")
     private String examBaseName;
 
     @ApiModelProperty(value = "考试专业")
@@ -26,6 +73,126 @@ public class ExamRegistrationDto extends ExamRegistration {
     @ApiModelProperty(value = "预计考试结束时间")
     private String examEndTime;
 
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getExaminationBasicId() {
+        return examinationBasicId;
+    }
+
+    public void setExaminationBasicId(Long examinationBasicId) {
+        this.examinationBasicId = examinationBasicId;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public Integer getLevel() {
+        return level;
+    }
+
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    public BigDecimal getLevelFee() {
+        return levelFee;
+    }
+
+    public void setLevelFee(BigDecimal levelFee) {
+        this.levelFee = levelFee;
+    }
+
+    public Integer getExamMusicTheoryLevel() {
+        return examMusicTheoryLevel;
+    }
+
+    public void setExamMusicTheoryLevel(Integer examMusicTheoryLevel) {
+        this.examMusicTheoryLevel = examMusicTheoryLevel;
+    }
+
+    public BigDecimal getTheoryLevelFee() {
+        return theoryLevelFee;
+    }
+
+    public void setTheoryLevelFee(BigDecimal theoryLevelFee) {
+        this.theoryLevelFee = theoryLevelFee;
+    }
+
+    public String getSongJson() {
+        return songJson;
+    }
+
+    public void setSongJson(String songJson) {
+        this.songJson = songJson;
+    }
+
+    public Integer getLastExamLevel() {
+        return lastExamLevel;
+    }
+
+    public void setLastExamLevel(Integer lastExamLevel) {
+        this.lastExamLevel = lastExamLevel;
+    }
+
+    public String getLastExamCertificateUrl() {
+        return lastExamCertificateUrl;
+    }
+
+    public void setLastExamCertificateUrl(String lastExamCertificateUrl) {
+        this.lastExamCertificateUrl = lastExamCertificateUrl;
+    }
+
+    public Integer getLastMusicTheoryLevel() {
+        return lastMusicTheoryLevel;
+    }
+
+    public void setLastMusicTheoryLevel(Integer lastMusicTheoryLevel) {
+        this.lastMusicTheoryLevel = lastMusicTheoryLevel;
+    }
+
+    public String getLastMusicTheoryCertificateUrl() {
+        return lastMusicTheoryCertificateUrl;
+    }
+
+    public void setLastMusicTheoryCertificateUrl(String lastMusicTheoryCertificateUrl) {
+        this.lastMusicTheoryCertificateUrl = lastMusicTheoryCertificateUrl;
+    }
+
+    public String getCardNo() {
+        return cardNo;
+    }
+
+    public void setCardNo(String cardNo) {
+        this.cardNo = cardNo;
+    }
+
+    public StudentRegistrationStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(StudentRegistrationStatusEnum status) {
+        this.status = status;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
     public String getExamBaseName() {
         return examBaseName;
     }
@@ -74,11 +241,11 @@ public class ExamRegistrationDto extends ExamRegistration {
         this.examEndTime = examEndTime;
     }
 
-    public String getStudentName() {
-        return studentName;
+    public String getPaymentOrderNo() {
+        return paymentOrderNo;
     }
 
-    public void setStudentName(String studentName) {
-        this.studentName = studentName;
+    public void setPaymentOrderNo(String paymentOrderNo) {
+        this.paymentOrderNo = paymentOrderNo;
     }
 }

+ 138 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/NeedCheckingDetailDto.java

@@ -0,0 +1,138 @@
+package com.keao.edu.user.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+public class NeedCheckingDetailDto {
+
+    @ApiModelProperty(value = "报名编号")
+    private Long examRegistrationId;
+
+    @ApiModelProperty(value = "考场与学员关联编号")
+    private Long examRoomStudentRelationId;
+
+    @ApiModelProperty(value = "开始时间")
+    private String examStartTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private String examEndTime;
+
+    @ApiModelProperty(value = "签到时间")
+    private String signInTime;
+
+    @ApiModelProperty(value = "房间入口开启状态")
+    private Integer classroomSwitch;
+
+    @ApiModelProperty(value = "考试是否开始")
+    private Integer openFlag;
+
+    @ApiModelProperty(value = "学员是否考试")
+    private Integer finishedExam;
+
+    @ApiModelProperty(value = "等待人数")
+    private Integer waitNum;
+
+    @ApiModelProperty(value = "考试名称")
+    private String baseExamName;
+
+    @ApiModelProperty(value = "房间编号")
+    private Long examRoomId;
+
+    @ApiModelProperty(value = "注意事项")
+    private String desc;
+
+    public Long getExamRoomStudentRelationId() {
+        return examRoomStudentRelationId;
+    }
+
+    public void setExamRoomStudentRelationId(Long examRoomStudentRelationId) {
+        this.examRoomStudentRelationId = examRoomStudentRelationId;
+    }
+
+    public Integer getFinishedExam() {
+        return finishedExam;
+    }
+
+    public void setFinishedExam(Integer finishedExam) {
+        this.finishedExam = finishedExam;
+    }
+
+    public Integer getOpenFlag() {
+        return openFlag;
+    }
+
+    public void setOpenFlag(Integer openFlag) {
+        this.openFlag = openFlag;
+    }
+
+    public Long getExamRegistrationId() {
+        return examRegistrationId;
+    }
+
+    public void setExamRegistrationId(Long examRegistrationId) {
+        this.examRegistrationId = examRegistrationId;
+    }
+
+    public String getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(String examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
+    public String getExamEndTime() {
+        return examEndTime;
+    }
+
+    public void setExamEndTime(String examEndTime) {
+        this.examEndTime = examEndTime;
+    }
+
+    public String getSignInTime() {
+        return signInTime;
+    }
+
+    public void setSignInTime(String signInTime) {
+        this.signInTime = signInTime;
+    }
+
+    public Integer getClassroomSwitch() {
+        return classroomSwitch;
+    }
+
+    public void setClassroomSwitch(Integer classroomSwitch) {
+        this.classroomSwitch = classroomSwitch;
+    }
+
+    public Integer getWaitNum() {
+        return waitNum;
+    }
+
+    public void setWaitNum(Integer waitNum) {
+        this.waitNum = waitNum;
+    }
+
+    public String getBaseExamName() {
+        return baseExamName;
+    }
+
+    public void setBaseExamName(String baseExamName) {
+        this.baseExamName = baseExamName;
+    }
+
+    public Long getExamRoomId() {
+        return examRoomId;
+    }
+
+    public void setExamRoomId(Long examRoomId) {
+        this.examRoomId = examRoomId;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}

+ 10 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/Employee.java

@@ -76,6 +76,16 @@ public class Employee {
 
 	private String tenantId;
 
+	private String employeeType;
+
+	public String getEmployeeType() {
+		return employeeType;
+	}
+
+	public void setEmployeeType(String employeeType) {
+		this.employeeType = employeeType;
+	}
+
 	public String getTenantId() {
 		return tenantId;
 	}

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

@@ -41,9 +41,6 @@ public class Organization {
 
 	private String parentOrganIdTag;
 
-	@ApiModelProperty(value = "是否允许排考")
-	private Integer isAllowArrangeExam;
-	
 	/**  */
 	private java.util.Date createTime;
 	
@@ -81,14 +78,6 @@ public class Organization {
 		this.sysUser = sysUser;
 	}
 
-	public Integer getIsAllowArrangeExam() {
-		return isAllowArrangeExam;
-	}
-
-	public void setIsAllowArrangeExam(Integer isAllowArrangeExam) {
-		this.isAllowArrangeExam = isAllowArrangeExam;
-	}
-
 	public Integer getLevel() {
 		return level;
 	}

+ 0 - 22
edu-user/edu-user-server/src/main/java/com/keao/edu/user/page/ExamSongQueryInfo.java

@@ -12,12 +12,6 @@ public class ExamSongQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "级别")
     private Integer level;
 
-    @ApiModelProperty(value = "曲目名")
-    private String songName;
-
-    @ApiModelProperty(value = "作者名")
-    private String songAuthor;
-
     @ApiModelProperty(value = "曲目类别")
     private SongTypeEnum type;
 
@@ -37,22 +31,6 @@ public class ExamSongQueryInfo extends QueryInfo {
         this.subjectList = subjectList;
     }
 
-    public String getSongName() {
-        return songName;
-    }
-
-    public void setSongName(String songName) {
-        this.songName = songName;
-    }
-
-    public String getSongAuthor() {
-        return songAuthor;
-    }
-
-    public void setSongAuthor(String songAuthor) {
-        this.songAuthor = songAuthor;
-    }
-
     public SongTypeEnum getType() {
         return type;
     }

+ 11 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/page/StudentExamResultQueryInfo.java

@@ -24,6 +24,9 @@ public class StudentExamResultQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "专业编号")
     private Integer subjectId;
 
+    @ApiModelProperty(value = "学员编号")
+    private Integer studentId;
+
     @ApiModelProperty(value = "级别")
     private Integer level;
 
@@ -48,6 +51,14 @@ public class StudentExamResultQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "考级项目状态")
     private Integer resultConfirm;
 
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+
     public Integer getOrganId() {
         return organId;
     }

+ 21 - 4
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamCertificationService.java

@@ -4,24 +4,41 @@ package com.keao.edu.user.service;
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.BaseService;
 import com.keao.edu.user.dto.ExamCertificationDto;
+import com.keao.edu.user.dto.NeedCheckingDetailDto;
 import com.keao.edu.user.entity.ExamCertification;
 import com.keao.edu.user.page.ExamCertificationQueryInfo;
 import org.springframework.data.domain.Page;
 
+import java.util.List;
+
 public interface ExamCertificationService extends BaseService<Long, ExamCertification> {
 
     /**
      * 获取学员准考证
      * @param studentId
-     * @param basicId
+     * @param examRegistrationId
      * @return
      */
-    ExamCertification findByStuAndBasicId(Integer studentId, Integer basicId);
+    ExamCertification findByStuAndBasicId(Integer studentId,Long examRegistrationId);
 
     /**
      * 获取学员的准考证列表
-     * @param queryInfo
      * @return
      */
-    PageInfo<ExamCertificationDto> queryCertificationPage(ExamCertificationQueryInfo queryInfo);
+    List<ExamCertificationDto> queryCertificationPage();
+
+    /**
+     * 学生端待考详情
+     * @param examRegistrationId
+     * @return
+     */
+    NeedCheckingDetailDto needCheckingDetail(Long examRegistrationId);
+
+    /**
+     * 获取后台准考证详情
+     * @param studentId
+     * @param examRegistrationId
+     * @return
+     */
+    ExamCertificationDto findDetailByStudentId(Integer studentId, Long examRegistrationId);
 }

+ 12 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamOrganizationRelationService.java

@@ -7,6 +7,8 @@ import com.keao.edu.user.entity.ExamOrganizationRelation;
 import com.keao.edu.user.entity.Organization;
 import com.keao.edu.user.page.ExamOrganizationRelationQueryInfo;
 
+import java.util.List;
+
 public interface ExamOrganizationRelationService extends BaseService<Long, ExamOrganizationRelation> {
 
     /**
@@ -29,6 +31,16 @@ public interface ExamOrganizationRelationService extends BaseService<Long, ExamO
     void addExamOrganizations(Long examId, String orgainIdsStr);
 
     /**
+     * @describe 添加单位
+     * @author Joburgess
+     * @date 2020.07.07
+     * @param examId:
+     * @param orgainIdsStr:
+     * @return void
+     */
+    void addExamOrganizations(List<ExamOrganizationRelation> organizationRelations);
+
+    /**
      * @describe 更新考级项目与合作单位关联信息
      * @author Joburgess
      * @date 2020.06.18

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

@@ -2,6 +2,7 @@ package com.keao.edu.user.service;
 
 
 import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.page.QueryInfo;
 import com.keao.edu.common.service.BaseService;
 import com.keao.edu.user.dto.ExamRecordDto;
 import com.keao.edu.user.dto.ExamRegistrationDto;
@@ -42,7 +43,7 @@ public interface ExamRegistrationService extends BaseService<Long, ExamRegistrat
     * @param queryInfo
     * @return
     */
-   PageInfo<ExamRegistrationDto> applyList(ExamRegistrationQueryInfo queryInfo);
+   PageInfo<ExamRegistrationDto> applyList(QueryInfo queryInfo);
 
    /**
     * 考试记录

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

@@ -8,6 +8,7 @@ import com.keao.edu.user.dto.RoomStudentListDto;
 import com.keao.edu.user.page.ExamRoomStudentRelationQueryInfo;
 
 import java.util.List;
+import java.util.Map;
 
 public interface ExamRoomStudentRelationService extends BaseService<Long, ExamRoomStudentRelation> {
 
@@ -73,7 +74,7 @@ public interface ExamRoomStudentRelationService extends BaseService<Long, ExamRo
      * @param examRoomStudentRelationId 学员考场关联
      * @param examStatus 是否完成考试1是0否
      */
-    void nextBit(Long nextExamRoomStudentRelationId, Long examRoomStudentRelationId, Integer examStatus);
+    void nextBit(Long nextExamRoomStudentRelationId, Long examRoomStudentRelationId, Integer examStatus,Long roomId);
 
     /**
      * 获取房间学员队列
@@ -81,4 +82,17 @@ public interface ExamRoomStudentRelationService extends BaseService<Long, ExamRo
      * @return
      */
     List<RoomStudentListDto> queryStudentList(Long roomId);
+
+    /**
+     * 队列
+     * @param roomId
+     * @return
+     */
+    Map<String,Object> queryNeedCheckingList(Long roomId);
+
+    /**
+     * 签到
+     * @param examRegistrationId
+     */
+    void signIn(Long examRegistrationId);
 }

+ 56 - 38
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamCertificationServiceImpl.java

@@ -1,21 +1,23 @@
 package com.keao.edu.user.service.impl;
 
 
-import com.alibaba.fastjson.JSON;
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.dal.BaseDAO;
-import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
+import com.keao.edu.user.api.entity.Student;
 import com.keao.edu.user.dao.ExamCertificationDao;
+import com.keao.edu.user.dao.ExamRoomStudentRelationDao;
+import com.keao.edu.user.dao.SubjectDao;
 import com.keao.edu.user.dto.ExamCertificationDto;
+import com.keao.edu.user.dto.NeedCheckingDetailDto;
 import com.keao.edu.user.entity.ExamCertification;
-import com.keao.edu.user.page.ExamCertificationQueryInfo;
+import com.keao.edu.user.entity.Subject;
 import com.keao.edu.user.service.ExamCertificationService;
-import com.keao.edu.util.collection.MapUtil;
+import com.keao.edu.user.service.StudentService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -25,6 +27,14 @@ public class ExamCertificationServiceImpl extends BaseServiceImpl<Long, ExamCert
 	
 	@Autowired
 	private ExamCertificationDao examCertificationDao;
+	@Autowired
+	private ExamRoomStudentRelationDao examRoomStudentRelationDao;
+	@Autowired
+	private SubjectDao subjectDao;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private StudentService studentService;
 
 	@Override
 	public BaseDAO<Long, ExamCertification> getDAO() {
@@ -32,41 +42,49 @@ public class ExamCertificationServiceImpl extends BaseServiceImpl<Long, ExamCert
 	}
 
 	@Override
-	public ExamCertification findByStuAndBasicId(Integer studentId, Integer basicId) {
-		return examCertificationDao.findByStuAndBasicId(studentId,basicId);
+	public ExamCertification findByStuAndBasicId(Integer studentId, Long examRegistrationId) {
+		return examCertificationDao.findByStuAndBasicId(studentId,examRegistrationId);
 	}
 
 	@Override
-	public PageInfo<ExamCertificationDto> queryCertificationPage(ExamCertificationQueryInfo queryInfo) {
-		PageInfo<ExamCertificationDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<ExamCertificationDto> dataList = null;
-		int count = this.findCount(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = JSON.parseArray(JSON.toJSONString(this.getDAO().queryPage(params)),ExamCertificationDto.class);
-			List<Long> basicIds = dataList.stream().map(e -> e.getExaminationBasicId()).collect(Collectors.toList());
-			List<Integer> studentIds = dataList.stream().map(e -> e.getStudentId()).collect(Collectors.toList());
-			List<Integer> subjectIds = dataList.stream().map(e -> e.getSubjectId()).collect(Collectors.toList());
-			Map<Integer, String> basicNameMap = this.getMap("examination_basic", "id_", "name_", basicIds, Integer.class, String.class);
-			Map<Integer, String> subjectNameMap = this.getMap("subject", "id_", "name_", subjectIds, Integer.class, String.class);
-			Map<String, Object> paramMap = new HashMap<>();
-			paramMap.put("examination_basic_id_",basicIds);
-			paramMap.put("student_id_",studentIds);
-			Map<Integer, Integer> finishedExamMap = this.getMap("student_exam_result", "examination_basic_id_", "is_finished_exam_", paramMap, Integer.class, Integer.class);
-			dataList.forEach(e->{
-				e.setSubjectName(subjectNameMap.get(e.getSubjectId()));
-				e.setExamBaseName(basicNameMap.get(e.getExaminationBasicId()));
-				e.setFinishedExam(finishedExamMap.get(e.getExaminationBasicId()));
-			});
-		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
+	public List<ExamCertificationDto> queryCertificationPage() {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		List<ExamCertificationDto> dataList = examCertificationDao.queryExamCertificationDtoPage(sysUser.getId());
+		if(dataList == null || dataList.size() < 0){
+			return dataList;
 		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
+		List<Integer> subjectIds = dataList.stream().map(e -> e.getSubjectId()).collect(Collectors.toList());
+		Map<Integer, String> subjectNameMap = this.getMap("subject", "id_", "name_", subjectIds, Integer.class, String.class);
+		Student student = studentService.get(sysUser.getId());
+		dataList.forEach(e->{
+			e.setSubjectName(subjectNameMap.get(e.getSubjectId()));
+			e.setRealName(sysUser.getRealName());
+			e.setGender(sysUser.getGender());
+			e.setCertificatePhoto(student.getCertificatePhoto());
+		});
+		return dataList;
+	}
+
+	@Override
+	public NeedCheckingDetailDto needCheckingDetail(Long examRegistrationId) {
+		NeedCheckingDetailDto needCheckingDetailDto = examCertificationDao.needCheckingDetail(examRegistrationId);
+		//等待学员数
+		String signInTime = needCheckingDetailDto.getSignInTime();
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		Integer waitNum = examRoomStudentRelationDao.sumWaitNum(examRegistrationId,signInTime,sysUser.getId());
+		needCheckingDetailDto.setWaitNum(waitNum);
+		return needCheckingDetailDto;
+	}
+
+	@Override
+	public ExamCertificationDto findDetailByStudentId(Integer studentId, Long examRegistrationId) {
+		ExamCertificationDto examCertificationDto = examCertificationDao.getExamCertificationDto(examRegistrationId);
+		Subject subject = subjectDao.get(examCertificationDto.getSubjectId());
+		examCertificationDto.setSubjectName(subject.getName());
+		Student student = studentService.getStudent(studentId);
+		examCertificationDto.setRealName(student.getRealName());
+		examCertificationDto.setGender(student.getGender());
+		examCertificationDto.setCertificatePhoto(student.getCertificatePhoto());
+		return examCertificationDto;
 	}
 }

+ 77 - 9
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java

@@ -11,6 +11,8 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.keao.edu.thirdparty.message.provider.JiguangPushPlugin;
+import com.keao.edu.user.dao.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -29,10 +31,6 @@ import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.common.tenant.TenantContextHolder;
-import com.keao.edu.user.dao.ExamOrganizationRelationDao;
-import com.keao.edu.user.dao.ExaminationBasicDao;
-import com.keao.edu.user.dao.OrganizationDao;
-import com.keao.edu.user.dao.TenantInfoDao;
 import com.keao.edu.user.dto.ExamOrganizationRelationExtraDto;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
 import com.keao.edu.user.entity.ExaminationBasic;
@@ -69,6 +67,8 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 	private SysConfigService sysConfigService;
 	@Autowired
 	private TenantInfoDao tenantInfoDao;
+	@Autowired
+	private SysUserDao sysUserDao;
 
 	public static final Set<ExamStatusEnum> EDIT_ABLE_EXAM_STATUS=new HashSet<>(Arrays.asList(ExamStatusEnum.SETTING,ExamStatusEnum.NOT_START,ExamStatusEnum.APPLYING,ExamStatusEnum.APPLIED));
 
@@ -156,12 +156,14 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 				throw new BizException("合作单位信息错误");
 			}
 			og.setSendUrlFlag(0);
-			og.setIsAllowArrangeExam(organization.getIsAllowArrangeExam());
+			og.setIsAllowArrangeExam(0);
 			og.setSettlementType(organization.getSettlementType());
 			og.setShareProfitAmount(organization.getShareProfitAmount());
 			og.setTotalRegistrationStudentNum(BigDecimal.ZERO.intValue());
 			og.setTotalPaymentAmount(BigDecimal.ZERO);
 			og.setTotalTransAmount(BigDecimal.ZERO);
+			og.setSelfRegistrationStudentNum(BigDecimal.ZERO.intValue());
+			og.setSelfPaymentAmount(BigDecimal.ZERO);
 			String registrationUrl = baseUrl + "examId=" + examId + "&organId=" + organId;
 			String registShortUrl = shortUrlService.createShortUrl(registrationUrl);
 			og.setUrl(registShortUrl);
@@ -171,6 +173,72 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void addExamOrganizations(List<ExamOrganizationRelation> organizationRelations) {
+		if(CollectionUtils.isEmpty(organizationRelations)){
+			throw new BizException("请指定考级项目");
+		}
+		if(Objects.isNull(organizationRelations.get(0).getExaminationBasicId())){
+			throw new BizException("请指定考级项目");
+		}
+		ExaminationBasic examinationBasic = examinationBasicDao.get(organizationRelations.get(0).getExaminationBasicId().longValue());
+		if(Objects.isNull(examinationBasic)){
+			throw new BizException("考级项目不存在");
+		}
+		if(!EDIT_ABLE_EXAM_STATUS.contains(examinationBasic.getStatus())){
+			throw new BizException("当前状态暂不可添加合作单位");
+		}
+
+		Set<Integer> organIdsWithExam = examOrganizationRelationDao.getOrganIdsWithExam(examinationBasic.getId().intValue());
+		List<Integer> organIds = organizationRelations.stream().filter(e->Objects.nonNull(e.getOrganId())).map(ExamOrganizationRelation::getOrganId).collect(Collectors.toList());
+		if(organIds.size()!=organizationRelations.size()){
+			throw new BizException("参数错误");
+		}
+		List<Organization> organs = organizationDao.getOrgans(organIds);
+		if(organs.size()!=organIds.size()){
+			throw new BizException("合作单位信息错误");
+		}
+
+		SysConfig baseUrlConfig = sysConfigService.findByParamName(SysConfigService.BASE_API_URL);
+		String baseUrl="";
+		if(Objects.nonNull(baseUrlConfig)){
+			baseUrl=baseUrlConfig.getParanValue();
+		}
+		baseUrl = baseUrl+"/#/signUp?";
+
+		Map<Integer, Organization> idOrganMap = organs.stream().collect(Collectors.toMap(Organization::getId, o -> o));
+		for (ExamOrganizationRelation og : organizationRelations) {
+			if(organIdsWithExam.contains(og.getOrganId())){
+				throw new BizException("合作单位冲突");
+			}
+			if(Objects.isNull(og.getIsAllowArrangeExam())){
+				throw new BizException("参数错误");
+			}
+			if(Objects.isNull(og.getSettlementType())){
+				throw new BizException("参数错误");
+			}
+			if(Objects.isNull(og.getShareProfitAmount())){
+				throw new BizException("参数错误");
+			}
+
+			og.setTenantId(TenantContextHolder.getTenantId());
+			og.setExaminationBasicId(examinationBasic.getId().intValue());
+
+			og.setSendUrlFlag(0);
+			og.setTotalRegistrationStudentNum(BigDecimal.ZERO.intValue());
+			og.setTotalPaymentAmount(BigDecimal.ZERO);
+			og.setTotalTransAmount(BigDecimal.ZERO);
+			og.setSelfRegistrationStudentNum(BigDecimal.ZERO.intValue());
+			og.setSelfPaymentAmount(BigDecimal.ZERO);
+			String registrationUrl = baseUrl + "examId=" + examinationBasic.getId() + "&organId=" + og.getOrganId();
+			String registShortUrl = shortUrlService.createShortUrl(registrationUrl);
+			og.setUrl(registShortUrl);
+			organizationRelations.add(og);
+		}
+		examOrganizationRelationDao.batchInsert(organizationRelations);
+	}
+
+	@Override
 	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public void updateExamOrganizationRelation(ExamOrganizationRelation examOrganizationRelation) {
 		if(Objects.isNull(examOrganizationRelation.getId())){
@@ -215,12 +283,12 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 
 			examOrgan.setSendUrlFlag(1);
 
-			SysUser student = sysUserFeignService.queryUserById(examOrgan.getOrganId());
+			SysUser organUser = sysUserDao.getWithOrgan(examOrgan.getOrganId());
 			Map<Integer, String> userPhoneMap = new HashMap<>();
-			userPhoneMap.put(examOrgan.getOrganId(), student.getPhone());
+			userPhoneMap.put(examOrgan.getOrganId(), organUser.getPhone());
 
 			SysMessageParams sysMessageParams=new SysMessageParams(MessageTypeEnum.EXAM_REGISTRATION_URL_PUSH,
-					userPhoneMap, null, 0, null, null,
+					userPhoneMap, null, 0, null, JiguangPushPlugin.PLUGIN_NAME,
 					tenantInfo.getName(), examinationBasic.getName(), expectRegistTime.toString(), examOrgan.getUrl());
 			sysMessageFeignService.batchSendMessage(sysMessageParams);
 		}
@@ -241,7 +309,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
 
-		List<Integer> nextLevelOrganIds = organizationService.getChildOrganIds(queryInfo.getOrganId(), true);
+		List<Integer> nextLevelOrganIds = organizationService.getChildOrganIds(queryInfo.getOrganId(), false);
 		params.put("organIds", nextLevelOrganIds);
 
 		List<Organization> dataList = new ArrayList<>();

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

@@ -4,6 +4,7 @@ package com.keao.edu.user.service.impl;
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.page.QueryInfo;
 import com.keao.edu.common.service.IdGeneratorService;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.user.dao.*;
@@ -206,7 +207,7 @@ public class ExamRegistrationServiceImpl extends BaseServiceImpl<Long, ExamRegis
     }
 
     @Override
-    public PageInfo<ExamRegistrationDto> applyList(ExamRegistrationQueryInfo queryInfo) {
+    public PageInfo<ExamRegistrationDto> applyList(QueryInfo queryInfo) {
         PageInfo<ExamRegistrationDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<String, Object>();
         MapUtil.populateMap(params, queryInfo);

+ 11 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java

@@ -16,6 +16,7 @@ import com.keao.edu.user.api.enums.ExamModeEnum;
 import com.keao.edu.user.dao.*;
 import com.keao.edu.user.dto.ExamRoomDto;
 import com.keao.edu.user.dto.ExamRoomStatisticsDto;
+import com.keao.edu.user.entity.ExamOrganizationRelation;
 import com.keao.edu.user.entity.ExamRegistration;
 import com.keao.edu.user.entity.ExaminationBasic;
 import com.keao.edu.user.page.ExamRoomQueryInfo;
@@ -56,6 +57,8 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 	private ExamCertificationDao examCertificationDao;
 	@Autowired
 	private StudentExamResultDao studentExamResultDao;
+	@Autowired
+	private ExamOrganizationRelationDao examOrganizationRelationDao;
 
 	@Override
 	public BaseDAO<Long, ExamRoom> getDAO() {
@@ -109,6 +112,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void createExamRoom(ExamRoom examRoom) {
 		if(Objects.isNull(examRoom.getExaminationBasicId())){
 			throw new BizException("请指定考级项目");
@@ -132,6 +136,12 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 		if(StringUtils.isBlank(examRoom.getExamTimeJson())){
 			throw new BizException("请指定考试时间");
 		}
+
+		ExamOrganizationRelation examOrganizationRelation = examOrganizationRelationDao.getExamOrganizationRelation(examinationBasic.getId(), examRoom.getOrganId());
+		if(Objects.isNull(examOrganizationRelation)||examOrganizationRelation.getIsAllowArrangeExam()==0){
+			throw new BizException("无权操作");
+		}
+
 		examRoom.setTenantId(TenantContextHolder.getTenantId());
 		examRoom.setExamPlanPushFlag(YesOrNoEnum.NO);
 		examRoom.setExamRoomStudentNum(0);
@@ -294,6 +304,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void checkRoomTeachers(List<ExamRoom> examRooms) {
 		if(CollectionUtils.isEmpty(examRooms)){
 			throw new BizException("考场信息异常");

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

@@ -1,7 +1,12 @@
 package com.keao.edu.user.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.keao.edu.auth.api.client.SysMessageFeignService;
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysMessageParams;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.common.enums.MessageTypeEnum;
 import com.keao.edu.common.enums.YesOrNoEnum;
 import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
@@ -57,6 +62,10 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 	private ExamTeacherSalaryService examTeacherSalaryService;
 	@Autowired
 	private ImFeignService imFeignService;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private SysMessageFeignService sysMessageFeignService;
 
 	@Override
 	public BaseDAO<Long, ExamRoomStudentRelation> getDAO() {
@@ -265,7 +274,8 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 	}
 
 	@Override
-	public void nextBit(Long nextExamRoomStudentRelationId, Long currentExamRoomStudentRelationId, Integer examStatus) {
+	public void nextBit(Long nextExamRoomStudentRelationId, Long currentExamRoomStudentRelationId, Integer examStatus,Long examRoomId) {
+
 		if(currentExamRoomStudentRelationId != null){
 			ExamRoomStudentRelation examRoomStudentRelation = examRoomStudentRelationDao.get(currentExamRoomStudentRelationId);
 			Long roomId = examRoomStudentRelation.getExamRoomId();
@@ -287,11 +297,18 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 			//开启学员房间入口
 			examRoomStudentRelation.setClassroomSwitch(YesOrNoEnum.YES);
 			examRoomStudentRelationDao.update(examRoomStudentRelation);
+			Integer studentId = examRoomStudentRelation.getStudentId();
 			//推送消息
-
+			Map<Integer, String> userPhoneMap = new HashMap<>();
+			userPhoneMap.put(studentId, studentId.toString());
+			SysMessageParams sysMessageParams=new SysMessageParams(MessageTypeEnum.EXAM_REGISTRATION_URL_PUSH,
+					userPhoneMap, null, 0, null, null);
+			sysMessageFeignService.batchSendMessage(sysMessageParams);
 		}
 		try {
-			WebSocketServer.sendInfo(null,null);
+			SysUser sysUser = sysUserFeignService.queryUserInfo();
+			String message = JSONObject.toJSONString(this.queryNeedCheckingList(examRoomId));
+			WebSocketServer.sendInfo(message,sysUser.getId().toString());
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
@@ -301,4 +318,26 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 	public List<RoomStudentListDto> queryStudentList(Long roomId) {
 		return examRoomStudentRelationDao.queryStudentList(roomId);
 	}
+
+	@Override
+	public Map<String, Object> queryNeedCheckingList(Long roomId) {
+		List<RoomStudentListDto> roomStudentListDtos = examRoomStudentRelationDao.queryStudentList(roomId);
+		Map<String,Object> resultMap = new HashMap<>(4);
+		resultMap.put("studentList",roomStudentListDtos);
+		resultMap.put("signTotalNum",examRoomStudentRelationDao.querySignTotalNum(roomId));
+		resultMap.put("noSignTotalNum",examRoomStudentRelationDao.queryNoSignTotalNum(roomId));
+		resultMap.put("surplusNum",examRoomStudentRelationDao.querySurplusNum(roomId));
+		return resultMap;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public synchronized void signIn(Long examRegistrationId) {
+		ExamRoomStudentRelation studentExamRoom = examRoomStudentRelationDao.getStudentExamRoom(examRegistrationId);
+		if(studentExamRoom.getSignInTime() != null){
+			throw new BizException("您已签到,请勿重复操作!");
+		}
+		studentExamRoom.setSignInTime(new Date());
+		examRoomStudentRelationDao.update(studentExamRoom);
+	}
 }

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

@@ -218,7 +218,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         if(Objects.isNull(existsExam)){
             throw new BizException("考级项目不存在");
         }
-        if(ExamStatusEnum.SETTING.equals(existsExam.getStatus())){
+        if(!ExamStatusEnum.SETTING.equals(existsExam.getStatus())){
             throw new BizException("无法修改");
         }
         if(ExamStatusEnum.RESULT_CONFIRM.equals(existsExam.getStatus())){

+ 0 - 12
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/OrganizationServiceImpl.java

@@ -59,12 +59,6 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 		if(currentOrganization.getLevel() == 3){
 			throw new BizException("无权限创建合作单位");
 		}
-		//获取父级的organ
-		if(organ.getIsAllowArrangeExam() == 1){
-			if(currentOrganization.getIsAllowArrangeExam() == 0){
-				throw new BizException("无权创建可排考的合作单位");
-			}
-		}
 		SysUser sysUser = organ.getSysUser();
 //		String tenantId = queryUserInfo.getTenantId();
 //		organ.setTenantId(tenantId);
@@ -168,12 +162,6 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 		if(null == organization1){
 			throw new BizException("合作商信息不存在");
 		}
-		//获取父级的organ
-		if(organization.getIsAllowArrangeExam() == 1){
-			if(organization1.getIsAllowArrangeExam() == 0){
-				throw new BizException("无权创建可排考的合作单位");
-			}
-		}
 		sysUser.setId(organization1.getUserId());
 //		organization.setId(sysUser.getId());
 		if(StringUtils.isNotEmpty(sysUser.getPhone())){

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

@@ -82,7 +82,6 @@ public class TenantInfoServiceImpl extends BaseServiceImpl<Integer, TenantInfo>
 		organ.setName(tenantInfo.getName());
 		organ.setContactName(tenantInfo.getContactName());
 		organ.setContactPhone(tenantInfo.getContactPhone());
-		organ.setIsAllowArrangeExam(1);
 		organizationDao.insert(organ);
 
 		Employee employee = new Employee();

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

@@ -24,6 +24,7 @@
 		<result column="role_name_" property="roleName" />
 		<result column="del_flag_" property="delFlag" />
 		<result column="tenant_id_" property="tenantId" />
+		<result column="employee_type_" property="employeeType" />
 		<result column="organ_id_" property="organId" />
 		<association property="sysUser" resultMap="com.keao.edu.user.dao.SysUserDao.SysUser"/>
 	</resultMap>
@@ -43,15 +44,18 @@
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.keao.edu.user.entity.Employee" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO employee (user_id_,job_nature_,education_background_,graduate_school_,technical_titles_,entry_date_,
-		certificate_type_,certificate_num_,update_time_,create_time_,introduction_,demission_date_,contact_address_,postal_code_,tenant_id_,organ_id_)
+		certificate_type_,certificate_num_,update_time_,create_time_,introduction_,demission_date_,contact_address_,postal_code_,tenant_id_,organ_id_,employee_type_)
 		VALUES(#{userId},#{jobNature},#{educationBackground},#{graduateSchool},#{technicalTitles},#{entryDate},#{certificateType},
-		#{certificateNum},NOW(),NOW(),#{introduction},#{demissionDate},#{contactAddress},#{postalCode},#{tenantId},#{organId})
+		#{certificateNum},NOW(),NOW(),#{introduction},#{demissionDate},#{contactAddress},#{postalCode},#{tenantId},#{organId},#{employeeType})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.keao.edu.user.entity.Employee">
 		UPDATE employee
 		<set>
+            <if test="employeeType != null">
+				employee_type_ = #{employeeType},
+            </if>
             <if test="graduateSchool != null">
                 graduate_school_ = #{graduateSchool},
             </if>
@@ -106,7 +110,7 @@
 	</update>
 	<sql id="employeeQueryPage">
 		<where>
-				e.del_flag_ = 0 AND e.user_id_ != #{userId}
+				e.del_flag_ = 0 AND e.user_id_ != #{userId} AND e.employee_type_ = 'EMPLOYEE'
 			<if test="search != null and search != ''">
 				AND (e.user_id_ = #{search} OR su.phone_ LIKE CONCAT('%',#{search},'%') OR su.real_name_ LIKE CONCAT('%',#{search},'%'))
 			</if>

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

@@ -111,6 +111,57 @@
 	</select>
 
     <select id="findByStuAndBasicId" resultMap="ExamCertification">
-		SELECT * FROM exam_certification WHERE examination_basic_id_ = #{basicId} AND student_id_ = #{studentId} LIMIT 1
+		SELECT * FROM exam_certification WHERE exam_registration_id_ = #{examRegistrationId} AND student_id_ = #{studentId} LIMIT 1
+	</select>
+
+	<select id="getExamCertificationDto" resultMap="ExamCertificationDtoMap">
+		SELECT ec.exam_registration_id_,ec.exam_start_time_,ec.subject_id_,ec.level_,ec.exam_address_,er.song_json_,ec.card_no_
+		FROM exam_registration er
+		LEFT JOIN exam_certification ec ON er.id_ = ec.exam_registration_id_
+		WHERE er.id_ = #{examRegistrationId} LIMIT 1
+	</select>
+	<resultMap id="ExamCertificationDtoMap" type="com.keao.edu.user.dto.ExamCertificationDto">
+		<result column="exam_registration_id_" property="examRegistrationId" />
+		<result column="exam_start_time_" property="examTime" />
+		<result column="card_no_" property="cardNo" />
+		<result column="song_json_" property="songJson" />
+		<result column="subject_id_" property="subjectId" />
+		<result column="level_" property="level" />
+		<result column="address_" property="examAddress" />
+	</resultMap>
+	<select id="queryExamCertificationDtoPage" resultMap="ExamCertificationDtoMap">
+		SELECT ec.exam_registration_id_,ec.exam_start_time_,ec.card_no_,ec.subject_id_,ec.level_,ec.exam_address_
+		FROM exam_room_student_relation ersr
+		LEFT JOIN exam_certification ec ON ec.exam_registration_id_ = ersr.exam_registration_id_
+		LEFT JOIN student_exam_result ser ON ser.exam_registration_id_ = ersr.exam_registration_id_
+		WHERE ersr.student_id_ = #{studentId} AND ser.is_finished_exam_ = 0
+		ORDER BY ec.exam_start_time_
+	</select>
+	<select id="countExamCertificationDtoPage" resultType="java.lang.Integer">
+		SELECT COUNT(DISTINCT ersr.exam_registration_id_)
+		FROM exam_room_student_relation ersr
+		LEFT JOIN student_exam_result ser ON ser.exam_registration_id_ = ersr.exam_registration_id_
+		WHERE ersr.student_id_ = #{studentId} AND ser.is_finished_exam_ = 0
+	</select>
+	<resultMap id="NeedCheckingDetailDtoMap" type="com.keao.edu.user.dto.NeedCheckingDetailDto">
+		<result column="exam_registration_id_" property="examRegistrationId" />
+		<result property="examRoomStudentRelationId" column="exam_room_student_relation_id_"/>
+		<result property="examRoomId" column="exam_room_id_"/>
+		<result property="signInTime" column="sign_in_time_"/>
+		<result property="examEndTime" column="exam_end_time_"/>
+		<result property="examStartTime" column="exam_start_time_"/>
+		<result property="baseExamName" column="exam_base_name_"/>
+		<result property="classroomSwitch" column="classroom_switch_"/>
+		<result property="openFlag" column="open_flag_"/>
+		<result property="finishedExam" column="is_finished_exam_"/>
+	</resultMap>
+	<select id="needCheckingDetail" resultMap="NeedCheckingDetailDtoMap">
+		SELECT ersr.id_ exam_room_student_relation_id_,eb.name_ exam_base_name_,er.exam_start_time_,er.exam_end_time_,er.open_flag_,
+		ser.is_finished_exam_,ersr.exam_room_id_,ersr.sign_in_time_,ersr.classroom_switch_
+		FROM exam_room_student_relation ersr
+		LEFT JOIN examination_basic eb ON eb.id_ = ersr.examination_basic_id_
+		LEFT JOIN exam_room er ON er.id_ = ersr.exam_room_id_
+		LEFT JOIN student_exam_result ser ON ser.exam_registration_id_ = ersr.exam_registration_id_
+		WHERE ersr.exam_registration_id_ = #{examRegistrationId} LIMIT 1
 	</select>
 </mapper>

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

@@ -199,7 +199,7 @@
 				AND ear.is_allow_arrange_exam_ = #{isAllowArrangeExam}
 			</if>
 			<if test="search!=null">
-				AND (ear.organ_id_=#{search} OR a.name_ LIKE CONCAT(#{search}, '%'))
+				AND (ear.organ_id_=#{search} OR a.name_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
 		</where>
 	</sql>

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

@@ -24,7 +24,7 @@
 		<result column="adviser_name_" property="adviserName" />
 		<result column="adviser_phone_" property="adviserPhone" />
 		<result column="card_no_" property="cardNo" />
-		<result column="status_" property="status" />
+		<result column="status_" property="status" 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" />
@@ -205,6 +205,7 @@
 
 	<sql id="queryCondition">
 		<where>
+			er.status_ NOT IN ('CANCEL')
 			<if test="organIds!=null">
 				AND er.organ_id_ IN
 				<foreach collection="organIds" item="organId" separator="," open="(" close=")">
@@ -314,7 +315,6 @@
 			er.organ_id_,
 			er.subject_id_,
 			er.level_,
-			erp.trans_amount_,
 			er.status_,
 			er.create_time_,
 			ersr.exam_room_id_,
@@ -323,7 +323,6 @@
 		FROM
 			exam_registration er
 			LEFT JOIN sys_user su ON er.student_id_ = su.id_
-			LEFT JOIN exam_registration_payment erp ON er.id_ = erp.exam_registration_id_
 			LEFT JOIN exam_room_student_relation ersr ON ersr.exam_registration_id_ = er.id_
 			LEFT JOIN exam_room ero ON ero.id_ = ersr.exam_room_id_
 		<include refid="queryCondition"/>
@@ -386,7 +385,8 @@
 		FROM
 			exam_registration er
 		WHERE
-			er.examination_basic_id_ = #{examId}
+			er.status_ NOT IN ('CANCEL')
+			AND er.examination_basic_id_ = #{examId}
 			<if test="organIds!=null">
 				AND er.organ_id_ IN
 				<foreach collection="organIds" item="organId" separator="," open="(" close=")">
@@ -425,8 +425,22 @@
 		</foreach>
 	</select>
 
-	<resultMap id="ExamRegistrationDtoMap" type="com.keao.edu.user.dto.ExamRegistrationDto" extends="ExamRegistration">
-		<result property="studentName" column="studentName"/>
+	<resultMap id="ExamRegistrationDtoMap" type="com.keao.edu.user.dto.ExamRegistrationDto">
+		<result column="examination_basic_id_" property="examinationBasicId" />
+		<result column="id_" property="id" />
+		<result column="subject_id_" property="subjectId" />
+		<result column="level_" property="level" />
+		<result column="level_fee_" property="levelFee" />
+		<result column="song_json_" property="songJson" />
+		<result column="last_exam_level_" property="lastExamLevel" />
+		<result column="last_exam_certificate_url_" property="lastExamCertificateUrl" />
+		<result column="exam_music_theory_level_" property="examMusicTheoryLevel" />
+		<result column="theory_level_fee_" property="theoryLevelFee" />
+		<result column="last_music_theory_level_" property="lastMusicTheoryLevel" />
+		<result column="last_music_theory_certificate_url_" property="lastMusicTheoryCertificateUrl" />
+		<result column="card_no_" property="cardNo" />
+		<result column="status_" property="status" typeHandler="com.keao.edu.common.dal.CustomEnumTypeHandler"/>
+		<result column="memo_" property="memo" />
 		<result property="subjectName" column="subjectName"/>
 		<result property="examBaseName" column="examBaseName"/>
 		<result property="examStartTime" column="expect_exam_start_time_"/>
@@ -446,9 +460,6 @@
 			<if test="examRegistrationId != null">
 				er.id_ = #{examRegistrationId}
 			</if>
-			<if test="tenantId != null and tenantId != 0">
-				er.tenant_id_ = #{tenantId}
-			</if>
 			<if test="status != null and status != ''">
 				er.status_ = #{status}
 			</if>

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

@@ -138,7 +138,7 @@
 				AND DATE_FORMAT( ero.exam_start_time_, '%Y-%m-%d' ) BETWEEN  #{examStartTime} AND #{examEndTime}
 			</if>
 			<if test="search!=null and search!=''">
-				AND su.real_name_ LIKE CONCAT(#{search}, '%')
+				AND su.real_name_ LIKE CONCAT('%', #{search}, '%')
 			</if>
 		</where>
 	</sql>

+ 26 - 2
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRoomStudentRelationMapper.xml

@@ -210,12 +210,36 @@
 		<result property="examRoomId" column="exam_room_id_"/>
 		<result property="examRoomStudentRelationId" column="exam_room_student_relation_id_"/>
 	</resultMap>
-	<select id="queryStudentList" resultType="com.keao.edu.user.dto.RoomStudentListDto">
+	<select id="queryStudentList" resultMap="RoomStudentListDtoMap">
 		SELECT ersr.id_ exam_room_student_relation_id_,ersr.exam_registration_id_,su.real_name_,
 		s.name_ subject_name_,ec.level_,ersr.exam_room_id_,ersr.student_id_ FROM exam_room_student_relation ersr
 		LEFT JOIN exam_certification ec ON ec.exam_registration_id_ = ersr.exam_registration_id_
 		LEFT JOIN `subject` s ON s.id_ = ec.subject_id_
 		LEFT JOIN sys_user su ON ersr.student_id_ = su.id_
-		WHERE ersr.exam_room_id_ = #{roomId}
+		LEFT JOIN student_exam_result ser ON ser.exam_registration_id_ = ersr.exam_registration_id_
+		WHERE ersr.exam_room_id_ = #{roomId} AND ser.is_finished_exam_ = 0
+	</select>
+    <select id="querySignTotalNum" resultType="java.lang.Integer">
+		SELECT COUNT(ersr.id_) FROM exam_room_student_relation ersr
+		WHERE ersr.exam_room_id_ = #{roomId} AND ersr.sign_in_time_ IS NOT NULL
+	</select>
+    <select id="queryNoSignTotalNum" resultType="java.lang.Integer">
+		SELECT COUNT(ersr.id_) FROM exam_room_student_relation ersr
+		WHERE ersr.exam_room_id_ = #{roomId} AND ersr.sign_in_time_ IS NULL
+	</select>
+	<select id="querySurplusNum" resultType="java.lang.Integer">
+		SELECT COUNT(DISTINCT ersr.id_) FROM exam_room_student_relation ersr
+		LEFT JOIN student_exam_result ser ON ersr.exam_registration_id_ = ser.exam_registration_id_
+		WHERE ersr.exam_room_id_ = #{roomId} AND ersr.sign_in_time_ IS NOT NULL AND ser.is_finished_exam_ = 0
+	</select>
+	<select id="sumWaitNum" resultType="java.lang.Integer">
+		SELECT COUNT(DISTINCT ersr.id_)
+		FROM exam_room_student_relation ersr
+		LEFT JOIN student_exam_result ser ON ser.exam_registration_id_ = ersr.exam_registration_id_
+		WHERE ersr.exam_registration_id_ = #{examRegistrationId} AND ersr.sign_in_time_ IS NOT NULL
+		AND ser.is_finished_exam_ = 0 AND ersr.student_id_ != #{studentId}
+		<if test="signInTime != null and signInTime != ''">
+			AND ersr.sign_in_time_ &lt; #{signInTime}
+		</if>
 	</select>
 </mapper>

+ 2 - 5
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamSongMapper.xml

@@ -82,9 +82,6 @@
 			<if test="subjectList!=null">
 				AND FIND_IN_SET(#{subjectList}, es.subject_list_)
 			</if>
-			<if test="songAuthor!=null">
-				AND es.song_author_ LIKE CONCAT(#{songAuthor}, '%')
-			</if>
 			<if test="level!=null">
 				AND FIND_IN_SET(#{level},level_list_)
 			</if>
@@ -92,10 +89,10 @@
 				AND type_=#{type, typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler}
 			</if>
 			<if test="songName!=null">
-				AND es.song_name_ LIKE CONCAT(#{songName}, '%')
+				AND es.song_name_ LIKE CONCAT('%', #{songName}, '%')
 			</if>
 			<if test="search!=null">
-				AND (es.id_=#{search} OR es.song_name_ LIKE CONCAT('%', #{search}, '%'))
+				AND (es.id_=#{search} OR es.song_name_ LIKE CONCAT('%', #{search}, '%') OR es.song_author_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
 		</where>
 	</sql>

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

@@ -108,7 +108,7 @@
 				AND ess.level_=#{level}
 			</if>
 			<if test="search!=null">
-				AND (ess.exam_subject_id_=#{search} OR s.name_ LIKE CONCAT(#{search}, '%'))
+				AND (ess.exam_subject_id_=#{search} OR s.name_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
 		</where>
 	</sql>

+ 2 - 2
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamTeacherSalaryMapper.xml

@@ -163,13 +163,13 @@
 				AND ets.settlement_type_ = #{settlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler}
 			</if>
 			<if test="search!=null">
-				AND (ets.teacher_id_=#{search} OR su.real_name_ LIKE CONCAT(#{search}, '%'))
+				AND (ets.teacher_id_=#{search} OR su.real_name_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
 		</where>
 	</sql>
 
 	<select id="queryExamTeacherSalary" resultMap="ExamTeacherSalaryDto" parameterType="map">
-		SELECT ets.*,su.real_name_ teacher_real_name_
+		SELECT ets.*,su.real_name_ teacher_real_name_,su.phone_ teacher_phone_
 		FROM exam_teacher_salary ets
 		LEFT JOIN sys_user su ON ets.teacher_id_=su.id_
 		<include refid="queryExamTeacherSalaryCondition"/>

+ 5 - 5
edu-user/edu-user-server/src/main/resources/config/mybatis/ExaminationBasicMapper.xml

@@ -193,7 +193,7 @@
 				AND status_=#{examStatus}
 			</if>
 			<if test="search!=null">
-				AND (id_=#{search} OR name_ LIKE CONCAT(#{search}, '%'))
+				AND (id_=#{search} OR name_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
 		</where>
 	</sql>
@@ -220,15 +220,15 @@
 				AND eb.status_=#{examStatus}
 			</if>
 			<if test="search!=null">
-				AND (eb.id_=#{search} OR eb.name_ LIKE CONCAT(#{search}, '%'))
+				AND (eb.id_=#{search} OR eb.name_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
 		</where>
 	</sql>
 
 	<select id="findExaminationBasics" resultMap="ExaminationBasicDto" parameterType="map">
-		SELECT eb.*
+		SELECT DISTINCT eb.*
 		FROM
-			exam_organization_relation eor
+		exam_organization_relation eor
 		LEFT JOIN examination_basic eb ON eor.examination_basic_id_ = eb.id_
 		<include refid="findExaminationBasicsCondition"/>
 		ORDER BY id_ DESC
@@ -236,7 +236,7 @@
 	</select>
 
 	<select id="countExaminationBasics" resultType="int">
-		SELECT COUNT(eb.id_)
+		SELECT COUNT(DISTINCT eb.id_)
 		FROM
 			exam_organization_relation eor
 		LEFT JOIN examination_basic eb ON eor.examination_basic_id_ = eb.id_

+ 5 - 12
edu-user/edu-user-server/src/main/resources/config/mybatis/OrganizationMapper.xml

@@ -18,7 +18,6 @@
 		<result column="settlement_type_" property="settlementType" typeHandler="com.keao.edu.common.dal.CustomEnumTypeHandler"/>
 		<result column="del_flag_" property="delFlag" typeHandler="com.keao.edu.common.dal.CustomEnumTypeHandler"/>
 		<result column="share_profit_amount_" property="shareProfitAmount" />
-		<result column="is_allow_arrange_exam_" property="isAllowArrangeExam" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 		<result column="tenant_id_" property="tenantId" />
@@ -27,7 +26,7 @@
 	<sql id="organizationColumn">
 		o.id_ organization_id_, o.user_id_, o.name_, o.contact_name_, o.contact_phone_,
 		o.settlement_type_, o.share_profit_amount_, o.level_, o.parent_organ_id_,
-		o.parent_organ_id_tag_, o.is_allow_arrange_exam_, o.create_time_,
+		o.parent_organ_id_tag_, o.create_time_,
 		o.update_time_, o.del_flag_, o.tenant_id_
 	</sql>
 	
@@ -46,9 +45,9 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.keao.edu.user.entity.Organization" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO organization (id_,user_id_,name_,contact_name_,contact_phone_,level_,parent_organ_id_,parent_organ_id_tag_,settlement_type_,share_profit_amount_,is_allow_arrange_exam_,create_time_,update_time_,tenant_id_)
+		INSERT INTO organization (id_,user_id_,name_,contact_name_,contact_phone_,level_,parent_organ_id_,parent_organ_id_tag_,settlement_type_,share_profit_amount_,create_time_,update_time_,tenant_id_)
 		VALUES(#{id},#{userId},#{name},#{contactName},#{contactPhone},#{level},#{parentOrganId},#{parentOrganIdTag},#{settlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},
-		#{shareProfitAmount},#{isAllowArrangeExam},NOW(),NOW(),#{tenantId})
+		#{shareProfitAmount},NOW(),NOW(),#{tenantId})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -79,9 +78,6 @@
 			<if test="name != null">
 				name_ = #{name},
 			</if>
-			<if test="isAllowArrangeExam != null">
-				is_allow_arrange_exam_ = #{isAllowArrangeExam},
-			</if>
 			<if test="delFlag != null">
 				del_flag_ = #{delFlag,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},
 			</if>
@@ -118,9 +114,6 @@
 					#{organId}
 				</foreach>
 			</if>
-			<if test="isAllowArrangeExam != null">
-				AND is_allow_arrange_exam_ = #{isAllowArrangeExam}
-			</if>
 			<if test="search != null and search != ''">
 				AND (id_ = #{search} OR name_ LIKE CONCAT('%',#{search},'%')
 				OR contact_name_ LIKE CONCAT('%',#{search},'%')
@@ -147,11 +140,11 @@
 	</select>
 
 	<select id="getChildOrganIds" resultType="int">
-		SELECT id_ FROM organization WHERE parent_organ_id_tag_ LIKE CONCAT(#{parentOrganIdTag}, '%');
+		SELECT id_ FROM organization WHERE parent_organ_id_tag_ LIKE CONCAT('%', #{parentOrganIdTag}, '%');
 	</select>
 
 	<select id="getChildOrgans" resultMap="Organization">
-		SELECT <include refid="organizationColumn"/> FROM organization o WHERE parent_organ_id_tag_ LIKE CONCAT(#{parentOrganIdTag}, '%');
+		SELECT <include refid="organizationColumn"/> FROM organization o WHERE parent_organ_id_tag_ LIKE CONCAT('%', #{parentOrganIdTag}, '%');
 	</select>
 
 	<select id="getNextLevelOrganIds" resultType="int">

+ 5 - 2
edu-user/edu-user-server/src/main/resources/config/mybatis/StudentExamResultMapper.xml

@@ -133,10 +133,13 @@
 				AND er.card_no_ = #{cardNo}
 			</if>
 			<if test="studentName!=null and studentName!=''">
-				AND su.real_name_ LIKE CONCAT(#{studentName}, '%')
+				AND su.real_name_ LIKE CONCAT('%', #{studentName}, '%')
+			</if>
+			<if test="studentId != null">
+				AND su.id_ = #{studentId}
 			</if>
 			<if test="examName!=null and examName!=''">
-				AND eb.name_ LIKE CONCAT(#{examName}, '%')
+				AND eb.name_ LIKE CONCAT('%', #{examName}, '%')
 			</if>
 			<if test="subjectId!=null">
 				AND er.subject_id_=#{subjectId}

+ 9 - 4
edu-user/edu-user-server/src/main/resources/config/mybatis/SysConfigMapper.xml

@@ -22,10 +22,15 @@
 
 	<!-- 全查询 -->
 	<select id="findAll" resultMap="SysConfig">
-		SELECT * FROM sys_config where tenant_id_ = #{tenantId}
-		<if test="group != null">
-			and group_ = #{group}
-		</if>
+		SELECT * FROM sys_config
+		<where>
+			<if test="group != null">
+				and group_ = #{group}
+			</if>
+			<if test="tenantId != null">
+				and tenant_id_ = #{tenantId}
+			</if>
+		</where>
 		ORDER BY id_
 	</select>
 

+ 10 - 5
edu-user/edu-user-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -167,12 +167,8 @@
         <include refid="queryCondition"/>
     </select>
 
-    <select id="queryByUsername" resultMap="SysUser">
-		select * from sys_user where username_ = #{username} OR phone_ = #{username} LIMIT 1 FOR UPDATE
-	</select>
-
     <select id="queryByPhone" resultMap="SysUser">
-		select * from sys_user where phone_ = #{phone} OR username_ = #{phone} LIMIT 1 FOR UPDATE
+		select * from sys_user where phone_ = #{phone} LIMIT 1 FOR UPDATE
 	</select>
 
     <select id="lockUser" resultType="int">
@@ -191,6 +187,15 @@
 		LEFT JOIN sys_user_role sur ON e.user_id_ = sur.user_id_
 		WHERE e.user_id_ = #{userId} LIMIT 1
     </select>
+    <select id="getWithOrgan" resultMap="SysUser">
+        SELECT
+            *
+        FROM
+            sys_user su
+            LEFT JOIN organization o ON su.id_ = o.user_id_
+        WHERE
+            o.id_=#{organId}
+    </select>
 
     <insert id="batchAddEmployeeRole">
         INSERT INTO sys_user_role(user_id_,role_id_) VALUES (#{userId},#{roles})

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

@@ -79,7 +79,7 @@
 	<sql id="queryPageCondition">
 		<where>
 			<if test="search!=null">
-				AND (ti.id_=#{search} OR ti.name_	LIKE CONCAT(#{search}, '%'))
+				AND (ti.id_=#{search} OR ti.name_	LIKE CONCAT('%', #{search}, '%'))
 			</if>
 		</where>
 	</sql>

+ 6 - 0
pom.xml

@@ -60,6 +60,12 @@
 				<artifactId>edu-datasource</artifactId>
 				<version>1.0</version>
 			</dependency>
+	        
+	        <dependency>
+	            <groupId>com.keao.edu</groupId>
+	            <artifactId>edu-thirdparty</artifactId>
+					<version>1.0</version>
+	        </dependency>
 
 			<!--֧��Spring Boot 2.1.X -->
 			<dependency>