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. 11
      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.account.vo.LoginUserVO;
import com.tduck.cloud.common.util.RedisUtils; import com.tduck.cloud.common.util.RedisUtils;
import com.tduck.cloud.common.util.Result; import com.tduck.cloud.common.util.Result;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -35,17 +35,16 @@ import java.time.LocalDateTime;
* @author smalljop * @author smalljop
* @since 2020-11-10 18:10:43 * @since 2020-11-10 18:10:43
*/ */
@Service("userService")
@Slf4j @Slf4j
@Service("userService")
@RequiredArgsConstructor
public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements UserService { public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements UserService {
@Autowired private final JwtUtils jwtUtils;
private JwtUtils jwtUtils; private final RedisUtils redisUtils;
@Autowired private final UserAuthorizeService userAuthorizeService;
private RedisUtils redisUtils;
@Autowired
private UserAuthorizeService userAuthorizeService;
@Override @Override
@ -82,7 +81,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> impleme
/** /**
* 创建用户 * 创建用户
* *
* @param userEntity
*/ */
private void createUser(UserEntity userEntity) { private void createUser(UserEntity userEntity) {
userEntity.setName(NameUtils.getCnName()); userEntity.setName(NameUtils.getCnName());
@ -94,7 +92,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> impleme
@Override @Override
public Result accountLogin(AccountLoginRequest request) { public Result accountLogin(AccountLoginRequest request) {
UserEntity userEntity = null; UserEntity userEntity;
if (ReUtil.isMatch(Validator.EMAIL, request.getAccount())) { if (ReUtil.isMatch(Validator.EMAIL, request.getAccount())) {
userEntity = getUserByEmail(request.getAccount()); userEntity = getUserByEmail(request.getAccount());
} else { } else {
@ -112,10 +110,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> impleme
/** /**
* 获取登录结果 * 获取登录结果
* *
* @param userEntity
* @param channel
* @param requestIp
* @return
*/ */
@Override @Override
public LoginUserVO getLoginResult(UserEntity userEntity, AccountChannelEnum channel, String requestIp) { public LoginUserVO getLoginResult(UserEntity userEntity, AccountChannelEnum channel, String requestIp) {
@ -145,8 +139,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> impleme
/** /**
* 根据邮箱获取 * 根据邮箱获取
*
* @return
*/ */
@Override @Override
public UserEntity getUserByEmail(final String email) { 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; import java.util.List;
/** /**
* web mvc 配置
*
* @author smalljop * @author smalljop
*/ */
@Configuration @Configuration
public class WebMvcConfig implements WebMvcConfigurer { public class WebMvcConfig implements WebMvcConfigurer {
/**
* html静态资源 js静态资源 css静态资源
*/
private final List<String> staticResources = Lists.newArrayList("/**/*.html",
"/**/*.js",
"/**/*.css",
"/**/*.woff",
"/**/*.ttf");
@Autowired @Autowired
private OssStorageConfig storageConfig; private OssStorageConfig storageConfig;
@Autowired @Autowired
private AuthorizationInterceptor authorizationInterceptor; private AuthorizationInterceptor authorizationInterceptor;
@Autowired @Autowired
private NoRepeatSubmitInterceptor noRepeatSubmitInterceptor; private NoRepeatSubmitInterceptor noRepeatSubmitInterceptor;
@Autowired @Autowired
private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver; private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver;
//html静态资源 js静态资源 css静态资源
private final List<String> staticResources = Lists.newArrayList("/**/*.html",
"/**/*.js",
"/**/*.css",
"/**/*.woff",
"/**/*.ttf");
/** /**
* 配置本地文件上传的虚拟路径和静态化的文件生成路径 * 配置本地文件上传的虚拟路径和静态化的文件生成路径
* 备注这是一种图片上传访问图片的方法实际上也可以使用nginx反向代理访问图片 * 备注这是一种图片上传访问图片的方法实际上也可以使用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.event.WxMpUserSubscribeEvent;
import com.tduck.cloud.wx.mp.handler.scan.LoginScanStrategy; import com.tduck.cloud.wx.mp.handler.scan.LoginScanStrategy;
import com.tduck.cloud.wx.mp.service.WxMpUserService; import com.tduck.cloud.wx.mp.service.WxMpUserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
* @author : smalljop * @author : smalljop
* @description : * @description : 微信订阅事件处理
* @create : 2020-12-01 18:37 * @create : 2020-12-01 18:37
**/ **/
@Component
@Slf4j @Slf4j
@Component
@RequiredArgsConstructor
public class WxMpUserSubscribeEventHandler { public class WxMpUserSubscribeEventHandler {
@Autowired
private UserService userService; private UserService userService;
@Autowired
private WxMpUserService wxMpUserService; private WxMpUserService wxMpUserService;
@Autowired private final LoginScanStrategy loginScanStrategy;
private LoginScanStrategy loginScanStrategy;
@EventListener @EventListener
public void onWxMpUserSubscribe(WxMpUserSubscribeEvent event) { 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.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket; import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -71,9 +70,8 @@ public class UserProjectController {
private final ProjectTemplateItemService projectTemplateItemService; private final ProjectTemplateItemService projectTemplateItemService;
private final WxMpUserService wxMpUserService; private final WxMpUserService wxMpUserService;
private final RedisUtils redisUtils; 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 @Component
public class AuthorizationInterceptor extends HandlerInterceptorAdapter { public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
@Autowired private final JwtUtils jwtUtils;
private JwtUtils jwtUtils;
public static final String USER_KEY = "userId"; public static final String USER_KEY = "userId";
public AuthorizationInterceptor(JwtUtils jwtUtils) {
this.jwtUtils = jwtUtils;
}
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Login annotation; 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.account.service.UserService;
import com.tduck.cloud.api.annotation.LoginUser; import com.tduck.cloud.api.annotation.LoginUser;
import com.tduck.cloud.api.web.interceptor.AuthorizationInterceptor; import com.tduck.cloud.api.web.interceptor.AuthorizationInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.bind.support.WebDataBinderFactory;
@ -19,8 +18,11 @@ import org.springframework.web.method.support.ModelAndViewContainer;
*/ */
@Component @Component
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Autowired private final UserService userService;
private UserService userService;
public LoginUserHandlerMethodArgumentResolver(UserService userService) {
this.userService = userService;
}
@Override @Override
public boolean supportsParameter(MethodParameter parameter) { 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: application:
name: tduck-api name: tduck-api
profiles: profiles:
active: dev active: dev1
jackson: jackson:
time-zone: GMT+8 time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss
@ -16,7 +16,7 @@ spring:
max-request-size: 100MB max-request-size: 100MB
server: server:
port: 8999 port: 8978
servlet: servlet:
context-path: /tduck-api 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 <T>
* @param condition 条件 * @param condition 条件
* @param column 列表 * @param column 列表
* @param jsonKey * @param jsonKey 需查询可以
* @param value * @param value 等于值
* @return * @return
*/ */
public <T> JsonLambdaQueryWrapper<T> jsonConcat(boolean condition, String column, String jsonKey, Object value) { 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 cn.hutool.core.convert.Convert;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.*; import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -11,14 +10,19 @@ import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
* Created by Dell on 23/09/2018. *
* @author smalljop
* @date 23/09/2018
*/ */
@Component @Component
@Slf4j @Slf4j
public class RedisUtils { public class RedisUtils {
@Autowired private final RedisTemplate<String, Object> redisTemplate;
private 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; 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; package com.tduck.cloud.wx.mp.config;
import com.tduck.cloud.wx.mp.handler.*; import com.tduck.cloud.wx.mp.handler.*;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps; import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
import me.chanjar.weixin.common.redis.WxRedisOps; import me.chanjar.weixin.common.redis.WxRedisOps;
import me.chanjar.weixin.mp.api.WxMpMessageRouter; 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.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl; import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl; 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.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; 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) * @author Binary Wang(https://github.com/binarywang)
*/ */
@Configuration @Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(WxMpProperties.class) @EnableConfigurationProperties(WxMpProperties.class)
public class WxMpConfiguration { public class WxMpConfiguration {
@Autowired private final LogHandler logHandler;
private LogHandler logHandler; private final NullHandler nullHandler;
@Autowired private final KfSessionHandler kfSessionHandler;
private NullHandler nullHandler; private final StoreCheckNotifyHandler storeCheckNotifyHandler;
@Autowired private final LocationHandler locationHandler;
private KfSessionHandler kfSessionHandler; private final MenuHandler menuHandler;
@Autowired private final MsgHandler msgHandler;
private StoreCheckNotifyHandler storeCheckNotifyHandler; private final UnsubscribeHandler unsubscribeHandler;
@Autowired private final SubscribeHandler subscribeHandler;
private LocationHandler locationHandler; private final ScanHandler scanHandler;
@Autowired private final WxMpProperties properties;
private MenuHandler menuHandler; private final StringRedisTemplate redisTemplate;
@Autowired
private MsgHandler msgHandler;
@Autowired
private UnsubscribeHandler unsubscribeHandler;
@Autowired
private SubscribeHandler subscribeHandler;
@Autowired
private ScanHandler scanHandler;
@Autowired
private WxMpProperties properties;
@Autowired
private StringRedisTemplate redisTemplate;
@Bean @Bean
public WxMpService wxMpService() { 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; package com.tduck.cloud.wx.mp.handler;
import com.tduck.cloud.wx.mp.handler.scan.ScanStrategyContext; import com.tduck.cloud.wx.mp.handler.scan.ScanStrategyContext;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Map; import java.util.Map;
@ -15,9 +15,10 @@ import java.util.Map;
* @author Binary Wang(https://github.com/binarywang) * @author Binary Wang(https://github.com/binarywang)
*/ */
@Component @Component
@RequiredArgsConstructor
public class ScanHandler extends AbstractHandler { public class ScanHandler extends AbstractHandler {
@Autowired
private ScanStrategyContext scanStrategyContext; private final ScanStrategyContext scanStrategyContext;
@Override @Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map<String, Object> map, 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.handler.scan.ScanStrategyContext;
import com.tduck.cloud.wx.mp.request.WxMpQrCodeGenRequest; import com.tduck.cloud.wx.mp.request.WxMpQrCodeGenRequest;
import com.tduck.cloud.wx.mp.service.WxMpUserService; import com.tduck.cloud.wx.mp.service.WxMpUserService;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.result.WxMpUser; import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Map; import java.util.Map;
@ -28,18 +28,17 @@ import java.util.Optional;
* @author Binary Wang(https://github.com/binarywang) * @author Binary Wang(https://github.com/binarywang)
*/ */
@Component @Component
@RequiredArgsConstructor
public class SubscribeHandler extends AbstractHandler { public class SubscribeHandler extends AbstractHandler {
@Autowired private final WxMpUserService wxMpUserService;
private WxMpUserService wxMpUserService;
@Autowired private final ScanStrategyContext scanStrategyContext;
private 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 @Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, 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.request.WxMpQrCodeGenRequest;
import com.tduck.cloud.wx.mp.service.WxMpUserMsgService; import com.tduck.cloud.wx.mp.service.WxMpUserMsgService;
import com.tduck.cloud.wx.mp.service.WxMpUserService; import com.tduck.cloud.wx.mp.service.WxMpUserService;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
@ -15,12 +15,11 @@ import org.springframework.stereotype.Component;
* @create : 2020-12-01 17:44 * @create : 2020-12-01 17:44
**/ **/
@Component @Component
@RequiredArgsConstructor
public class BindAccountScanStrategy implements ScanStrategy { public class BindAccountScanStrategy implements ScanStrategy {
@Autowired private final WxMpUserService wxMpUserService;
private WxMpUserService wxMpUserService; private final WxMpUserMsgService wxMpUserMsgService;
@Autowired
private WxMpUserMsgService wxMpUserMsgService;
@Override @Override
public WxMpXmlOutMessage handle(String appId, String openId, WxMpQrCodeGenRequest request) { 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.request.WxMpQrCodeGenRequest;
import com.tduck.cloud.wx.mp.service.WxMpUserMsgService; import com.tduck.cloud.wx.mp.service.WxMpUserMsgService;
import com.tduck.cloud.wx.mp.service.WxMpUserService; import com.tduck.cloud.wx.mp.service.WxMpUserService;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -20,14 +20,13 @@ import java.util.concurrent.TimeUnit;
* @create : 2020-12-01 17:44 * @create : 2020-12-01 17:44
**/ **/
@Component @Component
@RequiredArgsConstructor
public class LoginScanStrategy implements ScanStrategy { public class LoginScanStrategy implements ScanStrategy {
@Autowired private final RedisUtils redisUtils;
private RedisUtils redisUtils; private final WxMpUserService wxMpUserService;
@Autowired private final WxMpUserMsgService wxMpUserMsgService;
private WxMpUserService wxMpUserService;
@Autowired
private WxMpUserMsgService wxMpUserMsgService;
@Override @Override
public WxMpXmlOutMessage handle(String appId, String openId, WxMpQrCodeGenRequest request) { 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 cn.hutool.core.util.ObjectUtil;
import com.tduck.cloud.common.util.JsonUtils; import com.tduck.cloud.common.util.JsonUtils;
import com.tduck.cloud.wx.mp.request.WxMpQrCodeGenRequest; import com.tduck.cloud.wx.mp.request.WxMpQrCodeGenRequest;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -15,9 +16,9 @@ import java.util.Map;
* @create : 2020-12-01 17:55 * @create : 2020-12-01 17:55
**/ **/
@Component @Component
@RequiredArgsConstructor
public class ScanStrategyContext { public class ScanStrategyContext {
@Autowired
private Map<String, ScanStrategy> scanStrategy; private Map<String, ScanStrategy> scanStrategy;
private static String SCAN_STRATEGY_NAME = "ScanStrategy"; private static String SCAN_STRATEGY_NAME = "ScanStrategy";

11
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.constant.WxMpRedisKeyConstants;
import com.tduck.cloud.wx.mp.request.WxMpQrCodeGenRequest; import com.tduck.cloud.wx.mp.request.WxMpQrCodeGenRequest;
import com.tduck.cloud.wx.mp.service.WxMpUserMsgService; import com.tduck.cloud.wx.mp.service.WxMpUserMsgService;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
@ -15,16 +15,15 @@ import org.springframework.stereotype.Component;
* @create : 2020-12-01 17:44 * @create : 2020-12-01 17:44
**/ **/
@Component @Component
@RequiredArgsConstructor
public class SubNotifyScanStrategy implements ScanStrategy { public class SubNotifyScanStrategy implements ScanStrategy {
@Autowired private final RedisUtils redisUtils;
private RedisUtils redisUtils; private final WxMpUserMsgService wxMpUserMsgService;
@Autowired
private WxMpUserMsgService wxMpUserMsgService;
@Override @Override
public WxMpXmlOutMessage handle(String appId, String openId, WxMpQrCodeGenRequest request) { public WxMpXmlOutMessage handle(String appId, String openId, WxMpQrCodeGenRequest request) {
redisUtils.add(StrUtil.format(WxMpRedisKeyConstants.WX_MP_SUB_NOTIFY,request.getData()), openId); redisUtils.add(StrUtil.format(WxMpRedisKeyConstants.WX_MP_SUB_NOTIFY, request.getData()), openId);
wxMpUserMsgService.sendKfTextMsg(appId, openId, "订阅通知成功"); wxMpUserMsgService.sendKfTextMsg(appId, openId, "订阅通知成功");
return null; return null;
} }

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

Loading…
Cancel
Save