From 2fe3f0546928b4ee4085e41a89c1f9f556d81b3b Mon Sep 17 00:00:00 2001 From: xiaohu <1901900812@qq.com> Date: Mon, 12 Aug 2024 23:32:11 +0800 Subject: [PATCH] //OfflineActivity --- .../WxOfflineActivityGrantController.java | 19 +++- .../domain/po/WxOfflineActivityItem.java | 12 ++- .../domain/po/WxOfflineActivityRecord.java | 12 +++ .../WxOfflineActivityGrantAwardService.java | 2 + ...xOfflineActivityGrantAwardServiceImpl.java | 102 +++++++++++++++++- 5 files changed, 139 insertions(+), 8 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java index b4c01ee8d..970221b55 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java @@ -87,11 +87,27 @@ public class WxOfflineActivityGrantController extends BaseController { wxOfflineActivityGrantAwardService.recordExport(request,response,wxOfflineActivityRecord); } + @ApiOperation("活动发放页面处理") + @PostMapping("grantAwardPage") + public ResultData grantAwardPage(@RequestBody WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { + if(wxOfflineActivityGrantAward.getActivityId() == null){ + return new ResultData(Result.ERROR,"活动ID为空"); + } + if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){ + return new ResultData(Result.ERROR,"请选择订单"); + } + TenantEntity tenantEntity = getTenantInfo(); + wxOfflineActivityGrantAward.updateTenantInfo(tenantEntity); + wxOfflineActivityGrantAwardService.handlerGrantAwardPage(wxOfflineActivityGrantAward); + return new ResultData(wxOfflineActivityGrantAward); + } + + @ApiOperation("活动发放") @PostMapping("grantAward") public ResultData grantAward(@RequestBody WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { if(wxOfflineActivityGrantAward.getActivityId() == null){ - return new ResultData(Result.ERROR,"活动ID未空"); + return new ResultData(Result.ERROR,"活动ID为空"); } if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){ return new ResultData(Result.ERROR,"请选择订单"); @@ -106,5 +122,4 @@ public class WxOfflineActivityGrantController extends BaseController { return new ResultData(); } - } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java index 192b233d5..edfc671be 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java @@ -57,7 +57,7 @@ public class WxOfflineActivityItem extends TenantEntity { private Integer awardsItemPrice; /** - * 奖项数量限制 + * 奖项数量限制(为0时无限制) */ @TableField(value = "awards_item_limit") private Integer awardsItemLimit; @@ -91,6 +91,16 @@ public class WxOfflineActivityItem extends TenantEntity { */ @TableField(exist = false) private List activityAwardsItemList; + /** + * 是否满足活动条件 + */ + @TableField(exist = false) + private Boolean isMeet; + /** + * 实际获得奖项限制(为0时无限制) + */ + @TableField(exist = false) + private Integer realAwardsItemLimit; /** * 发放奖项 diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java index 0764e02e7..f5c708989 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java @@ -1,6 +1,8 @@ package com.iformall.domain.po; import cn.afterturn.easypoi.excel.annotation.Excel; +import com.alibaba.fastjson.JSON; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -88,6 +90,16 @@ public class WxOfflineActivityRecord extends TenantEntity { */ @TableField(value = "lottery_num") private String lotteryNum; + @TableField(exist = false) + private List lotteryNumList; + public List getLotteryNumList() { + if(StringUtils.isNotBlank(lotteryNum)){ + try { + lotteryNumList = JSON.parseArray(lotteryNum, String.class); + }catch(Exception e){} + } + return lotteryNumList; + } /** * 抽奖券数量 diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java index 8f1f2c72e..698b70b66 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java @@ -21,6 +21,8 @@ public interface WxOfflineActivityGrantAwardService { List getRecordList(WxOfflineActivityRecord wxOfflineActivityRecord); + void handlerGrantAwardPage(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); + void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); Map cusStatistics(TenantEntity tenantInfo); 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 aaa6c81cf..c7e566139 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -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 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 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 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 lotteryNumList = new ArrayList<>(); + List 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 activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); Map 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){