package com.aps.system.service.impl; import java.util.List; import java.util.Objects; import com.aps.common.security.utils.SecurityUtils; import com.aps.system.api.domain.SysDictType; import com.aps.system.mapper.SysDictTypeMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.aps.common.security.utils.DictUtils; import com.aps.system.api.domain.SysDictData; import com.aps.system.mapper.SysDictDataMapper; import com.aps.system.service.ISysDictDataService; import org.springframework.transaction.annotation.Transactional; /** * 字典 业务层处理 * * @author ruoyi */ @Service public class SysDictDataServiceImpl implements ISysDictDataService { @Autowired private SysDictDataMapper dictDataMapper; @Autowired private SysDictTypeMapper dictTypeMapper; /** * 根据条件分页查询字典数据 * * @param dictData 字典数据信息 * @return 字典数据集合信息 */ @Override public List selectDictDataList(SysDictData dictData) { return dictDataMapper.selectDictDataList(dictData); } /** * 根据字典类型和字典键值查询字典数据信息 * * @param dictType 字典类型 * @param dictValue 字典键值 * @return 字典标签 */ @Override public String selectDictLabel(String dictType, String dictValue) { return dictDataMapper.selectDictLabel(dictType, dictValue); } /** * 根据字典数据ID查询信息 * * @param dictCode 字典数据ID * @return 字典数据 */ @Override public SysDictData selectDictDataById(Long dictCode) { return dictDataMapper.selectDictDataById(dictCode); } /** * 批量删除字典数据信息 * * @param dictCodes 需要删除的字典数据ID */ @Override public void deleteDictDataByIds(Long[] dictCodes) { for (Long dictCode : dictCodes) { SysDictData data = selectDictDataById(dictCode); dictDataMapper.deleteDictDataById(dictCode); List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); DictUtils.setDictCache(data.getDictType(), dictDatas); } } /** * 排产专业 */ private final static String DICT_TYPE_APS_DOMAIN = "aps_domain"; /** * 排产工厂 */ private final static String DICT_TYPE_APS_FACTORY = "aps_factory"; /** * 排产区域 */ private final static String DICT_TYPE_APS_AREA = "aps_area"; private void checkDictArea() { SysDictType type = dictTypeMapper.selectDictTypeByType(DICT_TYPE_APS_AREA); if (type == null) { type = new SysDictType(); type.setDictType(DICT_TYPE_APS_AREA); type.setDictName("排产区域"); type.setStatus("0"); type.setCreateBy(SecurityUtils.getUsername()); int row = dictTypeMapper.insertDictType(type); if (row > 0) { DictUtils.setDictCache(type.getDictType(), null); } } } /** * 笛卡尔积: 根据工厂和专业字典生成区域字典数据 */ @Transactional(rollbackFor = Exception.class) @Override public void updateApsAreaDictData() { checkDictArea(); List facs = dictDataMapper.selectDictDataByType(DICT_TYPE_APS_FACTORY); List domains = dictDataMapper.selectDictDataByType(DICT_TYPE_APS_DOMAIN); List areas = dictDataMapper.selectDictDataByType(DICT_TYPE_APS_AREA); facs.forEach(fac -> { domains.forEach(domain -> { String dictValue = domain.getDictValue() + "-" + fac.getDictValue(); SysDictData area = areas.stream().filter(a -> Objects.equals(a.getDictValue(), dictValue)).findFirst().orElse(null); if (area == null) { area = new SysDictData(); area.setDictValue(dictValue); area.setDictType(DICT_TYPE_APS_AREA); area.setCreateBy(SecurityUtils.getUsername()); if (fac.getDictSort() != null && domain.getDictSort() != null) { area.setDictSort(domain.getDictSort() * 1000 + fac.getDictSort()); } area.setDictLabel(domain.getDictLabel() + "-" + fac.getDictLabel()); area.setStatus("0"); area.setCssClass(domain.getCssClass()); insertDictData(area); } else { area.setUpdateBy(SecurityUtils.getUsername()); area.setDictLabel(domain.getDictLabel() + "-" + fac.getDictLabel()); if (fac.getDictSort() != null && domain.getDictSort() != null) { area.setDictSort(domain.getDictSort() * 1000 + fac.getDictSort()); } updateDictData(area); } }); }); } /** * 新增保存字典数据信息 * * @param data 字典数据信息 * @return 结果 */ @Override public int insertDictData(SysDictData data) { int row = dictDataMapper.insertDictData(data); if (row > 0) { List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); DictUtils.setDictCache(data.getDictType(), dictDatas); } return row; } /** * 修改保存字典数据信息 * * @param data 字典数据信息 * @return 结果 */ @Override public int updateDictData(SysDictData data) { int row = dictDataMapper.updateDictData(data); if (row > 0) { List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); DictUtils.setDictCache(data.getDictType(), dictDatas); } return row; } }