瀏覽代碼

feat:微信公众号用户关注则创建新用户

陈长荣 5 月之前
父節點
當前提交
badd82300b

+ 5 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/alarmuser/service/AlarmUserService.java

@@ -99,4 +99,9 @@ public interface AlarmUserService extends IService<AlarmUser> {
      * 取消关注微信号
      */
     void unsubscribe(String openid);
+
+    /**
+     * 根据openId获取用户信息
+     */
+    List<AlarmUser> getByOpenId(String openId);
 }

+ 19 - 7
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/alarmuser/service/impl/AlarmUserServiceImpl.java

@@ -262,12 +262,23 @@ public class AlarmUserServiceImpl extends ServiceImpl<AlarmUserMapper, AlarmUser
     @Override
     public AlarmUser subscribe(String openid) {
         log.info("用户关注公众号 openid={}", openid);
+
+        List<AlarmUser> users = getByOpenId(openid);
+        if (users.isEmpty()) {
+            //创建用户
+            AlarmUser alarmUser = new AlarmUser();
+            alarmUser.setOpenId(openid);
+            alarmUser.setSubscribed(AlarmUserEnum.SUBSCRIBE.getValue());
+            save(alarmUser);
+            createSysUser(alarmUser, null, null);
+            return alarmUser;
+        }
+
+        //更新用户关注标志
         AlarmUser alarmUser = new AlarmUser();
         alarmUser.setSubscribed(AlarmUserEnum.SUBSCRIBE.getValue());
         update(alarmUser, new LambdaUpdateWrapper<>(AlarmUser.class).eq(AlarmUser::getOpenId, openid));
-
-        List<AlarmUser> users = getByOpenId(openid);
-        return users.isEmpty() ? null : users.get(0);
+        return users.get(0);
     }
 
     @Override
@@ -278,10 +289,11 @@ public class AlarmUserServiceImpl extends ServiceImpl<AlarmUserMapper, AlarmUser
         update(alarmUser, new LambdaUpdateWrapper<>(AlarmUser.class).eq(AlarmUser::getOpenId, openid));
     }
 
-    private List<AlarmUser> getByOpenId(String openId) {
-        LambdaQueryWrapper<AlarmUser> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(AlarmUser::getOpenId, openId)
-                .eq(AlarmUser::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE);
+    public List<AlarmUser> getByOpenId(String openId) {
+        LambdaQueryWrapper<AlarmUser> queryWrapper = new LambdaQueryWrapper<>(AlarmUser.class)
+                .eq(AlarmUser::getOpenId, openId)
+                .eq(AlarmUser::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE)
+                .orderByDesc(AlarmUser::getCreateTime);
         return list(queryWrapper);
     }
 

+ 3 - 13
snowy-web-app/src/main/java/vip/xiaonuo/weixin/gongzhong/controller/WxMpController.java

@@ -3,7 +3,6 @@ package vip.xiaonuo.weixin.gongzhong.controller;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
@@ -17,7 +16,6 @@ import vip.xiaonuo.coldchain.modular.alarmuser.entity.AlarmUser;
 import vip.xiaonuo.coldchain.modular.alarmuser.service.AlarmUserService;
 import vip.xiaonuo.coldchain.modular.push.entity.WeChatUser;
 import vip.xiaonuo.coldchain.modular.push.utils.PushUtil;
-import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
 import vip.xiaonuo.dev.modular.config.service.DevConfigService;
 
 import java.util.List;
@@ -54,16 +52,14 @@ public class WxMpController {
         WeChatUser weChatUser = PushUtil.getUserInfo(code);
         log.info("获取用户信息:{}", JSONUtil.toJsonStr(weChatUser));
 
-        List<AlarmUser> userList = alarmUserService.list(new LambdaQueryWrapper<>(AlarmUser.class)
-                .eq(AlarmUser::getOpenId, weChatUser.getOpenid())
-                .eq(AlarmUser::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE)
-                .orderByDesc(AlarmUser::getCreateTime));
+        List<AlarmUser> userList = alarmUserService.getByOpenId(weChatUser.getOpenid());
         AlarmUser alarmUser;
 
         if (CollUtil.isNotEmpty(userList)) {
             //检查用户的组织机构
             long count = userList.stream().filter(x -> StrUtil.isNotBlank(x.getCreateOrg())).count();
             if (count > 0) {
+                //进入授权页面
                 String redirect = devConfigService.getValueByKey("wx_front_authed_page");
                 if (StrUtil.isNotBlank(redirect)) {
                     response.sendRedirect(redirect);
@@ -76,13 +72,7 @@ public class WxMpController {
             alarmUser = userList.get(0);
         } else {
             //没有用户信息则创建用户
-            alarmUserService.getUserInfo(code, null, null);
-            alarmUser = alarmUserService.getOne(new LambdaQueryWrapper<>(AlarmUser.class)
-                    .eq(AlarmUser::getOpenId, weChatUser.getOpenid())
-                    .isNull(AlarmUser::getCreateOrg)
-                    .eq(AlarmUser::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE)
-                    .orderByDesc(AlarmUser::getCreateTime)
-                    .last("limit 1"));
+            alarmUser = alarmUserService.subscribe(weChatUser.getOpenid());
         }
 
         String redirect = devConfigService.getValueByKey("wx_front_not_auth_page") + "?id=" + alarmUser.getId();