__init__.py 45 KB

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