一些提交
This commit is contained in:
@@ -16,4 +16,9 @@ Route::group('v1/', function () {
|
||||
Route::group('traffic/tags', function () {
|
||||
Route::get('', 'app\\plan\\controller\\TrafficTag@index'); // 获取标签列表
|
||||
});
|
||||
|
||||
// 流量池相关
|
||||
Route::group('traffic/pool', function () {
|
||||
Route::post('import', 'app\\plan\\controller\\TrafficPool@importOrders'); // 导入订单标签
|
||||
});
|
||||
})->middleware(['jwt']);
|
||||
71
Server/application/plan/controller/TrafficPool.php
Normal file
71
Server/application/plan/controller/TrafficPool.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
namespace app\plan\controller;
|
||||
|
||||
use think\Controller;
|
||||
use think\facade\Request;
|
||||
use app\plan\model\TrafficPool as TrafficPoolModel;
|
||||
use app\plan\model\TrafficSource;
|
||||
|
||||
/**
|
||||
* 流量池控制器
|
||||
*/
|
||||
class TrafficPool extends Controller
|
||||
{
|
||||
/**
|
||||
* 导入订单标签
|
||||
*
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function importOrders()
|
||||
{
|
||||
try {
|
||||
// 获取请求数据
|
||||
$data = Request::post();
|
||||
|
||||
// 验证必要字段
|
||||
if (empty($data['mobile']) || empty($data['from']) || empty($data['sceneId'])) {
|
||||
return json([
|
||||
'code' => 400,
|
||||
'msg' => '缺少必要参数'
|
||||
]);
|
||||
}
|
||||
|
||||
// 批量处理数据
|
||||
$successCount = 0;
|
||||
$failCount = 0;
|
||||
|
||||
foreach ($data['mobile'] as $index => $mobile) {
|
||||
// 导入到流量池
|
||||
$poolData[] = [
|
||||
'mobile' => $mobile,
|
||||
'from' => $data['from'][$index] ?? '',
|
||||
'createTime' => time()
|
||||
];
|
||||
|
||||
// 导入到流量来源
|
||||
$sourceData[] = [
|
||||
'mobile' => $mobile,
|
||||
'sceneId' => $data['sceneId'],
|
||||
'createTime' => time()
|
||||
];
|
||||
}
|
||||
|
||||
new
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '导入完成',
|
||||
'data' => [
|
||||
'success' => $successCount,
|
||||
'fail' => $failCount
|
||||
]
|
||||
]);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return json([
|
||||
'code' => 500,
|
||||
'msg' => '导入失败:' . $e->getMessage()
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
60
Server/application/plan/model/BaseModel.php
Normal file
60
Server/application/plan/model/BaseModel.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace app\plan\model;
|
||||
|
||||
use think\Model;
|
||||
|
||||
class BaseModel extends Model
|
||||
{
|
||||
// 数据插入 duplicate
|
||||
public function insertAllDuplicate($data, $duplicate = null, $limit = null)
|
||||
{
|
||||
if (!empty($duplicate)) {
|
||||
if (is_array($duplicate)) {
|
||||
$temp = [];
|
||||
foreach ($duplicate as $key => $item) {
|
||||
if (is_integer($key)) {
|
||||
$temp[] = "{$item} = VALUES({$item})";
|
||||
} else {
|
||||
$temp[] = "{$key} = {$item}";
|
||||
}
|
||||
}
|
||||
$duplicate = implode(',', $temp);
|
||||
}
|
||||
}
|
||||
if (!empty($limit)) {
|
||||
// 分批写入 自动启动事务支持
|
||||
$this->startTrans();
|
||||
|
||||
try {
|
||||
// array_chunk 函数把数组分割为新的数组块。
|
||||
//其中每个数组的单元数目由 size 参数决定。最后一个数组的单元数目可能会少几个。
|
||||
//可选参数 preserve_key 是一个布尔值,它指定新数组的元素是否有和原数组相同的键(用于关联数组),还是从 0 开始的新数字键(用于索引数组)。默认是分配新的键。
|
||||
$array = array_chunk($data, $limit, true);
|
||||
$count = 0;
|
||||
|
||||
foreach ($array as $item) {
|
||||
$sql = $this->fetchSql(true)->insertAll($item);
|
||||
$sql = preg_replace("/INSERT\s*INTO\s*/", "INSERT IGNORE INTO ", $sql);
|
||||
if (is_string($duplicate)) {
|
||||
$sql = $sql . ' ON DUPLICATE KEY UPDATE ' . $duplicate;
|
||||
}
|
||||
$count += $this->execute($sql); // 获取影响函数
|
||||
}
|
||||
// 提交事务
|
||||
$this->commit();
|
||||
} catch (\Exception $e) {
|
||||
$this->rollback();
|
||||
throw $e;
|
||||
}
|
||||
return $count;
|
||||
} else {
|
||||
$sql = $this->fetchSql(true)->insertAll($data);
|
||||
$sql = preg_replace("/INSERT\s*INTO\s*/", "INSERT IGNORE INTO ", $sql);
|
||||
if (is_string($duplicate)) {
|
||||
$sql = $sql . ' ON DUPLICATE KEY UPDATE ' . $duplicate;
|
||||
}
|
||||
return $this->execute($sql);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,10 @@
|
||||
<?php
|
||||
namespace app\plan\model;
|
||||
|
||||
use think\Model;
|
||||
|
||||
/**
|
||||
* 流量池模型
|
||||
*/
|
||||
class TrafficPool extends Model
|
||||
class TrafficPool extends BaseModel
|
||||
{
|
||||
// 设置表名
|
||||
protected $name = 'traffic_pool';
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
<?php
|
||||
namespace app\plan\model;
|
||||
|
||||
use think\Model;
|
||||
|
||||
/**
|
||||
* 流量来源模型
|
||||
*/
|
||||
class TrafficSource extends Model
|
||||
class TrafficSource extends BaseModel
|
||||
{
|
||||
// 设置表名
|
||||
protected $name = 'traffic_source';
|
||||
|
||||
Reference in New Issue
Block a user