作者 赵彬吉

update

<?php
namespace App\Http\Controllers\Aside;
use App\Services\Facades\Upload;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class FileController extends BaseController
{
/**
* 上传
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
* @author zbj
* @date 2023/4/20
*/
public function upload(Request $request){
// 上传文件
$files = Upload::puts('files', $this->param['config'] ?? 'default');
foreach ($files as &$file){
$file = Upload::path2url($file);
}
return $this->success($files);
}
/**
* 下载
* @param Request $request
* @return \Symfony\Component\HttpFoundation\StreamedResponse
* @author zbj
* @date 2023/4/20
*/
public function download(Request $request){
$path = Upload::url2path($this->param['url'] ?? '');
return Storage::disk('upload')->download($path);
}
/**
* 文件列表
* @author:dc
* @time 2023/5/29 11:42
*/
public function lists(){
$type = \request()->get('type');
switch ($type){
case 'video':{
$ext = ['mp4','avi'];
break;
}
default:{
$ext = ['png','jpg','jpeg','gif'];
break;
}
}
$files = Upload::lists($this->param['config'] ?? 'default',$ext);
return $this->success($files);
}
}
... ...
... ... @@ -24,8 +24,11 @@ class ProjectController extends BaseController
public function list(ProjectLogic $logic)
{
$map = [];
if(!empty($this->param['type'])){
$map[] = ['type', $this->param['type']];
}
if(!empty($this->param['search'])){
$map[] = ['title', 'like', "%{$this->param['search']}%"];
$map[] = ['title|company', $this->param['search']];
}
$sort = ['id' => 'desc'];
$data = $logic->getList($map, $sort);
... ... @@ -78,4 +81,19 @@ class ProjectController extends BaseController
$data = $logic->saveInquirySet($this->param);
return $this->success($data);
}
/**
* 数据源
* @param ProjectLogic $logic
* @return \Illuminate\Http\JsonResponse
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
* @author zbj
* @date 2023/6/20
*/
public function data_source(ProjectLogic $logic){
$data = $logic->dataSource();
return $this->success($data);
}
}
... ...
... ... @@ -28,4 +28,10 @@ class ManageLogic extends BaseLogic
}
return parent::save($param);
}
public static function getCacheName($id){
$info = (new self())->getCacheInfo($id);
return $info['name'] ?? '';
}
}
... ...
... ... @@ -6,12 +6,16 @@ namespace App\Http\Logic\Aside\Project;
use App\Helper\Arr;
use App\Helper\FormGlobalsoApi;
use App\Http\Logic\Aside\BaseLogic;
use App\Http\Logic\Aside\Manage\ManageLogic;
use App\Models\City;
use App\Models\InquirySet;
use App\Models\Manage\Manage;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Payment;
use App\Models\Project\Project;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
/**
... ... @@ -32,7 +36,30 @@ class ProjectLogic extends BaseLogic
public function getList(array $map = [], array $sort = ['id' => 'desc'], array $columns = ['*'], int $limit = 20)
{
parent::setWith(['payment', 'deploy_build', 'deploy_optimize']);
return parent::getList($map, $sort, $columns, $limit);
$list = parent::getList($map, $sort, ['id', 'title', 'channel', 'type', 'created_at'], $limit);
foreach ($list['list'] as &$item){
$item = [
'id' => $item['id'],
'title' => $item['title'],
'channel' => $item['channel']['channel'] . ' - ' . $item['channel']['saler'],
'key' => $item['deploy_build']['keyword_num'],
'day' => $item['deploy_build']['service_duration'],
'amount' => $item['payment']['amount'],
'build_leader' => ManageLogic::getCacheName($item['deploy_build']['leader_mid']), //组长
'build_manager' => ManageLogic::getCacheName($item['deploy_build']['manager_mid']), //项目经理
'build_designer' => ManageLogic::getCacheName($item['deploy_build']['designer_mid']), //设计师
'build_tech' => ManageLogic::getCacheName($item['deploy_build']['tech_mid']), //技术助理
'optimize_manager' => ManageLogic::getCacheName($item['deploy_optimize']['manager_mid']), //优化服务经理
'optimize_optimist' => ManageLogic::getCacheName($item['deploy_optimize']['optimist_mid']), //优化师
'optimize_assist' => ManageLogic::getCacheName($item['deploy_optimize']['assist_mid']), //优化助理
'optimize_tech' => ManageLogic::getCacheName($item['deploy_optimize']['tech_mid']), //售后技术
'type' => $this->model::typeMap()[$item['type']] ?: '',
'test_domain' => $item['deploy_build']['test_domain'],
'domain' => $item['deploy_optimize']['domain'],
'crated_at' => date('Y年m月d日', strtotime($item['created_at'])),
];
}
return $list;
}
public function getInfo($id)
... ... @@ -159,4 +186,15 @@ class ProjectLogic extends BaseLogic
$set->save();
return $this->success();
}
public function dataSource(){
$data = [];
$data['level'] = $this->model::levelMap();
$data['type'] = $this->model::typeMap();
$data['special'] = $this->model::specialMap();
$data['city'] = City::getTreeList();
return $data;
}
}
... ...
<?php
namespace App\Models;
use App\Helper\Arr;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;
/**
* Class City
* @package App\Models
* @author zbj
* @date 2023/6/20
*/
class City extends Model
{
//设置关联表名
protected $table = 'gl_system_city';
public static function getTreeList(){
$cache_key = 'city_select_tree';
$data = Cache::get($cache_key);
if(!$data){
$list = self::select(['city_id', 'parent_id', 'name'])->whereIn('level', [0,1])->get()->toArray();
$data = Arr::listToTree($list, 'city_id', 'parent_id');
Cache::put($cache_key, $data, 24 * 3600);
}
return $data;
}
}
... ...
... ... @@ -5,6 +5,7 @@ namespace App\Models\Project;
use App\Helper\Arr;
use App\Models\Base;
use App\Models\Devops\ServerConfig;
use App\Services\Facades\Upload;
use Illuminate\Support\Facades\Cache;
class Project extends Base
... ... @@ -50,26 +51,39 @@ class Project extends Base
];
}
public static function planMap(){
public static function planMap()
{
return [
'营销大师-体验版',
'营销大师-标准版',
'营销大师-商务版',
'营销大师-旗舰版',
'数据大师-体验版',
'数据大师-智能版',
'数据大师-智慧版',
'PLUS-尊享版',
'PLUS-尊贵版',
'PLUS-至尊版',
'防疫物质推广方案',
'疫情期间免费版',
'建站大师定制优化方案',
'星链网站(1年版)',
'星链网站(2年版)',
1 => '营销大师-体验版',
2 => '营销大师-标准版',
3 => '营销大师-商务版',
4 => '营销大师-旗舰版',
5 => '数据大师-体验版',
6 => '数据大师-智能版',
7 => '数据大师-智慧版',
8 => 'PLUS-尊享版',
9 => 'PLUS-尊贵版',
10 => 'PLUS-至尊版',
11 => '防疫物质推广方案',
12 => '疫情期间免费版',
13 => '建站大师定制优化方案',
14 => '星链网站(1年版)',
15 => '星链网站(2年版)',
];
}
public static function specialMap()
{
return [
1 => '自建站项目',
2 => '重点跟进',
3 => '推广案例',
4 => '全球搜案例',
5 => '设计师案例',
];
}
/**
* 项目部署服务器信息
* @return \Illuminate\Database\Eloquent\Relations\HasOne
... ... @@ -141,28 +155,58 @@ class Project extends Base
return self::hasOne(DeployOptimize::class, 'project_id', 'id');
}
public function setLevelAttribute($value){
public function setLevelAttribute($value)
{
$this->attributes['level'] = Arr::arrToSet($value);
}
public function getLevelAttribute($value){
public function getLevelAttribute($value)
{
return Arr::setToArr($value);
}
public function setChannelAttribute($value){
public function setChannelAttribute($value)
{
$this->attributes['channel'] = Arr::a2s($value);
}
public function getChannelAttribute($value){
public function getChannelAttribute($value)
{
return Arr::s2a($value);
}
public function setNoticeAttribute($value){
$this->attributes['notice'] = Arr::a2s($value);
public function setNoticeFileAttribute($value)
{
foreach ($value as &$v) {
$v = Upload::url2path($v);
}
$this->attributes['notice_file'] = Arr::a2s($value);
}
public function getNoticeAttribute($value){
return Arr::s2a($value);
public function getNoticeFileAttribute($value)
{
$value = Arr::s2a($value);
foreach ($value as &$v) {
$v = Upload::path2url($v);
}
return $value;
}
public function setConfirmFileAttribute($value)
{
foreach ($value as &$v) {
$v = Upload::url2path($v);
}
$this->attributes['confirm_file'] = Arr::a2s($value);
}
public function getConfirmFileAttribute($value)
{
$value = Arr::s2a($value);
foreach ($value as &$v) {
$v = Upload::path2url($v);
}
return $value;
}
/**
... ... @@ -170,21 +214,22 @@ class Project extends Base
* @author zbj
* @date 2023/5/5
*/
public static function getProjectByDomain($domain){
$cache_key = 'project_'.$domain;
public static function getProjectByDomain($domain)
{
$cache_key = 'project_' . $domain;
$data = Cache::get($cache_key);
if(!$data){
if (!$data) {
//是否测试域名
$project_id = DeployBuild::where('test_domain', $domain)->value('project_id');
//是否正式域名
if(!$project_id){
if (!$project_id) {
$project_id = DeployOptimize::where('domain', $domain)->value('project_id');
}
if(!$project_id){
if (!$project_id) {
return [];
}
$data = self::find($project_id);
if($data){
if ($data) {
Cache::put($cache_key, $data);
}
}
... ...
... ... @@ -42,4 +42,11 @@ return [
],
'path' => '/news'
],
//项目相关
'project' =>[
'size' => [
'max' => 1024*1024*1024, // 2M
],
'path' => '/project'
],
];
... ...
... ... @@ -101,6 +101,7 @@ Route::middleware(['aloginauth'])->group(function () {
Route::get('/info', [Aside\Project\ProjectController::class, 'info'])->name('admin.project_info');
Route::post('/save', [Aside\Project\ProjectController::class, 'save'])->name('admin.project_save');
Route::any('/inquiry_set', [Aside\Project\ProjectController::class, 'inquiry_set'])->name('admin.project_inquiry_set');
Route::any('/data_source', [Aside\Project\ProjectController::class, 'data_source'])->name('admin.project_data_source');
});
//工单管理
... ...