diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java index aef581507..25f69aca2 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -276,7 +276,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity record_limit_count = activityAwardsModel.getAwardsCount(); } } - if(record_limit_count > 0){ + if(record_limit_count != null && record_limit_count > 0){ OfflineActivityGrantRule grantRule = new OfflineActivityGrantRule(); grantRule.setRecordId(record.getId()); grantRule.setRecord(record); @@ -330,7 +330,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity private void handleGiftAwards(WxOfflineActivity activity, WxOfflineActivityItem activityItem, List recordList){ List grantItemList = new ArrayList<>(); - Map awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getGrade, Function.identity())); +// Map awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getGrade, Function.identity())); if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ for(WxOfflineActivityRecord record :recordList){ @@ -344,14 +344,23 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(awardsGrade == null){ continue; } - WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); - if(awardsItem != null){ - WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); - grantGrantItem.setRecordId(record.getId()); - grantGrantItem.setRecord(record); - handlerGrantItem(grantGrantItem,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,awardsItem); - grantItemList.add(grantGrantItem); - } + + WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); + grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); + grantGrantItem.setRecordId(record.getId()); + grantGrantItem.setRecord(record); + grantGrantItem.setAwardGrade(awardsGrade); + grantGrantItem.setAwardCount(1); + grantItemList.add(grantGrantItem); + +// WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); +// if(awardsItem != null){ +// WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); +// grantGrantItem.setRecordId(record.getId()); +// grantGrantItem.setRecord(record); +// handlerGrantItem(grantGrantItem,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,awardsItem); +// grantItemList.add(grantGrantItem); +// } } }else{ BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); @@ -363,12 +372,18 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } } if(awardsGrade != null){ - WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); - if(awardsItem != null){ - WxOfflineActivityGrantItem wxOfflineActivityGrantItem = new WxOfflineActivityGrantItem(); - handlerGrantItem(wxOfflineActivityGrantItem,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,awardsItem); - grantItemList.add(wxOfflineActivityGrantItem); - } + WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); + grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); + grantGrantItem.setAwardGrade(awardsGrade); + grantGrantItem.setAwardCount(1); + grantItemList.add(grantGrantItem); + +// WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); +// if(awardsItem != null){ +// WxOfflineActivityGrantItem wxOfflineActivityGrantItem = new WxOfflineActivityGrantItem(); +// handlerGrantItem(wxOfflineActivityGrantItem,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,awardsItem); +// grantItemList.add(wxOfflineActivityGrantItem); +// } } } @@ -378,12 +393,18 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity Map jointCountMap = activityItem.getActivityAwardsModelSecondList().stream().collect(toMap(WxOfflineActivityAwardsModel::getMerchantCount, Function.identity())); WxOfflineActivityAwardsModel activityAwardsModel = jointCountMap.get(jointCount); if(activityAwardsModel != null && activityAwardsModel.getAwardsGrade() != null){ - WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(activityAwardsModel.getAwardsGrade()); - if(awardsItem != null){ - WxOfflineActivityGrantItem wxOfflineActivityGrantItem = new WxOfflineActivityGrantItem(); - handlerGrantItem(wxOfflineActivityGrantItem,EnumOfflineActivityAwardsModeType.COUNT,activity,activityItem,awardsItem); - grantItemList.add(wxOfflineActivityGrantItem); - } + WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); + grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.COUNT.getCode()); + grantGrantItem.setAwardGrade(activityAwardsModel.getAwardsGrade()); + grantGrantItem.setAwardCount(1); + grantItemList.add(grantGrantItem); + +// WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(activityAwardsModel.getAwardsGrade()); +// if(awardsItem != null){ +// WxOfflineActivityGrantItem wxOfflineActivityGrantItem = new WxOfflineActivityGrantItem(); +// handlerGrantItem(wxOfflineActivityGrantItem,EnumOfflineActivityAwardsModeType.COUNT,activity,activityItem,awardsItem); +// grantItemList.add(wxOfflineActivityGrantItem); +// } } } @@ -405,7 +426,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity grantAwardsItem = awardsItem; } } - if(grantAwardsItem != null){ + if(grantAwardsItem != null && grantAwardsItem.getCashBackRatio() != null){ //计算返现金额 BigDecimal cashBackPrice = record.getOrderMoney().multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); if(grantAwardsItem.getLimitPrice() != null && grantAwardsItem.getLimitPrice().compareTo(BigDecimal.ZERO) > 0 @@ -437,7 +458,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity grantAwardsItem = awardsItem; } } - if(grantAwardsItem != null){ + if(grantAwardsItem != null && grantAwardsItem.getCashBackRatio() != null){ //计算返现金额 BigDecimal cashBackPrice = orderMoneySum @@ -460,7 +481,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ Map jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); WxOfflineActivityAwardsItem awardsSecondItem = jointCountMap.get(jointCount); - if(awardsSecondItem != null){ + if(awardsSecondItem != null && awardsSecondItem.getCashBackRatio() != null){ BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); //计算返现金额 BigDecimal cashBackPrice = orderMoneySum @@ -757,7 +778,10 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity // if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ // throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"金额不满足"); // } - + boolean isAwardItamId = activityGrantItemList.stream().anyMatch(grantItem -> grantItem.getAwardItamId() == null); + if(isAwardItamId){ + throw new MallinkException(Result.ERROR, "请检查抽奖活动是否都选择奖项"); + } //所得奖项不能重复, 后续计算问题 boolean isRepeat = activityGrantItemList.stream() .collect(groupingBy(e -> String.valueOf(e.getAwardItamId())+String.valueOf(e.getRecordId()), counting())) @@ -767,9 +791,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { - if(grantGrantItem.getAwardItamId() == null){ - throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); - } +// if(grantGrantItem.getAwardItamId() == null){ +// throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); +// } WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); if(awardsItem == null){ throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); @@ -789,10 +813,47 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ - handleGiftAwards(activity,activityItem,wxOfflineActivityGrantAward.getRecordList()); - if(activityItem.getActivityGrantItemList().isEmpty()){ + if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ continue; } + + boolean isAwardItamId = activityGrantItemList.stream().anyMatch(grantItem -> grantItem.getAwardItamId() == null); + if(isAwardItamId){ + throw new MallinkException(Result.ERROR, "请检查赠礼活动是否都选择奖项"); + } + //所得奖项不能重复, 后续计算问题 + boolean isRepeat = activityGrantItemList.stream() + .collect(groupingBy(e -> String.valueOf(e.getAwardItamId())+String.valueOf(e.getGrantAwardsMode())+String.valueOf(e.getRecordId()), counting())) + .entrySet().stream().anyMatch(e -> e.getValue() > 1); + if(isRepeat){ + throw new MallinkException(Result.ERROR, "请检查赠礼活动奖项存在重复"); + } + + for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { +// if(grantGrantItem.getAwardItamId() == null){ +// throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); +// } + WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); + if(awardsItem == null){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); + } + if(grantGrantItem.getGrantAwardsMode() == null){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项类型参数"); + } + + EnumOfflineActivityAwardsModeType modeType = EnumOfflineActivityAwardsModeType.getEnum(grantGrantItem.getGrantAwardsMode()); + if(modeType == null){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项类型参数"); + } + handlerGrantItem(grantGrantItem, modeType, activity, activityItem, awardsItem); + } + activityItem.setActivityGrantItemList(activityGrantItemList); + + +// handleGiftAwards(activity,activityItem,wxOfflineActivityGrantAward.getRecordList()); +// if(activityItem.getActivityGrantItemList().isEmpty()){ +// continue; +// } } else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { handleCashback(activity,activityItem,wxOfflineActivityGrantAward.getRecordList()); @@ -2099,8 +2160,6 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity List> grantItemObjectList = new ArrayList<>(); - //单笔订单 - Map> grantItemMap; WxOfflineActivityGrantSettlement grantSettlement = new WxOfflineActivityGrantSettlement(); grantSettlement.updateTenantInfo(activityItem); grantSettlement.setActivityItemId(activityItem.getId()); @@ -2111,10 +2170,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } List grantItemList = wxOfflineActivityGrantSettlementMapper.findAwardItemGrantList(grantSettlement); if(grantItemList != null && !grantItemList.isEmpty()){ - grantItemMap = grantItemList.stream().collect(groupingBy(OfflineActivityGrantItemVo::getRecordId)); //订单表头 - Map grantItemSizeMap = grantItemList.stream().collect(groupingBy(OfflineActivityGrantItemVo::getRecordId, counting())); + Map grantItemSizeMap = grantItemList.stream().collect(groupingBy(e -> String.valueOf(e.getGrantId())+String.valueOf(e.getRecordId()), counting())); Long maxGrantItemSize = Collections.max(grantItemSizeMap.values()); for (int i = 0; i < maxGrantItemSize.intValue(); i++) { ExcelExportEntity entity_1 = new ExcelExportEntity("奖品名称","awardName_"+i,20); @@ -2135,7 +2193,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity exportHead.add(entity_7); } - List recordIds = new ArrayList<>(grantItemMap.keySet()); + List recordIds = grantItemList.stream().map(OfflineActivityGrantItemVo::getRecordId).distinct().collect(toList()); List grantIds = grantItemList.stream().map(OfflineActivityGrantItemVo::getGrantId).distinct().collect(toList()); List recordList = wxOfflineActivityRecordService.selectListByIds(recordIds,activityItem); @@ -2144,27 +2202,50 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity List grantList = this.selectListByIds(grantIds,activityItem); Map grantMap = grantList.stream().collect(toMap(WxOfflineActivityGrantAward::getId, Function.identity())); - - recordIds.forEach(recordId -> { - List recordgrantItemList = grantItemMap.get(recordId); - Long grantId = recordgrantItemList.get(0).getGrantId(); - WxOfflineActivityRecord record = recordMap.get(recordId); - WxOfflineActivityGrantAward grant = grantMap.get(grantId); - Map grantItemObject= getGrantItemExportObject(record,grant); - - for (int i=0;i> grantItemMap = grantItemList.stream().collect(groupingBy(OfflineActivityGrantItemVo::getGrantId)); + grantItemMap.keySet().forEach(grantId -> { + List offlineActivityGrantItemVos = grantItemMap.get(grantId); + Map> recordGrantItemMap = offlineActivityGrantItemVos.stream().collect(groupingBy(OfflineActivityGrantItemVo::getRecordId)); + recordGrantItemMap.keySet().forEach(recordId -> { + List recordGrantItemList = recordGrantItemMap.get(recordId); + WxOfflineActivityRecord record = recordMap.get(recordId); + WxOfflineActivityGrantAward grant = grantMap.get(grantId); + Map grantItemObject= getGrantItemExportObject(record,grant); + for (int i=0;i { +// List recordgrantItemList = grantItemMap.get(recordId); +// Long grantId = recordgrantItemList.get(0).getGrantId(); +// WxOfflineActivityRecord record = recordMap.get(recordId); +// WxOfflineActivityGrantAward grant = grantMap.get(grantId); +// Map grantItemObject= getGrantItemExportObject(record,grant); +// +// for (int i=0;i