| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?php
- declare (strict_types = 1);
- namespace app\model\api;
- use library\basic\BaseModel;
- use library\traits\ModelTrait;
- use think\Model;
- /**
- * 聊天次数购买订单模型
- * @mixin \think\Model
- */
- class ChatOrder extends BaseModel
- {
- use ModelTrait;
-
- protected $name = 'chat_order';
-
- // 订单状态
- const STATUS_PENDING = 0; // 待支付
- const STATUS_PAID = 1; // 已支付
- const STATUS_CANCEL = 2; // 已取消
-
- /**
- * 创建订单
- * @param int $userId 用户ID
- * @param int $chatNum 购买次数
- * @param int $price 价格(积分)
- * @return self
- */
- public static function createOrder(int $userId, int $chatNum, int $price): self
- {
- $orderNo = self::generateOrderNo();
-
- return self::create([
- 'order_no' => $orderNo,
- 'user_id' => $userId,
- 'chat_num' => $chatNum,
- 'price' => $price,
- 'status' => self::STATUS_PENDING,
- 'create_time' => time(),
- ]);
- }
-
- /**
- * 生成订单号
- * @return string
- */
- public static function generateOrderNo(): string
- {
- return 'C' . date('YmdHis') . rand(1000, 9999);
- }
-
- /**
- * 支付成功
- * @param int $orderId 订单ID
- * @return bool
- */
- public static function paySuccess(int $orderId): bool
- {
- return self::where('id', $orderId)
- ->where('status', self::STATUS_PENDING)
- ->update([
- 'status' => self::STATUS_PAID,
- 'pay_time' => time(),
- 'update_time' => time(),
- ]) !== false;
- }
-
- /**
- * 取消订单
- * @param int $orderId 订单ID
- * @return bool
- */
- public static function cancelOrder(int $orderId): bool
- {
- return self::where('id', $orderId)
- ->where('status', self::STATUS_PENDING)
- ->update([
- 'status' => self::STATUS_CANCEL,
- 'update_time' => time(),
- ]) !== false;
- }
-
- /**
- * 获取用户订单列表
- * @param int $userId 用户ID
- * @param int $page 页码
- * @param int $limit 每页数量
- * @return array
- */
- public static function getUserOrders(int $userId, int $page = 1, int $limit = 10): array
- {
- $where = ['user_id' => $userId];
-
- $data = self::where($where)
- ->order('id desc')
- ->page($page, $limit)
- ->select();
-
- $total = self::where($where)->count();
-
- return [
- 'list' => $data ? $data->toArray() : [],
- 'total' => $total,
- 'page' => $page,
- 'limit' => $limit,
- ];
- }
-
- /**
- * 根据订单号查询
- * @param string $orderNo 订单号
- * @return self|null
- */
- public static function findByOrderNo(string $orderNo): ?self
- {
- return self::where('order_no', $orderNo)->find();
- }
-
- /**
- * 获取状态文本
- * @param int $status 状态
- * @return string
- */
- public static function getStatusText(int $status): string
- {
- $statusMap = [
- self::STATUS_PENDING => '待支付',
- self::STATUS_PAID => '已支付',
- self::STATUS_CANCEL => '已取消',
- ];
-
- return $statusMap[$status] ?? '未知';
- }
- }
|