Commit c5cf65cf authored by wanglianghe's avatar wanglianghe

价格更新fix

parent 39857ba5
...@@ -59,6 +59,7 @@ import org.springframework.validation.annotation.Validated; ...@@ -59,6 +59,7 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration; import java.time.Duration;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
...@@ -586,7 +587,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -586,7 +587,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
Map<Long, List<ProductPriceStepDO>> dbStepMap = dbStepList.stream() Map<Long, List<ProductPriceStepDO>> dbStepMap = dbStepList.stream()
.collect(Collectors.groupingBy(ProductPriceStepDO::getProductPriceId)); .collect(Collectors.groupingBy(ProductPriceStepDO::getProductPriceId));
List<ProductPriceStepDO> insertList = new ArrayList<>(); List<ProductPriceStepDO> insertList1 = new ArrayList<>();
List<ProductPriceStepDO> updateList = new ArrayList<>(); List<ProductPriceStepDO> updateList = new ArrayList<>();
for (Long productPriceId : productPriceIdList) { for (Long productPriceId : productPriceIdList) {
String transportType = priceTransportTypeMap.get(productPriceId); String transportType = priceTransportTypeMap.get(productPriceId);
...@@ -599,13 +600,11 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -599,13 +600,11 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
dbItem.setId(null); dbItem.setId(null);
dbItem.setProductPriceId(productPriceId); dbItem.setProductPriceId(productPriceId);
initBasePrice(dbItem, transportType); initBasePrice(dbItem, transportType);
insertList.add(dbItem); insertList1.add(dbItem);
} }
} else { } else {
//更新 //更新
for (ProductPriceStepDO stepItem : stepList) { for (ProductPriceStepDO stepItem : stepList) {
if(stepItem.getTransportPrice() == null && stepItem.getClearancePrice() == null
&& stepItem.getAllPrice() == null) continue;
boolean update = false; boolean update = false;
for (ProductPriceStepDO dbStepItem : dbPriceStepList) { for (ProductPriceStepDO dbStepItem : dbPriceStepList) {
if(!stepItem.getPriceType().equals(dbStepItem.getPriceType())) continue; if(!stepItem.getPriceType().equals(dbStepItem.getPriceType())) continue;
...@@ -616,6 +615,11 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -616,6 +615,11 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
} }
//更新 //更新
update = true; update = true;
dbStepItem.setSpecialList(stepItem.getSpecialList());
dbStepItem.setPackagingList(stepItem.getPackagingList());
updateList.add(dbStepItem);
if(stepItem.getTransportPrice() == null && stepItem.getClearancePrice() == null
&& stepItem.getAllPrice() == null) continue;
if(stepItem.getTransportPrice() != null) { if(stepItem.getTransportPrice() != null) {
dbStepItem.setTransportPrice(stepItem.getTransportPrice()); dbStepItem.setTransportPrice(stepItem.getTransportPrice());
} }
...@@ -649,9 +653,6 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -649,9 +653,6 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
if(stepItem.getRankNum() != null) { if(stepItem.getRankNum() != null) {
dbStepItem.setRankNum(stepItem.getRankNum()); dbStepItem.setRankNum(stepItem.getRankNum());
} }
dbStepItem.setSpecialList(stepItem.getSpecialList());
dbStepItem.setPackagingList(stepItem.getPackagingList());
updateList.add(dbStepItem);
break; break;
} }
if(!update) { if(!update) {
...@@ -659,13 +660,13 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -659,13 +660,13 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
dbItem.setId(null); dbItem.setId(null);
dbItem.setProductPriceId(productPriceId); dbItem.setProductPriceId(productPriceId);
initBasePrice(dbItem, transportType); initBasePrice(dbItem, transportType);
insertList.add(dbItem); insertList1.add(dbItem);
} }
} }
} }
} }
if(CollectionUtil.isNotEmpty(insertList)) { if(CollectionUtil.isNotEmpty(insertList1)) {
productPriceStepMapper.insertBatchSomeColumn(insertList); productPriceStepMapper.insertBatchSomeColumn(insertList1);
} }
if(CollectionUtil.isNotEmpty(updateList)) { if(CollectionUtil.isNotEmpty(updateList)) {
productPriceStepMapper.updateBatch(updateList); productPriceStepMapper.updateBatch(updateList);
...@@ -685,8 +686,9 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -685,8 +686,9 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
} }
} }
insertList.addAll(updateList); insertList1.addAll(updateList);
List<ProductPriceStepSpecialDO> allUpdateStepSpecialList = insertList.stream() List<ProductPriceStepSpecialDO> allUpdateStepSpecialList = insertList1.stream()
.filter(step -> CollectionUtil.isNotEmpty(step.getSpecialList()))
.flatMap(step -> step.getSpecialList().stream()) .flatMap(step -> step.getSpecialList().stream())
.filter(stepSpecialDO -> stepSpecialDO.getTransportPrice() != null .filter(stepSpecialDO -> stepSpecialDO.getTransportPrice() != null
|| stepSpecialDO.getClearancePrice() != null || stepSpecialDO.getClearancePrice() != null
...@@ -710,7 +712,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -710,7 +712,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
List<ProductPriceStepSpecialDO> specialInsertList = new ArrayList<>(); List<ProductPriceStepSpecialDO> specialInsertList = new ArrayList<>();
List<ProductPriceStepSpecialDO> specialUpdateList = new ArrayList<>(); List<ProductPriceStepSpecialDO> specialUpdateList = new ArrayList<>();
for (ProductPriceStepDO stepDO : insertList) { for (ProductPriceStepDO stepDO : insertList1) {
String transportType = priceTransportTypeMap.get(stepDO.getProductPriceId()); String transportType = priceTransportTypeMap.get(stepDO.getProductPriceId());
List<ProductPriceStepSpecialDO> productPriceStepSpecialDOS = stepDO.getSpecialList(); List<ProductPriceStepSpecialDO> productPriceStepSpecialDOS = stepDO.getSpecialList();
//过滤掉价格为空的数据 //过滤掉价格为空的数据
...@@ -778,7 +780,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -778,7 +780,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
productPriceStepSpecialMapper.updateBatch(specialUpdateList); productPriceStepSpecialMapper.updateBatch(specialUpdateList);
} }
List<ProductPriceStepPackagingDO> stepPackagingList = stepList.stream() List<ProductPriceStepPackagingDO> stepPackagingList = insertList1.stream()
.map(ProductPriceStepDO::getPackagingList) .map(ProductPriceStepDO::getPackagingList)
.filter(CollectionUtil::isNotEmpty) .filter(CollectionUtil::isNotEmpty)
.flatMap(List::stream) .flatMap(List::stream)
...@@ -804,7 +806,9 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -804,7 +806,9 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
List<ProductPriceStepPackagingDO> packagingInsertList = new ArrayList<>(); List<ProductPriceStepPackagingDO> packagingInsertList = new ArrayList<>();
List<ProductPriceStepPackagingDO> packagingUpdateList = new ArrayList<>(); List<ProductPriceStepPackagingDO> packagingUpdateList = new ArrayList<>();
for (ProductPriceStepDO priceStepDO : insertList) { List<ProductPriceStepPackagingDO> packagingDeleteListList = new ArrayList<>();
for (ProductPriceStepDO priceStepDO : insertList1) {
List<ProductPriceStepPackagingDO> productPriceStepPackagingDOS = priceStepDO.getPackagingList(); List<ProductPriceStepPackagingDO> productPriceStepPackagingDOS = priceStepDO.getPackagingList();
if(CollectionUtil.isNotEmpty(productPriceStepPackagingDOS)) { if(CollectionUtil.isNotEmpty(productPriceStepPackagingDOS)) {
productPriceStepPackagingDOS = productPriceStepPackagingDOS.stream() productPriceStepPackagingDOS = productPriceStepPackagingDOS.stream()
...@@ -826,27 +830,37 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -826,27 +830,37 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
} }
} else { } else {
for (int i = 0; i < productPriceStepPackagingDOS.size(); i++) { for (int i = 0; i < productPriceStepPackagingDOS.size(); i++) {
boolean update = false; ProductPriceStepPackagingDO item = productPriceStepPackagingDOS.get(i);
ProductPriceStepPackagingDO m = productPriceStepPackagingDOS.get(i); String addPricePackagingTypes = item.getPackagingTypes();
if(StringUtils.isBlank(addPricePackagingTypes)) continue;
Long addPricePackagingPriceUnit = item.getPackagingPriceUnit();
if(addPricePackagingPriceUnit == null) continue;
Long addPricePackagingVolumeUnit = item.getPackagingVolumeUnit();
if(addPricePackagingVolumeUnit == null) continue;
Set<String> addPriceTypeSets = new HashSet<>(Arrays.asList(addPricePackagingTypes.split(",")));
//新增BC
ProductPriceStepPackagingDO dbItem = ObjectUtil.clone(item);
dbItem.setId(null);
dbItem.setProductPriceId(priceStepDO.getProductPriceId());
dbItem.setProductPriceStepId(priceStepDO.getId());
dbItem.setRankNum(i + 1);
dbItem.setDeleted(false);
packagingInsertList.add(dbItem);
if(!batchUpdate) continue;
for (ProductPriceStepPackagingDO dbStepPacking : dbStepPackagingList) { for (ProductPriceStepPackagingDO dbStepPacking : dbStepPackagingList) {
update = checkPackageEquals(m, dbStepPacking); Set<String> dbPriceTypeSets = new HashSet<>(Arrays.asList(dbStepPacking.getPackagingTypes().split(",")));
if(update) { dbPriceTypeSets.removeAll(addPriceTypeSets);
dbStepPacking.setPackagingPrice(m.getPackagingPrice()); if(dbPriceTypeSets.isEmpty()) {
dbStepPacking.setPackagingPriceUnit(m.getPackagingPriceUnit()); packagingDeleteListList.add(dbStepPacking);
dbStepPacking.setPackagingVolumeUnit(m.getPackagingVolumeUnit()); } else {
dbStepPacking.setPackagingTypes(Joiner.on(",").join(dbPriceTypeSets));
dbStepPacking.setPackagingPriceUnit(item.getPackagingPriceUnit());
dbStepPacking.setPackagingVolumeUnit(item.getPackagingVolumeUnit());
packagingUpdateList.add(dbStepPacking); packagingUpdateList.add(dbStepPacking);
break;
} }
} }
if(!update) {
ProductPriceStepPackagingDO dbItem = ObjectUtil.clone(m);
dbItem.setId(null);
dbItem.setProductPriceId(priceStepDO.getProductPriceId());
dbItem.setProductPriceStepId(priceStepDO.getId());
dbItem.setRankNum(i + 1);
dbItem.setDeleted(false);
packagingInsertList.add(dbItem);
}
} }
} }
} }
...@@ -858,6 +872,12 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -858,6 +872,12 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
if(CollectionUtil.isNotEmpty(packagingUpdateList)) { if(CollectionUtil.isNotEmpty(packagingUpdateList)) {
productPriceStepPackagingMapper.updateBatch(packagingUpdateList); productPriceStepPackagingMapper.updateBatch(packagingUpdateList);
} }
if(CollectionUtil.isNotEmpty(packagingDeleteListList)) {
List<Long> dIdList = packagingDeleteListList.stream()
.map(BasePackagingPrice::getId)
.collect(toList());
productPriceStepPackagingMapper.deleteBatchIds(dIdList);
}
if(!batchUpdate) { if(!batchUpdate) {
List<Long> updateIdList = packagingUpdateList.stream() List<Long> updateIdList = packagingUpdateList.stream()
.map(ProductPriceStepPackagingDO::getId) .map(ProductPriceStepPackagingDO::getId)
...@@ -1019,6 +1039,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -1019,6 +1039,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
List<ProductPricePackagingDO> insertList = new ArrayList<>(); List<ProductPricePackagingDO> insertList = new ArrayList<>();
List<ProductPricePackagingDO> updateList = new ArrayList<>(); List<ProductPricePackagingDO> updateList = new ArrayList<>();
List<ProductPricePackagingDO> deleteList = new ArrayList<>();
Collection<Integer> priceTypes = packagingDOList.stream() Collection<Integer> priceTypes = packagingDOList.stream()
.map(ProductPricePackagingDO::getPriceType) .map(ProductPricePackagingDO::getPriceType)
...@@ -1050,30 +1071,39 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -1050,30 +1071,39 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
//更新 //更新
int i = 0; int i = 0;
for (ProductPricePackagingDO item : packagingDOList) { for (ProductPricePackagingDO item : packagingDOList) {
boolean exist = false; String addPricePackagingTypes = item.getPackagingTypes();
if(StringUtils.isBlank(addPricePackagingTypes)) continue;
Long addPricePackagingPriceUnit = item.getPackagingPriceUnit();
if(addPricePackagingPriceUnit == null) continue;
Long addPricePackagingVolumeUnit = item.getPackagingVolumeUnit();
if(addPricePackagingVolumeUnit == null) continue;
i++; i++;
Set<String> addPriceTypeSets = new HashSet<>(Arrays.asList(addPricePackagingTypes.split(",")));
ProductPricePackagingDO dbItem = ObjectUtil.clone(item);
dbItem.setId(null);
dbItem.setRankNum(i + 1);
dbItem.setProductPriceId(productPriceId);
initBasePackagingPrice(dbItem, transportType);
insertList.add(dbItem);
if(!batchUpdate) continue;
for (ProductPricePackagingDO dbPackagingItem : dbPackagingDOList) { for (ProductPricePackagingDO dbPackagingItem : dbPackagingDOList) {
boolean stepPackagingUpdate = checkPackageEquals(item, dbPackagingItem); if(!item.getPriceType().equals(dbPackagingItem.getPriceType())) continue;
if(stepPackagingUpdate) { Set<String> dbPriceTypeSets = new HashSet<>(Arrays.asList(dbPackagingItem.getPackagingTypes().split(",")));
exist = true; dbPriceTypeSets.removeAll(addPriceTypeSets);
dbPackagingItem.setPackagingPrice(item.getPackagingPrice()); if(dbPriceTypeSets.isEmpty()) {
deleteList.add(dbPackagingItem);
} else {
dbPackagingItem.setPackagingTypes(Joiner.on(",").join(dbPriceTypeSets));
dbPackagingItem.setPackagingPriceUnit(item.getPackagingPriceUnit()); dbPackagingItem.setPackagingPriceUnit(item.getPackagingPriceUnit());
dbPackagingItem.setPackagingVolumeUnit(item.getPackagingVolumeUnit()); dbPackagingItem.setPackagingVolumeUnit(item.getPackagingVolumeUnit());
if(item.getPriceType() != null) { if(item.getPriceType() != null) {
dbPackagingItem.setPriceType(item.getPriceType()); dbPackagingItem.setPriceType(item.getPriceType());
} }
updateList.add(dbPackagingItem); updateList.add(dbPackagingItem);
break;
} }
} }
if(!exist) {
ProductPricePackagingDO dbItem = ObjectUtil.clone(item);
dbItem.setId(null);
dbItem.setRankNum(i + 1);
dbItem.setProductPriceId(productPriceId);
initBasePackagingPrice(dbItem, transportType);
insertList.add(dbItem);
}
} }
} }
...@@ -1084,6 +1114,12 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -1084,6 +1114,12 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
if(CollectionUtil.isNotEmpty(updateList)) { if(CollectionUtil.isNotEmpty(updateList)) {
productPricePackagingMapper.updateBatch(updateList); productPricePackagingMapper.updateBatch(updateList);
} }
if(CollectionUtil.isNotEmpty(deleteList)) {
List<Long> dIdList = deleteList.stream()
.map(BasePackagingPrice::getId)
.collect(toList());
productPricePackagingMapper.deleteBatchIds(dIdList);
}
if(!batchUpdate) { if(!batchUpdate) {
List<Long> dbIdList = dbPackagingList.stream() List<Long> dbIdList = dbPackagingList.stream()
...@@ -2646,7 +2682,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -2646,7 +2682,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
for (ProductPricePackagingDO addPricePackaging : packagingList) { for (ProductPricePackagingDO addPricePackaging : packagingList) {
Integer priceType = addPricePackaging.getPriceType(); Integer priceType = addPricePackaging.getPriceType();
if(priceType == null) continue; if(priceType == null) continue;
boolean update = checkPackageAddPrice(addPricePackaging, dbPackaging); boolean update = checkPackageAddPrice(addPricePackaging, dbPackaging) && priceType.equals(dbPackaging.getPriceType());
if(update) { if(update) {
BigDecimal price = dbPackaging.getPackagingPrice(); BigDecimal price = dbPackaging.getPackagingPrice();
price = price.add(addPricePackaging.getPackagingPrice()); price = price.add(addPricePackaging.getPackagingPrice());
...@@ -2816,11 +2852,11 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -2816,11 +2852,11 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
private void checkStepPrice(List<ProductPriceStepDO> priceStepList, PriceTypeEnum priceTypeEnum) { private void checkStepPrice(List<ProductPriceStepDO> priceStepList, PriceTypeEnum priceTypeEnum) {
if (CollectionUtil.isNotEmpty(priceStepList)) { if (CollectionUtil.isNotEmpty(priceStepList)) {
priceStepList = priceStepList.stream() // priceStepList = priceStepList.stream()
.filter(t -> t.getTransportPrice() != null || // .filter(t -> t.getTransportPrice() != null ||
t.getClearancePrice() != null || // t.getClearancePrice() != null ||
t.getAllPrice() != null) // t.getAllPrice() != null)
.collect(Collectors.toList()); // .collect(Collectors.toList());
for (ProductPriceStepDO item : priceStepList) { for (ProductPriceStepDO item : priceStepList) {
if (item.getRankNum() == null) { if (item.getRankNum() == null) {
...@@ -2828,31 +2864,31 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -2828,31 +2864,31 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
} }
item.setPriceType(priceTypeEnum.getPriceType()); item.setPriceType(priceTypeEnum.getPriceType());
} }
switch (priceTypeEnum) { // switch (priceTypeEnum) {
case FREIGHT: // case FREIGHT:
for (ProductPriceStepDO item : priceStepList) { // for (ProductPriceStepDO item : priceStepList) {
if (item.getTransportPrice() == null) { // if (item.getTransportPrice() == null) {
throw new ServiceException(500, "价格不能为空"); // throw new ServiceException(500, "价格不能为空");
} // }
} // }
break; // break;
//
case CLEARANCE: // case CLEARANCE:
for (ProductPriceStepDO item : priceStepList) { // for (ProductPriceStepDO item : priceStepList) {
if (item.getClearancePrice() == null) { // if (item.getClearancePrice() == null) {
throw new ServiceException(500, "价格不能为空"); // throw new ServiceException(500, "价格不能为空");
} // }
} // }
break; // break;
//
case FULL_PRICE: // case FULL_PRICE:
for (ProductPriceStepDO item : priceStepList) { // for (ProductPriceStepDO item : priceStepList) {
if (item.getAllPrice() == null) { // if (item.getAllPrice() == null) {
throw new ServiceException(500, "价格不能为空"); // throw new ServiceException(500, "价格不能为空");
} // }
} // }
break; // break;
} // }
} }
} }
...@@ -2868,21 +2904,27 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper, ...@@ -2868,21 +2904,27 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
ProductPriceStepDO stepDO = priceStepList.get(0); ProductPriceStepDO stepDO = priceStepList.get(0);
switch (priceTypeEnum) { switch (priceTypeEnum) {
case FREIGHT: case FREIGHT:
productPrice.setTransportPrice(stepDO.getTransportPrice()); if(stepDO.getTransportPrice() != null) {
productPrice.setTransportPriceUnit(stepDO.getTransportPriceUnit()); productPrice.setTransportPrice(stepDO.getTransportPrice());
productPrice.setTransportVolumeUnit(stepDO.getTransportVolumeUnit()); productPrice.setTransportPriceUnit(stepDO.getTransportPriceUnit());
productPrice.setTransportVolumeUnit(stepDO.getTransportVolumeUnit());
}
break; break;
case CLEARANCE: case CLEARANCE:
productPrice.setClearancePrice(stepDO.getClearancePrice()); if(stepDO.getClearancePrice() != null) {
productPrice.setClearancePriceUnit(stepDO.getClearancePriceUnit()); productPrice.setClearancePrice(stepDO.getClearancePrice());
productPrice.setClearanceVolumeUnit(stepDO.getClearanceVolumeUnit()); productPrice.setClearancePriceUnit(stepDO.getClearancePriceUnit());
productPrice.setClearanceVolumeUnit(stepDO.getClearanceVolumeUnit());
}
break; break;
case FULL_PRICE: case FULL_PRICE:
productPrice.setAllPrice(stepDO.getAllPrice()); if(stepDO.getAllPrice() != null) {
productPrice.setAllPriceUnit(stepDO.getAllPriceUnit()); productPrice.setAllPrice(stepDO.getAllPrice());
productPrice.setAllVolumeUnit(stepDO.getAllVolumeUnit()); productPrice.setAllPriceUnit(stepDO.getAllPriceUnit());
productPrice.setAllVolumeUnit(stepDO.getAllVolumeUnit());
}
break; break;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment