Browse Source

风险防控-风险防控排查任务子任务开发。

baoyubo 6 months ago
parent
commit
06c24ec9c6

+ 60 - 0
models/risk_management.py

@@ -156,4 +156,64 @@ class RiskManagementRiskTask(Base):
     create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
     update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
+    remark = Column(String(500), default=None, comment='备注')
+
+
+class RiskManagementRiskTaskChildrenTask(Base):
+    __tablename__ = 'risk_management_risk_task_children_task'
+
+    id = Column(String(50), primary_key=True, comment='ID,uuid')
+    task_id = Column(BigInteger, nullable=False, comment='ID,任务基础表id')
+    task_number = Column(String(50), nullable=True, comment='任务编号')
+    type = Column(String(255), nullable=True, comment='排查业务,城市隐患巡查、森林防火巡查、重点危化企业巡查、重点水库水位巡查')
+    tsak_time = Column(DateTime, nullable=True, comment='要求排查时间')
+    cycle = Column(String(50), nullable=True, comment='排查周期,每年、每月、每周、每日、一次')
+    task_range = Column(String(50), nullable=True, comment='排查范围,市级、区县级、镇街级、村居级')
+    task_num = Column(Integer, nullable=False, comment='任务数')
+    del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
+    remark = Column(String(500), default=None, comment='备注')
+
+
+class RiskManagementRiskTaskChildrenTaskLog(Base):
+    __tablename__ = 'risk_management_risk_task_children_task_log'
+
+    id = Column(String(50), primary_key=True, comment='ID,uuid')
+    children_task_id = Column(String(50), nullable=False, comment='ID,子任务表id')
+    area_code = Column(String(50), nullable=True, comment='区划编码')
+    area = Column(Text, nullable=True, comment='区划')
+    task_status = Column(String(2), nullable=True, comment='任务进展,已完成、未完成')
+    user_id = Column(String(50), nullable=True, comment='用户id')
+    nick_name = Column(String(50), nullable=True, comment='排查人员')
+    del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
+    remark = Column(String(500), default=None, comment='备注')
+
+
+class RiskManagementRiskTaskChildrenTaskResult(Base):
+    __tablename__ = 'risk_management_risk_task_children_task_result'
+
+    id = Column(String(50), primary_key=True, comment='ID,uuid')
+    children_task_id = Column(String(50), nullable=False, comment='ID,子任务表id')
+    longitude = Column(Float, nullable=True, comment='经度')
+    latitude = Column(Float, nullable=True, comment='纬度')
+    inspection_point_name = Column(Text, nullable=True, comment='巡查点')
+    area_code = Column(String(50), nullable=True, comment='区划编码')
+    inspection_result = Column(String(2), nullable=True, comment='排查结果,正常、异常')
+    user_id = Column(String(50), nullable=True, comment='用户id')
+    nick_name = Column(String(50), nullable=True, comment='排查人员')
+    del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     remark = Column(String(500), default=None, comment='备注')

+ 238 - 21
routers/api/riskManagement/risk_router.py

@@ -1,7 +1,7 @@
 #!/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
@@ -12,6 +12,8 @@ from database import get_db
 from typing import List
 from models import *
 from utils import *
+from utils.ry_system_util import *
+from utils.riskManagement_uitl import *
 import json
 import traceback
 
@@ -150,6 +152,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)
@@ -185,6 +188,7 @@ async def create_inspection_task(
         db.refresh(new_task)  # 可选,如果需要刷新实例状态
         new_task.task_number = f'YJFX{str(new_task.id).zfill(10)}'
         db.commit()
+        background_tasks.add_task(create_risk_children_task,db,new_task,corn_query)
         # 返回创建成功的响应
         return {
             "code": 200,
@@ -214,28 +218,28 @@ async def update_inspection_task(
             detail = "任务不存在"
             raise HTTPException(status_code=404, detail="任务不存在")
 
-        if 'cycle' in body:
-            cycle = body['cycle']
-            # 0每年、1每月、2每周、3每日、4一次
-            corn_query = body['corn_query']
-            if cycle == '0':
-                corn = f'0 0 {corn_query} *'
-            elif cycle == '1':
-                corn = f'0 0 {corn_query} * *'
-            elif cycle == '2':
-                corn = f'0 0 * * {corn_query}'
-            elif cycle == '3':
-                corn = f'0 0 * * *'
-            else:
-                corn = ''
-            task.inspection_cycle = cycle
-            task.corn_expression = corn
+        # if 'cycle' in body:
+        #     cycle = body['cycle']
+        #     # 0每年、1每月、2每周、3每日、4一次
+        #     corn_query = body['corn_query']
+        #     if cycle == '0':
+        #         corn = f'0 0 {corn_query} *'
+        #     elif cycle == '1':
+        #         corn = f'0 0 {corn_query} * *'
+        #     elif cycle == '2':
+        #         corn = f'0 0 * * {corn_query}'
+        #     elif cycle == '3':
+        #         corn = f'0 0 * * *'
+        #     else:
+        #         corn = ''
+        #     task.inspection_cycle = cycle
+        #     task.corn_expression = corn
         if 'type' in body:
             task.risk_type = body['type']
-        if 'start_time' in body:
-            task.start_time = body['start_time']
-        if 'end_time' in body:
-            task.end_time = body['end_time']
+        # if 'start_time' in body:
+        #     task.start_time = body['start_time']
+        # if 'end_time' in body:
+        #     task.end_time = body['end_time']
         if 'task_range' in body:
             task.task_range = body['task_range']
         if 'task_status' in body:
@@ -329,4 +333,217 @@ async def delete_inspection_task(
         traceback.print_exc()
         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(RiskManagementRiskTaskChildrenTask)
+        query = query.filter(RiskManagementRiskTaskChildrenTask.del_flag != '2')
+        # 应用查询条件
+
+        query = query.filter(RiskManagementRiskTaskChildrenTask.task_id == task_id)
+
+        # 计算总条目数
+        total_items = query.count()
+
+        # 排序
+
+        query = query.order_by(RiskManagementRiskTaskChildrenTask.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(RiskManagementRiskTaskChildrenTaskLog)\
+                .filter(RiskManagementRiskTaskChildrenTaskLog.del_flag!='2')\
+                .filter(RiskManagementRiskTaskChildrenTaskLog.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,
+                "type": task.type,
+                "task_time": task.tsak_time.strftime('%Y-%m-%d'),
+                "cycle": task.cycle,
+                "task_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:
+        # 处理异常
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=str(e))
+
+
+
+@router.get('/children/task/log/{children_task_id}/{status}/list')
+async def get_inspection_task_list(
+    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)
+):
+    try:
+        # 构建查询
+        total_items= 0
+        InspectionTasks_list = []
+        if status=='completed':
+            query = db.query(RiskManagementRiskTaskChildrenTaskLog)
+            query = query.filter(RiskManagementRiskTaskChildrenTaskLog.del_flag != '2')
+            # 应用查询条件
+
+            query = query.filter(RiskManagementRiskTaskChildrenTaskLog.children_task_id == children_task_id)
+
+            if area_code:
+                query = query.filter(RiskManagementRiskTaskChildrenTaskLog.area_code == area_code)
+            # 计算总条目数
+            total_items = query.count()
+
+            # 排序
+            query = query.order_by(RiskManagementRiskTaskChildrenTaskLog.create_time.desc())
+            # 执行分页查询
+            InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
+
+            # 将查询结果转换为列表形式的字典
+            for task in InspectionTasks:
+                task_info = {
+                    "id": task.id,
+                    "children_task_id":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)
+            # 返回结果
+        elif status == 'incomplete':
+            children_task = risk_task_children_task_id_get_risk_task_children_task_info(db,children_task_id)
+            if children_task:
+                task = risk_task_id_get_risk_task_info(db,children_task.task_id)
+                if task:
+                    complete_area_code_list =[i.area_code for i in risk_task_children_task_id_get_risk_task_children_task_log_info(db,children_task_id)]
+                    area_code_list = get_area_code_exclude_list(db,task.task_range,complete_area_code_list)
+                    if area_code and area_code in area_code_list:
+                        area_code_list = [area_code_list]
+                    for area_code in area_code_list:
+                        task_info = {
+                            "id": new_guid(),
+                            "children_task_id": children_task_id,
+                            "area_code": area_code,
+                            "area": area_code_get_ancestors_names(db,area_code_get_area_info(db,area_code)),
+                            "task_status": '0',
+                            "user_id": '',
+                            "nick_name": '',
+                            "create_time": children_task.tsak_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:
+        # 处理异常
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=str(e))
+
+
+@router.get('/children/task/result/{children_task_id}/list')
+async def get_inspection_task_list(
+    children_task_id: str ,
+    area_code: str = Query(None, description='区划编码'),
+    result: str = Query(None, description='巡查结果'),
+    nick_name: 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(RiskManagementRiskTaskChildrenTaskResult)
+        query = query.filter(RiskManagementRiskTaskChildrenTaskResult.del_flag != '2')
+        query = query.filter(RiskManagementRiskTaskChildrenTaskResult.children_task_id == children_task_id)
+        # 应用查询条件
+        if area_code:
+            query = query.filter(RiskManagementRiskTaskChildrenTaskResult.area_code == area_code)
+        if result:
+            query = query.filter(RiskManagementRiskTaskChildrenTaskResult.inspection_result == result)
+        if nick_name:
+            query = query.filter(RiskManagementRiskTaskChildrenTaskResult.nick_name.like(f'%{nick_name}%') )
+
+        # 计算总条目数
+        total_items = query.count()
+
+        # 排序
+
+        query = query.order_by(RiskManagementRiskTaskChildrenTaskResult.create_time.desc())
+        # 执行分页查询
+        InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
+
+        # 将查询结果转换为列表形式的字典
+        InspectionTasks_list = []
+        for task in InspectionTasks:
+            area_code = task.area_code
+            area = area_code_get_area_info(db, area_code)
+            area = area_code_get_ancestors_names(db, area)
+            task_info = {
+                "id": task.id,
+                "children_task_id": task.children_task_id,
+                "point_name":task.inspection_point_name,
+                "area": area,
+                "create_time": task.create_time.strftime('%Y-%m-%d'),
+                "nick_name": task.nick_name,
+                "result": task.inspection_result,
+                "fileList": get_file_query_fun(db=db,from_scenario='RiskManagementRiskTaskChildrenTaskResult', foreign_key=task.id),
+                "remark":task.remark
+            }
+            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:
+        # 处理异常
+        traceback.print_exc()
         raise HTTPException(status_code=500, detail=str(e))

+ 39 - 37
routers/api/riskManagement/task.py

@@ -218,28 +218,28 @@ async def update_inspection_task(
             detail = "任务不存在"
             raise HTTPException(status_code=404, detail="任务不存在")
 
-        if 'cycle' in body:
-            cycle = body['cycle']
-            # 0每年、1每月、2每周、3每日、4一次
-            corn_query = body['corn_query']
-            if cycle == '0':
-                corn = f'0 0 {corn_query} *'
-            elif cycle == '1':
-                corn = f'0 0 {corn_query} * *'
-            elif cycle == '2':
-                corn = f'0 0 * * {corn_query}'
-            elif cycle == '3':
-                corn = f'0 0 * * *'
-            else:
-                corn = ''
-            task.inspection_cycle = cycle
-            task.corn_expression = corn
+        # if 'cycle' in body:
+        #     cycle = body['cycle']
+        #     # 0每年、1每月、2每周、3每日、4一次
+        #     corn_query = body['corn_query']
+        #     if cycle == '0':
+        #         corn = f'0 0 {corn_query} *'
+        #     elif cycle == '1':
+        #         corn = f'0 0 {corn_query} * *'
+        #     elif cycle == '2':
+        #         corn = f'0 0 * * {corn_query}'
+        #     elif cycle == '3':
+        #         corn = f'0 0 * * *'
+        #     else:
+        #         corn = ''
+        #     task.inspection_cycle = cycle
+        #     task.corn_expression = corn
         if 'business' in body:
             task.inspection_business = body['business']
-        if 'start_time' in body:
-            task.start_time = body['start_time']
-        if 'end_time' in body:
-            task.end_time = body['end_time']
+        # if 'start_time' in body:
+        #     task.start_time = body['start_time']
+        # if 'end_time' in body:
+        #     task.end_time = body['end_time']
         if 'inspection_range' in body:
             task.inspection_range = body['inspection_range']
         if 'task_status' in body:
@@ -448,23 +448,25 @@ async def get_inspection_task_list(
             # 返回结果
         elif status == 'incomplete':
             children_task = inspection_task_children_task_id_get_inspection_task_children_task_info(db,children_task_id)
-            task = inspection_task_id_get_inspection_task_info(db,children_task.task_id)
-            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_list = 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_list]
-            for area_code in area_code_list:
-                task_info = {
-                    "id": new_guid(),
-                    "children_task_id": children_task_id,
-                    "area_code": area_code,
-                    "area": area_code_get_ancestors_names(db,area_code_get_area_info(db,area_code)),
-                    "task_status": '0',
-                    "user_id": '',
-                    "nick_name": '',
-                    "create_time": children_task.tsak_time.strftime('%Y-%m-%d')
-                }
-                InspectionTasks_list.append(task_info)
+            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_list = 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_list]
+                    for area_code in area_code_list:
+                        task_info = {
+                            "id": new_guid(),
+                            "children_task_id": children_task_id,
+                            "area_code": area_code,
+                            "area": area_code_get_ancestors_names(db,area_code_get_area_info(db,area_code)),
+                            "task_status": '0',
+                            "user_id": '',
+                            "nick_name": '',
+                            "create_time": children_task.tsak_time.strftime('%Y-%m-%d')
+                        }
+                        InspectionTasks_list.append(task_info)
         return {
             "code": 200,
             "msg": "成功",

+ 32 - 1
utils/riskManagement_uitl.py

@@ -134,7 +134,23 @@ def create_children_task(db,task_info,corn_query):
         )
         db.add(new_children_task)
     db.commit()
-
+def create_risk_children_task(db,task_info,corn_query):
+    cycle = task_info.task_cycle
+    task_range = task_info.task_range
+    for t in get_task_date_list(cycle,task_info.start_time,task_info.end_time,corn_query):
+        new_children_task = RiskManagementRiskTaskChildrenTask(
+            id = new_guid(),
+            task_id= task_info.id,
+            task_number= task_info.task_number,
+            type = task_info.risk_type,
+            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()
 def inspection_task_id_get_inspection_task_info(db,id):
     query = db.query(RiskManagementInspectionTask)
     query = query.filter(RiskManagementInspectionTask.del_flag != '2')
@@ -151,7 +167,22 @@ def inspection_task_children_task_id_get_inspection_task_children_task_log_info(
     query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.del_flag != '2')
     query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.children_task_id == children_task_id)
     return query.all()
+def risk_task_id_get_risk_task_info(db,id):
+    query = db.query(RiskManagementRiskTask)
+    query = query.filter(RiskManagementRiskTask.del_flag != '2')
+    query = query.filter(RiskManagementRiskTask.id == id)
+    return query.first()
 
+def risk_task_children_task_id_get_risk_task_children_task_info(db,id):
+    query = db.query(RiskManagementRiskTaskChildrenTask)
+    query = query.filter(RiskManagementRiskTaskChildrenTask.del_flag != '2')
+    query = query.filter(RiskManagementRiskTaskChildrenTask.id == id)
+    return query.first()
+def risk_task_children_task_id_get_risk_task_children_task_log_info(db,children_task_id):
+    query = db.query(RiskManagementRiskTaskChildrenTaskLog)
+    query = query.filter(RiskManagementRiskTaskChildrenTaskLog.del_flag != '2')
+    query = query.filter(RiskManagementRiskTaskChildrenTaskLog.children_task_id == children_task_id)
+    return query.all()
 def get_file_query_fun(db,from_scenario,foreign_key):
     file_query = db.query(RiskManagementFile)
     file_query = file_query.filter(RiskManagementFile.del_flag != '2')