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/domain/po/WxOfflineActivityItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java index 49351e60c..a5de55239 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java @@ -9,6 +9,7 @@ import java.util.Date; import java.util.List; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.OfflineActivityGrantRule; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -150,6 +151,12 @@ public class WxOfflineActivityItem extends TenantEntity { @TableField(exist = false) private Integer realAwardsItemLimit; + /** + * 发放奖项规则 + */ + @TableField(exist = false) + private List activityGrantRuleList; + /** * 发放奖项 */ diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityGrantRule.java b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityGrantRule.java new file mode 100644 index 000000000..320bbd26b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityGrantRule.java @@ -0,0 +1,24 @@ +package com.iformall.domain.vo; + +import com.iformall.domain.po.WxOfflineActivityRecord; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class OfflineActivityGrantRule implements Serializable { + + private static final long serialVersionUID = 1L; + private Integer grantAwardsMode; + private Long activityId; + private String activityName; + private Long activityItemId; + private String activityItemName; + private Integer activityItemType; + private Integer awardsItemLimit; + private Long recordId; + 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..c11b1069e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -9,6 +9,7 @@ import com.iformall.common.Result; import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.OfflineActivityGrantRecord; +import com.iformall.domain.vo.OfflineActivityGrantRule; import com.iformall.domain.vo.OfflineActivityRecordStatistics; import com.iformall.enums.*; import com.iformall.exception.MallinkException; @@ -209,154 +210,27 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity //处理发奖数量 activityItem.setIsMeet(true); - handleLotteryDrawCount(activityItem,activityItem.getRecordList()); + handleLotteryDrawCount(activity,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,48 +248,62 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } activityItem.setCashBackMsg(msg); } - - } } } - private void handleLotteryDrawCount(WxOfflineActivityItem activityItem, List recordList){ - + private void handleLotteryDrawCount(WxOfflineActivity activity, WxOfflineActivityItem activityItem, List recordList){ int limitCount = 0; + List grantRuleList = new ArrayList<>(); + if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ for(WxOfflineActivityRecord record :recordList){ - Integer record_count = 0; + Integer record_limit_count = 0; for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){ if((activityAwardsModel.getMinAmount() == null || record.getOrderMoney().compareTo(activityAwardsModel.getMinAmount()) >= 0) && (activityAwardsModel.getMaxAmount() == null || record.getOrderMoney().compareTo(activityAwardsModel.getMaxAmount()) <= 0)){ - record_count = activityAwardsModel.getAwardsCount(); + record_limit_count = activityAwardsModel.getAwardsCount(); } } - limitCount += record_count; + if(record_limit_count > 0){ + OfflineActivityGrantRule grantRule = new OfflineActivityGrantRule(); + grantRule.setRecordId(record.getId()); + grantRule.setRecord(record); + handlerGrantRule(grantRule,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,record_limit_count); + grantRuleList.add(grantRule); + + limitCount += record_limit_count; + } } }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 order_limit_count = orderMoneySum.divide(activityItem.getAwardsItemPrice(),0, RoundingMode.HALF_DOWN).intValue(); + if(order_limit_count > 0){ + OfflineActivityGrantRule grantRule = new OfflineActivityGrantRule(); + handlerGrantRule(grantRule,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,order_limit_count); + grantRuleList.add(grantRule); + + limitCount += order_limit_count; + } } } //这里是联单, 按选择的订单计算 - 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); if(activityAwardsModel != null && activityAwardsModel.getAwardsCount() != null){ - limitCount += activityAwardsModel.getAwardsCount(); + Integer joint_limit_count = activityAwardsModel.getAwardsCount(); + if(joint_limit_count > 0){ + OfflineActivityGrantRule grantRule = new OfflineActivityGrantRule(); + handlerGrantRule(grantRule,EnumOfflineActivityAwardsModeType.COUNT,activity,activityItem,joint_limit_count); + grantRuleList.add(grantRule); + + limitCount += joint_limit_count; + } } } @@ -423,12 +311,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity && activityItem.getAwardsItemLimit() < limitCount){ limitCount = activityItem.getAwardsItemLimit(); } + activityItem.setRealAwardsItemLimit(limitCount); + activityItem.setActivityGrantRuleList(grantRuleList); } - 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())); @@ -442,32 +331,19 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } } if(awardsGrade == null){ - break; + continue; } - 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 +354,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 +369,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); + } + } + } + } + + 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); + } } } - if(wxOfflineActivityGrantItem != null){ - grantItem.add(wxOfflineActivityGrantItem); + BigDecimal prop = BigDecimal.ONE; + if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){ + prop = activityItem.getMaxAmount().divide(cashBackPriceTotal,4,RoundingMode.HALF_UP); + cashBackPriceTotal = activityItem.getMaxAmount(); } - activityItem.setActivityGrantItemList(grantItem); + + if(prop.compareTo(BigDecimal.ONE) < 0){ + for (WxOfflineActivityGrantItem grantItem:grantItemList){ + grantItem.setAwardPrice(awardsRulePrice(grantItem.getAwardPrice().multiply(prop),activityItem.getAwardsItemRule())); + } + } + 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 +518,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 +728,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 +748,25 @@ 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 handlerGrantRule(OfflineActivityGrantRule grantRule, EnumOfflineActivityAwardsModeType modeType,WxOfflineActivity activity,WxOfflineActivityItem activityItem,Integer awardsItemLimit){ + grantRule.setGrantAwardsMode(modeType.getCode()); + grantRule.setActivityId(activity.getId()); + grantRule.setActivityName(activity.getName()); + grantRule.setActivityItemId(activityItem.getId()); + grantRule.setActivityItemName(activityItem.getName()); + grantRule.setActivityItemType(activityItem.getType()); + grantRule.setAwardsItemLimit(awardsItemLimit); + } + + 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 +788,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())); }