|
|
|
@@ -234,36 +234,121 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
activityItem.setActivityGrantItemList(Collections.singletonList(grantItem)); |
|
|
|
} |
|
|
|
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { |
|
|
|
BigDecimal cashBackPrice = BigDecimal.ZERO; |
|
|
|
BigDecimal cashBackPriceTotal = BigDecimal.ZERO; |
|
|
|
List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>(); |
|
|
|
|
|
|
|
List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); |
|
|
|
//单笔订单计算 |
|
|
|
if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){ |
|
|
|
for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ |
|
|
|
WxOfflineActivityAwardsItem grantAwardsItem = null; |
|
|
|
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ |
|
|
|
if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) |
|
|
|
&& (awardsItem.getMaxAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMaxAmount()) <= 0)){ |
|
|
|
grantAwardsItem = awardsItem; |
|
|
|
} |
|
|
|
} |
|
|
|
if(grantAwardsItem == null){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// WxOfflineActivityGrantItem grantItem = new WxOfflineActivityGrantItem(); |
|
|
|
// grantItem.setActivityItemId(activityItem.getId()); |
|
|
|
// grantItem.setActivityItemName(activityItem.getName()); |
|
|
|
// grantItem.setActivityItemType(activityItem.getType()); |
|
|
|
// grantItem.setAwardItamId(grantAwardsItem.getId()); |
|
|
|
// grantItem.setAwardName(grantAwardsItem.getName()); |
|
|
|
// grantItem.setAwardGrade(grantAwardsItem.getGrade()); |
|
|
|
// grantItem.setAwardMinAmount(grantAwardsItem.getMinAmount()); |
|
|
|
// grantItem.setAwardMaxAmount(grantAwardsItem.getMaxAmount()); |
|
|
|
// grantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); |
|
|
|
// grantItem.setAwardCount(1); |
|
|
|
// |
|
|
|
// //计算返现金额 |
|
|
|
// BigDecimal cashBackPrice = record.getOrderMoney() |
|
|
|
// .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
// if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
// grantItem.setAwardPrice(cashBackPrice.setScale(2, RoundingMode.HALF_UP)); |
|
|
|
// } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
// grantItem.setAwardPrice(cashBackPrice.setScale(0, RoundingMode.HALF_UP)); |
|
|
|
// }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
// BigDecimal cashBackPriceTen = cashBackPrice.divide(new BigDecimal(10)) |
|
|
|
// .setScale(0, RoundingMode.HALF_UP); |
|
|
|
// grantItem.setAwardPrice(cashBackPriceTen.multiply(new BigDecimal(10))); |
|
|
|
// } |
|
|
|
// grantItem.setMoneyRule(grantAwardsItem.getMoneyRule()); |
|
|
|
// grantItem.setMallShareRate(grantAwardsItem.getMallShareRate()); |
|
|
|
// grantItem.setMallSharePrice(grantAwardsItem.getMallSharePrice()); |
|
|
|
//// grantItem.setMerchantShareRate(grantAwardsItem.getMerchantShareRate()); |
|
|
|
//// grantItem.setMerchantSharePrice(grantAwardsItem.getMerchantSharePrice()); |
|
|
|
// grantItemList.add(grantItem); |
|
|
|
|
|
|
|
//计算返现金额 |
|
|
|
BigDecimal cashBackPrice = record.getOrderMoney() |
|
|
|
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
cashBackPrice = cashBackPrice.setScale(2, RoundingMode.HALF_UP); |
|
|
|
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) { |
|
|
|
cashBackPrice = cashBackPrice.setScale(0, RoundingMode.HALF_UP); |
|
|
|
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
cashBackPrice = cashBackPrice.divide(new BigDecimal(10)) |
|
|
|
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10)); |
|
|
|
} |
|
|
|
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); |
|
|
|
} |
|
|
|
}else{ |
|
|
|
|
|
|
|
WxOfflineActivityAwardsItem grantAwardsItem = null; |
|
|
|
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ |
|
|
|
if((awardsItem.getMinAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) >= 0) |
|
|
|
&& (awardsItem.getMaxAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) <= 0)){ |
|
|
|
grantAwardsItem = awardsItem; |
|
|
|
} |
|
|
|
} |
|
|
|
if(grantAwardsItem == null){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
//计算返现金额 |
|
|
|
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() |
|
|
|
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
cashBackPrice = cashBackPrice.setScale(2, RoundingMode.HALF_UP); |
|
|
|
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) { |
|
|
|
cashBackPrice = cashBackPrice.setScale(0, RoundingMode.HALF_UP); |
|
|
|
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
cashBackPrice = cashBackPrice.divide(new BigDecimal(10)) |
|
|
|
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10)); |
|
|
|
} |
|
|
|
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); |
|
|
|
} |
|
|
|
activityItem.setCashBackPrice(BigDecimal.ONE); |
|
|
|
// if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ |
|
|
|
// activityItem.setIsMeet(false); |
|
|
|
// continue; |
|
|
|
// } |
|
|
|
// activityItem.setIsMeet(true); |
|
|
|
// activityItem.setRealAwardsItemLimit(1); |
|
|
|
// for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) { |
|
|
|
// //计算返现金额 |
|
|
|
// BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() |
|
|
|
// .multiply(awardsItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
// if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
// awardsItem.setPrice(cashBackPrice.setScale(2, RoundingMode.HALF_UP)); |
|
|
|
// } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) { |
|
|
|
// awardsItem.setPrice(cashBackPrice.setScale(0, RoundingMode.HALF_UP)); |
|
|
|
// }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
// BigDecimal cashBackPriceTen = cashBackPrice.divide(new BigDecimal(10)) |
|
|
|
// .setScale(0, RoundingMode.HALF_UP); |
|
|
|
// awardsItem.setPrice(cashBackPriceTen.multiply(new BigDecimal(10))); |
|
|
|
// } |
|
|
|
// } |
|
|
|
//计算商户商管分别承担金额 |
|
|
|
// handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); |
|
|
|
|
|
|
|
if(activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ |
|
|
|
List<Long> merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); |
|
|
|
Map<Integer, WxOfflineActivityAwardsItem> collect = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); |
|
|
|
WxOfflineActivityAwardsItem grantAwardsSecondItem = collect.get(merchantIds.size()); |
|
|
|
if(grantAwardsSecondItem == null){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
//计算返现金额 |
|
|
|
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() |
|
|
|
.multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
cashBackPrice = cashBackPrice.setScale(2, RoundingMode.HALF_UP); |
|
|
|
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) { |
|
|
|
cashBackPrice = cashBackPrice.setScale(0, RoundingMode.HALF_UP); |
|
|
|
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
cashBackPrice = cashBackPrice.divide(new BigDecimal(10)) |
|
|
|
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10)); |
|
|
|
} |
|
|
|
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); |
|
|
|
} |
|
|
|
|
|
|
|
if(activityItem.getMaxAmount().compareTo(cashBackPriceTotal) >= 0){ |
|
|
|
activityItem.setCashBackPrice(cashBackPriceTotal); |
|
|
|
}else{ |
|
|
|
activityItem.setCashBackPrice(activityItem.getMaxAmount()); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@@ -384,10 +469,10 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动项参数"); |
|
|
|
} |
|
|
|
List<WxOfflineActivityGrantItem> activityGrantItemList = grantActivityItem.getActivityGrantItemList(); |
|
|
|
if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ |
|
|
|
continue; |
|
|
|
// throw new MallinkException(Result.ERROR, "请检查活动奖项参数"); |
|
|
|
} |
|
|
|
// if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ |
|
|
|
// continue; |
|
|
|
//// throw new MallinkException(Result.ERROR, "请检查活动奖项参数"); |
|
|
|
// } |
|
|
|
boolean isRepeat = activityGrantItemList.stream() |
|
|
|
.collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting())) |
|
|
|
.entrySet().stream().anyMatch(e -> e.getValue() > 1); |
|
|
|
@@ -397,12 +482,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
|
|
|
|
Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); |
|
|
|
|
|
|
|
for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { |
|
|
|
i++; |
|
|
|
if(grantGrantItem.getAwardCount() == null){ |
|
|
|
grantGrantItem.setAwardCount(1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ |
|
|
|
|
|
|
|
@@ -460,20 +540,109 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
|
|
|
|
} |
|
|
|
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { |
|
|
|
if(activityGrantItemList.size() != 1){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); |
|
|
|
BigDecimal cashBackPriceTotal = BigDecimal.ZERO; |
|
|
|
List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>(); |
|
|
|
|
|
|
|
List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); |
|
|
|
//单笔订单计算 |
|
|
|
if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){ |
|
|
|
for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ |
|
|
|
WxOfflineActivityAwardsItem grantAwardsItem = null; |
|
|
|
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ |
|
|
|
if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) |
|
|
|
&& (awardsItem.getMaxAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMaxAmount()) <= 0)){ |
|
|
|
grantAwardsItem = awardsItem; |
|
|
|
} |
|
|
|
} |
|
|
|
if(grantAwardsItem == null){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); |
|
|
|
grantGrantItem.setRecordId(record.getId()); |
|
|
|
//计算返现金额 |
|
|
|
BigDecimal cashBackPrice = record.getOrderMoney() |
|
|
|
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
|
|
|
|
grantAwardsItem.setPrice(cashBackPrice); |
|
|
|
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem); |
|
|
|
|
|
|
|
grantItemList.add(grantGrantItem); |
|
|
|
|
|
|
|
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); |
|
|
|
} |
|
|
|
}else{ |
|
|
|
|
|
|
|
WxOfflineActivityAwardsItem grantAwardsItem = null; |
|
|
|
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ |
|
|
|
if((awardsItem.getMinAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) >= 0) |
|
|
|
&& (awardsItem.getMaxAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) <= 0)){ |
|
|
|
grantAwardsItem = awardsItem; |
|
|
|
} |
|
|
|
} |
|
|
|
if(grantAwardsItem == null){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); |
|
|
|
//计算返现金额 |
|
|
|
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() |
|
|
|
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
grantAwardsItem.setPrice(cashBackPrice); |
|
|
|
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem); |
|
|
|
|
|
|
|
grantItemList.add(grantGrantItem); |
|
|
|
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); |
|
|
|
} |
|
|
|
WxOfflineActivityGrantItem grantGrantItem = activityGrantItemList.get(0); |
|
|
|
if(grantGrantItem.getAwardItamId() == null){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); |
|
|
|
|
|
|
|
if(activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ |
|
|
|
List<Long> merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); |
|
|
|
Map<Integer, WxOfflineActivityAwardsItem> collect = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); |
|
|
|
WxOfflineActivityAwardsItem grantAwardsSecondItem = collect.get(merchantIds.size()); |
|
|
|
if(grantAwardsSecondItem == null){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); |
|
|
|
//计算返现金额 |
|
|
|
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() |
|
|
|
.multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
grantAwardsSecondItem.setPrice(cashBackPrice); |
|
|
|
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsSecondItem); |
|
|
|
|
|
|
|
grantItemList.add(grantGrantItem); |
|
|
|
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); |
|
|
|
} |
|
|
|
WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); |
|
|
|
if(awardsItem == null){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); |
|
|
|
|
|
|
|
BigDecimal prop = BigDecimal.ONE; |
|
|
|
if(activityItem.getMaxAmount().compareTo(cashBackPriceTotal) >= 0){ |
|
|
|
activityItem.setCashBackPrice(cashBackPriceTotal); |
|
|
|
}else{ |
|
|
|
prop = activityItem.getMaxAmount().divide(cashBackPriceTotal).setScale(4, RoundingMode.HALF_UP);; |
|
|
|
activityItem.setCashBackPrice(activityItem.getMaxAmount()); |
|
|
|
} |
|
|
|
for (WxOfflineActivityGrantItem grantItem:grantItemList){ |
|
|
|
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).multiply(prop).setScale(2, RoundingMode.HALF_UP)); |
|
|
|
activityItem.setCashBackPrice(activityItem.getCashBackPrice().setScale(2, RoundingMode.HALF_UP)); |
|
|
|
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) { |
|
|
|
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).multiply(prop).setScale(0, RoundingMode.HALF_UP)); |
|
|
|
activityItem.setCashBackPrice(activityItem.getCashBackPrice().setScale(0, RoundingMode.HALF_UP)); |
|
|
|
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).multiply(prop).divide(new BigDecimal(10)) |
|
|
|
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10))); |
|
|
|
activityItem.setCashBackPrice(activityItem.getCashBackPrice().divide(new BigDecimal(10)) |
|
|
|
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); |
|
|
|
grantActivityItem.setActivityGrantItemList(grantItemList); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
for (WxOfflineActivityGrantItem grantGrantItem : grantActivityItem.getActivityGrantItemList()) { |
|
|
|
i++; |
|
|
|
if(grantGrantItem.getAwardCount() == null){ |
|
|
|
grantGrantItem.setAwardCount(1); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if(i == 0){ |
|
|
|
|