diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java index 4894aa730..192e04c91 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java @@ -105,15 +105,23 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { Integer payment = cardInfo.getSaleAmount() * record.getDeductionAmount() / cardInfo.getAmount(); Integer dChargeFee = Math.round(payment * 1.0F * payAccount.getRate() / 10000); Integer real_payment = payment - dChargeFee; + Integer remain_real_pament = cardInfo.getRemainingShareFeeAmount()-real_payment; + + Integer remaingAmount = cardInfo.getRemainingAmount()-record.getDeductionAmount(); + if(remaingAmount.equals(0)) { + // 最后一次支付时 + real_payment = Math.min(real_payment, cardInfo.getRemainingShareFeeAmount()); + remain_real_pament = 0; + } // 6 insert card_spend record.setId(idWorker.nextId()); record.setPayment(payment); record.setRealPayment(real_payment); record.setCardBeforeAmount(cardInfo.getRemainingAmount()); - record.setCardRemainAmount(cardInfo.getRemainingAmount()-record.getDeductionAmount()); + record.setCardRemainAmount(remaingAmount); record.setCardBeforeRealAmount(cardInfo.getRemainingShareFeeAmount()); - record.setCardRemainRealAmount(cardInfo.getRemainingShareFeeAmount()-real_payment); + record.setCardRemainRealAmount(remain_real_pament); record.setCreateDate(curDate); record.setUpdateDate(curDate); try { @@ -124,8 +132,8 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { } // 7. update card info - cardInfo.setRemainingAmount(cardInfo.getRemainingAmount()-record.getDeductionAmount()); - cardInfo.setRemainingShareFeeAmount(cardInfo.getRemainingShareFeeAmount()-real_payment); + cardInfo.setRemainingAmount(remaingAmount); + cardInfo.setRemainingShareFeeAmount(remain_real_pament); cardInfo.setUpdateDate(curDate); try { wxCardInfoMapper.updateByPrimaryKey(cardInfo); @@ -238,7 +246,7 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { shareOrder.setcUserId(cardSpend.getOwnerId()); shareOrder.setMerchantId(cardSpend.getMerchantId()); shareOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode()); - shareOrder.setPayAmount(cardSpend.getRealPayment()); + shareOrder.setPayAmount(cardSpend.getPayment()); shareOrder.setOrderId(cardSpend.getOrderId()); shareOrder.setPayTimeStart(cardSpend.getCreateDate()); shareOrder.setPayTimeEnd(cardSpend.getUpdateDate()); @@ -246,10 +254,14 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { shareOrder.setTransactionId(cardInfo.getTransactionId()); shareOrder.setShareAmount(cardSpend.getRealPayment()); profitSharingOrderService.createSharingOrder(shareOrder); - if(cardSpend.getCardRemainAmount() <= 0) { - shareOrder.setPayAmount(cardInfo.getRemainingShareFeeAmount()); - shareOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_FINISH.getCode()); - profitSharingOrderService.finishSharingOrder(shareOrder); + if(cardSpend.getCardRemainAmount().equals(0)) { + // 卡已被抵扣,但是分账还有余额 + if (cardSpend.getCardRemainRealAmount() > 0) { + shareOrder.setPayAmount(0); + shareOrder.setShareAmount(cardInfo.getRemainingShareFeeAmount()); + shareOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_FINISH.getCode()); + profitSharingOrderService.finishSharingOrder(shareOrder); + } } } else { logger.error("微信分账: 未找到payorder or merchant at orderid-" + orderId);