BusinessCardMaterialsBrowseLog.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. namespace addons\BusinessCard\common\models;
  3. use addons\BusinessCard\common\enums\CardEnums;
  4. use common\enums\StatusEnum;
  5. use common\models\user\User;
  6. use Exception;
  7. use Yii;
  8. /**
  9. * This is the model class for table "qimall_addons_business_card_material_browse_log".
  10. *
  11. * @property int $id 名片素材客户浏览记录
  12. * @property int|null $mall_id 商城ID
  13. * @property int|null $user_id 用户ID
  14. * @property int|null $material_id 素材ID
  15. * @property int|null $view_seconds 观看时长(秒)
  16. * @property int|null $status 状态[-1:删除;0:禁用;1启用]
  17. * @property int|null $created_at 创建时间
  18. * @property int|null $updated_at 更新时间
  19. * @property int|null $view_times 累计观看次数
  20. * @property int|null $share_user_id 分享的销售员
  21. * @property int|null $share_user_type 1分享人,2上级
  22. * @property string|null $unikey 标识
  23. */
  24. class BusinessCardMaterialsBrowseLog extends \common\models\base\BaseActiveRecord
  25. {
  26. /**
  27. * {@inheritdoc}
  28. */
  29. public static function tableName()
  30. {
  31. return 'qimall_addons_business_card_material_browse_log';
  32. }
  33. /**
  34. * {@inheritdoc}
  35. */
  36. public function rules()
  37. {
  38. return [
  39. [['mall_id', 'user_id', 'material_id', 'view_seconds', 'status', 'created_at', 'updated_at', 'view_times', 'share_user_id', 'share_user_type'], 'integer'],
  40. [['unikey'], 'string', 'max' => 16],
  41. ];
  42. }
  43. /**
  44. * {@inheritdoc}
  45. */
  46. public function attributeLabels()
  47. {
  48. return [
  49. 'id' => 'ID',
  50. 'mall_id' => 'Mall ID',
  51. 'user_id' => 'User ID',
  52. 'material_id' => 'Material ID',
  53. 'view_seconds' => 'View Seconds',
  54. 'status' => 'Status',
  55. 'created_at' => 'Created At',
  56. 'updated_at' => 'Updated At',
  57. 'view_times' => 'View Times',
  58. 'share_user_id' => 'Share User ID',
  59. 'share_user_type' => 'Share User Type',
  60. 'unikey' => 'Unikey',
  61. ];
  62. }
  63. public function getUser()
  64. {
  65. return $this->hasOne(User::class, ['id' => 'user_id'])->select('id,mobile,nickname,avatar_url,parent_id,username');
  66. }
  67. public function getMaterial()
  68. {
  69. return $this->hasOne(BusinessCardMaterials::class, ['id' => 'material_id'])->select('id,title,cover_img');
  70. }
  71. public function getCarduser()
  72. {
  73. return $this->hasOne(BusinessCardUser::class, ['user_id' => 'user_id'])->select('id,user_id,parent_id');
  74. }
  75. public function getShareuser()
  76. {
  77. return $this->hasOne(User::class, ['id' => 'share_user_id'])->select('id,mobile,nickname,avatar_url,parent_id,username');
  78. }
  79. /**
  80. * 数据设置
  81. */
  82. public static function setData(array $params, $card_id = 0)
  83. {
  84. try{
  85. $is_add = 0;
  86. if (!isset($params['mall_id']) || empty($params['mall_id'])) throw new Exception('缺少商城ID');
  87. if (isset($params['id']) && !empty($params['id'])) {
  88. $model = self::findOne(['id' => $params['id'], 'mall_id' => $params['mall_id'], 'status' => StatusEnum::ENABLED]);
  89. if(empty($model)) throw new Exception('浏览记录不存在或已删除');
  90. if (isset($params['view_seconds'])) {
  91. $model->view_seconds = $model->view_seconds + $params['view_seconds'];
  92. unset($params['view_seconds']);
  93. }
  94. } else {
  95. $model = new self();
  96. $model->loadDefaultValues();
  97. $model->mall_id = $params['mall_id'];
  98. $is_add = 1;
  99. }
  100. if (!$model->load($params,'') || !$model->save()) throw new Exception($model->getErrorMessage());
  101. if($is_add == 1){
  102. self::cutomerLog($params,$model, $card_id);
  103. }
  104. return $model;
  105. }catch(Exception $e){
  106. self::setStaticError($e->getMessage());
  107. return false;
  108. }
  109. }
  110. /**
  111. * @param $params
  112. * @param $log_data
  113. * @param $card_id
  114. * @return void
  115. * @throws Exception
  116. */
  117. //添加行为
  118. public static function cutomerLog($params,$log_data, $card_id = 0){
  119. $add['mall_id'] = $params['mall_id'];
  120. $add['user_id'] = $params['user_id'];
  121. $add['item_id'] = !empty($card_id) ? $card_id : -1; // -1
  122. $add['material_id'] = $params['material_id'];
  123. //$material_times = CardMaterialBrowseLog::count([['=','user_id',$params['user_id']],['=','material_id',$params['material_id']]]);
  124. $add['material_times'] = $log_data->view_times;
  125. $add['material_log_id'] = $log_data->id;
  126. $add['log_type'] = CardEnums::LOG_TYPE_MATEREAL_DETAIL;
  127. BusinessCardCustomerLog::setData($add);
  128. // 记录
  129. BusinessCardSecretUserScore::setData($params['mall_id'], $params['user_id'], CardEnums::LOG_TYPE_MATEREAL_DETAIL);
  130. }
  131. // 用户是否阅读过该素材
  132. public static function isReaded($mall_id, $user_id, $material_id)
  133. {
  134. $is_readed = self::getOne([
  135. ['=', 'mall_id', $mall_id],
  136. ['=', 'user_id', $user_id],
  137. ['=', 'material_id', $material_id],
  138. ['=', 'status', StatusEnum::ENABLED],
  139. ], true, '', 'id desc', 'id,view_times');
  140. return $is_readed;
  141. }
  142. // 用户是否标记过该素材
  143. public static function isMarked($mall_id, $user_id, $material_id, $unikey)
  144. {
  145. $cache_key = 'addons:cache_key:mall' . $mall_id . ':user' . $user_id . ':material' . $material_id . ':' . $unikey;
  146. $redis = Yii::$app->redis;
  147. $data = $redis->get($cache_key);
  148. if ($data) {
  149. return json_decode($data, true);
  150. }
  151. $log = self::getOne([
  152. ['=', 'mall_id', $mall_id],
  153. ['=', 'user_id', $user_id],
  154. ['=', 'material_id', $material_id],
  155. ['=', 'unikey', $unikey],
  156. ['=', 'status', StatusEnum::ENABLED],
  157. ], true, '', 'id desc', 'id,user_id');
  158. if ($log) {
  159. $redis->setex($cache_key, 120, json_encode($log, JSON_UNESCAPED_UNICODE));
  160. }
  161. return $log;
  162. }
  163. }