作者 刘锟

手动转发询盘

<?php
namespace App\Http\Controllers\Aside\Optimize;
use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\Optimize\InquiryForwardLogic;
class InquiryForwardController extends BaseController
{
/**
* 获取询盘转发列表
* @param InquiryForwardLogic $inquiryForwardLogic
* @author Akun
* @date 2025/02/21 10:55
*/
public function lists(InquiryForwardLogic $inquiryForwardLogic)
{
if (isset($this->param['url'])) {
$this->map['url'] = ['like', '%' . $this->map['url'] . '%'];
}
if (isset($this->param['email'])) {
$this->map['email'] = ['like', '%' . $this->map['email'] . '%'];
}
if (isset($this->param['url_title'])) {
$this->map['url_title'] = ['like', '%' . $this->map['url_title'] . '%'];
}
if (isset($this->param['url_keyword'])) {
$this->map['url_keyword'] = ['like', '%' . $this->map['url_keyword'] . '%'];
}
$lists = $inquiryForwardLogic->getInquiryLists($this->map, $this->page, $this->row, $this->order);
$this->response('success', Code::SUCCESS, $lists);
}
/**
* 获取询盘类型
* @param InquiryForwardLogic $inquiryForwardLogic
* @author Akun
* @date 2025/02/21 11:20
*/
public function getInquiryType(InquiryForwardLogic $inquiryForwardLogic)
{
$list = $inquiryForwardLogic->getType();
$this->response('success', Code::SUCCESS, $list);
}
/**
* 手动转发询盘
* @param InquiryForwardLogic $inquiryForwardLogic
* @throws \App\Exceptions\AsideGlobalException
* @throws \App\Exceptions\BsideGlobalException
* @author Akun
* @date 2025/02/21 14:54
*/
public function forwardInquiry(InquiryForwardLogic $inquiryForwardLogic)
{
$this->validationParam();
$inquiryForwardLogic->inquiryForward();
$this->response('success');
}
/**
* 手动转发询盘:参数验证
* @author Akun
* @date 2025/02/21 14:19
*/
public function validationParam()
{
$this->request->validate([
'id' => 'required',//ID
'name' => 'required',//名称
'email' => 'required',//邮箱
'phone' => 'required',//电话号码
'ip' => 'required',//ip
'forward_url' => 'required',//转发网址
'message' => 'required',//发送内容
'inquiry_diff' => 'required',//发送时区
'inquiry_date' => 'required',//发送时间
], [
'id.required' => 'ID不能为空',
'name.required' => '名称不能为空',
'email.required' => '邮箱不能为空',
'phone.required' => '电话号码不能为空',
'ip.required' => 'ip不能为空',
'forward_url.required' => '转发网址不能为空',
'message.required' => '内容不能为空',
'inquiry_diff.required' => '发送时区不能为空',
'inquiry_date.required' => '发送时间不能为空',
]);
}
}
... ...
<?php
namespace App\Http\Logic\Aside\Optimize;
use App\Http\Logic\Aside\BaseLogic;
use App\Models\Inquiry\InquiryInfo;
use App\Models\Inquiry\InquiryProject;
use App\Models\Inquiry\InquiryRelayDetail;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
/**
* @remark :询盘中心
* @class :InquiryForwardLogic.php
* @author :akun
* @time :2025/2/21 11:17
*/
class InquiryForwardLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->param = $this->requestAll;
$this->model = new InquiryInfo();
}
/**
* 获取类型
* @return array
* @author Akun
* @date 2025/02/21 11:19
*/
public function getType()
{
return $this->success($this->model->typeMap());
}
/**
* 获取列表
* @param $map
* @param $page
* @param $row
* @param string $order
* @param string[] $filed
* @return array
* @author Akun
* @date 2025/02/21 11:19
*/
public function getInquiryLists($map, $page, $row, $order = 'id', $filed = ['*'])
{
$lists = $this->model->lists($map, $page, $row, $order, $filed);
return $this->success($lists);
}
/**
* 转发询盘
* @return array
* @throws \App\Exceptions\AsideGlobalException
* @throws \App\Exceptions\BsideGlobalException
* @author Akun
* @date 2025/02/21 14:54
*/
public function inquiryForward()
{
$info = $this->model->read(['id' => $this->param['id']]);
if ($info === false) {
$this->fail('获取询盘详情失败');
}
if ($info['status'] != InquiryInfo::STATUS_INIT) {
$this->fail('当前询状态无法转发');
}
DB::beginTransaction();
try {
$num = 0;
foreach ($this->param['forward_url'] as $website) {
//获取站点对应项目版本
$project_version = InquiryProject::select(['version'])->where('domain', 'like', '%' . $website . '%')->orWhere('test_domain', 'like', '%' . $website . '%')->first();
if (!$project_version) {
continue;
}
//计算发送时间
if ($this->param['inquiry_diff'] > 0) {
$start_at = date('Y-m-d H:i:s', strtotime($this->param['inquiry_date']) . ' -' . $this->param['inquiry_diff'] . ' hours');
} elseif ($this->param['inquiry_diff'] < 0) {
$start_at = date('Y-m-d H:i:s', strtotime($this->param['inquiry_date']) . ' +' . abs($this->param['inquiry_diff']) . ' hours');
} else {
$start_at = $this->param['inquiry_date'];
}
InquiryRelayDetail::insert([
'form_id' => $info['id'],
'website' => $website,
'country' => $info['country'],
'ip' => $this->param['ip'],
'name' => $this->param['name'],
'email' => $this->param['email'],
'phone' => $this->param['phone'],
'message' => $this->param['message'],
'is_v6' => $project_version->version == 6 ? 1 : 0,
'start_at' => $start_at,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
]);
$num += 1;
}
//更改询盘状态及转发数量
$this->model->edit(['status' => 1, 'num' => $num], ['id' => $this->param['id']]);
DB::commit();
} catch (\Exception $e) {
DB::rollback();
Log::error('inquiry_forward error:' . $e->getMessage());
$this->fail('转发询盘失败');
}
return $this->success();
}
}
... ...
<?php
/**
* Created by PhpStorm.
* User: zhl
* Date: 2024/9/30
* Time: 14:56
*/
namespace App\Models\Inquiry;
use Illuminate\Database\Eloquent\Model;
/**
* 询盘转发详情
* Class ReInquiryDetail
* @package App\Models\Inquiry
*/
class InquiryRelayDetail extends Model
{
/**
* @var string
*/
protected $table = 'gl_inquiry_relay_detail';
/**
* 任务状态, 0:初始化,1:待处理,2:处理成功,3:抛弃数据,9:处理失败
*/
const STATUS_INIT = 0;
const STATUS_PEND = 1;
const STATUS_SUCCESS = 2;
const STATUS_FORGO = 3;
const STATUS_FAIL = 9;
/**
* 状态映射
* @return array
*/
public static function statusMap()
{
return [
self::STATUS_INIT => '初始化',
self::STATUS_PEND => '待处理',
self::STATUS_SUCCESS => '处理成功',
self::STATUS_FORGO => '抛弃数据',
self::STATUS_FAIL => '处理失败',
];
}
/**
* 创建询盘转发详情待处理任务
* @param $task_id
* @param $form_id
* @param $re_website
* @param $country
* @param $ip
* @param $name
* @param $email
* @param $phone
* @param $message
* @param $text_id
* @param $device_port
* @param $user_agent
* @param $referrer
* @param $urls
* @param $is_v6
* @param $start_at
* @param int $status
* @return ReInquiryDetail
*/
public static function createInquiry($task_id, $form_id, $re_website, $country, $ip, $name, $email, $phone, $message, $text_id, $device_port,
$user_agent, $referrer, $urls, $is_v6, $start_at, $status = self::STATUS_INIT, $type = 1)
{
$self = new self();
$self->task_id = $task_id;
$self->form_id = $form_id;
$self->re_website = $re_website;
$self->country = $country;
$self->ip = $ip;
$self->name = $name;
$self->email = $email;
$self->phone = $phone;
$self->message = $message;
$self->text_id = $text_id;
$self->device_port = $device_port;
$self->user_agent = $user_agent;
$self->referrer = $referrer;
$self->urls = json_encode($urls);
$self->is_v6 = $is_v6;
$self->num = count($urls) + 1;
$self->start_at = $start_at;
$self->status = $status;
$self->type = $type;
$self->save();
return $self;
}
/**
* 转发日志详情
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function detailLog()
{
return $this->hasMany(InquiryRelayDetailLog::class, 'detail_id', 'id');
}
}
... ...
<?php
/**
* Created by PhpStorm.
* User: zhl
* Date: 2024/10/08
* Time: 14:10
*/
namespace App\Models\Inquiry;
use Illuminate\Database\Eloquent\Model;
/**
* 转发详情日志
* Class ReInquiryDetailLog
* @package App\Models\Inquiry
*/
class InquiryRelayDetailLog extends Model
{
/**
* @var string
*/
protected $table = 'gl_inquiry_relay_detail_log';
/**
* 任务状态, 0:初始化,1:待处理,2:处理成功,9:处理失败
*/
const STATUS_INIT = 0;
const STATUS_PEND = 1;
const STATUS_SUCCESS = 2;
const STATUS_FAIL = 9;
/**
* 执行类型, 1:访问, 2:询盘
*/
const TYPE_VISIT = 1;
const TYPE_INQUIRY = 2;
/**
* 状态映射
* @return array
*/
public static function statusMap()
{
return [
self::STATUS_INIT => '初始化',
self::STATUS_PEND => '待处理',
self::STATUS_SUCCESS => '处理成功',
self::STATUS_FAIL => '处理失败',
];
}
/**
* 创建转发详情日志
* @param $detail_id
* @param $type
* @param $pre
* @param $url
* @param $start_at
* @return ReInquiryDetailLog
*/
public static function createInquiryLog($detail_id, $type, $pre, $url, $start_at)
{
$self = self::where(compact('detail_id', 'type', 'pre'))->first();
if ($self)
return $self;
$self = new self();
$self->detail_id = $detail_id;
$self->type = $type;
$self->pre = $pre;
$self->url = $url;
$self->start_at = $start_at;
$self->save();
return $self;
}
}
... ...
... ... @@ -340,6 +340,13 @@ Route::middleware(['aloginauth'])->group(function () {
Route::any('/getInternalCount', [Aside\Optimize\InquiryInfoController::class, 'getInternalCount'])->name('admin.inquiry_getInternalCount');
});
//手动转发询盘
Route::prefix('inquiry_forward')->group(function () {
Route::any('/', [Aside\Optimize\InquiryForwardController::class, 'lists'])->name('admin.inquiry_lists');
Route::any('/getInquiryType', [Aside\Optimize\InquiryForwardController::class, 'getInquiryType'])->name('admin.inquiry_getInquiryType');
Route::any('/forwardInquiry', [Aside\Optimize\InquiryForwardController::class, 'forwardInquiry'])->name('admin.inquiry_forwardInquiry');
});
Route::prefix('custom_module')->group(function () {
Route::any('/', [\App\Http\Controllers\Aside\CustomModule\CustomModuleController::class, 'lists'])->name('custom_lists');
Route::any('/save', [\App\Http\Controllers\Aside\CustomModule\CustomModuleController::class, 'save'])->name('custom_save');
... ...