PrivateController.php
7.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
<?php
/**
* Created by PhpStorm.
* User: zhl
* Date: 2024/1/6
* Time: 17:41
*/
namespace App\Http\Controllers\Api;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\User\UserLoginLogic;
use App\Models\Domain\DomainInfo;
use App\Models\Product\Category;
use App\Models\Product\Product;
use App\Models\Project\OnlineCheck;
use App\Models\Project\Project;
use App\Models\RouteMap\RouteMap;
use App\Models\User\User;
use App\Models\WebSetting\WebLanguage;
use App\Services\ProjectServer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
/**
* Class PrivateController
* @package App\Http\Controllers\Api
*/
class PrivateController extends BaseController
{
/**
* 优化中项目列表
* @param Request $request
* @return false|string
*/
public function optimizeProjectList(Request $request)
{
$page_size = $request->input('page_size', 20);
$field = ['gl_project.id', 'gl_project.company', 'gl_project.is_upgrade', 'b.start_date', 'd.domain'];
$result = Project::select($field)->leftJoin('gl_project_deploy_optimize as b', 'gl_project.id', '=', 'b.project_id')
->leftJoin('gl_project_online_check as c', 'gl_project.id', '=', 'c.project_id')
->leftJoin('gl_domain_info as d', 'gl_project.id', '=', 'd.project_id')
->whereIn('gl_project.type', [Project::TYPE_TWO, Project::TYPE_FOUR])
->where(function ($subQuery) {
$subQuery->orwhere('c.qa_status', OnlineCheck::STATUS_ONLINE_TRUE)->orwhere('gl_project.is_upgrade', Project::IS_UPGRADE_TRUE);
})
->paginate($page_size)
->toArray();
return $this->success($result);
}
/**
* 获取项目链接
* FIXME 当前直接获取的产品和产品分类, 后期需要封装到内部, 需要添加完整的链接规则
* @param Request $request
* @return false|string
*/
public function getProjectRoute(Request $request)
{
$project_id = intval($request->input('project_id'));
// $type = $request->input('type');
$type = [RouteMap::SOURCE_PRODUCT, RouteMap::SOURCE_PRODUCT_CATE];
$project = Project::where(['id' => $project_id])->first();
if (empty($project))
return $this->error('未发现需要查找的项目!');
$project = ProjectServer::useProject($project_id);
$domain = DomainInfo::where(['project_id' => $project_id])->first();
$host = FALSE == empty($domain) ? 'https://' . $domain->domain . '/' : $project->deploy_build->test_domain;
// 需要标题, 不能直接查询map表
// $list = RouteMap::where(['project_id' => $project_id])
// ->when($type, function ($query) use ($type) {
// return $query->whereIn('source', $type);
// })
// ->get();
//
// $result = [];
// foreach ($list as $val) {
// // 排除首页
// if ($val->source == RouteMap::SOURCE_PAGE && in_array($val->route, ['index', '']))
// continue;
// $result[$val->source][] = $host . $val->route;
// }
$result = [];
$product = Product::where(['status' => Product::STATUS_ON])->get(['title', 'route'])->toArray();
foreach ($product as $val) {
$val['route'] = $host . $val['route'];
// FALSE == preg_match('/(\.html|\.htm)$/', $val['route'])
if (FALSE === strpos($val['route'], '.htm')) {
$val['route'] .= '/';
}
$result[RouteMap::SOURCE_PRODUCT][] = $val;
}
$product_category= Category::get(['title', 'route'])->toArray();
foreach ($product_category as $val) {
$val['route'] = $host . $val['route'];
if (FALSE === strpos($val['route'], '.htm')) {
$val['route'] .= '/';
}
$result[RouteMap::SOURCE_PRODUCT_CATE][] = $val;
}
return $this->success($result);
}
/**
* 验证当前用户是否存在
* TODO 查询手机号码是否是项目用户, 如果升级项目未上线项目return false;
* @param Request $request
* @return false|string
*/
public function hasUser(Request $request)
{
// 获取数据,初始化信息
$mobile = trim($request->input('mobile'));
$result = ['mobile' => $mobile, 'v6_user' => false];
// 获取用户,验证用户
$project_ids = User::where(['mobile' => $mobile])->pluck('project_id')->toArray();
if (empty($project_ids))
return $this->success($result);
$projects = Project::whereIn('id', $project_ids)->where('delete_status', 0)->get();
foreach ($projects as $project) {
// 如果是升级项目 并且未上线状态,不算做有效用户
if ($project->is_upgrade == Project::IS_UPGRADE_TRUE && $project->type <= Project::TYPE_ONE)
continue;
$result['v6_user'] = true;
}
return $this->success($result);
}
/**
* v6 有效用户
* @param Request $request
* @return false|string
*/
public function validUser(Request $request)
{
// 排除演示项目数据
$valid_user = User::select(['gl_project_user.mobile'])->leftJoin('gl_project', 'gl_project.id', '=', 'gl_project_user.project_id')->where(['delete_status' => 0, 'is_upgrade' => Project::IS_UPGRADE_FALSE])->where('gl_project.id', '>', 1)->pluck('mobile')->toArray();
$upgrade_user = User::select(['gl_project_user.mobile'])->leftJoin('gl_project', 'gl_project.id', '=', 'gl_project_user.project_id')->where(['delete_status' => 0, 'is_upgrade' => Project::IS_UPGRADE_TRUE])->where('gl_project.type', '>', Project::TYPE_ONE)->pluck('mobile')->toArray();
$user = array_unique(array_merge($valid_user, $upgrade_user));
return $this->success($user);
}
/**
* @remark :模拟登录返回token
* @name :getToken
* @author :lyh
* @method :post
* @time :2024/3/29 16:19
*/
public function getAutoToken(){
$this->request->validate([
'project_id' => 'required',
], [
'project_id.required' => '项目id不能为空',
]);
//获取当前用户的管理员
$userModel = new User();
$userInfo = $userModel->read(['project_id'=>$this->param['project_id'],'role_id'=>0]);
$userLoginLogicModel = new UserLoginLogic();
$info = $userLoginLogicModel->autoAssembleParam($userInfo);
//生成新token
$token = md5(uniqid().'auto'.$info['id']);
//存储缓存
$info['token'] = $token;
Cache::add($token,$info,3600);
$languageModel = new WebLanguage();
$languageInfo = $languageModel->read(['id'=>$info['main_lang_id']],['short','english','chinese']);
$data = ['token'=>$token,'main_lang_id'=>$info['main_lang_id'],'language_info'=>$languageInfo];
$this->response('success',Code::SUCCESS,$data);
}
}