mp:增加【自动回复】的分页接口
This commit is contained in:
parent
26ca97d2f6
commit
ab41c96641
|
@ -63,9 +63,9 @@ public class MpMenuBaseVO {
|
||||||
|
|
||||||
// ========== 消息内容 ==========
|
// ========== 消息内容 ==========
|
||||||
|
|
||||||
@ApiModelProperty(value = "消息类型", example = "text",
|
@ApiModelProperty(value = "回复的消息类型", example = "text",
|
||||||
notes = "枚举 TEXT、IMAGE、VOICE、VIDEO、NEWS、MUSIC")
|
notes = "枚举 TEXT、IMAGE、VOICE、VIDEO、NEWS、MUSIC")
|
||||||
@NotEmpty(message = "消息类型不能为空", groups = {ClickButtonGroup.class, ScanCodeWaitMsgButtonGroup.class})
|
@NotEmpty(message = "回复的消息类型不能为空", groups = {ClickButtonGroup.class, ScanCodeWaitMsgButtonGroup.class})
|
||||||
private String replyMessageType;
|
private String replyMessageType;
|
||||||
|
|
||||||
@ApiModelProperty(value = "回复的消息内容", example = "欢迎关注")
|
@ApiModelProperty(value = "回复的消息内容", example = "欢迎关注")
|
||||||
|
@ -104,7 +104,7 @@ public class MpMenuBaseVO {
|
||||||
@Valid
|
@Valid
|
||||||
private List<MpMessageDO.Article> replyArticles;
|
private List<MpMessageDO.Article> replyArticles;
|
||||||
|
|
||||||
@ApiModelProperty(value = "音乐链接", example = "https://www.iocoder.cn/xxx.mp3")
|
@ApiModelProperty(value = "回复的音乐链接", example = "https://www.iocoder.cn/xxx.mp3")
|
||||||
@NotEmpty(message = "回复的音乐链接不能为空", groups = MusicMessageGroup.class)
|
@NotEmpty(message = "回复的音乐链接不能为空", groups = MusicMessageGroup.class)
|
||||||
@URL(message = "回复的高质量音乐链接格式不正确", groups = MusicMessageGroup.class)
|
@URL(message = "回复的高质量音乐链接格式不正确", groups = MusicMessageGroup.class)
|
||||||
private String replyMusicUrl;
|
private String replyMusicUrl;
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
### 请求 /mp/message/page 接口 => 成功
|
||||||
|
GET {{baseUrl}}/mp/auto-reply/page?accountId=1&pageNo=1&pageSize=10
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
tenant-id: {{adminTenentId}}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package cn.iocoder.yudao.module.mp.controller.admin.message;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply.MpAutoReplyRespVO;
|
||||||
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.mp.convert.message.MpAutoReplyConvert;
|
||||||
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
|
||||||
|
import cn.iocoder.yudao.module.mp.service.message.MpAutoReplyService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.validation.Valid;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
@Api(tags = "管理后台 - 公众号自动回复")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/mp/auto-reply")
|
||||||
|
@Validated
|
||||||
|
public class MpAutoReplyController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private MpAutoReplyService mpAutoReplyService;
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@ApiOperation("获得公众号自动回复分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('mp:auto-reply:query')")
|
||||||
|
public CommonResult<PageResult<MpAutoReplyRespVO>> getAutoReplyPage(@Valid MpMessagePageReqVO pageVO) {
|
||||||
|
PageResult<MpAutoReplyDO> pageResult = mpAutoReplyService.getAutoReplyPage(pageVO);
|
||||||
|
return success(MpAutoReplyConvert.INSTANCE.convertPage(pageResult));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.mp.controller.admin.message;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO;
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
|
||||||
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageRespVO;
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageRespVO;
|
||||||
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO;
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO;
|
||||||
import cn.iocoder.yudao.module.mp.convert.message.MpMessageConvert;
|
import cn.iocoder.yudao.module.mp.convert.message.MpMessageConvert;
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
||||||
import cn.iocoder.yudao.module.mp.service.message.MpMessageService;
|
import cn.iocoder.yudao.module.mp.service.message.MpMessageService;
|
||||||
|
@ -19,7 +19,7 @@ import javax.validation.Valid;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
@Api(tags = "管理后台 - 粉丝消息")
|
@Api(tags = "管理后台 - 公众号消息")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/mp/message")
|
@RequestMapping("/mp/message")
|
||||||
@Validated
|
@Validated
|
||||||
|
|
|
@ -0,0 +1,110 @@
|
||||||
|
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
||||||
|
import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyTypeEnum;
|
||||||
|
import cn.iocoder.yudao.module.mp.framework.mp.core.util.MpUtils.*;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import me.chanjar.weixin.common.api.WxConsts;
|
||||||
|
import org.hibernate.validator.constraints.URL;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import javax.validation.constraints.AssertTrue;
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公众号自动回复 Base VO,提供给添加、修改、详细的子 VO 使用
|
||||||
|
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class MpAutoReplyBaseVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "回复类型", example = "1", notes = "参见 MpAutoReplyTypeEnum 枚举")
|
||||||
|
@NotNull(message = "回复类型不能为空")
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
|
// ==================== 请求消息 ====================
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "请求的关键字", example = "关键字", notes = "当 type 为 MpAutoReplyTypeEnum#KEYWORD 时,必填")
|
||||||
|
private String requestKeyword;
|
||||||
|
@ApiModelProperty(value = "请求的关键字", example = "关键字", notes = "当 type 为 MpAutoReplyTypeEnum#KEYWORD 时,必填")
|
||||||
|
private Integer requestMatch;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "请求的消息类型", example = "text", notes = "当 type 为 MpAutoReplyTypeEnum#MESSAGE 时,必填")
|
||||||
|
private String requestMessageType;
|
||||||
|
|
||||||
|
// ==================== 响应消息 ====================
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "回复的消息类型", example = "text",
|
||||||
|
notes = "枚举 TEXT、IMAGE、VOICE、VIDEO、NEWS、MUSIC")
|
||||||
|
@NotEmpty(message = "回复的消息类型不能为空")
|
||||||
|
private String responseMessageType;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "回复的消息内容", example = "欢迎关注")
|
||||||
|
@NotEmpty(message = "回复的消息内容不能为空", groups = TextMessageGroup.class)
|
||||||
|
private String responseContent;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "回复的媒体 id", example = "123456")
|
||||||
|
@NotEmpty(message = "回复的消息 mediaId 不能为空",
|
||||||
|
groups = {ImageMessageGroup.class, VoiceMessageGroup.class, VideoMessageGroup.class})
|
||||||
|
private String responseMediaId;
|
||||||
|
@ApiModelProperty(value = "回复的媒体 URL", example = "https://www.iocoder.cn/xxx.jpg")
|
||||||
|
@NotEmpty(message = "回复的消息 mediaId 不能为空",
|
||||||
|
groups = {ImageMessageGroup.class, VoiceMessageGroup.class, VideoMessageGroup.class})
|
||||||
|
private String responseMediaUrl;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "缩略图的媒体 id", example = "123456")
|
||||||
|
@NotEmpty(message = "回复的消息 thumbMediaId 不能为空", groups = {MusicMessageGroup.class})
|
||||||
|
private String responseThumbMediaId;
|
||||||
|
@ApiModelProperty(value = "缩略图的媒体 URL",example = "https://www.iocoder.cn/xxx.jpg")
|
||||||
|
@NotEmpty(message = "回复的消息 thumbMedia 地址不能为空", groups = {MusicMessageGroup.class})
|
||||||
|
private String responseThumbMediaUrl;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "回复的标题", example = "视频标题")
|
||||||
|
@NotEmpty(message = "回复的消息标题不能为空", groups = VideoMessageGroup.class)
|
||||||
|
private String responseTitle;
|
||||||
|
@ApiModelProperty(value = "回复的描述", example = "视频描述")
|
||||||
|
@NotEmpty(message = "消息描述不能为空", groups = VideoMessageGroup.class)
|
||||||
|
private String responseDescription;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 回复的图文消息
|
||||||
|
*
|
||||||
|
* 消息类型为 {@link WxConsts.XmlMsgType} 的 NEWS
|
||||||
|
*/
|
||||||
|
@NotNull(message = "回复的图文消息不能为空", groups = {NewsMessageGroup.class, ViewLimitedButtonGroup.class})
|
||||||
|
@Valid
|
||||||
|
private List<MpMessageDO.Article> responseArticles;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "回复的音乐链接", example = "https://www.iocoder.cn/xxx.mp3")
|
||||||
|
@NotEmpty(message = "回复的音乐链接不能为空", groups = MusicMessageGroup.class)
|
||||||
|
@URL(message = "回复的高质量音乐链接格式不正确", groups = MusicMessageGroup.class)
|
||||||
|
private String responseMusicUrl;
|
||||||
|
@ApiModelProperty(value = "高质量音乐链接", example = "https://www.iocoder.cn/xxx.mp3")
|
||||||
|
@NotEmpty(message = "回复的高质量音乐链接不能为空", groups = MusicMessageGroup.class)
|
||||||
|
@URL(message = "回复的高质量音乐链接格式不正确", groups = MusicMessageGroup.class)
|
||||||
|
private String responseHqMusicUrl;
|
||||||
|
|
||||||
|
@AssertTrue(message = "请求的关键字不能为空")
|
||||||
|
public boolean isRequestKeywordValid() {
|
||||||
|
return ObjectUtil.notEqual(type, MpAutoReplyTypeEnum.KEYWORD)
|
||||||
|
|| requestKeyword != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@AssertTrue(message = "请求的关键字的匹配不能为空")
|
||||||
|
public boolean isRequestMatchValid() {
|
||||||
|
return ObjectUtil.notEqual(type, MpAutoReplyTypeEnum.KEYWORD)
|
||||||
|
|| requestMatch != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@AssertTrue(message = "请求的消息类型不能为空")
|
||||||
|
public boolean isRequestMessageTypeValid() {
|
||||||
|
return ObjectUtil.notEqual(type, MpAutoReplyTypeEnum.MESSAGE)
|
||||||
|
|| requestMessageType != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
@ApiModel("管理后台 - 公众号自动回复的创建 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class MpAutoReplyCreateReqVO extends MpAutoReplyBaseVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "微信公众号 ID", required = true, example = "1024")
|
||||||
|
@NotNull(message = "微信公众号 ID不能为空")
|
||||||
|
private Long accountId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "回复类型", required = true, example = "1", notes = "参见 MpAutoReplyTypeEnum 枚举")
|
||||||
|
@NotNull(message = "回复类型不能为空")
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
@ApiModel("管理后台 - 公众号自动回复的分页 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class MpAutoReplyPageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "公众号账号的编号", required = true, example = "1")
|
||||||
|
@NotNull(message = "公众号账号的编号不能为空")
|
||||||
|
private Long accountId;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@ApiModel("管理后台 - 公众号自动回复 Response VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class MpAutoReplyRespVO extends MpAutoReplyBaseVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "主键", required = true, example = "1024")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "微信公众号 ID", required = true, example = "1024")
|
||||||
|
private Long accountId;
|
||||||
|
@ApiModelProperty(value = "微信公众号 appid", required = true, example = "wx1234567890")
|
||||||
|
private String appId;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
@ApiModel("管理后台 - 公众号自动回复的更新 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class MpAutoReplyUpdateReqVO extends MpAutoReplyBaseVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "主键", required = true, example = "1024")
|
||||||
|
@NotNull(message = "主键不能为空")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.iocoder.yudao.module.mp.controller.admin.message.vo;
|
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.message;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
|
import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.iocoder.yudao.module.mp.controller.admin.message.vo;
|
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.message;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.iocoder.yudao.module.mp.controller.admin.message.vo;
|
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.message;
|
||||||
|
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.iocoder.yudao.module.mp.controller.admin.message.vo;
|
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.message;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
||||||
import cn.iocoder.yudao.module.mp.framework.mp.core.util.MpUtils.*;
|
import cn.iocoder.yudao.module.mp.framework.mp.core.util.MpUtils.*;
|
|
@ -1,5 +1,7 @@
|
||||||
package cn.iocoder.yudao.module.mp.convert.message;
|
package cn.iocoder.yudao.module.mp.convert.message;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply.MpAutoReplyRespVO;
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
|
||||||
import cn.iocoder.yudao.module.mp.service.message.bo.MpMessageSendOutReqBO;
|
import cn.iocoder.yudao.module.mp.service.message.bo.MpMessageSendOutReqBO;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
|
@ -23,4 +25,6 @@ public interface MpAutoReplyConvert {
|
||||||
})
|
})
|
||||||
MpMessageSendOutReqBO convert(String openid, MpAutoReplyDO reply);
|
MpMessageSendOutReqBO convert(String openid, MpAutoReplyDO reply);
|
||||||
|
|
||||||
|
PageResult<MpAutoReplyRespVO> convertPage(PageResult<MpAutoReplyDO> page);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package cn.iocoder.yudao.module.mp.convert.message;
|
package cn.iocoder.yudao.module.mp.convert.message;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageRespVO;
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageRespVO;
|
||||||
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO;
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO;
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
|
import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
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.dataobject.user.MpUserDO;
|
||||||
|
|
|
@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
@ -133,4 +132,5 @@ public class MpAutoReplyDO extends BaseDO {
|
||||||
*/
|
*/
|
||||||
@TableField(typeHandler = MpMessageDO.ArticleTypeHandler.class)
|
@TableField(typeHandler = MpMessageDO.ArticleTypeHandler.class)
|
||||||
private List<MpMessageDO.Article> responseArticles;
|
private List<MpMessageDO.Article> responseArticles;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package cn.iocoder.yudao.module.mp.dal.mysql.message;
|
package cn.iocoder.yudao.module.mp.dal.mysql.message;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
|
||||||
import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyMatchEnum;
|
import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyMatchEnum;
|
||||||
import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyTypeEnum;
|
import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyTypeEnum;
|
||||||
|
@ -12,6 +14,12 @@ import java.util.List;
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface MpAutoReplyMapper extends BaseMapperX<MpAutoReplyDO> {
|
public interface MpAutoReplyMapper extends BaseMapperX<MpAutoReplyDO> {
|
||||||
|
|
||||||
|
default PageResult<MpAutoReplyDO> selectPage(MpMessagePageReqVO pageVO) {
|
||||||
|
return selectPage(pageVO, new LambdaQueryWrapperX<MpAutoReplyDO>()
|
||||||
|
.eq(MpAutoReplyDO::getAccountId, pageVO.getAccountId())
|
||||||
|
.eqIfPresent(MpAutoReplyDO::getType, pageVO.getType()));
|
||||||
|
}
|
||||||
|
|
||||||
default List<MpAutoReplyDO> selectListByAppIdAndKeywordAll(String appId, String requestKeyword) {
|
default List<MpAutoReplyDO> selectListByAppIdAndKeywordAll(String appId, String requestKeyword) {
|
||||||
return selectList(new LambdaQueryWrapperX<MpAutoReplyDO>()
|
return selectList(new LambdaQueryWrapperX<MpAutoReplyDO>()
|
||||||
.eq(MpAutoReplyDO::getAppId, appId)
|
.eq(MpAutoReplyDO::getAppId, appId)
|
||||||
|
|
|
@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.mp.dal.mysql.message;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO;
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
package cn.iocoder.yudao.module.mp.service.message;
|
package cn.iocoder.yudao.module.mp.service.message;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
|
||||||
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
|
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
|
||||||
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
|
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
|
||||||
|
|
||||||
|
@ -10,6 +13,14 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
|
||||||
*/
|
*/
|
||||||
public interface MpAutoReplyService {
|
public interface MpAutoReplyService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得公众号自动回复分页
|
||||||
|
*
|
||||||
|
* @param pageVO 分页请求
|
||||||
|
* @return 自动回复分页结果
|
||||||
|
*/
|
||||||
|
PageResult<MpAutoReplyDO> getAutoReplyPage(MpMessagePageReqVO pageVO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当收到消息时,自动回复
|
* 当收到消息时,自动回复
|
||||||
*
|
*
|
||||||
|
@ -27,5 +38,4 @@ public interface MpAutoReplyService {
|
||||||
* @return 回复的消息
|
* @return 回复的消息
|
||||||
*/
|
*/
|
||||||
WxMpXmlOutMessage replyForSubscribe(String appId, WxMpXmlMessage wxMessage);
|
WxMpXmlOutMessage replyForSubscribe(String appId, WxMpXmlMessage wxMessage);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.mp.service.message;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
|
||||||
import cn.iocoder.yudao.module.mp.convert.message.MpAutoReplyConvert;
|
import cn.iocoder.yudao.module.mp.convert.message.MpAutoReplyConvert;
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
|
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.MpAutoReplyDO;
|
||||||
|
@ -37,6 +39,11 @@ public class MpAutoReplyServiceImpl implements MpAutoReplyService {
|
||||||
@Resource
|
@Resource
|
||||||
private MpAutoReplyMapper mpAutoReplyMapper;
|
private MpAutoReplyMapper mpAutoReplyMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<MpAutoReplyDO> getAutoReplyPage(MpMessagePageReqVO pageVO) {
|
||||||
|
return mpAutoReplyMapper.selectPage(pageVO);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WxMpXmlOutMessage replyForMessage(String appId, WxMpXmlMessage wxMessage) {
|
public WxMpXmlOutMessage replyForMessage(String appId, WxMpXmlMessage wxMessage) {
|
||||||
// 第一步,匹配自动回复
|
// 第一步,匹配自动回复
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package cn.iocoder.yudao.module.mp.service.message;
|
package cn.iocoder.yudao.module.mp.service.message;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO;
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
|
||||||
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO;
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO;
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
||||||
import cn.iocoder.yudao.module.mp.service.message.bo.MpMessageSendOutReqBO;
|
import cn.iocoder.yudao.module.mp.service.message.bo.MpMessageSendOutReqBO;
|
||||||
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
|
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
|
||||||
|
|
|
@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.mp.service.message;
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO;
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
|
||||||
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO;
|
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO;
|
||||||
import cn.iocoder.yudao.module.mp.convert.message.MpMessageConvert;
|
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.account.MpAccountDO;
|
||||||
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
|
||||||
|
|
|
@ -53,7 +53,6 @@ SOFTWARE.
|
||||||
<el-tab-pane name="1">
|
<el-tab-pane name="1">
|
||||||
<span slot="label"><i class="el-icon-star-off"></i> 关注时回复</span>
|
<span slot="label"><i class="el-icon-star-off"></i> 关注时回复</span>
|
||||||
<el-table v-loading="loading" :data="list">
|
<el-table v-loading="loading" :data="list">
|
||||||
<el-table-column label="编号" align="center" prop="id"/>
|
|
||||||
<el-table-column label="回复消息类型" align="center" prop="responseMessageType"/>
|
<el-table-column label="回复消息类型" align="center" prop="responseMessageType"/>
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
@ -75,7 +74,6 @@ SOFTWARE.
|
||||||
<el-tab-pane name="2">
|
<el-tab-pane name="2">
|
||||||
<span slot="label"><i class="el-icon-chat-line-round"></i> 消息回复</span>
|
<span slot="label"><i class="el-icon-chat-line-round"></i> 消息回复</span>
|
||||||
<el-table v-loading="loading" :data="list">
|
<el-table v-loading="loading" :data="list">
|
||||||
<el-table-column label="编号" align="center" prop="id"/>
|
|
||||||
<el-table-column label="请求消息类型" align="center" prop="requestMessageType"/>
|
<el-table-column label="请求消息类型" align="center" prop="requestMessageType"/>
|
||||||
<el-table-column label="回复消息类型" align="center" prop="responseMessageType"/>
|
<el-table-column label="回复消息类型" align="center" prop="responseMessageType"/>
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
@ -98,7 +96,6 @@ SOFTWARE.
|
||||||
<el-tab-pane name="3">
|
<el-tab-pane name="3">
|
||||||
<span slot="label"><i class="el-icon-news"></i> 关键词回复</span>
|
<span slot="label"><i class="el-icon-news"></i> 关键词回复</span>
|
||||||
<el-table v-loading="loading" :data="list">
|
<el-table v-loading="loading" :data="list">
|
||||||
<el-table-column label="编号" align="center" prop="id"/>
|
|
||||||
<el-table-column label="关键词" align="center" prop="requestKeyword"/>
|
<el-table-column label="关键词" align="center" prop="requestKeyword"/>
|
||||||
<el-table-column label="匹配类型" align="center" prop="requestMatch"/>
|
<el-table-column label="匹配类型" align="center" prop="requestMatch"/>
|
||||||
<el-table-column label="回复消息类型" align="center" prop="responseMessageType"/>
|
<el-table-column label="回复消息类型" align="center" prop="responseMessageType"/>
|
||||||
|
@ -175,7 +172,7 @@ export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
// tab 类型(1、关注时回复;2、消息回复;3、关键词回复)
|
// tab 类型(1、关注时回复;2、消息回复;3、关键词回复)
|
||||||
type:'1',
|
type: '3',
|
||||||
// 遮罩层
|
// 遮罩层
|
||||||
loading: true,
|
loading: true,
|
||||||
// 显示搜索条件
|
// 显示搜索条件
|
||||||
|
|
Loading…
Reference in New Issue