add MPOS
Showing
6 changed files
with
114 additions
and
3 deletions
... | @@ -1407,6 +1407,7 @@ SE_USED_FIELD = ['vinNo', 'vehicleTransactionAmount'] | ... | @@ -1407,6 +1407,7 @@ SE_USED_FIELD = ['vinNo', 'vehicleTransactionAmount'] |
1407 | SE_NEW_ADD_FIELD = ['customerName', 'idNum', 'dateOfInvoice', 'stamp', '发票联', '发票真伪校验', '新旧版式'] | 1407 | SE_NEW_ADD_FIELD = ['customerName', 'idNum', 'dateOfInvoice', 'stamp', '发票联', '发票真伪校验', '新旧版式'] |
1408 | SE_FPL_VALUE = '发票联' | 1408 | SE_FPL_VALUE = '发票联' |
1409 | SE_STAMP_VALUE = '有' | 1409 | SE_STAMP_VALUE = '有' |
1410 | SE_DYSYR_VALUE = '无' | ||
1410 | SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印' | 1411 | SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印' |
1411 | SE_GB_NEW_FIELD = ['vinNo'] | 1412 | SE_GB_NEW_FIELD = ['vinNo'] |
1412 | SE_GB_USED_FIELD = ['customerName', 'idNum', 'date'] | 1413 | SE_GB_USED_FIELD = ['customerName', 'idNum', 'date'] |
... | @@ -2226,3 +2227,8 @@ AUTO_WB_FIELD = ( | ... | @@ -2226,3 +2227,8 @@ AUTO_WB_FIELD = ( |
2226 | 'rpa_get_case_from_ocr_time', 'rpa_get_case_from_oc_time', 'rpa_payment_authorize_time', 'rpa_second_eye_time') | 2227 | 'rpa_get_case_from_ocr_time', 'rpa_get_case_from_oc_time', 'rpa_payment_authorize_time', 'rpa_second_eye_time') |
2227 | ) | 2228 | ) |
2228 | 2229 | ||
2230 | MPOS_MAP = { | ||
2231 | IC_CLASSIFY, | ||
2232 | BC_CLASSIFY, | ||
2233 | BL_CLASSIFY, | ||
2234 | } | ... | ... |
1 | import re | 1 | import re |
2 | import json | ||
3 | import requests | ||
2 | from .named_enum import DocStatus | 4 | from .named_enum import DocStatus |
3 | from .models import HILDoc, AFCDoc | 5 | from .models import HILDoc, AFCDoc |
4 | from . import consts | 6 | from . import consts |
5 | 7 | ||
6 | 8 | ||
9 | class MPOSHandler: | ||
10 | |||
11 | @staticmethod | ||
12 | def ocr1_process(url, img_base64): | ||
13 | result_list = [] | ||
14 | json_data = { | ||
15 | "file": img_base64, | ||
16 | } | ||
17 | ocr_1_response = requests.post(url, json=json_data) | ||
18 | if ocr_1_response.status_code != 200: | ||
19 | return result_list | ||
20 | ocr_1_res = ocr_1_response.json() | ||
21 | |||
22 | for ocr_data in ocr_1_res.get('data', []): | ||
23 | |||
24 | license_data = ocr_data.get('data') | ||
25 | if not license_data: | ||
26 | continue | ||
27 | |||
28 | if isinstance(license_data, dict): | ||
29 | license_data.pop('base64_img', '') | ||
30 | |||
31 | id_card_dict = {} | ||
32 | card_type = license_data.get('type', '') | ||
33 | is_ic = card_type.startswith('身份证') | ||
34 | is_info_side = card_type.endswith('信息面') | ||
35 | # id_card_dict['类别'] = '0' if is_ic else '1' | ||
36 | if is_ic: | ||
37 | field_map = consts.IC_MAP_0 if is_info_side else consts.IC_MAP_1 | ||
38 | else: | ||
39 | field_map = consts.RP_MAP_0 if is_info_side else consts.RP_MAP_1 | ||
40 | for write_field, search_field in field_map: | ||
41 | id_card_dict[write_field] = license_data.get('words_result', {}).get(search_field, {}).get('words', '') | ||
42 | if not is_info_side: | ||
43 | start_time = license_data.get('words_result', {}).get('签发日期', {}).get('words', '') | ||
44 | end_time = license_data.get('words_result', {}).get('失效日期', {}).get('words', '') | ||
45 | id_card_dict['有效期限'] = '{0}-{1}'.format(start_time, end_time) | ||
46 | result_list.append(id_card_dict) | ||
47 | return result_list | ||
48 | |||
49 | @staticmethod | ||
50 | def ocr2_process(url, classify, img_base64): | ||
51 | result_list = [] | ||
52 | pid, _, _, _, _, _ = consts.LICENSE_CLASSIFY_MAPPING.get(classify) | ||
53 | json_data_2 = { | ||
54 | "pid": str(pid), | ||
55 | "filedata": img_base64 | ||
56 | } | ||
57 | ocr_2_response = requests.post(url, data=json_data_2) | ||
58 | if ocr_2_response.status_code != 200: | ||
59 | return result_list | ||
60 | ocr_2_res = json.loads(ocr_2_response.text) | ||
61 | |||
62 | if ocr_2_res.get('ErrorCode') in consts.SUCCESS_CODE_SET: | ||
63 | if pid == consts.BC_PID: | ||
64 | # 银行卡 | ||
65 | # res_dict = {} | ||
66 | # for en_key, chn_key in consts.BC_FIELD: | ||
67 | # res_dict[chn_key] = ocr_res_2.get(en_key, '') | ||
68 | result_list.append(ocr_2_res) | ||
69 | else: | ||
70 | # 营业执照等 | ||
71 | for result_dict in ocr_2_res.get('ResultList', []): | ||
72 | res_dict = {} | ||
73 | for field_dict in result_dict.get('FieldList', []): | ||
74 | res_dict[field_dict.get('chn_key', '')] = field_dict.get('value', '') | ||
75 | result_list.append(res_dict) | ||
76 | return result_list | ||
77 | |||
78 | |||
7 | class DocHandler: | 79 | class DocHandler: |
8 | 80 | ||
9 | @staticmethod | 81 | @staticmethod | ... | ... |
src/apps/doc/mpos_urls.py
0 → 100644
... | @@ -43,7 +43,7 @@ from .models import ( | ... | @@ -43,7 +43,7 @@ from .models import ( |
43 | AFCAutoSettlement, | 43 | AFCAutoSettlement, |
44 | ) | 44 | ) |
45 | from .named_enum import ErrorType, AutoResult, WholeResult, RPAResult | 45 | from .named_enum import ErrorType, AutoResult, WholeResult, RPAResult |
46 | from .mixins import DocHandler | 46 | from .mixins import DocHandler, MPOSHandler |
47 | from . import consts | 47 | from . import consts |
48 | from apps.account.authentication import OAuth2AuthenticationWithUser | 48 | from apps.account.authentication import OAuth2AuthenticationWithUser |
49 | from celery_compare.tasks import compare | 49 | from celery_compare.tasks import compare |
... | @@ -507,6 +507,11 @@ result_update_args = { | ... | @@ -507,6 +507,11 @@ result_update_args = { |
507 | 'result': fields.List(fields.Nested(result_item_args), required=True, validate=validate.Length(min=1)), | 507 | 'result': fields.List(fields.Nested(result_item_args), required=True, validate=validate.Length(min=1)), |
508 | } | 508 | } |
509 | 509 | ||
510 | mpos_args = { | ||
511 | 'type': fields.Int(required=True, validate=validate.OneOf(consts.MPOS_MAP.keys())), | ||
512 | 'file_base64_content': fields.List(fields.Str(), required=True, validate=validate.Length(min=1)), | ||
513 | } | ||
514 | |||
510 | 515 | ||
511 | class UploadDocView(GenericView, DocHandler): | 516 | class UploadDocView(GenericView, DocHandler): |
512 | # permission_classes = [] | 517 | # permission_classes = [] |
... | @@ -1422,3 +1427,23 @@ class AutoSettlementExcelView(GenericView): | ... | @@ -1422,3 +1427,23 @@ class AutoSettlementExcelView(GenericView): |
1422 | wb.close() | 1427 | wb.close() |
1423 | file_name = 'cr_auto_records_{0}'.format(timezone.now().strftime('%Y-%m-%d_%H:%M:%S')) | 1428 | file_name = 'cr_auto_records_{0}'.format(timezone.now().strftime('%Y-%m-%d_%H:%M:%S')) |
1424 | return response.excel_response(file_name, io_content) | 1429 | return response.excel_response(file_name, io_content) |
1430 | |||
1431 | |||
1432 | class MPOSView(GenericView, MPOSHandler): | ||
1433 | permission_classes = [IsAuthenticated] | ||
1434 | authentication_classes = [OAuth2AuthenticationWithUser] | ||
1435 | |||
1436 | # MPOS | ||
1437 | @use_args(mpos_args, location='data') | ||
1438 | def post(self, request, args): | ||
1439 | classify = args.get('type') | ||
1440 | result_list = [] | ||
1441 | for img_base64 in args.get('file_base64_content', []): | ||
1442 | if classify in consts.LICENSE_CLASSIFY_SET_1: | ||
1443 | result = self.ocr1_process(conf.MPOS_URL1, img_base64) | ||
1444 | else: | ||
1445 | result = self.ocr2_process(conf.MPOS_URL2, classify, img_base64) | ||
1446 | |||
1447 | result_list.extend(result) | ||
1448 | |||
1449 | return response.ok(data=result_list) | ... | ... |
... | @@ -23,5 +23,6 @@ urlpatterns = [ | ... | @@ -23,5 +23,6 @@ urlpatterns = [ |
23 | path(r'api/priority/', include('apps.doc.priority_urls')), | 23 | path(r'api/priority/', include('apps.doc.priority_urls')), |
24 | path(r'api/compare/', include('apps.doc.compare_urls')), | 24 | path(r'api/compare/', include('apps.doc.compare_urls')), |
25 | path(r'api/doc/', include('apps.doc.internal_urls')), | 25 | path(r'api/doc/', include('apps.doc.internal_urls')), |
26 | path(r'api/mpos/', include('apps.doc.mpos_urls')), | ||
26 | path('api/oauth/', include('oauth2_provider.urls', namespace='oauth2_provider')), | 27 | path('api/oauth/', include('oauth2_provider.urls', namespace='oauth2_provider')), |
27 | ] | 28 | ] | ... | ... |
... | @@ -1194,7 +1194,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity): | ... | @@ -1194,7 +1194,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity): |
1194 | # (consts.SE_BD_FIELD[6], cms_info.get('insuranceDetails', {}).get('startDate', '')), | 1194 | # (consts.SE_BD_FIELD[6], cms_info.get('insuranceDetails', {}).get('startDate', '')), |
1195 | # (consts.SE_BD_FIELD[7], cms_info.get('insuranceDetails', {}).get('endDate', '')), | 1195 | # (consts.SE_BD_FIELD[7], cms_info.get('insuranceDetails', {}).get('endDate', '')), |
1196 | # (consts.SE_BD_FIELD[8], consts.SE_STAMP_VALUE), | 1196 | # (consts.SE_BD_FIELD[8], consts.SE_STAMP_VALUE), |
1197 | # (consts.SE_BD_FIELD[9], consts.SE_STAMP_VALUE), | 1197 | # (consts.SE_BD_FIELD[9], consts.SE_DYSYR_VALUE), |
1198 | # ] | 1198 | # ] |
1199 | # if is_insurance == 1: | 1199 | # if is_insurance == 1: |
1200 | # bd_field_input.append((consts.SE_BD_FIELD[10], insurance_price)) | 1200 | # bd_field_input.append((consts.SE_BD_FIELD[10], insurance_price)) |
... | @@ -1677,7 +1677,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): | ... | @@ -1677,7 +1677,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): |
1677 | (consts.SE_BD_FIELD[6], cms_info.get('insuranceDetails', {}).get('startDate', '')), | 1677 | (consts.SE_BD_FIELD[6], cms_info.get('insuranceDetails', {}).get('startDate', '')), |
1678 | (consts.SE_BD_FIELD[7], cms_info.get('insuranceDetails', {}).get('endDate', '')), | 1678 | (consts.SE_BD_FIELD[7], cms_info.get('insuranceDetails', {}).get('endDate', '')), |
1679 | (consts.SE_BD_FIELD[8], consts.SE_STAMP_VALUE), | 1679 | (consts.SE_BD_FIELD[8], consts.SE_STAMP_VALUE), |
1680 | (consts.SE_BD_FIELD[9], consts.SE_STAMP_VALUE), | 1680 | (consts.SE_BD_FIELD[9], consts.SE_DYSYR_VALUE), |
1681 | ] | 1681 | ] |
1682 | if is_insurance == 1: | 1682 | if is_insurance == 1: |
1683 | bd_field_input.append((consts.SE_BD_FIELD[10], insurance_price)) | 1683 | bd_field_input.append((consts.SE_BD_FIELD[10], insurance_price)) | ... | ... |
-
Please register or sign in to post a comment