Commit ab41c966419ac7e6d0161f61a2764004edc17fae
1 parent
26ca97d2
mp:增加【自动回复】的分页接口
Showing
23 changed files
with
296 additions
and
24 deletions
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/menu/vo/MpMenuBaseVO.java
| @@ -63,9 +63,9 @@ public class MpMenuBaseVO { | @@ -63,9 +63,9 @@ public class MpMenuBaseVO { | ||
| 63 | 63 | ||
| 64 | // ========== 消息内容 ========== | 64 | // ========== 消息内容 ========== |
| 65 | 65 | ||
| 66 | - @ApiModelProperty(value = "消息类型", example = "text", | 66 | + @ApiModelProperty(value = "回复的消息类型", example = "text", |
| 67 | notes = "枚举 TEXT、IMAGE、VOICE、VIDEO、NEWS、MUSIC") | 67 | notes = "枚举 TEXT、IMAGE、VOICE、VIDEO、NEWS、MUSIC") |
| 68 | - @NotEmpty(message = "消息类型不能为空", groups = {ClickButtonGroup.class, ScanCodeWaitMsgButtonGroup.class}) | 68 | + @NotEmpty(message = "回复的消息类型不能为空", groups = {ClickButtonGroup.class, ScanCodeWaitMsgButtonGroup.class}) |
| 69 | private String replyMessageType; | 69 | private String replyMessageType; |
| 70 | 70 | ||
| 71 | @ApiModelProperty(value = "回复的消息内容", example = "欢迎关注") | 71 | @ApiModelProperty(value = "回复的消息内容", example = "欢迎关注") |
| @@ -104,7 +104,7 @@ public class MpMenuBaseVO { | @@ -104,7 +104,7 @@ public class MpMenuBaseVO { | ||
| 104 | @Valid | 104 | @Valid |
| 105 | private List<MpMessageDO.Article> replyArticles; | 105 | private List<MpMessageDO.Article> replyArticles; |
| 106 | 106 | ||
| 107 | - @ApiModelProperty(value = "音乐链接", example = "https://www.iocoder.cn/xxx.mp3") | 107 | + @ApiModelProperty(value = "回复的音乐链接", example = "https://www.iocoder.cn/xxx.mp3") |
| 108 | @NotEmpty(message = "回复的音乐链接不能为空", groups = MusicMessageGroup.class) | 108 | @NotEmpty(message = "回复的音乐链接不能为空", groups = MusicMessageGroup.class) |
| 109 | @URL(message = "回复的高质量音乐链接格式不正确", groups = MusicMessageGroup.class) | 109 | @URL(message = "回复的高质量音乐链接格式不正确", groups = MusicMessageGroup.class) |
| 110 | private String replyMusicUrl; | 110 | private String replyMusicUrl; |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/MpAutoReplyController.http
0 → 100644
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/MpAutoReplyController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mp.controller.admin.message; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 5 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply.MpAutoReplyRespVO; | ||
| 6 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mp.convert.message.MpAutoReplyConvert; | ||
| 8 | +import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO; | ||
| 9 | +import cn.iocoder.yudao.module.mp.service.message.MpAutoReplyService; | ||
| 10 | +import io.swagger.annotations.Api; | ||
| 11 | +import io.swagger.annotations.ApiOperation; | ||
| 12 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 13 | +import org.springframework.validation.annotation.Validated; | ||
| 14 | +import org.springframework.web.bind.annotation.GetMapping; | ||
| 15 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 16 | +import org.springframework.web.bind.annotation.RestController; | ||
| 17 | + | ||
| 18 | +import javax.annotation.Resource; | ||
| 19 | +import javax.validation.Valid; | ||
| 20 | + | ||
| 21 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 22 | + | ||
| 23 | +@Api(tags = "管理后台 - 公众号自动回复") | ||
| 24 | +@RestController | ||
| 25 | +@RequestMapping("/mp/auto-reply") | ||
| 26 | +@Validated | ||
| 27 | +public class MpAutoReplyController { | ||
| 28 | + | ||
| 29 | + @Resource | ||
| 30 | + private MpAutoReplyService mpAutoReplyService; | ||
| 31 | + | ||
| 32 | + @GetMapping("/page") | ||
| 33 | + @ApiOperation("获得公众号自动回复分页") | ||
| 34 | + @PreAuthorize("@ss.hasPermission('mp:auto-reply:query')") | ||
| 35 | + public CommonResult<PageResult<MpAutoReplyRespVO>> getAutoReplyPage(@Valid MpMessagePageReqVO pageVO) { | ||
| 36 | + PageResult<MpAutoReplyDO> pageResult = mpAutoReplyService.getAutoReplyPage(pageVO); | ||
| 37 | + return success(MpAutoReplyConvert.INSTANCE.convertPage(pageResult)); | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | +} |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/MpMessageController.java
| @@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.mp.controller.admin.message; | @@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.mp.controller.admin.message; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | -import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO; | ||
| 6 | -import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageRespVO; | ||
| 7 | -import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO; | 5 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO; |
| 6 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageRespVO; | ||
| 7 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO; | ||
| 8 | import cn.iocoder.yudao.module.mp.convert.message.MpMessageConvert; | 8 | import cn.iocoder.yudao.module.mp.convert.message.MpMessageConvert; |
| 9 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; | 9 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; |
| 10 | import cn.iocoder.yudao.module.mp.service.message.MpMessageService; | 10 | import cn.iocoder.yudao.module.mp.service.message.MpMessageService; |
| @@ -19,7 +19,7 @@ import javax.validation.Valid; | @@ -19,7 +19,7 @@ import javax.validation.Valid; | ||
| 19 | 19 | ||
| 20 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 20 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 21 | 21 | ||
| 22 | -@Api(tags = "管理后台 - 粉丝消息") | 22 | +@Api(tags = "管理后台 - 公众号消息") |
| 23 | @RestController | 23 | @RestController |
| 24 | @RequestMapping("/mp/message") | 24 | @RequestMapping("/mp/message") |
| 25 | @Validated | 25 | @Validated |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/autoreply/MpAutoReplyBaseVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.util.ObjectUtil; | ||
| 4 | +import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; | ||
| 5 | +import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyTypeEnum; | ||
| 6 | +import cn.iocoder.yudao.module.mp.framework.mp.core.util.MpUtils.*; | ||
| 7 | +import io.swagger.annotations.ApiModelProperty; | ||
| 8 | +import lombok.Data; | ||
| 9 | +import me.chanjar.weixin.common.api.WxConsts; | ||
| 10 | +import org.hibernate.validator.constraints.URL; | ||
| 11 | + | ||
| 12 | +import javax.validation.Valid; | ||
| 13 | +import javax.validation.constraints.AssertTrue; | ||
| 14 | +import javax.validation.constraints.NotEmpty; | ||
| 15 | +import javax.validation.constraints.NotNull; | ||
| 16 | +import java.util.List; | ||
| 17 | + | ||
| 18 | +/** | ||
| 19 | + * 公众号自动回复 Base VO,提供给添加、修改、详细的子 VO 使用 | ||
| 20 | + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||
| 21 | + */ | ||
| 22 | +@Data | ||
| 23 | +public class MpAutoReplyBaseVO { | ||
| 24 | + | ||
| 25 | + @ApiModelProperty(value = "回复类型", example = "1", notes = "参见 MpAutoReplyTypeEnum 枚举") | ||
| 26 | + @NotNull(message = "回复类型不能为空") | ||
| 27 | + private Integer type; | ||
| 28 | + | ||
| 29 | + // ==================== 请求消息 ==================== | ||
| 30 | + | ||
| 31 | + @ApiModelProperty(value = "请求的关键字", example = "关键字", notes = "当 type 为 MpAutoReplyTypeEnum#KEYWORD 时,必填") | ||
| 32 | + private String requestKeyword; | ||
| 33 | + @ApiModelProperty(value = "请求的关键字", example = "关键字", notes = "当 type 为 MpAutoReplyTypeEnum#KEYWORD 时,必填") | ||
| 34 | + private Integer requestMatch; | ||
| 35 | + | ||
| 36 | + @ApiModelProperty(value = "请求的消息类型", example = "text", notes = "当 type 为 MpAutoReplyTypeEnum#MESSAGE 时,必填") | ||
| 37 | + private String requestMessageType; | ||
| 38 | + | ||
| 39 | + // ==================== 响应消息 ==================== | ||
| 40 | + | ||
| 41 | + @ApiModelProperty(value = "回复的消息类型", example = "text", | ||
| 42 | + notes = "枚举 TEXT、IMAGE、VOICE、VIDEO、NEWS、MUSIC") | ||
| 43 | + @NotEmpty(message = "回复的消息类型不能为空") | ||
| 44 | + private String responseMessageType; | ||
| 45 | + | ||
| 46 | + @ApiModelProperty(value = "回复的消息内容", example = "欢迎关注") | ||
| 47 | + @NotEmpty(message = "回复的消息内容不能为空", groups = TextMessageGroup.class) | ||
| 48 | + private String responseContent; | ||
| 49 | + | ||
| 50 | + @ApiModelProperty(value = "回复的媒体 id", example = "123456") | ||
| 51 | + @NotEmpty(message = "回复的消息 mediaId 不能为空", | ||
| 52 | + groups = {ImageMessageGroup.class, VoiceMessageGroup.class, VideoMessageGroup.class}) | ||
| 53 | + private String responseMediaId; | ||
| 54 | + @ApiModelProperty(value = "回复的媒体 URL", example = "https://www.iocoder.cn/xxx.jpg") | ||
| 55 | + @NotEmpty(message = "回复的消息 mediaId 不能为空", | ||
| 56 | + groups = {ImageMessageGroup.class, VoiceMessageGroup.class, VideoMessageGroup.class}) | ||
| 57 | + private String responseMediaUrl; | ||
| 58 | + | ||
| 59 | + @ApiModelProperty(value = "缩略图的媒体 id", example = "123456") | ||
| 60 | + @NotEmpty(message = "回复的消息 thumbMediaId 不能为空", groups = {MusicMessageGroup.class}) | ||
| 61 | + private String responseThumbMediaId; | ||
| 62 | + @ApiModelProperty(value = "缩略图的媒体 URL",example = "https://www.iocoder.cn/xxx.jpg") | ||
| 63 | + @NotEmpty(message = "回复的消息 thumbMedia 地址不能为空", groups = {MusicMessageGroup.class}) | ||
| 64 | + private String responseThumbMediaUrl; | ||
| 65 | + | ||
| 66 | + @ApiModelProperty(value = "回复的标题", example = "视频标题") | ||
| 67 | + @NotEmpty(message = "回复的消息标题不能为空", groups = VideoMessageGroup.class) | ||
| 68 | + private String responseTitle; | ||
| 69 | + @ApiModelProperty(value = "回复的描述", example = "视频描述") | ||
| 70 | + @NotEmpty(message = "消息描述不能为空", groups = VideoMessageGroup.class) | ||
| 71 | + private String responseDescription; | ||
| 72 | + | ||
| 73 | + /** | ||
| 74 | + * 回复的图文消息 | ||
| 75 | + * | ||
| 76 | + * 消息类型为 {@link WxConsts.XmlMsgType} 的 NEWS | ||
| 77 | + */ | ||
| 78 | + @NotNull(message = "回复的图文消息不能为空", groups = {NewsMessageGroup.class, ViewLimitedButtonGroup.class}) | ||
| 79 | + @Valid | ||
| 80 | + private List<MpMessageDO.Article> responseArticles; | ||
| 81 | + | ||
| 82 | + @ApiModelProperty(value = "回复的音乐链接", example = "https://www.iocoder.cn/xxx.mp3") | ||
| 83 | + @NotEmpty(message = "回复的音乐链接不能为空", groups = MusicMessageGroup.class) | ||
| 84 | + @URL(message = "回复的高质量音乐链接格式不正确", groups = MusicMessageGroup.class) | ||
| 85 | + private String responseMusicUrl; | ||
| 86 | + @ApiModelProperty(value = "高质量音乐链接", example = "https://www.iocoder.cn/xxx.mp3") | ||
| 87 | + @NotEmpty(message = "回复的高质量音乐链接不能为空", groups = MusicMessageGroup.class) | ||
| 88 | + @URL(message = "回复的高质量音乐链接格式不正确", groups = MusicMessageGroup.class) | ||
| 89 | + private String responseHqMusicUrl; | ||
| 90 | + | ||
| 91 | + @AssertTrue(message = "请求的关键字不能为空") | ||
| 92 | + public boolean isRequestKeywordValid() { | ||
| 93 | + return ObjectUtil.notEqual(type, MpAutoReplyTypeEnum.KEYWORD) | ||
| 94 | + || requestKeyword != null; | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + @AssertTrue(message = "请求的关键字的匹配不能为空") | ||
| 98 | + public boolean isRequestMatchValid() { | ||
| 99 | + return ObjectUtil.notEqual(type, MpAutoReplyTypeEnum.KEYWORD) | ||
| 100 | + || requestMatch != null; | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + @AssertTrue(message = "请求的消息类型不能为空") | ||
| 104 | + public boolean isRequestMessageTypeValid() { | ||
| 105 | + return ObjectUtil.notEqual(type, MpAutoReplyTypeEnum.MESSAGE) | ||
| 106 | + || requestMessageType != null; | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + | ||
| 110 | +} |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/autoreply/MpAutoReplyCreateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import javax.validation.constraints.NotNull; | ||
| 10 | + | ||
| 11 | +@ApiModel("管理后台 - 公众号自动回复的创建 Request VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class MpAutoReplyCreateReqVO extends MpAutoReplyBaseVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "微信公众号 ID", required = true, example = "1024") | ||
| 18 | + @NotNull(message = "微信公众号 ID不能为空") | ||
| 19 | + private Long accountId; | ||
| 20 | + | ||
| 21 | + @ApiModelProperty(value = "回复类型", required = true, example = "1", notes = "参见 MpAutoReplyTypeEnum 枚举") | ||
| 22 | + @NotNull(message = "回复类型不能为空") | ||
| 23 | + private Integer type; | ||
| 24 | + | ||
| 25 | +} |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/autoreply/MpAutoReplyPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 4 | +import io.swagger.annotations.ApiModel; | ||
| 5 | +import io.swagger.annotations.ApiModelProperty; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.EqualsAndHashCode; | ||
| 8 | +import lombok.ToString; | ||
| 9 | + | ||
| 10 | +import javax.validation.constraints.NotNull; | ||
| 11 | + | ||
| 12 | +@ApiModel("管理后台 - 公众号自动回复的分页 Request VO") | ||
| 13 | +@Data | ||
| 14 | +@EqualsAndHashCode(callSuper = true) | ||
| 15 | +@ToString(callSuper = true) | ||
| 16 | +public class MpAutoReplyPageReqVO extends PageParam { | ||
| 17 | + | ||
| 18 | + @ApiModelProperty(value = "公众号账号的编号", required = true, example = "1") | ||
| 19 | + @NotNull(message = "公众号账号的编号不能为空") | ||
| 20 | + private Long accountId; | ||
| 21 | + | ||
| 22 | +} |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/autoreply/MpAutoReplyRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +@ApiModel("管理后台 - 公众号自动回复 Response VO") | ||
| 10 | +@Data | ||
| 11 | +@EqualsAndHashCode(callSuper = true) | ||
| 12 | +@ToString(callSuper = true) | ||
| 13 | +public class MpAutoReplyRespVO extends MpAutoReplyBaseVO { | ||
| 14 | + | ||
| 15 | + @ApiModelProperty(value = "主键", required = true, example = "1024") | ||
| 16 | + private Long id; | ||
| 17 | + | ||
| 18 | + @ApiModelProperty(value = "微信公众号 ID", required = true, example = "1024") | ||
| 19 | + private Long accountId; | ||
| 20 | + @ApiModelProperty(value = "微信公众号 appid", required = true, example = "wx1234567890") | ||
| 21 | + private String appId; | ||
| 22 | + | ||
| 23 | +} |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/autoreply/MpAutoReplyUpdateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import javax.validation.constraints.NotNull; | ||
| 10 | + | ||
| 11 | +@ApiModel("管理后台 - 公众号自动回复的更新 Request VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class MpAutoReplyUpdateReqVO extends MpAutoReplyBaseVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "主键", required = true, example = "1024") | ||
| 18 | + @NotNull(message = "主键不能为空") | ||
| 19 | + private Long id; | ||
| 20 | + | ||
| 21 | +} |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/MpMessageBaseVO.java renamed to yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/message/MpMessageBaseVO.java
| 1 | -package cn.iocoder.yudao.module.mp.controller.admin.message.vo; | 1 | +package cn.iocoder.yudao.module.mp.controller.admin.message.vo.message; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO; | 3 | import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO; |
| 4 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; | 4 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/MpMessagePageReqVO.java renamed to yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/message/MpMessagePageReqVO.java
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/MpMessageRespVO.java renamed to yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/message/MpMessageRespVO.java
| 1 | -package cn.iocoder.yudao.module.mp.controller.admin.message.vo; | 1 | +package cn.iocoder.yudao.module.mp.controller.admin.message.vo.message; |
| 2 | 2 | ||
| 3 | import io.swagger.annotations.ApiModel; | 3 | import io.swagger.annotations.ApiModel; |
| 4 | import io.swagger.annotations.ApiModelProperty; | 4 | import io.swagger.annotations.ApiModelProperty; |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/MpMessageSendReqVO.java renamed to yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/message/MpMessageSendReqVO.java
| 1 | -package cn.iocoder.yudao.module.mp.controller.admin.message.vo; | 1 | +package cn.iocoder.yudao.module.mp.controller.admin.message.vo.message; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; | 3 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; |
| 4 | import cn.iocoder.yudao.module.mp.framework.mp.core.util.MpUtils.*; | 4 | import cn.iocoder.yudao.module.mp.framework.mp.core.util.MpUtils.*; |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/message/MpAutoReplyConvert.java
| 1 | package cn.iocoder.yudao.module.mp.convert.message; | 1 | package cn.iocoder.yudao.module.mp.convert.message; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply.MpAutoReplyRespVO; | ||
| 3 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO; | 5 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO; |
| 4 | import cn.iocoder.yudao.module.mp.service.message.bo.MpMessageSendOutReqBO; | 6 | import cn.iocoder.yudao.module.mp.service.message.bo.MpMessageSendOutReqBO; |
| 5 | import org.mapstruct.Mapper; | 7 | import org.mapstruct.Mapper; |
| @@ -23,4 +25,6 @@ public interface MpAutoReplyConvert { | @@ -23,4 +25,6 @@ public interface MpAutoReplyConvert { | ||
| 23 | }) | 25 | }) |
| 24 | MpMessageSendOutReqBO convert(String openid, MpAutoReplyDO reply); | 26 | MpMessageSendOutReqBO convert(String openid, MpAutoReplyDO reply); |
| 25 | 27 | ||
| 28 | + PageResult<MpAutoReplyRespVO> convertPage(PageResult<MpAutoReplyDO> page); | ||
| 29 | + | ||
| 26 | } | 30 | } |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/message/MpMessageConvert.java
| 1 | package cn.iocoder.yudao.module.mp.convert.message; | 1 | package cn.iocoder.yudao.module.mp.convert.message; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | -import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageRespVO; | ||
| 5 | -import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO; | 4 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageRespVO; |
| 5 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO; | ||
| 6 | import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO; | 6 | import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO; |
| 7 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; | 7 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; |
| 8 | import cn.iocoder.yudao.module.mp.dal.dataobject.user.MpUserDO; | 8 | import cn.iocoder.yudao.module.mp.dal.dataobject.user.MpUserDO; |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/message/MpAutoReplyDO.java
| @@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.annotation.KeySequence; | @@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 9 | import com.baomidou.mybatisplus.annotation.TableField; | 9 | import com.baomidou.mybatisplus.annotation.TableField; |
| 10 | import com.baomidou.mybatisplus.annotation.TableId; | 10 | import com.baomidou.mybatisplus.annotation.TableId; |
| 11 | import com.baomidou.mybatisplus.annotation.TableName; | 11 | import com.baomidou.mybatisplus.annotation.TableName; |
| 12 | -import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; | ||
| 13 | import lombok.Data; | 12 | import lombok.Data; |
| 14 | import lombok.EqualsAndHashCode; | 13 | import lombok.EqualsAndHashCode; |
| 15 | import lombok.ToString; | 14 | import lombok.ToString; |
| @@ -133,4 +132,5 @@ public class MpAutoReplyDO extends BaseDO { | @@ -133,4 +132,5 @@ public class MpAutoReplyDO extends BaseDO { | ||
| 133 | */ | 132 | */ |
| 134 | @TableField(typeHandler = MpMessageDO.ArticleTypeHandler.class) | 133 | @TableField(typeHandler = MpMessageDO.ArticleTypeHandler.class) |
| 135 | private List<MpMessageDO.Article> responseArticles; | 134 | private List<MpMessageDO.Article> responseArticles; |
| 135 | + | ||
| 136 | } | 136 | } |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/message/MpAutoReplyMapper.java
| 1 | package cn.iocoder.yudao.module.mp.dal.mysql.message; | 1 | package cn.iocoder.yudao.module.mp.dal.mysql.message; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 6 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO; | ||
| 5 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO; | 7 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO; |
| 6 | import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyMatchEnum; | 8 | import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyMatchEnum; |
| 7 | import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyTypeEnum; | 9 | import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyTypeEnum; |
| @@ -12,6 +14,12 @@ import java.util.List; | @@ -12,6 +14,12 @@ import java.util.List; | ||
| 12 | @Mapper | 14 | @Mapper |
| 13 | public interface MpAutoReplyMapper extends BaseMapperX<MpAutoReplyDO> { | 15 | public interface MpAutoReplyMapper extends BaseMapperX<MpAutoReplyDO> { |
| 14 | 16 | ||
| 17 | + default PageResult<MpAutoReplyDO> selectPage(MpMessagePageReqVO pageVO) { | ||
| 18 | + return selectPage(pageVO, new LambdaQueryWrapperX<MpAutoReplyDO>() | ||
| 19 | + .eq(MpAutoReplyDO::getAccountId, pageVO.getAccountId()) | ||
| 20 | + .eqIfPresent(MpAutoReplyDO::getType, pageVO.getType())); | ||
| 21 | + } | ||
| 22 | + | ||
| 15 | default List<MpAutoReplyDO> selectListByAppIdAndKeywordAll(String appId, String requestKeyword) { | 23 | default List<MpAutoReplyDO> selectListByAppIdAndKeywordAll(String appId, String requestKeyword) { |
| 16 | return selectList(new LambdaQueryWrapperX<MpAutoReplyDO>() | 24 | return selectList(new LambdaQueryWrapperX<MpAutoReplyDO>() |
| 17 | .eq(MpAutoReplyDO::getAppId, appId) | 25 | .eq(MpAutoReplyDO::getAppId, appId) |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/message/MpMessageMapper.java
| @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.mp.dal.mysql.message; | @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.mp.dal.mysql.message; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 6 | -import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO; | 6 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO; |
| 7 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; | 7 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; |
| 8 | import org.apache.ibatis.annotations.Mapper; | 8 | import org.apache.ibatis.annotations.Mapper; |
| 9 | 9 |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/message/MpAutoReplyService.java
| 1 | package cn.iocoder.yudao.module.mp.service.message; | 1 | package cn.iocoder.yudao.module.mp.service.message; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO; | ||
| 5 | +import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO; | ||
| 3 | import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; | 6 | import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; |
| 4 | import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; | 7 | import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; |
| 5 | 8 | ||
| @@ -11,6 +14,14 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; | @@ -11,6 +14,14 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; | ||
| 11 | public interface MpAutoReplyService { | 14 | public interface MpAutoReplyService { |
| 12 | 15 | ||
| 13 | /** | 16 | /** |
| 17 | + * 获得公众号自动回复分页 | ||
| 18 | + * | ||
| 19 | + * @param pageVO 分页请求 | ||
| 20 | + * @return 自动回复分页结果 | ||
| 21 | + */ | ||
| 22 | + PageResult<MpAutoReplyDO> getAutoReplyPage(MpMessagePageReqVO pageVO); | ||
| 23 | + | ||
| 24 | + /** | ||
| 14 | * 当收到消息时,自动回复 | 25 | * 当收到消息时,自动回复 |
| 15 | * | 26 | * |
| 16 | * @param appId 微信公众号 appId | 27 | * @param appId 微信公众号 appId |
| @@ -27,5 +38,4 @@ public interface MpAutoReplyService { | @@ -27,5 +38,4 @@ public interface MpAutoReplyService { | ||
| 27 | * @return 回复的消息 | 38 | * @return 回复的消息 |
| 28 | */ | 39 | */ |
| 29 | WxMpXmlOutMessage replyForSubscribe(String appId, WxMpXmlMessage wxMessage); | 40 | WxMpXmlOutMessage replyForSubscribe(String appId, WxMpXmlMessage wxMessage); |
| 30 | - | ||
| 31 | } | 41 | } |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/message/MpAutoReplyServiceImpl.java
| @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.mp.service.message; | @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.mp.service.message; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.lang.Assert; | 4 | import cn.hutool.core.lang.Assert; |
| 5 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 6 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO; | ||
| 5 | import cn.iocoder.yudao.module.mp.convert.message.MpAutoReplyConvert; | 7 | import cn.iocoder.yudao.module.mp.convert.message.MpAutoReplyConvert; |
| 6 | import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO; | 8 | import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO; |
| 7 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO; | 9 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO; |
| @@ -38,6 +40,11 @@ public class MpAutoReplyServiceImpl implements MpAutoReplyService { | @@ -38,6 +40,11 @@ public class MpAutoReplyServiceImpl implements MpAutoReplyService { | ||
| 38 | private MpAutoReplyMapper mpAutoReplyMapper; | 40 | private MpAutoReplyMapper mpAutoReplyMapper; |
| 39 | 41 | ||
| 40 | @Override | 42 | @Override |
| 43 | + public PageResult<MpAutoReplyDO> getAutoReplyPage(MpMessagePageReqVO pageVO) { | ||
| 44 | + return mpAutoReplyMapper.selectPage(pageVO); | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + @Override | ||
| 41 | public WxMpXmlOutMessage replyForMessage(String appId, WxMpXmlMessage wxMessage) { | 48 | public WxMpXmlOutMessage replyForMessage(String appId, WxMpXmlMessage wxMessage) { |
| 42 | // 第一步,匹配自动回复 | 49 | // 第一步,匹配自动回复 |
| 43 | List<MpAutoReplyDO> replies = null; | 50 | List<MpAutoReplyDO> replies = null; |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/message/MpMessageService.java
| 1 | package cn.iocoder.yudao.module.mp.service.message; | 1 | package cn.iocoder.yudao.module.mp.service.message; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | -import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO; | ||
| 5 | -import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO; | 4 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO; |
| 5 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO; | ||
| 6 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; | 6 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; |
| 7 | import cn.iocoder.yudao.module.mp.service.message.bo.MpMessageSendOutReqBO; | 7 | import cn.iocoder.yudao.module.mp.service.message.bo.MpMessageSendOutReqBO; |
| 8 | import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; | 8 | import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/message/MpMessageServiceImpl.java
| @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.mp.service.message; | @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.mp.service.message; | ||
| 3 | import cn.hutool.core.lang.Assert; | 3 | import cn.hutool.core.lang.Assert; |
| 4 | import cn.hutool.core.util.StrUtil; | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | -import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO; | ||
| 7 | -import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO; | 6 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO; |
| 7 | +import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO; | ||
| 8 | import cn.iocoder.yudao.module.mp.convert.message.MpMessageConvert; | 8 | import cn.iocoder.yudao.module.mp.convert.message.MpMessageConvert; |
| 9 | import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO; | 9 | import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO; |
| 10 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; | 10 | import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; |
yudao-ui-admin/src/views/mp/autoReply/index.vue
| @@ -53,7 +53,6 @@ SOFTWARE. | @@ -53,7 +53,6 @@ SOFTWARE. | ||
| 53 | <el-tab-pane name="1"> | 53 | <el-tab-pane name="1"> |
| 54 | <span slot="label"><i class="el-icon-star-off"></i> 关注时回复</span> | 54 | <span slot="label"><i class="el-icon-star-off"></i> 关注时回复</span> |
| 55 | <el-table v-loading="loading" :data="list"> | 55 | <el-table v-loading="loading" :data="list"> |
| 56 | - <el-table-column label="编号" align="center" prop="id"/> | ||
| 57 | <el-table-column label="回复消息类型" align="center" prop="responseMessageType"/> | 56 | <el-table-column label="回复消息类型" align="center" prop="responseMessageType"/> |
| 58 | <el-table-column label="创建时间" align="center" prop="createTime" width="180"> | 57 | <el-table-column label="创建时间" align="center" prop="createTime" width="180"> |
| 59 | <template slot-scope="scope"> | 58 | <template slot-scope="scope"> |
| @@ -75,7 +74,6 @@ SOFTWARE. | @@ -75,7 +74,6 @@ SOFTWARE. | ||
| 75 | <el-tab-pane name="2"> | 74 | <el-tab-pane name="2"> |
| 76 | <span slot="label"><i class="el-icon-chat-line-round"></i> 消息回复</span> | 75 | <span slot="label"><i class="el-icon-chat-line-round"></i> 消息回复</span> |
| 77 | <el-table v-loading="loading" :data="list"> | 76 | <el-table v-loading="loading" :data="list"> |
| 78 | - <el-table-column label="编号" align="center" prop="id"/> | ||
| 79 | <el-table-column label="请求消息类型" align="center" prop="requestMessageType"/> | 77 | <el-table-column label="请求消息类型" align="center" prop="requestMessageType"/> |
| 80 | <el-table-column label="回复消息类型" align="center" prop="responseMessageType"/> | 78 | <el-table-column label="回复消息类型" align="center" prop="responseMessageType"/> |
| 81 | <el-table-column label="创建时间" align="center" prop="createTime" width="180"> | 79 | <el-table-column label="创建时间" align="center" prop="createTime" width="180"> |
| @@ -98,7 +96,6 @@ SOFTWARE. | @@ -98,7 +96,6 @@ SOFTWARE. | ||
| 98 | <el-tab-pane name="3"> | 96 | <el-tab-pane name="3"> |
| 99 | <span slot="label"><i class="el-icon-news"></i> 关键词回复</span> | 97 | <span slot="label"><i class="el-icon-news"></i> 关键词回复</span> |
| 100 | <el-table v-loading="loading" :data="list"> | 98 | <el-table v-loading="loading" :data="list"> |
| 101 | - <el-table-column label="编号" align="center" prop="id"/> | ||
| 102 | <el-table-column label="关键词" align="center" prop="requestKeyword"/> | 99 | <el-table-column label="关键词" align="center" prop="requestKeyword"/> |
| 103 | <el-table-column label="匹配类型" align="center" prop="requestMatch"/> | 100 | <el-table-column label="匹配类型" align="center" prop="requestMatch"/> |
| 104 | <el-table-column label="回复消息类型" align="center" prop="responseMessageType"/> | 101 | <el-table-column label="回复消息类型" align="center" prop="responseMessageType"/> |
| @@ -175,7 +172,7 @@ export default { | @@ -175,7 +172,7 @@ export default { | ||
| 175 | data() { | 172 | data() { |
| 176 | return { | 173 | return { |
| 177 | // tab 类型(1、关注时回复;2、消息回复;3、关键词回复) | 174 | // tab 类型(1、关注时回复;2、消息回复;3、关键词回复) |
| 178 | - type:'1', | 175 | + type: '3', |
| 179 | // 遮罩层 | 176 | // 遮罩层 |
| 180 | loading: true, | 177 | loading: true, |
| 181 | // 显示搜索条件 | 178 | // 显示搜索条件 |