package com.gkhy.exam.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.common.constant.UserConstant;
import com.gkhy.exam.common.domain.entity.SysDictData;
import com.gkhy.exam.common.exception.ApiException;
import com.gkhy.exam.common.utils.DictUtils;
import com.gkhy.exam.common.utils.PageUtils;
import com.gkhy.exam.common.utils.SecurityUtils;
import com.gkhy.exam.system.mapper.SysDictDataMapper;
import com.gkhy.exam.system.service.SysDictDataService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
* 字典数据表 服务实现类
*
*
* @author kzy
* @since 2023-11-01 15:37:51
*/
@Service
public class SysDictDataServiceImpl extends ServiceImpl implements SysDictDataService {
@Override
public CommonPage selectDictDataList(SysDictData dictData) {
PageUtils.startPage();
List dictDataList = baseMapper.selectDictDataList(dictData);
return CommonPage.restPage(dictDataList);
}
@Override
public String selectDictLabel(String dictType, String dictValue) {
return baseMapper.selectDictLabel(dictType,dictValue);
}
@Override
public SysDictData selectDictDataById(Long dictId) {
return getById(dictId);
}
@Override
public void deleteDictDataByIds(Long[] dictIds) {
for (Long dictId : dictIds)
{
SysDictData data = selectDictDataById(dictId);
baseMapper.deleteById(dictId);
List dictDatas = baseMapper.selectDictDataByType(data.getDictType());
DictUtils.setDictCache(data.getDictType(), dictDatas);
}
}
@Override
public int insertDictData(SysDictData dictData) {
if(!checkDictDataUnique(dictData)){
throw new ApiException("已存在相同字典数据");
}
dictData.setCreateBy(SecurityUtils.getUsername());
int row = baseMapper.insert(dictData);
if (row > 0)
{
List dictDatas = baseMapper.selectDictDataByType(dictData.getDictType());
DictUtils.setDictCache(dictData.getDictType(), dictDatas);
}
return row;
}
@Override
public int updateDictData(SysDictData dictData) {
if(!checkDictDataUnique(dictData)){
throw new ApiException("已存在相同字典数据");
}
dictData.setUpdateBy(SecurityUtils.getUsername());
int row = baseMapper.updateById(dictData);
if (row > 0)
{
List dictDatas = baseMapper.selectDictDataByType(dictData.getDictType());
DictUtils.setDictCache(dictData.getDictType(), dictDatas);
}
return row;
}
public boolean checkDictDataUnique(SysDictData dictData) {
LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery()
.eq(SysDictData::getDictType, dictData.getDictType())
.eq(SysDictData::getLabel, dictData.getLabel());
if(dictData.getId()!=null){
lambdaQueryWrapper.ne(SysDictData::getId,dictData.getId());
}
long existCount= count(lambdaQueryWrapper);
if(existCount>0){
return UserConstant.NOT_UNIQUE;
}
return UserConstant.UNIQUE;
}
}