fix(智慧超市):修复导入
This commit is contained in:
1 parent
b4cab80e68
commit
dd8eb85c96
2 files changed
+39
-135
No files matched your search
+38
-134
@@ -985,36 +985,8 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
|
||||
|
||||
SmErpSpuEntity spu;
|
||||
if (existingSpu != null) {
|
||||
// 商品已存在,记录警告但不更新(保护线上数据)
|
||||
errorReasons.add("商品已存在,跳过导入以避免覆盖线上数据。货号:" + dto.getProductCode() + ",商品名称:" + existingSpu.getProductName());
|
||||
errorList.add(createErrorInfo(rowNumber, dto.getProductCode(), errorReasons));
|
||||
continue;
|
||||
|
||||
// 如果需要更新模式,可以取消注释下面的代码
|
||||
/*
|
||||
// 商品已存在:不更新主数据,继续为该 SPU 处理包装单位与条码
|
||||
spu = existingSpu;
|
||||
spu.setProductName(dto.getProductName());
|
||||
spu.setSpec(dto.getSpec());
|
||||
spu.setOrigin(dto.getOrigin());
|
||||
spu.setBarCode(dto.getBarCode());
|
||||
spu.setPurchasePrice(dto.getPurchasePrice() != null ?
|
||||
BigDecimal.valueOf(dto.getPurchasePrice()).multiply(BigDecimal.valueOf(100)).intValue() : 0);
|
||||
spu.setRetailPrice(dto.getRetailPrice() != null ?
|
||||
BigDecimal.valueOf(dto.getRetailPrice()).multiply(BigDecimal.valueOf(100)).intValue() : 0);
|
||||
spu.setPromotionPrice(dto.getPromotionPrice() != null ?
|
||||
BigDecimal.valueOf(dto.getPromotionPrice()).multiply(BigDecimal.valueOf(100)).intValue() : 0);
|
||||
spu.setCostPrice(dto.getCostPrice() != null ?
|
||||
BigDecimal.valueOf(dto.getCostPrice()).multiply(BigDecimal.valueOf(100)).doubleValue() : 0.0);
|
||||
spu.setProductNature("电子称称重商品".equals(dto.getProductNature()) ? "2" : "1");
|
||||
spu.setStatus("停销".equals(dto.getStatus()) ? "1" : "0");
|
||||
if (categoryId != null) {
|
||||
spu.setCategoryId(categoryId);
|
||||
}
|
||||
if (supplierId != null) {
|
||||
spu.setSupplierId(supplierId);
|
||||
}
|
||||
this.updateById(spu);
|
||||
*/
|
||||
} else {
|
||||
// 创建新商品
|
||||
spu = new SmErpSpuEntity();
|
||||
@@ -1049,9 +1021,9 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
|
||||
unit.setUnit(dto.getUnit());
|
||||
unit.setPackageNum(dto.getPackageNum());
|
||||
unit.setIsBase(true); // 默认为基础单位
|
||||
unit.setBarCode(StringUtils.isNotBlank(dto.getBarCode()) ? dto.getBarCode() : null); // 包装单位的条码来自主条码
|
||||
unit.setTaste(StringUtils.isNotBlank(dto.getTaste()) ? dto.getTaste() : null); // 设置口味,空值设为null
|
||||
unit.setSpec(StringUtils.isNotBlank(dto.getSpec()) ? dto.getSpec() : null); // 设置规格字段,空值设为null
|
||||
unit.setBarCode(org.apache.commons.lang3.StringUtils.isNotBlank(dto.getBarCode()) ? dto.getBarCode() : null); // 条码
|
||||
unit.setTaste(org.apache.commons.lang3.StringUtils.isNotBlank(dto.getTaste()) ? dto.getTaste() : null); // 口味
|
||||
unit.setSpec(org.apache.commons.lang3.StringUtils.isNotBlank(dto.getSpec()) ? dto.getSpec() : null); // 规格
|
||||
unit.setPurchasePrice(dto.getPurchasePrice() != null ?
|
||||
BigDecimal.valueOf(dto.getPurchasePrice()).multiply(BigDecimal.valueOf(100)).intValue() : 0);
|
||||
unit.setRetailPrice(dto.getRetailPrice() != null ?
|
||||
@@ -1061,50 +1033,30 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
|
||||
unit.setCostPrice(dto.getCostPrice() != null ?
|
||||
BigDecimal.valueOf(dto.getCostPrice()).multiply(BigDecimal.valueOf(100)).intValue() : 0);
|
||||
|
||||
// 检查单位是否已存在(根据条码,因为每个商品下的包装单位条码是唯一的)
|
||||
// 检查单位是否已存在:条码优先,其次使用 单位+口味+规格 的组合
|
||||
LambdaQueryWrapper<SmErpUnitEntity> existingUnitWrapper = new LambdaQueryWrapper<>();
|
||||
existingUnitWrapper.eq(SmErpUnitEntity::getSpuId, spu.getId());
|
||||
|
||||
if (StringUtils.isNotBlank(dto.getBarCode())) {
|
||||
// 如果有条码,使用条码作为主要去重依据
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getBarCode())) {
|
||||
existingUnitWrapper.eq(SmErpUnitEntity::getBarCode, dto.getBarCode());
|
||||
} else {
|
||||
// 如果条码为空,使用单位名称、口味和规格的组合作为去重依据
|
||||
existingUnitWrapper.eq(SmErpUnitEntity::getUnit, dto.getUnit());
|
||||
|
||||
// 处理口味字段的查询条件
|
||||
if (StringUtils.isNotBlank(dto.getTaste())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getTaste())) {
|
||||
existingUnitWrapper.eq(SmErpUnitEntity::getTaste, dto.getTaste());
|
||||
} else {
|
||||
// 当口味为空时,查询口味为null或空字符串的记录
|
||||
existingUnitWrapper.and(wrapper -> wrapper
|
||||
.isNull(SmErpUnitEntity::getTaste)
|
||||
.or()
|
||||
.eq(SmErpUnitEntity::getTaste, "")
|
||||
);
|
||||
existingUnitWrapper.and(w -> w.isNull(SmErpUnitEntity::getTaste).or().eq(SmErpUnitEntity::getTaste, ""));
|
||||
}
|
||||
|
||||
// 处理规格字段的查询条件
|
||||
if (StringUtils.isNotBlank(dto.getSpec())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getSpec())) {
|
||||
existingUnitWrapper.eq(SmErpUnitEntity::getSpec, dto.getSpec());
|
||||
} else {
|
||||
// 当规格为空时,查询规格为null或空字符串的记录
|
||||
existingUnitWrapper.and(wrapper -> wrapper
|
||||
.isNull(SmErpUnitEntity::getSpec)
|
||||
.or()
|
||||
.eq(SmErpUnitEntity::getSpec, "")
|
||||
);
|
||||
existingUnitWrapper.and(w -> w.isNull(SmErpUnitEntity::getSpec).or().eq(SmErpUnitEntity::getSpec, ""));
|
||||
}
|
||||
}
|
||||
|
||||
SmErpUnitEntity existingUnit = smErpUnitService.getOne(existingUnitWrapper);
|
||||
|
||||
if (existingUnit != null) {
|
||||
// 更新现有包装单位
|
||||
// 更新现有包装单位(不改动主数据)
|
||||
existingUnit.setPackageNum(dto.getPackageNum());
|
||||
existingUnit.setBarCode(StringUtils.isNotBlank(dto.getBarCode()) ? dto.getBarCode() : null); // 更新条码
|
||||
existingUnit.setTaste(StringUtils.isNotBlank(dto.getTaste()) ? dto.getTaste() : null); // 更新口味
|
||||
existingUnit.setSpec(StringUtils.isNotBlank(dto.getSpec()) ? dto.getSpec() : null); // 更新规格
|
||||
existingUnit.setBarCode(org.apache.commons.lang3.StringUtils.isNotBlank(dto.getBarCode()) ? dto.getBarCode() : null); // 更新条码
|
||||
existingUnit.setPurchasePrice(unit.getPurchasePrice());
|
||||
existingUnit.setRetailPrice(unit.getRetailPrice());
|
||||
existingUnit.setPromotionPrice(unit.getPromotionPrice());
|
||||
@@ -1116,19 +1068,19 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
|
||||
|
||||
// 6. 处理辅助条码(多个辅助条码)
|
||||
List<String> auxiliaryBarcodes = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(dto.getAuxiliaryBarcode1())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getAuxiliaryBarcode1())) {
|
||||
auxiliaryBarcodes.add(dto.getAuxiliaryBarcode1());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getAuxiliaryBarcode2())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getAuxiliaryBarcode2())) {
|
||||
auxiliaryBarcodes.add(dto.getAuxiliaryBarcode2());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getAuxiliaryBarcode3())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getAuxiliaryBarcode3())) {
|
||||
auxiliaryBarcodes.add(dto.getAuxiliaryBarcode3());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getAuxiliaryBarcode4())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getAuxiliaryBarcode4())) {
|
||||
auxiliaryBarcodes.add(dto.getAuxiliaryBarcode4());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getAuxiliaryBarcode5())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getAuxiliaryBarcode5())) {
|
||||
auxiliaryBarcodes.add(dto.getAuxiliaryBarcode5());
|
||||
}
|
||||
|
||||
@@ -1167,9 +1119,12 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
|
||||
SmErpStockEntity existingStock = smErpStockService.getOne(existingStockWrapper);
|
||||
|
||||
if (existingStock != null) {
|
||||
// 库存记录已存在,记录警告但不更新(保护线上数据)
|
||||
errorReasons.add("库存记录已存在,跳过导入以避免覆盖线上数据");
|
||||
continue;
|
||||
// 更新现有库存记录
|
||||
existingStock.setInventoryUpperLimit(dto.getInventoryUpperLimit() != null ? dto.getInventoryUpperLimit() : 1000);
|
||||
existingStock.setInventoryLowerLimit(dto.getInventoryLowerLimit() != null ? dto.getInventoryLowerLimit() : 10);
|
||||
existingStock.setBaseStock(dto.getStock() != null ? dto.getStock() : 0.0);
|
||||
existingStock.setCurrentStock(dto.getStock() != null ? dto.getStock() : 0.0);
|
||||
smErpStockService.updateById(existingStock);
|
||||
} else {
|
||||
smErpStockService.save(stock);
|
||||
}
|
||||
@@ -1251,29 +1206,8 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
|
||||
|
||||
SmErpSpuEntity spu;
|
||||
if (existingSpu != null) {
|
||||
// 更新现有商品
|
||||
// 商品已存在:不更新主数据,继续为该 SPU 处理包装单位与条码
|
||||
spu = existingSpu;
|
||||
spu.setProductName(dto.getProductName());
|
||||
spu.setSpec(dto.getSpec());
|
||||
spu.setOrigin(dto.getOrigin());
|
||||
spu.setBarCode(dto.getBarCode());
|
||||
spu.setPurchasePrice(dto.getPurchasePrice() != null ?
|
||||
BigDecimal.valueOf(dto.getPurchasePrice()).multiply(BigDecimal.valueOf(100)).intValue() : 0);
|
||||
spu.setRetailPrice(dto.getRetailPrice() != null ?
|
||||
BigDecimal.valueOf(dto.getRetailPrice()).multiply(BigDecimal.valueOf(100)).intValue() : 0);
|
||||
spu.setPromotionPrice(dto.getPromotionPrice() != null ?
|
||||
BigDecimal.valueOf(dto.getPromotionPrice()).multiply(BigDecimal.valueOf(100)).intValue() : 0);
|
||||
spu.setCostPrice(dto.getCostPrice() != null ?
|
||||
BigDecimal.valueOf(dto.getCostPrice()).multiply(BigDecimal.valueOf(100)).doubleValue() : 0.0);
|
||||
spu.setProductNature("电子称称重商品".equals(dto.getProductNature()) ? "2" : "1");
|
||||
spu.setStatus("停销".equals(dto.getStatus()) ? "1" : "0");
|
||||
if (categoryId != null) {
|
||||
spu.setCategoryId(categoryId);
|
||||
}
|
||||
if (supplierId != null) {
|
||||
spu.setSupplierId(supplierId);
|
||||
}
|
||||
this.updateById(spu);
|
||||
} else {
|
||||
// 创建新商品
|
||||
spu = new SmErpSpuEntity();
|
||||
@@ -1309,8 +1243,8 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
|
||||
unit.setPackageNum(dto.getPackageNum());
|
||||
unit.setIsBase(true); // 默认为基础单位
|
||||
unit.setBarCode(dto.getBarCode()); // 包装单位的条码来自主条码
|
||||
unit.setTaste(StringUtils.isNotBlank(dto.getTaste()) ? dto.getTaste() : null); // 设置口味,空值设为null
|
||||
unit.setSpec(StringUtils.isNotBlank(dto.getSpec()) ? dto.getSpec() : null); // 设置规格字段,空值设为null
|
||||
unit.setTaste(dto.getTaste()); // 设置口味
|
||||
unit.setSpec(dto.getSpec()); // 设置规格字段
|
||||
unit.setPurchasePrice(dto.getPurchasePrice() != null ?
|
||||
BigDecimal.valueOf(dto.getPurchasePrice()).multiply(BigDecimal.valueOf(100)).intValue() : 0);
|
||||
unit.setRetailPrice(dto.getRetailPrice() != null ?
|
||||
@@ -1320,50 +1254,20 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
|
||||
unit.setCostPrice(dto.getCostPrice() != null ?
|
||||
BigDecimal.valueOf(dto.getCostPrice()).multiply(BigDecimal.valueOf(100)).intValue() : 0);
|
||||
|
||||
// 检查单位是否已存在(根据条码,因为每个商品下的包装单位条码是唯一的)
|
||||
// 检查单位是否已存在(根据单位名称、口味和规格)
|
||||
LambdaQueryWrapper<SmErpUnitEntity> existingUnitWrapper = new LambdaQueryWrapper<>();
|
||||
existingUnitWrapper.eq(SmErpUnitEntity::getSpuId, spu.getId());
|
||||
|
||||
if (StringUtils.isNotBlank(dto.getBarCode())) {
|
||||
// 如果有条码,使用条码作为主要去重依据
|
||||
existingUnitWrapper.eq(SmErpUnitEntity::getBarCode, dto.getBarCode());
|
||||
} else {
|
||||
// 如果条码为空,使用单位名称、口味和规格的组合作为去重依据
|
||||
existingUnitWrapper.eq(SmErpUnitEntity::getUnit, dto.getUnit());
|
||||
|
||||
// 处理口味字段的查询条件
|
||||
if (StringUtils.isNotBlank(dto.getTaste())) {
|
||||
existingUnitWrapper.eq(SmErpUnitEntity::getTaste, dto.getTaste());
|
||||
} else {
|
||||
// 当口味为空时,查询口味为null或空字符串的记录
|
||||
existingUnitWrapper.and(wrapper -> wrapper
|
||||
.isNull(SmErpUnitEntity::getTaste)
|
||||
.or()
|
||||
.eq(SmErpUnitEntity::getTaste, "")
|
||||
);
|
||||
}
|
||||
|
||||
// 处理规格字段的查询条件
|
||||
if (StringUtils.isNotBlank(dto.getSpec())) {
|
||||
existingUnitWrapper.eq(SmErpUnitEntity::getSpec, dto.getSpec());
|
||||
} else {
|
||||
// 当规格为空时,查询规格为null或空字符串的记录
|
||||
existingUnitWrapper.and(wrapper -> wrapper
|
||||
.isNull(SmErpUnitEntity::getSpec)
|
||||
.or()
|
||||
.eq(SmErpUnitEntity::getSpec, "")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
existingUnitWrapper.eq(SmErpUnitEntity::getSpuId, spu.getId())
|
||||
.eq(SmErpUnitEntity::getUnit, dto.getUnit())
|
||||
.eq(SmErpUnitEntity::getTaste, dto.getTaste())
|
||||
.eq(SmErpUnitEntity::getSpec, dto.getSpec()); // 加入规格字段作为查询条件
|
||||
SmErpUnitEntity existingUnit = smErpUnitService.getOne(existingUnitWrapper);
|
||||
|
||||
if (existingUnit != null) {
|
||||
// 更新现有包装单位
|
||||
existingUnit.setPackageNum(dto.getPackageNum());
|
||||
existingUnit.setBarCode(dto.getBarCode()); // 更新条码
|
||||
existingUnit.setTaste(StringUtils.isNotBlank(dto.getTaste()) ? dto.getTaste() : null); // 更新口味
|
||||
existingUnit.setSpec(StringUtils.isNotBlank(dto.getSpec()) ? dto.getSpec() : null); // 更新规格
|
||||
existingUnit.setTaste(dto.getTaste()); // 更新口味
|
||||
existingUnit.setSpec(dto.getSpec()); // 更新规格
|
||||
existingUnit.setPurchasePrice(unit.getPurchasePrice());
|
||||
existingUnit.setRetailPrice(unit.getRetailPrice());
|
||||
existingUnit.setPromotionPrice(unit.getPromotionPrice());
|
||||
@@ -1375,19 +1279,19 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
|
||||
|
||||
// 6. 处理辅助条码(多个辅助条码)
|
||||
List<String> auxiliaryBarcodes = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(dto.getAuxiliaryBarcode1())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getAuxiliaryBarcode1())) {
|
||||
auxiliaryBarcodes.add(dto.getAuxiliaryBarcode1());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getAuxiliaryBarcode2())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getAuxiliaryBarcode2())) {
|
||||
auxiliaryBarcodes.add(dto.getAuxiliaryBarcode2());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getAuxiliaryBarcode3())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getAuxiliaryBarcode3())) {
|
||||
auxiliaryBarcodes.add(dto.getAuxiliaryBarcode3());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getAuxiliaryBarcode4())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getAuxiliaryBarcode4())) {
|
||||
auxiliaryBarcodes.add(dto.getAuxiliaryBarcode4());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getAuxiliaryBarcode5())) {
|
||||
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getAuxiliaryBarcode5())) {
|
||||
auxiliaryBarcodes.add(dto.getAuxiliaryBarcode5());
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -170,7 +170,7 @@
|
||||
spu.sales_count,
|
||||
spu.dept_id,
|
||||
spu.create_by,
|
||||
spu.unit,
|
||||
unit.unit,
|
||||
spu.spec,
|
||||
unit.retail_price,
|
||||
spu.cost_price,
|
||||
|
||||
Reference in new issue
Block a user