package com.central.oauth.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.central.common.constant.CommonConstant; import com.central.common.lock.DistributedLock; import com.central.common.redis.template.RedisRepository; import com.central.common.constant.SecurityConstants; import com.central.common.model.PageResult; import com.central.common.model.Result; import com.central.common.service.impl.SuperServiceImpl; import com.central.oauth.mapper.ClientMapper; import com.central.oauth.model.Client; import com.central.oauth.service.IClientService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; /** * @author zlt *

* Blog: https://zlt2000.gitee.io * Github: https://github.com/zlt2000 */ @Slf4j @Service public class ClientServiceImpl extends SuperServiceImpl implements IClientService { private final static String LOCK_KEY_CLIENTID = "clientId:"; @Autowired private RedisRepository redisRepository; @Autowired private PasswordEncoder passwordEncoder; @Autowired private DistributedLock lock; @Override public Result saveClient(Client client) throws Exception { client.setClientSecret(passwordEncoder.encode(client.getClientSecretStr())); String clientId = client.getClientId(); super.saveOrUpdateIdempotency(client, lock , LOCK_KEY_CLIENTID+clientId , new QueryWrapper().eq("client_id", clientId) , clientId + "已存在"); return Result.succeed("操作成功"); } @Override public PageResult listClient(Map params, boolean isPage) { Page page; if (isPage) { page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit")); } else { page = new Page<>(1, -1); } List list = baseMapper.findList(page, params); page.setRecords(list); return PageResult.builder().data(list).code(0).count(page.getTotal()).build(); } @Override public void delClient(long id) { String clientId = baseMapper.selectById(id).getClientId(); baseMapper.deleteById(id); redisRepository.del(clientRedisKey(clientId)); } private String clientRedisKey(String clientId) { return SecurityConstants.CACHE_CLIENT_KEY + ":" + clientId; } }