history.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. """
  2. 历史记录工具函数
  3. """
  4. from datetime import datetime
  5. from app.utils.timezone import beijing_now
  6. from sqlalchemy.orm import Session
  7. from app.models import (
  8. Admin, AdminHis,
  9. Announcement, AnnouncementHis,
  10. APIKey, APIKeyHis,
  11. APILog, APILogHis,
  12. Card, CardHis,
  13. KeyRotationConfig, KeyRotationConfigHis,
  14. OperationLog, OperationLogHis,
  15. RechargeRecord, RechargeRecordHis,
  16. Session, SessionHis,
  17. Software, SoftwareHis,
  18. SteamAccount, SteamAccountHis,
  19. SystemConfig, SystemConfigHis,
  20. User, UserHis
  21. )
  22. def create_admin_history(db: Session, admin: Admin, operation: str):
  23. """创建管理员历史记录"""
  24. his_record = AdminHis(
  25. id=admin.id,
  26. username=admin.username,
  27. password=admin.password,
  28. real_name=admin.real_name,
  29. email=admin.email,
  30. role=admin.role,
  31. last_login_time=admin.last_login_time,
  32. last_login_ip=admin.last_login_ip,
  33. status=admin.status,
  34. is_deleted=admin.is_deleted,
  35. created_at=admin.created_at,
  36. updated_at=admin.updated_at,
  37. his_created_at=beijing_now(),
  38. his_operation=operation
  39. )
  40. db.add(his_record)
  41. def create_announcement_history(db: Session, announcement: Announcement, operation: str):
  42. """创建公告历史记录"""
  43. his_record = AnnouncementHis(
  44. id=announcement.id,
  45. title=announcement.title,
  46. content=announcement.content,
  47. priority=announcement.priority,
  48. is_active=announcement.is_active,
  49. publish_time=announcement.publish_time,
  50. is_deleted=announcement.is_deleted,
  51. created_at=announcement.created_at,
  52. updated_at=announcement.updated_at,
  53. his_created_at=beijing_now(),
  54. his_operation=operation
  55. )
  56. db.add(his_record)
  57. def create_api_key_history(db: Session, api_key: APIKey, operation: str):
  58. """创建API密钥历史记录"""
  59. his_record = APIKeyHis(
  60. id=api_key.id,
  61. public_key=api_key.public_key,
  62. private_key=api_key.private_key,
  63. key_version=api_key.key_version,
  64. is_active=api_key.is_active,
  65. is_deleted=api_key.is_deleted,
  66. created_at=api_key.created_at,
  67. expire_at=api_key.expire_at,
  68. his_created_at=beijing_now(),
  69. his_operation=operation
  70. )
  71. db.add(his_record)
  72. def create_api_log_history(db: Session, api_log: APILog, operation: str):
  73. """创建API日志历史记录"""
  74. his_record = APILogHis(
  75. id=api_log.id,
  76. user_id=api_log.user_id,
  77. endpoint=api_log.endpoint,
  78. method=api_log.method,
  79. request_data=api_log.request_data,
  80. response_data=api_log.response_data,
  81. ip_address=api_log.ip_address,
  82. user_agent=api_log.user_agent,
  83. response_code=api_log.response_code,
  84. execution_time=api_log.execution_time,
  85. is_deleted=api_log.is_deleted,
  86. created_at=api_log.created_at,
  87. his_created_at=beijing_now(),
  88. his_operation=operation
  89. )
  90. db.add(his_record)
  91. def create_card_history(db: Session, card: Card, operation: str):
  92. """创建卡密历史记录"""
  93. his_record = CardHis(
  94. id=card.id,
  95. card_code=card.card_code,
  96. software_code=card.software_code,
  97. days=card.days,
  98. discount=card.discount,
  99. user_id=card.user_id,
  100. activated_at=card.activated_at,
  101. expire_time=card.expire_time,
  102. status=card.status,
  103. is_deleted=card.is_deleted,
  104. created_at=card.created_at,
  105. updated_at=card.updated_at,
  106. his_created_at=beijing_now(),
  107. his_operation=operation
  108. )
  109. db.add(his_record)
  110. def create_key_rotation_config_history(db: Session, config: KeyRotationConfig, operation: str):
  111. """创建密钥轮换配置历史记录"""
  112. his_record = KeyRotationConfigHis(
  113. id=config.id,
  114. rotation_days=config.rotation_days,
  115. is_auto_rotate=config.is_auto_rotate,
  116. last_rotation_time=config.last_rotation_time,
  117. next_rotation_time=config.next_rotation_time,
  118. is_deleted=config.is_deleted,
  119. updated_at=config.updated_at,
  120. his_created_at=beijing_now(),
  121. his_operation=operation
  122. )
  123. db.add(his_record)
  124. def create_operation_log_history(db: Session, operation_log: OperationLog, operation: str):
  125. """创建操作日志历史记录"""
  126. his_record = OperationLogHis(
  127. id=operation_log.id,
  128. admin_id=operation_log.admin_id,
  129. module=operation_log.module,
  130. action=operation_log.action,
  131. description=operation_log.description,
  132. old_data=operation_log.old_data,
  133. new_data=operation_log.new_data,
  134. ip_address=operation_log.ip_address,
  135. is_deleted=operation_log.is_deleted,
  136. created_at=operation_log.created_at,
  137. his_created_at=beijing_now(),
  138. his_operation=operation
  139. )
  140. db.add(his_record)
  141. def create_recharge_record_history(db: Session, recharge_record: RechargeRecord, operation: str):
  142. """创建充值记录历史记录"""
  143. his_record = RechargeRecordHis(
  144. id=recharge_record.id,
  145. user_id=recharge_record.user_id,
  146. card_id=recharge_record.card_id,
  147. software_code=recharge_record.software_code,
  148. days=recharge_record.days,
  149. amount=recharge_record.amount,
  150. expire_time_before=recharge_record.expire_time_before,
  151. expire_time_after=recharge_record.expire_time_after,
  152. is_deleted=recharge_record.is_deleted,
  153. created_at=recharge_record.created_at,
  154. his_created_at=beijing_now(),
  155. his_operation=operation
  156. )
  157. db.add(his_record)
  158. def create_software_history(db: Session, software: Software, operation: str):
  159. """创建软件历史记录"""
  160. his_record = SoftwareHis(
  161. id=software.id,
  162. code=software.code,
  163. name=software.name,
  164. description=software.description,
  165. daily_price=software.daily_price,
  166. is_active=software.is_active,
  167. is_deleted=software.is_deleted,
  168. created_at=software.created_at,
  169. updated_at=software.updated_at,
  170. his_created_at=beijing_now(),
  171. his_operation=operation
  172. )
  173. db.add(his_record)
  174. def create_session_history(db: Session, session: Session, operation: str):
  175. """创建会话历史记录(先写 his 再改/删时调用,operation 仅用于语义)"""
  176. his_record = SessionHis(
  177. session_id=session.session_id,
  178. user_id=session.user_id,
  179. machine_code=session.machine_code,
  180. ip_address=session.ip_address,
  181. user_agent=session.user_agent,
  182. is_active=session.is_active,
  183. expires_at=session.expires_at,
  184. created_at=session.created_at,
  185. updated_at=session.updated_at,
  186. last_activity=session.last_activity,
  187. )
  188. db.add(his_record)
  189. def create_steam_account_history(db: Session, steam_account: SteamAccount, operation: str):
  190. """创建Steam账号历史记录"""
  191. his_record = SteamAccountHis(
  192. id=steam_account.id,
  193. user_id=steam_account.user_id,
  194. steam_username=steam_account.steam_username,
  195. steam_id=steam_account.steam_id,
  196. is_active=steam_account.is_active,
  197. is_deleted=steam_account.is_deleted,
  198. created_at=steam_account.created_at,
  199. updated_at=steam_account.updated_at,
  200. his_created_at=beijing_now(),
  201. his_operation=operation
  202. )
  203. db.add(his_record)
  204. def create_system_config_history(db: Session, config: SystemConfig, operation: str):
  205. """创建系统配置历史记录(先写 his 再改/删时调用)"""
  206. his_record = SystemConfigHis(
  207. id=config.id,
  208. config_key=config.config_key,
  209. config_value=config.config_value,
  210. config_type=config.config_type,
  211. app_name=config.app_name,
  212. description=config.description,
  213. is_system=config.is_system,
  214. is_editable=config.is_editable,
  215. is_deleted=config.is_deleted,
  216. created_at=config.created_at,
  217. updated_at=config.updated_at,
  218. his_created_at=beijing_now(),
  219. his_operation=operation
  220. )
  221. db.add(his_record)
  222. def create_user_history(db: Session, user: User, operation: str):
  223. """创建用户历史记录"""
  224. his_record = UserHis(
  225. id=user.id,
  226. username=user.username,
  227. password=user.password,
  228. email=user.email,
  229. machine_code=user.machine_code,
  230. card_id=user.card_id,
  231. expire_time=user.expire_time,
  232. last_login_time=user.last_login_time,
  233. last_login_ip=user.last_login_ip,
  234. status=user.status,
  235. is_deleted=user.is_deleted,
  236. created_at=user.created_at,
  237. updated_at=user.updated_at,
  238. his_created_at=beijing_now(),
  239. his_operation=operation
  240. )
  241. db.add(his_record)
  242. def create_operation_log(
  243. db: Session,
  244. admin_id: int,
  245. module: str,
  246. action: str,
  247. description: str,
  248. old_data: dict = None,
  249. new_data: dict = None,
  250. ip_address: str = None
  251. ):
  252. """创建操作日志记录"""
  253. import json
  254. from datetime import datetime
  255. # beijing_now already imported at module level
  256. operation_log = OperationLog(
  257. admin_id=admin_id,
  258. module=module,
  259. action=action,
  260. description=description,
  261. old_data=json.dumps(old_data, ensure_ascii=False) if old_data else None,
  262. new_data=json.dumps(new_data, ensure_ascii=False) if new_data else None,
  263. ip_address=ip_address,
  264. created_at=beijing_now()
  265. )
  266. db.add(operation_log)