|
|
|
@@ -1,5 +1,7 @@ |
|
|
|
package com.iformall.service.impl; |
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; |
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
|
import com.iformall.common.IdWorker; |
|
|
|
import com.iformall.common.Result; |
|
|
|
@@ -152,6 +154,77 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void handlerGrantAwardPage(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { |
|
|
|
WxOfflineActivity activity = wxOfflineActivityMapper.selectById(wxOfflineActivityGrantAward.getActivityId(), wxOfflineActivityGrantAward.getTenantId()); |
|
|
|
if(activity == null){ |
|
|
|
throw new MallinkException(Result.ERROR, "未查询到活动"); |
|
|
|
} |
|
|
|
if(!EnumOfflineActivityStatus.ON_LINE.getCode().equals(activity.getStatus())){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动状态"); |
|
|
|
} |
|
|
|
//订单合并 |
|
|
|
handlerGrantData(activity,wxOfflineActivityGrantAward,true); |
|
|
|
|
|
|
|
//奖项处理 |
|
|
|
List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); |
|
|
|
wxOfflineActivityGrantAward.setActivityItemList(activityItemList); |
|
|
|
for(WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()){ |
|
|
|
if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ |
|
|
|
|
|
|
|
if(wxOfflineActivityGrantAward.getOrderMoneySum() < activityItem.getLimitMoney()){ |
|
|
|
activityItem.setIsMeet(false); |
|
|
|
continue; |
|
|
|
} |
|
|
|
activityItem.setIsMeet(true); |
|
|
|
//奖项限制数量 |
|
|
|
int limitCount = wxOfflineActivityGrantAward.getOrderMoneySum() / activityItem.getAwardsItemPrice(); |
|
|
|
if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0 |
|
|
|
&& activityItem.getAwardsItemLimit() < limitCount){ |
|
|
|
limitCount = activityItem.getAwardsItemLimit(); |
|
|
|
} |
|
|
|
activityItem.setRealAwardsItemLimit(limitCount); |
|
|
|
} |
|
|
|
else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ |
|
|
|
List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparingInt(WxOfflineActivityAwardsItem::getMinAmount)).collect(Collectors.toList()); |
|
|
|
WxOfflineActivityAwardsItem grantAwardsItem = null; |
|
|
|
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ |
|
|
|
if(wxOfflineActivityGrantAward.getOrderMoneySum() > awardsItem.getMinAmount() |
|
|
|
&& wxOfflineActivityGrantAward.getOrderMoneySum() < awardsItem.getMaxAmount()){ |
|
|
|
grantAwardsItem = awardsItem; |
|
|
|
} |
|
|
|
} |
|
|
|
if(grantAwardsItem == null){ |
|
|
|
activityItem.setIsMeet(false); |
|
|
|
continue; |
|
|
|
} |
|
|
|
activityItem.setIsMeet(true); |
|
|
|
activityItem.setRealAwardsItemLimit(1); |
|
|
|
|
|
|
|
WxOfflineActivityGrantItem grantItem = new WxOfflineActivityGrantItem(); |
|
|
|
grantItem.setActivityItemId(activityItem.getId()); |
|
|
|
grantItem.setActivityItemName(activityItem.getName()); |
|
|
|
grantItem.setActivityItemType(activityItem.getType()); |
|
|
|
grantItem.setAwardItamId(grantAwardsItem.getId()); |
|
|
|
grantItem.setAwardName(grantAwardsItem.getName()); |
|
|
|
grantItem.setAwardGrade(grantAwardsItem.getGrade()); |
|
|
|
grantItem.setAwardMinAmount(grantAwardsItem.getMinAmount()); |
|
|
|
grantItem.setAwardMaxAmount(grantAwardsItem.getMaxAmount()); |
|
|
|
grantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); |
|
|
|
grantItem.setAwardCount(1); |
|
|
|
grantItem.setAwardPrice(grantAwardsItem.getPrice()); |
|
|
|
grantItem.setMoneyRule(grantAwardsItem.getMoneyRule()); |
|
|
|
grantItem.setMallShareRate(grantAwardsItem.getMallShareRate()); |
|
|
|
grantItem.setMerchantShareRate(grantAwardsItem.getMerchantShareRate()); |
|
|
|
activityItem.setActivityGrantItemList(Arrays.asList(grantItem)); |
|
|
|
} |
|
|
|
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { |
|
|
|
activityItem.setIsMeet(true); |
|
|
|
activityItem.setRealAwardsItemLimit(1); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { |
|
|
|
@@ -164,7 +237,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动状态"); |
|
|
|
} |
|
|
|
|
|
|
|
handlerGrantData(activity,wxOfflineActivityGrantAward); |
|
|
|
handlerGrantData(activity,wxOfflineActivityGrantAward,false); |
|
|
|
Date now = new Date(); |
|
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
|
wxOfflineActivityGrantAward.setId(idWorker.nextId()); |
|
|
|
@@ -183,7 +256,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void handlerGrantData(WxOfflineActivity activity,WxOfflineActivityGrantAward wxOfflineActivityGrantAward){ |
|
|
|
private void handlerGrantData(WxOfflineActivity activity,WxOfflineActivityGrantAward wxOfflineActivityGrantAward,boolean isForPage){ |
|
|
|
|
|
|
|
List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds()); |
|
|
|
if (wxOfflineActivityRecords == null || wxOfflineActivityRecords.isEmpty()) { |
|
|
|
@@ -192,6 +265,10 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
if(wxOfflineActivityRecords.stream().map(WxOfflineActivityRecord::getCusPhone).distinct().count() != 1){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动订单用户是否为同一人"); |
|
|
|
} |
|
|
|
|
|
|
|
Integer orderMoneySum = 0; |
|
|
|
List<String> lotteryNumList = new ArrayList<>(); |
|
|
|
List<String> anniversaryLotteryNumList = new ArrayList<>(); |
|
|
|
for (WxOfflineActivityRecord record : wxOfflineActivityRecords) { |
|
|
|
if(!EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(record.getAuditStatus())){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动订单审核状态"); |
|
|
|
@@ -202,13 +279,27 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
if(wxOfflineActivityRecordGrantMapper.selectGrantCount(activity.getTenantId(),activity.getId(),record.getId()) > 0){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查订单是否已参与活动"); |
|
|
|
} |
|
|
|
|
|
|
|
orderMoneySum += record.getOrderMoney(); |
|
|
|
if(record.getLotteryNumList() != null && !record.getLotteryNumList().isEmpty()){ |
|
|
|
lotteryNumList.addAll(record.getLotteryNumList()); |
|
|
|
} |
|
|
|
if(StringUtils.isNotBlank(record.getAnniversaryLotteryNum())){ |
|
|
|
anniversaryLotteryNumList.add(record.getAnniversaryLotteryNum()); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
wxOfflineActivityGrantAward.setRecordList(wxOfflineActivityRecords); |
|
|
|
wxOfflineActivityGrantAward.setActivityName(activity.getName()); |
|
|
|
wxOfflineActivityGrantAward.setCusName(wxOfflineActivityRecords.get(0).getCusName()); |
|
|
|
wxOfflineActivityGrantAward.setCusPhone(wxOfflineActivityRecords.get(0).getCusPhone()); |
|
|
|
wxOfflineActivityGrantAward.setOrderCount(wxOfflineActivityRecords.size()); |
|
|
|
wxOfflineActivityGrantAward.setOrderMoneySum(wxOfflineActivityRecords.stream().mapToInt(WxOfflineActivityRecord::getOrderMoney).sum()); |
|
|
|
wxOfflineActivityGrantAward.setOrderMoneySum(orderMoneySum); |
|
|
|
|
|
|
|
if(isForPage){ |
|
|
|
wxOfflineActivityGrantAward.setLotteryNum(JSON.toJSONString(lotteryNumList)); |
|
|
|
wxOfflineActivityGrantAward.setAnniversaryLotteryNum(JSON.toJSONString(anniversaryLotteryNumList)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void handlerGrantItem(WxOfflineActivity activity, WxOfflineActivityGrantAward wxOfflineActivityGrantAward){ |
|
|
|
@@ -216,7 +307,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); |
|
|
|
Map<Long, WxOfflineActivityItem> activityItemMap = activityItemList.stream().collect(Collectors.toMap(WxOfflineActivityItem::getId, Function.identity())); |
|
|
|
|
|
|
|
int i = 0; |
|
|
|
int i = 0;//检查活动奖项 |
|
|
|
for (WxOfflineActivityItem grantActivityItem : wxOfflineActivityGrantAward.getActivityItemList()) { |
|
|
|
if(grantActivityItem.getId() == null){ |
|
|
|
throw new MallinkException(Result.ERROR, "请检查活动项参数"); |
|
|
|
@@ -247,7 +338,8 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity |
|
|
|
} |
|
|
|
//奖项限制数量 |
|
|
|
int limitCount = wxOfflineActivityGrantAward.getOrderMoneySum() / activityItem.getAwardsItemPrice(); |
|
|
|
if(activityItem.getAwardsItemLimit() < limitCount){ |
|
|
|
if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0 |
|
|
|
&& activityItem.getAwardsItemLimit() < limitCount){ |
|
|
|
limitCount = activityItem.getAwardsItemLimit(); |
|
|
|
} |
|
|
|
if(activityGrantItemList.stream().mapToInt(WxOfflineActivityGrantItem::getAwardCount).sum()>limitCount){ |
|
|
|
|