Share.php 3.9 KB

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