412 lines
18 KiB
PHP
412 lines
18 KiB
PHP
<?php
|
|
/**
|
|
* Notes:私域通
|
|
* Created on: 2020/11/30 17:00
|
|
* Created by: dengbw
|
|
*/
|
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
|
require_once(COMMPATH . "/third_party/WeChat/WechatServer.php");
|
|
|
|
class Syt extends CI_Controller
|
|
{
|
|
private $log_file = 'plan_syt.log';
|
|
private $log_dir = 'market/sylive';
|
|
private $options;
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->options = [
|
|
'token' => '',
|
|
'appid' => 'wxbdec8558931efffd',
|
|
'appsecret' => '583b3cd0d8e145009eda61ece003ca14',
|
|
'encodingaeskey' => '',
|
|
'debug' => false
|
|
];
|
|
$this->load->model('market/market_sylive_activity_model');
|
|
$this->load->model('live/Live_polyv_session_model', 'mdPolyvSession');
|
|
$this->load->model('live/Live_polyv_viewlog_model', 'mdPolyvViewlog');
|
|
$this->load->library('PolyvApi');
|
|
}
|
|
|
|
/**
|
|
* Notes:发送一次性订阅
|
|
* Created on: 2020/11/30 17:02
|
|
* Created by: dengbw
|
|
* https://liche-api-dev.xiaoyu.com/plan/syt/subscribemsg
|
|
* https://api.liche.cn/plan/syt/subscribemsg
|
|
*/
|
|
public function subscribemsg()
|
|
{
|
|
$this->load->model('market/market_sylive_subscribemsg_model', 'mdSytSubscribemsg');
|
|
$date = date('Y-m-d H:i:s', strtotime('+10 minute'));//提前10分钟发送
|
|
$where['timeStart<='] = $date;
|
|
$where['status'] = 0;
|
|
$res = $this->mdSytSubscribemsg->select($where, 'id asc', 1, 100);
|
|
$log = array();
|
|
if ($res) {
|
|
$this->load->model('market/market_sylive_activity_model', 'mdSytActivity');
|
|
$wechatS = new WechatServer($this->options);
|
|
$wechatS->checkAuth();
|
|
foreach ($res as $key => $value) {
|
|
$re_a = $this->mdSytActivity->get(array("activityId" => $value['a_id'], "status" => 0));
|
|
if ($re_a) {
|
|
$content = '您预约“' . $re_a['title'] . '”直播已经开始啦!赶紧进入直播间观看直播领取福利吧~';
|
|
$temp_arr = array(
|
|
'touser' => $value['openId'],
|
|
'template_id' => $value['templateId'],
|
|
'url' => $value['url'],
|
|
'scene' => $value['scene'],
|
|
'title' => '开播提醒',
|
|
'data' => array(
|
|
'content' => array('value' => $content)
|
|
)
|
|
);
|
|
$re = $wechatS->subscribeTemplateMessage($temp_arr);
|
|
if ($re) {//errcode 0(发送成功) 43101(已发送过)
|
|
$this->mdSytSubscribemsg->update(['status' => 1], ['id' => $value['id']]);
|
|
if ($re['errcode'] == 0) {
|
|
$log[] = $value['a_id'] . '=' . $value['openid'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
echo '<br>数据库获取:';
|
|
echo json_encode($res, JSON_UNESCAPED_UNICODE);
|
|
echo '<br><br>成功发送:';
|
|
$log && print_r($log);
|
|
$total = count($res);
|
|
$do = count($log);
|
|
debug_log("[info] " . __FUNCTION__ . "# date:{$date}; total:{$total}; do:{$do};", $this->log_file);
|
|
}
|
|
|
|
/**
|
|
* Notes:私域通直播间数据同步
|
|
* https://liche-api-dev.xiaoyu.com/plan/syt/syn_polyv
|
|
* https://api.liche.cn/plan/syt/syn_polyv
|
|
* Created on: 2022/9/30 15:05
|
|
* Created by: dengbw
|
|
*/
|
|
public function syn_polyv()
|
|
{
|
|
$a_id = $this->input->get('a_id');
|
|
$where = [
|
|
'status' => 0,
|
|
"channelId <> ''" => null,
|
|
"timeStart<" => date('Y-m-d H:i:s'),
|
|
"timeStart>" => date('Y-m-d H:i:s', strtotime("-1 day"))
|
|
];
|
|
$a_id && $where = ['activityId' => $a_id];
|
|
$rows = $this->market_sylive_activity_model->select($where, 'activityId desc', 1, 20, 'activityId,channelId,timeStart,timeEnd');
|
|
if ($rows) {
|
|
foreach ($rows as $item) {
|
|
debug_log("开始同步{$item['activityId']}活动直播", $this->log_file, $this->log_dir);
|
|
$polyv = new PolyvApi(['channel_id' => $item['channelId']]);
|
|
$pl_where = [
|
|
'startTime' => strtotime($item['timeStart']) * 1000,
|
|
'endTime' => strtotime($item['timeEnd']) * 1000
|
|
];
|
|
$results = $polyv->getSessionStats($pl_where);
|
|
if ($results['status'] == 'success') {
|
|
foreach ($results['data']['list'] as $key => $value) {
|
|
$re = $this->mdPolyvSession->get(['channelId' => $item['channelId'], 'sessionId' => $value['sessionId']]);
|
|
$data = [
|
|
'channelId' => $value['channelId'], 'sessionId' => $value['sessionId'], 'name' => $value['name'],
|
|
'startTime' => $value['startTime'], 'endTime' => $value['endTime'], 'duration' => $value['duration'],
|
|
'liveUV' => $value['liveUV'], 'livePV' => $value['livePV'], 'playbackUV' => $value['playbackUV'],
|
|
'playbackPV' => $value['playbackPV'], 'totalPlayDuration' => $value['totalPlayDuration'],
|
|
'session_time' => date('Y-m-d H:i:s'),
|
|
];
|
|
if ($re) {//同步更新数据
|
|
$session['id'] = $re['id'];
|
|
$this->mdPolyvSession->update($data, ['id' => $re['id']]);
|
|
} else {//新增
|
|
$data['c_time'] = time();
|
|
$session['id'] = $this->mdPolyvSession->add($data);
|
|
}
|
|
}
|
|
$msg = "同步成功:" . json_encode($results, JSON_UNESCAPED_UNICODE);
|
|
echo $msg . "<br>";
|
|
} else {
|
|
$msg = "接口错误:" . $results['message'];
|
|
echo $msg . "<br>";
|
|
|
|
}
|
|
debug_log($msg, $this->log_file, $this->log_dir);
|
|
}
|
|
} else {
|
|
echo "暂无同步数据";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Notes:同步保利威分页查询频道直播观看详情数据
|
|
* Created on: 2022/9/30 14:56
|
|
* Created by: dengbw
|
|
* @param $session
|
|
*/
|
|
public function api_viewlog()
|
|
{
|
|
$session_id = $this->input->get('session_id');
|
|
$redis = &load_cache('redis');
|
|
$ckey = 'PLV_SESSION_LASTID';
|
|
$t1 = 'lc_live_polyv_session';
|
|
$t2 = 'lc_market_sylive_activity';
|
|
$where = [
|
|
"$t2.activityId>" => 0
|
|
];
|
|
if($session_id){
|
|
$where["{$t1}.id"] = $session_id;
|
|
}else{
|
|
$last_id = $redis->get($ckey);
|
|
$last_id && $where["{$t1}.id>"] = $last_id;
|
|
}
|
|
$fileds = "{$t1}.*,{$t2}.activityId";
|
|
$rows = $this->db->select($fileds)->from("$t1")
|
|
->join("$t2", "{$t2}.channelId={$t1}.channelId", 'left')
|
|
->where($where)->order_by("{$t1}.id asc")->limit(1, 0)
|
|
->get()->result_array();
|
|
if($rows){
|
|
foreach ($rows as $key => $val) {
|
|
$p_ckey = "PLV_CID{$val['channelId']}_{$val['sessionId']}_{$val}"; //分页缓存
|
|
$page = $redis->get($p_ckey);
|
|
!$page && $page = 1;
|
|
$s_msg = "开始同步{$val['activityId']}活动直播,频道id:{$val['channelId']},场次id:{$val['sessionId']},分页{$page}";
|
|
debug_log($s_msg, $this->log_file, $this->log_dir);
|
|
echo $s_msg."<br>";
|
|
$params = [
|
|
'channelId' => $val['channelId'],
|
|
'sessionId' => $val['sessionId'],
|
|
'startTime' => $val['startTime'],
|
|
'endTime' => $val['endTime'],
|
|
'page' => $page,
|
|
'pageSize' => 100
|
|
];
|
|
$results = $this->getViewLog($params);
|
|
if ($results['status'] == 'success') {
|
|
if(!$results['data']['lastPage'] && $results['data']['pageNumber'] != $results['data']['nextPageNumber']){
|
|
$redis->save($p_ckey,$results['data']['nextPageNumber'],24*60*60);
|
|
$left_page = $results['data']['totalPages'] - $page;
|
|
$msg = "第:{$page}页同步完成,剩余:{$left_page}页";
|
|
|
|
}else{ //执行结束
|
|
$redis->save($ckey,$val['id']);
|
|
$msg = "同步完成";
|
|
}
|
|
debug_log($msg, $this->log_file, $this->log_dir);
|
|
echo $msg."<br>";
|
|
}else{
|
|
$msg = "接口错误:" . $results['message'];
|
|
echo $msg . "<br>";
|
|
}
|
|
}
|
|
}else{
|
|
echo "不存在需要同步数据";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Notes:增加观看日志
|
|
* Created on: 2022/9/30 14:56
|
|
* Created by: dengbw
|
|
* @param $params
|
|
* @return bool|string
|
|
*/
|
|
private function getViewLog($params)
|
|
{
|
|
$this->load->library('PolyvApi');
|
|
$polyv = new PolyvApi(['channel_id' => $params['channelId']]);
|
|
$results = $polyv->getViewLog($params);
|
|
if ($results['status'] == 'success') {
|
|
$addData = [];
|
|
foreach ($results['data']['contents'] as $key => $value) {
|
|
$re = $this->mdPolyvViewlog->get(['playId' => $value['playId']]);
|
|
$data = [
|
|
'channelId' => $value['channelId'], 'sessionId' => $value['sessionId'], 'playId' => $value['playId'],
|
|
'userId' => $value['userId'], 'playDuration' => $value['playDuration'], 'stayDuration' => $value['stayDuration'],
|
|
'flowSize' => $value['flowSize'], 'param1' => $value['param1'], 'param2' => $value['param2'],
|
|
'param3' => $value['param3'], 'param4' => $value['param4'], 'param5' => $value['param5'], 'ptype' => $value['ptype'],
|
|
'ipAddress' => $value['ipAddress'], 'country' => $value['country'], 'province' => $value['province'],
|
|
'city' => $value['city'], 'isp' => $value['isp'], 'referer' => $value['referer'], 'userAgent' => $value['userAgent'],
|
|
'operatingSystem' => $value['operatingSystem'], 'browser' => $value['browser'], 'isMobile' => $value['isMobile'],
|
|
'currentDay' => $value['currentDay'], 'createdTime' => $value['createdTime'], 'lastModified' => $value['lastModified'],
|
|
];
|
|
if ($re) {//同步更新数据
|
|
$this->mdPolyvViewlog->update($data, ['id' => $re['id']]);
|
|
} else {//新增
|
|
$data['c_time'] = time();
|
|
$addData[] = $data;
|
|
}
|
|
}
|
|
if ($addData && count($addData)) {//新增数据
|
|
$this->mdPolyvViewlog->add_batch($addData);
|
|
}
|
|
}
|
|
return $results;
|
|
}
|
|
//订单过期
|
|
public function out_time(){
|
|
$this->load->model('market/market_sylive_activity_orders_model','mdSytActivityOrders');
|
|
$this->load->model('market/market_sylive_order_model');
|
|
//商家订单过期
|
|
$where = [
|
|
'expireTime>' => 0,
|
|
'expireTime<' => time(),
|
|
'status' => 0
|
|
];
|
|
$this->mdSytActivityOrders->update(['status'=>-1],$where);
|
|
//用户订单过期
|
|
$where = [
|
|
'expire_time>' => 0,
|
|
'expire_time<' => time(),
|
|
'status' => 0
|
|
];
|
|
$rows = $this->market_sylive_order_model->select($where,'id asc',1,20);
|
|
if($rows){
|
|
foreach ($rows as $key => $val) {
|
|
$res = $this->market_sylive_order_model->update(['status'=>-1],['id'=>$val['id']]);
|
|
if($res){
|
|
$up_data = [
|
|
'stock = stock+1' => null
|
|
];
|
|
$this->market_sylive_activity_model->update($up_data,['activityId'=>$val['itemId']]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//关联观看日志
|
|
public function union_user(){
|
|
$this->load->library('market/sylive_entity');
|
|
$this->load->model('market/market_sylive_user_model', 'user_model');
|
|
$this->load->model('market/market_sylive_activity_user_model', 'act_user_model');
|
|
$this->load->model('market/market_sylive_viewlog_model');
|
|
$size = 30;
|
|
$t1 = 'lc_live_polyv_viewlog';
|
|
$t2 = 'lc_market_sylive_activity';
|
|
$t3 = 'lc_market_sylive_viewlog';
|
|
$where = [
|
|
"$t2.activityId>" => 0,
|
|
"$t3.id is null" => null
|
|
];
|
|
$fileds = "{$t1}.*,{$t2}.activityId";
|
|
$rows = $this->db->select($fileds)->from("$t1")
|
|
->join("$t2", "{$t2}.channelId={$t1}.channelId", 'left')
|
|
->join("$t3", "{$t3}.vlogId={$t1}.id", 'left')
|
|
->where($where)->order_by("{$t1}.id asc")->limit($size, 0)
|
|
->get()->result_array();
|
|
if (!$rows) {
|
|
echo "不存在直播日志数据";
|
|
}else{
|
|
foreach ($rows as $key => $value) {
|
|
$ac_user = $p_user = '';
|
|
$addData = [
|
|
'vlogId' => $value['id'],
|
|
'activityId' => $value['activityId'],
|
|
'playId' => $value['playId'],
|
|
'playDuration' => $value['playDuration'],
|
|
'stayDuration' => $value['stayDuration'],
|
|
'createTime' => time()
|
|
];
|
|
$user = $this->user_model->get(['unionid'=>$value['param1']]);
|
|
$user && $ac_user = $this->act_user_model->get(['activityId'=>$value['activityId'],'userId'=>$user['userId']]);
|
|
if($ac_user['channelId']){
|
|
$p_user = $this->user_model->get(['userId'=>$ac_user['channelId']]);
|
|
}
|
|
if($p_user['teamId']){
|
|
$addData['type'] = 1;
|
|
$team_lists = $this->sylive_entity->get_team_lists($p_user['teamId']);
|
|
$area_id = $team_lists[0]['teamId']; //大团长id
|
|
$biz_id = $team_lists[1]['teamId']; //团长id
|
|
$addData['cfUserId'] = $p_user['userId'];
|
|
}
|
|
if($p_user['organizationId']){
|
|
$addData['type'] = 0;
|
|
$team_lists = $this->sylive_entity->get_level_lists($p_user['organizationId']);
|
|
$area_id = $team_lists[0]['teamId']; //大团长id
|
|
$biz_id = $team_lists[1]['teamId']; //团长id
|
|
$addData['cfUserId'] = $p_user['userId'];
|
|
}
|
|
$area_id && $addData['areaId'] = $area_id;
|
|
$biz_id && $addData['bizId'] = $biz_id;
|
|
$user && $addData['userId'] = $user['userId'];
|
|
$this->market_sylive_viewlog_model->add($addData);
|
|
}
|
|
}
|
|
}
|
|
//更新活动用户表信息
|
|
public function tmp(){
|
|
$this->load->library('market/sylive_entity');
|
|
$this->load->model('market/market_sylive_user_model', 'user_model');
|
|
$this->load->model('market/market_sylive_activity_user_model', 'act_user_model');
|
|
$this->load->model('market/market_sylive_activity_kpidata_model','mdSytActivityKpiData');
|
|
$page = $this->input->get('page');
|
|
$size = $this->input->get('size');
|
|
!$page && $page = 1;
|
|
!$size && $size = 20;
|
|
$where = [
|
|
'activityId>' => 0,
|
|
'userId>' => 0
|
|
];
|
|
$total = $this->act_user_model->count($where);
|
|
$filed = 'id,userId,activityId';
|
|
$rows = $this->act_user_model->select($where,'id asc',$page,$size,$filed);
|
|
if(!$rows){
|
|
echo "执行完毕";exit;
|
|
}
|
|
echo $total.'<br>';
|
|
$user_ids = implode(',',array_column($rows,'userId'));
|
|
$where = ["userId in ({$user_ids})"=>null];
|
|
$users = $this->user_model->map('userId','',$where);
|
|
foreach ($rows as $item) {
|
|
$user = $users[$item['userId']] ? $users[$item['userId']][0] : [];
|
|
if($user){
|
|
$update = [
|
|
'organizationId' => $user['organizationId'],
|
|
'teamId' => $user['teamId'],
|
|
];
|
|
if($update['organizationId']){
|
|
$level_lists = $this->sylive_entity->get_level_lists($update['organizationId']);
|
|
if($level_lists){
|
|
$area_id = $level_lists[1]['organizationId'];//获取大区id
|
|
$biz_id = $level_lists[2]['organizationId'];//获取店铺id
|
|
}
|
|
$type = 0;
|
|
}
|
|
if($update['teamId']){
|
|
$team_lists = $this->sylive_entity->get_team_lists($update['teamId']);
|
|
if($team_lists) {
|
|
$area_id = $team_lists[0]['teamId']; //大团长id
|
|
$biz_id = $team_lists[1]['teamId']; //团长id
|
|
}
|
|
$type = 1;
|
|
}
|
|
if($update['teamId']||$update['organizationId']){
|
|
$where = [
|
|
'type' => $type,
|
|
'activityId' => $item['activityId'],
|
|
'cfUserId' => $item['userId']
|
|
];
|
|
$where['kpi'] = 'browse';
|
|
$browse = $this->mdSytActivityKpiData->count($where);
|
|
$where['kpi'] = 'subscribe';
|
|
$subscribe = $this->mdSytActivityKpiData->count($where);
|
|
$where['kpi'] = 'order';
|
|
$orderTotal = $this->mdSytActivityKpiData->count($where);
|
|
$where['kpi'] = 'watch';
|
|
$watch = $this->mdSytActivityKpiData->count($where);
|
|
}
|
|
$area_id && $update['areaId'] = $area_id;
|
|
$biz_id && $update['bizId'] = $biz_id;
|
|
$browse && $update['browse'] = $browse;
|
|
$subscribe && $update['subscribe'] = $browse;
|
|
$orderTotal && $update['orderTotal'] = $browse;
|
|
$watch && $update['watch'] = $browse;
|
|
$this->act_user_model->update($update,['userId'=>$item['userId']]);
|
|
echo "用户id:{$item['userId']}更新成功:".json_encode($update,JSON_UNESCAPED_UNICODE)."<br>";
|
|
}
|
|
}
|
|
}
|
|
}
|