ChatBalanceLog.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\model\api;
  4. use library\basic\BaseModel;
  5. use library\traits\ModelTrait;
  6. use think\Model;
  7. /**
  8. * 聊天次数变动明细模型
  9. * @mixin \think\Model
  10. */
  11. class ChatBalanceLog extends BaseModel
  12. {
  13. use ModelTrait;
  14. protected $name = 'chat_balance_log';
  15. // 类型
  16. const TYPE_GIFT = 1; // 新用户赠送
  17. const TYPE_BUY = 2; // 积分购买
  18. const TYPE_FIRST_CHAT = 3; // 首次聊天消耗
  19. const TYPE_ADMIN_ADD = 4; // 管理员赠送
  20. const TYPE_ADMIN_SUB = 5; // 管理员扣除
  21. /**
  22. * 记录变动
  23. * @param int $userId 用户ID
  24. * @param int $type 类型
  25. * @param int $num 变动数量
  26. * @param int $balance 变动后余额
  27. * @param string $remark 备注
  28. * @param int $relateId 关联ID
  29. * @return self
  30. */
  31. public static function record(int $userId, int $type, int $num, int $balance, string $remark = '', int $relateId = 0): self
  32. {
  33. return self::create([
  34. 'user_id' => $userId,
  35. 'type' => $type,
  36. 'num' => $num,
  37. 'balance' => $balance,
  38. 'remark' => $remark,
  39. 'relate_id' => $relateId,
  40. 'create_time' => time(),
  41. ]);
  42. }
  43. /**
  44. * 获取用户变动记录
  45. * @param int $userId 用户ID
  46. * @param int $page 页码
  47. * @param int $limit 每页数量
  48. * @return array
  49. */
  50. public static function getUserLogs(int $userId, int $page = 1, int $limit = 10): array
  51. {
  52. $data = self::where('user_id', $userId)
  53. ->order('id desc')
  54. ->page($page, $limit)
  55. ->select();
  56. $total = self::where('user_id', $userId)->count();
  57. $list = [];
  58. foreach ($data ?: [] as $item) {
  59. $itemArr = $item->toArray();
  60. $itemArr['type_text'] = self::getTypeText($item->type);
  61. $itemArr['num_text'] = $item->num > 0 ? '+' . $item->num : $item->num;
  62. $list[] = $itemArr;
  63. }
  64. return [
  65. 'list' => $list,
  66. 'total' => $total,
  67. 'page' => $page,
  68. 'limit' => $limit,
  69. ];
  70. }
  71. /**
  72. * 获取类型文本
  73. * @param int $type 类型
  74. * @return string
  75. */
  76. public static function getTypeText(int $type): string
  77. {
  78. $typeMap = [
  79. self::TYPE_GIFT => '新用户赠送',
  80. self::TYPE_BUY => '积分购买',
  81. self::TYPE_FIRST_CHAT => '首次聊天消耗',
  82. self::TYPE_ADMIN_ADD => '管理员赠送',
  83. self::TYPE_ADMIN_SUB => '管理员扣除',
  84. ];
  85. return $typeMap[$type] ?? '未知';
  86. }
  87. }