83c49cee by 冯轩

Merge branch 'feature/CHINARPA-5131-5234'

2 parents c06bbf34 35dc3f45
...@@ -5,5 +5,7 @@ from . import views ...@@ -5,5 +5,7 @@ from . import views
5 urlpatterns = [ 5 urlpatterns = [
6 path(r'', views.DocView.as_view()), 6 path(r'', views.DocView.as_view()),
7 path(r'query/employee', views.EmployeeView.as_view()), 7 path(r'query/employee', views.EmployeeView.as_view()),
8 path(r'query/greenBookHistoryFile', views.SearchGBHistoryFileView.as_view()),
9 path(r'download/greenBookHistoryFile', views.DownloadGBHistoryFileView.as_view()),
8 path(r'contract/v1', views.SEContractView.as_view()), 10 path(r'contract/v1', views.SEContractView.as_view()),
9 ] 11 ]
......
...@@ -1130,4 +1130,46 @@ class DealerMapping(models.Model): ...@@ -1130,4 +1130,46 @@ class DealerMapping(models.Model):
1130 1130
1131 class Meta: 1131 class Meta:
1132 managed = False 1132 managed = False
1133 db_table = 'dealer_mapping'
...\ No newline at end of file ...\ No newline at end of file
1133 db_table = 'dealer_mapping'
1134
1135 class HILGreenBookHistoryFile(models.Model):
1136 id = models.AutoField(primary_key=True, verbose_name="id") # 主键
1137 object_id = models.CharField(max_length=64, verbose_name="文件唯一ID")
1138 object_name = models.CharField(max_length=255, verbose_name="文件名称")
1139 application_no = models.CharField(max_length=64, verbose_name="申请号")
1140 object_type = models.CharField(max_length=64, verbose_name="文件类型")
1141 customer_name = models.CharField(max_length=64, verbose_name="customer_name")
1142 content_size = models.CharField(max_length=64, verbose_name="文件大小")
1143 owner_name = models.CharField(max_length=64, verbose_name="owner_name")
1144 input_date = models.DateTimeField(verbose_name="上传时间")
1145 modify_date = models.DateTimeField(verbose_name="修改时间")
1146 location = models.CharField(max_length=255, verbose_name="文件位置")
1147 download_finish = models.SmallIntegerField(null=False, default=0, verbose_name="是否下载完成")
1148 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
1149 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
1150
1151 class Meta:
1152 managed = False
1153 db_table = 'hil_gb_history_file'
1154
1155
1156 class AFCGreenBookHistoryFile(models.Model):
1157 id = models.AutoField(primary_key=True, verbose_name="id") # 主键
1158 object_id = models.CharField(max_length=64, verbose_name="文件唯一ID")
1159 object_name = models.CharField(max_length=255, verbose_name="文件名称")
1160 application_no = models.CharField(max_length=64, verbose_name="申请号")
1161 object_type = models.CharField(max_length=64, verbose_name="文件类型")
1162 customer_name = models.CharField(max_length=64, verbose_name="customer_name")
1163 content_size = models.CharField(max_length=64, verbose_name="文件大小")
1164 owner_name = models.CharField(max_length=64, verbose_name="owner_name")
1165 input_date = models.DateTimeField(verbose_name="上传时间")
1166 modify_date = models.DateTimeField(verbose_name="修改时间")
1167 location = models.CharField(max_length=255, verbose_name="文件位置")
1168 download_finish = models.BooleanField(default=True, verbose_name="是否下载完成")
1169 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
1170 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
1171
1172 class Meta:
1173 managed = False
1174 db_table = 'afc_gb_history_file'
1175 situ_db_label = 'afc'
......
...@@ -163,3 +163,21 @@ class ECM(GenericView): ...@@ -163,3 +163,21 @@ class ECM(GenericView):
163 response.status_code, response.headers, response.text)) 163 response.status_code, response.headers, response.text))
164 if 'ns12:createResponse' not in response.json().get('S:Envelope', {}).get('S:Body', {}): 164 if 'ns12:createResponse' not in response.json().get('S:Envelope', {}).get('S:Body', {}):
165 raise ECMException('ECM upload failed: {0} , with headers: {1}'.format(response.json(), response.headers)) 165 raise ECMException('ECM upload failed: {0} , with headers: {1}'.format(response.json(), response.headers))
166
167 def search_doc_info_list(self, filePath, business_type):
168 args = {
169 #userName n大写,和其他接口不一样,是因为apigateway没有做统一
170 "userName": self.username,
171 "password": self.pwd,
172 "docbase": self.doc_base_map.get(business_type),
173 "documentType": "green_book",
174 "dql":"select r_object_id, object_name,b_application_no, r_object_type,b_customer_name,r_content_size, owner_name, b_input_date, r_modify_date, b_location from green_book where b_location = '{}'" .format(filePath),
175 }
176 header_info = self.get_headers()
177 self.running_log.info("{0} search header_info:{1}".format(self.log_base, header_info))
178 self.running_log.info("{0} search args_info:{1}".format(self.log_base, args))
179 response = requests.post(self.search_url, headers=header_info, json=args, verify=False)
180 if response.status_code != 200:
181 raise ECMException('ECM search failed with code: {0}'.format(response.status_code))
182 #self.running_log.info("{0} search response.json():{1}".format(self.log_base, response.json()))
183 return response.json()
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -53,7 +53,9 @@ from .models import ( ...@@ -53,7 +53,9 @@ from .models import (
53 AFCOCRResult, 53 AFCOCRResult,
54 AFCSEOCRResult, 54 AFCSEOCRResult,
55 HILCmsStatusInfo, 55 HILCmsStatusInfo,
56 AFCCmsStatusInfo 56 AFCCmsStatusInfo,
57 HILGreenBookHistoryFile,
58 AFCGreenBookHistoryFile
57 ) 59 )
58 from .named_enum import ErrorType, AutoResult, WholeResult, RPAResult, SystemName, RequestTeam 60 from .named_enum import ErrorType, AutoResult, WholeResult, RPAResult, SystemName, RequestTeam
59 from .mixins import DocHandler, MPOSHandler, PreSEHandler 61 from .mixins import DocHandler, MPOSHandler, PreSEHandler
...@@ -61,7 +63,7 @@ from . import consts ...@@ -61,7 +63,7 @@ from . import consts
61 from apps.account.authentication import OAuth2AuthenticationWithUser 63 from apps.account.authentication import OAuth2AuthenticationWithUser
62 from celery_compare.tasks import compare, fsm_compare 64 from celery_compare.tasks import compare, fsm_compare
63 from prese.compare import get_empty_result 65 from prese.compare import get_empty_result
64 66 from apps.doc.ocr.ecm import ECM
65 import time 67 import time
66 68
67 69
...@@ -95,6 +97,18 @@ employee_args = { ...@@ -95,6 +97,18 @@ employee_args = {
95 'business_type': fields.Str(required=True, validate=validate.Length(max=64)), 97 'business_type': fields.Str(required=True, validate=validate.Length(max=64)),
96 } 98 }
97 99
100 q_gb_file_args = {
101 'file_path': fields.Str(required=True, validate=validate.Length(max=255)),
102 'business_type': fields.Str(required=True, validate=validate.Length(max=64)),
103 }
104
105 d_gb_file_args = {
106 'object_id': fields.Str(required=True, validate=validate.Length(max=64)),
107 'save_path': fields.Str(required=True, validate=validate.Length(max=255)),
108 'business_type': fields.Str(required=True, validate=validate.Length(max=64)),
109 }
110
111
98 go_args = { 112 go_args = {
99 'image': fields.Raw(required=True), 113 'image': fields.Raw(required=True),
100 } 114 }
...@@ -1876,4 +1890,68 @@ class EmployeeView(GenericView): ...@@ -1876,4 +1890,68 @@ class EmployeeView(GenericView):
1876 self.running_log.info('[query Employee] [application_id={0}] [income_keywords={1}]'.format(application_id, income_keywords)) 1890 self.running_log.info('[query Employee] [application_id={0}] [income_keywords={1}]'.format(application_id, income_keywords))
1877 if income_keywords is not None and len(income_keywords) > 0: 1891 if income_keywords is not None and len(income_keywords) > 0:
1878 return response.ok(data=True) 1892 return response.ok(data=True)
1879 return response.ok(data=False)
...\ No newline at end of file ...\ No newline at end of file
1893 return response.ok(data=False)
1894
1895 class SearchGBHistoryFileView(GenericView):
1896 permission_classes = [IsAuthenticated]
1897 authentication_classes = [OAuth2AuthenticationWithUser]
1898
1899 @use_args(q_gb_file_args, location='data')
1900 def post(self, request, args):
1901
1902 file_path = args.get('file_path')
1903 business_type = args.get('business_type')
1904
1905 gb_history_file_class = HILGreenBookHistoryFile if business_type in consts.HIL_SET else AFCGreenBookHistoryFile
1906 ecm = ECM()
1907 response_json = ecm.search_doc_info_list(file_path, business_type)
1908 try:
1909 data_objects = response_json['Envelope']['Body']['executeResponse']['return']['dataPackage']['DataObjects']
1910 except Exception as e:
1911 self.exception_log.exception('[SearchGBHistoryFileView] [response_json parse failed] [response_json={0}] [error={1}]'.format(response_json, traceback.format_exc()))
1912 return response.ok(data=False)
1913 self.running_log.info('[SearchGBHistoryFileView] [data_objects size={0}] '.format(len(data_objects)))
1914 for data_object in data_objects:
1915 object_id = data_object['Identity']['ObjectId']['@id']
1916 properties_dict = {}
1917 properties = data_object['Properties']['Properties']
1918 for prop in properties:
1919 name = prop['@name']
1920 value = prop.get('Value', 'null') # 如果Value为空,则输出null
1921 properties_dict[name] = value
1922 self.running_log.info('[SearchGBHistoryFileView] [properties_dict={0}] '.format(properties_dict))
1923
1924 try:
1925 gb_history_file_class.objects.create(
1926 object_id=object_id,
1927 object_name=properties_dict.get('object_name', ''),
1928 application_no=properties_dict.get('b_application_no', ''),
1929 object_type='green_book',
1930 customer_name=properties_dict.get('b_customer_name', ''),
1931 content_size=properties_dict.get('r_content_size', ''),
1932 owner_name=properties_dict.get('owner_name', ''),
1933 #input_date=properties_dict.get('b_input_date', ''),
1934 #modify_date=properties_dict.get('r_modify_date', ''),
1935 location=properties_dict.get('b_location', ''),
1936 download_finish=False
1937 )
1938 except Exception as e:
1939 self.exception_log.exception('[SearchGBHistoryFileView] [db save failed] [error={0}]'.format(traceback.format_exc()))
1940 return response.ok(data=True)
1941
1942 class DownloadGBHistoryFileView(GenericView):
1943 # permission_classes = [IsAuthenticated]
1944 # authentication_classes = [OAuth2AuthenticationWithUser]
1945
1946 @use_args(d_gb_file_args, location='data')
1947 def post(self, request, args):
1948 try:
1949 business_type = args.get('business_type')
1950 object_id = args.get('object_id')
1951 save_path = args.get('save_path')
1952 ecm = ECM()
1953 ecm.download(save_path, object_id, 'green_book', business_type)
1954 self.running_log.info('[DownloadGBHistoryFileView] [args={0}] '.format(args))
1955 return response.ok(data=True)
1956 except Exception as e:
1957 return response.ok(data=False)
...\ No newline at end of file ...\ No newline at end of file
......
1 import pyodbc
2
3 hil_sql = """
4 CREATE TABLE [dbo].[hil_gb_history_file] (
5 [id] int IDENTITY(1,1) NOT NULL,
6 [object_id] varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
7 [object_name] varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
8 [application_no] varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
9 [object_type] varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
10 [customer_name] varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
11 [content_size] varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
12 [owner_name] varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
13 [input_date] datetime NULL,
14 [modify_date] datetime NULL,
15 [location] varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
16 [download_finish] int NOT NULL,
17 [update_time] datetime NULL,
18 [create_time] datetime NULL
19 )
20 GO;
21
22 alter table hil_gb_history_file ADD CONSTRAINT unique_object_id unique(object_id)
23
24 """
25
26 afc_sql = """
27 CREATE TABLE [dbo].[afc_gb_history_file] (
28 [id] int IDENTITY(1,1) NOT NULL,
29 [object_id] varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
30 [object_name] varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
31 [application_no] varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
32 [object_type] varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
33 [customer_name] varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
34 [content_size] varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
35 [owner_name] varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
36 [input_date] datetime NULL,
37 [modify_date] datetime NULL,
38 [location] varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
39 [download_finish] int NOT NULL,
40 [update_time] datetime NULL,
41 [create_time] datetime NULL
42 )
43 GO;
44
45 alter table afc_gb_history_file ADD CONSTRAINT unique_object_id unique(object_id)
46
47 """
48
49 hil_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
50
51 hil_cursor = hil_cnxn.cursor()
52 hil_cursor.execute(hil_sql)
53
54 hil_cursor.close()
55 hil_cnxn.close()
56
57 afc_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
58
59 afc_cursor = afc_cnxn.cursor()
60 afc_cursor.execute(afc_sql)
61
62 afc_cursor.close()
63 afc_cnxn.close()
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!