| | |
| | | package cc.mrbird.febs.pay.service.impl; |
| | | |
| | | import cc.mrbird.febs.common.enumerates.AgentLevelEnum; |
| | | import cc.mrbird.febs.common.enumerates.FlowTypeEnum; |
| | | import cc.mrbird.febs.common.enumerates.GoodsToLevelEnums; |
| | | import cc.mrbird.febs.common.enumerates.OrderStatusEnum; |
| | | import cc.mrbird.febs.common.exception.FebsException; |
| | | import cc.mrbird.febs.mall.entity.MallMember; |
| | | import cc.mrbird.febs.mall.entity.MallMqRecord; |
| | | import cc.mrbird.febs.mall.entity.MallOrderInfo; |
| | | import cc.mrbird.febs.mall.entity.MallOrderItem; |
| | | import cc.mrbird.febs.mall.mapper.MallMqRecordMapper; |
| | | import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; |
| | | import cc.mrbird.febs.mall.service.IApiMallMemberService; |
| | | import cc.mrbird.febs.mall.service.*; |
| | | import cc.mrbird.febs.pay.properties.WxPayProperties; |
| | | import cc.mrbird.febs.pay.service.IPayService; |
| | | import cc.mrbird.febs.rabbit.producter.AgentProducer; |
| | | import cn.hutool.core.date.DateField; |
| | | import cn.hutool.core.date.DatePattern; |
| | | import cn.hutool.core.date.DateUnit; |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | |
| | | public class WxPayServiceImpl implements IPayService { |
| | | |
| | | @Autowired |
| | | private IApiMallMemberService memberService; |
| | | @Autowired |
| | | private MallOrderInfoMapper orderInfoMapper; |
| | | |
| | | @Autowired |
| | |
| | | |
| | | @Autowired |
| | | private WxPayProperties wxPayProperties; |
| | | |
| | | @Autowired |
| | | private AgentProducer agentProducer; |
| | | |
| | | @Autowired |
| | | private IMallAchieveService mallAchieveService; |
| | | |
| | | @Autowired |
| | | private IApiMallMemberService mallMemberService; |
| | | |
| | | @Autowired |
| | | private IApiMallMemberWalletService memberWalletService; |
| | | |
| | | @Value("${spring.profiles.active}") |
| | | private String active; |
| | |
| | | if ("dev".equals(active) || "test".equals(active)) { |
| | | request.setTotalFee(1); |
| | | } else { |
| | | request.setTotalFee(orderInfo.getAmount().multiply(new BigDecimal(100)).intValue()); |
| | | request.setTotalFee(orderInfo.getAmount().subtract(orderInfo.getScoreAmount()).multiply(new BigDecimal(100)).intValue()); |
| | | } |
| | | |
| | | try { |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void payCallback(Map<String, String> params) { |
| | | String orderNo = params.get("outTradeNo"); |
| | | String orderNo = params.get("out_trade_no"); |
| | | |
| | | LambdaQueryWrapper<MallOrderInfo> query = new LambdaQueryWrapper<>(); |
| | | query.eq(MallOrderInfo::getOrderNo, orderNo); |
| | |
| | | orderInfo.setPayTime(new Date()); |
| | | orderInfo.setPayTradeNo(params.get("transaction_id")); |
| | | orderInfoMapper.updateById(orderInfo); |
| | | |
| | | MallMember member = mallMemberService.getById(orderInfo.getMemberId()); |
| | | |
| | | // 商品级别 会员/代理/股东 |
| | | int goodsLevel = 0; |
| | | BigDecimal score = BigDecimal.ZERO; |
| | | for (MallOrderItem item : orderInfo.getItems()) { |
| | | // 计算静态倍数 |
| | | if(item.getIsNormal() == 2) { |
| | | score = score.add(item.getPrice().multiply(item.getStaticMulti())); |
| | | } |
| | | |
| | | // 判断会员层级 |
| | | if (item.getIsNormal() == 2 && goodsLevel < item.getGoodsLevel()) { |
| | | goodsLevel = item.getGoodsLevel(); |
| | | } |
| | | |
| | | mallAchieveService.add(item.getId()); |
| | | } |
| | | |
| | | // 根据用户购买的商品设置其等级 |
| | | member.setLevel(GoodsToLevelEnums.getLevelByAccountLevel(goodsLevel)); |
| | | member.setAccountLevel(goodsLevel); |
| | | this.mallMemberService.updateById(member); |
| | | |
| | | memberWalletService.add(score, member.getId(), "score"); |
| | | |
| | | //发送代理自动升级消息 |
| | | agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId()); |
| | | //发送直推返利消息 |
| | | agentProducer.sendOrderReturn(orderInfo.getId()); |
| | | // 发送分红消息 |
| | | agentProducer.sendOrderBonus(orderInfo.getId()); |
| | | } |
| | | } |