소스 검색

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

zouxuan 5 년 전
부모
커밋
946b600b78
17개의 변경된 파일175개의 추가작업 그리고 14개의 파일을 삭제
  1. 1 0
      edu-common/src/main/java/com/keao/edu/common/enums/MessageTypeEnum.java
  2. 22 0
      edu-task/src/main/java/com/keao/edu/task/jobs/ExamEndRemindTask.java
  3. 9 0
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/TaskRemoteService.java
  4. 5 0
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/fallback/TaskRemoteServiceFallback.java
  5. 6 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/TaskController.java
  6. 9 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExaminationBasicDao.java
  7. 9 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/SysUserDao.java
  8. 2 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/TenantInfoDao.java
  9. 0 11
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/page/ExamRoomStudentRelationQueryInfo.java
  10. 8 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExaminationBasicService.java
  11. 6 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java
  12. 23 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java
  13. 50 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java
  14. 6 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRoomStudentRelationMapper.xml
  15. 5 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExaminationBasicMapper.xml
  16. 7 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/SysUserMapper.xml
  17. 7 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/TenantInfoMapper.xml

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

@@ -21,6 +21,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     BEFORE_EXAM_TEACHER_REMIND_SMS("BEFORE_EXAM_TEACHER_REMIND_SMS","明日考试安排"),
     BEFORE_EXAM_STUDENT_REMIND_PUSH("BEFORE_EXAM_STUDENT_REMIND_PUSH","明日考试安排"),
     BEFORE_EXAM_STUDENT_REMIND_SMS("BEFORE_EXAM_STUDENT_REMIND_SMS","明日考试安排"),
+    EXAM_END_REMIND("EXAM_END_REMIND", "考试结果确认通知"),
     EXAM_RESULT_CONFIRM_PUSH("EXAM_RESULT_CONFIRM_PUSH", "考试结果已确认");
 
     MessageTypeEnum(String code, String msg) {

+ 22 - 0
edu-task/src/main/java/com/keao/edu/task/jobs/ExamEndRemindTask.java

@@ -0,0 +1,22 @@
+package com.keao.edu.task.jobs;
+
+import com.keao.edu.task.core.BaseTask;
+import com.keao.edu.user.api.client.TaskRemoteService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.07.27
+ */
+@Service
+public class ExamEndRemindTask extends BaseTask {
+
+    @Autowired
+    private TaskRemoteService taskRemoteService;
+
+    @Override
+    public void execute() {
+        taskRemoteService.examEndRemind();
+    }
+}

+ 9 - 0
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/TaskRemoteService.java

@@ -30,4 +30,13 @@ public interface TaskRemoteService {
 	@GetMapping("/tomorrowExamPlanRemind")
 	void tomorrowExamPlanRemind();
 
+	/**
+	 * @describe 考级项目结束提醒,提醒确认结果
+	 * @author Joburgess
+	 * @date 2020.07.27
+	 * @return void
+	 */
+	@GetMapping("/examEndRemind")
+	void examEndRemind();
+
 }

+ 5 - 0
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/fallback/TaskRemoteServiceFallback.java

@@ -24,4 +24,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void tomorrowExamPlanRemind() {
 		return;
 	}
+
+	@Override
+	public void examEndRemind() {
+		return;
+	}
 }

+ 6 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/TaskController.java

@@ -41,4 +41,10 @@ public class TaskController extends BaseController {
     public void tomorrowExamPlanRemind(String day){
         examRoomService.tomorrowExamPlanRemind(day);
     }
+
+    //考级项目结束提醒,提醒确认结果
+    @GetMapping("/examEndRemind")
+    public void examEndRemind(){
+        examinationBasicService.examEndRemind();
+    }
 }

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

@@ -16,6 +16,15 @@ public interface ExaminationBasicDao extends BaseDAO<Long, ExaminationBasic> {
 
     ExaminationBasicDto getExaminationBasic(Integer examId);
 
+    /**
+     * @describe 获取指定日期结束的考级项目
+     * @author Joburgess
+     * @date 2020.07.27
+     * @param day:
+     * @return java.util.List<com.keao.edu.user.entity.ExaminationBasic>
+     */
+    List<ExaminationBasic> getEndExamsWithDayAndStatus(@Param("day") String day);
+
     List<ExaminationBasicDto> findExaminationBasics(Map<String, Object> params);
     int countExaminationBasics(Map<String, Object> params);
 

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

@@ -80,4 +80,13 @@ public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 	 * @return com.keao.edu.auth.api.entity.SysUser
 	 */
 	SysUser getWithOrgan(@Param("organId") Integer organId);
+
+	/**
+	 * @describe 获取手机号对应的用户
+	 * @author Joburgess
+	 * @date 2020.07.27
+	 * @param phones:
+	 * @return java.util.List<com.keao.edu.auth.api.entity.SysUser>
+	 */
+	List<SysUser> getWithPones(@Param("phones") List<String> phones);
 }

+ 2 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/TenantInfoDao.java

@@ -12,6 +12,8 @@ public interface TenantInfoDao extends BaseDAO<Integer, TenantInfo> {
 
     List<TenantInfoDto> queryTenants(Map<String, Object> params);
 
+    List<TenantInfo> getTenants(@Param("ids") List<Integer> ids);
+
     int countTenants(Map<String, Object> params);
 
     /**

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

@@ -9,9 +9,6 @@ import io.swagger.annotations.ApiModelProperty;
  */
 public class ExamRoomStudentRelationQueryInfo extends QueryInfo {
 
-    @ApiModelProperty(value = "合作单位编号")
-    private Integer organId;
-
     @ApiModelProperty(value = "考级编号")
     private Long examId;
 
@@ -21,14 +18,6 @@ public class ExamRoomStudentRelationQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "是否已经加入教室")
     private Integer inRoom;
 
-    public Integer getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(Integer organId) {
-        this.organId = organId;
-    }
-
     public Long getExamId() {
         return examId;
     }

+ 8 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExaminationBasicService.java

@@ -29,6 +29,14 @@ public interface ExaminationBasicService extends BaseService<Long, ExaminationBa
     void updateExamStatus();
 
     /**
+     * @describe 考级项目结束提醒,提醒确认结果
+     * @author Joburgess
+     * @date 2020.07.27
+     * @return void
+     */
+    void examEndRemind();
+
+    /**
      * @describe
      * @author Joburgess
      * @date 2020.07.13

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

@@ -240,6 +240,9 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 			examinationBasic.setActualExamStartTime(null);
 			examinationBasic.setActualExamEndTime(null);
 		}else{
+			if(examinationBasic.getEnrollEndTime().compareTo(examRoomExamTime.getExamStartTime())>0){
+				throw new BizException("考试时间不可在报名结束时间之前");
+			}
 			examinationBasic.setActualExamStartTime(DateUtils.truncate(examRoomExamTime.getExamStartTime(), Calendar.DAY_OF_MONTH));
 			examinationBasic.setActualExamEndTime(DateUtils.ceiling(examRoomExamTime.getExamEndTime(), Calendar.DAY_OF_MONTH));
 		}
@@ -325,6 +328,9 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 			examinationBasic.setActualExamStartTime(null);
 			examinationBasic.setActualExamEndTime(null);
 		}else{
+            if(examinationBasic.getEnrollEndTime().compareTo(examRoomExamTime.getExamStartTime())>0){
+                throw new BizException("考试时间不可在报名结束时间之前");
+            }
 			examinationBasic.setActualExamStartTime(DateUtils.truncate(examRoomExamTime.getExamStartTime(), Calendar.DAY_OF_MONTH));
 			examinationBasic.setActualExamEndTime(DateUtils.ceiling(examRoomExamTime.getExamEndTime(), Calendar.DAY_OF_MONTH));
 		}

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

@@ -106,6 +106,7 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 
 		List<ExamRoomStudentRelation> studentsWithExamRoom = examRoomStudentRelationDao.findStudentsWithExamRoom(examRoomId);
 		Set<Long> existRegistIds = studentsWithExamRoom.stream().map(ExamRoomStudentRelation::getExamRegistrationId).collect(Collectors.toSet());
+		Set<Integer> existStudentIds = studentsWithExamRoom.stream().map(ExamRoomStudentRelation::getStudentId).collect(Collectors.toSet());
 
 		String[] registIds = registIdsStr.split(",");
 
@@ -124,6 +125,9 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 			if(Objects.isNull(examRegistration)){
 				throw new BizException("学员信息错误");
 			}
+			if(existStudentIds.contains(examRegistration.getStudentId())){
+				throw new BizException("学员重复");
+			}
 
 			ExamRoomStudentRelation e=new ExamRoomStudentRelation();
 			e.setExamRegistrationId(Long.valueOf(registId));
@@ -140,6 +144,7 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 			ser.setIsFinishedExam(3);
 			ser.setConfirmStatus(0);
 			ser.setTenantId(TenantContextHolder.getTenantId());
+			ser.setExamRoomId(examRoomId);
 			studentExamResults.add(ser);
 
 			ExamCertification ec=new ExamCertification();
@@ -195,6 +200,17 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 			throw new BizException("考场信息不存在");
 		}
 
+		List<ExamRoomStudentRelation> studentsWithExamRoom = examRoomStudentRelationDao.findStudentsWithExamRoom(examRoomId);
+		Set<Long> existRegistIds = studentsWithExamRoom.stream().map(ExamRoomStudentRelation::getExamRegistrationId).collect(Collectors.toSet());
+		Set<Integer> existStudentIds = studentsWithExamRoom.stream().map(ExamRoomStudentRelation::getStudentId).collect(Collectors.toSet());
+
+		if(existRegistIds.contains(Long.valueOf(registId))){
+			throw new BizException("学员重复");
+		}
+		if(existStudentIds.contains(examRegistration.getStudentId())){
+			throw new BizException("学员重复");
+		}
+
 		ExamOrganizationRelation examOrganizationRelation = examOrganizationRelationDao.getExamOrganizationRelation(examRoom.getExaminationBasicId(), organId);
 		if(Objects.isNull(examOrganizationRelation)||examOrganizationRelation.getIsAllowArrangeExam()==0){
 			throw new BizException("无权操作");
@@ -213,6 +229,13 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 		}
 		studentExamRoom.setExamRoomId(examRoomId);
 		examRoomStudentRelationDao.update(studentExamRoom);
+
+		StudentExamResult studentExamResult = studentExamResultDao.findByRegistrationId(registId);
+		if(Objects.isNull(studentExamResult)){
+			throw new BizException("学员信息错误");
+		}
+		studentExamResult.setExamRoomId(examRoomId);
+		studentExamResultDao.update(studentExamResult);
 	}
 
 	@Override

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

@@ -8,9 +8,10 @@ import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.SysMessageService;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.common.tenant.TenantContextHolder;
-import com.keao.edu.thirdparty.message.provider.JiguangPushPlugin;
+import com.keao.edu.thirdparty.message.provider.YimeiSmsPlugin;
 import com.keao.edu.user.api.enums.ExamModeEnum;
 import com.keao.edu.user.dao.*;
+import com.keao.edu.user.dto.ExamRoomExamTimeDto;
 import com.keao.edu.user.dto.ExaminationBasicDto;
 import com.keao.edu.user.entity.*;
 import com.keao.edu.user.enums.ExamStatusEnum;
@@ -29,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -57,6 +59,10 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
     private SysMessageService sysMessageService;
     @Autowired
     private StudentExamResultService studentExamResultService;
+    @Autowired
+    private ExamRoomDao examRoomDao;
+    @Autowired
+    private TenantInfoDao tenantInfoDao;
 
     @Override
     public BaseDAO<Long, ExaminationBasic> getDAO() {
@@ -76,7 +82,10 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
             throw new BizException("请指定考试地点");
         }
         if (Objects.isNull(examinationBasic.getEnrollStartTime()) || Objects.isNull(examinationBasic.getEnrollEndTime())) {
-            throw new BizException("请指定考试开始与结束时间");
+            throw new BizException("请指定报名开始与结束时间");
+        }
+        if(examinationBasic.getEnrollStartTime().compareTo(examinationBasic.getEnrollEndTime())>=0){
+            throw new BizException("报名时间异常");
         }
 
         if(ExamModeEnum.ONLINE.equals(examinationBasic.getExamMode())){
@@ -153,6 +162,38 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
     }
 
     @Override
+    public void examEndRemind() {
+        LocalDate today = LocalDate.now();
+        List<ExaminationBasic> endExams = examinationBasicDao.getEndExamsWithDayAndStatus(today.plusDays(-1).toString());
+        if(CollectionUtils.isEmpty(endExams)){
+            return;
+        }
+        Set<Integer> tenantIds = endExams.stream().map(e->Integer.valueOf(e.getTenantId())).collect(Collectors.toSet());
+        List<TenantInfo> tenants = tenantInfoDao.getTenants(new ArrayList<>(tenantIds));
+        List<String> phones = tenants.stream().map(TenantInfo::getContactPhone).collect(Collectors.toList());
+        Map<Integer, TenantInfo> idTenantMap = tenants.stream().collect(Collectors.toMap(TenantInfo::getId, e -> e));
+        List<SysUser> tenantUsers = sysUserDao.getWithPones(phones);
+        Map<String, SysUser> phoneUserMap = tenantUsers.stream().collect(Collectors.toMap(SysUser::getPhone, t -> t));
+
+        for (ExaminationBasic endExam : endExams) {
+            TenantInfo tenantInfo = idTenantMap.get(Integer.valueOf(endExam.getTenantId()));
+            if(Objects.isNull(tenantInfo)){
+                continue;
+            }
+            SysUser sysUser = phoneUserMap.get(tenantInfo.getContactPhone());
+            if(Objects.isNull(sysUser)){
+                continue;
+            }
+            Map<Integer, String> userPhoneMap = new HashMap<>();
+            userPhoneMap.put(sysUser.getId(), sysUser.getPhone());
+
+            sysMessageService.batchSendMessage(MessageTypeEnum.EXAM_END_REMIND,
+                    userPhoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+                    tenantInfo.getName(), endExam.getName());
+        }
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateExamBasicStatus(Long examId, ExamStatusEnum statusEnum, Integer operatorId) {
         if(Objects.isNull(examId)){
@@ -302,6 +343,10 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
                     ExamStatusEnum.EXAM_END.equals(existsExam.getStatus())){
                 throw new BizException("无法修改");
             }
+            ExamRoomExamTimeDto examRoomExamTime = examRoomDao.getExamRoomExamTime(examinationBasic.getId());
+            if(Objects.nonNull(examRoomExamTime)&&examinationBasic.getEnrollEndTime().compareTo(examRoomExamTime.getExamStartTime())>0){
+                throw new BizException("报名结束时间不得在考试开始时间之后");
+            }
             examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "修改报名时间", operatorId));
             examRegistIsChange=true;
         }
@@ -319,6 +364,9 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
             }
         }
 
+        examinationBasic.setActualExamStartTime(existsExam.getActualExamStartTime());
+        examinationBasic.setActualExamEndTime(existsExam.getActualExamEndTime());
+
         examinationBasicDao.update(examinationBasic);
         if(examRegistIsChange){
             examOrganizationRelationService.examDateChangePush(examinationBasic.getId());

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

@@ -139,6 +139,9 @@
 			<if test="inRoom!=null and inRoom==1">
 				AND ersr.exam_room_id_ =#{examRoomId}
 			</if>
+			<if test="search!=null and search!=''">
+				AND (er.student_id_ = #{search} OR su.real_name_ LIKE CONCAT('%', #{search}, '%'))
+			</if>
 		</where>
 	</sql>
 
@@ -155,8 +158,9 @@
 		FROM
 			exam_registration er
 		LEFT JOIN exam_room_student_relation ersr ON ersr.exam_registration_id_ = er.id_
+		LEFT JOIN sys_user su ON er.student_id_=su.id_
 		<include refid="queryCondition"/>
-		ORDER BY id_ <include refid="global.limit"/>
+		ORDER BY er.id_ DESC <include refid="global.limit"/>
 	</select>
 
 	<select id="countExamRoomStudents" resultType="int">
@@ -165,6 +169,7 @@
 		FROM
 		exam_registration er
 		LEFT JOIN exam_room_student_relation ersr ON ersr.exam_registration_id_ = er.id_
+		LEFT JOIN sys_user su ON er.student_id_=su.id_
 		<include refid="queryCondition"/>
 	</select>
 

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

@@ -254,7 +254,12 @@
 			#{examId}
 		</foreach>
 	</select>
+
     <select id="lockExam" resultMap="ExaminationBasic">
 		SELECT id_,name_ FROM examination_basic WHERE id_=#{examId}
 	</select>
+
+    <select id="getEndExamsWithDayAndStatus" resultMap="ExaminationBasic">
+		SELECT * FROM examination_basic WHERE DATE_FORMAT(actual_exam_end_time_, '%Y-%m-%d') = #{day}
+	</select>
 </mapper>

+ 7 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -197,6 +197,13 @@
             o.id_=#{organId}
     </select>
 
+    <select id="getWithPones" resultMap="SysUser">
+        SELECT * FROM sys_user WHERE phone_ IN
+        <foreach collection="phones" item="phone" separator="," open="(" close=")">
+            #{phone}
+        </foreach>
+    </select>
+
     <insert id="batchAddEmployeeRole">
         INSERT INTO sys_user_role(user_id_,role_id_) VALUES (#{userId},#{roles})
     </insert>

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

@@ -129,4 +129,11 @@
 		WHERE
 			o.id_=#{organId}
 	</select>
+
+    <select id="getTenants" resultMap="TenantInfo">
+		SELECT * FROM tenant_info WHERE id_ IN
+		<foreach collection="ids" item="id" separator="," open="(" close=")">
+			#{id}
+		</foreach>
+	</select>
 </mapper>