Implement credit parse result polling and sentinel handling
This commit is contained in:
@@ -41,10 +41,51 @@ class CreditDebugService:
|
||||
return self.build_error_response("ERR_10002")
|
||||
return None
|
||||
|
||||
def validate_result_request(
|
||||
self,
|
||||
serial_num: Optional[str],
|
||||
org_code: Optional[str],
|
||||
run_type: Optional[str],
|
||||
):
|
||||
if not serial_num:
|
||||
return self.build_missing_param_response("serialNum")
|
||||
if not org_code:
|
||||
return self.build_missing_param_response("orgCode")
|
||||
if not run_type:
|
||||
return self.build_missing_param_response("runType")
|
||||
return None
|
||||
|
||||
def build_initiate_success_response(self, serial_num: str) -> dict:
|
||||
message = f"文件写入成功,流水号为: {serial_num}"
|
||||
return {
|
||||
"success": True,
|
||||
"code": 10000,
|
||||
"data": {
|
||||
"mappingOutputFields": {
|
||||
"message": message,
|
||||
},
|
||||
"reasonMessage": "Running successfully",
|
||||
"outputFields": {
|
||||
"C_S_ZXJXMESSAGE": message,
|
||||
},
|
||||
"procCode": "999000",
|
||||
"bizId": serial_num,
|
||||
"reasonCode": 200,
|
||||
"status": 1,
|
||||
},
|
||||
}
|
||||
|
||||
def build_success_response(self, payload: dict) -> dict:
|
||||
response = copy.deepcopy(self.templates["success"])
|
||||
response["payload"] = payload
|
||||
return self.wrap_mapping_response(response)
|
||||
return self.wrap_mapping_response(response, status=1, reason_code=200)
|
||||
|
||||
def build_result_not_found_response(self, serial_num: str) -> dict:
|
||||
return self.wrap_mapping_response({
|
||||
"message": f"征信解析结果未返回: {serial_num}",
|
||||
"payload": None,
|
||||
"status_code": "ERR_99999",
|
||||
}, status=0, reason_code=500, reason_message=f"征信解析结果未返回: {serial_num}")
|
||||
|
||||
def build_missing_param_response(self, param_name: str) -> dict:
|
||||
response = self.build_error_response("ERR_99999")
|
||||
@@ -53,7 +94,8 @@ class CreditDebugService:
|
||||
return response
|
||||
|
||||
def build_error_response(self, error_code: str) -> dict:
|
||||
return self.wrap_mapping_response(copy.deepcopy(self.templates["errors"][error_code]))
|
||||
return self.wrap_mapping_response(copy.deepcopy(self.templates["errors"][error_code]),
|
||||
status=0, reason_code=500)
|
||||
|
||||
def detect_error_marker(self, model: str) -> Optional[str]:
|
||||
matched = re.search(r"error_(ERR_\d+)", model)
|
||||
@@ -64,12 +106,21 @@ class CreditDebugService:
|
||||
return error_code
|
||||
return None
|
||||
|
||||
def wrap_mapping_response(self, mapping_output_fields: dict) -> dict:
|
||||
def wrap_mapping_response(
|
||||
self,
|
||||
mapping_output_fields: dict,
|
||||
status: int = 0,
|
||||
reason_code: int = 500,
|
||||
reason_message: Optional[str] = None,
|
||||
) -> dict:
|
||||
return {
|
||||
"success": True,
|
||||
"code": 10000,
|
||||
"data": {
|
||||
"mappingOutputFields": mapping_output_fields,
|
||||
"reasonMessage": reason_message or mapping_output_fields.get("message"),
|
||||
"reasonCode": reason_code,
|
||||
"status": status,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user