lyzflash
2025-11-17 91a56a9b83ec23a1580aa586a24b34aba6990ffa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
 
namespace app\api\model\plus\regactivity;
 
use app\common\enum\order\OrderPayTypeEnum;
use app\common\model\plus\regactivity\User as regUserModel;
use app\api\model\plus\regactivity\Activity as ActivityModel;
use app\api\service\order\paysuccess\type\RegactivitySuccessService;
use app\api\service\order\PaymentService;
use app\common\enum\order\OrderTypeEnum;
 
 
 
/**
 * 用户模型
 */
 
class User extends regUserModel
{
    // 订单模型
    public $model;
    /**
     * 隐藏字段
     */
    protected $hidden = [
        'create_time',
        'update_time',
    ];
 
 
    /**
     * 添加报名用户
     */
    public function addUser($user, $param)
    {
        $detail = ActivityModel::detail($param["activity_id"]);
        //活动未开启/报名未开启/报名时间未到/活动已结束
        if($detail["activity_status"] == 0 || $detail["register_status"] == 0 || $detail["status_text"]["reg_status"] != 1 || $detail["status_text"]["status"] == 2){
            $this->error = '报名通道未开启';
            return false;
        }
        if($detail["limit_num"] > 0 && $detail["reg_num"]>=$detail["limit_num"]){
            $this->error = '报名名额已满';
            return false;
        }
        if($detail['activity_fee']>0 && empty($param['pay_type'])){
            $this->error = '请选择支付方式';
            return false;
        }
        //生成记录
        $record = [
            'user_id' => $user['user_id'],
            'order_no' => $this->orderNo(),
            'activity_id' => $detail['activity_id'],
            'activity_fee' => $detail['activity_fee'],
            'pay_price' => $detail['activity_fee'],
            'user_name' => $param['user_name'] ,
            'mobile' => $param['mobile'],
            'status' => $detail['activity_fee']>0 ? 0 : 1,//报名状态,没有费用则报名成功
            'pay_type' => $param['pay_type'],
            'app_id' => self::$app_id,
        ];
        $status = $this->save($record);
        /*if ($detail['activity_fee'] > 0) {
            $param['pay_type'] = OrderPayTypeEnum::BALANCE;
        }*/
        // 余额支付标记订单已支付
        if ($status && $param['pay_type'] == OrderPayTypeEnum::BALANCE) {
            if ($user['balance'] < $detail['activity_fee']) {
                $this->error = '用户余额不足,无法使用余额支付';
                return false;
            }
            $this->onPaymentByBalance($record['order_no']);
        }
        return $this['order_id'];
    }
    /**
     * 余额支付标记订单已支付
     */
    public function onPaymentByBalance($orderNo)
    {
        // 获取订单详情
        $PaySuccess = new RegactivitySuccessService($orderNo);
        // 发起余额支付
        return $PaySuccess->onPaySuccess(OrderPayTypeEnum::BALANCE);
    }
 
    /**
     * 构建支付请求的参数
     */
    public static function onOrderPayment($user, $order, $payType, $pay_source)
    {
        //如果来源是h5,首次不处理,payH5再处理
        if ($pay_source == 'h5') {
            return [];
        }
        if ($payType == OrderPayTypeEnum::WECHAT) {
            return self::onPaymentByWechat($user, $order, $pay_source);
        }
        return [];
    }
 
    /**
     * 构建微信支付请求
     */
    protected static function onPaymentByWechat($user, $order, $pay_source)
    {
        return PaymentService::wechat(
            $user,
            [$order],
            OrderTypeEnum::REGACTIVITY,
            $pay_source
        );
    }
 
}