6662b486 by 周伟奇

Merge branch 'feature/qrs' into feature/uat-tmp

2 parents 02dfaa1f ec60949a
...@@ -1042,6 +1042,10 @@ JYPZ_FIELD_ORDER = (("type", "标题"), ...@@ -1042,6 +1042,10 @@ JYPZ_FIELD_ORDER = (("type", "标题"),
1042 CONTRACT_CN_NAME = '合同' 1042 CONTRACT_CN_NAME = '合同'
1043 CONTRACT_CLASSIFY = 41 1043 CONTRACT_CLASSIFY = 41
1044 1044
1045 # 合同-送达地址确认书
1046 CONTRACT_QRS_CN_NAME = '送达地址确认书'
1047 CONTRACT_QRS_CLASSIFY = 49
1048
1045 # 合同编号: 每页 1049 # 合同编号: 每页
1046 1050
1047 HIL_CONTRACT_1_CN_NAME = '售后回租合同' 1051 HIL_CONTRACT_1_CN_NAME = '售后回租合同'
...@@ -1053,13 +1057,14 @@ HIL_CONTRACT_2_CLASSIFY = 44 ...@@ -1053,13 +1057,14 @@ HIL_CONTRACT_2_CLASSIFY = 44
1053 HIL_CONTRACT_3_CN_NAME = '车辆处置协议' 1057 HIL_CONTRACT_3_CN_NAME = '车辆处置协议'
1054 HIL_CONTRACT_3_CLASSIFY = 45 1058 HIL_CONTRACT_3_CLASSIFY = 45
1055 1059
1056 CONTRACT_SET = {CONTRACT_CLASSIFY, HIL_CONTRACT_1_CLASSIFY, HIL_CONTRACT_2_CLASSIFY, HIL_CONTRACT_3_CLASSIFY} 1060 CONTRACT_SET = {CONTRACT_QRS_CLASSIFY, CONTRACT_CLASSIFY, HIL_CONTRACT_1_CLASSIFY, HIL_CONTRACT_2_CLASSIFY, HIL_CONTRACT_3_CLASSIFY}
1057 1061
1058 CONTRACT_MAP = { 1062 CONTRACT_MAP = {
1059 HIL_CONTRACT_1_CLASSIFY: HIL_CONTRACT_1_CN_NAME, 1063 HIL_CONTRACT_1_CLASSIFY: HIL_CONTRACT_1_CN_NAME,
1060 HIL_CONTRACT_2_CLASSIFY: HIL_CONTRACT_2_CN_NAME, 1064 HIL_CONTRACT_2_CLASSIFY: HIL_CONTRACT_2_CN_NAME,
1061 HIL_CONTRACT_3_CLASSIFY: HIL_CONTRACT_3_CN_NAME, 1065 HIL_CONTRACT_3_CLASSIFY: HIL_CONTRACT_3_CN_NAME,
1062 CONTRACT_CLASSIFY: CONTRACT_CN_NAME, 1066 CONTRACT_CLASSIFY: CONTRACT_CN_NAME,
1067 CONTRACT_QRS_CLASSIFY: CONTRACT_QRS_CN_NAME,
1063 } 1068 }
1064 1069
1065 # 保单 1070 # 保单
...@@ -1203,6 +1208,7 @@ DDA_OCR_FIELD = 'bs_ocr' ...@@ -1203,6 +1208,7 @@ DDA_OCR_FIELD = 'bs_ocr'
1203 HMH_OCR_FIELD = 'hmh_ocr' 1208 HMH_OCR_FIELD = 'hmh_ocr'
1204 JYPZ_OCR_FIELD = 'jypz_ocr' 1209 JYPZ_OCR_FIELD = 'jypz_ocr'
1205 HT_FIELD = 'ht_ocr' 1210 HT_FIELD = 'ht_ocr'
1211 QRS_FIELD = 'qrs_ocr'
1206 BD_FIELD = 'bd_ocr' 1212 BD_FIELD = 'bd_ocr'
1207 BS_FIELD = 'bss_ocr' 1213 BS_FIELD = 'bss_ocr'
1208 HIL_CONTRACT_1_FIELD = 'hil_contract_1_ocr' 1214 HIL_CONTRACT_1_FIELD = 'hil_contract_1_ocr'
...@@ -1226,6 +1232,7 @@ RESULT_MAPPING = { ...@@ -1226,6 +1232,7 @@ RESULT_MAPPING = {
1226 HMH_CLASSIFY: HMH_OCR_FIELD, 1232 HMH_CLASSIFY: HMH_OCR_FIELD,
1227 JYPZ_CLASSIFY: JYPZ_OCR_FIELD, 1233 JYPZ_CLASSIFY: JYPZ_OCR_FIELD,
1228 CONTRACT_CLASSIFY: HT_FIELD, 1234 CONTRACT_CLASSIFY: HT_FIELD,
1235 CONTRACT_QRS_CLASSIFY: QRS_FIELD,
1229 INSURANCE_CLASSIFY: BD_FIELD, 1236 INSURANCE_CLASSIFY: BD_FIELD,
1230 BS_CLASSIFY: BS_FIELD, 1237 BS_CLASSIFY: BS_FIELD,
1231 HIL_CONTRACT_1_CLASSIFY: HIL_CONTRACT_1_FIELD, 1238 HIL_CONTRACT_1_CLASSIFY: HIL_CONTRACT_1_FIELD,
...@@ -1251,6 +1258,7 @@ COMPARE_FIELDS = ( ...@@ -1251,6 +1258,7 @@ COMPARE_FIELDS = (
1251 HMH_OCR_FIELD, 1258 HMH_OCR_FIELD,
1252 JYPZ_OCR_FIELD, 1259 JYPZ_OCR_FIELD,
1253 HT_FIELD, 1260 HT_FIELD,
1261 QRS_FIELD,
1254 BD_FIELD, 1262 BD_FIELD,
1255 BS_FIELD, 1263 BS_FIELD,
1256 HIL_CONTRACT_1_FIELD, 1264 HIL_CONTRACT_1_FIELD,
...@@ -1264,6 +1272,7 @@ PRE_COMPARE_FIELDS = ( ...@@ -1264,6 +1272,7 @@ PRE_COMPARE_FIELDS = (
1264 BC_OCR_FIELD, 1272 BC_OCR_FIELD,
1265 HMH_OCR_FIELD, 1273 HMH_OCR_FIELD,
1266 HT_FIELD, 1274 HT_FIELD,
1275 QRS_FIELD,
1267 BD_FIELD, 1276 BD_FIELD,
1268 HIL_CONTRACT_1_FIELD, 1277 HIL_CONTRACT_1_FIELD,
1269 HIL_CONTRACT_2_FIELD, 1278 HIL_CONTRACT_2_FIELD,
...@@ -1479,6 +1488,10 @@ AFC_CON_FIELD_ORDER_LTGT = ( ...@@ -1479,6 +1488,10 @@ AFC_CON_FIELD_ORDER_LTGT = (
1479 ('标准利率', '标准利率'), 1488 ('标准利率', '标准利率'),
1480 ) 1489 )
1481 1490
1491 SE_AFC_CON_QRS_MAP = {
1492 '合同编号': (1, '合同编号'),
1493 }
1494
1482 SE_AFC_CON_MAP = { 1495 SE_AFC_CON_MAP = {
1483 '合同编号-每页': (None, None, '合同编号', None), 1496 '合同编号-每页': (None, None, '合同编号', None),
1484 '所购车辆价格-小写-重要条款': (1, 1, '所购车辆价格', None), 1497 '所购车辆价格-小写-重要条款': (1, 1, '所购车辆价格', None),
...@@ -1594,6 +1607,7 @@ SE_HIL_CON_MAP = { ...@@ -1594,6 +1607,7 @@ SE_HIL_CON_MAP = {
1594 HIL_CONTRACT_3_CLASSIFY: SE_HIL_CON_3_MAP, 1607 HIL_CONTRACT_3_CLASSIFY: SE_HIL_CON_3_MAP,
1595 } 1608 }
1596 1609
1610 SE_AFC_CON_QRS_FIELD = ['合同编号']
1597 SE_AFC_CON_FIELD = ['合同编号-每页', '所购车辆价格-小写-重要条款', '车架号-重要条款', '贷款本金金额-重要条款', '贷款期限-重要条款', 1611 SE_AFC_CON_FIELD = ['合同编号-每页', '所购车辆价格-小写-重要条款', '车架号-重要条款', '贷款本金金额-重要条款', '贷款期限-重要条款',
1598 '车辆贷款本金金额-重要条款', '附加产品融资贷款本金总额-重要条款', '所购车辆价格', '车架号', '经销商', 1612 '车辆贷款本金金额-重要条款', '附加产品融资贷款本金总额-重要条款', '所购车辆价格', '车架号', '经销商',
1599 '贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行', 1613 '贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行',
...@@ -1689,6 +1703,7 @@ DDA_EN = 'DDA' ...@@ -1689,6 +1703,7 @@ DDA_EN = 'DDA'
1689 HMH_EN = 'Mortgage Waiver Letter' 1703 HMH_EN = 'Mortgage Waiver Letter'
1690 JYPZ_EN = 'Used Car Document' 1704 JYPZ_EN = 'Used Car Document'
1691 AFC_CONTRACT_EN = 'AFC Contract' 1705 AFC_CONTRACT_EN = 'AFC Contract'
1706 AFC_CONTRACT_QRS_EN = '送达地址确认书'
1692 BD_EN = 'Insurance' 1707 BD_EN = 'Insurance'
1693 BS_EN = 'Bank Statement' 1708 BS_EN = 'Bank Statement'
1694 HIL_CONTRACT_1_EN = '售后回租合同' 1709 HIL_CONTRACT_1_EN = '售后回租合同'
...@@ -1978,6 +1993,10 @@ HIL_CONTRACT_3_COMPARE_LOGIC = { ...@@ -1978,6 +1993,10 @@ HIL_CONTRACT_3_COMPARE_LOGIC = {
1978 '承租人签字': ('承租人签字', 'se_contain_compare', {}, '车辆处置协议承租人签字与系统承租人姓名不一致'), 1993 '承租人签字': ('承租人签字', 'se_contain_compare', {}, '车辆处置协议承租人签字与系统承租人姓名不一致'),
1979 } 1994 }
1980 1995
1996 HT_QRS_COMPARE_LOGIC = {
1997 '合同编号': ('合同编号', 'se_qrs_compare', {}, '请确认是否提供合格的送达地址确认书'),
1998 }
1999
1981 HT_COMPARE_LOGIC = { 2000 HT_COMPARE_LOGIC = {
1982 '合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'), 2001 '合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'),
1983 # '合同编号-每页(no-asp)': ('合同编号-每页', 'se_list_compare', {'pop_last': True}, '合同编号与系统不一致'), 2002 # '合同编号-每页(no-asp)': ('合同编号-每页', 'se_list_compare', {'pop_last': True}, '合同编号与系统不一致'),
...@@ -2054,6 +2073,7 @@ SE_COMPARE_FIELD = { ...@@ -2054,6 +2073,7 @@ SE_COMPARE_FIELD = {
2054 HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False), 2073 HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False),
2055 JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False), 2074 JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False),
2056 AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, False), 2075 AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, False),
2076 AFC_CONTRACT_QRS_EN: (QRS_FIELD, HT_QRS_COMPARE_LOGIC, False),
2057 BD_EN: (BD_FIELD, BD_COMPARE_LOGIC, False), 2077 BD_EN: (BD_FIELD, BD_COMPARE_LOGIC, False),
2058 BS_EN: (BS_FIELD, BS_COMPARE_LOGIC, False), 2078 BS_EN: (BS_FIELD, BS_COMPARE_LOGIC, False),
2059 HIL_CONTRACT_1_EN: (HIL_CONTRACT_1_FIELD, HIL_CONTRACT_1_COMPARE_LOGIC, False), 2079 HIL_CONTRACT_1_EN: (HIL_CONTRACT_1_FIELD, HIL_CONTRACT_1_COMPARE_LOGIC, False),
...@@ -2063,7 +2083,7 @@ SE_COMPARE_FIELD = { ...@@ -2063,7 +2083,7 @@ SE_COMPARE_FIELD = {
2063 2083
2064 SE_COMPARE_FIELD_AUTO = { 2084 SE_COMPARE_FIELD_AUTO = {
2065 BS_EN: (BS_FIELD, BS_COMPARE_LOGIC_AUTO, False), 2085 BS_EN: (BS_FIELD, BS_COMPARE_LOGIC_AUTO, False),
2066 ID_EN: (IC_OCR_FIELD, ID_COMPARE_LOGIC, True), 2086 ID_EN: (IC_OCR_FIELD, ID_COMPARE_LOGIC_AUTO, True),
2067 } 2087 }
2068 2088
2069 2089
...@@ -2308,6 +2328,7 @@ FILE_NAME_PREFIX_MAP = { ...@@ -2308,6 +2328,7 @@ FILE_NAME_PREFIX_MAP = {
2308 ECONTRACT_KEYWORDS_MAP = { 2328 ECONTRACT_KEYWORDS_MAP = {
2309 AFC_PREFIX: [ 2329 AFC_PREFIX: [
2310 ('抵押贷款合同', CONTRACT_CLASSIFY), 2330 ('抵押贷款合同', CONTRACT_CLASSIFY),
2331 ('送达地址确认书', CONTRACT_QRS_CLASSIFY),
2311 # ('电子签署-抵押登记豁免函', HMH_CLASSIFY, 0), 2332 # ('电子签署-抵押登记豁免函', HMH_CLASSIFY, 0),
2312 ], 2333 ],
2313 HIL_PREFIX: [ 2334 HIL_PREFIX: [
......
...@@ -987,6 +987,15 @@ class Command(BaseCommand, LoggerMixin): ...@@ -987,6 +987,15 @@ class Command(BaseCommand, LoggerMixin):
987 # } 987 # }
988 # } 988 # }
989 license_summary[classify] = [res] 989 license_summary[classify] = [res]
990 elif classify == consts.CONTRACT_QRS_CLASSIFY:
991 res = {}
992 for key, (pno, key1) in consts.SE_AFC_CON_QRS_MAP.items():
993 res[key] = page_info_dict.get(str(pno), {}).get(key1, '')
994 res.setdefault(consts.IMG_PATH_KEY, dict())[key] = page_info_dict.get(str(pno), {}).get(
995 consts.IMG_PATH_KEY, '')
996 res.setdefault(consts.ALL_POSITION_KEY, dict())[key] = page_info_dict.get(str(pno), {}).get(
997 consts.ALL_POSITION_KEY, {}).get(key1, [])
998 license_summary[classify] = [res]
990 else: 999 else:
991 res = {} 1000 res = {}
992 for key, (pno1, pno2, end_idx, key1, key2) in consts.SE_HIL_CON_MAP[classify].items(): 1001 for key, (pno1, pno2, end_idx, key1, key2) in consts.SE_HIL_CON_MAP[classify].items():
...@@ -1474,6 +1483,16 @@ class Command(BaseCommand, LoggerMixin): ...@@ -1474,6 +1483,16 @@ class Command(BaseCommand, LoggerMixin):
1474 'page_num': page_num, 1483 'page_num': page_num,
1475 'page_info': page_info 1484 'page_info': page_info
1476 } 1485 }
1486 elif classify_1_str == str(consts.CONTRACT_QRS_CLASSIFY):
1487 ocr_result = afc_predict(pdf_handler.pdf_info, is_qrs=True)
1488 page_num = 'page_1'
1489 page_res = {
1490 page_num: {
1491 'classify': int(classify_1_str),
1492 'page_num': page_num,
1493 'page_info': ocr_result.pop(page_num, {})
1494 }
1495 }
1477 else: 1496 else:
1478 file_type_1 = consts.HIL_CONTRACT_TYPE_MAP.get(classify_1_str) 1497 file_type_1 = consts.HIL_CONTRACT_TYPE_MAP.get(classify_1_str)
1479 ocr_result_1 = hil_predict(pdf_handler.pdf_info, file_type_1) 1498 ocr_result_1 = hil_predict(pdf_handler.pdf_info, file_type_1)
......
...@@ -328,6 +328,7 @@ class AFCOCRResult(models.Model): ...@@ -328,6 +328,7 @@ class AFCOCRResult(models.Model):
328 hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1") 328 hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1")
329 hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2") 329 hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
330 hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3") 330 hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
331 qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
331 332
332 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 333 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
333 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 334 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -363,6 +364,7 @@ class HILOCRResult(models.Model): ...@@ -363,6 +364,7 @@ class HILOCRResult(models.Model):
363 hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1") 364 hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1")
364 hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2") 365 hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
365 hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3") 366 hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
367 qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
366 368
367 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 369 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
368 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 370 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -397,6 +399,7 @@ class AFCSEOCRResult(models.Model): ...@@ -397,6 +399,7 @@ class AFCSEOCRResult(models.Model):
397 hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1") 399 hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1")
398 hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2") 400 hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
399 hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3") 401 hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
402 qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
400 403
401 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 404 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
402 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 405 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -432,6 +435,7 @@ class HILSEOCRResult(models.Model): ...@@ -432,6 +435,7 @@ class HILSEOCRResult(models.Model):
432 hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1") 435 hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1")
433 hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2") 436 hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
434 hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3") 437 hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
438 qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
435 439
436 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 440 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
437 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 441 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......
...@@ -914,8 +914,10 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, auto=True, ignore ...@@ -914,8 +914,10 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, auto=True, ignore
914 # is_cdfl = True # 车贷分离 914 # is_cdfl = True # 车贷分离
915 is_cdfl_bo = False # 车贷分离,主借 915 is_cdfl_bo = False # 车贷分离,主借
916 is_cdfl_co = False # 车贷分离,共借 916 is_cdfl_co = False # 车贷分离,共借
917 role_count = 0
917 # province = cms_info.get('province', '') 918 # province = cms_info.get('province', '')
918 for individual_info in cms_info.get('applicantInformation', []): 919 for individual_info in cms_info.get('applicantInformation', []):
920 role_count += 1
919 all_id_num = [] 921 all_id_num = []
920 922
921 license_dict = {} 923 license_dict = {}
...@@ -1440,6 +1442,10 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, auto=True, ignore ...@@ -1440,6 +1442,10 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, auto=True, ignore
1440 afc_contract_input.append((consts.SE_AFC_CON_FIELD[19], empty_str)) 1442 afc_contract_input.append((consts.SE_AFC_CON_FIELD[19], empty_str))
1441 1443
1442 contract_info[consts.AFC_CONTRACT_EN] = afc_contract_input 1444 contract_info[consts.AFC_CONTRACT_EN] = afc_contract_input
1445
1446 afc_contract_qrs_input = [(consts.SE_AFC_CON_QRS_FIELD[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, full_no))]
1447 contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input
1448
1443 compare_info['contract'] = contract_info 1449 compare_info['contract'] = contract_info
1444 return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh 1450 return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh
1445 1451
...@@ -1460,8 +1466,10 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, auto=Fals ...@@ -1460,8 +1466,10 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, auto=Fals
1460 # 个人信息证件------------------------------------------------------------------------------------------------------ 1466 # 个人信息证件------------------------------------------------------------------------------------------------------
1461 is_cdfl_bo = False # 车贷分离,主借 1467 is_cdfl_bo = False # 车贷分离,主借
1462 is_cdfl_co = False # 车贷分离,共借 1468 is_cdfl_co = False # 车贷分离,共借
1469 role_count = 0
1463 # province = cms_info.get('province', '') 1470 # province = cms_info.get('province', '')
1464 for individual_info in cms_info.get('applicantInformation', []): 1471 for individual_info in cms_info.get('applicantInformation', []):
1472 role_count += 1
1465 all_id_num = [] 1473 all_id_num = []
1466 1474
1467 license_dict = {} 1475 license_dict = {}
...@@ -1983,6 +1991,9 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, auto=Fals ...@@ -1983,6 +1991,9 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, auto=Fals
1983 afc_contract_input.append((consts.SE_AFC_CON_FIELD[19], empty_str)) 1991 afc_contract_input.append((consts.SE_AFC_CON_FIELD[19], empty_str))
1984 1992
1985 contract_info[consts.AFC_CONTRACT_EN] = afc_contract_input 1993 contract_info[consts.AFC_CONTRACT_EN] = afc_contract_input
1994
1995 afc_contract_qrs_input = [(consts.SE_AFC_CON_QRS_FIELD[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, full_no))]
1996 contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input
1986 compare_info['contract'] = contract_info 1997 compare_info['contract'] = contract_info
1987 return compare_info, cms_info.get('applicationVersion', 1), is_gsyh 1998 return compare_info, cms_info.get('applicationVersion', 1), is_gsyh
1988 1999
...@@ -2718,6 +2729,46 @@ def se_contract_compare(license_en, ocr_res_dict, strip_list, is_gsyh): ...@@ -2718,6 +2729,46 @@ def se_contract_compare(license_en, ocr_res_dict, strip_list, is_gsyh):
2718 return result_field_list, field_img_path_dict 2729 return result_field_list, field_img_path_dict
2719 2730
2720 2731
2732 def se_contract_qrs_compare(license_en, ocr_res_dict, strip_list):
2733 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en]
2734 ocr_res_str = ocr_res_dict.get(ocr_field)
2735
2736 result_field_list = []
2737 field_img_path_dict = dict()
2738
2739 if ocr_res_str is not None:
2740 ocr_res_list = json.loads(ocr_res_str)
2741
2742 contract_num_list = []
2743 for qrs_res in ocr_res_list:
2744 contract_num_list.append(qrs_res.get('合同编号', ''))
2745
2746 ocr_res = {
2747 '合同编号': contract_num_list
2748 }
2749
2750 for name, value in strip_list:
2751
2752 ocr_str_or_list = ocr_res.get(compare_logic[name][0])
2753
2754 if isinstance(ocr_str_or_list, list):
2755 ocr_str = json.dumps(ocr_str_or_list, ensure_ascii=False)
2756 else:
2757 ocr_str_or_list = ocr_str_or_list.strip()
2758 ocr_str = ocr_str_or_list
2759 result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
2760
2761 reason = compare_logic[name][3]
2762 img_path = empty_str
2763 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
2764 result_field_list.append((name, value, result, ocr_str, img_path, error_type, reason))
2765 else:
2766 for name, value in strip_list:
2767 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value,
2768 '{0}未找到'.format(license_en)))
2769
2770 return result_field_list, field_img_path_dict
2771
2721 def se_mvc34_compare(license_en, ocr_res_dict, field_list): 2772 def se_mvc34_compare(license_en, ocr_res_dict, field_list):
2722 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en] 2773 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en]
2723 ocr_res_str = ocr_res_dict.get(ocr_field) 2774 ocr_res_str = ocr_res_dict.get(ocr_field)
...@@ -2927,6 +2978,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list ...@@ -2927,6 +2978,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list
2927 result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, strip_list) 2978 result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, strip_list)
2928 elif license_en in [consts.HIL_CONTRACT_1_EN, consts.HIL_CONTRACT_2_EN, consts.HIL_CONTRACT_3_EN, consts.AFC_CONTRACT_EN]: 2979 elif license_en in [consts.HIL_CONTRACT_1_EN, consts.HIL_CONTRACT_2_EN, consts.HIL_CONTRACT_3_EN, consts.AFC_CONTRACT_EN]:
2929 result_field_list, field_img_path_dict = se_contract_compare(license_en, ocr_res_dict, strip_list, is_gsyh) 2980 result_field_list, field_img_path_dict = se_contract_compare(license_en, ocr_res_dict, strip_list, is_gsyh)
2981 elif license_en == consts.AFC_CONTRACT_QRS_EN:
2982 result_field_list, field_img_path_dict = se_contract_qrs_compare(license_en, ocr_res_dict, strip_list)
2930 elif license_en == consts.BS_EN: 2983 elif license_en == consts.BS_EN:
2931 result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto) 2984 result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto)
2932 else: 2985 else:
...@@ -2936,8 +2989,11 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list ...@@ -2936,8 +2989,11 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list
2936 for name, value, result, ocr_str, img_path, error_type, cn_reason in result_field_list: 2989 for name, value, result, ocr_str, img_path, error_type, cn_reason in result_field_list:
2937 total_fields += 1 2990 total_fields += 1
2938 if result == consts.RESULT_N: 2991 if result == consts.RESULT_N:
2939 # if license_en != consts.MVI_EN or name != consts.SE_NEW_ADD_FIELD[9]: 2992 # 确认书N2
2940 successful_at_this_level = False 2993 if license_en == consts.AFC_CONTRACT_QRS_EN and name == consts.SE_AFC_CON_QRS_FIELD[0] and ocr_str == empty_str:
2994 pass
2995 else:
2996 successful_at_this_level = False
2941 failed_count += 1 2997 failed_count += 1
2942 each_license_failed_count += 1 2998 each_license_failed_count += 1
2943 failure_field.append(name) 2999 failure_field.append(name)
......
...@@ -9,7 +9,21 @@ from .get_char import Finder ...@@ -9,7 +9,21 @@ from .get_char import Finder
9 import numpy as np 9 import numpy as np
10 10
11 11
12 def predict(pdf_info): 12 def extract_info(ocr_results):
13 contract_no = {
14 "words": None,
15 "position": None
16 }
17 for bbox, text in ocr_results.get('0', {}).values():
18 if text.startswith('CH-B'):
19 contract_no['words'] = text
20 contract_no['position'] = [bbox[0], bbox[1], bbox[2], bbox[-1]]
21 break
22
23 return {'page_1': {'合同编号': contract_no}}
24
25
26 def predict(pdf_info, is_qrs=False):
13 ocr_results = {} 27 ocr_results = {}
14 for pno in pdf_info: 28 for pno in pdf_info:
15 ocr_results[pno] = {} 29 ocr_results[pno] = {}
...@@ -32,9 +46,12 @@ def predict(pdf_info): ...@@ -32,9 +46,12 @@ def predict(pdf_info):
32 keys = list(range(len(ocr_result))) 46 keys = list(range(len(ocr_result)))
33 ocr_result = dict(zip(keys, ocr_result)) 47 ocr_result = dict(zip(keys, ocr_result))
34 ocr_results[pno] = ocr_result 48 ocr_results[pno] = ocr_result
35 # 输入是整个 PDF 中的信息 49 if is_qrs:
36 f = Finder(pdf_info, ocr_results=ocr_results) 50 results = extract_info(ocr_results)
37 results = f.get_info() 51 else:
52 # 输入是整个 PDF 中的信息
53 f = Finder(pdf_info, ocr_results=ocr_results)
54 results = f.get_info()
38 return results 55 return results
39 56
40 57
......
...@@ -646,6 +646,20 @@ class Comparison: ...@@ -646,6 +646,20 @@ class Comparison:
646 # input_str = input_str.replace('-', '') 646 # input_str = input_str.replace('-', '')
647 647
648 return self.is_after_today_pre(ocr_str) 648 return self.is_after_today_pre(ocr_str)
649
650 def se_qrs_compare(self, input_str, ocr_str_or_list, **kwargs):
651 try:
652 target_count_str, application_id = input_str.split('_')
653 search_count = 0
654 for item_str in ocr_str_or_list:
655 if item_str == application_id:
656 search_count += 1
657 if search_count >= int(target_count_str):
658 return self.RESULT_Y
659 else:
660 return self.RESULT_N
661 except Exception as e:
662 return self.RESULT_N
649 663
650 664
651 cp = Comparison() 665 cp = Comparison()
......
1 import pyodbc
2
3 hil_sql = """
4 ALTER TABLE hil_ocr_result ADD qrs_ocr nvarchar(max);
5 ALTER TABLE hil_se_ocr_result ADD qrs_ocr nvarchar(max);
6 """
7
8 afc_sql = """
9 ALTER TABLE afc_ocr_result ADD qrs_ocr nvarchar(max);
10 ALTER TABLE afc_se_ocr_result ADD qrs_ocr nvarchar(max);
11 """
12
13 hil_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
14
15 hil_cursor = hil_cnxn.cursor()
16 hil_cursor.execute(hil_sql)
17
18 hil_cursor.close()
19 hil_cnxn.close()
20
21 afc_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
22
23 afc_cursor = afc_cnxn.cursor()
24 afc_cursor.execute(afc_sql)
25
26 afc_cursor.close()
27 afc_cnxn.close()
...@@ -19,8 +19,10 @@ def get_pos_compare_info(pos_info): ...@@ -19,8 +19,10 @@ def get_pos_compare_info(pos_info):
19 custr_name = custr_id = '' 19 custr_name = custr_id = ''
20 20
21 # 身份证 21 # 身份证
22 role_count = 0
22 individual_cus_info_list = pos_info.get('individualCusInfo', []) 23 individual_cus_info_list = pos_info.get('individualCusInfo', [])
23 for individual_cus_info in individual_cus_info_list: 24 for individual_cus_info in individual_cus_info_list:
25 role_count += 1
24 customer_name = individual_cus_info.get('customerName', '').strip() 26 customer_name = individual_cus_info.get('customerName', '').strip()
25 id_num = individual_cus_info.get('idNum', '') 27 id_num = individual_cus_info.get('idNum', '')
26 applicant_type = individual_cus_info.get('applicantType', '') 28 applicant_type = individual_cus_info.get('applicantType', '')
...@@ -177,6 +179,9 @@ def get_pos_compare_info(pos_info): ...@@ -177,6 +179,9 @@ def get_pos_compare_info(pos_info):
177 afc_contract_input.append((consts.AFC_CON_FIELDS[11], empty_str)) 179 afc_contract_input.append((consts.AFC_CON_FIELDS[11], empty_str))
178 compare_info.setdefault(consts.AFC_CONTRACT_EN, []).append(afc_contract_input) 180 compare_info.setdefault(consts.AFC_CONTRACT_EN, []).append(afc_contract_input)
179 181
182 afc_contract_qrs_input = [(consts.AFC_CON_QRS_FIELDS[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, application_id_version))]
183 compare_info.setdefault(consts.AFC_CONTRACT_QRS_EN, []).append(afc_contract_qrs_input)
184
180 return compare_info 185 return compare_info
181 186
182 187
...@@ -191,6 +196,10 @@ def pre_compare_process(compare_info, ocr_res_dict, id_res_list): ...@@ -191,6 +196,10 @@ def pre_compare_process(compare_info, ocr_res_dict, id_res_list):
191 for field_list in items_list: 196 for field_list in items_list:
192 result_list = pre_compare_license_contract(license_en, ocr_res_dict, field_list) 197 result_list = pre_compare_license_contract(license_en, ocr_res_dict, field_list)
193 compare_result.setdefault(license_en, []).append(result_list) 198 compare_result.setdefault(license_en, []).append(result_list)
199 elif license_en == consts.AFC_CONTRACT_QRS_EN:
200 for field_list in items_list:
201 result_list = pre_compare_license_contract_qrs(license_en, ocr_res_dict, field_list)
202 compare_result.setdefault(license_en, []).append(result_list)
194 else: 203 else:
195 for field_list in items_list: 204 for field_list in items_list:
196 result_list = pre_compare_license(license_en, ocr_res_dict, field_list) 205 result_list = pre_compare_license(license_en, ocr_res_dict, field_list)
...@@ -376,6 +385,42 @@ def pre_compare_license_contract(license_en, ocr_res_dict, field_list): ...@@ -376,6 +385,42 @@ def pre_compare_license_contract(license_en, ocr_res_dict, field_list):
376 return result_field_list 385 return result_field_list
377 386
378 387
388 def pre_compare_license_contract_qrs(license_en, ocr_res_dict, field_list):
389 ocr_field, compare_logic, no_find_comment = consts.PRE_COMPARE_LOGIC_MAP[license_en]
390 ocr_res_str = ocr_res_dict.get(ocr_field)
391
392 result_field_list = []
393
394 if ocr_res_str is not None:
395 ocr_res_list = json.loads(ocr_res_str)
396
397 contract_num_list = []
398 for qrs_res in ocr_res_list:
399 contract_num_list.append(qrs_res.get('合同编号', ''))
400
401 ocr_res = {
402 '合同编号': contract_num_list
403 }
404
405 for name, value in field_list:
406
407 ocr_str_or_list = ocr_res.get(compare_logic[name][0])
408
409 if isinstance(ocr_str_or_list, list):
410 ocr_str = json.dumps(ocr_str_or_list, ensure_ascii=False)
411 else:
412 ocr_str_or_list = ocr_str_or_list.strip()
413 ocr_str = ocr_str_or_list
414 result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
415
416 comments = compare_logic[name][3]
417 result_field_list.append((value, ocr_str, result, comments))
418 else:
419 result_field_list.append((empty_str, empty_str, consts.RESULT_N, no_find_comment))
420
421 return result_field_list
422
423
379 def rebuild_result(compare_result): 424 def rebuild_result(compare_result):
380 # compare_result = { 425 # compare_result = {
381 # "is_pass": True, 426 # "is_pass": True,
...@@ -434,7 +479,7 @@ def get_empty_result(): ...@@ -434,7 +479,7 @@ def get_empty_result():
434 "input": "", 479 "input": "",
435 "ocr": "", 480 "ocr": "",
436 "field_is_pass": False, 481 "field_is_pass": False,
437 "comments": "未查找到OCR识别结果" 482 "comments": "预放款结果超时未返回,请直接提交放款"
438 }] 483 }]
439 }] 484 }]
440 } 485 }
......
...@@ -26,6 +26,7 @@ ASP_SUM_NAME = '附加产品融资贷款本金总金额' ...@@ -26,6 +26,7 @@ ASP_SUM_NAME = '附加产品融资贷款本金总金额'
26 26
27 HIL_CON_2_FIELDS = ['合同编号', '合同编号-正文', '车辆识别代码'] 27 HIL_CON_2_FIELDS = ['合同编号', '合同编号-正文', '车辆识别代码']
28 28
29 AFC_CON_QRS_FIELDS = ['合同编号']
29 AFC_CON_FIELDS = ['合同编号-每页', '合同编号-每页(no-asp)', '车架号-重要条款', '车架号', '还款账号', '户名', '开户行', 30 AFC_CON_FIELDS = ['合同编号-每页', '合同编号-每页(no-asp)', '车架号-重要条款', '车架号', '还款账号', '户名', '开户行',
30 '还款计划表', 'ASP项目详情-重要条款', 'ASP项目详情', '见证人签字', '见证人日期'] 31 '还款计划表', 'ASP项目详情-重要条款', 'ASP项目详情', '见证人签字', '见证人日期']
31 AFC_HT_DATE_FIELDS = ['主借人日期', '共借人日期', '保证人日期1', '保证人日期2'] 32 AFC_HT_DATE_FIELDS = ['主借人日期', '共借人日期', '保证人日期1', '保证人日期2']
...@@ -38,6 +39,7 @@ BD_EN = 'Insurance' ...@@ -38,6 +39,7 @@ BD_EN = 'Insurance'
38 HIL_CONTRACT_1_EN = '售后回租合同' 39 HIL_CONTRACT_1_EN = '售后回租合同'
39 HIL_CONTRACT_2_EN = '车辆租赁抵押合同' 40 HIL_CONTRACT_2_EN = '车辆租赁抵押合同'
40 AFC_CONTRACT_EN = '合同' 41 AFC_CONTRACT_EN = '合同'
42 AFC_CONTRACT_QRS_EN = '送达地址确认书'
41 43
42 ID_OCR_FIELD = 'ic_ocr' 44 ID_OCR_FIELD = 'ic_ocr'
43 MVI_OCR_FIELD = 'mvi_ocr' 45 MVI_OCR_FIELD = 'mvi_ocr'
...@@ -47,6 +49,7 @@ BD_FIELD = 'bd_ocr' ...@@ -47,6 +49,7 @@ BD_FIELD = 'bd_ocr'
47 HIL_CONTRACT_1_FIELD = 'hil_contract_1_ocr' 49 HIL_CONTRACT_1_FIELD = 'hil_contract_1_ocr'
48 HIL_CONTRACT_2_FIELD = 'hil_contract_2_ocr' 50 HIL_CONTRACT_2_FIELD = 'hil_contract_2_ocr'
49 HT_FIELD = 'ht_ocr' 51 HT_FIELD = 'ht_ocr'
52 QRS_FIELD = 'qrs_ocr'
50 53
51 MVI_COMPARE_LOGIC = { 54 MVI_COMPARE_LOGIC = {
52 MVI_FIELDS[0]: ('车辆识别代码', 'se_common_compare', {}, '发票车架号与系统不一致'), 55 MVI_FIELDS[0]: ('车辆识别代码', 'se_common_compare', {}, '发票车架号与系统不一致'),
...@@ -93,6 +96,10 @@ HIL_CONTRACT_2_COMPARE_LOGIC = { ...@@ -93,6 +96,10 @@ HIL_CONTRACT_2_COMPARE_LOGIC = {
93 HIL_CON_2_FIELDS[2]: ('车辆识别代码', 'se_common_compare', {}, '车辆租赁抵押合同车辆识别代码与系统车架号不一致'), 96 HIL_CON_2_FIELDS[2]: ('车辆识别代码', 'se_common_compare', {}, '车辆租赁抵押合同车辆识别代码与系统车架号不一致'),
94 } 97 }
95 98
99 QRS_COMPARE_LOGIC = {
100 AFC_CON_QRS_FIELDS[0]: ('合同编号', 'se_qrs_compare', {}, '请确认是否提供合格的送达地址确认书'),
101 }
102
96 HT_COMPARE_LOGIC = { 103 HT_COMPARE_LOGIC = {
97 AFC_CON_FIELDS[0]: ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'), 104 AFC_CON_FIELDS[0]: ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'),
98 # '合同编号-每页(no-asp)': ('合同编号-每页', 'se_list_compare', {'pop_last': True}, '合同编号与系统不一致'), 105 # '合同编号-每页(no-asp)': ('合同编号-每页', 'se_list_compare', {'pop_last': True}, '合同编号与系统不一致'),
...@@ -131,6 +138,7 @@ PRE_COMPARE_LOGIC_MAP = { ...@@ -131,6 +138,7 @@ PRE_COMPARE_LOGIC_MAP = {
131 HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, '请确认是否已完成抵押登记豁免函签署'), 138 HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, '请确认是否已完成抵押登记豁免函签署'),
132 BD_EN: (BD_FIELD, BD_COMPARE_LOGIC, '请确认是否提供保单'), 139 BD_EN: (BD_FIELD, BD_COMPARE_LOGIC, '请确认是否提供保单'),
133 AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, '请确认是否已完成车辆抵押贷款合同签署'), 140 AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, '请确认是否已完成车辆抵押贷款合同签署'),
141 AFC_CONTRACT_QRS_EN: (QRS_FIELD, QRS_COMPARE_LOGIC, '请确认是否提供合格的送达地址确认书'),
134 HIL_CONTRACT_1_EN: (HIL_CONTRACT_1_FIELD, HIL_CONTRACT_1_COMPARE_LOGIC, '请确认是否已完成售后回租合同签署'), 142 HIL_CONTRACT_1_EN: (HIL_CONTRACT_1_FIELD, HIL_CONTRACT_1_COMPARE_LOGIC, '请确认是否已完成售后回租合同签署'),
135 HIL_CONTRACT_2_EN: (HIL_CONTRACT_2_FIELD, HIL_CONTRACT_2_COMPARE_LOGIC, '请确认是否已完成车辆租赁抵押合同签署'), 143 HIL_CONTRACT_2_EN: (HIL_CONTRACT_2_FIELD, HIL_CONTRACT_2_COMPARE_LOGIC, '请确认是否已完成车辆租赁抵押合同签署'),
136 } 144 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!