From a1159976975857e0dfb48a45a9a848693bc0d262 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 20 Jul 2023 14:33:08 +0800 Subject: [PATCH] 支付返利,微信余额支付会有返利。发卷,赠送积分逻辑 --- src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java | 1 src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java | 10 ++ src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java | 3 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 14 ++ src/main/resources/mapper/modules/MallMemberMapper.xml | 9 ++ src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java | 2 src/main/java/cc/mrbird/febs/mall/dto/ApiMallRollPerkDto.java | 25 ++++++ src/main/java/cc/mrbird/febs/mall/service/IAgentService.java | 2 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 13 +++ src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java | 18 ++++ src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java | 10 ++ src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 74 ++++++++++++++++++ src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java | 2 src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java | 7 + src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java | 11 ++ src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java | 2 16 files changed, 199 insertions(+), 4 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java index 42e4064..3f42d91 100644 --- a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java +++ b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java @@ -176,4 +176,22 @@ } /** 新用户注册 end**/ + + /** 支付后同意验证 start**/ + @Bean + public DirectExchange orderGetExchange() { + return new DirectExchange(RabbitQueueEnum.YWG_ORDER_GET.getExchange()); + } + + @Bean + public Queue orderGetQueue() { + return new Queue(RabbitQueueEnum.YWG_ORDER_GET.getQueue()); + } + + @Bean + public Binding orderGetBind() { + return BindingBuilder.bind(orderGetQueue()).to(orderGetExchange()).with(RabbitQueueEnum.YWG_ORDER_GET.getRoute()); + } + /** 支付后同意验证 end**/ + } diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java index 8005fb8..bf7c74b 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java @@ -5,6 +5,8 @@ @Getter public enum DataDictionaryEnum { + // 上级返佣金比例,返回到余额 + MEMBER_RETURN_PERCENT("MEMBER_RETURN_PERCENT", "MEMBER_RETURN_PERCENT"), // 积分兑换比例 1,则1积分等于一元 2则2积分等于一元 SCORE_CHANGE("SCORE_CHANGE", "SCORE_CHANGE"), //微信订阅模板ID, diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java index 40773f0..4da30b0 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java @@ -4,6 +4,7 @@ import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.entity.MallMemberPayment; +import cc.mrbird.febs.mall.entity.MallRollPerk; import cc.mrbird.febs.mall.service.*; import cc.mrbird.febs.mall.vo.*; import io.swagger.annotations.Api; @@ -220,4 +221,13 @@ return memberService.activityInfo(); } + @ApiOperation(value = "获取卷列表", notes = "获取卷列表") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = MallRollPerk.class) + }) + @PostMapping(value = "/rollPerkList") + public FebsResponse rollPerkList(@RequestBody ApiMallRollPerkDto queryDto) { + return new FebsResponse().success().data(memberService.findMallRollPerkInPage(queryDto)); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiMallRollPerkDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiMallRollPerkDto.java new file mode 100644 index 0000000..abfc5b2 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiMallRollPerkDto.java @@ -0,0 +1,25 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "ApiMallRollPerkDto", description = "参数接收类") +public class ApiMallRollPerkDto { + + @ApiModelProperty(value = "页码", example = "1") + private Integer pageNow; + + @ApiModelProperty(value = "每页数量", example = "10") + private Integer pageSize; + + @ApiModelProperty(value = "卷编码 1:课程卷 2:民宿卷", example = "123") + private Long rollId; + + @ApiModelProperty(value = "状态1:未使用 2:已使用", example = "123") + private Integer state; + + @ApiModelProperty(value = "用户ID", example = "123") + private Long memberId; +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java b/src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java index af48abd..76c0451 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java @@ -14,7 +14,7 @@ private Long memberId; private Long rollId; - + //1:未使用 2:已使用 private Integer state; } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java index 8f83a2d..86db1ef 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java @@ -6,6 +6,7 @@ import cc.mrbird.febs.mall.dto.RankListDto; import cc.mrbird.febs.mall.entity.AppVersion; import cc.mrbird.febs.mall.entity.MallMember; +import cc.mrbird.febs.mall.entity.MallRollPerk; import cc.mrbird.febs.mall.vo.*; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -87,4 +88,6 @@ List<MallMember> selectMemberWithLevel(String level); MallMember selectMemberByOpenId(@Param("openId")String openId); + + IPage<MallRollPerk> findMallRollPerkInPage(Page<MallRollPerk> page, @Param("record")MallRollPerk mallRollPerk); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java index 875e530..ce1d17e 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java @@ -13,4 +13,6 @@ void addMemberScan(String str); void updateMemberInfo(String str); + + void orderGetMsg(String str); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java index 1565337..ca0bf13 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java @@ -83,4 +83,6 @@ FebsResponse activityInfo(); FebsResponse agentApplyInfo(); + + FebsResponse findMallRollPerkInPage(ApiMallRollPerkDto queryDto); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java index 6d41ec1..709dec4 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java @@ -2,6 +2,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.AgentLevelEnum; +import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.AppContants; @@ -50,6 +51,11 @@ private final MallMemberMapper memberMapper; private final MallMemberWalletMapper mallMemberWalletMapper; private final RestTemplate restTemplate; + private final MallOrderInfoMapper mallOrderInfoMapper; + private final MallOrderItemMapper mallOrderItemMapper; + private final MallGoodsMapper mallGoodsMapper; + private final IApiMallMemberWalletService memberWalletService; + private final MallRollPerkMapper mallRollPerkMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -328,6 +334,74 @@ return; } + + @Override + public void orderGetMsg(String str) { + /** + * String str : orderId@amount + */ + String[] split = StrUtil.split(str, "@"); + String orderId = split[0]; + String amount = split[1]; + MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId); + if(ObjectUtil.isEmpty(mallOrderInfo)){ + return; + } + Long memberId = mallOrderInfo.getMemberId(); + MallMember mallMember = memberMapper.selectById(memberId); + + + List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(mallOrderInfo.getId()); + if(CollUtil.isEmpty(mallOrderItemList)){ + return; + } + + /** + * 支付后同意验证 + * 1:是否送券 + * 2:是否送积分 + * 3:是否返利 + */ + //是否返利 + BigDecimal amountBigDecimal = new BigDecimal(StrUtil.isEmpty(amount) ? "0" : amount); + if(BigDecimal.ZERO.compareTo(amountBigDecimal) < 0){ + if(ObjectUtil.isNotEmpty(mallMember.getReferrerId())){ + String referrerId = mallMember.getReferrerId(); + MallMember mallMemberParent = memberMapper.selectInfoByInviteId(referrerId); + Long id = mallMemberParent.getId(); + DataDictionaryCustom returnPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.MEMBER_RETURN_PERCENT.getType(), + DataDictionaryEnum.MEMBER_RETURN_PERCENT.getCode() + ); + String returnPercentStr = StrUtil.isNotEmpty(returnPercentDic.getValue()) ? "1" : returnPercentDic.getValue(); + BigDecimal returnPercent = new BigDecimal(returnPercentStr).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN); + BigDecimal amountActual = amountBigDecimal.multiply(returnPercent).setScale(2, BigDecimal.ROUND_DOWN); + memberWalletService.add(amountActual, id, "balance"); + } + } + for(MallOrderItem mallOrderItem : mallOrderItemList){ + Long goodsId = mallOrderItem.getGoodsId(); + MallGoods mallGoods = mallGoodsMapper.selectById(goodsId); + if(ObjectUtil.isEmpty(mallGoods)){ + break; + } + //是否送券 1:是 2:否 + BigDecimal levelTwoPrice = mallGoods.getLevelTwoPrice(); + if(BigDecimal.ONE.compareTo(levelTwoPrice) == 0){ + MallRollPerk mallRollPerk = new MallRollPerk(); + mallRollPerk.setMemberId(memberId); + mallRollPerk.setState(1); + mallRollPerk.setRollId(Long.parseLong(mallGoods.getLevelThreePrice().toString())); + mallRollPerkMapper.insert(mallRollPerk); + } + //赠送积分 + BigDecimal levelOnePrice = mallGoods.getLevelOnePrice(); + if(BigDecimal.ZERO.compareTo(levelOnePrice) <= 0){ + memberWalletService.add(levelOnePrice, memberId, "score"); + } + } + } + public static void main(String[] args) { RestTemplate restTemplate = new RestTemplate(); diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java index 37289ce..01f55dc 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java @@ -829,6 +829,19 @@ return new FebsResponse().success().data(apiMallAgentRecordVo); } + @Override + public FebsResponse findMallRollPerkInPage(ApiMallRollPerkDto queryDto) { + Page<MallRollPerk> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize()); + MallRollPerk mallRollPerk = new MallRollPerk(); + if(ObjectUtil.isNotEmpty(queryDto.getState())){ + mallRollPerk.setState(queryDto.getState()); + } + mallRollPerk.setRollId(queryDto.getRollId()); + mallRollPerk.setMemberId(queryDto.getMemberId()); + IPage<MallRollPerk> mallGoodsCommentVoIPage = this.baseMapper.findMallRollPerkInPage(page,mallRollPerk); + return new FebsResponse().success().data(mallGoodsCommentVoIPage); + } + private String getXcxLoginUrl(String code) { String wechatLoginUrl =xcxProperties.getWecharLoginUrl(); return String.format(wechatLoginUrl, xcxProperties.getXcxAppid(), xcxProperties.getXcxSecret(), code); diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index 7656e4d..bd00e59 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -322,6 +322,7 @@ String payResultStr = ""; String wxResultStr = ""; + String amountActualMsg = ""; switch (payOrderDto.getType()) { case "1": BrandWCPayRequestData brandWCPayRequestData = null; @@ -333,6 +334,7 @@ wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestData); payResultStr = brandWCPayRequestData.getPrepay_id(); orderInfo.setPayMethod("微信支付"); + amountActualMsg = orderInfo.getAmount().toString(); break; case "2": payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance"); @@ -346,6 +348,8 @@ mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2); + + amountActualMsg = orderInfo.getAmount().toString(); break; case "3": /** @@ -396,6 +400,7 @@ mallMoneyFlowService.addMoneyFlow(member.getId(), amountActual.negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2); } + amountActualMsg = amountActual.toString(); if(scoreActual.compareTo(BigDecimal.ZERO) > 0){ mallMoneyFlowService.addMoneyFlow(member.getId(), scoreActual.negate(), MoneyFlowTypeEnum.SCORE_PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue(),"积分支付",2); @@ -413,7 +418,7 @@ payResultStr = orderInfo.getOrderNo(); - orderInfo.setPayOrderNo(orderInfo.getOrderNo()); + orderInfo.setPayOrderNo(payOrderDto.getRollId().toString()); orderInfo.setPayMethod("兑换券支付"); orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); orderInfo.setPayTime(new Date()); @@ -430,8 +435,11 @@ String takeCode = ShareCodeUtil.toSerialCode(orderInfo.getId()); orderInfo.setTakeCode(takeCode); this.baseMapper.updateById(orderInfo); - - + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append(orderInfo.getId().toString()); + stringBuffer.append("@"); + stringBuffer.append(amountActualMsg); + agentProducer.sendOrderGetMsg(stringBuffer.toString()); // OrderStateDto orderStateDto = new OrderStateDto(); // orderStateDto.setOrderNo(orderInfo.getOrderNo()); diff --git a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java index a8fd333..b72a74e 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java +++ b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java @@ -16,4 +16,11 @@ public static final String YWG_MEMBER_SUB = "queue_ywg_member_sub"; public static final String YWG_MEMBER_SUB_SCAN = "queue_ywg_member_sub_scan"; public static final String YWG_MEMBER_INFO = "queue_ywg_member_info"; + /** + * 支付后同意验证 + * 1:是否送券 + * 2:是否送积分 + * 3:是否返利 + */ + public static final String YWG_ORDER_GET = "queue_ywg_order_get"; } diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java index 6026574..bcdb7d9 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java +++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java @@ -102,4 +102,14 @@ log.error("收到用户信息:", e); } } + + @RabbitListener(queues = QueueConstants.YWG_ORDER_GET) + public void orderGetMsg(String str) { + log.info("支付后同意验证:{}", str); + try { + agentService.orderGetMsg(str); + } catch (Exception e) { + log.error("支付后同意验证:", e); + } + } } diff --git a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java index a46e1a5..ce13aaa 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java +++ b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java @@ -6,6 +6,7 @@ @Getter public enum RabbitQueueEnum { + YWG_ORDER_GET("exchange_ywg_order_get", "route_key_ywg_order_get",QueueConstants.YWG_ORDER_GET), YWG_MEMBER_INFO("exchange_ywg_member_info", "route_key_ywg_member_info",QueueConstants.YWG_MEMBER_INFO), YWG_MEMBER_SUB_SCAN("exchange_ywg_member_sub_scan", "route_key_ywg_member_sub_scan",QueueConstants.YWG_MEMBER_SUB_SCAN), YWG_MEMBER_SUB("exchange_ywg_member_sub", "route_key_ywg_member_sub",QueueConstants.YWG_MEMBER_SUB), diff --git a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java index d4832e7..1cdaf61 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java +++ b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java @@ -89,6 +89,17 @@ public void sendMemberInfoMsg(String str) { log.info("更新用户信息:{}", str); + /** + * String str:accessToken|openId + */ rabbitTemplate.convertAndSend(RabbitQueueEnum.YWG_MEMBER_INFO.getExchange(), RabbitQueueEnum.YWG_MEMBER_INFO.getRoute(), str); } + + public void sendOrderGetMsg(String str) { + log.info("支付后同意验证:{}", str); + /** + * String str : orderId@amount + */ + rabbitTemplate.convertAndSend(RabbitQueueEnum.YWG_ORDER_GET.getExchange(), RabbitQueueEnum.YWG_ORDER_GET.getRoute(), str); + } } diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml index dd74bb6..4ae63c4 100644 --- a/src/main/resources/mapper/modules/MallMemberMapper.xml +++ b/src/main/resources/mapper/modules/MallMemberMapper.xml @@ -407,4 +407,13 @@ where a.open_id = #{openId} limit 1 </select> + <select id="findMallRollPerkInPage" resultType="cc.mrbird.febs.mall.entity.MallRollPerk"> + select * from mall_roll_perk + where member_id = #{record.memberId} + and roll_id = #{record.rollId} + <if test="record.state != null and record.state != ''"> + and state = #{record.state} + </if> + </select> + </mapper> \ No newline at end of file -- Gitblit v1.9.1