828d28c7 by 周伟奇

add comparsion offline result upload interface & swagger document

1 parent fc360367
1 swagger: '2.0'
2 info:
3 title: 接口文档
4 description: 宝马ocr/biz_logic接口文档
5 version: 1.0.0
6 host: li19dkocruat01vm.bmwgroup.net
7 basePath: /
8 tags:
9 - name: info
10 description: 比对结果
11 schemes:
12 - https
13 security:
14 - OAuth2: []
15 paths:
16 /api/compare/offline/v1:
17 post:
18 tags:
19 - info
20 summary: 线下文件夹比对结果上传
21 consumes:
22 - application/json
23 produces:
24 - application/json
25 parameters:
26 - in: body
27 name: body
28 required: true
29 schema:
30 $ref: '#/definitions/ComparisonOffline'
31 responses:
32 200:
33 description: ok
34 schema:
35 $ref: '#/definitions/ApiResponse'
36 securityDefinitions:
37 OAuth2:
38 type: oauth2
39 flow: application
40 description: 'This API uses OAuth 2 with the application(clientCredentials) grant
41 flow.
42
43 client_id=sMlciTkppsMzARwHpCVarm5q7DP2Vucj3ny8JFhw
44
45 client_secret=WNoOilDx140ZLcenDKfsnikv7S2LIFs60DciYoqnrZaYLqYsKpcmt7mJIL69o9AEf84uQvRnS3K2UioxfjNyImjR4UOyXbDcF6qYgTLC4KDVByKFdVhKfrn2Lc4q4BNW
46
47 scopes=write
48
49 '
50 tokenUrl: https://li19dkocruat01vm.bmwgroup.net/api/oauth/token/
51 scopes:
52 write: Grants write access
53 responses:
54 ErrorResponse:
55 description: 调用异常, 具体情况请参考`HTTP`状态码和`code`字段
56 schema:
57 $ref: '#/definitions/ApiResponse'
58 NoContent:
59 description: 后台接收请求,但是没有响应内容
60 schema:
61 $ref: '#/definitions/ApiResponse'
62 definitions:
63 ComparisonOffline:
64 type: object
65 required:
66 - is_hil
67 - case_number
68 - request_team
69 - request_trigger
70 - input_file
71 - transaction_start
72 - transaction_end
73 - successful_at_this_level
74 - process_name
75 - total_fields
76 - workflow_name
77 properties:
78 is_hil:
79 description: is_hil
80 type: boolean
81 example: false
82 case_number:
83 description: case_number
84 type: string
85 example: VAT Invoice Number
86 request_team:
87 description: request_team
88 type: string
89 example: Accounting
90 request_trigger:
91 description: request_trigger
92 type: string
93 example: Attended RPA (Q-Account + Machine Number)
94 input_file:
95 description: input_file
96 type: string
97 example: CH-B1000000身份证.jpeg
98 transaction_start:
99 description: transaction_start
100 type: string
101 format: date-time
102 example: '2027-04-30 19:22:29'
103 transaction_end:
104 description: transaction_end
105 type: string
106 format: date-time
107 example: '2027-04-30 19:22:29'
108 successful_at_this_level:
109 description: successful_at_this_level
110 type: boolean
111 example: false
112 failure_reason:
113 description: failure_reason
114 type: string
115 example: Fileds Name which doesn’t pass verification
116 process_name:
117 description: process_name
118 type: string
119 example: F1_VATInvoiceMapping
120 total_fields:
121 description: total_fields
122 type: integer
123 example: 0
124 workflow_name:
125 description: workflow_name
126 type: string
127 example: Normal invoice or Special invoice
128 ApiResponse:
129 description: 响应对象,code字段用于表示响应的状态; data字段用于存放响应内容
130 type: object
131 required:
132 - code
133 - msg
134 properties:
135 code:
136 type: integer
137 format: uint8
138 description: '0: success 1: need login 2: invalid params 3: internal error
139 4: object not exist 5: async wait 6: no permission 7: illegal operation'
140 example: 0
141 enum:
142 - 0
143 - 1
144 - 2
145 - 3
146 - 4
147 - 5
148 - 6
149 - 7
150 msg:
151 type: string
152 example: success
153 data:
154 type: object
...@@ -5,4 +5,5 @@ from . import views ...@@ -5,4 +5,5 @@ from . import views
5 urlpatterns = [ 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 ] 9 ]
......
...@@ -275,8 +275,8 @@ class HILOCRReport(models.Model): ...@@ -275,8 +275,8 @@ class HILOCRReport(models.Model):
275 request_team = models.SmallIntegerField(default=RequestTeam.ACCEPTANCE.value, verbose_name="来源") 275 request_team = models.SmallIntegerField(default=RequestTeam.ACCEPTANCE.value, verbose_name="来源")
276 request_trigger = models.SmallIntegerField(default=RequestTrigger.POS.value, verbose_name="触发者") 276 request_trigger = models.SmallIntegerField(default=RequestTrigger.POS.value, verbose_name="触发者")
277 input_file = models.CharField(max_length=255, verbose_name="文件名") 277 input_file = models.CharField(max_length=255, verbose_name="文件名")
278 transaction_start = models.DateTimeField(null=True, verbose_name='开始时间') # 索引 278 transaction_start = models.DateTimeField(verbose_name='开始时间') # 索引
279 transaction_end = models.DateTimeField(null=True, verbose_name='结束时间') 279 transaction_end = models.DateTimeField(verbose_name='结束时间')
280 successful_at_this_level = models.BooleanField(default=True, verbose_name="是否成功") 280 successful_at_this_level = models.BooleanField(default=True, verbose_name="是否成功")
281 failure_reason = models.SmallIntegerField(null=True, verbose_name="失败原因") 281 failure_reason = models.SmallIntegerField(null=True, verbose_name="失败原因")
282 process_name = models.SmallIntegerField(default=ProcessName.ALL.value, verbose_name="流程名称") 282 process_name = models.SmallIntegerField(default=ProcessName.ALL.value, verbose_name="流程名称")
...@@ -294,8 +294,8 @@ class AFCOCRReport(models.Model): ...@@ -294,8 +294,8 @@ class AFCOCRReport(models.Model):
294 request_team = models.SmallIntegerField(default=RequestTeam.ACCEPTANCE.value, verbose_name="来源") 294 request_team = models.SmallIntegerField(default=RequestTeam.ACCEPTANCE.value, verbose_name="来源")
295 request_trigger = models.SmallIntegerField(default=RequestTrigger.POS.value, verbose_name="触发者") 295 request_trigger = models.SmallIntegerField(default=RequestTrigger.POS.value, verbose_name="触发者")
296 input_file = models.CharField(max_length=255, verbose_name="文件名") 296 input_file = models.CharField(max_length=255, verbose_name="文件名")
297 transaction_start = models.DateTimeField(null=True, verbose_name='开始时间') # 索引 297 transaction_start = models.DateTimeField(verbose_name='开始时间') # 索引
298 transaction_end = models.DateTimeField(null=True, verbose_name='结束时间') 298 transaction_end = models.DateTimeField(verbose_name='结束时间')
299 successful_at_this_level = models.BooleanField(default=True, verbose_name="是否成功") 299 successful_at_this_level = models.BooleanField(default=True, verbose_name="是否成功")
300 failure_reason = models.SmallIntegerField(null=True, verbose_name="失败原因") 300 failure_reason = models.SmallIntegerField(null=True, verbose_name="失败原因")
301 process_name = models.SmallIntegerField(default=ProcessName.ALL.value, verbose_name="流程名称") 301 process_name = models.SmallIntegerField(default=ProcessName.ALL.value, verbose_name="流程名称")
...@@ -308,4 +308,81 @@ class AFCOCRReport(models.Model): ...@@ -308,4 +308,81 @@ class AFCOCRReport(models.Model):
308 situ_db_label = 'afc' 308 situ_db_label = 'afc'
309 309
310 310
311 class HILCompareReport(models.Model):
312 id = models.AutoField(primary_key=True, verbose_name="id") # 主键
313 case_number = models.CharField(max_length=64, verbose_name="申请id")
314 request_team = models.SmallIntegerField(default=RequestTeam.ACCEPTANCE.value, verbose_name="来源")
315 request_trigger = models.SmallIntegerField(default=RequestTrigger.POS.value, verbose_name="触发者")
316 input_file = models.CharField(max_length=255, verbose_name="文件名", null=True)
317 transaction_start = models.DateTimeField(verbose_name='开始时间') # 索引
318 transaction_end = models.DateTimeField(verbose_name='结束时间')
319 successful_at_this_level = models.BooleanField(default=True, verbose_name="是否成功")
320 failure_reason = models.TextField(null=True, verbose_name="失败原因")
321 process_name = models.SmallIntegerField(default=ProcessName.ALL.value, verbose_name="流程名称")
322 total_fields = models.IntegerField(null=True, verbose_name='比对字段数目')
323 workflow_name = models.SmallIntegerField(null=True, verbose_name="工作流程")
324
325 class Meta:
326 managed = False
327 db_table = 'hil_compare_report'
328
329
330 class AFCCompareReport(models.Model):
331 id = models.AutoField(primary_key=True, verbose_name="id") # 主键
332 case_number = models.CharField(max_length=64, verbose_name="申请id")
333 request_team = models.SmallIntegerField(default=RequestTeam.ACCEPTANCE.value, verbose_name="来源")
334 request_trigger = models.SmallIntegerField(default=RequestTrigger.POS.value, verbose_name="触发者")
335 input_file = models.CharField(max_length=255, verbose_name="文件名", null=True)
336 transaction_start = models.DateTimeField(verbose_name='开始时间') # 索引
337 transaction_end = models.DateTimeField(verbose_name='结束时间')
338 successful_at_this_level = models.BooleanField(default=True, verbose_name="是否成功")
339 failure_reason = models.TextField(null=True, verbose_name="失败原因")
340 process_name = models.SmallIntegerField(default=ProcessName.ALL.value, verbose_name="流程名称")
341 total_fields = models.IntegerField(null=True, verbose_name='比对字段数目')
342 workflow_name = models.SmallIntegerField(null=True, verbose_name="工作流程")
343
344 class Meta:
345 managed = False
346 db_table = 'afc_compare_report'
347 situ_db_label = 'afc'
348
349
350 class HILCompareOfflineReport(models.Model):
351 id = models.AutoField(primary_key=True, verbose_name="id") # 主键
352 case_number = models.CharField(max_length=255, verbose_name="申请id")
353 request_team = models.CharField(max_length=255, verbose_name="来源")
354 request_trigger = models.CharField(max_length=1024, verbose_name="触发者")
355 input_file = models.CharField(max_length=2048, verbose_name="文件名", null=True)
356 transaction_start = models.DateTimeField(verbose_name='开始时间') # 索引
357 transaction_end = models.DateTimeField(verbose_name='结束时间')
358 successful_at_this_level = models.BooleanField(default=True, verbose_name="是否成功")
359 failure_reason = models.TextField(null=True, verbose_name="失败原因")
360 process_name = models.CharField(max_length=1024, verbose_name="流程名称")
361 total_fields = models.IntegerField(verbose_name='比对字段数目')
362 workflow_name = models.CharField(max_length=1024, verbose_name="工作流程")
363
364 class Meta:
365 managed = False
366 db_table = 'hil_compare_offline_report'
367
368
369 class AFCCompareOfflineReport(models.Model):
370 id = models.AutoField(primary_key=True, verbose_name="id") # 主键
371 case_number = models.CharField(max_length=255, verbose_name="申请id")
372 request_team = models.CharField(max_length=255, verbose_name="来源")
373 request_trigger = models.CharField(max_length=1024, verbose_name="触发者")
374 input_file = models.CharField(max_length=2048, verbose_name="文件名", null=True)
375 transaction_start = models.DateTimeField(verbose_name='开始时间') # 索引
376 transaction_end = models.DateTimeField(verbose_name='结束时间')
377 successful_at_this_level = models.BooleanField(default=True, verbose_name="是否成功")
378 failure_reason = models.TextField(null=True, verbose_name="失败原因")
379 process_name = models.CharField(max_length=1024, verbose_name="流程名称")
380 total_fields = models.IntegerField(verbose_name='比对字段数目')
381 workflow_name = models.CharField(max_length=1024, verbose_name="工作流程")
382
383 class Meta:
384 managed = False
385 db_table = 'afc_compare_offline_report'
386 situ_db_label = 'afc'
387
311 388
......
...@@ -16,7 +16,7 @@ from common import response ...@@ -16,7 +16,7 @@ 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 19 from .models import DocStatus, PriorityApplication, GCAPRecords, AFCComparisonInfo, HILComparisonInfo, AFCCompareOfflineReport, HILCompareOfflineReport
20 from .mixins import DocHandler 20 from .mixins import DocHandler
21 from . import consts 21 from . import consts
22 from apps.account.authentication import OAuth2AuthenticationWithUser 22 from apps.account.authentication import OAuth2AuthenticationWithUser
...@@ -276,6 +276,21 @@ priority_doc_args = { ...@@ -276,6 +276,21 @@ priority_doc_args = {
276 276
277 } 277 }
278 278
279 compare_offline_args = {
280 'is_hil': fields.Boolean(required=True),
281 'case_number': fields.Str(required=True, validate=validate.Length(max=255)),
282 'request_team': fields.Str(required=True, validate=validate.Length(max=255)),
283 'request_trigger': fields.Str(required=True, validate=validate.Length(max=1024)),
284 'input_file': fields.Str(required=True, validate=validate.Length(max=2048)),
285 'transaction_start': fields.DateTime(required=True),
286 'transaction_end': fields.DateTime(required=True),
287 'successful_at_this_level': fields.Boolean(required=True),
288 'failure_reason': fields.Str(required=False),
289 'process_name': fields.Str(required=True, validate=validate.Length(max=1024)),
290 'total_fields': fields.Int(required=True),
291 'workflow_name': fields.Str(required=True, validate=validate.Length(max=1024)),
292 }
293
279 294
280 class UploadDocView(GenericView, DocHandler): 295 class UploadDocView(GenericView, DocHandler):
281 # permission_classes = [] 296 # permission_classes = []
...@@ -435,7 +450,7 @@ class CompareView(GenericView): ...@@ -435,7 +450,7 @@ class CompareView(GenericView):
435 permission_classes = [IsAuthenticated] 450 permission_classes = [IsAuthenticated]
436 authentication_classes = [OAuth2AuthenticationWithUser] 451 authentication_classes = [OAuth2AuthenticationWithUser]
437 452
438 # pos上传比对信息接口 453 # pos上传比对信息接口 CA
439 @use_args(compare_args, location='data') 454 @use_args(compare_args, location='data')
440 def post(self, request, args): 455 def post(self, request, args):
441 # 存库 456 # 存库
...@@ -486,7 +501,7 @@ class SECompareView(GenericView): ...@@ -486,7 +501,7 @@ class SECompareView(GenericView):
486 permission_classes = [IsAuthenticated] 501 permission_classes = [IsAuthenticated]
487 authentication_classes = [OAuth2AuthenticationWithUser] 502 authentication_classes = [OAuth2AuthenticationWithUser]
488 503
489 # pos上传比对信息接口 504 # pos上传比对信息接口 SE
490 @use_args(se_compare_args, location='data') 505 @use_args(se_compare_args, location='data')
491 def post(self, request, args): 506 def post(self, request, args):
492 self.running_log.info('se compare in') 507 self.running_log.info('se compare in')
...@@ -512,6 +527,50 @@ class SECompareView(GenericView): ...@@ -512,6 +527,50 @@ class SECompareView(GenericView):
512 ''' 527 '''
513 528
514 529
530 class CompareOfflineView(GenericView):
531 permission_classes = [IsAuthenticated]
532 authentication_classes = [OAuth2AuthenticationWithUser]
533
534 # 线下文件夹比对结果上传接口
535 @use_args(compare_offline_args, location='data')
536 def post(self, request, args):
537 is_hil = args.get('is_hil', False)
538 table = HILCompareOfflineReport if is_hil else AFCCompareOfflineReport
539 table.objects.create(
540 case_number=args.get('case_number'),
541 request_team=args.get('request_team'),
542 request_trigger=args.get('request_trigger'),
543 input_file=args.get('input_file'),
544 transaction_start=args.get('transaction_start'),
545 transaction_end=args.get('transaction_end'),
546 successful_at_this_level=args.get('successful_at_this_level'),
547 failure_reason=args.get('failure_reason', ''),
548 process_name=args.get('process_name'),
549 total_fields=args.get('total_fields', 0),
550 workflow_name=args.get('workflow_name'),
551 )
552 return response.ok()
553
554 post.openapi_doc = '''
555 tags: [info]
556 summary: 线下文件夹比对结果上传
557 consumes: [application/json]
558 produces: [application/json]
559 parameters:
560 - in: body
561 name: body
562 required: true
563 schema:
564 $ref: "#/definitions/ComparisonOffline"
565
566 responses:
567 200:
568 description: ok
569 schema:
570 $ref: '#/definitions/ApiResponse'
571 '''
572
573
515 class DocView(GenericView, DocHandler): 574 class DocView(GenericView, DocHandler):
516 575
517 # 文件列表页 576 # 文件列表页
......
1 base_part = '''
2 swagger: "2.0"
3 info:
4 title: 接口文档
5 description: 宝马ocr/biz_logic接口文档
6 version: 1.0.0
7 host: "staging-bmw-ocr.situdata.com"
8 basePath: "/"
9 tags:
10 - name: doc
11 description: 文件
12 schemes:
13 - "https"
14 security:
15 - OAuth2: []
16 '''
17
18 # scheme: oauth
19 security_definitions = '''
20 OAuth2:
21 type: oauth2
22 flow: application
23 description: >
24 This API uses OAuth 2 with the application(clientCredentials) grant flow.
25
26 client_id=sMlciTkppsMzARwHpCVarm5q7DP2Vucj3ny8JFhw
27
28 client_secret=WNoOilDx140ZLcenDKfsnikv7S2LIFs60DciYoqnrZaYLqYsKpcmt7mJIL69o9AEf84uQvRnS3K2UioxfjNyImjR4UOyXbDcF6qYgTLC4KDVByKFdVhKfrn2Lc4q4BNW
29
30 scopes=write
31 tokenUrl: https://staging-bmw-ocr.situdata.com/api/oauth/token/
32 scopes:
33 write: Grants write access
34 '''
35
36 responses = '''
37 ErrorResponse:
38 description: 调用异常, 具体情况请参考`HTTP`状态码和`code`字段
39 schema:
40 $ref: '#/definitions/ApiResponse'
41 NoContent:
42 description: 后台接收请求,但是没有响应内容
43 schema:
44 $ref: '#/definitions/ApiResponse'
45 '''
46
47 parameters = ''
48
49 definitions = '''
50 Doc:
51 type: object
52 required: [applicationData, applicantData, document]
53 properties:
54 applicationData:
55 description: 申请信息
56 type: object
57 required: [applicationId]
58 properties:
59 applicationId:
60 description: 申请id
61 type: string
62 example: CH-B0011010101
63 applicantData:
64 description: 申请人信息
65 type: object
66 required: [mainApplicantName, coApplicantName, guarantor1Name, guarantor2Name]
67 properties:
68 mainApplicantName:
69 description: 主申请人
70 type: string
71 example: 王明阳
72 coApplicantName:
73 description: 共同申请人
74 type: string
75 example: 王明月
76 guarantor1Name:
77 description: 担保人1
78 type: string
79 example: 王明日
80 guarantor2Name:
81 description: 担保人2
82 type: string
83 example: 王明雨
84 document:
85 description: 文件信息
86 type: object
87 required: [documentName, documentScheme, businessType, uploadFinishTime, dataSource, metadataVersionId]
88 properties:
89 documentName:
90 description: 文件名
91 type: string
92 example: CH-B0011010101王明阳申请表
93 documentScheme:
94 description: 文件方案
95 type: string
96 example: Acceptance
97 enum: [Acceptance, Settlement, Contract Management]
98 businessType:
99 description: 业务类型
100 type: string
101 example: CO00001
102 enum: [CO00001, CO00002]
103 uploadFinishTime:
104 description: 上传完成时间
105 type: string
106 example: '2020-09-01 12:21:11'
107 dataSource:
108 description: 数据源
109 type: string
110 example: POS
111 enum: [POS, EAPP, Econtract]
112 metadataVersionId:
113 description: 元数据版本ID
114 type: string
115 example: '8410480'
116
117 Application:
118 type: object
119 required: [APPLICATION_INFORMATION]
120 properties:
121 APPLICATION_INFORMATION:
122 description: 申请单信息
123 type: object
124 required: [SUBMIT_DATETIME, STATUS, ENTITY, RATING, APPLICATION_ID, APPLICATION_VERSION, INTERMEDIATE_DECISION]
125 properties:
126 SUBMIT_DATETIME:
127 description: 提交时间
128 type: string
129 example: 2020-07-08T18:33:31.000+08:00
130 STATUS:
131 description: 状态
132 type: integer
133 example: 42
134 ENTITY:
135 description: 业务类型
136 type: string
137 example: CO00001
138 enum: [CO00001, CO00002]
139 RATING:
140 description: 排名
141 type: integer
142 example: 4
143 APPLICATION_ID:
144 description: 申请id
145 type: string
146 example: CH-B0011010101
147 APPLICATION_VERSION:
148 description: 申请版本
149 type: integer
150 example: 1
151 INTERMEDIATE_DECISION:
152 description: ''
153 type: string
154 example: MUW
155
156 individualCusInfo:
157 type: object
158 required: [applicantType, idType, customerChineseName, idNum, idExpiryDate, dateOfBirth, selfEmployedSubType]
159 properties:
160 applicantType:
161 description: applicantType
162 type: string
163 example: COAPP
164 enum: [COAPP, CUSTR, GAUTR1, GAUTR2]
165 idType:
166 description: idType
167 type: string
168 example: ITARI
169 enum: [ITARI, ITHKM, ITPRC, ITPSP, ITRES, ITTID, ITUSC, ITCCU]
170 secondIdType:
171 description: secondIdType
172 type: string
173 example: ITARI
174 enum: [ITARI, ITHKM, ITPRC, ITPSP, ITRES, ITTID]
175 customerChineseName:
176 description: customerChineseName
177 type: string
178 example: 李四
179 idNum:
180 description: idNum
181 type: string
182 example: 111111199404251111
183 secondIdNum:
184 description: secondIdNum
185 type: string
186 example: 111111199404251111
187 idExpiryDate:
188 description: idExpiryDate
189 type: string
190 example: 2027-04-30
191 dateOfBirth:
192 description: dateOfBirth
193 type: string
194 example: 2027-04-30
195 selfEmployedSubType:
196 description: selfEmployedSubType
197 type: string
198 example: CSIBM
199 enum: [CSIBM, CSOTH, CSSME]
200
201 Comparison:
202 type: object
203 required: [content]
204 properties:
205 content:
206 description: 比对内容信息
207 type: object
208 required: [uniqSeq, applicationId, applicationEntity, customerType, applicationVersion, vehicleStatus, comments, individualCusInfo]
209 properties:
210 uniqSeq:
211 description: uniqSeq
212 type: string
213 example: 201809301905121000
214 applicationId:
215 description: applicationId
216 type: string
217 example: CH-B100000123
218 applicationEntity:
219 description: applicationEntity
220 type: string
221 example: HIL
222 enum: [AFC, HIL]
223 customerType:
224 description: customerType
225 type: string
226 example: TCCOR
227 enum: [TCCOR, TCDAS, TCFRE, TCIAS, TCIND, TCSEP, TCURE]
228 applicationVersion:
229 description: applicationVersion
230 type: integer
231 example: 0
232 vehicleStatus:
233 description: vehicleStatus
234 type: string
235 example: PCUSD
236 enum: [PCUSD, PCNEW]
237 comments:
238 description: comments
239 type: array
240 items:
241 type: string
242 individualCusInfo:
243 description: individualCusInfo
244 type: array
245 items:
246 $ref: "#/definitions/individualCusInfo"
247
248 usedCarInfo:
249 description: usedCarInfo
250 type: object
251 required: [vinNo, manufactureDate, firstRegistrationDate]
252 properties:
253 vinNo:
254 description: vinNo
255 type: string
256 example: LBVSFJSDLFJLSDJF
257 manufactureDate:
258 description: manufactureDate
259 type: string
260 example: 2027-04-30
261 firstRegistrationDate:
262 description: firstRegistrationDate
263 type: string
264 example: 2027-04-30
265
266 corporateCusInfo:
267 description: corporateCusInfo
268 type: object
269 required: [customerChineseName, legalRepName, idNum, businessLicenseNo, taxRegistrationCode, incorporationDate, businessLicenseDueDate]
270 properties:
271 customerChineseName:
272 description: customerChineseName
273 type: string
274 example: 北京思图场景数据科技服务有限公司
275 legalRepName:
276 description: legalRepName
277 type: string
278 example: 李六
279 idNum:
280 description: idNum
281 type: string
282 example: MA007438143XJ1P
283 businessLicenseNo:
284 description: businessLicenseNo
285 type: string
286 example: MA007438143XJ1P
287 taxRegistrationCode:
288 description: taxRegistrationCode
289 type: string
290 example: MA007438143XJ1P
291 incorporationDate:
292 description: incorporationDate
293 type: string
294 example: 2027-04-30
295 businessLicenseDueDate:
296 description: businessLicenseDueDate
297 type: string
298 example: 2027-04-30
299
300 ApiResponse:
301 description: 响应对象,code字段用于表示响应的状态; data字段用于存放响应内容
302 type: object
303 required: [code, msg]
304 properties:
305 code:
306 type: integer
307 format: uint8
308 description: '0: success
309 1: need login
310 2: invalid params
311 3: internal error
312 4: object not exist
313 5: async wait
314 6: no permission
315 7: illegal operation'
316 example: 0
317 enum: [0, 1, 2, 3, 4, 5, 6, 7]
318 msg:
319 type: string
320 example: success
321 data:
322 type: object
323 '''
...\ No newline at end of file ...\ No newline at end of file
...@@ -48,7 +48,7 @@ class Command(BaseCommand): ...@@ -48,7 +48,7 @@ class Command(BaseCommand):
48 view_class = view.view_class 48 view_class = view.view_class
49 url_path, path_parameters = pattern[0][0] 49 url_path, path_parameters = pattern[0][0]
50 url_path = unify_url_path_format(url_path) 50 url_path = unify_url_path_format(url_path)
51 if url_path not in ['/api/compare/settlement/v1', '/api/compare/v1']: 51 if url_path not in ['/api/compare/offline/v1']:
52 continue 52 continue
53 url_path_paramters = getattr(view, 'parameters_doc', None) 53 url_path_paramters = getattr(view, 'parameters_doc', None)
54 if url_path_paramters: 54 if url_path_paramters:
......
1 import pyodbc
2
3 hil_sql = """
4
5 """
6
7 afc_sql = """
8
9 """
10
11 hil_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
12
13 hil_cursor = hil_cnxn.cursor()
14 hil_cursor.execute(hil_sql)
15
16 hil_cursor.close()
17 hil_cnxn.close()
18
19 afc_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
20
21 afc_cursor = afc_cnxn.cursor()
22 afc_cursor.execute(afc_sql)
23
24 afc_cursor.close()
25 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!