emergency_resources.py 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816
  1. from fastapi import APIRouter, HTTPException, Depends, Body,Query
  2. # from sqlalchemy.orm import Session
  3. from sqlalchemy.orm import Session, joinedload
  4. from database import get_db
  5. from models import *
  6. from typing import List, Optional
  7. from pydantic import BaseModel,Extra, Field
  8. import uuid
  9. from common.security import valid_access_token
  10. from pydantic import BaseModel
  11. router = APIRouter()
  12. # 水利工程管理
  13. # Pydantic 模型
  14. class WaterResourceProjectSchema(BaseModel):
  15. id: int = None
  16. jsdwzjlx: str = None
  17. lxfs: str = None
  18. sjtgbmtyshxydm: str = None
  19. jdgljgbm: str = None
  20. cd_time: str = None
  21. sjtgbmmc: str = None
  22. ggmj: str = None
  23. sjtgbmxzqhdm: str = None
  24. jsdwzjhm: str = None
  25. xzqhdm: str = None
  26. cd_operation: str = None
  27. zdmj: str = None
  28. d_bmmc: str = None
  29. etl_time: str = None
  30. jssj: str = None
  31. jsdwmc: str = None
  32. slsshslgcmc: str = None
  33. cd_batch: str = None
  34. slsshslgcdd: str = None
  35. jdgljg: str = None
  36. jingdu: str = None
  37. weidu: str = None
  38. is_delete: int = 0
  39. class WaterResourceProjectListSchema(BaseModel):
  40. projects: List[WaterResourceProjectSchema] = []
  41. class Config:
  42. orm_mode = True
  43. #插入数据
  44. @router.post("/projects/")
  45. def create_projects(project_list_data: WaterResourceProjectListSchema, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  46. projects = project_list_data.projects
  47. if not projects: # 确保列表不为空
  48. raise HTTPException(status_code=400, detail="项目列表不能为空")
  49. try:
  50. new_projects = [] # 创建一个空列表来存储新对象
  51. for project_data in projects:
  52. new_project = WaterResourceProject(**project_data.dict(exclude_none=True))
  53. db.add(new_project)
  54. new_projects.append(new_project)
  55. db.commit()
  56. project_ids = [project.id for project in new_projects] # 获取所有新对象的ID
  57. return {"code": 200, "msg": "创建成功", "project_ids": project_ids}
  58. except Exception as e:
  59. db.rollback()
  60. raise HTTPException(status_code=400, detail=str(e))
  61. #删除
  62. @router.delete("/projects/{project_id}/")
  63. def delete_project(project_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  64. project = db.query(WaterResourceProject).get(project_id)
  65. if not project:
  66. raise HTTPException(status_code=404, detail="项目不存在")
  67. try:
  68. # 更新 is_delete 字段为 2,而不是删除记录
  69. project.is_delete = 2
  70. db.commit()
  71. return {"code": 200, "msg": "删除成功"}
  72. except Exception as e:
  73. db.rollback()
  74. raise HTTPException(status_code=400, detail=str(e))
  75. # class ProjectListQueryParams(BaseModel):
  76. # page: int = Field(default=1, gt=0)
  77. # page_size: int = Field(default=10, gt=0)
  78. #查询列表
  79. @router.get("/projects/")
  80. def get_projects(page: int = Query(default=1, gt=0),
  81. pageSize: int = Query(default=10, gt=0),
  82. db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  83. data_query = db.query(WaterResourceProject).filter(WaterResourceProject.is_delete == 0)
  84. # 计算总数
  85. total_count = data_query.count()
  86. # 分页查询
  87. offset = (page - 1) * pageSize
  88. projects = data_query.offset(offset).limit(pageSize).all()
  89. # 构造结果
  90. result_items = [project.to_dict() for project in projects]
  91. result = {
  92. "code": 200,
  93. 'msg': '查询成功',
  94. 'total': total_count,
  95. 'totalPages': (total_count + pageSize - 1) // pageSize,
  96. 'page': page,
  97. 'pageSize': pageSize,
  98. 'data': result_items
  99. }
  100. return result
  101. #查询详情
  102. @router.get("/projects/{project_id}/")
  103. def get_project_by_id(project_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  104. # 添加条件过滤 is_delete 为 0 的项目
  105. project = db.query(WaterResourceProject).filter(WaterResourceProject.is_delete == 0, WaterResourceProject.id == project_id).first()
  106. if not project:
  107. raise HTTPException(status_code=404, detail="项目不存在或已被标记为删除")
  108. return {"code": 200, "msg": "查询成功", "project": project.to_dict()}
  109. #修改
  110. @router.put("/projects/{project_id}/")
  111. def update_project(project_id: int, update_data: WaterResourceProjectSchema, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  112. # 创建一个新的查询对象,不包含过滤条件
  113. project = db.query(WaterResourceProject).get(project_id)
  114. if project is None or project.is_delete == 1:
  115. raise HTTPException(status_code=404, detail="项目不存在或已被标记为删除")
  116. try:
  117. # 只更新传入的非空字段
  118. for key, value in update_data.dict(exclude_none=True).items():
  119. setattr(project, key, value)
  120. db.commit()
  121. db.refresh(project)
  122. return {"code": 200, "msg": "更新成功", "project": project.to_dict()}
  123. except Exception as e:
  124. db.rollback()
  125. raise HTTPException(status_code=400, detail=str(e))
  126. # 救灾人员单位
  127. # Pydantic 模型
  128. class UnitSchema(BaseModel):
  129. id: int = None
  130. name: str = None
  131. category: str = None
  132. address: str = None
  133. equipment: str = None
  134. training: str = None
  135. responsible_person: str = None
  136. contact_number: str = None
  137. longitude: float = None
  138. latitude: float = None,
  139. position:str = None,
  140. team_size:int = None,
  141. supervisor_unit:str=None,
  142. is_delete: int = 0
  143. class UnitListSchema(BaseModel):
  144. units: List[UnitSchema] = Field(default_factory=list)
  145. class Config:
  146. orm_mode = True
  147. #创建
  148. @router.post("/rescue_units/")
  149. def create_units(unit_list_data: UnitListSchema,
  150. user_id=Depends(valid_access_token), db: Session = Depends(get_db)):
  151. units = unit_list_data.units
  152. if not units: # 确保列表不为空
  153. raise HTTPException(status_code=400, detail="单位列表不能为空")
  154. try:
  155. new_units = [] # 创建一个空列表来存储新对象
  156. for unit_data in units:
  157. new_unit = Unit(**unit_data.dict(exclude_none=True))
  158. db.add(new_unit)
  159. new_units.append(new_unit)
  160. db.commit()
  161. unit_ids = [unit.id for unit in new_units] # 获取所有新对象的ID
  162. return {"code": 200, "msg": "创建成功", "unit_ids": unit_ids}
  163. except Exception as e:
  164. db.rollback()
  165. raise HTTPException(status_code=400, detail=str(e))
  166. #删除
  167. @router.delete("/rescue_units/{unit_id}/")
  168. def delete_unit(unit_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  169. unit = db.query(Unit).get(unit_id)
  170. if not unit:
  171. raise HTTPException(status_code=404, detail="单位不存在")
  172. try:
  173. # 更新 is_delete 字段为 1,而不是删除记录
  174. unit.is_delete = 1
  175. db.commit()
  176. return {"code": 200, "msg": "删除成功"}
  177. except Exception as e:
  178. db.rollback()
  179. raise HTTPException(status_code=400, detail=str(e))
  180. # class UnitListQueryParams(BaseModel):
  181. # page: int = Field(default=1, gt=0)
  182. # page_size: int = Field(default=10, gt=0)
  183. #查询列表
  184. @router.get("/rescue_units/")
  185. def get_units(page: int = Query(default=1, gt=0),
  186. pageSize: int = Query(default=10, gt=0),
  187. db: Session = Depends(get_db),
  188. user_id=Depends(valid_access_token)):
  189. # 应用过滤条件,仅查询未被删除的单位
  190. data_query = db.query(Unit).filter(Unit.is_delete == 0)
  191. # 计算总数
  192. total_count = data_query.count()
  193. # 分页查询
  194. offset = (page - 1) * pageSize
  195. units = data_query.offset(offset).limit(pageSize).all()
  196. # 构造结果
  197. result_items = [unit.to_dict() for unit in units]
  198. result = {
  199. "code": 200,
  200. 'msg': '查询成功',
  201. 'total': total_count,
  202. 'totalPages': (total_count + pageSize - 1) // pageSize,
  203. 'page': page,
  204. 'pageSize': pageSize,
  205. 'data': result_items
  206. }
  207. return result
  208. #查询详情
  209. @router.get("/rescue_units/{unit_id}/")
  210. def get_unit_by_id(unit_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  211. # unit = db.query(Unit).filter(Unit.is_delete == 0).get(unit_id)
  212. unit = db.query(Unit).filter_by(id=unit_id, is_delete=0).first()
  213. if not unit:
  214. raise HTTPException(status_code=404, detail="单位不存在或已被标记为删除")
  215. return {"code": 200, "msg": "查询成功", "unit": unit.to_dict()}
  216. #修改
  217. @router.put("/rescue_units/{unit_id}/")
  218. def update_unit(unit_id: int, update_data: UnitSchema, db: Session = Depends(get_db),
  219. user_id=Depends(valid_access_token)):
  220. # 根据id和is_delete字段获取单位
  221. unit = db.query(Unit).filter_by(id=unit_id, is_delete=0).first()
  222. if not unit:
  223. raise HTTPException(status_code=404, detail="单位不存在或已被标记为删除")
  224. try:
  225. # 更新非空字段,排除id字段
  226. for key, value in update_data.dict(exclude_none=True).items():
  227. # 确保不更新id字段
  228. if key != 'id':
  229. setattr(unit, key, value)
  230. db.commit()
  231. db.refresh(unit)
  232. return {"code": 200, "msg": "更新成功", "unit": unit.to_dict()}
  233. except Exception as e:
  234. db.rollback()
  235. raise HTTPException(status_code=400, detail=str(e))
  236. #救援人员接口
  237. class RescuePersonnelSchema(BaseModel):
  238. id: int = None
  239. name: str = None
  240. contact_number: str = None
  241. gender: str = None
  242. current_address: str = None
  243. position: str = None
  244. unit_id: int = None
  245. unit_name: str = None
  246. is_delete: int = 0
  247. class Config:
  248. orm_mode = True
  249. class RescuePersonnelListSchema(BaseModel):
  250. personnel_list: List[RescuePersonnelSchema] = []
  251. class Config:
  252. orm_mode = True
  253. #创建
  254. @router.post("/rescue_personnel/")
  255. def create_rescue_personnel(personnel_list_data: RescuePersonnelListSchema,
  256. user_id=Depends(valid_access_token), db: Session = Depends(get_db)):
  257. personnel_list = personnel_list_data.personnel_list
  258. if not personnel_list: # 确保列表不为空
  259. raise HTTPException(status_code=400, detail="人员列表不能为空")
  260. try:
  261. new_personnel_objects = [] # 创建一个空列表来存储新对象
  262. for personnel_data in personnel_list:
  263. new_personnel = RescuePersonnel(**personnel_data.dict(exclude_none=True))
  264. db.add(new_personnel)
  265. new_personnel_objects.append(new_personnel)
  266. db.commit()
  267. personnel_ids = [personnel.id for personnel in new_personnel_objects] # 获取所有新对象的ID
  268. return {"code": 200, "msg": "创建成功", "personnel_ids": personnel_ids}
  269. except Exception as e:
  270. db.rollback()
  271. raise HTTPException(status_code=400, detail=str(e))
  272. #删除
  273. @router.delete("/rescue_personnel/{personnel_id}/")
  274. def delete_rescue_personnel(personnel_id: int,
  275. user_id=Depends(valid_access_token),db: Session = Depends(get_db)):
  276. personnel = db.query(RescuePersonnel).get(personnel_id)
  277. if not personnel:
  278. raise HTTPException(status_code=404, detail="救灾人员不存在")
  279. personnel.is_delete = 1
  280. db.commit()
  281. return {"code": 200, "msg": "删除成功"}
  282. # 查询列表
  283. @router.get("/rescue_personnel/")
  284. def get_rescue_personnel(page: int = Query(default=1, gt=0),
  285. pageSize: int = Query(default=10, gt=0), db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  286. # 应用过滤条件,仅查询未被删除的人员
  287. data_query = db.query(RescuePersonnel).filter(RescuePersonnel.is_delete == 0)
  288. # 计算总数
  289. total_count = data_query.count()
  290. # 分页查询
  291. offset = (page - 1) * pageSize
  292. personnels = data_query.offset(offset).limit(pageSize).all()
  293. # 构造结果
  294. # result_items = []
  295. # for personnel in personnels:
  296. # personnel_dict = personnel.to_dict()
  297. # # 通过 unit_id 获取单位名称
  298. # if personnel.unit_id: # 确保 unit_id 不为 None
  299. # unit = db.query(Unit).filter(Unit.id == personnel.unit_id).first()
  300. # if unit:
  301. # personnel_dict['unit_name'] = unit.name
  302. # else:
  303. # personnel_dict['unit_name'] = None # 或者其他默认值
  304. # else:
  305. # personnel_dict['unit_name'] = None # 或者其他默认值
  306. # result_items.append(personnel_dict)
  307. result_items = [personnel.to_dict() for personnel in personnels]
  308. result = {
  309. "code": 200,
  310. 'msg': '查询成功',
  311. 'total': total_count,
  312. 'totalPages': (total_count + pageSize - 1) // pageSize,
  313. 'page': page,
  314. 'pageSize': pageSize,
  315. 'data': result_items
  316. }
  317. return result
  318. #查询详情
  319. @router.get("/rescue_personnel/{personnel_id}/")
  320. def get_rescue_personnel_by_id(personnel_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  321. # unit = db.query(Unit).filter_by(id=unit_id, is_delete=0).first()
  322. personnel = db.query(RescuePersonnel).filter_by(id = personnel_id, is_delete = 0).first()
  323. if not personnel:
  324. raise HTTPException(status_code=404, detail="救灾人员不存在或已被标记为删除")
  325. return {"code": 200, "msg": "查询成功", "personnel": personnel.to_dict()}
  326. # @router.put("/rescue_units/{unit_id}/")
  327. # def update_unit(unit_id: int, update_data: UnitSchema, db: Session = Depends(get_db),
  328. # user_id=Depends(valid_access_token)):
  329. # # 根据id和is_delete字段获取单位
  330. # unit = db.query(Unit).filter_by(id=unit_id, is_delete=0).first()
  331. # if not unit:
  332. # raise HTTPException(status_code=404, detail="单位不存在或已被标记为删除")
  333. #
  334. # try:
  335. # # 更新非空字段,排除id字段
  336. # for key, value in update_data.dict(exclude_none=True).items():
  337. # # 确保不更新id字段
  338. # if key != 'id':
  339. # setattr(unit, key, value)
  340. # db.commit()
  341. # db.refresh(unit)
  342. # return {"code": 200, "msg": "更新成功", "unit": unit.to_dict()}
  343. # except Exception as e:
  344. # db.rollback()
  345. # raise HTTPException(status_code=400, detail=str(e))
  346. #修改
  347. @router.put("/rescue_personnel/{personnel_id}/")
  348. def update_rescue_personnel(personnel_id: int, update_data: RescuePersonnelSchema, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  349. personnel = db.query(RescuePersonnel).filter_by(id=personnel_id, is_delete=0).first()
  350. if not personnel:
  351. raise HTTPException(status_code=404, detail="救灾人员不存在或已被标记为删除")
  352. try:
  353. # 更新非空字段,排除id字段
  354. for key, value in update_data.dict(exclude_none=True).items():
  355. if key != 'id': # 确保不更新id字段
  356. setattr(personnel, key, value)
  357. personnel.modified_time = datetime.utcnow() # 更新修改时间
  358. db.commit()
  359. db.refresh(personnel)
  360. return {"code": 200, "msg": "更新成功", "personnel": personnel.to_dict()}
  361. except Exception as e:
  362. db.rollback()
  363. raise HTTPException(status_code=400, detail=str(e))
  364. class RescueStationSchema(BaseModel):
  365. id: int = None
  366. fwdx: str = None
  367. data_id: str = uuid.uuid1()
  368. zj: str = None
  369. lng: str = None
  370. cd_time: str = None
  371. fwdmc: str = None
  372. fwnr: str = None
  373. add_time: str = None
  374. cd_operation: str = None
  375. fwdlx: str = None
  376. lxdh: str = None
  377. kfsj: str = None
  378. lat: str = None
  379. fwdjj: str = None
  380. lxr: str = None
  381. fid: str = None
  382. fwdzt: str = None
  383. fwdaddr: str = None,
  384. ssqx:str = None
  385. is_delete: int = 0
  386. class Config:
  387. orm_mode = True
  388. class RescueStationListSchema(BaseModel):
  389. stations: List[RescueStationSchema] = Field(default_factory=list)
  390. class Config:
  391. orm_mode = True
  392. #救助站管理
  393. @router.post("/rescue_stations/")
  394. def create_rescue_stations(rescue_station_list_data: RescueStationListSchema, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  395. stations = rescue_station_list_data.stations
  396. if not stations: # 确保列表不为空
  397. raise HTTPException(status_code=400, detail="救助站列表不能为空")
  398. try:
  399. new_stations = [] # 创建一个空列表来存储新对象
  400. for station_data in stations:
  401. new_station = RescueStation(**station_data.dict(exclude_none=True))
  402. db.add(new_station)
  403. new_stations.append(new_station)
  404. db.commit()
  405. station_ids = [station.id for station in new_stations] # 获取所有新对象的ID
  406. return {"code": 200, "msg": "创建成功", "station_ids": station_ids}
  407. except Exception as e:
  408. db.rollback()
  409. raise HTTPException(status_code=400, detail=str(e))
  410. @router.delete("/rescue_stations/{station_id}/")
  411. def delete_rescue_station(station_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  412. station = db.query(RescueStation).filter_by(id=station_id, is_delete=0).first()
  413. if not station:
  414. raise HTTPException(status_code=404, detail="救助站不存在")
  415. try:
  416. # 更新 is_delete 字段为 1,而不是删除记录
  417. station.is_delete = 1
  418. db.commit()
  419. return {"code": 200, "msg": "删除成功"}
  420. except Exception as e:
  421. db.rollback()
  422. raise HTTPException(status_code=400, detail=str(e))
  423. # class RescueStationListQueryParams(BaseModel):
  424. # page: int = Field(default=1, gt=0)
  425. # page_size: int = Field(default=10, gt=0)
  426. @router.get("/rescue_stations/")
  427. def get_rescue_stations(page: int = Query(default=1, gt=0),
  428. pageSize: int = Query(default=10, gt=0), db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  429. # 应用过滤条件,仅查询未被删除的救助站
  430. data_query = db.query(RescueStation).filter(RescueStation.is_delete == 0)
  431. # 计算总数
  432. total_count = data_query.count()
  433. # 分页查询
  434. offset = (page - 1) * pageSize
  435. stations = data_query.offset(offset).limit(pageSize).all()
  436. # 构造结果
  437. result_items = [station.to_dict() for station in stations]
  438. result = {
  439. "code": 200,
  440. 'msg': '查询成功',
  441. 'total': total_count,
  442. 'totalPages': (total_count + pageSize - 1) // pageSize,
  443. 'page': page,
  444. 'pageSize': pageSize,
  445. 'data': result_items
  446. }
  447. return result
  448. @router.get("/rescue_stations/{station_id}/")
  449. def get_rescue_station_by_id(station_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  450. station = db.query(RescueStation).filter_by(id=station_id, is_delete=0).first()
  451. if not station:
  452. raise HTTPException(status_code=404, detail="救助站不存在或已被标记为删除")
  453. return {"code": 200, "msg": "查询成功", "station": station.to_dict()}
  454. @router.put("/rescue_stations/{station_id}/")
  455. def update_rescue_station(station_id: int, update_data: RescueStationSchema, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  456. station = db.query(RescueStation).filter_by(id=station_id, is_delete=0).first()
  457. if not station:
  458. raise HTTPException(status_code=404, detail="救助站不存在或已被标记为删除")
  459. try:
  460. # 更新非空字段,排除id字段
  461. for key, value in update_data.dict(exclude_none=True).items():
  462. # 确保不更新id字段
  463. if key != 'id':
  464. setattr(station, key, value)
  465. db.commit()
  466. db.refresh(station)
  467. return {"code": 200, "msg": "更新成功", "station": station.to_dict()}
  468. except Exception as e:
  469. db.rollback()
  470. raise HTTPException(status_code=400, detail=str(e))
  471. #人防工程基本信息
  472. class DefenseProjectSchema(BaseModel):
  473. id: Optional[int] = None
  474. data_id: Optional[str] = None
  475. gcmc: Optional[str] = None
  476. jsdw: Optional[str] = None
  477. whdw: Optional[str] = None
  478. rfzyjlgcs: Optional[str] = None
  479. jsdd: Optional[str] = None
  480. cd_operation: Optional[str] = None
  481. yjdxsmj: Optional[float] = None
  482. sjdxsmj: Optional[float] = None
  483. cd_time: Optional[datetime] = None
  484. add_time: Optional[datetime] = None
  485. jldw: Optional[str] = None
  486. jsdwdm: Optional[str] = None
  487. kgsj: Optional[datetime] = None
  488. stdw: Optional[str] = None
  489. cd_batch: Optional[str] = None
  490. rfsjdwdm: Optional[str] = None
  491. rfsjdw: Optional[str] = None
  492. ybrs: Optional[float] = None
  493. stdwdm: Optional[str] = None
  494. whdwdm: Optional[str] = None
  495. jldwdm: Optional[str] = None
  496. rfzjlgcs: Optional[str] = None
  497. gcid: Optional[str] = None
  498. extend2: Optional[str] = None
  499. data_area: Optional[str] = None
  500. extend1: Optional[str] = None
  501. jgsj: Optional[datetime] = None
  502. rffhsbdw: Optional[str] = None
  503. rffhsbdwdm: Optional[str] = None
  504. jingdu: Optional[str] = None
  505. weidu: Optional[str] = None
  506. is_delete: Optional[bool] = False
  507. class Config:
  508. orm_mode = True
  509. class DefenseProjectListSchema(BaseModel):
  510. projects: List[DefenseProjectSchema] = Field(default_factory=list)
  511. class Config:
  512. orm_mode = True
  513. # 创建
  514. @router.post("/defense_projects/")
  515. def create_defense_projects(defense_project_list_data: DefenseProjectListSchema, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  516. projects = defense_project_list_data.projects
  517. if not projects: # 确保列表不为空
  518. raise HTTPException(status_code=400, detail="项目列表不能为空")
  519. try:
  520. new_projects = [] # 创建一个空列表来存储新对象
  521. for project_data in projects:
  522. new_project = DefenseProject(**project_data.dict(exclude_none=True))
  523. new_projects.append(new_project)
  524. db.add_all(new_projects)
  525. db.commit()
  526. project_ids = [project.id for project in new_projects] # 获取所有新对象的ID
  527. return {"code": 200, "msg": "创建成功", "project_ids": project_ids}
  528. except Exception as e:
  529. db.rollback()
  530. raise HTTPException(status_code=400, detail=str(e))
  531. # 删除
  532. @router.delete("/defense_projects/{project_id}/")
  533. def delete_defense_project(project_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  534. # project = db.query(DefenseProject).get(project_id)
  535. project = db.query(DefenseProject).filter_by(id=project_id, is_delete=0).first()
  536. if not project:
  537. raise HTTPException(status_code=404, detail="项目不存在")
  538. try:
  539. # 更新 is_delete 字段为 True,而不是删除记录
  540. project.is_delete = True
  541. db.commit()
  542. return {"code": 200, "msg": "删除成功"}
  543. except Exception as e:
  544. db.rollback()
  545. raise HTTPException(status_code=400, detail=str(e))
  546. # 查询列表
  547. class DefenseProjectListQueryParams(BaseModel):
  548. page: int = Field(default=1, gt=0)
  549. page_size: int = Field(default=10, gt=0)
  550. # page: int = Query(1, gt=0, description='页码'),
  551. # page_size: int = Query(10, gt=0, description='pageSize'),
  552. @router.get("/defense_projects/")
  553. def get_defense_projects(page: int = Query(default=1, gt=0),
  554. pageSize: int = Query(default=10, gt=0), db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  555. # 应用过滤条件,仅查询未被删除的项目
  556. data_query = db.query(DefenseProject).filter(DefenseProject.is_delete == False)
  557. # 计算总数
  558. total_count = data_query.count()
  559. # 分页查询
  560. offset = (page - 1) * pageSize
  561. projects = data_query.offset(offset).limit(pageSize).all()
  562. # 构造结果
  563. # result_items = [project.to_dict() for project in projects]
  564. result = {
  565. "code": 200,
  566. 'msg': '查询成功',
  567. 'total': total_count,
  568. 'totalPages': (total_count + pageSize - 1) // pageSize,
  569. 'page': page,
  570. 'pageSize': pageSize,
  571. 'data': projects
  572. }
  573. return result
  574. # 查询详情
  575. @router.get("/defense_projects/{project_id}/")
  576. def get_defense_project_by_id(project_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  577. # project = db.query(DefenseProject).filter_by(id=project_id, is_delete=0).first()
  578. project = db.query(DefenseProject).filter_by(id=project_id, is_delete=0).first()
  579. if not project:
  580. raise HTTPException(status_code=404, detail="项目不存在或已被标记为删除")
  581. return {"code": 200, "msg": "查询成功", "project": project.to_dict()}
  582. # 修改
  583. @router.put("/defense_projects/{project_id}/")
  584. def update_defense_project(project_id: int, update_data: DefenseProjectSchema, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  585. project = db.query(DefenseProject).filter_by(id=project_id, is_delete=False).first()
  586. if not project:
  587. raise HTTPException(status_code=404, detail="项目不存在或已被标记为删除")
  588. try:
  589. # 更新非空字段,排除id字段
  590. for key, value in update_data.dict(exclude_none=True).items():
  591. # 确保不更新id字段
  592. if key != 'id':
  593. setattr(project, key, value)
  594. project.cd_time = datetime.utcnow() # 更新修改时间
  595. db.commit()
  596. db.refresh(project)
  597. return {"code": 200, "msg": "更新成功", "project": project.to_dict()}
  598. except Exception as e:
  599. db.rollback()
  600. raise HTTPException(status_code=400, detail=str(e))
  601. #避难场所接口
  602. class ShelterSchema(BaseModel):
  603. id: Optional[int] = None
  604. data_id: Optional[str] = None
  605. admin_area: Optional[str] = None
  606. full_name: Optional[str] = None
  607. address: Optional[str] = None
  608. incident_type: Optional[str] = None
  609. shelter_type: Optional[str] = None
  610. total_area: Optional[float] = None
  611. indoor_area: Optional[float] = None
  612. capacity: Optional[float] = None
  613. supplies: Optional[str] = None
  614. facilities: Optional[str] = None
  615. is_delete: Optional[bool] = False
  616. class Config:
  617. orm_mode = True
  618. class ShelterListSchema(BaseModel):
  619. shelters: List[ShelterSchema] = Field(default_factory=list)
  620. class Config:
  621. orm_mode = True
  622. # 创建
  623. @router.post("/shelters/")
  624. def create_shelters(shelter_list_data: ShelterListSchema, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  625. shelters = shelter_list_data.shelters
  626. if not shelters:
  627. raise HTTPException(status_code=400, detail="避难场所列表不能为空")
  628. try:
  629. new_shelters = []
  630. for shelter_data in shelters:
  631. new_shelter = Shelter(**shelter_data.dict(exclude_none=True))
  632. new_shelters.append(new_shelter)
  633. db.add_all(new_shelters)
  634. db.commit()
  635. shelter_ids = [shelter.id for shelter in new_shelters]
  636. return {"code": 200, "msg": "创建成功", "shelter_ids": shelter_ids}
  637. except Exception as e:
  638. db.rollback()
  639. raise HTTPException(status_code=400, detail=str(e))
  640. # 删除
  641. @router.delete("/shelters/{shelter_id}/")
  642. def delete_shelter(shelter_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  643. shelter = db.query(Shelter).filter_by(id=shelter_id, is_delete=0).first()
  644. if not shelter:
  645. raise HTTPException(status_code=404, detail="避难场所不存在")
  646. try:
  647. shelter.is_delete = True
  648. db.commit()
  649. return {"code": 200, "msg": "删除成功"}
  650. except Exception as e:
  651. db.rollback()
  652. raise HTTPException(status_code=400, detail=str(e))
  653. # 查询列表
  654. #
  655. @router.get("/shelters/")
  656. def get_shelters(page: int = Query(default=1, gt=0),
  657. pageSize: int = Query(default=10, gt=0), db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  658. data_query = db.query(Shelter).filter(Shelter.is_delete == False)
  659. total_count = data_query.count()
  660. offset = (page - 1) * pageSize
  661. shelters = data_query.offset(offset).limit(pageSize).all()
  662. result_items = [shelter.to_dict() for shelter in shelters]
  663. result = {
  664. "code": 200,
  665. 'msg': '查询成功',
  666. 'total': total_count,
  667. 'totalPages': (total_count + pageSize - 1) // pageSize,
  668. 'page': page,
  669. 'pageSize': pageSize,
  670. 'data': result_items
  671. }
  672. return result
  673. # 查询详情
  674. @router.get("/shelters/{shelter_id}/")
  675. def get_shelter_by_id(shelter_id: int, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  676. shelter = db.query(Shelter).filter_by(id=shelter_id, is_delete=0).first()
  677. if not shelter:
  678. raise HTTPException(status_code=404, detail="避难场所不存在或已被标记为删除")
  679. return {"code": 200, "msg": "查询成功", "shelter": shelter.to_dict()}
  680. # 修改
  681. @router.put("/shelters/{shelter_id}/")
  682. def update_shelter(shelter_id: int, update_data: ShelterSchema, db: Session = Depends(get_db), user_id=Depends(valid_access_token)):
  683. shelter = db.query(Shelter).filter_by(id=shelter_id, is_delete=False).first()
  684. if not shelter:
  685. raise HTTPException(status_code=404, detail="避难场所不存在或已被标记为删除")
  686. try:
  687. for key, value in update_data.dict(exclude_none=True).items():
  688. if key != 'id':
  689. setattr(shelter, key, value)
  690. shelter.modified_time = datetime.utcnow()
  691. db.commit()
  692. db.refresh(shelter)
  693. return {"code": 200, "msg": "更新成功", "shelter": shelter.to_dict()}
  694. except Exception as e:
  695. db.rollback()
  696. raise HTTPException(status_code=400, detail=str(e))