| @@ -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.EnumOfflineActivityAwardsModeType; | |||||
| import com.iformall.enums.EnumOfflineActivityMode; | 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; | ||||
| @@ -59,44 +60,42 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||||
| 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> 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()) { | 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()); | 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()) { | for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) { | ||||
| List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>(); | List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>(); | ||||
| @@ -133,7 +132,11 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||||
| settlement.setUpdateDate(now); | settlement.setUpdateDate(now); | ||||
| itemSettlementList.add(settlement); | itemSettlementList.add(settlement); | ||||
| }else{ | }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(); | WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | ||||
| settlement.setId(idWorker.nextId()); | settlement.setId(idWorker.nextId()); | ||||
| settlement.updateTenantInfo(wxOfflineActivityGrantItem); | settlement.updateTenantInfo(wxOfflineActivityGrantItem); | ||||