From e4de38620fb1d36d727f9f3d3814549b7b826da6 Mon Sep 17 00:00:00 2001 From: xiaohu <1901900812@qq.com> Date: Tue, 4 Mar 2025 23:01:33 +0800 Subject: [PATCH] //offline --- .../domain/po/WxOfflineActivityGrantItem.java | 2 + ...xOfflineActivityGrantAwardServiceImpl.java | 540 ++++++------------ 2 files changed, 179 insertions(+), 363 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java index d29579981..e22084049 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java @@ -160,6 +160,8 @@ public class WxOfflineActivityGrantItem extends TenantEntity { @TableField(value = "record_id") private Long recordId; + @TableField(exist = false) + private WxOfflineActivityRecord record; /** * 是否有效 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java index 665b6bca3..c1a137f67 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -209,154 +209,27 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity //处理发奖数量 activityItem.setIsMeet(true); - handleLotteryDrawCount(activityItem,activityItem.getRecordList()); + handleLotteryDrawCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); if(activityItem.getRealAwardsItemLimit() == 0){ activityItem.setIsMeet(false); } } else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ - //计算商户商管分别承担金额 handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); //处理发放奖项 - handleGiftAwards(activityItem,wxOfflineActivityGrantAward.getRecordList()); + handleGiftAwards(activity,activityItem,wxOfflineActivityGrantAward.getRecordList()); activityItem.setIsMeet(true); if(activityItem.getActivityGrantItemList() == null || activityItem.getActivityGrantItemList().isEmpty()){ activityItem.setIsMeet(false); } } else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { - - BigDecimal cashBackPriceTotal = BigDecimal.ZERO; - List grantItemList = new ArrayList<>(); - - List sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); - //单笔订单计算 - if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ - - for (WxOfflineActivityRecord record : activityItem.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){ - //计算返现金额 - BigDecimal cashBackPrice = record.getOrderMoney() - .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); - if(grantAwardsItem.getLimitPrice() != null && grantAwardsItem.getLimitPrice().compareTo(BigDecimal.ZERO) > 0 - && grantAwardsItem.getLimitPrice().compareTo(cashBackPrice) < 0 ){ - cashBackPrice = grantAwardsItem.getLimitPrice(); - } - cashBackPrice = awardsRulePrice(cashBackPrice,activityItem.getAwardsItemRule()); - - cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); - } - -// 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); - - - } - }else{ - BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); -// if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ -// if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ -// orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() -// .filter(record -> activityItem.getRecordIds().contains(record.getId())) -// .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); -// }else{ -// orderMoneySum = BigDecimal.ZERO; -// } -// } - - WxOfflineActivityAwardsItem grantAwardsItem = null; - for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ - if((awardsItem.getMinAmount() == null || orderMoneySum.compareTo(awardsItem.getMinAmount()) >= 0) - && (awardsItem.getMaxAmount() == null || orderMoneySum.compareTo(awardsItem.getMaxAmount()) <= 0)){ - grantAwardsItem = awardsItem; - } - } - if(grantAwardsItem != null){ - //计算返现金额 - BigDecimal cashBackPrice = orderMoneySum - .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); - cashBackPrice = awardsRulePrice(cashBackPrice,activityItem.getAwardsItemRule()); - - cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); - } - - } - - Integer jointCount = getJointCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); - if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ - Map jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); - WxOfflineActivityAwardsItem grantAwardsSecondItem = jointCountMap.get(jointCount); - if(grantAwardsSecondItem != null){ - //计算返现金额 - BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() - .multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); - cashBackPrice = awardsRulePrice(cashBackPrice,activityItem.getAwardsItemRule()); - - cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); - } - } - - if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){ - cashBackPriceTotal = activityItem.getMaxAmount(); - } - - WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack(); - activityGrantCashBack.setActivityId(activity.getId()); - activityGrantCashBack.setActivityName(activity.getName()); - activityGrantCashBack.setActivityItemId(activityItem.getId()); - activityGrantCashBack.setActivityItemName(activityItem.getName()); - activityGrantCashBack.setActivityItemType(activityItem.getType()); - activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule()); - activityGrantCashBack.setMaxAmount(activityItem.getMaxAmount()); - activityGrantCashBack.setStartingTaxPoint(activityItem.getStartingTaxPoint()); - activityGrantCashBack.setTaxPoints(activityItem.getTaxPoints()); - activityGrantCashBack.setCashBackPrice(cashBackPriceTotal); - activityGrantCashBack.setTaxPointsAmount(BigDecimal.ZERO); - if(activityGrantCashBack.getStartingTaxPoint() != null && activityGrantCashBack.getCashBackPrice().compareTo(activityGrantCashBack.getStartingTaxPoint()) > 0 - && activityGrantCashBack.getTaxPoints() != null){ - activityGrantCashBack.setTaxPointsAmount(activityGrantCashBack.getCashBackPrice().multiply(activityGrantCashBack.getTaxPoints()) - .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP)); - } activityItem.setIsMeet(true); - activityItem.setActivityGrantCashBack(activityGrantCashBack); - activityItem.setCashBackPrice(activityGrantCashBack.getCashBackPrice().subtract(activityGrantCashBack.getTaxPointsAmount())); + handleCashback(activity,activityItem,wxOfflineActivityGrantAward.getRecordList()); + + WxOfflineActivityGrantCashBack activityGrantCashBack = activityItem.getActivityGrantCashBack(); WxOfflineActivityGrantCashBack lastActivityGrantCashBack = getLastActivityGrantCashBack(wxOfflineActivityGrantAward, activity.getId(), activityItem.getId()); if(lastActivityGrantCashBack != null){ @@ -374,8 +247,6 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } activityItem.setCashBackMsg(msg); } - - } } } @@ -396,21 +267,14 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } }else{ - BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); -// if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ -// if(activityItem.getRecordList() != null && !activityItem.getRecordList().isEmpty()){ -// orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); -// }else{ -// orderMoneySum = BigDecimal.ZERO; -// } -// } + BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ limitCount = orderMoneySum.divide(activityItem.getAwardsItemPrice(),0, RoundingMode.HALF_DOWN).intValue(); } } //这里是联单, 按选择的订单计算 - Integer jointCount = getJointCount(activityItem,recordList); + Integer jointCount = getJointCount(activityItem,activityItem.getRecordList()); if(jointCount != 0){ Map jointCountMap = activityItem.getActivityAwardsModelSecondList().stream().collect(toMap(WxOfflineActivityAwardsModel::getMerchantCount, Function.identity())); WxOfflineActivityAwardsModel activityAwardsModel = jointCountMap.get(jointCount); @@ -426,9 +290,8 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity activityItem.setRealAwardsItemLimit(limitCount); } - private void handleGiftAwards(WxOfflineActivityItem activityItem, List recordList){ - List grantItem = new ArrayList<>(); - Map grantItemMap = new HashMap<>(); + private void handleGiftAwards(WxOfflineActivity activity, WxOfflineActivityItem activityItem, List recordList){ + List grantItemList = new ArrayList<>(); Map awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getGrade, Function.identity())); @@ -444,30 +307,17 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(awardsGrade == null){ break; } - WxOfflineActivityGrantItem wxOfflineActivityGrantItem = grantItemMap.get(awardsGrade); WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); - if(wxOfflineActivityGrantItem != null){ - wxOfflineActivityGrantItem.setAwardCount(wxOfflineActivityGrantItem.getAwardCount() + 1); - wxOfflineActivityGrantItem.setAwardPrice(awardsItem.getPrice().multiply(new BigDecimal(wxOfflineActivityGrantItem.getAwardCount()))); - }else{ - if(awardsItem != null){ - wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem,EnumOfflineActivityAwardsModeType.AMOUNT, awardsItem); - wxOfflineActivityGrantItem.setRecordId(record.getId()); - grantItemMap.put(awardsGrade, wxOfflineActivityGrantItem); - } + if(awardsItem != null){ + WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); + grantGrantItem.setRecordId(record.getId()); + grantGrantItem.setRecord(record); + handlerGrantItem(grantGrantItem,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,awardsItem); + grantItemList.add(grantGrantItem); } } }else{ - BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ - if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ - orderMoneySum = recordList.stream() - .filter(record -> activityItem.getRecordIds().contains(record.getId())) - .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - }else{ - orderMoneySum = BigDecimal.ZERO; - } - } + BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); Integer awardsGrade = null; for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){ if((activityAwardsModel.getMinAmount() == null || orderMoneySum.compareTo(activityAwardsModel.getMinAmount()) >= 0) @@ -478,18 +328,14 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(awardsGrade != null){ WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); if(awardsItem != null){ - WxOfflineActivityGrantItem wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem,EnumOfflineActivityAwardsModeType.AMOUNT, awardsItem); - grantItemMap.put(awardsGrade, wxOfflineActivityGrantItem); + WxOfflineActivityGrantItem wxOfflineActivityGrantItem = new WxOfflineActivityGrantItem(); + handlerGrantItem(wxOfflineActivityGrantItem,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,awardsItem); + grantItemList.add(wxOfflineActivityGrantItem); } } } - if(!grantItemMap.isEmpty()){ - grantItem.addAll(grantItemMap.values()); - } - //这里是联单, 按所有订单计算 - WxOfflineActivityGrantItem wxOfflineActivityGrantItem = null; Integer jointCount = getJointCount(activityItem,recordList); if(jointCount != 0){ Map jointCountMap = activityItem.getActivityAwardsModelSecondList().stream().collect(toMap(WxOfflineActivityAwardsModel::getMerchantCount, Function.identity())); @@ -497,27 +343,136 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(activityAwardsModel != null && activityAwardsModel.getAwardsGrade() != null){ WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(activityAwardsModel.getAwardsGrade()); if(awardsItem != null){ - wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, EnumOfflineActivityAwardsModeType.COUNT,awardsItem); + WxOfflineActivityGrantItem wxOfflineActivityGrantItem = new WxOfflineActivityGrantItem(); + handlerGrantItem(wxOfflineActivityGrantItem,EnumOfflineActivityAwardsModeType.COUNT,activity,activityItem,awardsItem); + grantItemList.add(wxOfflineActivityGrantItem); } + } + } -// WxOfflineActivityGrantItem wxOfflineActivityGrantItem = grantItemMap.get(activityAwardsModel.getAwardsGrade()); -// WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(activityAwardsModel.getAwardsGrade()); -// if(wxOfflineActivityGrantItem != null){ -// wxOfflineActivityGrantItem.setAwardCount(wxOfflineActivityGrantItem.getAwardCount() + 1); -// wxOfflineActivityGrantItem.setAwardPrice(awardsItem.getPrice().multiply(new BigDecimal(wxOfflineActivityGrantItem.getAwardCount()))); -// }else{ -// if(awardsItem != null){ -// wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); -// grantItemMap.put(activityAwardsModel.getAwardsGrade(), wxOfflineActivityGrantItem); -// } -// } + activityItem.setActivityGrantItemList(grantItemList); + } + + private void handleCashback(WxOfflineActivity activity, WxOfflineActivityItem activityItem, List recordList){ + List grantItemList = new ArrayList<>(); + BigDecimal cashBackPriceTotal = BigDecimal.ZERO; + + if(activityItem.getActivityAwardsItemList() != null && !activityItem.getActivityAwardsItemList().isEmpty()){ + List sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); + if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ + for (WxOfflineActivityRecord record : recordList){ + 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){ + //计算返现金额 + BigDecimal cashBackPrice = record.getOrderMoney().multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); + if(grantAwardsItem.getLimitPrice() != null && grantAwardsItem.getLimitPrice().compareTo(BigDecimal.ZERO) > 0 + && grantAwardsItem.getLimitPrice().compareTo(cashBackPrice) < 0 ){ + cashBackPrice = grantAwardsItem.getLimitPrice(); + } + cashBackPrice = awardsRulePrice(cashBackPrice,activityItem.getAwardsItemRule()); + if(cashBackPrice.compareTo(BigDecimal.ZERO) > 0){ + grantAwardsItem.setPrice(cashBackPrice); + + WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); + grantGrantItem.setRecordId(record.getId()); + grantGrantItem.setRecord(record); + handlerGrantItem(grantGrantItem,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,grantAwardsItem); + grantItemList.add(grantGrantItem); + + cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); + } + } + } + }else{ + BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + + WxOfflineActivityAwardsItem grantAwardsItem = null; + for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ + if((awardsItem.getMinAmount() == null || orderMoneySum.compareTo(awardsItem.getMinAmount()) >= 0) + && (awardsItem.getMaxAmount() == null || orderMoneySum.compareTo(awardsItem.getMaxAmount()) <= 0)){ + grantAwardsItem = awardsItem; + } + } + if(grantAwardsItem != null){ + + //计算返现金额 + BigDecimal cashBackPrice = orderMoneySum + .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); + cashBackPrice = awardsRulePrice(cashBackPrice,activityItem.getAwardsItemRule()); + if(cashBackPrice.compareTo(BigDecimal.ZERO) > 0){ + grantAwardsItem.setPrice(cashBackPrice); + + WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); + handlerGrantItem(grantGrantItem,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,grantAwardsItem); + grantItemList.add(grantGrantItem); + + cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); + } + } } } - if(wxOfflineActivityGrantItem != null){ - grantItem.add(wxOfflineActivityGrantItem); + Integer jointCount = getJointCount(activityItem,recordList); + if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ + Map jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); + WxOfflineActivityAwardsItem awardsSecondItem = jointCountMap.get(jointCount); + if(awardsSecondItem != null){ + BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + //计算返现金额 + BigDecimal cashBackPrice = orderMoneySum + .multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); + cashBackPrice = awardsRulePrice(cashBackPrice,activityItem.getAwardsItemRule()); + if(cashBackPrice.compareTo(BigDecimal.ZERO) > 0){ + awardsSecondItem.setPrice(cashBackPrice); + + WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); + handlerGrantItem(grantGrantItem,EnumOfflineActivityAwardsModeType.COUNT,activity,activityItem,awardsSecondItem); + grantItemList.add(grantGrantItem); + + cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); + } + } + } + + BigDecimal prop = BigDecimal.ONE; + if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){ + prop = activityItem.getMaxAmount().divide(cashBackPriceTotal,4,RoundingMode.HALF_UP); + cashBackPriceTotal = activityItem.getMaxAmount(); + } + + if(prop.compareTo(BigDecimal.ONE) < 0){ + for (WxOfflineActivityGrantItem grantItem:grantItemList){ + grantItem.setAwardPrice(awardsRulePrice(grantItem.getAwardPrice().multiply(prop),activityItem.getAwardsItemRule())); + } } - activityItem.setActivityGrantItemList(grantItem); + activityItem.setActivityGrantItemList(grantItemList); + + WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack(); + activityGrantCashBack.setActivityId(activity.getId()); + activityGrantCashBack.setActivityName(activity.getName()); + activityGrantCashBack.setActivityItemId(activityItem.getId()); + activityGrantCashBack.setActivityItemName(activityItem.getName()); + activityGrantCashBack.setActivityItemType(activityItem.getType()); + activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule()); + activityGrantCashBack.setMaxAmount(activityItem.getMaxAmount()); + activityGrantCashBack.setStartingTaxPoint(activityItem.getStartingTaxPoint()); + activityGrantCashBack.setTaxPoints(activityItem.getTaxPoints()); + activityGrantCashBack.setCashBackPrice(cashBackPriceTotal); + activityGrantCashBack.setTaxPointsAmount(BigDecimal.ZERO); + if(activityGrantCashBack.getStartingTaxPoint() != null && activityGrantCashBack.getCashBackPrice().compareTo(activityGrantCashBack.getStartingTaxPoint()) > 0 + && activityGrantCashBack.getTaxPoints() != null){ + activityGrantCashBack.setTaxPointsAmount(activityGrantCashBack.getCashBackPrice().multiply(activityGrantCashBack.getTaxPoints()) + .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP)); + } + activityItem.setActivityGrantCashBack(activityGrantCashBack); + //实际展示返现金额 + activityItem.setCashBackPrice(activityGrantCashBack.getCashBackPrice().subtract(activityGrantCashBack.getTaxPointsAmount())); } private Integer getJointCount(WxOfflineActivityItem activityItem, List recordList){ @@ -537,27 +492,29 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity return jointCount; } - private WxOfflineActivityGrantItem createGrantItemFromGrant(WxOfflineActivityItem activityItem,EnumOfflineActivityAwardsModeType modeType,WxOfflineActivityAwardsItem grantAwardsItem){ - WxOfflineActivityGrantItem grantItem = new WxOfflineActivityGrantItem(); - grantItem.setGrantAwardsMode(modeType.getCode()); - 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); - grantItem.setAwardPrice(grantAwardsItem.getPrice()); - grantItem.setMoneyRule(grantAwardsItem.getMoneyRule()); - grantItem.setMallShareRate(grantAwardsItem.getMallShareRate()); - grantItem.setMallSharePrice(grantAwardsItem.getMallSharePrice()); - grantItem.setMerchantShareRate(grantAwardsItem.getMerchantShareRate()); - grantItem.setMerchantSharePrice(grantAwardsItem.getMerchantSharePrice()); - return grantItem; - } +// private WxOfflineActivityGrantItem createGrantItemFromGrant(WxOfflineActivityItem activityItem,EnumOfflineActivityAwardsModeType modeType,WxOfflineActivityAwardsItem grantAwardsItem){ +// WxOfflineActivityGrantItem grantItem = new WxOfflineActivityGrantItem(); +// grantItem.setGrantAwardsMode(modeType.getCode()); +// grantItem.setActivityId(activityItem.getActivityId()); +//// grantItem.setActivityName(); +// 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); +// grantItem.setAwardPrice(grantAwardsItem.getPrice()); +// grantItem.setMoneyRule(grantAwardsItem.getMoneyRule()); +// grantItem.setMallShareRate(grantAwardsItem.getMallShareRate()); +// grantItem.setMallSharePrice(grantAwardsItem.getMallSharePrice()); +// grantItem.setMerchantShareRate(grantAwardsItem.getMerchantShareRate()); +// grantItem.setMerchantSharePrice(grantAwardsItem.getMerchantSharePrice()); +// return grantItem; +// } private WxOfflineActivityGrantCashBack getLastActivityGrantCashBack(WxOfflineActivityGrantAward wxOfflineActivityGrantAward,Long activityId,Long activityItemId){ Long grantId = wxOfflineActivityGrantAwardMapper.getLastId(wxOfflineActivityGrantAward); @@ -745,168 +702,19 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(awardsItem == null){ throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); } - grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); - handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); + handlerGrantItem(grantGrantItem,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,awardsItem); } activityItem.setActivityGrantItemList(activityGrantItemList); } else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ - handleGiftAwards(activityItem,wxOfflineActivityGrantAward.getRecordList()); + handleGiftAwards(activity,activityItem,wxOfflineActivityGrantAward.getRecordList()); if(activityItem.getActivityGrantItemList().isEmpty()){ continue; } - - for (WxOfflineActivityGrantItem grantGrantItem : activityItem.getActivityGrantItemList()) { - WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); - handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); - } } else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { - BigDecimal cashBackPriceTotal = BigDecimal.ZERO; - activityGrantItemList = new ArrayList<>(); - - List sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); - //单笔订单计算 - if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ - for (WxOfflineActivityRecord record : activityItem.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){ - WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); - grantGrantItem.setRecordId(record.getId()); - grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); - //计算返现金额 - BigDecimal cashBackPrice = record.getOrderMoney() - .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); - if(grantAwardsItem.getLimitPrice() != null && grantAwardsItem.getLimitPrice().compareTo(BigDecimal.ZERO) > 0 - && grantAwardsItem.getLimitPrice().compareTo(cashBackPrice) < 0 ){ - cashBackPrice = grantAwardsItem.getLimitPrice(); - } - cashBackPrice = awardsRulePrice(cashBackPrice,activityItem.getAwardsItemRule()); - if(cashBackPrice.compareTo(BigDecimal.ZERO) == 0){ - continue; - } - - grantAwardsItem.setPrice(cashBackPrice); - handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem); - - activityGrantItemList.add(grantGrantItem); - - cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); - } - - } - }else{ - BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); -// if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ -// if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ -// orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() -// .filter(record -> activityItem.getRecordIds().contains(record.getId())) -// .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); -// }else{ -// orderMoneySum = BigDecimal.ZERO; -// } -// } - - WxOfflineActivityAwardsItem grantAwardsItem = null; - for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ - if((awardsItem.getMinAmount() == null || orderMoneySum.compareTo(awardsItem.getMinAmount()) >= 0) - && (awardsItem.getMaxAmount() == null || orderMoneySum.compareTo(awardsItem.getMaxAmount()) <= 0)){ - grantAwardsItem = awardsItem; - } - } - if(grantAwardsItem != null){ - WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); - grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); - //计算返现金额 - BigDecimal cashBackPrice = orderMoneySum - .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); - cashBackPrice = awardsRulePrice(cashBackPrice,activityItem.getAwardsItemRule()); - if(cashBackPrice.compareTo(BigDecimal.ZERO) > 0){ - grantAwardsItem.setPrice(cashBackPrice); - handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem); - - activityGrantItemList.add(grantGrantItem); - cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); - } - } - } - - Integer jointCount = getJointCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); - if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ - Map jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); - WxOfflineActivityAwardsItem awardsSecondItem = jointCountMap.get(jointCount); - if(awardsSecondItem != null){ - WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); - grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.COUNT.getCode()); - //计算返现金额 - BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() - .multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); - cashBackPrice = awardsRulePrice(cashBackPrice,activityItem.getAwardsItemRule()); - if(cashBackPrice.compareTo(BigDecimal.ZERO) > 0){ - awardsSecondItem.setPrice(cashBackPrice); - handlerGrantItem(grantGrantItem,activity,activityItem,awardsSecondItem); - - activityGrantItemList.add(grantGrantItem); - cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); - } - } - } - - BigDecimal prop = BigDecimal.ONE; - if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){ - prop = activityItem.getMaxAmount().divide(cashBackPriceTotal,4,RoundingMode.HALF_UP); - cashBackPriceTotal = activityItem.getMaxAmount(); - } -// if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ -// cashBackPriceTotal = cashBackPriceTotal.setScale(2, RoundingMode.HALF_UP); -// } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) { -// cashBackPriceTotal = cashBackPriceTotal.setScale(0, RoundingMode.HALF_UP); -// }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ -// cashBackPriceTotal = cashBackPriceTotal.divide(new BigDecimal(10)) -// .setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10)); -// } - if(prop.compareTo(BigDecimal.ONE) < 0){ - for (WxOfflineActivityGrantItem grantItem:activityGrantItemList){ - grantItem.setAwardPrice(awardsRulePrice(grantItem.getAwardPrice().multiply(prop),activityItem.getAwardsItemRule())); -// awardsRulePrice(grantItem.getAwardPrice().multiply(prop),activityItem.getAwardsItemRule()); -// 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).setScale(0, RoundingMode.HALF_UP)); -// }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ -// grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).divide(new BigDecimal(10)) -// .setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10))); -// } - } - } - - activityItem.setActivityGrantItemList(activityGrantItemList); - - WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack(); - activityGrantCashBack.setActivityId(activity.getId()); - activityGrantCashBack.setActivityName(activity.getName()); - activityGrantCashBack.setActivityItemId(activityItem.getId()); - activityGrantCashBack.setActivityItemName(activityItem.getName()); - activityGrantCashBack.setActivityItemType(activityItem.getType()); - activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule()); - activityGrantCashBack.setMaxAmount(activityItem.getMaxAmount()); - activityGrantCashBack.setStartingTaxPoint(activityItem.getStartingTaxPoint()); - activityGrantCashBack.setTaxPoints(activityItem.getTaxPoints()); - activityGrantCashBack.setCashBackPrice(cashBackPriceTotal); - activityGrantCashBack.setTaxPointsAmount(BigDecimal.ZERO); - if(activityGrantCashBack.getStartingTaxPoint() != null && activityGrantCashBack.getCashBackPrice().compareTo(activityGrantCashBack.getStartingTaxPoint()) > 0 - && activityGrantCashBack.getTaxPoints() != null){ - activityGrantCashBack.setTaxPointsAmount(activityGrantCashBack.getCashBackPrice().multiply(activityGrantCashBack.getTaxPoints()) - .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP)); - } - activityItem.setActivityGrantCashBack(activityGrantCashBack); + handleCashback(activity,activityItem,wxOfflineActivityGrantAward.getRecordList()); } for (WxOfflineActivityGrantItem grantGrantItem : activityItem.getActivityGrantItemList()) { @@ -914,14 +722,15 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } } if(i == 0){ - throw new MallinkException(Result.ERROR, "请检查是否有活动奖项"); + throw new MallinkException(Result.ERROR, "请检查是否发奖"); } wxOfflineActivityGrantAward.setActivityItemList(activityItemList); } - private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){ + private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,EnumOfflineActivityAwardsModeType modeType,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){ // grantGrantItem.setGrantId(wxOfflineActivityGrantAward.getId()); + grantGrantItem.setGrantAwardsMode(modeType.getCode()); grantGrantItem.setActivityId(activity.getId()); grantGrantItem.setActivityName(activity.getName()); grantGrantItem.setActivityItemId(activityItem.getId()); @@ -943,6 +752,11 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity grantGrantItem.setMoneyRule(awardsItem.getMoneyRule()); grantGrantItem.setMallShareRate(awardsItem.getMallShareRate()); grantGrantItem.setMerchantShareRate(awardsItem.getMerchantShareRate()); + + grantGrantItem.setMallSharePrice(grantGrantItem.getAwardPrice() + .multiply(grantGrantItem.getMallShareRate().divide(new BigDecimal(100))) + .setScale(2, RoundingMode.HALF_UP)); + grantGrantItem.setMerchantSharePrice(grantGrantItem.getAwardPrice().subtract(grantGrantItem.getMallSharePrice())); }