1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <?php
- declare(strict_types=1);
- namespace app\logics;
- use app\model\ShareLog;
- use app\model\Footprints;
- use think\facade\Db;
- class MaterialLogic
- {
- //处理列表的转发跟浏览时长
- public function sel_case_share($list,$type,$order='')
- {
- $ids=array_column($list, 'id');
- $where[] = ['data_id', 'in', $ids];
- $where[] = ['type', '=', $type];
- $shared = ShareLog::where($where)->column('data_id', 'id');
- foreach($list as $key=>$val){
- $i=0;
- foreach($shared as $k=>$v){
- if($v==$val['id']){
- $i++;
- }
- }
- $list[$key]['share_count']=$i;
- }
- $foot_where[] = ['pipe_type', '=', lcfirst($type)];
- $where_ids = [];
- foreach ($ids as $v) {
- $where_ids[] = '{"id":' . $v . ',%';
- }
- $foot_where[] = ['reg_info', 'like', $where_ids, 'OR'];
- $foot_data = Db::table('fl_footprints')->where($foot_where)->cursor();
- //$foot_data = Footprints::where($foot_where)->column('id,reg_info,visit_due_time');//->field('id,visit_due_time,reg_info')->fetchsql(true)->select();//->toArray();
- $views = [];
- $time = [];
- foreach ($foot_data as $key=>$val) {
- $id = str_replace('{"id":','',substr($val['reg_info'],0,strpos($val['reg_info'],',')));
- $views[$id][] = $id;
- if ($val['visit_due_time']) {
- isset($time[$id]) ? $time[$id] += $val['visit_due_time'] : $time[$id] = $val['visit_due_time'];
- }
- }
- foreach ($list as &$val) {
- //浏览人数,浏览时长
- $val['visit_time'] = isset($time[$val['id']]) ? $time[$val['id']] : 0;
- $val['view_num'] = isset($views[$val['id']]) ? count($views[$val['id']]) : 0;
- }
- unset($views);
- unset($time);
- if(!empty($order) && strstr($order,'share_count')){
- $parr=array_column($list,'share_count');
- if($order=='share_count desc'){
- array_multisort($parr, SORT_DESC, $list);
- }
- if($order=='share_count asc'){
- array_multisort($parr, SORT_ASC, $list);
- }
- }
- if(!empty($order) && strstr($order,'visit_time')){
- $parr=array_column($list,'visit_time');
- if($order=='visit_time desc'){
- array_multisort($parr, SORT_DESC, $list);
- }
- if($order=='visit_time asc'){
- array_multisort($parr, SORT_ASC, $list);
- }
- }
- return $list;
- }
- }
|