0619bb0f by 周伟奇

demo interface

1 parent d891053c
from django.urls import path
from . import views
urlpatterns = [
path(r'', views.DocView.as_view()),
]
import os
from settings import conf
class DocHandler:
@staticmethod
def get_link(doc_id, file='pdf'):
data_path = os.path.join(conf.DATA_DIR, doc_id)
if file == 'pdf':
return os.path.join(data_path, '{0}.pdf'.format(doc_id))
elif file == 'img':
return os.path.join(data_path, '{0}_img.zip'.format(doc_id))
else:
return os.path.join(data_path, '{0}.xlsx'.format(doc_id))
def get_doc_list(self, doc_queryset):
for doc_dict in doc_queryset:
doc_id = doc_dict.get('id')
doc_dict['pdf_link'] = self.get_link(doc_id)
doc_dict['img_link'] = self.get_link(doc_id, 'img')
doc_dict['excel_link'] = self.get_link(doc_id, 'excel')
return list(doc_queryset)
from django.db import models
from .named_enum import DocStatus
# Create your models here.
# 上传文件记录表/任务表
class UploadDocRecords(models.Model): # TODO add status
class UploadDocRecords(models.Model): # TODO records一张表、文件(任务)根据business_type分库存储
id = models.AutoField(primary_key=True, verbose_name="id")
metadata_version_id = models.CharField(max_length=64, verbose_name="元数据版本id")
application_id = models.CharField(max_length=64, verbose_name="申请id")
......@@ -12,6 +13,7 @@ class UploadDocRecords(models.Model): # TODO add status
co_applicant = models.CharField(max_length=16, verbose_name="共同申请人")
guarantor_1 = models.CharField(max_length=16, verbose_name="担保人1")
guarantor_2 = models.CharField(max_length=16, verbose_name="担保人2")
status = models.SmallIntegerField(default=DocStatus.INIT.value, verbose_name="文件状态")
document_name = models.CharField(max_length=255, verbose_name="文件名")
document_scheme = models.CharField(max_length=64, verbose_name="文件方案")
business_type = models.CharField(max_length=64, verbose_name="业务类型")
......
from common.named_enum import NamedEnum
class DocStatus(NamedEnum):
INIT = (0, "排队中")
PROCESSING = (1, '识别中')
PROCESS_FAILED = (2, '识别失败')
UPLOAD_FAILED = (3, '同步失败')
COMPLETE = (4, '已完成')
......@@ -3,5 +3,5 @@ from . import views
urlpatterns = [
path(r'', views.DocView.as_view()),
path(r'', views.UploadDocView.as_view()),
]
......
from django.shortcuts import render
import os
import time
import random
from django.utils import timezone
from django.db.utils import IntegrityError
from django.db.models import Q
from webargs import fields, validate
from webargs.djangoparser import use_args, parser
from common.mixins import GenericView
from settings import conf
from common import response
from .models import UploadDocRecords
from common.mixins import GenericView
from common.tools.file_tools import file_write
from common.redis_cache import redis_handler as rh
from .models import UploadDocRecords, DocStatus
from .mixins import DocHandler
# Create your views here.
......@@ -41,18 +48,32 @@ doc_upload_args = {
'document': fields.Nested(document_args, required=True),
}
doc_list_args = {
'status': fields.Int(required=False,
validate=validate.OneOf(DocStatus.get_value_lst())),
'application_id': fields.Str(required=False, validate=validate.Length(max=64)),
'data_source': fields.Str(required=False, validate=validate.Length(max=64)),
'business_type': fields.Str(required=False, validate=validate.Length(max=64)),
'upload_finish_time': fields.Date(required=False),
'create_time': fields.Date(required=False),
}
upload_pdf_args = {
'pdf_file': fields.Raw(required=True),
}
class DocView(GenericView):
class UploadDocView(GenericView):
permission_classes = []
# 创建模型
# 上传(接收)文件接口
@use_args(doc_upload_args, location='data')
def post(self, request, args):
application_data = args.get('applicationData')
applicant_data = args.get('applicantData')
document = args.get('document')
try:
task = UploadDocRecords.objects.create(
doc = UploadDocRecords.objects.create(
metadata_version_id=document.get('metadataVersionId'),
application_id=application_data.get('applicationId'),
main_applicant=applicant_data.get('mainApplicantName'),
......@@ -70,7 +91,7 @@ class DocView(GenericView):
self.invalid_params(msg='metadataVersionId repeat')
else:
# TODO 查询加入优先队列 or 普通队列
rh.enqueue(task.id)
rh.enqueue(doc.id)
self.running_log.info('[doc upload success] [args={0}]'.format(args))
return response.ok()
......@@ -92,3 +113,53 @@ class DocView(GenericView):
schema:
$ref: '#/definitions/ApiResponse'
'''
class DocView(GenericView, DocHandler):
# 文件列表页
@use_args(doc_list_args, location='querystring')
def get(self, request, args):
status = args.get('status')
application_id = args.get('application_id')
data_source = args.get('data_source')
business_type = args.get('business_type')
upload_finish_time = args.get('upload_finish_time')
create_time = args.get('create_time')
status_query = Q(status=status) if status else Q()
application_id_query = Q(application_id=application_id) if application_id else Q()
data_source_query = Q(data_source=data_source) if data_source else Q()
business_type_query = Q(business_type=business_type) if business_type else Q()
upload_finish_time_query = Q(upload_finish_time=upload_finish_time) if upload_finish_time else Q()
create_time_query = Q(create_time=create_time) if create_time else Q()
query = status_query & application_id_query & data_source_query & business_type_query\
& upload_finish_time_query & create_time_query
doc_queryset = UploadDocRecords.objects.filter(query).values(
'id', 'application_id', 'upload_finish_time', 'create_time', 'business_type', 'data_source')
doc_list = self.get_doc_list(doc_queryset)
return response.ok(data=doc_list)
# 上传pdf,模拟下单
@use_args(upload_pdf_args, location='files')
def post(self, request, args):
const_str = '手工单'
doc = UploadDocRecords.objects.create(
metadata_version_id=str(int(time.time())),
application_id=const_str,
main_applicant=const_str,
co_applicant=const_str,
guarantor_1=const_str,
guarantor_2=const_str,
document_name=const_str,
document_scheme=random.choice(['Acceptance', 'Settlement', 'Contract Management']),
business_type=random.choice(['AFC', 'HIL']),
data_source=random.choice(['POS', 'EAPP', 'Econtract']),
upload_finish_time=timezone.now(),
)
rh.enqueue(doc.id)
pdf_file = args.get('pdf_file')
file_save_path = os.path.join(conf.DATA_DIR, doc.id, '{0}.pdf'.format(doc.id))
file_write(pdf_file, file_save_path)
self.running_log.info('[doc upload success] [args={0}]'.format(args))
return response.ok()
......
......@@ -18,6 +18,7 @@ from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path(r'api/users/', include('apps.account.urls')),
path(r'api/user', include('apps.account.urls')),
path(r'api/create/v1', include('apps.doc.urls')),
path(r'api/doc', include('apps.doc.internal_urls')),
]
......
def file_write(file, file_path):
with open(file_path, 'wb+') as f:
for chunk in file.chunks():
f.write(chunk)
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!