分布式事务一致性,事务补偿实战

前端之家收集整理的这篇文章主要介绍了分布式事务一致性,事务补偿实战前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

 一、事务记录补偿表设计

 

 三、业务补偿函数

 

@Override
    public void compensation(BidPaymentDetailConfirmRecord confirmRecord,ProviderUserSession userSession) throws Exception {
        Long type = confirmRecord.getBusinessType();
        Long detailId = confirmRecord.getPaymentDetailId();
        if(type == null || detailId == null) {
            throw new Exception("事务补偿失败,必要参数为空,type:"+type+",detailId:"+detailId);
        }
        BidPaymentsDetail detail = bidPaymentsDetailService.selectByPrimaryKey(detailId);
        BidPayments payments = bidPaymentsService.selectByPrimaryKey(detail.getPaymentId());
        if(payments == new Exception("事务补偿失败,收款申请已不存在:"+detail.getPaymentId());
        }
        TrcTrack trcTrack = trcTrackProvider.selectByPrimaryKey(payments.getTrackId());
        if(trcTrack == new Exception("事务补偿失败,商机信息已不存在:"+payments.getTrackId());
        }
        CstCustomer customer = cstCustomerProvider.selectByPrimaryKey(trcTrack.getCustomerId());
        if(customer == new Exception("事务补偿失败,客户信息已不存在:"+trcTrack.getCustomerId());
        }
        final BidContract bidContract = bidContractService.getEffectContract(trcTrack.getId());
        try {
            if (0 == confirmRecord.getStatus()) {
                switch (type.intValue()) {
                    case 10:
                        bizBidPaymentProvider.receiveDeposit(trcTrack,customer,detail.getReceiveType(),detail.getReceiveAmount(),userSession);
                        break;
                    case 20:
                        //首期款20%,不足额
                        bizBidPaymentProvider.receiveContractAmount(trcTrack,bidContract.getContractAmount(),false,false,1)">case 21首期款20%足额,新建合同号
true,1)">truecase 22首期款20%足额,但不是新建合同号
case 231、创建EBS客户
                        Map<String,String> resultMap = bidPaymentsDetailService.import_customer(
                                payments,userSession.getEbsBizId(),bidContract.getContractNo());
                        2、定金转首期款
                        if (resultMap != null &&
                                !EbsWebServiceConstants.RETURN_STATUS_ERROR.equals(resultMap.get("status"))) {
                            bidPaymentsDetailService.intentionToDownpayment(payments,trcTrack.getId(),bidContract.getContractNo());
                        }
                        case 241、定金首期款
                        bidPaymentsDetailService.intentionToDownpayment(payments,1)">case 30创建收款确认跟进记录
                        bidPaymentsDetailService.insertReceivedAmountAction(trcTrack,detail,1)">;
                }
                confirmRecord.setStatus(2);        设置为已补偿
                bidPaymentDetailConfirmRecordMapper.updateByPrimaryKeySelective(confirmRecord);
            } else {
                LogUtil.error("无效的事务补偿,status状态为:" + confirmRecord.getStatus());
            }
        } catch (Exception e) {
            new Exception("事务补偿失败,"+e.getMessage());
        }
    }

 

 

 

调用rest接口,传事务记录ID,进行事务补偿

 

猜你在找的Java相关文章