package cn.mb.cloud.auth.security.service.impl; import cn.mb.cloud.auth.security.entity.SysSocialDetails; import cn.mb.cloud.auth.security.entity.SysUser; import cn.mb.cloud.auth.security.mapper.SysSocialDetailsMapper; import cn.mb.cloud.auth.security.mapper.SysUserMapper; import cn.mb.cloud.auth.security.service.SysSocialDetailsService; import cn.mb.cloud.auth.security.social.handler.LoginHandler; import cn.mb.cloud.common.api.vo.UserVO; import cn.mb.cloud.common.core.constant.CacheConstants; import cn.mb.cloud.common.core.constant.enums.LoginTypeEnum; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.CacheManager; import org.springframework.stereotype.Service; import java.util.Map; /** * @author jason * @date 2018年08月16日 */ @Slf4j @AllArgsConstructor @Service("sysSocialDetailsService") public class SysSocialDetailsServiceImpl extends ServiceImpl implements SysSocialDetailsService { private final Map loginHandlerMap; private final CacheManager cacheManager; private final SysUserMapper sysUserMapper; /** * 绑定社交账号 * * @param type type * @param code code * @param userId * @return */ @Override public Boolean bindSocial(String type, String code, Long userId) { String identify = loginHandlerMap.get(type).identify(code); SysUser sysUser = sysUserMapper.selectById(userId); if (LoginTypeEnum.GITEE.getType().equals(type)) { sysUser.setGiteeLogin(identify); } else if (LoginTypeEnum.OSC.getType().equals(type)) { sysUser.setOscId(identify); } else if (LoginTypeEnum.WECHAT.getType().equals(type)) { sysUser.setWxOpenid(identify); } else if (LoginTypeEnum.QQ.getType().equals(type)) { sysUser.setQqOpenid(identify); } else if (LoginTypeEnum.MINI_APP.getType().equals(type)) { sysUser.setMiniOpenid(identify); } sysUserMapper.updateById(sysUser); // 更新緩存 cacheManager.getCache(CacheConstants.USER_DETAILS).evict(sysUser.getUsername()); return Boolean.TRUE; } /** * 根据入参查询用户信息 * * @param inStr TYPE@code * @return */ @Override public UserVO getUserInfo(String inStr) { int size = 0; String[] inStrs = inStr.split(StringPool.AT); String type = inStrs[0]; //size += inStrs[0].length(); size++; String loginStr = inStrs[1]; size++; //size += inStrs[1].length(); String threeAvatar = null; String threeName = null; if (inStrs.length > size) { threeAvatar = inStrs[2]; //size += inStrs[2].length(); size++; if (inStrs.length > size) { threeName = inStrs[3]; } } return loginHandlerMap.get(type).handle(loginStr, threeAvatar, threeName); } }