mirror of https://github.com/jeecgboot/jeecg-boot
Improve the process of deciding whether gift insertion is needed by reducing old gift map before comparison of two maps
parent
3ca6fca694
commit
5fd182f06f
|
@ -171,7 +171,7 @@ public class AddGiftJob implements Job {
|
||||||
log.info("Processing order {} ", order.getPlatformOrderId());
|
log.info("Processing order {} ", order.getPlatformOrderId());
|
||||||
// Non matching-quantity rules only apply once per order
|
// Non matching-quantity rules only apply once per order
|
||||||
boolean nonMatchingRulesApplied = false;
|
boolean nonMatchingRulesApplied = false;
|
||||||
HashMap<String, Integer> giftMap = new HashMap<>();
|
HashMap<String, Integer> newGiftMap = new HashMap<>();
|
||||||
Map<Boolean, List<OrderItem>> orderItemMap = order.getOrderItems()
|
Map<Boolean, List<OrderItem>> orderItemMap = order.getOrderItems()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(orderItem -> !orderItem.getStatus().equalsIgnoreCase(OBSOLETE_STATUS_CODE))
|
.filter(orderItem -> !orderItem.getStatus().equalsIgnoreCase(OBSOLETE_STATUS_CODE))
|
||||||
|
@ -182,27 +182,31 @@ public class AddGiftJob implements Job {
|
||||||
for (GiftRule giftRule : nonMatchingQuantityRules) {
|
for (GiftRule giftRule : nonMatchingQuantityRules) {
|
||||||
if (erpCode.matches(giftRule.getRegex())) {
|
if (erpCode.matches(giftRule.getRegex())) {
|
||||||
nonMatchingRulesApplied = true;
|
nonMatchingRulesApplied = true;
|
||||||
putValueInMapOrReduce(giftRule.getSku(), 1, giftMap);
|
putValueInMapOrReduce(giftRule.getSku(), 1, newGiftMap);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (GiftRule giftRule : matchingQuantityRules) {
|
for (GiftRule giftRule : matchingQuantityRules) {
|
||||||
if (erpCode.matches(giftRule.getRegex())) {
|
if (erpCode.matches(giftRule.getRegex())) {
|
||||||
putValueInMapOrReduce(giftRule.getSku(), orderItem.getQuantity(), giftMap);
|
putValueInMapOrReduce(giftRule.getSku(), orderItem.getQuantity(), newGiftMap);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("Order {} 's new gift map : ", giftMap);
|
log.debug("Order {} 's new gift map : ", newGiftMap);
|
||||||
HashSet<Triple<String, String, Integer>> oldSkuData = new HashSet<>();
|
HashSet<Triple<String, String, Integer>> oldSkuData = new HashSet<>();
|
||||||
|
HashMap<String, Integer> oldGiftMap = new HashMap<>();
|
||||||
List<OrderItem> oldGifts = orderItemMap.get(Boolean.TRUE) == null ? new ArrayList<>() : orderItemMap.get(Boolean.TRUE);
|
List<OrderItem> oldGifts = orderItemMap.get(Boolean.TRUE) == null ? new ArrayList<>() : orderItemMap.get(Boolean.TRUE);
|
||||||
oldGifts.forEach(orderItem -> oldSkuData.add(Triple.of(orderItem.getErpCode(),
|
oldGifts.forEach(orderItem -> {
|
||||||
orderItem.getErpOrderItemId(), orderItem.getQuantity())));
|
oldSkuData.add(Triple.of(orderItem.getErpCode(),
|
||||||
|
orderItem.getErpOrderItemId(), orderItem.getQuantity()));
|
||||||
|
putValueInMapOrReduce(orderItem.getErpCode(), orderItem.getQuantity(), oldGiftMap);
|
||||||
|
});
|
||||||
HashSet<Pair<String, Integer>> newSkuData = new HashSet<>();
|
HashSet<Pair<String, Integer>> newSkuData = new HashSet<>();
|
||||||
giftMap.forEach((key, value) -> newSkuData.add(Pair.of(key, value)));
|
newGiftMap.forEach((key, value) -> newSkuData.add(Pair.of(key, value)));
|
||||||
|
|
||||||
if (giftInsertionNeeded(oldSkuData, newSkuData)) {
|
if (!newGiftMap.isEmpty() && !newGiftMap.equals(oldGiftMap)) {
|
||||||
ChangeOrderRequestBody changeOrderRequestBody = new ChangeOrderRequestBody(order.getPlatformOrderId(), null,
|
ChangeOrderRequestBody changeOrderRequestBody = new ChangeOrderRequestBody(order.getPlatformOrderId(), null,
|
||||||
oldSkuData, newSkuData, null);
|
oldSkuData, newSkuData, null);
|
||||||
giftInsertionRequests.add(changeOrderRequestBody);
|
giftInsertionRequests.add(changeOrderRequestBody);
|
||||||
|
@ -225,17 +229,4 @@ public class AddGiftJob implements Job {
|
||||||
giftMap.put(key, value);
|
giftMap.put(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean giftInsertionNeeded(HashSet<Triple<String, String, Integer>> oldSkuData, HashSet<Pair<String, Integer>> newSkuData) {
|
|
||||||
if (newSkuData.isEmpty()) {
|
|
||||||
return false;
|
|
||||||
} else
|
|
||||||
// Need more inspection when set sizes are the same
|
|
||||||
if (oldSkuData.size() == newSkuData.size()) {
|
|
||||||
HashSet<Pair<String, Integer>> oldSkuDataInPairs = new HashSet<>();
|
|
||||||
oldSkuData.forEach(triple -> oldSkuDataInPairs.add(Pair.of(triple.getLeft(), triple.getRight())));
|
|
||||||
return !oldSkuDataInPairs.containsAll(newSkuData) && !newSkuData.containsAll(oldSkuDataInPairs);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue