|
@@ -2,21 +2,22 @@ package cn.iocoder.yudao.module.mp.service.message;
|
|
|
|
|
|
import cn.hutool.core.io.FileTypeUtil;
|
|
|
import cn.hutool.core.io.FileUtil;
|
|
|
-import cn.hutool.core.io.IoUtil;
|
|
|
import cn.hutool.core.lang.Assert;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
-import cn.iocoder.yudao.framework.common.util.io.FileUtils;
|
|
|
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.yudao.module.infra.api.file.FileApi;
|
|
|
+import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO;
|
|
|
import cn.iocoder.yudao.module.mp.convert.message.MpMessageConvert;
|
|
|
import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
|
|
|
-import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
|
|
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
|
|
import cn.iocoder.yudao.module.mp.dal.dataobject.user.MpUserDO;
|
|
|
+import cn.iocoder.yudao.module.mp.dal.mysql.message.MpMessageMapper;
|
|
|
import cn.iocoder.yudao.module.mp.enums.message.MpMessageSendFromEnum;
|
|
|
import cn.iocoder.yudao.module.mp.framework.mp.core.MpServiceFactory;
|
|
|
+import cn.iocoder.yudao.module.mp.framework.mp.core.util.MpUtils;
|
|
|
import cn.iocoder.yudao.module.mp.service.account.MpAccountService;
|
|
|
+import cn.iocoder.yudao.module.mp.service.message.bo.MpMessageSendOutReqBO;
|
|
|
import cn.iocoder.yudao.module.mp.service.user.MpUserService;
|
|
|
-import lombok.SneakyThrows;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import me.chanjar.weixin.common.error.WxErrorException;
|
|
|
import me.chanjar.weixin.mp.api.WxMpService;
|
|
@@ -24,20 +25,12 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
|
|
|
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-
|
|
|
-import javax.annotation.Resource;
|
|
|
-
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
-import cn.iocoder.yudao.module.mp.controller.admin.message.vo.*;
|
|
|
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
-
|
|
|
-import cn.iocoder.yudao.module.mp.dal.mysql.message.MpMessageMapper;
|
|
|
-
|
|
|
+import javax.annotation.Resource;
|
|
|
+import javax.validation.Validator;
|
|
|
import java.io.File;
|
|
|
|
|
|
-import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
-
|
|
|
/**
|
|
|
* 粉丝消息表 Service 实现类
|
|
|
*
|
|
@@ -64,13 +57,16 @@ public class MpMessageServiceImpl implements MpMessageService {
|
|
|
@Resource
|
|
|
private FileApi fileApi;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private Validator validator;
|
|
|
+
|
|
|
@Override
|
|
|
public PageResult<MpMessageDO> getWxFansMsgPage(MpMessagePageReqVO pageReqVO) {
|
|
|
return mpMessageMapper.selectPage(pageReqVO);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void createFromUser(String appId, WxMpXmlMessage wxMessage) {
|
|
|
+ public void receiveMessage(String appId, WxMpXmlMessage wxMessage) {
|
|
|
WxMpService mpService = mpServiceFactory.getRequiredMpService(appId);
|
|
|
// 获得关联信息
|
|
|
MpAccountDO account = mpAccountService.getAccountFromCache(appId);
|
|
@@ -88,24 +84,21 @@ public class MpMessageServiceImpl implements MpMessageService {
|
|
|
message.setThumbMediaUrl(mediaDownload(mpService, message.getThumbMediaId()));
|
|
|
}
|
|
|
mpMessageMapper.insert(message);
|
|
|
-
|
|
|
-// WxConsts.MenuButtonType.VIEW TODO 芋艿:待测试
|
|
|
-// wxMessage.getEventKey()
|
|
|
-
|
|
|
-// WxConsts.MenuButtonType.CLICK
|
|
|
-// wxMessage.getEventKey()
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public WxMpXmlOutMessage createFromAutoReply(String openid, MpAutoReplyDO reply) {
|
|
|
+ public WxMpXmlOutMessage sendOutMessage(MpMessageSendOutReqBO sendReqBO) {
|
|
|
+ // 校验消息格式
|
|
|
+ MpUtils.validateMessage(validator, sendReqBO.getType(), sendReqBO);
|
|
|
+
|
|
|
// 获得关联信息
|
|
|
- MpAccountDO account = mpAccountService.getAccountFromCache(reply.getAppId());
|
|
|
- Assert.notNull(account, "公众号账号({}) 不存在", reply.getAppId());
|
|
|
- MpUserDO user = mpUserService.getUser(reply.getAppId(), openid);
|
|
|
- Assert.notNull(user, "公众号粉丝({}/{}) 不存在", reply.getAppId(), openid);
|
|
|
+ MpAccountDO account = mpAccountService.getAccountFromCache(sendReqBO.getAppId());
|
|
|
+ Assert.notNull(account, "公众号账号({}) 不存在", sendReqBO.getAppId());
|
|
|
+ MpUserDO user = mpUserService.getUser(sendReqBO.getAppId(), sendReqBO.getOpenid());
|
|
|
+ Assert.notNull(user, "公众号粉丝({}/{}) 不存在", sendReqBO.getAppId(), sendReqBO.getOpenid());
|
|
|
|
|
|
// 记录消息
|
|
|
- MpMessageDO message = MpMessageConvert.INSTANCE.convert(reply, account, user);
|
|
|
+ MpMessageDO message = MpMessageConvert.INSTANCE.convert(sendReqBO, account, user);
|
|
|
message.setSendFrom(MpMessageSendFromEnum.MP_TO_USER.getFrom());
|
|
|
mpMessageMapper.insert(message);
|
|
|
|