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 | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 168 insertions(+), 7 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 dfed62b..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 @@ -10,13 +10,17 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.Set; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import javax.annotation.Resource; import javax.validation.constraints.NotBlank; -import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO; +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; import org.springframework.beans.BeanUtils; @@ -41,6 +45,7 @@ import com.panzhihua.common.model.dtos.community.NoticeReadDTO; import com.panzhihua.common.model.dtos.community.convenient.ConvenientMerchantDTO; import com.panzhihua.common.model.dtos.community.convenient.DisableOrEnableConvenientMerchantDTO; +import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO; import com.panzhihua.common.model.dtos.grid.EventGridMemberAddDTO; import com.panzhihua.common.model.dtos.grid.EventGridMemberEditAdminDTO; import com.panzhihua.common.model.dtos.grid.EventGridMemberEditStatusDTO; @@ -84,6 +89,7 @@ import com.panzhihua.common.model.vos.user.UserPhoneVO; import com.panzhihua.common.utlis.IdCard; import com.panzhihua.common.utlis.SensitiveUtil; +import com.panzhihua.common.utlis.SmsUtil; import com.panzhihua.common.utlis.Snowflake; import com.panzhihua.common.utlis.StringUtils; import com.panzhihua.common.utlis.WxUtil; @@ -136,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 @@ -2813,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); @@ -2827,14 +2846,26 @@ sysUserDO.setStatus(mcsMerchantDTO.getAccountStatus()); sysUserDO.setPhone(mcsMerchantDTO.getPhone()); sysUserDO.setPassword(encode); + sysUserDO.setPlaintextPassword(mcsMerchantDTO.getPassword()); + sysUserDO.setImageUrl(mcsMerchantDTO.getLogo()); try { userDao.insert(sysUserDO); - return R.ok(sysUserDO.getUserId()); + McsLoginUserInfoVO loginUserInfoVO = new McsLoginUserInfoVO(); + BeanUtils.copyProperties(sysUserDO, loginUserInfoVO); + return R.ok(loginUserInfoVO); } catch (Exception e) { e.printStackTrace(); - log.error("新增后台用户报错【{}】", e.getMessage()); + log.error("修改数字商业街商家用户报错【{}】", e.getMessage()); + if (e.getMessage().contains("union_phone_type")) { + return R.fail("手机号已存在"); + } else if (e.getMessage().contains("union_account_type")) { + return R.fail("账户已经存在"); + }else if(e.getMessage().contains("23000")){ + return R.fail("手机号已存在"); + } else { + return R.fail("账户或手机号已存在,请重新填写尝试"); + } } - return R.fail("新增商户发生错误"); } /** @@ -2851,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); } @@ -2859,6 +2891,9 @@ } if (nonNull(accountStatus)) { sysUserDO.setStatus(accountStatus); + } + if (isNotBlank(name)) { + sysUserDO.setName(name); } try { userDao.updateById(sysUserDO); @@ -2892,4 +2927,130 @@ } return true; } + + /** + * 根据手机号、用户类型查询用户 + * @param phone + * @param type + * @return + */ + @Override + public R getSysUserByPhone(String phone, Integer type) { + SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone, phone).eq(SysUserDO::getType, type)); + McsLoginUserInfoVO loginUserInfoVO = null; + if (nonNull(sysUserDO)) { + loginUserInfoVO = new McsLoginUserInfoVO(); + BeanUtils.copyProperties(sysUserDO, loginUserInfoVO); + } + return R.ok(loginUserInfoVO); + } + + /** + * 发送验证码 + * @param phone 手机号 + * @param clientIP 用户ip + * @param prefixKey redis Key 前缀 + * @param limit 获取次数限制 + * @param timeout 超次数获取时间等待 + * @return + */ + @Override + 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(String.format("请求过于频繁,请%d分钟后再次尝试!", timeout/60)); + } + stringRedisTemplate.expire(redisKey, timeout, TimeUnit.SECONDS); + } + Random r = new Random(); + StringBuilder rs = new StringBuilder(); + for (int i = 0; i < 5; i++) { + rs.append(r.nextInt(10)); + } + String code = rs.toString(); + int result = SmsUtil.sendCode(phone, code); + if (result == 1) { + String codeKey = String.join("::", phone, code); + opsForValue.set(codeKey, code, timeout, TimeUnit.SECONDS); + return R.ok(); + } + 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