sqlserver_store.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from typing import List, Any, Sequence
  2. from tools.utils.db_helper import sqlserver_helper
  3. import tools.utils as utils
  4. from sqlalchemy.orm import Session
  5. from tools.models.dinge_model import DingEKu
  6. from sqlalchemy import select, Row
  7. from collections import defaultdict
  8. class SqlServerStore:
  9. def __init__(self):
  10. self._db_helper = sqlserver_helper.SQLServerHelper()
  11. self._logger = utils.get_logger()
  12. def group_by_book_no(self) -> List[str]:
  13. try:
  14. with Session(self._db_helper.get_engine()) as session:
  15. stmt = select(DingEKu.shuhao).group_by(DingEKu.shuhao).order_by(DingEKu.shuhao.asc())
  16. result = session.execute(stmt)
  17. return [row[0] for row in result]
  18. except Exception as e:
  19. self._logger.error(f"查询定额库失败: {str(e)}")
  20. raise
  21. def query_ding_e_ku(self, shuhao: str = None) -> List[dict]:
  22. """
  23. 查询定额库表
  24. 参数:
  25. - shuhao: 书号
  26. """
  27. try:
  28. with Session(self._db_helper.get_engine()) as session:
  29. # 构建查询条件
  30. conditions = []
  31. if shuhao:
  32. conditions.append(DingEKu.shuhao == shuhao)
  33. # 分页查询
  34. stmt = select(DingEKu.shuhao,
  35. DingEKu.dingebianhao,
  36. DingEKu.dingemingcheng,
  37. DingEKu.danwei,
  38. DingEKu.gongzuoneirong,
  39. DingEKu.jibendinge,
  40. DingEKu.jijia,
  41. DingEKu.gongfei,
  42. DingEKu.liaofei,
  43. DingEKu.jifei,
  44. DingEKu.danzhong,
  45. DingEKu.jiehao,
  46. DingEKu.liushuihao,
  47. DingEKu.lock,
  48. DingEKu.shiyong,
  49. DingEKu.tiaoxuhao,
  50. DingEKu.daorushijian).where(*conditions).order_by(DingEKu.shuhao.asc())
  51. result = session.execute(stmt)
  52. # 动态生成字段映射(排除消耗字段)
  53. return [{
  54. 'shuhao': row.shuhao,
  55. 'dingebianhao': row.dingebianhao,
  56. 'dingemingcheng': row.dingemingcheng,
  57. 'danwei': row.danwei,
  58. 'gongzuoneirong': row.gongzuoneirong,
  59. 'jibendinge': row.jibendinge,
  60. 'jijia': row.jijia,
  61. 'gongfei': row.gongfei,
  62. 'liaofei': row.liaofei,
  63. 'jifei': row.jifei,
  64. 'danzhong': row.danzhong,
  65. 'jiehao': row.jiehao,
  66. 'liushuihao': row.liushuihao,
  67. 'lock': row.lock,
  68. 'shiyong': row.shiyong,
  69. 'tiaoxuhao': row.tiaoxuhao,
  70. 'daorushijian': row.daorushijian
  71. } for row in result]
  72. except Exception as e:
  73. self._logger.error(f"查询定额库失败: {str(e)}")
  74. raise