libushang 7 kuukautta sitten
vanhempi
commit
42b535df42
3 muutettua tiedostoa jossa 175 lisäystä ja 33 poistoa
  1. 17 3
      models/xxfb_base.py
  2. 1 1
      routers/api/eventManagement/event.py
  3. 157 29
      routers/api/infoPublish/back.py

+ 17 - 3
models/xxfb_base.py

@@ -12,7 +12,9 @@ class InfoPublishBase(Base):
     title = Column(String, default='', server_default='', comment='标题')
     dept_id = Column(Integer, default=None, comment='记录用户单位ID')
     dept_name = Column(String, default='', server_default='', comment='记录用户单位名称')
-    template_id = Column(Integer, default=None, comment='信息模板ID')
+    template_type = Column(String, default='0', server_default='0', comment='信息模板')
+    template_id = Column(String, default='', server_default='', comment='模板ID')
+    template_url = Column(String, default='', server_default='', comment='自定义模板URL')
     content = Column(Text, default='', server_default='', comment='信息内容')
     recorded_by = Column(Integer, default=None, comment='记录用户ID')
     del_flag = Column(String, default='0', comment='删除标志(0代表存在 2代表删除)')
@@ -33,6 +35,18 @@ class InfoPublishBase(Base):
     class Config:
         orm_mode = True
 
+class InfoPublishTemplate(Base):
+    __tablename__ = 'infopublish_template'  # 表名
+
+    # 定义字段
+    id = Column(Integer, autoincrement=True, primary_key=True)  # 主键
+    name = Column(String, default='', server_default='', comment='模板ID')
+    content = Column(String, default='', server_default='', comment='模板内容')
+    del_flag = Column(String, default='0', comment='删除标志(0代表存在 2代表删除)')
+    add_time = Column(DateTime, default=datetime.now, comment='录入时间')
+
+    class Config:
+        orm_mode = True
 
 class InfoPublishResponses(Base):
     __tablename__ = 'infopublish_responses'  # 表名
@@ -59,9 +73,8 @@ class InfoPublishFile(Base):
     __tablename__ = 'infopublish_file'
 
     id = Column(Integer, autoincrement=True, primary_key=True)
-    file_id = Column(String(50), nullable=False, comment='文件id')
     file_name = Column(String(255), nullable=False, comment='文件名称')
-    file_name_desc = Column(String(255), nullable=False, comment='文件名称原名')
+    storage_file_name = Column(String(255), nullable=False, comment='文件名称原名')
     file_path = Column(String(255), comment='文件存储路径')
     file_size = Column(String(50), comment='文件大小')
     status = Column(String(50), comment='文件状态')
@@ -85,6 +98,7 @@ class InfoPublishExamine(Base):
     examine_type = Column(Integer, default='0', server_default='0', comment='审核类型 0 草稿 10 提交 20 领导审批 30 重新提交')
     examine_sub_type = Column(Integer, default='0', server_default='0', comment='审核类型 0 草稿 10 提交 20 待审批 21 审批通过 22 审批不通过 30 重新提交')
     examine_time = Column(DateTime, default=datetime.now, comment='审批时间')
+    content = Column(Text, default='', server_default='', comment='审批内容')
     user_id = Column(Integer, default='0', server_default='0', comment='主表ID')
     user_name = Column(String, default='', server_default='', comment='审批账号')
     nick_name = Column(String, default='', server_default='', comment='审批姓名')

+ 1 - 1
routers/api/eventManagement/event.py

@@ -367,7 +367,7 @@ async def close_event(
                 EventFile(
                     event_id=event_base.id,
                     file_name=fileName["name"],  # 使用 fileName["name"] 作为文件名
-                    file_path=f'/data/upload/mergefile/{fileName["url"]}',
+                    file_path=f'/data/upload/mergefile/uploads/{fileName["url"]}',
                     storage_file_name=fileName["url"],
                     foreign_key=event_base.event_code,
                     from_scenario="event_summary_file",

+ 157 - 29
routers/api/infoPublish/back.py

@@ -10,7 +10,7 @@ from sqlalchemy import text, exists, and_, or_, not_
 from sqlalchemy.orm import Session
 from models import *
 import json
-import random
+import os
 from sqlalchemy import create_engine, select
 from typing import Optional
 from utils.StripTagsHTMLParser import *
@@ -27,6 +27,22 @@ from config import settings
 
 router = APIRouter()
 
+EXAMINE_TYPE_DICT = {
+    0: "草稿",
+    10: "提交",
+    20: "领导审批",
+    30: "重新提交"
+}
+
+EXAMINE_SUB_TYPE_DICT = {
+    0: "草稿",
+    10: "提交",
+    20: "待审批",
+    21: "审批通过",
+    22: "审批不通过",
+    30: "重新提交"
+}
+
 # 信息发布创建
 @router.post('/create')
 async def create_emergency_plan(
@@ -39,6 +55,8 @@ async def create_emergency_plan(
         dept_name = ''
 
         user_row = db.query(SysUser).filter(SysUser.user_id == user_id).first()
+        user_name = user_row.user_name
+        nick_name = user_row.nick_name
         dept_id = user_row.dept_id
 
         dept_row = db.query(SysDept).filter(SysDept.dept_id == dept_id).first()
@@ -72,36 +90,93 @@ async def create_emergency_plan(
 
         # 发送人员
         for u in body['users']:
-            user_id = u['user_id']
+            send_user_id = u['user_id']
+            send_nick_name = u['nick_name']
+            send_user_name = ''
+            send_dept_name = ''
 
             user_row = db.query(SysUser).filter(SysUser.user_id == user_id).first()
-            dept_id = user_row.dept_id
-
-            dept_row = db.query(SysDept).filter(SysDept.dept_id == dept_id).first()
-            dept_name = dept_row.dept_name
+            if user_row is not None:
+                send_user_name = user_row.user_name
+                send_dept_row = db.query(SysDept).filter(SysDept.dept_id == user_row.dept_id).first()
+                send_dept_name = send_dept_row.dept_name
             
             new_resp = InfoPublishResponses(
                 publish_id = new_publish_id,
-                user_id = user_id,
-                user_name = user_row.user_name,
-                nick_name = user_row.nick_name,
-                dept_name = dept_row.dept_name,
+                user_id = send_user_id,
+                user_name = send_user_name,
+                nick_name = send_nick_name,
+                dept_name = send_dept_name,
                 sent_status = 0,
-                response_type = body['response_type']
+                response_type = body['response_type'],
+                publish_channel = body['publish_channel']
             )
             db.add(new_resp)
             db.commit()
         
         # 附件
         if 'attachs' in body:
-            for n in body['attachs']:
-                pass
+            infopublish_files = [
+                InfoPublishFile(
+                    file_name=fileName["name"],
+                    storage_file_name=fileName["url"],
+                    file_path=f'/data/upload/mergefile/uploads/{fileName["url"]}',
+                    file_size=os.path.getsize(f'/data/upload/mergefile/uploads/{fileName["url"]}'),
+                    foreign_key=str(new_publish_id),
+                    from_scenario="infopublish_attach_file",
+                    update_time=datetime.now(),
+                    create_time=datetime.now(),
+                    create_by=user_id,
+                    create_dept=dept_id,
+                    del_flag='0',
+                    status=0,
+                )
+                for fileName in body['attachs']
+            ]
+            db.add_all(infopublish_files)
+            db.commit()
         
         # 审批附件
         if 'examine_attachs' in body:
-            for n in body['examine_attachs']:
-                pass
-        
+            infopublish_files = [
+                InfoPublishFile(
+                    file_name=fileName["name"],
+                    storage_file_name=fileName["url"],
+                    file_path=f'/data/upload/mergefile/uploads/{fileName["url"]}',
+                    file_size=os.path.getsize(f'/data/upload/mergefile/uploads/{fileName["url"]}'),
+                    foreign_key=str(new_publish_id),
+                    from_scenario="infopublish_examine_attach_file",
+                    update_time=datetime.now(),
+                    create_time=datetime.now(),
+                    create_by=user_id,
+                    create_dept=dept_id,
+                    del_flag='0',
+                    status=0,
+                )
+                for fileName in body['examine_attachs']
+            ]
+            db.add_all(infopublish_files)
+            db.commit()
+
+        # 审批记录
+        infopublish_examine = InfoPublishExamine(
+            publish_id = new_publish_id,
+            examine_type = 10, # 提交
+            examine_sub_type = 10, # 提交
+            examine_time = datetime.now(),
+            content = '',
+            user_id = user_id,
+            user_name = user_name,
+            nick_name = nick_name,
+            del_flag = '0'
+        )
+        db.add(infopublish_examine)
+        db.commit()
+
+        # 改提交、待审批状态
+        db.query(InfoPublishBase).filter(InfoPublishBase.id == new_publish_id).update({"publish_status": 1, "examine_status": 1})
+        db.commit()
+
         return {
             "code": 200,
             "msg": "信息创建成功",
@@ -215,12 +290,36 @@ async def get_edit_info(
     data['add_time'] = get_datetime_str(data['add_time'])
     data['publish_time'] = get_datetime_str(data['publish_time'])
 
+    # 反馈 && 未反馈
+    data['feedback_count'] = db.query(InfoPublishResponses).filter(and_(InfoPublishResponses.publish_id == info_id, InfoPublishResponses.sent_status > 0, InfoPublishResponses.response_type > 0)).count()
+    data['unresponsive_count'] = db.query(InfoPublishResponses).filter(and_(InfoPublishResponses.publish_id == info_id, InfoPublishResponses.sent_status > 0, InfoPublishResponses.response_type > 0)).count()
+
+    # 附件
+    rows = db.query(InfoPublishFile).filter(and_(InfoPublishFile.from_scenario=="infopublish_attach_file", InfoPublishFile.foreign_key == info_id, InfoPublishFile.del_flag == '0')).all()
+    data['attachs'] = [
+        {
+            "name": row.file_name,
+            "url": row.storage_file_name
+        }
+        for row in rows
+    ]
+
+    # 审批附件
+    rows = db.query(InfoPublishFile).filter(and_(InfoPublishFile.from_scenario=="infopublish_examine_attach_file", InfoPublishFile.foreign_key == info_id, InfoPublishFile.del_flag == '0')).all()
+    data['examine_attachs'] = [
+        {
+            "name": row.file_name,
+            "url": row.storage_file_name
+        }
+        for row in rows
+    ]
+
     data["examines"] = []
-    rows = db.query(InfoPublishBase).filter(InfoPublishExamine.publish_id == info_id).filter(InfoPublishExamine.del_flag == '0').all()
+    rows = db.query(InfoPublishExamine).filter(InfoPublishExamine.publish_id == info_id).filter(InfoPublishExamine.del_flag == '0').all()
     for row in rows:
         data["examines"].append({
-            "examine_type": row.examine_type,
-            "examine_sub_type": row.examine_sub_type,
+            "examine_type": EXAMINE_TYPE_DICT[row.examine_type],
+            "examine_sub_type": EXAMINE_SUB_TYPE_DICT[row.examine_sub_type],
             "content": row.content,
             "examine_time": get_datetime_str(row.examine_time),
             "user_id": row.user_id,
@@ -293,8 +392,8 @@ async def post_examine_info(
     }
 
 # 信息发布查看发送列表
-@router.get("send_list")
-async def get_send_list(
+@router.get("/sent_list")
+async def get_sent_list(
     info_id: str = Query('', description='信息ID'),
     keywords: str = Query('', description='关键字'),
     sort_by: str = Query('', description='排序字段'),
@@ -305,8 +404,7 @@ async def get_send_list(
 ):
     try:
         # 应用查询条件
-        where = ()
-        where = and_(where, InfoPublishResponses.publish_id == info_id)
+        where = and_(InfoPublishResponses.publish_id == info_id)
 
         # 计算总条目数
         q = db.query(func.count(InfoPublishResponses.id))
@@ -318,18 +416,21 @@ async def get_send_list(
         q = q.filter(where)
         rows = q.order_by(InfoPublishResponses.id.desc()).offset((page - 1) * page_size).limit(page_size).all()
 
-        data = []
-        for row in rows:
-            data.append({
+        data = [
+            {
                 "user_id": row.user_id,
                 "user_name": row.user_name,
                 "nick_name": row.nick_name,
                 "dept_name": row.dept_name,
                 "sent_status": row.sent_status,
                 "sent_time": get_datetime_str(row.sent_time),
-                "response_type": row.response_type
-            })
-
+                "response_type": row.response_type,
+                "publish_channel": row.publish_channel,
+                "yzy_account": row.yzy_account
+            }
+            for row in rows
+        ]
+        
         # 返回结果
         return {
             "code": 200,
@@ -338,6 +439,33 @@ async def get_send_list(
             "total": total
         }
 
+    except Exception as e:
+        # 处理异常
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=str(e))
+    
+# 列出可用模板
+@router.post("/template_list")
+def template_list(db: Session = Depends(get_db)):
+    try:
+        rows = db.query(InfoPublishTemplate).filter(InfoPublishTemplate.del_flag == '0').all()
+
+        data = [
+            {
+                "id": row.id,
+                "name": row.name,
+                "content": row.content
+            }
+            for row in rows
+        ]
+
+        return {
+            "code": 200,
+            "msg": "查询成功",
+            "data": data,
+            "total": len(data)
+        }
+
     except Exception as e:
         # 处理异常
         traceback.print_exc()