思路:
1. 定义一个数组,用来存放节点序号
2. 根据条件决定走哪些节点(节点的值可以改成可动态配置的)
3. 声明一个json存放结果,以及节点执行的结果
4.进行for循环,进行多个节点的结果处理。如果其中有一个节点执行失败,则终止流程。
5.进行最终的处理,通过json里面判断是否有失败标志判断执行结果。
public Response executeNotarizationBook(Domain applyNorDomain, String fqBusId, byte assuranceFlag) {
String loanNo = applyNorDomain.getLoanNo();
Response response = new Response();
NotarzationExecute record = this.getRecordOrSave(loanNo, response);
if(record == null){
return response;
}
int[] exePoint = {};
// 进行执行公证
if(assuranceFlag == 0){
// 非融担
exePoint = new int[]{1,2};
}else if(assuranceFlag == 1){
// 融担
exePoint = new int[]{3,4,5};
}else{
log.info(loanNo + "数据状态不正确:" + assuranceFlag);
response.fail("", "数据状态不正确");
}
JSONObject pointJson = new JSONObject();
try {
for (int point : exePoint) {
switch (point){
case 1:
// 电子凭证 & 上传到warehouse
String transRecordId = record.getTransRecordId();
if(StringUtils.isNotBlank(transRecordId)){
pointJson.put(TRANS_RECORD_WAREHOUSE_FILE, transRecordId);
}else {
createElectricRecord(loanNo, pointJson);
}
break;
case 2:
// TODO 罚息利率计算 & 欠付利息计算(要执行的方法)
break;
case 3:
// 是否代偿(要执行的方法)
break;
case 4:
// 代偿数据获取(代偿时间、代偿金额)(要执行的方法)
break;
case 5:
// 电子交易记录上传(要执行的方法)
break;
}
if(pointJson.containsKey(FAIL) && pointJson.getBoolean(FAIL)){
break;
}
}
if(!pointJson.containsKey(FAIL)){
log.info("{}开始提交请求到", loanNo);
sendApplyNotarizationRequestToThird(response, pointJson);
}
} catch (Exception e) {
log.error("流程异常,loanNo={}",loanNo, e);
setFailFlag(pointJson, "execute_fail", "流程异常");
}finally {
// 修改记录
updateExeRecord(pointJson, record, loanNo);
if(pointJson.containsKey(FAIL)){
response.fail(pointJson.getString(FAIL_CODE), pointJson.getString(FAIL_MSG));
}
}
return response;
}