gunshi-project-ss/src/main/java/com/gunshi/project/xyt/service/SysDictService.java

141 lines
4.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.gunshi.project.xyt.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gunshi.db.dao.BaseOrderDao;
import com.gunshi.project.xyt.entity.basedata.SysDictSearch;
import com.gunshi.project.xyt.entity.basedata.SysDictVo;
import com.gunshi.project.xyt.mapper.SysDictBMapper;
import com.gunshi.project.xyt.model.SysDictB;
import com.gunshi.util.common.tree.TreeUtil;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Sun Lejun
* @version 1.0
* @date 2024/1/25
*/
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class SysDictService extends BaseOrderDao<SysDictBMapper, SysDictB> {
/**
* 根据ID查询字典
* @param id 字典ID
* @return 字典
*/
public SysDictB queryById(Long id) {
return this.getBaseMapper().selectById(id);
}
/**
* 根据名称或者编码查询字典
* @param search 查询条件
* @return 字典tree
*/
public Page<SysDictVo> queryBySearch(SysDictSearch search) {
//构建分页对象
Page<Long> page = new Page<>(search.getPage(), search.getPageSize());
//按PID和ID进行分页查询
Page<SysDictB> sysDictVoPage = this.getBaseMapper().queryPidBySearch(page, search);
long total = sysDictVoPage.getTotal();
long current = sysDictVoPage.getCurrent();
if(total == 0) {
return new Page<>(current, search.getPageSize());
}
//拿出查询出来的PID和ID获取完整的记录
List<SysDictB> records = sysDictVoPage.getRecords();
List<Long> list = records.stream().map(SysDictB::getId).collect(Collectors.toList());
List<SysDictVo> sysDictVos = this.getBaseMapper().queryByPidOrIds(list);
//转换成tree
List<SysDictVo> tree = TreeUtil.list2ListTree(sysDictVos, 0L, SysDictVo::getId, SysDictVo::getPid, SysDictVo::setChildren, null);
//构建返回对象
Page<SysDictVo> result = new Page<>(search.getPage(), search.getPageSize());
result.setCurrent(current);
result.setTotal(total);
result.setRecords(tree);
return result;
}
/**
* 新增字典
* @param sysDictB 字典信息
*/
public void insert(@Valid SysDictB sysDictB) {
checkExistCodeAndName(sysDictB);
sysDictB.setId(IdWorker.getId());
sysDictB.setStatus(1);
sysDictB.setCreateTm(new Date());
sysDictB.setTm(new Date());
this.getBaseMapper().insert(sysDictB);
resort(sysDictB);
}
/**
* 更新字典
* @param sysDictB 字典信息
*/
public void update(@Valid SysDictB sysDictB) {
checkExistById(sysDictB);
checkExistCodeAndName(sysDictB);
sysDictB.setTm(new Date());
if(sysDictB.getStatus() == 0L){
sysDictB.setSortOn(999);
}
this.getBaseMapper().updateById(sysDictB);
resort(sysDictB);
}
/**
* 检查字典编码和名称是否存在
* @param sysDictB 字典信息
*/
public void checkExistCodeAndName(SysDictB sysDictB) {
if (sysDictB.getPid() != 0L) {
return;
}
boolean exist = this.getBaseMapper().checkExistCodeAndName(sysDictB);
if (exist) {
throw new IllegalArgumentException("顶层字典编码或名称已存在");
}
}
/**
* 检查字典是否存在
* @param sysDictB 字典信息
*/
public void checkExistById(SysDictB sysDictB) {
QueryWrapper<SysDictB> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(SysDictB.COL_ID, sysDictB.getId());
boolean exists = this.exists(queryWrapper);
if (!exists) {
throw new IllegalArgumentException("字典不存在");
}
}
/**
* 重新给字典排序
* @param sysDictB
*/
private void resort(SysDictB sysDictB){
Long pid = sysDictB.getPid();
QueryWrapper<SysDictB> queryWrapper2 = new QueryWrapper<>();
queryWrapper2.eq(SysDictB.COL_PID, pid);
super.updateOrder(queryWrapper2, SysDictB::getSortOn, SysDictB::setSortOn, sysDictB, SysDictB::getId, t -> t.setTm(new Date()));
}
}