emergency_resources.py 54 KB

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