From 161e27e08b1495c04cd3f35906c1d7dd873f1d60 Mon Sep 17 00:00:00 2001
From: puhanshu <a9236326>
Date: 星期一, 17 一月 2022 11:38:20 +0800
Subject: [PATCH] 商业街bug修改

---
 springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java |  107 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 101 insertions(+), 6 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..7a5d5a4 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
@@ -2816,13 +2822,23 @@
     public R addMcsMerchantUser(McsMerchantDTO mcsMerchantDTO) {
         SysUserDO sysUserDO;
         sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda()
-                .eq(SysUserDO::getAccount, mcsMerchantDTO.getAccount()).eq(SysUserDO::getType, 11));
+                .eq(SysUserDO::getPhone, mcsMerchantDTO.getPhone()).eq(SysUserDO::getType, 11));
+        String encode = new BCryptPasswordEncoder().encode(mcsMerchantDTO.getPassword());
         if (nonNull(sysUserDO)) {
-            return R.fail("账户已经存在");
+            sysUserDO.setAccount(mcsMerchantDTO.getAccount());
+            sysUserDO.setStatus(mcsMerchantDTO.getAccountStatus());
+            sysUserDO.setPhone(mcsMerchantDTO.getPhone());
+            sysUserDO.setPassword(encode);
+            sysUserDO.setPlaintextPassword(mcsMerchantDTO.getPassword());
+            sysUserDO.setImageUrl(mcsMerchantDTO.getLogo());
+            sysUserDO.setName(mcsMerchantDTO.getName());
+            userDao.updateById(sysUserDO);
+            McsLoginUserInfoVO loginUserInfoVO = new McsLoginUserInfoVO();
+            BeanUtils.copyProperties(sysUserDO, loginUserInfoVO);
+            return R.ok(loginUserInfoVO);
         }
         // sys_user 表
         sysUserDO = new SysUserDO();
-        String encode = new BCryptPasswordEncoder().encode(mcsMerchantDTO.getPassword());
         BeanUtils.copyProperties(mcsMerchantDTO, sysUserDO);
         sysUserDO.setAccount(mcsMerchantDTO.getAccount());
         sysUserDO.setType(11);
@@ -2831,6 +2847,7 @@
         sysUserDO.setPhone(mcsMerchantDTO.getPhone());
         sysUserDO.setPassword(encode);
         sysUserDO.setPlaintextPassword(mcsMerchantDTO.getPassword());
+        sysUserDO.setImageUrl(mcsMerchantDTO.getLogo());
         try {
             userDao.insert(sysUserDO);
             McsLoginUserInfoVO loginUserInfoVO = new McsLoginUserInfoVO();
@@ -2865,6 +2882,7 @@
         String account = mcsMerchantDTO.getAccount();
         String phone = mcsMerchantDTO.getPhone();
         Integer accountStatus = mcsMerchantDTO.getAccountStatus();
+        String name = mcsMerchantDTO.getName();
         if (isNotBlank(account)) {
             sysUserDO.setAccount(account);
         }
@@ -2873,6 +2891,9 @@
         }
         if (nonNull(accountStatus)) {
             sysUserDO.setStatus(accountStatus);
+        }
+        if (isNotBlank(name)) {
+            sysUserDO.setName(name);
         }
         try {
             userDao.updateById(sysUserDO);
@@ -2925,7 +2946,7 @@
     }
 
     /**
-     * 发送验证码登录
+     * 发送验证码
      * @param phone 手机号
      * @param clientIP 用户ip
      * @param prefixKey redis Key 前缀
@@ -2934,13 +2955,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 +2979,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) && isNotBlank(sysUserDO.getOpenid())) {
+            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