Browse Source

//offline

release_toaliyun_real
xiaohu 1 year ago
parent
commit
b8a9e73f37
1 changed files with 35 additions and 32 deletions
  1. +35
    -32
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java

+ 35
- 32
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java View File

@@ -8,6 +8,7 @@ import com.iformall.domain.po.*;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.OfflineActivitySettlement;
import com.iformall.domain.vo.OfflineActivitySettlementStatistics;
import com.iformall.enums.EnumOfflineActivityAwardsModeType;
import com.iformall.enums.EnumOfflineActivityMode;
import com.iformall.enums.EnumOfflineActivityStatus;
import com.iformall.enums.EnumYesOrNo;
@@ -59,44 +60,42 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
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;
// 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> allRecordDescList = wxOfflineActivityGrantAward.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList());
int allsize = allRecordDescList.size() - 1;
BigDecimal allLastRatio = new BigDecimal(100);
for(int i=0; i<allsize; i++){
WxOfflineActivityRecord record = allRecordDescList.get(i);
BigDecimal orderRatio = record.getOrderMoney()
.divide(wxOfflineActivityGrantAward.getOrderMoneySum(),4,RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
record.setOrderRatio(orderRatio);
allLastRatio = allLastRatio.subtract(orderRatio);
}
allRecordDescList.get(allsize).setOrderRatio(allLastRatio);

for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) {
if(activityItem.getActivityGrantItemList() == null){
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);
if(recordDescList.size() == allRecordDescList.size()){
recordDescList = allRecordDescList;
}else{
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);
}
recordDescList.get(size).setOrderRatio(lastRatio);

for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) {
List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>();
@@ -133,7 +132,11 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
settlement.setUpdateDate(now);
itemSettlementList.add(settlement);
}else{
for (WxOfflineActivityRecord record : recordDescList){
List<WxOfflineActivityRecord> countRecordDescList = allRecordDescList;
if(EnumOfflineActivityAwardsModeType.AMOUNT.getCode().equals(wxOfflineActivityGrantItem.getGrantAwardsMode())){
countRecordDescList = recordDescList;
}
for (WxOfflineActivityRecord record : countRecordDescList){
WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement();
settlement.setId(idWorker.nextId());
settlement.updateTenantInfo(wxOfflineActivityGrantItem);


Loading…
Cancel
Save