| 
					
				 | 
			
			
				@@ -1,27 +1,292 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.ym.mec.biz.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Random; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.lang.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.ym.mec.auth.api.client.SysUserFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.auth.api.entity.SysUser; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.dao.SysMessageDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.entity.SysMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.dal.entity.SysMessageConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.dal.entity.SysMessageConfig.MessageType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.dal.enums.SendStatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.dal.enums.SendTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.service.SysMessageConfigService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.service.SysMessageService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.common.cache.Cache; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.dal.BaseDAO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.common.exception.BizException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.service.impl.BaseServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.thirdparty.message.MessageSenderPluginContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.util.string.MessageFormatter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage>  implements SysMessageService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> implements SysMessageService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private final static Logger LOGGER = LoggerFactory.getLogger(SysMessageServiceImpl.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private SysMessageDao sysMessageDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private SysMessageConfigService sysMessageConfigService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private MessageSenderPluginContext messageSenderPluginContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private SysUserFeignService sysUserFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private Cache redisCache; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 验证码有效期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public static final int CODE_EXPIRE = 60 * 5; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 发送验证码的间隔时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public static final int CODE_INTERVAL_TIME = 60; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private final int DEFAULT_CODE = 888888; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Value("${message.debugMode:true}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private boolean debugMode = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public BaseDAO<Long, SysMessage> getDAO() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return sysMessageDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public int findNewMessageNum(Integer id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return sysMessageDao.findNewMessageNum(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public int addMessage(Integer userId, String subject, String content, String receivers, Date triggerTime, SendTypeEnum mode, SendStatusEnum status, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			String errorMsg, Integer readStatus, String memo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		SysMessage message = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<SysMessage> messages = new ArrayList<SysMessage>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		String[] tels = StringUtils.split(receivers, ','); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (tels != null && tels.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (String tel : tels) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message = new SysMessage(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (userId == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					SysUser user = sysUserFeignService.getUserByMobile(tel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (user != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						userId = user.getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setContent(content); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setCreateOn(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setModifyOn(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setReceiver(tel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (triggerTime == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					triggerTime = date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setSendTime(triggerTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setTitle(subject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setType(mode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setErrorMsg(errorMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setReadStatus(readStatus); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message.setMemo(memo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				messages.add(message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return sysMessageDao.batchInsert(messages); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public int updateMessage(SysMessage message) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return sysMessageDao.update(message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Async 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public boolean batchSendMessage(MessageSender messageSender, SendTypeEnum mode, String subject, String content, String receivers, Date triggerTime, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Integer readStatus, String memo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (StringUtils.isBlank(receivers)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throw new BizException("消息接收人不能为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (StringUtils.isBlank(content)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throw new BizException("消息内容不能为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		String[] tos = StringUtils.split(receivers, ','); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (tos != null && tos.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			SendStatusEnum status = SendStatusEnum.WAIT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			String errorMsg = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 立即发送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (triggerTime == null || date.after(triggerTime)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					status = SendStatusEnum.SENDING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (debugMode == true || messageSenderPluginContext.batchSend(messageSender, subject, content, tos, memo)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						status = SendStatusEnum.SUCCESSED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						status = SendStatusEnum.FAILED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				status = SendStatusEnum.FAILED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				errorMsg = e.getMessage(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				LOGGER.warn("消息发送失败", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return addMessage(null, subject, content, receivers, triggerTime, mode, status, errorMsg, readStatus, memo) > 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Async 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void sendMessage(MessageSender messageSender, Integer userId, SendTypeEnum mode, MessageType type, String receiver, Date triggerTime, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Integer readStatus, String url, Object... args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (StringUtils.isBlank(receiver)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throw new BizException("接收地址不能为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (messageConfig == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throw new BizException("消息类型错误"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		SendStatusEnum status = SendStatusEnum.WAIT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		String errorMsg = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 立即发送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (triggerTime == null || date.after(triggerTime)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			status = SendStatusEnum.SENDING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (debugMode == true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						|| messageSenderPluginContext.send(messageSender, receiver, messageConfig.getDescription(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								MessageFormatter.arrayFormat(messageConfig.getContent(), args), url)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					status = SendStatusEnum.SUCCESSED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					status = SendStatusEnum.FAILED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				status = SendStatusEnum.FAILED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				errorMsg = e.getMessage(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				LOGGER.warn("消息发送失败", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		addMessage(userId, type.getCode(), MessageFormatter.arrayFormat(messageConfig.getContent(), args), receiver, triggerTime, mode, status, errorMsg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				readStatus, url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Async 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void sendMessage(MessageSender messageSender, Integer userId, SendTypeEnum mode, String title, String content, String receiver, Date triggerTime, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Integer readStatus, String url) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (StringUtils.isBlank(receiver)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throw new BizException("接收地址不能为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		SendStatusEnum status = SendStatusEnum.WAIT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		String errorMsg = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 立即发送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (triggerTime == null || date.after(triggerTime)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			status = SendStatusEnum.SENDING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (debugMode == true || messageSenderPluginContext.send(messageSender, receiver, title, content, url)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					status = SendStatusEnum.SUCCESSED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					status = SendStatusEnum.FAILED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				status = SendStatusEnum.FAILED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				errorMsg = e.getMessage(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				LOGGER.warn("消息发送失败", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		addMessage(userId, title, content, receiver, triggerTime, mode, status, errorMsg, readStatus, url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public boolean sendSecurityCode(MessageSender messageSender, Integer userId, SendTypeEnum mode, MessageType messageType, String receiver) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		String key1 = getVerificationCode1CacheKey(messageType, receiver); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (redisCache.get(key1) != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throw new BizException("请勿频繁操作,获取验证码间隔时间为60秒"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		String key = getVerificationCodeCacheKey(messageType, receiver); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		int code = DEFAULT_CODE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (debugMode == false) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			code = getRandomCode(messageType, receiver); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		sendMessage(messageSender, userId, mode, messageType, receiver, null, 1, "", code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		redisCache.put(key, code, CODE_EXPIRE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		redisCache.put(key1, code, CODE_INTERVAL_TIME); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public String getSendedVerificationCode(MessageType type, String mobileNOOrEmailAddr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (debugMode == true) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return DEFAULT_CODE + ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		String key = getVerificationCodeCacheKey(type, mobileNOOrEmailAddr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Object object = redisCache.get(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return object == null ? null : object.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void delSendedVerificationCode(MessageType type, String mobileNOOrEmailAddr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		String key = getVerificationCodeCacheKey(type, mobileNOOrEmailAddr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (StringUtils.isNotBlank(key)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			redisCache.delete(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public int queryCountOfUnread(Integer userId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return sysMessageDao.queryCountOfUnread(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void setDebugMode(boolean debugMode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.debugMode = debugMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private int getRandomCode(MessageType type, String mobileNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		int min = 100000; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		int max = 999999; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Random random = new Random(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return random.nextInt(max) % (max - min + 1) + min; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private static String getVerificationCodeCacheKey(MessageType type, String mobileNOOrEmailAddr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return "verificationCode" + type.name() + mobileNOOrEmailAddr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private static String getVerificationCode1CacheKey(MessageType type, String mobileNOOrEmailAddr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return "verificationCode" + mobileNOOrEmailAddr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param userId 用户id数组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param status 状态/1 已读,0未读 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @return 修改的条数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public int updateStatus(Integer userId, int status) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return sysMessageDao.updateStatus(userId, status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public int updateOneStatus(Integer id, int status) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return sysMessageDao.updateOneStatus(id, status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |