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>