bfa90f18 by 周伟奇

se compare yh part 2

1 parent 90b532a7
......@@ -1350,6 +1350,8 @@ DDA_EN = 'DDA'
HMH_EN = 'Mortgage Waiver Letter'
JYPZ_EN = 'Used Car Document'
SKIP_CARD = {ID_EN, RP_EN}
ID_COMPARE_LOGIC = {
'customerName': ('姓名', 'se_name_compare', {}),
......@@ -1453,7 +1455,7 @@ JYPZ_COMPARE_LOGIC = {
'vehicleTransactionAmount': ('price', 'se_amount_compare', {}),
'customerName': ('buyer_name', 'se_name_compare', {'is_passport': True}),
'idNum': ('buyer_id', 'se_contain_compare_2', {}),
'date': ('date', 'se_date_compare_2', {'three_month': True}),
'date': ('date', 'se_date_compare_2', {}),
}
HMH_COMPARE_LOGIC = {
......@@ -1464,6 +1466,8 @@ HMH_COMPARE_LOGIC = {
# MVC_OCR_FIELD = 'mvc_ocr'
SE_DETECT_CARD = [UCI_EN, JYPZ_EN, HMH_EN]
SE_COMPARE_FIELD = {
ID_EN: (IC_OCR_FIELD, ID_COMPARE_LOGIC, True),
PP_EN: (PP_OCR_FIELD, PP_COMPARE_LOGIC, False),
......
......@@ -706,7 +706,7 @@ def ca_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
traceback.format_exc()))
def get_se_compare_info(last_obj, application_entity):
def get_se_compare_info(last_obj, application_entity, detect_list):
compare_info = {}
individual_info_dict = {}
main_role_info = {}
......@@ -832,10 +832,14 @@ def get_se_compare_info(last_obj, application_entity):
for jypz_field in consts.SE_USED_FIELD:
jypz_field_input.append((jypz_field, vehicle_info_dict[jypz_field]))
jypz_field_input.append((consts.SE_GB_USED_FIELD[-1], last_obj.first_submmison_date))
vehicle_info[consts.UCI_EN] = vehicle_field_input
vehicle_info[consts.MVC_EN] = gb_field_input
vehicle_info[consts.MVC34_EN] = gb34_field_input
vehicle_info[consts.JYPZ_EN] = jypz_field_input
if not detect_list[0]:
vehicle_info[consts.UCI_EN] = vehicle_field_input
if not detect_list[1]:
vehicle_info[consts.JYPZ_EN] = jypz_field_input
if detect_list[0] and detect_list[1]:
vehicle_info[consts.UCI_EN] = vehicle_field_input
compare_info['vehicleInfo'] = vehicle_info
bank_info_dict = json.loads(last_obj.bank_info)
......@@ -861,13 +865,14 @@ def get_se_compare_info(last_obj, application_entity):
bank_info[consts.DDA_EN] = dda_field_input
compare_info['bankInfo'] = bank_info
other_info = {}
hmh_field_input = []
hmh_field_input.append((consts.SE_HMH_FIELD[0], hmh_name))
hmh_field_input.append((consts.SE_HMH_FIELD[1], hmh_id))
hmh_field_input.append((consts.SE_HMH_FIELD[2], last_obj.application_id))
other_info[consts.HMH_EN] = hmh_field_input
compare_info['other'] = other_info
if not detect_list[-1]:
other_info = {}
hmh_field_input = []
hmh_field_input.append((consts.SE_HMH_FIELD[0], hmh_name))
hmh_field_input.append((consts.SE_HMH_FIELD[1], hmh_id))
hmh_field_input.append((consts.SE_HMH_FIELD[2], last_obj.application_id))
other_info[consts.HMH_EN] = hmh_field_input
compare_info['other'] = other_info
return compare_info
......@@ -876,6 +881,7 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
ocr_field, compare_logic, special_expiry_date = consts.SE_COMPARE_FIELD[license_en]
is_find = False
no_ocr_result = False
result_field_list = []
ocr_res_str = ocr_res_dict.get(ocr_field)
if ocr_res_str is not None:
......@@ -921,12 +927,14 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
img_path = ocr_res_list[res_idx].get(consts.IMG_PATH_KEY, '') if result == consts.RESULT_N else empty_str
error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
result_field_list.append((name, value, result, ocr_str, img_path, error_type))
else:
no_ocr_result = True
if not is_find:
for name, value in field_list:
result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value))
return result_field_list
return result_field_list, no_ocr_result
def se_mvc34_compare(license_en, ocr_res_dict, field_list):
......@@ -1012,13 +1020,14 @@ def se_compare_process(compare_info, ocr_res_dict):
for license_dict in license_list:
for license_en, field_list in license_dict.items():
failure_field = []
result_field_list = se_compare_license(license_en, ocr_res_dict, field_list)
result_field_list, no_ocr_result = se_compare_license(license_en, ocr_res_dict, field_list)
for name, value, result, ocr_str, img_path, error_type in result_field_list:
total_fields += 1
if result == consts.RESULT_N:
failed_count += 1
successful_at_this_level = False
failure_field.append(name)
if license_en not in consts.SKIP_CARD or not no_ocr_result:
total_fields += 1
if result == consts.RESULT_N:
failed_count += 1
successful_at_this_level = False
failure_field.append(name)
compare_result.append(
{
consts.HEAD_LIST[0]: info_key,
......@@ -1040,14 +1049,16 @@ def se_compare_process(compare_info, ocr_res_dict):
failure_field = []
if license_en == consts.MVC34_EN:
result_field_list = se_mvc34_compare(license_en, ocr_res_dict, field_list)
no_ocr_result = False
else:
result_field_list = se_compare_license(license_en, ocr_res_dict, field_list)
result_field_list, no_ocr_result = se_compare_license(license_en, ocr_res_dict, field_list)
for name, value, result, ocr_str, img_path, error_type in result_field_list:
total_fields += 1
if result == consts.RESULT_N:
failed_count += 1
successful_at_this_level = False
failure_field.append(name)
if license_en != consts.DDA_EN or not no_ocr_result:
total_fields += 1
if result == consts.RESULT_N:
failed_count += 1
successful_at_this_level = False
failure_field.append(name)
compare_result.append(
{
consts.HEAD_LIST[0]: info_key,
......@@ -1071,11 +1082,20 @@ def se_compare_process(compare_info, ocr_res_dict):
return compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str
def se_result_detect(ocr_res_dict):
detect_list = []
for license_en in consts.SE_DETECT_CARD:
ocr_field, _, _ = consts.SE_COMPARE_FIELD[license_en]
ocr_res_str = ocr_res_dict.get(ocr_field)
detect_list.append(ocr_res_str is None)
return detect_list
def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict):
try:
# 比对逻辑
start_time = datetime.now()
compare_info = get_se_compare_info(last_obj, application_entity)
detect_list = se_result_detect(ocr_res_dict)
compare_info = get_se_compare_info(last_obj, application_entity, detect_list)
compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str = se_compare_process(
compare_info, ocr_res_dict)
compare_log.info('{0} [SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format(
......@@ -1094,7 +1114,7 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
res_obj.application_id = application_id
res_obj.compare_count = total_fields
res_obj.failed_count = failed_count
res_obj.is_finish = failed_count == 0
res_obj.is_finish = successful_at_this_level
res_obj.version = '{0}{1}{2}'.format(consts.INFO_SOURCE[0], consts.SPLIT_STR, last_obj.application_version)
# res_obj.reason1_count = reason1_count
res_obj.result = json.dumps(compare_result)
......
......@@ -203,7 +203,7 @@ class Comparison:
def se_date_compare(self, input_str, ocr_str, **kwargs):
if kwargs.get('long', False):
if '长期' in ocr_str or '永久' in ocr_str or '***' in ocr_str or '至今' in ocr_str:
if '长期' in ocr_str or '永久' in ocr_str or '***' in ocr_str or '至今' in ocr_str or '年—月—日' in ocr_str or '年 月 日' in ocr_str:
if kwargs.get('today', False) or input_str in ['2099-12-31', '2099-01-01', '2999-12-31', '2999-01-01']:
return self.RESULT_Y
else:
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!