Browse Source

测试循环依赖

dev
wangqing 4 years ago
parent
commit
b3bba69d30
  1. 24
      tduck-account/src/main/java/com/tduck/cloud/account/service/impl/UserServiceImpl.java
  2. 21
      tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java
  3. 12
      tduck-api/src/main/java/com/tduck/cloud/api/handler/WxMpUserSubscribeEventHandler.java
  4. 4
      tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java
  5. 7
      tduck-api/src/main/java/com/tduck/cloud/api/web/interceptor/AuthorizationInterceptor.java
  6. 8
      tduck-api/src/main/java/com/tduck/cloud/api/web/resolver/LoginUserHandlerMethodArgumentResolver.java
  7. 64
      tduck-api/src/main/resources/application-dev1.yml
  8. 4
      tduck-api/src/main/resources/application.yml
  9. 4
      tduck-common/src/main/java/com/tduck/cloud/common/mybatis/wrapper/JsonLambdaQueryWrapper.java
  10. 14
      tduck-common/src/main/java/com/tduck/cloud/common/util/RedisUtils.java
  11. 41
      tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/config/WxMpConfiguration.java
  12. 7
      tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/ScanHandler.java
  13. 13
      tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/SubscribeHandler.java
  14. 9
      tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/scan/BindAccountScanStrategy.java
  15. 13
      tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/scan/LoginScanStrategy.java
  16. 3
      tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/scan/ScanStrategyContext.java
  17. 9
      tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/scan/SubNotifyScanStrategy.java
  18. 6
      tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/service/impl/WxMpUserMsgServiceImpl.java

24
tduck-account/src/main/java/com/tduck/cloud/account/service/impl/UserServiceImpl.java

@ -23,8 +23,8 @@ import com.tduck.cloud.account.util.NameUtils;
import com.tduck.cloud.account.vo.LoginUserVO;
import com.tduck.cloud.common.util.RedisUtils;
import com.tduck.cloud.common.util.Result;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@ -35,17 +35,16 @@ import java.time.LocalDateTime;
* @author smalljop
* @since 2020-11-10 18:10:43
*/
@Service("userService")
@Slf4j
@Service("userService")
@RequiredArgsConstructor
public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements UserService {
@Autowired
private JwtUtils jwtUtils;
@Autowired
private RedisUtils redisUtils;
@Autowired
private UserAuthorizeService userAuthorizeService;
private final JwtUtils jwtUtils;
private final RedisUtils redisUtils;
private final UserAuthorizeService userAuthorizeService;
@Override
@ -82,7 +81,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> impleme
/**
* 创建用户
*
* @param userEntity
*/
private void createUser(UserEntity userEntity) {
userEntity.setName(NameUtils.getCnName());
@ -94,7 +92,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> impleme
@Override
public Result accountLogin(AccountLoginRequest request) {
UserEntity userEntity = null;
UserEntity userEntity;
if (ReUtil.isMatch(Validator.EMAIL, request.getAccount())) {
userEntity = getUserByEmail(request.getAccount());
} else {
@ -112,10 +110,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> impleme
/**
* 获取登录结果
*
* @param userEntity
* @param channel
* @param requestIp
* @return
*/
@Override
public LoginUserVO getLoginResult(UserEntity userEntity, AccountChannelEnum channel, String requestIp) {
@ -145,8 +139,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> impleme
/**
* 根据邮箱获取
*
* @return
*/
@Override
public UserEntity getUserByEmail(final String email) {

21
tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java

@ -18,31 +18,30 @@ import java.io.File;
import java.util.List;
/**
* web mvc 配置
*
* @author smalljop
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* html静态资源 js静态资源 css静态资源
*/
private final List<String> staticResources = Lists.newArrayList("/**/*.html",
"/**/*.js",
"/**/*.css",
"/**/*.woff",
"/**/*.ttf");
@Autowired
private OssStorageConfig storageConfig;
@Autowired
private AuthorizationInterceptor authorizationInterceptor;
@Autowired
private NoRepeatSubmitInterceptor noRepeatSubmitInterceptor;
@Autowired
private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver;
//html静态资源 js静态资源 css静态资源
private final List<String> staticResources = Lists.newArrayList("/**/*.html",
"/**/*.js",
"/**/*.css",
"/**/*.woff",
"/**/*.ttf");
/**
* 配置本地文件上传的虚拟路径和静态化的文件生成路径
* 备注这是一种图片上传访问图片的方法实际上也可以使用nginx反向代理访问图片

12
tduck-api/src/main/java/com/tduck/cloud/api/handler/WxMpUserSubscribeEventHandler.java

@ -7,29 +7,27 @@ import com.tduck.cloud.wx.mp.entity.WxMpUserEntity;
import com.tduck.cloud.wx.mp.event.WxMpUserSubscribeEvent;
import com.tduck.cloud.wx.mp.handler.scan.LoginScanStrategy;
import com.tduck.cloud.wx.mp.service.WxMpUserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
/**
* @author : smalljop
* @description :
* @description : 微信订阅事件处理
* @create : 2020-12-01 18:37
**/
@Component
@Slf4j
@Component
@RequiredArgsConstructor
public class WxMpUserSubscribeEventHandler {
@Autowired
private UserService userService;
@Autowired
private WxMpUserService wxMpUserService;
@Autowired
private LoginScanStrategy loginScanStrategy;
private final LoginScanStrategy loginScanStrategy;
@EventListener
public void onWxMpUserSubscribe(WxMpUserSubscribeEvent event) {

4
tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java

@ -42,7 +42,6 @@ import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@ -71,9 +70,8 @@ public class UserProjectController {
private final ProjectTemplateItemService projectTemplateItemService;
private final WxMpUserService wxMpUserService;
private final RedisUtils redisUtils;
private final WxMpService wxMpService;
@Autowired
private WxMpService wxMpService;
/**
* 创建项目

7
tduck-api/src/main/java/com/tduck/cloud/api/web/interceptor/AuthorizationInterceptor.java

@ -18,11 +18,14 @@ import javax.servlet.http.HttpServletResponse;
*/
@Component
public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
@Autowired
private JwtUtils jwtUtils;
private final JwtUtils jwtUtils;
public static final String USER_KEY = "userId";
public AuthorizationInterceptor(JwtUtils jwtUtils) {
this.jwtUtils = jwtUtils;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Login annotation;

8
tduck-api/src/main/java/com/tduck/cloud/api/web/resolver/LoginUserHandlerMethodArgumentResolver.java

@ -4,7 +4,6 @@ import com.tduck.cloud.account.entity.UserEntity;
import com.tduck.cloud.account.service.UserService;
import com.tduck.cloud.api.annotation.LoginUser;
import com.tduck.cloud.api.web.interceptor.AuthorizationInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
@ -19,8 +18,11 @@ import org.springframework.web.method.support.ModelAndViewContainer;
*/
@Component
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Autowired
private UserService userService;
private final UserService userService;
public LoginUserHandlerMethodArgumentResolver(UserService userService) {
this.userService = userService;
}
@Override
public boolean supportsParameter(MethodParameter parameter) {

64
tduck-api/src/main/resources/application-dev1.yml

@ -0,0 +1,64 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/tduck?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&tinyInt1isBit=false
username: root
password: root
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 5
maximum-pool-size: 15
auto-commit: true
idle-timeout: 30000
pool-name: DatebookHikariCP
max-lifetime: 1800000
connection-test-query: SELECT 1 FROM DUAL
redis:
database: 1
host: 127.0.0.1
port: 6379
password: # 密码(默认为空)
timeout: 6000ms # 连接超时时长(毫秒)
jedis:
pool:
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 5 # 连接池中的最小空闲连接
mail:
host: smtp.exmail.qq.com # 邮箱smtp
username: pr@tduckapp.com # 用户名
password: # 授权码
logging:
level:
com.tduck.cloud: debug
config: classpath:logback-spring.xml
platform:
oss:
ossType: 1 #oss类型
endpoint:
accessKeyId: # oss key
accessKeySecret: #oss 秘钥
bucketName: tduck-cloud #
domain: https://qiniu.smileyi.top #访问域名
sms:
secretId: # 腾讯云短信 id
secretKey: #腾讯云短信秘钥
appId: #腾讯云appId
sign: # 腾讯云短信签名
validateCodeTemplateId: # 验证码模板ID
retrievePwdValidateCodeTemplateId: #找回密码模板ID
front:
baseUrl: http://localhost:8888/
resetPwdUrl: http://localhost:8888/forget/password?code={}&email={}
updateEmailUrl: http://localhost:8888/account/validate?type=updateEmail&code={}&email={}
wx:
mp:
redis-config-key-prefix: wx
configs:
- appId: #输入微信公众号的APPId
secret: # 微信公众号的秘钥
token: # 微信公众号token
aesKey:

4
tduck-api/src/main/resources/application.yml

@ -2,7 +2,7 @@ spring:
application:
name: tduck-api
profiles:
active: dev
active: dev1
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
@ -16,7 +16,7 @@ spring:
max-request-size: 100MB
server:
port: 8999
port: 8978
servlet:
context-path: /tduck-api

4
tduck-common/src/main/java/com/tduck/cloud/common/mybatis/wrapper/JsonLambdaQueryWrapper.java

@ -17,8 +17,8 @@ public class JsonLambdaQueryWrapper<T> extends LambdaQueryWrapper<T> {
* @param <T>
* @param condition 条件
* @param column 列表
* @param jsonKey
* @param value
* @param jsonKey 需查询可以
* @param value 等于值
* @return
*/
public <T> JsonLambdaQueryWrapper<T> jsonConcat(boolean condition, String column, String jsonKey, Object value) {

14
tduck-common/src/main/java/com/tduck/cloud/common/util/RedisUtils.java

@ -2,7 +2,6 @@ package com.tduck.cloud.common.util;
import cn.hutool.core.convert.Convert;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component;
@ -11,14 +10,19 @@ import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* Created by Dell on 23/09/2018.
*
* @author smalljop
* @date 23/09/2018
*/
@Component
@Slf4j
public class RedisUtils {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
private final RedisTemplate<String, Object> redisTemplate;
public RedisUtils(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
/**
* 默认过期时长单位 一天
@ -29,6 +33,8 @@ public class RedisUtils {
*/
public final static long NOT_EXPIRE = -1;
/**
* 写入缓存
*

41
tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/config/WxMpConfiguration.java

@ -1,6 +1,7 @@
package com.tduck.cloud.wx.mp.config;
import com.tduck.cloud.wx.mp.handler.*;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
import me.chanjar.weixin.common.redis.WxRedisOps;
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
@ -8,7 +9,6 @@ import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -31,32 +31,23 @@ import static me.chanjar.weixin.mp.constant.WxMpEventConstants.POI_CHECK_NOTIFY;
* @author Binary Wang(https://github.com/binarywang)
*/
@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(WxMpProperties.class)
public class WxMpConfiguration {
@Autowired
private LogHandler logHandler;
@Autowired
private NullHandler nullHandler;
@Autowired
private KfSessionHandler kfSessionHandler;
@Autowired
private StoreCheckNotifyHandler storeCheckNotifyHandler;
@Autowired
private LocationHandler locationHandler;
@Autowired
private MenuHandler menuHandler;
@Autowired
private MsgHandler msgHandler;
@Autowired
private UnsubscribeHandler unsubscribeHandler;
@Autowired
private SubscribeHandler subscribeHandler;
@Autowired
private ScanHandler scanHandler;
@Autowired
private WxMpProperties properties;
@Autowired
private StringRedisTemplate redisTemplate;
private final LogHandler logHandler;
private final NullHandler nullHandler;
private final KfSessionHandler kfSessionHandler;
private final StoreCheckNotifyHandler storeCheckNotifyHandler;
private final LocationHandler locationHandler;
private final MenuHandler menuHandler;
private final MsgHandler msgHandler;
private final UnsubscribeHandler unsubscribeHandler;
private final SubscribeHandler subscribeHandler;
private final ScanHandler scanHandler;
private final WxMpProperties properties;
private final StringRedisTemplate redisTemplate;
@Bean
public WxMpService wxMpService() {

7
tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/ScanHandler.java

@ -1,12 +1,12 @@
package com.tduck.cloud.wx.mp.handler;
import com.tduck.cloud.wx.mp.handler.scan.ScanStrategyContext;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
@ -15,9 +15,10 @@ import java.util.Map;
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
@RequiredArgsConstructor
public class ScanHandler extends AbstractHandler {
@Autowired
private ScanStrategyContext scanStrategyContext;
private final ScanStrategyContext scanStrategyContext;
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map<String, Object> map,

13
tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/SubscribeHandler.java

@ -12,13 +12,13 @@ import com.tduck.cloud.wx.mp.event.WxMpUserSubscribeEvent;
import com.tduck.cloud.wx.mp.handler.scan.ScanStrategyContext;
import com.tduck.cloud.wx.mp.request.WxMpQrCodeGenRequest;
import com.tduck.cloud.wx.mp.service.WxMpUserService;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
@ -28,18 +28,17 @@ import java.util.Optional;
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
@RequiredArgsConstructor
public class SubscribeHandler extends AbstractHandler {
@Autowired
private WxMpUserService wxMpUserService;
private final WxMpUserService wxMpUserService;
@Autowired
private ScanStrategyContext scanStrategyContext;
private final ScanStrategyContext scanStrategyContext;
private final String LOGIN_STR = "login";
private String LOGIN_STR = "login";
private final String QRSCENE_STR = "qrscene_";
private String QRSCENE_STR = "qrscene_";
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,

9
tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/scan/BindAccountScanStrategy.java

@ -5,8 +5,8 @@ import com.tduck.cloud.wx.mp.entity.WxMpUserEntity;
import com.tduck.cloud.wx.mp.request.WxMpQrCodeGenRequest;
import com.tduck.cloud.wx.mp.service.WxMpUserMsgService;
import com.tduck.cloud.wx.mp.service.WxMpUserService;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
@ -15,12 +15,11 @@ import org.springframework.stereotype.Component;
* @create : 2020-12-01 17:44
**/
@Component
@RequiredArgsConstructor
public class BindAccountScanStrategy implements ScanStrategy {
@Autowired
private WxMpUserService wxMpUserService;
@Autowired
private WxMpUserMsgService wxMpUserMsgService;
private final WxMpUserService wxMpUserService;
private final WxMpUserMsgService wxMpUserMsgService;
@Override
public WxMpXmlOutMessage handle(String appId, String openId, WxMpQrCodeGenRequest request) {

13
tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/scan/LoginScanStrategy.java

@ -8,8 +8,8 @@ import com.tduck.cloud.wx.mp.entity.WxMpUserEntity;
import com.tduck.cloud.wx.mp.request.WxMpQrCodeGenRequest;
import com.tduck.cloud.wx.mp.service.WxMpUserMsgService;
import com.tduck.cloud.wx.mp.service.WxMpUserService;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
@ -20,14 +20,13 @@ import java.util.concurrent.TimeUnit;
* @create : 2020-12-01 17:44
**/
@Component
@RequiredArgsConstructor
public class LoginScanStrategy implements ScanStrategy {
@Autowired
private RedisUtils redisUtils;
@Autowired
private WxMpUserService wxMpUserService;
@Autowired
private WxMpUserMsgService wxMpUserMsgService;
private final RedisUtils redisUtils;
private final WxMpUserService wxMpUserService;
private final WxMpUserMsgService wxMpUserMsgService;
@Override
public WxMpXmlOutMessage handle(String appId, String openId, WxMpQrCodeGenRequest request) {

3
tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/scan/ScanStrategyContext.java

@ -3,6 +3,7 @@ package com.tduck.cloud.wx.mp.handler.scan;
import cn.hutool.core.util.ObjectUtil;
import com.tduck.cloud.common.util.JsonUtils;
import com.tduck.cloud.wx.mp.request.WxMpQrCodeGenRequest;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -15,9 +16,9 @@ import java.util.Map;
* @create : 2020-12-01 17:55
**/
@Component
@RequiredArgsConstructor
public class ScanStrategyContext {
@Autowired
private Map<String, ScanStrategy> scanStrategy;
private static String SCAN_STRATEGY_NAME = "ScanStrategy";

9
tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/handler/scan/SubNotifyScanStrategy.java

@ -5,8 +5,8 @@ import com.tduck.cloud.common.util.RedisUtils;
import com.tduck.cloud.wx.mp.constant.WxMpRedisKeyConstants;
import com.tduck.cloud.wx.mp.request.WxMpQrCodeGenRequest;
import com.tduck.cloud.wx.mp.service.WxMpUserMsgService;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
@ -15,12 +15,11 @@ import org.springframework.stereotype.Component;
* @create : 2020-12-01 17:44
**/
@Component
@RequiredArgsConstructor
public class SubNotifyScanStrategy implements ScanStrategy {
@Autowired
private RedisUtils redisUtils;
@Autowired
private WxMpUserMsgService wxMpUserMsgService;
private final RedisUtils redisUtils;
private final WxMpUserMsgService wxMpUserMsgService;
@Override
public WxMpXmlOutMessage handle(String appId, String openId, WxMpQrCodeGenRequest request) {

6
tduck-wx-mp/src/main/java/com/tduck/cloud/wx/mp/service/impl/WxMpUserMsgServiceImpl.java

@ -2,6 +2,7 @@ package com.tduck.cloud.wx.mp.service.impl;
import cn.hutool.core.util.StrUtil;
import com.tduck.cloud.wx.mp.service.WxMpUserMsgService;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
@ -15,11 +16,10 @@ import org.springframework.stereotype.Service;
* @create : 2020-12-02 10:36
**/
@Service
@RequiredArgsConstructor
public class WxMpUserMsgServiceImpl implements WxMpUserMsgService {
@Lazy
@Autowired
private WxMpService wxMpService;
private final WxMpService wxMpService;
@Override
public void sendKfTextMsg(String appId, String openId, String content) {

Loading…
Cancel
Save