|
@@ -3,7 +3,9 @@
|
|
|
|
|
|
from fastapi import APIRouter, Request, Depends,Query, HTTPException, status,BackgroundTasks
|
|
from fastapi import APIRouter, Request, Depends,Query, HTTPException, status,BackgroundTasks
|
|
from common.security import valid_access_token
|
|
from common.security import valid_access_token
|
|
-from fastapi.responses import JSONResponse
|
|
|
|
|
|
+from fastapi.responses import JSONResponse,StreamingResponse
|
|
|
|
+from common.db import db_czrz
|
|
|
|
+from common.auth_user import *
|
|
from sqlalchemy.orm import Session
|
|
from sqlalchemy.orm import Session
|
|
from sqlalchemy import and_, or_
|
|
from sqlalchemy import and_, or_
|
|
from pydantic import BaseModel
|
|
from pydantic import BaseModel
|
|
@@ -848,6 +850,111 @@ async def get_inspection_task_list(
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
|
|
|
|
|
|
|
|
+@router.get('/children/task/log/{children_task_id}/{status}/export')
|
|
|
|
+async def get_inspection_task_list(
|
|
|
|
+ request: Request,
|
|
|
|
+ children_task_id: str ,
|
|
|
|
+ status:str,
|
|
|
|
+ area_code: str = Query(None, description='区划编码'),
|
|
|
|
+ page: int = Query(1, gt=0, description='页码'),
|
|
|
|
+ pageSize: int = Query(10, gt=0, description='每页条目数量'),
|
|
|
|
+ db: Session = Depends(get_db),
|
|
|
|
+ user_id = Depends(valid_access_token),
|
|
|
|
+ auth_user: AuthUser = Depends(find_auth_user),
|
|
|
|
+):
|
|
|
|
+ try:
|
|
|
|
+ # 构建查询
|
|
|
|
+ total_items= 0
|
|
|
|
+ InspectionTasks_list = []
|
|
|
|
+ status_cn = ''
|
|
|
|
+ if status=='completed':
|
|
|
|
+ status_cn='已完成'
|
|
|
|
+ query = db.query(RiskManagementInspectionTaskChildrenTaskLog)
|
|
|
|
+ query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.del_flag != '2')
|
|
|
|
+ # 应用查询条件
|
|
|
|
+
|
|
|
|
+ query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.children_task_id == children_task_id)
|
|
|
|
+
|
|
|
|
+ if area_code:
|
|
|
|
+ query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.area_code == area_code)
|
|
|
|
+ # 计算总条目数
|
|
|
|
+ total_items = query.count()
|
|
|
|
+
|
|
|
|
+ # 排序
|
|
|
|
+ query = query.order_by(RiskManagementInspectionTaskChildrenTaskLog.create_time.desc())
|
|
|
|
+ # 执行分页查询
|
|
|
|
+ InspectionTasks = query.all()
|
|
|
|
+
|
|
|
|
+ # 将查询结果转换为列表形式的字典
|
|
|
|
+ for task in InspectionTasks:
|
|
|
|
+ task_info = {
|
|
|
|
+ "id": task.id,
|
|
|
|
+ "子任务表id":children_task_id,
|
|
|
|
+ "区划编码": task.area_code,
|
|
|
|
+ "区划": task.area,
|
|
|
|
+ "任务进展": '已完成',
|
|
|
|
+ "巡查人员id": task.user_id,
|
|
|
|
+ "巡查人员": task.nick_name,
|
|
|
|
+ "创建时间": task.create_time.strftime('%Y-%m-%d')
|
|
|
|
+ }
|
|
|
|
+ InspectionTasks_list.append(task_info)
|
|
|
|
+ # 返回结果
|
|
|
|
+ elif status == 'incomplete':
|
|
|
|
+ status_cn='未完成'
|
|
|
|
+ children_task = inspection_task_children_task_id_get_inspection_task_children_task_info(db,children_task_id)
|
|
|
|
+ if children_task:
|
|
|
|
+ task = inspection_task_id_get_inspection_task_info(db,children_task.task_id)
|
|
|
|
+ if task:
|
|
|
|
+ complete_area_code_list =[i.area_code for i in inspection_task_children_task_id_get_inspection_task_children_task_log_info(db,children_task_id)]
|
|
|
|
+ # area_code_list1 = get_area_code_exclude_list(db,task.inspection_range,complete_area_code_list)
|
|
|
|
+ if area_code:# and area_code in area_code_list:
|
|
|
|
+ area_code_list = area_code_rang_get_area_children_list(db,children_task.task_range,area_code,complete_area_code_list)#[area_code]
|
|
|
|
+ # print(area_code_list)
|
|
|
|
+ # elif area_code and area_code not in area_code_list:
|
|
|
|
+ # area_code_list = []
|
|
|
|
+ else:
|
|
|
|
+ area_code_list = get_area_code_exclude_list(db, task.inspection_range, complete_area_code_list)
|
|
|
|
+ for area_code in area_code_list:
|
|
|
|
+ # if area_code in area_code_list1:
|
|
|
|
+ task_info = {
|
|
|
|
+ "id": new_guid(),
|
|
|
|
+ "子任务表id": children_task_id,
|
|
|
|
+ "区划编码": area_code,
|
|
|
|
+ "区划": area_code_get_ancestors_names(db,area_code_get_area_info(db,area_code)),
|
|
|
|
+ "任务进展": '未完成',
|
|
|
|
+ "巡查人员id": '',
|
|
|
|
+ "巡查人员": '',
|
|
|
|
+ "创建时间": children_task.tsak_time.strftime('%Y-%m-%d')
|
|
|
|
+ }
|
|
|
|
+ InspectionTasks_list.append(task_info)
|
|
|
|
+ import pandas as pd
|
|
|
|
+ from io import BytesIO
|
|
|
|
+ # 将查询结果转换为 DataFrame
|
|
|
|
+ df = pd.DataFrame(InspectionTasks_list)
|
|
|
|
+
|
|
|
|
+ # 将 DataFrame 导出为 Excel 文件
|
|
|
|
+ output = BytesIO()
|
|
|
|
+ with pd.ExcelWriter(output, engine='openpyxl') as writer:
|
|
|
|
+ df.to_excel(writer, index=False)
|
|
|
|
+
|
|
|
|
+ # 设置响应头
|
|
|
|
+ output.seek(0)
|
|
|
|
+ from urllib.parse import quote
|
|
|
|
+ encoded_filename = f'巡查任务{status_cn}{datetime.now().strftime("%Y%m%d%H%mi%s")}.xlsx'
|
|
|
|
+ encoded_filename = quote(encoded_filename, encoding='utf-8')
|
|
|
|
+ headers = {
|
|
|
|
+ 'Content-Disposition': f'attachment; filename*=UTF-8\'\'{encoded_filename}',
|
|
|
|
+ 'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ db_czrz.log(db, auth_user, "巡查工作管理", f"巡查任务{status_cn}导出数据成功", request.client.host)
|
|
|
|
+
|
|
|
|
+ # 返回文件流
|
|
|
|
+ return StreamingResponse(output, headers=headers)
|
|
|
|
+
|
|
|
|
+ except Exception as e:
|
|
|
|
+ traceback.print_exc()
|
|
|
|
+ return JSONResponse(status_code=500, content={"code": 500, "msg": f"Internal server error: {str(e)}"})
|
|
|
|
|
|
@router.get('/children/task/log/{children_task_id}/{status}/list')
|
|
@router.get('/children/task/log/{children_task_id}/{status}/list')
|
|
async def get_inspection_task_list(
|
|
async def get_inspection_task_list(
|