作者 Your Name

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

... ... @@ -2,14 +2,20 @@
namespace App\Console\Commands;
use App\Helper\Arr;
use App\Helper\OaGlobalsoApi;
use App\Http\Logic\Aside\Project\ProjectLogic;
use App\Models\Channel\Channel;
use App\Models\Com\NoticeLog;
use App\Models\Project\After;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Payment;
use App\Models\Project\Project;
use App\Models\Project\ProjectRenew;
use App\Utils\LogUtils;
use Hashids\Hashids;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
/**
* 同步项目信息
... ... @@ -59,7 +65,7 @@ class SyncProject extends Command
$this->retry($item);
}
if($data['data']['order_type'] == '首次'){
ProjectLogic::instance()->sync($data['data']);
$this->sync($data['data']);
}
if($data['data']['order_type'] == '续费'){
$this->renewSync($data['data']);
... ... @@ -110,7 +116,6 @@ class SyncProject extends Command
'contract' => json_encode($param['files']),
'bill' => json_encode($param['images']),
];
// @file_put_contents(storage_path('logs/lyh_error.log'), var_export($data, true) . PHP_EOL, FILE_APPEND);
$renewModel = new ProjectRenew();
$rs = $renewModel->add($data);
if($rs === false){
... ... @@ -135,4 +140,172 @@ class SyncProject extends Command
return 1;
}
}
/**
* @remark :导入数据
* @name :sync
* @author :lyh
* @method :post
* @time :2023/8/9 15:04
*/
public function sync($param){
$title = date('Ymd') . '-' . $param['company_name'];
$data = [
'project'=>[
'title' => $title,
'company' => $param['company_name'],
'lead_name' => $param['principal_name'],
'mobile' => $param['principal_mobile'],
'mysql_id'=>Project::MYSQL_ID,
'qq' => $param['customer_qq'],
'channel' => Channel::getProjectChannel($param['company_id'], $param['username_sales']),
'requirement' => $param['remark'],
'cooperate_date' => date('Y-m-d', $param['create_time']),
],
'deploy_build' => [
'service_duration' => $param['years'],
'plan' => $this->versionData($param['plan_marketing']),
'login_mobile'=>$param['principal_mobile']
],
'deploy_optimize' => [
'api_no' => $param['id']
],
'project_after' => [],
'payment' => [
'amount' => $param['plan_price'],
'contract' => $param['files'],
'bill' => $param['images'],
],
];
DB::beginTransaction();
try {
$id = $this->saveProject($data['project']);
$this->setPostId($data['deploy_build']['plan'],$id);
$this->savePayment($data['payment'],$id);
$this->saveDeployBuild($data['deploy_build'],$id);
$this->saveDeployOptimize($data['deploy_optimize'],$id);
$this->saveAfter($data['project_after'],$id);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
errorLog('项目同步失败', $data, $e);
$this->fail('同步失败');
}
}
/**
* @remark :设置post_id
* @name :setPostId
* @author :lyh
* @method :post
* @time :2023/8/9 14:47
*/
public function setPostId($plan,$id){
$length = strlen((string)$id); // 获取变量的位数
$paddingLength = Project::TYPE_FIVE - $length; // 计算填充前面的 0 的位数
$zeros = str_repeat("0", $paddingLength);
$number = Project::TYPE_SIX.$plan.$zeros.$id;
$projectModel = new Project();
$projectModel->edit(['post_id'=>$number],['id'=>$id]);
return true;
}
/**
* @remark :保存项目
* @name :saveProject
* @author :lyh
* @method :post
* @time :2023/8/30 15:53
*/
public function saveProject($param){
if(isset($param['level']) && !empty($param['level'])){
$param['level'] = Arr::arrToSet($param['level']);
}
if(isset($param['channel']) && !empty($param['channel'])){
$param['channel'] = Arr::a2s($param['channel']);
}
if(isset($param['notice_file']) && !empty($param['notice_file'])){
foreach ($param['notice_file'] as &$v1) {
$v1['url'] = basename($v1['url']);
}
$param['notice_file'] = Arr::a2s($param['notice_file']);
}
if(isset($param['confirm_file']) && !empty($param['confirm_file'])){
foreach ($param['confirm_file'] as &$v2) {
$v2['url'] = basename($v2['url']);
}
$param['confirm_file'] = Arr::a2s($param['confirm_file']);
}
$projectModel = new Project();
return $projectModel->addReturnId($param);
}
/**
* 保存优化部署
* @author zbj
* @date 2023/4/26
*/
protected function saveAfter($param,$id){
$param['project_id'] = $id;
//查询数据是否存在
$afterModel = new After();
return $afterModel->add($param);
}
/**
* @remark :保存付款续费
* @name :savePayment
* @author :lyh
* @method :post
* @time :2023/8/29 16:19
*/
protected function savePayment($param,$id){
$param['project_id'] = $id;
$paymentModel= new Payment();
if(isset($param['renewal_record']) && !empty($param['renewal_record'])){
$param['renewal_record'] = Arr::a2s($param['renewal_record']);
}
if(isset($param['contract']) && !empty($param['contract'])){
$param['contract'] = Arr::a2s($param['contract']);
}
if(isset($param['bill']) && !empty($param['bill'])){
$param['bill'] = Arr::a2s($param['bill']);
}
return $paymentModel->add($param);
}
/**
* @remark :保存建站部署
* @name :saveDeployBuild
* @author :lyh
* @method :post
* @time :2023/8/29 16:19
*/
protected function saveDeployBuild($param,$id){
$param['project_id'] = $id;
$hashids = new Hashids('test_domain', 5, 'abcdefghjkmnpqrstuvwxyz1234567890');
$code = $hashids->encode($id);
$param['test_domain'] = 'https://v6-' . $code . '.globalso.site/';
$deployBuildModel = new DeployBuild();
return $deployBuildModel->add($param);
}
/**
* @remark :保存优化信息
* @name :saveDeployOptimize
* @author :lyh
* @method :post
* @time :2023/8/30 16:11
*/
protected function saveDeployOptimize($param,$id){
$param['project_id'] = $id;
if(isset($param['minor_languages']) && !empty($param['minor_languages'])){
$param['minor_languages'] = Arr::a2s($param['minor_languages']);
}
if(isset($param['minor_keywords']) && !empty($param['minor_keywords'])){
$param['minor_keywords'] = Arr::a2s($param['minor_keywords']);
}
$deployOptimizeModel = new DeployOptimize();
return $deployOptimizeModel->add($param);
}
}
... ...
... ... @@ -95,7 +95,7 @@ class BaseController extends Controller
$this->map['updated_at'] = ['between', $this->_btw];
break;
default:
if (!empty($v) && ($v != null)) {
if ($v != null) {
$this->map[$k] = $v;
}
break;
... ...
... ... @@ -4,23 +4,29 @@ namespace App\Http\Controllers\Aside\Project;
use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\Manage\ManageLogic;
use App\Http\Logic\Aside\Project\OnlineCheckLogic;
use App\Http\Logic\Aside\Project\ProcessRecordsLogic;
use App\Http\Logic\Aside\Project\ProjectLogic;
use App\Http\Requests\Aside\Project\ProcessRecordsRequest;
use App\Http\Requests\Aside\Project\ProjectRequest;
use App\Models\ASide\APublicModel;
use App\Models\Channel\Channel;
use App\Models\Com\City;
use App\Models\Devops\ServerConfig;
use App\Models\Domain\DomainInfo;
use App\Models\Inquiry\InquirySet;
use App\Models\Manage\BelongingGroup;
use App\Models\Manage\Manage;
use App\Models\Manage\ManageHr;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Payment;
use App\Models\Project\Project;
use App\Models\RankData\RankData;
use App\Models\Task\Task;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
/**
... ... @@ -33,49 +39,6 @@ use Illuminate\Http\Request;
class ProjectController extends BaseController
{
public function list(ProjectLogic $logic)
{
$map = [];
//搜索类型
if(isset($this->param['type']) && $this->param['type'] == Project::TYPE_THREE){
$map[] = ['type', 'in' ,[Project::TYPE_FOUR,Project::TYPE_SIX]];
}
if(isset($this->param['type']) && $this->param['type'] == Project::TYPE_TWO){
$map[] = ['type', 'in', [Project::TYPE_TWO,Project::TYPE_THREE]];
}
if(isset($this->param['type']) && $this->param['type'] == Project::TYPE_ONE){
$map[] = ['type','in',[Project::TYPE_ONE]];
}
if(isset($this->param['type']) && $this->param['type'] == Project::TYPE_ZERO){
$map[] = ['type','in',[Project::TYPE_ZERO]];
}
//搜索技术组
if(!empty($this->param['dep_id'])){
$map[] = ['id', 'in', DeployBuild::where('dept_id', $this->param['dep_id'])->pluck('project_id')->toArray()];
}
//搜索技术人员
if(!empty($this->param['manage_id'])){
$map[] = ['id', 'in', DeployBuild::where('leader_mid', $this->param['manage_id'])
->orwhere('manager_mid', $this->param['manage_id'])
->orwhere('designer_mid', $this->param['manage_id'])
->orwhere('tech_mid', $this->param['manage_id'])
->pluck('project_id')
->toArray()];
}
//按类型搜索
if(!empty($this->param['search']) && !empty($this->param['search_type'])){
if($this->param['search_type'] == 'domain'){
//搜索域名
$map[] = ['id', 'in', DeployOptimize::where('domain', 'like', "%{$this->param['search']}%")->pluck('project_id')->toArray()];
}else{
$map[] = [$this->param['search_type'], 'like', "%{$this->param['search']}%"];
}
}
$sort = ['id' => 'desc'];
$data = $logic->getList($map, $sort,['*'],$this->row);
$this->response('success',Code::SUCCESS,$data);
}
/**
* @remark :项目列表
* @name :lists
... ... @@ -85,13 +48,87 @@ class ProjectController extends BaseController
*/
public function lists(Project $project){
$map = [];
//搜索参数处理
$map = $this->searchParam($map,$this->map);
//类型
if(isset($this->map['type'])){
$map['type'] = $this->searchType($this->map['type']);
$map['extend_type'] = 0;//排除未续费项目
}
//搜索参数处理
$map = $this->searchParam($map,$this->map);
$project->formatQuery($map)->with()->paginate($this->row, ['*'], 'page', $this->page);
$filed = ['id', 'title', 'mysql_id' ,'channel','cooperate_date' ,'type', 'created_at'];
$lists = $project->formatQuery($map)->select($filed)->with('payment')->with('deploy_build')
->with('deploy_optimize')->with('online_check')->paginate($this->row, ['*'], 'page', $this->page);
if(!empty($lists)){
$lists = $lists->toArray();
foreach ($lists['list'] as $k=>$item){
$item = $this->handleParam($item);
$lists['list'][$k] = $item;
}
}
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @remark :返回参数过滤
* @name :returnParamItem
* @author :lyh
* @method :post
* @time :2023/8/30 11:07
*/
public function handleParam(&$item){
$manageModel = new Manage();
if($item['mysql_id'] != 0 && $item['type'] != 0){
$data = APublicModel::getNumByProjectId($item['id']);
}
$item = [
'id' => $item['id'],
'title' => $item['title'],
'channel' => Channel::getChannelText($item['channel']['user_id'] ?? 0),
'key' => $item['deploy_build']['keyword_num'] ?? 0,
'day' => $item['deploy_build']['service_duration'] ?? 0,
'amount' => $item['payment']['amount'] ?? 0,
'build_leader' => $manageModel->getName($item['deploy_build']['leader_mid']), //组长
'build_manager' => $manageModel->getName($item['deploy_build']['manager_mid']), //项目经理
'build_designer' => $manageModel->getName($item['deploy_build']['designer_mid']), //设计师
'build_tech' => $manageModel->getName($item['deploy_build']['tech_mid']), //技术助理
'optimize_manager' => $manageModel->getName($item['deploy_optimize']['manager_mid']), //优化服务经理
'optimize_optimist' => $manageModel->getName($item['deploy_optimize']['optimist_mid']), //优化师
'optimize_assist' => $manageModel->getName($item['deploy_optimize']['assist_mid']), //优化助理
'optimize_tech' => $manageModel->getName($item['deploy_optimize']['tech_mid']), //售后技术
'type' => $item['type'],
'test_domain' => $item['deploy_build']['test_domain'] ?? 0,
'plan' =>Project::planMap()[$item['deploy_build']['plan']],
'domain' => $item['deploy_optimize']['domain'] ?? 0,
'created_at' => date('Y年m月d日', strtotime($item['created_at'])),
'product_num' => $data['product'] ?? 0,
'keyword_num' => $item['deploy_build']['keyword_num'] ?? 0,
'article_num' => ($data['blog'] ?? 0) + ($data['news'] ?? 0),
'task_finish_num' => Task::getNumByProjectId($item['id'], Task::STATUS_DOWN),
'task_pending_num' => Task::getNumByProjectId($item['id'], [Task::STATUS_DONGING, Task::STATUS_WAIT]),
'optimist_status'=>$item['online_check']['optimist_status'] ?? 0,
'qa_status'=>$item['online_check']['qa_status'] ?? 0,
'service_day'=>$item['deploy_build']['service_duration'] - $this->compliance_day($item['id']),
];
return $item;
}
/**
* @param $yesterday
* @name :(服务达标天数)compliance_day
* @author :lyh
* @method :post
* @time :2023/6/14 15:48
*/
public function compliance_day($project_id){
//服务达标天数
$rankDataModel = new RankData();
$rank_info = $rankDataModel->where(['project_id'=>$project_id,'lang'=>''])->select(['compliance_day'])->first();
if(empty($rank_info)){
$compliance_day = 0;
}else{
$compliance_day = $rank_info->compliance_day;
}
return $compliance_day;
}
/**
... ... @@ -130,17 +167,13 @@ class ProjectController extends BaseController
public function searchParam(&$map,$param){
//搜索技术组
if(!empty($param['dep_id'])){
$map['id'] = ['in', DeployBuild::where('dept_id', $this->param['dep_id'])->pluck('project_id')->toArray()];
$map['id'] = ['in', DeployBuild::where('dept_id', $param['dep_id'])->pluck('project_id')->toArray()];
}
//搜索技术人员
if(!empty($param['manage_id'])){
$map['id'] = ['in', DeployBuild::where('leader_mid', $this->param['manage_id'])
->orwhere('manager_mid', $this->param['manage_id'])
->orwhere('designer_mid', $this->param['manage_id'])
->orwhere('tech_mid', $this->param['manage_id'])
->pluck('project_id')
->toArray()];
$map['id'] = ['in', DeployBuild::where('leader_mid', $param['manage_id'])
->orwhere('manager_mid', $param['manage_id'])->orwhere('designer_mid', $param['manage_id'])
->orwhere('tech_mid', $param['manage_id'])->pluck('project_id')->toArray()];
}
//按类型搜索
if(!empty($param['search']) && !empty($param['search_type'])){
... ... @@ -181,7 +214,7 @@ class ProjectController extends BaseController
public function save(ProjectRequest $request, ProjectLogic $logic)
{
$request->validated();
$logic->save($this->param);
$logic->projectSave();
$this->response('success');
}
... ...
... ... @@ -18,6 +18,7 @@ use App\Models\ASide\APublicModel;
use App\Models\Channel\Channel;
use App\Models\HomeCount\Count;
use App\Models\Manage\Manage;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Project;
use App\Models\Task\Task;
... ... @@ -32,27 +33,63 @@ class RenewProjectController extends BaseController
* @method :post
* @time :2023/8/11 10:22
*/
public function lists(ProjectLogic $logic){
public function lists(Project $project){
$arr = $this->getLessThanFifteenProjectId();
$map = [];
$this->searchParam($map,$this->map,$arr);
//按类型搜索
$map['id'] = ['in', $arr];
$filed = ['id', 'title', 'mysql_id' ,'channel','cooperate_date' ,'type', 'created_at'];
$lists = $project->formatQuery($map)->select($filed)->with('payment')->with('deploy_build')
->with('deploy_optimize')->with('online_check')->paginate($this->row, ['*'], 'page', $this->page);
if(!empty($lists)){
$lists = $lists->toArray();
foreach ($lists['list'] as $k=>$item){
$item = $this->handleParam($item);
$lists['list'][$k] = $item;
}
}
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @remark :获取小于15天的项目id
* @name :getlessThanFifteenProjectId
* @author :lyh
* @method :post
* @time :2023/8/30 11:49
*/
public function getLessThanFifteenProjectId(){
$count = new Count();
$yesterday = Carbon::yesterday()->toDateString();
$count_list = $count->list(['date'=>$yesterday,'service_day'=>['<=',15]],'id',['project_id']);
$arr = [];
foreach ($count_list as $v){
$arr[] = $v['project_id'];
if(!empty($count_list)){
foreach ($count_list as $v){
$arr[] = $v['project_id'];
}
}
$sort = ['id' => 'desc'];
return $arr;
}
/**
* @remark :搜索参数处理
* @name :searchParam
* @author :lyh
* @method :post
* @time :2023/8/30 10:30
*/
public function searchParam(&$map,$param,&$arr){
//按类型搜索
$map[] = ['id', 'in', $arr];
if(!empty($this->param['search']) && !empty($this->param['search_type'])){
if(!empty($param['search']) && !empty($param['search_type'])){
if($this->param['search_type'] == 'domain'){
//搜索域名
$map[] = ['id', 'in', DeployOptimize::where('domain', 'like', "%{$this->param['search']}%")->where('id','in',$arr)->pluck('project_id')->toArray()];
$map['id'] = ['id', 'in', DeployOptimize::where('domain', 'like', "%{$param['search']}%")->where('id','in',$arr)->pluck('project_id')->toArray()];
}else{
$map[] = [$this->param['search_type'], 'like', "%{$this->param['search']}%"];
$map[$this->param['search_type']] = ['like', "%{$this->param['search']}%"];
}
}
$data = $logic->getList($map, $sort,['*'],$this->row);
$this->response('success',Code::SUCCESS,$data);
return $map;
}
/**
... ... @@ -95,7 +132,7 @@ class RenewProjectController extends BaseController
* @time :2023/8/18 14:33
*/
public function notHaveRenewItems(Project $project){
$this->map['type'] = $project::TYPE_FIVE;//未续费网站
$this->map['extend_type'] = $project::TYPE_FIVE;//未续费网站
$lists = $project->where($this->map)->with('payment')->with('deploy_build')
->with('deploy_optimize')->with('online_check')
->with('project_after')->paginate($this->row, ['*'], 'page', $this->page);
... ...
... ... @@ -98,6 +98,13 @@ class ProjectUserController extends BaseController
*/
public function save(UserRequest $request,UserLogic $userLogic){
$request->validated();
if(!isset($this->param['id'])){
$this->request->validate([
'password'=>'required',
],[
'password.required' => '密码不能为空',
]);
}
$userLogic->projectUserSave();
$this->response('success');
}
... ...
... ... @@ -12,6 +12,7 @@ namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Events\WebSocketMessage;
use App\Events\WebSocketMessageSent;
use App\Helper\Arr;
use App\Helper\Common;
use App\Helper\Translate;
use App\Helper\Wechat;
... ... @@ -202,13 +203,5 @@ class LoginController extends BaseController
$info = $logic->autologin($data);
$this->response('success',Code::SUCCESS,['info'=>$info]);
}
public function ceshi(EncryptUtils $encrypt){
$serviceSettingModel = new Service();
$info = $serviceSettingModel->read(['type'=>4]);
$data = $encrypt->unlock_url($this->param['code'], $info['values']);
$data = json_decode($data, true);
@file_put_contents(storage_path('logs/lyh_error.log'), var_export($data, true) . PHP_EOL, FILE_APPEND);
$this->response($data);
}
}
... ...
... ... @@ -2,14 +2,11 @@
namespace App\Http\Logic\Aside\Project;
use Illuminate\Support\Arr as SupArr;
use App\Helper\Arr;
use App\Helper\Common;
use App\Helper\FormGlobalsoApi;
use App\Http\Logic\Aside\BaseLogic;
use App\Http\Logic\Aside\Manage\ManageLogic;
use App\Models\ASide\APublicModel;
use App\Models\Blog\Blog;
use App\Models\Channel\Channel;
use App\Models\Channel\User;
use App\Models\Channel\Zone;
... ... @@ -38,70 +35,10 @@ class ProjectLogic extends BaseLogic
public function __construct()
{
parent::__construct();
$this->param = $this->requestAll;
$this->model = new Project();
}
public function getList(array $map = [], array $sort = ['id' => 'desc'], array $columns = ['*'], int $limit = 20)
{
parent::setWith(['payment', 'deploy_build', 'deploy_optimize','online_check']);
$list = parent::getList($map, $sort, ['id', 'title', 'mysql_id' ,'channel','cooperate_date' ,'type', 'created_at'], $limit);
$managerLogic = new ManageLogic();
foreach ($list['list'] as &$item){
if($item['mysql_id'] != 0){
$data = APublicModel::getNumByProjectId($item['id']);
}
$item = [
'id' => $item['id'],
'title' => $item['title'],
'channel' => Channel::getChannelText($item['channel']['user_id'] ?? 0),
'key' => $item['deploy_build']['keyword_num'] ?? 0,
'day' => $item['deploy_build']['service_duration'] ?? 0,
'amount' => $item['payment']['amount'] ?? 0,
'build_leader' => $managerLogic->getCacheName($item['deploy_build']['leader_mid'] ?? 0), //组长
'build_manager' => $managerLogic->getCacheName($item['deploy_build']['manager_mid'] ?? 0), //项目经理
'build_designer' => $managerLogic->getCacheName($item['deploy_build']['designer_mid'] ?? 0), //设计师
'build_tech' => $managerLogic->getCacheName($item['deploy_build']['tech_mid'] ?? 0), //技术助理
'optimize_manager' => $managerLogic->getCacheName($item['deploy_optimize']['manager_mid'] ?? 0), //优化服务经理
'optimize_optimist' => $managerLogic->getCacheName($item['deploy_optimize']['optimist_mid'] ?? 0), //优化师
'optimize_assist' => $managerLogic->getCacheName($item['deploy_optimize']['assist_mid'] ?? 0), //优化助理
'optimize_tech' => $managerLogic->getCacheName($item['deploy_optimize']['tech_mid'] ?? 0), //售后技术
'type' => $item['type'],
'test_domain' => $item['deploy_build']['test_domain'] ?? 0,
'plan' =>Project::planMap()[$item['deploy_build']['plan']],
'domain' => $item['deploy_optimize']['domain'] ?? 0,
'created_at' => date('Y年m月d日', strtotime($item['created_at'])),
'product_num' => $data['product'] ?? 0,
'keyword_num' => $item['deploy_build']['keyword_num'] ?? 0,
'article_num' => ($data['blog'] ?? 0) + ($data['news'] ?? 0),
'task_finish_num' => Task::getNumByProjectId($item['id'], Task::STATUS_DOWN),
'task_pending_num' => Task::getNumByProjectId($item['id'], [Task::STATUS_DONGING, Task::STATUS_WAIT]),
'optimist_status'=>$item['online_check']['optimist_status'] ?? 0,
'qa_status'=>$item['online_check']['qa_status'] ?? 0,
'service_day'=>$item['deploy_build']['service_duration'] - $this->compliance_day($item['id']),
];
}
return $list;
}
/**
* @param $yesterday
* @name :(服务达标天数)compliance_day
* @author :lyh
* @method :post
* @time :2023/6/14 15:48
*/
public function compliance_day($project_id){
//服务达标天数
$rank_info = DB::table('gl_rank_data')->where(['project_id'=>$project_id,'lang'=>''])->select(['compliance_day'])->first();
if(empty($rank_info)){
$compliance_day = 0;
}else{
$compliance_day = $rank_info->compliance_day;
}
return $compliance_day;
}
/**
* @remark :获取当前数据详情
* @name :getProjectInfo
... ... @@ -129,50 +66,166 @@ class ProjectLogic extends BaseLogic
}
/**
* @remark :保存项目配置数据
* @name :save
* @remark :保存项目数据
* @name :projectSave
* @author :lyh
* @method :post
* @time :2023/8/17 14:19
* @time :2023/8/30 11:57
*/
public function save($param){
public function projectSave(){
DB::beginTransaction();
try {
if($param['type'] == Project::TYPE_FIVE){
$param['extend_type'] == Project::TYPE_FIVE;
unset($param['type']);
}
$res = parent::save($param);
$param['id'] = $res['id'];
Common::del_user_cache($this->model->getTable(),$param['id']);
$this->savePayment($param);
$this->saveDeployBuild($param);
$this->saveDeployOptimize($param);
$this->saveAfter($param);
//创建默认数据库
if($param['type'] == Project::TYPE_ONE){
//初始化数据库
if(isset($param['mysql_id']) && !empty($param['mysql_id'])){
$this->initializationMysql($res['id']);
}
//初始账号
if(isset($param['mobile']) && !empty($param['mobile'])){
$this->createUser($param['mobile'],$res['id'],$param['lead_name']);
}
//更改服务器状态
if(isset($param['serve_id']) && !empty($param['serve_id'])){
$this->updateServe($param['serve_id']);
}
}
$this->createProjectData($this->param);
//保存项目信息
$this->saveProject($this->param);
//保存建站部署信息
$this->saveProjectDeployBuild($this->param['deploy_build']);
//保存付费信息
$this->saveProjectPayment($this->param['payment']);
//保存优化信息
$this->saveProjectDeployOptimize($this->param['deploy_optimize']);
//保存售后信息
$this->saveProjectAfter($this->param['project_after']);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('保存失败');
$this->fail('error');
}
return $this->success();
}
/**
* @remark :保存项目
* @name :setExtendType
* @author :lyh
* @method :post
* @time :2023/8/30 12:14
*/
public function saveProject($param){
if($param['type'] == Project::TYPE_FIVE){
$param['extend_type'] = Project::TYPE_FIVE;
unset($param['type']);
}
if(isset($param['level']) && !empty($param['level'])){
$param['level'] = Arr::arrToSet($param['level']);
}
if(isset($param['channel']) && !empty($param['channel'])){
$param['channel'] = Arr::a2s($param['channel']);
}
if(isset($param['notice_file']) && !empty($param['notice_file'])){
foreach ($param['notice_file'] as &$v1) {
$v1['url'] = basename($v1['url']);
}
$param['notice_file'] = Arr::a2s($param['notice_file']);
}
if(isset($param['confirm_file']) && !empty($param['confirm_file'])){
foreach ($param['confirm_file'] as &$v2) {
$v2['url'] = basename($v2['url']);
}
$param['confirm_file'] = Arr::a2s($param['confirm_file']);
}
unset($param['payment'],$param['deploy_build'],$param['deploy_optimize'],$param['online_check'],$param['project_after']);
$this->model->edit($param,['id'=>$param['id']]);
Common::del_user_cache($this->model->getTable(),$param['id']);
return $this->success();
}
/**
* @remark :保存付款续费
* @name :savePayment
* @author :lyh
* @method :post
* @time :2023/8/29 16:19
*/
protected function saveProjectPayment($payment){
$paymentModel = new Payment();
// $payment['contract'] = Arr::a2s($payment['contract']);
if(isset($payment['renewal_record']) && !empty($payment['renewal_record'])){
$payment['renewal_record'] = Arr::a2s($payment['renewal_record']);
}
$paymentModel->edit($payment,['id'=>$payment['id']]);
return $this->success();
}
/**
* @remark :保存建站部署
* @name :saveDeployBuild
* @author :lyh
* @method :post
* @time :2023/8/29 16:19
*/
protected function saveProjectDeployBuild($deploy_build){
$deployBuildModel = new DeployBuild();
$deployBuildModel->edit($deploy_build,['id'=>$deploy_build['id']]);
return $this->success();
}
/**
* @remark :保存优化部署
* @name :saveDeployOptimize
* @author :lyh
* @method :post
* @time :2023/8/30 13:45
*/
protected function saveProjectDeployOptimize($deploy_optimize){
$deployOptimizeModel = new DeployOptimize();
if(isset($deploy_optimize['domain']) && !empty($deploy_optimize['domain'])){
if (!preg_match('/http/', $deploy_optimize['domain'])) {
$deploy_optimize['domain'] = 'https://'.trim($deploy_optimize['domain'],'/').'/';
}
}
if(isset($deploy_optimize['minor_languages']) && !empty($deploy_optimize['minor_languages'])){
$deploy_optimize['minor_languages'] = Arr::a2s($deploy_optimize['minor_languages']);
}
if(isset($deploy_optimize['minor_keywords']) && !empty($deploy_optimize['minor_keywords'])){
$deploy_optimize['minor_keywords'] = Arr::a2s($deploy_optimize['minor_keywords']);
}
$deployOptimizeModel->edit($deploy_optimize,['id'=>$deploy_optimize['id']]);
return $this->success();
}
/**
* @remark :保存为售后部署
* @name :saveProjectAfter
* @author :lyh
* @method :post
* @time :2023/8/30 13:57
*/
protected function saveProjectAfter($project_after){
//查询数据是否存在
$afterModel = new After();
$afterModel->edit($project_after,['id'=>$project_after['id']]);
return $this->success();
}
/**
* @remark :创建初始数据
* @name :createProjectData
* @author :lyh
* @method :post
* @time :2023/8/30 14:30
*/
public function createProjectData($param){
//创建默认数据库
if($param['type'] == Project::TYPE_ONE){
//初始化数据库
if(isset($param['mysql_id']) && !empty($param['mysql_id'])){
$this->initializationMysql($param['id']);
}
//初始账号
if(isset($param['mobile']) && !empty($param['mobile'])){
$this->createUser($param['mobile'],$param['id'],$param['lead_name']);
}
//更改服务器状态
if(isset($param['serve_id']) && !empty($param['serve_id'])){
$this->updateServe($param['serve_id']);
}
}
return $this->success();
}
/**
* @remark :初始化数据库
* @name :initializationMysql
* @author :lyh
... ... @@ -202,6 +255,8 @@ class ProjectLogic extends BaseLogic
return $this->success();
}
/**
* @remark :创建用户
* @name :createUser
... ... @@ -228,82 +283,8 @@ class ProjectLogic extends BaseLogic
return $this->success();
}
/**
* @remark :保存付款续费
* @name :savePayment
* @author :lyh
* @method :post
* @time :2023/8/29 16:19
*/
protected function savePayment($param){
if(empty($param['payment'])){
return true;
}
$data = $param['payment'];
$data['project_id'] = $param['id'];
$data['id'] = Payment::where('project_id', $param['id'])->value('id');
return (new PaymentLogic)->save($data);
}
/**
* @remark :保存建站部署
* @name :saveDeployBuild
* @author :lyh
* @method :post
* @time :2023/8/29 16:19
*/
protected function saveDeployBuild($param){
if(empty($param['deploy_build'])){
return true;
}
$data = $param['deploy_build'];
$data['project_id'] = $param['id'];
$data['id'] = DeployBuild::where('project_id', $param['id'])->value('id');
if(empty($data['id'])){
$hashids = new Hashids('test_domain', 5, 'abcdefghjkmnpqrstuvwxyz1234567890');
$code = $hashids->encode($data['project_id']);
$data['test_domain'] = 'https://v6-' . $code . '.globalso.site/';
}
return (new DeployBuildLogic)->save($data);
}
/**
* 保存优化部署
* @author zbj
* @date 2023/4/26
*/
protected function saveDeployOptimize($param){
if(empty($param['deploy_optimize'])){
return true;
}
$data = $param['deploy_optimize'];
$data['project_id'] = $param['id'];
if(isset($data['domain']) && !empty($data['domain'])){
if (!preg_match('/http/', $data['domain'])) {
$data['domain'] = 'https://'.trim($data['domain'],'/').'/';
}
}
$data['id'] = DeployOptimize::where('project_id', $param['id'])->value('id');
return (new DeployOptimizeLogic)->save($data);
}
/**
* 保存优化部署
* @author zbj
* @date 2023/4/26
*/
protected function saveAfter($param){
$data = $param['project_after'];
$data['project_id'] = $param['id'];
//查询数据是否存在
$afterModel = new After();
$info = $afterModel->read(['project_id'=>$data['project_id']]);
if($info === false){
$rs = $afterModel->add($data);
}else{
$rs = $afterModel->edit($data,['id'=>$info['id']]);
}
return $rs;
}
public function clearCache($id)
{
parent::clearCache($id);
... ... @@ -366,89 +347,8 @@ class ProjectLogic extends BaseLogic
}
/**
* @remark :导入数据
* @name :sync
* @author :lyh
* @method :post
* @time :2023/8/9 15:04
*/
public function sync($param){
$title = date('Ymd') . '-' . $param['company_name'];
$data = [
'title' => $title,
'api_no'=> $param['id'],
'company' => $param['company_name'],
'lead_name' => $param['principal_name'],
'mobile' => $param['principal_mobile'],
'mysql_id'=>Project::MYSQL_ID,
'qq' => $param['customer_qq'],
'channel' => Channel::getProjectChannel($param['company_id'], $param['username_sales']),
'requirement' => $param['remark'],
'cooperate_date' => date('Y-m-d', $param['create_time']),
'deploy_build' => [
'service_duration' => $param['years'],
'plan' => $this->versionData($param['plan_marketing']),
'login_mobile'=>$param['principal_mobile']
],
'deploy_optimize' => [
'api_no' => $param['id']
],
'project_after' => [],
'payment' => [
'amount' => $param['plan_price'],
'contract' => $param['files'],
'bill' => $param['images'],
],
];
DB::beginTransaction();
try {
$res = parent::save($data);
$data['id'] = $res['id'];
$this->setPostId($data['deploy_build']['plan'],$res['id']);
$this->savePayment($data);
$this->saveDeployBuild($data);
$this->saveDeployOptimize($data);
$this->saveAfter($data);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
errorLog('项目同步失败', $data, $e);
$this->fail('同步失败');
}
}
/**
* @remark :获取版本
* @name :versionData
* @author :lyh
* @method :post
* @time :2023/8/9 14:46
*/
public function versionData($param){
$data = Project::planMap();
$data = array_flip($data);
if(isset($data[$param])){
return $data[$param];
}else{
return 1;
}
}
/**
* @remark :设置post_id
* @name :setPostId
* @author :lyh
* @method :post
* @time :2023/8/9 14:47
*/
public function setPostId($plan,$id){
$length = strlen((string)$id); // 获取变量的位数
$paddingLength = Project::TYPE_FIVE - $length; // 计算填充前面的 0 的位数
$zeros = str_repeat("0", $paddingLength);
$number = Project::TYPE_SIX.$plan.$zeros.$id;
$projectModel = new Project();
$projectModel->edit(['post_id'=>$number],['id'=>$id]);
return true;
}
}
... ...
... ... @@ -51,7 +51,7 @@ class CountLogic extends BaseLogic
*/
public function scheme_info(){
$data = [
'company'=>$this->project['company'],
'company'=>$this->project['title'],
'scheme'=>Project::planMap()[$this->project['deploy_build']['plan']],
'service_duration'=>$this->project['deploy_build']['service_duration'],
];
... ...
... ... @@ -25,7 +25,6 @@ class UserRequest extends FormRequest
{
return [
'mobile'=>'required|string|max:11',
'password'=>'required|string|min:5',
'project_id'=>'required',
'name'=>'required|max:20',
];
... ... @@ -38,9 +37,6 @@ class UserRequest extends FormRequest
'project_id.required'=>'所属项目必须填写',
'mobile.string'=>'号码中含有非法文字',
'mobile.max' => '号码不大于11字符.',
'password.required'=>'密码必须填写',
'password.string'=>'密码中含有非法文字',
'password.min' => '密码不小于5字符.',
'name.required'=>'名称必须填写',
'name.min' => '名称不小于5字符.',
];
... ...
... ... @@ -2,8 +2,6 @@
namespace App\Models;
use App\Models\File\Image;
use App\Services\CosService;
use Illuminate\Database\Eloquent\Model;
class Base extends Model
{
... ...
... ... @@ -13,22 +13,6 @@ class DeployBuild extends Base
protected $table = 'gl_project_deploy_build';
public function setPlanAttribute($value){
$this->attributes['plan'] = Arr::arrToSet($value, 'trim');
}
public function getPlanAttribute($value){
return Arr::setToArr($value, 'trim');
}
// public function getTestDomainAttribute(): string
// {
// $hashids = new Hashids('test_domain', 5, 'abcdefghjkmnpqrstuvwxyz1234567890');
// $code = $hashids->encode($this->project_id);
// return 'https://v6-' . $code . '.globalso.site';
// }
public static function clearCache($row){
$cache_key = 'project_' . $row->original['test_domain'];
Cache::forget($cache_key);
... ...
... ... @@ -136,7 +136,7 @@ Route::middleware(['aloginauth'])->group(function () {
//项目管理
Route::prefix('project')->group(function () {
Route::get('/', [Aside\Project\ProjectController::class, 'list'])->name('admin.project');
Route::get('/', [Aside\Project\ProjectController::class, 'lists'])->name('admin.project');
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');
... ...