|
@@ -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;
|