b98face7 by 周伟奇

fix cms

1 parent bb783cf1
...@@ -1517,6 +1517,14 @@ SE_FIRST_ID_FIELD_MAPPING = { ...@@ -1517,6 +1517,14 @@ SE_FIRST_ID_FIELD_MAPPING = {
1517 'ITRES': (RP_EN, SE_FIRST_ID_FIELD), 1517 'ITRES': (RP_EN, SE_FIRST_ID_FIELD),
1518 } 1518 }
1519 1519
1520 SE_CMS_FIRST_ID_FIELD_MAPPING = {
1521 'PRC ID': (ID_EN, True),
1522 'Passport No': (PP_EN, False),
1523 'HongKong and Macao Resident Permit to Mainland': (EEP_EN, False),
1524 'TaiWan Resident Permit to Mainland': (EEP_EN, False),
1525 'Hongkong/Macau/Taiwan Resident ID': (RP_EN, False),
1526 }
1527
1520 SE_SECOND_ID_FIELD_MAPPING = { 1528 SE_SECOND_ID_FIELD_MAPPING = {
1521 'ITPRC': (ID_EN, SE_SECOND_ID_FIELD), 1529 'ITPRC': (ID_EN, SE_SECOND_ID_FIELD),
1522 'ITPSP': (PP_EN, SE_SECOND_ID_FIELD), 1530 'ITPSP': (PP_EN, SE_SECOND_ID_FIELD),
...@@ -1717,3 +1725,4 @@ APPLICANT_TYPE_MAP = { ...@@ -1717,3 +1725,4 @@ APPLICANT_TYPE_MAP = {
1717 'Mortgager': 'GAUTR2' 1725 'Mortgager': 'GAUTR2'
1718 } 1726 }
1719 1727
1728 APPLICANT_TYPE_ORDER = ['Borrower', 'Co Borrower', 'Guarantor', 'Mortgager']
......
...@@ -40,17 +40,17 @@ empty_error_type = 1000 ...@@ -40,17 +40,17 @@ empty_error_type = 1000
40 des_key = conf.CMS_DES_KEY 40 des_key = conf.CMS_DES_KEY
41 41
42 42
43 class FakePOS: 43 # class FakePOS:
44 44 #
45 def __init__(self, 45 # def __init__(self,
46 application_id, 46 # application_id,
47 first_submmison_date, 47 # first_submmison_date,
48 application_version, 48 # application_version,
49 customer_type): 49 # customer_type):
50 self.application_id = application_id 50 # self.application_id = application_id
51 self.first_submmison_date = first_submmison_date 51 # self.first_submmison_date = first_submmison_date
52 self.application_version = application_version 52 # self.application_version = application_version
53 self.customer_type = customer_type 53 # self.customer_type = customer_type
54 54
55 55
56 def name_check(ocr_res_dict, second_ocr_field, second_compare_list, second_id_num, name): 56 def name_check(ocr_res_dict, second_ocr_field, second_compare_list, second_id_num, name):
...@@ -724,6 +724,196 @@ def ca_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res ...@@ -724,6 +724,196 @@ def ca_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
724 traceback.format_exc())) 724 traceback.format_exc()))
725 725
726 726
727 def get_se_cms_compare_info(last_obj, application_entity, detect_list):
728 cms_info = json.loads(last_obj.content)
729
730 compare_info = {}
731
732 individual_info_dict = {}
733 main_role_info = {}
734 company_info_list = []
735
736 province = cms_info.get('province', '')
737
738 for individual_info in cms_info.get('applicantInformation', []):
739 all_id_num = []
740
741 license_dict = {}
742
743 customer_name = individual_info.get('name', '')
744 legal_name = individual_info.get('legalRepName', '')
745 establishment_date = individual_info.get('establishmentDate', '')
746 date_of_birth = individual_info.get('dateOfBirth', '')
747
748 for id_info in individual_info.get('IDInformation', []):
749 if id_info.get('idType') in consts.SE_CMS_FIRST_ID_FIELD_MAPPING:
750 license_en, is_prc = consts.SE_CMS_FIRST_ID_FIELD_MAPPING[id_info['idType']]
751 # ['customerName', 'idNum', 'dateOfBirth', 'idExpiryDate', 'hukouProvince']
752 id_num = decode_des(id_info.get('idNum', ''), des_key)
753 field_input = [
754 ('customerName', customer_name),
755 ('idNum', id_num),
756 ('dateOfBirth', date_of_birth),
757 ('idExpiryDate', id_info.get('idExpiryDate', '')),
758 ]
759 if is_prc:
760 field_input.append(('hukouProvince', province))
761 license_dict[license_en] = field_input
762 all_id_num.append(id_num)
763 elif id_info.get('idType') == 'Unified Social Credit Code':
764 # ['companyName', 'legalRepName', 'businessLicenseNo', 'organizationCreditCode',
765 # 'taxRegistrationCertificateNo', 'establishmentDate', 'businessLicenseDueDate']
766 id_num = decode_des(id_info.get('idNum', ''), des_key)
767 bl_field_input = [
768 ('companyName', customer_name),
769 ('legalRepName', legal_name),
770 ('businessLicenseNo', id_num),
771 ('organizationCreditCode', id_num),
772 ('taxRegistrationCertificateNo', id_num),
773 ('establishmentDate', establishment_date),
774 ('businessLicenseDueDate', id_info.get('idExpiryDate', '')),
775 ]
776 license_dict[consts.BL_EN] = bl_field_input
777 # all_id_num.append(id_num)
778 if individual_info.get('customersubType', '') == 'Corporate':
779 company_info_list.append((customer_name, id_num))
780
781 if individual_info.get('customersubType', '').startswith('Self Employed'):
782 sep_field_input = [
783 ('companyName', customer_name),
784 ('organizationType', individual_info.get('selfEmployedSubType', '')),
785 ]
786 license_dict[consts.BL_EN] = sep_field_input
787
788 if len(all_id_num) > 0:
789 main_role_info.setdefault(individual_info['applicantType'], []).append(
790 (customer_name, '、'.join(all_id_num), all_id_num[0])
791 )
792
793 if len(license_dict) > 0:
794 individual_info_dict.setdefault(individual_info['applicantType'], []).append(license_dict)
795
796 compare_info['applicantInformation'] = individual_info_dict
797
798 main_name = main_num = hmh_name = hmh_id = ''
799 for applicant_type in consts.APPLICANT_TYPE_ORDER:
800 if applicant_type in main_role_info:
801 main_name, main_num, _ = main_role_info[applicant_type][0]
802 hmh_name, _, hmh_id = main_role_info[applicant_type][0]
803 break
804
805 dda_name_list = []
806 dda_num_list = []
807 for applicant_type in consts.APPLICANT_TYPE_ORDER[:2]:
808 if applicant_type in main_role_info:
809 for dda_name_part, _, dda_num_part in main_role_info[applicant_type]:
810 dda_name_list.append(dda_name_part)
811 dda_num_list.append(dda_num_part)
812 dda_name = '、'.join(dda_name_list)
813 dda_num = '、'.join(dda_num_list)
814 del main_role_info
815
816 if len(company_info_list) > 0:
817 company_info = company_info_list[0]
818 else:
819 company_info = None
820
821 vehicle_info = {}
822 vehicle_field_input = []
823 vehicle_status = cms_info.get('vehicleStatus', '')
824 first_submmison_date = cms_info.get('submissionDate', '')
825 vin_no = cms_info.get('vehicleInformation', {}).get('vinNo', '')
826 amount = str(cms_info.get('totalFinanceAmount', ''))
827 if vehicle_status == 'New':
828 vehicle_field_input.append(('vinNo', vin_no))
829 vehicle_field_input.append(('dealer', cms_info.get('dealerName', '')))
830 vehicle_field_input.append(('vehicleTransactionAmount', amount))
831
832 if isinstance(company_info, tuple):
833 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[0], company_info[0]))
834 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[1], company_info[1]))
835 else:
836 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[0], main_name))
837 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[1], main_num))
838 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[2], first_submmison_date))
839 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[3], consts.SE_STAMP_VALUE))
840 vehicle_info[consts.MVI_EN] = vehicle_field_input
841 else:
842 gb_field_input = [
843 ('vinNo', vin_no),
844 ]
845 gb34_field_input = []
846 jypz_field_input = []
847 vehicle_field_input.append(('vinNo', vin_no))
848 vehicle_field_input.append(('vehicleTransactionAmount', amount))
849 if isinstance(company_info, tuple):
850 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[0], company_info[0]))
851 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[1], company_info[1]))
852 jypz_field_input.append((consts.SE_NEW_ADD_FIELD[0], company_info[0]))
853 jypz_field_input.append((consts.SE_NEW_ADD_FIELD[1], company_info[1]))
854 gb34_field_input.append((consts.SE_GB_USED_FIELD[0], company_info[0]))
855 gb34_field_input.append((consts.SE_GB_USED_FIELD[1], company_info[1]))
856 else:
857 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[0], main_name))
858 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[1], main_num))
859 jypz_field_input.append((consts.SE_NEW_ADD_FIELD[0], main_name))
860 jypz_field_input.append((consts.SE_NEW_ADD_FIELD[1], main_num))
861 gb34_field_input.append((consts.SE_GB_USED_FIELD[0], main_name))
862 gb34_field_input.append((consts.SE_GB_USED_FIELD[1], main_num))
863 gb34_field_input.append((consts.SE_GB_USED_FIELD[2], first_submmison_date))
864 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[2], first_submmison_date))
865 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[3], consts.SE_STAMP_VALUE))
866 jypz_field_input.append(('vinNo', vin_no))
867 jypz_field_input.append(('vehicleTransactionAmount', amount))
868 jypz_field_input.append((consts.SE_GB_USED_FIELD[-1], first_submmison_date))
869
870 vehicle_info[consts.MVC_EN] = gb_field_input
871 vehicle_info[consts.MVC34_EN] = gb34_field_input
872 if not detect_list[0]:
873 vehicle_info[consts.UCI_EN] = vehicle_field_input
874 if not detect_list[1]:
875 vehicle_info[consts.JYPZ_EN] = jypz_field_input
876 if detect_list[0] and detect_list[1]:
877 vehicle_info[consts.UCI_EN] = vehicle_field_input
878 compare_info['vehicleInfo'] = vehicle_info
879
880 bank_info = {}
881 bank_name = cms_info.get('bankAccountDetails', {}).get('bankName', '')
882 account_no = decode_des(cms_info.get('bankAccountDetails', {}).get('accountNo', ''), des_key)
883 is_gsyh = True if '工商' in bank_name else False
884 bank_field_input = [
885 ('accountNo', account_no),
886 ('bankName', bank_name),
887 ]
888 bank_info[consts.BC_EN] = bank_field_input
889
890 if is_gsyh or not detect_list[-1]:
891 dda_field_input = [
892 ('applicationId(1)', last_obj.application_id),
893 ('applicationId(2)', last_obj.application_id),
894 ('bankName', bank_name),
895 ('companyName', consts.HIL_COMPANY_NAME if application_entity in consts.HIL_SET else consts.AFC_COMPANY_NAME),
896 ('customerName', dda_name),
897 ('idNum', dda_num),
898 ('accountHolderName', cms_info.get('bankAccountDetails', {}).get('accountHolderName', '')),
899 ('accountNo', account_no),
900 ]
901 bank_info[consts.DDA_EN] = dda_field_input
902 compare_info['bankInfo'] = bank_info
903
904 if not detect_list[2]:
905 other_info = {}
906 hmh_field_input = [
907 (consts.SE_HMH_FIELD[0], hmh_name),
908 (consts.SE_HMH_FIELD[1], hmh_id),
909 (consts.SE_HMH_FIELD[2], last_obj.application_id)
910 ]
911 other_info[consts.HMH_EN] = hmh_field_input
912 compare_info['other'] = other_info
913
914 return compare_info, cms_info.get('applicationVersion', 1)
915
916
727 def get_se_compare_info(last_obj, application_entity, detect_list): 917 def get_se_compare_info(last_obj, application_entity, detect_list):
728 compare_info = {} 918 compare_info = {}
729 individual_info_dict = {} 919 individual_info_dict = {}
...@@ -900,7 +1090,7 @@ def get_se_compare_info(last_obj, application_entity, detect_list): ...@@ -900,7 +1090,7 @@ def get_se_compare_info(last_obj, application_entity, detect_list):
900 return compare_info 1090 return compare_info
901 1091
902 1092
903 def rebuild_compare_info(last_obj, application_id): 1093 # def rebuild_compare_info(last_obj, application_id):
904 # { 1094 # {
905 # "content": { 1095 # "content": {
906 # "financeCompany": "宝马汽车金融有限公司", 1096 # "financeCompany": "宝马汽车金融有限公司",
...@@ -1002,69 +1192,69 @@ def rebuild_compare_info(last_obj, application_id): ...@@ -1002,69 +1192,69 @@ def rebuild_compare_info(last_obj, application_id):
1002 # } 1192 # }
1003 # } 1193 # }
1004 1194
1005 cms_info = json.loads(last_obj.content) 1195 # cms_info = json.loads(last_obj.content)
1006 1196 #
1007 fake_pos = FakePOS(application_id, 1197 # fake_pos = FakePOS(application_id,
1008 cms_info.get('submissionDate', ''), 1198 # cms_info.get('submissionDate', ''),
1009 cms_info.get('applicationVersion', 1), 1199 # cms_info.get('applicationVersion', 1),
1010 cms_info.get('applicantInformation', [])[0].get('customersubType', '')) 1200 # cms_info.get('applicantInformation', [])[0].get('customersubType', ''))
1011 1201 #
1012 fake_pos.bank_info = json.dumps( 1202 # fake_pos.bank_info = json.dumps(
1013 { 1203 # {
1014 'accountNo': decode_des(cms_info.get('bankAccountDetails', {}).get('accountNo', ''), des_key), 1204 # 'accountNo': decode_des(cms_info.get('bankAccountDetails', {}).get('accountNo', ''), des_key),
1015 'bankName': cms_info.get('bankAccountDetails', {}).get('bankName', ''), 1205 # 'bankName': cms_info.get('bankAccountDetails', {}).get('bankName', ''),
1016 'accountHolderName': cms_info.get('bankAccountDetails', {}).get('accountHolderName', ''), 1206 # 'accountHolderName': cms_info.get('bankAccountDetails', {}).get('accountHolderName', ''),
1017 } 1207 # }
1018 ) 1208 # )
1019 1209 #
1020 fake_pos.vehicle_info = json.dumps( 1210 # fake_pos.vehicle_info = json.dumps(
1021 { 1211 # {
1022 'vehicleStatus': cms_info.get('vehicleStatus', ''), 1212 # 'vehicleStatus': cms_info.get('vehicleStatus', ''),
1023 'vinNo': cms_info.get('vehicleInformation', {}).get('vinNo', ''), 1213 # 'vinNo': cms_info.get('vehicleInformation', {}).get('vinNo', ''),
1024 'dealer': cms_info.get('dealerName', ''), 1214 # 'dealer': cms_info.get('dealerName', ''),
1025 'vehicleTransactionAmount': str(cms_info.get('totalFinanceAmount', '')), 1215 # 'vehicleTransactionAmount': str(cms_info.get('totalFinanceAmount', '')),
1026 } 1216 # }
1027 ) 1217 # )
1028 1218 #
1029 individual_cus_info = [] 1219 # individual_cus_info = []
1030 for individual_cus in cms_info.get('applicantInformation', []): 1220 # for individual_cus in cms_info.get('applicantInformation', []):
1031 id_type = id_num = id_date = second_id_type = second_id_num = None 1221 # id_type = id_num = id_date = second_id_type = second_id_num = None
1032 for idx, id_info in enumerate(individual_cus.get('', [])): 1222 # for idx, id_info in enumerate(individual_cus.get('', [])):
1033 if idx > 1: 1223 # if idx > 1:
1034 break 1224 # break
1035 elif idx == 0: 1225 # elif idx == 0:
1036 id_type = id_info.get('idType') 1226 # id_type = id_info.get('idType')
1037 id_num = decode_des(id_info.get('idNum')) 1227 # id_num = decode_des(id_info.get('idNum'))
1038 id_date = id_info.get('idExpiryDate') 1228 # id_date = id_info.get('idExpiryDate')
1039 else: 1229 # else:
1040 second_id_type = id_info.get('idType') 1230 # second_id_type = id_info.get('idType')
1041 second_id_num = decode_des(id_info.get('idNum')) 1231 # second_id_num = decode_des(id_info.get('idNum'))
1042 individual_cus_info.append( 1232 # individual_cus_info.append(
1043 { 1233 # {
1044 'applicantType': consts.APPLICANT_TYPE_MAP.get(individual_cus.get('applicantType')), 1234 # 'applicantType': consts.APPLICANT_TYPE_MAP.get(individual_cus.get('applicantType')),
1045 'customerType': individual_cus.get('customersubType'), 1235 # 'customerType': individual_cus.get('customersubType'),
1046 1236 #
1047 'idType': id_type, 1237 # 'idType': id_type,
1048 'idNum': id_num, 1238 # 'idNum': id_num,
1049 'idExpiryDate': id_date, 1239 # 'idExpiryDate': id_date,
1050 1240 #
1051 'customerName': individual_cus.get('name'), 1241 # 'customerName': individual_cus.get('name'),
1052 'dateOfBirth': individual_cus.get('dateOfBirth', ''), 1242 # 'dateOfBirth': individual_cus.get('dateOfBirth', ''),
1053 'hukouProvince': cms_info.get('province', ''), 1243 # 'hukouProvince': cms_info.get('province', ''),
1054 1244 #
1055 'secondIdType': second_id_type, 1245 # 'secondIdType': second_id_type,
1056 'secondIdNum': second_id_num, 1246 # 'secondIdNum': second_id_num,
1057 1247 #
1058 'companyName': individual_cus.get('name'), 1248 # 'companyName': individual_cus.get('name'),
1059 'selfEmployedSubType': individual_cus.get('selfEmployedSubType', ''), 1249 # 'selfEmployedSubType': individual_cus.get('selfEmployedSubType', ''),
1060 } 1250 # }
1061 ) 1251 # )
1062 1252 #
1063 fake_pos.individual_cus_info = json.dumps(individual_cus_info) 1253 # fake_pos.individual_cus_info = json.dumps(individual_cus_info)
1064 1254 #
1065 fake_pos.corporate_cus_info = None 1255 # fake_pos.corporate_cus_info = None
1066 1256 #
1067 return fake_pos 1257 # return fake_pos
1068 1258
1069 1259
1070 def se_compare_license(license_en, ocr_res_dict, field_list): 1260 def se_compare_license(license_en, ocr_res_dict, field_list):
...@@ -1289,9 +1479,13 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res ...@@ -1289,9 +1479,13 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
1289 # 比对逻辑 1479 # 比对逻辑
1290 start_time = datetime.now() 1480 start_time = datetime.now()
1291 detect_list = se_result_detect(ocr_res_dict) 1481 detect_list = se_result_detect(ocr_res_dict)
1482 # if is_cms:
1483 # last_obj = rebuild_compare_info(last_obj, application_id)
1292 if is_cms: 1484 if is_cms:
1293 last_obj = rebuild_compare_info(last_obj, application_id) 1485 compare_info, application_version = get_se_cms_compare_info(last_obj, application_entity, detect_list)
1486 else:
1294 compare_info = get_se_compare_info(last_obj, application_entity, detect_list) 1487 compare_info = get_se_compare_info(last_obj, application_entity, detect_list)
1488 application_version = last_obj.application_version
1295 compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str = se_compare_process( 1489 compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str = se_compare_process(
1296 compare_info, ocr_res_dict) 1490 compare_info, ocr_res_dict)
1297 compare_log.info('{0} [SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format( 1491 compare_log.info('{0} [SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format(
...@@ -1311,7 +1505,7 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res ...@@ -1311,7 +1505,7 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
1311 res_obj.compare_count = total_fields 1505 res_obj.compare_count = total_fields
1312 res_obj.failed_count = failed_count 1506 res_obj.failed_count = failed_count
1313 res_obj.is_finish = successful_at_this_level 1507 res_obj.is_finish = successful_at_this_level
1314 res_obj.version = '{0}{1}{2}'.format(consts.INFO_SOURCE[0], consts.SPLIT_STR, last_obj.application_version) 1508 res_obj.version = '{0}{1}{2}'.format(consts.INFO_SOURCE[0], consts.SPLIT_STR, application_version)
1315 # res_obj.reason1_count = reason1_count 1509 # res_obj.reason1_count = reason1_count
1316 res_obj.result = json.dumps(compare_result) 1510 res_obj.result = json.dumps(compare_result)
1317 res_obj.update_time = datetime.now() 1511 res_obj.update_time = datetime.now()
...@@ -1338,7 +1532,7 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res ...@@ -1338,7 +1532,7 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
1338 failure_reason=failure_reason_str, 1532 failure_reason=failure_reason_str,
1339 process_name=ProcessName.SE_CACOMPARE.value, 1533 process_name=ProcessName.SE_CACOMPARE.value,
1340 total_fields=total_fields, 1534 total_fields=total_fields,
1341 workflow_name=last_obj.customer_type, 1535 workflow_name='' if is_cms else last_obj.customer_type,
1342 ) 1536 )
1343 compare_log.info('{0} [SE] [report save success] [entity={1}] [id={2}] [ocr_res_id={3}]'.format( 1537 compare_log.info('{0} [SE] [report save success] [entity={1}] [id={2}] [ocr_res_id={3}]'.format(
1344 log_base, application_entity, application_id, ocr_res_id)) 1538 log_base, application_entity, application_id, ocr_res_id))
...@@ -1348,7 +1542,7 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res ...@@ -1348,7 +1542,7 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
1348 traceback.format_exc())) 1542 traceback.format_exc()))
1349 1543
1350 # cms结果发送 1544 # cms结果发送
1351 if is_cms: 1545 # if is_cms:
1352 try: 1546 try:
1353 application_link = '{0}/showList/showList?entity={1}&scheme={2}&case_id={3}'.format( 1547 application_link = '{0}/showList/showList?entity={1}&scheme={2}&case_id={3}'.format(
1354 conf.BASE_URL, application_entity, consts.COMPARE_DOC_SCHEME_LIST[1], application_id) 1548 conf.BASE_URL, application_entity, consts.COMPARE_DOC_SCHEME_LIST[1], application_id)
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!