|
|
|
@@ -505,40 +505,37 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
if(wxOfflineActivityGrantAward.getActivityItemList() == null){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动项参数"); |
|
|
|
} |
|
|
|
Map<Long, WxOfflineActivityItem> grantActivityItemMap = wxOfflineActivityGrantAward.getActivityItemList().stream().collect(toMap(WxOfflineActivityItem::getId, Function.identity())); |
|
|
|
|
|
|
|
List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); |
|
|
|
Map<Long, WxOfflineActivityItem> activityItemMap = activityItemList.stream().collect(toMap(WxOfflineActivityItem::getId, Function.identity())); |
|
|
|
|
|
|
|
int i = 0;//检查活动奖项 |
|
|
|
for (WxOfflineActivityItem grantActivityItem : wxOfflineActivityGrantAward.getActivityItemList()) { |
|
|
|
if(grantActivityItem.getId() == null){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动项参数"); |
|
|
|
} |
|
|
|
WxOfflineActivityItem activityItem = activityItemMap.get(grantActivityItem.getId()); |
|
|
|
if(activityItem == null){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动项参数"); |
|
|
|
} |
|
|
|
List<WxOfflineActivityGrantItem> activityGrantItemList = grantActivityItem.getActivityGrantItemList(); |
|
|
|
// 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); |
|
|
|
if(isRepeat){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复"); |
|
|
|
} |
|
|
|
|
|
|
|
Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); |
|
|
|
|
|
|
|
for (WxOfflineActivityItem activityItem : activityItemList) { |
|
|
|
|
|
|
|
Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); |
|
|
|
//获取奖项 |
|
|
|
WxOfflineActivityItem grantActivityItem = grantActivityItemMap.get(activityItem.getId()); |
|
|
|
List<WxOfflineActivityGrantItem> activityGrantItemList = null; |
|
|
|
if(grantActivityItem != null){ |
|
|
|
activityGrantItemList = grantActivityItem.getActivityGrantItemList(); |
|
|
|
} |
|
|
|
|
|
|
|
if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ |
|
|
|
|
|
|
|
if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ |
|
|
|
throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"金额不满足"); |
|
|
|
} |
|
|
|
|
|
|
|
boolean isRepeat = activityGrantItemList.stream() |
|
|
|
.collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting())) |
|
|
|
.entrySet().stream().anyMatch(e -> e.getValue() > 1); |
|
|
|
if(isRepeat){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复"); |
|
|
|
} |
|
|
|
|
|
|
|
//奖项限制数量 |
|
|
|
int limitCount = 0; |
|
|
|
if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ |
|
|
|
@@ -564,9 +561,14 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
|
|
|
|
handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); |
|
|
|
} |
|
|
|
activityItem.setActivityGrantItemList(activityGrantItemList); |
|
|
|
|
|
|
|
} |
|
|
|
else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ |
|
|
|
if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
if(activityGrantItemList.size() != 1){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); |
|
|
|
} |
|
|
|
@@ -588,10 +590,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
|
|
|
|
handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); |
|
|
|
|
|
|
|
activityItem.setActivityGrantItemList(activityGrantItemList); |
|
|
|
|
|
|
|
} |
|
|
|
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { |
|
|
|
BigDecimal cashBackPriceTotal = BigDecimal.ZERO; |
|
|
|
List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>(); |
|
|
|
activityGrantItemList = new ArrayList<>(); |
|
|
|
|
|
|
|
List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); |
|
|
|
//单笔订单计算 |
|
|
|
@@ -614,7 +618,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
grantAwardsItem.setPrice(cashBackPrice); |
|
|
|
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem); |
|
|
|
|
|
|
|
grantItemList.add(grantGrantItem); |
|
|
|
activityGrantItemList.add(grantGrantItem); |
|
|
|
|
|
|
|
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); |
|
|
|
} |
|
|
|
@@ -637,7 +641,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
grantAwardsItem.setPrice(cashBackPrice); |
|
|
|
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem); |
|
|
|
|
|
|
|
grantItemList.add(grantGrantItem); |
|
|
|
activityGrantItemList.add(grantGrantItem); |
|
|
|
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); |
|
|
|
} |
|
|
|
|
|
|
|
@@ -646,16 +650,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
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){ |
|
|
|
WxOfflineActivityAwardsItem awardsSecondItem = collect.get(merchantIds.size()); |
|
|
|
if(awardsSecondItem != null){ |
|
|
|
WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); |
|
|
|
//计算返现金额 |
|
|
|
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() |
|
|
|
.multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
grantAwardsSecondItem.setPrice(cashBackPrice); |
|
|
|
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsSecondItem); |
|
|
|
.multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
awardsSecondItem.setPrice(cashBackPrice); |
|
|
|
handlerGrantItem(grantGrantItem,activity,activityItem,awardsSecondItem); |
|
|
|
|
|
|
|
grantItemList.add(grantGrantItem); |
|
|
|
activityGrantItemList.add(grantGrantItem); |
|
|
|
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); |
|
|
|
} |
|
|
|
|
|
|
|
@@ -663,7 +667,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
|
|
|
|
BigDecimal prop = BigDecimal.ONE; |
|
|
|
if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){ |
|
|
|
prop = activityItem.getMaxAmount().divide(cashBackPriceTotal).setScale(4, RoundingMode.HALF_UP);; |
|
|
|
prop = activityItem.getMaxAmount().divide(cashBackPriceTotal,4,RoundingMode.HALF_UP); |
|
|
|
cashBackPriceTotal = activityItem.getMaxAmount(); |
|
|
|
} |
|
|
|
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
@@ -674,18 +678,19 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
cashBackPriceTotal = cashBackPriceTotal.divide(new BigDecimal(10)) |
|
|
|
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10)); |
|
|
|
} |
|
|
|
for (WxOfflineActivityGrantItem grantItem:grantItemList){ |
|
|
|
for (WxOfflineActivityGrantItem grantItem:activityGrantItemList){ |
|
|
|
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ |
|
|
|
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).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)); |
|
|
|
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).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)) |
|
|
|
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).divide(new BigDecimal(10)) |
|
|
|
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
grantActivityItem.setActivityGrantItemList(grantItemList); |
|
|
|
activityItem.setActivityGrantItemList(activityGrantItemList); |
|
|
|
|
|
|
|
WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack(); |
|
|
|
activityGrantCashBack.setActivityId(activity.getId()); |
|
|
|
activityGrantCashBack.setActivityName(activity.getName()); |
|
|
|
@@ -704,20 +709,18 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
activityGrantCashBack.setTaxPointsAmount(activityGrantCashBack.getCashBackPrice().multiply(activityGrantCashBack.getTaxPoints()) |
|
|
|
.divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP)); |
|
|
|
} |
|
|
|
grantActivityItem.setActivityGrantCashBack(activityGrantCashBack); |
|
|
|
|
|
|
|
activityItem.setActivityGrantCashBack(activityGrantCashBack); |
|
|
|
} |
|
|
|
|
|
|
|
for (WxOfflineActivityGrantItem grantGrantItem : grantActivityItem.getActivityGrantItemList()) { |
|
|
|
for (WxOfflineActivityGrantItem grantGrantItem : activityItem.getActivityGrantItemList()) { |
|
|
|
i++; |
|
|
|
if(grantGrantItem.getAwardCount() == null){ |
|
|
|
grantGrantItem.setAwardCount(1); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if(i == 0){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查是否有活动奖项"); |
|
|
|
} |
|
|
|
|
|
|
|
wxOfflineActivityGrantAward.setActivityItemList(activityItemList); |
|
|
|
} |
|
|
|
|
|
|
|
private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){ |
|
|
|
@@ -734,6 +737,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
grantGrantItem.setAwardMaxAmount(awardsItem.getMaxAmount()); |
|
|
|
grantGrantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); |
|
|
|
grantGrantItem.setCashBackRatio(awardsItem.getCashBackRatio()); |
|
|
|
if(grantGrantItem.getAwardCount() == null){ |
|
|
|
grantGrantItem.setAwardCount(1); |
|
|
|
} |
|
|
|
grantGrantItem.setAwardPrice(awardsItem.getPrice() |
|
|
|
.multiply(new BigDecimal(grantGrantItem.getAwardCount())) |
|
|
|
.setScale(2, RoundingMode.HALF_UP)); |
|
|
|
|