分布式事务一致性,事务补偿实战
发布时间: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,进行事务补偿 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |