1
0

MaterialLogic.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. declare(strict_types=1);
  3. namespace app\logics;
  4. use app\model\ShareLog;
  5. use app\model\Footprints;
  6. use think\facade\Db;
  7. class MaterialLogic
  8. {
  9. //处理列表的转发跟浏览时长
  10. public function sel_case_share($list,$type,$order='')
  11. {
  12. $ids=array_column($list, 'id');
  13. $where[] = ['data_id', 'in', $ids];
  14. $where[] = ['type', '=', $type];
  15. $shared = ShareLog::where($where)->column('data_id', 'id');
  16. foreach($list as $key=>$val){
  17. $i=0;
  18. foreach($shared as $k=>$v){
  19. if($v==$val['id']){
  20. $i++;
  21. }
  22. }
  23. $list[$key]['share_count']=$i;
  24. }
  25. $foot_where[] = ['pipe_type', '=', lcfirst($type)];
  26. $where_ids = [];
  27. foreach ($ids as $v) {
  28. $where_ids[] = '{"id":' . $v . ',%';
  29. }
  30. $foot_where[] = ['reg_info', 'like', $where_ids, 'OR'];
  31. $foot_data = Db::table('fl_footprints')->where($foot_where)->cursor();
  32. //$foot_data = Footprints::where($foot_where)->column('id,reg_info,visit_due_time');//->field('id,visit_due_time,reg_info')->fetchsql(true)->select();//->toArray();
  33. $views = [];
  34. $time = [];
  35. foreach ($foot_data as $key=>$val) {
  36. $id = str_replace('{"id":','',substr($val['reg_info'],0,strpos($val['reg_info'],',')));
  37. $views[$id][] = $id;
  38. if ($val['visit_due_time']) {
  39. isset($time[$id]) ? $time[$id] += $val['visit_due_time'] : $time[$id] = $val['visit_due_time'];
  40. }
  41. }
  42. foreach ($list as &$val) {
  43. //浏览人数,浏览时长
  44. $val['visit_time'] = isset($time[$val['id']]) ? $time[$val['id']] : 0;
  45. $val['view_num'] = isset($views[$val['id']]) ? count($views[$val['id']]) : 0;
  46. }
  47. unset($views);
  48. unset($time);
  49. if(!empty($order) && strstr($order,'share_count')){
  50. $parr=array_column($list,'share_count');
  51. if($order=='share_count desc'){
  52. array_multisort($parr, SORT_DESC, $list);
  53. }
  54. if($order=='share_count asc'){
  55. array_multisort($parr, SORT_ASC, $list);
  56. }
  57. }
  58. if(!empty($order) && strstr($order,'visit_time')){
  59. $parr=array_column($list,'visit_time');
  60. if($order=='visit_time desc'){
  61. array_multisort($parr, SORT_DESC, $list);
  62. }
  63. if($order=='visit_time asc'){
  64. array_multisort($parr, SORT_ASC, $list);
  65. }
  66. }
  67. return $list;
  68. }
  69. }