| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- namespace app\v1\logic\tool\advertCost;
- use app\v1\logic\advert\AgentSiteLogic;
- use plugin\saiadmin\app\model\system\SystemUser;
- use support\think\Db;
- abstract class BaseAdvertLogic
- {
- // 媒体消耗(按天数据)
- protected string $dateTable = "media_cost";
- // 媒体消耗(小时数据)
- protected string $hourTable = "media_cost_hour";
- // 媒体消耗(素材数据)
- protected string $materialTable = "media_cost_material";
- protected string $date;
- protected array $advertiserIds=[];
- protected array $siteMap=[];
- protected int $pmid=0;
- private array $adminUserMap=[];
- public function run($params=[])
- {
- // 重跑用,传数组
- if(!empty($params['date'])){
- $sDate = is_array($params['date']) ? $params['date'][0] : $params['date'];
- $eDate = !empty($params['date'][1]) ? $params['date'][1] : $params['date'][0];
- // 检查日期格式是否正确
- if(!isValidDate($sDate) || !isValidDate($eDate)){
- return json_encode(["status"=>"error", "msg"=>"日期格式不正确"], 256);
- }
- }else{
- $sDate = date('Y-m-d');
- $eDate = date('Y-m-d');
- }
- // 重跑用,传数组
- if(!empty($params['advertiser_ids'])){
- $this->advertiserIds = $params['advertiser_ids'];
- }
- // 重跑用,传int
- if(!empty($params['pmid'])){
- $this->pmid = $params['pmid'];
- }
- $this->siteMap = (new AgentSiteLogic())->getSiteAuth();
- $this->adminUserMap = (new SystemUser())->where("nickname","<>", "")->column("nickname", "id");
- for ($date = $sDate; $date <= $eDate; $date = date('Y-m-d', strtotime($date . '+1 day'))){
- $this->date = $date;
- try {
- $this->initStart();
- }catch (\Exception $e){
- return json_encode(["status"=>"error", "msg"=>$e->getMessage()], 256);
- }
- }
- $this->reRun();
- return json_encode(["status"=>"success", "msg"=>""], 256);
- }
- // 重跑
- protected function reRun(): void
- {
- if (date('H') == 8 && date('i') < 20) {
- $this->date = date('Y-m-d', strtotime("-1 days"));
- $this->initStart();
- }
- }
- abstract protected function initStart();
- // Todo 从广告名称中拆分归因数据
- protected function getSiteInfo($adName): array
- {
- $match = [];
- preg_match("/([\d]*)_([\d]*)_([\d]*)/", $adName, $match);
- $siteInfo = [
- "game_id" => $match[1] ?? 0,
- "agent_id" => $match[2] ?? 0,
- "site_id" => $match[3] ?? 0,
- ];
- unset($match);
- return $siteInfo;
- }
- // Todo 从素材名称中获取归属人
- protected function getAuthorId($materialName): int|string
- {
- $auth_id = 0;
- foreach ($this->adminUserMap as $id => $name) {
- $name = mb_substr($name, -2); // 用姓名后两个字匹配,因为有的人素材填写喜欢不带姓
- if ($name && strstr($materialName, $name)) {
- $auth_id = $id;
- break;
- }
- }
- return $auth_id;
- }
- // 获取需要拉取消耗的媒体账户
- protected function getAdvertiserMap($mediaId): array
- {
- $advertiserListTable = "ad_advertiser_list"; // 子账户列表
- $advertiserPmTable = "ad_advertiser_pm"; // 管家户,包含token
- $where = [
- "a.status" => 1,
- "b.status" => 1,
- "a.media_id" => $mediaId
- ];
- if($this->advertiserIds){
- $where['a.advertiser_id'] = $this->advertiserIds;
- }
- if($this->pmid){
- $where['a.pmid'] = $this->pmid;
- }
- $list = Db::connect('db_advert')
- ->table($advertiserListTable)->alias("a")
- ->join("{$advertiserPmTable} b", "a.pmid=b.id")
- ->field("a.*, b.access_token")
- ->where($where)->select()->toArray();
- return $list ? array_column($list, null, "advertiser_id") : [];
- }
- }
|