emergency_resources.py 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756
  1. # from fastapi import APIRouter, HTTPException, Depends, Body,Query
  2. from fastapi import APIRouter, Request, Depends, HTTPException, Query, BackgroundTasks
  3. from fastapi.responses import JSONResponse
  4. import os
  5. # from sqlalchemy.orm import Session
  6. from sqlalchemy.orm import Session, joinedload
  7. import xlrd
  8. from database import get_db
  9. from models import *
  10. from typing import List, Optional
  11. from pydantic import BaseModel,Extra, Field
  12. import uuid
  13. from common.security import valid_access_token
  14. from pydantic import BaseModel
  15. from exceptions import AppException, HmacException
  16. from common.security import valid_access_token
  17. import traceback
  18. from utils import *
  19. from sqlalchemy import create_engine, Column, Integer, String, Boolean, MetaData, Table, \
  20. inspect, exists,or_,text,insert,asc,desc
  21. # 目录在文档上传接口写死
  22. UPLOAD_mergefile_PATH = '/data/upload/mergefile'
  23. router = APIRouter()
  24. # 水利工程管理
  25. # Pydantic 模型
  26. class WaterResourceProjectSchema(BaseModel):
  27. id: int = None
  28. jsdwzjlx: str = None
  29. lxfs: str = None
  30. sjtgbmtyshxydm: str = None
  31. jdgljgbm: str = None
  32. cd_time: str = None
  33. sjtgbmmc: str = None
  34. ggmj: str = None
  35. sjtgbmxzqhdm: str = None
  36. jsdwzjhm: str = None
  37. xzqhdm: str = None
  38. cd_operation: str = None
  39. zdmj: str = None
  40. d_bmmc: str = None
  41. etl_time: str = None
  42. jssj: str = None
  43. jsdwmc: str = None
  44. slsshslgcmc: str = None
  45. cd_batch: str = None
  46. slsshslgcdd: str = None
  47. jdgljg: str = None
  48. jingdu: str = None
  49. weidu: str = None
  50. is_delete: int = 0
  51. class WaterResourceProjectListSchema(BaseModel):
  52. projects: List[WaterResourceProjectSchema] = []
  53. class Config:
  54. orm_mode = True
  55. #插入数据
  56. @router.post("/projects/")
  57. def create_projects(project_list_data: WaterResourceProjectListSchema, db: Session = Depends(get_db)):
  58. projects = project_list_data.projects
  59. if not projects: # 确保列表不为空
  60. raise HTTPException(status_code=400, detail="项目列表不能为空")
  61. try:
  62. new_projects = [] # 创建一个空列表来存储新对象
  63. for project_data in projects:
  64. # new_project = WaterResourceProject(**project_data.dict(exclude_none=True))
  65. # db.add(new_project)
  66. # new_projects.append(new_project)
  67. project_data = project_data.dict(exclude_none=True)
  68. n_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  69. project_data["cd_time"] = n_time
  70. project_data["etl_time"] = n_time
  71. project_data["cd_operation"] = 'I'
  72. project_data["cd_batch"] = ''
  73. new_project = WaterResourceProject(**project_data)
  74. db.add(new_project)
  75. new_projects.append(new_project)
  76. # new_units = []
  77. # for unit_data in units:
  78. # unit_data = unit_data.dict(exclude_none=True)
  79. # n_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  80. # unit_data["add_time"] = n_time
  81. #
  82. # new_unit = Unit(**unit_data)
  83. # db.add(new_unit)
  84. # new_units.append(new_unit)
  85. db.commit()
  86. project_ids = [project.id for project in new_projects] # 获取所有新对象的ID
  87. return {"code": 200, "msg": "创建成功", "project_ids": project_ids}
  88. except Exception as e:
  89. db.rollback()
  90. raise HTTPException(status_code=400, detail=str(e))
  91. #删除
  92. @router.delete("/projects/{project_id}/")
  93. def delete_project(project_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  94. project = db.query(WaterResourceProject).get(project_id)
  95. if not project:
  96. raise HTTPException(status_code=404, detail="项目不存在")
  97. try:
  98. # 更新 is_delete 字段为 2,而不是删除记录
  99. project.is_delete = 2
  100. db.commit()
  101. return {"code": 200, "msg": "删除成功"}
  102. except Exception as e:
  103. db.rollback()
  104. raise HTTPException(status_code=400, detail=str(e))
  105. # class ProjectListQueryParams(BaseModel):
  106. # page: int = Field(default=1, gt=0)
  107. # page_size: int = Field(default=10, gt=0)
  108. #查询列表
  109. @router.get("/projects/")
  110. def get_projects(page: int = Query(default=1, gt=0),
  111. pageSize: int = Query(default=10, gt=0),
  112. db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  113. data_query = db.query(WaterResourceProject).filter(WaterResourceProject.is_delete == 0)
  114. data_query = data_query.order_by(WaterResourceProject.cd_time.desc())
  115. # 计算总数
  116. total_count = data_query.count()
  117. # 分页查询
  118. offset = (page - 1) * pageSize
  119. projects = data_query.offset(offset).limit(pageSize).all()
  120. # 构造结果
  121. result_items = [project.to_dict() for project in projects]
  122. result = {
  123. "code": 200,
  124. 'msg': '查询成功',
  125. 'total': total_count,
  126. 'totalPages': (total_count + pageSize - 1) // pageSize,
  127. 'page': page,
  128. 'pageSize': pageSize,
  129. 'data': result_items
  130. }
  131. return result
  132. #查询详情
  133. @router.get("/projects/{project_id}/")
  134. def get_project_by_id(project_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  135. # 添加条件过滤 is_delete 为 0 的项目
  136. project = db.query(WaterResourceProject).filter(WaterResourceProject.is_delete == 0, WaterResourceProject.id == project_id).first()
  137. if not project:
  138. raise HTTPException(status_code=404, detail="项目不存在或已被标记为删除")
  139. return {"code": 200, "msg": "查询成功", "project": project.to_dict()}
  140. #修改
  141. @router.put("/projects/{project_id}/")
  142. def update_project(project_id: int, update_data: WaterResourceProjectSchema, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  143. # 创建一个新的查询对象,不包含过滤条件
  144. project = db.query(WaterResourceProject).get(project_id)
  145. if project is None or project.is_delete == 1:
  146. raise HTTPException(status_code=404, detail="项目不存在或已被标记为删除")
  147. try:
  148. # 只更新传入的非空字段
  149. for key, value in update_data.dict(exclude_none=True).items():
  150. setattr(project, key, value)
  151. db.commit()
  152. db.refresh(project)
  153. return {"code": 200, "msg": "更新成功", "project": project.to_dict()}
  154. except Exception as e:
  155. db.rollback()
  156. raise HTTPException(status_code=400, detail=str(e))
  157. # 救灾人员单位
  158. # Pydantic 模型
  159. class UnitSchema(BaseModel):
  160. id: int = None
  161. name: str = None
  162. category: str = None
  163. contact_number: str = None
  164. responsible_person: str = None
  165. contact_number: str = None
  166. team_size: int = None
  167. supervisor_unit: str = None
  168. unit_prop: str = None
  169. unit_level: str = None
  170. unit_favor: str = None
  171. supervisor_unit_phone: str = None
  172. supervisor_unit_contact: str = None
  173. responsible_person_phone: str = None
  174. area: str = None
  175. founding_time: str = None
  176. address: str = None
  177. longitude: str = None
  178. latitude: str = None
  179. position: str = None
  180. is_delete: int = 0
  181. class UnitListSchema(BaseModel):
  182. units: List[UnitSchema] = Field(default_factory=list)
  183. class Config:
  184. orm_mode = True
  185. #创建
  186. @router.post("/rescue_units/")
  187. def create_units(unit_list_data: UnitListSchema, db: Session = Depends(get_db)):
  188. units = unit_list_data.units
  189. if not units: # 确保列表不为空
  190. raise HTTPException(status_code=400, detail="单位列表不能为空")
  191. try:
  192. new_units = [] # 创建一个空列表来存储新对象
  193. for unit_data in units:
  194. unit_data = unit_data.dict(exclude_none=True)
  195. unit_data["add_time"] = datetime.now()
  196. print(unit_data)
  197. new_unit = RescueUnit(**unit_data)
  198. db.add(new_unit)
  199. db.commit()
  200. db.refresh(new_unit)
  201. new_units.append(new_unit)
  202. unit_ids = [unit.id for unit in new_units] # 获取所有新对象的ID
  203. return {"code": 200, "msg": "创建成功", "unit_ids": unit_ids}
  204. except Exception as e:
  205. traceback.print_exc()
  206. db.rollback()
  207. raise HTTPException(status_code=400, detail=str(e))
  208. #删除
  209. @router.delete("/delete/rescue_units/{unit_id}")
  210. def delete_unit(unit_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  211. unit = db.query(RescueUnit).get(unit_id)
  212. if not unit:
  213. raise HTTPException(status_code=404, detail="单位不存在")
  214. try:
  215. # 更新 is_delete 字段为 1,而不是删除记录
  216. unit.is_delete = 1
  217. db.commit()
  218. return {"code": 200, "msg": "删除成功"}
  219. except Exception as e:
  220. traceback.print_exc()
  221. db.rollback()
  222. raise HTTPException(status_code=400, detail=str(e))
  223. # class UnitListQueryParams(BaseModel):
  224. # page: int = Field(default=1, gt=0)
  225. # page_size: int = Field(default=10, gt=0)
  226. #查询列表
  227. @router.get("/rescue_units/")
  228. def get_units(page: int = Query(default=1, gt=0),
  229. pageSize: int = Query(default=10, gt=0),
  230. db: Session = Depends(get_db),
  231. user_id=Depends(valid_access_token)):
  232. # 应用过滤条件,仅查询未被删除的单位
  233. data_query = db.query(RescueUnit).filter(RescueUnit.is_delete == 0)
  234. data_query = data_query.order_by(RescueUnit.add_time.desc())
  235. # 计算总数
  236. total_count = data_query.count()
  237. # 分页查询
  238. offset = (page - 1) * pageSize
  239. units = data_query.offset(offset).limit(pageSize).all()
  240. # 构造结果
  241. result_items = [unit.to_dict() for unit in units]
  242. result = {
  243. "code": 200,
  244. 'msg': '查询成功',
  245. 'total': total_count,
  246. 'totalPages': (total_count + pageSize - 1) // pageSize,
  247. 'page': page,
  248. 'pageSize': pageSize,
  249. 'data': result_items
  250. }
  251. return result
  252. #查询详情
  253. @router.get("/rescue_units/{unit_id}/")
  254. def get_unit_by_id(unit_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  255. # unit = db.query(Unit).filter(Unit.is_delete == 0).get(unit_id)
  256. unit = db.query(RescueUnit).filter_by(id=unit_id, is_delete=0).first()
  257. if not unit:
  258. raise HTTPException(status_code=404, detail="单位不存在或已被标记为删除")
  259. return {"code": 200, "msg": "查询成功", "unit": unit.to_dict()}
  260. #修改
  261. @router.put("/rescue_units/{unit_id}/")
  262. def update_unit(unit_id: int, update_data: UnitSchema, db: Session = Depends(get_db),
  263. user_id=Depends(valid_access_token)):
  264. # 根据id和is_delete字段获取单位
  265. unit = db.query(RescueUnit).filter_by(id=unit_id, is_delete=0).first()
  266. if not unit:
  267. raise HTTPException(status_code=404, detail="单位不存在或已被标记为删除")
  268. try:
  269. # 更新非空字段,排除id字段
  270. for key, value in update_data.dict(exclude_none=True).items():
  271. # 确保不更新id字段
  272. if key != 'id':
  273. setattr(unit, key, value)
  274. db.commit()
  275. db.refresh(unit)
  276. return {"code": 200, "msg": "更新成功", "unit": unit.to_dict()}
  277. except Exception as e:
  278. traceback.print_exc()
  279. db.rollback()
  280. raise HTTPException(status_code=400, detail=str(e))
  281. # 导入
  282. @router.post('/rescue_units/import')
  283. async def import_doc(
  284. request: Request,
  285. db: Session = Depends(get_db),
  286. body = Depends(remove_xss_json),
  287. user_id = Depends(valid_access_token)
  288. ):
  289. # print(body)
  290. try:
  291. filename = body['filename']
  292. if len(filename) == 0:
  293. raise Exception()
  294. file = filename[0]
  295. url = file['url']
  296. file_path = f"{UPLOAD_mergefile_PATH}/uploads/{url}"
  297. file_path = os.path.abspath(file_path)
  298. print(file_path)
  299. book = xlrd.open_workbook(file_path)
  300. sheet = book.sheet_by_index(0)
  301. data = []
  302. '''
  303. for i in range(9, sheet.nrows):
  304. # 预案名称
  305. plan_name = sheet.cell(i, 0).value
  306. # 一级目录
  307. title1 = sheet.cell(i, 1).value
  308. # 二级目录
  309. title2 = sheet.cell(i, 2).value
  310. # 三级目录
  311. title3 = sheet.cell(i, 3).value
  312. # 正文
  313. content = sheet.cell(i, 4).value
  314. if len(plan_name) < 1 and len(title1) < 1 and len(title2) < 1 and len(title3) < 1 and len(content) < 1 :
  315. break
  316. data.append({
  317. 'plan_name': plan_name,
  318. 'title1': title1,
  319. 'title2': title2,
  320. 'title3': title3,
  321. 'content': content,
  322. })
  323. if len(data) > 0:
  324. db.query(EmergencyDoc).filter(EmergencyDoc.plan_id == plan_id).delete()
  325. db.commit()
  326. title1 = ''
  327. content = ''
  328. docs = []
  329. for n in data:
  330. if n['title1'] != '':
  331. if len(docs) > 0:
  332. add_doc_1(db, title1, content, docs, plan_id)
  333. docs = []
  334. title1 = n['title1']
  335. content = n['content']
  336. if n['title2'] != '':
  337. docs.append(n)
  338. continue
  339. docs.append(n)
  340. if len(docs) > 0:
  341. add_doc_1(db, title1, content, docs, plan_id)
  342. '''
  343. return {
  344. 'code': 200,
  345. 'msg': '导入成功'
  346. }
  347. except Exception:
  348. traceback.print_exc()
  349. return {
  350. 'code': 500,
  351. 'msg': '导入发生异常'
  352. }
  353. #救援人员接口
  354. class RescuePersonnelSchema(BaseModel):
  355. id: int = None
  356. name: str = None
  357. contact_number: str = None
  358. gender: str = None
  359. current_address: str = None
  360. position: str = None
  361. unit_id: int = None
  362. unit_name: str = None
  363. is_delete: int = 0
  364. class Config:
  365. orm_mode = True
  366. class RescuePersonnelListSchema(BaseModel):
  367. personnel_list: List[RescuePersonnelSchema] = []
  368. class Config:
  369. orm_mode = True
  370. #创建
  371. @router.post("/rescue_personnel/")
  372. def create_rescue_personnel(personnel_list_data: RescuePersonnelListSchema, db: Session = Depends(get_db)):
  373. personnel_list = personnel_list_data.personnel_list
  374. if not personnel_list: # 确保列表不为空
  375. raise HTTPException(status_code=400, detail="人员列表不能为空")
  376. try:
  377. new_personnel_objects = [] # 创建一个空列表来存储新对象
  378. for personnel_data in personnel_list:
  379. personnel_data = personnel_data.dict(exclude_none=True)
  380. n_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  381. personnel_data["created_time"] = n_time
  382. new_personnel = RescuePersonnel(**personnel_data)
  383. db.add(new_personnel)
  384. new_personnel_objects.append(new_personnel)
  385. db.commit()
  386. personnel_ids = [personnel.id for personnel in new_personnel_objects] # 获取所有新对象的ID
  387. return {"code": 200, "msg": "创建成功", "personnel_ids": personnel_ids}
  388. except Exception as e:
  389. db.rollback()
  390. raise HTTPException(status_code=400, detail=str(e))
  391. #删除
  392. @router.delete("/rescue_personnel/{personnel_id}/")
  393. def delete_rescue_personnel(personnel_id: int, db: Session = Depends(get_db)):
  394. personnel = db.query(RescuePersonnel).get(personnel_id)
  395. if not personnel:
  396. raise HTTPException(status_code=404, detail="救灾人员不存在")
  397. personnel.is_delete = 1
  398. db.commit()
  399. return {"code": 200, "msg": "删除成功"}
  400. # 查询列表
  401. @router.get("/rescue_personnel/")
  402. def get_rescue_personnel(
  403. page: int = Query(default=1, gt=0),
  404. pageSize: int = Query(default=10, gt=0), db: Session = Depends(get_db)):
  405. # 应用过滤条件,仅查询未被删除的人员
  406. data_query = db.query(RescuePersonnel).filter(RescuePersonnel.is_delete == 0)
  407. data_query = data_query.order_by(RescuePersonnel.created_time.desc())
  408. # 计算总数
  409. total_count = data_query.count()
  410. # 分页查询
  411. offset = (page - 1) * pageSize
  412. personnels = data_query.offset(offset).limit(pageSize).all()
  413. # 构造结果
  414. # result_items = []
  415. # for personnel in personnels:
  416. # personnel_dict = personnel.to_dict()
  417. # # 通过 unit_id 获取单位名称
  418. # if personnel.unit_id: # 确保 unit_id 不为 None
  419. # unit = db.query(Unit).filter(Unit.id == personnel.unit_id).first()
  420. # if unit:
  421. # personnel_dict['unit_name'] = unit.name
  422. # else:
  423. # personnel_dict['unit_name'] = None # 或者其他默认值
  424. # else:
  425. # personnel_dict['unit_name'] = None # 或者其他默认值
  426. # result_items.append(personnel_dict)
  427. result_items = [personnel.to_dict() for personnel in personnels]
  428. result = {
  429. "code": 200,
  430. 'msg': '查询成功',
  431. 'total': total_count,
  432. 'totalPages': (total_count + pageSize - 1) // pageSize,
  433. 'page': page,
  434. 'pageSize': pageSize,
  435. 'data': result_items
  436. }
  437. return result
  438. #查询详情
  439. @router.get("/rescue_personnel/{personnel_id}/")
  440. def get_rescue_personnel_by_id(personnel_id: int, db: Session = Depends(get_db)):
  441. # unit = db.query(Unit).filter_by(id=unit_id, is_delete=0).first()
  442. personnel = db.query(RescuePersonnel).filter_by(id = personnel_id, is_delete = 0).first()
  443. if not personnel:
  444. raise HTTPException(status_code=404, detail="救灾人员不存在或已被标记为删除")
  445. return {"code": 200, "msg": "查询成功", "personnel": personnel.to_dict()}
  446. # @router.put("/rescue_units/{unit_id}/")
  447. # def update_unit(unit_id: int, update_data: UnitSchema, db: Session = Depends(get_db),
  448. # user_id=Depends(valid_access_token)):
  449. # # 根据id和is_delete字段获取单位
  450. # unit = db.query(Unit).filter_by(id=unit_id, is_delete=0).first()
  451. # if not unit:
  452. # raise HTTPException(status_code=404, detail="单位不存在或已被标记为删除")
  453. #
  454. # try:
  455. # # 更新非空字段,排除id字段
  456. # for key, value in update_data.dict(exclude_none=True).items():
  457. # # 确保不更新id字段
  458. # if key != 'id':
  459. # setattr(unit, key, value)
  460. # db.commit()
  461. # db.refresh(unit)
  462. # return {"code": 200, "msg": "更新成功", "unit": unit.to_dict()}
  463. # except Exception as e:
  464. # db.rollback()
  465. # raise HTTPException(status_code=400, detail=str(e))
  466. #修改
  467. @router.put("/rescue_personnel/{personnel_id}/")
  468. def update_rescue_personnel(personnel_id: int, update_data: RescuePersonnelSchema, db: Session = Depends(get_db)):
  469. personnel = db.query(RescuePersonnel).filter_by(id=personnel_id, is_delete=0).first()
  470. if not personnel:
  471. raise HTTPException(status_code=404, detail="救灾人员不存在或已被标记为删除")
  472. try:
  473. # 更新非空字段,排除id字段
  474. for key, value in update_data.dict(exclude_none=True).items():
  475. if key != 'id': # 确保不更新id字段
  476. setattr(personnel, key, value)
  477. personnel.modified_time = datetime.utcnow() # 更新修改时间
  478. db.commit()
  479. db.refresh(personnel)
  480. return {"code": 200, "msg": "更新成功", "personnel": personnel.to_dict()}
  481. except Exception as e:
  482. db.rollback()
  483. raise HTTPException(status_code=400, detail=str(e))
  484. class RescueStationSchema(BaseModel):
  485. id: int = None
  486. fwdx: str = None
  487. data_id: str = None
  488. zj: str = None
  489. lng: str = None
  490. cd_time: str = None
  491. fwdmc: str = None
  492. fwnr: str = None
  493. add_time: str = None
  494. cd_operation: str = None
  495. fwdlx: str = None
  496. lxdh: str = None
  497. kfsj: str = None
  498. lat: str = None
  499. fwdjj: str = None
  500. lxr: str = None
  501. fid: str = None
  502. fwdzt: str = None
  503. fwdaddr: str = None,
  504. ssqx:str = None
  505. is_delete: int = 0
  506. class Config:
  507. orm_mode = True
  508. class RescueStationListSchema(BaseModel):
  509. stations: List[RescueStationSchema] = Field(default_factory=list)
  510. class Config:
  511. orm_mode = True
  512. #救助站管理
  513. #创建
  514. @router.post("/rescue_stations/")
  515. def create_rescue_stations(rescue_station_list_data: RescueStationListSchema, db: Session = Depends(get_db)):
  516. stations = rescue_station_list_data.stations
  517. if not stations: # 确保列表不为空
  518. raise HTTPException(status_code=400, detail="救助站列表不能为空")
  519. try:
  520. new_stations = [] # 创建一个空列表来存储新对象
  521. for station_data in stations:
  522. station_data_dict = station_data.dict(exclude_none=True)
  523. n_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  524. station_data_dict["cd_time"] = n_time
  525. station_data_dict["add_time"] = n_time
  526. station_data_dict["data_id"] = uuid.uuid1()
  527. new_station = RescueStation(**station_data_dict)
  528. # new_station = RescueStation(**station_data.dict(exclude_none=True))
  529. db.add(new_station)
  530. new_stations.append(new_station)
  531. db.commit()
  532. station_ids = [station.id for station in new_stations] # 获取所有新对象的ID
  533. return {"code": 200, "msg": "创建成功", "station_ids": station_ids}
  534. except Exception as e:
  535. db.rollback()
  536. raise HTTPException(status_code=400, detail=str(e))
  537. @router.delete("/rescue_stations/{station_id}/")
  538. def delete_rescue_station(station_id: int, db: Session = Depends(get_db)):
  539. station = db.query(RescueStation).filter_by(id=station_id, is_delete=0).first()
  540. if not station:
  541. raise HTTPException(status_code=404, detail="救助站不存在")
  542. try:
  543. # 更新 is_delete 字段为 1,而不是删除记录
  544. station.is_delete = 1
  545. db.commit()
  546. return {"code": 200, "msg": "删除成功"}
  547. except Exception as e:
  548. db.rollback()
  549. raise HTTPException(status_code=400, detail=str(e))
  550. # class RescueStationListQueryParams(BaseModel):
  551. # page: int = Field(default=1, gt=0)
  552. # page_size: int = Field(default=10, gt=0)
  553. @router.get("/rescue_stations/")
  554. def get_rescue_stations(page: int = Query(default=1, gt=0),
  555. pageSize: int = Query(default=10, gt=0), db: Session = Depends(get_db)):
  556. # 应用过滤条件,仅查询未被删除的救助站
  557. data_query = db.query(RescueStation).filter(RescueStation.is_delete == 0)
  558. data_query = data_query.order_by(RescueStation.add_time.desc())
  559. # 计算总数
  560. total_count = data_query.count()
  561. # 分页查询
  562. offset = (page - 1) * pageSize
  563. stations = data_query.offset(offset).limit(pageSize).all()
  564. # 构造结果
  565. result_items = [station.to_dict() for station in stations]
  566. result = {
  567. "code": 200,
  568. 'msg': '查询成功',
  569. 'total': total_count,
  570. 'totalPages': (total_count + pageSize - 1) // pageSize,
  571. 'page': page,
  572. 'pageSize': pageSize,
  573. 'data': result_items
  574. }
  575. return result
  576. @router.get("/rescue_stations/{station_id}/")
  577. def get_rescue_station_by_id(station_id: int, db: Session = Depends(get_db)):
  578. station = db.query(RescueStation).filter_by(id=station_id, is_delete=0).first()
  579. if not station:
  580. raise HTTPException(status_code=404, detail="救助站不存在或已被标记为删除")
  581. return {"code": 200, "msg": "查询成功", "station": station.to_dict()}
  582. @router.put("/rescue_stations/{station_id}/")
  583. def update_rescue_station(station_id: int, update_data: RescueStationSchema, db: Session = Depends(get_db)):
  584. station = db.query(RescueStation).filter_by(id=station_id, is_delete=0).first()
  585. if not station:
  586. raise HTTPException(status_code=404, detail="救助站不存在或已被标记为删除")
  587. try:
  588. # 更新非空字段,排除id字段
  589. for key, value in update_data.dict(exclude_none=True).items():
  590. # 确保不更新id字段
  591. if key != 'id':
  592. setattr(station, key, value)
  593. db.commit()
  594. db.refresh(station)
  595. return {"code": 200, "msg": "更新成功", "station": station.to_dict()}
  596. except Exception as e:
  597. db.rollback()
  598. raise HTTPException(status_code=400, detail=str(e))
  599. #人防工程基本信息
  600. class DefenseProjectSchema(BaseModel):
  601. id: Optional[int] = None
  602. data_id: Optional[str] = None
  603. gcmc: Optional[str] = None
  604. jsdw: Optional[str] = None
  605. whdw: Optional[str] = None
  606. rfzyjlgcs: Optional[str] = None
  607. jsdd: Optional[str] = None
  608. cd_operation: Optional[str] = None
  609. yjdxsmj: Optional[float] = None
  610. sjdxsmj: Optional[float] = None
  611. cd_time: Optional[datetime] = None
  612. add_time: Optional[datetime] = None
  613. jldw: Optional[str] = None
  614. jsdwdm: Optional[str] = None
  615. kgsj: Optional[datetime] = None
  616. stdw: Optional[str] = None
  617. cd_batch: Optional[str] = None
  618. rfsjdwdm: Optional[str] = None
  619. rfsjdw: Optional[str] = None
  620. ybrs: Optional[float] = None
  621. stdwdm: Optional[str] = None
  622. whdwdm: Optional[str] = None
  623. jldwdm: Optional[str] = None
  624. rfzjlgcs: Optional[str] = None
  625. gcid: Optional[str] = None
  626. extend2: Optional[str] = None
  627. data_area: Optional[str] = None
  628. extend1: Optional[str] = None
  629. jgsj: Optional[datetime] = None
  630. rffhsbdw: Optional[str] = None
  631. rffhsbdwdm: Optional[str] = None
  632. jingdu: Optional[str] = None
  633. weidu: Optional[str] = None
  634. is_delete: Optional[bool] = False
  635. class Config:
  636. orm_mode = True
  637. class DefenseProjectListSchema(BaseModel):
  638. projects: List[DefenseProjectSchema] = Field(default_factory=list)
  639. class Config:
  640. orm_mode = True
  641. # 创建
  642. @router.post("/defense_projects/")
  643. def create_defense_projects(defense_project_list_data: DefenseProjectListSchema, db: Session = Depends(get_db)):
  644. projects = defense_project_list_data.projects
  645. if not projects: # 确保列表不为空
  646. raise HTTPException(status_code=400, detail="项目列表不能为空")
  647. try:
  648. new_projects = [] # 创建一个空列表来存储新对象
  649. for project_data in projects:
  650. # new_project = DefenseProject(**project_data.dict(exclude_none=True))
  651. # new_projects.append(new_project)
  652. project_data = project_data.dict(exclude_none=True)
  653. n_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  654. project_data["add_time"] = n_time
  655. project_data["cd_batch"] = ""
  656. project_data["cd_operation"] = "I"
  657. new_unit = DefenseProject(**project_data)
  658. db.add(new_unit)
  659. new_projects.append(new_unit)
  660. db.add_all(new_projects)
  661. db.commit()
  662. project_ids = [project.id for project in new_projects] # 获取所有新对象的ID
  663. return {"code": 200, "msg": "创建成功", "project_ids": project_ids}
  664. except Exception as e:
  665. db.rollback()
  666. raise HTTPException(status_code=400, detail=str(e))
  667. # 删除
  668. @router.delete("/defense_projects/{project_id}/")
  669. def delete_defense_project(project_id: int, db: Session = Depends(get_db)):
  670. # project = db.query(DefenseProject).get(project_id)
  671. project = db.query(DefenseProject).filter_by(id=project_id, is_delete=0).first()
  672. if not project:
  673. raise HTTPException(status_code=404, detail="项目不存在")
  674. try:
  675. # 更新 is_delete 字段为 True,而不是删除记录
  676. project.is_delete = True
  677. db.commit()
  678. return {"code": 200, "msg": "删除成功"}
  679. except Exception as e:
  680. db.rollback()
  681. raise HTTPException(status_code=400, detail=str(e))
  682. # 查询列表
  683. class DefenseProjectListQueryParams(BaseModel):
  684. page: int = Field(default=1, gt=0)
  685. page_size: int = Field(default=10, gt=0)
  686. # page: int = Query(1, gt=0, description='页码'),
  687. # page_size: int = Query(10, gt=0, description='pageSize'),
  688. @router.get("/defense_projects/")
  689. def get_defense_projects(page: int = Query(default=1, gt=0),
  690. pageSize: int = Query(default=10, gt=0), db: Session = Depends(get_db)):
  691. # 应用过滤条件,仅查询未被删除的项目
  692. data_query = db.query(DefenseProject).filter(DefenseProject.is_delete == False)
  693. data_query = data_query.order_by(DefenseProject.add_time.desc())
  694. # 计算总数
  695. total_count = data_query.count()
  696. # 分页查询
  697. offset = (page - 1) * pageSize
  698. projects = data_query.offset(offset).limit(pageSize).all()
  699. # 构造结果
  700. # result_items = [project.to_dict() for project in projects]
  701. result = {
  702. "code": 200,
  703. 'msg': '查询成功',
  704. 'total': total_count,
  705. 'totalPages': (total_count + pageSize - 1) // pageSize,
  706. 'page': page,
  707. 'pageSize': pageSize,
  708. 'data': projects
  709. }
  710. return result
  711. # 查询详情
  712. @router.get("/defense_projects/{project_id}/")
  713. def get_defense_project_by_id(project_id: int, db: Session = Depends(get_db)):
  714. # project = db.query(DefenseProject).filter_by(id=project_id, is_delete=0).first()
  715. project = db.query(DefenseProject).filter_by(id=project_id, is_delete=0).first()
  716. if not project:
  717. raise HTTPException(status_code=404, detail="项目不存在或已被标记为删除")
  718. return {"code": 200, "msg": "查询成功", "project": project.to_dict()}
  719. # 修改
  720. @router.put("/defense_projects/{project_id}/")
  721. def update_defense_project(project_id: int, update_data: DefenseProjectSchema, db: Session = Depends(get_db)):
  722. project = db.query(DefenseProject).filter_by(id=project_id, is_delete=False).first()
  723. if not project:
  724. raise HTTPException(status_code=404, detail="项目不存在或已被标记为删除")
  725. try:
  726. # 更新非空字段,排除id字段
  727. for key, value in update_data.dict(exclude_none=True).items():
  728. # 确保不更新id字段
  729. if key != 'id':
  730. setattr(project, key, value)
  731. project.cd_time = datetime.utcnow() # 更新修改时间
  732. db.commit()
  733. db.refresh(project)
  734. return {"code": 200, "msg": "更新成功", "project": project.to_dict()}
  735. except Exception as e:
  736. db.rollback()
  737. raise HTTPException(status_code=400, detail=str(e))
  738. #避难场所接口
  739. class ShelterSchema(BaseModel):
  740. id: Optional[int] = None
  741. data_id: Optional[str] = None
  742. admin_area: Optional[str] = None
  743. full_name: Optional[str] = None
  744. address: Optional[str] = None
  745. incident_type: Optional[str] = None
  746. shelter_type: Optional[str] = None
  747. total_area: Optional[float] = None
  748. indoor_area: Optional[float] = None
  749. capacity: Optional[float] = None
  750. supplies: Optional[str] = None
  751. facilities: Optional[str] = None
  752. is_delete: Optional[bool] = False
  753. class Config:
  754. orm_mode = True
  755. class ShelterListSchema(BaseModel):
  756. shelters: List[ShelterSchema] = Field(default_factory=list)
  757. class Config:
  758. orm_mode = True
  759. # 创建
  760. @router.post("/shelters/")
  761. def create_shelters(shelter_list_data: ShelterListSchema, db: Session = Depends(get_db)):
  762. shelters = shelter_list_data.shelters
  763. if not shelters:
  764. raise HTTPException(status_code=400, detail="避难场所列表不能为空")
  765. try:
  766. new_shelters = []
  767. for shelter_data in shelters:
  768. # new_shelter = Shelter(**shelter_data.dict(exclude_none=True))
  769. # new_shelters.append(new_shelter)
  770. shelter_data = shelter_data.dict(exclude_none=True)
  771. n_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  772. shelter_data["created_time"] = n_time
  773. shelter_data["data_id"] = uuid.uuid1()
  774. new_unit = Shelter(**shelter_data)
  775. db.add(new_unit)
  776. new_shelters.append(new_unit)
  777. db.add_all(new_shelters)
  778. db.commit()
  779. shelter_ids = [shelter.id for shelter in new_shelters]
  780. return {"code": 200, "msg": "创建成功", "shelter_ids": shelter_ids}
  781. except Exception as e:
  782. db.rollback()
  783. raise HTTPException(status_code=400, detail=str(e))
  784. # 删除
  785. @router.delete("/shelters/{shelter_id}/")
  786. def delete_shelter(shelter_id: int, db: Session = Depends(get_db)):
  787. shelter = db.query(Shelter).filter_by(id=shelter_id, is_delete=0).first()
  788. if not shelter:
  789. raise HTTPException(status_code=404, detail="避难场所不存在")
  790. try:
  791. shelter.is_delete = True
  792. db.commit()
  793. return {"code": 200, "msg": "删除成功"}
  794. except Exception as e:
  795. db.rollback()
  796. raise HTTPException(status_code=400, detail=str(e))
  797. # 查询列表
  798. #
  799. @router.get("/shelters/")
  800. def get_shelters(page: int = Query(default=1, gt=0),
  801. pageSize: int = Query(default=10, gt=0), db: Session = Depends(get_db)):
  802. data_query = db.query(Shelter).filter(Shelter.is_delete == False)
  803. data_query = data_query.order_by(Shelter.created_time.desc())
  804. total_count = data_query.count()
  805. offset = (page - 1) * pageSize
  806. shelters = data_query.offset(offset).limit(pageSize).all()
  807. result_items = [shelter.to_dict() for shelter in shelters]
  808. result = {
  809. "code": 200,
  810. 'msg': '查询成功',
  811. 'total': total_count,
  812. 'totalPages': (total_count + pageSize - 1) // pageSize,
  813. 'page': page,
  814. 'pageSize': pageSize,
  815. 'data': result_items
  816. }
  817. return result
  818. # 查询详情
  819. @router.get("/shelters/{shelter_id}/")
  820. def get_shelter_by_id(shelter_id: int, db: Session = Depends(get_db)):
  821. shelter = db.query(Shelter).filter_by(id=shelter_id, is_delete=0).first()
  822. if not shelter:
  823. raise HTTPException(status_code=404, detail="避难场所不存在或已被标记为删除")
  824. return {"code": 200, "msg": "查询成功", "shelter": shelter.to_dict()}
  825. # 修改
  826. @router.put("/shelters/{shelter_id}/")
  827. def update_shelter(shelter_id: int, update_data: ShelterSchema, db: Session = Depends(get_db)):
  828. shelter = db.query(Shelter).filter_by(id=shelter_id, is_delete=False).first()
  829. if not shelter:
  830. raise HTTPException(status_code=404, detail="避难场所不存在或已被标记为删除")
  831. try:
  832. for key, value in update_data.dict(exclude_none=True).items():
  833. if key != 'id':
  834. setattr(shelter, key, value)
  835. shelter.modified_time = datetime.utcnow()
  836. db.commit()
  837. db.refresh(shelter)
  838. return {"code": 200, "msg": "更新成功", "shelter": shelter.to_dict()}
  839. except Exception as e:
  840. db.rollback()
  841. raise HTTPException(status_code=400, detail=str(e))
  842. def import_data(db, file_path, user_id, file_info):
  843. import_status = True
  844. print(file_path)
  845. try:
  846. book = xlrd.open_workbook(file_path)
  847. sheet = book.sheet_by_index(0)
  848. except:
  849. file_info.remark = file_info.remark + f'\n文件打开失败,请核实文件格式为xlsx/xlx>'
  850. file_info.error_num += 1
  851. import_status = False
  852. data = []
  853. for row in range(1, sheet.nrows):
  854. # 姓名
  855. jsdwzjlx = sheet.cell(row, 0).value
  856. lxfs = sheet.cell(row, 1).value
  857. sjtgbmtyshxydm = sheet.cell(row, 2).value
  858. jdgljgbm = sheet.cell(row, 3).value
  859. cd_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  860. sjtgbmmc = sheet.cell(row, 4).value
  861. ggmj = sheet.cell(row, 5).value
  862. sjtgbmxzqhdm = sheet.cell(row, 6).value
  863. jsdwzjhm = sheet.cell(row, 7).value
  864. xzqhdm = sheet.cell(row, 8).value
  865. cd_operation = "I"
  866. zdmj = sheet.cell(row, 9).value
  867. d_bmmc = sheet.cell(row, 10).value
  868. etl_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  869. jssj = sheet.cell(row, 11).value
  870. jsdwmc = sheet.cell(row, 12).value
  871. slsshslgcmc = sheet.cell(row, 13).value
  872. # cd_batch = Column(String(200), comment='数据批次号')
  873. slsshslgcdd = sheet.cell(row, 14).value
  874. jdgljg = sheet.cell(row, 15).value
  875. jingdu = sheet.cell(row, 16).value
  876. weidu = sheet.cell(row, 17).value
  877. new_water = WaterResourceProject(
  878. jsdwzjlx=jsdwzjlx,
  879. lxfs=lxfs,
  880. sjtgbmtyshxydm=sjtgbmtyshxydm,
  881. jdgljgbm=jdgljgbm,
  882. cd_time=cd_time,
  883. sjtgbmmc=sjtgbmmc,
  884. ggmj=ggmj,
  885. sjtgbmxzqhdm=sjtgbmxzqhdm,
  886. jsdwzjhm=jsdwzjhm,
  887. xzqhdm=xzqhdm,
  888. cd_operation=cd_operation,
  889. zdmj=zdmj,
  890. d_bmmc=d_bmmc,
  891. etl_time=etl_time,
  892. jssj=jssj,
  893. jsdwmc=jsdwmc,
  894. slsshslgcmc=slsshslgcmc,
  895. slsshslgcdd=slsshslgcdd,
  896. jdgljg=jdgljg,
  897. jingdu=jingdu,
  898. weidu=weidu
  899. )
  900. data.append(new_water)
  901. db.add(new_water)
  902. db.commit()
  903. db.commit()
  904. @router.post('/createImport/projects')
  905. async def create_contact(
  906. request: Request,
  907. background_tasks: BackgroundTasks,
  908. db: Session = Depends(get_db),
  909. body=Depends(remove_xss_json),
  910. # auth_user: AuthUser = Depends(find_auth_user),
  911. user_id=Depends(valid_access_token)
  912. ):
  913. try:
  914. # 提取请求数据
  915. filename = body['filename']
  916. file_name_desc = body['file_name_desc']
  917. if len(filename) == 0:
  918. raise Exception()
  919. # file_path = f'/data/upload/mergefile/uploads/{filename}'
  920. file_path = f'D:\\Desktop\\mm\\{filename}'
  921. # print(file_path)
  922. # 检查文件是否存在
  923. if not os.path.isfile(file_path):
  924. return JSONResponse(status_code=404, content={
  925. 'errcode': 404,
  926. 'errmsg': f'{filename}不存在'
  927. })
  928. new_file = ResourceImportFileStatus(
  929. file_uuid=filename,
  930. file_name=file_name_desc,
  931. status='1',
  932. remark='',
  933. user_id=user_id,
  934. resource_type = '水利'
  935. )
  936. db.add(new_file)
  937. db.commit()
  938. background_tasks.add_task(import_data, db, file_path, user_id, new_file)
  939. # db_czrz.log(db, auth_user, "系统管理", f"后台管理导入三防责任人管理人员信息成功", request.client.host)
  940. # 返回创建成功的响应
  941. return {
  942. "code": 200,
  943. "msg": "成功",
  944. "data": None
  945. }
  946. except AppException as e:
  947. return {
  948. "code": 500,
  949. "msg": e.msg
  950. }
  951. except Exception as e:
  952. traceback.print_exc()
  953. # 处理异常
  954. db.rollback()
  955. raise HTTPException(status_code=500, detail=str(e))
  956. def rescue_units_import_data(db, file_path, user_id, file_info):
  957. import_status = True
  958. print(file_path)
  959. try:
  960. book = xlrd.open_workbook(file_path)
  961. sheet = book.sheet_by_index(0)
  962. except:
  963. file_info.remark = file_info.remark + f'\n文件打开失败,请核实文件格式为xlsx/xlx>'
  964. file_info.error_num += 1
  965. import_status = False
  966. data = []
  967. for row in range(1, sheet.nrows):
  968. # 姓名
  969. name = sheet.cell(row, 0).value
  970. category = sheet.cell(row, 1).value
  971. address = sheet.cell(row, 2).value
  972. equipment = sheet.cell(row, 3).value
  973. training = sheet.cell(row, 4).value
  974. responsible_person = sheet.cell(row, 5).value
  975. contact_number = sheet.cell(row, 6).value
  976. longitude = sheet.cell(row, 7).value
  977. latitude = sheet.cell(row, 8).value
  978. position = sheet.cell(row, 9).value
  979. team_size = sheet.cell(row, 10).value
  980. supervisor_unit = sheet.cell(row, 11).value
  981. add_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  982. # 创建 Unit 对象
  983. new_Unit = Unit(
  984. name=name,
  985. category=category,
  986. address=address,
  987. equipment=equipment,
  988. training=training,
  989. responsible_person=responsible_person,
  990. contact_number=contact_number,
  991. longitude=longitude,
  992. latitude=latitude,
  993. position=position,
  994. team_size=team_size,
  995. supervisor_unit=supervisor_unit,
  996. add_time=add_time
  997. )
  998. data.append(new_Unit)
  999. db.add(new_Unit)
  1000. db.commit()
  1001. db.commit()
  1002. @router.post('/createImport/rescue_units')
  1003. async def create_contact(
  1004. request: Request,
  1005. background_tasks: BackgroundTasks,
  1006. db: Session = Depends(get_db),
  1007. body=Depends(remove_xss_json),
  1008. # auth_user: AuthUser = Depends(find_auth_user),
  1009. user_id=Depends(valid_access_token)
  1010. ):
  1011. try:
  1012. # 提取请求数据
  1013. filename = body['filename']
  1014. file_name_desc = body['file_name_desc']
  1015. if len(filename) == 0:
  1016. raise Exception()
  1017. # file_path = f'/data/upload/mergefile/uploads/{filename}'
  1018. file_path = f'D:\\Desktop\\mm\\{filename}'
  1019. # print(file_path)
  1020. # 检查文件是否存在
  1021. if not os.path.isfile(file_path):
  1022. return JSONResponse(status_code=404, content={
  1023. 'errcode': 404,
  1024. 'errmsg': f'{filename}不存在'
  1025. })
  1026. new_file = ResourceImportFileStatus(
  1027. file_uuid=filename,
  1028. file_name=file_name_desc,
  1029. status='1',
  1030. remark='',
  1031. user_id=user_id,
  1032. resource_type = '救援人员单位管理'
  1033. )
  1034. db.add(new_file)
  1035. db.commit()
  1036. background_tasks.add_task(rescue_units_import_data, db, file_path, user_id, new_file)
  1037. # db_czrz.log(db, auth_user, "系统管理", f"后台管理导入三防责任人管理人员信息成功", request.client.host)
  1038. # 返回创建成功的响应
  1039. return {
  1040. "code": 200,
  1041. "msg": "成功",
  1042. "data": None
  1043. }
  1044. except AppException as e:
  1045. return {
  1046. "code": 500,
  1047. "msg": e.msg
  1048. }
  1049. except Exception as e:
  1050. traceback.print_exc()
  1051. # 处理异常
  1052. db.rollback()
  1053. raise HTTPException(status_code=500, detail=str(e))
  1054. def rescue_personnel_import_data(db, file_path, user_id, file_info):
  1055. import_status = True
  1056. print(file_path)
  1057. try:
  1058. book = xlrd.open_workbook(file_path)
  1059. sheet = book.sheet_by_index(0)
  1060. except:
  1061. file_info.remark = file_info.remark + f'\n文件打开失败,请核实文件格式为xlsx/xlx>'
  1062. file_info.error_num += 1
  1063. import_status = False
  1064. data = []
  1065. for row in range(1, sheet.nrows):
  1066. # 姓名
  1067. name = sheet.cell(row, 0).value
  1068. contact_number = sheet.cell(row, 1).value
  1069. gender = sheet.cell(row, 2).value
  1070. current_address = sheet.cell(row, 3).value
  1071. position = sheet.cell(row, 4).value
  1072. unit_id = sheet.cell(row, 5).value
  1073. unit_name = sheet.cell(row, 6).value
  1074. created_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  1075. # 创建 Unit 对象
  1076. new_RescuePersonnel = RescuePersonnel(
  1077. name=name,
  1078. contact_number=contact_number,
  1079. gender=gender,
  1080. current_address=current_address,
  1081. position=position,
  1082. unit_id=unit_id,
  1083. unit_name=unit_name,
  1084. created_time=created_time
  1085. )
  1086. data.append(new_RescuePersonnel)
  1087. db.add(new_RescuePersonnel)
  1088. db.commit()
  1089. db.commit()
  1090. @router.post('/createImport/rescue_personnel')
  1091. async def create_contact(
  1092. request: Request,
  1093. background_tasks: BackgroundTasks,
  1094. db: Session = Depends(get_db),
  1095. body=Depends(remove_xss_json),
  1096. # auth_user: AuthUser = Depends(find_auth_user),
  1097. user_id=Depends(valid_access_token)
  1098. ):
  1099. try:
  1100. # 提取请求数据
  1101. filename = body['filename']
  1102. file_name_desc = body['file_name_desc']
  1103. if len(filename) == 0:
  1104. raise Exception()
  1105. # file_path = f'/data/upload/mergefile/uploads/{filename}'
  1106. file_path = f'D:\\Desktop\\mm\\{filename}'
  1107. # print(file_path)
  1108. # 检查文件是否存在
  1109. if not os.path.isfile(file_path):
  1110. return JSONResponse(status_code=404, content={
  1111. 'errcode': 404,
  1112. 'errmsg': f'{filename}不存在'
  1113. })
  1114. new_file = ResourceImportFileStatus(
  1115. file_uuid=filename,
  1116. file_name=file_name_desc,
  1117. status='1',
  1118. remark='',
  1119. user_id=user_id,
  1120. resource_type = '救援人员单位'
  1121. )
  1122. db.add(new_file)
  1123. db.commit()
  1124. background_tasks.add_task(rescue_personnel_import_data, db, file_path, user_id, new_file)
  1125. # db_czrz.log(db, auth_user, "系统管理", f"后台管理导入三防责任人管理人员信息成功", request.client.host)
  1126. # 返回创建成功的响应
  1127. return {
  1128. "code": 200,
  1129. "msg": "成功",
  1130. "data": None
  1131. }
  1132. except AppException as e:
  1133. return {
  1134. "code": 500,
  1135. "msg": e.msg
  1136. }
  1137. except Exception as e:
  1138. traceback.print_exc()
  1139. # 处理异常
  1140. db.rollback()
  1141. raise HTTPException(status_code=500, detail=str(e))
  1142. def rescue_stations_import_data(db, file_path, user_id, file_info):
  1143. import_status = True
  1144. print(file_path)
  1145. try:
  1146. book = xlrd.open_workbook(file_path)
  1147. sheet = book.sheet_by_index(0)
  1148. except:
  1149. file_info.remark = file_info.remark + f'\n文件打开失败,请核实文件格式为xlsx/xlx>'
  1150. file_info.error_num += 1
  1151. import_status = False
  1152. data = []
  1153. for row in range(1, sheet.nrows):
  1154. # 姓名
  1155. data_id = uuid.uuid1()
  1156. fwdx = sheet.cell(row, 0).value
  1157. zj = sheet.cell(row, 1).value
  1158. lng = sheet.cell(row, 2).value
  1159. cd_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  1160. fwdmc = sheet.cell(row, 3).value
  1161. fwnr = sheet.cell(row, 4).value
  1162. add_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  1163. cd_operation = "I"
  1164. fwdlx = sheet.cell(row, 5).value
  1165. lxdh = sheet.cell(row, 6).value
  1166. kfsj = sheet.cell(row, 7).value
  1167. lat = sheet.cell(row, 8).value
  1168. fwdjj = sheet.cell(row, 9).value
  1169. lxr = sheet.cell(row, 10).value
  1170. fid = sheet.cell(row, 11).value
  1171. fwdzt = sheet.cell(row, 12).value
  1172. fwdaddr = sheet.cell(row, 13).value
  1173. ssqx = sheet.cell(row, 14).value
  1174. new_RescueStation = RescueStation(
  1175. data_id=data_id,
  1176. fwdx=fwdx,
  1177. zj=zj,
  1178. lng=lng,
  1179. cd_time=cd_time,
  1180. fwdmc=fwdmc,
  1181. fwnr=fwnr,
  1182. add_time=add_time,
  1183. cd_operation=cd_operation,
  1184. fwdlx=fwdlx,
  1185. lxdh=lxdh,
  1186. kfsj=kfsj,
  1187. lat=lat,
  1188. fwdjj=fwdjj,
  1189. lxr=lxr,
  1190. fid=fid,
  1191. fwdzt=fwdzt,
  1192. fwdaddr=fwdaddr,
  1193. ssqx=ssqx
  1194. )
  1195. data.append(new_RescueStation)
  1196. db.add(new_RescueStation)
  1197. db.commit()
  1198. db.commit()
  1199. @router.post('/createImport/rescue_stations')
  1200. async def create_contact(
  1201. request: Request,
  1202. background_tasks: BackgroundTasks,
  1203. db: Session = Depends(get_db),
  1204. body=Depends(remove_xss_json),
  1205. # auth_user: AuthUser = Depends(find_auth_user),
  1206. user_id=Depends(valid_access_token)
  1207. ):
  1208. try:
  1209. # 提取请求数据
  1210. filename = body['filename']
  1211. file_name_desc = body['file_name_desc']
  1212. if len(filename) == 0:
  1213. raise Exception()
  1214. # file_path = f'/data/upload/mergefile/uploads/{filename}'
  1215. file_path = f'D:\\Desktop\\mm\\{filename}'
  1216. # print(file_path)
  1217. # 检查文件是否存在
  1218. if not os.path.isfile(file_path):
  1219. return JSONResponse(status_code=404, content={
  1220. 'errcode': 404,
  1221. 'errmsg': f'{filename}不存在'
  1222. })
  1223. new_file = ResourceImportFileStatus(
  1224. file_uuid=filename,
  1225. file_name=file_name_desc,
  1226. status='1',
  1227. remark='',
  1228. user_id=user_id,
  1229. resource_type = '救助站'
  1230. )
  1231. db.add(new_file)
  1232. db.commit()
  1233. background_tasks.add_task(rescue_stations_import_data, db, file_path, user_id, new_file)
  1234. # db_czrz.log(db, auth_user, "系统管理", f"后台管理导入三防责任人管理人员信息成功", request.client.host)
  1235. # 返回创建成功的响应
  1236. return {
  1237. "code": 200,
  1238. "msg": "成功",
  1239. "data": None
  1240. }
  1241. except AppException as e:
  1242. return {
  1243. "code": 500,
  1244. "msg": e.msg
  1245. }
  1246. except Exception as e:
  1247. traceback.print_exc()
  1248. # 处理异常
  1249. db.rollback()
  1250. raise HTTPException(status_code=500, detail=str(e))
  1251. #人防工程
  1252. def defense_projects_import_data(db, file_path, user_id, file_info):
  1253. import_status = True
  1254. try:
  1255. book = xlrd.open_workbook(file_path)
  1256. sheet = book.sheet_by_index(0)
  1257. except:
  1258. file_info.remark = file_info.remark + f'\n文件打开失败,请核实文件格式为xlsx/xlx>'
  1259. file_info.error_num += 1
  1260. import_status = False
  1261. data = []
  1262. for row in range(1, sheet.nrows):
  1263. # print(row)
  1264. # print(sheet.cell(row, 0).value)
  1265. data_id = uuid.uuid1()
  1266. # id = Column(BigInteger, primary_key=True, autoincrement=True, comment='数字自增ID')
  1267. gcmc = sheet.cell(row, 0).value
  1268. jsdw = sheet.cell(row, 1).value
  1269. whdw = sheet.cell(row, 2).value
  1270. rfzyjlgcs = sheet.cell(row, 3).value
  1271. jsdd = sheet.cell(row, 4).value
  1272. cd_operation = "I"
  1273. yjdxsmj = sheet.cell(row, 5).value
  1274. sjdxsmj = sheet.cell(row, 6).value
  1275. cd_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  1276. add_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  1277. jldw = sheet.cell(row, 7).value
  1278. jsdwdm = sheet.cell(row, 8).value
  1279. kgsj = sheet.cell(row, 9).value
  1280. stdw = sheet.cell(row, 10).value
  1281. # cd_batch = Column(String(100), comment='批次号') # 新增
  1282. rfsjdwdm = sheet.cell(row, 11).value
  1283. rfsjdw = sheet.cell(row, 12).value
  1284. ybrs = sheet.cell(row, 13).value
  1285. stdwdm = sheet.cell(row, 14).value
  1286. whdwdm = sheet.cell(row, 15).value
  1287. jldwdm = sheet.cell(row, 16).value
  1288. rfzjlgcs = sheet.cell(row, 17).value
  1289. # gcid = Column(String(50), comment='主键')
  1290. extend2 = sheet.cell(row, 18).value
  1291. data_area = sheet.cell(row, 19).value
  1292. extend1 = sheet.cell(row, 20).value
  1293. jgsj = sheet.cell(row, 21).value
  1294. rffhsbdw = sheet.cell(row, 22).value
  1295. rffhsbdwdm = sheet.cell(row, 23).value
  1296. jingdu = sheet.cell(row, 24).value
  1297. weidu = sheet.cell(row, 25).value
  1298. new_DefenseProject = DefenseProject(
  1299. data_id=data_id,
  1300. gcmc=gcmc,
  1301. jsdw=jsdw,
  1302. whdw=whdw,
  1303. rfzyjlgcs=rfzyjlgcs,
  1304. jsdd=jsdd,
  1305. cd_operation=cd_operation,
  1306. yjdxsmj=yjdxsmj,
  1307. sjdxsmj=sjdxsmj,
  1308. cd_time=cd_time,
  1309. add_time=add_time,
  1310. jldw=jldw,
  1311. jsdwdm=jsdwdm,
  1312. kgsj=kgsj,
  1313. stdw=stdw,
  1314. rfsjdwdm=rfsjdwdm,
  1315. rfsjdw=rfsjdw,
  1316. ybrs=ybrs,
  1317. stdwdm=stdwdm,
  1318. whdwdm=whdwdm,
  1319. jldwdm=jldwdm,
  1320. rfzjlgcs=rfzjlgcs,
  1321. extend2=extend2,
  1322. data_area=data_area,
  1323. extend1=extend1,
  1324. jgsj=jgsj,
  1325. rffhsbdw=rffhsbdw,
  1326. rffhsbdwdm=rffhsbdwdm,
  1327. jingdu=jingdu,
  1328. weidu=weidu
  1329. )
  1330. data.append(new_DefenseProject)
  1331. db.add(new_DefenseProject)
  1332. db.commit()
  1333. db.commit()
  1334. @router.post('/createImport/defense_projects')
  1335. async def create_contact(
  1336. request: Request,
  1337. background_tasks: BackgroundTasks,
  1338. db: Session = Depends(get_db),
  1339. body=Depends(remove_xss_json),
  1340. # auth_user: AuthUser = Depends(find_auth_user),
  1341. user_id=Depends(valid_access_token)
  1342. ):
  1343. try:
  1344. # 提取请求数据
  1345. filename = body['filename']
  1346. file_name_desc = body['file_name_desc']
  1347. if len(filename) == 0:
  1348. raise Exception()
  1349. # file_path = f'/data/upload/mergefile/uploads/{filename}'
  1350. file_path = f'D:\\Desktop\\mm\\{filename}'
  1351. # print(file_path)
  1352. # 检查文件是否存在
  1353. if not os.path.isfile(file_path):
  1354. return JSONResponse(status_code=404, content={
  1355. 'errcode': 404,
  1356. 'errmsg': f'{filename}不存在'
  1357. })
  1358. new_file = ResourceImportFileStatus(
  1359. file_uuid=filename,
  1360. file_name=file_name_desc,
  1361. status='1',
  1362. remark='',
  1363. user_id=user_id,
  1364. resource_type = '人防工程'
  1365. )
  1366. db.add(new_file)
  1367. db.commit()
  1368. background_tasks.add_task(defense_projects_import_data, db, file_path, user_id, new_file)
  1369. # db_czrz.log(db, auth_user, "系统管理", f"后台管理导入三防责任人管理人员信息成功", request.client.host)
  1370. # 返回创建成功的响应
  1371. return {
  1372. "code": 200,
  1373. "msg": "成功",
  1374. "data": None
  1375. }
  1376. except AppException as e:
  1377. return {
  1378. "code": 500,
  1379. "msg": e.msg
  1380. }
  1381. except Exception as e:
  1382. traceback.print_exc()
  1383. # 处理异常
  1384. db.rollback()
  1385. raise HTTPException(status_code=500, detail=str(e))
  1386. #人防工程
  1387. def shelters_import_data(db, file_path, user_id, file_info):
  1388. import_status = True
  1389. try:
  1390. book = xlrd.open_workbook(file_path)
  1391. sheet = book.sheet_by_index(0)
  1392. except:
  1393. file_info.remark = file_info.remark + f'\n文件打开失败,请核实文件格式为xlsx/xlx>'
  1394. file_info.error_num += 1
  1395. import_status = False
  1396. data = []
  1397. for row in range(1, sheet.nrows):
  1398. data_id = uuid.uuid1()
  1399. admin_area = sheet.cell(row, 0).value
  1400. full_name = sheet.cell(row, 0).value
  1401. address = sheet.cell(row, 0).value
  1402. incident_type = sheet.cell(row, 0).value
  1403. shelter_type = sheet.cell(row, 0).value
  1404. total_area = sheet.cell(row, 0).value
  1405. indoor_area = sheet.cell(row, 0).value
  1406. capacity = sheet.cell(row, 0).value
  1407. supplies = sheet.cell(row, 0).value
  1408. facilities = sheet.cell(row, 0).value
  1409. modified_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  1410. created_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  1411. new_Shelter = Shelter(
  1412. data_id=data_id,
  1413. admin_area=admin_area,
  1414. full_name=full_name,
  1415. address=address,
  1416. incident_type=incident_type,
  1417. shelter_type=shelter_type,
  1418. total_area=total_area,
  1419. indoor_area=indoor_area,
  1420. capacity=capacity,
  1421. supplies=supplies,
  1422. facilities=facilities,
  1423. modified_time=modified_time,
  1424. created_time=created_time
  1425. )
  1426. data.append(new_Shelter)
  1427. db.add(new_Shelter)
  1428. db.commit()
  1429. db.commit()
  1430. @router.post('/createImport/shelters')
  1431. async def create_contact(
  1432. request: Request,
  1433. background_tasks: BackgroundTasks,
  1434. db: Session = Depends(get_db),
  1435. body=Depends(remove_xss_json),
  1436. # auth_user: AuthUser = Depends(find_auth_user),
  1437. user_id=Depends(valid_access_token)
  1438. ):
  1439. try:
  1440. # 提取请求数据
  1441. filename = body['filename']
  1442. file_name_desc = body['file_name_desc']
  1443. if len(filename) == 0:
  1444. raise Exception()
  1445. # file_path = f'/data/upload/mergefile/uploads/{filename}'
  1446. file_path = f'D:\\Desktop\\mm\\{filename}'
  1447. # print(file_path)
  1448. # 检查文件是否存在
  1449. if not os.path.isfile(file_path):
  1450. return JSONResponse(status_code=404, content={
  1451. 'errcode': 404,
  1452. 'errmsg': f'{filename}不存在'
  1453. })
  1454. new_file = ResourceImportFileStatus(
  1455. file_uuid=filename,
  1456. file_name=file_name_desc,
  1457. status='1',
  1458. remark='',
  1459. user_id=user_id,
  1460. resource_type = '避难场所'
  1461. )
  1462. db.add(new_file)
  1463. db.commit()
  1464. background_tasks.add_task(shelters_import_data, db, file_path, user_id, new_file)
  1465. # db_czrz.log(db, auth_user, "系统管理", f"后台管理导入三防责任人管理人员信息成功", request.client.host)
  1466. # 返回创建成功的响应
  1467. return {
  1468. "code": 200,
  1469. "msg": "成功",
  1470. "data": None
  1471. }
  1472. except AppException as e:
  1473. return {
  1474. "code": 500,
  1475. "msg": e.msg
  1476. }
  1477. except Exception as e:
  1478. traceback.print_exc()
  1479. # 处理异常
  1480. db.rollback()
  1481. raise HTTPException(status_code=500, detail=str(e))