| | |
| | | package cn.iocoder.yudao.module.system.service.dict; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeImportExcelVO; |
| | | import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeImportReqVO; |
| | | import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeImportRespVO; |
| | | import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypePageReqVO; |
| | | import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeSaveReqVO; |
| | | import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; |
| | | import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | return dictTypeMapper.selectList(); |
| | | } |
| | | |
| | | @Override |
| | | public DictTypeImportRespVO importDictTypeList(List<DictTypeImportExcelVO> importDictTypes, DictTypeImportReqVO importReqVO) { |
| | | importDictTypes = filterList(importDictTypes, item -> StrUtil.isNotBlank(item.getType())); |
| | | if (CollUtil.isEmpty(importDictTypes)) { |
| | | throw exception(DICT_TYPE_IMPORT_LIST_IS_EMPTY); |
| | | } |
| | | DictTypeImportRespVO respVO = DictTypeImportRespVO.builder() |
| | | .createDictTypeNames(new ArrayList<>()) |
| | | .updateDictTypeNames(new ArrayList<>()) |
| | | .failureDictTypeNames(new LinkedHashMap<>()) |
| | | .build(); |
| | | importDictTypes.forEach(importDictType -> { |
| | | try { |
| | | // 1. 判断是否存在(优先按字典类型编码,其次按名称) |
| | | DictTypeDO existDictType = dictTypeMapper.selectByType(importDictType.getType()); |
| | | if (existDictType == null && StrUtil.isNotBlank(importDictType.getName())) { |
| | | existDictType = dictTypeMapper.selectByName(importDictType.getName()); |
| | | } |
| | | if (existDictType == null) { |
| | | // 2.1 新增 |
| | | validateDictTypeNameUnique(null, importDictType.getName()); |
| | | validateDictTypeUnique(null, importDictType.getType()); |
| | | DictTypeDO dictType = BeanUtils.toBean(importDictType, DictTypeDO.class); |
| | | dictType.setDeletedTime(LocalDateTimeUtils.EMPTY); // 唯一索引,避免 null 值 |
| | | dictTypeMapper.insert(dictType); |
| | | respVO.getCreateDictTypeNames().add(importDictType.getType()); |
| | | return; |
| | | } |
| | | // 2.2 已存在,判断是否允许更新 |
| | | if (!importReqVO.getUpdateSupport()) { |
| | | respVO.getFailureDictTypeNames().put(importDictType.getType(), |
| | | StrUtil.format(DICT_TYPE_TYPE_DUPLICATE.getMsg(), importDictType.getType())); |
| | | return; |
| | | } |
| | | DictTypeDO updateDictType = BeanUtils.toBean(importDictType, DictTypeDO.class) |
| | | .setId(existDictType.getId()); |
| | | dictTypeMapper.updateById(updateDictType); |
| | | respVO.getUpdateDictTypeNames().add(importDictType.getType()); |
| | | } catch (ServiceException ex) { |
| | | respVO.getFailureDictTypeNames().put(importDictType.getType(), ex.getMessage()); |
| | | } |
| | | }); |
| | | return respVO; |
| | | } |
| | | |
| | | @VisibleForTesting |
| | | void validateDictTypeNameUnique(Long id, String name) { |
| | | DictTypeDO dictType = dictTypeMapper.selectByName(name); |