Browse Source

//offline

release_toaliyun_real
xiaohu 1 year ago
parent
commit
e4de38620f
2 changed files with 179 additions and 363 deletions
  1. +2
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java
  2. +177
    -363
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java

+ 2
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java View File

@@ -160,6 +160,8 @@ public class WxOfflineActivityGrantItem extends TenantEntity {

@TableField(value = "record_id")
private Long recordId;
@TableField(exist = false)
private WxOfflineActivityRecord record;

/**
* 是否有效


+ 177
- 363
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java View File

@@ -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<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>();

List<WxOfflineActivityAwardsItem> 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<Integer, WxOfflineActivityAwardsItem> 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<Integer, WxOfflineActivityAwardsModel> 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<WxOfflineActivityRecord> recordList){
List<WxOfflineActivityGrantItem> grantItem = new ArrayList<>();
Map<Integer,WxOfflineActivityGrantItem> grantItemMap = new HashMap<>();
private void handleGiftAwards(WxOfflineActivity activity, WxOfflineActivityItem activityItem, List<WxOfflineActivityRecord> recordList){
List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>();

Map<Integer, WxOfflineActivityAwardsItem> 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<Integer, WxOfflineActivityAwardsModel> 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<WxOfflineActivityRecord> recordList){
List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>();
BigDecimal cashBackPriceTotal = BigDecimal.ZERO;

if(activityItem.getActivityAwardsItemList() != null && !activityItem.getActivityAwardsItemList().isEmpty()){
List<WxOfflineActivityAwardsItem> 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<Integer, WxOfflineActivityAwardsItem> 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<WxOfflineActivityRecord> 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<WxOfflineActivityAwardsItem> 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<Integer, WxOfflineActivityAwardsItem> 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()));
}




Loading…
Cancel
Save