123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- #!/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)
- }
|