Share.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. namespace app\common\model\user;
  3. use think\Model;
  4. use app\common\Enum\ShareEnum;
  5. use app\common\model\User as UserModel;
  6. use app\common\model\Goods as GoodsModel;
  7. class Share extends Model
  8. {
  9. // 表名
  10. protected $name = 'shop_user_share';
  11. protected $type = [
  12. 'ext' => 'json'
  13. ];
  14. protected $append = [
  15. 'platform_text',
  16. 'from_text'
  17. ];
  18. public function getPlatformTextAttr($value, $data)
  19. {
  20. $value = $value ?: ($data['platform'] ?? null);
  21. return ShareEnum::getPlatformText($value);
  22. }
  23. public function getFromTextAttr($value, $data)
  24. {
  25. $value = $value ?: ($data['from'] ?? null);
  26. return ShareEnum::getFromText($value);
  27. }
  28. public static function log(Object $user, $params)
  29. {
  30. // 错误的分享参数
  31. if (empty($params['spm'])) {
  32. return false;
  33. }
  34. $shareId = $params['shareId'];
  35. // 分享用户为空
  36. if ($shareId <= 0) {
  37. return false;
  38. }
  39. // 不能分享给本人
  40. if ($shareId == $user->id) {
  41. return false;
  42. }
  43. // 新用户不能分享给老用户 按需打开
  44. // if($user->id < $shareId) {
  45. // return false;
  46. // }
  47. $shareUser = UserModel::where('id', $shareId)->find();
  48. // 分享人不存在
  49. if (!$shareUser) {
  50. return false;
  51. }
  52. // 5分钟内相同的分享信息不保存,防止冗余数据
  53. $lastShareLog = self::where([
  54. 'user_id' => $user->id
  55. ])->where('createtime', '>', time() - 300)->order('id desc')->find();
  56. if ($lastShareLog && $lastShareLog->spm === $params['spm']) {
  57. return $lastShareLog;
  58. }
  59. $memoText = '通过' . ShareEnum::getFromText($params['from']) . '访问了';
  60. if ($params['page'] == '/pages/index/index') {
  61. $memoText .= '首页';
  62. }
  63. if ($params['page'] === '/pages/goods/index') {
  64. $memoText .= '商品';
  65. $goodsId = $params['query']['id'];
  66. }
  67. if ($params['page'] === '/pages/goods/groupon') {
  68. $memoText .= '拼团商品';
  69. $goodsId = $params['query']['id'];
  70. }
  71. if ($params['page'] === '/pages/goods/seckill') {
  72. $memoText .= '秒杀商品';
  73. $goodsId = $params['query']['id'];
  74. }
  75. if ($params['page'] === '/pages/activity/groupon/detail') {
  76. $memoText .= '拼团活动';
  77. }
  78. if (!empty($goodsId)) {
  79. $goods = GoodsModel::find($goodsId);
  80. if ($goods) {
  81. $memoText .= "[{$goods->title}]";
  82. }
  83. }
  84. $ext = [
  85. 'image' => $goods->image ?? "",
  86. 'memo' => $memoText
  87. ];
  88. $shareInfo = self::create([
  89. 'user_id' => $user->id,
  90. 'share_id' => $shareId,
  91. 'spm' => $params['spm'],
  92. 'page' => $params['page'],
  93. 'query' => http_build_query($params['query']),
  94. 'platform' => $params['platform'],
  95. 'from' => $params['from'],
  96. 'ext' => $ext
  97. ]);
  98. $data = ['shareInfo' => $shareInfo];
  99. \think\Hook::listen('user_share_after', $data);
  100. return $shareInfo;
  101. }
  102. // -- commission code start --
  103. public function agent()
  104. {
  105. return $this->belongsTo(\app\common\model\commission\Agent::class, 'share_id', 'user_id');
  106. }
  107. // -- commission code end --
  108. public function user()
  109. {
  110. return $this->belongsTo(UserModel::class, 'user_id', 'id');
  111. }
  112. }