unit.py 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends,Query, HTTPException, status
  4. from common.security import valid_access_token
  5. from fastapi.responses import JSONResponse
  6. from sqlalchemy.orm import Session
  7. from sqlalchemy import and_, or_
  8. from pydantic import BaseModel
  9. from datetime import datetime
  10. from database import get_db
  11. from typing import List
  12. from models import *
  13. from utils import *
  14. import json
  15. from common.db import db_dept
  16. import traceback
  17. from pprint import pprint
  18. import xlrd
  19. import os
  20. from . import unit
  21. # 目录在文档上传接口写死
  22. UPLOAD_mergefile_PATH = '/data/upload/mergefile'
  23. router = APIRouter()
  24. @router.get('/list')
  25. async def get_emergency_unit_list(
  26. plan_id: str = Query(None, description='预案编号'),
  27. page: int = Query(1, gt=0, description='页码'),
  28. pageSize: int = Query(5, gt=0, description='每页条目数量'),
  29. db: Session = Depends(get_db),
  30. user_id = Depends(valid_access_token)
  31. ):
  32. try:
  33. # 构建查询
  34. query = db.query(EmergencyUnit)
  35. # 应用查询条件
  36. query = query.filter(EmergencyUnit.plan_id == plan_id)
  37. # 计算总条目数
  38. total_items = query.count()
  39. query = query.order_by(EmergencyUnit.dept_order.asc())
  40. # 执行分页查询
  41. rows = query.offset((page - 1) * pageSize).limit(pageSize).all()
  42. # 将查询结果转换为列表形式的字典
  43. emergency_unit_list = [
  44. {
  45. "id": row.id,
  46. "dept_id": row.dept_id,
  47. "dept_name": row.dept_name,
  48. "content": row.content,
  49. "dept_order":row.dept_order
  50. }
  51. for row in rows
  52. ]
  53. # 返回结果
  54. return {
  55. "code": 200,
  56. "msg": "查询成功",
  57. "data": emergency_unit_list,
  58. "total": total_items
  59. }
  60. except Exception as e:
  61. # 处理异常
  62. raise HTTPException(status_code=500, detail=str(e))
  63. @router.post('/create')
  64. async def create_emergency_unit(
  65. db: Session = Depends(get_db),
  66. body = Depends(remove_xss_json),
  67. user_id = Depends(valid_access_token)
  68. ):
  69. try:
  70. # 提取请求数据
  71. plan_id = body['plan_id']
  72. dept_id = body['dept_id']
  73. dept_name = db_dept.get_dept_name_by_id(db, dept_id)
  74. content = body['content']
  75. dept_order = body['dept_order']
  76. # 创建新的预案记录
  77. new_unit = EmergencyUnit(
  78. plan_id = plan_id,
  79. dept_id = dept_id,
  80. dept_name = dept_name,
  81. content = content,
  82. dept_order = dept_order
  83. )
  84. db.add(new_unit)
  85. db.commit()
  86. db.refresh(new_unit)
  87. return {
  88. "code": 200,
  89. "msg": "单位职责创建成功",
  90. "data": None
  91. }
  92. except Exception as e:
  93. # 处理异常
  94. raise HTTPException(status_code=500, detail=str(e))
  95. @router.put('/update')
  96. async def update_emergency_unit(
  97. db: Session = Depends(get_db),
  98. body = Depends(remove_xss_json),
  99. user_id = Depends(valid_access_token)
  100. ):
  101. try:
  102. # 提取请求数据
  103. id = body['id']
  104. plan_id = body['plan_id']
  105. dept_id = body['dept_id']
  106. dept_name = db_dept.get_dept_name_by_id(db, dept_id)
  107. content = body['content']
  108. dept_order = body['dept_order']
  109. query = db.query(EmergencyUnit)
  110. query = query.filter(EmergencyUnit.id == id)
  111. unit = query.first()
  112. unit.plan_id = plan_id
  113. unit.dept_id = dept_id
  114. unit.dept_name = dept_name
  115. unit.content = content
  116. unit.dept_order = dept_order
  117. # 提交所有更新
  118. db.commit()
  119. # 返回更新成功的响应
  120. return {
  121. "code": 200,
  122. "msg": "单位职责更新成功",
  123. "data": None
  124. }
  125. except Exception as e:
  126. traceback.print_exc()
  127. # 处理异常
  128. raise HTTPException(status_code=500, detail=str(e))
  129. @router.delete('/delete')
  130. async def delete_emergency_unit(
  131. db: Session = Depends(get_db),
  132. body = Depends(remove_xss_json),
  133. user_id = Depends(valid_access_token)
  134. ):
  135. try:
  136. ids = body['ids']
  137. for id in ids:
  138. db.query(EmergencyUnit).filter(EmergencyUnit.id == id).delete()
  139. db.commit()
  140. return {
  141. "code": 200,
  142. "msg": "单位职责删除成功",
  143. "data": None
  144. }
  145. except Exception as e:
  146. traceback.print_exc()
  147. # 处理异常
  148. raise HTTPException(status_code=500, detail=str(e))
  149. @router.get('/{id}')
  150. async def get_emergency_unit(
  151. id: int,
  152. db: Session = Depends(get_db),
  153. body = Depends(remove_xss_json),
  154. user_id = Depends(valid_access_token)
  155. ):
  156. try:
  157. # 执行查询
  158. unit = db.query(EmergencyUnit).filter(EmergencyUnit.id == id).first()
  159. # 返回结果
  160. return {
  161. "code": 200,
  162. "msg": "成功",
  163. "data": get_model_dict(unit)
  164. }
  165. except Exception as e:
  166. traceback.print_exc()
  167. # 处理异常
  168. raise HTTPException(status_code=500, detail=str(e))
  169. @router.post('/import')
  170. async def import_doc(
  171. request: Request,
  172. db: Session = Depends(get_db),
  173. body = Depends(remove_xss_json),
  174. user_id = Depends(valid_access_token)
  175. ):
  176. print(body)
  177. try:
  178. plan_id = body['plan_id']
  179. filename = body['filename']
  180. if len(filename) == 0:
  181. raise Exception()
  182. file = filename[0]
  183. url = file['url']
  184. file_path = f"{UPLOAD_mergefile_PATH}/uploads/{url}"
  185. file_path = os.path.abspath(file_path)
  186. print(file_path)
  187. book = xlrd.open_workbook(file_path)
  188. sheet = book.sheet_by_index(0)
  189. data = []
  190. for i in range(4, sheet.nrows):
  191. c1 = sheet.cell(i, 1).value
  192. c2 = sheet.cell(i, 2).value
  193. data.append({'dept_name': c1, 'content': c2})
  194. '''
  195. for n in data:
  196. row = db.query(SysDept).filter(SysDept.dept_name == n['dept_name']).first()
  197. if row is None:
  198. raise Exception('单位名称不正确')
  199. '''
  200. if len(data) > 0:
  201. db.query(EmergencyUnit).filter(EmergencyUnit.plan_id == plan_id).delete()
  202. db.commit()
  203. i = 0
  204. for n in data:
  205. dept_id = 100
  206. row = db.query(SysDept).filter(SysDept.dept_name == n['dept_name']).first()
  207. if row is not None:
  208. dept_id = row.dept_id
  209. main_entity = EmergencyUnit(dept_id = dept_id, dept_name = n['dept_name'], content = n['content'], dept_order = i, plan_id = plan_id)
  210. db.add(main_entity)
  211. db.commit()
  212. i = i + 1
  213. return {
  214. 'code': 200,
  215. 'msg': '导入成功'
  216. }
  217. except Exception as e:
  218. traceback.print_exc()
  219. return {
  220. 'code': 500,
  221. 'msg': '导入发生异常:'+str(e)
  222. }