From 968eea2a22745c0e90696b32f7fb2f383854dcb1 Mon Sep 17 00:00:00 2001 From: xiaohu <1901900812@qq.com> Date: Sun, 25 May 2025 17:27:35 +0800 Subject: [PATCH] //activity v.2 --- .../WxVtwoPrizeDrawActivityController.java | 85 +++++++++++ .../domain/po/WxVtwoActivityGrant.java | 39 +++++ .../domain/po/WxVtwoActivityGrantAward.java | 28 +--- .../po/WxVtwoActivityGrantSettlement.java | 3 + .../domain/po/WxVtwoActivityOrder.java | 3 + .../domain/po/WxVtwoCashBackGrantAward.java | 8 +- .../domain/vo/WxVtwoActivityGrantRule.java | 16 +++ .../WxVtwoActivityGrantAwardMapper.java | 4 + .../WxVtwoActivityGrantOrderMapper.java | 4 + .../WxVtwoActivityGrantSettlementMapper.java | 4 + .../WxVtwoCashBackGrantAwardMapper.java | 6 + .../service/WxVtwoActivityAwardService.java | 5 + .../WxVtwoActivityGrantAwardService.java | 4 + .../WxVtwoActivityGrantOrderService.java | 4 + .../service/WxVtwoActivityGrantService.java | 4 + .../WxVtwoActivityGrantSettlementService.java | 2 + .../service/WxVtwoActivityOrderService.java | 4 + .../service/WxVtwoCashBackAwardService.java | 5 + .../WxVtwoPrizeDrawActivityService.java | 5 + .../impl/WxVtwoActivityAwardServiceImpl.java | 18 +++ .../WxVtwoActivityGrantAwardServiceImpl.java | 70 +++++++++ .../WxVtwoActivityGrantOrderServiceImpl.java | 25 ++++ .../impl/WxVtwoActivityGrantServiceImpl.java | 64 +++++++++ ...twoActivityGrantSettlementServiceImpl.java | 108 +++++++++++++- .../impl/WxVtwoActivityOrderServiceImpl.java | 42 ++++++ .../WxVtwoAmountGiftActivityServiceImpl.java | 8 +- .../WxVtwoCashBackActivityServiceImpl.java | 5 +- .../impl/WxVtwoCashBackAwardServiceImpl.java | 20 ++- .../WxVtwoPrizeDrawActivityServiceImpl.java | 136 ++++++++++++++++-- .../mapper/WxVtwoActivityGrantAwardMapper.xml | 32 +++-- .../mapper/WxVtwoActivityGrantOrderMapper.xml | 13 ++ .../WxVtwoActivityGrantSettlementMapper.xml | 23 +++ .../mapper/WxVtwoCashBackGrantAwardMapper.xml | 36 ++++- 33 files changed, 760 insertions(+), 73 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/domain/vo/WxVtwoActivityGrantRule.java diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxVtwoPrizeDrawActivityController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxVtwoPrizeDrawActivityController.java index 89dfa9e9b..ea4788d1e 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxVtwoPrizeDrawActivityController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxVtwoPrizeDrawActivityController.java @@ -3,6 +3,7 @@ package com.iformall.controller.market; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageInfo; import com.iformall.annotation.ApiVersion; +import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.constant.SwaggerConstant; @@ -228,4 +229,88 @@ public class WxVtwoPrizeDrawActivityController extends BaseController { wxVtwoActivityOrderService.exportData(request,response,activityOrder,activity.getId()); } + @ApiVersion(group = SwaggerConstant.V_A_2_0) + @ApiOperation("活动发放页面处理") + @PostMapping("grantAwardPage") + public ResultData grantAwardPage(@RequestBody WxVtwoActivityGrant activityGrant) { + TenantEntity tenantEntity = getTenantInfo(); + activityGrant.updateTenantInfo(tenantEntity); + if(activityGrant.getActivityId() == null){ + return new ResultData(Result.ERROR,"活动ID为空"); + } + if(activityGrant.getOrderIdList() == null || activityGrant.getOrderIdList().isEmpty()){ + return new ResultData(Result.ERROR,"请选择订单"); + } + WxVtwoPrizeDrawActivity prizeDrawActivity = wxVtwoPrizeDrawActivityService.getById(activityGrant.getActivityId(), activityGrant.getTenantId()); + if(prizeDrawActivity == null){ + return new ResultData(Result.ERROR,"查询不到活动"); + } + if(!EnumOfflineActivityStatus.ON_LINE.getCode().equals(prizeDrawActivity.getStatus())){ + throw new MallinkException(Result.ERROR, "请检查活动状态"); + } + if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(prizeDrawActivity.getAmountModel())){ + if(activityGrant.getOrderFilterIdList() == null || activityGrant.getOrderFilterIdList().isEmpty()){ + return new ResultData(Result.ERROR,"请筛选订单"); + } + }else{ + activityGrant.setOrderFilterIdList(null); + } + try{ + wxVtwoPrizeDrawActivityService.handlerGrantAwardPage(prizeDrawActivity,activityGrant); + return new ResultData(activityGrant); + }catch(MallinkException e){ + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + }catch(Exception e){ + logger.error("异常:" + e); + return new ResultData(ErrorCode.SYS_SERVER_ERROR); + } + } + + + @ApiVersion(group = SwaggerConstant.V_A_2_0) + @ApiOperation("活动发放") + @PostMapping("grantAward") + public ResultData grantAward(@RequestBody WxVtwoActivityGrant activityGrant) { + TenantEntity tenantEntity = getTenantInfo(); + activityGrant.updateTenantInfo(tenantEntity); + if(activityGrant.getActivityId() == null){ + return new ResultData(Result.ERROR,"活动ID为空"); + } + if(activityGrant.getOrderIdList() == null || activityGrant.getOrderIdList().isEmpty()){ + return new ResultData(Result.ERROR,"请选择订单"); + } + WxVtwoPrizeDrawActivity prizeDrawActivity = wxVtwoPrizeDrawActivityService.getById(activityGrant.getActivityId(), activityGrant.getTenantId()); + if(prizeDrawActivity == null){ + return new ResultData(Result.ERROR,"查询不到活动"); + } + if(!EnumOfflineActivityStatus.ON_LINE.getCode().equals(prizeDrawActivity.getStatus())){ + throw new MallinkException(Result.ERROR, "请检查活动状态"); + } + if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(prizeDrawActivity.getAmountModel())){ + if(activityGrant.getOrderFilterIdList() == null || activityGrant.getOrderFilterIdList().isEmpty()){ + return new ResultData(Result.ERROR,"请筛选订单"); + } + }else{ + activityGrant.setOrderFilterIdList(null); + } + if(activityGrant.getGrantAwardList() == null || activityGrant.getGrantAwardList().isEmpty()){ + return new ResultData(Result.ERROR,"奖励项为空"); + } +// if(StringUtils.isBlank(activityGrant.getSignImg())){ +// return new ResultData(Result.ERROR,"签名为空"); +// } + activityGrant.setCreateBy(getUserId()); + try{ + wxVtwoPrizeDrawActivityService.grantAward(prizeDrawActivity, activityGrant); + return new ResultData(); + }catch(MallinkException e){ + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + }catch(Exception e){ + logger.error("异常:" + e); + return new ResultData(ErrorCode.SYS_SERVER_ERROR); + } + } + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrant.java b/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrant.java index 8f2b74e98..4d5cd246c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrant.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrant.java @@ -1,5 +1,7 @@ package com.iformall.domain.po; +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; @@ -9,6 +11,7 @@ import java.math.BigDecimal; import java.util.Date; import java.util.List; +import com.iformall.domain.vo.WxVtwoActivityGrantRule; import lombok.Data; /** @@ -65,6 +68,18 @@ public class WxVtwoActivityGrant extends TenantEntity { */ @TableField(value = "lottery_num") private String lotteryNum; + @TableField(exist = false) + private List lotteryNumList; + public List getLotteryNumList() { + if(StringUtils.isNotBlank(lotteryNum)){ + try { + List stringList = JSON.parseArray(lotteryNum, String.class); + stringList.removeIf(String::isEmpty); + lotteryNumList = stringList.isEmpty() ? null : stringList; + } catch (Exception e){} + } + return lotteryNumList; + } /** * 抽奖券数量 @@ -77,6 +92,18 @@ public class WxVtwoActivityGrant extends TenantEntity { */ @TableField(value = "anniversary_lottery_num") private String anniversaryLotteryNum; + @TableField(exist = false) + private List anniversaryLotteryNumList; + public List getAnniversaryLotteryNumList() { + if(StringUtils.isNotBlank(anniversaryLotteryNum)){ + try { + List stringList = JSON.parseArray(anniversaryLotteryNum, String.class); + stringList.removeIf(String::isEmpty); + anniversaryLotteryNumList = stringList.isEmpty() ? null : stringList; + } catch (Exception e){} + } + return anniversaryLotteryNumList; + } /** * 实际领奖人 @@ -126,6 +153,9 @@ public class WxVtwoActivityGrant extends TenantEntity { @TableField(value = "update_date") private Date updateDate; + @TableField(exist = false) + private List grantAwardList; + @TableField(exist = false) private List orderIdList; @@ -134,4 +164,13 @@ public class WxVtwoActivityGrant extends TenantEntity { @TableField(exist = false) private List orderList; + + @TableField(exist = false) + private List ruleList; + + @TableField(exist = false) + private List awardList; + + @TableField(exist = false) + private Integer awardLimit; } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrantAward.java b/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrantAward.java index 5cbb5612b..2a8ebe259 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrantAward.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrantAward.java @@ -46,36 +46,12 @@ public class WxVtwoActivityGrantAward extends TenantEntity { @TableField(value = "order_id") private Long orderId; - /** - * 订单金额/总金额 - */ - @TableField(value = "order_amount") - private BigDecimal orderAmount; - /** * 金额/联单 */ @TableField(value = "mode_type") private Integer modeType; - /** - * 奖项限制最小金额 - */ - @TableField(value = "min_amount") - private BigDecimal minAmount; - - /** - * 奖项限制最大金额 - */ - @TableField(value = "max_amount") - private BigDecimal maxAmount; - - /** - * 联单笔数 - */ - @TableField(value = "related_count") - private Integer relatedCount; - /** * 奖项id */ @@ -115,8 +91,8 @@ public class WxVtwoActivityGrantAward extends TenantEntity { /** * 分担规则(0-商管 1-商户 2-分担) */ - @TableField(value = "money_rule") - private Integer moneyRule; + @TableField(value = "share_rule") + private Integer shareRule; /** * 商管分担比例 diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrantSettlement.java b/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrantSettlement.java index 61298405b..8a3de4b0f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrantSettlement.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityGrantSettlement.java @@ -46,6 +46,9 @@ public class WxVtwoActivityGrantSettlement extends TenantEntity { @TableField(value = "award_id") private Long awardId; + @TableField(exist = false) + private Integer awardCount; + /** * 发放总价值 */ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityOrder.java index de8caf6f1..6ae5aab63 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoActivityOrder.java @@ -257,4 +257,7 @@ public class WxVtwoActivityOrder extends TenantEntity { */ @TableField(exist = false) private Integer isAmount; + + @TableField(exist = false) + private BigDecimal orderRatio; } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoCashBackGrantAward.java b/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoCashBackGrantAward.java index 3369cb687..3e2dfb9e2 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoCashBackGrantAward.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxVtwoCashBackGrantAward.java @@ -43,8 +43,8 @@ public class WxVtwoCashBackGrantAward extends TenantEntity { /** * */ - @TableField(value = "record_id") - private Long recordId; + @TableField(value = "order_id") + private Long orderId; /** * 订单金额/总金额 @@ -109,8 +109,8 @@ public class WxVtwoCashBackGrantAward extends TenantEntity { /** * 分担规则(0-商管 1-商户 2-分担) */ - @TableField(value = "money_rule") - private Integer moneyRule; + @TableField(value = "share_rule") + private Integer shareRule; /** * 商管分担比例 diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxVtwoActivityGrantRule.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxVtwoActivityGrantRule.java new file mode 100644 index 000000000..66cb2253a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxVtwoActivityGrantRule.java @@ -0,0 +1,16 @@ +package com.iformall.domain.vo; + +import com.iformall.domain.po.WxOfflineActivityRecord; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class WxVtwoActivityGrantRule implements Serializable { + + private Long orderId; + private Integer modeType; + private String name; + private Integer awardLimit; + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantAwardMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantAwardMapper.java index b68f4c1f4..9b96e2a74 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantAwardMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantAwardMapper.java @@ -3,6 +3,9 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxVtwoActivityGrantAward; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @author xiaohu @@ -12,6 +15,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface WxVtwoActivityGrantAwardMapper extends CommonMapper { + void insertList(@Param("grantAwardList")List grantAwardList); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantOrderMapper.java index 1f11b61ae..b3b283049 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantOrderMapper.java @@ -3,6 +3,9 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxVtwoActivityGrantOrder; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @author xiaohu @@ -12,6 +15,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface WxVtwoActivityGrantOrderMapper extends CommonMapper { + void insertList(@Param("grantOrderList")List grantOrderList); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantSettlementMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantSettlementMapper.java index 54a0971df..8fc0a90ea 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantSettlementMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxVtwoActivityGrantSettlementMapper.java @@ -3,6 +3,9 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxVtwoActivityGrantSettlement; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @author xiaohu @@ -14,6 +17,7 @@ public interface WxVtwoActivityGrantSettlementMapper extends CommonMapper settlementList); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxVtwoCashBackGrantAwardMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxVtwoCashBackGrantAwardMapper.java index 87fed5391..f8f1c27cd 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxVtwoCashBackGrantAwardMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxVtwoCashBackGrantAwardMapper.java @@ -1,8 +1,12 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxVtwoActivityGrantAward; import com.iformall.domain.po.WxVtwoCashBackGrantAward; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @author xiaohu @@ -12,6 +16,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface WxVtwoCashBackGrantAwardMapper extends CommonMapper { + void insertList(@Param("grantAwardList") List grantAwardList); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityAwardService.java b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityAwardService.java index a9e9a66b5..61df79e3d 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityAwardService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityAwardService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.iformall.domain.po.base.TenantEntity; import java.util.List; +import java.util.Map; /** * @author xiaohu @@ -14,4 +15,8 @@ import java.util.List; public interface WxVtwoActivityAwardService extends IService { void saveFromActivity(TenantEntity tenantEntity, Long activityId, List awardList); + + List findActivityAwardList(Long activityId, String tenantId); + + Map findActivityAwardMap(Long activityId, String tenantId); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantAwardService.java b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantAwardService.java index f19945b91..4c9e8af0a 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantAwardService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantAwardService.java @@ -1,8 +1,11 @@ package com.iformall.service; +import com.iformall.domain.po.WxVtwoActivityGrant; import com.iformall.domain.po.WxVtwoActivityGrantAward; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * @author xiaohu * @description 针对表【wx_vtwo_activity_grant_award(线下活动发放奖励)】的数据库操作Service @@ -10,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface WxVtwoActivityGrantAwardService extends IService { + void saveGrantAward(WxVtwoActivityGrant activityGrant); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantOrderService.java index c095aaffc..5c61483a0 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantOrderService.java @@ -2,6 +2,9 @@ package com.iformall.service; import com.iformall.domain.po.WxVtwoActivityGrantOrder; import com.baomidou.mybatisplus.extension.service.IService; +import com.iformall.domain.po.WxVtwoActivityOrder; + +import java.util.List; /** * @author xiaohu @@ -10,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface WxVtwoActivityGrantOrderService extends IService { + void saveGrantOrder(Long grantId, Long activityId, List orderList); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantService.java b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantService.java index 62010e0cf..83c40ecff 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantService.java @@ -2,6 +2,9 @@ package com.iformall.service; import com.iformall.domain.po.WxVtwoActivityGrant; import com.baomidou.mybatisplus.extension.service.IService; +import com.iformall.domain.po.WxVtwoActivityOrder; + +import java.util.List; /** * @author xiaohu @@ -10,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface WxVtwoActivityGrantService extends IService { + void handleFromOrder(String activityName, WxVtwoActivityGrant activityGrant, List orderList, boolean isGrant); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantSettlementService.java b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantSettlementService.java index d8038ba11..8f4e26352 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantSettlementService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityGrantSettlementService.java @@ -1,5 +1,6 @@ package com.iformall.service; +import com.iformall.domain.po.WxVtwoActivityGrant; import com.iformall.domain.po.WxVtwoActivityGrantSettlement; import com.baomidou.mybatisplus.extension.service.IService; @@ -10,4 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface WxVtwoActivityGrantSettlementService extends IService { + void saveGrantSettlement(WxVtwoActivityGrant activityGrant); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityOrderService.java index b3a9fcab4..8ad19d03f 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxVtwoActivityOrderService.java @@ -1,6 +1,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxVtwoActivityGrant; import com.iformall.domain.po.WxVtwoActivityOrder; import com.baomidou.mybatisplus.extension.service.IService; import com.iformall.domain.po.base.TenantEntity; @@ -38,4 +39,7 @@ public interface WxVtwoActivityOrderService extends IService findGrantOrder(TenantEntity tenantInfo, List idList, List filterIdList); + + Integer getJointCount(Integer relatedModel, List orderList); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxVtwoCashBackAwardService.java b/mallinkService/src/main/java/com/iformall/service/WxVtwoCashBackAwardService.java index d2b0d3f29..5237ae88a 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxVtwoCashBackAwardService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxVtwoCashBackAwardService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.iformall.domain.po.base.TenantEntity; import java.util.List; +import java.util.Map; /** * @author xiaohu @@ -15,4 +16,8 @@ import java.util.List; public interface WxVtwoCashBackAwardService extends IService { void saveFromActivity(TenantEntity tenantEntity, Long activityId, List amountRulesObject, List relatedRulesObject); + + List findActivityAwardList(Long activityId, String tenantId); + + Map findActivityAwardMap(Long activityId, String tenantId); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxVtwoPrizeDrawActivityService.java b/mallinkService/src/main/java/com/iformall/service/WxVtwoPrizeDrawActivityService.java index 408083ae2..22f109529 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxVtwoPrizeDrawActivityService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxVtwoPrizeDrawActivityService.java @@ -1,6 +1,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxVtwoActivityGrant; import com.iformall.domain.po.WxVtwoActivityOrder; import com.iformall.domain.po.WxVtwoPrizeDrawActivity; import com.baomidou.mybatisplus.extension.service.IService; @@ -25,4 +26,8 @@ public interface WxVtwoPrizeDrawActivityService extends IService findActivityAwardList(Long activityId, String tenantId) { + WxVtwoActivityAward activityAwardQ = new WxVtwoActivityAward(); + activityAwardQ.setTenantId(tenantId); + activityAwardQ.setActivityId(activityId); + return wxVtwoActivityAwardMapper.findList(activityAwardQ); + } + + @Override + public Map findActivityAwardMap(Long activityId, String tenantId) { + List activityAwardList = this.findActivityAwardList(activityId, tenantId); + return activityAwardList.stream().collect(Collectors.toMap(WxVtwoActivityAward::getId, Function.identity())); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantAwardServiceImpl.java index 3008a1bdb..ffddd9d8e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantAwardServiceImpl.java @@ -1,11 +1,26 @@ package com.iformall.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.iformall.common.IdWorker; +import com.iformall.common.Result; +import com.iformall.domain.po.WxVtwoActivityAward; +import com.iformall.domain.po.WxVtwoActivityGrant; import com.iformall.domain.po.WxVtwoActivityGrantAward; +import com.iformall.exception.MallinkException; +import com.iformall.service.WxVtwoActivityAwardService; import com.iformall.service.WxVtwoActivityGrantAwardService; import com.iformall.mapper.WxVtwoActivityGrantAwardMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.Map; + +import static java.util.stream.Collectors.counting; +import static java.util.stream.Collectors.groupingBy; + /** * @author xiaohu * @description 针对表【wx_vtwo_activity_grant_award(线下活动发放奖励)】的数据库操作Service实现 @@ -15,6 +30,61 @@ import org.springframework.stereotype.Service; public class WxVtwoActivityGrantAwardServiceImpl extends ServiceImpl implements WxVtwoActivityGrantAwardService{ + @Autowired + private WxVtwoActivityGrantAwardMapper wxVtwoActivityGrantAwardMapper; + + @Autowired + private WxVtwoActivityAwardService wxVtwoActivityAwardService; + + @Override + public void saveGrantAward(WxVtwoActivityGrant activityGrant) { + + Map activityAwardMap = wxVtwoActivityAwardService.findActivityAwardMap(activityGrant.getActivityId(), activityGrant.getTenantId()); + + List grantAwardList = activityGrant.getGrantAwardList(); + boolean isAwardId = grantAwardList.stream().anyMatch(grantAward -> grantAward.getAwardId() == null); + if(isAwardId){ + throw new MallinkException(Result.ERROR, "请检查是否都选择奖项"); + } + boolean isModeType = grantAwardList.stream().anyMatch(grantAward -> grantAward.getModeType() == null); + if(isModeType){ + throw new MallinkException(Result.ERROR, "请检查奖项参数"); + } + //所得奖项不能重复, 后续计算问题 + boolean isRepeat = grantAwardList.stream() + .collect(groupingBy(e -> String.valueOf(e.getAwardId())+String.valueOf(e.getModeType())+String.valueOf(e.getOrderId()), counting())) + .entrySet().stream().anyMatch(e -> e.getValue() > 1); + if(isRepeat){ + throw new MallinkException(Result.ERROR, "请检查奖项存在重复"); + } + + final IdWorker idWorker = IdWorker.get(); + for(WxVtwoActivityGrantAward grantAward : grantAwardList){ + grantAward.setAwardId(idWorker.nextId()); + grantAward.updateTenantInfo(activityGrant); + grantAward.setActivityId(activityGrant.getActivityId()); + grantAward.setActivityName(activityGrant.getActivityName()); + grantAward.setGrantId(activityGrant.getId()); + WxVtwoActivityAward activityAward = activityAwardMap.get(grantAward.getAwardId()); + grantAward.setAwardGrade(activityAward.getGrade()); + grantAward.setAwardName(activityAward.getName()); + grantAward.setAwardPrice(activityAward.getPrice()); + if(grantAward.getAwardCount() == null){ + grantAward.setAwardCount(1); + } + grantAward.setGrantPrice(grantAward.getAwardPrice() + .multiply(new BigDecimal(grantAward.getAwardCount())) + .setScale(2, RoundingMode.HALF_UP)); + grantAward.setShareRule(activityAward.getShareRule()); + grantAward.setMallShareRate(activityAward.getMallShareRate()); + grantAward.setMerchantShareRate(activityAward.getMerchantShareRate()); + grantAward.setCreateDate(activityAward.getUpdateDate()); + grantAward.setUpdateDate(activityAward.getUpdateDate()); + } + + wxVtwoActivityGrantAwardMapper.insertList(grantAwardList); + activityGrant.setGrantAwardList(grantAwardList); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantOrderServiceImpl.java index d728db204..dbed20563 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantOrderServiceImpl.java @@ -1,11 +1,17 @@ package com.iformall.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.iformall.common.IdWorker; import com.iformall.domain.po.WxVtwoActivityGrantOrder; +import com.iformall.domain.po.WxVtwoActivityOrder; import com.iformall.service.WxVtwoActivityGrantOrderService; import com.iformall.mapper.WxVtwoActivityGrantOrderMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + /** * @author xiaohu * @description 针对表【wx_vtwo_activity_grant_order(线下活动发奖订单)】的数据库操作Service实现 @@ -15,6 +21,25 @@ import org.springframework.stereotype.Service; public class WxVtwoActivityGrantOrderServiceImpl extends ServiceImpl implements WxVtwoActivityGrantOrderService{ + @Autowired + private WxVtwoActivityGrantOrderMapper wxVtwoActivityGrantOrderMapper; + + @Override + public void saveGrantOrder(Long grantId, Long activityId, List orderList) { + List grantOrderList = new ArrayList<>(); + final IdWorker idWorker = IdWorker.get(); + for (WxVtwoActivityOrder order : orderList) { + WxVtwoActivityGrantOrder grantOrder = new WxVtwoActivityGrantOrder(); + grantOrder.setId(idWorker.nextId()); + grantOrder.updateTenantInfo(order); + grantOrder.setGrantId(grantId); + grantOrder.setActivityId(activityId); + grantOrder.setOrderId(order.getId()); + grantOrder.setIsAmount(order.getIsAmount()); + grantOrderList.add(grantOrder); + } + wxVtwoActivityGrantOrderMapper.insertList(grantOrderList); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantServiceImpl.java index 2d0a1c68f..0749d86b4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantServiceImpl.java @@ -1,10 +1,24 @@ 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.domain.po.WxVtwoActivityGrant; +import com.iformall.domain.po.WxVtwoActivityOrder; +import com.iformall.domain.po.WxVtwoPrizeDrawActivity; +import com.iformall.enums.EnumOfflineActivityMerchantType; +import com.iformall.enums.EnumOfflineActivityStatus; import com.iformall.service.WxVtwoActivityGrantService; import com.iformall.mapper.WxVtwoActivityGrantMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; /** * @author xiaohu @@ -15,6 +29,56 @@ import org.springframework.stereotype.Service; public class WxVtwoActivityGrantServiceImpl extends ServiceImpl implements WxVtwoActivityGrantService{ + @Autowired + private WxVtwoActivityGrantMapper wxVtwoActivityGrantMapper; + + @Override + public void handleFromOrder(String activityName, WxVtwoActivityGrant activityGrant, List orderList, boolean isGrant) { + activityGrant.setActivityName(activityName); + activityGrant.setOrderList(orderList); + BigDecimal orderMoneySum = BigDecimal.ZERO; + List lotteryNumList = new ArrayList<>(); + int lotteryCount = 0; + List anniversaryLotteryNumList = new ArrayList<>(); + for (WxVtwoActivityOrder order : orderList) { + orderMoneySum = orderMoneySum.add(order.getOrderMoney()); + if(order.getLotteryNumList() != null && !order.getLotteryNumList().isEmpty()){ + lotteryNumList.addAll(order.getLotteryNumList()); + } + if(order.getLotteryCount() != null){ + lotteryCount = lotteryCount + order.getLotteryCount(); + } + if(StringUtils.isNotBlank(order.getAnniversaryLotteryNum())){ + anniversaryLotteryNumList.add(order.getAnniversaryLotteryNum()); + } + } + activityGrant.setOrderMoneySum(orderMoneySum); + activityGrant.setOrderCount(orderList.size()); + activityGrant.setCusName(orderList.get(0).getCusName()); + activityGrant.setCusPhone(orderList.get(0).getCusPhone()); + if(!isGrant){ + activityGrant.setLotteryNum(JSON.toJSONString(lotteryNumList)); + activityGrant.setLotteryCount(lotteryCount); + activityGrant.setAnniversaryLotteryNum(JSON.toJSONString(anniversaryLotteryNumList)); + } + } + + @Override + public boolean saveOrUpdate(WxVtwoActivityGrant activityGrant) { + Date now = new Date(); + if(activityGrant.getId() == null){ + final IdWorker idWorker = IdWorker.get(); + activityGrant.setId(idWorker.nextId()); + activityGrant.setCreateDate(now); + activityGrant.setCreateDate(now); + wxVtwoActivityGrantMapper.insert(activityGrant); + } + else{ + activityGrant.setUpdateDate(now); + wxVtwoActivityGrantMapper.updateById(activityGrant); + } + return true; + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantSettlementServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantSettlementServiceImpl.java index d80a9213c..82d2c14fd 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantSettlementServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoActivityGrantSettlementServiceImpl.java @@ -1,11 +1,24 @@ package com.iformall.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.iformall.domain.po.WxVtwoActivityGrantSettlement; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.enums.EnumOfflineActivityAwardsModeType; +import com.iformall.enums.EnumYesOrNo; import com.iformall.service.WxVtwoActivityGrantSettlementService; import com.iformall.mapper.WxVtwoActivityGrantSettlementMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + /** * @author xiaohu * @description 针对表【wx_vtwo_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Service实现 @@ -15,6 +28,99 @@ import org.springframework.stereotype.Service; public class WxVtwoActivityGrantSettlementServiceImpl extends ServiceImpl implements WxVtwoActivityGrantSettlementService{ + @Autowired + private WxVtwoActivityGrantSettlementMapper wxVtwoActivityGrantSettlementMapper; + + @Override + public void saveGrantSettlement(WxVtwoActivityGrant activityGrant) { + List amountOrderList = activityGrant.getOrderList().stream().filter(o -> EnumYesOrNo.YES.getCode().equals(o.getIsAmount())) + .sorted(Comparator.comparing(WxVtwoActivityOrder::getOrderMoney).reversed()).collect(Collectors.toList()); + List cmountOrderList = activityGrant.getOrderList().stream().sorted(Comparator.comparing(WxVtwoActivityOrder::getOrderMoney).reversed()).collect(Collectors.toList()); + + List grantAwardList = activityGrant.getGrantAwardList(); + Map> grantAwardMap = grantAwardList.stream().collect(Collectors.groupingBy(WxVtwoActivityGrantAward::getModeType)); + List amountGrantAwardList = grantAwardMap.get(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); + List countGrantAwardList = grantAwardMap.get(EnumOfflineActivityAwardsModeType.COUNT.getCode()); + List settlementList = new ArrayList<>(); + final IdWorker idWorker = IdWorker.get(); + if(amountGrantAwardList != null && !amountGrantAwardList.isEmpty()){ + handleOrderRatio(amountOrderList); + Map amountOrderMap = amountOrderList.stream().collect(Collectors.toMap(WxVtwoActivityOrder::getId, Function.identity())); + for (WxVtwoActivityGrantAward grant : amountGrantAwardList) { + if(grant.getOrderId() != null){ + WxVtwoActivityOrder order = amountOrderMap.get(grant.getOrderId()); + WxVtwoActivityGrantSettlement settlement = getGrantSettlement(grant,order,idWorker,true); + settlementList.add(settlement); + }else{ + for (WxVtwoActivityOrder order : amountOrderList){ + WxVtwoActivityGrantSettlement settlement = getGrantSettlement(grant,order,idWorker,false); + settlementList.add(settlement); + } + } + } + } + if(countGrantAwardList != null && !countGrantAwardList.isEmpty()){ + handleOrderRatio(cmountOrderList); + for (WxVtwoActivityGrantAward grant : countGrantAwardList) { + for (WxVtwoActivityOrder order : amountOrderList){ + WxVtwoActivityGrantSettlement settlement = getGrantSettlement(grant,order,idWorker,false); + settlementList.add(settlement); + } + } + } + + wxVtwoActivityGrantSettlementMapper.insertList(settlementList); + } + + private void handleOrderRatio(List orderList){ + BigDecimal orderSumMoney = orderList.stream().map(WxVtwoActivityOrder::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + int size = orderList.size() - 1; + BigDecimal lastRatio = new BigDecimal(100); + for(int i=0; i findGrantOrder(TenantEntity tenantInfo, List idList, List filterIdList) { + WxVtwoActivityOrder orderQ = new WxVtwoActivityOrder(); + orderQ.updateTenantInfo(tenantInfo); + orderQ.setIds(idList); + List list = this.findList(orderQ, null); + if(filterIdList == null || filterIdList.isEmpty()){ + for (WxVtwoActivityOrder order : list) { + order.setIsAmount(EnumYesOrNo.YES.getCode()); + } + }else{ + for (WxVtwoActivityOrder order : list) { + if(filterIdList.contains(order.getId())) { + order.setIsAmount(EnumYesOrNo.YES.getCode()); + }else{ + order.setIsAmount(EnumYesOrNo.NO.getCode()); + } + } + } + return this.findList(orderQ,null); + } + + @Override + public Integer getJointCount(Integer relatedModel, List orderList) { + Integer jointCount = 0; + if(orderList == null || orderList.isEmpty()){ + return jointCount; + } + if(EnumOfflineActivityCountMode.MERCHANT_MODEL.getCode().equals(relatedModel)){ + //商户联单 + List merchantIds = orderList.stream().map(WxVtwoActivityOrder::getMerchantId).distinct().collect(toList()); + jointCount = merchantIds.size(); + }else if(EnumOfflineActivityCountMode.BUSINESS_MODEL.getCode().equals(relatedModel)){ + //业态联单 + List businessIds = orderList.stream().map(WxVtwoActivityOrder::getBusinessId).distinct().collect(toList()); + jointCount = businessIds.size(); + } + return jointCount; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoAmountGiftActivityServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoAmountGiftActivityServiceImpl.java index be40c5bb2..52e79cd35 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoAmountGiftActivityServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoAmountGiftActivityServiceImpl.java @@ -37,9 +37,6 @@ public class WxVtwoAmountGiftActivityServiceImpl extends ServiceImpl activityAwardList = wxVtwoActivityAwardMapper.findList(activityAwardQ); + List activityAwardList = wxVtwoActivityAwardService.findActivityAwardList(id, tenantId); amountGiftActivity.setAwardList(activityAwardList); if(!EnumOfflineActivityMerchantType.ALL.getCode().equals(amountGiftActivity.getMerchantRule())){ List activityMerchantList = wxVtwoActivityMerchantService.getActivityMerchantList(id,tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoCashBackActivityServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoCashBackActivityServiceImpl.java index 21b81bc5b..acc9553e3 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoCashBackActivityServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoCashBackActivityServiceImpl.java @@ -37,9 +37,6 @@ public class WxVtwoCashBackActivityServiceImpl extends ServiceImpl activityAwardList = wxVtwoCashBackAwardMapper.findList(cashBackAwardQ); + List activityAwardList = wxVtwoCashBackAwardService.findActivityAwardList(id,tenantId); Map> activityAwardMap = activityAwardList.stream().collect(Collectors.groupingBy(WxVtwoCashBackAward::getModelType)); cashBackActivity.setAmountRulesObject(activityAwardMap.get(EnumOfflineActivityAwardsModeType.AMOUNT.getCode())); cashBackActivity.setRelatedRulesObject(activityAwardMap.get(EnumOfflineActivityAwardsModeType.COUNT.getCode())); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoCashBackAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoCashBackAwardServiceImpl.java index 6a502da7a..42e54324a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoCashBackAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoCashBackAwardServiceImpl.java @@ -12,9 +12,9 @@ import com.iformall.mapper.WxVtwoCashBackAwardMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @author xiaohu @@ -71,6 +71,20 @@ public class WxVtwoCashBackAwardServiceImpl extends ServiceImpl findActivityAwardList(Long activityId, String tenantId) { + WxVtwoCashBackAward cashBackAwardQ = new WxVtwoCashBackAward(); + cashBackAwardQ.setTenantId(tenantId); + cashBackAwardQ.setActivityId(activityId); + return wxVtwoCashBackAwardMapper.findList(cashBackAwardQ); + } + + @Override + public Map findActivityAwardMap(Long activityId, String tenantId) { + List activityAwardList = this.findActivityAwardList(activityId, tenantId); + return activityAwardList.stream().collect(Collectors.toMap(WxVtwoCashBackAward::getId, Function.identity())); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoPrizeDrawActivityServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoPrizeDrawActivityServiceImpl.java index 0135ef7c5..a19cdb4fb 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoPrizeDrawActivityServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxVtwoPrizeDrawActivityServiceImpl.java @@ -12,10 +12,7 @@ import com.iformall.common.Result; import com.iformall.domain.po.*; import com.iformall.domain.po.base.BaseEntity; import com.iformall.domain.po.base.TenantEntity; -import com.iformall.domain.vo.OfflineActivityRecordStatistics; -import com.iformall.domain.vo.WxVtwoActivityOrderStatistics; -import com.iformall.domain.vo.WxVtwoActivityRule; -import com.iformall.domain.vo.WxVtwoActivityRuleDetail; +import com.iformall.domain.vo.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; @@ -27,9 +24,12 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.function.Function; + +import static java.util.stream.Collectors.*; /** * @author xiaohu @@ -43,9 +43,6 @@ public class WxVtwoPrizeDrawActivityServiceImpl extends ServiceImpl listAsPage(WxVtwoPrizeDrawActivity prizeDrawActivity, Integer pageNum, Integer pageSize) { handlerQuery(prizeDrawActivity); @@ -214,10 +227,7 @@ public class WxVtwoPrizeDrawActivityServiceImpl extends ServiceImpl activityAwardList = wxVtwoActivityAwardMapper.findList(activityAwardQ); + List activityAwardList = wxVtwoActivityAwardService.findActivityAwardList(id, tenantId); prizeDrawActivity.setAwardList(activityAwardList); if(!EnumOfflineActivityMerchantType.ALL.getCode().equals(prizeDrawActivity.getMerchantRule())){ List activityMerchantList = wxVtwoActivityMerchantService.getActivityMerchantList(id,tenantId); @@ -246,6 +256,104 @@ public class WxVtwoPrizeDrawActivityServiceImpl extends ServiceImpl orderList = wxVtwoActivityOrderService.findGrantOrder(activityGrant,activityGrant.getOrderIdList(),activityGrant.getOrderFilterIdList()); + + wxVtwoActivityGrantService.handleFromOrder(prizeDrawActivity.getName(),activityGrant,orderList,false); + + List activityAwardList = wxVtwoActivityAwardService.findActivityAwardList(activityGrant.getActivityId(), activityGrant.getTenantId()); + activityGrant.setAwardList(activityAwardList); + + int limitCount = 0; + List grantRuleList = new ArrayList<>(); + if(EnumOfflineActivityMode.ONE.getCode().equals(prizeDrawActivity.getAmountModel())){ + for(WxVtwoActivityOrder order:orderList){ + Integer order_limit = 0; + for (WxVtwoActivityRuleDetail rule :prizeDrawActivity.getAmountRulesObject().getRuleList()){ + if((rule.getMinAmount() == null || order.getOrderMoney().compareTo(rule.getMinAmount()) >= 0) + && (rule.getMaxAmount() == null || order.getOrderMoney().compareTo(rule.getMaxAmount()) <= 0)){ + order_limit = rule.getAwardCount(); + } + } + if(order_limit != null && order_limit > 0){ + WxVtwoActivityGrantRule grantRule = new WxVtwoActivityGrantRule(); + grantRule.setOrderId(order.getId()); + grantRule.setModeType(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); + grantRule.setName("订单抽奖("+order.getOrderNo()+")"); + grantRule.setAwardLimit(order_limit); + grantRuleList.add(grantRule); + + limitCount += order_limit; + } + } + }else{ + BigDecimal orderMoneySum = orderList.stream().filter(order -> EnumYesOrNo.YES.getCode().equals(order.getIsAmount())) + .map(WxVtwoActivityOrder::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal limitAmount = prizeDrawActivity.getAmountRulesObject().getLimitAmount(); + BigDecimal awardAmount = prizeDrawActivity.getAmountRulesObject().getAwardAmount(); + if(limitAmount == null || orderMoneySum.compareTo(limitAmount) > 0){ + if(awardAmount != null && awardAmount.compareTo(BigDecimal.ZERO) > 0){ + Integer order_limit = orderMoneySum.divide(awardAmount,0, RoundingMode.HALF_DOWN).intValue(); + if(order_limit > 0){ + WxVtwoActivityGrantRule grantRule = new WxVtwoActivityGrantRule(); + grantRule.setModeType(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); + grantRule.setName("订单总金额抽奖"); + grantRule.setAwardLimit(order_limit); + grantRuleList.add(grantRule); + + limitCount += order_limit; + } + } + } + } + + //联单 + Integer jointCount = wxVtwoActivityOrderService.getJointCount(prizeDrawActivity.getRelatedModel(),orderList); + if(jointCount != 0){ + Map jointCountMap = prizeDrawActivity.getRelatedRulesObject().stream().collect(toMap(WxVtwoActivityRuleDetail::getRelatedCount, Function.identity())); + WxVtwoActivityRuleDetail relatedRule = jointCountMap.get(jointCount); + if(relatedRule != null && relatedRule.getAwardCount() != null){ + Integer joint_limit = relatedRule.getAwardCount(); + if(joint_limit > 0){ + WxVtwoActivityGrantRule grantRule = new WxVtwoActivityGrantRule(); + grantRule.setModeType(EnumOfflineActivityAwardsModeType.COUNT.getCode()); + grantRule.setName("联单抽奖"); + grantRule.setAwardLimit(joint_limit); + grantRuleList.add(grantRule); + + limitCount += joint_limit; + } + } + } + + if(prizeDrawActivity.getAwardsLimit() != null && prizeDrawActivity.getAwardsLimit() > 0 + && prizeDrawActivity.getAwardsLimit() < limitCount){ + limitCount = prizeDrawActivity.getAwardsLimit(); + } + + activityGrant.setAwardLimit(limitCount); + activityGrant.setRuleList(grantRuleList); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void grantAward(WxVtwoPrizeDrawActivity prizeDrawActivity,WxVtwoActivityGrant activityGrant) { + + List orderList = wxVtwoActivityOrderService.findGrantOrder(activityGrant,activityGrant.getOrderIdList(),activityGrant.getOrderFilterIdList()); + + wxVtwoActivityGrantService.handleFromOrder(prizeDrawActivity.getName(),activityGrant,orderList,false); + + wxVtwoActivityGrantService.saveOrUpdate(activityGrant); + + wxVtwoActivityGrantOrderService.saveGrantOrder(activityGrant.getId(),activityGrant.getActivityId(),orderList); + + wxVtwoActivityGrantAwardService.saveGrantAward(activityGrant); + + wxVtwoActivityGrantSettlementService.saveGrantSettlement(activityGrant); + } + } diff --git a/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantAwardMapper.xml b/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantAwardMapper.xml index 037fb6ac0..5c47656a8 100644 --- a/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantAwardMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantAwardMapper.xml @@ -12,18 +12,14 @@ - - - - - + @@ -34,11 +30,10 @@ id,tenant_id,parent_tenant_id, activity_id,activity_name,grant_id, - order_id,order_amount,mode_type, - min_amount,max_amount,related_count, + order_id,mode_type, award_id,award_grade,award_name, award_price,award_count,grant_price, - money_rule,mall_share_rate,merchant_share_rate, + share_rule,mall_share_rate,merchant_share_rate, status,create_date,update_date @@ -91,4 +86,25 @@ select from wx_vtwo_activity_grant_award where id = #{id} and tenant_id=#{tenantId} + + + insert into wx_vtwo_activity_grant_award + (id, + activity_id,activity_name,grant_id, + order_id,mode_type, + award_id,award_grade,award_name, + award_price,award_count,grant_price, + share_rule,mall_share_rate,merchant_share_rate, + create_date,update_date) + values + + (#{item.id,jdbcType=BIGINT}, + #{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR},#{item.grantId,jdbcType=BIGINT}, + #{item.orderId,jdbcType=BIGINT},#{item.modeType,jdbcType=SMALLINT}, + #{item.awardId,jdbcType=BIGINT},#{item.awardGrade,jdbcType=INTEGER},#{item.awardName,jdbcType=VARCHAR}, + #{item.awardPrice,jdbcType=DECIMAL},#{item.awardCount,jdbcType=INTEGER},#{item.grantPrice,jdbcType=DECIMAL}, + #{item.shareRule,jdbcType=SMALLINT},#{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL}, + #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) + + diff --git a/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantOrderMapper.xml index 0ac95f1d2..ceb582773 100644 --- a/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantOrderMapper.xml @@ -64,4 +64,17 @@ select from wx_vtwo_activity_grant_order where id = #{id} and tenant_id=#{tenantId} + + + insert into wx_vtwo_activity_grant_order + (id, + grant_id,activity_id,order_id, + is_amount, status) + values + + (#{item.id,jdbcType=BIGINT}, + #{item.grantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.orderId,jdbcType=BIGINT}, + #{item.isAmount,jdbcType=SMALLINT},#{item.status,jdbcType=SMALLINT}) + + diff --git a/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantSettlementMapper.xml b/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantSettlementMapper.xml index fadd21e2d..85dedc94a 100644 --- a/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantSettlementMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxVtwoActivityGrantSettlementMapper.xml @@ -92,4 +92,27 @@ FROM wx_vtwo_activity_grant_settlement + + + insert into wx_vtwo_activity_grant_settlement + (id, + activity_id,grant_id,grant_award_id, + award_id,grant_price,order_id, + order_no,order_amount,merchant_id, + order_ratio,order_grant_price,mall_share_rate, + merchant_share_rate,order_mall_share_price,order_merchant_share_price, + tax_amount,create_date, + update_date) + values + + (#{item.id,jdbcType=BIGINT}, + #{item.activityId,jdbcType=BIGINT},#{item.grantId,jdbcType=BIGINT},#{item.grantAwardId,jdbcType=BIGINT}, + #{item.awardId,jdbcType=BIGINT},#{item.grantPrice,jdbcType=DECIMAL},#{item.orderId,jdbcType=BIGINT}, + #{item.orderNo,jdbcType=VARCHAR},#{item.orderAmount,jdbcType=DECIMAL},#{item.merchantId,jdbcType=BIGINT}, + #{item.orderRatio,jdbcType=DECIMAL},#{item.orderGrantPrice,jdbcType=DECIMAL},#{item.mallShareRate,jdbcType=DECIMAL}, + #{item.merchantShareRate,jdbcType=DECIMAL},#{item.orderMallSharePrice,jdbcType=DECIMAL},#{item.orderMerchantSharePrice,jdbcType=DECIMAL}, + #{item.taxAmount,jdbcType=DECIMAL},#{item.createDate,jdbcType=TIMESTAMP}, + #{item.updateDate,jdbcType=TIMESTAMP}) + + diff --git a/mallinkService/src/main/resources/mapper/WxVtwoCashBackGrantAwardMapper.xml b/mallinkService/src/main/resources/mapper/WxVtwoCashBackGrantAwardMapper.xml index be65499e0..f0f464ee2 100644 --- a/mallinkService/src/main/resources/mapper/WxVtwoCashBackGrantAwardMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxVtwoCashBackGrantAwardMapper.xml @@ -11,7 +11,7 @@ - + @@ -22,7 +22,7 @@ - + @@ -35,10 +35,10 @@ id,tenant_id,parent_tenant_id, activity_id,activity_name,grant_id, - record_id,order_amount,mode_type, + order_id,order_amount,mode_type, min_amount,max_amount,related_count, award_id,award_name,cash_back_ratio, - cash_back_rule,cash_back,money_rule, + cash_back_rule,cash_back,share_rule, mall_share_rate,merchant_share_rate,tax_deduction_rules, tax_amount,status,create_date, update_date @@ -61,8 +61,8 @@ and `grant_id` = #{grantId} - - and `record_id` = #{recordId} + + and `order_id` = #{orderId} @@ -83,4 +83,28 @@ select from wx_vtwo_cash_back_grant_award where id = #{id} and tenant_id=#{tenantId} + + + insert into wx_vtwo_cash_back_grant_award + (id, + activity_id,activity_name,grant_id, + order_id,order_amount,mode_type, + min_amount,max_amount,related_count, + award_id,award_name,cash_back_ratio, + cash_back_rule,cash_back,share_rule, + mall_share_rate,merchant_share_rate,tax_deduction_rules, + tax_amount,create_date, + update_date) + values + + (#{item.id,jdbcType=BIGINT}, + #{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR},#{item.grantId,jdbcType=BIGINT}, + #{item.orderId,jdbcType=BIGINT},#{item.orderAmount,jdbcType=DECIMAL},#{item.modeType,jdbcType=SMALLINT}, + #{item.minAmount,jdbcType=DECIMAL},#{item.maxAmount,jdbcType=DECIMAL},#{item.relatedCount,jdbcType=INTEGER}, + #{item.awardId,jdbcType=BIGINT},#{item.awardName,jdbcType=VARCHAR},#{item.cashBackRatio,jdbcType=DECIMAL}, + #{item.cashBackRule,jdbcType=SMALLINT},#{item.cashBack,jdbcType=DECIMAL},#{item.shareRule,jdbcType=SMALLINT}, + #{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL},#{item.taxDeductionRules,jdbcType=VARCHAR}, + #{item.taxAmount,jdbcType=DECIMAL},#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) + +