Share.php
6.0 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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
<?php
namespace addons\shopro\model;
use think\Model;
use addons\shopro\exception\Exception;
/**
* 购物车模型
*/
class Share extends Model
{
// 表名,不含前缀
protected $name = 'shopro_share';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = false;
protected $deleteTime = false;
protected $hidden = [];
// 追加属性
protected $append = [
];
public static function add($params)
{
$user = User::info();
// 不能分享给自己
if($user->id == $params['share_id']) {
return false;
}
// 新用户不能分享给老用户 按需打开
// if($user->id > $params['share_id']) {
// return false;
// }
$shareUser = User::get($params['share_id']);
if(empty($shareUser)) {
return false;
}
if (!empty($params['url'])) {
$type = explode('-', $params['url']);
}else{
$type = ['index', 0];
}
// 一小时之内不添加同样的记录
$again = self::where([
'user_id' => $user->id,
'share_id' => $params['share_id'],
'type' => $type[0],
'type_id' => $type[1],
'platform' => $params['platform'],
])->where('createtime', '>', (time() - 3600))->count();
if ($again) {
return false;
}
$share = self::create([
'user_id' => $user->id,
'share_id' => $params['share_id'],
'type' => $type[0],
'type_id' => $type[1],
'platform' => $params['platform'],
'createtime' => time(),
]);
return $share;
}
/**
* 分享记录
*/
public static function getList($params) {
$user = User::info();
extract($params);
$type = $type ?? 'all';
$shares = self::with(['user' => function($query) {
$query->withField('id,nickname,avatar');
}])->where('share_id', $user->id);
if ($type != 'all' && in_array($type, ['index', 'goods', 'groupon'])) {
$shares = $shares->{$type}();
}
$shares = $shares->order('id', 'desc')->paginate($per_page ?? 10);
$shares = $shares->toArray();
// 取出来商品和拼团信息,专门进行查询
$sharesData = $shares['data'];
$goodsIds = [];
$grouponIds = [];
foreach ($sharesData as $key => $data) {
if ($data['type'] == 'goods') {
$goodsIds[] = $data['type_id'];
} else if ($data['type'] == 'groupon') {
$grouponIds[] = $data['type_id'];
}
}
// 查询关联的商品
$goodsFields = 'id,title,subtitle,image,price,dispatch_type';
if ($goodsIds) {
$goods = Goods::where('id', 'in', $goodsIds)->field($goodsFields)->select();
$goods = array_column(collection($goods)->toArray(), null, 'id');
}
// 查询关联的拼团
if ($grouponIds) {
$groupons = ActivityGroupon::where('id', 'in', $grouponIds)->with(['goods' => function ($query) use ($goodsFields) {
$query->withField($goodsFields);
}])->select();
$groupons = array_column(collection($groupons)->toArray(), null, 'id');
}
// 组合数据
foreach ($sharesData as $key => &$share) {
if ($share['type'] == 'goods') {
$share['type_data'] = $goods[$share['type_id']] ?? null;
} else if ($share['type'] == 'groupon') {
$share['type_data'] = $groupons[$share['type_id']] ?? null;
} else {
$share['type_data'] = null;
}
// 提示信息
$share['msg'] = '通过您分享的' . (self::getPlatformMsg($share['platform'])) . '访问了' . self::getLookMsg($share, $user);
}
$shares['data'] = $sharesData;
return $shares;
}
/**
* 拼接平台信息
*/
private static function getPlatformMsg($platform) {
if (in_array($platform, ['H5', 'App'])) {
$msg = $platform . '链接';
} else if ($platform == 'wxOfficialAccount') {
$msg = '公众号链接';
} else if ($platform == 'wxMiniProgram') {
$msg = '小程序卡片';
} else {
$msg = '链接';
}
return $msg;
}
/**
* 拼接查看内容
*/
private static function getLookMsg($data, $user) {
$msg = '商城';
if ($data['type'] == 'groupon') {
if ($data['type_data'] && $data['type_data']['user_id'] == $user->id) {
$msg = '您发起的拼团';
} else {
$msg = '您参与的拼团';
}
} else if ($data['type'] == 'goods') {
$msg = $data['type_data'] ? '商品“' . $data['type_data']['title'] . "”" : '商城';
}
return $msg;
}
public function scopeIndex($query) {
return $query->where('type', 'index');
}
public function scopeGoods($query) {
return $query->where('type', 'goods');
}
public function scopeGroupon($query) {
return $query->where('type', 'groupon');
}
public function user() {
return $this->belongsTo(\addons\shopro\model\User::class, 'user_id')->field('id,nickname,avatar');
}
/**
* 查最近的分销商分享记录
*
* @return object
*/
public static function checkLatestShareLogByAgent($userId)
{
return self::where([
'user_id' => $userId,
])->whereExists(function ($query) {
$agent_table_name = (new \addons\shopro\model\commission\Agent())->getQuery()->getTable();
return $query->table($agent_table_name)->where('share_id=' . $agent_table_name . '.user_id')->where('status', 'in', ['normal', 'freeze']);
})->order('id desc')->find();
}
}