me.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends, HTTPException, Query
  4. from sqlalchemy.exc import IntegrityError
  5. from fastapi.responses import HTMLResponse, FileResponse
  6. from fastapi.responses import JSONResponse
  7. from database import get_db
  8. from sqlalchemy import text, exists, and_, or_, not_
  9. from sqlalchemy.orm import Session
  10. from models import *
  11. import json
  12. import os
  13. from sqlalchemy import create_engine, select
  14. from typing import Optional
  15. from utils.StripTagsHTMLParser import *
  16. from common.db import db_event_management, db_user, db_area, db_emergency_plan
  17. from common.security import valid_access_token
  18. import traceback
  19. from utils import *
  20. from datetime import datetime, timedelta
  21. from common import YzyApi
  22. from common.db import db_dict
  23. from urllib.parse import quote
  24. import base64
  25. from io import BytesIO
  26. from PIL import Image
  27. from config import settings
  28. router = APIRouter()
  29. EXAMINE_TYPE_DICT = {
  30. 0: "草稿",
  31. 10: "提交",
  32. 20: "领导审批",
  33. 30: "重新提交",
  34. 40: "转交"
  35. }
  36. EXAMINE_SUB_TYPE_DICT = {
  37. 0: "草稿",
  38. 10: "提交",
  39. 20: "待审批",
  40. 21: "审批通过",
  41. 22: "审批不通过",
  42. 30: "重新提交",
  43. 40: "转交"
  44. }
  45. # 信息发布分页(我能看的内容,小屏)
  46. @router.get('/list')
  47. async def get_publish_list(
  48. search_keyword: str = Query('', description='信息内容'),
  49. info_type: str = Query('', description='类型'),
  50. page: int = Query(1, gt=0, description='页码'),
  51. begin_time_s: str = Query(None, description='开始时间'),
  52. end_time_s: str = Query(None, description='结束时间'),
  53. info_order: str = Query("desc", description='时间排序'),
  54. page_size: int = Query(10, gt=0, description='pageSize'),
  55. db: Session = Depends(get_db),
  56. user_id = Depends(valid_access_token)
  57. ):
  58. try:
  59. # 应用查询条件
  60. where = and_(InfoPublishBase.del_flag == '0', InfoPublishBase.publish_status == 4)
  61. if search_keyword != '':
  62. where = and_(where, InfoPublishBase.content.like('%{}%'.format(search_keyword)))
  63. if info_type != '':
  64. where = and_(where, InfoPublishBase.info_type == info_type)
  65. if begin_time_s != None:
  66. begin_time = datetime.strptime(begin_time_s, "%Y-%m-%d")
  67. where = and_(where, InfoPublishBase.publish_time >= begin_time)
  68. if end_time_s != None:
  69. end_time = datetime.strptime(end_time_s, "%Y-%m-%d") + timedelta(days=1)
  70. where = and_(where, InfoPublishBase.publish_time < end_time)
  71. print(where)
  72. subquery = db.query(InfoPublishResponses.publish_id).filter(InfoPublishResponses.user_id == user_id).subquery()
  73. # 计算总条目数
  74. q = db.query(func.count(InfoPublishBase.id))
  75. q = q.filter(where).filter(InfoPublishBase.id == subquery.c.publish_id)
  76. total = q.scalar()
  77. # 执行分页查询
  78. q = db.query(InfoPublishBase)
  79. q = q.filter(where).filter(InfoPublishBase.id == subquery.c.publish_id)
  80. if info_order == 'desc':
  81. q.order_by(InfoPublishBase.publish_time.desc())
  82. if info_order == 'asc':
  83. q.order_by(InfoPublishBase.publish_time.asc())
  84. rows = q.offset((page - 1) * page_size).limit(page_size).all()
  85. data = []
  86. for row in rows:
  87. # 发布申请人
  88. recorded_by = row.recorded_by
  89. user_row = db.query(SysUser).filter(SysUser.user_id == recorded_by).first()
  90. nick_name = ""
  91. dept_name = ""
  92. if user_row is not None:
  93. nick_name = user_row.nick_name
  94. dept_id = user_row.dept_id
  95. dept_row = db.query(SysDept).filter(SysDept.dept_id == dept_id).first()
  96. if dept_row is not None:
  97. dept_name = dept_row.dept_name
  98. # 待处理人
  99. examine_user = "无"
  100. examine_by = row.examine_by
  101. user_row = db.query(SysUser).filter(SysUser.user_id == examine_by).first()
  102. if user_row is not None:
  103. examine_user = user_row.nick_name
  104. data.append({
  105. "id": row.id,
  106. "title": row.title,
  107. "info_type": row.info_type,
  108. "publish_group": row.publish_group,
  109. "content": row.content,
  110. "publish_time": get_datetime_str(row.publish_time),
  111. "add_time": row.add_time.strftime("%Y-%m-%d %H:%M"),
  112. "publish_channel": row.publish_channel,
  113. "nick_name": nick_name,
  114. "dept_name": dept_name,
  115. "examine_user": examine_user,
  116. "publish_status": db_dict.get_dict_label(db, "mm_publish_status", row.publish_status),
  117. "examine_status": db_dict.get_dict_label(db, "mm_examine_status", row.examine_status),
  118. "user_count": row.user_count,
  119. "user_ok_count": row.user_ok_count,
  120. "user_err_count": row.user_err_count,
  121. "user_sending_count": row.user_sending_count,
  122. "is_my_edit": (row.examine_status == 0 or row.examine_status == 9) and row.recorded_by == user_id, # 是否我的编辑事项
  123. "is_my_examine": row.examine_status == 1 and int(row.examine_by) == user_id # 是否我的审批事项
  124. })
  125. # 返回结果
  126. return {
  127. "code": 200,
  128. "msg": "查询成功",
  129. "data": data,
  130. "total": total
  131. }
  132. except Exception as e:
  133. # 处理异常
  134. traceback.print_exc()
  135. raise HTTPException(status_code=500, detail=str(e))
  136. @router.get('/detail')
  137. async def get_info_detail(
  138. request: Request,
  139. id: str = Query(None, description='信息编号'),
  140. db: Session = Depends(get_db),
  141. user_id = Depends(valid_access_token)):
  142. try:
  143. # 构建查询
  144. query = db.query(InfoPublishBase)
  145. query = query.filter(InfoPublishBase.id == id)
  146. # 执行查询
  147. row = query.first()
  148. if row is not None:
  149. # 发布申请人
  150. recorded_by = row.recorded_by
  151. user_row = db.query(SysUser).filter(SysUser.user_id == recorded_by).first()
  152. nick_name = ""
  153. dept_name = ""
  154. if user_row is not None:
  155. nick_name = user_row.nick_name
  156. dept_id = user_row.dept_id
  157. dept_row = db.query(SysDept).filter(SysDept.dept_id == dept_id).first()
  158. if dept_row is not None:
  159. dept_name = dept_row.dept_name
  160. response_row = db.query(InfoPublishResponses).filter(and_(InfoPublishResponses.publish_id == id, InfoPublishResponses.user_id == user_id)).first()
  161. # 是否我的审批事项(待审批)
  162. is_my_examine = 0
  163. examine_row = db.query(InfoPublishExamine).filter(InfoPublishExamine.del_flag == "0").filter(InfoPublishExamine.user_id == user_id).filter(InfoPublishExamine.examine_sub_type == 20).order_by(InfoPublishExamine.id.desc()).first()
  164. if examine_row is not None:
  165. is_my_examine = 1
  166. data = {
  167. "id": row.id,
  168. "title": row.title,
  169. "info_type": row.info_type,
  170. "add_time": row.add_time.strftime("%Y-%m-%d %H:%M"),
  171. "nick_name": nick_name,
  172. "dept_name": dept_name,
  173. "publish_group": row.publish_group,
  174. "content": row.content,
  175. "publish_time": get_datetime_str(row.publish_time),
  176. "publish_channel": row.publish_channel,
  177. "response_type": response_row.response_type,
  178. "response_status": response_row.response_status,
  179. "response_time": get_datetime_str(response_row.response_time),
  180. "signature": get_signature_base64(db, response_row.id),
  181. "is_my_examine": is_my_examine
  182. }
  183. # 附件
  184. rows = db.query(InfoPublishFile).filter(and_(InfoPublishFile.from_scenario=="infopublish_attach_file", InfoPublishFile.foreign_key == id, InfoPublishFile.del_flag == '0')).all()
  185. data['files'] = [
  186. {
  187. "name": row.file_name,
  188. "url": row.storage_file_name
  189. }
  190. for row in rows
  191. ]
  192. # 审批进度
  193. data["examines"] = []
  194. rows = db.query(InfoPublishExamine).filter(InfoPublishExamine.publish_id == id).filter(InfoPublishExamine.del_flag == '0').all()
  195. for row in rows:
  196. data["examines"].append({
  197. "examine_type": EXAMINE_TYPE_DICT[row.examine_type],
  198. "examine_sub_type": EXAMINE_SUB_TYPE_DICT[row.examine_sub_type],
  199. "content": row.content,
  200. "examine_time": get_datetime_str(row.examine_time),
  201. "user_id": row.user_id,
  202. "user_name": row.user_name,
  203. "nick_name": row.nick_name
  204. })
  205. return {
  206. "code": 200,
  207. "msg": "查询成功",
  208. "data": data
  209. }
  210. else:
  211. return {
  212. "code": 500,
  213. "msg": "查询失败"
  214. }
  215. except Exception as e:
  216. # 处理异常
  217. traceback.print_exc()
  218. raise HTTPException(status_code=500, detail=str(e))
  219. @router.post("/confirmReceived")
  220. async def confirmReceived(
  221. request: Request,
  222. body = Depends(remove_xss_json),
  223. db: Session = Depends(get_db),
  224. user_id = Depends(valid_access_token)):
  225. try:
  226. id = get_req_param(body, "id")
  227. row = db.query(InfoPublishResponses).filter(and_(InfoPublishResponses.publish_id == id, InfoPublishResponses.user_id == user_id)).first()
  228. if row is None:
  229. return {
  230. "code": 500,
  231. "msg": "查询失败"
  232. }
  233. row.response_time = datetime.now()
  234. row.response_status = 1 # 已确认
  235. db.commit()
  236. return {
  237. "code": 200,
  238. "msg": "反馈成功",
  239. "data": {
  240. "response_status": row.response_status
  241. }
  242. }
  243. except Exception as e:
  244. # 处理异常
  245. traceback.print_exc()
  246. raise HTTPException(status_code=500, detail=str(e))
  247. # 确定签名
  248. @router.post("/confirmSignature")
  249. async def confirmSignature(
  250. request: Request,
  251. body = Depends(remove_xss_json),
  252. db: Session = Depends(get_db),
  253. user_id = Depends(valid_access_token)):
  254. try:
  255. id = get_req_param(body, "id")
  256. row = db.query(InfoPublishResponses).filter(and_(InfoPublishResponses.publish_id == id, InfoPublishResponses.user_id == user_id)).first()
  257. if row is None:
  258. return {
  259. "code": 500,
  260. "msg": "查询失败"
  261. }
  262. response_id = row.id
  263. file_name = new_guid() + ".png"
  264. file_path = f'/data/upload/mergefile/uploads/{file_name}'
  265. base64_data = get_req_param(body, "image")
  266. base64_data = base64_data.replace("data:image/png;base64,", "")
  267. binary_data = base64.b64decode(base64_data)
  268. bytes_io = BytesIO(binary_data)
  269. image = Image.open(bytes_io)
  270. image.save(file_path)
  271. new_file = InfoPublishFile(
  272. file_name="信息阅读确认签名.png",
  273. storage_file_name=file_name,
  274. file_path=f'/data/upload/mergefile/uploads/{file_name}',
  275. file_size=os.path.getsize(f'/data/upload/mergefile/uploads/{file_name}'),
  276. foreign_key=str(response_id),
  277. from_scenario="infopublish_signature_file",
  278. update_time=datetime.now(),
  279. create_time=datetime.now(),
  280. create_by=user_id,
  281. create_dept=0,
  282. del_flag='0',
  283. status=0,
  284. )
  285. db.add(new_file)
  286. row.response_time = datetime.now()
  287. row.response_status = 2 # 已签名
  288. db.commit()
  289. return {
  290. "code": 200,
  291. "msg": "反馈成功",
  292. "data": {
  293. "response_status": row.response_status
  294. }
  295. }
  296. except Exception as e:
  297. # 处理异常
  298. traceback.print_exc()
  299. raise HTTPException(status_code=500, detail=str(e))
  300. def image2base64(img_file: str):
  301. f = open(img_file, 'rb')
  302. img_raw_data = f.read()
  303. f.close()
  304. img_b64_string = base64.b64encode(img_raw_data)
  305. return img_b64_string.decode('ascii')
  306. def get_signature_base64(db: Session, response_id: int):
  307. row = db.query(InfoPublishFile).filter(and_(InfoPublishFile.from_scenario == 'infopublish_signature_file', InfoPublishFile.foreign_key == str(response_id))).first()
  308. if row is None:
  309. return ""
  310. return "data:image/png;base64," + image2base64(row.file_path)
  311. # 我的工作审批
  312. @router.get("/work_approval/list")
  313. async def work_approval_list(
  314. search_keyword: str = Query('', description='信息内容'),
  315. status: str = Query('1', description='状态'),
  316. info_type: str = Query(None, description='信息类型'),
  317. time_type: str = Query(None, description='时间类型'),
  318. info_order: str = Query("desc", description='时间排序'),
  319. page: int = Query(1, gt=0, description='页码'),
  320. page_size: int = Query(10, gt=0, description='pageSize'),
  321. db: Session = Depends(get_db),
  322. user_id = Depends(valid_access_token)
  323. ):
  324. try:
  325. # 应用查询条件
  326. where = and_(InfoPublishBase.del_flag == '0')
  327. # 待办
  328. if status == "1":
  329. subquery = db.query(InfoPublishExamine.publish_id).filter(InfoPublishExamine.del_flag == "0").filter(InfoPublishExamine.user_id == user_id).filter(InfoPublishExamine.examine_sub_type == 20).subquery()
  330. where = and_(where, InfoPublishBase.id == subquery.c.publish_id)
  331. # 已完成
  332. if status == "2":
  333. subquery = db.query(InfoPublishExamine.publish_id).filter(InfoPublishExamine.del_flag == "0").filter(InfoPublishExamine.user_id == user_id).filter(InfoPublishExamine.examine_sub_type.in_([21,22])).subquery()
  334. where = and_(where, InfoPublishBase.id == subquery.c.publish_id)
  335. if search_keyword != '':
  336. where = and_(where, InfoPublishBase.content.like('%{}%'.format(search_keyword)))
  337. if info_type != None:
  338. where = and_(where, InfoPublishBase.info_type == info_type)
  339. '''
  340. if end_time_s != None:
  341. end_time = datetime.strptime(end_time_s, "%Y-%m-%d") + timedelta(days=1)
  342. where = and_(where, InfoPublishBase.publish_time < end_time)
  343. print(where)
  344. '''
  345. # subquery = db.query(InfoPublishResponses.publish_id).filter(InfoPublishResponses.user_id == user_id).subquery()
  346. # 计算总条目数
  347. q = db.query(func.count(InfoPublishBase.id)).filter(where)
  348. # q = q.filter(where).filter(InfoPublishBase.id == subquery.c.publish_id)
  349. total = q.scalar()
  350. # 执行分页查询
  351. q = db.query(InfoPublishBase).filter(where)
  352. # q = q.filter(where).filter(InfoPublishBase.id == subquery.c.publish_id)
  353. if info_order == 'desc':
  354. q.order_by(InfoPublishBase.add_time.desc())
  355. if info_order == 'asc':
  356. q.order_by(InfoPublishBase.add_time.asc())
  357. rows = q.offset((page - 1) * page_size).limit(page_size).all()
  358. data = []
  359. for row in rows:
  360. # 发布申请人
  361. recorded_by = row.recorded_by
  362. user_row = db.query(SysUser).filter(SysUser.user_id == recorded_by).first()
  363. nick_name = ""
  364. dept_name = ""
  365. if user_row is not None:
  366. nick_name = user_row.nick_name
  367. dept_id = user_row.dept_id
  368. dept_row = db.query(SysDept).filter(SysDept.dept_id == dept_id).first()
  369. if dept_row is not None:
  370. dept_name = dept_row.dept_name
  371. # 待处理人
  372. examine_user = "无"
  373. examine_by = row.examine_by
  374. user_row = db.query(SysUser).filter(SysUser.user_id == examine_by).first()
  375. if user_row is not None:
  376. examine_user = user_row.nick_name
  377. # 是否我的审批事项(待审批)
  378. is_my_examine = 0
  379. examine_row = db.query(InfoPublishExamine).filter(InfoPublishExamine.del_flag == "0").filter(InfoPublishExamine.user_id == user_id).filter(InfoPublishExamine.examine_sub_type == 20).order_by(InfoPublishExamine.id.desc()).limit(1).first()
  380. if examine_row is not None:
  381. is_my_examine = 1
  382. data.append({
  383. "id": row.id,
  384. "title": row.title,
  385. "info_type": row.info_type,
  386. "publish_group": row.publish_group,
  387. "content": row.content,
  388. "publish_time": get_datetime_str(row.publish_time),
  389. "add_time": row.add_time.strftime("%Y-%m-%d %H:%M"),
  390. "publish_channel": row.publish_channel,
  391. "nick_name": nick_name,
  392. "dept_name": dept_name,
  393. "examine_user": examine_user,
  394. "publish_status": db_dict.get_dict_label(db, "mm_publish_status", row.publish_status),
  395. "examine_status": db_dict.get_dict_label(db, "mm_examine_status", row.examine_status),
  396. "user_count": row.user_count,
  397. "user_ok_count": row.user_ok_count,
  398. "user_err_count": row.user_err_count,
  399. "user_sending_count": row.user_sending_count,
  400. "is_my_edit": (row.examine_status == 0 or row.examine_status == 9) and row.recorded_by == user_id, # 是否我的编辑事项
  401. "is_my_examine": is_my_examine
  402. })
  403. # 返回结果
  404. return {
  405. "code": 200,
  406. "msg": "查询成功",
  407. "data": data,
  408. "total": total
  409. }
  410. except Exception as e:
  411. # 处理异常
  412. traceback.print_exc()
  413. raise HTTPException(status_code=500, detail=str(e))
  414. @router.get('/work_approval/detail')
  415. async def get_info_detail(
  416. request: Request,
  417. id: str = Query(None, description='信息编号'),
  418. db: Session = Depends(get_db),
  419. user_id = Depends(valid_access_token)):
  420. try:
  421. # 构建查询
  422. query = db.query(InfoPublishBase)
  423. query = query.filter(InfoPublishBase.id == id)
  424. # 执行查询
  425. row = query.first()
  426. if row is not None:
  427. # 发布申请人
  428. recorded_by = row.recorded_by
  429. user_row = db.query(SysUser).filter(SysUser.user_id == recorded_by).first()
  430. nick_name = ""
  431. dept_name = ""
  432. if user_row is not None:
  433. nick_name = user_row.nick_name
  434. dept_id = user_row.dept_id
  435. dept_row = db.query(SysDept).filter(SysDept.dept_id == dept_id).first()
  436. if dept_row is not None:
  437. dept_name = dept_row.dept_name
  438. # 是否我的审批事项(待审批)
  439. is_my_examine = 0
  440. examine_row = db.query(InfoPublishExamine).filter(InfoPublishExamine.del_flag == "0").filter(InfoPublishExamine.user_id == user_id).filter(InfoPublishExamine.examine_sub_type == 20).order_by(InfoPublishExamine.id.desc()).first()
  441. if examine_row is not None:
  442. is_my_examine = 1
  443. # 如果发布了就不能修改
  444. if row.publish_status == 4:
  445. is_my_examine = 0
  446. data = {
  447. "id": row.id,
  448. "title": row.title,
  449. "info_type": row.info_type,
  450. "add_time": row.add_time.strftime("%Y-%m-%d %H:%M"),
  451. "nick_name": nick_name,
  452. "dept_name": dept_name,
  453. "publish_group": row.publish_group,
  454. "content": row.content,
  455. "publish_time": get_datetime_str(row.publish_time),
  456. "publish_channel": row.publish_channel,
  457. "is_my_examine": is_my_examine
  458. }
  459. # 附件
  460. rows = db.query(InfoPublishFile).filter(and_(InfoPublishFile.from_scenario=="infopublish_attach_file", InfoPublishFile.foreign_key == id, InfoPublishFile.del_flag == '0')).all()
  461. data['files'] = [
  462. {
  463. "name": row.file_name,
  464. "url": row.storage_file_name
  465. }
  466. for row in rows
  467. ]
  468. # 审批进度
  469. data["examines"] = []
  470. rows = db.query(InfoPublishExamine).filter(InfoPublishExamine.publish_id == id).filter(InfoPublishExamine.del_flag == '0').all()
  471. for row in rows:
  472. data["examines"].append({
  473. "examine_type": EXAMINE_TYPE_DICT[row.examine_type],
  474. "examine_sub_type": EXAMINE_SUB_TYPE_DICT[row.examine_sub_type],
  475. "content": row.content,
  476. "examine_time": get_datetime_str(row.examine_time),
  477. "user_id": row.user_id,
  478. "user_name": row.user_name,
  479. "nick_name": row.nick_name
  480. })
  481. return {
  482. "code": 200,
  483. "msg": "查询成功",
  484. "data": data
  485. }
  486. else:
  487. return {
  488. "code": 500,
  489. "msg": "查询失败"
  490. }
  491. except Exception as e:
  492. # 处理异常
  493. traceback.print_exc()
  494. raise HTTPException(status_code=500, detail=str(e))
  495. # 审批确认
  496. @router.post("/work_approval/confirm")
  497. async def work_approval_confirm(
  498. request: Request,
  499. body = Depends(remove_xss_json),
  500. db: Session = Depends(get_db),
  501. user_id = Depends(valid_access_token)):
  502. try:
  503. info_id = get_req_param(body, "info_id")
  504. action = get_req_param(body, "action")
  505. content = get_req_param(body, "content")
  506. # 删除之前的待审批记录
  507. db.query(InfoPublishExamine).filter(and_(InfoPublishExamine.examine_type == 20, InfoPublishExamine.examine_sub_type == 20)).update({"del_flag": "2", "content": "content"})
  508. db.commit()
  509. user_row = db.query(SysUser).filter(SysUser.user_id == user_id).first()
  510. info_id = body['info_id']
  511. examine_type = body['examine_type']
  512. content = body['content']
  513. # 审批通过
  514. if examine_type == 'approved':
  515. new_examine = InfoPublishExamine(
  516. publish_id = info_id,
  517. examine_type = 20,
  518. examine_sub_type = 21,
  519. content = content,
  520. examine_time = datetime.now(),
  521. user_id = user_id,
  522. user_name = user_row.user_name,
  523. nick_name = user_row.nick_name
  524. )
  525. db.add(new_examine)
  526. db.commit()
  527. # publish_status 发布中
  528. # examine_status 审批通过
  529. db.query(InfoPublishBase).filter(InfoPublishBase.id == info_id).update({"publish_status": 3, "examine_status": 3})
  530. db.commit()
  531. # 审批不通过
  532. elif examine_type == 'rejected':
  533. new_examine = InfoPublishExamine(
  534. publish_id = info_id,
  535. examine_type = 20,
  536. examine_sub_type = 22,
  537. content = content,
  538. examine_time = datetime.now(),
  539. user_id = user_id,
  540. user_name = user_row.user_name,
  541. nick_name = user_row.nick_name
  542. )
  543. db.add(new_examine)
  544. db.commit()
  545. # publish_status 取消发布
  546. # examine_status 审批不通过
  547. db.query(InfoPublishBase).filter(InfoPublishBase.id == info_id).update({"publish_status": 9, "examine_status": 9})
  548. db.commit()
  549. return {
  550. "code": 200,
  551. "msg": "审批成功",
  552. "data": action
  553. }
  554. except Exception as e:
  555. # 处理异常
  556. traceback.print_exc()
  557. raise HTTPException(status_code=500, detail=str(e))
  558. @router.post("/work_approval/redirect")
  559. async def WorkApprovalRedirect(
  560. request: Request,
  561. body = Depends(remove_xss_json),
  562. db: Session = Depends(get_db),
  563. user_id = Depends(valid_access_token)):
  564. try:
  565. info_id = get_req_param(body, "info_id")
  566. redirect_id = get_req_param(body, "redirect_id")
  567. # 删除之前的待审批记录
  568. db.query(InfoPublishExamine).filter(and_(InfoPublishExamine.examine_type == 20, InfoPublishExamine.examine_sub_type == 20)).update({"del_flag": "2", "content": "content"})
  569. db.commit()
  570. user_row = db.query(SysUser).filter(SysUser.user_id == user_id).first()
  571. # 转交
  572. new_examine = InfoPublishExamine(
  573. publish_id = body['info_id'],
  574. examine_type = 40, # 转交
  575. examine_sub_type = 40, # 转交
  576. content = "转交",
  577. examine_time = datetime.now(),
  578. user_id = user_id,
  579. user_name = user_row.user_name,
  580. nick_name = user_row.nick_name
  581. )
  582. db.add(new_examine)
  583. db.commit()
  584. user_row = db.query(SysUser).filter(SysUser.user_id == redirect_id).first()
  585. # 待审批
  586. new_examine = InfoPublishExamine(
  587. publish_id = body['info_id'],
  588. examine_type = 20,
  589. examine_sub_type = 20,
  590. content = "待审批",
  591. examine_time = datetime.now(),
  592. user_id = user_id,
  593. user_name = user_row.user_name,
  594. nick_name = user_row.nick_name
  595. )
  596. db.add(new_examine)
  597. db.commit()
  598. return {
  599. "code": 200,
  600. "msg": "转交成功"
  601. }
  602. except Exception as e:
  603. # 处理异常
  604. traceback.print_exc()
  605. raise HTTPException(status_code=500, detail=str(e))