mysql_store.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. from datetime import datetime
  2. from httplib2.auth import params
  3. from pymupdf.utils import insert_text
  4. import tools.utils as utils
  5. from tools.utils.mysql_helper import MySQLHelper
  6. from tools.models.standard_model import StandardModel
  7. class MysqlStore:
  8. def __init__(self):
  9. self._db_helper = MySQLHelper()
  10. self._logger = utils.get_logger()
  11. def insert_standard(self, data: StandardModel) -> bool:
  12. try:
  13. sql = """
  14. INSERT INTO standard_data (book_number, quota_number, quota_name, work_content, unit, basic_quota, base_price, unit_weight, labor_cost, material_cost, machine_cost, main_material, created_at)
  15. VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
  16. """
  17. with self._db_helper as db:
  18. db.execute(sql, (
  19. data.book_number,
  20. data.quota_number,
  21. data.quota_name,
  22. data.work_content,
  23. data.unit,
  24. data.basic_quota,
  25. data.base_price,
  26. data.unit_weight,
  27. data.labor_cost,
  28. data.material_cost,
  29. data.machine_cost,
  30. data.main_material,
  31. datetime.now()
  32. ))
  33. return True
  34. except Exception as e:
  35. self._logger.error(f"Error inserting standard: {str(e)}")
  36. return False
  37. def insert_standard_batch(self, data_list: list[StandardModel]) -> bool:
  38. try:
  39. sql = """
  40. INSERT INTO standard_data (book_number, quota_number, quota_name, work_content, unit, basic_quota, base_price, unit_weight, labor_cost, material_cost, machine_cost, main_material, created_at)
  41. VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
  42. """
  43. insert_params = [(
  44. data.book_number,
  45. data.quota_number,
  46. data.quota_name,
  47. data.work_content,
  48. data.unit,
  49. data.basic_quota,
  50. data.base_price,
  51. data.unit_weight,
  52. data.labor_cost,
  53. data.material_cost,
  54. data.machine_cost,
  55. data.main_material,
  56. datetime.now()
  57. ) for data in data_list]
  58. self._db_helper.execute_many(sql, insert_params)
  59. except Exception as e:
  60. self._logger.error(f"Error inserting standard batch: {str(e)}")
  61. return False
  62. def query_standard_group_by_book(self) -> dict:
  63. sql = """
  64. SELECT book_number
  65. FROM standard_data
  66. GROUP BY book_number
  67. ORDER BY book_number
  68. """
  69. with self._db_helper:
  70. result = self._db_helper.execute_query(sql)
  71. if not result:
  72. return {}
  73. # 按book_number分组并转换为StandardModel
  74. grouped_data = {}
  75. for row in result:
  76. book_number = row['book_number']
  77. if book_number not in grouped_data:
  78. grouped_data[book_number] = []
  79. # 由于只按book_number分组,其他字段无法从这里获取,需要重新查询
  80. standards = self.query_standards_by_book_number(book_number)
  81. grouped_data[book_number].extend(standards)
  82. return grouped_data
  83. def query_standards_by_book_number(self, book_number: str) -> list[StandardModel]:
  84. sql = """
  85. SELECT book_number, quota_number, quota_name, work_content, unit, basic_quota, base_price, unit_weight, labor_cost, material_cost, machine_cost, main_material
  86. FROM standard_data
  87. WHERE book_number = %s
  88. ORDER BY created_at
  89. """
  90. with self._db_helper:
  91. result = self._db_helper.execute_query(sql, (book_number,))
  92. standards = []
  93. for row in result:
  94. standard = StandardModel(
  95. book_number=row['book_number'],
  96. quota_number=row['quota_number'],
  97. quota_name=row['quota_name'],
  98. work_content=row['work_content'],
  99. unit=row['unit'],
  100. basic_quota=row['basic_quota'],
  101. base_price=row['base_price'],
  102. unit_weight=row['unit_weight'],
  103. labor_cost=row['labor_cost'],
  104. material_cost=row['material_cost'],
  105. machine_cost=row['machine_cost'],
  106. main_material=row['main_material'],
  107. )
  108. standards.append(standard)
  109. return standards