libushang hai 6 meses
pai
achega
887a3e73a3
Modificáronse 3 ficheiros con 94 adicións e 20 borrados
  1. 49 9
      routers/api/infoPublish/back.py
  2. 18 10
      routers/api/infoPublish/me.py
  3. 27 1
      utils/__init__.py

+ 49 - 9
routers/api/infoPublish/back.py

@@ -2,7 +2,6 @@
 # -*- coding: utf-8 -*-
 
 from fastapi import APIRouter, Request, Depends, HTTPException, Query
-from sqlalchemy.exc import IntegrityError
 from fastapi.responses import HTMLResponse, FileResponse
 from fastapi.responses import JSONResponse
 from database import get_db
@@ -189,8 +188,23 @@ async def create_emergency_plan(
         db.add(infopublish_examine)
         db.commit()
 
-        # 改草稿、待审批状态
-        db.query(InfoPublishBase).filter(InfoPublishBase.id == new_publish_id).update({"publish_status": 1, "examine_status": 1})
+        # 待审批状态
+        infopublish_examine = InfoPublishExamine(
+            publish_id = new_publish_id,
+            examine_type = 20, # 审批
+            examine_sub_type = 20, # 待审批
+            examine_time = datetime.now() + timedelta(seconds=1),
+            content = '',
+            user_id = examine_by,
+            user_name = examine_user_row.user_name,
+            nick_name = examine_user_row.nick_name,
+            del_flag = '0'
+        )
+        db.add(infopublish_examine)
+        db.commit()
+
+        # 改审核中、待审批状态
+        db.query(InfoPublishBase).filter(InfoPublishBase.id == new_publish_id).update({"publish_status": 2, "examine_status": 1})
         db.commit()
 
         return {
@@ -230,9 +244,15 @@ async def get_publish_list(
             where = and_(where, InfoPublishBase.examine_status == examine_status)
         if publish_group != '':
             where = and_(where, InfoPublishBase.publish_group.like('%{}%'.format(publish_group)))
-        if dispose_status not in ['', '0'] :
-            where = and_(where, InfoPublishBase.examine_status == 1, InfoPublishBase.examine_by == user_id)
-        print(where)
+
+        if dispose_status == '1' : # 1 待处理
+            # 审核类型 20 待审批
+            subquery = db.query(InfoPublishExamine.publish_id).filter(InfoPublishExamine.del_flag == "0").filter(InfoPublishExamine.user_id == user_id).filter(InfoPublishExamine.examine_sub_type == 20).subquery()
+            where = and_(where, InfoPublishBase.id == subquery.c.publish_id)
+        if dispose_status == '2' : # 2 已处理
+            # 审核类型 21 审批通过 22 审批不通过
+            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()
+            where = and_(where, InfoPublishBase.id == subquery.c.publish_id)
         
         # 计算总条目数
         q = db.query(func.count(InfoPublishBase.id))
@@ -268,6 +288,12 @@ async def get_publish_list(
             if user_row is not None:
                 examine_user = user_row.nick_name
 
+            # 是否我的审批事项(待审批)
+            is_my_examine = 0
+            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()
+            if examine_row is not None:
+                is_my_examine = 1
+
             data.append({
                 "id": row.id,
                 "title": row.title,
@@ -289,7 +315,7 @@ async def get_publish_list(
                 "user_sending_count": row.user_sending_count,
 
                 "is_my_edit": (row.examine_status == 0 or row.examine_status == 9) and row.recorded_by == user_id, # 是否我的编辑事项
-                "is_my_examine": row.examine_status == 1 and int(row.examine_by) == user_id # 是否我的审批事项
+                "is_my_examine": is_my_examine
             })
 
         # 返回结果
@@ -314,6 +340,7 @@ async def get_edit_info(
 
     row = db.query(InfoPublishBase).filter(InfoPublishBase.id == info_id).first()
     data = get_model_dict(row)
+    examine_time = add_time = data['add_time']
     data['examine_user'] = db_user.get_user_name_by_id(db, data['examine_by'])
     data['add_time'] = get_datetime_str(data['add_time'])
     data['publish_time'] = get_datetime_str(data['publish_time'])
@@ -345,6 +372,7 @@ async def get_edit_info(
     data["examines"] = []
     rows = db.query(InfoPublishExamine).filter(InfoPublishExamine.publish_id == info_id).filter(InfoPublishExamine.del_flag == '0').all()
     for row in rows:
+        examine_time = row.examine_time
         data["examines"].append({
             "examine_type": EXAMINE_TYPE_DICT[row.examine_type],
             "examine_sub_type": EXAMINE_SUB_TYPE_DICT[row.examine_sub_type],
@@ -354,6 +382,10 @@ async def get_edit_info(
             "user_name": row.user_name,
             "nick_name": row.nick_name
         })
+
+    time_diff = examine_time - add_time
+    data['process_time'] = get_process_time(time_diff)
+
     return {
         "code": 200,
         "msg": "查询成功",
@@ -513,6 +545,10 @@ async def submit_examine(
     user_id = Depends(valid_access_token)
 ):
     try:
+        # 删除之前的待审批记录
+        db.query(InfoPublishExamine).filter(and_(InfoPublishExamine.examine_type == 20, InfoPublishExamine.examine_sub_type == 20)).update({"del_flag": "2", "content": "content"})
+        db.commit()
+
         user_row = db.query(SysUser).filter(SysUser.user_id == user_id).first()
         
         info_id = body['info_id']
@@ -534,7 +570,9 @@ async def submit_examine(
             db.add(new_examine)
             db.commit()
 
-            db.query(InfoPublishBase).filter(InfoPublishBase.id == info_id).update({"publish_status": 3, "examine_status": 2})
+            # publish_status 发布中
+            # examine_status 审批通过
+            db.query(InfoPublishBase).filter(InfoPublishBase.id == info_id).update({"publish_status": 3, "examine_status": 3})
             db.commit()
 
         # 审批不通过
@@ -553,7 +591,9 @@ async def submit_examine(
             db.add(new_examine)
             db.commit()
 
-            db.query(InfoPublishBase).filter(InfoPublishBase.id == info_id).update({"publish_status": 0, "examine_status": 0})
+            # publish_status 取消发布
+            # examine_status 审批不通过
+            db.query(InfoPublishBase).filter(InfoPublishBase.id == info_id).update({"publish_status": 9, "examine_status": 9})
             db.commit()
 
         return {

+ 18 - 10
routers/api/infoPublish/me.py

@@ -377,11 +377,13 @@ async def work_approval_list(
         
         # 待办
         if status == "1":
-            where = and_(where, InfoPublishBase.publish_status < 4)
+            subquery = db.query(InfoPublishExamine.publish_id).filter(InfoPublishExamine.del_flag == "0").filter(InfoPublishExamine.user_id == user_id).filter(InfoPublishExamine.examine_sub_type == 20).subquery()
+            where = and_(where, InfoPublishBase.id == subquery.c.publish_id)
 
         # 已完成
         if status == "2":
-            where = and_(where, InfoPublishBase.publish_status == 4)
+            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()
+            where = and_(where, InfoPublishBase.id == subquery.c.publish_id)
         
         if search_keyword != '':
             where = and_(where, InfoPublishBase.content.like('%{}%'.format(search_keyword)))
@@ -395,21 +397,21 @@ async def work_approval_list(
         print(where)
         '''
         
-        subquery = db.query(InfoPublishResponses.publish_id).filter(InfoPublishResponses.user_id == user_id).subquery()
+        # subquery = db.query(InfoPublishResponses.publish_id).filter(InfoPublishResponses.user_id == user_id).subquery()
         
         # 计算总条目数
-        q = db.query(func.count(InfoPublishBase.id))
-        q = q.filter(where).filter(InfoPublishBase.id == subquery.c.publish_id)
+        q = db.query(func.count(InfoPublishBase.id)).filter(where)
+        # q = q.filter(where).filter(InfoPublishBase.id == subquery.c.publish_id)
         total = q.scalar()
         
         # 执行分页查询
-        q = db.query(InfoPublishBase)
-        q = q.filter(where).filter(InfoPublishBase.id == subquery.c.publish_id)
+        q = db.query(InfoPublishBase).filter(where)
+        # q = q.filter(where).filter(InfoPublishBase.id == subquery.c.publish_id)
 
         if info_order == 'desc':
-            q.order_by(InfoPublishBase.publish_time.desc())
+            q.order_by(InfoPublishBase.add_time.desc())
         if info_order == 'asc':
-            q.order_by(InfoPublishBase.publish_time.asc())
+            q.order_by(InfoPublishBase.add_time.asc())
         
         rows = q.offset((page - 1) * page_size).limit(page_size).all()
 
@@ -437,6 +439,12 @@ async def work_approval_list(
             if user_row is not None:
                 examine_user = user_row.nick_name
 
+            # 是否我的审批事项(待审批)
+            is_my_examine = 0
+            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()
+            if examine_row is not None:
+                is_my_examine = 1
+
             data.append({
                 "id": row.id,
                 "title": row.title,
@@ -459,7 +467,7 @@ async def work_approval_list(
                 "user_sending_count": row.user_sending_count,
 
                 "is_my_edit": (row.examine_status == 0 or row.examine_status == 9) and row.recorded_by == user_id, # 是否我的编辑事项
-                "is_my_examine": row.examine_status == 1 and int(row.examine_by) == user_id # 是否我的审批事项
+                "is_my_examine": is_my_examine
             })
 
         # 返回结果

+ 27 - 1
utils/__init__.py

@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 from fastapi import Request, Header
 import time
-from datetime import datetime
+from datetime import datetime, timedelta
 # from dateutil import relativedelta as rdelta
 from pprint import pprint
 import hashlib
@@ -66,6 +66,32 @@ def get_date_str(val: datetime) -> str:
         return ''
     return val.strftime("%Y-%m-%d")
 
+def get_process_time(time_diff) -> str:
+    try:
+        days = time_diff.days
+        if days == 0:
+            hours,minutes,seconds = str(time_diff).split(':')
+        else:
+            time_diff = time_diff - timedelta(days)
+            hours,minutes,seconds = str(time_diff).split(':')
+        
+        process_time = ""
+        hours = int(hours)
+        minutes = int(minutes)
+        seconds = int(seconds)
+        
+        if days > 0:
+            process_time = f"{days}天"
+        if hours > 0:
+            process_time = process_time + f"{hours}时"
+        if minutes > 0:
+            process_time = process_time + f"{minutes}分"
+        if seconds > 0:
+            process_time = process_time + f"{seconds}秒"
+        return process_time
+    except:
+        return ""
+
 def null2int(val):
     if val is None:
         return 0