sys_productinfo_conf_mapper.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. from typing import List
  2. from datetime import datetime
  3. from flask import g, request
  4. from sqlalchemy import select, update, delete, func, or_
  5. from ruoyi_admin.ext import db
  6. from ruoyi_common.domain.entity import SysProductConf
  7. from ruoyi_system.domain.po import SysProductConfPo
  8. from ruoyi_common.utils.base import Seq
  9. class SysProductInfoConfMapper:
  10. """单品配置表Mapper"""
  11. @staticmethod
  12. def select_productinfo_conf_list(sys: SysProductConf) -> List[SysProductConf]:
  13. """
  14. 查询单品配置表列表
  15. Args:
  16. sys (sys_product_info_conf): 单品配置表对象
  17. Returns:
  18. List[sys_product_info_conf]: 单品配置表列表
  19. """
  20. try:
  21. # 构建查询条件
  22. stmt = select(SysProductConfPo)
  23. # 获取关键词搜索参数(从请求参数中获取)
  24. keyword = None
  25. try:
  26. if request and hasattr(request, 'args'):
  27. keyword = request.args.get('keyword', None)
  28. # 如果keyword是空字符串,转换为None
  29. if keyword == '':
  30. keyword = None
  31. except:
  32. pass
  33. # 如果request中没有,尝试从g对象获取
  34. if keyword is None and "criterian_meta" in g and hasattr(g.criterian_meta, 'keyword'):
  35. keyword = getattr(g.criterian_meta, 'keyword', None)
  36. if keyword == '':
  37. keyword = None
  38. # 关键词模糊搜索(支持搜索分类索引、子类路径、属性列表)
  39. if keyword is not None and str(keyword).strip() != '':
  40. keyword_pattern = f"%{str(keyword).strip()}%"
  41. stmt = stmt.where(
  42. or_(
  43. SysProductConfPo.module_index.like(keyword_pattern),
  44. SysProductConfPo.category.like(keyword_pattern),
  45. SysProductConfPo.attributes.like(keyword_pattern)
  46. )
  47. )
  48. if sys.conf_id is not None and sys.conf_id != '':
  49. stmt = stmt.where(SysProductConfPo.conf_id == sys.conf_id)
  50. if sys.module_index is not None and sys.module_index != '':
  51. stmt = stmt.where(SysProductConfPo.module_index == sys.module_index)
  52. if sys.category is not None and sys.category != '':
  53. stmt = stmt.where(SysProductConfPo.category == sys.category)
  54. if sys.attributes is not None and sys.attributes != '':
  55. stmt = stmt.where(SysProductConfPo.attributes == sys.attributes)
  56. if "criterian_meta" in g and g.criterian_meta.page:
  57. g.criterian_meta.page.stmt = stmt
  58. result = db.session.execute(stmt).scalars().all()
  59. return [SysProductConf.model_validate(item) for item in result] if result else []
  60. except Exception as e:
  61. print(f"查询单品配置表列表出错: {e}")
  62. return []
  63. @staticmethod
  64. def select_sys_product_info_conf_by_id(conf_id: str) -> SysProductConf:
  65. """
  66. 根据ID查询单品配置表
  67. Args:
  68. conf_id (str): conf_id
  69. Returns:
  70. sys_product_info_conf: 单品配置表对象
  71. """
  72. try:
  73. result = db.session.get(SysProductConfPo, conf_id)
  74. return SysProductConf.model_validate(result) if result else None
  75. except Exception as e:
  76. print(f"根据ID查询单品配置表出错: {e}")
  77. return None
  78. @staticmethod
  79. def insert_sys_product_info_conf(sys: SysProductConf) -> int:
  80. """
  81. 新增单品配置表
  82. Args:
  83. sys (sys_product_info_conf): 单品配置表对象
  84. Returns:
  85. int: 插入的记录数
  86. """
  87. try:
  88. now = datetime.now()
  89. new_po = SysProductConfPo()
  90. # 如果 conf_id 为空,需要生成新的主键值(varchar类型,使用序列号生成)
  91. if sys.conf_id is None or sys.conf_id == "":
  92. # 使用序列号生成器生成字符串ID
  93. new_po.conf_id = Seq.get_seq_id("common")
  94. else:
  95. new_po.conf_id = sys.conf_id
  96. new_po.module_index = sys.module_index
  97. new_po.category = sys.category
  98. new_po.attributes = sys.attributes
  99. new_po.version = sys.version
  100. new_po.delete_flag = sys.delete_flag
  101. new_po.status = sys.status
  102. db.session.add(new_po)
  103. db.session.commit()
  104. sys.conf_id = new_po.conf_id
  105. return 1
  106. except Exception as e:
  107. db.session.rollback()
  108. print(f"新增单品配置表出错: {e}")
  109. return 0
  110. @staticmethod
  111. def update_sys_product_info_conf(sys: SysProductConf) -> int:
  112. """
  113. 修改单品配置表
  114. Args:
  115. sys (sys_product_info_conf): 单品配置表对象
  116. Returns:
  117. int: 更新的记录数
  118. """
  119. try:
  120. existing = db.session.get(SysProductConfPo, sys.conf_id)
  121. if not existing:
  122. return 0
  123. now = datetime.now()
  124. # 主键不参与更新
  125. existing.module_index = sys.module_index
  126. existing.category = sys.category
  127. existing.attributes = sys.attributes
  128. existing.version = sys.version
  129. existing.delete_flag = sys.delete_flag
  130. existing.status = sys.status
  131. db.session.commit()
  132. return 1
  133. except Exception as e:
  134. db.session.rollback()
  135. print(f"修改单品配置表出错: {e}")
  136. return 0
  137. @staticmethod
  138. def delete_sys_product_info_conf_by_ids(ids: List[str]) -> int:
  139. """
  140. 批量删除单品配置表
  141. Args:
  142. ids (List[str]): ID列表
  143. Returns:
  144. int: 删除的记录数
  145. """
  146. try:
  147. stmt = delete(SysProductConfPo).where(SysProductConfPo.conf_id.in_(ids))
  148. result = db.session.execute(stmt)
  149. db.session.commit()
  150. return result.rowcount
  151. except Exception as e:
  152. db.session.rollback()
  153. print(f"批量删除单品配置表出错: {e}")
  154. return 0