| @@ -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); | |||