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) { $wechatS = new WechatServer($this->options); $wechatS->checkAuth(); $act_ids = implode(',',array_unique(array_column($res,'activityId'))); $act_rows = []; if($act_ids){ $where = [ "activityId in ($act_ids)" => null ]; $act_rows = $this->market_sylive_activity_model->map('activityId','',$where,'',0,0,'activityId,title'); } foreach ($res as $key => $value) { $act = $act_rows['activityId'] ? $act_rows['activityId'][0] : []; if ($act) { $content = '您预约“' . $act['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']; } } }else{ $this->mdSytSubscribemsg->update(['status' => -1], ['id' => $value['id']]); } } } echo '
数据库获取:'; echo json_encode($res, JSON_UNESCAPED_UNICODE); echo '

成功发送:'; $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 . "
"; } else { $msg = "接口错误:" . $results['message']; echo $msg . "
"; } 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."
"; $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."
"; }else{ $msg = "接口错误:" . $results['message']; echo $msg . "
"; } } }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 = [ 'expireTime>' => 0, 'expireTime<' => 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.'
'; $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'] = $subscribe; $orderTotal && $update['orderTotal'] = $orderTotal; $watch && $update['watch'] = $watch; $this->act_user_model->update($update,['userId'=>$item['userId']]); echo "用户id:{$item['userId']}更新成功:".json_encode($update,JSON_UNESCAPED_UNICODE)."
"; } } } //临时更新kpi时间 public function tmp_day(){ $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 = 100; $where = [ 'createTime>' => 0, 'day' => '0000-00-00', ]; $total = $this->mdSytActivityKpiData->count($where); echo '总数:'.$total.'
'; if($total){ $rows = $this->mdSytActivityKpiData->select($where,'id asc',$page,$size,'id,createTime'); foreach ($rows as $item) { $update = [ 'day' => date('Y-m-d',$item['createTime']), ]; $this->mdSytActivityKpiData->update($update,['id'=>$item['id']]); } } echo '更新完成'; } //更新经销商地址 public function tem_bizinfo(){ require_once COMMPATH . '/third_party/PHPExcel/IOFactory.php'; $this->load->model('market/market_sylive_activity_bizinfo_model'); $file = FCPATH.'pdf/bizinfo.xlsx'; $reader = \PHPExcel_IOFactory::createReader('Excel2007'); // 读取 excel 文档 $PHPExcel = $reader->load($file); // 文档名称 $objWorksheet = $PHPExcel->getActiveSheet(); $rowCnt = $objWorksheet->getHighestRow(); //获取总行数 for ($i = 2; $i <= $rowCnt; $i++) { //读取内容 $areaName = $objWorksheet->getCell('A' . $i)->getValue(); $bizName = $objWorksheet->getCell('B' . $i)->getValue(); $provinceName = $objWorksheet->getCell('C' . $i)->getValue(); $cityName = $objWorksheet->getCell('D' . $i)->getValue(); $addData = [ 'activityId' => 4, 'areaName' => $areaName, 'bizName' => $bizName, 'provinceName' => $provinceName, 'cityName' => $cityName, ]; if(!$this->market_sylive_activity_bizinfo_model->count($addData)){ $addData['createTime'] = date('Y-m-d H:i:s'); $this->market_sylive_activity_bizinfo_model->add($addData); } } echo '执行结束'; } //更新黑名单 public function up_black(){ $ckey = 'SYLIVE_BLACK_MOBLIE_LIST'; $redis = &load_cache('redis'); $res = $redis->delete($ckey); echo "更新成功:{$res}"; } }