fix merge
Showing
9 changed files
with
641 additions
and
18 deletions
... | @@ -6,4 +6,5 @@ urlpatterns = [ | ... | @@ -6,4 +6,5 @@ urlpatterns = [ |
6 | path(r'v1', views.CompareView.as_view()), | 6 | path(r'v1', views.CompareView.as_view()), |
7 | path(r'settlement/v1', views.SECompareView.as_view()), | 7 | path(r'settlement/v1', views.SECompareView.as_view()), |
8 | path(r'offline/v1', views.CompareOfflineView.as_view()), | 8 | path(r'offline/v1', views.CompareOfflineView.as_view()), |
9 | path(r'result', views.CompareResultView.as_view()), | ||
9 | ] | 10 | ] | ... | ... |
... | @@ -12,6 +12,7 @@ FIXED_APPLICATION_ID_PREFIX = 'CH-S' | ... | @@ -12,6 +12,7 @@ FIXED_APPLICATION_ID_PREFIX = 'CH-S' |
12 | 12 | ||
13 | DOC_SCHEME_LIST = ['ACCEPTANCE', 'SETTLEMENT', 'CONTRACTMANAGEMENT'] | 13 | DOC_SCHEME_LIST = ['ACCEPTANCE', 'SETTLEMENT', 'CONTRACTMANAGEMENT'] |
14 | DATA_SOURCE_LIST = ['POS', 'EAPP', 'ECONTRACT'] | 14 | DATA_SOURCE_LIST = ['POS', 'EAPP', 'ECONTRACT'] |
15 | COMPARE_DOC_SCHEME_LIST = ['CA', 'SE'] | ||
15 | 16 | ||
16 | HIL_PREFIX = 'HIL' | 17 | HIL_PREFIX = 'HIL' |
17 | AFC_PREFIX = 'AFC' | 18 | AFC_PREFIX = 'AFC' |
... | @@ -1055,13 +1056,13 @@ IC_RES_MAPPING = { | ... | @@ -1055,13 +1056,13 @@ IC_RES_MAPPING = { |
1055 | 1: '真实证件', | 1056 | 1: '真实证件', |
1056 | } | 1057 | } |
1057 | 1058 | ||
1058 | # ----------------- compare --------------------- | 1059 | # ----------------- CA compare --------------------- |
1059 | ENTITY = ['HIL', 'AFC'] | 1060 | ENTITY = ['HIL', 'AFC'] |
1060 | CUSTOMER_TYPE = ['TCCOR', 'TCDAS', 'TCFRE', 'TCIAS', 'TCIND', 'TCSEP', 'TCURE'] | 1061 | CUSTOMER_TYPE = ['TCCOR', 'TCDAS', 'TCFRE', 'TCIAS', 'TCIND', 'TCSEP', 'TCURE'] |
1061 | NO_COMPARE_CUSTOMER_TYPE = ['TCFRE', 'TCIND'] | 1062 | NO_COMPARE_CUSTOMER_TYPE = ['TCFRE', 'TCIND'] |
1062 | VEHICLE_STATUS = ['PCUSD', 'PCNEW'] | 1063 | VEHICLE_STATUS = ['PCUSD', 'PCNEW'] |
1063 | 1064 | ||
1064 | APPLICANT_TYPE = ['COAPP', 'CUSTR', 'GAUTR1', 'GAUTR2'] | 1065 | APPLICANT_TYPE = ['CUSTR', 'COAPP', 'GAUTR1', 'GAUTR2'] |
1065 | ID_TYPE = ['ITARI', 'ITHKM', 'ITPRC', 'ITPSP', 'ITRES', 'ITTID', 'ITUSC', 'ITCCU'] | 1066 | ID_TYPE = ['ITARI', 'ITHKM', 'ITPRC', 'ITPSP', 'ITRES', 'ITTID', 'ITUSC', 'ITCCU'] |
1066 | SECOND_ID_TYPE = ['ITARI', 'ITHKM', 'ITPRC', 'ITPSP', 'ITRES', 'ITTID'] | 1067 | SECOND_ID_TYPE = ['ITARI', 'ITHKM', 'ITPRC', 'ITPSP', 'ITRES', 'ITTID'] |
1067 | SUB_TYPE = ['CSIBM', 'CSOTH', 'CSSME'] | 1068 | SUB_TYPE = ['CSIBM', 'CSOTH', 'CSSME'] |
... | @@ -1087,22 +1088,38 @@ EEP_OCR_FIELD = 'eep_ocr' | ... | @@ -1087,22 +1088,38 @@ EEP_OCR_FIELD = 'eep_ocr' |
1087 | DL_OCR_FIELD = 'dl_ocr' | 1088 | DL_OCR_FIELD = 'dl_ocr' |
1088 | PP_OCR_FIELD = 'pp_ocr' | 1089 | PP_OCR_FIELD = 'pp_ocr' |
1089 | MVC_OCR_FIELD = 'mvc_ocr' | 1090 | MVC_OCR_FIELD = 'mvc_ocr' |
1091 | MVI_OCR_FIELD = 'mvi_ocr' | ||
1092 | BC_OCR_FIELD = 'bc_ocr' | ||
1093 | UCI_OCR_FIELD = 'uci_ocr' | ||
1094 | DDA_OCR_FIELD = 'bs_ocr' | ||
1090 | 1095 | ||
1091 | RESULT_MAPPING = { | 1096 | RESULT_MAPPING = { |
1092 | # MVI_CLASSIFY: 'mvi_ocr', | 1097 | MVI_CLASSIFY: MVI_OCR_FIELD, |
1093 | IC_CLASSIFY: IC_OCR_FIELD, | 1098 | IC_CLASSIFY: IC_OCR_FIELD, |
1094 | RP_CLASSIFY: RP_OCR_FIELD, | 1099 | RP_CLASSIFY: RP_OCR_FIELD, |
1095 | # BC_CLASSIFY: 'bc_ocr', | 1100 | BC_CLASSIFY: BC_OCR_FIELD, |
1096 | BL_CLASSIFY: BL_OCR_FIELD, | 1101 | BL_CLASSIFY: BL_OCR_FIELD, |
1097 | # UCI_CLASSIFY: 'uci_ocr', | 1102 | UCI_CLASSIFY: UCI_OCR_FIELD, |
1098 | EEP_CLASSIFY: EEP_OCR_FIELD, | 1103 | EEP_CLASSIFY: EEP_OCR_FIELD, |
1099 | DL_CLASSIFY: DL_OCR_FIELD, | 1104 | DL_CLASSIFY: DL_OCR_FIELD, |
1100 | PP_CLASSIFY: PP_OCR_FIELD, | 1105 | PP_CLASSIFY: PP_OCR_FIELD, |
1101 | MVC_CLASSIFY: MVC_OCR_FIELD, | 1106 | MVC_CLASSIFY: MVC_OCR_FIELD, |
1107 | DDA_CLASSIFY: DDA_OCR_FIELD, | ||
1102 | # VAT_CLASSIFY: 'vat_ocr', | 1108 | # VAT_CLASSIFY: 'vat_ocr', |
1103 | } | 1109 | } |
1104 | 1110 | ||
1105 | COMPARE_FIELDS = (IC_OCR_FIELD, RP_OCR_FIELD, BL_OCR_FIELD, EEP_OCR_FIELD, DL_OCR_FIELD, PP_OCR_FIELD, MVC_OCR_FIELD) | 1111 | COMPARE_FIELDS = (MVI_OCR_FIELD, |
1112 | IC_OCR_FIELD, | ||
1113 | RP_OCR_FIELD, | ||
1114 | BC_OCR_FIELD, | ||
1115 | BL_OCR_FIELD, | ||
1116 | UCI_OCR_FIELD, | ||
1117 | EEP_OCR_FIELD, | ||
1118 | DL_OCR_FIELD, | ||
1119 | PP_OCR_FIELD, | ||
1120 | MVC_OCR_FIELD, | ||
1121 | DDA_OCR_FIELD, | ||
1122 | ) | ||
1106 | 1123 | ||
1107 | # 身份证 | 1124 | # 身份证 |
1108 | ITPRC = [ | 1125 | ITPRC = [ |
... | @@ -1253,5 +1270,167 @@ DDA_MAPPING = [ | ... | @@ -1253,5 +1270,167 @@ DDA_MAPPING = [ |
1253 | 1270 | ||
1254 | DDA_PRO_MIN = 0.6 | 1271 | DDA_PRO_MIN = 0.6 |
1255 | 1272 | ||
1273 | # ----------------------- SE compare ----------------------- | ||
1274 | SE_FIRST_ID_FIELD = ['customerName', 'idNum', 'dateOfBirth', 'idExpiryDate'] | ||
1275 | SE_ID_CARD_FIELD = ['customerName', 'idNum', 'dateOfBirth', 'idExpiryDate', 'hukouProvince', 'hukouCity'] | ||
1276 | SE_SECOND_ID_FIELD = [ | ||
1277 | ('customerName', 'customerName'), | ||
1278 | ('secondIdNum', 'idNum'), | ||
1279 | ] | ||
1280 | SE_CORPORATE_ID_FIELD = [ | ||
1281 | ('legalRepName', 'customerName'), | ||
1282 | ('firstIdNo', 'idNum') | ||
1283 | ] | ||
1284 | SE_SEP_FIELD = [ | ||
1285 | ('companyName', 'companyName'), | ||
1286 | ('customerName', 'legalRepName'), | ||
1287 | ('registeredCapital', 'registeredCapital'), | ||
1288 | ('selfEmployedSubType', 'organizationType') | ||
1289 | ] | ||
1290 | SE_CORPORATE_FIELD = ['companyName', 'legalRepName', 'businessLicenseNo', 'organizationCreditCode', | ||
1291 | 'taxRegistrationCertificateNo', 'establishmentDate', 'businessLicenseDueDate'] | ||
1292 | SE_CORPORATE_ALL_FIELD = ['companyName', 'legalRepName', 'firstIdNo', 'businessLicenseNo', 'organizationCreditCode', | ||
1293 | 'taxRegistrationCertificateNo', 'establishmentDate', 'businessLicenseDueDate'] | ||
1294 | SE_NEW_FIELD = ['vinNo', 'dealer', 'vehicleTransactionAmount'] | ||
1295 | SE_USED_FIELD = ['vinNo', 'vehicleTransactionAmount'] | ||
1296 | SE_NEW_ADD_FIELD = ['customerName', 'idNum', 'dateOfInvoice'] | ||
1297 | SE_GB_NEW_FIELD = ['vinNo'] | ||
1298 | SE_GB_USED_FIELD = ['customerName', 'idNum', 'date'] | ||
1299 | |||
1300 | SE_BANK_FIELD = ['accountNo', 'bankName'] | ||
1301 | SE_DDA_FIELD = ['applicationId(1)', 'applicationId(2)', 'bankName', 'companyName', 'customerName', 'idNum', 'accountHolderName', 'accountNo'] | ||
1302 | |||
1303 | HIL_COMPANY_NAME = '先锋国际融资租赁有限公司' | ||
1304 | AFC_COMPANY_NAME = '宝马汽车金融(中国)有限公司' | ||
1305 | |||
1306 | ID_EN = 'PRC ID' | ||
1307 | PP_EN = 'Passport' | ||
1308 | EEP_EN = 'Resident Permit to Mainland' | ||
1309 | RP_EN = 'Resident ID' | ||
1310 | BL_EN = 'Business permit' | ||
1311 | MVI_EN = 'newCar Invoice' | ||
1312 | UCI_EN = 'usedCar Invoice' | ||
1313 | MVC_EN = 'Green Book' | ||
1314 | BC_EN = 'Bank Card' | ||
1315 | DDA_EN = 'DDA' | ||
1316 | |||
1317 | ID_COMPARE_LOGIC = { | ||
1318 | 'customerName': ('姓名', 'se_name_compare', {}), | ||
1319 | 'idNum': ('公民身份号码', 'se_common_compare', {}), | ||
1320 | 'dateOfBirth': ('出生年月', 'se_date_compare', {'input_replace': ''}), | ||
1321 | 'idExpiryDate': ('有效期限', 'se_date_compare', {'long': True, 'ocr_split': True, 'input_replace': ''}), | ||
1322 | 'hukouProvince': ('住址', 'se_contain_compare', {}), | ||
1323 | 'hukouCity': ('住址', 'se_contain_compare', {}), | ||
1324 | } | ||
1325 | |||
1326 | PP_COMPARE_LOGIC = { | ||
1327 | 'customerName': ('英文姓名', 'se_name_compare', {'is_passport': True}), | ||
1328 | 'idNum': ('护照号码', 'se_common_compare', {}), | ||
1329 | 'dateOfBirth': ('出生日期', 'se_date_compare', {'input_replace': ''}), | ||
1330 | 'idExpiryDate': ('有效期至', 'se_date_compare', {'input_replace': ''}), | ||
1331 | } | ||
1332 | |||
1333 | EEP_COMPARE_LOGIC = { | ||
1334 | 'customerName': ('中文名', 'se_common_compare', {}), | ||
1335 | 'idNum': ('证件号码', 'se_common_compare', {}), | ||
1336 | 'dateOfBirth': ('出生日期', 'se_date_compare', {'input_replace': '.'}), | ||
1337 | 'idExpiryDate': ('有效期限', 'se_date_compare', {'ocr_split': True, 'input_replace': '.'}), | ||
1338 | } | ||
1339 | |||
1340 | RP_COMPARE_LOGIC = { | ||
1341 | 'customerName': ('姓名', 'se_name_compare', {}), | ||
1342 | 'idNum': ('公民身份号码', 'se_common_compare', {}), | ||
1343 | 'dateOfBirth': ('出生年月', 'se_date_compare', {'input_replace': ''}), | ||
1344 | 'idExpiryDate': ('有效期限', 'se_date_compare', {'ocr_split': True, 'input_replace': ''}), | ||
1345 | 'hukouProvince': ('住址', 'se_contain_compare', {}), | ||
1346 | 'hukouCity': ('住址', 'se_contain_compare', {}), | ||
1347 | } | ||
1348 | |||
1349 | BL_COMPARE_LOGIC = { | ||
1350 | 'companyName': ('企业名称', 'se_company_compare', {}), | ||
1351 | 'legalRepName': ('经营者姓名', 'se_name_compare', {}), | ||
1352 | 'firstIdNo': ('注册号', 'se_common_compare', {}), | ||
1353 | 'businessLicenseNo': ('注册号', 'se_common_compare', {}), | ||
1354 | 'organizationCreditCode': ('注册号', 'se_common_compare', {}), | ||
1355 | 'taxRegistrationCertificateNo': ('注册号', 'se_common_compare', {}), | ||
1356 | 'establishmentDate': ('成立日期', 'se_date_compare', {'ocr_replace': True}), | ||
1357 | 'businessLicenseDueDate': ('营业期限', 'se_date_compare', {'ocr_split': True, 'long': True, 'ocr_replace': True}), | ||
1358 | 'organizationType': ('企业类型', 'se_type_compare', {}), | ||
1359 | 'registeredCapital': ('注册资本', 'se_rmb_compare', {}), | ||
1360 | } | ||
1361 | |||
1362 | MVI_COMPARE_LOGIC = { | ||
1363 | 'vinNo': ('车辆识别代码', 'se_common_compare', {}), | ||
1364 | 'dealer': ('销方名称', 'se_common_compare', {}), | ||
1365 | 'vehicleTransactionAmount': ('价税合计小写', 'se_amount_compare', {}), | ||
1366 | 'customerName': ('购方名称', 'se_name_compare', {}), | ||
1367 | 'idNum': ('购买方身份证号或组织机构代码', 'se_common_compare', {}), | ||
1368 | 'dateOfInvoice': ('开票日期', 'se_date_compare', {}), | ||
1369 | } | ||
1370 | |||
1371 | UCI_COMPARE_LOGIC = { | ||
1372 | 'vinNo': ('车架号', 'se_common_compare', {}), | ||
1373 | 'vehicleTransactionAmount': ('价税合计小写', 'se_amount_compare', {}), | ||
1374 | 'customerName': ('购方名称', 'se_name_compare', {}), | ||
1375 | 'idNum': ('购方纳税人识别号', 'se_common_compare', {}), | ||
1376 | } | ||
1377 | |||
1378 | MVC_COMPARE_LOGIC = { | ||
1379 | 'vinNo': ('9.车辆识别代号/车架号', 'se_common_compare', {}), | ||
1380 | # 'customerName': ('姓名/名称', ), | ||
1381 | # 'idNum': ('身份证明名称/号码', ), | ||
1382 | # 'date': ('转移登记日期', ), | ||
1383 | } | ||
1384 | |||
1385 | BC_COMPARE_LOGIC = { | ||
1386 | 'accountNo': ('CardNum', 'se_common_compare', {}), | ||
1387 | 'bankName': ('BankName', 'se_common_compare', {}), | ||
1388 | } | ||
1389 | |||
1390 | DDA_COMPARE_LOGIC = { | ||
1391 | 'applicationId(1)': ('check_Num', ), | ||
1392 | 'applicationId(2)': ('check_Num', ), | ||
1393 | 'bankName': ('to_bank', ), | ||
1394 | 'companyName': ('to_company', ), | ||
1395 | 'customerName': (DDA_IC_NAME, ), | ||
1396 | 'idNum': (DDA_IC_ID, ), | ||
1397 | 'accountHolderName': (DDA_BC_NAME, ), | ||
1398 | 'accountNo': (DDA_BC_ID, ), | ||
1399 | } | ||
1400 | |||
1401 | |||
1402 | # MVC_OCR_FIELD = 'mvc_ocr' | ||
1403 | |||
1404 | SE_COMPARE_FIELD = { | ||
1405 | ID_EN: (IC_OCR_FIELD, ID_COMPARE_LOGIC, True), | ||
1406 | PP_EN: (PP_OCR_FIELD, PP_COMPARE_LOGIC, False), | ||
1407 | EEP_EN: (EEP_OCR_FIELD, EEP_COMPARE_LOGIC, False), | ||
1408 | RP_EN: (RP_OCR_FIELD, RP_COMPARE_LOGIC, True), | ||
1409 | BL_EN: (BL_OCR_FIELD, BL_COMPARE_LOGIC, False), | ||
1410 | MVI_EN: (MVI_OCR_FIELD, MVI_COMPARE_LOGIC, False), | ||
1411 | UCI_EN: (UCI_OCR_FIELD, UCI_COMPARE_LOGIC, False), | ||
1412 | MVC_EN: (MVC_OCR_FIELD, MVC_COMPARE_LOGIC, False), | ||
1413 | BC_EN: (BC_OCR_FIELD, BC_COMPARE_LOGIC, False), | ||
1414 | DDA_EN: (DDA_OCR_FIELD, DDA_COMPARE_LOGIC, False), | ||
1415 | } | ||
1416 | |||
1417 | |||
1418 | SE_FIRST_ID_FIELD_MAPPING = { | ||
1419 | 'ITPRC': (ID_EN, SE_ID_CARD_FIELD), | ||
1420 | 'ITPSP': (PP_EN, SE_FIRST_ID_FIELD), | ||
1421 | 'ITHKM': (EEP_EN, SE_FIRST_ID_FIELD), | ||
1422 | 'ITTID': (EEP_EN, SE_FIRST_ID_FIELD), | ||
1423 | 'ITRES': (RP_EN, SE_FIRST_ID_FIELD), | ||
1424 | } | ||
1425 | |||
1426 | SE_SECOND_ID_FIELD_MAPPING = { | ||
1427 | 'ITPRC': (ID_EN, SE_SECOND_ID_FIELD), | ||
1428 | 'ITPSP': (PP_EN, SE_SECOND_ID_FIELD), | ||
1429 | 'ITHKM': (EEP_EN, SE_SECOND_ID_FIELD), | ||
1430 | 'ITTID': (EEP_EN, SE_SECOND_ID_FIELD), | ||
1431 | 'ITRES': (RP_EN, SE_SECOND_ID_FIELD), | ||
1432 | } | ||
1433 | |||
1434 | HEAD_LIST = ['Info', 'Index', 'License', 'Field', 'Input', 'OCR', 'Result', 'Position', 'Image', 'errorType'] | ||
1256 | 1435 | ||
1257 | 1436 | ... | ... |
... | @@ -23,7 +23,21 @@ from apps.doc.ocr.edms import EDMS, rh | ... | @@ -23,7 +23,21 @@ from apps.doc.ocr.edms import EDMS, rh |
23 | from apps.doc.named_enum import KeywordsType, FailureReason, WorkflowName, ProcessName, RequestTeam, RequestTrigger | 23 | from apps.doc.named_enum import KeywordsType, FailureReason, WorkflowName, ProcessName, RequestTeam, RequestTrigger |
24 | from apps.doc.exceptions import EDMSException, OCR1Exception, OCR2Exception, OCR4Exception | 24 | from apps.doc.exceptions import EDMSException, OCR1Exception, OCR2Exception, OCR4Exception |
25 | from apps.doc.ocr.wb import BSWorkbook | 25 | from apps.doc.ocr.wb import BSWorkbook |
26 | from apps.doc.models import DocStatus, HILDoc, AFCDoc, Keywords, HILOCRResult, AFCOCRResult, HILOCRReport, AFCOCRReport, DDARecords, IDBCRecords, Configs | 26 | from apps.doc.models import ( |
27 | DocStatus, | ||
28 | HILDoc, | ||
29 | AFCDoc, | ||
30 | Keywords, | ||
31 | HILOCRResult, | ||
32 | AFCOCRResult, | ||
33 | AFCSEOCRResult, | ||
34 | HILOCRReport, | ||
35 | HILSEOCRResult, | ||
36 | AFCOCRReport, | ||
37 | DDARecords, | ||
38 | IDBCRecords, | ||
39 | Configs, | ||
40 | ) | ||
27 | from celery_compare.tasks import compare | 41 | from celery_compare.tasks import compare |
28 | 42 | ||
29 | 43 | ||
... | @@ -990,16 +1004,22 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -990,16 +1004,22 @@ class Command(BaseCommand, LoggerMixin): |
990 | finally: | 1004 | finally: |
991 | # TODO 识别结果存一张表,方便跑报表 | 1005 | # TODO 识别结果存一张表,方便跑报表 |
992 | 1006 | ||
993 | # CA比对 | 1007 | # 比对 |
994 | if doc.document_scheme == consts.DOC_SCHEME_LIST[0] and len(license_summary) > 0: | 1008 | if len(license_summary) > 0 and doc.document_scheme != consts.DOC_SCHEME_LIST[2]: |
995 | try: | 1009 | try: |
1010 | is_ca = True if doc.document_scheme == consts.DOC_SCHEME_LIST[0] else False | ||
996 | # 更新OCR累计识别结果表 | 1011 | # 更新OCR累计识别结果表 |
997 | result_class = HILOCRResult if business_type == consts.HIL_PREFIX else AFCOCRResult | 1012 | if business_type == consts.HIL_PREFIX: |
1013 | result_class = HILOCRResult if is_ca else HILSEOCRResult | ||
1014 | else: | ||
1015 | result_class = AFCOCRResult if is_ca else AFCSEOCRResult | ||
998 | res_obj = result_class.objects.filter(application_id=doc.application_id).first() | 1016 | res_obj = result_class.objects.filter(application_id=doc.application_id).first() |
999 | if res_obj is None: | 1017 | if res_obj is None: |
1000 | res_obj = result_class() | 1018 | res_obj = result_class() |
1001 | res_obj.application_id = doc.application_id | 1019 | res_obj.application_id = doc.application_id |
1002 | for classify, field in consts.RESULT_MAPPING.items(): | 1020 | for classify, field in consts.RESULT_MAPPING.items(): |
1021 | if not hasattr(res_obj, field): | ||
1022 | continue | ||
1003 | license_list = license_summary.get(classify) | 1023 | license_list = license_summary.get(classify) |
1004 | if not license_list: | 1024 | if not license_list: |
1005 | continue | 1025 | continue |
... | @@ -1009,8 +1029,6 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -1009,8 +1029,6 @@ class Command(BaseCommand, LoggerMixin): |
1009 | elif classify == consts.RP_CLASSIFY and rp_merge: | 1029 | elif classify == consts.RP_CLASSIFY and rp_merge: |
1010 | license_list[0].update(license_list[1]) | 1030 | license_list[0].update(license_list[1]) |
1011 | license_list.pop(1) | 1031 | license_list.pop(1) |
1012 | if not hasattr(res_obj, field): | ||
1013 | continue | ||
1014 | old_res_str = getattr(res_obj, field) | 1032 | old_res_str = getattr(res_obj, field) |
1015 | if old_res_str is None: | 1033 | if old_res_str is None: |
1016 | last_res_str = json.dumps(license_list) | 1034 | last_res_str = json.dumps(license_list) |
... | @@ -1030,8 +1048,8 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -1030,8 +1048,8 @@ class Command(BaseCommand, LoggerMixin): |
1030 | # 触发比对 | 1048 | # 触发比对 |
1031 | try: | 1049 | try: |
1032 | # pass | 1050 | # pass |
1033 | compare.apply_async((doc.application_id, business_type, None, res_obj.id), | 1051 | compare.apply_async((doc.application_id, business_type, None, res_obj.id, |
1034 | queue='queue_compare') | 1052 | is_ca), queue='queue_compare') |
1035 | except Exception as e: | 1053 | except Exception as e: |
1036 | self.online_log.error( | 1054 | self.online_log.error( |
1037 | '{0} [process error (comparison info send)] [task={1}] [error={2}]'.format( | 1055 | '{0} [process error (comparison info send)] [task={1}] [error={2}]'.format( | ... | ... |
This diff is collapsed.
Click to expand it.
... | @@ -51,6 +51,7 @@ class ProcessName(NamedEnum): | ... | @@ -51,6 +51,7 @@ class ProcessName(NamedEnum): |
51 | IDCARD = (2, 'F2_IDReport') | 51 | IDCARD = (2, 'F2_IDReport') |
52 | DDA = (3, 'CL_S1_DDAConsolidation') | 52 | DDA = (3, 'CL_S1_DDAConsolidation') |
53 | CACOMPARE = (4, 'S1_CA_DocumentVerify') | 53 | CACOMPARE = (4, 'S1_CA_DocumentVerify') |
54 | SE_CACOMPARE = (5, 'S1_SE_DocumentVerify') | ||
54 | 55 | ||
55 | 56 | ||
56 | class WorkflowName(NamedEnum): | 57 | class WorkflowName(NamedEnum): | ... | ... |
... | @@ -6,7 +6,7 @@ import datetime | ... | @@ -6,7 +6,7 @@ import datetime |
6 | import fitz | 6 | import fitz |
7 | import shutil | 7 | import shutil |
8 | from django.utils import timezone | 8 | from django.utils import timezone |
9 | from django.db.utils import IntegrityError | 9 | from django.http import HttpResponse |
10 | from django.db.models import Q | 10 | from django.db.models import Q |
11 | from rest_framework.permissions import IsAuthenticated | 11 | from rest_framework.permissions import IsAuthenticated |
12 | from webargs import fields, validate | 12 | from webargs import fields, validate |
... | @@ -16,7 +16,21 @@ from common import response | ... | @@ -16,7 +16,21 @@ from common import response |
16 | from common.mixins import GenericView | 16 | from common.mixins import GenericView |
17 | from common.tools.file_tools import file_write | 17 | from common.tools.file_tools import file_write |
18 | from common.redis_cache import redis_handler as rh | 18 | from common.redis_cache import redis_handler as rh |
19 | from .models import DocStatus, PriorityApplication, GCAPRecords, AFCComparisonInfo, HILComparisonInfo, AFCCompareOfflineReport, HILCompareOfflineReport | 19 | from .models import ( |
20 | DocStatus, | ||
21 | PriorityApplication, | ||
22 | GCAPRecords, | ||
23 | AFCComparisonInfo, | ||
24 | AFCSEComparisonInfo, | ||
25 | HILComparisonInfo, | ||
26 | HILSEComparisonInfo, | ||
27 | AFCCompareOfflineReport, | ||
28 | HILCompareOfflineReport, | ||
29 | AFCCACompareResult, | ||
30 | AFCSECompareResult, | ||
31 | HILCACompareResult, | ||
32 | HILSECompareResult, | ||
33 | ) | ||
20 | from .mixins import DocHandler | 34 | from .mixins import DocHandler |
21 | from . import consts | 35 | from . import consts |
22 | from apps.account.authentication import OAuth2AuthenticationWithUser | 36 | from apps.account.authentication import OAuth2AuthenticationWithUser |
... | @@ -257,6 +271,13 @@ doc_list_args = { | ... | @@ -257,6 +271,13 @@ doc_list_args = { |
257 | 'create_time_end': fields.Date(required=False), | 271 | 'create_time_end': fields.Date(required=False), |
258 | } | 272 | } |
259 | 273 | ||
274 | compare_result_args = { | ||
275 | 'entity': fields.Str(required=True, validate=validate.OneOf(consts.BUSINESS_TYPE_LIST)), | ||
276 | 'scheme': fields.Str(required=True, validate=validate.OneOf(consts.COMPARE_DOC_SCHEME_LIST)), | ||
277 | 'id': fields.Int(required=False, validate=lambda val: val >= 1), | ||
278 | 'case_id': fields.Str(required=True, validate=validate.Length(max=64)), | ||
279 | } | ||
280 | |||
260 | upload_pdf_args = { | 281 | upload_pdf_args = { |
261 | 'pdf_file': fields.Raw(required=True), | 282 | 'pdf_file': fields.Raw(required=True), |
262 | } | 283 | } |
... | @@ -474,7 +495,8 @@ class CompareView(GenericView): | ... | @@ -474,7 +495,8 @@ class CompareView(GenericView): |
474 | corporate_cus_info=corporate_cus_info, | 495 | corporate_cus_info=corporate_cus_info, |
475 | ) | 496 | ) |
476 | # 触发比对 | 497 | # 触发比对 |
477 | compare.apply_async((application_id, business_type, uniq_seq, None), queue='queue_compare') | 498 | compare.apply_async((application_id, business_type, uniq_seq, None, True), |
499 | queue='queue_compare') | ||
478 | return response.ok() | 500 | return response.ok() |
479 | 501 | ||
480 | post.openapi_doc = ''' | 502 | post.openapi_doc = ''' |
... | @@ -504,7 +526,38 @@ class SECompareView(GenericView): | ... | @@ -504,7 +526,38 @@ class SECompareView(GenericView): |
504 | # pos上传比对信息接口 SE | 526 | # pos上传比对信息接口 SE |
505 | @use_args(se_compare_args, location='data') | 527 | @use_args(se_compare_args, location='data') |
506 | def post(self, request, args): | 528 | def post(self, request, args): |
507 | self.running_log.info('se compare in') | 529 | # 存库 |
530 | content = args.get('content', {}) | ||
531 | uniq_seq = content.get('uniqSeq') | ||
532 | business_type = content.get('applicationEntity') | ||
533 | application_id = content.get('applicationId') | ||
534 | |||
535 | individual_cus_info = json.dumps(content.get('individualCusInfo')) | ||
536 | vehicle_info = json.dumps(content.get('vehicleInfo')) | ||
537 | insurance_info = json.dumps(content.get('insuranceInfo')) | ||
538 | bank_info = json.dumps(content.get('bankInfo')) | ||
539 | quotationt_info = json.dumps(content.get('quotationtInfo')) | ||
540 | corporate_cus_info = json.dumps(content.get('corporateCusInfo')) if isinstance( | ||
541 | content.get('corporateCusInfo'), dict) else None | ||
542 | |||
543 | comparison_class = HILSEComparisonInfo if business_type in consts.HIL_SET else AFCSEComparisonInfo | ||
544 | comparison_class.objects.create( | ||
545 | uniq_seq=uniq_seq, | ||
546 | application_id=application_id, | ||
547 | application_version=content.get('applicationVersion'), | ||
548 | customer_type=content.get('customerType'), | ||
549 | first_submmison_date=content.get('firstSubmmisonDate'), | ||
550 | property_doc_policy=content.get('propertyDocumentPolicy', None), | ||
551 | individual_cus_info=individual_cus_info, | ||
552 | corporate_cus_info=corporate_cus_info, | ||
553 | vehicle_info=vehicle_info, | ||
554 | insurance_info=insurance_info, | ||
555 | bank_info=bank_info, | ||
556 | quotationt_info=quotationt_info | ||
557 | ) | ||
558 | # 触发比对 | ||
559 | compare.apply_async((application_id, business_type, uniq_seq, None, False), | ||
560 | queue='queue_compare') | ||
508 | return response.ok() | 561 | return response.ok() |
509 | 562 | ||
510 | post.openapi_doc = ''' | 563 | post.openapi_doc = ''' |
... | @@ -695,3 +748,59 @@ class DocView(GenericView, DocHandler): | ... | @@ -695,3 +748,59 @@ class DocView(GenericView, DocHandler): |
695 | is_priority, enqueue_res)) | 748 | is_priority, enqueue_res)) |
696 | data = {'excel_path': os.path.join(save_dir_path, '{0}.xlsx'.format(doc.id))} | 749 | data = {'excel_path': os.path.join(save_dir_path, '{0}.xlsx'.format(doc.id))} |
697 | return response.ok(data=data) | 750 | return response.ok(data=data) |
751 | |||
752 | |||
753 | class CompareResultView(GenericView): | ||
754 | |||
755 | # 获取比对结果 | ||
756 | @use_args(compare_result_args, location='querystring') | ||
757 | def get(self, request, args): | ||
758 | result_id = args.get('id', None) | ||
759 | entity = args.get('entity') | ||
760 | scheme = args.get('scheme') | ||
761 | case_id = args.get('case_id') | ||
762 | |||
763 | if entity == consts.HIL_PREFIX: | ||
764 | result_table = HILCACompareResult if scheme == consts.COMPARE_DOC_SCHEME_LIST[0] else HILSECompareResult | ||
765 | else: | ||
766 | result_table = AFCCACompareResult if scheme == consts.COMPARE_DOC_SCHEME_LIST[0] else AFCSECompareResult | ||
767 | |||
768 | if result_id is None: | ||
769 | result_str_list = result_table.objects.filter(id=result_id).values_list('result', flat=True) | ||
770 | else: | ||
771 | result_str_list = result_table.objects.filter(application_id=case_id).values_list('result', flat=True) | ||
772 | |||
773 | if len(result_str_list) == 0: | ||
774 | compare_result_list = [] | ||
775 | else: | ||
776 | compare_result_list = json.loads(result_str_list[0]) | ||
777 | |||
778 | if len(compare_result_list) == 0: | ||
779 | body_html = "<h1>没有比对结果</h1>" | ||
780 | else: | ||
781 | head_content = ''.join(['<th>{0}</th>'.format(head_name) for head_name in consts.HEAD_LIST]) | ||
782 | head_html = '<tr>{0}</tr>'.format(head_content) | ||
783 | row_html_list = [] | ||
784 | for row_dict in compare_result_list: | ||
785 | row_list = [row_dict.get(head, '') for head in consts.HEAD_LIST] | ||
786 | row_content = ''.join(['<td>{0}</td>'.format(row_str) for row_str in row_list]) | ||
787 | row_html = '<tr>{0}</tr>'.format(row_content) | ||
788 | row_html_list.append(row_html) | ||
789 | content_html = ''.join(row_html_list) | ||
790 | body_html = '<table border="1">{0}{1}</table>'.format(head_html, content_html) | ||
791 | |||
792 | html = """ | ||
793 | <!DOCTYPE html> | ||
794 | <html> | ||
795 | <head> | ||
796 | <meta charset="utf-8"> | ||
797 | <title>比对结果</title> | ||
798 | </head> | ||
799 | <body> | ||
800 | {0} | ||
801 | </body> | ||
802 | </html> | ||
803 | """.format(body_html) | ||
804 | return HttpResponse(html) | ||
805 | |||
806 | # return response.ok(data=compare_result) | ... | ... |
This diff is collapsed.
Click to expand it.
... | @@ -136,6 +136,85 @@ class Comparison: | ... | @@ -136,6 +136,85 @@ class Comparison: |
136 | 136 | ||
137 | return self.build_res(input_str == compare_str), compare_str | 137 | return self.build_res(input_str == compare_str), compare_str |
138 | 138 | ||
139 | def se_name_compare(self, input_str, ocr_str, **kwargs): | ||
140 | if kwargs.get('is_passport'): | ||
141 | input_tmp = input_str.upper().replace(' ', '') | ||
142 | ocr_tmp = ocr_str.upper().replace(' ', '') | ||
143 | if input_tmp.find(ocr_tmp) == -1: | ||
144 | return self.RESULT_N | ||
145 | else: | ||
146 | return self.RESULT_Y | ||
147 | else: | ||
148 | # if re.search(r'[a-zA-Z]]', input_str): | ||
149 | # return self.RESULT_NA, ocr_str | ||
150 | input_s = input_str.translate(self.TRANS) | ||
151 | ocr_s = ocr_str.translate(self.TRANS) | ||
152 | return self.build_res(input_s == ocr_s) | ||
153 | |||
154 | def se_common_compare(self, input_str, ocr_str, **kwargs): | ||
155 | return self.build_res(input_str == ocr_str) | ||
156 | |||
157 | def se_date_compare(self, input_str, ocr_str, **kwargs): | ||
158 | if kwargs.get('long', False): | ||
159 | if '长期' in ocr_str or '永久' in ocr_str: | ||
160 | if input_str in ['2099-12-31', '2099-01-01', '2999-12-31', '2999-01-01']: | ||
161 | return self.RESULT_Y | ||
162 | else: | ||
163 | return self.RESULT_N | ||
164 | if kwargs.get('ocr_split', False): | ||
165 | if '至' in ocr_str: | ||
166 | ocr_str = ocr_str.split('至')[-1] | ||
167 | elif '-' in ocr_str: | ||
168 | ocr_str = ocr_str.split('-')[-1] | ||
169 | if kwargs.get('ocr_replace', False): | ||
170 | ocr_str = ocr_str.replace('年', '-').replace('月', '-').replace('日', '') | ||
171 | if kwargs.get('input_replace') is not None: | ||
172 | input_str = input_str.replace('-', kwargs.get('input_replace')) | ||
173 | return self.build_res(input_str == ocr_str) | ||
174 | |||
175 | def se_contain_compare(self, input_str, ocr_str, **kwargs): | ||
176 | if ocr_str.find(input_str) == -1: | ||
177 | return self.RESULT_N | ||
178 | else: | ||
179 | return self.RESULT_Y | ||
180 | |||
181 | def se_amount_compare(self, input_str, ocr_str, **kwargs): | ||
182 | if input_str == ocr_str: | ||
183 | return self.RESULT_Y | ||
184 | else: | ||
185 | try: | ||
186 | float_input = float(input_str) | ||
187 | float_ocr = float(ocr_str) | ||
188 | except Exception as e: | ||
189 | return self.RESULT_N | ||
190 | else: | ||
191 | return self.build_res(float_ocr == float_input) | ||
192 | |||
193 | def se_company_compare(self, input_str, ocr_str, **kwargs): | ||
194 | input_tmp = re.sub(self.re_obj, '', input_str).strip() | ||
195 | ocr_tmp = re.sub(self.re_obj, '', ocr_str).strip() | ||
196 | return self.build_res(input_tmp == ocr_tmp) | ||
197 | |||
198 | def se_rmb_compare(self, input_str, ocr_str, **kwargs): | ||
199 | try: | ||
200 | ocr_lower = rmb_handler.to_rmb_lower(ocr_str) | ||
201 | res = self.build_res(float(input_str) == ocr_lower) | ||
202 | # input_rmb_upper = to_rmb_upper(float(input_str)) | ||
203 | # res = self.build_res(input_rmb_upper == ocr_str) | ||
204 | except Exception as e: | ||
205 | return self.RESULT_N | ||
206 | else: | ||
207 | return res | ||
208 | |||
209 | def se_type_compare(self, input_str, ocr_str, **kwargs): | ||
210 | for map_tuple in self.TYPE_MAPPING: | ||
211 | if re.search(map_tuple[0], ocr_str) is not None: | ||
212 | compare_str = map_tuple[1] | ||
213 | break | ||
214 | else: | ||
215 | compare_str = self.CSOTH | ||
216 | return self.build_res(input_str == compare_str) | ||
217 | |||
139 | 218 | ||
140 | cp = Comparison() | 219 | cp = Comparison() |
141 | 220 | ... | ... |
src/common/tools/mssql_script6.py
0 → 100644
1 | import pyodbc | ||
2 | |||
3 | |||
4 | hil_sql = """ | ||
5 | create table hil_se_comparison_info | ||
6 | ( | ||
7 | id bigint identity primary key, | ||
8 | uniq_seq nvarchar(128) not null, | ||
9 | application_id nvarchar(64) not null, | ||
10 | application_version tinyint default 0 not null, | ||
11 | customer_type nvarchar(16) not null, | ||
12 | first_submmison_date nvarchar(16) not null, | ||
13 | property_doc_policy nvarchar(16), | ||
14 | |||
15 | individual_cus_info nvarchar(max) not null, | ||
16 | corporate_cus_info nvarchar(max), | ||
17 | vehicle_info nvarchar(max) not null, | ||
18 | insurance_info nvarchar(max) not null, | ||
19 | bank_info nvarchar(max) not null, | ||
20 | quotationt_info nvarchar(max) not null, | ||
21 | |||
22 | update_time datetime not null, | ||
23 | create_time datetime not null | ||
24 | ); | ||
25 | |||
26 | create index hil_se_comparison_info_application_id_index | ||
27 | on hil_se_comparison_info (application_id); | ||
28 | |||
29 | create index hil_se_comparison_info_create_time_index | ||
30 | on hil_se_comparison_info (create_time); | ||
31 | |||
32 | create index hil_se_comparison_info_uniq_seq_index | ||
33 | on hil_se_comparison_info (uniq_seq); | ||
34 | |||
35 | create table hil_se_ocr_result | ||
36 | ( | ||
37 | id int identity primary key, | ||
38 | application_id nvarchar(64) not null, | ||
39 | bs_ocr nvarchar(max), | ||
40 | mvi_ocr nvarchar(max), | ||
41 | ic_ocr nvarchar(max), | ||
42 | rp_ocr nvarchar(max), | ||
43 | bc_ocr nvarchar(max), | ||
44 | bl_ocr nvarchar(max), | ||
45 | uci_ocr nvarchar(max), | ||
46 | eep_ocr nvarchar(max), | ||
47 | dl_ocr nvarchar(max), | ||
48 | pp_ocr nvarchar(max), | ||
49 | mvc_ocr nvarchar(max), | ||
50 | vat_ocr nvarchar(max), | ||
51 | update_time datetime not null, | ||
52 | create_time datetime not null | ||
53 | ); | ||
54 | |||
55 | create unique index hil_se_ocr_result_application_id_uindex | ||
56 | on hil_se_ocr_result (application_id); | ||
57 | |||
58 | create table hil_ca_compare_result | ||
59 | ( | ||
60 | id int identity primary key, | ||
61 | application_id nvarchar(64) not null, | ||
62 | is_finish bit default 0 not null, | ||
63 | compare_count smallint default 0 not null, | ||
64 | failed_count smallint default 0 not null, | ||
65 | reason1_count smallint default 0 not null, | ||
66 | reason2_count smallint default 0 not null, | ||
67 | reason3_count smallint default 0 not null, | ||
68 | reason4_count smallint default 0 not null, | ||
69 | reason5_count smallint default 0 not null, | ||
70 | reason6_count smallint default 0 not null, | ||
71 | reason7_count smallint default 0 not null, | ||
72 | reason8_count smallint default 0 not null, | ||
73 | reason9_count smallint default 0 not null, | ||
74 | reason10_count smallint default 0 not null, | ||
75 | result nvarchar(max), | ||
76 | update_time datetime not null, | ||
77 | create_time datetime not null | ||
78 | ); | ||
79 | |||
80 | create unique index hil_ca_compare_result_application_id_uindex | ||
81 | on hil_ca_compare_result (application_id); | ||
82 | |||
83 | create index hil_ca_compare_result_update_time_index | ||
84 | on hil_ca_compare_result (update_time); | ||
85 | |||
86 | create table hil_se_compare_result | ||
87 | ( | ||
88 | id int identity primary key, | ||
89 | application_id nvarchar(64) not null, | ||
90 | is_finish bit default 0 not null, | ||
91 | compare_count smallint default 0 not null, | ||
92 | failed_count smallint default 0 not null, | ||
93 | reason1_count smallint default 0 not null, | ||
94 | reason2_count smallint default 0 not null, | ||
95 | reason3_count smallint default 0 not null, | ||
96 | reason4_count smallint default 0 not null, | ||
97 | reason5_count smallint default 0 not null, | ||
98 | reason6_count smallint default 0 not null, | ||
99 | reason7_count smallint default 0 not null, | ||
100 | reason8_count smallint default 0 not null, | ||
101 | reason9_count smallint default 0 not null, | ||
102 | reason10_count smallint default 0 not null, | ||
103 | result nvarchar(max), | ||
104 | update_time datetime not null, | ||
105 | create_time datetime not null | ||
106 | ); | ||
107 | |||
108 | create unique index hil_se_compare_result_application_id_uindex | ||
109 | on hil_se_compare_result (application_id); | ||
110 | |||
111 | create index hil_se_compare_result_update_time_index | ||
112 | on hil_se_compare_result (update_time); | ||
113 | """ | ||
114 | |||
115 | afc_sql = """ | ||
116 | create table afc_se_comparison_info | ||
117 | ( | ||
118 | id bigint identity primary key, | ||
119 | uniq_seq nvarchar(128) not null, | ||
120 | application_id nvarchar(64) not null, | ||
121 | application_version tinyint default 0 not null, | ||
122 | customer_type nvarchar(16) not null, | ||
123 | first_submmison_date nvarchar(16) not null, | ||
124 | property_doc_policy nvarchar(16), | ||
125 | |||
126 | individual_cus_info nvarchar(max) not null, | ||
127 | corporate_cus_info nvarchar(max), | ||
128 | vehicle_info nvarchar(max) not null, | ||
129 | insurance_info nvarchar(max) not null, | ||
130 | bank_info nvarchar(max) not null, | ||
131 | quotationt_info nvarchar(max) not null, | ||
132 | |||
133 | update_time datetime not null, | ||
134 | create_time datetime not null | ||
135 | ); | ||
136 | |||
137 | create index afc_se_comparison_info_application_id_index | ||
138 | on afc_se_comparison_info (application_id); | ||
139 | |||
140 | create index afc_se_comparison_info_create_time_index | ||
141 | on afc_se_comparison_info (create_time); | ||
142 | |||
143 | create index afc_se_comparison_info_uniq_seq_index | ||
144 | on afc_se_comparison_info (uniq_seq); | ||
145 | |||
146 | create table afc_se_ocr_result | ||
147 | ( | ||
148 | id int identity primary key, | ||
149 | application_id nvarchar(64) not null, | ||
150 | bs_ocr nvarchar(max), | ||
151 | mvi_ocr nvarchar(max), | ||
152 | ic_ocr nvarchar(max), | ||
153 | rp_ocr nvarchar(max), | ||
154 | bc_ocr nvarchar(max), | ||
155 | bl_ocr nvarchar(max), | ||
156 | uci_ocr nvarchar(max), | ||
157 | eep_ocr nvarchar(max), | ||
158 | dl_ocr nvarchar(max), | ||
159 | pp_ocr nvarchar(max), | ||
160 | mvc_ocr nvarchar(max), | ||
161 | vat_ocr nvarchar(max), | ||
162 | update_time datetime not null, | ||
163 | create_time datetime not null | ||
164 | ); | ||
165 | |||
166 | create unique index afc_se_ocr_result_application_id_uindex | ||
167 | on afc_se_ocr_result (application_id); | ||
168 | |||
169 | create table afc_ca_compare_result | ||
170 | ( | ||
171 | id int identity primary key, | ||
172 | application_id nvarchar(64) not null, | ||
173 | is_finish bit default 0 not null, | ||
174 | compare_count smallint default 0 not null, | ||
175 | failed_count smallint default 0 not null, | ||
176 | reason1_count smallint default 0 not null, | ||
177 | reason2_count smallint default 0 not null, | ||
178 | reason3_count smallint default 0 not null, | ||
179 | reason4_count smallint default 0 not null, | ||
180 | reason5_count smallint default 0 not null, | ||
181 | reason6_count smallint default 0 not null, | ||
182 | reason7_count smallint default 0 not null, | ||
183 | reason8_count smallint default 0 not null, | ||
184 | reason9_count smallint default 0 not null, | ||
185 | reason10_count smallint default 0 not null, | ||
186 | result nvarchar(max), | ||
187 | update_time datetime not null, | ||
188 | create_time datetime not null | ||
189 | ); | ||
190 | |||
191 | create unique index afc_ca_compare_result_application_id_uindex | ||
192 | on afc_ca_compare_result (application_id); | ||
193 | |||
194 | create index afc_ca_compare_result_update_time_index | ||
195 | on afc_ca_compare_result (update_time); | ||
196 | |||
197 | create table afc_se_compare_result | ||
198 | ( | ||
199 | id int identity primary key, | ||
200 | application_id nvarchar(64) not null, | ||
201 | is_finish bit default 0 not null, | ||
202 | compare_count smallint default 0 not null, | ||
203 | failed_count smallint default 0 not null, | ||
204 | reason1_count smallint default 0 not null, | ||
205 | reason2_count smallint default 0 not null, | ||
206 | reason3_count smallint default 0 not null, | ||
207 | reason4_count smallint default 0 not null, | ||
208 | reason5_count smallint default 0 not null, | ||
209 | reason6_count smallint default 0 not null, | ||
210 | reason7_count smallint default 0 not null, | ||
211 | reason8_count smallint default 0 not null, | ||
212 | reason9_count smallint default 0 not null, | ||
213 | reason10_count smallint default 0 not null, | ||
214 | result nvarchar(max), | ||
215 | update_time datetime not null, | ||
216 | create_time datetime not null | ||
217 | ); | ||
218 | |||
219 | create unique index afc_se_compare_result_application_id_uindex | ||
220 | on afc_se_compare_result (application_id); | ||
221 | |||
222 | create index afc_se_compare_result_update_time_index | ||
223 | on afc_se_compare_result (update_time); | ||
224 | """ | ||
225 | |||
226 | hil_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True) | ||
227 | hil_cursor = hil_cnxn.cursor() | ||
228 | hil_cursor.execute(hil_sql) | ||
229 | hil_cursor.close() | ||
230 | hil_cnxn.close() | ||
231 | |||
232 | afc_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True) | ||
233 | afc_cursor = afc_cnxn.cursor() | ||
234 | afc_cursor.execute(afc_sql) | ||
235 | afc_cursor.close() | ||
236 | afc_cnxn.close() |
-
Please register or sign in to post a comment