流量池服务端
This commit is contained in:
135
Server/application/common/model/TrafficPoolSource.php
Normal file
135
Server/application/common/model/TrafficPoolSource.php
Normal file
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
namespace app\common\model;
|
||||
|
||||
use think\Model;
|
||||
|
||||
/**
|
||||
* 流量来源表模型类
|
||||
* 表名:ck_traffic_pool_source
|
||||
* 用途:记录流量的获取渠道和来源路径
|
||||
*/
|
||||
class TrafficPoolSource extends Model
|
||||
{
|
||||
// 设置数据表名
|
||||
protected $name = 'traffic_pool_source';
|
||||
|
||||
// 主键
|
||||
protected $pk = 'id';
|
||||
|
||||
// 自动写入时间戳
|
||||
protected $autoWriteTimestamp = true;
|
||||
protected $createTime = 'createTime';
|
||||
protected $updateTime = 'updateTime';
|
||||
|
||||
// 来源类型常量
|
||||
const SOURCE_TYPE_FRIEND_ADD = 1; // 好友添加
|
||||
const SOURCE_TYPE_GROUP_MEMBER = 2; // 群成员
|
||||
const SOURCE_TYPE_POSTER = 3; // 海报获客
|
||||
const SOURCE_TYPE_PHONE = 4; // 电话获客
|
||||
const SOURCE_TYPE_ORDER = 5; // 订单获客
|
||||
const SOURCE_TYPE_API = 6; // API导入
|
||||
const SOURCE_TYPE_MANUAL = 7; // 手动导入
|
||||
const SOURCE_TYPE_FISSION = 8; // 裂变活动
|
||||
|
||||
// 来源类型名称映射
|
||||
const SOURCE_TYPE_NAMES = [
|
||||
self::SOURCE_TYPE_FRIEND_ADD => '好友添加',
|
||||
self::SOURCE_TYPE_GROUP_MEMBER => '群成员',
|
||||
self::SOURCE_TYPE_POSTER => '海报获客',
|
||||
self::SOURCE_TYPE_PHONE => '电话获客',
|
||||
self::SOURCE_TYPE_ORDER => '订单获客',
|
||||
self::SOURCE_TYPE_API => 'API导入',
|
||||
self::SOURCE_TYPE_MANUAL => '手动导入',
|
||||
self::SOURCE_TYPE_FISSION => '裂变活动',
|
||||
];
|
||||
|
||||
/**
|
||||
* 关联公司流量详情
|
||||
*/
|
||||
public function poolCompany()
|
||||
{
|
||||
return $this->belongsTo(TrafficPoolCompany::class, 'poolCompanyId', 'id');
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取额外信息
|
||||
* @param string $value
|
||||
* @return array
|
||||
*/
|
||||
public function getExtraAttr($value)
|
||||
{
|
||||
return $value ? json_decode($value, true) : [];
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置额外信息
|
||||
* @param array $value
|
||||
* @return string
|
||||
*/
|
||||
public function setExtraAttr($value)
|
||||
{
|
||||
return $value ? json_encode($value, JSON_UNESCAPED_UNICODE) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取来源类型名称
|
||||
* @return string
|
||||
*/
|
||||
public function getSourceTypeNameAttr()
|
||||
{
|
||||
return self::SOURCE_TYPE_NAMES[$this->sourceType] ?? '未知来源';
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建来源记录
|
||||
* @param int $poolCompanyId
|
||||
* @param string $identifier
|
||||
* @param int $companyId
|
||||
* @param int $sourceType
|
||||
* @param array $data
|
||||
* @return static
|
||||
*/
|
||||
public static function createSource(int $poolCompanyId, string $identifier, int $companyId, int $sourceType, array $data = [])
|
||||
{
|
||||
// 检查是否为首次来源
|
||||
$existSource = self::where('poolCompanyId', $poolCompanyId)->find();
|
||||
$isFirstSource = $existSource ? 0 : 1;
|
||||
|
||||
$insertData = array_merge([
|
||||
'poolCompanyId' => $poolCompanyId,
|
||||
'identifier' => $identifier,
|
||||
'companyId' => $companyId,
|
||||
'sourceType' => $sourceType,
|
||||
'isFirstSource' => $isFirstSource,
|
||||
'createTime' => time(),
|
||||
], $data);
|
||||
|
||||
$source = self::create($insertData);
|
||||
|
||||
// 如果是首次来源,更新公司流量详情表
|
||||
if ($isFirstSource) {
|
||||
TrafficPoolCompany::where('id', $poolCompanyId)->update([
|
||||
'firstSourceType' => $sourceType,
|
||||
'firstSourceTime' => time(),
|
||||
'updateTime' => time()
|
||||
]);
|
||||
}
|
||||
|
||||
return $source;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取流量的所有来源
|
||||
* @param int $poolCompanyId
|
||||
* @return \think\Collection
|
||||
*/
|
||||
public static function getSourcesByPoolCompany(int $poolCompanyId)
|
||||
{
|
||||
return self::where('poolCompanyId', $poolCompanyId)
|
||||
->order('createTime DESC')
|
||||
->select();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user