history.py 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  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_gift=card.is_gift,
  104. is_extracted=card.is_extracted,
  105. special_close=getattr(card, "special_close", 0) or 0,
  106. issue_price=card.issue_price,
  107. issued_to=card.issued_to,
  108. issue_remark=card.issue_remark,
  109. issued_at=card.issued_at,
  110. issued_admin_id=card.issued_admin_id,
  111. remark=card.remark,
  112. is_deleted=card.is_deleted,
  113. is_revoked=getattr(card, "is_revoked", 0) or 0,
  114. revoked_at=getattr(card, "revoked_at", None),
  115. revoked_reason=getattr(card, "revoked_reason", None),
  116. revoked_admin_id=getattr(card, "revoked_admin_id", None),
  117. created_at=card.created_at,
  118. updated_at=card.updated_at,
  119. his_created_at=beijing_now(),
  120. his_operation=operation
  121. )
  122. db.add(his_record)
  123. def create_key_rotation_config_history(db: Session, config: KeyRotationConfig, operation: str):
  124. """创建密钥轮换配置历史记录"""
  125. his_record = KeyRotationConfigHis(
  126. id=config.id,
  127. rotation_days=config.rotation_days,
  128. is_auto_rotate=config.is_auto_rotate,
  129. last_rotation_time=config.last_rotation_time,
  130. next_rotation_time=config.next_rotation_time,
  131. is_deleted=config.is_deleted,
  132. updated_at=config.updated_at,
  133. his_created_at=beijing_now(),
  134. his_operation=operation
  135. )
  136. db.add(his_record)
  137. def create_operation_log_history(db: Session, operation_log: OperationLog, operation: str):
  138. """创建操作日志历史记录"""
  139. his_record = OperationLogHis(
  140. id=operation_log.id,
  141. admin_id=operation_log.admin_id,
  142. module=operation_log.module,
  143. action=operation_log.action,
  144. description=operation_log.description,
  145. old_data=operation_log.old_data,
  146. new_data=operation_log.new_data,
  147. ip_address=operation_log.ip_address,
  148. is_deleted=operation_log.is_deleted,
  149. created_at=operation_log.created_at,
  150. his_created_at=beijing_now(),
  151. his_operation=operation
  152. )
  153. db.add(his_record)
  154. def create_recharge_record_history(db: Session, recharge_record: RechargeRecord, operation: str):
  155. """创建充值记录历史记录"""
  156. his_record = RechargeRecordHis(
  157. id=recharge_record.id,
  158. user_id=recharge_record.user_id,
  159. card_id=recharge_record.card_id,
  160. software_code=recharge_record.software_code,
  161. days=recharge_record.days,
  162. amount=recharge_record.amount,
  163. expire_time_before=recharge_record.expire_time_before,
  164. expire_time_after=recharge_record.expire_time_after,
  165. is_deleted=recharge_record.is_deleted,
  166. created_at=recharge_record.created_at,
  167. his_created_at=beijing_now(),
  168. his_operation=operation
  169. )
  170. db.add(his_record)
  171. def create_software_history(db: Session, software: Software, operation: str):
  172. """创建软件历史记录"""
  173. his_record = SoftwareHis(
  174. id=software.id,
  175. code=software.code,
  176. name=software.name,
  177. description=software.description,
  178. daily_price=software.daily_price,
  179. is_active=software.is_active,
  180. is_deleted=software.is_deleted,
  181. created_at=software.created_at,
  182. updated_at=software.updated_at,
  183. his_created_at=beijing_now(),
  184. his_operation=operation
  185. )
  186. db.add(his_record)
  187. def create_session_history(db: Session, session: Session, operation: str):
  188. """创建会话历史记录(先写 his 再改/删时调用,operation 仅用于语义)"""
  189. his_record = SessionHis(
  190. session_id=session.session_id,
  191. user_id=session.user_id,
  192. machine_code=session.machine_code,
  193. ip_address=session.ip_address,
  194. user_agent=session.user_agent,
  195. is_active=session.is_active,
  196. expires_at=session.expires_at,
  197. created_at=session.created_at,
  198. updated_at=session.updated_at,
  199. last_activity=session.last_activity,
  200. )
  201. db.add(his_record)
  202. def create_steam_account_history(db: Session, steam_account: SteamAccount, operation: str):
  203. """创建Steam账号历史记录"""
  204. his_record = SteamAccountHis(
  205. id=steam_account.id,
  206. user_id=steam_account.user_id,
  207. steam_username=steam_account.steam_username,
  208. steam_id=steam_account.steam_id,
  209. is_active=steam_account.is_active,
  210. is_deleted=steam_account.is_deleted,
  211. created_at=steam_account.created_at,
  212. updated_at=steam_account.updated_at,
  213. his_created_at=beijing_now(),
  214. his_operation=operation
  215. )
  216. db.add(his_record)
  217. def create_system_config_history(db: Session, config: SystemConfig, operation: str):
  218. """创建系统配置历史记录(先写 his 再改/删时调用)"""
  219. his_record = SystemConfigHis(
  220. id=config.id,
  221. config_key=config.config_key,
  222. config_value=config.config_value,
  223. config_type=config.config_type,
  224. app_name=config.app_name,
  225. description=config.description,
  226. is_system=config.is_system,
  227. is_editable=config.is_editable,
  228. is_deleted=config.is_deleted,
  229. created_at=config.created_at,
  230. updated_at=config.updated_at,
  231. his_created_at=beijing_now(),
  232. his_operation=operation
  233. )
  234. db.add(his_record)
  235. def create_user_history(db: Session, user: User, operation: str):
  236. """创建用户历史记录"""
  237. his_record = UserHis(
  238. id=user.id,
  239. username=user.username,
  240. password=user.password,
  241. email=user.email,
  242. machine_code=user.machine_code,
  243. card_id=user.card_id,
  244. expire_time=user.expire_time,
  245. last_login_time=user.last_login_time,
  246. last_login_ip=user.last_login_ip,
  247. status=user.status,
  248. is_deleted=user.is_deleted,
  249. created_at=user.created_at,
  250. updated_at=user.updated_at,
  251. his_created_at=beijing_now(),
  252. his_operation=operation
  253. )
  254. db.add(his_record)
  255. def create_operation_log(
  256. db: Session,
  257. admin_id: int,
  258. module: str,
  259. action: str,
  260. description: str,
  261. old_data: dict = None,
  262. new_data: dict = None,
  263. ip_address: str = None
  264. ):
  265. """创建操作日志记录"""
  266. import json
  267. from datetime import datetime
  268. # beijing_now already imported at module level
  269. operation_log = OperationLog(
  270. admin_id=admin_id,
  271. module=module,
  272. action=action,
  273. description=description,
  274. old_data=json.dumps(old_data, ensure_ascii=False) if old_data else None,
  275. new_data=json.dumps(new_data, ensure_ascii=False) if new_data else None,
  276. ip_address=ip_address,
  277. created_at=beijing_now()
  278. )
  279. db.add(operation_log)