| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- # -*- coding: utf-8 -*-
- # @Author : YY
- from types import NoneType
- 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_system.domain.entity import SysNotice
- from ruoyi_system.domain.po import SysNoticePo
- from ruoyi_admin.ext import db
- class SysNoticeMapper:
-
- """
- 公告的数据访问层
- """
- default_fields = {
- "notice_id", "notice_title", "notice_type", "notice_content", "status",
- "create_time", "update_time", "create_by", "update_by", "remark"
- }
-
- default_columns = ColumnEntityList(SysNoticePo, default_fields, False)
-
- @classmethod
- def select_notice_by_id(cls, id: int) -> Optional[SysNotice]:
- """
- 根据公告ID,查询公告信息
- Args:
- id (int): 公告ID
- Returns:
- Optional[SysNotice]: 公告信息
- """
- stmt = select(*cls.default_columns) \
- .where(SysNoticePo.notice_id == id)
- row = db.session.execute(stmt).one_or_none()
- return cls.default_columns.cast(row,SysNotice) if row else None
- @classmethod
- def select_notice_list(cls, notice: SysNotice|NoneType) -> List[SysNotice]:
- """
- 根据条件,查询公告列表
- Args:
- notice (SysNotice|NoneType): 公告信息
- Returns:
- List[SysNotice]: 公告列表
- """
- if notice is None:
- stmt = select(*cls.default_columns)
- else:
- criterions = []
- if notice.notice_title:
- criterions.append(
- SysNoticePo.notice_title.like(f'%{notice.notice_title}%')
- )
- if notice.notice_type:
- criterions.append(
- SysNoticePo.notice_type == notice.notice_type
- )
- if notice.create_by:
- criterions.append(
- SysNoticePo.create_by.like(f'%{notice.create_by}%')
- )
- 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,SysNotice) for row in rows]
-
- @classmethod
- def insert_notice(cls, notice: SysNotice) -> int:
- """
- 新增一条公告记录
- Args:
- notice (SysNotice): 公告信息
- Returns:
- int: 新增记录的ID
- """
- fields = {
- "notice_title", "notice_type", "notice_content", "status",
- "create_by", "create_time", "remark"
- }
- data = notice.model_dump(
- include=fields, exclude_none=True, exclude_unset=True
- )
- stmt = insert(SysNoticePo).values(data)
- out = db.session.execute(stmt).inserted_primary_key
- return out[0] if out else 0
- @classmethod
- def update_notice(cls, notice: SysNotice) -> int:
- """
- 修改公告信息
- Args:
- notice (SysNotice): 公告信息
- Returns:
- int: 修改数据量
- """
- fields = {
- "notice_title", "notice_type", "notice_content", "status",
- "update_by", "update_time", "remark"
- }
- data = notice.model_dump(
- include=fields, exclude_none=True, exclude_unset=True
- )
- stmt = update(SysNoticePo) \
- .where(SysNoticePo.notice_id == notice.notice_id) \
- .values(data)
- return db.session.execute(stmt).rowcount
- @classmethod
- def delete_notice_by_id(cls, id: int) -> int:
- """
- 根据公告ID,删除公告
- Args:
- id (int): 公告ID
- Returns:
- int: 删除数据量
- """
- stmt = delete(SysNoticePo) \
- .where(SysNoticePo.notice_id == id)
- return db.session.execute(stmt).rowcount
- @classmethod
- def delete_notice_by_ids(cls, ids: List[int]) -> int:
- """
- 批量删除公告
- Args:
- ids (List[int]): 公告ID列表
- Returns:
- int: 删除数据量
- """
- stmt = delete(SysNoticePo) \
- .where(SysNoticePo.notice_id.in_(ids))
- return db.session.execute(stmt).rowcount
|