package com.care.client.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.care.client.vo.MemberInfoVO; import com.care.client.vo.MemberInitParams; import com.care.common.cache.RedisKeyConstant; import com.care.common.cache.RedisUtil; import com.care.common.entity.CareMemberInfo; import com.care.common.enums.ValidStatusEnum; import com.care.common.service.CareMemberInfoService; import com.care.common.util.Result; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Map; @Slf4j @Service public class AbstractPassportService { @Resource private RedisUtil redisUtil; @Resource private CareMemberInfoService careMemberInfoService; public Result cache(MemberInitParams params) { String token = IdUtil.fastUUID(); // cache member CareMemberInfo member = null; if ("wx".equalsIgnoreCase(params.getLoginType())) { member = careMemberInfoService.detailByOpenid(params.getOpenid()); if (member == null) { member = careMemberInfoService.detailByPhone(params.getPhone()); if (member == null) { return Result.error("账号不存在!"); } } if (ValidStatusEnum.INVALID.getValue().equals(member.getStatus())){ return Result.error("用户已经停用"); } } else if ("pwd".equalsIgnoreCase(params.getLoginType())) { member = careMemberInfoService.detailByPhone(params.getPhone()); if (member == null) { return Result.error("账号不存在"); } if (ValidStatusEnum.INVALID.getValue().equals(member.getStatus())){ return Result.error("用户已经停用"); } if (!StrUtil.equalsIgnoreCase(SecureUtil.md5(params.getPassword()), member.getPassword())) { return Result.error("账号密码不匹配"); } } if (StringUtils.isBlank(member.getOpenId()) && StringUtils.isNotBlank(params.getOpenid())) { UpdateWrapper careMemberInfoUpdateWrapper = new UpdateWrapper<>(); careMemberInfoUpdateWrapper.lambda().eq(CareMemberInfo::getId,member.getId()).set(CareMemberInfo::getOpenId,params.getOpenid()); boolean bindFlag = this.careMemberInfoService.update(careMemberInfoUpdateWrapper); if (bindFlag) { member.setOpenId(params.getOpenid()); } } MemberInfoVO memberInfoVO = new MemberInfoVO(); BeanUtil.copyProperties(member,memberInfoVO); if (member.getBirthday()!=null){ memberInfoVO.setAge(DateUtil.ageOfNow(member.getBirthday())); } redisUtil.hset(RedisKeyConstant.PINANBAO_LOGIN_INFO, token, memberInfoVO, RedisKeyConstant.PINANBAO_LOGIN_INFO_TIME); Map data = Maps.newHashMap(); data.put("token", token); data.put("member", memberInfoVO); return Result.success(data); } public MemberInfoVO refreshMember(String token) { if (StrUtil.isNotBlank(token) && redisUtil.hHasKey(RedisKeyConstant.PINANBAO_LOGIN_INFO, token)) { MemberInfoVO oldMemberInfoVo = (MemberInfoVO)redisUtil.hget(RedisKeyConstant.PINANBAO_LOGIN_INFO, token); CareMemberInfo member = careMemberInfoService.getById(oldMemberInfoVo.getId()); if (oldMemberInfoVo != null && member != null) { MemberInfoVO memberInfoVO = new MemberInfoVO(); BeanUtil.copyProperties(member,memberInfoVO); redisUtil.hset(RedisKeyConstant.PINANBAO_LOGIN_INFO, token, memberInfoVO, RedisKeyConstant.PINANBAO_LOGIN_INFO_TIME); return memberInfoVO; } } return null; } }