diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/dto/SubscribeMessageReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/dto/SubscribeMessageReqDTO.java index afeaa0d3..3a640b1f 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/dto/SubscribeMessageReqDTO.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/dto/SubscribeMessageReqDTO.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.system.api.subscribe.dto; +import com.sun.org.apache.xpath.internal.operations.Bool; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; import lombok.Data; import javax.validation.constraints.NotNull; @@ -15,6 +17,7 @@ import java.util.List; */ @Schema(description = "RPC 服务 - 微信小程序订阅消息 Request DTO") @Data +@Builder public class SubscribeMessageReqDTO { @Schema(description = "接收者(用户)的 openid", requiredMode = Schema.RequiredMode.REQUIRED, example = "o3bwX6Yw1bvbMAV-jUNjHrbrJu0I") @@ -39,4 +42,8 @@ public class SubscribeMessageReqDTO { public void addData(MsgData data) { this.data.add(data); } + + @Schema(description = "模版类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1:小程序模版:2:公众号模版") + @Builder.Default + private String minOrMpType = "1" ; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApiImpl.java index ee834d52..bb5ecf3a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApiImpl.java @@ -7,10 +7,13 @@ import cn.iocoder.yudao.module.system.api.subscribe.dto.SubscribeMessageReqDTO; import cn.iocoder.yudao.module.system.service.social.SocialClientService; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -32,14 +35,26 @@ public class SubscribeMessageSendApiImpl implements SubscribeMessageSendApi { @SneakyThrows @Override public CommonResult sendApprovalResultNotification(SubscribeMessageReqDTO reqDTO) { - socialClientService.getWxMaService().getMsgService().sendSubscribeMsg(initWxMaSubscribeMessage(reqDTO)); + //发送审批结果通知 + String type = reqDTO.getMinOrMpType() ; + if( type == null || type.equals("1") ) { + socialClientService.getWxMpService().getTemplateMsgService().sendTemplateMsg(initWxMpSubscribeMessage(reqDTO)) ; + } else { + socialClientService.getWxMaService().getMsgService().sendSubscribeMsg(initWxMaSubscribeMessage(reqDTO)); + } return success(1L); } @SneakyThrows @Override public CommonResult sendProcessToDoReminder(SubscribeMessageReqDTO reqDTO) { - socialClientService.getWxMaService().getMsgService().sendSubscribeMsg(initWxMaSubscribeMessage(reqDTO)); + //发送OA流程待办提醒 + String type = reqDTO.getMinOrMpType() ; + if( type == null || type.equals("1") ) { + socialClientService.getWxMpService().getTemplateMsgService().sendTemplateMsg(initWxMpSubscribeMessage(reqDTO)) ; + } else { + socialClientService.getWxMaService().getMsgService().sendSubscribeMsg(initWxMaSubscribeMessage(reqDTO)); + } return success(1L); } @@ -84,4 +99,21 @@ public class SubscribeMessageSendApiImpl implements SubscribeMessageSendApi { return message; } + + private WxMpTemplateMessage initWxMpSubscribeMessage(SubscribeMessageReqDTO reqDTO){ + List dataList = reqDTO.getData(); + List data = new ArrayList<>(); + for (MsgData msgData : dataList) { + WxMpTemplateData wxMpTemplateData = new WxMpTemplateData(); + wxMpTemplateData.setName(msgData.getName()); + wxMpTemplateData.setValue(msgData.getValue()); + data.add(wxMpTemplateData) ; + } + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(reqDTO.getToUser()) + .templateId(reqDTO.getTemplateId()) + .data(data) + .build(); + return templateMessage ; + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java index 7756ce4a..e54aa14d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO; import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import com.xingyuv.jushauth.model.AuthUser; import me.chanjar.weixin.common.bean.WxJsapiSignature; +import me.chanjar.weixin.mp.api.WxMpService; import javax.validation.Valid; @@ -52,6 +53,12 @@ public interface SocialClientService { */ WxJsapiSignature createWxMpJsapiSignature(Integer userType, String url); + /** + * 获取WxMpService + * @return + */ + WxMpService getWxMpService() ; + // =================== 微信小程序独有 =================== /** diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java index cc60e0f2..e44e0aba 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java @@ -68,6 +68,11 @@ public class SocialClientServiceImpl implements SocialClientService { private WxMpProperties wxMpProperties; @Resource private StringRedisTemplate stringRedisTemplate; // WxMpService 需要使用到,所以在 Service 注入了它 + + @Override + public WxMpService getWxMpService() { + return getWxMpService(2) ; + } /** * 缓存 WxMpService 对象 * diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml index cb7098f5..86a048c1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml @@ -127,8 +127,8 @@ wx: mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 # app-id: wx041349c6f39b268b # secret: 5abee519483bc9f8cb37ce280e814bd0 - app-id: wx5b23ba7a5589ecbb # 测试号 - secret: 2a7b3b20c537e52e74afd395eb85f61f + app-id: wx9943f95048ba8472 + secret: f1f5625f210142b6ae31a06c699826df # 存储配置,解决 AccessToken 的跨节点的共享 config-storage: type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-prod.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-prod.yaml index 47e40b16..fcba6df9 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-prod.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-prod.yaml @@ -140,8 +140,8 @@ wx: mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 # app-id: wx041349c6f39b268b # secret: 5abee519483bc9f8cb37ce280e814bd0 - app-id: wx5b23ba7a5589ecbb # 测试号 - secret: 2a7b3b20c537e52e74afd395eb85f61f + app-id: wx9943f95048ba8472 + secret: f1f5625f210142b6ae31a06c699826df # 存储配置,解决 AccessToken 的跨节点的共享 config-storage: type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取