77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
<?php
 | 
						|
 | 
						|
namespace app\controller\api;
 | 
						|
 | 
						|
use app\model\AccountFootmarks;
 | 
						|
use app\model\Event;
 | 
						|
use Exception;
 | 
						|
use think\db\exception\DataNotFoundException;
 | 
						|
use think\db\exception\DbException;
 | 
						|
use think\db\exception\ModelNotFoundException;
 | 
						|
use think\response\Json;
 | 
						|
 | 
						|
class Statistics extends Base
 | 
						|
{
 | 
						|
    protected $noNeedLogin = ['event'];
 | 
						|
    /**
 | 
						|
     * 事件列表
 | 
						|
     *
 | 
						|
     * @return Json
 | 
						|
     * @throws DataNotFoundException
 | 
						|
     * @throws DbException
 | 
						|
     * @throws ModelNotFoundException
 | 
						|
     */
 | 
						|
    public function event(): Json
 | 
						|
    {
 | 
						|
        $data = Event::field('id, name')->select()->toArray();
 | 
						|
 | 
						|
        return $this->json(0, 'success', $data);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 上报
 | 
						|
     *
 | 
						|
     * @return Json
 | 
						|
     * @throws Exception
 | 
						|
     */
 | 
						|
    public function report(): Json
 | 
						|
    {
 | 
						|
        $data      = input();
 | 
						|
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						|
 | 
						|
        if (empty($data)) {
 | 
						|
            return $this->json();
 | 
						|
        }
 | 
						|
 | 
						|
        if (!is_array($data)) {
 | 
						|
            $data = json_decode($data, true);
 | 
						|
        }
 | 
						|
 | 
						|
        $insert = [];
 | 
						|
        if (count($data) > 1000) {
 | 
						|
            //TODO 太大就分片处理
 | 
						|
 | 
						|
        } else {
 | 
						|
            foreach ($data as $d) {
 | 
						|
                if (!isset($d['e']) || !isset($d['t'])) {
 | 
						|
                    return $this->json(4001, '参数错误');
 | 
						|
                }
 | 
						|
                $arr               = [];
 | 
						|
                $arr['event_id']   = (int) ($d['e'] ?? 0);
 | 
						|
                $arr['account_id'] = $accountId;
 | 
						|
                $arr['content_id'] = (int) ($d['c'] ?? 0);
 | 
						|
                $t = (strlen($d['t']) == 13) ?  $d['t'] / 1000 : $d['t'];
 | 
						|
                $arr['created_at'] = date('Y-m-d H:i:s', $t);
 | 
						|
 | 
						|
                $insert[] = $arr;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        // 若量大 时间长 可丢入队列操作
 | 
						|
        if (count($insert) > 0) {
 | 
						|
            (new AccountFootmarks())->saveAll($insert);
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->json();
 | 
						|
    }
 | 
						|
} |