測(cè)試代碼
弄了個(gè)全集的測(cè)試代碼嚼酝,如下:
存在逾期彤避、部分還款
/**
*
* 從創(chuàng)建剂癌、放款境肾、逾期到部分還款
*
* @return
* @throws OspException
*/
@Test
public void testFromOverdueToRepaid() throws OspException {
// a. 創(chuàng)建已簽約接口
String bizOrderId = createSignOrder();
// b.構(gòu)造放款請(qǐng)求
BizOrderStatusRequest loanReq = genStatusRequestFromCondition(bizOrderId,
BizOrderOperationTypeEnum.LOAN,
SIGNED,
null // 可填LOANING永丝,也可不填锹漱,會(huì)有默認(rèn)值。但是不能填別的狀態(tài)慕嚷,狀態(tài)機(jī)會(huì)禁止隨意改變狀態(tài)
);
OrderBaseResponse response = bizOrderStatusService.loan(loanReq);
System.out.println(response);
Assert.assertNull(response.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), response.getResultCode());
// c. 放款成功請(qǐng)求
BizOrderStatusRequest loanSuccReq = genStatusRequestFromCondition(bizOrderId,
BizOrderOperationTypeEnum.LOAN, // 放款失敗哥牍,直接關(guān)單
LOANING,
LOANED // 可不傳,會(huì)默認(rèn)
);
OrderBaseResponse loanSuccResp = bizOrderStatusService.loanSucc(loanSuccReq);
System.out.println(loanSuccResp);
Assert.assertNull(loanSuccResp.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), loanSuccResp.getResultCode());
// d.生成賬單請(qǐng)求
BizOrderStatusRequest genBillReq = genStatusRequestFromCondition(bizOrderId,
BizOrderOperationTypeEnum.GEN_BILL,
LOANED,
null // 可以不傳喝检,也可以傳BILL_BILL
);
OrderBaseResponse genBillResp = bizOrderStatusService.genBill(genBillReq);
System.out.println(genBillResp);
Assert.assertNull(genBillResp.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), genBillResp.getResultCode());
// e. 到逾期
BizOrderStatusRequest overdueReq = genStatusRequestFromCondition(bizOrderId,
BizOrderOperationTypeEnum.OVERDUE,
BILL_GEN,
OVERDUE
);
OrderBaseResponse overdueResp = bizOrderStatusService.overdue(overdueReq);
System.out.println(overdueResp);
Assert.assertNull(overdueResp.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), overdueResp.getResultCode());
// f. 從逾期到部分還款
BizOrderStatusRequest partRepayReq = genStatusRequestFromCondition(bizOrderId,
BizOrderOperationTypeEnum.REPAY,
OVERDUE,
REPAID // 置為還款中砂心,必傳
);
partRepayReq.getBizOrderStatusModel().setEffectAmount(2.5);
OrderBaseResponse partRepayResp = bizOrderStatusService.repay(partRepayReq);
System.out.println(partRepayResp);
Assert.assertNull(partRepayResp.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), partRepayResp.getResultCode());
// g. 校驗(yàn)狀態(tài)是否為部分還款
SingleOrderResponse queryResponse = bizOrderQueryService.findOrderByBizOrderId(bizOrderId);
Assert.assertNull(queryResponse.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), queryResponse.getResultCode());
Assert.assertEquals(BizOrderStatusEnum.REPAID.getStatus(), queryResponse.getOrderModel().getOrderStatus());
}
從放款到全部還款,不存在逾期及部分還款
/**
* 從還款到最終訂單結(jié)束
*
* 測(cè)試順序 --- 2
*
* @return
* @throws OspException
*/
@Test
public void testFromRepaidToSuccess() throws OspException {
// a. 創(chuàng)建已簽約接口
String bizOrderId = createSignOrder();
// b.構(gòu)造放款請(qǐng)求
BizOrderStatusRequest loanReq = genStatusRequestFromCondition(bizOrderId,
BizOrderOperationTypeEnum.LOAN,
SIGNED,
null // 可填LOANING蛇耀,也可不填辩诞,會(huì)有默認(rèn)值。但是不能填別的狀態(tài)纺涤,狀態(tài)機(jī)會(huì)禁止隨意改變狀態(tài)
);
OrderBaseResponse response = bizOrderStatusService.loan(loanReq);
System.out.println(response);
Assert.assertNull(response.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), response.getResultCode());
// c. 放款成功請(qǐng)求
BizOrderStatusRequest loanSuccReq = genStatusRequestFromCondition(bizOrderId,
BizOrderOperationTypeEnum.LOAN, // 放款失敗译暂,直接關(guān)單
LOANING,
LOANED // 可不傳抠忘,會(huì)默認(rèn)
);
OrderBaseResponse loanSuccResp = bizOrderStatusService.loanSucc(loanSuccReq);
System.out.println(loanSuccResp);
Assert.assertNull(loanSuccResp.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), loanSuccResp.getResultCode());
// d.生成賬單請(qǐng)求
BizOrderStatusRequest genBillReq = genStatusRequestFromCondition(bizOrderId,
BizOrderOperationTypeEnum.GEN_BILL,
LOANED,
null // 可以不傳,也可以傳BILL_BILL
);
OrderBaseResponse genBillResp = bizOrderStatusService.genBill(genBillReq);
System.out.println(genBillResp);
Assert.assertNull(genBillResp.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), genBillResp.getResultCode());
// e. 全部還款
BizOrderStatusRequest repayReq = genStatusRequestFromCondition(bizOrderId,
BizOrderOperationTypeEnum.REPAY,
BILL_GEN,
REPAID // 置為全部還款外永,必傳
);
repayReq.getBizOrderStatusModel().setEffectAmount(6.5);
OrderBaseResponse repayResp = bizOrderStatusService.repay(repayReq);
System.out.println(repayResp);
Assert.assertNull(repayResp.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), repayResp.getResultCode());
// f. 從還款到銷(xiāo)賬
BizOrderStatusRequest successReq = genStatusRequestFromCondition(bizOrderId,
BizOrderOperationTypeEnum.SUCCESS,
REPAID,
SUCCESS // 置為全部還款崎脉,必傳
);
OrderBaseResponse succResp = bizOrderStatusService.succ(successReq);
System.out.println(succResp);
Assert.assertNull(succResp.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), succResp.getResultCode());
// g. 校驗(yàn)狀態(tài)是否為全部還款
SingleOrderResponse queryResponse = bizOrderQueryService.findOrderByBizOrderId(bizOrderId);
Assert.assertNull(queryResponse.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), queryResponse.getResultCode());
Assert.assertEquals(BizOrderStatusEnum.SUCCESS.getStatus(), queryResponse.getOrderModel().getOrderStatus());
}
構(gòu)造訂單變化請(qǐng)求,私有方法
/**
* 從創(chuàng)建訂單開(kāi)始構(gòu)造狀態(tài)變化請(qǐng)求
*
* @param initStatus
* @param operationTypeEnum
* @param curStatus
* @param targetStatus
* @return
* @throws OspException
*/
private BizOrderStatusRequest genStatusRequestFromCreate(BizOrderStatusEnum initStatus,
BizOrderOperationTypeEnum operationTypeEnum,
BizOrderStatusEnum curStatus,
BizOrderStatusEnum targetStatus
) throws OspException {
BizOrderStatusRequest statusRequest = new BizOrderStatusRequest();
statusRequest.setBizCode(createOrder(initStatus));
statusRequest.setOperationType(operationTypeEnum.getOperationType());
statusRequest.setSourceId(IDGenerater.getUniId());
BizOrderStatusModel statusModel = new BizOrderStatusModel();
statusModel.setBizType(BizOrderBizTypeEnum.EMPLOAN.getOrderBizType());
statusModel.setBizOrderId(statusRequest.getBizCode());
statusModel.setCurrentOrderStatus(curStatus.getStatus());
if (null != targetStatus) {
statusModel.setTargetOrderStatus(targetStatus.getStatus());
}
statusRequest.setBizOrderStatusModel(statusModel);
statusRequest.setCallSystem("vip-2");
return statusRequest;
}
從制定狀態(tài) 構(gòu)造 狀態(tài)變化請(qǐng)求
/**
* 從指定條件構(gòu)造狀態(tài)變化請(qǐng)求
*
* @param bizOrderId
* @param operationTypeEnum
* @param currentStatus
* @param targetStatus
* @return
*/
private BizOrderStatusRequest genStatusRequestFromCondition(String bizOrderId,
BizOrderOperationTypeEnum operationTypeEnum,
BizOrderStatusEnum currentStatus,
BizOrderStatusEnum targetStatus) {
BizOrderStatusRequest statusRequest = new BizOrderStatusRequest();
statusRequest.setBizCode(bizOrderId);
statusRequest.setOperationType(operationTypeEnum.getOperationType());
statusRequest.setSourceId(IDGenerater.getUniId());
BizOrderStatusModel statusModel = new BizOrderStatusModel();
statusModel.setBizType(BizOrderBizTypeEnum.EMPLOAN.getOrderBizType());
statusModel.setBizOrderId(statusRequest.getBizCode());
statusModel.setCurrentOrderStatus(currentStatus.getStatus());
if (null != targetStatus) {
statusModel.setTargetOrderStatus(targetStatus.getStatus());
}
statusRequest.setBizOrderStatusModel(statusModel);
statusRequest.setCallSystem("wyd-new");
return statusRequest;
}
/**
* 創(chuàng)建訂單伯顶,并入庫(kù)
*
* @param targetStatus
* @return
* @throws OspException
*/
private String createOrder(BizOrderStatusEnum targetStatus) throws OspException {
init();
BizOrderCreateRequest createRequest = new BizOrderCreateRequest();
createRequest.setBizCode("001"); // 創(chuàng)建時(shí)指定傳輸內(nèi)容001
createRequest.setSourceId(IDGenerater.getUniId());
createRequest.setOperationType(BizOrderOperationTypeEnum.CREATE_ORDER.getOperationType());
createRequest.setCallSystem("vip-pay");
BizOrderCreateModel createModel = new BizOrderCreateModel();
createRequest.setBizOrderCreateModel(createModel);
createModel.setUserId(131415161788l);
createModel.setMerchantId(8l);
createModel.setContractId(3l);
createModel.setProdId(20l);
// createModel.setProdCode(); 可為空
createModel.setBizType(BizOrderBizTypeEnum.EMPLOAN.getOrderBizType()); // 無(wú)憂(yōu)貸
createModel.setOrderStatus(targetStatus.getStatus());
createModel.setOrderSrc("h6");
BizOrderExtendsCreateModel extendsModel = new BizOrderExtendsCreateModel();
createRequest.setExtendsCreateModel(extendsModel);
extendsModel.setUserRealname("張小強(qiáng)");
if (log.isDebugEnabled()) {
log.debug("debug log level");
}
// 創(chuàng)建訂單
BizOrderCreateResponse response = bizOrderCreateService.create(createRequest);
System.out.println(response);
Assert.assertNull(response.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), response.getResultCode());
SingleOrderResponse queryResponse = bizOrderQueryService.findOrderByBizOrderId(response.getBizOrderId());
Assert.assertNull(queryResponse.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), queryResponse.getResultCode());
Assert.assertEquals(targetStatus.getStatus(), queryResponse.getOrderModel().getOrderStatus());
return response.getBizOrderId();
}
/**
* 構(gòu)造已簽約完成的訂單囚灼,并返回訂單ID
*
* @return
* @throws OspException
*/
private String createSignOrder() throws OspException {
// a. 創(chuàng)建狀態(tài)為WAIT_BORROW的訂單
BizOrderCreateRequest createRequest = wrapCreateRequest(BizOrderStatusEnum.WAIT_BORROW);
BizOrderCreateResponse response = bizOrderCreateService.create(createRequest);
System.out.println(response);
Assert.assertNull(response.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), response.getResultCode());
SingleOrderResponse queryResponse1 = bizOrderQueryService.findOrderByBizOrderId(response.getBizOrderId());
BizOrderModel bizOrderModel = queryResponse1.getOrderModel();
// a.1 構(gòu)造審核成功對(duì)應(yīng)請(qǐng)求
BizOrderStatusRequest inDealRiskAuditSuccReq = genStatusRequestFromCondition(response.getBizOrderId(),
BizOrderOperationTypeEnum.AUDIT,
WAIT_BORROW,
WAIT_SIGN);
OrderBaseResponse auditResp = bizOrderStatusService.audit(inDealRiskAuditSuccReq);
System.out.println(auditResp);
Assert.assertNull(auditResp.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), auditResp.getResultCode());
// b. 簽約,處理簽約過(guò)程中的請(qǐng)求數(shù)據(jù)祭衩,這里最好把所有數(shù)據(jù)都傳入灶体,數(shù)據(jù)一定要做校驗(yàn)的
// b.1 最外層數(shù)據(jù)
BizOrderCreateRequest bizOrderCreateRequest = new BizOrderCreateRequest();
bizOrderCreateRequest.setBizCode(response.getBizOrderId());
bizOrderCreateRequest.setOperationType(BizOrderOperationTypeEnum.SIGN.getOperationType());
bizOrderCreateRequest.setSourceId(IDGenerater.getUniId());
bizOrderCreateRequest.setCallSystem("wyd");
// b.2 訂單主數(shù)據(jù)
BizOrderCreateModel createModel = new BizOrderCreateModel();
createModel.setBizOrderId(bizOrderCreateRequest.getBizCode());
// createModel.setOrderStatus(BizOrderStatusEnum.SIGNED.getStatus());
createModel.setBizType(BizOrderBizTypeEnum.EMPLOAN.getOrderBizType());
createModel.setUserId(bizOrderModel.getUserId());
createModel.setContractId(bizOrderModel.getContractId());
createModel.setMerchantId(bizOrderModel.getMerchantId());
createModel.setProdId(bizOrderModel.getProdId());
createModel.setProdCode(bizOrderModel.getProdCode());
// b.3 資金相關(guān) --- 注意,資金信息需要保持平衡
createModel.setAmount(14.5);
createModel.setRealAmount(10.89);
createModel.setRepayType("等額本金");
createModel.setScene("個(gè)人消費(fèi)");
createModel.setRate(0.0035);
createModel.setRateType(RateTypeEnum.DAY.getRateType());
createModel.setOverdueRate(0.007);
createModel.setOverdueRateType(RateTypeEnum.DAY.getRateType());
createModel.setLoanStartDate(Date.from(Instant.now()));
createModel.setLoanEndDate(Date.from(Instant.now().plus(30, ChronoUnit.DAYS)));
bizOrderCreateRequest.setBizOrderCreateModel(createModel);
// b.4 上傳貸款合同 -- 可省略掐暮,本次在測(cè)試蝎抽,構(gòu)造全量數(shù)據(jù)
BizOrderLoanContractUploadModel model1 = new BizOrderLoanContractUploadModel();
model1.setContractNo("ab0011005");
model1.setContractContent("https://www.vipshop.com/files/contentab0011aa00.pdf");
BizOrderLoanContractUploadModel model2 = new BizOrderLoanContractUploadModel();
model2.setContractNo("abc000111");
model2.setContractContent("http://sina.com/fileserver/contentabc000111.txt");
bizOrderCreateRequest.setContractModels(Lists.newArrayList(
model1, model2
));
// b.5 活動(dòng)信息 -- 可不傳,本次測(cè)試路克,構(gòu)造全量數(shù)據(jù)
BizOrderActivityCreateModel activity1 = new BizOrderActivityCreateModel();
activity1.setActivityCode("ac001001");
activity1.setActivityName("優(yōu)惠券");
activity1.setActivityType("COUPON");
activity1.setActivitySrc("唯品會(huì)419大促金融分會(huì)館");
activity1.setCouponAmount(1.22);
activity1.setEffectTime(Date.from(Instant.now().plus(-1, ChronoUnit.DAYS)));
activity1.setSerialNo("c293573272572385782937592759237");
BizOrderActivityCreateModel activity2 = new BizOrderActivityCreateModel();
activity2.setActivitySrc("唯品會(huì)419大促金融沖擊波");
activity2.setActivityType("DISCOUNT");
activity2.setActivityName("活動(dòng)優(yōu)惠立減 1%利息");
activity2.setActivityCode("DS00120101");
activity2.setDiscountRate(0.01);
activity2.setDiscountRateSrc("唯品會(huì)");
activity2.setDiscountRateType(RateTypeEnum.DAY.getRateType());
activity2.setSerialNo("DS0010101010438503038930894");
bizOrderCreateRequest.setActivityModels(Lists.newArrayList(
activity1, activity2
));
// b.6 放款渠道
BizOrderChannelCreateModel channelCreateModel1 = new BizOrderChannelCreateModel();
channelCreateModel1.setChannelNo("CASH0001");
channelCreateModel1.setChannelAmount(5);
channelCreateModel1.setChannelName("自有資金");
BizOrderChannelCreateModel channelCreateModel2 = new BizOrderChannelCreateModel();
channelCreateModel2.setChannelNo("CASH001-BANK");
channelCreateModel2.setChannelAmount(5.89);
channelCreateModel2.setChannelName("1號(hào)銀行渠道");
bizOrderCreateRequest.setChannelModels(Lists.newArrayList(channelCreateModel1, channelCreateModel2));
// c.6 擴(kuò)展信息更新
BizOrderExtendsCreateModel extendsCreateModel = new BizOrderExtendsCreateModel();
extendsCreateModel.setRepayDate(Date.from(Instant.now().plus(-15, ChronoUnit.DAYS)));
extendsCreateModel.setGoodsName("update-ada");
bizOrderCreateRequest.setExtendsCreateModel(extendsCreateModel);
// c. 簽約
OrderBaseResponse signResp = bizOrderCreateService.createFromSign(bizOrderCreateRequest);
System.out.println(signResp);
Assert.assertNull(signResp.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), signResp.getResultCode());
// d. 校驗(yàn)
SingleOrderResponse queryResponse = bizOrderQueryService.findOrderByBizOrderId(response.getBizOrderId());
Assert.assertNull(queryResponse.getMsg());
Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), queryResponse.getResultCode());
Assert.assertEquals(BizOrderStatusEnum.SIGNED.getStatus(), queryResponse.getOrderModel().getOrderStatus());
return response.getBizOrderId();
}
private BizOrderCreateRequest wrapCreateRequest(BizOrderStatusEnum targetStatus) {
init();
BizOrderCreateRequest createRequest = new BizOrderCreateRequest();
createRequest.setBizCode("001"); // 創(chuàng)建時(shí)指定傳輸內(nèi)容001
createRequest.setSourceId(IDGenerater.getUniId());
createRequest.setOperationType(BizOrderOperationTypeEnum.CREATE_ORDER.getOperationType());
createRequest.setCallSystem("vip-pay-2");
BizOrderCreateModel createModel = new BizOrderCreateModel();
createRequest.setBizOrderCreateModel(createModel);
createModel.setUserId(131415161788l);
createModel.setMerchantId(8l);
createModel.setContractId(3l);
createModel.setProdId(20l);
// createModel.setProdCode(); 可為空
createModel.setBizType(BizOrderBizTypeEnum.EMPLOAN.getOrderBizType()); // 無(wú)憂(yōu)貸
createModel.setOrderStatus(targetStatus.getStatus());
createModel.setOrderSrc("vipfins-ios");
BizOrderExtendsCreateModel extendsModel = new BizOrderExtendsCreateModel();
createRequest.setExtendsCreateModel(extendsModel);
extendsModel.setUserRealname("張小強(qiáng)");
// 10天之后還款
extendsModel.setRepayDate(Date.from(Instant.now().plus(10, ChronoUnit.DAYS)));
if (log.isDebugEnabled()) {
log.debug("debug log level");
}
return createRequest;
}
這里使用junit樟结,模擬整個(gè)訂單的生命周期,發(fā)送對(duì)應(yīng)的事件event驅(qū)動(dòng)整個(gè)過(guò)程精算。