package org.dromara.system.service.impl; import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.system.domain.SysClient; import org.dromara.system.domain.bo.SysClientBo; import org.dromara.system.domain.vo.SysClientVo; import org.dromara.system.mapper.SysClientMapper; import org.dromara.system.service.ISysClientService; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.Collection; import java.util.List; /** * 客户端管理Service业务层处理 * * @author Michelle.Chung * @date 2023-06-18 */ @Slf4j @RequiredArgsConstructor @Service public class SysClientServiceImpl implements ISysClientService { private final SysClientMapper baseMapper; /** * 查询客户端管理 */ @Override public SysClientVo queryById(Long id) { SysClientVo vo = baseMapper.selectVoById(id); vo.setGrantTypeList(List.of(vo.getGrantType().split(","))); return vo; } /** * 查询客户端管理 */ @Cacheable(cacheNames = CacheNames.SYS_CLIENT, key = "#clientId") @Override public SysClientVo queryByClientId(String clientId) { return baseMapper.selectVoOne(new LambdaQueryWrapper().eq(SysClient::getClientId, clientId)); } /** * 查询客户端管理列表 */ @Override public TableDataInfo queryPageList(SysClientBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); result.getRecords().forEach(r -> r.setGrantTypeList(List.of(r.getGrantType().split(",")))); return TableDataInfo.build(result); } /** * 查询客户端管理列表 */ @Override public List queryList(SysClientBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper buildQueryWrapper(SysClientBo bo) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(StringUtils.isNotBlank(bo.getClientId()), SysClient::getClientId, bo.getClientId()); lqw.eq(StringUtils.isNotBlank(bo.getClientKey()), SysClient::getClientKey, bo.getClientKey()); lqw.eq(StringUtils.isNotBlank(bo.getClientSecret()), SysClient::getClientSecret, bo.getClientSecret()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysClient::getStatus, bo.getStatus()); lqw.orderByAsc(SysClient::getId); return lqw; } /** * 新增客户端管理 */ @Override public Boolean insertByBo(SysClientBo bo) { SysClient add = MapstructUtils.convert(bo, SysClient.class); validEntityBeforeSave(add); add.setGrantType(String.join(",", bo.getGrantTypeList())); // 生成clientid String clientKey = bo.getClientKey(); String clientSecret = bo.getClientSecret(); add.setClientId(SecureUtil.md5(clientKey + clientSecret)); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } return flag; } /** * 修改客户端管理 */ @CacheEvict(cacheNames = CacheNames.SYS_CLIENT, key = "#bo.clientId") @Override public Boolean updateByBo(SysClientBo bo) { SysClient update = MapstructUtils.convert(bo, SysClient.class); validEntityBeforeSave(update); update.setGrantType(String.join(",", bo.getGrantTypeList())); return baseMapper.updateById(update) > 0; } /** * 修改状态 */ @CacheEvict(cacheNames = CacheNames.SYS_CLIENT, key = "#clientId") @Override public int updateUserStatus(String clientId, String status) { return baseMapper.update(null, new LambdaUpdateWrapper() .set(SysClient::getStatus, status) .eq(SysClient::getClientId, clientId)); } /** * 保存前的数据校验 */ private void validEntityBeforeSave(SysClient entity) { //TODO 做一些数据校验,如唯一约束 } /** * 批量删除客户端管理 */ @CacheEvict(cacheNames = CacheNames.SYS_CLIENT, allEntries = true) @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; } }