From dd57216f8ffe4a885a6ccfce2fd6d8e0d16ec83f Mon Sep 17 00:00:00 2001
From: puhanshu <a9236326>
Date: 星期四, 13 一月 2022 14:33:52 +0800
Subject: [PATCH] 商业街授权登录

---
 springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java |   86 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 83 insertions(+), 3 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java
index 29f7924..f770fef 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java
@@ -16,7 +16,10 @@
 import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
+import javax.validation.constraints.NotBlank;
 
+import com.alibaba.fastjson.JSONObject;
+import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO;
 import com.panzhihua.common.model.vos.community.microCommercialStreet.McsLoginUserInfoVO;
 import org.apache.commons.lang.time.DateFormatUtils;
 import org.apache.commons.lang.time.DateUtils;
@@ -139,6 +142,9 @@
 @Slf4j
 @Service
 public class UserServiceImpl implements UserService {
+
+    private static final String DEFAULT_IMAGE_URL = "https://www.psciio.com//idcard/91313573d071436ab1f934231b31c6e5.jpg";
+
     @Resource
     private UserDao userDao;
     @Resource
@@ -2925,7 +2931,7 @@
     }
 
     /**
-     * 发送验证码登录
+     * 发送验证码
      * @param phone 手机号
      * @param clientIP 用户ip
      * @param prefixKey redis Key 前缀
@@ -2934,13 +2940,13 @@
      * @return
      */
     @Override
-    public R sendMessageCodeForLogin(String phone, String clientIP, String prefixKey, Integer limit, Integer timeout) {
+    public R sendMessageCode(String phone, String clientIP, String prefixKey, Integer limit, Integer timeout) {
         ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();
         if (isNotBlank(clientIP)) {
             String redisKey = String.join("::", prefixKey, clientIP);
             Long increment = opsForValue.increment(redisKey, 1);
             if (increment > limit) {
-                return R.fail("请求频繁,请稍后再试");
+                return R.fail(String.format("请求过于频繁,请%d分钟后再次尝试!", timeout/60));
             }
             stringRedisTemplate.expire(redisKey, timeout, TimeUnit.SECONDS);
         }
@@ -2958,4 +2964,78 @@
         }
         return R.fail();
     }
+
+    /**
+     * 根据openId获取微商业街用户
+     * @param openid
+     * @return
+     */
+    @Override
+    public R getMcsUserByOpenId(String openid) {
+        SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getOpenid, openid).eq(SysUserDO::getType, 11));
+        McsLoginUserInfoVO loginUserInfoVO = null;
+        if (nonNull(sysUserDO)) {
+            loginUserInfoVO = new McsLoginUserInfoVO();
+            BeanUtils.copyProperties(sysUserDO, loginUserInfoVO);
+        }
+        return R.ok(loginUserInfoVO);
+    }
+
+    /**
+     * 商业街用户微信授权-绑定手机号
+     * @param bindUserPhoneDTO
+     * @return
+     */
+    @Override
+    public R bindOrAddMcsUser(BindUserPhoneDTO bindUserPhoneDTO) {
+        String phone = bindUserPhoneDTO.getPhone();
+        String openId = bindUserPhoneDTO.getOpenId();
+        String redisKey = String.join("::", phone, bindUserPhoneDTO.getCode());
+        Boolean hasKey = stringRedisTemplate.hasKey(redisKey);
+        if (hasKey) {
+            //通过验证
+            SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone, phone).eq(SysUserDO::getType, 11));
+            if (nonNull(sysUserDO)) {
+                //已有用户
+                sysUserDO.setOpenid(openId);
+                int result = userDao.updateById(sysUserDO);
+                if (result > 0) {
+                    McsLoginUserInfoVO loginUserInfoVO = new McsLoginUserInfoVO();
+                    BeanUtils.copyProperties(sysUserDO, loginUserInfoVO);
+                    stringRedisTemplate.delete(redisKey);
+                    return R.ok(loginUserInfoVO);
+                }
+                return R.fail("绑定失败,请重试");
+            } else {
+                //自动创建用户
+                McsMerchantDTO mcsMerchantDTO = new McsMerchantDTO();
+                mcsMerchantDTO.setAccount(phone);
+                mcsMerchantDTO.setPassword("88888888");
+                mcsMerchantDTO.setAccountStatus(1);
+                mcsMerchantDTO.setPhone(phone);
+                mcsMerchantDTO.setName("用户" + retrieveRandomCode(5));
+                mcsMerchantDTO.setImageUrl(DEFAULT_IMAGE_URL);
+                mcsMerchantDTO.setOpenId(openId);
+                R addUserResult = addMcsMerchantUser(mcsMerchantDTO);
+                if (R.isOk(addUserResult)) {
+                    McsLoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(addUserResult.getData()), McsLoginUserInfoVO.class);
+                    loginUserInfoVO.setPlaintextPassword("88888888");
+                    stringRedisTemplate.delete(redisKey);
+                    return R.ok(loginUserInfoVO);
+                }
+                return addUserResult;
+            }
+        } else {
+            return R.fail("验证码错误");
+        }
+    }
+
+    private String retrieveRandomCode(int length) {
+        Random r = new Random();
+        StringBuilder rs = new StringBuilder();
+        for (int i = 0; i < length; i++) {
+            rs.append(r.nextInt(10));
+        }
+        return rs.toString();
+    }
 }

--
Gitblit v1.7.1