sys_config.py 5.7 KB

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