public static void main(String[] args) {
//先封装一个总体的需要满减的金额
Map<Integer, BigDecimal> skuToMap = new HashMap<>();
for (int i = 1; i < 100; i++) {
skuToMap.put(i, RandomUtil.randomBigDecimal(new BigDecimal(10), new BigDecimal(40)).setScale(2, BigDecimal.ROUND_DOWN));
}
BigDecimal totalFullAmount = BigDecimal.ZERO;
for (Map.Entry<Integer, BigDecimal> longBigDecimalEntry : skuToMap.entrySet()) {
totalFullAmount = totalFullAmount.add(longBigDecimalEntry.getValue());
}
//满减满足条件减去的金额
BigDecimal totalReducePrice = RandomUtil.randomBigDecimal(new BigDecimal(10), new BigDecimal(30)).setScale(2, BigDecimal.ROUND_DOWN);
if (totalFullAmount.compareTo(totalReducePrice) > 0) {
//循环满减方式向下取整类似天猫满200减30
BigDecimal averageReducePrice = totalReducePrice.divide(totalFullAmount, 2, BigDecimal.ROUND_DOWN);
int mapSize = skuToMap.size();
int i = 0;
BigDecimal alreadyReducePrice = BigDecimal.ZERO;
Map<Integer, BigDecimal> sssss = new LinkedHashMap<>();
skuToMap.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getValue)).collect(Collectors.toList()).forEach(ele -> sssss.put(ele.getKey(), ele.getValue()));
for (Map.Entry<Integer, BigDecimal> longBigDecimalEntry : sssss.entrySet()) {
Integer skuId = longBigDecimalEntry.getKey();
BigDecimal price = longBigDecimalEntry.getValue();
if (mapSize - i == 1) {
//TODO 这里存在问题,如果这个商品的金额小于或者等于最后的满减金额这里会为负值或者为0的情况
BigDecimal skuReducePrice = totalReducePrice.subtract(alreadyReducePrice).setScale(2, BigDecimal.ROUND_DOWN);
alreadyReducePrice = alreadyReducePrice.add(skuReducePrice);
System.out.println(skuReducePrice);
} else {
BigDecimal skuReducePrice = price.multiply(averageReducePrice).setScale(2, BigDecimal.ROUND_DOWN);
alreadyReducePrice = alreadyReducePrice.add(skuReducePrice);
System.out.println(skuReducePrice);
}
i++;
}
System.out.println(alreadyReducePrice.compareTo(totalReducePrice) == 0);
}
}
满减活动基础算法-java-类似淘宝满200减30
最新推荐文章于 2024-05-04 00:30:00 发布