46c738c0 by 冯轩

Merge branch 'hotfix/2025-02' into feature/uat-tmp

2 parents 1c3675c2 775d6ee5
......@@ -3776,6 +3776,7 @@ def fsm_compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=
compare_log.info('[fsm thread]')
#pool = ThreadPoolExecutor(max_workers=6, thread_name_prefix="fsm_thread_")
try:
# 这个try不生效
pool.submit(fsm_compare_thread, application_id, application_entity, uniq_seq, ocr_res_id, is_ca, is_cms)
except Exception as e:
compare_log.info('[fsm thread fail] [error={0}]'.format(traceback.format_exc()))
......@@ -3783,37 +3784,40 @@ def fsm_compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=
def fsm_compare_thread(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True, is_cms=False):
compare_log.info('{0} [receive fsm task] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] [is_ca={5}] '
try:
compare_log.info('{0} [receive fsm task] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] [is_ca={5}] '
'[is_cms={6}]'.format(log_base, application_entity, application_id, uniq_seq, ocr_res_id,
is_ca, is_cms))
# 查看此订单号下是否有未完成的文件,如果有,等1分钟
try:
doc_wait_file_class = HILDoc if application_entity == consts.HIL_PREFIX else AFCDoc
doc_wait_file_result = doc_wait_file_class.objects.filter(application_id=application_id, status=1).first()
compare_log.info('doc_wait_file_result:{0}'.format(doc_wait_file_result))
compare_log.info('{0} [comparison unfinished file check] [entity={1}] [id={2}] [doc_wait_file_result={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result))
except Exception as e:
doc_wait_file_result = None
compare_log.info('[get doc_wait_file_result fail] [error={0}]'.format(traceback.format_exc()))
if doc_wait_file_result is not None:
# 实时查询延迟时间
try:
delay_time_config = Configs.objects.filter(id=4).first()
if delay_time_config is not None and delay_time_config.value is not None and delay_time_config.value.isdigit():
delay_time = delay_time_config.value
else:
delay_time = 0
except Exception as e:
delay_time = 0
compare_log.info('[get delay_time_config fail] [error={0}]'.format(traceback.format_exc()))
compare_log.info('delay_time:{0}'.format(delay_time))
compare_log.info('{0} [comparison unfinished file wait delay_time start] [entity={1}] [id={2}] [doc_id={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result.id))
try:
time.sleep(int(delay_time))
doc_wait_file_class = HILDoc if application_entity == consts.HIL_PREFIX else AFCDoc
doc_wait_file_result = doc_wait_file_class.objects.filter(application_id=application_id, status=1).first()
compare_log.info('doc_wait_file_result:{0}'.format(doc_wait_file_result))
compare_log.info('{0} [comparison unfinished file check] [entity={1}] [id={2}] [doc_wait_file_result={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result))
except Exception as e:
compare_log.info('[sleep error] [error={0}]'.format(traceback.format_exc()))
compare_log.info('{0} [comparison unfinished file wait delay_time end] [entity={1}] [id={2}] [doc_id={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result.id))
doc_wait_file_result = None
compare_log.info('[get doc_wait_file_result fail] [error={0}]'.format(traceback.format_exc()))
if doc_wait_file_result is not None:
# 实时查询延迟时间
try:
delay_time_config = Configs.objects.filter(id=4).first()
if delay_time_config is not None and delay_time_config.value is not None and delay_time_config.value.isdigit():
delay_time = delay_time_config.value
else:
delay_time = 0
except Exception as e:
delay_time = 0
compare_log.info('[get delay_time_config fail] [error={0}]'.format(traceback.format_exc()))
compare_log.info('delay_time:{0}'.format(delay_time))
compare_log.info('{0} [comparison unfinished file wait delay_time start] [entity={1}] [id={2}] [doc_id={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result.id))
try:
time.sleep(int(delay_time))
except Exception as e:
compare_log.info('[sleep error] [error={0}]'.format(traceback.format_exc()))
compare_log.info('{0} [comparison unfinished file wait delay_time end] [entity={1}] [id={2}] [doc_id={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result.id))
except Exception as e:
compare_log.info('[fsm_compare_thread error] [error={0}]'.format(traceback.format_exc()))
# 调用java fsm 比对流程接口(http)
......@@ -3861,6 +3865,7 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True
compare_log.info('[non fsm thread]')
#pool = ThreadPoolExecutor(max_workers=6, thread_name_prefix="non_fsm_thread_")
try:
# 这个try不生效
pool.submit(compare_thread, application_id, application_entity, uniq_seq, ocr_res_id, is_ca, is_cms)
except Exception as e:
compare_log.info('[non fsm thread fail] [error={0}]'.format(traceback.format_exc()))
......@@ -3869,120 +3874,121 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True
def compare_thread(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True, is_cms=False):
# POS: application_id, application_entity, uniq_seq, None
# OCR: application_id, business_type(application_entity), None, ocr_res_id
compare_log.info('{0} [receive task] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] [is_ca={5}] '
try:
compare_log.info('{0} [receive task] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] [is_ca={5}] '
'[is_cms={6}]'.format(log_base, application_entity, application_id, uniq_seq, ocr_res_id,
is_ca, is_cms))
# 根据application_id查找最新的比对信息,如果没有,结束
if is_ca:
comparison_class = HILComparisonInfo if application_entity == consts.HIL_PREFIX else AFCComparisonInfo
else:
if application_entity == consts.HIL_PREFIX:
comparison_class = HILSECMSInfo if is_cms else HILSEComparisonInfo
# 根据application_id查找最新的比对信息,如果没有,结束
if is_ca:
comparison_class = HILComparisonInfo if application_entity == consts.HIL_PREFIX else AFCComparisonInfo
else:
comparison_class = AFCSECMSInfo if is_cms else AFCSEComparisonInfo
last_obj = comparison_class.objects.filter(application_id=application_id).last()
if last_obj is None:
compare_log.info('{0} [comparison info empty] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] '
'[is_ca={5}] [is_cms]={6}'.format(log_base, application_entity, application_id, uniq_seq,
ocr_res_id, is_ca, is_cms))
return
# 根据application_id查找OCR累计结果指定license字段,如果没有,结束
if is_ca:
result_class = HILOCRResult if application_entity == consts.HIL_PREFIX else AFCOCRResult
ca_ocr_res_dict = dict()
else:
result_class = HILSEOCRResult if application_entity == consts.HIL_PREFIX else AFCSEOCRResult
ca_result_class = HILOCRResult if application_entity == consts.HIL_PREFIX else AFCOCRResult
# if ocr_res_id is None:
ca_ocr_res_dict = ca_result_class.objects.filter(application_id=application_id).values(
*consts.CA_ADD_COMPARE_FIELDS).first()
# else:
# ca_ocr_res_dict = ca_result_class.objects.filter(id=ocr_res_id).values(
# *consts.CA_ADD_COMPARE_FIELDS).first()
if ocr_res_id is None:
ocr_res_dict = result_class.objects.filter(application_id=application_id).values(*consts.COMPARE_FIELDS).first()
else:
ocr_res_dict = result_class.objects.filter(id=ocr_res_id).values(*consts.COMPARE_FIELDS).first()
if ocr_res_dict is None:
compare_log.info('{0} [ocr info empty] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] '
'[is_ca={5}] [is_cms]={6}'.format(log_base, application_entity, application_id,
uniq_seq, ocr_res_id, is_ca, is_cms))
return
# 查看此订单号下是否有未完成的文件,如果有,等?分钟
try:
doc_wait_file_class = HILDoc if application_entity == consts.HIL_PREFIX else AFCDoc
doc_wait_file_result = doc_wait_file_class.objects.filter(application_id=application_id, status=1).first()
compare_log.info('doc_wait_file_result:{0}'.format(doc_wait_file_result))
compare_log.info('{0} [comparison unfinished file check] [entity={1}] [id={2}] [doc_wait_file_result={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result))
except Exception as e:
doc_wait_file_result = None
compare_log.info('[get doc_wait_file_result fail] [error={0}]'.format(traceback.format_exc()))
if doc_wait_file_result is not None:
# 实时查询延迟时间
try:
delay_time_config = Configs.objects.filter(id=4).first()
if delay_time_config is not None and delay_time_config.value is not None and delay_time_config.value.isdigit():
delay_time = delay_time_config.value
if application_entity == consts.HIL_PREFIX:
comparison_class = HILSECMSInfo if is_cms else HILSEComparisonInfo
else:
delay_time = 0
except Exception as e:
delay_time = 0
compare_log.info('[get delay_time_config fail] [error={0}]'.format(traceback.format_exc()))
compare_log.info('delay_time:{0}'.format(delay_time))
compare_log.info('{0} [comparison unfinished file wait delay_time start] [entity={1}] [id={2}] [doc_id={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result.id))
comparison_class = AFCSECMSInfo if is_cms else AFCSEComparisonInfo
last_obj = comparison_class.objects.filter(application_id=application_id).last()
if last_obj is None:
compare_log.info('{0} [comparison info empty] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] '
'[is_ca={5}] [is_cms]={6}'.format(log_base, application_entity, application_id, uniq_seq,
ocr_res_id, is_ca, is_cms))
return
# 根据application_id查找OCR累计结果指定license字段,如果没有,结束
if is_ca:
result_class = HILOCRResult if application_entity == consts.HIL_PREFIX else AFCOCRResult
ca_ocr_res_dict = dict()
else:
result_class = HILSEOCRResult if application_entity == consts.HIL_PREFIX else AFCSEOCRResult
ca_result_class = HILOCRResult if application_entity == consts.HIL_PREFIX else AFCOCRResult
# if ocr_res_id is None:
ca_ocr_res_dict = ca_result_class.objects.filter(application_id=application_id).values(
*consts.CA_ADD_COMPARE_FIELDS).first()
# else:
# ca_ocr_res_dict = ca_result_class.objects.filter(id=ocr_res_id).values(
# *consts.CA_ADD_COMPARE_FIELDS).first()
if ocr_res_id is None:
ocr_res_dict = result_class.objects.filter(application_id=application_id).values(*consts.COMPARE_FIELDS).first()
else:
ocr_res_dict = result_class.objects.filter(id=ocr_res_id).values(*consts.COMPARE_FIELDS).first()
if ocr_res_dict is None:
compare_log.info('{0} [ocr info empty] [entity={1}] [id={2}] [uniq_seq={3}] [ocr_res_id={4}] '
'[is_ca={5}] [is_cms]={6}'.format(log_base, application_entity, application_id,
uniq_seq, ocr_res_id, is_ca, is_cms))
return
# 查看此订单号下是否有未完成的文件,如果有,等?分钟
try:
time.sleep(int(delay_time))
doc_wait_file_class = HILDoc if application_entity == consts.HIL_PREFIX else AFCDoc
doc_wait_file_result = doc_wait_file_class.objects.filter(application_id=application_id, status=1).first()
compare_log.info('doc_wait_file_result:{0}'.format(doc_wait_file_result))
compare_log.info('{0} [comparison unfinished file check] [entity={1}] [id={2}] [doc_wait_file_result={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result))
except Exception as e:
compare_log.info('[sleep error] [error={0}]'.format(traceback.format_exc()))
compare_log.info('{0} [comparison unfinished file wait delay_time end] [entity={1}] [id={2}] [doc_id={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result.id))
doc_wait_file_result = None
compare_log.info('[get doc_wait_file_result fail] [error={0}]'.format(traceback.format_exc()))
if doc_wait_file_result is not None:
# 实时查询延迟时间
try:
delay_time_config = Configs.objects.filter(id=4).first()
if delay_time_config is not None and delay_time_config.value is not None and delay_time_config.value.isdigit():
delay_time = delay_time_config.value
else:
delay_time = 0
except Exception as e:
delay_time = 0
compare_log.info('[get delay_time_config fail] [error={0}]'.format(traceback.format_exc()))
compare_log.info('delay_time:{0}'.format(delay_time))
compare_log.info('{0} [comparison unfinished file wait delay_time start] [entity={1}] [id={2}] [doc_id={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result.id))
try:
time.sleep(int(delay_time))
except Exception as e:
compare_log.info('[sleep error] [error={0}]'.format(traceback.format_exc()))
compare_log.info('{0} [comparison unfinished file wait delay_time end] [entity={1}] [id={2}] [doc_id={3}]'.format(log_base, application_entity, application_id, doc_wait_file_result.id))
if is_ca:
ca_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict)
else:
id_res_list = []
for field_name in consts.CA_ADD_COMPARE_FIELDS:
if field_name == consts.IC_OCR_FIELD:
id_res_list.append(ca_ocr_res_dict.get(field_name) if isinstance(ca_ocr_res_dict, dict) else None)
id_res_list.append(ocr_res_dict.get(field_name))
if isinstance(ca_ocr_res_dict, dict) and isinstance(ca_ocr_res_dict.get(field_name), str):
tmp_ca_result = json.loads(ca_ocr_res_dict.get(field_name))
if isinstance(ocr_res_dict.get(field_name), str):
tmp_se_result = json.loads(ocr_res_dict.get(field_name))
tmp_ca_result.extend(tmp_se_result)
ocr_res_dict[field_name] = json.dumps(tmp_ca_result)
# auto settlement
auto_class = HILAutoSettlement if application_entity == consts.HIL_PREFIX else AFCAutoSettlement
auto_obj = auto_class.objects.filter(application_id=application_id, on_off=True).first()
bank_class = HILbankVerification if application_entity == consts.HIL_PREFIX else AFCbankVerification
ignore_bank = bank_class.objects.filter(application_id=application_id, on_off=True).exists()
data_source = ''
if application_entity == consts.AFC_PREFIX:
doc_obj = AFCDoc.objects.filter(application_id=application_id, document_name__icontains='电子签署-车辆抵押贷款合同').last()
if doc_obj is not None:
data_source = doc_obj.data_source
compare_log.info('{0} [get data_source] [id={1}] [data_source={2}]]'.format(
log_base, application_id, data_source))
if auto_obj is not None:
auto_result = se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict, auto_obj, ignore_bank, id_res_list, data_source)
if is_ca:
ca_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict)
else:
auto_result = None
id_res_list = []
for field_name in consts.CA_ADD_COMPARE_FIELDS:
if field_name == consts.IC_OCR_FIELD:
id_res_list.append(ca_ocr_res_dict.get(field_name) if isinstance(ca_ocr_res_dict, dict) else None)
id_res_list.append(ocr_res_dict.get(field_name))
if isinstance(ca_ocr_res_dict, dict) and isinstance(ca_ocr_res_dict.get(field_name), str):
tmp_ca_result = json.loads(ca_ocr_res_dict.get(field_name))
if isinstance(ocr_res_dict.get(field_name), str):
tmp_se_result = json.loads(ocr_res_dict.get(field_name))
tmp_ca_result.extend(tmp_se_result)
ocr_res_dict[field_name] = json.dumps(tmp_ca_result)
# auto settlement
auto_class = HILAutoSettlement if application_entity == consts.HIL_PREFIX else AFCAutoSettlement
auto_obj = auto_class.objects.filter(application_id=application_id, on_off=True).first()
bank_class = HILbankVerification if application_entity == consts.HIL_PREFIX else AFCbankVerification
ignore_bank = bank_class.objects.filter(application_id=application_id, on_off=True).exists()
data_source = ''
if application_entity == consts.AFC_PREFIX:
doc_obj = AFCDoc.objects.filter(application_id=application_id, document_name__icontains='电子签署-车辆抵押贷款合同').last()
if doc_obj is not None:
data_source = doc_obj.data_source
compare_log.info('{0} [get data_source] [id={1}] [data_source={2}]]'.format(
log_base, application_id, data_source))
if auto_obj is not None:
auto_result = se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict, auto_obj, ignore_bank, id_res_list, data_source)
else:
auto_result = None
full_result = se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict, is_cms, auto_result, ignore_bank, id_res_list, data_source)
if auto_obj is not None:
try:
auto_obj.ocr_whole_result_pass = full_result
auto_obj.save()
compare_log.info('{0} [Auto SE] [result save success] [entity={1}] [id={2}] [ocr_res_id={3}]'.format(
log_base, application_entity, application_id, ocr_res_id))
except Exception as e:
compare_log.error('{0} [Auto SE] [result save error] [entity={1}] [id={2}] [ocr_res_id={3}] '
'[error={4}]'.format(log_base, application_entity, application_id, ocr_res_id,
traceback.format_exc()))
full_result = se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict, is_cms, auto_result, ignore_bank, id_res_list, data_source)
if auto_obj is not None:
try:
auto_obj.ocr_whole_result_pass = full_result
auto_obj.save()
compare_log.info('{0} [Auto SE] [result save success] [entity={1}] [id={2}] [ocr_res_id={3}]'.format(
log_base, application_entity, application_id, ocr_res_id))
except Exception as e:
compare_log.error('{0} [Auto SE] [result save error] [entity={1}] [id={2}] [ocr_res_id={3}] '
'[error={4}]'.format(log_base, application_entity, application_id, ocr_res_id,
traceback.format_exc()))
except Exception as e:
compare_log.info('[compare_thread error] [error={0}]'.format(traceback.format_exc()))
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!