From e3d3a63eaf0d2479048c31c8ab29af3a319601f6 Mon Sep 17 00:00:00 2001 From: xiaohu <1901900812@qq.com> Date: Wed, 5 Mar 2025 17:45:33 +0800 Subject: [PATCH] //offline --- .../domain/po/WxOfflineActivityItem.java | 7 +++ .../domain/vo/OfflineActivityGrantRule.java | 24 +++++++++ ...xOfflineActivityGrantAwardServiceImpl.java | 52 ++++++++++++++++--- 3 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityGrantRule.java 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 49351e60c..a5de55239 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java @@ -9,6 +9,7 @@ import java.util.Date; import java.util.List; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.OfflineActivityGrantRule; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -150,6 +151,12 @@ public class WxOfflineActivityItem extends TenantEntity { @TableField(exist = false) private Integer realAwardsItemLimit; + /** + * 发放奖项规则 + */ + @TableField(exist = false) + private List activityGrantRuleList; + /** * 发放奖项 */ diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityGrantRule.java b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityGrantRule.java new file mode 100644 index 000000000..320bbd26b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityGrantRule.java @@ -0,0 +1,24 @@ +package com.iformall.domain.vo; + +import com.iformall.domain.po.WxOfflineActivityRecord; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class OfflineActivityGrantRule implements Serializable { + + private static final long serialVersionUID = 1L; + private Integer grantAwardsMode; + private Long activityId; + private String activityName; + private Long activityItemId; + private String activityItemName; + private Integer activityItemType; + private Integer awardsItemLimit; + private Long recordId; + private WxOfflineActivityRecord record; + +} 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 9ffaceee1..c11b1069e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -9,6 +9,7 @@ import com.iformall.common.Result; import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.OfflineActivityGrantRecord; +import com.iformall.domain.vo.OfflineActivityGrantRule; import com.iformall.domain.vo.OfflineActivityRecordStatistics; import com.iformall.enums.*; import com.iformall.exception.MallinkException; @@ -209,7 +210,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity //处理发奖数量 activityItem.setIsMeet(true); - handleLotteryDrawCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); + handleLotteryDrawCount(activity,activityItem,wxOfflineActivityGrantAward.getRecordList()); if(activityItem.getRealAwardsItemLimit() == 0){ activityItem.setIsMeet(false); } @@ -251,25 +252,41 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } } - private void handleLotteryDrawCount(WxOfflineActivityItem activityItem, List recordList){ - + private void handleLotteryDrawCount(WxOfflineActivity activity, WxOfflineActivityItem activityItem, List recordList){ int limitCount = 0; + List grantRuleList = new ArrayList<>(); + if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ for(WxOfflineActivityRecord record :recordList){ - Integer record_count = 0; + Integer record_limit_count = 0; for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){ if((activityAwardsModel.getMinAmount() == null || record.getOrderMoney().compareTo(activityAwardsModel.getMinAmount()) >= 0) && (activityAwardsModel.getMaxAmount() == null || record.getOrderMoney().compareTo(activityAwardsModel.getMaxAmount()) <= 0)){ - record_count = activityAwardsModel.getAwardsCount(); + record_limit_count = activityAwardsModel.getAwardsCount(); } } - limitCount += record_count; + if(record_limit_count > 0){ + OfflineActivityGrantRule grantRule = new OfflineActivityGrantRule(); + grantRule.setRecordId(record.getId()); + grantRule.setRecord(record); + handlerGrantRule(grantRule,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,record_limit_count); + grantRuleList.add(grantRule); + + limitCount += record_limit_count; + } } }else{ BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ - limitCount = orderMoneySum.divide(activityItem.getAwardsItemPrice(),0, RoundingMode.HALF_DOWN).intValue(); + Integer order_limit_count = orderMoneySum.divide(activityItem.getAwardsItemPrice(),0, RoundingMode.HALF_DOWN).intValue(); + if(order_limit_count > 0){ + OfflineActivityGrantRule grantRule = new OfflineActivityGrantRule(); + handlerGrantRule(grantRule,EnumOfflineActivityAwardsModeType.AMOUNT,activity,activityItem,order_limit_count); + grantRuleList.add(grantRule); + + limitCount += order_limit_count; + } } } @@ -279,7 +296,14 @@ 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.getAwardsCount() != null){ - limitCount += activityAwardsModel.getAwardsCount(); + Integer joint_limit_count = activityAwardsModel.getAwardsCount(); + if(joint_limit_count > 0){ + OfflineActivityGrantRule grantRule = new OfflineActivityGrantRule(); + handlerGrantRule(grantRule,EnumOfflineActivityAwardsModeType.COUNT,activity,activityItem,joint_limit_count); + grantRuleList.add(grantRule); + + limitCount += joint_limit_count; + } } } @@ -287,7 +311,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity && activityItem.getAwardsItemLimit() < limitCount){ limitCount = activityItem.getAwardsItemLimit(); } + activityItem.setRealAwardsItemLimit(limitCount); + activityItem.setActivityGrantRuleList(grantRuleList); } private void handleGiftAwards(WxOfflineActivity activity, WxOfflineActivityItem activityItem, List recordList){ @@ -728,6 +754,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity wxOfflineActivityGrantAward.setActivityItemList(activityItemList); } + private void handlerGrantRule(OfflineActivityGrantRule grantRule, EnumOfflineActivityAwardsModeType modeType,WxOfflineActivity activity,WxOfflineActivityItem activityItem,Integer awardsItemLimit){ + grantRule.setGrantAwardsMode(modeType.getCode()); + grantRule.setActivityId(activity.getId()); + grantRule.setActivityName(activity.getName()); + grantRule.setActivityItemId(activityItem.getId()); + grantRule.setActivityItemName(activityItem.getName()); + grantRule.setActivityItemType(activityItem.getType()); + grantRule.setAwardsItemLimit(awardsItemLimit); + } + private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,EnumOfflineActivityAwardsModeType modeType,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){ // grantGrantItem.setGrantId(wxOfflineActivityGrantAward.getId()); grantGrantItem.setGrantAwardsMode(modeType.getCode());