فهرست منبع

新增部门管理接口

baoyubo 10 ماه پیش
والد
کامیت
653d3a38e8

+ 82 - 79
models/ry_sys_base.py

@@ -33,11 +33,11 @@ class SysSocial(Base):
     code = Column(String(255), default=None, comment='用户的授权code')
     oauth_token = Column(String(255), default=None, comment='Twitter平台用户的附带属性')
     oauth_token_secret = Column(String(255), default=None, comment='Twitter平台用户的附带属性')
-    create_dept = Column(BigInteger, comment='创建部门')
-    create_by = Column(BigInteger, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
-    update_by = Column(BigInteger, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
 
     class Config:
@@ -63,11 +63,11 @@ class SysTenant(Base):
     account_count = Column(Integer, default=-1, comment='用户数量(-1不限制)')
     status = Column(String(1), default='0', comment='租户状态(0正常 1停用)')
     del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
-    create_dept = Column(BigInteger, comment='创建部门')
-    create_by = Column(BigInteger, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
-    update_by = Column(BigInteger, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
 
     class Config:
         orm_mode = True
@@ -84,11 +84,11 @@ class SysTenantPackage(Base):
     menu_check_strictly = Column(Integer, default=1, comment='菜单树选择项是否关联显示')
     status = Column(String(1), default='0', comment='状态(0正常 1停用)')
     del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
-    create_dept = Column(BigInteger, comment='创建部门')
-    create_by = Column(BigInteger, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
-    update_by = Column(BigInteger, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
 
     class Config:
         orm_mode = True
@@ -100,20 +100,22 @@ class SysDept(Base):
     dept_id = Column(BigInteger, primary_key=True,autoincrement=True, comment='部门id')
     tenant_id = Column(String(20), default='000000', comment='租户编号')
     parent_id = Column(BigInteger, default=0, comment='父部门id')
+    parent_name = Column(String(30), default='', comment='父部门名称')
     ancestors = Column(String(500), default='', comment='祖级列表')
     dept_name = Column(String(30), default='', comment='部门名称')
     dept_category = Column(String(100), default=None, comment='部门类别编码')
     order_num = Column(Integer, default=0, comment='显示顺序')
     leader = Column(BigInteger, default=None, comment='负责人')
+    leader_name = Column(String(30), default=None, comment='负责人姓名')
     phone = Column(String(11), default=None, comment='联系电话')
     email = Column(String(50), default=None, comment='邮箱')
     status = Column(String(1), default='0', comment='部门状态(0正常 1停用)')
     del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
     create_by = Column(BigInteger, default=None, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
 
     class Config:
         orm_mode = True
@@ -128,6 +130,7 @@ class SysUser(Base):
     user_id = Column(BigInteger, primary_key=True,autoincrement=True, comment='用户ID')
     tenant_id = Column(String(20), default='000000', comment='租户编号')
     dept_id = Column(BigInteger, default=None, comment='部门ID')
+    dept_name = Column(String(30), default='', comment='部门名称')
     user_name = Column(String(30), nullable=False, comment='用户账号')
     nick_name = Column(String(30), nullable=False, comment='用户昵称')
     user_type = Column(String(10), default='sys_user', comment='用户类型(sys_user系统用户)')
@@ -142,9 +145,9 @@ class SysUser(Base):
     login_date = Column(DateTime, comment='最后登录时间')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
     create_by = Column(BigInteger, default=None, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     remark = Column(String(500), default=None, comment='备注')
 
     class Config:
@@ -166,9 +169,9 @@ class SysPost(Base):
     status = Column(String(1), nullable=False, comment='状态(0正常 1停用)')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
     create_by = Column(BigInteger, default=None, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     remark = Column(String(500), default=None, comment='备注')
 
     class Config:
@@ -192,9 +195,9 @@ class SysRole(Base):
     del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
     create_by = Column(BigInteger, default=None, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     remark = Column(String(500), default=None, comment='备注')
 
     class Config:
@@ -311,9 +314,9 @@ class SysDictType(Base):
     dict_type = Column(String(100), default='', comment='字典类型')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
     create_by = Column(BigInteger, default=None, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     remark = Column(String(500), default=None, comment='备注')
     del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
 
@@ -359,9 +362,9 @@ class SysConfig(Base):
     config_type = Column(CHAR(1), default='N', comment='系统内置(Y是 N否)')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
     create_by = Column(BigInteger, default=None, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     remark = Column(String(500), default=None, comment='备注')
 
     class Config:
@@ -406,9 +409,9 @@ class SysNotice(Base):
     status = Column(CHAR(1), default='0', comment='公告状态(0正常 1关闭)')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
     create_by = Column(BigInteger, default=None, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     remark = Column(String(255), default=None, comment='备注')
 
     class Config:
@@ -436,9 +439,9 @@ class GenTable(Base):
     options = Column(String(1000), comment='其它生成选项')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
     create_by = Column(BigInteger, default=None, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     remark = Column(String(500), default=None, comment='备注')
 
     class Config:
@@ -468,9 +471,9 @@ class GenTableColumn(Base):
     sort = Column(Integer, comment='排序')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
     create_by = Column(BigInteger, default=None, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
 
     class Config:
         orm_mode = True
@@ -486,10 +489,10 @@ class SysOss(Base):
     file_suffix = Column(String(10), default='', nullable=False, comment='文件后缀名')
     url = Column(String(500), nullable=False, comment='URL地址')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
-    create_time = Column(DateTime, default=None, comment='创建时间')
-    create_by = Column(BigInteger, default=None, comment='上传人')
-    update_time = Column(DateTime, default=None, comment='更新时间')
-    update_by = Column(BigInteger, default=None, comment='更新人')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     service = Column(String(20), default='minio', nullable=False, comment='服务商')
 
     class Config:
@@ -515,9 +518,9 @@ class SysOssConfig(Base):
     ext1 = Column(String(255), default='', comment='扩展字段')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
     create_by = Column(BigInteger, default=None, comment='创建者')
-    create_time = Column(DateTime, default=None, comment='创建时间')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
-    update_time = Column(DateTime, default=None, comment='更新时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     remark = Column(String(500), default=None, comment='备注')
 
     class Config:
@@ -539,9 +542,9 @@ class SysClient(Base):
     del_flag = Column(CHAR(1), default='0', comment='删除标志(0代表存在 2代表删除)')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
     create_by = Column(BigInteger, default=None, comment='创建者')
-    create_time = Column(DateTime, default=None, comment='创建时间')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
     update_by = Column(BigInteger, default=None, comment='更新者')
-    update_time = Column(DateTime, default=None, comment='更新时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
 
     class Config:
         orm_mode = True
@@ -559,10 +562,10 @@ class TestDemo(Base):
     value = Column(String(255), default=None, comment='值')
     version = Column(Integer, default=0, comment='版本')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
-    create_time = Column(DateTime, default=None, comment='创建时间')
-    create_by = Column(BigInteger, default=None, comment='创建人')
-    update_time = Column(DateTime, default=None, comment='更新时间')
-    update_by = Column(BigInteger, default=None, comment='更新人')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     del_flag = Column(Integer, default=0, comment='删除标志')
 
     class Config:
@@ -580,10 +583,10 @@ class TestTree(Base):
     tree_name = Column(String(255), default=None, comment='树节点名称')
     version = Column(Integer, default=0, comment='版本')
     create_dept = Column(BigInteger, default=None, comment='创建部门')
-    create_time = Column(DateTime, default=None, comment='创建时间')
-    create_by = Column(BigInteger, default=None, comment='创建人')
-    update_time = Column(DateTime, default=None, comment='更新时间')
-    update_by = Column(BigInteger, default=None, comment='更新人')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     del_flag = Column(Integer, default=0, comment='删除标志')
 
     class Config:
@@ -601,11 +604,11 @@ class TestLeave(Base):
     leave_days = Column(Integer, nullable=False, comment='请假天数')
     remark = Column(String(255), comment='请假原因')
     status = Column(String(255), comment='状态')
-    create_dept = Column(BigInteger, comment='创建部门')
-    create_by = Column(BigInteger, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
-    update_by = Column(BigInteger, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     tenant_id = Column(String(20), comment='租户编号')
 
     class Config:
@@ -621,11 +624,11 @@ class WfCategory(Base):
     parent_id = Column(BigInteger, comment='父级id')
     sort_num = Column(Integer, comment='排序')
     tenant_id = Column(String(20), comment='租户编号')
-    create_dept = Column(BigInteger, comment='创建部门')
-    create_by = Column(BigInteger, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
-    update_by = Column(BigInteger, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
 
     # 定义唯一性约束条件
     __table_args__ = (UniqueConstraint('category_code', name='uni_category_code'),)
@@ -645,11 +648,11 @@ class WfTaskBackNode(Base):
     task_type = Column(String(255), nullable=False, comment='节点类型')
     assignee = Column(String(2000), nullable=False, comment='审批人')
     tenant_id = Column(String(20), comment='租户编号')
-    create_dept = Column(BigInteger, comment='创建部门')
-    create_by = Column(BigInteger, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
-    update_by = Column(BigInteger, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
 
     class Config:
         orm_mode = True
@@ -663,11 +666,11 @@ class WfDefinitionConfig(Base):
     definition_id = Column(String(255), nullable=False, comment='流程定义ID')
     process_key = Column(String(255), nullable=False, comment='流程KEY')
     version = Column(Integer, nullable=False, comment='流程版本')
-    create_dept = Column(BigInteger, comment='创建部门')
-    create_by = Column(BigInteger, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
-    update_by = Column(BigInteger, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     remark = Column(String(500), default='', comment='备注')
     tenant_id = Column(String(20), comment='租户编号')
 
@@ -687,11 +690,11 @@ class WfFormManage(Base):
     router = Column(String(255), nullable=False, comment='路由地址/表单ID')
     remark = Column(String(500), comment='备注')
     tenant_id = Column(String(20), comment='租户编号')
-    create_dept = Column(BigInteger, comment='创建部门')
-    create_by = Column(BigInteger, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
-    update_by = Column(BigInteger, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
 
     class Config:
         orm_mode = True
@@ -707,11 +710,11 @@ class WfNodeConfig(Base):
     node_id = Column(String(255), nullable=False, comment='节点id')
     definition_id = Column(String(255), nullable=False, comment='流程定义id')
     apply_user_task = Column(CHAR(1), default='0', comment='是否为申请人节点(0是 1否)')
-    create_dept = Column(BigInteger, comment='创建部门')
-    create_by = Column(BigInteger, comment='创建者')
-    create_time = Column(DateTime, comment='创建时间')
-    update_by = Column(BigInteger, comment='更新者')
-    update_time = Column(DateTime, comment='更新时间')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     tenant_id = Column(String(20), comment='租户编号')
 
     class Config:

+ 4 - 0
routers/prod_api/system/__init__.py

@@ -8,6 +8,8 @@ from models import *
 from . import user
 from . import menu
 from . import dic
+from . import dept
+
 import json
 
 router = APIRouter()
@@ -17,5 +19,7 @@ router.include_router(menu.router, prefix="/menu") #, dependencies=[Depends(vali
 
 
 router.include_router(dic.router, prefix="/dict")
+router.include_router(dept.router, prefix="/dept")
+
 
 

+ 281 - 0
routers/prod_api/system/dept/__init__.py

@@ -0,0 +1,281 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from fastapi import APIRouter, Request, Depends, Query, HTTPException, status
+from common.security import valid_access_token
+from pydantic import BaseModel
+from database import get_db
+from sqlalchemy.orm import Session
+from typing import List
+from models import *
+from utils import *
+import json
+from sqlalchemy.sql import func
+from common.auth_user import *
+import traceback
+
+router = APIRouter()
+
+
+def dept_id_get_dept_info(db,dept_id):
+    query = db.query(SysDept)
+    query = query.filter(SysDept.del_flag != '2')
+    query = query.filter(SysDept.dept_id == dept_id)
+    return query.first()
+
+def user_id_get_user_info(db,user_id):
+    query = db.query(SysUser)
+    query = query.filter(SysUser.del_flag != '2')
+    query = query.filter(SysUser.dept_id == user_id)
+    return query.first()
+
+
+@router.get('/list')
+async def get_list(
+    # request: Request,
+    deptName: str = Query(None, max_length=100),
+    deptCategory:str = Query(None, max_length=100),
+    status: str =  Query(None, max_length=100),
+    db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+    query = db.query(SysDept)
+    query = query.filter(SysDept.del_flag != '2')
+    if deptName:
+        query = query.filter(SysDept.dept_name.like(f'%{deptName}%'))
+    if deptCategory:
+        query = query.filter(SysDept.dept_category.like(f'%{deptCategory}%'))
+    if status:
+        query = query.filter(SysDept.status.like(f'%{status}%'))
+
+    dept_list = query.all()
+    # 将模型实例转换为字典
+    dept_list_dict = [{
+            "deptId": dept.dept_id,
+            "deptName": dept.dept_name,
+            "ancestors": dept.ancestors,
+            "deptCategory": dept.dept_category,
+            "leader": dept.leader,
+            "email": dept.email,
+            "leaderName": dept.leader_name,
+            "orderNum": dept.order_num,
+            "parentId": dept.parent_id,
+            "parentName": dept.parent_name,
+            "status": dept.status,
+            "phone": dept.phone,
+            "createTime": dept.create_time.strftime('%Y-%m-%d %H:%M:%S') if dept.create_time else '',
+        } for dept in dept_list]
+
+
+    return {
+        "code": 200,
+        "data": dept_list_dict,
+
+        "msg": "操作成功"
+    }
+
+@router.get('/list/exclude/{dept_id}')
+async def get_list(
+    # request: Request,
+    dept_id: int,
+    db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+    query = db.query(SysDept)
+    query = query.filter(SysDept.del_flag != '2')
+    if dept_id:
+        query = query.filter(SysDept.dept_id != dept_id)
+
+    dept_list = query.all()
+    # 将模型实例转换为字典
+    dept_list_dict = [{
+        "deptId": dept.dept_id,
+        "deptName": dept.dept_name,
+        "ancestors": dept.ancestors,
+        "deptCategory": dept.dept_category,
+        "leader": dept.leader,
+        "email": dept.email,
+        "leaderName": dept.leader_name,
+        "orderNum": dept.order_num,
+        "parentId": dept.parent_id,
+        "parentName": dept.parent_name,
+        "status": dept.status,
+        "phone": dept.phone,
+        "createTime": dept.create_time.strftime('%Y-%m-%d %H:%M:%S') if dept.create_time else '',
+    } for dept in dept_list]
+
+    return {
+        "code": 200,
+        "data": dept_list_dict,
+
+        "msg": "操作成功"
+    }
+
+@router.get('/{dept_id}')
+async def get_dept_info(
+    dept_id:int,
+    db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+    dept = dept_id_get_dept_info(db,dept_id)
+    # 将模型实例转换为字典
+    dept_dict = {
+            "deptId": dept.dept_id,
+            "deptName": dept.dept_name,
+            "ancestors": dept.ancestors,
+            "deptCategory": dept.dept_category,
+            "leader": dept.leader,
+            "email": dept.email,
+            "leaderName": dept.leader_name,
+            "orderNum": dept.order_num,
+            "parentId": dept.parent_id,
+            "parentName": dept.parent_name,
+            "status": dept.status,
+            "phone": dept.phone,
+            "createTime": dept.create_time.strftime('%Y-%m-%d %H:%M:%S') if dept.create_time else '',
+        }
+
+
+    return {
+        "code": 200,
+        "data": dept_dict,
+        "msg": "操作成功"
+    }
+
+@router.delete('/{dept_id}')
+async def delete_dept(
+    dept_id:int,
+    db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+
+    dept = dept_id_get_dept_info(db,dept_id)
+    # 将模型实例转换为字典
+    dept.del_flag = '2'
+    dept.update_by = user_id
+    db.commit()
+
+    return {
+        "code": 200,
+        "data": None,
+        "msg": "操作成功"
+    }
+
+@router.post('')
+async def create_dept(
+    db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+    try:
+        # 验证必需的字段
+        required_fields = ['deptName', 'orderNum', 'parentId',  'status']
+        missing_fields = [field for field in required_fields if field not in body]
+        print(missing_fields)
+        if missing_fields:
+            raise HTTPException(status_code=401, detail=f"Missing required fields: {', '.join(missing_fields)}")
+
+
+        deptName = body['deptName']
+        orderNum = body['orderNum']
+        parentId = body['parentId']
+        status = body['status']
+        deptCategory = None
+        email = None
+        phone = None
+        leader = None
+        if 'deptCategory' in body:
+            deptCategory = body['deptCategory']
+        if 'email' in body:
+            email = body['email']
+        if 'phone' in body:
+            phone = body['phone']
+        if 'leader' in body:
+            leader = body['leader']
+
+        dept_parent = dept_id_get_dept_info(db,parentId)
+
+        user = user_id_get_user_info(db,user_id)
+
+        new_dept = SysDept(
+            parent_id=parentId,
+            parent_name = dept_parent.dept_name,
+            ancestors = dept_parent.ancestors+','+str(parentId),
+            dept_name = deptName,
+            dept_category = deptCategory,
+            order_num = orderNum,
+            phone = phone,
+            email = email,
+            status = status,
+            leader = leader,
+            create_by = user_id,
+            create_dept = user.dept_id
+        )
+
+        db.add(new_dept)
+        db.commit()
+        return {
+            "code": 200,
+            "data": None,
+            "msg": "操作成功"
+        }
+
+    except Exception as e:
+        db.rollback()
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+
+@router.put('')
+async def dept_info_update(
+    db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+
+    try:
+        required_fields = ['deptId','deptName', 'orderNum', 'parentId', 'status']
+        missing_fields = [field for field in required_fields if field not in body]
+
+        if missing_fields:
+            raise HTTPException(status_code=401, detail=f"Missing required fields: {', '.join(missing_fields)}")
+        deptId = body['deptId']
+        dept = dept_id_get_dept_info(db,deptId)
+        if not dept:
+            detail = "部门不存在"
+            raise HTTPException(status_code=404, detail="菜单不存在")
+
+        dept.deptName = body['deptName']
+        dept.orderNum = body['orderNum']
+        dept.parentId = body['parentId']
+        dept.status = body['status']
+
+        if 'deptCategory' in body:
+            dept.dept_category = body['deptCategory']
+        if 'email' in body:
+            dept.email = body['email']
+        if 'phone' in body:
+            dept.phone = body['phone']
+        if 'leader' in body:
+            dept.leader = body['leader']
+        if 'leaderName' in body:
+            dept.leader_name = body['leaderName']
+        if 'parentName' in body:
+            dept.parent_name = body['parentName']
+
+        dept.update_by = user_id
+
+        db.commit()
+        return {
+            "code": 200,
+            "msg": "部门更新成功"
+        }
+    except Exception as e:
+        # db.rollback()
+        if str(e)=='':
+            e = detail
+        raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))

+ 1 - 0
routers/prod_api/system/menu/__init__.py

@@ -397,6 +397,7 @@ class SysMuneUpdateForm(BaseModel):
     queryParam:str=None
     status:str = None
     visible:str = None
+
 @router.put('')
 async def update(
     request: Request,

+ 46 - 0
routers/prod_api/system/user/__init__.py

@@ -92,3 +92,49 @@ async def userlist(request: Request,db: Session = Depends(get_db), user_id: int
     pass
 
 
+
+@router.get('/list/dept/{dept_id}')
+async def get_dept_user_list(
+    # request: Request,
+    dept_id: int,
+    db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+    query = db.query(SysUser)
+    query = query.filter(SysUser.del_flag != '2')
+    if dept_id:
+        query = query.filter(SysUser.dept_id == dept_id)
+
+    user_list = query.all()
+    # 将模型实例转换为字典
+    user_list_dict = [{
+            "userId": user.user_id,
+            "tenantId": user.tenant_id,
+            "deptId": user.dept_id,
+            "userName": user.user_name,
+            "nickName": user.nick_name,
+            "userType": user.user_type,
+            "email": user.email,
+            "phonenumber": user.phonenumber,
+            "sex": user.sex,
+            "avatar": user.avatar,
+            "status": user.status,
+            "loginIp": user.login_ip,
+            "loginDate": user.login_date.strftime('%Y-%m-%d %H:%M:%S') if user.login_date else '',
+            "remark": user.remark,
+            "createTime": user.create_time.strftime('%Y-%m-%d %H:%M:%S') if user.create_time else '',
+            "deptName": user.dept_name,
+            "roles": None,
+            "roleIds": None,
+            "postIds": None,
+            "roleId": None
+        } for user in user_list]
+
+
+    return {
+        "code": 200,
+        "data": user_list_dict,
+
+        "msg": "操作成功"
+    }