me.py 26 KB

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