...
|
...
|
@@ -61,12 +61,13 @@ public class InviteSettlementUtils { |
|
|
* @return
|
|
|
*/
|
|
|
public static Pair<BigDecimal, List<InviteSettlementItem>> calculateSettleAmountOfType2(LocalDateTime inviteTime, LocalDateTime settleTime, List<InviteSettlementItem> items) {
|
|
|
// 被邀请当月月初开始计算
|
|
|
// 被邀请当月月初开始计算,eg:20190101
|
|
|
LocalDateTime calculateStartTime = LocalDateTime.of(LocalDate.of(inviteTime.getYear(), inviteTime.getMonth(), 1), LocalTime.MIN);
|
|
|
|
|
|
// 一个月后eg:20190201
|
|
|
LocalDateTime afterOneMonth = calculateStartTime.plusMonths(1);
|
|
|
|
|
|
LocalDateTime afterFiveMonth = calculateStartTime.plusMonths(5);
|
|
|
// 四个月后eg:20190501
|
|
|
LocalDateTime afterFourMonth = calculateStartTime.plusMonths(4);
|
|
|
|
|
|
// 被邀请来年元旦
|
|
|
LocalDateTime calculateFinalEndTime = LocalDateTime.of(LocalDate.of(inviteTime.getYear() + 1, 1, 1), LocalTime.MIN);
|
...
|
...
|
@@ -79,50 +80,50 @@ public class InviteSettlementUtils { |
|
|
if (settleTime.isBefore(afterOneMonth)) {
|
|
|
return Pair.of(BigDecimal.ZERO, items);
|
|
|
}
|
|
|
// 五个月内
|
|
|
else if (settleTime.isBefore(afterFiveMonth)) {
|
|
|
// 四个月内
|
|
|
else if (settleTime.isBefore(afterFourMonth)) {
|
|
|
return Pair.of(
|
|
|
calculateInOneMountTotalSettleAmountOfType2(items, afterOneMonth),
|
|
|
items.stream().filter(item -> iaAfterOrEqual.test(item, afterOneMonth)).collect(Collectors.toList())
|
|
|
);
|
|
|
}
|
|
|
// 五个月后
|
|
|
// 四个月后
|
|
|
else {
|
|
|
// 五个月后没有超过最终结算时间
|
|
|
if (afterFiveMonth.isBefore(calculateFinalEndTime)) {
|
|
|
// 四个月后没有超过最终结算时间
|
|
|
if (afterFourMonth.isBefore(calculateFinalEndTime)) {
|
|
|
// 最终结算时间前
|
|
|
if (settleTime.isBefore(calculateFinalEndTime)) {
|
|
|
return Pair.of(
|
|
|
calculateInOneMountTotalSettleAmountOfType2(items, afterOneMonth)
|
|
|
.add(calculateInFiveMountTotalSettleAmountOfType2(items, afterOneMonth, afterFiveMonth, iaAfterOrEqual)),
|
|
|
items.stream().filter(item -> iaAfterOrEqual.test(item, afterFiveMonth)).collect(Collectors.toList())
|
|
|
.add(calculateInFourMountTotalSettleAmountOfType2(items, afterOneMonth, afterFourMonth, iaAfterOrEqual)),
|
|
|
items.stream().filter(item -> iaAfterOrEqual.test(item, afterFourMonth)).collect(Collectors.toList())
|
|
|
);
|
|
|
}
|
|
|
// 最终结算时间后
|
|
|
else {
|
|
|
return Pair.of(
|
|
|
calculateInOneMountTotalSettleAmountOfType2(items, afterOneMonth)
|
|
|
.add(calculateInFiveMountTotalSettleAmountOfType2(items, afterOneMonth, afterFiveMonth, iaAfterOrEqual))
|
|
|
.add(calculateOutFiveMountTotalSettleAmountOfType2(items, afterFiveMonth, calculateFinalEndTime, iaAfterOrEqual)),
|
|
|
.add(calculateInFourMountTotalSettleAmountOfType2(items, afterOneMonth, afterFourMonth, iaAfterOrEqual))
|
|
|
.add(calculateOutFourMountTotalSettleAmountOfType2(items, afterFourMonth, calculateFinalEndTime, iaAfterOrEqual)),
|
|
|
items.stream().filter(item -> iaAfterOrEqual.test(item, calculateFinalEndTime)).collect(Collectors.toList())
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
// 五个月后已经超过了最终结算时间
|
|
|
// 四个月后已经超过了最终结算时间
|
|
|
else {
|
|
|
return Pair.of(
|
|
|
calculateInOneMountTotalSettleAmountOfType2(items, afterOneMonth)
|
|
|
.add(calculateInFiveMountTotalSettleAmountOfType2(items, afterOneMonth, calculateFinalEndTime, iaAfterOrEqual)),
|
|
|
.add(calculateInFourMountTotalSettleAmountOfType2(items, afterOneMonth, calculateFinalEndTime, iaAfterOrEqual)),
|
|
|
items.stream().filter(item -> iaAfterOrEqual.test(item, calculateFinalEndTime)).collect(Collectors.toList())
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private static BigDecimal calculateOutFiveMountTotalSettleAmountOfType2(List<InviteSettlementItem> items, LocalDateTime afterFiveMonth, LocalDateTime calculateEndTime, BiPredicate<InviteSettlementItem, LocalDateTime> iaAfterOrEqual) {
|
|
|
private static BigDecimal calculateOutFourMountTotalSettleAmountOfType2(List<InviteSettlementItem> items, LocalDateTime afterFourMonth, LocalDateTime calculateEndTime, BiPredicate<InviteSettlementItem, LocalDateTime> iaAfterOrEqual) {
|
|
|
BigDecimal outFiveMonthTotalSettleAmount;
|
|
|
BigDecimal outFiveMonthTotalOrderAmount = items.stream()
|
|
|
.filter(item -> iaAfterOrEqual.test(item, afterFiveMonth))
|
|
|
.filter(item -> iaAfterOrEqual.test(item, afterFourMonth))
|
|
|
.filter(item -> newLocalDateTimeOfEpochSecond(item.getCreateTime()).isBefore(calculateEndTime))
|
|
|
.map(InviteSettlementItem::getOrderAmount)
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
...
|
...
|
@@ -138,7 +139,7 @@ public class InviteSettlementUtils { |
|
|
return outFiveMonthTotalSettleAmount;
|
|
|
}
|
|
|
|
|
|
private static BigDecimal calculateInFiveMountTotalSettleAmountOfType2(List<InviteSettlementItem> items, LocalDateTime afterOneMonth, LocalDateTime calculateEndTime, BiPredicate<InviteSettlementItem, LocalDateTime> iaAfterOrEqual) {
|
|
|
private static BigDecimal calculateInFourMountTotalSettleAmountOfType2(List<InviteSettlementItem> items, LocalDateTime afterOneMonth, LocalDateTime calculateEndTime, BiPredicate<InviteSettlementItem, LocalDateTime> iaAfterOrEqual) {
|
|
|
BigDecimal inFiveMonthTotalSettleAmount;
|
|
|
BigDecimal inFiveMonthTotalOrderAmount = items.stream()
|
|
|
.filter(item -> iaAfterOrEqual.test(item, afterOneMonth))
|
...
|
...
|
|