sys_config.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. # -*- coding: utf-8 -*-
  2. # @Author : YY
  3. from typing import List, Optional
  4. from flask import g
  5. from sqlalchemy import delete, insert, select, update
  6. from ruoyi_admin.ext import db
  7. from ruoyi_common.base.model import ExtraModel
  8. from ruoyi_common.sqlalchemy.model import ColumnEntityList
  9. from ruoyi_common.sqlalchemy.transaction import Transactional
  10. from ruoyi_system.domain.entity import SysConfig
  11. from ruoyi_system.domain.po import SysConfigPo
  12. class SysConfigMapper:
  13. """
  14. 配置数据访问层
  15. """
  16. default_fields = {
  17. 'config_id', 'config_key', 'config_name', 'config_value',
  18. 'config_type', 'create_time', 'update_time'
  19. }
  20. default_columns = ColumnEntityList(SysConfigPo, default_fields, False)
  21. @classmethod
  22. def select_config(cls, config: SysConfig) -> Optional[SysConfig]:
  23. """
  24. 查询单个配置信息
  25. Args:
  26. config (SysConfig): 配置信息
  27. Returns:
  28. Optional[SysConfig]: 配置信息
  29. """
  30. criterions = []
  31. if config.config_id:
  32. criterions.append(SysConfigPo.config_id == config.config_id)
  33. if config.config_key:
  34. criterions.append(SysConfigPo.config_key == config.config_key)
  35. stmt = select(*cls.default_columns) \
  36. .where(*criterions)
  37. row = db.session.execute(stmt).one_or_none()
  38. return cls.default_columns.cast(row,SysConfig) if row else None
  39. @classmethod
  40. def select_config_list(cls, config: SysConfig) -> List[SysConfig]:
  41. """
  42. 查询配置列表
  43. Args:
  44. config (SysConfig): 配置信息
  45. Returns:
  46. List[SysConfig]: 配置列表
  47. """
  48. criterions = []
  49. if config.config_name:
  50. criterions.append(SysConfigPo.config_name == config.config_name)
  51. if config.config_type:
  52. criterions.append(SysConfigPo.config_type == config.config_type)
  53. if config.config_key:
  54. criterions.append(SysConfigPo.config_key == config.config_key)
  55. if "criterian_meta" in g and g.criterian_meta.extra:
  56. extra:ExtraModel = g.criterian_meta.extra
  57. if extra.start_time and extra.end_time:
  58. criterions.append(SysConfigPo.create_time >= extra.start_time)
  59. criterions.append(SysConfigPo.create_time <= extra.end_time)
  60. stmt = select(*cls.default_columns) \
  61. .where(*criterions) \
  62. .order_by(SysConfigPo.config_id.desc())
  63. if "criterian_meta" in g and g.criterian_meta.page:
  64. g.criterian_meta.page.stmt = stmt
  65. rows = db.session.execute(stmt).all()
  66. eos = list()
  67. for row in rows:
  68. eos.append(cls.default_columns.cast(row,SysConfig))
  69. return eos
  70. @classmethod
  71. def check_config_key_unique(cls, config_key: str) -> Optional[SysConfig]:
  72. """
  73. 根据键名查询配置信息
  74. Args:
  75. config_key (str): 键名
  76. Returns:
  77. Optional[SysConfig]: 配置信息
  78. """
  79. stmt = select(*cls.default_columns) \
  80. .where(SysConfigPo.config_key == config_key) \
  81. .limit(1)
  82. row = db.session.execute(stmt).one_or_none()
  83. return cls.default_columns.cast(row, SysConfig) if row else None
  84. @classmethod
  85. @Transactional(db.session)
  86. def insert_config(cls, config: SysConfig) -> int:
  87. """
  88. 新增配置信息
  89. Args:
  90. config (SysConfig): 配置信息
  91. Returns:
  92. int: 新增记录的ID
  93. """
  94. fields = {
  95. 'config_key', 'config_name', 'config_value', 'config_type',
  96. 'remark', "create_time" , "create_by"
  97. }
  98. data = config.model_dump(
  99. include=fields, exclude_none=True, exclude_unset=True
  100. )
  101. stmt = insert(SysConfigPo).values(data)
  102. out = db.session.execute(stmt).inserted_primary_key
  103. return out[0] if out else 0
  104. @classmethod
  105. @Transactional(db.session)
  106. def update_config(cls, config: SysConfig) -> int:
  107. """
  108. 修改配置信息
  109. Args:
  110. config (SysConfig): 配置信息
  111. Returns:
  112. int: 影响的行数
  113. """
  114. fields = {
  115. 'config_key', 'config_name', 'config_value', 'config_type',
  116. 'remark', "update_time" , "update_by"
  117. }
  118. data = config.model_dump(
  119. include=fields, exclude_none=True, exclude_unset=True
  120. )
  121. stmt = update(SysConfigPo) \
  122. .where(SysConfigPo.config_id == config.config_id) \
  123. .values(data)
  124. return db.session.execute(stmt).rowcount
  125. @classmethod
  126. @Transactional(db.session)
  127. def delete_config_by_id(cls, config_id: int) -> int:
  128. """
  129. 根据 ID 删除配置信息
  130. Args:
  131. config_id (int): 配置 ID
  132. Returns:
  133. int: 影响的行数
  134. """
  135. stmt = delete(SysConfigPo).where(SysConfigPo.config_id == config_id)
  136. return db.session.execute(stmt).rowcount
  137. @classmethod
  138. @Transactional(db.session)
  139. def delete_configs_by_ids(cls, config_ids: List[int]) -> int:
  140. """
  141. 批量删除配置信息
  142. Args:
  143. config_ids (List[int]): 配置 ID 列表
  144. Returns:
  145. int: 影响的行数
  146. """
  147. stmt = delete(SysConfigPo).where(SysConfigPo.config_id.in_(config_ids))
  148. return db.session.execute(stmt).rowcount