作者 zhl

Merge branch 'develop' of 47.244.231.31:zhl/globalso-v6 into develop

正在显示 45 个修改的文件 包含 713 行增加202 行删除
@@ -4,12 +4,15 @@ namespace App\Console\Commands\DayCount; @@ -4,12 +4,15 @@ namespace App\Console\Commands\DayCount;
4 4
5 use App\Helper\Common; 5 use App\Helper\Common;
6 use App\Helper\FormGlobalsoApi; 6 use App\Helper\FormGlobalsoApi;
  7 +use App\Models\Domain\DomainInfo;
7 use App\Models\Project\DeployBuild; 8 use App\Models\Project\DeployBuild;
8 use App\Models\Project\DeployOptimize; 9 use App\Models\Project\DeployOptimize;
9 use App\Models\Project\Project; 10 use App\Models\Project\Project;
  11 +use App\Services\ProjectServer;
10 use Carbon\Carbon; 12 use Carbon\Carbon;
11 use Illuminate\Console\Command; 13 use Illuminate\Console\Command;
12 use Illuminate\Support\Facades\DB; 14 use Illuminate\Support\Facades\DB;
  15 +use Illuminate\Support\Facades\Log;
13 16
14 class Count extends Command 17 class Count extends Command
15 { 18 {
@@ -28,6 +31,7 @@ class Count extends Command @@ -28,6 +31,7 @@ class Count extends Command
28 * @var string 31 * @var string
29 */ 32 */
30 protected $description = '统计昨日数据'; 33 protected $description = '统计昨日数据';
  34 +
31 /** 35 /**
32 * @name :(定时执行生成昨日数据统计)handle 36 * @name :(定时执行生成昨日数据统计)handle
33 * @author :lyh 37 * @author :lyh
@@ -39,35 +43,51 @@ class Count extends Command @@ -39,35 +43,51 @@ class Count extends Command
39 $list = DB::table('gl_project')->where('gl_project.extend_type','!=',5) 43 $list = DB::table('gl_project')->where('gl_project.extend_type','!=',5)
40 ->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id') 44 ->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
41 ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id') 45 ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
42 - ->select($this->selectParam())->get()->toArray();  
43 - $data = [];  
44 - $yesterday = Carbon::yesterday()->toDateString();  
45 - foreach ($list as $v){  
46 - $v = (array)$v;  
47 - if($v['domain'] != ''){  
48 - $v['test_domain'] = $v['domain']; 46 + ->select($this->selectParam())->get();
  47 + try {
  48 + if(!empty($list)){
  49 + $list = $list->toArray();
  50 + $data = [];
  51 + $yesterday = Carbon::yesterday()->toDateString();
  52 + $domainInfo = new DomainInfo();
  53 + foreach ($list as $v){
  54 + $v = (array)$v;
  55 + if($v['type'] == Project::TYPE_ZERO){
  56 + continue;
  57 + }
  58 + if(!empty($v['domain'])){
  59 + $info = $domainInfo->read(['id'=>$v['domain']]);
  60 + if($info !== false){
  61 + $v['test_domain'] = $info['domain'];
  62 + }
  63 + }
  64 + $arr = [];
  65 + //统计时间
  66 + $arr['date'] = $yesterday;
  67 + ProjectServer::useProject($v['id']);
  68 + //pv统计
  69 + $arr['pv_num'] = $this->pv_num($yesterday,$v['test_domain']);
  70 + //ip统计
  71 + $arr['ip_num'] = $this->ip_num($yesterday,$v['test_domain']);
  72 + DB::disconnect('custom_mysql');
  73 + //服务达标天数
  74 + $arr['compliance_day'] = $this->compliance_day($v['id']);
  75 + //剩余服务时常
  76 + $arr['service_day'] = $v['remain_day'];
  77 + //项目id
  78 + $arr['project_id'] = $v['project_id'];
  79 + $arr['created_at'] = date('Y-m-d H:i:s');
  80 + $arr['updated_at'] = date('Y-m-d H:i:s');
  81 + //询盘统计
  82 + $arr = $this->inquiry($arr,$v['test_domain']);
  83 + $data[] = $arr;
  84 + }
  85 + //判断数据是否存在
  86 + DB::table('gl_count')->insert($data);
49 } 87 }
50 - $arr = [];  
51 - //统计时间  
52 - $arr['date'] = $yesterday;  
53 - //pv统计  
54 - $arr['pv_num'] = $this->pv_num($yesterday,$v['test_domain']);  
55 - //ip统计  
56 - $arr['ip_num'] = $this->ip_num($yesterday,$v['test_domain']);  
57 - //服务达标天数  
58 - $arr['compliance_day'] = $this->compliance_day($v['test_domain']);  
59 - //剩余服务时常  
60 - $arr['service_day'] = ((int)$v['service_duration'] - (int)$arr['compliance_day']) > 0 ? ((int)$v['service_duration'] - (int)$arr['compliance_day']) : 0;  
61 - //项目id  
62 - $arr['project_id'] = $v['project_id'];  
63 - $arr['created_at'] = date('Y-m-d H:i:s');  
64 - $arr['updated_at'] = date('Y-m-d H:i:s');  
65 - //询盘统计  
66 - $arr = $this->inquiry($arr,$v['test_domain']);  
67 - $data[] = $arr; 88 + }catch (\Exception $e){
  89 + Log::error('同步数据执行失败');
68 } 90 }
69 - //判断数据是否存在  
70 - DB::table('gl_count')->insert($data);  
71 echo $this->error; 91 echo $this->error;
72 } 92 }
73 93
@@ -78,7 +98,7 @@ class Count extends Command @@ -78,7 +98,7 @@ class Count extends Command
78 * @time :2023/6/14 15:40 98 * @time :2023/6/14 15:40
79 */ 99 */
80 public function pv_num($yesterday,$domain){ 100 public function pv_num($yesterday,$domain){
81 - $pv = DB::table('gl_customer_visit_item')->whereDate('updated_date', $yesterday)->where('domain',$domain)->count(); 101 + $pv = DB::connection('custom_mysql')->table('gl_customer_visit_item')->whereDate('updated_date', $yesterday)->where('domain',$domain)->count();
82 return $pv; 102 return $pv;
83 } 103 }
84 104
@@ -89,7 +109,7 @@ class Count extends Command @@ -89,7 +109,7 @@ class Count extends Command
89 * @time :2023/6/14 15:40 109 * @time :2023/6/14 15:40
90 */ 110 */
91 public function ip_num($yesterday,$domain){ 111 public function ip_num($yesterday,$domain){
92 - $ip = DB::table('gl_customer_visit')->whereDate('updated_date', $yesterday)->where('domain',$domain)->count(); 112 + $ip = DB::connection('custom_mysql')->table('gl_customer_visit')->whereDate('updated_date', $yesterday)->where('domain',$domain)->count();
93 return $ip; 113 return $ip;
94 } 114 }
95 115
@@ -150,8 +170,10 @@ class Count extends Command @@ -150,8 +170,10 @@ class Count extends Command
150 */ 170 */
151 public function selectParam(){ 171 public function selectParam(){
152 $select = [ 172 $select = [
153 - 'gl_project.id AS user_id', 173 + 'gl_project.id AS id',
  174 + 'gl_project.type AS type',
154 'gl_project.extend_type AS extend_type', 175 'gl_project.extend_type AS extend_type',
  176 + 'gl_project.remain_day AS remain_day',
155 'gl_project_deploy_build.test_domain AS test_domain', 177 'gl_project_deploy_build.test_domain AS test_domain',
156 'gl_project_deploy_optimize.domain AS domain', 178 'gl_project_deploy_optimize.domain AS domain',
157 'gl_project_deploy_build.project_id AS project_id', 179 'gl_project_deploy_build.project_id AS project_id',
@@ -3,6 +3,9 @@ @@ -3,6 +3,9 @@
3 namespace App\Console\Commands\MonthlyCount; 3 namespace App\Console\Commands\MonthlyCount;
4 4
5 use App\Helper\FormGlobalsoApi; 5 use App\Helper\FormGlobalsoApi;
  6 +use App\Models\Domain\DomainInfo;
  7 +use App\Models\Project\Project;
  8 +use App\Services\ProjectServer;
6 use Carbon\Carbon; 9 use Carbon\Carbon;
7 use Illuminate\Console\Command; 10 use Illuminate\Console\Command;
8 use Illuminate\Support\Facades\DB; 11 use Illuminate\Support\Facades\DB;
@@ -41,16 +44,25 @@ class InquiryMonthlyCount extends Command @@ -41,16 +44,25 @@ class InquiryMonthlyCount extends Command
41 $startTime = Carbon::now()->subMonth()->startOfMonth()->toDateString(); 44 $startTime = Carbon::now()->subMonth()->startOfMonth()->toDateString();
42 // 获取上个月的结束时间 45 // 获取上个月的结束时间
43 $endTime = Carbon::now()->subMonth()->endOfMonth()->toDateString(); 46 $endTime = Carbon::now()->subMonth()->endOfMonth()->toDateString();
  47 + $domainInfo = new DomainInfo();
44 foreach ($list as $value){ 48 foreach ($list as $value){
45 $value = (array)$value; 49 $value = (array)$value;
46 - if($value['domain'] != ''){  
47 - $value['test_domain'] = $value['domain']; 50 + if($value['type'] == Project::TYPE_ZERO){
  51 + continue;
  52 + }
  53 + if(!empty($value['domain'])){
  54 + $info = $domainInfo->read(['id'=>$value['domain']]);
  55 + if($info !== false){
  56 + $value['test_domain'] = $value['domain'];
  57 + }
48 } 58 }
49 $arr = []; 59 $arr = [];
50 //按月统计询盘记录 60 //按月统计询盘记录
51 $arr = $this->inquiryCount($arr,$startTime,$endTime,$value['test_domain']); 61 $arr = $this->inquiryCount($arr,$startTime,$endTime,$value['test_domain']);
52 $arr = $this->flowCount($arr,$startTime,$endTime,$value['project_id']); 62 $arr = $this->flowCount($arr,$startTime,$endTime,$value['project_id']);
  63 + ProjectServer::useProject($value['project_id']);
53 $arr = $this->sourceCount($arr,$value['test_domain'],$startTime,$endTime); 64 $arr = $this->sourceCount($arr,$value['test_domain'],$startTime,$endTime);
  65 + DB::disconnect('custom_mysql');
54 $arr['created_at'] = date('Y-m-d H:i:s'); 66 $arr['created_at'] = date('Y-m-d H:i:s');
55 $arr['updated_at'] = date('Y-m-d H:i:s'); 67 $arr['updated_at'] = date('Y-m-d H:i:s');
56 $arr['project_id'] = $value['project_id']; 68 $arr['project_id'] = $value['project_id'];
@@ -128,21 +140,21 @@ class InquiryMonthlyCount extends Command @@ -128,21 +140,21 @@ class InquiryMonthlyCount extends Command
128 */ 140 */
129 public function sourceCount(&$arr,$domain,$startTime,$endTime){ 141 public function sourceCount(&$arr,$domain,$startTime,$endTime){
130 //访问来源前10 142 //访问来源前10
131 - $source = DB::table('gl_customer_visit') 143 + $source = DB::connection('custom_mysql')->table('gl_customer_visit')
132 ->select('referrer_url', DB::raw('COUNT(*) as count')) 144 ->select('referrer_url', DB::raw('COUNT(*) as count'))
133 ->groupBy('referrer_url')->where(['domain'=>$domain]) 145 ->groupBy('referrer_url')->where(['domain'=>$domain])
134 ->whereBetween('updated_date', [$startTime,$endTime]) 146 ->whereBetween('updated_date', [$startTime,$endTime])
135 ->orderByDesc('count')->limit(10)->get()->toArray(); 147 ->orderByDesc('count')->limit(10)->get()->toArray();
136 $arr['source'] = json_encode($source); 148 $arr['source'] = json_encode($source);
137 //访问国家前15 149 //访问国家前15
138 - $source_country = DB::table('gl_customer_visit') 150 + $source_country = DB::connection('custom_mysql')->table('gl_customer_visit')
139 ->select('country',DB::raw('COUNT(*) as ip'),DB::raw('SUM(depth) as pv')) 151 ->select('country',DB::raw('COUNT(*) as ip'),DB::raw('SUM(depth) as pv'))
140 ->groupBy('country')->where(['domain'=>$domain]) 152 ->groupBy('country')->where(['domain'=>$domain])
141 ->whereBetween('updated_date', [$startTime,$endTime]) 153 ->whereBetween('updated_date', [$startTime,$endTime])
142 ->orderBy('ip','desc')->limit(15)->get()->toArray(); 154 ->orderBy('ip','desc')->limit(15)->get()->toArray();
143 $arr['source_country'] = json_encode($source_country); 155 $arr['source_country'] = json_encode($source_country);
144 //受访界面前15 156 //受访界面前15
145 - $referrer_url = DB::table('gl_customer_visit') 157 + $referrer_url = DB::connection('custom_mysql')->table('gl_customer_visit')
146 ->select('url',DB::raw('COUNT(*) as num')) 158 ->select('url',DB::raw('COUNT(*) as num'))
147 ->orderBy('num','desc')->where(['domain'=>$domain]) 159 ->orderBy('num','desc')->where(['domain'=>$domain])
148 ->whereBetween('updated_date', [$startTime,$endTime]) 160 ->whereBetween('updated_date', [$startTime,$endTime])
@@ -150,7 +162,7 @@ class InquiryMonthlyCount extends Command @@ -150,7 +162,7 @@ class InquiryMonthlyCount extends Command
150 ->limit(15)->get()->toArray(); 162 ->limit(15)->get()->toArray();
151 $arr['referrer_url'] = json_encode($referrer_url); 163 $arr['referrer_url'] = json_encode($referrer_url);
152 //访问端口 164 //访问端口
153 - $referrer_port = DB::table('gl_customer_visit') 165 + $referrer_port = DB::connection('custom_mysql')->table('gl_customer_visit')
154 ->select('device_port',DB::raw('COUNT(*) as num')) 166 ->select('device_port',DB::raw('COUNT(*) as num'))
155 ->orderBy('num','desc')->where(['domain'=>$domain]) 167 ->orderBy('num','desc')->where(['domain'=>$domain])
156 ->whereBetween('updated_date', [$startTime,$endTime]) 168 ->whereBetween('updated_date', [$startTime,$endTime])
@@ -168,7 +180,8 @@ class InquiryMonthlyCount extends Command @@ -168,7 +180,8 @@ class InquiryMonthlyCount extends Command
168 */ 180 */
169 public function selectParam(){ 181 public function selectParam(){
170 $select = [ 182 $select = [
171 - 'gl_project.id AS user_id', 183 + 'gl_project.id AS id',
  184 + 'gl_project.type AS type',
172 'gl_project.extend_type AS extend_type', 185 'gl_project.extend_type AS extend_type',
173 'gl_project_deploy_build.test_domain AS test_domain', 186 'gl_project_deploy_build.test_domain AS test_domain',
174 'gl_project_deploy_optimize.domain AS domain', 187 'gl_project_deploy_optimize.domain AS domain',
@@ -6,6 +6,7 @@ use App\Helper\Arr; @@ -6,6 +6,7 @@ use App\Helper\Arr;
6 use App\Helper\QuanqiusouApi; 6 use App\Helper\QuanqiusouApi;
7 use App\Models\Project\DeployBuild; 7 use App\Models\Project\DeployBuild;
8 use App\Models\Project\DeployOptimize; 8 use App\Models\Project\DeployOptimize;
  9 +use App\Models\Project\Project;
9 use App\Models\RankData\RankData as GoogleRankModel; 10 use App\Models\RankData\RankData as GoogleRankModel;
10 use App\Utils\LogUtils; 11 use App\Utils\LogUtils;
11 12
  1 +<?php
  2 +
  3 +namespace App\Console\Commands;
  4 +
  5 +use App\Helper\Arr;
  6 +use App\Models\Product\Category;
  7 +use App\Models\Product\Product;
  8 +use App\Models\Project\OnlineCheck;
  9 +use App\Models\Project\Project;
  10 +use App\Models\RankData\RankData as GoogleRankModel;
  11 +use App\Models\RouteMap\RouteMap;
  12 +use GuzzleHttp\Client;
  13 +use GuzzleHttp\Promise\Utils;
  14 +use Illuminate\Console\Command;
  15 +use Illuminate\Support\Facades\DB;
  16 +use Illuminate\Support\Str;
  17 +
  18 +/**
  19 + * 剩余服务时长
  20 + * Class Traffic
  21 + * @package App\Console\Commands
  22 + * @author zbj
  23 + * @date 2023/5/18
  24 + */
  25 +class RemainDay extends Command
  26 +{
  27 + /**
  28 + * The name and signature of the console command.
  29 + *
  30 + * @var string
  31 + */
  32 + protected $signature = 'remain_day';
  33 +
  34 + /**
  35 + * The console command description.
  36 + *
  37 + * @var string
  38 + */
  39 + protected $description = '网站服务剩余时长';
  40 +
  41 + /**
  42 + * Create a new command instance.
  43 + *
  44 + * @return void
  45 + */
  46 + public function __construct()
  47 + {
  48 + parent::__construct();
  49 + }
  50 +
  51 + /**
  52 + * @return bool
  53 + */
  54 + public function handle()
  55 + {
  56 + $list = Project::whereIn('type', ['2,3,4'])->get();
  57 + foreach ($list as $item){
  58 + if($item['type'] == 3){
  59 + //排名达标天数
  60 + $compliance_day = GoogleRankModel::where(['project_id' => $item['id'], 'lang' => ''])->value('compliance_day') ?: 0;
  61 + $remain_day = $item['deploy_build']['service_duration'] - $compliance_day;
  62 + }else{
  63 + //审核上线后开始
  64 + $check_time = OnlineCheck::where('project_id', $item['id'])->where('status', 1)->value('created_at') ?: '';
  65 + if($check_time){
  66 + $remain_day = $item['deploy_build']['service_duration'];
  67 + }else{
  68 + $diff = time() - strtotime($check_time);
  69 + $remain_day = floor($diff / (60 * 60 * 24));
  70 + }
  71 + }
  72 + $item->remain_day = $remain_day > 0 ? $remain_day : 0;
  73 + $item->save();
  74 + }
  75 + }
  76 +}
@@ -16,6 +16,7 @@ use App\Models\Project\ProjectRenew; @@ -16,6 +16,7 @@ use App\Models\Project\ProjectRenew;
16 use App\Utils\LogUtils; 16 use App\Utils\LogUtils;
17 use Hashids\Hashids; 17 use Hashids\Hashids;
18 use Illuminate\Console\Command; 18 use Illuminate\Console\Command;
  19 +use Illuminate\Database\Eloquent\Model;
19 use Illuminate\Support\Facades\DB; 20 use Illuminate\Support\Facades\DB;
20 use Illuminate\Support\Facades\Http; 21 use Illuminate\Support\Facades\Http;
21 22
@@ -57,37 +58,41 @@ class SyncProject extends Command @@ -57,37 +58,41 @@ class SyncProject extends Command
57 */ 58 */
58 public function handle() 59 public function handle()
59 { 60 {
60 - $list = NoticeLog::where('type', NoticeLog::TYPE_PROJECT)->where('status', NoticeLog::STATUS_PENDING)->get();  
61 - foreach ($list as $item){  
62 - try {  
63 - $api = new OaGlobalsoApi();  
64 - $data = $api->order_info($item['data']['order_id']);  
65 - if(!$data || empty($data['data'])){  
66 - LogUtils::error('OaGlobalsoApi order_info error', $data);  
67 - $this->retry($item);  
68 - }  
69 - if($data['data']['order_type'] == '首次'){  
70 - $this->sync($data['data']); 61 + while (true){
  62 + $list = NoticeLog::where('type', NoticeLog::TYPE_PROJECT)->where('status', NoticeLog::STATUS_PENDING)->get();
  63 + foreach ($list as $item){
  64 + try {
  65 + $api = new OaGlobalsoApi();
  66 + $data = $api->order_info($item['data']['order_id']);
  67 + if(!$data || empty($data['data'])){
  68 + LogUtils::error('OaGlobalsoApi order_info error', $data);
  69 + $this->retry($item);
  70 + }
  71 + if($data['data']['order_type'] == '首次'){
  72 + $this->sync($data['data']);
71 73
72 - //同步aicc  
73 - if($data['data']['exclusive_aicc']){  
74 - $this->toAicc($data['data']); 74 + //同步aicc
  75 + if($data['data']['exclusive_aicc']){
  76 + $this->toAicc($data['data']);
  77 + }
  78 + //同步hagro
  79 + if($data['data']['exclusive_hagro']){
  80 + $this->toHagro($data['data']);
  81 + }
75 } 82 }
76 - //同步hagro  
77 - if($data['data']['exclusive_hagro']){  
78 - $this->toHagro($data['data']); 83 + if($data['data']['order_type'] == '续费'){
  84 + $this->renewSync($data['data']);
79 } 85 }
  86 + $item->status = NoticeLog::STATUS_SUCCESS;
  87 + $item->save();
  88 + }catch (\Exception $e){
  89 + errorLog('项目同步失败', $item, $e);
  90 + $this->retry($item);
80 } 91 }
81 - if($data['data']['order_type'] == '续费'){  
82 - $this->renewSync($data['data']);  
83 - }  
84 - $item->status = NoticeLog::STATUS_SUCCESS;  
85 - $item->save();  
86 - }catch (\Exception $e){  
87 - errorLog('项目同步失败', $item, $e);  
88 - $this->retry($item);  
89 } 92 }
  93 + sleep(2);
90 } 94 }
  95 +
91 } 96 }
92 97
93 /** 98 /**
@@ -190,14 +195,10 @@ class SyncProject extends Command @@ -190,14 +195,10 @@ class SyncProject extends Command
190 'project_after' => [], 195 'project_after' => [],
191 'payment' => [ 196 'payment' => [
192 'amount' => $param['plan_price'], 197 'amount' => $param['plan_price'],
  198 + 'contract'=>$param['files'],
  199 + 'bill'=>$param['images']
193 ], 200 ],
194 ]; 201 ];
195 - if(!empty($param['files'])){  
196 - $data['payment']['contract'] = json_encode($param['files']);  
197 - }  
198 - if(!empty($param['images'])){  
199 - $data['payment']['bill'] = json_encode($param['images']);  
200 - }  
201 DB::beginTransaction(); 202 DB::beginTransaction();
202 try { 203 try {
203 $id = $this->saveProject($data['project']); 204 $id = $this->saveProject($data['project']);
@@ -209,7 +210,7 @@ class SyncProject extends Command @@ -209,7 +210,7 @@ class SyncProject extends Command
209 DB::commit(); 210 DB::commit();
210 }catch (\Exception $e){ 211 }catch (\Exception $e){
211 DB::rollBack(); 212 DB::rollBack();
212 - errorLog('项目同步失败', $data, $e); 213 + throw new \Exception($e->getMessage());
213 } 214 }
214 } 215 }
215 216
@@ -242,7 +243,13 @@ class SyncProject extends Command @@ -242,7 +243,13 @@ class SyncProject extends Command
242 $param['channel'] = Arr::a2s($param['channel']); 243 $param['channel'] = Arr::a2s($param['channel']);
243 } 244 }
244 $projectModel = new Project(); 245 $projectModel = new Project();
245 - return $projectModel->addReturnId($param); 246 + $info = $projectModel->read(['from_order_id'=>$param['from_order_id']]);
  247 + if($info !== false){
  248 + $projectModel->edit($param, ['id' => $info['id']]);
  249 + return $info['id'];
  250 + }else{
  251 + return $projectModel->addReturnId($param);
  252 + }
246 } 253 }
247 254
248 /** 255 /**
@@ -254,7 +261,12 @@ class SyncProject extends Command @@ -254,7 +261,12 @@ class SyncProject extends Command
254 $param['project_id'] = $id; 261 $param['project_id'] = $id;
255 //查询数据是否存在 262 //查询数据是否存在
256 $afterModel = new After(); 263 $afterModel = new After();
257 - return $afterModel->add($param); 264 + $info = $afterModel->read(['project_id'=>$id]);
  265 + if($info !== false){
  266 + $afterModel->edit($param,['id'=>$info['id']]);
  267 + }else{
  268 + $afterModel->add($param);
  269 + }
258 } 270 }
259 271
260 /** 272 /**
@@ -267,13 +279,18 @@ class SyncProject extends Command @@ -267,13 +279,18 @@ class SyncProject extends Command
267 protected function savePayment($param,$id){ 279 protected function savePayment($param,$id){
268 $param['project_id'] = $id; 280 $param['project_id'] = $id;
269 $paymentModel= new Payment(); 281 $paymentModel= new Payment();
270 - if(isset($param['contract']) && !empty($param['contract'])){ 282 +// if(isset($param['contract']) && !empty($param['contract'])){
271 $param['contract'] = Arr::a2s($param['contract']); 283 $param['contract'] = Arr::a2s($param['contract']);
272 - }  
273 - if(isset($param['bill']) && !empty($param['bill'])){ 284 +// }
  285 +// if(isset($param['bill']) && !empty($param['bill'])){
274 $param['bill'] = Arr::a2s($param['bill']); 286 $param['bill'] = Arr::a2s($param['bill']);
  287 +// }
  288 + $info = $paymentModel->read(['project_id'=>$id]);
  289 + if($info !== false){
  290 + $paymentModel->edit($param,['id'=>$info['id']]);
  291 + }else{
  292 + $paymentModel->add($param);
275 } 293 }
276 - return $paymentModel->add($param);  
277 } 294 }
278 295
279 /** 296 /**
@@ -289,7 +306,12 @@ class SyncProject extends Command @@ -289,7 +306,12 @@ class SyncProject extends Command
289 $code = $hashids->encode($id); 306 $code = $hashids->encode($id);
290 $param['test_domain'] = 'https://v6-' . $code . '.globalso.site/'; 307 $param['test_domain'] = 'https://v6-' . $code . '.globalso.site/';
291 $deployBuildModel = new DeployBuild(); 308 $deployBuildModel = new DeployBuild();
292 - return $deployBuildModel->add($param); 309 + $info = $deployBuildModel->read(['project_id'=>$id]);
  310 + if($info !== false){
  311 + $deployBuildModel->edit($param,['id'=>$info['id']]);
  312 + }else{
  313 + $deployBuildModel->add($param);
  314 + }
293 } 315 }
294 316
295 /** 317 /**
@@ -302,7 +324,12 @@ class SyncProject extends Command @@ -302,7 +324,12 @@ class SyncProject extends Command
302 protected function saveDeployOptimize($param,$id){ 324 protected function saveDeployOptimize($param,$id){
303 $param['project_id'] = $id; 325 $param['project_id'] = $id;
304 $deployOptimizeModel = new DeployOptimize(); 326 $deployOptimizeModel = new DeployOptimize();
305 - return $deployOptimizeModel->add($param); 327 + $info = $deployOptimizeModel->read(['project_id'=>$id]);
  328 + if($info !== false){
  329 + $deployOptimizeModel->edit($param,['id'=>$info['id']]);
  330 + }else{
  331 + $deployOptimizeModel->add($param);
  332 + }
306 } 333 }
307 334
308 /** 335 /**
@@ -346,7 +373,7 @@ class SyncProject extends Command @@ -346,7 +373,7 @@ class SyncProject extends Command
346 * @date 2023/9/1 373 * @date 2023/9/1
347 */ 374 */
348 protected function toHagro($data){ 375 protected function toHagro($data){
349 - $url = 'https://beta.hagro.cn/globalso/create_project'; 376 + $url = 'https://admin.hagro.cn/globalso/create_project';
350 $param = [ 377 $param = [
351 'company' => $data['company_name'], 378 'company' => $data['company_name'],
352 'phone' => $data['principal_mobile'], 379 'phone' => $data['principal_mobile'],
@@ -46,6 +46,8 @@ class Demo extends Command @@ -46,6 +46,8 @@ class Demo extends Command
46 */ 46 */
47 public function handle() 47 public function handle()
48 { 48 {
  49 + $domain = parse_url('https//:dev.golbalso.site/');
  50 + dd($domain);
49 echo time() . PHP_EOL; 51 echo time() . PHP_EOL;
50 $blogModel = new Image(); 52 $blogModel = new Image();
51 $list = $blogModel->list(); 53 $list = $blogModel->list();
@@ -6,6 +6,7 @@ use App\Helper\Arr; @@ -6,6 +6,7 @@ use App\Helper\Arr;
6 use App\Models\Product\Category; 6 use App\Models\Product\Category;
7 use App\Models\Product\Product; 7 use App\Models\Product\Product;
8 use App\Models\RouteMap\RouteMap; 8 use App\Models\RouteMap\RouteMap;
  9 +use App\Services\ProjectServer;
9 use GuzzleHttp\Client; 10 use GuzzleHttp\Client;
10 use GuzzleHttp\Promise\Utils; 11 use GuzzleHttp\Promise\Utils;
11 use Illuminate\Console\Command; 12 use Illuminate\Console\Command;
@@ -230,20 +231,26 @@ class WebTraffic extends Command @@ -230,20 +231,26 @@ class WebTraffic extends Command
230 */ 231 */
231 protected function getProductUrls($project_id){ 232 protected function getProductUrls($project_id){
232 //产品分类页面 233 //产品分类页面
233 - $product_cate_ids = Category::where('project_id', $project_id)->where('status', Category::STATUS_ACTIVE)->pluck('id')->toArray();  
234 - $data['urls_cats'] = RouteMap::where('project_id', $project_id)->where('source', RouteMap::SOURCE_PRODUCT_CATE)->whereIn('source_id', $product_cate_ids)->get()->toArray(); 234 + ProjectServer::useProject($project_id);
  235 + $product_cate_ids = DB::connection('custom_mysql')->table('gl_product_category')
  236 + ->where('project_id', $project_id)->where('status', 1)->pluck('id')->toArray();
  237 + $data['urls_cats'] = DB::connection('custom_mysql')->table('gl_route_map')
  238 + ->where('project_id', $project_id)->where('source', 'product_category')->whereIn('source_id', $product_cate_ids)->get()->toArray();
235 //单页面 239 //单页面
236 //todo 发布状态的单页面id 240 //todo 发布状态的单页面id
237 - $data['urls_page'] = RouteMap::where('project_id', $project_id)->where('source', RouteMap::SOURCE_PAGE)->get()->toArray(); 241 + $data['urls_page'] = DB::connection('custom_mysql')->table('gl_route_map')
  242 + ->where('project_id', $project_id)->where('source', 'page')->get()->toArray();
238 //产品详情页 243 //产品详情页
239 - $product_ids = Product::where('project_id', $project_id)->where('status', Product::STATUS_ON)->pluck('id')->toArray();  
240 - $data['urls_details'] = RouteMap::where('project_id', $project_id)->where('source', RouteMap::SOURCE_PRODUCT)->whereIn('source_id', $product_ids)->get()->toArray(); 244 + $product_ids = DB::connection('custom_mysql')->table('gl_product_category')
  245 + ->where('project_id', $project_id)->where('status', 1)->pluck('id')->toArray();
  246 + $data['urls_details'] = DB::connection('custom_mysql')->table('gl_route_map')
  247 + ->where('project_id', $project_id)->where('source', 'product')->whereIn('source_id', $product_ids)->get()->toArray();
241 248
242 $data['urls_cats'] = array_merge($data['urls_cats'], $data['urls_page']); 249 $data['urls_cats'] = array_merge($data['urls_cats'], $data['urls_page']);
243 if(empty($data['urls_cats'])){ 250 if(empty($data['urls_cats'])){
244 $data['urls_cats'] = $data['urls_details']; 251 $data['urls_cats'] = $data['urls_details'];
245 } 252 }
246 - 253 + DB::disconnect('custom_mysql');
247 return $data; 254 return $data;
248 } 255 }
249 256
@@ -312,10 +319,10 @@ class WebTraffic extends Command @@ -312,10 +319,10 @@ class WebTraffic extends Command
312 319
313 $url = []; 320 $url = [];
314 if($res_sdzb == 0){//深度一页 321 if($res_sdzb == 0){//深度一页
315 - $url[] = $project_urls[$res_ymzb] ? Arr::random($project_urls[$res_ymzb])['route'] : ''; 322 + $url[] = $project_urls[$res_ymzb] ? Arr::random($project_urls[$res_ymzb])->route : '';
316 }elseif($res_sdzb == 1){//深度两页 323 }elseif($res_sdzb == 1){//深度两页
317 $url[] = $project_urls['home']; 324 $url[] = $project_urls['home'];
318 - $url[] = $project_urls[$res_ymzb] ? Arr::random($project_urls[$res_ymzb])['route'] : ''; 325 + $url[] = $project_urls[$res_ymzb] ? Arr::random($project_urls[$res_ymzb])->route : '';
319 }elseif($res_sdzb == 2){//深度3-6页 326 }elseif($res_sdzb == 2){//深度3-6页
320 $yms = rand(2,5); //随机页面数 327 $yms = rand(2,5); //随机页面数
321 $url = Arr::pluck(Arr::random($all_url, $yms), 'route'); 328 $url = Arr::pluck(Arr::random($all_url, $yms), 'route');
@@ -16,6 +16,7 @@ class Kernel extends ConsoleKernel @@ -16,6 +16,7 @@ class Kernel extends ConsoleKernel
16 protected function schedule(Schedule $schedule) 16 protected function schedule(Schedule $schedule)
17 { 17 {
18 // $schedule->command('inspire')->hourly(); 18 // $schedule->command('inspire')->hourly();
  19 + $schedule->command('remain_day')->dailyAt('00:30')->withoutOverlapping(1); // 项目剩余服务时长
19 $schedule->command('rank_data')->dailyAt('01:00')->withoutOverlapping(1); // 排名数据,每天凌晨执行一次 20 $schedule->command('rank_data')->dailyAt('01:00')->withoutOverlapping(1); // 排名数据,每天凌晨执行一次
20 $schedule->command('rank_data_speed')->weeklyOn(1, '01:00')->withoutOverlapping(1); // 排名数据-测速数据,每周一凌晨执行一次 21 $schedule->command('rank_data_speed')->weeklyOn(1, '01:00')->withoutOverlapping(1); // 排名数据-测速数据,每周一凌晨执行一次
21 $schedule->command('rank_data_external_links')->weeklyOn(1, '01:00')->withoutOverlapping(1); // 排名数据-外链,每周一凌晨执行一次 22 $schedule->command('rank_data_external_links')->weeklyOn(1, '01:00')->withoutOverlapping(1); // 排名数据-外链,每周一凌晨执行一次
@@ -28,7 +29,6 @@ class Kernel extends ConsoleKernel @@ -28,7 +29,6 @@ class Kernel extends ConsoleKernel
28 $schedule->command('web_traffic 2')->cron('*/18 * * * *'); // 引流 4-8个月的项目,18分钟一次 29 $schedule->command('web_traffic 2')->cron('*/18 * * * *'); // 引流 4-8个月的项目,18分钟一次
29 $schedule->command('web_traffic 3')->cron('*/12 * * * *'); // 引流 大于9个月的项目,12分钟一次 30 $schedule->command('web_traffic 3')->cron('*/12 * * * *'); // 引流 大于9个月的项目,12分钟一次
30 $schedule->command('sync_channel')->dailyAt('06:00')->withoutOverlapping(1); // 渠道信息,每周执行一次 31 $schedule->command('sync_channel')->dailyAt('06:00')->withoutOverlapping(1); // 渠道信息,每周执行一次
31 - $schedule->command('sync_project')->everyMinute()->withoutOverlapping(1); //同步项目  
32 $schedule->command('month_count')->monthlyOn(1,'01:00')->withoutOverlapping(1);//没月月初1号执行月统计记录 32 $schedule->command('month_count')->monthlyOn(1,'01:00')->withoutOverlapping(1);//没月月初1号执行月统计记录
33 $schedule->command('forward_count')->monthlyOn(1,'01:00')->withoutOverlapping(1);//没月月初1号执行月统计转发询盘记录 33 $schedule->command('forward_count')->monthlyOn(1,'01:00')->withoutOverlapping(1);//没月月初1号执行月统计转发询盘记录
34 $schedule->command('inquiry_delay')->everyMinute()->withoutOverlapping(1);//TODO::上线放开,转发询盘,每分钟执行一次 34 $schedule->command('inquiry_delay')->everyMinute()->withoutOverlapping(1);//TODO::上线放开,转发询盘,每分钟执行一次
@@ -7,8 +7,6 @@ use App\Http\Controllers\Aside\BaseController; @@ -7,8 +7,6 @@ use App\Http\Controllers\Aside\BaseController;
7 use App\Http\Logic\Aside\Ai\AiCommandLogic; 7 use App\Http\Logic\Aside\Ai\AiCommandLogic;
8 use App\Http\Requests\Aside\Ai\AiCommandRequest; 8 use App\Http\Requests\Aside\Ai\AiCommandRequest;
9 use App\Models\Ai\AiCommand as AiCommandModel; 9 use App\Models\Ai\AiCommand as AiCommandModel;
10 -use Illuminate\Http\Request;  
11 -use function App\Helper\send_openai_msg;  
12 10
13 /** 11 /**
14 * @remark :ai指令 12 * @remark :ai指令
@@ -39,6 +39,7 @@ class BaseController extends Controller @@ -39,6 +39,7 @@ class BaseController extends Controller
39 $info = Cache::get(Common::MANAGE_TOKEN . $this->token); 39 $info = Cache::get(Common::MANAGE_TOKEN . $this->token);
40 if(!empty($this->token) && !empty($info)){ 40 if(!empty($this->token) && !empty($info)){
41 $this->manage = $info; 41 $this->manage = $info;
  42 + Cache::put($this->token, $info, 3600);//更新缓存时间
42 $this->uid = $info['id']; 43 $this->uid = $info['id'];
43 } 44 }
44 } 45 }
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :ManagerLogController.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2023/9/5 16:09
  8 + */
  9 +
  10 +namespace App\Http\Controllers\Aside\Manage;
  11 +
  12 +use App\Enums\Common\Code;
  13 +use App\Http\Controllers\Aside\BaseController;
  14 +use App\Models\Manage\LoginLog;
  15 +use App\Models\Manage\Manage;
  16 +
  17 +class ManagerLogController extends BaseController
  18 +{
  19 + /**
  20 + * @remark :管理员日志列表
  21 + * @name :lists
  22 + * @author :lyh
  23 + * @method :post
  24 + * @time :2023/9/5 16:10
  25 + */
  26 + public function lists(LoginLog $manageLogin){
  27 + $map = $this->searchParam();
  28 + $lists = $manageLogin->lists($map,$this->page,$this->row,$this->order);
  29 + if(!empty($lists) && !empty($lists['list'])){
  30 + $managerModel = new Manage();
  31 + foreach ($lists['list'] as $k => $v){
  32 + $info = $managerModel->read(['id'=>$v['manage_id']]);
  33 + $v['mobile'] = $info['mobile'] ?? '';
  34 + $v['name'] = $info['name'] ?? '';
  35 + $v['type'] = (isset($v['type']) && $v['type'] == 1) ? '账号密码登录' : '验证码登录';
  36 + $lists['list'][$k] = $v;
  37 + }
  38 + }
  39 + $this->response('success',Code::SUCCESS,$lists);
  40 + }
  41 +
  42 + /**
  43 + * @remark :搜索参数
  44 + * @name :searchParam
  45 + * @author :lyh
  46 + * @method :post
  47 + * @time :2023/9/5 16:56
  48 + */
  49 + public function searchParam(){
  50 + $map = [];
  51 + $managerModel = new Manage();
  52 + if(isset($this->map['mobile']) && !empty($this->map['mobile'])){
  53 + $ids = $managerModel->where('mobile', 'like', '%' . $this->map['mobile'] . '%')->pluck('id')->toArray();
  54 + $map['manage_id'] = ['in',$ids];
  55 + }elseif (isset($this->map['name']) && !empty($this->map['name'])){
  56 + $ids = $managerModel->where('name', 'like', '%' . $this->param['name'] . '%')->pluck('id')->toArray();
  57 + $map['manage_id'] = ['in',$ids];
  58 + }
  59 + if(isset($this->map['created_at'])){
  60 + $map['created_at'] = $this->map['created_at'];
  61 + }
  62 + return $map;
  63 + }
  64 +
  65 +}
@@ -95,7 +95,9 @@ class OnlineController extends BaseController @@ -95,7 +95,9 @@ class OnlineController extends BaseController
95 * @time :2023/8/18 14:44 95 * @time :2023/8/18 14:44
96 */ 96 */
97 public function handleParam(&$item){ 97 public function handleParam(&$item){
98 - $data = APublicModel::getNumByProjectId($item['id']); 98 + if($item['type'] != Project::TYPE_ZERO){
  99 + $data = APublicModel::getNumByProjectId($item['id']);
  100 + }
99 $manageModel = new Manage(); 101 $manageModel = new Manage();
100 $item['channel'] = Channel::getChannelText($item['channel']['user_id'] ?? 0); 102 $item['channel'] = Channel::getChannelText($item['channel']['user_id'] ?? 0);
101 $item['build_leader'] = $manageModel->getName($item['leader_mid']); 103 $item['build_leader'] = $manageModel->getName($item['leader_mid']);
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Aside\Optimize; @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Aside\Optimize;
5 use App\Enums\Common\Code; 5 use App\Enums\Common\Code;
6 use App\Http\Controllers\Aside\BaseController; 6 use App\Http\Controllers\Aside\BaseController;
7 use App\Http\Logic\Aside\Optimize\OptimizeLogic; 7 use App\Http\Logic\Aside\Optimize\OptimizeLogic;
  8 +use App\Models\Domain\DomainInfo;
8 use App\Models\Manage\Manage; 9 use App\Models\Manage\Manage;
9 use App\Models\Project\Project; 10 use App\Models\Project\Project;
10 use Illuminate\Support\Facades\DB; 11 use Illuminate\Support\Facades\DB;
@@ -32,11 +33,13 @@ class OptimizeController extends BaseController @@ -32,11 +33,13 @@ class OptimizeController extends BaseController
32 $lists = $query->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray(); 33 $lists = $query->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray();
33 if(!empty($lists['list'])){ 34 if(!empty($lists['list'])){
34 $manager = new Manage(); 35 $manager = new Manage();
  36 + $domainModel = new DomainInfo();
35 foreach ($lists['list'] as $k => $v){ 37 foreach ($lists['list'] as $k => $v){
36 $v['plan'] = $project::planMap()[$v['plan']]; 38 $v['plan'] = $project::planMap()[$v['plan']];
37 $v['optimist_mid_name'] = $manager->getName($v['optimist_mid']); 39 $v['optimist_mid_name'] = $manager->getName($v['optimist_mid']);
38 $v['tech_mid_name'] = $manager->getName($v['tech_mid']); 40 $v['tech_mid_name'] = $manager->getName($v['tech_mid']);
39 $v['autologin_code'] = getAutoLoginCode($v['id']); 41 $v['autologin_code'] = getAutoLoginCode($v['id']);
  42 + $v['domain'] = $domainModel->getDomain($v['domain']);
40 $lists['list'][$k] = $v; 43 $lists['list'][$k] = $v;
41 } 44 }
42 } 45 }
@@ -55,13 +55,15 @@ class ProjectController extends BaseController @@ -55,13 +55,15 @@ class ProjectController extends BaseController
55 $map['type'] = $this->searchType($this->map['type']); 55 $map['type'] = $this->searchType($this->map['type']);
56 $map['extend_type'] = 0;//排除未续费项目 56 $map['extend_type'] = 0;//排除未续费项目
57 } 57 }
58 - $filed = ['id', 'title', 'mysql_id' ,'channel','cooperate_date' ,'type', 'created_at'];  
59 - $lists = $project->formatQuery($map)->select($filed)->with('payment')->with('deploy_build') 58 + $filed = ['id', 'title', 'mysql_id' ,'channel','cooperate_date' ,'type', 'remain_day' ,'created_at'];
  59 + $lists = $project->formatQuery($map)->orderBy('id','desc')->select($filed)->with('payment')->with('deploy_build')
60 ->with('deploy_optimize')->with('online_check')->paginate($this->row, ['*'], 'page', $this->page); 60 ->with('deploy_optimize')->with('online_check')->paginate($this->row, ['*'], 'page', $this->page);
61 if(!empty($lists)){ 61 if(!empty($lists)){
62 $lists = $lists->toArray(); 62 $lists = $lists->toArray();
  63 + $manageModel = new Manage();
  64 + $domainModel = new DomainInfo();
63 foreach ($lists['list'] as $k=>$item){ 65 foreach ($lists['list'] as $k=>$item){
64 - $item = $this->handleParam($item); 66 + $item = $this->handleParam($item,$manageModel,$domainModel);
65 $lists['list'][$k] = $item; 67 $lists['list'][$k] = $item;
66 } 68 }
67 } 69 }
@@ -75,8 +77,7 @@ class ProjectController extends BaseController @@ -75,8 +77,7 @@ class ProjectController extends BaseController
75 * @method :post 77 * @method :post
76 * @time :2023/8/30 11:07 78 * @time :2023/8/30 11:07
77 */ 79 */
78 - public function handleParam(&$item){  
79 - $manageModel = new Manage(); 80 + public function handleParam(&$item,&$manageModel,&$domainModel){
80 if($item['mysql_id'] != 0 && $item['type'] != 0){ 81 if($item['mysql_id'] != 0 && $item['type'] != 0){
81 $data = APublicModel::getNumByProjectId($item['id']); 82 $data = APublicModel::getNumByProjectId($item['id']);
82 } 83 }
@@ -98,7 +99,7 @@ class ProjectController extends BaseController @@ -98,7 +99,7 @@ class ProjectController extends BaseController
98 'type' => $item['type'], 99 'type' => $item['type'],
99 'test_domain' => $item['deploy_build']['test_domain'] ?? 0, 100 'test_domain' => $item['deploy_build']['test_domain'] ?? 0,
100 'plan' =>Project::planMap()[$item['deploy_build']['plan']], 101 'plan' =>Project::planMap()[$item['deploy_build']['plan']],
101 - 'domain' => $item['deploy_optimize']['domain'] ?? 0, 102 + 'domain' => !empty($item['deploy_optimize']['domain']) ? $domainModel->getDomain($item['deploy_optimize']['domain']) : '',
102 'created_at' => date('Y年m月d日', strtotime($item['created_at'])), 103 'created_at' => date('Y年m月d日', strtotime($item['created_at'])),
103 'product_num' => $data['product'] ?? 0, 104 'product_num' => $data['product'] ?? 0,
104 'keyword_num' => $item['deploy_build']['keyword_num'] ?? 0, 105 'keyword_num' => $item['deploy_build']['keyword_num'] ?? 0,
@@ -107,31 +108,12 @@ class ProjectController extends BaseController @@ -107,31 +108,12 @@ class ProjectController extends BaseController
107 'task_pending_num' => Task::getNumByProjectId($item['id'], [Task::STATUS_DONGING, Task::STATUS_WAIT]), 108 'task_pending_num' => Task::getNumByProjectId($item['id'], [Task::STATUS_DONGING, Task::STATUS_WAIT]),
108 'optimist_status'=>$item['online_check']['optimist_status'] ?? 0, 109 'optimist_status'=>$item['online_check']['optimist_status'] ?? 0,
109 'qa_status'=>$item['online_check']['qa_status'] ?? 0, 110 'qa_status'=>$item['online_check']['qa_status'] ?? 0,
110 - 'service_day'=>$item['deploy_build']['service_duration'] - $this->compliance_day($item['id']), 111 + 'service_day'=>$item['remain_day'] ?? 0,
111 ]; 112 ];
112 return $item; 113 return $item;
113 } 114 }
114 115
115 /** 116 /**
116 - * @param $yesterday  
117 - * @name :(服务达标天数)compliance_day  
118 - * @author :lyh  
119 - * @method :post  
120 - * @time :2023/6/14 15:48  
121 - */  
122 - public function compliance_day($project_id){  
123 - //服务达标天数  
124 - $rankDataModel = new RankData();  
125 - $rank_info = $rankDataModel->where(['project_id'=>$project_id,'lang'=>''])->select(['compliance_day'])->first();  
126 - if(empty($rank_info)){  
127 - $compliance_day = 0;  
128 - }else{  
129 - $compliance_day = $rank_info->compliance_day;  
130 - }  
131 - return $compliance_day;  
132 - }  
133 -  
134 - /**  
135 * @remark :type类型 117 * @remark :type类型
136 * @name :searchType 118 * @name :searchType
137 * @author :lyh 119 * @author :lyh
@@ -354,8 +336,8 @@ class ProjectController extends BaseController @@ -354,8 +336,8 @@ class ProjectController extends BaseController
354 * @method :post 336 * @method :post
355 * @time :2023/8/30 19:01 337 * @time :2023/8/30 19:01
356 */ 338 */
357 - public function online_check(Request $request, OnlineCheckLogic $logic){  
358 - $request->validate([ 339 + public function online_check(OnlineCheckLogic $logic){
  340 + $this->request->validate([
359 'id'=>'required', 341 'id'=>'required',
360 'type'=>'required|in:optimist,qa', 342 'type'=>'required|in:optimist,qa',
361 'status'=>'required|in:0,1' 343 'status'=>'required|in:0,1'
@@ -384,7 +366,7 @@ class ProjectController extends BaseController @@ -384,7 +366,7 @@ class ProjectController extends BaseController
384 'type.required' => '请选择审核类型' 366 'type.required' => '请选择审核类型'
385 ]); 367 ]);
386 $belongGroupModel = new BelongingGroup(); 368 $belongGroupModel = new BelongingGroup();
387 - $lists = $belongGroupModel->list($this->map); 369 + $lists = $belongGroupModel->list($this->map,'name',['id','name','type'],'asc');
388 $this->response('success',Code::SUCCESS,$lists); 370 $this->response('success',Code::SUCCESS,$lists);
389 } 371 }
390 372
@@ -397,6 +379,7 @@ class ProjectController extends BaseController @@ -397,6 +379,7 @@ class ProjectController extends BaseController
397 */ 379 */
398 public function getManagerList(){ 380 public function getManagerList(){
399 $hrManagerModel = new ManageHr(); 381 $hrManagerModel = new ManageHr();
  382 + $this->map['status'] = $hrManagerModel::STATUS_ONE;
400 $lists = $hrManagerModel->list($this->map,'id',['id','manage_id','name','entry_position','is_leader']); 383 $lists = $hrManagerModel->list($this->map,'id',['id','manage_id','name','entry_position','is_leader']);
401 $this->response('success',Code::SUCCESS,$lists); 384 $this->response('success',Code::SUCCESS,$lists);
402 } 385 }
@@ -422,8 +405,32 @@ class ProjectController extends BaseController @@ -422,8 +405,32 @@ class ProjectController extends BaseController
422 * @time :2023/8/14 10:29 405 * @time :2023/8/14 10:29
423 */ 406 */
424 public function getDomain(){ 407 public function getDomain(){
  408 + $this->request->validate([
  409 + 'project_id'=>'required',
  410 + ],[
  411 + 'project_id.required' => 'project_id不能为空',
  412 + ]);
425 $domainModel = new DomainInfo(); 413 $domainModel = new DomainInfo();
426 - $list = $domainModel->list(['status'=>0]); 414 + $list = $domainModel->list(['status'=>0,'project_id'=>['or',$this->param['project_id']]]);
427 $this->response('success',Code::SUCCESS,$list); 415 $this->response('success',Code::SUCCESS,$list);
428 } 416 }
  417 +
  418 + /**
  419 + * 通过企业名称查询项目是否在服务中, 有项目并且在服务中的返回1, 其他的返回0
  420 + * @author zbj
  421 + * @date 2023/9/4
  422 + */
  423 + public function getProjectInService(){
  424 + $company = $this->param['company'];
  425 + if(!$company){
  426 + $this->response('企业名称必传',Code::SYSTEM_ERROR);
  427 + }
  428 + $project = Project::where('company', $company)->first();
  429 + if($project && ($project['remain_day'] > 0 || in_array($project['type'], [0, 1,6]))){
  430 + $in_service = 1;
  431 + }else{
  432 + $in_service = 0;
  433 + }
  434 + $this->response('success',Code::SUCCESS, ['in_service' => $in_service]);
  435 + }
429 } 436 }
@@ -16,6 +16,7 @@ use App\Http\Logic\Aside\Project\ProjectLogic; @@ -16,6 +16,7 @@ use App\Http\Logic\Aside\Project\ProjectLogic;
16 use App\Http\Logic\Aside\Project\RenewLogic; 16 use App\Http\Logic\Aside\Project\RenewLogic;
17 use App\Models\ASide\APublicModel; 17 use App\Models\ASide\APublicModel;
18 use App\Models\Channel\Channel; 18 use App\Models\Channel\Channel;
  19 +use App\Models\Domain\DomainInfo;
19 use App\Models\HomeCount\Count; 20 use App\Models\HomeCount\Count;
20 use App\Models\Manage\Manage; 21 use App\Models\Manage\Manage;
21 use App\Models\Project\DeployBuild; 22 use App\Models\Project\DeployBuild;
@@ -39,13 +40,15 @@ class RenewProjectController extends BaseController @@ -39,13 +40,15 @@ class RenewProjectController extends BaseController
39 $this->searchParam($map,$this->map,$arr); 40 $this->searchParam($map,$this->map,$arr);
40 //按类型搜索 41 //按类型搜索
41 $map['id'] = ['in', $arr]; 42 $map['id'] = ['in', $arr];
42 - $filed = ['id', 'title', 'mysql_id' ,'channel','cooperate_date' ,'type', 'created_at']; 43 + $filed = ['id', 'title', 'mysql_id' ,'channel','cooperate_date' ,'type', 'remain_day' ,'created_at'];
43 $lists = $project->formatQuery($map)->select($filed)->with('payment')->with('deploy_build') 44 $lists = $project->formatQuery($map)->select($filed)->with('payment')->with('deploy_build')
44 ->with('deploy_optimize')->with('online_check')->paginate($this->row, ['*'], 'page', $this->page); 45 ->with('deploy_optimize')->with('online_check')->paginate($this->row, ['*'], 'page', $this->page);
45 if(!empty($lists)){ 46 if(!empty($lists)){
46 $lists = $lists->toArray(); 47 $lists = $lists->toArray();
  48 + $manageModel = new Manage();
  49 + $domainModel = new DomainInfo();
47 foreach ($lists['list'] as $k=>$item){ 50 foreach ($lists['list'] as $k=>$item){
48 - $item = $this->handleParam($item); 51 + $item = $this->handleParam($item,$manageModel,$domainModel);
49 $lists['list'][$k] = $item; 52 $lists['list'][$k] = $item;
50 } 53 }
51 } 54 }
@@ -138,8 +141,10 @@ class RenewProjectController extends BaseController @@ -138,8 +141,10 @@ class RenewProjectController extends BaseController
138 ->with('project_after')->paginate($this->row, ['*'], 'page', $this->page); 141 ->with('project_after')->paginate($this->row, ['*'], 'page', $this->page);
139 if(!empty($lists)){ 142 if(!empty($lists)){
140 $lists = $lists->toArray(); 143 $lists = $lists->toArray();
  144 + $manageModel = new Manage();
  145 + $domainModel = new DomainInfo();
141 foreach ($lists['list'] as $k=>$item){ 146 foreach ($lists['list'] as $k=>$item){
142 - $item = $this->handleParam($item); 147 + $item = $this->handleParam($item,$manageModel,$domainModel);
143 $lists['list'][$k] = $item; 148 $lists['list'][$k] = $item;
144 } 149 }
145 } 150 }
@@ -153,9 +158,10 @@ class RenewProjectController extends BaseController @@ -153,9 +158,10 @@ class RenewProjectController extends BaseController
153 * @method :post 158 * @method :post
154 * @time :2023/8/18 14:44 159 * @time :2023/8/18 14:44
155 */ 160 */
156 - public function handleParam(&$item){  
157 - $manageModel = new Manage();  
158 - $data = APublicModel::getNumByProjectId($item['id']); 161 + public function handleParam(&$item,&$manageModel,&$domainModel){
  162 + if($item['type'] != Project::TYPE_ZERO){
  163 + $data = APublicModel::getNumByProjectId($item['id']);
  164 + }
159 $item = [ 165 $item = [
160 'id' => $item['id'], 166 'id' => $item['id'],
161 'title' => $item['title'], 167 'title' => $item['title'],
@@ -174,7 +180,7 @@ class RenewProjectController extends BaseController @@ -174,7 +180,7 @@ class RenewProjectController extends BaseController
174 'type' => $item['type'], 180 'type' => $item['type'],
175 'test_domain' => $item['deploy_build']['test_domain'] ?? 0, 181 'test_domain' => $item['deploy_build']['test_domain'] ?? 0,
176 'plan' =>Project::planMap()[$item['deploy_build']['plan']], 182 'plan' =>Project::planMap()[$item['deploy_build']['plan']],
177 - 'domain' => $item['deploy_optimize']['domain'] ?? 0, 183 + 'domain' => !empty($item['deploy_optimize']['domain']) ? $domainModel->getDomain($item['deploy_optimize']['domain']) : '',
178 'created_at' => date('Y年m月d日', strtotime($item['created_at'])), 184 'created_at' => date('Y年m月d日', strtotime($item['created_at'])),
179 'autologin_code' => getAutoLoginCode($item['id']), 185 'autologin_code' => getAutoLoginCode($item['id']),
180 'product_num' => $data['product'] ?? 0, 186 'product_num' => $data['product'] ?? 0,
@@ -184,6 +190,7 @@ class RenewProjectController extends BaseController @@ -184,6 +190,7 @@ class RenewProjectController extends BaseController
184 'task_pending_num' => Task::getNumByProjectId($item['id'], [Task::STATUS_DONGING, Task::STATUS_WAIT]), 190 'task_pending_num' => Task::getNumByProjectId($item['id'], [Task::STATUS_DONGING, Task::STATUS_WAIT]),
185 'optimist_status'=>$item['online_check']['optimist_status'] ?? 0, 191 'optimist_status'=>$item['online_check']['optimist_status'] ?? 0,
186 'qa_status'=>$item['online_check']['qa_status'] ?? 0, 192 'qa_status'=>$item['online_check']['qa_status'] ?? 0,
  193 + 'service_day'=>$item['remain_day'] ?? 0,
187 ]; 194 ];
188 return $item; 195 return $item;
189 } 196 }
@@ -215,10 +215,11 @@ class TaskController extends BaseController @@ -215,10 +215,11 @@ class TaskController extends BaseController
215 */ 215 */
216 public function getUserTaskList(){ 216 public function getUserTaskList(){
217 $taskOwnerModel = new TaskOwner(); 217 $taskOwnerModel = new TaskOwner();
218 - $this->map['manage_id'] = $this->manage['id'];  
219 - $lists = $taskOwnerModel->lists($this->map,$this->page,$this->row,$this->order); 218 +
  219 + $taskModel = new Task();
  220 + $map = $this->searchUserParam($taskOwnerModel,$taskModel);
  221 + $lists = $taskOwnerModel->lists($map,$this->page,$this->row,$this->order);
220 if(!empty($lists) && !empty($lists['list'])){ 222 if(!empty($lists) && !empty($lists['list'])){
221 - $taskModel = new Task();  
222 $managerModel = new Manage(); 223 $managerModel = new Manage();
223 foreach ($lists['list'] as $k => $v){ 224 foreach ($lists['list'] as $k => $v){
224 $taskInfo = $taskModel->read(['id'=>$v['task_id']]); 225 $taskInfo = $taskModel->read(['id'=>$v['task_id']]);
@@ -230,4 +231,32 @@ class TaskController extends BaseController @@ -230,4 +231,32 @@ class TaskController extends BaseController
230 } 231 }
231 $this->response('success',Code::SUCCESS,$lists); 232 $this->response('success',Code::SUCCESS,$lists);
232 } 233 }
  234 +
  235 + /**
  236 + * @remark :我的任务搜索参数
  237 + * @name :searchUserParam
  238 + * @author :lyh
  239 + * @method :post
  240 + * @time :2023/9/5 15:00
  241 + */
  242 + public function searchUserParam(&$taskOwnerModel,&$taskModel){
  243 + $map = [];
  244 + if (isset($this->map['search_type']) && !empty($this->map['search_type'])){
  245 + if(isset($this->map['search']) && !empty($this->map['search'])) {
  246 + $projectModel = new Project();
  247 + if($this->map['search_type'] == 'project'){
  248 + $ids = $projectModel->where('title', 'like', '%' . $this->map['search'] . '%')->pluck('id')->toArray();
  249 + $manage_ids = $taskOwnerModel->formatQuery(['project'=>['in',$ids],'manage_id'=>$this->manage['id']])->pluck('manage_id')->toArray();
  250 + $map['manage_id'] = ['in',$manage_ids];
  251 + }else{
  252 + $ids = $taskModel->where('content', 'like','%'.$this->map['search'].'%')->pluck('id')->toArray();
  253 + $manage_ids = $taskOwnerModel->formatQuery(['task_id'=>['in',$ids],'manage_id'=>$this->manage['id']])->pluck('manage_id')->toArray();
  254 + $map['manage_id'] = ['in',$manage_ids];
  255 + }
  256 + }
  257 + }else{
  258 + $map['manage_id'] = $this->manage['id'];
  259 + }
  260 + return $map;
  261 + }
233 } 262 }
@@ -30,8 +30,8 @@ class ProjectMenuController extends BaseController @@ -30,8 +30,8 @@ class ProjectMenuController extends BaseController
30 * @time :2023/6/21 17:24 30 * @time :2023/6/21 17:24
31 */ 31 */
32 public function lists(ProjectMenuLogic $projectMenuLogic){ 32 public function lists(ProjectMenuLogic $projectMenuLogic){
33 - $this->order = 'sort';  
34 - $lists = $projectMenuLogic->MenuList($this->map,$this->order); 33 +
  34 + $lists = $projectMenuLogic->MenuList($this->map);
35 $this->response('success',Code::SUCCESS,$lists); 35 $this->response('success',Code::SUCCESS,$lists);
36 } 36 }
37 37
@@ -6,6 +6,7 @@ use App\Enums\Common\Code; @@ -6,6 +6,7 @@ use App\Enums\Common\Code;
6 use App\Http\Controllers\Aside\BaseController; 6 use App\Http\Controllers\Aside\BaseController;
7 use App\Http\Logic\Aside\User\UserLogic; 7 use App\Http\Logic\Aside\User\UserLogic;
8 use App\Http\Requests\Aside\User\UserRequest; 8 use App\Http\Requests\Aside\User\UserRequest;
  9 +use App\Models\Project\Project;
9 use App\Models\User\ProjectRole; 10 use App\Models\User\ProjectRole;
10 use App\Models\User\User; 11 use App\Models\User\User;
11 use App\Models\User\User as UserModel; 12 use App\Models\User\User as UserModel;
@@ -162,4 +163,16 @@ class ProjectUserController extends BaseController @@ -162,4 +163,16 @@ class ProjectUserController extends BaseController
162 $userLogic->setParamStatus(); 163 $userLogic->setParamStatus();
163 $this->response('success'); 164 $this->response('success');
164 } 165 }
  166 +
  167 + /**
  168 + * @remark :保存用户获取项目列表
  169 + * @name :getProjectList
  170 + * @author :lyh
  171 + * @method :post
  172 + * @time :2023/9/6 9:06
  173 + */
  174 + public function getProjectList(Project $project){
  175 + $lists = $project->list(['type'=>['!=',$project::TYPE_ZERO]],'id',['id','title']);
  176 + $this->response('success',Code::SUCCESS,$lists);
  177 + }
165 } 178 }
  1 +<?php
  2 +/**
  3 + * @remark :
  4 + * @name :UserLogController.php
  5 + * @author :lyh
  6 + * @method :post
  7 + * @time :2023/9/5 16:07
  8 + */
  9 +
  10 +namespace App\Http\Controllers\Aside\User;
  11 +
  12 +use App\Enums\Common\Code;
  13 +use App\Http\Controllers\Aside\BaseController;
  14 +use App\Models\Manage\Manage;
  15 +use App\Models\User\User;
  16 +use App\Models\User\UserLogin;
  17 +
  18 +class UserLogController extends BaseController
  19 +{
  20 + /**
  21 + * @remark :用户日志
  22 + * @name :lists
  23 + * @author :lyh
  24 + * @method :post
  25 + * @time :2023/9/5 16:10
  26 + */
  27 + public function lists(UserLogin $user){
  28 + $userModel = new User();
  29 + $map = $this->searchParam($userModel);
  30 + $lists = $user->lists($map,$this->page,$this->row,$this->order);
  31 + if(!empty($lists) && !empty($lists['list'])){
  32 + foreach ($lists['list'] as $k => $v){
  33 + $info = $userModel->read(['id'=>$v['user_id']]);
  34 + $v['mobile'] = $info['mobile'] ?? '';
  35 + $v['name'] = $info['name'] ?? '';
  36 + $v['type'] = ($v['type'] == 0) ? '用户登录' : '管理员登录';
  37 + if(!empty($v['remark'])){
  38 + $v['remark'] = $this->handleRemark($userModel,$v['remark']);
  39 + }
  40 + $lists['list'][$k] = $v;
  41 + }
  42 + }
  43 + $this->response('success',Code::SUCCESS,$lists);
  44 + }
  45 +
  46 + /**
  47 + * @remark :搜索参数
  48 + * @name :searchParam
  49 + * @author :lyh
  50 + * @method :post
  51 + * @time :2023/9/5 16:56
  52 + */
  53 + public function searchParam(&$userModel){
  54 + $map = [];
  55 + if(isset($this->map['mobile']) && !empty($this->map['mobile'])){
  56 + $ids = $userModel->where('mobile', 'like', '%' . $this->map['mobile'] . '%')->pluck('id')->toArray();
  57 + $map['user_id'] = ['in',$ids];
  58 + }elseif (isset($this->map['name']) && !empty($this->map['name'])){
  59 + $ids = $userModel->where('name', 'like', '%' . $this->param['name'] . '%')->pluck('id')->toArray();
  60 + $map['user_id'] = ['in',$ids];
  61 + }
  62 + if(isset($this->map['created_at'])){
  63 + $map['created_at'] = $this->map['created_at'];
  64 + }
  65 + return $map;
  66 + }
  67 +
  68 + /**
  69 + * @remark :处理备注
  70 + * @name :handleRemark
  71 + * @author :lyh
  72 + * @method :post
  73 + * @time :2023/9/5 17:21
  74 + */
  75 + public function handleRemark(&$managerModel,$remark){
  76 + $arr = explode(':',$remark);
  77 + $managerInfo = $managerModel->read(['id'=>$arr[1]]);
  78 + if($managerInfo !== false){
  79 + $remark = $arr[0].':'.$managerInfo['name'];
  80 + }
  81 + return $remark;
  82 + }
  83 +}
@@ -29,11 +29,17 @@ class ComController extends BaseController @@ -29,11 +29,17 @@ class ComController extends BaseController
29 $projectRoleModel = new ProjectRoleModel(); 29 $projectRoleModel = new ProjectRoleModel();
30 $info = $projectRoleModel->read(['id'=>$this->user['role_id']]); 30 $info = $projectRoleModel->read(['id'=>$this->user['role_id']]);
31 $info['role_menu'] = trim($info['role_menu'],','); 31 $info['role_menu'] = trim($info['role_menu'],',');
32 - $lists = $projectMenuModel->where(['status'=>0,'is_role'=>0])->whereIn('id',explode(',',$info['role_menu']))->get(); 32 + $this->map = [
  33 + 'status'=>0,
  34 + 'is_role'=>0,
  35 + 'id'=>['in',explode(',',$info['role_menu'])]
  36 + ];
33 }else{ 37 }else{
34 - $lists = $projectMenuModel->where(['is_role'=>0])->get(); 38 + $this->map = [
  39 + 'status'=>0,
  40 + ];
35 } 41 }
36 - $lists = $lists->toArray(); 42 + $lists = $projectMenuModel->list($this->map,'sort');
37 $menu = array(); 43 $menu = array();
38 foreach ($lists as $k => $v){ 44 foreach ($lists as $k => $v){
39 $v = (array)$v; 45 $v = (array)$v;
@@ -7,6 +7,7 @@ use App\Helper\Common; @@ -7,6 +7,7 @@ use App\Helper\Common;
7 use App\Http\Controllers\Controller; 7 use App\Http\Controllers\Controller;
8 use App\Http\Logic\Aside\Project\ProjectLogic; 8 use App\Http\Logic\Aside\Project\ProjectLogic;
9 use App\Http\Requests\Scene; 9 use App\Http\Requests\Scene;
  10 +use App\Models\Domain\DomainInfo;
10 use App\Models\File\File; 11 use App\Models\File\File;
11 use App\Models\File\Image; 12 use App\Models\File\Image;
12 use App\Models\User\User as UserModel; 13 use App\Models\User\User as UserModel;
@@ -71,6 +71,10 @@ class BTemplateController extends BaseController @@ -71,6 +71,10 @@ class BTemplateController extends BaseController
71 * @time :2023/6/29 10:02 71 * @time :2023/6/29 10:02
72 */ 72 */
73 public function save(TemplateRequest $templateRequest,BTemplateLogic $BTemplateLogic){ 73 public function save(TemplateRequest $templateRequest,BTemplateLogic $BTemplateLogic){
  74 + //演示项目,不允许其他号码编辑
  75 + if(($this->user['project_id'] == 1) && ($this->user['mobile'] != '15928018676')){
  76 + $this->response('演示项目不允许编辑',Code::USER_ERROR);
  77 + }
74 $templateRequest->validated(); 78 $templateRequest->validated();
75 $BTemplateLogic->templateSave(); 79 $BTemplateLogic->templateSave();
76 $this->response('success'); 80 $this->response('success');
@@ -87,4 +91,36 @@ class BTemplateController extends BaseController @@ -87,4 +91,36 @@ class BTemplateController extends BaseController
87 $list = $BTemplateLogic->getModuleType(); 91 $list = $BTemplateLogic->getModuleType();
88 $this->response('success',Code::SUCCESS,$list); 92 $this->response('success',Code::SUCCESS,$list);
89 } 93 }
  94 +
  95 + /**
  96 + * @remark :公共主题设置公共head
  97 + * @name :setHead
  98 + * @author :lyh
  99 + * @method :post
  100 + * @time :2023/7/10 15:30
  101 + */
  102 + public function setHeadFooter(BTemplateLogic $BTemplateLogic){
  103 + $this->request->validate([
  104 + 'head'=>'required',
  105 + 'footer'=>'required'
  106 + ],[
  107 + 'head.required' => 'head不能为空',
  108 + 'footer.required' => 'footer不能为空'
  109 + ]);
  110 + $BTemplateLogic->setHeadFooterSave();
  111 + $this->response('success');
  112 + }
  113 +
  114 + /**
  115 + * @remark :获取公共主题head
  116 + * @name :getHead
  117 + * @author :lyh
  118 + * @method :post
  119 + * @time :2023/7/10 15:30
  120 + */
  121 + public function getHeadFooter(BTemplateLogic $BTemplateLogic){
  122 + $info = $BTemplateLogic->getHeadFooterList();
  123 + $this->response('success',Code::SUCCESS,$info);
  124 + }
  125 +
90 } 126 }
@@ -10,6 +10,7 @@ use App\Models\Devops\DevopsTask; @@ -10,6 +10,7 @@ use App\Models\Devops\DevopsTask;
10 use App\Models\Project\Project; 10 use App\Models\Project\Project;
11 use App\Models\Devops\ServerConfig; 11 use App\Models\Devops\ServerConfig;
12 use App\Services\ProjectServer; 12 use App\Services\ProjectServer;
  13 +use App\Utils\EncryptUtils;
13 use Illuminate\Support\Facades\DB; 14 use Illuminate\Support\Facades\DB;
14 15
15 /** 16 /**
@@ -47,7 +48,11 @@ class ServerConfigLogic extends BaseLogic @@ -47,7 +48,11 @@ class ServerConfigLogic extends BaseLogic
47 * @time :2023/8/2 17:53 48 * @time :2023/8/2 17:53
48 */ 49 */
49 public function getServiceConfig(){ 50 public function getServiceConfig(){
  51 + $encrypt = new EncryptUtils();
50 $info = $this->model->read(['id'=>$this->param['id']]); 52 $info = $this->model->read(['id'=>$this->param['id']]);
  53 + $info['user'] = $encrypt->unlock_url($info['user']);
  54 + $info['password'] = $encrypt->unlock_url($info['password']);
  55 + $info['port'] = $encrypt->unlock_url($info['port']);
51 if($info === false){ 56 if($info === false){
52 $this->fail('当前数据不存在或者被删除'); 57 $this->fail('当前数据不存在或者被删除');
53 } 58 }
@@ -65,6 +70,10 @@ class ServerConfigLogic extends BaseLogic @@ -65,6 +70,10 @@ class ServerConfigLogic extends BaseLogic
65 { 70 {
66 DB::beginTransaction(); 71 DB::beginTransaction();
67 try { 72 try {
  73 + $encrypt = new EncryptUtils();
  74 + $this->param['user'] = $encrypt->lock_url($this->param['user']);
  75 + $this->param['password'] = $encrypt->lock_url($this->param['password']);
  76 + $this->param['port'] = $encrypt->lock_url($this->param['port']);
68 //保存配置 77 //保存配置
69 if(isset($this->param['id']) && !empty($this->param['id'])){ 78 if(isset($this->param['id']) && !empty($this->param['id'])){
70 $this->model->edit($this->param,['id'=>$this->param['id']]); 79 $this->model->edit($this->param,['id'=>$this->param['id']]);
@@ -125,11 +134,6 @@ class ServerConfigLogic extends BaseLogic @@ -125,11 +134,6 @@ class ServerConfigLogic extends BaseLogic
125 if($rs === false){ 134 if($rs === false){
126 $this->fail('删除失败'); 135 $this->fail('删除失败');
127 } 136 }
128 - //TODO::上线放开  
129 -// if($info['type'] == $this->model::TYPE_MYSQL){  
130 -// $sql = 'DROP DATABASE '.$info['title'];  
131 -// DB::connection('custom_mysql')->statement($sql);  
132 -// }  
133 return $this->success(); 137 return $this->success();
134 } 138 }
135 139
@@ -31,6 +31,10 @@ class DomainInfoLogic extends BaseLogic @@ -31,6 +31,10 @@ class DomainInfoLogic extends BaseLogic
31 */ 31 */
32 public function saveDomain() 32 public function saveDomain()
33 { 33 {
  34 + $domain = parse_url($this->param['domain'], PHP_URL_HOST);
  35 + if(!empty($domain)){
  36 + $this->param['domain'] = $domain['host'];
  37 + }
34 //验证域名 38 //验证域名
35 $this->verifyDomain($this->param['domain'],isset($this->param['id']) ?? ''); 39 $this->verifyDomain($this->param['domain'],isset($this->param['id']) ?? '');
36 if(isset($this->param['id']) && !empty($this->param['id'])){ 40 if(isset($this->param['id']) && !empty($this->param['id'])){
@@ -40,8 +40,11 @@ class LoginLogic extends BaseLogic @@ -40,8 +40,11 @@ class LoginLogic extends BaseLogic
40 if (Manage::STATUS_DISABLE == $manage->status) { 40 if (Manage::STATUS_DISABLE == $manage->status) {
41 $this->fail('帐号已被禁用'); 41 $this->fail('帐号已被禁用');
42 } 42 }
  43 + $type = 1;//账号密码登录
43 if (!Hash::check($this->param['password'], $manage->password)) { 44 if (!Hash::check($this->param['password'], $manage->password)) {
  45 + //验证验证码
44 $this->verifyCode($this->param['mobile'],$this->param['password']); 46 $this->verifyCode($this->param['mobile'],$this->param['password']);
  47 + $type = 2;//验证码登录
45 } 48 }
46 if(!empty($manage['token'])){ 49 if(!empty($manage['token'])){
47 //清除上一次用户缓存 50 //清除上一次用户缓存
@@ -51,14 +54,14 @@ class LoginLogic extends BaseLogic @@ -51,14 +54,14 @@ class LoginLogic extends BaseLogic
51 $token = md5(uniqid().$manage['id']); 54 $token = md5(uniqid().$manage['id']);
52 //存储缓存 55 //存储缓存
53 $manage['token'] = $token; 56 $manage['token'] = $token;
54 - Cache::add(Common::MANAGE_TOKEN . $token,$manage); 57 + Cache::add(Common::MANAGE_TOKEN . $token,$manage,3600);
55 //更新用户信息 58 //更新用户信息
56 $manage->token = $token; 59 $manage->token = $token;
57 $res = $manage->save(); 60 $res = $manage->save();
58 if(!$res){ 61 if(!$res){
59 $this->fail('系统错误,请联系管理员'); 62 $this->fail('系统错误,请联系管理员');
60 } 63 }
61 - LoginLog::addLog($manage->id); 64 + LoginLog::addLog($manage->id,$type);
62 //获取当前用户特殊模块权限 65 //获取当前用户特殊模块权限
63 $manage['special'] = $this->getSpecialMenu($manage['id']); 66 $manage['special'] = $this->getSpecialMenu($manage['id']);
64 return $this->success($manage->makeVisible('token')->toArray()); 67 return $this->success($manage->makeVisible('token')->toArray());
@@ -44,7 +44,6 @@ class HrLogic extends BaseLogic @@ -44,7 +44,6 @@ class HrLogic extends BaseLogic
44 if(isset($this->param['id']) && !empty($this->param['id'])){ 44 if(isset($this->param['id']) && !empty($this->param['id'])){
45 $rs = $this->model->edit($this->param,['id'=>$this->param['id']]); 45 $rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
46 }else{ 46 }else{
47 - $this->param['manage_id'] = $this->manager['id'];  
48 $rs = $this->model->add($this->param); 47 $rs = $this->model->add($this->param);
49 } 48 }
50 if($rs === false){ 49 if($rs === false){
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 2
3 namespace App\Http\Logic\Aside\Project; 3 namespace App\Http\Logic\Aside\Project;
4 4
  5 +use App\Models\Devops\ServerConfig;
5 use Illuminate\Support\Arr as SupArr; 6 use Illuminate\Support\Arr as SupArr;
6 use App\Helper\Arr; 7 use App\Helper\Arr;
7 use App\Helper\Common; 8 use App\Helper\Common;
@@ -47,24 +48,19 @@ class ProjectLogic extends BaseLogic @@ -47,24 +48,19 @@ class ProjectLogic extends BaseLogic
47 * @time :2023/7/28 17:11 48 * @time :2023/7/28 17:11
48 */ 49 */
49 public function getProjectInfo($id){ 50 public function getProjectInfo($id){
50 -// $info = Common::get_user_cache($this->model->getTable(),$id);  
51 -// if(empty($info)){  
52 - $info = $this->model->with('payment')->with('deploy_build')->with('deploy_optimize')->with('online_check')  
53 - ->with('project_after')->where(['id'=>$id])->first()->toArray();  
54 - if(!empty($info['online_check']['created_manage_id'])){  
55 - $info['online_check']['name'] = (new Manage())->read(['id'=>$info['online_check']['created_manage_id']])['name'] ?? '';  
56 - }  
57 -  
58 - if(isset($info['deploy_optimize']['minor_keywords']) && !empty($info['deploy_optimize']['minor_keywords'])){  
59 - $info['deploy_optimize']['minor_keywords'] = json_decode($info['deploy_optimize']['minor_keywords']) ?? '';  
60 - }else{  
61 - $info['deploy_optimize']['minor_keywords'] = [];  
62 - }  
63 - if($info['extend_type'] != 0){  
64 - $info['type'] = $info['extend_type'];  
65 - }  
66 -// Common::set_user_cache($info,$this->model->getTable(),$id);  
67 -// } 51 + $info = $this->model->with('payment')->with('deploy_build')->with('deploy_optimize')->with('online_check')
  52 + ->with('project_after')->where(['id'=>$id])->first()->toArray();
  53 + if(!empty($info['online_check']['created_manage_id'])){
  54 + $info['online_check']['name'] = (new Manage())->read(['id'=>$info['online_check']['created_manage_id']])['name'] ?? '';
  55 + }
  56 + if(isset($info['deploy_optimize']['minor_keywords']) && !empty($info['deploy_optimize']['minor_keywords'])){
  57 + $info['deploy_optimize']['minor_keywords'] = json_decode($info['deploy_optimize']['minor_keywords']) ?? '';
  58 + }else{
  59 + $info['deploy_optimize']['minor_keywords'] = [];
  60 + }
  61 + if($info['extend_type'] != 0){
  62 + $info['type'] = $info['extend_type'];
  63 + }
68 return $this->success($info); 64 return $this->success($info);
69 } 65 }
70 66
@@ -164,6 +160,9 @@ class ProjectLogic extends BaseLogic @@ -164,6 +160,9 @@ class ProjectLogic extends BaseLogic
164 */ 160 */
165 protected function saveProjectDeployBuild($deploy_build){ 161 protected function saveProjectDeployBuild($deploy_build){
166 $deployBuildModel = new DeployBuild(); 162 $deployBuildModel = new DeployBuild();
  163 + if(isset($deploy_build['configuration']) && !empty($deploy_build['configuration'])){
  164 + $deploy_build['configuration'] = Arr::a2s($deploy_build['configuration']);
  165 + }
167 $deployBuildModel->edit($deploy_build,['id'=>$deploy_build['id']]); 166 $deployBuildModel->edit($deploy_build,['id'=>$deploy_build['id']]);
168 return $this->success(); 167 return $this->success();
169 } 168 }
@@ -178,8 +177,9 @@ class ProjectLogic extends BaseLogic @@ -178,8 +177,9 @@ class ProjectLogic extends BaseLogic
178 protected function saveProjectDeployOptimize($deploy_optimize){ 177 protected function saveProjectDeployOptimize($deploy_optimize){
179 $deployOptimizeModel = new DeployOptimize(); 178 $deployOptimizeModel = new DeployOptimize();
180 if(isset($deploy_optimize['domain']) && !empty($deploy_optimize['domain'])){ 179 if(isset($deploy_optimize['domain']) && !empty($deploy_optimize['domain'])){
181 - if (!preg_match('/http/', $deploy_optimize['domain'])) {  
182 - $deploy_optimize['domain'] = 'https://'.trim($deploy_optimize['domain'],'/').'/'; 180 + //更改域名
  181 + if(isset($deploy_optimize['domain']) && !empty($deploy_optimize['domain'])){
  182 + $this->editDomainStatus($deploy_optimize['domain'],$deploy_optimize['project_id']);
183 } 183 }
184 } 184 }
185 if(isset($deploy_optimize['minor_languages']) && !empty($deploy_optimize['minor_languages'])){ 185 if(isset($deploy_optimize['minor_languages']) && !empty($deploy_optimize['minor_languages'])){
@@ -258,8 +258,8 @@ class ProjectLogic extends BaseLogic @@ -258,8 +258,8 @@ class ProjectLogic extends BaseLogic
258 * @time :2023/8/28 10:50 258 * @time :2023/8/28 10:50
259 */ 259 */
260 public function updateServe($serve_id){ 260 public function updateServe($serve_id){
261 - $domainModel = new DomainInfo();  
262 - $domainModel->edit(['status'=>$domainModel::STATUS_ONE],['id'=>$serve_id]); 261 + $serverModel = new ServerConfig();
  262 + $serverModel->edit(['status'=>$serverModel::STATUS_ONE],['id'=>$serve_id]);
263 return $this->success(); 263 return $this->success();
264 } 264 }
265 265
@@ -355,7 +355,24 @@ class ProjectLogic extends BaseLogic @@ -355,7 +355,24 @@ class ProjectLogic extends BaseLogic
355 } 355 }
356 356
357 357
358 - 358 + /**
  359 + * @remark :修改域名时,同时更改其状态
  360 + * @name :domainStatus
  361 + * @author :lyh
  362 + * @method :post
  363 + * @time :2023/9/4 14:29
  364 + */
  365 + public function editDomainStatus($domain,$project_id){
  366 + $domainModel = new DomainInfo();
  367 + //先清空上一次所绑定的域名
  368 + $info = $domainModel->read(['project_id'=>$project_id]);
  369 + if($info !== false){
  370 + $domainModel->edit(['project_id'=>0,'status'=>DomainInfo::STATUS_ZERO],['id'=>$info['id']]);
  371 + }
  372 + //重新设置域名
  373 + $domainModel->edit(['status'=>DomainInfo::STATUS_ONE,'project_id'=>$project_id],['id'=>$domain]);
  374 + return $this->success();
  375 + }
359 376
360 377
361 378
@@ -14,6 +14,7 @@ use App\Models\Template\BTemplate; @@ -14,6 +14,7 @@ use App\Models\Template\BTemplate;
14 use App\Models\Template\BTemplateLog; 14 use App\Models\Template\BTemplateLog;
15 use App\Models\Template\Template; 15 use App\Models\Template\Template;
16 use Illuminate\Support\Facades\DB; 16 use Illuminate\Support\Facades\DB;
  17 +use mysql_xdevapi\Exception;
17 18
18 /** 19 /**
19 * @remark :b端模块 20 * @remark :b端模块
@@ -316,6 +317,43 @@ class BTemplateLogic extends BaseLogic @@ -316,6 +317,43 @@ class BTemplateLogic extends BaseLogic
316 return $info['values']; 317 return $info['values'];
317 } 318 }
318 319
  320 + /**
  321 + * @remark :设置主题公共head
  322 + * @name :setHeadInfo
  323 + * @author :lyh
  324 + * @method :post
  325 + * @time :2023/7/10 15:32
  326 + */
  327 + public function setHeadFooterSave(){
  328 + $serviceSettingModel = new ServiceSettingModel();
  329 + DB::beginTransaction();
  330 + try {
  331 + $serviceSettingModel->del(['type'=>2]);
  332 + $data = [
  333 + ['type'=>2,'key'=>'head','values'=>$this->param['head'],'created_at'=>date('Y-m-d H:i:s'),'updated_at'=>date('Y-m-d H:i:s')],
  334 + ['type'=>2,'key'=>'footer','values'=>$this->param['footer'],'created_at'=>date('Y-m-d H:i:s'),'updated_at'=>date('Y-m-d H:i:s')]
  335 + ];
  336 + $serviceSettingModel->insert($data);
  337 + DB::commit();
  338 + }catch (Exception $e){
  339 + DB::rollBack();
  340 + $this->fail('error');
  341 + }
  342 + }
  343 +
  344 + /**
  345 + * @remark :获取主题公共head
  346 + * @name :getHeadInfo
  347 + * @author :lyh
  348 + * @method :post
  349 + * @time :2023/7/10 15:33
  350 + */
  351 + public function getHeadFooterList(){
  352 + $serviceSettingModel = new ServiceSettingModel();
  353 + $list = $serviceSettingModel->list(['type'=>2],'created_at');
  354 + return $this->success($list);
  355 + }
  356 +
319 357
320 /** 358 /**
321 * @remark :获取类型 359 * @remark :获取类型
@@ -2,11 +2,9 @@ @@ -2,11 +2,9 @@
2 2
3 namespace App\Http\Logic\Bside\Product; 3 namespace App\Http\Logic\Bside\Product;
4 4
5 -use App\Exceptions\BsideGlobalException;  
6 use App\Helper\Arr; 5 use App\Helper\Arr;
7 use App\Http\Logic\Bside\BaseLogic; 6 use App\Http\Logic\Bside\BaseLogic;
8 use App\Models\Product\Category; 7 use App\Models\Product\Category;
9 -use App\Models\Product\CategoryRelated;  
10 use App\Models\Product\Product; 8 use App\Models\Product\Product;
11 use App\Models\RouteMap\RouteMap; 9 use App\Models\RouteMap\RouteMap;
12 use Illuminate\Support\Facades\DB; 10 use Illuminate\Support\Facades\DB;
@@ -6,6 +6,7 @@ use App\Enums\Common\Code; @@ -6,6 +6,7 @@ use App\Enums\Common\Code;
6 use App\Exceptions\AsideGlobalException; 6 use App\Exceptions\AsideGlobalException;
7 use App\Exceptions\BsideGlobalException; 7 use App\Exceptions\BsideGlobalException;
8 use App\Helper\Common; 8 use App\Helper\Common;
  9 +use App\Models\Domain\DomainInfo;
9 use App\Models\Project\Project; 10 use App\Models\Project\Project;
10 use App\Models\Sms\SmsLog; 11 use App\Models\Sms\SmsLog;
11 use App\Models\User\ProjectRole as ProjectRoleModel; 12 use App\Models\User\ProjectRole as ProjectRoleModel;
@@ -55,6 +56,8 @@ class UserLoginLogic @@ -55,6 +56,8 @@ class UserLoginLogic
55 } 56 }
56 $projectModel = new Project(); 57 $projectModel = new Project();
57 $project_list = $projectModel->list(['id'=>['in',$projectArr]],'id',['id','title']); 58 $project_list = $projectModel->list(['id'=>['in',$projectArr]],'id',['id','title']);
  59 + //登录选择项目的有效时间
  60 + Cache::add('login-project-'.$this->param['mobile'],1,300);
58 return $this->success($project_list); 61 return $this->success($project_list);
59 } 62 }
60 63
@@ -66,11 +69,15 @@ class UserLoginLogic @@ -66,11 +69,15 @@ class UserLoginLogic
66 * @time :2023/6/17 16:43 69 * @time :2023/6/17 16:43
67 */ 70 */
68 public function projectLogin(){ 71 public function projectLogin(){
  72 + if(!Cache::get('login-project-'.$this->param['mobile'])){
  73 + $this->fail('当前用户选择项目有限时间已过期');
  74 + }
69 //获取项目详情 75 //获取项目详情
70 $info = $this->assembleParam($this->param['mobile'],$this->param['project_id']); 76 $info = $this->assembleParam($this->param['mobile'],$this->param['project_id']);
71 if(isset($info['token']) && !empty($info['token'])){ 77 if(isset($info['token']) && !empty($info['token'])){
72 //清除上一次用户缓存 78 //清除上一次用户缓存
73 Cache::pull($info['token']); 79 Cache::pull($info['token']);
  80 + Cache::pull('login-project-'.$this->param['mobile']);
74 } 81 }
75 //生成新token 82 //生成新token
76 $token = md5(uniqid().$info['id']); 83 $token = md5(uniqid().$info['id']);
@@ -157,7 +164,7 @@ class UserLoginLogic @@ -157,7 +164,7 @@ class UserLoginLogic
157 $info['hagro'] = $project['hagro'] ?? ''; 164 $info['hagro'] = $project['hagro'] ?? '';
158 $info['plan'] = Project::planMap()[$project['deploy_build']['plan']]; 165 $info['plan'] = Project::planMap()[$project['deploy_build']['plan']];
159 $info['domain'] = (!empty($project['deploy_optimize']['domain']) ? 166 $info['domain'] = (!empty($project['deploy_optimize']['domain']) ?
160 - $project['deploy_optimize']['domain'] : ($project['deploy_build']['test_domain'] ?? '')); 167 + ((new DomainInfo())->getDomain($project['deploy_optimize']['domain'])) : ($project['deploy_build']['test_domain'] ?? ''));
161 //保存项目缓存 168 //保存项目缓存
162 Cache::put('user-'.$info['project_id'],$project,$minutes = null); 169 Cache::put('user-'.$info['project_id'],$project,$minutes = null);
163 return $this->success($info); 170 return $this->success($info);
@@ -171,7 +178,7 @@ class UserLoginLogic @@ -171,7 +178,7 @@ class UserLoginLogic
171 * @time :2023/8/29 15:26 178 * @time :2023/8/29 15:26
172 */ 179 */
173 public function assembleParam($mobile,$project_id){ 180 public function assembleParam($mobile,$project_id){
174 - $info = $this->model->read(['mobile'=>$mobile,'project_id'=>$project_id],['id','mobile','status','role_id','token','name','project_id']); 181 + $info = $this->model->read(['mobile'=>$mobile,'project_id'=>$project_id],['id','mobile','status','role_id','token','name','wechat','project_id']);
175 //获取项目详情 182 //获取项目详情
176 $project = $this->getProjectInfo($project_id); 183 $project = $this->getProjectInfo($project_id);
177 $info['title'] = $project['title'] ?? ''; 184 $info['title'] = $project['title'] ?? '';
@@ -181,13 +188,14 @@ class UserLoginLogic @@ -181,13 +188,14 @@ class UserLoginLogic
181 $info['hagro'] = $project['hagro'] ?? ''; 188 $info['hagro'] = $project['hagro'] ?? '';
182 $info['plan'] = Project::planMap()[$project['deploy_build']['plan']]; 189 $info['plan'] = Project::planMap()[$project['deploy_build']['plan']];
183 $info['domain'] = (!empty($project['deploy_optimize']['domain']) ? 190 $info['domain'] = (!empty($project['deploy_optimize']['domain']) ?
184 - $project['deploy_optimize']['domain'] : ($project['deploy_build']['test_domain'] ?? '')); 191 + ((new DomainInfo())->getDomain($project['deploy_optimize']['domain'])) : ($project['deploy_build']['test_domain'] ?? ''));
185 //保存项目缓存 192 //保存项目缓存
186 Cache::put('user-'.$info['project_id'],$project,$minutes = null); 193 Cache::put('user-'.$info['project_id'],$project,$minutes = null);
187 return $this->success($info); 194 return $this->success($info);
188 } 195 }
189 196
190 197
  198 +
191 /** 199 /**
192 * @remark :获取项目数据详情 200 * @remark :获取项目数据详情
193 * @name :getProjectInfo 201 * @name :getProjectInfo
@@ -9,6 +9,8 @@ @@ -9,6 +9,8 @@
9 9
10 namespace App\Models\ASide; 10 namespace App\Models\ASide;
11 11
  12 +use App\Helper\AyrShare as AyrShareHelper;
  13 +use App\Models\AyrShare\AyrShare as AyrShareModel;
12 use App\Models\Base; 14 use App\Models\Base;
13 use App\Services\ProjectServer; 15 use App\Services\ProjectServer;
14 use Illuminate\Support\Facades\DB; 16 use Illuminate\Support\Facades\DB;
@@ -38,5 +40,4 @@ class APublicModel extends Base @@ -38,5 +40,4 @@ class APublicModel extends Base
38 return ['product'=>$productNumber,'blog'=>$blogNumber,'news'=>$newsNumber]; 40 return ['product'=>$productNumber,'blog'=>$blogNumber,'news'=>$newsNumber];
39 } 41 }
40 42
41 -  
42 } 43 }
@@ -7,7 +7,4 @@ use App\Models\Base; @@ -7,7 +7,4 @@ use App\Models\Base;
7 class AyrRelease extends Base 7 class AyrRelease extends Base
8 { 8 {
9 protected $table = 'gl_ayr_release'; 9 protected $table = 'gl_ayr_release';
10 - //连接数据库  
11 - protected $connection = 'custom_mysql';  
12 -  
13 } 10 }
@@ -7,9 +7,6 @@ use App\Models\Base; @@ -7,9 +7,6 @@ use App\Models\Base;
7 class AyrShare extends Base 7 class AyrShare extends Base
8 { 8 {
9 protected $table = 'gl_ayr_share'; 9 protected $table = 'gl_ayr_share';
10 - //连接数据库  
11 - protected $connection = 'custom_mysql';  
12 -  
13 10
14 const COUNT = 3; 11 const COUNT = 3;
15 12
@@ -31,10 +31,10 @@ class Base extends Model @@ -31,10 +31,10 @@ class Base extends Model
31 * @author :liyuhang 31 * @author :liyuhang
32 * @method 32 * @method
33 */ 33 */
34 - public function lists($map, $page, $row, $order = 'id', $fields = ['*']): array 34 + public function lists($map, $page, $row, $order = 'id', $fields = ['*'], $sort = 'desc'): array
35 { 35 {
36 $query = $this->formatQuery($map); 36 $query = $this->formatQuery($map);
37 - $query = $this->sortOrder($query,$order); 37 + $query = $this->sortOrder($query,$order,$sort);
38 $lists = $query->select($fields)->paginate($row, ['*'], 'page', $page); 38 $lists = $query->select($fields)->paginate($row, ['*'], 'page', $page);
39 if (empty($lists)) { 39 if (empty($lists)) {
40 return []; 40 return [];
@@ -51,10 +51,10 @@ class Base extends Model @@ -51,10 +51,10 @@ class Base extends Model
51 * @author :liyuhang 51 * @author :liyuhang
52 * @method 52 * @method
53 */ 53 */
54 - public function list($map = [],$order = 'id',$fields = ['*']): array 54 + public function list($map = [],$order = 'id',$fields = ['*'],$sort = 'desc'): array
55 { 55 {
56 $query = $this->formatQuery($map); 56 $query = $this->formatQuery($map);
57 - $query = $this->sortOrder($query,$order); 57 + $query = $this->sortOrder($query,$order,$sort);
58 $lists = $query->select($fields)->get(); 58 $lists = $query->select($fields)->get();
59 if (empty($lists)) { 59 if (empty($lists)) {
60 return []; 60 return [];
@@ -203,13 +203,13 @@ class Base extends Model @@ -203,13 +203,13 @@ class Base extends Model
203 * @method :post 203 * @method :post
204 * @time :2023/8/21 8:54 204 * @time :2023/8/21 8:54
205 */ 205 */
206 - public function sortOrder(&$query,$order){ 206 + public function sortOrder(&$query,$order,$sort){
207 if(is_array($order)){ 207 if(is_array($order)){
208 foreach ($order as $v){ 208 foreach ($order as $v){
209 - $query = $query->orderBy($v,'desc'); 209 + $query = $query->orderBy($v,$sort);
210 } 210 }
211 }else{ 211 }else{
212 - $query = $query->orderBy($order,'desc'); 212 + $query = $query->orderBy($order,$sort);
213 } 213 }
214 return $query; 214 return $query;
215 } 215 }
@@ -40,9 +40,9 @@ class Channel extends Model @@ -40,9 +40,9 @@ class Channel extends Model
40 } 40 }
41 $user = User::where('channel_id', $channel['id'])->where('name', $sales)->first(); 41 $user = User::where('channel_id', $channel['id'])->where('name', $sales)->first();
42 return [ 42 return [
43 - 'zone_id' => (int)$channel['zone_id'] ?? 0,  
44 - 'channel_id' => (int)$channel['id'] ?? 0,  
45 - 'user_id' => (int)$user['id'] ?? 0, 43 + 'zone_id' => $channel['zone_id'] ?? 0,
  44 + 'channel_id' => $channel['id'] ?? 0,
  45 + 'user_id' => $user['id'] ?? 0,
46 ]; 46 ];
47 } 47 }
48 48
@@ -15,7 +15,7 @@ use App\Models\Base; @@ -15,7 +15,7 @@ use App\Models\Base;
15 class DomainInfo extends Base 15 class DomainInfo extends Base
16 { 16 {
17 const STATUS_ONE = 1; 17 const STATUS_ONE = 1;
18 - 18 + const STATUS_ZERO = 0;
19 public $btAction = [ 19 public $btAction = [
20 'create_site' => '/site?action=AddSite', 20 'create_site' => '/site?action=AddSite',
21 ]; 21 ];
@@ -51,7 +51,20 @@ class DomainInfo extends Base @@ -51,7 +51,20 @@ class DomainInfo extends Base
51 } 51 }
52 52
53 53
54 - 54 + /**
  55 + * @remark :获取域名信息
  56 + * @name :getDomain
  57 + * @author :lyh
  58 + * @method :post
  59 + * @time :2023/9/4 17:05
  60 + */
  61 + public function getDomain($domain){
  62 + $info = $this->read(['id'=>$domain]);
  63 + if($info === false){
  64 + return '';
  65 + }
  66 + return 'https://'.$info['domain'].'/';
  67 + }
55 68
56 69
57 } 70 }
@@ -18,10 +18,11 @@ class LoginLog extends Base @@ -18,10 +18,11 @@ class LoginLog extends Base
18 * @author zbj 18 * @author zbj
19 * @date 2023/4/20 19 * @date 2023/4/20
20 */ 20 */
21 - public static function addLog($manage_id){ 21 + public static function addLog($manage_id,$type){
22 $log = new self(); 22 $log = new self();
23 $log->manage_id = $manage_id; 23 $log->manage_id = $manage_id;
24 $log->ip = request()->ip(); 24 $log->ip = request()->ip();
  25 + $log->type = $type;
25 $log->save(); 26 $log->save();
26 } 27 }
27 } 28 }
@@ -7,6 +7,7 @@ class ManageHr extends Base @@ -7,6 +7,7 @@ class ManageHr extends Base
7 { 7 {
8 protected $table = 'gl_manage_hr'; 8 protected $table = 'gl_manage_hr';
9 9
  10 + const STATUS_ONE = 1;
10 /** 11 /**
11 * 特殊字段 12 * 特殊字段
12 * @return string[] 13 * @return string[]
@@ -17,4 +17,17 @@ class DeployBuild extends Base @@ -17,4 +17,17 @@ class DeployBuild extends Base
17 $cache_key = 'project_' . $row->original['test_domain']; 17 $cache_key = 'project_' . $row->original['test_domain'];
18 Cache::forget($cache_key); 18 Cache::forget($cache_key);
19 } 19 }
  20 +
  21 + /**
  22 + * @remark :扩展字段获取器
  23 + * @name :getConfigurationAttribute
  24 + * @author :lyh
  25 + * @method :post
  26 + * @time :2023/9/6 9:44
  27 + */
  28 + public function getConfigurationAttribute($value)
  29 + {
  30 + $value = Arr::s2a($value);
  31 + return $value;
  32 + }
20 } 33 }
@@ -72,8 +72,8 @@ class Project extends Base @@ -72,8 +72,8 @@ class Project extends Base
72 3 => '旗舰版', 72 3 => '旗舰版',
73 4 => '【PLUS】尊贵版', 73 4 => '【PLUS】尊贵版',
74 5 => '【PLUS】至尊版', 74 5 => '【PLUS】至尊版',
75 - 6 => '仅建站(模板)',  
76 - 7 => '仅建站(订制)', 75 + 6 => '自主建站(定制器)',
  76 + 7 => '定制建站(PS订制)',
77 8 => '星链网站(1年版)', 77 8 => '星链网站(1年版)',
78 9 => '星链网站(2年版)', 78 9 => '星链网站(2年版)',
79 ]; 79 ];
@@ -16,7 +16,8 @@ class Visit extends Base @@ -16,7 +16,8 @@ class Visit extends Base
16 16
17 //设置关联表名 17 //设置关联表名
18 protected $table = 'gl_customer_visit'; 18 protected $table = 'gl_customer_visit';
19 - 19 + //连接数据库
  20 + protected $connection = 'custom_mysql';
20 protected $appends = ['device_text']; 21 protected $appends = ['device_text'];
21 22
22 public static function deviceMap(){ 23 public static function deviceMap(){
@@ -14,4 +14,6 @@ class VisitItem extends Base @@ -14,4 +14,6 @@ class VisitItem extends Base
14 { 14 {
15 //设置关联表名 15 //设置关联表名
16 protected $table = 'gl_customer_visit_item'; 16 protected $table = 'gl_customer_visit_item';
  17 + //连接数据库
  18 + protected $connection = 'custom_mysql';
17 } 19 }
@@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
9 namespace App\Services; 9 namespace App\Services;
10 10
11 use App\Models\Project\Project; 11 use App\Models\Project\Project;
  12 +use App\Utils\EncryptUtils;
12 use Illuminate\Support\Facades\DB; 13 use Illuminate\Support\Facades\DB;
13 use Illuminate\Support\Facades\Schema; 14 use Illuminate\Support\Facades\Schema;
14 15
@@ -31,12 +32,13 @@ class ProjectServer extends BaseService @@ -31,12 +32,13 @@ class ProjectServer extends BaseService
31 if(!$project->mysqlConfig){ 32 if(!$project->mysqlConfig){
32 return false; 33 return false;
33 } 34 }
  35 + $encrypt = new EncryptUtils();
34 // 设置 database.connections.custom_mysql 配置 36 // 设置 database.connections.custom_mysql 配置
35 config(['database.connections.custom_mysql.host' => $project->mysqlConfig->host]); 37 config(['database.connections.custom_mysql.host' => $project->mysqlConfig->host]);
36 - config(['database.connections.custom_mysql.port' => $project->mysqlConfig->port]); 38 + config(['database.connections.custom_mysql.port' => (int)$encrypt->unlock_url($project->mysqlConfig->port)]);
37 config(['database.connections.custom_mysql.database' => $project->databaseName()]); 39 config(['database.connections.custom_mysql.database' => $project->databaseName()]);
38 - config(['database.connections.custom_mysql.username' => $project->mysqlConfig->user]);  
39 - config(['database.connections.custom_mysql.password' => $project->mysqlConfig->password]); 40 + config(['database.connections.custom_mysql.username' => $encrypt->unlock_url($project->mysqlConfig->user)]);
  41 + config(['database.connections.custom_mysql.password' => $encrypt->unlock_url($project->mysqlConfig->password)]);
40 // 设置 redis 配置 42 // 设置 redis 配置
41 return $project; 43 return $project;
42 } 44 }
@@ -51,12 +53,13 @@ class ProjectServer extends BaseService @@ -51,12 +53,13 @@ class ProjectServer extends BaseService
51 */ 53 */
52 public static function createDatabase($project) 54 public static function createDatabase($project)
53 { 55 {
  56 + $encrypt = new EncryptUtils();
54 $conn = new \mysqli( 57 $conn = new \mysqli(
55 $project->mysqlConfig->host, 58 $project->mysqlConfig->host,
56 - $project->mysqlConfig->user,  
57 - $project->mysqlConfig->password, 59 + $encrypt->unlock_url($project->mysqlConfig->user),
  60 + $encrypt->unlock_url($project->mysqlConfig->password),
58 '', 61 '',
59 - $project->mysqlConfig->port, 62 + (int)$encrypt->unlock_url($project->mysqlConfig->port)
60 ); 63 );
61 $conn->query("CREATE DATABASE IF NOT EXISTS {$project->databaseName()}"); 64 $conn->query("CREATE DATABASE IF NOT EXISTS {$project->databaseName()}");
62 return true; 65 return true;
@@ -21,6 +21,7 @@ Route::middleware(['aloginauth'])->group(function () { @@ -21,6 +21,7 @@ Route::middleware(['aloginauth'])->group(function () {
21 Route::any('/del', [Aside\User\ProjectUserController::class, 'del'])->name('admin.user_del'); 21 Route::any('/del', [Aside\User\ProjectUserController::class, 'del'])->name('admin.user_del');
22 Route::any('/getRole', [Aside\User\ProjectUserController::class, 'getRole'])->name('admin.user_getRole'); 22 Route::any('/getRole', [Aside\User\ProjectUserController::class, 'getRole'])->name('admin.user_getRole');
23 Route::any('/sort', [Aside\User\ProjectUserController::class, 'sort'])->name('admin.user_sort'); 23 Route::any('/sort', [Aside\User\ProjectUserController::class, 'sort'])->name('admin.user_sort');
  24 + Route::any('/getProjectList', [Aside\User\ProjectUserController::class, 'getProjectList'])->name('admin.user_getProjectList');
24 25
25 //角色管理 26 //角色管理
26 Route::prefix('role')->group(function () { 27 Route::prefix('role')->group(function () {
@@ -35,7 +36,6 @@ Route::middleware(['aloginauth'])->group(function () { @@ -35,7 +36,6 @@ Route::middleware(['aloginauth'])->group(function () {
35 //栏目管理 36 //栏目管理
36 Route::prefix('menu')->group(function () { 37 Route::prefix('menu')->group(function () {
37 Route::any('/', [Aside\User\ProjectMenuController::class, 'lists'])->name('admin.user_menu_lists'); 38 Route::any('/', [Aside\User\ProjectMenuController::class, 'lists'])->name('admin.user_menu_lists');
38 - Route::any('/list', [Aside\User\ProjectMenuController::class, 'list'])->name('admin.user_menu_list');  
39 Route::any('/info', [Aside\User\ProjectMenuController::class, 'info'])->name('admin.user_menu_info'); 39 Route::any('/info', [Aside\User\ProjectMenuController::class, 'info'])->name('admin.user_menu_info');
40 Route::any('/add', [Aside\User\ProjectMenuController::class, 'add'])->name('admin.user_menu_add'); 40 Route::any('/add', [Aside\User\ProjectMenuController::class, 'add'])->name('admin.user_menu_add');
41 Route::any('/edit', [Aside\User\ProjectMenuController::class, 'edit'])->name('admin.user_menu_edit'); 41 Route::any('/edit', [Aside\User\ProjectMenuController::class, 'edit'])->name('admin.user_menu_edit');
@@ -51,6 +51,11 @@ Route::middleware(['aloginauth'])->group(function () { @@ -51,6 +51,11 @@ Route::middleware(['aloginauth'])->group(function () {
51 Route::any('/read', [Aside\User\ProjectDeptController::class, 'read'])->name('admin.user_group_info'); 51 Route::any('/read', [Aside\User\ProjectDeptController::class, 'read'])->name('admin.user_group_info');
52 Route::any('/getDeptUser', [Aside\User\ProjectDeptController::class, 'getDeptUser'])->name('admin.user_getDeptUser'); 52 Route::any('/getDeptUser', [Aside\User\ProjectDeptController::class, 'getDeptUser'])->name('admin.user_getDeptUser');
53 }); 53 });
  54 +
  55 + //用户日志
  56 + Route::prefix('log')->group(function () {
  57 + Route::any('/', [Aside\User\UserLogController::class, 'lists'])->name('admin.user_log_lists');
  58 + });
54 }); 59 });
55 60
56 //ai指令 61 //ai指令
@@ -128,6 +133,11 @@ Route::middleware(['aloginauth'])->group(function () { @@ -128,6 +133,11 @@ Route::middleware(['aloginauth'])->group(function () {
128 Route::post('/save', [Aside\Manage\HrController::class, 'save'])->name('admin.hr_save'); 133 Route::post('/save', [Aside\Manage\HrController::class, 'save'])->name('admin.hr_save');
129 Route::get('/getSearchParamsList', [Aside\Manage\HrController::class, 'getSearchParamsList'])->name('admin.hr_getSearchParamsList'); 134 Route::get('/getSearchParamsList', [Aside\Manage\HrController::class, 'getSearchParamsList'])->name('admin.hr_getSearchParamsList');
130 }); 135 });
  136 +
  137 + //管理员日志
  138 + Route::prefix('log')->group(function () {
  139 + Route::any('/', [Aside\Manage\ManagerLogController::class, 'lists'])->name('admin.manager_log_lists');
  140 + });
131 }); 141 });
132 142
133 //企业服务配置信息 143 //企业服务配置信息
@@ -308,7 +318,7 @@ Route::group([], function () { @@ -308,7 +318,7 @@ Route::group([], function () {
308 Route::any('/domain/exportData', [Aside\Domain\DomainInfoController::class, 'exportData'])->name('admin.domain_exportData');//导出数据 318 Route::any('/domain/exportData', [Aside\Domain\DomainInfoController::class, 'exportData'])->name('admin.domain_exportData');//导出数据
309 Route::any('/notice/project', [Aside\Notice\NoticeController::class, 'project'])->name('admin.notice.project'); 319 Route::any('/notice/project', [Aside\Notice\NoticeController::class, 'project'])->name('admin.notice.project');
310 Route::any('/sendLoginSms', [Aside\LoginController::class, 'sendLoginSms'])->name('admin.sendLoginSms');//发送验证码 320 Route::any('/sendLoginSms', [Aside\LoginController::class, 'sendLoginSms'])->name('admin.sendLoginSms');//发送验证码
311 - 321 + Route::any('/getProjectInService', [Aside\Project\ProjectController::class, 'getProjectInService'])->name('admin.getProjectInService');//获取项目服务状态
312 }); 322 });
313 323
314 324
@@ -268,6 +268,8 @@ Route::middleware(['bloginauth'])->group(function () { @@ -268,6 +268,8 @@ Route::middleware(['bloginauth'])->group(function () {
268 Route::any('/save', [\App\Http\Controllers\Bside\Template\BTemplateController::class, 'save'])->name('template_save'); 268 Route::any('/save', [\App\Http\Controllers\Bside\Template\BTemplateController::class, 'save'])->name('template_save');
269 //可视化保存获取数据类型 269 //可视化保存获取数据类型
270 Route::any('/getTypeSetting', [\App\Http\Controllers\Bside\Template\BTemplateController::class, 'getTypeSetting'])->name('template_getTypeSetting'); 270 Route::any('/getTypeSetting', [\App\Http\Controllers\Bside\Template\BTemplateController::class, 'getTypeSetting'])->name('template_getTypeSetting');
  271 + Route::any('/getHeadFooter', [\App\Http\Controllers\Bside\Template\BTemplateController::class, 'getHeadFooter'])->name('template_getHeadFooter');
  272 + Route::any('/setHeadFooter', [\App\Http\Controllers\Bside\Template\BTemplateController::class, 'setHeadFooter'])->name('template_setHeadFooter');
271 // 模板 273 // 模板
272 Route::prefix('module')->group(function () { 274 Route::prefix('module')->group(function () {
273 //获取所有左侧模版 275 //获取所有左侧模版