|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
|
|
|
|
use App\Helper\Arr;
|
|
|
|
use App\Helper\Common;
|
|
|
|
use App\Helper\OaGlobalsoApi;
|
|
|
|
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\Database\Eloquent\Model;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
use Illuminate\Support\Facades\Http;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 同步项目信息
|
|
|
|
* Class ChannelInfo
|
|
|
|
* @package App\Console\Commands
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/6/27
|
|
|
|
*/
|
|
|
|
class SyncProject extends Command
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* The name and signature of the console command.
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $signature = 'sync_project';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The console command description.
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $description = '同步项目信息';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a new command instance.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
parent::__construct();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
public function handle()
|
|
|
|
{
|
|
|
|
while (true){
|
|
|
|
$list = NoticeLog::where('type', NoticeLog::TYPE_PROJECT)->where('status', NoticeLog::STATUS_PENDING)->get();
|
|
|
|
foreach ($list as $item){
|
|
|
|
try {
|
|
|
|
$api = new OaGlobalsoApi();
|
|
|
|
$data = $api->order_info($item['data']['order_id']);
|
|
|
|
if(!$data || empty($data['data'])){
|
|
|
|
LogUtils::error('OaGlobalsoApi order_info error', $data);
|
|
|
|
$this->retry($item);
|
|
|
|
}
|
|
|
|
if($data['data']['order_type'] == '首次'){
|
|
|
|
$this->sync($data['data']);
|
|
|
|
|
|
|
|
//同步aicc
|
|
|
|
if($data['data']['exclusive_aicc']){
|
|
|
|
$this->toAicc($data['data']);
|
|
|
|
}
|
|
|
|
//同步hagro
|
|
|
|
if($data['data']['exclusive_hagro']){
|
|
|
|
$this->toHagro($data['data']);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if($data['data']['order_type'] == '续费'){
|
|
|
|
$this->renewSync($data['data']);
|
|
|
|
}
|
|
|
|
$item->status = NoticeLog::STATUS_SUCCESS;
|
|
|
|
$item->save();
|
|
|
|
}catch (\Exception $e){
|
|
|
|
errorLog('项目同步失败', $item, $e);
|
|
|
|
$this->retry($item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sleep(2);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param NoticeLog $log
|
|
|
|
*/
|
|
|
|
public function retry($log){
|
|
|
|
if($log->retry >= 3){
|
|
|
|
$log->status = NoticeLog::STATUS_FAIL;
|
|
|
|
}else{
|
|
|
|
$log->retry = $log->retry + 1;
|
|
|
|
}
|
|
|
|
$log->save();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @remark :同步续费记录单
|
|
|
|
* @name :renewSync
|
|
|
|
* @author :lyh
|
|
|
|
* @method :post
|
|
|
|
* @time :2023/8/11 15:33
|
|
|
|
*/
|
|
|
|
public function renewSync($param){
|
|
|
|
$title = date('Ymd') . '-' . $param['company_name'];;
|
|
|
|
$data = [
|
|
|
|
'title' => '【续费单】'.$title,
|
|
|
|
'company' => $param['company_name'],
|
|
|
|
'lead_name' => $param['principal_name'],
|
|
|
|
'mobile' => $param['principal_mobile'],
|
|
|
|
'qq' => $param['customer_qq'],
|
|
|
|
'channel' => json_encode(Channel::getProjectChannel($param['company_id'], $param['username_sales'])),
|
|
|
|
'requirement' => $param['remark'],
|
|
|
|
'cooperate_date' => date('Y-m-d', $param['create_time']),
|
|
|
|
'service_duration' => $param['years'],
|
|
|
|
'plan' => $this->versionData($param['plan_marketing']),
|
|
|
|
// 'api_no' => $param['id'], //改手动填
|
|
|
|
'amount' => $param['plan_price'],
|
|
|
|
'contract' => json_encode($param['files']),
|
|
|
|
'bill' => json_encode($param['images']),
|
|
|
|
];
|
|
|
|
$renewModel = new ProjectRenew();
|
|
|
|
$rs = $renewModel->add($data);
|
|
|
|
if($rs === false){
|
|
|
|
errorLog('项目续费单同步失败');
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @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 :导入数据
|
|
|
|
* @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']),
|
|
|
|
'from_order_id' => $param['from_order_id'],
|
|
|
|
'aicc' => $param['exclusive_aicc'],
|
|
|
|
"exclusive_aicc_day" => $param['exclusive_aicc_day'],
|
|
|
|
'hagro' => $param['exclusive_hagro'],
|
|
|
|
"exclusive_hagro_day" => $param['exclusive_hagro_day'],
|
|
|
|
'notice_order_id' => $param['id'],
|
|
|
|
],
|
|
|
|
'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();
|
|
|
|
throw new \Exception($e->getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @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['channel']) && !empty($param['channel'])){
|
|
|
|
$param['channel'] = Arr::a2s($param['channel']);
|
|
|
|
}
|
|
|
|
$projectModel = new Project();
|
|
|
|
$info = $projectModel->read(['from_order_id'=>$param['from_order_id'],'delete_status'=>0]);
|
|
|
|
if($info !== false){
|
|
|
|
$projectModel->edit($param, ['id' => $info['id']]);
|
|
|
|
return $info['id'];
|
|
|
|
}else{
|
|
|
|
return $projectModel->addReturnId($param);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 保存优化部署
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/4/26
|
|
|
|
*/
|
|
|
|
protected function saveAfter($param,$id){
|
|
|
|
$param['project_id'] = $id;
|
|
|
|
//查询数据是否存在
|
|
|
|
$afterModel = new After();
|
|
|
|
$info = $afterModel->read(['project_id'=>$id]);
|
|
|
|
if($info !== false){
|
|
|
|
$afterModel->edit($param,['id'=>$info['id']]);
|
|
|
|
}else{
|
|
|
|
$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['contract']) && !empty($param['contract'])){
|
|
|
|
$param['contract'] = Arr::a2s($param['contract']);
|
|
|
|
// }
|
|
|
|
// if(isset($param['bill']) && !empty($param['bill'])){
|
|
|
|
$param['bill'] = Arr::a2s($param['bill']);
|
|
|
|
// }
|
|
|
|
$info = $paymentModel->read(['project_id'=>$id]);
|
|
|
|
if($info !== false){
|
|
|
|
$paymentModel->edit($param,['id'=>$info['id']]);
|
|
|
|
}else{
|
|
|
|
$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();
|
|
|
|
$info = $deployBuildModel->read(['project_id'=>$id]);
|
|
|
|
if($info !== false){
|
|
|
|
$deployBuildModel->edit($param,['id'=>$info['id']]);
|
|
|
|
}else{
|
|
|
|
$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;
|
|
|
|
$deployOptimizeModel = new DeployOptimize();
|
|
|
|
$info = $deployOptimizeModel->read(['project_id'=>$id]);
|
|
|
|
if($info !== false){
|
|
|
|
$deployOptimizeModel->edit($param,['id'=>$info['id']]);
|
|
|
|
}else{
|
|
|
|
$deployOptimizeModel->add($param);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 同步到AICC
|
|
|
|
* @param $data
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/9/1
|
|
|
|
*/
|
|
|
|
protected function toAicc($data){
|
|
|
|
$url = 'https://biz.ai.cc/api/sync_company_for_order';
|
|
|
|
$param = [
|
|
|
|
'company_name' => $data['company_name'],
|
|
|
|
'company_address' => '',
|
|
|
|
'company_tel' => $data['principal_mobile'],
|
|
|
|
'company_email' => '',
|
|
|
|
'remark' => $data['remark'],
|
|
|
|
'level_id' => 6,
|
|
|
|
'level_day' => $data['exclusive_aicc_day'] ?: 1,
|
|
|
|
'from_order_id' => $data['from_order_id'],
|
|
|
|
];
|
|
|
|
|
|
|
|
//sign
|
|
|
|
ksort($param);
|
|
|
|
$tem = [];
|
|
|
|
foreach ($param as $key => $val) {
|
|
|
|
$tem[] = $key . '=' . urlencode($val);
|
|
|
|
}
|
|
|
|
$string = implode('&', $tem);
|
|
|
|
$key = md5('quanqiusou.com');
|
|
|
|
$param['sign'] = md5($string . $key);
|
|
|
|
$res = Http::withoutVerifying()->post($url, $param)->json();
|
|
|
|
if(empty($res['status']) || $res['status'] != 200){
|
|
|
|
LogUtils::error('ProjectToAicc error', $res);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 同步到Hagro
|
|
|
|
* @param $data
|
|
|
|
* @author zbj
|
|
|
|
* @date 2023/9/1
|
|
|
|
*/
|
|
|
|
protected function toHagro($data){
|
|
|
|
$url = 'https://admin.hagro.cn/globalso/create_project';
|
|
|
|
$param = [
|
|
|
|
'company' => $data['company_name'],
|
|
|
|
'phone' => $data['principal_mobile'],
|
|
|
|
'planday' => $data['exclusive_aicc_day'] ?: 1,
|
|
|
|
'from_order_id' => $data['from_order_id'],
|
|
|
|
];
|
|
|
|
$common = new Common();
|
|
|
|
$token = $common->encrypt($param);
|
|
|
|
$res = Http::withoutVerifying()->get($url, ['token' => $token])->json();
|
|
|
|
if(empty($res['code']) || $res['code'] != 200){
|
|
|
|
LogUtils::error('ProjectToHagro error', $res);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} |
...
|
...
|
|