6f8d522c by 周伟奇

fix gcap bug

1 parent 867f6a13
...@@ -1048,6 +1048,7 @@ ITPRC = [ ...@@ -1048,6 +1048,7 @@ ITPRC = [
1048 ('idNum', '公民身份号码', 'common_compare', {}), 1048 ('idNum', '公民身份号码', 'common_compare', {}),
1049 # 20200410-20250410 OCR识别为长期,向GCAP发送:2099-12-31 00:00:00.0 1049 # 20200410-20250410 OCR识别为长期,向GCAP发送:2099-12-31 00:00:00.0
1050 ('idExpiryDate', '有效期限', 'date_compare', {'long': True, 'ocr_split': True, 'input_replace': ''}), 1050 ('idExpiryDate', '有效期限', 'date_compare', {'long': True, 'ocr_split': True, 'input_replace': ''}),
1051 ('dateOfBirth', '出生年月', 'date_compare', {'input_replace': ''}), # 20231023
1051 ] 1052 ]
1052 1053
1053 # 护照 1054 # 护照
...@@ -1064,15 +1065,15 @@ ITHKM_ITTID = [ ...@@ -1064,15 +1065,15 @@ ITHKM_ITTID = [
1064 ('idNum', '证件号码', 'common_compare', {}), 1065 ('idNum', '证件号码', 'common_compare', {}),
1065 ('idExpiryDate', '有效期限', 'date_compare', {'ocr_split': True, 'input_replace': '.'}), # 2013.10.24-2023.10.23 1066 ('idExpiryDate', '有效期限', 'date_compare', {'ocr_split': True, 'input_replace': '.'}), # 2013.10.24-2023.10.23
1066 ('dateOfBirth', '出生日期', 'date_compare', {'input_replace': '.'}), # 2023.10.23 1067 ('dateOfBirth', '出生日期', 'date_compare', {'input_replace': '.'}), # 2023.10.23
1067 # 'secondIdNum': ''
1068 ] 1068 ]
1069 1069
1070 # 居住证 1070 # 居住证
1071 ITRES = [ 1071 ITRES = [
1072 ('customerChineseName', '姓名', 'common_compare', {}), 1072 ('customerChineseName', '姓名', 'common_compare', {}),
1073 ('idNum', '公民身份号码', 'common_compare', {}), 1073 ('idNum', '公民身份号码', 'common_compare', {}),
1074 ('secondIdNum', '通行证号码', 'common_compare', {}),
1074 ('idExpiryDate', '有效期限', 'date_compare', {'ocr_split': True, 'input_replace': ''}), # 20200410-20250410 1075 ('idExpiryDate', '有效期限', 'date_compare', {'ocr_split': True, 'input_replace': ''}), # 20200410-20250410
1075 ('secondIdNum', '通行证号码', 'common_compare', {}) 1076 ('dateOfBirth', '出生年月', 'date_compare', {'input_replace': ''}), # 20231023
1076 ] 1077 ]
1077 1078
1078 ID_TYPE_COMPARE = { 1079 ID_TYPE_COMPARE = {
...@@ -1127,6 +1128,11 @@ RESULT_Y = 'Y' ...@@ -1127,6 +1128,11 @@ RESULT_Y = 'Y'
1127 RESULT_N = 'N' 1128 RESULT_N = 'N'
1128 RESULT_NA = 'NA' 1129 RESULT_NA = 'NA'
1129 1130
1131 IN_ORDER = ('applicantType', 'idType', 'secondIdType', 'customerType', 'customerChineseName', 'idNum', 'secondIdNum',
1132 "idExpiryDate", "dateOfBirth", 'companyName', "registeredCapital", 'selfEmployedSubType',)
1133 UC_ORDER = ('vinNo', 'manufactureDate', 'firstRegistrationDate')
1134 CO_ORDER = ('customerChineseName', 'legalRepName', 'idNum', 'businessLicenseNo', 'taxRegistrationCode',
1135 'incorporationDate', 'businessLicenseDueDate', 'capitalRegAmount')
1130 1136
1131 1137
1132 1138
......
...@@ -4,6 +4,7 @@ from settings import conf ...@@ -4,6 +4,7 @@ from settings import conf
4 from common.tools.dict_to_xml import dicttoxml, escape_xml 4 from common.tools.dict_to_xml import dicttoxml, escape_xml
5 from apps.doc import consts 5 from apps.doc import consts
6 from apps.doc.exceptions import GCAPException 6 from apps.doc.exceptions import GCAPException
7 from collections import OrderedDict
7 8
8 9
9 class GCAP: 10 class GCAP:
...@@ -24,6 +25,106 @@ class GCAP: ...@@ -24,6 +25,106 @@ class GCAP:
24 response = requests.post(self.url, headers=self.headers, data=data, verify=False, auth=self.auth) 25 response = requests.post(self.url, headers=self.headers, data=data, verify=False, auth=self.auth)
25 if response.status_code != 200: 26 if response.status_code != 200:
26 raise GCAPException('GCAP response with code: {0}'.format(response.status_code)) 27 raise GCAPException('GCAP response with code: {0}'.format(response.status_code))
28 return response.status_code
29
30 def test_send(self):
31 test_res = OrderedDict({
32 'OCR_Input': {
33 'uniqSeq': '201809301905121000',
34 'applicationId': 'CH-B000046340',
35 'applicationEntity': 'AFC',
36 'applicationVersion': 3,
37 'vehicleStatus': 'PCNEW',
38 'wholeResult': 'Y',
39 'wholeResultMessage': 'msg',
40 'applicationLink': 'url1',
41 'individualCusInfo': [
42 {
43 'applicantType': 'COAPP',
44 'idType': 'ITARI',
45 'customerType': 'TCDAS',
46 'customerChineseName': 'co-app-name',
47 'idNum': 'idNum',
48 'idExpiryDate': '2020-02-02T15:52:18.1049637+08:00',
49 'dateOfBirth': '2020-02-02T15:52:18.1049637+08:00',
50 'registeredCapital': '20192',
51 'customerChineseNameResult': 'Y',
52 'idNumResult': 'Y',
53 'secondIdNumResult': 'Y',
54 'idExpiryDateResult': 'Y',
55 'dateOfBirthResult': 'Y',
56 'companyNameResult': 'Y',
57 'registeredCapitalResult': 'Y',
58 'selfEmployedSubTypeResult': 'Y',
59 },
60 {
61 'applicantType': 'GAUTR1',
62 'idType': 'ITPSP',
63 'customerType': 'TCDAS',
64 'customerChineseName': 'ga1-name',
65 'idNum': 'id3',
66 'idExpiryDate': '2020-03-03T15:52:18.1049637+08:00',
67 'dateOfBirth': '2020-03-03T15:52:18.1049637+08:00',
68 'registeredCapital': '20193',
69 'customerChineseNameResult': 'Y',
70 'idNumResult': 'Y',
71 'secondIdNumResult': 'Y',
72 'idExpiryDateResult': 'Y',
73 'dateOfBirthResult': 'Y',
74 'companyNameResult': 'Y',
75 'registeredCapitalResult': 'Y',
76 'selfEmployedSubTypeResult': 'Y',
77 },
78 {
79 'applicantType': 'GAUTR2',
80 'idType': 'ITHKM',
81 'customerType': 'TCDAS',
82 'customerChineseName': 'ga2-name',
83 'idNum': 'id4',
84 'idExpiryDate': '2020-04-04T15:52:18.1049637+08:00',
85 'dateOfBirth': '2020-04-04T15:52:18.1049637+08:00',
86 'registeredCapital': '20194',
87 'customerChineseNameResult': 'Y',
88 'idNumResult': 'Y',
89 'secondIdNumResult': 'Y',
90 'idExpiryDateResult': 'Y',
91 'dateOfBirthResult': 'Y',
92 'companyNameResult': 'Y',
93 'registeredCapitalResult': 'Y',
94 'selfEmployedSubTypeResult': 'Y',
95 },
96 ],
97 'usedCarInfo': {
98 'vinNo': 'LBVSFJSDLFJLSDJF',
99 'manufactureDate': '2020-09-03T15:52:18.1049637+08:00',
100 'firstRegistrationDate': '2020-09-03T15:52:18.1049637+08:00',
101 'vinNoResult': 'Y',
102 'manufactureDateResult': 'Y',
103 'firstRegistrationDateResult': 'Y',
104 },
105 'corporateCusInfo': {
106 'customerChineseName': '北京思图场景数据科技服务有限公司',
107 'legalRepName': '李六',
108 'idNum': 'MA007438143XJ1P',
109 'customerType': 'TCCOR',
110 'businessLicenseNo': 'MA007438143XJ1P',
111 'taxRegistrationCode': 'MA007438143XJ1P',
112 'incorporationDate': '2020-09-02T15:52:18.1049637+08:00',
113 'businessLicenseDueDate': '2020-09-02T15:52:18.1049637+08:00',
114 'capitalRegAmount': '60000000',
115 'customerChinessNameResult': 'Y',
116 'legalRepNameResult': 'Y',
117 'idNumResult': 'Y',
118 'businessLicenseNoResult': 'Y',
119 'taxRegistrationCodeResult': 'Y',
120 'incorporationDateResult': 'Y',
121 'businessLicenseDueDateResult': 'Y',
122 'capitalRegAmountResult': 'Y',
123 }
124 }
125 })
126 status_code = self.send(self.dict_to_xml(test_res))
127 print(status_code)
27 128
28 129
29 gcap = GCAP() 130 gcap = GCAP()
......
1 import json 1 import json
2 import logging 2 import logging
3 import traceback 3 import traceback
4 from collections import OrderedDict
4 from . import app 5 from . import app
5 from apps.doc.models import AFCOCRResult, HILOCRResult, AFCComparisonInfo, HILComparisonInfo 6 from apps.doc.models import AFCOCRResult, HILOCRResult, AFCComparisonInfo, HILComparisonInfo
6 from apps.doc import consts 7 from apps.doc import consts
...@@ -12,6 +13,15 @@ compare_log = logging.getLogger('compare') ...@@ -12,6 +13,15 @@ compare_log = logging.getLogger('compare')
12 log_base = '[CA Compare]' 13 log_base = '[CA Compare]'
13 14
14 15
16 def get_order_dict(src_dict, order_tuple):
17 order_dict = OrderedDict({})
18 for field in order_tuple:
19 value = src_dict.get(field)
20 if value is not None:
21 order_dict[field] = value
22 return order_dict
23
24
15 def field_compare(info_dict, ocr_res_dict, ocr_field, compare_list, res_set): 25 def field_compare(info_dict, ocr_res_dict, ocr_field, compare_list, res_set):
16 is_find = False 26 is_find = False
17 ocr_res_str = ocr_res_dict.get(ocr_field) 27 ocr_res_str = ocr_res_dict.get(ocr_field)
...@@ -65,7 +75,7 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id): ...@@ -65,7 +75,7 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id):
65 75
66 # 比对信息 76 # 比对信息
67 try: 77 try:
68 comparison_res = { 78 comparison_res = OrderedDict({
69 'OCR_Input': { 79 'OCR_Input': {
70 'uniqSeq': last_obj.uniq_seq, 80 'uniqSeq': last_obj.uniq_seq,
71 'applicationId': application_id, 81 'applicationId': application_id,
...@@ -76,42 +86,48 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id): ...@@ -76,42 +86,48 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id):
76 'wholeResultMessage': '', 86 'wholeResultMessage': '',
77 'applicationLink': '', 87 'applicationLink': '',
78 } 88 }
79 } 89 })
80 90
81 res_set = set() 91 res_set = set()
82 92
83 is_sep = True if last_obj.customer_type == consts.CUSTOMER_TYPE[5] else False 93 is_sep = True if last_obj.customer_type == consts.CUSTOMER_TYPE[5] else False
84 94
85 individual_cus_info_list = json.loads(last_obj.individual_cus_info) 95 individual_cus_info_list = json.loads(last_obj.individual_cus_info)
96 order_individual_cus_info_list = []
86 for individual_cus_info in individual_cus_info_list: 97 for individual_cus_info in individual_cus_info_list:
98 order_individual_cus_info = get_order_dict(individual_cus_info, consts.IN_ORDER)
87 # sep营业执照 99 # sep营业执照
88 if is_sep and individual_cus_info.get('companyName') is not None: 100 if is_sep and order_individual_cus_info.get('companyName') is not None:
89 field_compare(individual_cus_info, ocr_res_dict, consts.BL_OCR_FIELD, consts.TCSEP, res_set) 101 field_compare(order_individual_cus_info, ocr_res_dict, consts.BL_OCR_FIELD, consts.TCSEP, res_set)
90 102
91 # 个人信息证件 103 # 个人信息证件
92 id_type = individual_cus_info.get('idType') 104 id_type = order_individual_cus_info.get('idType')
93 compare_info_list = consts.ID_TYPE_COMPARE.get(id_type) 105 compare_info_list = consts.ID_TYPE_COMPARE.get(id_type)
94 if compare_info_list is None: 106 if compare_info_list is None:
95 continue 107 continue
96 field_compare(individual_cus_info, ocr_res_dict, compare_info_list[0], compare_info_list[1], res_set) 108 field_compare(order_individual_cus_info, ocr_res_dict, compare_info_list[0], compare_info_list[1], res_set)
97
98 comparison_res['OCR_Input']['individualCusInfo'] = individual_cus_info_list
99 109
100 if last_obj.corporate_cus_info is not None: 110 order_individual_cus_info_list.append(order_individual_cus_info)
101 corporate_cus_info = json.loads(last_obj.corporate_cus_info)
102 field_compare(corporate_cus_info, ocr_res_dict, consts.BL_OCR_FIELD, consts.TCCOR, res_set)
103 111
104 comparison_res['OCR_Input']['corporateCusInfo'] = corporate_cus_info 112 comparison_res['OCR_Input']['individualCusInfo'] = order_individual_cus_info_list
105 113
106 if last_obj.vehicle_status == consts.VEHICLE_STATUS[0] and last_obj.usedcar_info is not None: 114 if last_obj.vehicle_status == consts.VEHICLE_STATUS[0] and last_obj.usedcar_info is not None:
107 usedcar_info = json.loads(last_obj.usedcar_info) 115 usedcar_info = json.loads(last_obj.usedcar_info)
116 order_usedcar_info = get_order_dict(usedcar_info, consts.UC_ORDER)
108 117
109 field_compare(usedcar_info, ocr_res_dict, consts.MVC_OCR_FIELD, consts.PCUSD_MVC, res_set) 118 field_compare(order_usedcar_info, ocr_res_dict, consts.MVC_OCR_FIELD, consts.PCUSD_MVC, res_set)
110 119
111 if usedcar_info[consts.PCUSD_MVC[0][0] + 'Result'] == consts.RESULT_Y: 120 if order_usedcar_info[consts.PCUSD_MVC[0][0] + 'Result'] == consts.RESULT_Y:
112 field_compare(usedcar_info, ocr_res_dict, consts.DL_OCR_FIELD, consts.PCUSD_DL, res_set) 121 field_compare(order_usedcar_info, ocr_res_dict, consts.DL_OCR_FIELD, consts.PCUSD_DL, res_set)
122
123 comparison_res['OCR_Input']['usedCarInfo'] = order_usedcar_info
124
125 if last_obj.corporate_cus_info is not None:
126 corporate_cus_info = json.loads(last_obj.corporate_cus_info)
127 order_corporate_cus_info = get_order_dict(corporate_cus_info, consts.CO_ORDER)
128 field_compare(order_corporate_cus_info, ocr_res_dict, consts.BL_OCR_FIELD, consts.TCCOR, res_set)
113 129
114 comparison_res['OCR_Input']['usedCarInfo'] = usedcar_info 130 comparison_res['OCR_Input']['corporateCusInfo'] = order_corporate_cus_info
115 131
116 comparison_res['OCR_Input']['wholeResult'] = consts.RESULT_N if consts.RESULT_N in res_set else consts.RESULT_Y 132 comparison_res['OCR_Input']['wholeResult'] = consts.RESULT_N if consts.RESULT_N in res_set else consts.RESULT_Y
117 133
......
...@@ -7,7 +7,7 @@ Supports item (`int`, `float`, `long`, `decimal.Decimal`, `bool`, `str`, `unicod ...@@ -7,7 +7,7 @@ Supports item (`int`, `float`, `long`, `decimal.Decimal`, `bool`, `str`, `unicod
7 This module works with both Python 2 and 3. 7 This module works with both Python 2 and 3.
8 """ 8 """
9 9
10 from __future__ import unicode_literals 10 # from __future__ import unicode_literals
11 11
12 from random import randint 12 from random import randint
13 import collections 13 import collections
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!