#!/usr/bin/env python3 # -*- coding: utf-8 -*- from fastapi import APIRouter, Request, Depends,Query, HTTPException, status 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 database import get_db from typing import List from models import * from utils import * import json from common.db import db_dept import traceback from pprint import pprint import xlrd import os from . import unit # 目录在文档上传接口写死 UPLOAD_mergefile_PATH = '/data/upload/mergefile' router = APIRouter() @router.get('/list') async def get_emergency_unit_list( plan_id: str = Query(None, description='预案编号'), page: int = Query(1, gt=0, description='页码'), pageSize: int = Query(5, gt=0, description='每页条目数量'), db: Session = Depends(get_db), user_id = Depends(valid_access_token) ): try: # 构建查询 query = db.query(EmergencyUnit) # 应用查询条件 query = query.filter(EmergencyUnit.plan_id == plan_id) # 计算总条目数 total_items = query.count() query = query.order_by(EmergencyUnit.dept_order.asc()) # 执行分页查询 rows = query.offset((page - 1) * pageSize).limit(pageSize).all() # 将查询结果转换为列表形式的字典 emergency_unit_list = [ { "id": row.id, "dept_id": row.dept_id, "dept_name": row.dept_name, "content": row.content, "dept_order":row.dept_order } for row in rows ] # 返回结果 return { "code": 200, "msg": "查询成功", "data": emergency_unit_list, "total": total_items } except Exception as e: # 处理异常 raise HTTPException(status_code=500, detail=str(e)) @router.post('/create') async def create_emergency_unit( db: Session = Depends(get_db), body = Depends(remove_xss_json), user_id = Depends(valid_access_token) ): try: # 提取请求数据 plan_id = body['plan_id'] dept_id = body['dept_id'] dept_name = db_dept.get_dept_name_by_id(db, dept_id) content = body['content'] dept_order = body['dept_order'] # 创建新的预案记录 new_unit = EmergencyUnit( plan_id = plan_id, dept_id = dept_id, dept_name = dept_name, content = content, dept_order = dept_order ) db.add(new_unit) db.commit() db.refresh(new_unit) return { "code": 200, "msg": "单位职责创建成功", "data": None } except Exception as e: # 处理异常 raise HTTPException(status_code=500, detail=str(e)) @router.put('/update') async def update_emergency_unit( db: Session = Depends(get_db), body = Depends(remove_xss_json), user_id = Depends(valid_access_token) ): try: # 提取请求数据 id = body['id'] plan_id = body['plan_id'] dept_id = body['dept_id'] dept_name = db_dept.get_dept_name_by_id(db, dept_id) content = body['content'] dept_order = body['dept_order'] query = db.query(EmergencyUnit) query = query.filter(EmergencyUnit.id == id) unit = query.first() unit.plan_id = plan_id unit.dept_id = dept_id unit.dept_name = dept_name unit.content = content unit.dept_order = dept_order # 提交所有更新 db.commit() # 返回更新成功的响应 return { "code": 200, "msg": "单位职责更新成功", "data": None } except Exception as e: traceback.print_exc() # 处理异常 raise HTTPException(status_code=500, detail=str(e)) @router.delete('/delete') async def delete_emergency_unit( db: Session = Depends(get_db), body = Depends(remove_xss_json), user_id = Depends(valid_access_token) ): try: ids = body['ids'] for id in ids: db.query(EmergencyUnit).filter(EmergencyUnit.id == id).delete() db.commit() return { "code": 200, "msg": "单位职责删除成功", "data": None } except Exception as e: traceback.print_exc() # 处理异常 raise HTTPException(status_code=500, detail=str(e)) @router.get('/{id}') async def get_emergency_unit( id: int, db: Session = Depends(get_db), body = Depends(remove_xss_json), user_id = Depends(valid_access_token) ): try: # 执行查询 unit = db.query(EmergencyUnit).filter(EmergencyUnit.id == id).first() # 返回结果 return { "code": 200, "msg": "成功", "data": get_model_dict(unit) } except Exception as e: traceback.print_exc() # 处理异常 raise HTTPException(status_code=500, detail=str(e)) @router.post('/import') async def import_doc( request: Request, db: Session = Depends(get_db), body = Depends(remove_xss_json), user_id = Depends(valid_access_token) ): print(body) try: plan_id = body['plan_id'] filename = body['filename'] if len(filename) == 0: raise Exception() file = filename[0] url = file['url'] file_path = f"{UPLOAD_mergefile_PATH}/uploads/{url}" file_path = os.path.abspath(file_path) print(file_path) book = xlrd.open_workbook(file_path) sheet = book.sheet_by_index(0) data = [] for i in range(4, sheet.nrows): c1 = sheet.cell(i, 1).value c2 = sheet.cell(i, 2).value data.append({'dept_name': c1, 'content': c2}) ''' for n in data: row = db.query(SysDept).filter(SysDept.dept_name == n['dept_name']).first() if row is None: raise Exception('单位名称不正确') ''' if len(data) > 0: db.query(EmergencyUnit).filter(EmergencyUnit.plan_id == plan_id).delete() db.commit() i = 0 for n in data: dept_id = 100 row = db.query(SysDept).filter(SysDept.dept_name == n['dept_name']).first() if row is not None: dept_id = row.dept_id main_entity = EmergencyUnit(dept_id = dept_id, dept_name = n['dept_name'], content = n['content'], dept_order = i, plan_id = plan_id) db.add(main_entity) db.commit() i = i + 1 return { 'code': 200, 'msg': '导入成功' } except Exception as e: traceback.print_exc() return { 'code': 500, 'msg': '导入发生异常:'+str(e) }