|
@@ -1,13 +1,14 @@
|
|
|
#!/usr/bin/env python3
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
-from fastapi import APIRouter, Request, Depends,Query, HTTPException, status
|
|
|
+from fastapi import APIRouter, Request, Depends,Query, HTTPException, status,BackgroundTasks
|
|
|
from common.security import valid_access_token
|
|
|
from fastapi.responses import JSONResponse
|
|
|
from sqlalchemy.orm import Session
|
|
|
from sqlalchemy import and_, or_
|
|
|
from pydantic import BaseModel
|
|
|
-from datetime import datetime
|
|
|
+from datetime import datetime, timedelta
|
|
|
+from dateutil.relativedelta import relativedelta
|
|
|
from database import get_db
|
|
|
from typing import List
|
|
|
from models import *
|
|
@@ -18,6 +19,88 @@ import traceback
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
+def get_area_num(db,rang):
|
|
|
+ query = db.query(GovdataArea)
|
|
|
+ if rang=='0':
|
|
|
+ return 1
|
|
|
+ elif rang=='1':
|
|
|
+ query = query.filter(and_(GovdataArea.area_code.like('%000000'),GovdataArea.area_code.notlike('%00000000')))
|
|
|
+ return query.count()
|
|
|
+ elif rang=='2':
|
|
|
+ query = query.filter(and_(GovdataArea.area_code.like('%000'),GovdataArea.area_code.notlike('%000000')))
|
|
|
+ return query.count()
|
|
|
+ elif rang=='3':
|
|
|
+ query = query.filter(GovdataArea.area_code.notlike('%000'))
|
|
|
+ return query.count()
|
|
|
+ else:
|
|
|
+ return 0
|
|
|
+def get_task_date_list(cycle,start_date,end_date,corn_query):
|
|
|
+ # 生成日期列表
|
|
|
+ date_list = []
|
|
|
+ if cycle=='4': #仅一次,返回当天
|
|
|
+ date_list.append(datetime.today())
|
|
|
+ return date_list
|
|
|
+ elif cycle=='3': #每天
|
|
|
+ current_date = start_date
|
|
|
+ while current_date <= end_date:
|
|
|
+ # 将日期添加到列表中
|
|
|
+ date_list.append(current_date)
|
|
|
+ # 增加一天
|
|
|
+ current_date += timedelta(days=1)
|
|
|
+ return date_list
|
|
|
+ elif cycle=='2': #每周
|
|
|
+ days_ahead = (7+int(corn_query) - start_date.weekday()) % 7
|
|
|
+ current_date = start_date + timedelta(days=days_ahead)
|
|
|
+ while current_date <= end_date:
|
|
|
+ # 将日期添加到列表中
|
|
|
+ date_list.append(current_date)
|
|
|
+ # 增加七天
|
|
|
+ current_date += timedelta(days=7)
|
|
|
+ return date_list
|
|
|
+ elif cycle=='1': #每月
|
|
|
+ days_ahead = datetime.strptime(start_date.strftime("%Y-%m-")+corn_query, "%Y-%m-%d")
|
|
|
+ if days_ahead>start_date:
|
|
|
+ current_date = days_ahead
|
|
|
+ else:
|
|
|
+ current_date = days_ahead+relativedelta(months=1)
|
|
|
+
|
|
|
+ while current_date <= end_date:
|
|
|
+ # 将日期添加到列表中
|
|
|
+ date_list.append(current_date)
|
|
|
+ # 增加七天
|
|
|
+ current_date += relativedelta(months=1)
|
|
|
+ return date_list
|
|
|
+ elif cycle=='0': #每月
|
|
|
+ d,m = corn_query.split()
|
|
|
+ days_ahead = datetime.strptime(start_date.strftime("%Y-")+m+'-'+d, "%Y-%m-%d")
|
|
|
+ if days_ahead>start_date:
|
|
|
+ current_date = days_ahead
|
|
|
+ else:
|
|
|
+ current_date = days_ahead+relativedelta(years=1)
|
|
|
+
|
|
|
+ while current_date <= end_date:
|
|
|
+ # 将日期添加到列表中
|
|
|
+ date_list.append(current_date)
|
|
|
+ # 增加七天
|
|
|
+ current_date += relativedelta(years=1)
|
|
|
+ return date_list
|
|
|
+def create_children_task(db,task_info,corn_query):
|
|
|
+ cycle = task_info.inspection_cycle
|
|
|
+ task_range = task_info.inspection_range
|
|
|
+ for t in get_task_date_list(cycle,task_info.start_time,task_info.end_time,corn_query):
|
|
|
+ new_children_task = RiskManagementInspectionTaskChildrenTask(
|
|
|
+ id = new_guid(),
|
|
|
+ task_id= task_info.id,
|
|
|
+ task_number= task_info.task_number,
|
|
|
+ type = task_info.inspection_business,
|
|
|
+ tsak_time = t,
|
|
|
+ cycle=cycle,
|
|
|
+ task_range = task_range,
|
|
|
+ task_num=get_area_num(db,task_range),
|
|
|
+ create_by=task_info.create_by
|
|
|
+ )
|
|
|
+ db.add(new_children_task)
|
|
|
+ db.commit()
|
|
|
|
|
|
@router.get('/list')
|
|
|
async def get_inspection_task_list(
|
|
@@ -148,6 +231,7 @@ async def get_inspection_task(
|
|
|
|
|
|
@router.post('/create')
|
|
|
async def create_inspection_task(
|
|
|
+ background_tasks: BackgroundTasks,
|
|
|
db: Session = Depends(get_db),
|
|
|
body = Depends(remove_xss_json),
|
|
|
user_id = Depends(valid_access_token)
|
|
@@ -184,6 +268,7 @@ async def create_inspection_task(
|
|
|
new_task.task_number = f'YJXC{str(new_task.id).zfill(10)}'
|
|
|
db.commit()
|
|
|
# 返回创建成功的响应
|
|
|
+ background_tasks.add_task(create_children_task,db,new_task,corn_query)
|
|
|
return {
|
|
|
"code": 200,
|
|
|
"msg": "成功",
|
|
@@ -324,4 +409,126 @@ async def delete_inspection_task(
|
|
|
# 处理异常
|
|
|
if str(e) == '':
|
|
|
e = detail
|
|
|
+ raise HTTPException(status_code=500, detail=str(e))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+@router.get('/children/task/{task_id}/list')
|
|
|
+async def get_inspection_task_list(
|
|
|
+ task_id: str ,
|
|
|
+ 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)
|
|
|
+):
|
|
|
+ try:
|
|
|
+ # 构建查询
|
|
|
+ query = db.query(RiskManagementInspectionTaskChildrenTask)
|
|
|
+ query = query.filter(RiskManagementInspectionTaskChildrenTask.del_flag != '2')
|
|
|
+ # 应用查询条件
|
|
|
+
|
|
|
+ query = query.filter(RiskManagementInspectionTaskChildrenTask.task_id == task_id)
|
|
|
+
|
|
|
+ # 计算总条目数
|
|
|
+ total_items = query.count()
|
|
|
+
|
|
|
+ # 排序
|
|
|
+
|
|
|
+ query = query.order_by(RiskManagementInspectionTaskChildrenTask.tsak_time.asc())
|
|
|
+ # 执行分页查询
|
|
|
+ InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
|
|
|
+
|
|
|
+ # 将查询结果转换为列表形式的字典
|
|
|
+ InspectionTasks_list = []
|
|
|
+ for task in InspectionTasks:
|
|
|
+ task_num=task.task_num
|
|
|
+ completed_num = db.query(RiskManagementInspectionTaskChildrenTaskLog)\
|
|
|
+ .filter(RiskManagementInspectionTaskChildrenTaskLog.del_flag!='2')\
|
|
|
+ .filter(RiskManagementInspectionTaskChildrenTaskLog.children_task_id==task.id).count()
|
|
|
+ incomplete_num = task_num-completed_num
|
|
|
+ task_info = {
|
|
|
+ "id": task.id,
|
|
|
+ "task_id":task.task_id,
|
|
|
+ "task_number": task.task_number,
|
|
|
+ "business": task.type,
|
|
|
+ "task_time": task.tsak_time.strftime('%Y-%m-%d'),
|
|
|
+ "cycle": task.cycle,
|
|
|
+ "inspection_range": task.task_range,
|
|
|
+ "completed_num": completed_num,
|
|
|
+ "incomplete_num": incomplete_num,
|
|
|
+ "create_time": task.create_time.strftime('%Y-%m-%d')
|
|
|
+ }
|
|
|
+ InspectionTasks_list.append(task_info)
|
|
|
+ # 返回结果
|
|
|
+ return {
|
|
|
+ "code": 200,
|
|
|
+ "msg": "成功",
|
|
|
+ "data": InspectionTasks_list,
|
|
|
+ "total": total_items,
|
|
|
+ "page": page,
|
|
|
+ "pageSize": pageSize,
|
|
|
+ "totalPages": (total_items + pageSize - 1) // pageSize
|
|
|
+ }
|
|
|
+ except Exception as e:
|
|
|
+ # 处理异常
|
|
|
+ raise HTTPException(status_code=500, detail=str(e))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+@router.get('/children/task/log/{children_task_id}/list')
|
|
|
+async def get_inspection_task_list(
|
|
|
+ children_task_id: 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)
|
|
|
+):
|
|
|
+ try:
|
|
|
+ # 构建查询
|
|
|
+ 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.offset((page - 1) * pageSize).limit(pageSize).all()
|
|
|
+
|
|
|
+ # 将查询结果转换为列表形式的字典
|
|
|
+ InspectionTasks_list = []
|
|
|
+ for task in InspectionTasks:
|
|
|
+
|
|
|
+ task_info = {
|
|
|
+ "id": task.id,
|
|
|
+ "children_task_id":task.children_task_id,
|
|
|
+ "area_code": task.area_code,
|
|
|
+ "area": task.area,
|
|
|
+ "task_status": task.task_status,
|
|
|
+ "user_id": task.user_id,
|
|
|
+ "nick_name": task.nick_name,
|
|
|
+ "create_time": task.create_time.strftime('%Y-%m-%d')
|
|
|
+ }
|
|
|
+ InspectionTasks_list.append(task_info)
|
|
|
+ # 返回结果
|
|
|
+ return {
|
|
|
+ "code": 200,
|
|
|
+ "msg": "成功",
|
|
|
+ "data": InspectionTasks_list,
|
|
|
+ "total": total_items,
|
|
|
+ "page": page,
|
|
|
+ "pageSize": pageSize,
|
|
|
+ "totalPages": (total_items + pageSize - 1) // pageSize
|
|
|
+ }
|
|
|
+ except Exception as e:
|
|
|
+ # 处理异常
|
|
|
raise HTTPException(status_code=500, detail=str(e))
|