ChatOrder.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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 ChatOrder extends BaseModel
  12. {
  13. use ModelTrait;
  14. protected $name = 'chat_order';
  15. // 订单状态
  16. const STATUS_PENDING = 0; // 待支付
  17. const STATUS_PAID = 1; // 已支付
  18. const STATUS_CANCEL = 2; // 已取消
  19. /**
  20. * 创建订单
  21. * @param int $userId 用户ID
  22. * @param int $chatNum 购买次数
  23. * @param int $price 价格(积分)
  24. * @return self
  25. */
  26. public static function createOrder(int $userId, int $chatNum, int $price): self
  27. {
  28. $orderNo = self::generateOrderNo();
  29. return self::create([
  30. 'order_no' => $orderNo,
  31. 'user_id' => $userId,
  32. 'chat_num' => $chatNum,
  33. 'price' => $price,
  34. 'status' => self::STATUS_PENDING,
  35. 'create_time' => time(),
  36. ]);
  37. }
  38. /**
  39. * 生成订单号
  40. * @return string
  41. */
  42. public static function generateOrderNo(): string
  43. {
  44. return 'C' . date('YmdHis') . rand(1000, 9999);
  45. }
  46. /**
  47. * 支付成功
  48. * @param int $orderId 订单ID
  49. * @return bool
  50. */
  51. public static function paySuccess(int $orderId): bool
  52. {
  53. return self::where('id', $orderId)
  54. ->where('status', self::STATUS_PENDING)
  55. ->update([
  56. 'status' => self::STATUS_PAID,
  57. 'pay_time' => time(),
  58. 'update_time' => time(),
  59. ]) !== false;
  60. }
  61. /**
  62. * 取消订单
  63. * @param int $orderId 订单ID
  64. * @return bool
  65. */
  66. public static function cancelOrder(int $orderId): bool
  67. {
  68. return self::where('id', $orderId)
  69. ->where('status', self::STATUS_PENDING)
  70. ->update([
  71. 'status' => self::STATUS_CANCEL,
  72. 'update_time' => time(),
  73. ]) !== false;
  74. }
  75. /**
  76. * 获取用户订单列表
  77. * @param int $userId 用户ID
  78. * @param int $page 页码
  79. * @param int $limit 每页数量
  80. * @return array
  81. */
  82. public static function getUserOrders(int $userId, int $page = 1, int $limit = 10): array
  83. {
  84. $where = ['user_id' => $userId];
  85. $data = self::where($where)
  86. ->order('id desc')
  87. ->page($page, $limit)
  88. ->select();
  89. $total = self::where($where)->count();
  90. return [
  91. 'list' => $data ? $data->toArray() : [],
  92. 'total' => $total,
  93. 'page' => $page,
  94. 'limit' => $limit,
  95. ];
  96. }
  97. /**
  98. * 根据订单号查询
  99. * @param string $orderNo 订单号
  100. * @return self|null
  101. */
  102. public static function findByOrderNo(string $orderNo): ?self
  103. {
  104. return self::where('order_no', $orderNo)->find();
  105. }
  106. /**
  107. * 获取状态文本
  108. * @param int $status 状态
  109. * @return string
  110. */
  111. public static function getStatusText(int $status): string
  112. {
  113. $statusMap = [
  114. self::STATUS_PENDING => '待支付',
  115. self::STATUS_PAID => '已支付',
  116. self::STATUS_CANCEL => '已取消',
  117. ];
  118. return $statusMap[$status] ?? '未知';
  119. }
  120. }