|
|
|
@@ -179,14 +179,22 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
//订单合并计算 |
|
|
|
handlerGrantData(activity,wxOfflineActivityGrantAward,true); |
|
|
|
|
|
|
|
//奖项处理 |
|
|
|
//订单参数处理 |
|
|
|
List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); |
|
|
|
if(wxOfflineActivityGrantAward.getActivityItemList() != null && !wxOfflineActivityGrantAward.getActivityItemList().isEmpty()){ |
|
|
|
Map<Long, List<Long>> ActivityItemRecordMap = wxOfflineActivityGrantAward.getActivityItemList().stream().collect(toMap(WxOfflineActivityItem::getId, WxOfflineActivityItem::getRecordIds)); |
|
|
|
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); |
|
|
|
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); |
|
|
|
handleLotteryDrawCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); |
|
|
|
handleLotteryDrawCount(activityItem,activityItem.getRecordList()); |
|
|
|
if(activityItem.getRealAwardsItemLimit() == 0){ |
|
|
|
activityItem.setIsMeet(false); |
|
|
|
} |
|
|
|
@@ -211,7 +219,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); |
|
|
|
|
|
|
|
//处理发放奖项 |
|
|
|
handleGiftAwards(activityItem,wxOfflineActivityGrantAward.getRecordList()); |
|
|
|
handleGiftAwards(activityItem,activityItem.getRecordList()); |
|
|
|
activityItem.setIsMeet(true); |
|
|
|
if(activityItem.getActivityGrantItemList() == null || activityItem.getActivityGrantItemList().isEmpty()){ |
|
|
|
activityItem.setIsMeet(false); |
|
|
|
@@ -222,11 +230,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
BigDecimal cashBackPriceTotal = BigDecimal.ZERO; |
|
|
|
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()); |
|
|
|
//单笔订单计算 |
|
|
|
if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ |
|
|
|
|
|
|
|
for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ |
|
|
|
for (WxOfflineActivityRecord record : activityItem.getRecordList()){ |
|
|
|
WxOfflineActivityAwardsItem grantAwardsItem = null; |
|
|
|
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ |
|
|
|
if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) |
|
|
|
@@ -275,16 +285,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
|
|
|
|
} |
|
|
|
}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; |
|
|
|
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()){ |
|
|
|
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() |
|
|
|
BigDecimal cashBackPrice = orderMoneySum |
|
|
|
.multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); |
|
|
|
} |
|
|
|
@@ -386,20 +396,16 @@ 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.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){ |
|
|
|
limitCount = orderMoneySum.divide(activityItem.getAwardsItemPrice(),0, RoundingMode.HALF_DOWN).intValue(); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Integer jointCount = getJointCount(activityItem,recordList); |
|
|
|
@@ -448,15 +454,15 @@ 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.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; |
|
|
|
for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){ |
|
|
|
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){ |
|
|
|
Integer jointCount = 0; |
|
|
|
if(recordList == null || recordList.isEmpty()){ |
|
|
|
return jointCount; |
|
|
|
} |
|
|
|
if(EnumOfflineActivityCountMode.MERCHANT_MODEL.getCode().equals(activityItem.getCountModel())){ |
|
|
|
//商户联单 |
|
|
|
List<Long> merchantIds = recordList.stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); |
|
|
|
@@ -673,8 +682,21 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
for (WxOfflineActivityItem activityItem : activityItemList) { |
|
|
|
|
|
|
|
Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); |
|
|
|
//获取奖项 |
|
|
|
|
|
|
|
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; |
|
|
|
if(grantActivityItem != null){ |
|
|
|
activityGrantItemList = grantActivityItem.getActivityGrantItemList(); |
|
|
|
@@ -741,10 +763,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
BigDecimal cashBackPriceTotal = BigDecimal.ZERO; |
|
|
|
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()); |
|
|
|
//单笔订单计算 |
|
|
|
if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ |
|
|
|
for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ |
|
|
|
for (WxOfflineActivityRecord record : activityItem.getRecordList()){ |
|
|
|
WxOfflineActivityAwardsItem grantAwardsItem = null; |
|
|
|
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ |
|
|
|
if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) |
|
|
|
@@ -769,16 +793,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
|
|
|
|
} |
|
|
|
}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; |
|
|
|
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()){ |
|
|
|
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(); |
|
|
|
//计算返现金额 |
|
|
|
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() |
|
|
|
BigDecimal cashBackPrice = orderMoneySum |
|
|
|
.multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); |
|
|
|
awardsSecondItem.setPrice(cashBackPrice); |
|
|
|
handlerGrantItem(grantGrantItem,activity,activityItem,awardsSecondItem); |
|
|
|
|