diff --git a/fw-hermes-service/src/main/java/cn/fw/hermes/service/biz/MessageBizService.java b/fw-hermes-service/src/main/java/cn/fw/hermes/service/biz/MessageBizService.java index 2bbbc5e..5acc015 100644 --- a/fw-hermes-service/src/main/java/cn/fw/hermes/service/biz/MessageBizService.java +++ b/fw-hermes-service/src/main/java/cn/fw/hermes/service/biz/MessageBizService.java @@ -2,6 +2,7 @@ package cn.fw.hermes.service.biz; import cn.fw.common.util.MessageCodeBuilder; import cn.fw.hermes.common.constant.ActionStatusEnum; +import cn.fw.hermes.common.constant.Constant; import cn.fw.hermes.common.constant.RedisKey; import cn.fw.hermes.common.constant.RedisKeyCache; import cn.fw.hermes.common.utils.StringUtils; @@ -9,6 +10,7 @@ import cn.fw.hermes.common.utils.UUIDUtils; import cn.fw.hermes.common.utils.im.RedisKeyUtil; import cn.fw.hermes.common.utils.im.TXCloudUtils; import cn.fw.hermes.domain.db.Account; +import cn.fw.hermes.domain.db.MessageBusinessType; import cn.fw.hermes.domain.db.SysMsg; import cn.fw.hermes.domain.dto.AdminConfigDto; import cn.fw.hermes.domain.dto.MsgBodyDto; @@ -78,7 +80,7 @@ public class MessageBizService { msgSubject.setCondition(condition); msgSubject.setMsgBodyDto(msgBodyDto); redisTemplate.opsForList() - .leftPush(RedisKey.ASYN_MESSAGE_TARGET.getCode(), JSON.toJSONString(msgSubject)); + .leftPush(RedisKey.ASYN_MESSAGE_TARGET.getCode(), JSON.toJSONString(msgSubject)); return messageId; } @@ -113,23 +115,23 @@ public class MessageBizService { if (msgPara.isUseOfflineMsg()) { OfflinePushInfo pushInfo = msgPara.getOfflinePushInfo(); info = TXCloudUtils.getOfflinePushInfo(pushInfo.getTitle(), pushInfo.getDesc(), - JSON.toJSONString(pushInfo.getExt())); + JSON.toJSONString(pushInfo.getExt())); } //获取管理员签名 String adminKey = RedisKeyUtil.getAdminkey(adminConfigDto.getAdminId()); String adminSig = accountBizService.getSig(adminConfigDto.getAdminId(), 360 * 24 * 10, adminKey) - .getSig(); + .getSig(); //调用IM发送消息接口发送消息 JSONObject jsonObject = TXCloudUtils - .openimSendMsg(msgBodyDto.getFromAccount(), msgBodyDto.getToAccount(), - msgBodyDto.getMsgBody(), adminSig, - adminConfigDto.getAdminId(), adminConfigDto.getAppId(), msgPara.getMsgLifeTime(), - msgPara.getMsgTypeEnum(), info); + .openimSendMsg(msgBodyDto.getFromAccount(), msgBodyDto.getToAccount(), + msgBodyDto.getMsgBody(), adminSig, + adminConfigDto.getAdminId(), adminConfigDto.getAppId(), msgPara.getMsgLifeTime(), + msgPara.getMsgTypeEnum(), info); //是否发送成功 BV.isTrue(jsonObject.get("ActionStatus").equals(ActionStatusEnum.OK.getCode()) && 0 == jsonObject.getInteger("ErrorCode"), - MessageCodeBuilder - .messageCode(jsonObject.getInteger("ErrorCode"), "调用IM消息发送接口失败"), - "调用IM消息发送接口失败"); + MessageCodeBuilder + .messageCode(jsonObject.getInteger("ErrorCode"), "调用IM消息发送接口失败"), + "调用IM消息发送接口失败"); SysMsg sysMsg = msgBodyDto.getSysMsg(); sysMsg.setMessageId(msgPara.getMessageId()); sysMsg.setMsgStatusDesc(ActionStatusEnum.OK.getMsg()); @@ -155,7 +157,7 @@ public class MessageBizService { } catch (Exception ex) { //放入redis队列 redisTemplate.opsForList() - .leftPush(RedisKey.SAVE_MESSAGE_FAILED.getCode(), JSON.toJSONString(sysMsg)); + .leftPush(RedisKey.SAVE_MESSAGE_FAILED.getCode(), JSON.toJSONString(sysMsg)); } return result; } @@ -172,18 +174,18 @@ public class MessageBizService { BV.isTrue(msgBodyDto.getMsgBody() != null, "消息内容不合法"); //如果消息是自定义消息,则检查对应的消息业务类型是否存在 if (msgBodyDto.getMsgTypeEnum().getCode().equals(MsgTypeEnum.CUSTOM.getCode())) { - BV.notNull(msgPara.getCustomContent().getExt(),"扩展字段参数不能为空"); + BV.notNull(msgPara.getCustomContent().getExt(), "扩展字段参数不能为空"); this.checkExt(msgPara); } //获取发送方用户识别码 String fromAccount = (String) redisTemplate.opsForHash() - .get(RedisKeyCache.SYS_KEY, msgPara.getBusinessType() == null ? - BusinessType.SYS_NOTICE.getCode().toString() - : msgPara.getBusinessType().getCode().toString()); + .get(RedisKeyCache.SYS_KEY, msgPara.getBusinessType() == null ? + BusinessType.SYS_NOTICE.getCode().toString() + : msgPara.getBusinessType().getCode().toString()); BV.isTrue(!StringUtils.isEmpty(fromAccount), "发送方用户不存在"); //获取接收方用户识别码 Optional optional = accountService.queryAccountByUserId(msgPara.getUserId(), - msgPara.getIsStaff() ? UserTypeEnum.B.getValue() : UserTypeEnum.C.getValue()); + msgPara.getIsStaff() ? UserTypeEnum.B.getValue() : UserTypeEnum.C.getValue()); String toAccount; //如果消息接收人未注册,将该用户注册 if (!optional.isPresent()) { @@ -211,7 +213,12 @@ public class MessageBizService { Map extMap = msgPara.getCustomContent().getExt(); BV.notNull(extMap.get("type"), "消息业务类型不能为空"); String type = extMap.get("type").toString(); - BV.isTrue(messageBusinessTypeBizService.getTypeFromRedis(type), () -> "消息业务类型不正确"); + Boolean flag = messageBusinessTypeBizService.getTypeFromRedis(type); + if (!flag) { + Optional optional = messageBusinessTypeBizService.getMessageBusinessType(type); + BV.isTrue(optional.isPresent(), () -> "消息业务类型不正确"); + redisTemplate.opsForHash().put(RedisKey.MESSAGE_BUSINESS_TYPE.getCode(), optional.get().getType(),"1"); + } } } diff --git a/fw-hermes-service/src/main/java/cn/fw/hermes/service/biz/MessageBusinessTypeBizService.java b/fw-hermes-service/src/main/java/cn/fw/hermes/service/biz/MessageBusinessTypeBizService.java index bc113f2..b9ce691 100644 --- a/fw-hermes-service/src/main/java/cn/fw/hermes/service/biz/MessageBusinessTypeBizService.java +++ b/fw-hermes-service/src/main/java/cn/fw/hermes/service/biz/MessageBusinessTypeBizService.java @@ -7,8 +7,10 @@ import cn.fw.hermes.service.data.MessageBusinessTypeService; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.StringRedisTemplate; @@ -62,9 +64,9 @@ public class MessageBusinessTypeBizService { */ public Boolean cacheAllTypeToRedis() { List typeList = messageBusinessTypeService - .queryAllMessageType(); + .queryAllMessageType(); Map map = typeList.stream() - .collect(Collectors.toMap(MessageBusinessType::getType, (r) -> "1")); + .collect(Collectors.toMap(MessageBusinessType::getType, (r) -> "1")); redisTemplate.opsForHash().putAll(RedisKey.MESSAGE_BUSINESS_TYPE.getCode(), map); log.info("缓存消息业务类型到redis操作完成"); return true; @@ -100,9 +102,20 @@ public class MessageBusinessTypeBizService { */ public Boolean getTypeFromRedis(String key) { String messageType = (String) redisTemplate.opsForHash() - .get(RedisKey.MESSAGE_BUSINESS_TYPE.getCode(), key); + .get(RedisKey.MESSAGE_BUSINESS_TYPE.getCode(), key); return !StringUtils.isEmpty(messageType); } + /** + * 通过type查询业务类型 + * + * @param type 类型 + * @return 业务类型 + */ + public Optional getMessageBusinessType(String type) { + return Optional.ofNullable(messageBusinessTypeService.getOne( + Wrappers.lambdaQuery().eq(MessageBusinessType::getType, type))); + } + } \ No newline at end of file diff --git a/fw-hermes-service/src/main/java/cn/fw/hermes/service/mq/MessageProducer.java b/fw-hermes-service/src/main/java/cn/fw/hermes/service/mq/MessageProducer.java index 1c68f01..9176418 100644 --- a/fw-hermes-service/src/main/java/cn/fw/hermes/service/mq/MessageProducer.java +++ b/fw-hermes-service/src/main/java/cn/fw/hermes/service/mq/MessageProducer.java @@ -20,7 +20,7 @@ public class MessageProducer { final String msg = "消息发送mq"; try { log.info("{} : body [{}]", msg, messageResult); - rocketMQTemplate.syncSend(MessageResult.TOPIC, messageResult); + rocketMQTemplate.syncSend(MessageResult.TOPIC + ":*", messageResult); } catch (Exception e) { log.error("{} 消息结果发送失败 messageId[{}]", msg, messageResult.getMessageId()); }