feat:新增pdf 解析状态

This commit is contained in:
zty 2024-05-09 09:16:34 +08:00
parent 9f0c42bc40
commit 2daf093b90
10 changed files with 64 additions and 28 deletions

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -13,7 +13,7 @@
<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="create_time"></el-table-column>
<el-table-column label="状态" prop="status"></el-table-column>
<el-table-column align="center" label="操作" width="120px" fixed="right">
<template slot-scope="scope">
<el-link type="primary" @click="handleDownload(scope)">下载</el-link>

View File

@ -1368,7 +1368,7 @@
this.saveLoading = true;
this.impForm.task2do =this.task2do;
if(this.impType=='rc'){
imtpRc(this.impForm).then(res=>{
impRc(this.impForm).then(res=>{
if(res.code>=200){
this.saveLoading = false;
this.impDialogVisible = false;

View File

@ -122,7 +122,7 @@ import { options } from "runjs";
edit: "能力验证结果编辑",
},
options:[
{key:'/',value:0},
{key:'未出',value:0},
{key:'满意',value:10},
{key:'有问题',value:20},
{key:'不满意',value:30}

View File

@ -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='状态'),
),
]

View File

@ -123,12 +123,17 @@ class ExternalAuditors(CommonBDModel):
db_table = 'externalauditors'
class Parsepdf(CommonBDModel):
choice_status= (
('执行中', '执行中'),
('完成', '完成'),
('未完成', '未完成'))
pdf_path = models.CharField(max_length=100, verbose_name='pdf路径')
excel_path = 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)
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)
status = models.CharField(max_length=100, choices=choice_status, verbose_name='状态', default='完成')
class Meta:
verbose_name = '解析pdf'

View File

@ -23,8 +23,6 @@ import traceback
import shutil
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:
@ -354,21 +352,29 @@ class ContactViewSet(ImpMixin, CreateUpdateCustomMixin, ModelViewSet):
导入数据
"""
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):
queryset = Parsepdf.objects.all()
serializer_class = ParsepdfSerializer
filterset_fields = ['belong_dept', 'annual']
#解析pdf到excel
@action(detail=False, methods=['post'])
@transaction.atomic
def parse_pdf(self, request, *args, **kwargs):
"""
解析pdf到excel
"""
pdf_file = request.data['pdf_file']
annual = request.data['annual']
# 读数据路径copy 在media 下新建excel,解析完成后存入数据库。
@ -379,8 +385,7 @@ class ParsePdfViewSet(RbacFilterSet, CreateUpdateCustomMixin, ModelViewSet):
save_path = os.path.join(media_excel, os.path.basename(EXCEL_PATH))
server_pdf_path = settings.BASE_DIR + pdf_file
download_excel_path = save_path.split("server")[-1]
run(server_pdf_path, save_path)
Parsepdf.objects.create(
ps = Parsepdf.objects.create(
pdf_path=pdf_file,
excel_path= EXCEL_PATH,
parse_excel = download_excel_path,
@ -389,9 +394,16 @@ class ParsePdfViewSet(RbacFilterSet, CreateUpdateCustomMixin, ModelViewSet):
create_time = datetime.now(),
annual = annual,
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):

View File

@ -18,24 +18,24 @@ DATABASES = {
# # 'HOST': '1.203.161.102',
# 'PORT': '5432',
# }
# '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': {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'cma',
'USER': 'cma',
'PASSWORD': 'cma123',
# 'HOST': '127.0.0.1',
'HOST': '1.203.161.102',
'USER': 'postgres',
'PASSWORD': 'zcDsj2021',
'HOST': '49.232.14.174',
# 'HOST': '1.203.161.102',
'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',
# }
}

View File

@ -343,7 +343,7 @@ def get_index(text, pattern, span):
remain_text = text[start_index:start_index+span]
return remain_text
def run(pdf_path, excel_path):
def run(pdf_path, excel_path, Parsepdf, id):
# 提取PDF文本
text = extract_text_from_pdf(pdf_path)
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])
else:
return
return ''
Parsepdf.objects.update(id=id, status="完成")
return 'success'
if __name__ == "__main__":