diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataCategoryController.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataCategoryController.java index 9d824d1d5..d8a5fe187 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataCategoryController.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataCategoryController.java @@ -20,7 +20,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.logpm.basicdata.entity.BasicdataCategoryEntity; +import com.logpm.basicdata.entity.BasicdataWarehouseEntity; import com.logpm.basicdata.excel.BasicdataCategoryExcel; +import com.logpm.basicdata.excel.BasicdataCategoryImporter; +import com.logpm.basicdata.excel.BasicdataGoodsAreaExcel; +import com.logpm.basicdata.excel.BasicdataGoodsAreaImporter; import com.logpm.basicdata.service.IBasicdataCategoryService; import com.logpm.basicdata.vo.BasicdataCategoryVO; import io.swagger.annotations.Api; @@ -38,12 +42,15 @@ import org.springblade.core.tool.constant.BladeConstant; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; /** * 品类 控制器 @@ -169,5 +176,27 @@ public class BasicdataCategoryController extends BladeController { List list = basicdataCategoryService.exportBasicdataCategory(queryWrapper); ExcelUtil.export(response, "品类数据" + DateUtil.time(), "品类数据表", list, BasicdataCategoryExcel.class); } + /** + * 导出数据 + */ + @GetMapping("/downTemplate") + @ApiOperationSupport(order = 9) + @ApiOperation(value = "下载导出模板", notes = "下载导出模板") + public void downTemplate(HttpServletResponse response) { + + List list = new ArrayList<>(); + ExcelUtil.export(response, "品类数据" + DateUtil.time(), "品类数据表", list, BasicdataCategoryExcel.class); + } + + + @PostMapping("/import") + @ApiOperationSupport(order = 12) + @ApiOperation(value = "导入品类", notes = "传入excel") + public R importCategory(MultipartFile file) { + BasicdataCategoryImporter basicdataGoodsAreaImporter = new BasicdataCategoryImporter(basicdataCategoryService); + ExcelUtil.save(file,basicdataGoodsAreaImporter, BasicdataCategoryExcel.class); + return R.success("操作成功"); + } + } diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/excel/BasicdataCategoryExcel.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/excel/BasicdataCategoryExcel.java index 5d2fe0911..bc04240ca 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/excel/BasicdataCategoryExcel.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/excel/BasicdataCategoryExcel.java @@ -40,113 +40,22 @@ public class BasicdataCategoryExcel implements Serializable { private static final long serialVersionUID = 1L; - /** - * 租户号 - */ - @ColumnWidth(20) - @ExcelProperty("租户号") - private String tenantId; - /** - * 是否已删除 - */ - @ColumnWidth(20) - @ExcelProperty("是否已删除") - private Integer isDeleted; - /** - * 预留1 - */ - @ColumnWidth(20) - @ExcelProperty("预留1") - private String reserve1; - /** - * 预留2 - */ - @ColumnWidth(20) - @ExcelProperty("预留2") - private String reserve2; - /** - * 预留3 - */ - @ColumnWidth(20) - @ExcelProperty("预留3") - private String reserve3; - /** - * 预留4 - */ - @ColumnWidth(20) - @ExcelProperty("预留4") - private String reserve4; - /** - * 预留5 - */ - @ColumnWidth(20) - @ExcelProperty("预留5") - private String reserve5; - /** - * 父ID - */ - @ColumnWidth(20) - @ExcelProperty("父ID") - private Long pid; - /** - * 一级编码 - */ - @ColumnWidth(20) - @ExcelProperty("一级编码") - private Long stairCode; - /** - * 二级编码 - */ - @ColumnWidth(20) - @ExcelProperty("二级编码") - private Long secondCode; - /** - * 一级名称 - */ - @ColumnWidth(20) - @ExcelProperty("一级名称") - private String stairName; - /** - * 二级名称 - */ - @ColumnWidth(20) - @ExcelProperty("二级名称") - private String secondName; - /** - * 三级编码 - */ - @ColumnWidth(20) - @ExcelProperty("三级编码") - private Long threeCode; - /** - * 三级名称 - */ - @ColumnWidth(20) - @ExcelProperty("三级名称") - private String threeName; - /** - * 四级编码 - */ - @ColumnWidth(20) - @ExcelProperty("四级编码") - private Long fourCode; - /** - * 四级名称 - */ + @ColumnWidth(20) - @ExcelProperty("四级名称") - private String fourName; + @ExcelProperty("产品名称") + private String name; /** - * 名称 + * 类型 */ @ColumnWidth(20) - @ExcelProperty("名称") - private String name; + @ExcelProperty("类型") + private String type; + /** * 类型 */ @ColumnWidth(20) - @ExcelProperty("类型") - private Integer type; + @ExcelProperty("父级产品名称") + private String parentCategory; } diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/excel/BasicdataCategoryImporter.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/excel/BasicdataCategoryImporter.java new file mode 100644 index 000000000..04356ed71 --- /dev/null +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/excel/BasicdataCategoryImporter.java @@ -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 { + + private final IBasicdataCategoryService basicdataCategoryService; + + @Override + @Transactional(rollbackFor = RuntimeException.class) + public void save(List data) { + + // 验证data 是否存在name相同的数据 + + boolean hasDuplicates = data.stream() + .map(BasicdataCategoryExcel::getName) + .distinct() + .count() != data.size(); + if(hasDuplicates){ + throw new ServiceException("存在相同的数据"); + } + + // 得到目前系统存在品类 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BasicdataCategoryEntity::getIsDeleted,0); + List ls = basicdataCategoryService.list(queryWrapper); + + // 验证导入的数据和查询的数据是否存在相同的名称 + ls.forEach(item->{ + data.forEach(datum -> { + if(item.getName().equals(datum.getName())){ + throw new ServiceException(datum.getName()+"存在相同的数据"); + } + }); + }); + + + List category = DictBizCache.getList("category"); + // 优先保存 没有父级的数据 + List pList = new ArrayList<>(); + List 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 category, String type) { + for (DictBiz dictBiz : category) { + if (dictBiz.getDictValue().equals(type)) { + return dictBiz.getDictKey(); + } + } + return null; + } +} diff --git a/blade-service/logpm-basicdata/src/main/resources/application-dev.yml b/blade-service/logpm-basicdata/src/main/resources/application-dev.yml index 8286d310f..bea4f60a6 100644 --- a/blade-service/logpm-basicdata/src/main/resources/application-dev.yml +++ b/blade-service/logpm-basicdata/src/main/resources/application-dev.yml @@ -53,4 +53,4 @@ xxl: ip: 127.0.0.1 logpath: ../data/applogs/logpm-factory-data-xxljob/jobhandler logretentiondays: -1 - port: 17018 + port: 17019