Преглед изворни кода

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

zouxuan пре 5 година
родитељ
комит
8d37c76993

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

@@ -4,7 +4,10 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     SMS_VERIFY_CODE_LOGIN("SMS_VERIFY_CODE_LOGIN", "验证码登录"),
     EXAM_REGISTRATION_URL_SMS("EXAM_REGISTRATION_URL_SMS", "报名连接推送"),
-    STUDENT_EXAM_START("STUDENT_EXAM_START", "考试已开始");
+    STUDENT_EXAM_START("STUDENT_EXAM_START", "考试已开始"),
+    EXAM_REGISTRATION_CLOSE_SMS("EXAM_REGISTRATION_CLOSE_SMS", "关闭报名"),
+    EXAM_CLOSE_SMS("EXAM_CLOSE_SMS", "项目关闭"),
+    EXAM_REGIST_TIME_CHANGE_SMS("EXAM_REGIST_TIME_CHANGE_SMS", "报名时间调整");
 
     MessageTypeEnum(String code, String msg) {
         this.code = code;

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


+ 0 - 0
edu-auth/edu-auth-server/src/main/resources/config/mybatis/SysMessageMapper.xml → edu-common/src/main/resources/config/mybatis/SysMessageMapper.xml


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

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

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

@@ -71,6 +71,8 @@ public interface ExamOrganizationRelationDao extends BaseDAO<Long, ExamOrganizat
      */
     List<ExamOrganizationRelation> getWithExam(@Param("examId") Integer examId);
 
+    List<ExamOrganizationRelation> getOrganInfoWithExam(@Param("examId") Integer examId);
+
     List<ExamOrganizationRelation> getWithExams(@Param("examIds") List<Long> examIds);
 
     List<ExamOrganizationRelation> getWithExamsAndOrgans(@Param("examIds") List<Long> examIds,

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

@@ -6,6 +6,7 @@ import com.keao.edu.user.dto.ExamOrganStatisticsDto;
 import com.keao.edu.user.dto.ExamOrganizationRelationExtraDto;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
 import com.keao.edu.user.entity.Organization;
+import com.keao.edu.user.enums.ExamStatusEnum;
 import com.keao.edu.user.page.ExamOrganizationRelationQueryInfo;
 
 import java.util.List;
@@ -66,6 +67,25 @@ public interface ExamOrganizationRelationService extends BaseService<Long, ExamO
     void sendUrl(Integer examId, Integer selfOrganId);
 
     /**
+     * @describe 考级项目状态变化推送
+     * @author Joburgess
+     * @date 2020.07.21
+     * @param examId:
+     * @param examStatus:
+     * @return void
+     */
+    void examStatusChangePush(Long examId, ExamStatusEnum examStatus);
+
+    /**
+     * @describe 考级项目时间调整推送
+     * @author Joburgess
+     * @date 2020.07.21
+     * @param examId:
+     * @return void
+     */
+    void examDateChangePush(Long examId);
+
+    /**
      * @describe 获取本单位统计信息
      * @author Joburgess
      * @date 2020.07.16

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

@@ -12,6 +12,7 @@ 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.dao.*;
 import com.keao.edu.user.dto.ExamOrganStatisticsDto;
 import com.keao.edu.user.dto.ExamOrganizationRelationExtraDto;
@@ -340,7 +341,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			userPhoneMap.put(examOrgan.getOrganId(), organUser.getPhone());
 
 			sysMessageService.batchSendMessage(MessageTypeEnum.EXAM_REGISTRATION_URL_SMS,
-					userPhoneMap, null, 0, null, JiguangPushPlugin.PLUGIN_NAME,
+					userPhoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
 					tenantInfo.getName(), examinationBasic.getName(), expectRegistTime.toString(), examOrgan.getUrl());
 		}
 
@@ -357,6 +358,83 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void examStatusChangePush(Long examId, ExamStatusEnum examStatus) {
+		if(Objects.isNull(examId)||Objects.isNull(examStatus)){
+			return;
+		}
+		ExaminationBasic exam = examinationBasicDao.get(examId);
+		if(Objects.isNull(exam)){
+			return;
+		}
+
+		MessageTypeEnum messageType=null;
+
+		switch (examStatus){
+			case APPLIED:
+				messageType = MessageTypeEnum.EXAM_REGISTRATION_CLOSE_SMS;
+				break;
+			case CLOSE:
+				messageType = MessageTypeEnum.EXAM_CLOSE_SMS;
+				break;
+		}
+
+		if(Objects.isNull(messageType)){
+			return;
+		}
+
+		TenantInfo tenantInfo = tenantInfoDao.getWithOrgan(exam.getOrganId());
+		List<ExamOrganizationRelation> examOrgans = examOrganizationRelationDao.getOrganInfoWithExam(examId.intValue());
+		Map<Integer, String> userPhoneMap = new HashMap<>();
+		for (ExamOrganizationRelation examOrgan : examOrgans) {
+			if(examOrgan.getOrganId().equals(exam.getOrganId())){
+				continue;
+			}
+			userPhoneMap.put(examOrgan.getOrganization().getUserId(), examOrgan.getOrganization().getContactPhone());
+		}
+
+		if(CollectionUtils.isEmpty(userPhoneMap)){
+			return;
+		}
+
+		sysMessageService.batchSendMessage(messageType,
+				userPhoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+				tenantInfo.getName(), exam.getName());
+	}
+
+	@Override
+	public void examDateChangePush(Long examId) {
+		if(Objects.isNull(examId)){
+			return;
+		}
+		ExaminationBasic exam = examinationBasicDao.get(examId);
+		if(Objects.isNull(exam)){
+			return;
+		}
+
+		TenantInfo tenantInfo = tenantInfoDao.getWithOrgan(exam.getOrganId());
+		List<ExamOrganizationRelation> examOrgans = examOrganizationRelationDao.getOrganInfoWithExam(examId.intValue());
+		Map<Integer, String> userPhoneMap = new HashMap<>();
+		for (ExamOrganizationRelation examOrgan : examOrgans) {
+			if(examOrgan.getOrganId().equals(exam.getOrganId())){
+				continue;
+			}
+			userPhoneMap.put(examOrgan.getOrganization().getUserId(), examOrgan.getOrganization().getContactPhone());
+		}
+
+		if(CollectionUtils.isEmpty(userPhoneMap)){
+			return;
+		}
+
+		String enrollStartTimeStr = DateUtil.dateToString(exam.getEnrollStartTime(), "yyyy年MM月dd日 HH时mm分");
+		String enrollEndTimeStr = DateUtil.dateToString(exam.getEnrollEndTime(), "yyyy年MM月dd日 HH时mm分");
+
+		sysMessageService.batchSendMessage(MessageTypeEnum.EXAM_REGIST_TIME_CHANGE_SMS,
+				userPhoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+				tenantInfo.getName(), exam.getName(), enrollStartTimeStr, enrollEndTimeStr);
+	}
+
+	@Override
 	public ExamOrganStatisticsDto getExamOrganStatistics(Integer organId, Long examId) {
 		if(Objects.isNull(examId)){
 			throw new BizException("请指定考级项目");

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

@@ -3,15 +3,14 @@ package com.keao.edu.user.service.impl;
 
 import com.alibaba.fastjson.JSON;
 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;
+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.im.api.client.ImFeignService;
@@ -74,7 +73,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 	@Autowired
-	private SysMessageFeignService sysMessageFeignService;
+	private SysMessageService sysMessageService;
 
 	@Override
 	public BaseDAO<Long, ExamRoom> getDAO() {
@@ -322,7 +321,6 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 		if(withoutExamRoomStudentNum>0){
 			throw new BizException("存在未安排教室的学员");
 		}
-
 		examLifecycleLogDao.insert(new ExamLifecycleLog(examId, "确认考试安排", operatorId));
 	}
 
@@ -470,9 +468,8 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 				for (String s : split) {
 					userPhoneMap.put(Integer.parseInt(s),s);
 				}
-				SysMessageParams sysMessageParams=new SysMessageParams(MessageTypeEnum.STUDENT_EXAM_START,
+				sysMessageService.batchSendMessage(MessageTypeEnum.STUDENT_EXAM_START,
 						userPhoneMap, null, 0, null, JiguangPushPlugin.PLUGIN_NAME);
-				sysMessageFeignService.batchSendMessage(sysMessageParams);
 			}
 		}else {
 			SysUser sysUser = sysUserFeignService.queryUserInfo();

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

@@ -1,12 +1,14 @@
 package com.keao.edu.user.service.impl;
 
-import com.alibaba.druid.pool.DruidDataSource;
 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.exception.BizException;
 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.user.api.enums.ExamModeEnum;
 import com.keao.edu.user.dao.*;
 import com.keao.edu.user.dto.ExaminationBasicDto;
@@ -50,6 +52,8 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
     private OrganizationService organizationService;
     @Autowired
     private ExamLifecycleLogDao examLifecycleLogDao;
+    @Autowired
+    private SysMessageService sysMessageService;
 
     @Override
     public BaseDAO<Long, ExaminationBasic> getDAO() {
@@ -167,6 +171,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
             examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "确认考试结果", operatorId));
         }else if(ExamStatusEnum.CLOSE.equals(statusEnum)){
             examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "关闭考级项目", operatorId));
+            examOrganizationRelationService.examStatusChangePush(examId, statusEnum);
         }
         if(ExamStatusEnum.CLOSE.equals(existsExam.getStatus())){
             examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "开启考级项目", operatorId));
@@ -178,6 +183,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         if(ExamStatusEnum.APPLYING.equals(existsExam.getStatus())&&ExamStatusEnum.APPLIED.equals(statusEnum)){
             existsExam.setEnrollEndTime(new Date());
             examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "关闭报名连接", operatorId));
+            examOrganizationRelationService.examStatusChangePush(examId, statusEnum);
         }
         existsExam.setStatus(statusEnum);
         examinationBasicDao.update(existsExam);
@@ -272,6 +278,8 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
             examinationBasic.setExamLocationNameList(StringUtils.join(organNameMap.values(),","));
         }
 
+        boolean examRegistIsChange=false;
+
         if(Objects.nonNull(examinationBasic.getEnrollStartTime())
                 &&examinationBasic.getEnrollStartTime().compareTo(existsExam.getEnrollStartTime())!=0){
             if(ExamStatusEnum.EXAM_ING.equals(existsExam.getStatus())||
@@ -279,6 +287,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
                 throw new BizException("无法修改");
             }
             examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "修改报名时间", operatorId));
+            examRegistIsChange=true;
         }
         if(Objects.nonNull(examinationBasic.getEnrollEndTime())
                 &&examinationBasic.getEnrollEndTime().compareTo(existsExam.getEnrollEndTime())!=0){
@@ -287,6 +296,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
                 throw new BizException("无法修改");
             }
             examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "修改报名时间", operatorId));
+            examRegistIsChange=true;
         }
         if(Objects.nonNull(examinationBasic.getEnrollStartTime())&&Objects.nonNull(examinationBasic.getEnrollEndTime())&&!ExamStatusEnum.SETTING.equals(existsExam.getStatus())){
             if(examinationBasic.getEnrollStartTime().compareTo(examinationBasic.getEnrollEndTime())>=0){
@@ -303,6 +313,9 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         }
 
         examinationBasicDao.update(examinationBasic);
+        if(examRegistIsChange){
+            examOrganizationRelationService.examDateChangePush(examinationBasic.getId());
+        }
     }
 
     @Override
@@ -327,6 +340,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         examinationBasic.setMemo(reason);
         examinationBasic.setStatus(ExamStatusEnum.CLOSE);
         examinationBasicDao.update(examinationBasic);
+        examOrganizationRelationService.examStatusChangePush(examId.longValue(), ExamStatusEnum.CLOSE);
     }
 
     @Override

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

@@ -23,6 +23,7 @@
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 		<result column="tenant_id_" property="tenantId" />
+		<association property="organization" columnPrefix="organ_" resultMap="com.keao.edu.user.dao.OrganizationDao.Organization" />
 	</resultMap>
 
 	<resultMap id="ExamOrganizationRelationExtraDto" type="com.keao.edu.user.dto.ExamOrganizationRelationExtraDto" extends="ExamOrganizationRelation">
@@ -263,6 +264,19 @@
 		SELECT * FROM exam_organization_relation WHERE examination_basic_id_=#{examId}
 	</select>
 
+	<select id="getOrganInfoWithExam" resultMap="ExamOrganizationRelation">
+		SELECT
+			eor.*,
+			o.user_id_ organ_user_id_,
+			o.contact_name_ organ_contact_name_,
+			o.contact_phone_ organ_contact_phone_
+		FROM
+			exam_organization_relation eor
+			LEFT JOIN organization o ON eor.organ_id_ = o.id_
+		WHERE
+			eor.examination_basic_id_ = #{examId}
+	</select>
+
 	<select id="getOrganIdsWithExam" resultType="int">
 		SELECT organ_id_ FROM exam_organization_relation WHERE examination_basic_id_=#{examId} FOR UPDATE
 	</select>