加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 06:40:38 所属栏目:Java 来源:网络整理
导读:?一、事务记录补偿表设计 ? ?三、业务补偿函数 ? @Override public void compensation(BidPaymentDetailConfirmRecord confirmRecord,ProviderUserSession userSession) throws Exception { Long type = confirmRecord.getBusinessType(); Long detailId = c

?一、事务记录补偿表设计

?

?三、业务补偿函数

?

@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,进行事务补偿

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读