|  | @@ -1,5 +1,21 @@
 | 
	
		
			
				|  |  |  package com.ym.mec.biz.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.Map.Entry;
 | 
	
		
			
				|  |  | +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;
 | 
	
	
		
			
				|  | @@ -17,18 +33,6 @@ 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;
 | 
	
		
			
				|  |  | -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 java.util.ArrayList;
 | 
	
		
			
				|  |  | -import java.util.Date;
 | 
	
		
			
				|  |  | -import java.util.List;
 | 
	
		
			
				|  |  | -import java.util.Random;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  |  public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> implements SysMessageService {
 | 
	
	
		
			
				|  | @@ -66,43 +70,61 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 | 
	
		
			
				|  |  |  		return sysMessageDao;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	@Override
 | 
	
		
			
				|  |  | -	public int addMessage(Integer userId, String subject, String content, String receivers, Date triggerTime, MessageSendMode mode, SendStatusEnum status,
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * 添加消息
 | 
	
		
			
				|  |  | +	 * @param userId 用户编号
 | 
	
		
			
				|  |  | +	 * @param subject 消息主题
 | 
	
		
			
				|  |  | +	 * @param content 消息内容
 | 
	
		
			
				|  |  | +	 * @param receivers 接收人,多个人用逗号分开
 | 
	
		
			
				|  |  | +	 * @param triggerTime 触发时间
 | 
	
		
			
				|  |  | +	 * @param mode 消息的发送模式
 | 
	
		
			
				|  |  | +	 * @param status 消息的当前状态
 | 
	
		
			
				|  |  | +	 * @param errorMsg 错误消息
 | 
	
		
			
				|  |  | +	 * @param readStatus 阅读状态
 | 
	
		
			
				|  |  | +	 * @param memo 备注
 | 
	
		
			
				|  |  | +	 * @param group 消息组
 | 
	
		
			
				|  |  | +	 * @return
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	private int addMessage(Map<Integer, String> receivers, String subject, String content, Date triggerTime, MessageSendMode mode, SendStatusEnum status,
 | 
	
		
			
				|  |  |  			String errorMsg, Integer readStatus, String memo, String group) {
 | 
	
		
			
				|  |  |  		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.queryUserByMobile(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;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		Integer userId = null;
 | 
	
		
			
				|  |  | +		String receiver;
 | 
	
		
			
				|  |  | +		for (Entry<Integer, String> entry : receivers.entrySet()) {
 | 
	
		
			
				|  |  | +			userId = entry.getKey();
 | 
	
		
			
				|  |  | +			receiver = entry.getValue();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			message = new SysMessage();
 | 
	
		
			
				|  |  | +			if (userId == null) {
 | 
	
		
			
				|  |  | +				SysUser user = sysUserFeignService.queryUserByMobile(receiver);
 | 
	
		
			
				|  |  | +				if (user != null) {
 | 
	
		
			
				|  |  | +					userId = user.getId();
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  | -				message.setSendTime(triggerTime);
 | 
	
		
			
				|  |  | -				message.setTitle(subject);
 | 
	
		
			
				|  |  | -				message.setStatus(status);
 | 
	
		
			
				|  |  | -				message.setType(mode);
 | 
	
		
			
				|  |  | -				message.setErrorMsg(errorMsg);
 | 
	
		
			
				|  |  | -				message.setReadStatus(readStatus);
 | 
	
		
			
				|  |  | -				message.setMemo(memo);
 | 
	
		
			
				|  |  | -				message.setGroup(group);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				messages.add(message);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +			message.setUserId(userId);
 | 
	
		
			
				|  |  | +			message.setContent(content);
 | 
	
		
			
				|  |  | +			message.setCreateOn(date);
 | 
	
		
			
				|  |  | +			message.setModifyOn(date);
 | 
	
		
			
				|  |  | +			message.setReceiver(receiver);
 | 
	
		
			
				|  |  | +			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);
 | 
	
		
			
				|  |  | +			message.setGroup(group);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			messages.add(message);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		return sysMessageDao.batchInsert(messages);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -113,16 +135,16 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  |  	@Async
 | 
	
		
			
				|  |  | -	public boolean batchSendMessage(MessageSender messageSender, MessageSendMode mode, String subject, String content, String receivers, Date triggerTime,
 | 
	
		
			
				|  |  | +	public boolean batchSendMessage(MessageSender messageSender, String subject, String content, Map<Integer, String> receivers, Date triggerTime,
 | 
	
		
			
				|  |  |  			Integer readStatus, String memo) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		if (StringUtils.isBlank(receivers)) {
 | 
	
		
			
				|  |  | +		if (receivers == null || receivers.size() == 0) {
 | 
	
		
			
				|  |  |  			throw new BizException("消息接收人不能为空");
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		if (StringUtils.isBlank(content)) {
 | 
	
		
			
				|  |  |  			throw new BizException("消息内容不能为空");
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		String[] tos = StringUtils.split(receivers, ',');
 | 
	
		
			
				|  |  | +		String[] tos = receivers.values().toArray(new String[receivers.size()]);
 | 
	
		
			
				|  |  |  		if (tos != null && tos.length > 0) {
 | 
	
		
			
				|  |  |  			Date date = new Date();
 | 
	
		
			
				|  |  |  			SendStatusEnum status = SendStatusEnum.WAIT;
 | 
	
	
		
			
				|  | @@ -143,7 +165,13 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 | 
	
		
			
				|  |  |  				errorMsg = e.getMessage();
 | 
	
		
			
				|  |  |  				LOGGER.warn("消息发送失败", e);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			return addMessage(null, subject, content, receivers, triggerTime, mode, status, errorMsg, readStatus, memo, null) > 0;
 | 
	
		
			
				|  |  | +			MessageSendMode mode = MessageSendMode.SMS;
 | 
	
		
			
				|  |  | +			if (messageSender.getSendMode().equals("PUSH")) {
 | 
	
		
			
				|  |  | +				mode = MessageSendMode.PUSH;
 | 
	
		
			
				|  |  | +			} else if (messageSender.getSendMode().equals("EMAIL")) {
 | 
	
		
			
				|  |  | +				mode = MessageSendMode.EMAIL;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			return addMessage(receivers, subject, content, triggerTime, mode, status, errorMsg, readStatus, memo, null) > 0;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return false;
 | 
	
	
		
			
				|  | @@ -151,13 +179,13 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  |  	@Async
 | 
	
		
			
				|  |  | -	public void sendMessage(MessageSender messageSender, Integer userId, MessageSendMode mode, MessageTypeEnum type, String receivers, Date triggerTime,
 | 
	
		
			
				|  |  | -							Integer readStatus, String url, Object... args) {
 | 
	
		
			
				|  |  | +	public void batchSendMessage(MessageSender messageSender, MessageTypeEnum type, Map<Integer, String> receivers, Date triggerTime, Integer readStatus,
 | 
	
		
			
				|  |  | +			String url, Object... args) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		if (StringUtils.isBlank(receivers)) {
 | 
	
		
			
				|  |  | +		if (receivers == null || receivers.size() == 0) {
 | 
	
		
			
				|  |  |  			throw new BizException("接收地址不能为空");
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		String[] tos = StringUtils.split(receivers, ',');
 | 
	
		
			
				|  |  | +		String[] tos = receivers.values().toArray(new String[receivers.size()]);
 | 
	
		
			
				|  |  |  		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(type);
 | 
	
		
			
				|  |  |  		if (messageConfig == null) {
 | 
	
		
			
				|  |  |  			throw new BizException("消息类型错误");
 | 
	
	
		
			
				|  | @@ -182,14 +210,20 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 | 
	
		
			
				|  |  |  				LOGGER.warn("消息发送失败", e);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		addMessage(userId, type.getCode(), MessageFormatter.arrayFormat(messageConfig.getContent(), args), receivers, triggerTime, mode, status, errorMsg,
 | 
	
		
			
				|  |  | -				readStatus, url, messageConfig.getGroup());
 | 
	
		
			
				|  |  | +		MessageSendMode mode = MessageSendMode.SMS;
 | 
	
		
			
				|  |  | +		if (messageSender.getSendMode().equals("PUSH")) {
 | 
	
		
			
				|  |  | +			mode = MessageSendMode.PUSH;
 | 
	
		
			
				|  |  | +		} else if (messageSender.getSendMode().equals("EMAIL")) {
 | 
	
		
			
				|  |  | +			mode = MessageSendMode.EMAIL;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		addMessage(receivers, type.getCode(), MessageFormatter.arrayFormat(messageConfig.getContent(), args), triggerTime, mode, status, errorMsg, readStatus,
 | 
	
		
			
				|  |  | +				url, messageConfig.getGroup());
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  |  	@Async
 | 
	
		
			
				|  |  | -	public void sendMessage(MessageSender messageSender, Integer userId, MessageSendMode mode, String title, String content, String receiver, Date triggerTime,
 | 
	
		
			
				|  |  | -			Integer readStatus, String url) {
 | 
	
		
			
				|  |  | +	public void sendMessage(MessageSender messageSender, Integer userId, String title, String content, String receiver, Date triggerTime, Integer readStatus,
 | 
	
		
			
				|  |  | +			String url) {
 | 
	
		
			
				|  |  |  		if (StringUtils.isBlank(receiver)) {
 | 
	
		
			
				|  |  |  			throw new BizException("接收地址不能为空");
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -211,11 +245,19 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 | 
	
		
			
				|  |  |  				LOGGER.warn("消息发送失败", e);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		addMessage(userId, title, content, receiver, triggerTime, mode, status, errorMsg, readStatus, url, null);
 | 
	
		
			
				|  |  | +		MessageSendMode mode = MessageSendMode.SMS;
 | 
	
		
			
				|  |  | +		if (messageSender.getSendMode().equals("PUSH")) {
 | 
	
		
			
				|  |  | +			mode = MessageSendMode.PUSH;
 | 
	
		
			
				|  |  | +		} else if (messageSender.getSendMode().equals("EMAIL")) {
 | 
	
		
			
				|  |  | +			mode = MessageSendMode.EMAIL;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		Map<Integer, String> receivers = new HashMap<Integer, String>();
 | 
	
		
			
				|  |  | +		receivers.put(userId, receiver);
 | 
	
		
			
				|  |  | +		addMessage(receivers, title, content, triggerTime, mode, status, errorMsg, readStatus, url, null);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  | -	public boolean sendSecurityCode(MessageSender messageSender, Integer userId, MessageSendMode mode, MessageTypeEnum messageType, String receiver) {
 | 
	
		
			
				|  |  | +	public boolean sendSecurityCode(MessageSender messageSender, Integer userId, MessageTypeEnum messageType, String receiver) {
 | 
	
		
			
				|  |  |  		String key1 = getVerificationCode1CacheKey(messageType, receiver);
 | 
	
		
			
				|  |  |  		if (redisCache.get(key1) != null) {
 | 
	
		
			
				|  |  |  			throw new BizException("请勿频繁操作,获取验证码间隔时间为60秒");
 | 
	
	
		
			
				|  | @@ -226,7 +268,9 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 | 
	
		
			
				|  |  |  		if (debugMode == false) {
 | 
	
		
			
				|  |  |  			code = getRandomCode(messageType, receiver);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		sendMessage(messageSender, userId, mode, messageType, receiver, null, 1, "", code);
 | 
	
		
			
				|  |  | +		Map<Integer, String> receivers = new HashMap<Integer, String>();
 | 
	
		
			
				|  |  | +		receivers.put(userId, receiver);
 | 
	
		
			
				|  |  | +		batchSendMessage(messageSender, messageType, receivers, null, 1, "", code);
 | 
	
		
			
				|  |  |  		redisCache.put(key, code, CODE_EXPIRE);
 | 
	
		
			
				|  |  |  		redisCache.put(key1, code, CODE_INTERVAL_TIME);
 | 
	
		
			
				|  |  |  		return true;
 |