xiaoyong931011
2023-07-20 a1159976975857e0dfb48a45a9a848693bc0d262
支付返利,微信余额支付会有返利。发卷,赠送积分逻辑
1 files added
15 files modified
203 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiMallRollPerkDto.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IAgentService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java 74 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 14 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java 11 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallMemberMapper.xml 9 ●●●●● patch | view | raw | blame | history
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**/
}
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,
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));
    }
}
src/main/java/cc/mrbird/febs/mall/dto/ApiMallRollPerkDto.java
New file
@@ -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;
}
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;
}
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);
}
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);
}
src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
@@ -83,4 +83,6 @@
    FebsResponse activityInfo();
    FebsResponse agentApplyInfo();
    FebsResponse findMallRollPerkInPage(ApiMallRollPerkDto queryDto);
}
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();
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);
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());
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";
}
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);
        }
    }
}
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),
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);
    }
}
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>