Browse Source

//legionActivity

release_toaliyun_real
xiaohu 1 year ago
parent
commit
4a782822ec
7 changed files with 289 additions and 82 deletions
  1. +3
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java
  2. +212
    -43
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java
  3. +12
    -12
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java
  4. +56
    -22
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java
  5. +1
    -1
      mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml
  6. +4
    -3
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml
  7. +1
    -1
      mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml

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

@@ -152,4 +152,7 @@ public class WxOfflineActivityGrantItem extends TenantEntity {
@TableField(value = "update_date")
private Date updateDate;

@TableField(value = "record_id")
private Long recordId;

}

+ 212
- 43
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java View File

@@ -234,36 +234,121 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
activityItem.setActivityGrantItemList(Collections.singletonList(grantItem));
}
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
BigDecimal cashBackPrice = BigDecimal.ZERO;
BigDecimal cashBackPriceTotal = BigDecimal.ZERO;
List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>();

List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList());
//单笔订单计算
if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){
for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){
WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0)
&& (awardsItem.getMaxAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMaxAmount()) <= 0)){
grantAwardsItem = awardsItem;
}
}
if(grantAwardsItem == null){
continue;
}

// WxOfflineActivityGrantItem grantItem = new WxOfflineActivityGrantItem();
// grantItem.setActivityItemId(activityItem.getId());
// grantItem.setActivityItemName(activityItem.getName());
// grantItem.setActivityItemType(activityItem.getType());
// grantItem.setAwardItamId(grantAwardsItem.getId());
// grantItem.setAwardName(grantAwardsItem.getName());
// grantItem.setAwardGrade(grantAwardsItem.getGrade());
// grantItem.setAwardMinAmount(grantAwardsItem.getMinAmount());
// grantItem.setAwardMaxAmount(grantAwardsItem.getMaxAmount());
// grantItem.setAwardsItemRule(activityItem.getAwardsItemRule());
// grantItem.setAwardCount(1);
//
// //计算返现金额
// BigDecimal cashBackPrice = record.getOrderMoney()
// .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100)));
// if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
// grantItem.setAwardPrice(cashBackPrice.setScale(2, RoundingMode.HALF_UP));
// } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())){
// grantItem.setAwardPrice(cashBackPrice.setScale(0, RoundingMode.HALF_UP));
// }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
// BigDecimal cashBackPriceTen = cashBackPrice.divide(new BigDecimal(10))
// .setScale(0, RoundingMode.HALF_UP);
// grantItem.setAwardPrice(cashBackPriceTen.multiply(new BigDecimal(10)));
// }
// grantItem.setMoneyRule(grantAwardsItem.getMoneyRule());
// grantItem.setMallShareRate(grantAwardsItem.getMallShareRate());
// grantItem.setMallSharePrice(grantAwardsItem.getMallSharePrice());
//// grantItem.setMerchantShareRate(grantAwardsItem.getMerchantShareRate());
//// grantItem.setMerchantSharePrice(grantAwardsItem.getMerchantSharePrice());
// grantItemList.add(grantItem);

//计算返现金额
BigDecimal cashBackPrice = record.getOrderMoney()
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100)));
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
cashBackPrice = cashBackPrice.setScale(2, RoundingMode.HALF_UP);
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) {
cashBackPrice = cashBackPrice.setScale(0, RoundingMode.HALF_UP);
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
cashBackPrice = cashBackPrice.divide(new BigDecimal(10))
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10));
}
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}
}else{

WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
if((awardsItem.getMinAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) >= 0)
&& (awardsItem.getMaxAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) <= 0)){
grantAwardsItem = awardsItem;
}
}
if(grantAwardsItem == null){
continue;
}
//计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100)));
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
cashBackPrice = cashBackPrice.setScale(2, RoundingMode.HALF_UP);
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) {
cashBackPrice = cashBackPrice.setScale(0, RoundingMode.HALF_UP);
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
cashBackPrice = cashBackPrice.divide(new BigDecimal(10))
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10));
}
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}
activityItem.setCashBackPrice(BigDecimal.ONE);
// if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){
// activityItem.setIsMeet(false);
// continue;
// }
// activityItem.setIsMeet(true);
// activityItem.setRealAwardsItemLimit(1);
// for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) {
// //计算返现金额
// BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
// .multiply(awardsItem.getCashBackRatio().divide(new BigDecimal(100)));
// if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
// awardsItem.setPrice(cashBackPrice.setScale(2, RoundingMode.HALF_UP));
// } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) {
// awardsItem.setPrice(cashBackPrice.setScale(0, RoundingMode.HALF_UP));
// }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
// BigDecimal cashBackPriceTen = cashBackPrice.divide(new BigDecimal(10))
// .setScale(0, RoundingMode.HALF_UP);
// awardsItem.setPrice(cashBackPriceTen.multiply(new BigDecimal(10)));
// }
// }
//计算商户商管分别承担金额
// handlerAwardsSharePrice(activityItem.getActivityAwardsItemList());

if(activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){
List<Long> merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList());
Map<Integer, WxOfflineActivityAwardsItem> collect = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity()));
WxOfflineActivityAwardsItem grantAwardsSecondItem = collect.get(merchantIds.size());
if(grantAwardsSecondItem == null){
continue;
}
//计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100)));
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
cashBackPrice = cashBackPrice.setScale(2, RoundingMode.HALF_UP);
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) {
cashBackPrice = cashBackPrice.setScale(0, RoundingMode.HALF_UP);
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
cashBackPrice = cashBackPrice.divide(new BigDecimal(10))
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10));
}
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}

if(activityItem.getMaxAmount().compareTo(cashBackPriceTotal) >= 0){
activityItem.setCashBackPrice(cashBackPriceTotal);
}else{
activityItem.setCashBackPrice(activityItem.getMaxAmount());
}

}
}
}
@@ -384,10 +469,10 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
throw new MallinkException(Result.ERROR, "请检查活动项参数");
}
List<WxOfflineActivityGrantItem> activityGrantItemList = grantActivityItem.getActivityGrantItemList();
if(activityGrantItemList == null || activityGrantItemList.isEmpty()){
continue;
// throw new MallinkException(Result.ERROR, "请检查活动奖项参数");
}
// if(activityGrantItemList == null || activityGrantItemList.isEmpty()){
// continue;
//// throw new MallinkException(Result.ERROR, "请检查活动奖项参数");
// }
boolean isRepeat = activityGrantItemList.stream()
.collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting()))
.entrySet().stream().anyMatch(e -> e.getValue() > 1);
@@ -397,12 +482,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity

Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity()));

for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) {
i++;
if(grantGrantItem.getAwardCount() == null){
grantGrantItem.setAwardCount(1);
}
}


if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){

@@ -460,20 +540,109 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity

}
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
if(activityGrantItemList.size() != 1){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");
BigDecimal cashBackPriceTotal = BigDecimal.ZERO;
List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>();

List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList());
//单笔订单计算
if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){
for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){
WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0)
&& (awardsItem.getMaxAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMaxAmount()) <= 0)){
grantAwardsItem = awardsItem;
}
}
if(grantAwardsItem == null){
continue;
}

WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem();
grantGrantItem.setRecordId(record.getId());
//计算返现金额
BigDecimal cashBackPrice = record.getOrderMoney()
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100)));

grantAwardsItem.setPrice(cashBackPrice);
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem);

grantItemList.add(grantGrantItem);

cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}
}else{

WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
if((awardsItem.getMinAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) >= 0)
&& (awardsItem.getMaxAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) <= 0)){
grantAwardsItem = awardsItem;
}
}
if(grantAwardsItem == null){
continue;
}
WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem();
//计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100)));
grantAwardsItem.setPrice(cashBackPrice);
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem);

grantItemList.add(grantGrantItem);
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}
WxOfflineActivityGrantItem grantGrantItem = activityGrantItemList.get(0);
if(grantGrantItem.getAwardItamId() == null){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");

if(activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){
List<Long> merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList());
Map<Integer, WxOfflineActivityAwardsItem> collect = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity()));
WxOfflineActivityAwardsItem grantAwardsSecondItem = collect.get(merchantIds.size());
if(grantAwardsSecondItem == null){
continue;
}
WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem();
//计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100)));
grantAwardsSecondItem.setPrice(cashBackPrice);
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsSecondItem);

grantItemList.add(grantGrantItem);
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}
WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId());
if(awardsItem == null){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");

BigDecimal prop = BigDecimal.ONE;
if(activityItem.getMaxAmount().compareTo(cashBackPriceTotal) >= 0){
activityItem.setCashBackPrice(cashBackPriceTotal);
}else{
prop = activityItem.getMaxAmount().divide(cashBackPriceTotal).setScale(4, RoundingMode.HALF_UP);;
activityItem.setCashBackPrice(activityItem.getMaxAmount());
}
for (WxOfflineActivityGrantItem grantItem:grantItemList){
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).multiply(prop).setScale(2, RoundingMode.HALF_UP));
activityItem.setCashBackPrice(activityItem.getCashBackPrice().setScale(2, RoundingMode.HALF_UP));
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) {
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).multiply(prop).setScale(0, RoundingMode.HALF_UP));
activityItem.setCashBackPrice(activityItem.getCashBackPrice().setScale(0, RoundingMode.HALF_UP));
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).multiply(prop).divide(new BigDecimal(10))
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10)));
activityItem.setCashBackPrice(activityItem.getCashBackPrice().divide(new BigDecimal(10))
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10)));
}
}

handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem);
grantActivityItem.setActivityGrantItemList(grantItemList);

}

for (WxOfflineActivityGrantItem grantGrantItem : grantActivityItem.getActivityGrantItemList()) {
i++;
if(grantGrantItem.getAwardCount() == null){
grantGrantItem.setAwardCount(1);
}
}
}
if(i == 0){


+ 12
- 12
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java View File

@@ -44,18 +44,18 @@ public class WxOfflineActivityGrantItemServiceImpl implements WxOfflineActivityG
grantGrantItem.updateTenantInfo(wxOfflineActivityGrantAward);
grantGrantItem.setCreateDate(now);
grantGrantItem.setUpdateDate(now);
if(EnumOfflineActivityType.CASHBACK.getCode().equals(grantGrantItem.getActivityItemType())){
BigDecimal awardPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(grantGrantItem.getCashBackRatio().divide(new BigDecimal(100)));
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(grantGrantItem.getAwardsItemRule())){
grantGrantItem.setAwardPrice(awardPrice.setScale(2, BigDecimal.ROUND_HALF_UP));
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(grantGrantItem.getAwardsItemRule())) {
grantGrantItem.setAwardPrice(awardPrice.setScale(0, BigDecimal.ROUND_HALF_UP));
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(grantGrantItem.getAwardsItemRule())){
BigDecimal awardPriceTen = awardPrice.divide(new BigDecimal(10)).setScale(0, BigDecimal.ROUND_HALF_UP);
grantGrantItem.setAwardPrice(awardPriceTen.multiply(new BigDecimal(10)));
}
}
// if(EnumOfflineActivityType.CASHBACK.getCode().equals(grantGrantItem.getActivityItemType())){
// BigDecimal awardPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
// .multiply(grantGrantItem.getCashBackRatio().divide(new BigDecimal(100)));
// if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(grantGrantItem.getAwardsItemRule())){
// grantGrantItem.setAwardPrice(awardPrice.setScale(2, BigDecimal.ROUND_HALF_UP));
// } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(grantGrantItem.getAwardsItemRule())) {
// grantGrantItem.setAwardPrice(awardPrice.setScale(0, BigDecimal.ROUND_HALF_UP));
// }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(grantGrantItem.getAwardsItemRule())){
// BigDecimal awardPriceTen = awardPrice.divide(new BigDecimal(10)).setScale(0, BigDecimal.ROUND_HALF_UP);
// grantGrantItem.setAwardPrice(awardPriceTen.multiply(new BigDecimal(10)));
// }
// }
rantItemList.add(grantGrantItem);
}
}


+ 56
- 22
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java View File

@@ -26,6 +26,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
@@ -55,6 +56,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
List<WxOfflineActivityGrantSettlement> settlementList = new ArrayList<>();
final IdWorker idWorker = IdWorker.get();
Date now = new Date();
Map<Long, WxOfflineActivityRecord> recordMap = wxOfflineActivityGrantAward.getRecordList().stream().collect(Collectors.toMap(WxOfflineActivityRecord::getId, Function.identity()));
//获取订单占比(占比最少的订单用减法,尽量减少误差)
List<WxOfflineActivityRecord> recordDescList = wxOfflineActivityGrantAward.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList());
int size = recordDescList.size() - 1;
@@ -75,11 +77,13 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
}
for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) {
List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>();
for (WxOfflineActivityRecord record : recordDescList){
if(wxOfflineActivityGrantItem.getRecordId() != null){
WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement();
settlement.setId(idWorker.nextId());
settlement.updateTenantInfo(wxOfflineActivityGrantItem);

WxOfflineActivityRecord record = recordMap.get(wxOfflineActivityGrantItem.getRecordId());

settlement.setRecordId(record.getId());
settlement.setOrderNo(record.getOrderNo());
settlement.setOrderMoney(record.getOrderMoney());
@@ -92,34 +96,64 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice());
settlement.setMallShareRate(wxOfflineActivityGrantItem.getMallShareRate());
settlement.setMerchantShareRate(wxOfflineActivityGrantItem.getMerchantShareRate());
settlement.setOrderRatio(record.getOrderRatio());
settlement.setOrderRatio(new BigDecimal(100));

settlement.setCreateDate(now);
settlement.setUpdateDate(now);
itemSettlementList.add(settlement);
}
//计算订单分担金额,(占比最少的订单用减法,尽量减少误差)
int itemSize = itemSettlementList.size() - 1;
BigDecimal lastGrantPrice = wxOfflineActivityGrantItem.getAwardPrice();
for (int i = 0; i < itemSize; i++) {
WxOfflineActivityGrantSettlement settlement = itemSettlementList.get(i);
BigDecimal realGrantPrice = wxOfflineActivityGrantItem.getAwardPrice()
.multiply(settlement.getOrderRatio().divide(new BigDecimal(100)))
.setScale(2, RoundingMode.HALF_UP);
settlement.setRealGrantPrice(realGrantPrice);
settlement.setRealGrantPrice(settlement.getGrantPrice());
settlement.setRealMallSharePrice(settlement.getRealGrantPrice()
.multiply(settlement.getMallShareRate().divide(new BigDecimal(100)))
.setScale(2, RoundingMode.HALF_UP));
settlement.setRealMerchantSharePrice(settlement.getRealGrantPrice().subtract(settlement.getRealMallSharePrice()));

lastGrantPrice = lastGrantPrice.subtract(realGrantPrice);
settlement.setCreateDate(now);
settlement.setUpdateDate(now);
itemSettlementList.add(settlement);
}else{
for (WxOfflineActivityRecord record : recordDescList){
WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement();
settlement.setId(idWorker.nextId());
settlement.updateTenantInfo(wxOfflineActivityGrantItem);

settlement.setRecordId(record.getId());
settlement.setOrderNo(record.getOrderNo());
settlement.setOrderMoney(record.getOrderMoney());
settlement.setMerchantId(record.getMerchantId());

settlement.setActivityId(wxOfflineActivityGrantItem.getActivityId());
settlement.setActivityItemId(wxOfflineActivityGrantItem.getActivityItemId());
settlement.setAwardItamId(wxOfflineActivityGrantItem.getAwardItamId());
settlement.setGrantId(wxOfflineActivityGrantItem.getGrantId());
settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice());
settlement.setMallShareRate(wxOfflineActivityGrantItem.getMallShareRate());
settlement.setMerchantShareRate(wxOfflineActivityGrantItem.getMerchantShareRate());
settlement.setOrderRatio(record.getOrderRatio());

settlement.setCreateDate(now);
settlement.setUpdateDate(now);
itemSettlementList.add(settlement);
}
//计算订单分担金额,(占比最少的订单用减法,尽量减少误差)
int itemSize = itemSettlementList.size() - 1;
BigDecimal lastGrantPrice = wxOfflineActivityGrantItem.getAwardPrice();
for (int i = 0; i < itemSize; i++) {
WxOfflineActivityGrantSettlement settlement = itemSettlementList.get(i);
BigDecimal realGrantPrice = wxOfflineActivityGrantItem.getAwardPrice()
.multiply(settlement.getOrderRatio().divide(new BigDecimal(100)))
.setScale(2, RoundingMode.HALF_UP);
settlement.setRealGrantPrice(realGrantPrice);
settlement.setRealMallSharePrice(settlement.getRealGrantPrice()
.multiply(settlement.getMallShareRate().divide(new BigDecimal(100)))
.setScale(2, RoundingMode.HALF_UP));
settlement.setRealMerchantSharePrice(settlement.getRealGrantPrice().subtract(settlement.getRealMallSharePrice()));

lastGrantPrice = lastGrantPrice.subtract(realGrantPrice);
}
WxOfflineActivityGrantSettlement lastSettlement = itemSettlementList.get(itemSize);
lastSettlement.setRealGrantPrice(lastGrantPrice);
lastSettlement.setRealMallSharePrice(lastSettlement.getRealGrantPrice()
.multiply(lastSettlement.getMallShareRate().divide(new BigDecimal(100)))
.setScale(2, RoundingMode.HALF_UP));
lastSettlement.setRealMerchantSharePrice(lastSettlement.getRealGrantPrice().subtract(lastSettlement.getRealMallSharePrice()));
}
WxOfflineActivityGrantSettlement lastSettlement = itemSettlementList.get(itemSize);
lastSettlement.setRealGrantPrice(lastGrantPrice);
lastSettlement.setRealMallSharePrice(lastSettlement.getRealGrantPrice()
.multiply(lastSettlement.getMallShareRate().divide(new BigDecimal(100)))
.setScale(2, RoundingMode.HALF_UP));
lastSettlement.setRealMerchantSharePrice(lastSettlement.getRealGrantPrice().subtract(lastSettlement.getRealMallSharePrice()));

settlementList.addAll(itemSettlementList);


+ 1
- 1
mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml View File

@@ -26,7 +26,7 @@

<sql id="allColumns">
id,tenant_id,parent_tenant_id,
activity_item_id,`name`,grade,
activity_item_id,`name`,grade,merchant_count,
min_amount,max_amount,cash_back_ratio,price,
money_rule,mall_share_rate,merchant_share_rate,
create_date,update_date


+ 4
- 3
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml View File

@@ -28,6 +28,7 @@
<result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
<result property="recordId" column="record_id" jdbcType="BIGINT"/>
</resultMap>

<sql id="allColumns">
@@ -38,7 +39,7 @@
award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio,
award_price,award_count,money_rule,
mall_share_rate,merchant_share_rate,
create_date,update_date
create_date,update_date,record_id
</sql>

<sql id="dynamicWhereConditions">
@@ -92,7 +93,7 @@
award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio,
award_price,award_count,money_rule,
mall_share_rate,merchant_share_rate,
create_date,update_date)
create_date,update_date,record_id)
values
<foreach collection="grantItemList" item="item" index="index" separator=",">
(#{item.id,jdbcType=BIGINT},
@@ -102,7 +103,7 @@
#{item.awardMinAmount,jdbcType=DECIMAL},#{item.awardMaxAmount,jdbcType=DECIMAL},#{item.awardsItemRule,jdbcType=INTEGER},#{item.cashBackRatio,jdbcType=DECIMAL},
#{item.awardPrice,jdbcType=DECIMAL},#{item.awardCount,jdbcType=INTEGER},#{item.moneyRule,jdbcType=INTEGER},
#{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL},
#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP})
#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP},#{item.recordId,jdbcType=BIGINT})
</foreach>
</insert>



+ 1
- 1
mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml View File

@@ -28,7 +28,7 @@
id,tenant_id,parent_tenant_id,
activity_id,`type`,`name`,
limit_money,awards_item_price,awards_item_limit,awards_item_count,
awards_item_rule,create_date,update_date
awards_item_rule,calculation_mode,max_amount,starting_tax_point,tax_points,create_date,update_date
</sql>

<sql id="dynamicWhereConditions">


Loading…
Cancel
Save