<?php

namespace app\common\model;

use think\Db;
use think\Model;

/**
 * 支付订单
 */
class PayOrderModel extends BaseModel
{
    // 表名
    protected $name = 'pay_order';
    // 开启自动写入时间戳字段
    protected $autoWriteTimestamp = false;
    // 定义时间戳字段名
    protected $createTime = false;
    protected $updateTime = false;
    protected $deleteTime = false;

    /**
     * 余额充值支付回调
     * @param $out_trade_no
     * @return array
     * @throws \think\Exception
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @throws \think\exception\PDOException
     */
    public static function recharge($out_trade_no)
    {
        Db::startTrans();
        if (!$order = self::where('out_trade_no',$out_trade_no)->lock(true)->find()) {
            Db::rollback();
            return [false,'未找到订单'];
        }

        if ($order['order_status'] != 0) {
            Db::rollback();
            return [true,'订单已支付'];
        }

        //更新订单状态
        if (!self::where(['out_trade_no' => $out_trade_no])->update(['order_status' => 1, 'notifytime' => time()])) {
            Db::rollback();
            return [false,'订单状态更新失败'];
        }

        //钱包更新
        $walletService = new Wallet();
        if (!$walletService->change($order['user_id'], $order['order_amount'], 'money', 10, '充值', 'pay_order', $order['table_id'])) {
            Db::rollback();
            return [false,'余额充值失败'];
        }
        Db::commit();
        return [true,'操作成功'];
    }

    /**
     * 老年大学活动支付回调
     * @param $out_trade_no
     * @return array
     */
    public static function university_event($out_trade_no)
    {
        Db::startTrans();
        if (!$info = self::where('out_trade_no',$out_trade_no)->lock(true)->find()){
            Db::rollback();
            return [false,'未找到订单'];
        }
        if ($info['order_status'] == 1){
            Db::rollback();
            return [true,'订单已支付'];
        }
        //更新订单状态
        if (!self::where(['id' => $info['id']])->update(['status' => 1])) {
            Db::rollback();
            return [false,'订单状态更新失败'];
        }
        if (!UniversityEventApplyModel::where('id',$info['table_id'])->update(['status' => 1,'pay_time' => time()])) {
            Db::rollback();
            return [false,'活动订单状态更新失败'];
        }
        Db::commit();
        return [true,'操作成功'];
    }

    /**
     * 老年大学活动支付回调
     * @param $out_trade_no
     * @return array
     */
    public static function vip($out_trade_no)
    {
        Db::startTrans();
        if (!$info = self::where('out_trade_no',$out_trade_no)->lock(true)->find()){
            Db::rollback();
            return [false,'未找到订单'];
        }
        if ($info['order_status'] == 1){
            Db::rollback();
            return [true,'订单已支付'];
        }
        //更新订单状态
        if (!self::where(['id' => $info['id']])->update(['status' => 1])) {
            Db::rollback();
            return [false,'订单状态更新失败'];
        }
        if (!VipOrderModel::where('id',$info['table_id'])->update(['status' => 1,'pay_time' => time()])) {
            Db::rollback();
            return [false,'VIP订单状态更新失败'];
        }
        if (!VipCouponUserModel::where('order_id',$info['table_id'])->update(['status' => 1,'update_time' => time()])) {
            Db::rollback();
            return [false,'VIP订单状态更新失败'];
        }
        Db::commit();
        return [true,'操作成功'];
    }
}