| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- # -*- coding: utf-8 -*-
- # @Author : YY
- from typing import List, Optional
- from flask import g
- from sqlalchemy import delete, insert, select, update
- from ruoyi_common.sqlalchemy.model import ColumnEntityList
- from ruoyi_common.sqlalchemy.transaction import Transactional
- from ruoyi_system.domain.entity import SysPost
- from ruoyi_admin.ext import db
- from ruoyi_system.domain.po import SysPostPo, SysUserPo, SysUserPostPo
- class SysPostMapper:
- """
- 岗位的数据访问层
- """
- default_fields = {
- 'post_id', 'post_name', 'post_code', 'post_sort', 'status',
- 'create_by', 'create_time', 'remark'
- }
- default_columns = ColumnEntityList(SysPostPo, default_fields, False)
- @classmethod
- def select_post_list(cls, post: SysPost) -> List[SysPost]:
- """
- 根据条件,查询岗位列表
- Args:
- post (SysPost): 岗位条件
- Returns:
- List[SysPost]: 岗位列表
- """
- criterions = []
- if post.post_code:
- criterions.append(SysPostPo.post_code.like(f'%{post.post_code}%'))
- if post.post_name:
- criterions.append(SysPostPo.post_name.like(f'%{post.post_name}%'))
- if post.status:
- criterions.append(SysPostPo.post_status == post.status)
- stmt = select(*cls.default_columns).where(*criterions)
- if "criterian_meta" in g and g.criterian_meta.page:
- g.criterian_meta.page.stmt = stmt
- rows = db.session.execute(stmt).all()
- return [cls.default_columns.cast(row, SysPost) for row in rows]
- @classmethod
- def select_post_all(cls) -> List[SysPost]:
- """
- 查询所有岗位
- Returns:
- List[SysPost]: 岗位列表
- """
- stmt = select(*cls.default_columns)
- rows = db.session.execute(stmt).all()
- return [cls.default_columns.cast(row, SysPost) for row in rows]
- @classmethod
- def select_post_by_id(cls, post_id: int) -> Optional[SysPost]:
- """
- 通过岗位ID查询岗位信息
- Args:
- post_id (int): 岗位ID
- Returns:
- Optional[SysPost]: 岗位信息
- """
- stmt = select(*cls.default_columns).where(SysPostPo.post_id == post_id)
- row = db.session.execute(stmt).one_or_none()
- return cls.default_columns.cast(row, SysPost) if row else None
- @classmethod
- def select_post_list_by_user_id(cls, user_id: int) -> List[int]:
- """
- 根据用户ID,查询岗位ID列表
- Args:
- user_id (int): 用户ID
- Returns:
- List[int]: 岗位ID列表
- """
- stmt = select(SysPostPo.post_id).select_from(SysPostPo) \
- .join(SysUserPostPo, SysUserPostPo.post_id == SysPostPo.post_id) \
- .join(SysUserPo, SysUserPo.user_id == SysUserPostPo.user_id) \
- .where(SysUserPo.user_id == user_id)
- return db.session.execute(stmt).scalars().all()
- @classmethod
- def select_posts_by_user_name(cls, user_name: str) -> List[SysPost]:
- """
- 根据用户名,查询岗位列表
- Args:
- user_name (str): 用户名
- Returns:
- List[SysPost]: 岗位列表
- """
- fields = {"post_id", "post_name", "post_code"}
- columns = ColumnEntityList(SysPostPo, fields, False)
- stmt = select(*columns).select_from(SysPostPo) \
- .join(SysUserPostPo, SysUserPostPo.post_id == SysPostPo.id) \
- .join(SysUserPo, SysUserPo.user_id == SysUserPostPo.user_id) \
- .where(SysUserPo.user_name == user_name)
- rows = db.session.execute(stmt).all()
- eos = list()
- for row in rows:
- eos.append(columns.cast(row, SysPost))
- return eos
- @classmethod
- @Transactional(db.session)
- def delete_post_by_id(cls, post_id: int) -> int:
- """
- 删除岗位信息
- Args:
- post_id (int): 岗位ID
- Returns:
- int: 影响行数
- """
- stmt = delete(SysPostPo).where(SysPostPo.post_id == post_id)
- num = db.session.execute(stmt).rowcount
- return num
- @classmethod
- @Transactional(db.session)
- def delete_post_by_ids(cls, post_ids: List[int]) -> int:
- """
- 批量删除岗位信息
- Args:
- post_ids (List[int]): 岗位ID列表
- Returns:
- int: 影响行数
- """
- stmt = delete(SysPostPo).where(SysPostPo.post_id.in_(post_ids))
- num = db.session.execute(stmt).rowcount
- return num
- @classmethod
- @Transactional(db.session)
- def update_post(cls, post: SysPost) -> int:
- """
- 修改岗位信息
- Args:
- post (SysPost): 岗位信息
- Returns:
- int: 影响行数
- """
- fields = {
- "post_name", "post_code", "post_sort", "status", "remark",
- "update_by", "update_time"
- }
- data = post.model_dump(
- include=fields,
- exclude_none=True,
- exclude_unset=True
- )
- stmt = update(SysPostPo).where(SysPostPo.post_id == post.post_id) \
- .values(data)
- return db.session.execute(stmt).rowcount
- @classmethod
- @Transactional(db.session)
- def insert_post(cls, post: SysPost) -> int:
- """
- 新增岗位信息
- Args:
- post (SysPost): 岗位信息
- Returns:
- int: 新增记录的ID
- """
- fields = {
- "post_id", "post_name", "post_code", "post_sort", "status",
- "remark", "create_by", "create_time"
- }
- data = post.model_dump(
- include=fields,
- exclude_none=True,
- exclude_unset=True
- )
- stmt = insert(SysPostPo).values(data)
- out = db.session.execute(stmt).inserted_primary_key
- return out[0] if out else 0
- @classmethod
- def check_post_name_unique(cls, post_name: str) -> Optional[SysPost]:
- """
- 校验岗位名称
- Args:
- post_name (str): 岗位名称
- Returns:
- Optional[SysPost]: 岗位信息
- """
- stmt = select(*cls.default_columns) \
- .where(SysPostPo.post_name == post_name) \
- .limit(1)
- row = db.session.execute(stmt).one_or_none()
- return cls.default_columns.cast(row, SysPost) if row else None
- @classmethod
- def check_post_code_unique(cls, post_code: str) -> Optional[SysPost]:
- """
- 校验岗位编码
- Args:
- post_code (str): 岗位编码
- Returns:
- Optional[SysPost]: 岗位信息
- """
- stmt = select(*cls.default_columns) \
- .where(SysPostPo.post_code == post_code) \
- .limit(1)
- row = db.session.execute(stmt).one_or_none()
- return cls.default_columns.cast(row, SysPost) if row else None
- @classmethod
- def delete_user_post_by_user_id(cls, user_id):
- stmt = delete(SysUserPostPo) \
- .where(SysUserPostPo.user_id == user_id)
- return db.session.execute(stmt).rowcount
|