SysDictServiceImpl.java 4.74 KB
package com.pashanhoo.dictionary.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.pashanhoo.common.Result;
import com.pashanhoo.dictionary.dao.SysDictMapper;
import com.pashanhoo.dictionary.model.dto.SysDict;
import com.pashanhoo.dictionary.model.vo.EditDictVo;
import com.pashanhoo.dictionary.model.vo.GetSysDictParentVo;
import com.pashanhoo.dictionary.model.vo.SysDictVo;
import com.pashanhoo.dictionary.service.SysDictService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class SysDictServiceImpl implements SysDictService {

    @Resource
    private SysDictMapper sysDictMapper;

    /**
     * 查询
     * @param dictid
     * @return
     */
    @Override
    public int deleteByPrimaryKey(String dictid) {
        return sysDictMapper.deleteByPrimaryKey(dictid);
    }

    /**
     * 插入
     * @param record
     * @return
     */
    @Override
    public int insert(SysDict record) {
        return sysDictMapper.insert(record);
    }

    /**
     * 插入
     * @param record
     * @return
     */
    @Override
    public int insertSelective(SysDict record) {
        return sysDictMapper.insertSelective(record);
    }

    /**
     * 查询
     * @param dictid
     * @return
     */
    @Override
    public SysDict selectByPrimaryKey(String dictid) {
        return sysDictMapper.selectByPrimaryKey(dictid);
    }

    /**
     * 更新
     * @param record
     * @return
     */
    @Override
    public int updateByPrimaryKeySelective(SysDict record) {
        return sysDictMapper.updateByPrimaryKeySelective(record);
    }

    /**
     * 更新
     * @param record
     * @return
     */
    @Override
    public int updateByPrimaryKey(SysDict record) {
        return sysDictMapper.updateByPrimaryKey(record);
    }

    /**
     * 批量更新
     * @param list
     * @return
     */
    @Override
    public int updateBatch(List<SysDict> list) {
        return sysDictMapper.updateBatch(list);
    }

    /**
     * 批量更新
     * @param list
     * @return
     */
    @Override
    public int updateBatchSelective(List<SysDict> list) {
        return sysDictMapper.updateBatchSelective(list);
    }

    /**
     * 批量插入
     * @param list
     * @return
     */
    @Override
    public int batchInsert(List<SysDict> list) {
        return sysDictMapper.batchInsert(list);
    }

    /**
     * 获取父级字典表
     * @param request
     * @return
     */
    @Override
    public PageInfo<GetSysDictParentVo> getSysDictParent(SysDictVo request) {
        PageHelper.startPage(request.getCurrentPage(), request.getPageSize());
        List<GetSysDictParentVo> list = sysDictMapper.getSysDictParent(request);
        return new PageInfo<>(list);
    }

    /**
     * 根据typeId查询字典表
     * @param typeId
     * @return
     */
    @Override
    public List<SysDict> getSysDictByTypeId(String typeId) {
        return sysDictMapper.getSysDictByTypeId(typeId);
    }

    /**
     * root节点只做更新,子节点全部删除再批量插入
     * @param request
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int editSysDict(EditDictVo request) {
        List<SysDict> editDicts = request.getEditDicts();
        List<SysDict> parent = editDicts.stream().filter(item -> item.getParentId() == null).collect(Collectors.toList());
        sysDictMapper.updateByPrimaryKey(parent.get(0));

        List<SysDict> dictWithoutParent = editDicts.stream().filter(item -> item.getParentId() != null).collect(Collectors.toList());
        List<SysDict> result = new ArrayList<>();
        //递归所有子集
        List<SysDict> resultList = getAllSysDict(dictWithoutParent,result);

        //删除除了根目录的所有子集
        sysDictMapper.deleteByTypeId(resultList.get(0).getTypeId());
        return sysDictMapper.batchInsert(resultList);
    }

    /**
     * 查询所有字典表
     * @return
     */
    @Override
    public List<SysDict> selectAll() {
        return sysDictMapper.selectAll();
    }

    @Override
    public Result getSysDictChildByParentCode(String dcode) {
        List<SysDict> list=sysDictMapper.getSysDictChildByParentCode(dcode);
        return Result.ok(list);
    }


    private List<SysDict> getAllSysDict(List<SysDict> dicts, List<SysDict> result) {

        for (SysDict SYSDICT : dicts) {
            List<SysDict> children = SYSDICT.getChildren();
            result.add(SYSDICT);
            if (children != null) {
                getAllSysDict(children, result);
            }
        }

        return result;
    }

}