Parcourir la source

开发了手机号登录的接口

jinshihui il y a 2 semaines
Parent
commit
a9c7d762a5

+ 42 - 7
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/WeChatController.java

@@ -13,6 +13,7 @@ import com.ylx.common.core.controller.BaseController;
 import com.ylx.common.core.domain.AjaxResult;
 import com.ylx.common.core.domain.R;
 import com.ylx.common.core.domain.model.BindPhoneBody;
+import com.ylx.common.core.domain.model.PhoneLoginBody;
 import com.ylx.common.core.domain.model.WxLoginUser;
 import com.ylx.common.core.redis.RedisCache;
 import com.ylx.common.enums.BusinessType;
@@ -309,16 +310,9 @@ public class WeChatController extends BaseController {
     @Log(title = "获取微信code", businessType = BusinessType.OTHER)
     @GetMapping("/getCode")
     public String weiXinLogin(String state) {
-//        QrConfig config = new QrConfig(300, 300);
-        // 设置边距,即二维码和背景之间的边距
-//        config.setMargin(1);
-        // 生成二维码到文件,也可以到流
         String code = weChatUtil.getCode(state);
         log.info("code的值:{}", code);
         redisCache.setCacheObject("code", state, 10, TimeUnit.MINUTES);
-
-//        QrCodeUtil.generate(code, config,
-//                FileUtil.file(IMG_PATH));
         return code;
     }
 
@@ -575,4 +569,45 @@ public class WeChatController extends BaseController {
             return fixedVerifyCode.equals(code);
         }
     }
+
+    /**
+     * 手机号登录
+     *
+     * @param phoneLoginBody 手机号登录请求参数
+     * @return R<WxLoginUser> 登录结果
+     */
+    @ApiOperation("手机号登录")
+    @PostMapping("/phoneLogin")
+    @Log(title = "手机号登录", businessType = BusinessType.OTHER)
+    public R<WxLoginUser> phoneLogin(@RequestBody PhoneLoginBody phoneLoginBody) {
+        String phone = phoneLoginBody.getPhone();
+        String code = phoneLoginBody.getCode();
+
+        // 校验验证码(验证码不为空且为6位数字在@Valid注解中已校验)
+        if (StringUtils.isEmpty(code)) {
+            return R.fail("验证码不能为空");
+        }
+
+        // 手机号登录获取用户
+        TWxUser user = wxUserService.phoneLogin(phone);
+        if (user == null) {
+            return R.fail("登录失败");
+        }
+
+        // 构建WxLoginUser
+        WxLoginUser wxUser = new WxLoginUser();
+        BeanUtils.copyProperties(user, wxUser);
+
+        // 生成并返回令牌
+        String token = wxTokenService.createToken(wxUser);
+        log.info("手机号登录生成的token值:{}", token);
+        if (StringUtils.isEmpty(token)) {
+            return R.fail("生成令牌失败");
+        }
+        wxUser.setToken(token);
+        // 记录登录信息
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(phone, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        log.info("手机号: {} 登录成功", phone);
+        return R.ok(wxUser);
+    }
 }

+ 29 - 0
nightFragrance-common/src/main/java/com/ylx/common/core/domain/model/PhoneLoginBody.java

@@ -0,0 +1,29 @@
+package com.ylx.common.core.domain.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
+
+/**
+ * 手机号登录请求类
+ *
+ * @author ylx
+ */
+@ApiModel(description = "手机号登录请求")
+@Data
+public class PhoneLoginBody {
+
+    @NotBlank(message = "手机号不能为空")
+    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
+    @ApiModelProperty(value = "手机号", required = true)
+    private String phone;
+
+    @NotBlank(message = "验证码不能为空")
+    @Pattern(regexp = "^\\d{6}$", message = "验证码必须为6位数字")
+    @ApiModelProperty(value = "验证码(6位数字)", required = true)
+    private String code;
+
+}

+ 1 - 1
nightFragrance-framework/src/main/java/com/ylx/framework/config/SecurityConfig.java

@@ -111,7 +111,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/login", "/register", "/captchaImage", "/wx/login",
                         "/api/lbt/v1/getAll", "/api/js/v1/select", "/api/xiangmu/v1/wx/getAll", "/api/order/v1/getStatus",
                         "/api/xiangmu/v1/getByid", "/api/xiangmu/v1/highlights", "/api/js/v1/wx/getByid", "/api/js/v1/wx/select", "/api/js/v1/wx/add", "/api/recharge/v1/test",
-                        "/wx/pay/payNotify", "/wx/pay/refundNotify", "/weChat/getAccessToken", "/weChat/getCode", "/weChat/verifyToken", "/sq/getAccessToken",
+                        "/wx/pay/payNotify", "/wx/pay/refundNotify", "/weChat/getAccessToken","/weChat/phoneLogin", "/weChat/getCode", "/weChat/verifyToken", "/sq/getAccessToken",
                         "/area/select", "/system/dept/list", "/api/xiangmu/v1/wx/recommend", "/product/category/create","/area/code","/product/category/list",
                         "/api/products/options","/wx/pay/query/order/{outTradeNo}","/api/products/options/service").permitAll()
                 // 静态资源,可匿名访问

+ 7 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/TWxUserService.java

@@ -34,4 +34,11 @@ public interface TWxUserService extends IService<TWxUser> {
      * @return boolean
      */
     boolean bindPhone(String openId, String phone);
+
+    /**
+     * 手机号登录
+     * @param phone 手机号
+     * @return TWxUser 登录用户
+     */
+    TWxUser phoneLogin(String phone);
 }

+ 15 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TWxUserServiceImpl.java

@@ -61,4 +61,19 @@ public class TWxUserServiceImpl extends ServiceImpl<TWxUserMapper, TWxUser> impl
         user.setcPhone(phone);
         return updateById(user);
     }
+
+    @Override
+    public TWxUser phoneLogin(String phone) {
+        // 根据手机号查询用户
+        TWxUser user = getByPhone(phone);
+        // 如果用户不存在,则创建新用户
+        if (user == null) {
+            user = new TWxUser();
+            user.setcPhone(phone);
+            // 设置默认角色为普通用户
+            user.setRole(0);
+            save(user);
+        }
+        return user;
+    }
 }