78f0a596 by 周伟奇

Merge branch 'master' into feature/pres

2 parents 520cb3bb 530a9a8c
...@@ -20,7 +20,7 @@ from common.tools.pdf_to_img import PDFHandler ...@@ -20,7 +20,7 @@ from common.tools.pdf_to_img import PDFHandler
20 from apps.doc import consts 20 from apps.doc import consts
21 from apps.doc.exceptions import OCR1Exception, OCR2Exception, LTGTException 21 from apps.doc.exceptions import OCR1Exception, OCR2Exception, LTGTException
22 from apps.doc.ocr.wb import BSWorkbook 22 from apps.doc.ocr.wb import BSWorkbook
23 from apps.doc.models import OfflineReport 23 from apps.doc.models import OfflineReport, AFCOfflineReport
24 from apps.doc.named_enum import OfflineFailureReason 24 from apps.doc.named_enum import OfflineFailureReason
25 25
26 26
...@@ -447,7 +447,8 @@ class Command(BaseCommand, LoggerMixin): ...@@ -447,7 +447,8 @@ class Command(BaseCommand, LoggerMixin):
447 finally: 447 finally:
448 end_time = time.time() 448 end_time = time.time()
449 try: 449 try:
450 OfflineReport.objects.create( 450 report_table = OfflineReport if input_dir.find(consts.HIL_PREFIX) != -1 else AFCOfflineReport
451 report_table.objects.create(
451 input_folder=input_dir, 452 input_folder=input_dir,
452 doc_type=consts.DDA_CLASSIFY, 453 doc_type=consts.DDA_CLASSIFY,
453 file_name=name, 454 file_name=name,
......
...@@ -21,7 +21,7 @@ from common.electronic_afc_contract.afc_contract_ocr import predict as afc_predi ...@@ -21,7 +21,7 @@ from common.electronic_afc_contract.afc_contract_ocr import predict as afc_predi
21 from apps.doc import consts 21 from apps.doc import consts
22 from apps.doc.exceptions import OCR1Exception, OCR2Exception, LTGTException 22 from apps.doc.exceptions import OCR1Exception, OCR2Exception, LTGTException
23 from apps.doc.ocr.wb import BSWorkbook 23 from apps.doc.ocr.wb import BSWorkbook
24 from apps.doc.models import OfflineReport 24 from apps.doc.models import OfflineReport, AFCOfflineReport
25 from apps.doc.named_enum import OfflineFailureReason 25 from apps.doc.named_enum import OfflineFailureReason
26 26
27 27
...@@ -769,7 +769,8 @@ class Command(BaseCommand, LoggerMixin): ...@@ -769,7 +769,8 @@ class Command(BaseCommand, LoggerMixin):
769 finally: 769 finally:
770 end_time = time.time() 770 end_time = time.time()
771 try: 771 try:
772 OfflineReport.objects.create( 772 report_table = OfflineReport if input_dir.find(consts.HIL_PREFIX) != -1 else AFCOfflineReport
773 report_table.objects.create(
773 input_folder=input_dir, 774 input_folder=input_dir,
774 doc_type=classify, 775 doc_type=classify,
775 file_name=name, 776 file_name=name,
......
...@@ -18,7 +18,7 @@ from common.tools.pdf_to_img import PDFHandler ...@@ -18,7 +18,7 @@ from common.tools.pdf_to_img import PDFHandler
18 from apps.doc import consts 18 from apps.doc import consts
19 from apps.doc.exceptions import OCR1Exception, OCR4Exception 19 from apps.doc.exceptions import OCR1Exception, OCR4Exception
20 from apps.doc.ocr.wb import BSWorkbook 20 from apps.doc.ocr.wb import BSWorkbook
21 from apps.doc.models import OfflineReport 21 from apps.doc.models import OfflineReport, AFCOfflineReport
22 from apps.doc.named_enum import OfflineFailureReason 22 from apps.doc.named_enum import OfflineFailureReason
23 23
24 24
...@@ -385,7 +385,8 @@ class Command(BaseCommand, LoggerMixin): ...@@ -385,7 +385,8 @@ class Command(BaseCommand, LoggerMixin):
385 finally: 385 finally:
386 end_time = time.time() 386 end_time = time.time()
387 try: 387 try:
388 OfflineReport.objects.create( 388 report_table = OfflineReport if input_dir.find(consts.HIL_PREFIX) != -1 else AFCOfflineReport
389 report_table.objects.create(
389 input_folder=input_dir, 390 input_folder=input_dir,
390 doc_type=classify, 391 doc_type=classify,
391 file_name=name, 392 file_name=name,
......
...@@ -21,7 +21,7 @@ from common.tools.pdf_to_img import PDFHandler ...@@ -21,7 +21,7 @@ from common.tools.pdf_to_img import PDFHandler
21 from apps.doc import consts 21 from apps.doc import consts
22 from apps.doc.exceptions import OCR1Exception, OCR4Exception 22 from apps.doc.exceptions import OCR1Exception, OCR4Exception
23 from apps.doc.ocr.wb import BSWorkbook, PatternFill 23 from apps.doc.ocr.wb import BSWorkbook, PatternFill
24 from apps.doc.models import OfflineReport 24 from apps.doc.models import OfflineReport, AFCOfflineReport
25 from apps.doc.named_enum import OfflineFailureReason 25 from apps.doc.named_enum import OfflineFailureReason
26 26
27 27
...@@ -632,7 +632,8 @@ class Command(BaseCommand, LoggerMixin): ...@@ -632,7 +632,8 @@ class Command(BaseCommand, LoggerMixin):
632 finally: 632 finally:
633 end_time = time.time() 633 end_time = time.time()
634 try: 634 try:
635 OfflineReport.objects.create( 635 report_table = OfflineReport if input_dir.find(consts.HIL_PREFIX) != -1 else AFCOfflineReport
636 report_table.objects.create(
636 input_folder=input_dir, 637 input_folder=input_dir,
637 doc_type=consts.FOLDER_WSC_CLASSIFY, 638 doc_type=consts.FOLDER_WSC_CLASSIFY,
638 file_name=name, 639 file_name=name,
......
...@@ -923,6 +923,7 @@ class MposReport(models.Model): ...@@ -923,6 +923,7 @@ class MposReport(models.Model):
923 image_count = models.SmallIntegerField(default=0, verbose_name="图片数目") 923 image_count = models.SmallIntegerField(default=0, verbose_name="图片数目")
924 # status = models.SmallIntegerField(default=, verbose_name="请求状态") 924 # status = models.SmallIntegerField(default=, verbose_name="请求状态")
925 status = models.BooleanField(default=True, verbose_name="是否成功") 925 status = models.BooleanField(default=True, verbose_name="是否成功")
926 source = models.SmallIntegerField(default=0, verbose_name="来源") # 默认0,代表MPOS
926 927
927 duration = models.IntegerField(null=True, verbose_name='处理时长') 928 duration = models.IntegerField(null=True, verbose_name='处理时长')
928 929
...@@ -950,20 +951,30 @@ class OfflineReport(models.Model): ...@@ -950,20 +951,30 @@ class OfflineReport(models.Model):
950 db_table = 'offline_report' 951 db_table = 'offline_report'
951 952
952 953
953 # class AFCOfflineReport(models.Model): 954 class AFCOfflineReport(models.Model):
954 # id = models.AutoField(primary_key=True, verbose_name="id") # 主键 955 id = models.AutoField(primary_key=True, verbose_name="id") # 主键
955 # 956
956 # input_folder = models.CharField(max_length=512, verbose_name="文件夹路径") 957 input_folder = models.CharField(max_length=512, verbose_name="文件夹路径")
957 # doc_type = models.SmallIntegerField(default=0, verbose_name="文件类型") 958 doc_type = models.SmallIntegerField(default=0, verbose_name="文件类型")
958 # file_name = models.CharField(max_length=1024, verbose_name="文件名") 959 file_name = models.CharField(max_length=1024, verbose_name="文件名")
959 # status = models.BooleanField(default=True, verbose_name="是否成功") 960 status = models.BooleanField(default=True, verbose_name="是否成功")
960 # failure_reason = models.SmallIntegerField(default=0, verbose_name="失败原因") 961 failure_reason = models.SmallIntegerField(default=0, verbose_name="失败原因")
961 # duration = models.IntegerField(verbose_name='处理时长') 962 duration = models.IntegerField(verbose_name='处理时长')
962 # 963
963 # create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 964 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
964 # 965
965 # class Meta: 966 class Meta:
966 # managed = False 967 managed = False
967 # db_table = 'afc_offline_report' 968 db_table = 'afc_offline_report'
968 # situ_db_label = 'afc' 969 situ_db_label = 'afc'
969 970
971
972 class GenericOCRReport(models.Model):
973 id = models.AutoField(primary_key=True, verbose_name="id") # 主键
974 status = models.BooleanField(default=True, verbose_name="是否成功")
975 duration = models.IntegerField(null=True, verbose_name='处理时长')
976 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
977
978 class Meta:
979 managed = False
980 db_table = 'generic_ocr_report'
......
...@@ -46,6 +46,7 @@ from .models import ( ...@@ -46,6 +46,7 @@ from .models import (
46 HILbankVerification, 46 HILbankVerification,
47 AFCbankVerification, 47 AFCbankVerification,
48 MposReport, 48 MposReport,
49 GenericOCRReport,
49 ) 50 )
50 from .named_enum import ErrorType, AutoResult, WholeResult, RPAResult 51 from .named_enum import ErrorType, AutoResult, WholeResult, RPAResult
51 from .mixins import DocHandler, MPOSHandler, PreSEHandler 52 from .mixins import DocHandler, MPOSHandler, PreSEHandler
...@@ -1538,14 +1539,34 @@ class GoView(GenericView): ...@@ -1538,14 +1539,34 @@ class GoView(GenericView):
1538 1539
1539 @use_args(go_args, location='files') 1540 @use_args(go_args, location='files')
1540 def post(self, request, args): 1541 def post(self, request, args):
1541 files = [ 1542 result = None
1542 ('img', ('file', args.get('image'), 'application/octet-stream')) 1543 is_success = False
1543 ] 1544 start_time = time.time()
1544 1545 try:
1545 go_result = requests.post(url=conf.GO_OCR_URL, files=files) 1546 files = [
1547 ('img', ('file', args.get('image'), 'application/octet-stream'))
1548 ]
1546 1549
1547 if go_result.status_code == 200: 1550 go_result = requests.post(url=conf.GO_OCR_URL, files=files)
1548 result = go_result.json().get('data', '') 1551 except Exception as e:
1549 return response.ok(data=result) 1552 pass
1550 else: 1553 else:
1551 return response.res_content(3, '识别错误', data=None) 1554 if go_result.status_code == 200:
1555 is_success = True
1556 result = go_result.json().get('data', '')
1557 finally:
1558 end_time = time.time()
1559 duration_second = int(end_time - start_time)
1560
1561 try:
1562 GenericOCRReport.objects.create(
1563 status=is_success,
1564 duration=duration_second,
1565 )
1566 except Exception as e:
1567 self.exception_log.exception('[go view] [db save failed] [error={0}]'.format(traceback.format_exc()))
1568
1569 if is_success:
1570 return response.ok(data=result)
1571 else:
1572 return response.error_msg(msg='识别错误')
......
...@@ -35,6 +35,10 @@ def ok(**kwargs): ...@@ -35,6 +35,10 @@ def ok(**kwargs):
35 return APIResponse(MetaStatus.SUCCESS.value, msg=MetaStatus.SUCCESS.verbose_name, **kwargs) 35 return APIResponse(MetaStatus.SUCCESS.value, msg=MetaStatus.SUCCESS.verbose_name, **kwargs)
36 36
37 37
38 def error_msg(msg='internal error', **kwargs):
39 return APIResponse(MetaStatus.INTERNAL_ERROR.value, msg=msg, **kwargs)
40
41
38 def need_update(**kwargs): 42 def need_update(**kwargs):
39 return APIResponse(MetaStatus.NEED_UPDATE.value, msg=MetaStatus.NEED_UPDATE.verbose_name, **kwargs) 43 return APIResponse(MetaStatus.NEED_UPDATE.value, msg=MetaStatus.NEED_UPDATE.verbose_name, **kwargs)
40 44
......
1 import pyodbc
2
3 hil_sql = """
4 create table generic_ocr_report
5 (
6 id bigint identity primary key,
7 status bit default 1 not null,
8 duration smallint,
9 create_time datetime not null
10 );
11
12 ALTER TABLE mpos_report ADD source tinyint default 0 not null;
13 """
14
15 afc_sql = """
16 create table afc_offline_report
17 (
18 id bigint identity primary key,
19 input_folder nvarchar(512) not null,
20 doc_type tinyint default 0 not null,
21 file_name nvarchar(1024) not null,
22 status bit default 1 not null,
23 failure_reason tinyint default 0 not null,
24 duration smallint not null,
25 create_time datetime not null
26 );
27 """
28
29 hil_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
30
31 hil_cursor = hil_cnxn.cursor()
32 hil_cursor.execute(hil_sql)
33
34 hil_cursor.close()
35 hil_cnxn.close()
36
37 afc_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
38
39 afc_cursor = afc_cnxn.cursor()
40 afc_cursor.execute(afc_sql)
41
42 afc_cursor.close()
43 afc_cnxn.close()
...@@ -12,6 +12,6 @@ EDMS_DOWNLOAD_URL = http://sccn0637.bmwgroup.net/FH/FileHold/DocumentRepository/ ...@@ -12,6 +12,6 @@ EDMS_DOWNLOAD_URL = http://sccn0637.bmwgroup.net/FH/FileHold/DocumentRepository/
12 EDMS_UPLOAD_URL = http://sccn0637.bmwgroup.net/FH/FileHold/DocumentRepository/UploadHandler.ashx 12 EDMS_UPLOAD_URL = http://sccn0637.bmwgroup.net/FH/FileHold/DocumentRepository/UploadHandler.ashx
13 DEALER_CODE = ocr_situ_group 13 DEALER_CODE = ocr_situ_group
14 14
15 BASE_URL = https://li19dkocruat01vm.bmwgroup.net 15 BASE_URL = https://sfocr-uat.bmwgroup.net
16 16
17 DELAY_SECONDS = 60 17 DELAY_SECONDS = 60
...\ No newline at end of file ...\ No newline at end of file
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!