Commit 469610521054d9b38bc78221a5b07fd7ca1ffb75
1 parent
7f87f26f
【优化】SYSTEM: 根据代码评审优化小程序的订阅消息
Showing
13 changed files
with
109 additions
and
62 deletions
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/MessageTemplateConstants.java
| @@ -13,12 +13,8 @@ public interface MessageTemplateConstants { | @@ -13,12 +13,8 @@ public interface MessageTemplateConstants { | ||
| 13 | String BROKERAGE_WITHDRAW_AUDIT_APPROVE = "brokerage_withdraw_audit_approve"; // 佣金提现(审核通过) | 13 | String BROKERAGE_WITHDRAW_AUDIT_APPROVE = "brokerage_withdraw_audit_approve"; // 佣金提现(审核通过) |
| 14 | String BROKERAGE_WITHDRAW_AUDIT_REJECT = "brokerage_withdraw_audit_reject"; // 佣金提现(审核不通过) | 14 | String BROKERAGE_WITHDRAW_AUDIT_REJECT = "brokerage_withdraw_audit_reject"; // 佣金提现(审核不通过) |
| 15 | 15 | ||
| 16 | - //======================= 订阅消息模版 ======================= | 16 | + //======================= 小程序订阅消息模版 ======================= |
| 17 | 17 | ||
| 18 | - // TODO @puhui999:建议 TRADE_AFTER_SALE_CHANGE | ||
| 19 | - String ORDER_AFTERSALE_CHANGE = "售后进度通知"; | ||
| 20 | - | ||
| 21 | - // TODO @puhui999:是不是改成 PAY_WALLET_CHANGE 放在 PAY 模块 | ||
| 22 | - String MONEY_CHANGE = "充值成功通知"; | 18 | + String TRADE_AFTER_SALE_CHANGE = "售后进度通知"; |
| 23 | 19 | ||
| 24 | } | 20 | } |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/AppSocialUserController.java
| @@ -68,10 +68,10 @@ public class AppSocialUserController { | @@ -68,10 +68,10 @@ public class AppSocialUserController { | ||
| 68 | return success(Base64.encode(wxQrcode)); | 68 | return success(Base64.encode(wxQrcode)); |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | - @GetMapping("/get-subscribe-template") | ||
| 72 | - @Operation(summary = "获得微信小程订阅模板") | ||
| 73 | - public CommonResult<List<AppSocialWxSubscribeTemplateRespVO>> getSubscribeTemplate() { | ||
| 74 | - List<SocialWxSubscribeTemplateRespDTO> template = socialClientApi.getSubscribeTemplate(); | 71 | + @GetMapping("/get-subscribe-template-list") |
| 72 | + @Operation(summary = "获得微信小程订阅模板列表") | ||
| 73 | + public CommonResult<List<AppSocialWxSubscribeTemplateRespVO>> getSubscribeTemplateList() { | ||
| 74 | + List<SocialWxSubscribeTemplateRespDTO> template = socialClientApi.getSubscribeTemplateList(UserTypeEnum.MEMBER.getValue()); | ||
| 75 | return success(BeanUtils.toBean(template, AppSocialWxSubscribeTemplateRespVO.class)); | 75 | return success(BeanUtils.toBean(template, AppSocialWxSubscribeTemplateRespVO.class)); |
| 76 | } | 76 | } |
| 77 | 77 |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialWxSubscribeTemplateRespVO.java
| @@ -7,10 +7,9 @@ import lombok.Data; | @@ -7,10 +7,9 @@ import lombok.Data; | ||
| 7 | @Data | 7 | @Data |
| 8 | public class AppSocialWxSubscribeTemplateRespVO { | 8 | public class AppSocialWxSubscribeTemplateRespVO { |
| 9 | 9 | ||
| 10 | - // TODO @puhui999:是不是使用 id 作为字段,更干净些哈; | ||
| 11 | @Schema(description = "模版编号", requiredMode = Schema.RequiredMode.REQUIRED, | 10 | @Schema(description = "模版编号", requiredMode = Schema.RequiredMode.REQUIRED, |
| 12 | example = "9Aw5ZV1j9xdWTFEkqCpZ7mIBbSC34khK55OtzUPl0rU") | 11 | example = "9Aw5ZV1j9xdWTFEkqCpZ7mIBbSC34khK55OtzUPl0rU") |
| 13 | - private String priTmplId; | 12 | + private String id; |
| 14 | 13 | ||
| 15 | @Schema(description = "模版标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "订单支付通知") | 14 | @Schema(description = "模版标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "订单支付通知") |
| 16 | private String title; | 15 | private String title; |
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/MessageTemplateConstants.java
0 → 100644
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApi.java
| @@ -54,13 +54,13 @@ public interface SocialClientApi { | @@ -54,13 +54,13 @@ public interface SocialClientApi { | ||
| 54 | * | 54 | * |
| 55 | * @return 小程序订阅消息模版 | 55 | * @return 小程序订阅消息模版 |
| 56 | */ | 56 | */ |
| 57 | - List<SocialWxSubscribeTemplateRespDTO> getSubscribeTemplate(); | 57 | + List<SocialWxSubscribeTemplateRespDTO> getSubscribeTemplateList(Integer userType); |
| 58 | 58 | ||
| 59 | /** | 59 | /** |
| 60 | * 发送微信小程序订阅消息 | 60 | * 发送微信小程序订阅消息 |
| 61 | * | 61 | * |
| 62 | * @param reqDTO 请求 | 62 | * @param reqDTO 请求 |
| 63 | */ | 63 | */ |
| 64 | - void sendSubscribeMessage(SocialWxSubscribeMessageReqDTO reqDTO); | 64 | + void sendSubscribeMessage(SocialWxSubscribeMessageSendReqDTO reqDTO, Integer userType); |
| 65 | 65 | ||
| 66 | } | 66 | } |
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxSubscribeMessageReqDTO.java renamed to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxSubscribeMessageSendReqDTO.java
| 1 | package cn.iocoder.yudao.module.system.api.social.dto; | 1 | package cn.iocoder.yudao.module.system.api.social.dto; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.framework.common.core.KeyValue; | 3 | +import jakarta.validation.constraints.NotNull; |
| 4 | import lombok.Data; | 4 | import lombok.Data; |
| 5 | 5 | ||
| 6 | -import java.util.ArrayList; | ||
| 7 | -import java.util.List; | 6 | +import java.util.HashMap; |
| 7 | +import java.util.Map; | ||
| 8 | 8 | ||
| 9 | -// TODO @puhui99:1)参考 SocialWxQrcodeReqDTO,可以 @see 文档。这样,注释会更见见一点。2)是不是少了 Send:SocialWxSubscribeMessageSendReqDTO | ||
| 10 | /** | 9 | /** |
| 11 | - * 微信小程序订阅消息 Request DTO | 10 | + * 微信小程序订阅消息发送 Request DTO |
| 12 | * | 11 | * |
| 12 | + * @see <a href="https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html">接口文档</a> | ||
| 13 | * @author HUIHUI | 13 | * @author HUIHUI |
| 14 | */ | 14 | */ |
| 15 | @Data | 15 | @Data |
| 16 | -public class SocialWxSubscribeMessageReqDTO { | 16 | +public class SocialWxSubscribeMessageSendReqDTO { |
| 17 | 17 | ||
| 18 | - // TODO @puhui999:参数校验 | ||
| 19 | /** | 18 | /** |
| 20 | * 接收者(用户)的 openid. | 19 | * 接收者(用户)的 openid. |
| 21 | * <pre> | 20 | * <pre> |
| @@ -24,6 +23,7 @@ public class SocialWxSubscribeMessageReqDTO { | @@ -24,6 +23,7 @@ public class SocialWxSubscribeMessageReqDTO { | ||
| 24 | * 描述: 接收者(用户)的 openid | 23 | * 描述: 接收者(用户)的 openid |
| 25 | * </pre> | 24 | * </pre> |
| 26 | */ | 25 | */ |
| 26 | + @NotNull(message = "接收者(用户)的 openid不能为空") | ||
| 27 | private String toUser; | 27 | private String toUser; |
| 28 | 28 | ||
| 29 | /** | 29 | /** |
| @@ -34,6 +34,7 @@ public class SocialWxSubscribeMessageReqDTO { | @@ -34,6 +34,7 @@ public class SocialWxSubscribeMessageReqDTO { | ||
| 34 | * 描述: 所需下发的模板消息的id | 34 | * 描述: 所需下发的模板消息的id |
| 35 | * </pre> | 35 | * </pre> |
| 36 | */ | 36 | */ |
| 37 | + @NotNull(message = "模板消息的id不能为空") | ||
| 37 | private String templateId; | 38 | private String templateId; |
| 38 | 39 | ||
| 39 | /** | 40 | /** |
| @@ -51,6 +52,7 @@ public class SocialWxSubscribeMessageReqDTO { | @@ -51,6 +52,7 @@ public class SocialWxSubscribeMessageReqDTO { | ||
| 51 | * | 52 | * |
| 52 | * 枚举 WxMaConstants.MiniProgramState | 53 | * 枚举 WxMaConstants.MiniProgramState |
| 53 | */ | 54 | */ |
| 55 | + @NotNull(message = "跳转小程序类型不能为空") | ||
| 54 | private String miniprogramState; | 56 | private String miniprogramState; |
| 55 | 57 | ||
| 56 | /** | 58 | /** |
| @@ -58,9 +60,9 @@ public class SocialWxSubscribeMessageReqDTO { | @@ -58,9 +60,9 @@ public class SocialWxSubscribeMessageReqDTO { | ||
| 58 | * | 60 | * |
| 59 | * 枚举 WxMaConstants.MiniProgramLang | 61 | * 枚举 WxMaConstants.MiniProgramLang |
| 60 | */ | 62 | */ |
| 63 | + @NotNull(message = "进入小程序查看的语言类型不能为空") | ||
| 61 | private String lang; | 64 | private String lang; |
| 62 | 65 | ||
| 63 | - // TODO @puhui999:是必须 List<KeyValue<String, String>>,还是 Map<String, String 即可) | ||
| 64 | /** | 66 | /** |
| 65 | * 模板内容,不填则下发空模板. | 67 | * 模板内容,不填则下发空模板. |
| 66 | * <pre> | 68 | * <pre> |
| @@ -69,13 +71,13 @@ public class SocialWxSubscribeMessageReqDTO { | @@ -69,13 +71,13 @@ public class SocialWxSubscribeMessageReqDTO { | ||
| 69 | * 描述: 模板内容,不填则下发空模板 | 71 | * 描述: 模板内容,不填则下发空模板 |
| 70 | * </pre> | 72 | * </pre> |
| 71 | */ | 73 | */ |
| 72 | - private List<KeyValue<String, String>> messages; | 74 | + private Map<String, String> messages; |
| 73 | 75 | ||
| 74 | - public SocialWxSubscribeMessageReqDTO addData(String key, String value) { | 76 | + public SocialWxSubscribeMessageSendReqDTO addData(String key, String value) { |
| 75 | if (messages == null) { | 77 | if (messages == null) { |
| 76 | - messages = new ArrayList<>(); | 78 | + messages = new HashMap<>(); |
| 77 | } | 79 | } |
| 78 | - messages.add(new KeyValue<>(key, value)); | 80 | + messages.put(key, value); |
| 79 | return this; | 81 | return this; |
| 80 | } | 82 | } |
| 81 | 83 |
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxSubscribeTemplateRespDTO.java
| @@ -11,11 +11,10 @@ import lombok.Data; | @@ -11,11 +11,10 @@ import lombok.Data; | ||
| 11 | @Data | 11 | @Data |
| 12 | public class SocialWxSubscribeTemplateRespDTO { | 12 | public class SocialWxSubscribeTemplateRespDTO { |
| 13 | 13 | ||
| 14 | - // TODO @puhui999:建议搞成 id | ||
| 15 | /** | 14 | /** |
| 16 | * 添加至账号下的模板 id,发送小程序订阅消息时所需 | 15 | * 添加至账号下的模板 id,发送小程序订阅消息时所需 |
| 17 | */ | 16 | */ |
| 18 | - private String priTmplId; | 17 | + private String id; |
| 19 | 18 | ||
| 20 | /** | 19 | /** |
| 21 | * 模版标题 | 20 | * 模版标题 |
| @@ -32,7 +31,7 @@ public class SocialWxSubscribeTemplateRespDTO { | @@ -32,7 +31,7 @@ public class SocialWxSubscribeTemplateRespDTO { | ||
| 32 | */ | 31 | */ |
| 33 | private String example; | 32 | private String example; |
| 34 | 33 | ||
| 35 | - // TODO @puhui999:这个在 wxjava 里面,有枚举字段么? | 34 | + // TODO @puhui999:这个在 wxjava 里面,有枚举字段么?没得🤣 |
| 36 | /** | 35 | /** |
| 37 | * 模版类型 | 36 | * 模版类型 |
| 38 | * | 37 | * |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApiImpl.java
| @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.api.social; | @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.api.social; | ||
| 3 | import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; | 3 | import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; |
| 4 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 4 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 5 | import cn.iocoder.yudao.module.system.api.social.dto.*; | 5 | import cn.iocoder.yudao.module.system.api.social.dto.*; |
| 6 | +import cn.iocoder.yudao.module.system.convert.social.SocialUserConvert; | ||
| 6 | import cn.iocoder.yudao.module.system.service.social.SocialClientService; | 7 | import cn.iocoder.yudao.module.system.service.social.SocialClientService; |
| 7 | import jakarta.annotation.Resource; | 8 | import jakarta.annotation.Resource; |
| 8 | import me.chanjar.weixin.common.bean.WxJsapiSignature; | 9 | import me.chanjar.weixin.common.bean.WxJsapiSignature; |
| @@ -47,14 +48,14 @@ public class SocialClientApiImpl implements SocialClientApi { | @@ -47,14 +48,14 @@ public class SocialClientApiImpl implements SocialClientApi { | ||
| 47 | } | 48 | } |
| 48 | 49 | ||
| 49 | @Override | 50 | @Override |
| 50 | - public List<SocialWxSubscribeTemplateRespDTO> getSubscribeTemplate() { | ||
| 51 | - List<TemplateInfo> subscribeTemplate = socialClientService.getSubscribeTemplate(); | ||
| 52 | - return BeanUtils.toBean(subscribeTemplate, SocialWxSubscribeTemplateRespDTO.class); | 51 | + public List<SocialWxSubscribeTemplateRespDTO> getSubscribeTemplateList(Integer userType) { |
| 52 | + List<TemplateInfo> subscribeTemplate = socialClientService.getSubscribeTemplateList(userType); | ||
| 53 | + return SocialUserConvert.INSTANCE.convertList(subscribeTemplate); | ||
| 53 | } | 54 | } |
| 54 | 55 | ||
| 55 | @Override | 56 | @Override |
| 56 | - public void sendSubscribeMessage(SocialWxSubscribeMessageReqDTO reqDTO) { | ||
| 57 | - socialClientService.sendSubscribeMessage(reqDTO); | 57 | + public void sendSubscribeMessage(SocialWxSubscribeMessageSendReqDTO reqDTO, Integer userType) { |
| 58 | + socialClientService.sendSubscribeMessage(reqDTO, userType); | ||
| 58 | } | 59 | } |
| 59 | 60 | ||
| 60 | } | 61 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.http
| 1 | ### 请求 /system/social-client/send-subscribe-message 接口 => 发送测试订阅消息 | 1 | ### 请求 /system/social-client/send-subscribe-message 接口 => 发送测试订阅消息 |
| 2 | POST {{baseUrl}}/system/social-client/send-subscribe-message | 2 | POST {{baseUrl}}/system/social-client/send-subscribe-message |
| 3 | Authorization: Bearer {{token}} | 3 | Authorization: Bearer {{token}} |
| 4 | +Content-Type: application/json | ||
| 4 | #Authorization: Bearer test100 | 5 | #Authorization: Bearer test100 |
| 5 | tenant-id: {{adminTenentId}} | 6 | tenant-id: {{adminTenentId}} |
| 7 | + | ||
| 8 | +{ | ||
| 9 | + "toUser": "oKNkb4xxw2H135-MVPKtEMkumK08", | ||
| 10 | + "templateId": "W4ybDTIwCfKHtMKR7fSfx83DtmVKEeXQo3Ti7GCw4_4", | ||
| 11 | + "miniprogramState": "developer", | ||
| 12 | + "lang": "zh_CN", | ||
| 13 | + "messages": { | ||
| 14 | + "character_string1":"5616122165165", | ||
| 15 | + "amount2":"1000.00", | ||
| 16 | + "time3":"2024-01-01 10:10:10", | ||
| 17 | + "phrase4":"成功" | ||
| 18 | + } | ||
| 19 | +} |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/socail/SocialClientController.java
| 1 | package cn.iocoder.yudao.module.system.controller.admin.socail; | 1 | package cn.iocoder.yudao.module.system.controller.admin.socail; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 6 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 6 | -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxSubscribeMessageReqDTO; | 7 | +import cn.iocoder.yudao.module.system.api.social.dto.SocialWxSubscribeMessageSendReqDTO; |
| 7 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; | 8 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; |
| 8 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientRespVO; | 9 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientRespVO; |
| 9 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; | 10 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; |
| @@ -72,15 +73,9 @@ public class SocialClientController { | @@ -72,15 +73,9 @@ public class SocialClientController { | ||
| 72 | 73 | ||
| 73 | //======================= TODO 测试发送订阅消息 ======================= | 74 | //======================= TODO 测试发送订阅消息 ======================= |
| 74 | 75 | ||
| 75 | - // TODO @puhui999:这个接口,其实可以留着。然后把参数挪到 .http 文件。先直接用 SocialWxSubscribeMessageReqDTO 接参数 | ||
| 76 | @PostMapping("/send-subscribe-message") | 76 | @PostMapping("/send-subscribe-message") |
| 77 | - public void testSendSubscribeMessage() { | ||
| 78 | - SocialWxSubscribeMessageReqDTO reqDTO = new SocialWxSubscribeMessageReqDTO().setLang("zh_CN") | ||
| 79 | - .setMiniprogramState("developer").setTemplateId("W4ybDTIwCfKHtMKR7fSfx83DtmVKEeXQo3Ti7GCw4_4") | ||
| 80 | - .setToUser("oKNkb4xxw2H135-MVPKtEMkumK08"); | ||
| 81 | - reqDTO.addData("character_string1", "11111111").addData("amount2", "6666").addData("time3", "2024-01-01 10:10:10") | ||
| 82 | - .addData("phrase4", "成功"); | ||
| 83 | - socialClientService.sendSubscribeMessage(reqDTO); | 77 | + public void testSendSubscribeMessage(@RequestBody SocialWxSubscribeMessageSendReqDTO reqDTO) { |
| 78 | + socialClientService.sendSubscribeMessage(reqDTO, UserTypeEnum.MEMBER.getValue()); | ||
| 84 | } | 79 | } |
| 85 | 80 | ||
| 86 | } | 81 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/social/SocialUserConvert.java
| 1 | package cn.iocoder.yudao.module.system.convert.social; | 1 | package cn.iocoder.yudao.module.system.convert.social; |
| 2 | 2 | ||
| 3 | +import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; | ||
| 4 | +import cn.hutool.core.collection.CollUtil; | ||
| 5 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 3 | import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; | 6 | import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; |
| 7 | +import cn.iocoder.yudao.module.system.api.social.dto.SocialWxSubscribeMessageSendReqDTO; | ||
| 8 | +import cn.iocoder.yudao.module.system.api.social.dto.SocialWxSubscribeTemplateRespDTO; | ||
| 4 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserBindReqVO; | 9 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserBindReqVO; |
| 10 | +import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo; | ||
| 5 | import org.mapstruct.Mapper; | 11 | import org.mapstruct.Mapper; |
| 6 | import org.mapstruct.Mapping; | 12 | import org.mapstruct.Mapping; |
| 7 | import org.mapstruct.factory.Mappers; | 13 | import org.mapstruct.factory.Mappers; |
| 8 | 14 | ||
| 15 | +import java.util.ArrayList; | ||
| 16 | +import java.util.List; | ||
| 17 | +import java.util.Map; | ||
| 18 | + | ||
| 19 | +import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; | ||
| 20 | + | ||
| 9 | @Mapper | 21 | @Mapper |
| 10 | public interface SocialUserConvert { | 22 | public interface SocialUserConvert { |
| 11 | 23 | ||
| @@ -14,4 +26,24 @@ public interface SocialUserConvert { | @@ -14,4 +26,24 @@ public interface SocialUserConvert { | ||
| 14 | @Mapping(source = "reqVO.type", target = "socialType") | 26 | @Mapping(source = "reqVO.type", target = "socialType") |
| 15 | SocialUserBindReqDTO convert(Long userId, Integer userType, SocialUserBindReqVO reqVO); | 27 | SocialUserBindReqDTO convert(Long userId, Integer userType, SocialUserBindReqVO reqVO); |
| 16 | 28 | ||
| 29 | + default WxMaSubscribeMessage convert(SocialWxSubscribeMessageSendReqDTO reqDTO) { | ||
| 30 | + WxMaSubscribeMessage message = BeanUtils.toBean(reqDTO, WxMaSubscribeMessage.class); | ||
| 31 | + Map<String, String> messages = reqDTO.getMessages(); | ||
| 32 | + if (CollUtil.isNotEmpty(messages)) { | ||
| 33 | + messages.keySet().forEach(key -> { | ||
| 34 | + findAndThen(messages, key, value -> message.addData(new WxMaSubscribeMessage.MsgData(key, value))); | ||
| 35 | + }); | ||
| 36 | + } | ||
| 37 | + return message; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + @Mapping(target = "id", source = "priTmplId") | ||
| 41 | + SocialWxSubscribeTemplateRespDTO convert(TemplateInfo templateInfo); | ||
| 42 | + | ||
| 43 | + default List<SocialWxSubscribeTemplateRespDTO> convertList(List<TemplateInfo> subscribeTemplate) { | ||
| 44 | + List<SocialWxSubscribeTemplateRespDTO> list = new ArrayList<>(); | ||
| 45 | + subscribeTemplate.forEach(templateInfo -> list.add(convert(templateInfo))); | ||
| 46 | + return list; | ||
| 47 | + } | ||
| 48 | + | ||
| 17 | } | 49 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java
| @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.service.social; | @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.service.social; | ||
| 3 | import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; | 3 | import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; |
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | import cn.iocoder.yudao.module.system.api.social.dto.SocialWxQrcodeReqDTO; | 5 | import cn.iocoder.yudao.module.system.api.social.dto.SocialWxQrcodeReqDTO; |
| 6 | -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxSubscribeMessageReqDTO; | 6 | +import cn.iocoder.yudao.module.system.api.social.dto.SocialWxSubscribeMessageSendReqDTO; |
| 7 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; | 7 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; |
| 8 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; | 8 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; |
| 9 | import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO; | 9 | import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO; |
| @@ -78,14 +78,14 @@ public interface SocialClientService { | @@ -78,14 +78,14 @@ public interface SocialClientService { | ||
| 78 | * | 78 | * |
| 79 | * @return 微信小程订阅模板 | 79 | * @return 微信小程订阅模板 |
| 80 | */ | 80 | */ |
| 81 | - List<TemplateInfo> getSubscribeTemplate(); | 81 | + List<TemplateInfo> getSubscribeTemplateList(Integer userType); |
| 82 | 82 | ||
| 83 | /** | 83 | /** |
| 84 | * 发送微信小程序订阅消息 | 84 | * 发送微信小程序订阅消息 |
| 85 | * | 85 | * |
| 86 | * @param reqDTO 请求 | 86 | * @param reqDTO 请求 |
| 87 | */ | 87 | */ |
| 88 | - void sendSubscribeMessage(SocialWxSubscribeMessageReqDTO reqDTO); | 88 | + void sendSubscribeMessage(SocialWxSubscribeMessageSendReqDTO reqDTO, Integer userType); |
| 89 | 89 | ||
| 90 | // =================== 客户端管理 =================== | 90 | // =================== 客户端管理 =================== |
| 91 | 91 |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java
| @@ -4,7 +4,6 @@ import cn.binarywang.wx.miniapp.api.WxMaService; | @@ -4,7 +4,6 @@ import cn.binarywang.wx.miniapp.api.WxMaService; | ||
| 4 | import cn.binarywang.wx.miniapp.api.WxMaSubscribeService; | 4 | import cn.binarywang.wx.miniapp.api.WxMaSubscribeService; |
| 5 | import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; | 5 | import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; |
| 6 | import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; | 6 | import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; |
| 7 | -import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; | ||
| 8 | import cn.binarywang.wx.miniapp.config.impl.WxMaRedisBetterConfigImpl; | 7 | import cn.binarywang.wx.miniapp.config.impl.WxMaRedisBetterConfigImpl; |
| 9 | import cn.hutool.core.bean.BeanUtil; | 8 | import cn.hutool.core.bean.BeanUtil; |
| 10 | import cn.hutool.core.lang.Assert; | 9 | import cn.hutool.core.lang.Assert; |
| @@ -17,9 +16,10 @@ import cn.iocoder.yudao.framework.common.util.cache.CacheUtils; | @@ -17,9 +16,10 @@ import cn.iocoder.yudao.framework.common.util.cache.CacheUtils; | ||
| 17 | import cn.iocoder.yudao.framework.common.util.http.HttpUtils; | 16 | import cn.iocoder.yudao.framework.common.util.http.HttpUtils; |
| 18 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 17 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 19 | import cn.iocoder.yudao.module.system.api.social.dto.SocialWxQrcodeReqDTO; | 18 | import cn.iocoder.yudao.module.system.api.social.dto.SocialWxQrcodeReqDTO; |
| 20 | -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxSubscribeMessageReqDTO; | 19 | +import cn.iocoder.yudao.module.system.api.social.dto.SocialWxSubscribeMessageSendReqDTO; |
| 21 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; | 20 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; |
| 22 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; | 21 | import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; |
| 22 | +import cn.iocoder.yudao.module.system.convert.social.SocialUserConvert; | ||
| 23 | import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO; | 23 | import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO; |
| 24 | import cn.iocoder.yudao.module.system.dal.mysql.social.SocialClientMapper; | 24 | import cn.iocoder.yudao.module.system.dal.mysql.social.SocialClientMapper; |
| 25 | import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; | 25 | import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; |
| @@ -236,7 +236,6 @@ public class SocialClientServiceImpl implements SocialClientService { | @@ -236,7 +236,6 @@ public class SocialClientServiceImpl implements SocialClientService { | ||
| 236 | try { | 236 | try { |
| 237 | return service.getUserService().getPhoneNoInfo(phoneCode); | 237 | return service.getUserService().getPhoneNoInfo(phoneCode); |
| 238 | } catch (WxErrorException e) { | 238 | } catch (WxErrorException e) { |
| 239 | - // TODO @puhui999:这里的日志,reqDTO 要打进去 | ||
| 240 | log.error("[getPhoneNoInfo][userType({}) phoneCode({}) 获得手机号失败]", userType, phoneCode, e); | 239 | log.error("[getPhoneNoInfo][userType({}) phoneCode({}) 获得手机号失败]", userType, phoneCode, e); |
| 241 | throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_PHONE_CODE_ERROR); | 240 | throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_PHONE_CODE_ERROR); |
| 242 | } | 241 | } |
| @@ -256,36 +255,31 @@ public class SocialClientServiceImpl implements SocialClientService { | @@ -256,36 +255,31 @@ public class SocialClientServiceImpl implements SocialClientService { | ||
| 256 | null, | 255 | null, |
| 257 | ObjUtil.defaultIfNull(reqVO.getHyaline(), SocialWxQrcodeReqDTO.HYALINE)); | 256 | ObjUtil.defaultIfNull(reqVO.getHyaline(), SocialWxQrcodeReqDTO.HYALINE)); |
| 258 | } catch (WxErrorException e) { | 257 | } catch (WxErrorException e) { |
| 259 | - log.error("[getWxQrcode][reqVO({})) 获得小程序码失败]", reqVO, e); | 258 | + log.error("[getWxQrcode][reqVO({}) 获得小程序码失败]", reqVO, e); |
| 260 | throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_QRCODE_ERROR); | 259 | throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_QRCODE_ERROR); |
| 261 | } | 260 | } |
| 262 | } | 261 | } |
| 263 | 262 | ||
| 264 | @Override | 263 | @Override |
| 265 | - public List<TemplateInfo> getSubscribeTemplate() { | ||
| 266 | - // TODO @puhui999:这个 userType 最好通过参数,传递过来;然后这个方法名,貌似叫 getSubscribeTemplateList 更合适哈; | ||
| 267 | - WxMaService service = getWxMaService(UserTypeEnum.MEMBER.getValue()); | 264 | + public List<TemplateInfo> getSubscribeTemplateList(Integer userType) { |
| 265 | + WxMaService service = getWxMaService(userType); | ||
| 268 | try { | 266 | try { |
| 269 | WxMaSubscribeService subscribeService = service.getSubscribeService(); | 267 | WxMaSubscribeService subscribeService = service.getSubscribeService(); |
| 270 | return subscribeService.getTemplateList(); | 268 | return subscribeService.getTemplateList(); |
| 271 | } catch (WxErrorException e) { | 269 | } catch (WxErrorException e) { |
| 272 | - log.error("[getSubscribeTemplate][获得小程序订阅消息模版]", e); | 270 | + log.error("[getSubscribeTemplate][userType({}) 获得小程序订阅消息模版]", userType, e); |
| 273 | throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_SUBSCRIBE_TEMPLATE_ERROR); | 271 | throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_SUBSCRIBE_TEMPLATE_ERROR); |
| 274 | } | 272 | } |
| 275 | } | 273 | } |
| 276 | 274 | ||
| 277 | @Override | 275 | @Override |
| 278 | - public void sendSubscribeMessage(SocialWxSubscribeMessageReqDTO reqDTO) { | ||
| 279 | - // TODO @puhui999:这个 userType 最好通过参数, | ||
| 280 | - WxMaService service = getWxMaService(UserTypeEnum.MEMBER.getValue()); | 276 | + public void sendSubscribeMessage(SocialWxSubscribeMessageSendReqDTO reqDTO, Integer userType) { |
| 277 | + WxMaService service = getWxMaService(userType); | ||
| 281 | try { | 278 | try { |
| 282 | WxMaSubscribeService subscribeService = service.getSubscribeService(); | 279 | WxMaSubscribeService subscribeService = service.getSubscribeService(); |
| 283 | - WxMaSubscribeMessage message = BeanUtils.toBean(reqDTO, WxMaSubscribeMessage.class); | ||
| 284 | - reqDTO.getMessages().forEach(item-> message.addData(new WxMaSubscribeMessage.MsgData(item.getKey(), item.getValue()))); | ||
| 285 | - subscribeService.sendSubscribeMsg(message); | 280 | + subscribeService.sendSubscribeMsg(SocialUserConvert.INSTANCE.convert(reqDTO)); |
| 286 | } catch (WxErrorException e) { | 281 | } catch (WxErrorException e) { |
| 287 | - // TODO @puhui999:这里的日志,reqDTO 要打进去 | ||
| 288 | - log.error("[sendSubscribeMessage][发送小程序订阅消息]", e); | 282 | + log.error("[sendSubscribeMessage][reqVO({}) userType({}) 发送小程序订阅消息]", reqDTO, userType, e); |
| 289 | throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_SUBSCRIBE_MESSAGE_ERROR); | 283 | throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_SUBSCRIBE_MESSAGE_ERROR); |
| 290 | } | 284 | } |
| 291 | } | 285 | } |