Просмотр исходного кода

//offline

release_toaliyun_real
xiaohu 1 год назад
Родитель
Сommit
69115747e2
3 измененных файлов: 112 добавлений и 65 удалений
  1. +76
    -52
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java
  2. +35
    -12
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java
  3. +1
    -1
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml

+ 76
- 52
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java Просмотреть файл

@@ -179,14 +179,22 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
//订单合并计算 //订单合并计算
handlerGrantData(activity,wxOfflineActivityGrantAward,true); handlerGrantData(activity,wxOfflineActivityGrantAward,true);


//奖项处理
//订单参数处理
List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId());
if(wxOfflineActivityGrantAward.getActivityItemList() != null && !wxOfflineActivityGrantAward.getActivityItemList().isEmpty()){ if(wxOfflineActivityGrantAward.getActivityItemList() != null && !wxOfflineActivityGrantAward.getActivityItemList().isEmpty()){
Map<Long, List<Long>> ActivityItemRecordMap = wxOfflineActivityGrantAward.getActivityItemList().stream().collect(toMap(WxOfflineActivityItem::getId, WxOfflineActivityItem::getRecordIds)); Map<Long, List<Long>> ActivityItemRecordMap = wxOfflineActivityGrantAward.getActivityItemList().stream().collect(toMap(WxOfflineActivityItem::getId, WxOfflineActivityItem::getRecordIds));
for (WxOfflineActivityItem activityItem : activityItemList) { for (WxOfflineActivityItem activityItem : activityItemList) {
List<Long> records = ActivityItemRecordMap.get(activityItem.getId());
if(records != null && !records.isEmpty()){
if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){
List<Long> records = ActivityItemRecordMap.get(activityItem.getId());
if(records == null || records.isEmpty()){
throw new MallinkException(Result.ERROR, "发奖未选择订单");
}
activityItem.setRecordIds(records); activityItem.setRecordIds(records);
List<WxOfflineActivityRecord> collect = wxOfflineActivityGrantAward.getRecordList().stream()
.filter(record -> activityItem.getRecordIds().contains(record.getId())).collect(toList());
activityItem.setRecordList(collect);
}else{
activityItem.setRecordList(wxOfflineActivityGrantAward.getRecordList());
} }
} }
} }
@@ -200,7 +208,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity


//处理发奖数量 //处理发奖数量
activityItem.setIsMeet(true); activityItem.setIsMeet(true);
handleLotteryDrawCount(activityItem,wxOfflineActivityGrantAward.getRecordList());
handleLotteryDrawCount(activityItem,activityItem.getRecordList());
if(activityItem.getRealAwardsItemLimit() == 0){ if(activityItem.getRealAwardsItemLimit() == 0){
activityItem.setIsMeet(false); activityItem.setIsMeet(false);
} }
@@ -211,7 +219,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); handlerAwardsSharePrice(activityItem.getActivityAwardsItemList());


//处理发放奖项 //处理发放奖项
handleGiftAwards(activityItem,wxOfflineActivityGrantAward.getRecordList());
handleGiftAwards(activityItem,activityItem.getRecordList());
activityItem.setIsMeet(true); activityItem.setIsMeet(true);
if(activityItem.getActivityGrantItemList() == null || activityItem.getActivityGrantItemList().isEmpty()){ if(activityItem.getActivityGrantItemList() == null || activityItem.getActivityGrantItemList().isEmpty()){
activityItem.setIsMeet(false); activityItem.setIsMeet(false);
@@ -222,11 +230,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
BigDecimal cashBackPriceTotal = BigDecimal.ZERO; BigDecimal cashBackPriceTotal = BigDecimal.ZERO;
List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>(); List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>();


BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add);

List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList());
//单笔订单计算 //单笔订单计算
if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){


for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){
for (WxOfflineActivityRecord record : activityItem.getRecordList()){
WxOfflineActivityAwardsItem grantAwardsItem = null; WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0)
@@ -275,16 +285,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity


} }
}else{ }else{
BigDecimal orderMoneySum = wxOfflineActivityGrantAward.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;
}
}
// 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; WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
@@ -302,13 +312,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity


} }


Integer jointCount = getJointCount(activityItem,wxOfflineActivityGrantAward.getRecordList());
Integer jointCount = getJointCount(activityItem,activityItem.getRecordList());
if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){
Map<Integer, WxOfflineActivityAwardsItem> jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); Map<Integer, WxOfflineActivityAwardsItem> jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity()));
WxOfflineActivityAwardsItem grantAwardsSecondItem = jointCountMap.get(jointCount); WxOfflineActivityAwardsItem grantAwardsSecondItem = jointCountMap.get(jointCount);
if(grantAwardsSecondItem != null){ if(grantAwardsSecondItem != null){
//计算返现金额 //计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
BigDecimal cashBackPrice = orderMoneySum
.multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); .multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100)));
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
} }
@@ -386,20 +396,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity


}else{ }else{
BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); 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;
}

}
// 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;
// }
// }
if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){
limitCount = orderMoneySum.divide(activityItem.getAwardsItemPrice(),0, RoundingMode.HALF_DOWN).intValue(); limitCount = orderMoneySum.divide(activityItem.getAwardsItemPrice(),0, RoundingMode.HALF_DOWN).intValue();
} }

} }


Integer jointCount = getJointCount(activityItem,recordList); Integer jointCount = getJointCount(activityItem,recordList);
@@ -448,15 +454,15 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
} }
}else{ }else{
BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); 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;
}
}
// 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;
// }
// }
Integer awardsGrade = null; Integer awardsGrade = null;
for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){ for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){
if((activityAwardsModel.getMinAmount() == null || orderMoneySum.compareTo(activityAwardsModel.getMinAmount()) >= 0) if((activityAwardsModel.getMinAmount() == null || orderMoneySum.compareTo(activityAwardsModel.getMinAmount()) >= 0)
@@ -498,6 +504,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity


private Integer getJointCount(WxOfflineActivityItem activityItem, List<WxOfflineActivityRecord> recordList){ private Integer getJointCount(WxOfflineActivityItem activityItem, List<WxOfflineActivityRecord> recordList){
Integer jointCount = 0; Integer jointCount = 0;
if(recordList == null || recordList.isEmpty()){
return jointCount;
}
if(EnumOfflineActivityCountMode.MERCHANT_MODEL.getCode().equals(activityItem.getCountModel())){ if(EnumOfflineActivityCountMode.MERCHANT_MODEL.getCode().equals(activityItem.getCountModel())){
//商户联单 //商户联单
List<Long> merchantIds = recordList.stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); List<Long> merchantIds = recordList.stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList());
@@ -673,8 +682,21 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
for (WxOfflineActivityItem activityItem : activityItemList) { for (WxOfflineActivityItem activityItem : activityItemList) {


Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity()));
//获取奖项
WxOfflineActivityItem grantActivityItem = grantActivityItemMap.get(activityItem.getId()); WxOfflineActivityItem grantActivityItem = grantActivityItemMap.get(activityItem.getId());
//订单参数处理
if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){
if(grantActivityItem.getRecordIds() == null || grantActivityItem.getRecordIds().isEmpty()){
throw new MallinkException(Result.ERROR, "发奖未选择订单");
}
activityItem.setRecordIds(grantActivityItem.getRecordIds());
List<WxOfflineActivityRecord> collect = wxOfflineActivityGrantAward.getRecordList().stream()
.filter(record -> activityItem.getRecordIds().contains(record.getId())).collect(toList());
activityItem.setRecordList(collect);
}else{
activityItem.setRecordList(wxOfflineActivityGrantAward.getRecordList());
}
//获取发放奖项
List<WxOfflineActivityGrantItem> activityGrantItemList = null; List<WxOfflineActivityGrantItem> activityGrantItemList = null;
if(grantActivityItem != null){ if(grantActivityItem != null){
activityGrantItemList = grantActivityItem.getActivityGrantItemList(); activityGrantItemList = grantActivityItem.getActivityGrantItemList();
@@ -741,10 +763,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
BigDecimal cashBackPriceTotal = BigDecimal.ZERO; BigDecimal cashBackPriceTotal = BigDecimal.ZERO;
activityGrantItemList = new ArrayList<>(); activityGrantItemList = new ArrayList<>();


BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add);

List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList());
//单笔订单计算 //单笔订单计算
if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){
for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){
for (WxOfflineActivityRecord record : activityItem.getRecordList()){
WxOfflineActivityAwardsItem grantAwardsItem = null; WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0)
@@ -769,16 +793,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity


} }
}else{ }else{
BigDecimal orderMoneySum = wxOfflineActivityGrantAward.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;
}
}
// 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; WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
@@ -800,14 +824,14 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
} }
} }


Integer jointCount = getJointCount(activityItem,wxOfflineActivityGrantAward.getRecordList());
Integer jointCount = getJointCount(activityItem,activityItem.getRecordList());
if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){
Map<Integer, WxOfflineActivityAwardsItem> jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); Map<Integer, WxOfflineActivityAwardsItem> jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity()));
WxOfflineActivityAwardsItem awardsSecondItem = jointCountMap.get(jointCount); WxOfflineActivityAwardsItem awardsSecondItem = jointCountMap.get(jointCount);
if(awardsSecondItem != null){ if(awardsSecondItem != null){
WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem();
//计算返现金额 //计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
BigDecimal cashBackPrice = orderMoneySum
.multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); .multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100)));
awardsSecondItem.setPrice(cashBackPrice); awardsSecondItem.setPrice(cashBackPrice);
handlerGrantItem(grantGrantItem,activity,activityItem,awardsSecondItem); handlerGrantItem(grantGrantItem,activity,activityItem,awardsSecondItem);


+ 35
- 12
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java Просмотреть файл

@@ -8,6 +8,7 @@ import com.iformall.domain.po.*;
import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.OfflineActivitySettlement; import com.iformall.domain.vo.OfflineActivitySettlement;
import com.iformall.domain.vo.OfflineActivitySettlementStatistics; import com.iformall.domain.vo.OfflineActivitySettlementStatistics;
import com.iformall.enums.EnumOfflineActivityMode;
import com.iformall.enums.EnumOfflineActivityStatus; import com.iformall.enums.EnumOfflineActivityStatus;
import com.iformall.enums.EnumYesOrNo; import com.iformall.enums.EnumYesOrNo;
import com.iformall.mapper.WxMerchantMapper; import com.iformall.mapper.WxMerchantMapper;
@@ -57,24 +58,46 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
final IdWorker idWorker = IdWorker.get(); final IdWorker idWorker = IdWorker.get();
Date now = new Date(); Date now = new Date();
Map<Long, WxOfflineActivityRecord> recordMap = wxOfflineActivityGrantAward.getRecordList().stream().collect(Collectors.toMap(WxOfflineActivityRecord::getId, Function.identity())); 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;
BigDecimal lastRatio = new BigDecimal(100);
for(int i=0; i<size; i++){
WxOfflineActivityRecord record = recordDescList.get(i);
BigDecimal orderRatio = record.getOrderMoney()
.divide(wxOfflineActivityGrantAward.getOrderMoneySum(),4,RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
record.setOrderRatio(orderRatio);
lastRatio = lastRatio.subtract(orderRatio);
}
recordDescList.get(size).setOrderRatio(lastRatio);
// List<WxOfflineActivityRecord> recordDescList = wxOfflineActivityGrantAward.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList());
// int size = recordDescList.size() - 1;
// BigDecimal lastRatio = new BigDecimal(100);
// for(int i=0; i<size; i++){
// WxOfflineActivityRecord record = recordDescList.get(i);
// BigDecimal orderRatio = record.getOrderMoney()
// .divide(wxOfflineActivityGrantAward.getOrderMoneySum(),4,RoundingMode.HALF_UP)
// .multiply(new BigDecimal(100));
// record.setOrderRatio(orderRatio);
// lastRatio = lastRatio.subtract(orderRatio);
// }
// recordDescList.get(size).setOrderRatio(lastRatio);


for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) { for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) {
if(activityItem.getActivityGrantItemList() == null){ if(activityItem.getActivityGrantItemList() == null){
continue; continue;
} }
//获取订单占比(占比最少的订单用减法,尽量减少误差)
List<WxOfflineActivityRecord> recordDescList = activityItem.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList());
// if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())
// && activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){
// recordDescList = wxOfflineActivityGrantAward.getRecordList().stream()
// .filter(record -> activityItem.getRecordIds().contains(record.getId()))
// .sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList());
// }
BigDecimal orderMoneySum = recordDescList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
int size = recordDescList.size() - 1;
BigDecimal lastRatio = new BigDecimal(100);
for(int i=0; i<size; i++){
WxOfflineActivityRecord record = recordDescList.get(i);
BigDecimal orderRatio = record.getOrderMoney()
.divide(orderMoneySum,4,RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
record.setOrderRatio(orderRatio);
lastRatio = lastRatio.subtract(orderRatio);
}
recordDescList.get(size).setOrderRatio(lastRatio);

for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) { for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) {
List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>(); List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>();
if(wxOfflineActivityGrantItem.getRecordId() != null){ if(wxOfflineActivityGrantItem.getRecordId() != null){


+ 1
- 1
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml Просмотреть файл

@@ -85,7 +85,7 @@
(#{item.id,jdbcType=BIGINT}, (#{item.id,jdbcType=BIGINT},
#{item.grantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR}, #{item.grantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR},
#{item.activityItemId,jdbcType=BIGINT},#{item.activityItemName,jdbcType=VARCHAR},#{item.activityItemType,jdbcType=INTEGER}, #{item.activityItemId,jdbcType=BIGINT},#{item.activityItemName,jdbcType=VARCHAR},#{item.activityItemType,jdbcType=INTEGER},
#{item.awardsItemRule,jdbcType=INTEGER},#{item.calculationMode,jdbcType=INTEGER},
#{item.awardsItemRule,jdbcType=INTEGER},
#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}, #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP},
#{item.maxAmount,jdbcType=DECIMAL},#{item.startingTaxPoint,jdbcType=DECIMAL},#{item.taxPoints,jdbcType=DECIMAL},#{item.cashBackPrice,jdbcType=DECIMAL},#{item.taxPointsAmount,jdbcType=DECIMAL}) #{item.maxAmount,jdbcType=DECIMAL},#{item.startingTaxPoint,jdbcType=DECIMAL},#{item.taxPoints,jdbcType=DECIMAL},#{item.cashBackPrice,jdbcType=DECIMAL},#{item.taxPointsAmount,jdbcType=DECIMAL})
</foreach> </foreach>


Загрузка…
Отмена
Сохранить