emergency_resources.py 54 KB

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