| | |
| | | @Override |
| | | public FebsResponse wxCodePay(ApiWxCodePayDto wxCodePayDto) { |
| | | Long orderId = wxCodePayDto.getOrderId(); |
| | | String wxPayCode = wxCodePayDto.getWxPayCode(); |
| | | /** |
| | | * auth_code 扫码支付付款码 微信付款码规则:18位纯数字,前缀以10、11、12、13、14、15开头 |
| | | */ |
| | | String regex = "^(10|11|12|13|14|15)\\d{16}$"; |
| | | boolean flag = wxPayCode.matches(regex); |
| | | if(!flag){ |
| | | throw new FebsException("请打开微信付款码!"); |
| | | } |
| | | MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId); |
| | | if(OrderStatusEnum.FINISH.getValue() == (mallOrderInfo.getStatus())){ |
| | | throw new FebsException("已支付"); |
| | | } |
| | | mallOrderInfo.setTakeCode(wxPayCode); |
| | | List<ApiGetOrderOrderItemVo> appOrderItemByOrderId = mallOrderItemMapper.getAppOrderItemByOrderId(orderId); |
| | | if(CollUtil.isEmpty(appOrderItemByOrderId)){ |
| | | mallOrderInfo.setName("商品"); |
| | | }else{ |
| | | mallOrderInfo.setName(appOrderItemByOrderId.get(0).getGoodsName()); |
| | | } |
| | | // mallOrderInfo.setPayResult(2); |
| | | mallOrderInfoMapper.updateById(mallOrderInfo); |
| | | BigDecimal amount = mallOrderInfo.getAmount(); |
| | | BigDecimal carriage = mallOrderInfo.getCarriage(); |
| | | //减少用户积分和余额 |
| | | if(ObjectUtil.isNotEmpty(mallOrderInfo.getMemberId())){ |
| | | MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallOrderInfo.getMemberId()); |
| | | BigDecimal totalCarriage = mallOrderInfo.getCarriage(); |
| | | BigDecimal score = mallMemberWallet.getScore(); |
| | | BigDecimal balance = mallMemberWallet.getBalance(); |
| | | BigDecimal memberAmount = score.add(balance); |
| | | BigDecimal avaAmount = totalCarriage;//剩余需要折扣的金额 |
| | | if(avaAmount.compareTo(memberAmount) >= 0){ |
| | | //清零用户的积分和余额 |
| | | mallMemberWallet.setBalance(BigDecimal.ZERO); |
| | | mallMemberWallet.setScore(BigDecimal.ZERO); |
| | | mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet); |
| | | }else{ |
| | | /** |
| | | * 先扣积分,再扣余额 |
| | | */ |
| | | if(avaAmount.compareTo(score) >= 0){ |
| | | BigDecimal avaAmount = carriage;//剩余需要折扣的金额 |
| | | if(avaAmount.compareTo(BigDecimal.ZERO) > 0){ |
| | | MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallOrderInfo.getMemberId()); |
| | | BigDecimal score = mallMemberWallet.getScore(); |
| | | BigDecimal balance = mallMemberWallet.getBalance(); |
| | | BigDecimal memberAmount = score.add(balance); |
| | | if(avaAmount.compareTo(memberAmount) >= 0){ |
| | | //清零用户的积分和余额 |
| | | mallMemberWallet.setBalance(BigDecimal.ZERO); |
| | | mallMemberWallet.setScore(BigDecimal.ZERO); |
| | | avaAmount = avaAmount.subtract(score); |
| | | mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet); |
| | | }else{ |
| | | mallMemberWallet.setScore(score.subtract(avaAmount)); |
| | | avaAmount = BigDecimal.ZERO; |
| | | /** |
| | | * 先扣积分,再扣余额 |
| | | */ |
| | | if(avaAmount.compareTo(score) >= 0){ |
| | | mallMemberWallet.setScore(BigDecimal.ZERO); |
| | | avaAmount = avaAmount.subtract(score); |
| | | }else{ |
| | | mallMemberWallet.setScore(score.subtract(avaAmount)); |
| | | avaAmount = BigDecimal.ZERO; |
| | | } |
| | | //积分不够 |
| | | if(avaAmount.compareTo(BigDecimal.ZERO) > 0){ |
| | | mallMemberWallet.setBalance(balance.subtract(avaAmount)); |
| | | }else{ |
| | | mallMemberWallet.setBalance(balance); |
| | | } |
| | | mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet); |
| | | } |
| | | //积分不够 |
| | | if(avaAmount.compareTo(BigDecimal.ZERO) > 0){ |
| | | mallMemberWallet.setBalance(balance.subtract(avaAmount)); |
| | | }else{ |
| | | mallMemberWallet.setBalance(balance); |
| | | } |
| | | mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet); |
| | | } |
| | | } |
| | | // 发起付款码支付请求 |
| | | BigDecimal amount = mallOrderInfo.getAmount(); |
| | | BigDecimal carriage = mallOrderInfo.getCarriage(); |
| | | String payResult = "支付成功"; |
| | | if(amount.subtract(carriage).compareTo(BigDecimal.ZERO) > 0){ |
| | | String wxPayCode = wxCodePayDto.getWxPayCode(); |
| | | /** |
| | | * auth_code 扫码支付付款码 微信付款码规则:18位纯数字,前缀以10、11、12、13、14、15开头 |
| | | */ |
| | | String regex = "^(10|11|12|13|14|15)\\d{16}$"; |
| | | boolean flag = wxPayCode.matches(regex); |
| | | if(!flag){ |
| | | throw new FebsException("请打开微信付款码!"); |
| | | } |
| | | mallOrderInfo.setTakeCode(wxPayCode); |
| | | List<ApiGetOrderOrderItemVo> appOrderItemByOrderId = mallOrderItemMapper.getAppOrderItemByOrderId(orderId); |
| | | if(CollUtil.isEmpty(appOrderItemByOrderId)){ |
| | | mallOrderInfo.setName("商品"); |
| | | }else{ |
| | | mallOrderInfo.setName(appOrderItemByOrderId.get(0).getGoodsName()); |
| | | } |
| | | mallOrderInfoMapper.updateById(mallOrderInfo); |
| | | payResult = xcxCodePayService.pay(mallOrderInfo); |
| | | } |
| | | return new FebsResponse().success().message(payResult); |