Parcourir la source

Merge remote-tracking branch 'origin/store-plantform' into store-plantform

zjy il y a 1 mois
Parent
commit
22d5ef8e93

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/config/JwtTokenFilter.java

@@ -114,7 +114,7 @@ public class JwtTokenFilter implements GlobalFilter, Ordered {
                 }
                 String redisVal = baseRedisService.getString(redisKey);
                 if (StringUtils.isEmpty(redisVal) || !token.equals(redisVal)) {
-                    if ("store".equals(deviceType)) {
+                    if ("store".equals(deviceType) || "storePlatform".equals(deviceType)) {
                         //判断程序是否为用户禁用
                         StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getPhone, phone));
                         if (storeUser.getStatus() == 1) {

+ 5 - 0
alien-store-platform/pom.xml

@@ -270,6 +270,11 @@
             <artifactId>spring-boot-starter-webflux</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-captcha</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 33 - 7
alien-store-platform/src/main/java/shop/alien/storeplatform/controller/StorePlatformLoginController.java

@@ -12,11 +12,13 @@ import shop.alien.entity.store.vo.StoreUserVo;
 import shop.alien.mapper.StoreUserMapper;
 import shop.alien.storeplatform.service.StorePlatformLoginervice;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.Objects;
 import java.util.Optional;
 
 @Slf4j
-@Api(tags = {"商户平台-用户管理"})
+@Api(tags = {"商户平台-注册登录"})
 @ApiSort(1)
 @CrossOrigin
 @RestController
@@ -68,8 +70,13 @@ public class StorePlatformLoginController {
             @ApiImplicitParam(name = "code", value = "验证码", dataType = "String", paramType = "query", required = true)
     })
     @GetMapping("/login")
-    public R<StoreUserVo> login(@RequestParam("phone") String phone, @RequestParam("password") String password, @RequestParam("isPassword") Boolean isPassword, @RequestParam("code") String code) {
-        log.info("StorePlatformLoginController.login?phone={}&password={}&isPassword={}&code={}", phone, password, isPassword, code);
+    public R<StoreUserVo> login(
+            @RequestParam("phone") String phone,
+            @RequestParam("password") String password,
+            @RequestParam("isPassword") Boolean isPassword,
+            @RequestParam("code") String code,
+            @RequestParam("captcha") String captcha) {
+        log.info("StorePlatformLoginController.login?phone={}&password={}&isPassword={}&code={}&captcha={}", phone, password, isPassword, code, captcha);
         if (!isPassword) {
             // 2025-11-04 验证码-商户端登录
             String cacheCode = baseRedisService.getString("verification_store_platform_login_" + phone);
@@ -79,7 +86,16 @@ public class StorePlatformLoginController {
             if (!cacheCode.trim().equals(code.trim())) {
                 return R.fail("验证码错误");
             }
+        } else {
+            String cacheCode = baseRedisService.getString("store_platform_captcha_" + phone);
+            if (null == cacheCode) {
+                return R.fail("验证码已过期");
+            }
+            if (!cacheCode.trim().equals(captcha.trim())) {
+                return R.fail("验证码错误");
+            }
         }
+
         StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>()
                 .eq(StoreUser::getPhone, phone));
         if (null == storeUser) {
@@ -88,11 +104,18 @@ public class StorePlatformLoginController {
         if (storeUser.getStatus() == 1) {
             return R.fail("账号被禁用");
         }
+
         return Optional.ofNullable(storeUser).
                 map(user -> isPassword ? checkPassword(user, password) : storePlatformLoginService.createToKen(user)).
                 orElseGet(() -> R.fail("手机号不存在"));
     }
 
+    private R<StoreUserVo> checkPassword(StoreUser user, String password) {
+        return Objects.equals(password, user.getPassword())
+                ? storePlatformLoginService.createToKen(user)
+                : R.fail("密码错误");
+    }
+
     @ApiOperation("忘记密码/修改密码/更换绑定手机号")
     @ApiOperationSupport(order = 4)
     @ApiImplicitParams({
@@ -130,10 +153,13 @@ public class StorePlatformLoginController {
         return storePlatformLoginService.forgetOrModifyPassword(phone, newPhone, oldPassword, newPassword, confirmNewPassword, verificationCode, type);
     }
 
-    private R<StoreUserVo> checkPassword(StoreUser user, String password) {
-        return Objects.equals(password, user.getPassword())
-                ? storePlatformLoginService.createToKen(user)
-                : R.fail("密码错误");
+    @ApiOperation("生成验证码")
+    @ApiOperationSupport(order = 5)
+    @ApiImplicitParams({@ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true)})
+    @GetMapping("/generateCaptcha")
+    public void generateCaptcha(HttpServletResponse response, String phone) throws IOException {
+        log.info("StorePlatformLoginController.generateCaptcha?phone={}", phone);
+        storePlatformLoginService.generateCaptcha(response, phone);
     }
 
 }

+ 5 - 0
alien-store-platform/src/main/java/shop/alien/storeplatform/service/StorePlatformLoginervice.java

@@ -4,6 +4,9 @@ import shop.alien.entity.result.R;
 import shop.alien.entity.store.StoreUser;
 import shop.alien.entity.store.vo.StoreUserVo;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
 public interface StorePlatformLoginervice {
 
     R<Boolean> register(String phone, String password);
@@ -24,4 +27,6 @@ public interface StorePlatformLoginervice {
      */
     R<String> forgetOrModifyPassword(String phone, String newPhone, String oldPassword, String newPassword,String confirmNewPassword,String verificationCode,  Integer type);
 
+    void generateCaptcha(HttpServletResponse response, String phone) throws IOException;
+
 }

+ 31 - 13
alien-store-platform/src/main/java/shop/alien/storeplatform/service/impl/StorePlatformLoginServiceImpl.java

@@ -1,5 +1,7 @@
 package shop.alien.storeplatform.service.impl;
 
+import cn.hutool.captcha.CaptchaUtil;
+import cn.hutool.captcha.LineCaptcha;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -8,6 +10,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import shop.alien.config.redis.BaseRedisService;
@@ -21,16 +24,22 @@ import shop.alien.storeplatform.service.StorePlatformLoginervice;
 import shop.alien.util.common.DateUtils;
 import shop.alien.util.common.JwtUtil;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.*;
 
 @Slf4j
 @Service
 @RequiredArgsConstructor
+@RefreshScope
 public class StorePlatformLoginServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser> implements StorePlatformLoginervice {
 
     @Value("${jwt.expiration-time}")
     private String effectiveTime;
 
+    @Value("${captcha.register.timeOut}")
+    private Long timeOut;
+
     private final StoreUserMapper storeUserMapper;
     private final StoreInfoMapper storeInfoMapper;
     private final BaseRedisService baseRedisService;
@@ -60,6 +69,20 @@ public class StorePlatformLoginServiceImpl extends ServiceImpl<StoreUserMapper,
         return R.success("操作成功");
     }
 
+    private void saveNewUser(String phone, String password) {
+        StoreUser registerStoreUser = new StoreUser();
+        registerStoreUser.setPhone(phone);
+        registerStoreUser.setPassword(password);
+        registerStoreUser.setMoney(0);
+        registerStoreUser.setDeleteFlag(0);
+        registerStoreUser.setStatus(0);
+        registerStoreUser.setPassType(2);
+        registerStoreUser.setCreatedTime(new Date());
+        registerStoreUser.setLogoutFlag(0);
+        registerStoreUser.setNickName(phone);
+        storeUserMapper.insert(registerStoreUser);
+    }
+
     public boolean checkRegister(String phone) {
         LambdaQueryWrapper<StoreUser> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(StoreUser::getPhone, phone);
@@ -98,7 +121,7 @@ public class StorePlatformLoginServiceImpl extends ServiceImpl<StoreUserMapper,
         tokenMap.put("phone", storeUser.getPhone());
         tokenMap.put("userName", storeUser.getName());
         tokenMap.put("userId", storeUser.getId().toString());
-        tokenMap.put("userType", "store");
+        tokenMap.put("userType", "storePlatform");
         storeUserVo.setToken(JwtUtil.createJWT("store_platform_" + storeUser.getPhone(), storeUser.getName(), JSONObject.toJSONString(tokenMap), effectiveTimeIntLong));
         baseRedisService.setString("store_platform_" + storeUser.getPhone(), storeUserVo.getToken());
         StoreInfo storeInfo = storeInfoMapper.selectById(storeUser.getStoreId());
@@ -149,18 +172,13 @@ public class StorePlatformLoginServiceImpl extends ServiceImpl<StoreUserMapper,
         }
     }
 
-    private void saveNewUser(String phone, String password) {
-        StoreUser registerStoreUser = new StoreUser();
-        registerStoreUser.setPhone(phone);
-        registerStoreUser.setPassword(password);
-        registerStoreUser.setMoney(0);
-        registerStoreUser.setDeleteFlag(0);
-        registerStoreUser.setStatus(0);
-        registerStoreUser.setPassType(2);
-        registerStoreUser.setCreatedTime(new Date());
-        registerStoreUser.setLogoutFlag(0);
-        registerStoreUser.setNickName(phone);
-        storeUserMapper.insert(registerStoreUser);
+    @Override
+    public void generateCaptcha(HttpServletResponse response, String phone) throws IOException {
+        LineCaptcha captcha = CaptchaUtil.createLineCaptcha(200, 100, 4, 100);
+        baseRedisService.setString("store_platform_captcha_" + phone, captcha.getCode(), timeOut);
+        response.setContentType("image/png");
+        response.setHeader("Pragma", "No-cache");
+        captcha.write(response.getOutputStream());
     }
 
     private void passwordVerification(String phone, String password, String newPassword, String confirmNewPassword) {

+ 1 - 1
alien-store/src/main/java/shop/alien/store/controller/AliController.java

@@ -139,7 +139,7 @@ public class AliController {
     @ApiOperationSupport(order = 4)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true),
-            @ApiImplicitParam(name = "appType", value = "端区分(0:用户, 1:商家)", dataType = "Integer", paramType = "query", required = true, defaultValue = "0"),
+            @ApiImplicitParam(name = "appType", value = "端区分(0:用户, 1:商家, 2:商家web端)", dataType = "Integer", paramType = "query", required = true, defaultValue = "0"),
             @ApiImplicitParam(name = "businessType", value = "业务类型 (0:登录, 1:修改密码, 2:注册, 3:修改手机号, 4:注销店铺, 5:注销账号, 6:忘记密码)", dataType = "Integer", paramType = "query", required = true, defaultValue = "0")
     })
     @GetMapping("/sendSms")

+ 1 - 1
alien-store/src/main/java/shop/alien/store/controller/WebSocketController.java

@@ -52,7 +52,7 @@ public class WebSocketController {
     @GetMapping(value = "/getTokenStatus")
     public R<Boolean> getTokenStatus() {
         String phoneId = Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getString("userType") + "_" + JwtUtil.getCurrentUserInfo().getString("phone");
-        log.info("WebSocketController.getTokenStatus()----------phoneId={}", phoneId);
+//        log.info("WebSocketController.getTokenStatus()----------phoneId={}", phoneId);
         return R.data(true);
     }
 

+ 1 - 1
alien-store/src/main/java/shop/alien/store/util/ali/AliSms.java

@@ -60,7 +60,7 @@ public class AliSms {
     public Integer sendSms(String phone, Integer appType, Integer businessType) {
         log.info("AliSmsConfig.sendSms?phone={}&appType={}&businessType={}", phone, appType, businessType);
         try {
-            String appTypeStr = appType == 0 ? "user" : "store";
+            String appTypeStr = appType == 0 ? "user" : (appType == 1 ? "store" : "store_platform");
             String businessTypeStr;
             switch (businessType) {
                 case 0:

+ 6 - 0
pom.xml

@@ -367,6 +367,12 @@
                 <version>2.3.3</version>
             </dependency>
 
+            <dependency>
+                <groupId>cn.hutool</groupId>
+                <artifactId>hutool-captcha</artifactId>
+                <version>5.8.18</version>
+            </dependency>
+
             <!--Other End-->
         </dependencies>
     </dependencyManagement>