User.php
3.8 KB
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
117
118
<?php
namespace app\admin\model\groupon\user;
use app\admin\model\groupon\user\MoneyLog;
use app\admin\model\groupon\user\ScoreLog;
use addons\groupon\library\notify\Notifiable;
use think\Model;
use think\Db;
class User extends Model
{
use Notifiable;
// 表名
protected $name = 'user';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 追加属性
protected $append = [
// 'prevtime_text',
// 'logintime_text',
// 'jointime_text'
];
public function getGenderList()
{
return ['1' => __('Male'), '0' => __('Female')];
}
public function getStatusList()
{
return ['normal' => __('Normal'), 'hidden' => __('Hidden')];
}
public function group()
{
return $this->belongsTo('Group', 'group_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
public function agent()
{
return $this->hasOne(\app\admin\model\groupon\commission\Agent::class, 'user_id', 'id');
}
//后台钱包充值/扣除
public static function walletChange($user, $type, $amount, $memo = '')
{
$result = false;
//过滤冗余记录
if($amount == 0) {
return ['result' => $result, 'msg' => '请填写正确金额'];
}
//可扣除余额不足
if($user->$type + $amount < 0) {
return ['result' => $result, 'msg' => '可用余额不足'];
}
Db::startTrans();
try {
//groupon记录变动
Db::name('groupon_user_wallet_log')->insert([
'user_id' => $user->id,
'wallet' => $amount,
'type' => $amount > 0 ? 'admin_recharge' : 'admin_deduct',
'wallet_type' => $type,
'item_id' => 0,
'oper_type' => 'admin',
'oper_id' => \app\admin\library\Auth::instance()->id,
'createtime' => time(),
'updatetime' => time()
]);
$current_wallet_log_id = Db::name('groupon_user_wallet_log')->getLastInsID();
//Fa记录变动
if($type === 'money') {
$model = new \app\admin\model\groupon\user\MoneyLog;
}elseif($type === 'score') {
$model = new \app\admin\model\groupon\user\ScoreLog;
}
$model->save([
'user_id' => $user->id,
$type => $amount,
'before' => $user->$type,
'after' => $user->$type + $amount,
'memo' => ($amount > 0 ? '后台充值' : '后台扣除') . ':' . $memo
]);
$result = $user->setInc($type, $amount);
// 钱包变动通知
$currentWalletLog = \addons\groupon\model\UserWalletLog::where('id', $current_wallet_log_id)->find();
$user && $user->notify(
new \addons\groupon\notifications\Wallet([
'walletLog' => $currentWalletLog,
'event' => $currentWalletLog['wallet_type'] == 'money' ? 'wallet_change' : 'score_change'
])
);
Db::commit();
} catch (\think\exception\ValidateException $e) {
Db::rollback();
return ['result' => false, 'msg' => $e->getMessage()];
} catch (\think\exception\PDOException $e) {
Db::rollback();
return ['result' => false, 'msg' => $e->getMessage()];
}catch (\think\Exception $e) {
Db::rollback();
$result = false;
return ['result' => false, 'msg' => $e->getMessage()];
}
if ($result !== false) {
return ['result' => true, 'msg' => '充值成功'];
}
}
}