feat:新增pdf 解析状态
This commit is contained in:
parent
9f0c42bc40
commit
2daf093b90
BIN
client/dist.zip
BIN
client/dist.zip
Binary file not shown.
File diff suppressed because one or more lines are too long
|
@ -13,7 +13,7 @@
|
||||||
<el-table-column label="EXCEL-名称" prop="excel_name"></el-table-column>
|
<el-table-column label="EXCEL-名称" prop="excel_name"></el-table-column>
|
||||||
<el-table-column label="年度" prop="annual"></el-table-column>
|
<el-table-column label="年度" prop="annual"></el-table-column>
|
||||||
<el-table-column label="创建时间" prop="create_time"></el-table-column>
|
<el-table-column label="创建时间" prop="create_time"></el-table-column>
|
||||||
|
<el-table-column label="状态" prop="status"></el-table-column>
|
||||||
<el-table-column align="center" label="操作" width="120px" fixed="right">
|
<el-table-column align="center" label="操作" width="120px" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-link type="primary" @click="handleDownload(scope)">下载</el-link>
|
<el-link type="primary" @click="handleDownload(scope)">下载</el-link>
|
||||||
|
|
|
@ -1368,7 +1368,7 @@
|
||||||
this.saveLoading = true;
|
this.saveLoading = true;
|
||||||
this.impForm.task2do =this.task2do;
|
this.impForm.task2do =this.task2do;
|
||||||
if(this.impType=='rc'){
|
if(this.impType=='rc'){
|
||||||
imtpRc(this.impForm).then(res=>{
|
impRc(this.impForm).then(res=>{
|
||||||
if(res.code>=200){
|
if(res.code>=200){
|
||||||
this.saveLoading = false;
|
this.saveLoading = false;
|
||||||
this.impDialogVisible = false;
|
this.impDialogVisible = false;
|
||||||
|
|
|
@ -122,7 +122,7 @@ import { options } from "runjs";
|
||||||
edit: "能力验证结果编辑",
|
edit: "能力验证结果编辑",
|
||||||
},
|
},
|
||||||
options:[
|
options:[
|
||||||
{key:'/',value:0},
|
{key:'未出',value:0},
|
||||||
{key:'满意',value:10},
|
{key:'满意',value:10},
|
||||||
{key:'有问题',value:20},
|
{key:'有问题',value:20},
|
||||||
{key:'不满意',value:30}
|
{key:'不满意',value:30}
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.12 on 2024-05-08 09:25
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('information', '0037_alter_parsepdf_annual'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='parsepdf',
|
||||||
|
name='status',
|
||||||
|
field=models.CharField(choices=[('执行中', '执行中'), ('完成', '完成'), ('未完成', '未完成')], default='完成', max_length=100, verbose_name='状态'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -123,12 +123,17 @@ class ExternalAuditors(CommonBDModel):
|
||||||
db_table = 'externalauditors'
|
db_table = 'externalauditors'
|
||||||
|
|
||||||
class Parsepdf(CommonBDModel):
|
class Parsepdf(CommonBDModel):
|
||||||
|
choice_status= (
|
||||||
|
('执行中', '执行中'),
|
||||||
|
('完成', '完成'),
|
||||||
|
('未完成', '未完成'))
|
||||||
pdf_path = models.CharField(max_length=100, verbose_name='pdf路径')
|
pdf_path = models.CharField(max_length=100, verbose_name='pdf路径')
|
||||||
excel_path = models.CharField(max_length=100, verbose_name='excel路径')
|
excel_path = models.CharField(max_length=100, verbose_name='excel路径')
|
||||||
parse_excel = models.CharField(max_length=100, verbose_name='解析后excel路径')
|
parse_excel = models.CharField(max_length=100, verbose_name='解析后excel路径')
|
||||||
annual = models.IntegerField(verbose_name='年份', blank=True, null=True)
|
annual = models.IntegerField(verbose_name='年份', blank=True, null=True)
|
||||||
excel_name = models.CharField(max_length=100, verbose_name='excel名称', null=True, blank=True)
|
excel_name = models.CharField(max_length=100, verbose_name='excel名称', null=True, blank=True)
|
||||||
pdf_name = models.CharField(max_length=100, verbose_name='pdf名称', null=True, blank=True)
|
pdf_name = models.CharField(max_length=100, verbose_name='pdf名称', null=True, blank=True)
|
||||||
|
status = models.CharField(max_length=100, choices=choice_status, verbose_name='状态', default='完成')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = '解析pdf'
|
verbose_name = '解析pdf'
|
||||||
|
|
|
@ -23,8 +23,6 @@ import traceback
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
EXCEL_PATH = os.path.join(settings.BASE_DIR, "media/default/检验检测服务业统计数据上报任务.xlsx")
|
EXCEL_PATH = os.path.join(settings.BASE_DIR, "media/default/检验检测服务业统计数据上报任务.xlsx")
|
||||||
# print("EXCEL_PATH", EXCEL_PATH)
|
|
||||||
# EXCEL_PATH = "C:/code/pdf_exc/检验检测服务业统计数据上报任务-空表.xlsx"
|
|
||||||
|
|
||||||
|
|
||||||
class ImpMixin:
|
class ImpMixin:
|
||||||
|
@ -355,20 +353,28 @@ class ContactViewSet(ImpMixin, CreateUpdateCustomMixin, ModelViewSet):
|
||||||
"""
|
"""
|
||||||
return self.gen_imp_view(request, 2, ContactSerializer)
|
return self.gen_imp_view(request, 2, ContactSerializer)
|
||||||
|
|
||||||
|
|
||||||
|
def dont_wait(func):
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
func(*args, **kwargs)
|
||||||
|
return Response({"message": "操作已在后台开始,结果将不会立即返回。"})
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
import threading
|
||||||
|
|
||||||
class ParsePdfViewSet(RbacFilterSet, CreateUpdateCustomMixin, ModelViewSet):
|
class ParsePdfViewSet(RbacFilterSet, CreateUpdateCustomMixin, ModelViewSet):
|
||||||
queryset = Parsepdf.objects.all()
|
queryset = Parsepdf.objects.all()
|
||||||
serializer_class = ParsepdfSerializer
|
serializer_class = ParsepdfSerializer
|
||||||
filterset_fields = ['belong_dept', 'annual']
|
filterset_fields = ['belong_dept', 'annual']
|
||||||
|
|
||||||
|
|
||||||
#解析pdf到excel
|
#解析pdf到excel
|
||||||
|
|
||||||
@action(detail=False, methods=['post'])
|
@action(detail=False, methods=['post'])
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def parse_pdf(self, request, *args, **kwargs):
|
def parse_pdf(self, request, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
解析pdf到excel
|
解析pdf到excel
|
||||||
"""
|
"""
|
||||||
|
|
||||||
pdf_file = request.data['pdf_file']
|
pdf_file = request.data['pdf_file']
|
||||||
annual = request.data['annual']
|
annual = request.data['annual']
|
||||||
# 读数据路径copy 在media 下新建excel,解析完成后存入数据库。
|
# 读数据路径copy 在media 下新建excel,解析完成后存入数据库。
|
||||||
|
@ -379,8 +385,7 @@ class ParsePdfViewSet(RbacFilterSet, CreateUpdateCustomMixin, ModelViewSet):
|
||||||
save_path = os.path.join(media_excel, os.path.basename(EXCEL_PATH))
|
save_path = os.path.join(media_excel, os.path.basename(EXCEL_PATH))
|
||||||
server_pdf_path = settings.BASE_DIR + pdf_file
|
server_pdf_path = settings.BASE_DIR + pdf_file
|
||||||
download_excel_path = save_path.split("server")[-1]
|
download_excel_path = save_path.split("server")[-1]
|
||||||
run(server_pdf_path, save_path)
|
ps = Parsepdf.objects.create(
|
||||||
Parsepdf.objects.create(
|
|
||||||
pdf_path=pdf_file,
|
pdf_path=pdf_file,
|
||||||
excel_path= EXCEL_PATH,
|
excel_path= EXCEL_PATH,
|
||||||
parse_excel = download_excel_path,
|
parse_excel = download_excel_path,
|
||||||
|
@ -389,9 +394,16 @@ class ParsePdfViewSet(RbacFilterSet, CreateUpdateCustomMixin, ModelViewSet):
|
||||||
create_time = datetime.now(),
|
create_time = datetime.now(),
|
||||||
annual = annual,
|
annual = annual,
|
||||||
excel_name = os.path.basename(EXCEL_PATH),
|
excel_name = os.path.basename(EXCEL_PATH),
|
||||||
pdf_name = os.path.basename(pdf_file)
|
pdf_name = os.path.basename(pdf_file),
|
||||||
|
status = "执行中"
|
||||||
)
|
)
|
||||||
return Response({"message":"解析成功", "url":save_path}, status = status.HTTP_200_OK)
|
t = threading.Thread(target=run, args=(server_pdf_path, save_path, Parsepdf, ps.id))
|
||||||
|
t.start()
|
||||||
|
return Response({"message":"解析中", "url":save_path}, status = status.HTTP_200_OK)
|
||||||
|
# msg = run(server_pdf_path, save_path)
|
||||||
|
# if msg == "success":
|
||||||
|
# Parsepdf.objects.update(id=ps.id, status="成功")
|
||||||
|
# return Response({"message":"解析成功", "url":save_path}, status = status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
class ExternalAuditorsViewSet(ImpMixin, RbacFilterSet, CreateUpdateCustomMixin, ModelViewSet):
|
class ExternalAuditorsViewSet(ImpMixin, RbacFilterSet, CreateUpdateCustomMixin, ModelViewSet):
|
||||||
|
|
|
@ -18,24 +18,24 @@ DATABASES = {
|
||||||
# # 'HOST': '1.203.161.102',
|
# # 'HOST': '1.203.161.102',
|
||||||
# 'PORT': '5432',
|
# 'PORT': '5432',
|
||||||
# }
|
# }
|
||||||
# 'default': {
|
'default': {
|
||||||
# 'ENGINE': 'django.db.backends.postgresql',
|
|
||||||
# 'NAME': 'cma',
|
|
||||||
# 'USER': 'postgres',
|
|
||||||
# 'PASSWORD': 'zcDsj2021',
|
|
||||||
# 'HOST': '49.232.14.174',
|
|
||||||
# # 'HOST': '1.203.161.102',
|
|
||||||
# 'PORT': '5432',
|
|
||||||
# },
|
|
||||||
'default': {
|
|
||||||
'ENGINE': 'django.db.backends.postgresql',
|
'ENGINE': 'django.db.backends.postgresql',
|
||||||
'NAME': 'cma',
|
'NAME': 'cma',
|
||||||
'USER': 'cma',
|
'USER': 'postgres',
|
||||||
'PASSWORD': 'cma123',
|
'PASSWORD': 'zcDsj2021',
|
||||||
# 'HOST': '127.0.0.1',
|
'HOST': '49.232.14.174',
|
||||||
'HOST': '1.203.161.102',
|
# 'HOST': '1.203.161.102',
|
||||||
'PORT': '5432',
|
'PORT': '5432',
|
||||||
}
|
}
|
||||||
|
# 'default': {
|
||||||
|
# 'ENGINE': 'django.db.backends.postgresql',
|
||||||
|
# 'NAME': 'cma',
|
||||||
|
# 'USER': 'cma',
|
||||||
|
# 'PASSWORD': 'cma123',
|
||||||
|
# 'HOST': '127.0.0.1',
|
||||||
|
# # 'HOST': '1.203.161.102',
|
||||||
|
# 'PORT': '5432',
|
||||||
|
# }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -343,7 +343,7 @@ def get_index(text, pattern, span):
|
||||||
remain_text = text[start_index:start_index+span]
|
remain_text = text[start_index:start_index+span]
|
||||||
return remain_text
|
return remain_text
|
||||||
|
|
||||||
def run(pdf_path, excel_path):
|
def run(pdf_path, excel_path, Parsepdf, id):
|
||||||
# 提取PDF文本
|
# 提取PDF文本
|
||||||
text = extract_text_from_pdf(pdf_path)
|
text = extract_text_from_pdf(pdf_path)
|
||||||
with open("pdf2txt.txt", "w", encoding="utf-8") as f:
|
with open("pdf2txt.txt", "w", encoding="utf-8") as f:
|
||||||
|
@ -379,7 +379,8 @@ def run(pdf_path, excel_path):
|
||||||
fill_excel(res_many[u], excel_path, l[u])
|
fill_excel(res_many[u], excel_path, l[u])
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
return ''
|
Parsepdf.objects.update(id=id, status="完成")
|
||||||
|
return 'success'
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Reference in New Issue