作者 赵彬吉

update

... ... @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Bside\Inquiry;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Inquiry\InquiryLogic;
use App\Models\Inquiry\InquiryForm;
use App\Rules\Ids;
use App\Services\BatchExportService;
use Illuminate\Http\Request;
... ... @@ -20,9 +21,24 @@ use Illuminate\Support\Facades\Storage;
class InquiryController extends BaseController
{
public function form_list(){
$list = InquiryForm::where('is_default', 0)->get();
$data = $list->toArray();
foreach ($data as &$item){
$field_text = [];
foreach ($item['field'] as $v){
$field_text[$v] = InquiryForm::fieldMap($v);
}
$item['field_text'] = $field_text;
}
return $this->success($data);
}
public function index(InquiryLogic $logic)
{
if(($this->param['type']??'') == 'other'){
if(!empty($this->param['form_id'])){
$data = $logic->getFormDataList();
}elseif(($this->param['type']??'') == 'other'){
$data = $logic->getOtherList();
}else{
$data = $logic->getApiList();
... ... @@ -36,7 +52,10 @@ class InquiryController extends BaseController
],[
'id.required' => 'ID不能为空'
]);
if(($this->param['type']??'') == 'other'){
if(!empty($this->param['form_id'])){
$data = $logic->getFormDataInfo($this->param['id'], $this->param['form_id']);
}elseif(($this->param['type']??'') == 'other'){
$data = $logic->getOtherInfo($this->param['id']);
}else{
$data = $logic->getInfo($this->param['id']);
... ... @@ -52,7 +71,9 @@ class InquiryController extends BaseController
],[
'ids.required' => 'ID不能为空'
]);
if(($this->param['type']??'') == 'other'){
if(!empty($this->param['form_id'])){
$logic->deleteFormData($this->param['ids'], ['form_id' => $this->param['form_id']]);
}elseif(($this->param['type']??'') == 'other'){
$logic->deleteOther($this->param['ids']);
}else{
$logic->delete($this->param['ids']);
... ... @@ -71,13 +92,24 @@ class InquiryController extends BaseController
*/
public function export(InquiryLogic $logic)
{
if(($this->param['type']??'') == 'other'){
if(!empty($this->param['form_id'])){
$data = $logic->getFormDataList(true);
$field = InquiryForm::getField($this->param['form_id']);
$map = [
'submit_time' => '询盘发送时间',
];
foreach ($field as $v) {
$map[$v] = InquiryForm::fieldMap($v);
}
$map['ip_address'] = '访问国家/地区(IP)';
$map['refer'] = '发送页面';
}elseif(($this->param['type']??'') == 'other'){
$data = $logic->getOtherList(true);
$map = [
'submit_time' => '询盘发送时间',
'email' => '邮箱',
'ip_address' => '访问国家/地区(IP)',
'referer' => '发送页面',
'refer' => '发送页面',
];
}else{
$data = $logic->getApiList(true);
... ... @@ -95,6 +127,10 @@ class InquiryController extends BaseController
$data = $data['list'] ?? [];
foreach ($data as &$item){
$item['ip_address'] = "{$item['country']}({$item['ip']})";
if(!empty($this->param['form_id'])){
$item = array_merge($item, $item['data']);
}
}
//生成文件,发送到客户端
... ...
... ... @@ -8,8 +8,9 @@ use App\Helper\Translate;
use App\Http\Logic\Aside\Project\ProjectLogic;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Domain\DomainInfo;
use App\Models\Inquiry\InquiryForm;
use App\Models\Inquiry\InquiryFormData;
use App\Models\Inquiry\InquiryOther;
use App\Services\ProjectServer;
use Illuminate\Support\Facades\DB;
/**
... ... @@ -68,7 +69,6 @@ class InquiryLogic extends BaseLogic
if($search){
$map['email'] = ['like','%'.$search.'%'];
}
ProjectServer::useProject($this->user['project_id']);
$data = (new InquiryOther())->lists($map,$page,$page_size,'id',
['id', 'email', 'ip', 'country', 'domain', DB::raw('referer as refer'), DB::raw('status as read_status'), 'submit_time']
... ... @@ -77,6 +77,27 @@ class InquiryLogic extends BaseLogic
return $this->success($data);
}
public function getFormDataList($export = false){
$page_size = $export ? 1000 : 20;
$search = $this->request['search'] ?: '';
$page = $this->request['page'] ?: 1;
$form_id = $this->request['form_id'] ?? '';
$field = InquiryForm::getField($form_id);
$map = [
'form_id' => $form_id
];
if($search){
foreach ($field as $v){
$map['data->' . $v] = $search;
}
}
$fields = ['id', 'data', 'ip', 'country', 'domain', DB::raw('referer as refer'), DB::raw('status as read_status'), DB::raw('submit_at as submit_time')];
$lists = InquiryFormData::select($fields)->orderBy('id')->paginate($page_size, ['*'], 'page', $page);
$data = $lists->toArray();
return $this->success($data);
}
public function getInfo($id)
{
$project = (new ProjectLogic())->getProjectInfo($this->user['project_id']);
... ... @@ -93,10 +114,22 @@ class InquiryLogic extends BaseLogic
return $this->success(['trans_message' => $trans_message]);
}
public function getFormDataInfo($id, $form_id){
//修改状态为已读
if($this->request['read_status']){
(new InquiryFormData())->edit(['status' => 1], ['id' => $id, 'form_id' => $form_id]);
}
//翻译
$trans_message = '';
if($this->request['message']){
$trans_message = Translate::tran($this->request['message'], 'zh');
}
return $this->success(['trans_message' => $trans_message]);
}
public function getOtherInfo($id){
//修改状态为已读
if($this->request['read_status']){
ProjectServer::useProject($this->user['project_id']);
(new InquiryOther())->edit(['status' => 1], ['id' => $id]);
}
return $this->success(['trans_message' => '']);
... ... @@ -120,11 +153,21 @@ class InquiryLogic extends BaseLogic
if(!$ids){
$this->fail('ID不能为空');
}
ProjectServer::useProject($this->user['project_id']);
(new InquiryOther())->del(['id'=>['in',$ids]]);
return $this->success();
}
public function deleteFormData($ids, $map = [])
{
$ids = array_filter(Arr::splitFilterToArray($ids), 'intval');
if(!$ids){
$this->fail('ID不能为空');
}
$map['id'] = ['in',$ids];
(new InquiryFormData())->del($map);
return $this->success();
}
}
... ...
<?php
namespace App\Models\Inquiry;
use App\Models\Base;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Cache;
/**
* Class InquiryForm
* @package App\Models\Inquiry
* @author zbj
* @date 2023/12/5
*/
class InquiryForm extends Base
{
use SoftDeletes;
//设置关联表名
/**
* @var mixed
*/
protected $connection = "custom_mysql";
protected $table = 'gl_inquiry_form';
/**
* 预设字段名称
* @author zbj
* @date 2023/12/5
*/
public static function fieldMap($field = ''){
$map = [
'name' => '姓名',
'email' => '邮箱',
'phone' => '电话',
'mobile' => '电话',
'message' => '询盘内容',
'company' => '公司名称'
];
if($field){
return $map[$field] ?? $field;
}
return $map;
}
public function getFieldAttribute($value)
{
return json_decode($value, true);
}
/**
* @author zbj
* @date 2023/12/5
*/
public static function getField($form_id){
$cache_key = 'inquiry_form_field_' . $form_id;
$field = Cache::get($cache_key);
if(!$field){
$field = self::where('id', $form_id)->value('field');
$field && Cache::set($cache_key, $field, 3600);
}
return $field;
}
}
... ...
<?php
namespace App\Models\Inquiry;
use App\Models\Base;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class InquiryFormData
* @package App\Models\Inquiry
* @author zbj
* @date 2023/12/4
*/
class InquiryFormData extends Base
{
use SoftDeletes;
//设置关联表名
/**
* @var mixed
*/
protected $connection = "custom_mysql";
protected $table = 'gl_inquiry_form_data';
public function getDataAttribute($value)
{
return json_decode($value, true);
}
}
... ...
... ... @@ -78,9 +78,17 @@ class RouteMap extends Base
if(in_array($route, $fixed)){
return true;
}
$path = '';
if($source == self::SOURCE_NEWS){
$path = self::SOURCE_NEWS;
}elseif ($source == self::SOURCE_BLOG){
$path = self::SOURCE_BLOG.'s';
}
$where = [
'project_id' => $project_id,
'route' => $route,
'path' => $path,
];
$route = self::where($where)->first();
if($route){
... ...
... ... @@ -271,6 +271,7 @@ Route::middleware(['bloginauth'])->group(function () {
//精准询盘
Route::prefix('inquiry')->group(function () {
Route::get('/', [\App\Http\Controllers\Bside\Inquiry\InquiryController::class, 'index'])->name('inquiry');
Route::get('/form_list', [\App\Http\Controllers\Bside\Inquiry\InquiryController::class, 'form_list'])->name('inquiry_form_list');
Route::get('/info', [\App\Http\Controllers\Bside\Inquiry\InquiryController::class, 'info'])->name('inquiry_info');
Route::any('/delete', [\App\Http\Controllers\Bside\Inquiry\InquiryController::class, 'delete'])->name('inquiry_delete');
Route::any('/export', [\App\Http\Controllers\Bside\Inquiry\InquiryController::class, 'export'])->name('inquiry_export');
... ...