__init__.py 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends, Query, HTTPException, status
  4. from common.security import valid_access_token
  5. from fastapi.responses import JSONResponse
  6. from sqlalchemy.orm import Session
  7. from sqlalchemy import and_, or_
  8. from sqlalchemy.sql import func
  9. from common.auth_user import *
  10. from pydantic import BaseModel
  11. from database import get_db
  12. from typing import List
  13. from models import *
  14. from utils import *
  15. import traceback
  16. import json
  17. router = APIRouter()
  18. @router.get('/type/list')
  19. async def get_dict_types(
  20. db: Session = Depends(get_db), # 假设 get_db 是获取数据库会话的依赖项
  21. pageNum: int = Query(1, gt=0),
  22. pageSize: int = Query(10, gt=0),
  23. dictName: str = Query(None, max_length=100),
  24. dictType: str = Query(None, max_length=100),
  25. beginTime: datetime = Query(None),
  26. endTime: datetime = Query(None)
  27. ):
  28. try:
  29. # 构建查询
  30. query = db.query(SysDictType)
  31. query = query.filter(SysDictType.del_flag!='2')
  32. # 添加查询条件
  33. if dictName:
  34. query = query.filter(SysDictType.dict_name.like(f'%{dictName}%'))
  35. if dictType:
  36. query = query.filter(SysDictType.dict_type.like(f'%{dictType}%'))
  37. if beginTime and endTime:
  38. query = query.filter(
  39. and_(
  40. SysDictType.create_time >= beginTime,
  41. SysDictType.create_time <= endTime
  42. )
  43. )
  44. # 计算总记录数
  45. total_count = query.count()
  46. # 计算分页
  47. offset = (pageNum - 1) * pageSize
  48. dict_types = query.offset(offset).limit(pageSize).all()
  49. # 转换为字典
  50. dict_type_dicts = [
  51. {
  52. "dictId": d.dict_id,
  53. "dictName": d.dict_name,
  54. "dictType": d.dict_type,
  55. "remark": d.remark,
  56. "createTime": d.create_time.strftime('%Y-%m-%d %H:%M:%S') if d.create_time else ''
  57. }
  58. for d in dict_types
  59. ]
  60. # 构建返回结果
  61. result = {
  62. "total": total_count,
  63. "rows": dict_type_dicts,
  64. "code": 200,
  65. "msg": "查询成功"
  66. }
  67. return result
  68. except Exception as e:
  69. # 处理异常
  70. raise HTTPException(status_code=500, detail=str(e))
  71. @router.get('/type/optionselect')
  72. async def get_dict_types_optionselect(
  73. db: Session = Depends(get_db), # 假设 get_db 是获取数据库会话的依赖项
  74. ):
  75. try:
  76. # 构建查询
  77. query = db.query(SysDictType)
  78. query = query.filter(SysDictType.del_flag!='2')
  79. # 计算总记录数
  80. dict_types = query.all()
  81. # 转换为字典
  82. dict_type_dicts = [
  83. {
  84. "dictId": d.dict_id,
  85. "dictName": d.dict_name,
  86. "dictType": d.dict_type,
  87. "remark": d.remark,
  88. "createTime": d.create_time.strftime('%Y-%m-%d %H:%M:%S') if d.create_time else ''
  89. }
  90. for d in dict_types
  91. ]
  92. # 构建返回结果
  93. result = {
  94. "data": dict_type_dicts,
  95. "code": 200,
  96. "msg": "查询成功"
  97. }
  98. return result
  99. except Exception as e:
  100. # 处理异常
  101. raise HTTPException(status_code=500, detail=str(e))
  102. @router.get('/type/{dictId}')
  103. async def get_dict_types_optionselect(
  104. dictId: str,
  105. db: Session = Depends(get_db), # 假设 get_db 是获取数据库会话的依赖项
  106. body = Depends(remove_xss_json),
  107. user: AuthUser = Depends(get_auth_user)
  108. ):
  109. try:
  110. # 构建查询
  111. query = db.query(SysDictType)
  112. query = query.filter(SysDictType.dict_id==dictId)
  113. query = query.filter(SysDictType.del_flag!='2')
  114. dict_types = query.first()
  115. # 转换为字典
  116. dict_type_dicts ={
  117. "dictId": dict_types.dict_id,
  118. "dictName": dict_types.dict_name,
  119. "dictType": dict_types.dict_type,
  120. "remark": dict_types.remark,
  121. "createTime": dict_types.create_time.strftime('%Y-%m-%d %H:%M:%S') if dict_types.create_time else ''
  122. }
  123. # 构建返回结果
  124. result = {
  125. "data": dict_type_dicts,
  126. "code": 200,
  127. "msg": "查询成功"
  128. }
  129. return result
  130. except Exception as e:
  131. # 处理异常
  132. raise HTTPException(status_code=500, detail=str(e))
  133. class DictTypeCreateForm(BaseModel):
  134. dictName: str
  135. dictType: str
  136. remark: str = None
  137. @router.post("/type")
  138. async def create_dict_type(
  139. form_data: DictTypeCreateForm,
  140. db: Session = Depends(get_db),
  141. body = Depends(remove_xss_json),
  142. user_id = Depends(valid_access_token)
  143. ):
  144. try:
  145. # 从请求数据创建一个新的 SysDictType 实例
  146. new_dict_type = SysDictType(
  147. dict_name=form_data.dictName,
  148. dict_type=form_data.dictType,
  149. remark=form_data.remark,
  150. create_time=datetime.now(), # 假设自动设置创建时间
  151. update_time=datetime.now() # 假设自动设置更新时间
  152. )
  153. # 添加到数据库会话并提交
  154. db.add(new_dict_type)
  155. db.commit()
  156. db.refresh(new_dict_type) # 可选,如果需要刷新实例状态
  157. # 构建并返回响应
  158. return {
  159. "code": 200,
  160. "msg": "操作成功",
  161. "data": None # 根据你的响应示例,data 为 null
  162. }
  163. except Exception as e:
  164. # 处理异常
  165. raise HTTPException(status_code=500, detail=str(e))
  166. class DictTypeUpdataForm(BaseModel):
  167. createTime : str
  168. dictId : str
  169. dictName: str
  170. dictType: str
  171. remark: str = None
  172. @router.put("/type")
  173. async def updata_dict_type(
  174. form_data: DictTypeUpdataForm,
  175. db: Session = Depends(get_db),
  176. body = Depends(remove_xss_json),
  177. user_id = Depends(valid_access_token)
  178. ):
  179. try:
  180. # 从请求数据创建一个新的 SysDictType 实例
  181. dict_type = db.query(SysDictType).filter(SysDictType.dict_id == form_data.dictId and SysDictType.del_flag != '2').first()
  182. if not dict_type:
  183. detail = "dict_type不存在"
  184. raise HTTPException(status_code=404, detail="dict_type不存在")
  185. query = db.query(SysDictData)
  186. query = query.filter(SysDictData.dict_type == dict_type.dict_type)
  187. query = query.filter(SysDictData.del_flag != '2')
  188. # dict_data = db.query(SysDictData).filter_by(dict_type==dict_type and del_flag != '2').all()
  189. for dict_data in query.all():
  190. dict_data.dict_type=form_data.dictType
  191. dict_type.dict_name = form_data.dictName
  192. dict_type.dict_type = form_data.dictType
  193. dict_type.remark = form_data.remark
  194. dict_type.update_time = datetime.now()
  195. # 添加到数据库会话并提交
  196. db.commit()
  197. # db.refresh(new_dict_type) # 可选,如果需要刷新实例状态
  198. # 构建并返回响应
  199. return {
  200. "code": 200,
  201. "msg": "操作成功",
  202. "data": None # 根据你的响应示例,data 为 null
  203. }
  204. except Exception as e:
  205. # 处理异常
  206. if str(e)=='':
  207. e=detail
  208. raise HTTPException(status_code=500, detail=str(e))
  209. @router.delete("/type/{dictId}")
  210. @router.delete("/type/delete/{dictId}") # 使用 ID 来标识要删除的接口
  211. async def delete_dict_type(
  212. dictId: int,
  213. db: Session = Depends(get_db),
  214. body = Depends(remove_xss_json),
  215. user_id = Depends(valid_access_token)
  216. ):
  217. try:
  218. # 从数据库中获取要删除的 OneShareApiEntity 实例
  219. dict_type = db.query(SysDictType).filter(SysDictType.dict_id == dictId and SysDictType.del_flag != '2').first()
  220. if not dict_type:
  221. detail = "dict_type不存在"
  222. raise HTTPException(status_code=404, detail="dict_type不存在")
  223. dict_type.del_flag = '2'
  224. # 删除实例
  225. # db.delete(api)
  226. db.commit()
  227. # 构建并返回响应
  228. return {
  229. "code": 200,
  230. "msg": "操作成功",
  231. "data": None
  232. }
  233. except Exception as e:
  234. # 处理异常
  235. if str(e)=='':
  236. e=detail
  237. raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
  238. @router.get('/data/list')
  239. async def get_dict_data_by_type(
  240. dictLabel:str = Query(None),
  241. dictType: str = Query(None, max_length=100),
  242. pageNum: int = Query(1, gt=0),
  243. pageSize: int = Query(10, gt=0),
  244. db: Session = Depends(get_db),
  245. body = Depends(remove_xss_json),
  246. user_id = Depends(valid_access_token)
  247. ):
  248. try:
  249. # 根据 dict_type 查询字典数据
  250. # dict_data = db.query(SysDictData).filter_by(dict_type=dictType).all()
  251. query = db.query(SysDictData)
  252. # 添加查询条件
  253. # if dictType:
  254. query = query.filter(SysDictData.dict_type==f'{dictType}')
  255. query = query.filter(SysDictData.del_flag != '2')
  256. if dictLabel:
  257. query = query.filter(SysDictData.dict_label.like(f'%{dictLabel}%'))
  258. # 计算总记录数
  259. total_count = query.count()
  260. # 排序
  261. query = query.order_by(SysDictData.dict_sort.asc())
  262. # 计算分页
  263. offset = (pageNum - 1) * pageSize
  264. dict_data = query.offset(offset).limit(pageSize).all()
  265. # 转换为字典
  266. dict_data_list = [
  267. {
  268. "dictCode": d.dict_code,
  269. "dictSort": d.dict_sort,
  270. "dictLabel": d.dict_label,
  271. "dictValue": d.dict_value,
  272. "dictType": d.dict_type,
  273. "cssClass": d.css_class,
  274. "listClass": d.list_class,
  275. "isDefault": d.is_default,
  276. "remark": d.remark,
  277. "createTime": d.create_time.strftime('%Y-%m-%d %H:%M:%S') if d.create_time else ''
  278. }
  279. for d in dict_data
  280. ]
  281. # 构建返回结果
  282. result = {
  283. "total": total_count,
  284. "rows": dict_data_list,
  285. "code": 200,
  286. "msg": "查询成功"
  287. }
  288. return result
  289. except Exception as e:
  290. # 处理异常
  291. raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
  292. @router.get('/data/{dictCode}')
  293. async def get_dict_data_by_type(
  294. dictCode: str ,
  295. db: Session = Depends(get_db),
  296. body = Depends(remove_xss_json),
  297. user_id = Depends(valid_access_token)
  298. ):
  299. try:
  300. # 根据 dict_type 查询字典数据
  301. # dict_data = db.query(SysDictData).filter_by(dict_type=dictType).all()
  302. query = db.query(SysDictData)
  303. # 添加查询条件
  304. # if dictType:
  305. query = query.filter(SysDictData.dict_code==dictCode)
  306. query = query.filter(SysDictData.del_flag != '2')
  307. d = query.first()
  308. # 转换为字典
  309. dict_data_list = {
  310. "dictCode": d.dict_code,
  311. "dictSort": d.dict_sort,
  312. "dictLabel": d.dict_label,
  313. "dictValue": d.dict_value,
  314. "dictType": d.dict_type,
  315. "cssClass": d.css_class,
  316. "listClass": d.list_class,
  317. "isDefault": d.is_default,
  318. "remark": d.remark,
  319. "createTime": d.create_time.strftime('%Y-%m-%d %H:%M:%S') if d.create_time else ''
  320. }
  321. # 构建返回结果
  322. result = {
  323. "data": dict_data_list,
  324. "code": 200,
  325. "msg": "查询成功"
  326. }
  327. return result
  328. except Exception as e:
  329. # 处理异常
  330. raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
  331. class DictDataCreateForm(BaseModel):
  332. dictLabel:str
  333. dictValue:str
  334. cssClass:str
  335. listClass:str
  336. dictSort:int
  337. remark:str
  338. dictType:str
  339. @router.post('/data')
  340. async def create_dict_data(
  341. form_data: DictDataCreateForm,
  342. db: Session = Depends(get_db),
  343. body = Depends(remove_xss_json),
  344. user_id = Depends(valid_access_token)
  345. ):
  346. try:
  347. # 创建一个新的 SysDictData 实例
  348. new_dict_data = SysDictData(
  349. dict_sort=form_data.dictSort,
  350. dict_label=form_data.dictLabel,
  351. dict_value=form_data.dictValue,
  352. dict_type=form_data.dictType,
  353. css_class=form_data.cssClass,
  354. list_class=form_data.listClass,
  355. remark=form_data.remark
  356. )
  357. # 添加到会话并提交
  358. db.add(new_dict_data)
  359. db.commit()
  360. db.refresh(new_dict_data) # 可选,如果需要刷新实例状态
  361. # 构建返回结果
  362. result = {
  363. "code": 200,
  364. "msg": "操作成功",
  365. "data": None
  366. }
  367. return result
  368. except Exception as e:
  369. # 处理异常
  370. raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
  371. @router.get('/data/type/{dict_type}')
  372. async def get_dict_data_by_type(
  373. dict_type: str,
  374. db: Session = Depends(get_db),
  375. body = Depends(remove_xss_json),
  376. user_id = Depends(valid_access_token)
  377. ):
  378. try:
  379. # 根据 dict_type 查询字典数据
  380. query = db.query(SysDictData)
  381. query = query.filter(SysDictData.dict_type==dict_type)
  382. query = query.filter(SysDictData.del_flag != '2')
  383. query = query.order_by(SysDictData.dict_sort)
  384. # dict_data = db.query(SysDictData).filter_by(dict_type==dict_type and del_flag != '2').all()
  385. dict_data = query.all()
  386. # 将模型转换为字典
  387. dict_data_list = [
  388. {
  389. "dictCode": d.dict_code,
  390. "dictSort": d.dict_sort,
  391. "dictLabel": d.dict_label,
  392. "dictValue": d.dict_value,
  393. "dictType": d.dict_type,
  394. "cssClass": d.css_class,
  395. "listClass": d.list_class,
  396. "isDefault": d.is_default,
  397. "remark": d.remark,
  398. "createTime": d.create_time.strftime('%Y-%m-%d %H:%M:%S') if d.create_time else ''
  399. }
  400. for d in dict_data
  401. ]
  402. # 构建返回结果
  403. result = {
  404. "code": 200,
  405. "msg": "操作成功",
  406. "data": dict_data_list
  407. }
  408. return result
  409. except Exception as e:
  410. # 处理异常
  411. raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
  412. class DictDataUpdataForm(BaseModel):
  413. dictCode:str
  414. dictLabel:str= None
  415. dictValue:str= None
  416. cssClass:str= None
  417. listClass:str= None
  418. dictSort:int= None
  419. remark:str= None
  420. dictType:str = None
  421. isDefault:str = None
  422. @router.put("/data")
  423. async def updata_dict_type(
  424. form_data: DictDataUpdataForm,
  425. db: Session = Depends(get_db),
  426. body = Depends(remove_xss_json),
  427. user_id = Depends(valid_access_token)
  428. ):
  429. try:
  430. # 从请求数据创建一个新的 SysDictType 实例
  431. query = db.query(SysDictData)
  432. query = query.filter(SysDictData.dict_code == form_data.dictCode)
  433. query = query.filter(SysDictData.del_flag != '2')
  434. # query = db.query(SysDictData).filter(SysDictData.dict_code == form_data.dictCode)
  435. # query = db.query(SysDictData).filter(SysDictData.del_flag != '2')
  436. dict_data = query.first()
  437. if not dict_data:
  438. detail = "dict_data不存在"
  439. raise HTTPException(status_code=404, detail="dict_data不存在")
  440. if "dictSort" in body:
  441. dict_data.dict_sort = body['dictSort']
  442. if form_data.dictLabel:
  443. dict_data.dict_label = form_data.dictLabel
  444. if form_data.dictValue:
  445. dict_data.dict_value = form_data.dictValue
  446. if form_data.dictType:
  447. dict_data.dict_type = form_data.dictType
  448. if 'cssClass' in body:
  449. dict_data.css_class = body['cssClass']
  450. if 'listClass'in body :
  451. dict_data.list_class = body['listClass']
  452. if form_data.remark:
  453. dict_data.remark = form_data.remark
  454. if form_data.isDefault:
  455. dict_data.is_default = form_data.isDefault
  456. # 添加到数据库会话并提交
  457. db.commit()
  458. # db.refresh(new_dict_type) # 可选,如果需要刷新实例状态
  459. # 构建并返回响应
  460. return {
  461. "code": 200,
  462. "msg": "操作成功",
  463. "data": None # 根据你的响应示例,data 为 null
  464. }
  465. except Exception as e:
  466. # 处理异常
  467. if str(e)=='':
  468. e=detail
  469. raise HTTPException(status_code=500, detail=str(e))
  470. @router.delete("/data/delete/{dictCode}") # 使用 ID 来标识要删除的接口
  471. async def delete_dict_data(
  472. dictCode: str,
  473. db: Session = Depends(get_db),
  474. body = Depends(remove_xss_json),
  475. user_id = Depends(valid_access_token)
  476. ):
  477. try:
  478. # 从数据库中获取要删除的 OneShareApiEntity 实例
  479. query = db.query(SysDictData)
  480. query = query.filter(SysDictData.dict_code == dictCode)
  481. query = query.filter(SysDictData.del_flag != '2')
  482. dict_data = query.first()
  483. # dict_data = db.query(SysDictData).filter(SysDictData.dict_code == dictCode and SysDictData.del_flag != '2').first()
  484. if not dict_data:
  485. detail = "dict_data不存在"
  486. raise HTTPException(status_code=404, detail="dict_data不存在")
  487. dict_data.del_flag = '2'
  488. # 删除实例
  489. # db.delete(api)
  490. db.commit()
  491. # 构建并返回响应
  492. return {
  493. "code": 200,
  494. "msg": "操作成功",
  495. "data": None
  496. }
  497. except Exception as e:
  498. # 处理异常
  499. if str(e)=='':
  500. e=detail
  501. raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
  502. @router.delete("/data/{dictCode}") # 使用 ID 来标识要删除的接口
  503. async def delete_dict_data(
  504. dictCode: str,
  505. db: Session = Depends(get_db),
  506. body = Depends(remove_xss_json),
  507. user_id = Depends(valid_access_token)
  508. ):
  509. try:
  510. # 从数据库中获取要删除的 OneShareApiEntity 实例
  511. query = db.query(SysDictData)
  512. query = query.filter(SysDictData.del_flag != '2')
  513. dictCodeList = dictCode.split(',')
  514. query = query.filter(SysDictData.dict_code.in_(dictCodeList))
  515. dict_data = query.all()
  516. # dict_data = db.query(SysDictData).filter(SysDictData.dict_code == dictCode and SysDictData.del_flag != '2').first()
  517. if not dict_data:
  518. return JSONResponse(content={"msg":"dict不存在"},status_code=404)
  519. # detail = "dict不存在"
  520. # raise HTTPException(status_code=404, detail="dict不存在")
  521. for dict in dict_data:
  522. dict.del_flag = '2'
  523. # 删除实例
  524. # db.delete(api)
  525. db.commit()
  526. # 构建并返回响应
  527. return {
  528. "code": 200,
  529. "msg": "操作成功",
  530. "data": None
  531. }
  532. except Exception as e:
  533. # 处理异常
  534. traceback.print_exc()
  535. raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))