4 changed files with 144 additions and 101 deletions
@ -0,0 +1,105 @@
|
||||
package com.logpm.basicdata.excel; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.logpm.basicdata.entity.BasicdataCategoryEntity; |
||||
import com.logpm.basicdata.service.IBasicdataCategoryService; |
||||
import lombok.AllArgsConstructor; |
||||
import org.springblade.core.cache.utils.CacheUtil; |
||||
import org.springblade.core.excel.support.ExcelImporter; |
||||
import org.springblade.core.log.exception.ServiceException; |
||||
import org.springblade.core.tenant.exception.TenantDataSourceException; |
||||
import org.springblade.core.tool.utils.ObjectUtil; |
||||
import org.springblade.system.cache.DictBizCache; |
||||
import org.springblade.system.entity.DictBiz; |
||||
import org.springframework.transaction.annotation.Transactional; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
@AllArgsConstructor |
||||
public class BasicdataCategoryImporter implements ExcelImporter<BasicdataCategoryExcel> { |
||||
|
||||
private final IBasicdataCategoryService basicdataCategoryService; |
||||
|
||||
@Override |
||||
@Transactional(rollbackFor = RuntimeException.class) |
||||
public void save(List<BasicdataCategoryExcel> data) { |
||||
|
||||
// 验证data 是否存在name相同的数据
|
||||
|
||||
boolean hasDuplicates = data.stream() |
||||
.map(BasicdataCategoryExcel::getName) |
||||
.distinct() |
||||
.count() != data.size(); |
||||
if(hasDuplicates){ |
||||
throw new ServiceException("存在相同的数据"); |
||||
} |
||||
|
||||
// 得到目前系统存在品类
|
||||
LambdaQueryWrapper<BasicdataCategoryEntity> queryWrapper = new LambdaQueryWrapper<>(); |
||||
queryWrapper.eq(BasicdataCategoryEntity::getIsDeleted,0); |
||||
List<BasicdataCategoryEntity> ls = basicdataCategoryService.list(queryWrapper); |
||||
|
||||
// 验证导入的数据和查询的数据是否存在相同的名称
|
||||
ls.forEach(item->{ |
||||
data.forEach(datum -> { |
||||
if(item.getName().equals(datum.getName())){ |
||||
throw new ServiceException(datum.getName()+"存在相同的数据"); |
||||
} |
||||
}); |
||||
}); |
||||
|
||||
|
||||
List<DictBiz> category = DictBizCache.getList("category"); |
||||
// 优先保存 没有父级的数据
|
||||
List<BasicdataCategoryEntity> pList = new ArrayList<>(); |
||||
List<BasicdataCategoryEntity> cList = new ArrayList<>(); |
||||
data.forEach(item->{ |
||||
if(ObjectUtil.isNotEmpty(item.getName())){ |
||||
BasicdataCategoryEntity basicdataCategoryEntity = new BasicdataCategoryEntity(); |
||||
basicdataCategoryEntity.setName(item.getName()); |
||||
String dictValue = findDictValue(category, item.getType()); |
||||
basicdataCategoryEntity.setType(dictValue==null?1:Integer.parseInt(dictValue)); |
||||
if(item.getParentCategory()==null){ |
||||
pList.add(basicdataCategoryEntity); |
||||
}else{ |
||||
basicdataCategoryEntity.setReserve1(item.getParentCategory()); |
||||
cList.add(basicdataCategoryEntity); |
||||
} |
||||
} |
||||
|
||||
}); |
||||
|
||||
// 保存
|
||||
basicdataCategoryService.saveBatch(pList); |
||||
queryWrapper.eq(BasicdataCategoryEntity::getType,1); |
||||
ls = basicdataCategoryService.list(queryWrapper); |
||||
for (BasicdataCategoryEntity basicdataCategoryEntity : cList) { |
||||
for (BasicdataCategoryEntity l : ls) { |
||||
if (basicdataCategoryEntity.getReserve1().equals(l.getName())) { |
||||
basicdataCategoryEntity.setPid(l.getId()); |
||||
//移除临时使用值
|
||||
basicdataCategoryEntity.setReserve1(null); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
basicdataCategoryService.saveBatch(cList); |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 寻找字典的value |
||||
* @param category |
||||
* @param type |
||||
* @return |
||||
*/ |
||||
private String findDictValue(List<DictBiz> category, String type) { |
||||
for (DictBiz dictBiz : category) { |
||||
if (dictBiz.getDictValue().equals(type)) { |
||||
return dictBiz.getDictKey(); |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
} |
Loading…
Reference in new issue