|
|
|
@ -1,8 +1,17 @@
|
|
|
|
|
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; |
|
|
|
@ -13,16 +22,84 @@ public class BasicdataCategoryImporter implements ExcelImporter<BasicdataCategor
|
|
|
|
|
private final IBasicdataCategoryService basicdataCategoryService; |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
@Transactional(rollbackFor = RuntimeException.class) |
|
|
|
|
public void save(List<BasicdataCategoryExcel> data) { |
|
|
|
|
// 处理数据
|
|
|
|
|
List<String> pList = new ArrayList(); |
|
|
|
|
for (BasicdataCategoryExcel datum : data) { |
|
|
|
|
pList.add(datum.getParentCategory()); |
|
|
|
|
|
|
|
|
|
// 验证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; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|