SpiderLog.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. namespace app\admin\model\cms;
  3. use fast\Date;
  4. use think\Model;
  5. /**
  6. * 搜索引擎来访
  7. * Class SpiderLog
  8. * @package app\admin\model\cms
  9. */
  10. class SpiderLog extends Model
  11. {
  12. // 表名
  13. protected $name = 'cms_spider_log';
  14. // 自动写入时间戳字段
  15. protected $autoWriteTimestamp = false;
  16. // 定义时间戳字段名
  17. protected $createTime = false;
  18. protected $updateTime = false;
  19. protected $deleteTime = false;
  20. // 追加属性
  21. protected $append = [
  22. 'type_text',
  23. 'firsttime_text',
  24. 'lasttime_text'
  25. ];
  26. public function getTypeList()
  27. {
  28. return ['index' => __('Index'), 'archives' => __('Archives'), 'page' => __('Page'), 'special' => __('Special'), 'channel' => __('Channel'), 'diyform' => __('Diyform'), 'tag' => __('Tag'), 'user' => __('User')];
  29. }
  30. public function getTypeTextAttr($value, $data)
  31. {
  32. $value = $value ? $value : (isset($data['type']) ? $data['type'] : '');
  33. $list = $this->getTypeList();
  34. return isset($list[$value]) ? $list[$value] : '';
  35. }
  36. public function getLastdataTextAttr($value, $data)
  37. {
  38. $lastdataArr = explode(',', $data['lastdata']);
  39. foreach ($lastdataArr as $index => &$item) {
  40. $item = date("Y-m-d H:i:s", $item);
  41. }
  42. return implode(',', $lastdataArr);
  43. }
  44. public function getFirsttimeTextAttr($value, $data)
  45. {
  46. $value = $value ? $value : (isset($data['firsttime']) ? $data['firsttime'] : '');
  47. return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
  48. }
  49. public function getLasttimeTextAttr($value, $data)
  50. {
  51. $value = $value ? $value : (isset($data['lasttime']) ? $data['lasttime'] : '');
  52. return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
  53. }
  54. protected function setFirsttimeAttr($value)
  55. {
  56. return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
  57. }
  58. protected function setLasttimeAttr($value)
  59. {
  60. return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
  61. }
  62. /**
  63. * 渲染来访记录
  64. * @param mixed $list
  65. * @param string $type
  66. */
  67. public static function render(&$list, $type)
  68. {
  69. if (!$list) {
  70. return;
  71. }
  72. $ids = [];
  73. foreach ($list as $index => $item) {
  74. $ids[] = $item['id'];
  75. }
  76. $config = get_addon_config('cms');
  77. $spiderDict = $config['spiders'] ?? [];
  78. $spiderFollowArr = array_filter(explode(',', $config['spiderfollow'] ?? ''));
  79. if (!$spiderFollowArr) {
  80. return;
  81. }
  82. $today = Date::unixtime();
  83. $spiderLogList = \addons\cms\model\SpiderLog::where('type', $type)
  84. ->where('aid', 'in', $ids)
  85. ->where('name', 'in', $spiderFollowArr)
  86. ->field('aid,name,lasttime')
  87. ->select();
  88. $logs = [];
  89. $spiderLogList = $spiderLogList ? collection($spiderLogList)->toArray() : [];
  90. foreach ($spiderLogList as $index => $item) {
  91. $logs[$item['aid']] = $logs[$item['aid']] ?? [];
  92. $logs[$item['aid']][$item['name']] = $item['lasttime'];
  93. }
  94. foreach ($list as $index => &$row) {
  95. $spiders = [];
  96. foreach ($spiderFollowArr as $key => $name) {
  97. $status = !isset($logs[$row['id']][$name]) ? 'none' : ($logs[$row['id']][$name] > $today ? 'today' : 'pass');
  98. $date = !isset($logs[$row['id']][$name]) ? '' : $logs[$row['id']][$name];
  99. $spiders[$name] = ['name' => $name, 'title' => isset($spiderDict[$name]) ? $spiderDict[$name] . (stripos($spiderDict[$name], '搜索') === false ? '搜索' : '') : '未知', 'status' => $status, 'date' => $date ? date("Y-m-d", $date) : ''];
  100. }
  101. $row['spiders'] = array_values($spiders);
  102. }
  103. return;
  104. }
  105. }