'browse', 'subscribe' => 'subscribe', 'order' => 'orderTotal','watch' => 'watch' ]; public function __construct(){ $this->ci = &get_instance(); $this->ci->load->model('market/market_sylive_user_model', 'user_model'); $this->ci->load->model('market/market_sylive_activity_user_model', 'act_user_model'); $this->ci->load->model('market/market_sylive_activity_model'); $this->ci->load->model('market/market_sylive_activity_biz_model','mdSytActivityBiz'); $this->ci->load->model('market/market_sylive_activity_team_model','mdSytActivityTeam'); $this->ci->load->model('market/market_sylive_activity_kpidata_model','mdSytActivityKpiData'); $this->ci->load->model('market/market_sylive_organization_model'); $this->ci->load->model('market/market_sylive_activity_orders_model','mdSytActivityOrders'); $this->ci->load->model('live/Live_polyv_viewlog_model', 'mdPolyvViewlog'); $this->ci->load->model('market/market_sylive_team_model'); $this->ci->load->model('market/market_sylive_viewlog_model'); } /** * @param $organizationId 机构id * @param $level 0品牌-管理大区 1 督导-权限范围内所有门店 2 店长-门店所有权限 3 顾问-个人权限 4普通用户-没有权限 * @return int|mixed */ public function get_level($organizationId,$level=0){ if(!$organizationId){ return 4; } $row = $this->ci->market_sylive_organization_model->get(['organizationId'=>$organizationId],'organizationId,parentId'); if(!$row){ return 4; } if($row['parentId']){ $temp = $level+1; return $this->get_level($row['parentId'],$temp); } return $level; } /** * @param $organizationId * @param $group_id * @return void */ public function get_biz_id($organizationId,$group_id){ if($group_id==3){ //顾问 $org_row = $this->ci->market_sylive_organization_model->get(['organizationId'=>$organizationId],'parentId'); $biz_id = $org_row['parentId'] ? $org_row['parentId'] : 0; }elseif($group_id==2){ //店长 $biz_id = $organizationId; }else{ $biz_id = 0; } return $biz_id; } /** * @param $organizationId * @param $group_id * @return int|mixed */ public function get_area_id($organizationId,$group_id){ if($group_id==2){ //店长 $org_row = $this->ci->market_sylive_organization_model->get(['organizationId'=>$organizationId],'parentId'); $area_id = $org_row['parentId'] ? $org_row['parentId'] : 0; }elseif($group_id==1){ $area_id = $organizationId; }else{ $area_id = 0; } return $area_id; } /** * 判断活动是否有权限 * @param $organizationId * @param $group_id * @param $a_id * @return int */ public function act_role($organizationId,$group_id,$a_id){ $where['activityId'] = $a_id; if($group_id==3){ $where["bizId in (select parentId from lc_market_sylive_organization where organizationId={$organizationId} and status=0)"] = null; }elseif($group_id==2){ $where['bizId'] = $organizationId; }elseif ($group_id==1){ $where["areaId"] = $organizationId; }else{ $where["areaId in (select organizationId from lc_market_sylive_organization where parentId={$organizationId} and status=0)"] = null; } $res = false; $act = $this->ci->mdSytActivityBiz->get($where,'activityId'); if($act){ $row = $this->ci->market_sylive_activity_model->get(['activityId'=>$act['activityId']],'activityId,jsondata'); $jsondata = json_decode($row['jsondata'],true); $res = true; if(in_array($group_id,[2,3]) && $jsondata['pay']['way']==2){ //判断是否支付 $where = [ 'activityId'=>$a_id, 'status'=>1, ]; if($group_id==3){ $where["bizId in (select parentId from lc_market_sylive_organization where organizationId={$organizationId} and status=0)"] = null; }else{ $where['bizId'] = $organizationId; } $is_pay = $this->ci->mdSytActivityOrders->get($where); !$is_pay && $res = false; } } return $res; } /** * 获取等级数据 * @param $organizationId * @param $data * @return int */ public function get_level_lists($organizationId,$data=[]){ $row = $this->ci->market_sylive_organization_model->get(['organizationId'=>$organizationId, 'status' => 0],'organizationId,parentId,organizationName,logo'); if(!$row){ return $data; }else{ array_unshift($data,$row); if($row['parentId']){ return $this->get_level_lists($row['parentId'],$data); }else{ return $data; } } } /** * Notes:添加kpi记录 * Created on: 2021/1/13 11:20 * Created by: dengbw * @param $params * @return array */ public function kpi_log($params) { if(!$params['cf_uid']){ $u_row = $this->user_model->get(['userId'=>$params['uid']]); if($u_row['teamId']){ $t_level_id = $this->get_team_level($u_row['teamId']); $params['cf_uid'] = $t_level_id<3 ? $params['uid'] : 0; } if($u_row['organizationId']){ $group_id = $this->get_level($u_row['organizationId']); $params['cf_uid'] = $group_id<4 ? $params['uid'] : 0; } } if ($params['a_id'] && $params['uid'] && $params['cf_uid']) { $user = $this->user_model->get(['userId'=>$params['cf_uid']]); if(!$user){ return array('code' => 0, 'msg' => '顾问不存在'); } $re_a = $this->ci->market_sylive_activity_model->get(array("activityId" => $params['a_id'], "status" => 0)); $now_time = time(); if(!in_array($params['kpi'],['subscribe','browse','order'])){ //无需活动开始 if ((!$re_a || $now_time < strtotime($re_a['timeStart']) || $now_time > strtotime($re_a['timeEnd']))) { return array('code' => 0, 'msg' => '无活动或未在活动时间内'); } } $type = $user['organizationId'] > 0 ? 0 : 1; //0门店 1团队 if($params['kpi']!='order'){ //订单可添加多条kpi $re_kpi = $this->ci->mdSytActivityKpiData->get(array("activityId" => $params['a_id'], 'userId' => $params['uid'], 'kpi' => $params['kpi'],'type'=>$type)); if ($re_kpi) {//已添加过活动kpi(访活动只记录一次用户kpi记录) return array('code' => 0, 'msg' => '已添加过' . $params['kpi'] . '记录'); } } if($type){ $team_lists = $this->get_team_lists($user['teamId']); if($team_lists) { $area_id = $team_lists[0]['teamId']; //大团长id $biz_id = $team_lists[1]['teamId']; //团长id } }else{ $level_lists = $this->get_level_lists($user['organizationId']); if($level_lists){ //获取大区id $area_id = $level_lists[1]['organizationId']; //获取店铺id $biz_id = $level_lists[2]['organizationId']; } } //增加记录 $addData = [ 'activityId' => $params['a_id'], 'userId' => $params['uid'], 'cfUserId' => $params['cf_uid'], 'kpi' => $params['kpi'], 'type' => $type, 'createTime' => time(), 'day' => date('Y-m-d') ]; $params['tagId'] && $addData['tagId'] = $params['tagId']; $params['itemId'] && $addData['itemId'] = $params['itemId']; $area_id && $addData['areaId'] = $area_id; $biz_id && $addData['bizId'] = $biz_id; $jsondata = $params['jsondata'] ? $params['jsondata'] : []; $jsondata && $addData['jsondata'] = json_encode($jsondata, JSON_UNESCAPED_UNICODE); $id = $this->ci->mdSytActivityKpiData->add($addData); if (!$id) { return array('code' => 0, 'msg' => '添加记录失败'); } if($this->map_kpi_biz[$params['kpi']] && $biz_id && !$addData['type']){//更新门店统计数据 $up_key = $this->map_kpi_biz[$params['kpi']]; $update = [ $up_key => $this->ci->mdSytActivityKpiData->count(['activityId'=>$params['a_id'],'bizId'=>$biz_id,'kpi'=>$params['kpi'],'type'=>0]) ]; $this->ci->mdSytActivityBiz->update($update,['activityId'=>$params['a_id'],'bizId'=>$biz_id]); } if($this->map_kpi_biz[$params['kpi']] && $biz_id && $addData['type']) {//更新团队统计数据 $up_key = $this->map_kpi_biz[$params['kpi']]; $update = [ $up_key => $this->ci->mdSytActivityKpiData->count(['activityId'=>$params['a_id'],'bizId'=>$biz_id,'kpi'=>$params['kpi'],'type'=>1]) ]; $this->ci->mdSytActivityTeam->update($update,['activityId'=>$params['a_id'],'teamId2'=>$biz_id]); } if($this->map_kpi_biz[$params['kpi']] && $params['cf_uid']){ //更新活动用户表统计数据 $up_key = $this->map_kpi_biz[$params['kpi']]; $update = [ $up_key => $this->ci->mdSytActivityKpiData->count(['activityId'=>$params['a_id'],'cfUserId'=>$params['cf_uid'],'kpi'=>$params['kpi'],'type'=>$type]) ]; $this->ci->act_user_model->update($update,['activityId'=>$params['a_id'],'userId'=>$params['cf_uid']]); } return array('code' => 1, 'msg' => '添加记录成功'); } else { return array('code' => 0, 'msg' => '参数错误'); } } //门店用户排行数据 public function top_biz_user($aid,$biz_id,$uid,$type='browse',$page=1,$size=90){ if(!$biz_id){ return ['total' => 0, 'lists' => []]; } $where = [ 'parentId' => $biz_id ]; $orgs = $this->ci->market_sylive_organization_model->select($where,'',0,0,'organizationId'); $orgs && $org_arr_ids = array_column($orgs,'organizationId'); $org_arr_ids[] = $biz_id; $org_ids = implode($org_arr_ids,','); $where = [ "organizationId in ({$org_ids})" => null ]; $total = $this->ci->user_model->count($where); $lists = []; if($total){ $rows = $this->ci->user_model->select($where,'userId desc',$page,$size,'userId,uname,nickname,headimg'); $where = [ 'activityId' => $aid, 'kpi' => $type, 'bizId' => $biz_id, 'type' => 0, ]; $t_rows = $this->ci->mdSytActivityKpiData->select_groupby('cfUserId',$where,'total desc',$page,$size,'cfUserId,count(id) as total'); $map = []; if($t_rows){ foreach($t_rows as $item) { $map[$item['cf_uid']] = null !== $item['total'] ? $item['total'] : $item; } } $num_tip = $type == 'order' ? '单' : '人'; foreach ($rows as $item) { $num = $map[$item['userId']] ? $map[$item['userId']] : '0'; $lists[] = [ 'uid' => $item['userId'], 'name' => $item['uname'] ? $item['uname'] : $item['nickname'], 'headimg' => $item['headimg'] ? $item['headimg'] : self::DEFAULT_HEAD, 'total' => $num, 'num' => "{$num}{$num_tip}", 'tip' => $uid == $item['userId'] ? '本人' : '', ]; } $edit = array_column($lists,'total'); array_multisort($edit,SORT_DESC,$lists); } $data = [ 'total' => $total, 'lists' => $lists ]; return $data; } //用户用户观看次数排行 public function top_view_num($channelId,$page=1,$size=10){ $where = [ 'channelId' => $channelId ]; $total = $this->ci->mdPolyvViewlog->count($where); $lists = []; if($total){ $rows = $this->ci->mdPolyvViewlog->select_groupby('param1',$where,'total desc',$page,$size,'param1,count(id) as total'); $uids = implode("','",array_unique(array_column($rows,'param1'))); $users = []; if($uids){ $where = [ "unionid in ('$uids')" => null, ]; $users = $this->ci->user_model->map('unionid','',$where,'','','','userId,unionid,uname,nickname,headimg'); } foreach ($rows as $item) { $user = $users[$item['param1']] ? $users[$item['param1']][0] : []; $total = $item['total']; $lists[] = [ 'uid' => $user['userId'], 'name' => $user['nickname'] ? $user['nickname'] : '', 'headimg' => $user['headimg'] ? $user['headimg'] : self::DEFAULT_HEAD, 'total' => $total, 'num' => "{$total}次", ]; } } $data = [ 'total' => $total, 'lists' => $lists ]; return $data; } //用户用户观看时长排行 public function top_view_time($channelId,$page=1,$size=10){ $where = [ 'channelId' => $channelId ]; $total = $this->ci->mdPolyvViewlog->count($where); $lists = []; if($total){ $rows = $this->ci->mdPolyvViewlog->select_groupby('param1',$where,'total desc',$page,$size,'param1,sum(playDuration) as total'); $uids = implode("','",array_unique(array_column($rows,'param1'))); $users = []; if($uids){ $where = [ "unionid in ('$uids')" => null, ]; $users = $this->ci->user_model->map('unionid','',$where,'','','','userId,unionid,uname,nickname,headimg'); } foreach ($rows as $item) { $user = $users[$item['param1']] ? $users[$item['param1']][0] : []; $total = $item['total']; $lists[] = [ 'uid' => $user['userId'], 'name' => $user['nickname'] ? $user['nickname'] : '', 'headimg' => $user['headimg'] ? $user['headimg'] : self::DEFAULT_HEAD, 'total' => $total, 'num' => "{$total}秒", ]; } } $data = [ 'total' => $total, 'lists' => $lists ]; return $data; } /** * @param $teamId 团队id * @param $level 0大团长 1团长 2团员 3普通用户 * @return int|mixed */ public function get_team_level($teamId,$level=0){ if(!$teamId){ return 3; } $row = $this->ci->market_sylive_team_model->get(['teamId'=>$teamId],'teamId,parentId'); if(!$row){ return 3; } if($row['parentId']){ $temp = $level+1; return $this->get_team_level($row['parentId'],$temp); } return $level; } /** * 获取等级数据 * @param $teamId 团队id * @param $data * @return int */ public function get_team_lists($teamId,$data=[]){ $row = $this->ci->market_sylive_team_model->get(['teamId'=>$teamId],'teamId,parentId,teamName,logo'); if(!$row){ return $data; }else{ array_unshift($data,$row); if($row['parentId']){ return $this->get_team_lists($row['parentId'],$data); }else{ return $data; } } } /** * 获取团队id * @param $teamId * @param $teamLevel * @return int|mixed */ public function get_team_id($teamId,$teamLevel){ if($teamLevel==2){ //团员 $t_row = $this->ci->market_sylive_team_model->get(['teamId'=>$teamId],'parentId'); $teamId = $t_row['parentId']; }elseif($teamLevel==1){ //团长 $teamId = $teamLevel; }else{//大团长 $teamId = 0; } return $teamId; } /** * 判断团长活动是否有权限 * @param $organizationId * @param $level * @param $a_id * @return int */ public function team_act_role($organizationId,$level,$a_id){ $where['activityId'] = $a_id; if($level==2){ //团员 $where["teamId2 in (select parentId from lc_market_sylive_team where teamId={$organizationId} and status=0)"] = null; }elseif($level==1){ //团长 $where['teamId2'] = $organizationId; }else{ //大团长 $where["teamId1"] = $organizationId; } $act = $this->ci->mdSytActivityTeam->get($where,'activityId'); return $act ? true : false; } //用户用户观看次数排行 public function top_team_view_num($where,$page=1,$size=10){ $total = $this->ci->market_sylive_viewlog_model->count($where); $lists = []; if($total){ $rows = $this->ci->market_sylive_viewlog_model->select_groupby('userId',$where,'total desc',$page,$size,'userId,count(id) as total'); $uids = implode(",",array_unique(array_column($rows,'userId'))); $users = []; if($uids){ $where = [ "userId in ('$uids')" => null, ]; $users = $this->ci->user_model->map('userId','',$where,'','','','userId,unionid,uname,nickname,headimg'); } foreach ($rows as $item) { $user = $users[$item['userId']] ? $users[$item['userId']][0] : []; $total = $item['total']; $lists[] = [ 'uid' => $user['userId'], 'name' => $user['nickname'] ? $user['nickname'] : '', 'headimg' => $user['headimg'] ? $user['headimg'] : self::DEFAULT_HEAD, 'total' => $total, 'num' => "{$total}次", ]; } } $data = [ 'total' => $total, 'lists' => $lists ]; return $data; } //用户用户观看时长排行 public function top_team_view_time($where,$page=1,$size=10){ $total = $this->ci->market_sylive_viewlog_model->count($where); $lists = []; if($total){ $rows = $this->ci->market_sylive_viewlog_model->select_groupby('userId',$where,'total desc',$page,$size,'userId,sum(playDuration) as total'); $uids = implode(",",array_unique(array_column($rows,'userId'))); $users = []; if($uids){ $where = [ "userId in ('$uids')" => null, ]; $users = $this->ci->user_model->map('userId','',$where,'','','','userId,unionid,uname,nickname,headimg'); } foreach ($rows as $item) { $user = $users[$item['userId']] ? $users[$item['userId']][0] : []; $total = $item['total']; $lists[] = [ 'uid' => $user['userId'], 'name' => $user['nickname'] ? $user['nickname'] : '', 'headimg' => $user['headimg'] ? $user['headimg'] : self::DEFAULT_HEAD, 'total' => $total, 'num' => "{$total}秒", ]; } } $data = [ 'total' => $total, 'lists' => $lists ]; return $data; } public function __get($name) { if ('_model' === substr($name, -6)) { return $this->ci->$name; } elseif ('load' == $name) { return $this->ci->load; } return null; } }