8df5628f by 冯轩

Merge branch 'feature/CHINARPA-5015' into feature/uat-tmp

2 parents 402e440e 10cae765
...@@ -1503,7 +1503,7 @@ SE_DYSYR_VALUE = '无' ...@@ -1503,7 +1503,7 @@ SE_DYSYR_VALUE = '无'
1503 SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印' 1503 SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印'
1504 SE_GB_NEW_FIELD = ['vinNo'] 1504 SE_GB_NEW_FIELD = ['vinNo']
1505 SE_GB_USED_FIELD = ['customerName', 'idNum', 'date'] 1505 SE_GB_USED_FIELD = ['customerName', 'idNum', 'date']
1506 SE_BS_FIELD = ['户名', '打印日期', '流水日期', '(担保人1)户名', '(担保人1)打印日期', '(担保人1)流水日期', '(担保人2)户名', '(担保人2)打印日期', '(担保人2)流水日期'] 1506 SE_BS_FIELD = ['户名', '打印日期', '流水日期', '(担保人1)户名', '(担保人1)打印日期', '(担保人1)流水日期', '(担保人2)户名', '(担保人2)打印日期', '(担保人2)流水日期', '类型']
1507 SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字'] 1507 SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字']
1508 SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', '机动车损失保险金额', '第三者责任保险金额', '绝对免赔率', '保险起始日期', '保险截止日期', '保单章', '第一受益人', '保险费合计'] 1508 SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', '机动车损失保险金额', '第三者责任保险金额', '绝对免赔率', '保险起始日期', '保险截止日期', '保单章', '第一受益人', '保险费合计']
1509 JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0', ''] 1509 JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0', '']
...@@ -2017,6 +2017,7 @@ BS_COMPARE_LOGIC = { ...@@ -2017,6 +2017,7 @@ BS_COMPARE_LOGIC = {
2017 '流水日期': ('timedelta', 'se_bs_date_compare', {}, '主共借人银行流水日期不满足3个月'), 2017 '流水日期': ('timedelta', 'se_bs_date_compare', {}, '主共借人银行流水日期不满足3个月'),
2018 '(担保人1)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人1银行流水日期不满足3个月'), 2018 '(担保人1)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人1银行流水日期不满足3个月'),
2019 '(担保人2)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人2银行流水日期不满足3个月'), 2019 '(担保人2)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人2银行流水日期不满足3个月'),
2020 '类型': ('bankStatement_type', 'se_bs_type_compare', {}, '高风险经销商流水类型异常'),
2020 } 2021 }
2021 2022
2022 BS_COMPARE_LOGIC_AUTO = { 2023 BS_COMPARE_LOGIC_AUTO = {
...@@ -2029,6 +2030,7 @@ BS_COMPARE_LOGIC_AUTO = { ...@@ -2029,6 +2030,7 @@ BS_COMPARE_LOGIC_AUTO = {
2029 '流水日期': ('timedelta', 'se_bs_date_compare', {}, '主共借人银行流水日期不满足2个月'), 2030 '流水日期': ('timedelta', 'se_bs_date_compare', {}, '主共借人银行流水日期不满足2个月'),
2030 '(担保人1)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人1银行流水日期不满足2个月'), 2031 '(担保人1)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人1银行流水日期不满足2个月'),
2031 '(担保人2)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人2银行流水日期不满足2个月'), 2032 '(担保人2)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人2银行流水日期不满足2个月'),
2033 '类型': ('bankStatement_type', 'se_bs_type_compare', {}, '高风险经销商流水类型异常'),
2032 } 2034 }
2033 2035
2034 SPECIAL_REASON = '主共借人未提供银行流水,含担保人需人工查看直系亲属关系' 2036 SPECIAL_REASON = '主共借人未提供银行流水,含担保人需人工查看直系亲属关系'
......
...@@ -1223,6 +1223,14 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -1223,6 +1223,14 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
1223 (consts.SE_BS_FIELD[2], date_timedelta), 1223 (consts.SE_BS_FIELD[2], date_timedelta),
1224 ] 1224 ]
1225 1225
1226 #在比对逻辑中添加字段
1227 if '不接受支付宝/微信' in cms_info.get('autoApprovedDetails', {}).get('PolicyComments', ''):
1228 #bs_field_input.append((consts.SE_BS_FIELD[9], '不接受支付宝/微信'))
1229 allow_bs_type = '不接受支付宝/微信'
1230 else:
1231 #bs_field_input.append((consts.SE_BS_FIELD[9], '全部'))
1232 allow_bs_type = '全部'
1233
1226 dbr_bs_role_list = [] 1234 dbr_bs_role_list = []
1227 for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []): 1235 for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []):
1228 dbr_bs_role_list.append(dbr_bs_role) 1236 dbr_bs_role_list.append(dbr_bs_role)
...@@ -1562,7 +1570,7 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -1562,7 +1570,7 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
1562 contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input 1570 contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input
1563 1571
1564 compare_info['contract'] = contract_info 1572 compare_info['contract'] = contract_info
1565 return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh 1573 return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh, allow_bs_type
1566 1574
1567 1575
1568 def get_se_cms_compare_info(application_id, last_obj, application_entity, detect_list, data_source, auto=False, ignore_bank=False): 1576 def get_se_cms_compare_info(application_id, last_obj, application_entity, detect_list, data_source, auto=False, ignore_bank=False):
...@@ -1883,6 +1891,14 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -1883,6 +1891,14 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
1883 (consts.SE_BS_FIELD[2], date_timedelta), 1891 (consts.SE_BS_FIELD[2], date_timedelta),
1884 ] 1892 ]
1885 1893
1894 #在比对逻辑中添加字段
1895 if '不接受支付宝/微信' in cms_info.get('autoApprovedDetails', {}).get('PolicyComments', ''):
1896 #bs_field_input.append((consts.SE_BS_FIELD[9], '不接受支付宝/微信'))
1897 allow_bs_type = '不接受支付宝/微信'
1898 else:
1899 #bs_field_input.append((consts.SE_BS_FIELD[9], '全部'))
1900 allow_bs_type = '全部'
1901
1886 dbr_bs_role_list = [] 1902 dbr_bs_role_list = []
1887 for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []): 1903 for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []):
1888 dbr_bs_role_list.append(dbr_bs_role) 1904 dbr_bs_role_list.append(dbr_bs_role)
...@@ -2187,10 +2203,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -2187,10 +2203,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
2187 afc_contract_qrs_input = [(consts.SE_AFC_CON_QRS_FIELD[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, full_no))] 2203 afc_contract_qrs_input = [(consts.SE_AFC_CON_QRS_FIELD[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, full_no))]
2188 contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input 2204 contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input
2189 compare_info['contract'] = contract_info 2205 compare_info['contract'] = contract_info
2190 return compare_info, cms_info.get('applicationVersion', 1), cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh 2206 return compare_info, cms_info.get('applicationVersion', 1), cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh, allow_bs_type
2191 2207
2192 2208
2193 def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): 2209 def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type, allow_bs_type):
2194 # 主共借至少提供一个 2210 # 主共借至少提供一个
2195 # 有担保人,担保人必须提供。主共借没有时,修改comment:人工查看担保人亲属关系 2211 # 有担保人,担保人必须提供。主共借没有时,修改comment:人工查看担保人亲属关系
2196 2212
...@@ -2204,6 +2220,7 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): ...@@ -2204,6 +2220,7 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type):
2204 field_img_path_dict = dict() 2220 field_img_path_dict = dict()
2205 2221
2206 if ocr_res_str is not None: 2222 if ocr_res_str is not None:
2223 # 字段在比对逻辑中添加的,这个地方不用改,如果要是在get_info时添加,要改这个
2207 pre_field_list = strip_list[:3] 2224 pre_field_list = strip_list[:3]
2208 dbr1_field_list = strip_list[3:6] 2225 dbr1_field_list = strip_list[3:6]
2209 dbr2_field_list = strip_list[6:] 2226 dbr2_field_list = strip_list[6:]
...@@ -2222,11 +2239,18 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): ...@@ -2222,11 +2239,18 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type):
2222 auto_paper_verify_false_idx_list = [] 2239 auto_paper_verify_false_idx_list = []
2223 auto_elec_verify_false_idx_list = [] 2240 auto_elec_verify_false_idx_list = []
2224 2241
2242 all_zhifubao_weixin = True
2243
2225 for tmp_idx, ocr_res in enumerate(ocr_res_list): 2244 for tmp_idx, ocr_res in enumerate(ocr_res_list):
2226 correct_count = 0 2245 correct_count = 0
2227 pre_tmp_res_part = {} 2246 pre_tmp_res_part = {}
2228 verify_bool = ocr_res.get('verify', False) 2247 verify_bool = ocr_res.get('verify', False)
2229 e_bank = ocr_res.get('e_bank', False) 2248 e_bank = ocr_res.get('e_bank', False)
2249 bankStatement_type = ocr_res.get('bankStatement_type', '')
2250 # 如果是高风险经销商,cms信息中包含‘不接受支付宝/微信’,但是识别出的流水是支付宝/微信,直接跳过这个文件,就当不存在
2251 if allow_bs_type == '不接受支付宝/微信' and bankStatement_type in [12, 13, 48]:
2252 continue
2253 all_zhifubao_weixin = False
2230 #verify_list.append(verify_bool) 2254 #verify_list.append(verify_bool)
2231 if not verify_bool: 2255 if not verify_bool:
2232 verify_false_idx_list.append(str(tmp_idx+1)) 2256 verify_false_idx_list.append(str(tmp_idx+1))
...@@ -2310,12 +2334,24 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): ...@@ -2310,12 +2334,24 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type):
2310 reason2 = '第{0}份银行流水为纸质版,请核查流水真伪。'.format('、'.join(auto_paper_verify_false_idx_list)) 2334 reason2 = '第{0}份银行流水为纸质版,请核查流水真伪。'.format('、'.join(auto_paper_verify_false_idx_list))
2311 reason = reason1 + reason2 2335 reason = reason1 + reason2
2312 result_field_list.append((name, empty_str, result, json.dumps(verify_list, ensure_ascii=False), empty_str, empty_error_type, reason)) 2336 result_field_list.append((name, empty_str, result, json.dumps(verify_list, ensure_ascii=False), empty_str, empty_error_type, reason))
2337
2338
2339 if all_zhifubao_weixin:
2340 # 核查点名称,cms传值,比对结果,ocr结果,图片路径,错误类型,错误描述
2341 result_field_list.append(('类型', allow_bs_type, consts.RESULT_N, '全部为支付宝/微信', empty_str, empty_error_type, '高风险经销商流水类型异常'))
2342 else:
2343 result_field_list.append(('类型', allow_bs_type, consts.RESULT_Y, '包含支付宝/微信以外流水', empty_str, empty_error_type, ''))
2313 2344
2314 # 担保人1 2345 # 担保人1
2315 dbr1_best_res = {} 2346 dbr1_best_res = {}
2316 if len(dbr1_field_list) > 0: 2347 if len(dbr1_field_list) > 0:
2317 max_correct_count = 0 2348 max_correct_count = 0
2318 for ocr_res in ocr_res_list: 2349 for ocr_res in ocr_res_list:
2350 bankStatement_type = ocr_res.get('bankStatement_type', '')
2351 # 如果是高风险经销商,cms信息中包含‘不接受支付宝/微信’,但是识别出的流水是支付宝/微信,直接跳过这个文件,就当不存在
2352 if allow_bs_type == '不接受支付宝/微信' and bankStatement_type in [12, 13, 48]:
2353 continue
2354
2319 correct_count = 0 2355 correct_count = 0
2320 dbr1_tmp_res_part = {} 2356 dbr1_tmp_res_part = {}
2321 for idx, (name, value) in enumerate(dbr1_field_list): 2357 for idx, (name, value) in enumerate(dbr1_field_list):
...@@ -2348,6 +2384,10 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): ...@@ -2348,6 +2384,10 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type):
2348 if len(dbr1_field_list) > 0: 2384 if len(dbr1_field_list) > 0:
2349 max_correct_count = 0 2385 max_correct_count = 0
2350 for ocr_res in ocr_res_list: 2386 for ocr_res in ocr_res_list:
2387 bankStatement_type = ocr_res.get('bankStatement_type', '')
2388 # 如果是高风险经销商,cms信息中包含‘不接受支付宝/微信’,但是识别出的流水是支付宝/微信,直接跳过这个文件,就当不存在
2389 if allow_bs_type == '不接受支付宝/微信' and bankStatement_type in [12, 13, 48]:
2390 continue
2351 correct_count = 0 2391 correct_count = 0
2352 dbr2_tmp_res_part = {} 2392 dbr2_tmp_res_part = {}
2353 for idx, (name, value) in enumerate(dbr2_field_list): 2393 for idx, (name, value) in enumerate(dbr2_field_list):
...@@ -3255,7 +3295,7 @@ def se_mvc34_compare(license_en, ocr_res_dict, field_list): ...@@ -3255,7 +3295,7 @@ def se_mvc34_compare(license_en, ocr_res_dict, field_list):
3255 return result_field_list, field_img_path_dict 3295 return result_field_list, field_img_path_dict
3256 3296
3257 3297
3258 def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list, aa_type): 3298 def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list, aa_type, allow_bs_type):
3259 # individualCusInfo 3299 # individualCusInfo
3260 # corporateCusInfo 3300 # corporateCusInfo
3261 # vehicleInfo 3301 # vehicleInfo
...@@ -3352,7 +3392,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list ...@@ -3352,7 +3392,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list
3352 elif license_en == consts.AFC_CONTRACT_QRS_EN: 3392 elif license_en == consts.AFC_CONTRACT_QRS_EN:
3353 result_field_list, field_img_path_dict = se_contract_qrs_compare(license_en, ocr_res_dict, strip_list) 3393 result_field_list, field_img_path_dict = se_contract_qrs_compare(license_en, ocr_res_dict, strip_list)
3354 elif license_en == consts.BS_EN: 3394 elif license_en == consts.BS_EN:
3355 result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type) 3395 # 银行流水的比对,是只要有正确的就可以,所以没有按照时间顺序,先比最新的,在比最早的,如果以后要改逻辑,切记这个
3396 result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type, allow_bs_type)
3356 elif license_en == consts.FS_EN: 3397 elif license_en == consts.FS_EN:
3357 result_field_list, field_img_path_dict = se_fs_compare(license_en, ocr_res_dict, strip_list) 3398 result_field_list, field_img_path_dict = se_fs_compare(license_en, ocr_res_dict, strip_list)
3358 else: 3399 else:
...@@ -3441,11 +3482,11 @@ def se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, oc ...@@ -3441,11 +3482,11 @@ def se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, oc
3441 try: 3482 try:
3442 # 比对逻辑 3483 # 比对逻辑
3443 # detect_list = se_result_detect(ocr_res_dict) 3484 # detect_list = se_result_detect(ocr_res_dict)
3444 compare_info, aa_type, is_gsyh = get_se_cms_compare_info_auto( 3485 compare_info, aa_type, is_gsyh, allow_bs_type = get_se_cms_compare_info_auto(
3445 application_id, last_obj, application_entity, data_source, ignore_bank=ignore_bank) 3486 application_id, last_obj, application_entity, data_source, ignore_bank=ignore_bank)
3446 compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ 3487 compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \
3447 cn_failure_reason_str, bs_failure_reason_str, _, field_result_dict = se_compare_process( 3488 cn_failure_reason_str, bs_failure_reason_str, _, field_result_dict = se_compare_process(
3448 compare_info, ocr_res_dict, is_gsyh, True, id_res_list, aa_type) 3489 compare_info, ocr_res_dict, is_gsyh, True, id_res_list, aa_type, allow_bs_type)
3449 compare_log.info('{0} [Auto SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format( 3490 compare_log.info('{0} [Auto SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format(
3450 log_base, application_entity, application_id, ocr_res_id, compare_result)) 3491 log_base, application_entity, application_id, ocr_res_id, compare_result))
3451 except Exception as e: 3492 except Exception as e:
...@@ -3508,11 +3549,11 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res ...@@ -3508,11 +3549,11 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
3508 # 比对逻辑 3549 # 比对逻辑
3509 start_time = datetime.now() 3550 start_time = datetime.now()
3510 detect_list = se_result_detect(ocr_res_dict) 3551 detect_list = se_result_detect(ocr_res_dict)
3511 compare_info, application_version, aa_type, is_gsyh = get_se_cms_compare_info( 3552 compare_info, application_version, aa_type, is_gsyh, allow_bs_type = get_se_cms_compare_info(
3512 application_id, last_obj, application_entity, detect_list, data_source, ignore_bank=ignore_bank) 3553 application_id, last_obj, application_entity, detect_list, data_source, ignore_bank=ignore_bank)
3513 compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ 3554 compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \
3514 cn_failure_reason_str, bs_failure_reason_str, rpa_failure_reason, field_result_dict = se_compare_process( 3555 cn_failure_reason_str, bs_failure_reason_str, rpa_failure_reason, field_result_dict = se_compare_process(
3515 compare_info, ocr_res_dict, is_gsyh, False, id_res_list, aa_type) 3556 compare_info, ocr_res_dict, is_gsyh, False, id_res_list, aa_type, allow_bs_type)
3516 compare_log.info('{0} [SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format( 3557 compare_log.info('{0} [SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format(
3517 log_base, application_entity, application_id, ocr_res_id, compare_result)) 3558 log_base, application_entity, application_id, ocr_res_id, compare_result))
3518 except Exception as e: 3559 except Exception as e:
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!