Referral.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <?php
  2. namespace app\common\model;
  3. use app\common\library\Redis;
  4. use app\common\model\object\ReferralObject;
  5. use think\Model;
  6. class Referral extends Model
  7. {
  8. // 表名
  9. protected $table = 'referral';
  10. // 自动写入时间戳字段
  11. protected $autoWriteTimestamp = 'int';
  12. // 定义时间戳字段名
  13. protected $createTime = 'createtime';
  14. protected $updateTime = 'updatetime';
  15. // 追加属性
  16. protected $append = [
  17. 'wx_type_text',
  18. 'type_text'
  19. ];
  20. /**
  21. * 获取单条数据
  22. *
  23. * @param $referral_id
  24. * @param bool $idx 默认true 获取idx , false 获取url原文
  25. * @return mixed|string
  26. */
  27. public function getone($referral_id, $idx = true)
  28. {
  29. if (!$referral_id){
  30. return null;
  31. }
  32. $redis = Redis::instance();
  33. $key = 'RI:N:'. $referral_id;
  34. $json = $redis->get($key);
  35. if ($json == -1){
  36. return null;
  37. }
  38. if ($json) {
  39. $data = json_decode($json, true);
  40. if (is_array($data) && !array_key_exists('state', $data)) {
  41. $data['state'] = 1;
  42. }
  43. $data = $idx ? $data['guide_chapter_idx'] : $data;
  44. } else {
  45. $db_data = $this->where('id=' . $referral_id)->find();
  46. if(!empty($db_data)){
  47. $db_data = $db_data->toArray();
  48. $json = json_encode($db_data,JSON_UNESCAPED_UNICODE);
  49. $redis->setex($key, 86400, $json);
  50. $data = $idx ? $db_data['guide_chapter_idx'] : $db_data;
  51. }else{
  52. $data = -1;
  53. $redis->setex($key, 86400, $data);
  54. $data = null;
  55. }
  56. }
  57. return $data;
  58. }
  59. public function getWxTypeList()
  60. {
  61. return ['1' => '已认证', '2' => '未认证'];
  62. }
  63. public function getTypeList()
  64. {
  65. return ['1' => '阅读页推广', '2' => '首页推广'];
  66. }
  67. public function getGuideSexList()
  68. {
  69. return ['1' => '男频', '2' => '女频'];
  70. }
  71. public function getWxTypeTextAttr($value, $data)
  72. {
  73. $value = $value ? $value : $data['wx_type'];
  74. $list = $this->getWxTypeList();
  75. return isset($list[$value]) ? $list[$value] : '';
  76. }
  77. public function getTypeTextAttr($value, $data)
  78. {
  79. $value = $value ? $value : $data['type'];
  80. $list = $this->getTypeList();
  81. return isset($list[$value]) ? $list[$value] : '';
  82. }
  83. public function getPushList()
  84. {
  85. return ['0' => '外推', '1' => '内推'];
  86. }
  87. public function getPushTextAttr($value, $data)
  88. {
  89. $value = $value ? $value : $data['push'];
  90. $list = $this->getPushList();
  91. return isset($list[$value]) ? $list[$value] : '';
  92. }
  93. // 一对一关联 book表
  94. public function book()
  95. {
  96. return $this->belongsTo('Book', 'book_id', 'id', [], 'LEFT')->setEagerlyType(0);
  97. }
  98. /**
  99. * @param $referralId
  100. * @return int|mixed
  101. * @throws \think\db\exception\DataNotFoundException
  102. * @throws \think\db\exception\ModelNotFoundException
  103. * @throws \think\exception\DbException
  104. */
  105. public function getDaoFenChapterId($referralId)
  106. {
  107. $referral = $this->where('id', '=', $referralId)->find();
  108. return $chapterId = $referral->guide_chapter_idx ?? 10;
  109. }
  110. /**
  111. * 检测VIP链接有效性
  112. * @param $id
  113. * @return int
  114. */
  115. public function checkVipReferralValid($id)
  116. {
  117. $state = 1;
  118. $key = 'RIV:'.$id;
  119. if (Redis::instance()->exists($key)) {
  120. $state = Redis::instance()->get($key);
  121. } else {
  122. $library = model("ReferralLibrary")->where('id', 'eq', $id)->find();
  123. if ($library) {
  124. $referral = $this->getone($library['referral_id'], false);
  125. $state = $referral['state'];
  126. } else {
  127. $state = 0;
  128. }
  129. Redis::instance()->set($key, $state, 600);
  130. }
  131. return $state;
  132. }
  133. public function mkParamsForInsert(ReferralObject $oReferral)
  134. {
  135. return [
  136. 'push' => $oReferral->push,
  137. 'manage_title_id' => $oReferral->manage_title_id,
  138. 'manage_cover_id' => $oReferral->manage_cover_id,
  139. 'manage_template_id' => $oReferral->manage_template_id,
  140. 'manage_preview_id' => $oReferral->manage_preview_id,
  141. 'book_id' => $oReferral->book_id,
  142. 'chapter_id' => $oReferral->chapter_id,
  143. 'chapter_name' => $oReferral->chapter_name,
  144. 'chapter_idx' => $oReferral->chapter_idx,
  145. 'guide_chapter_idx' => $oReferral->guide_chapter_idx,
  146. 'admin_id' => $oReferral->admin_id,
  147. 'name' => $oReferral->name,
  148. 'cost' => $oReferral->cost,
  149. 'wx_type' => $oReferral->wx_type,
  150. 'type' => $oReferral->type,
  151. 'source_url' => $oReferral->source_url,
  152. 'short_url_qq' => $oReferral->short_url_qq,
  153. 'short_url_weibo' => $oReferral->short_url_weibo,
  154. 'createtime' => $oReferral->createtime??time(),
  155. 'updatetime' => $oReferral->updatetime??time(),
  156. 'state' => $oReferral->state ?? 1,
  157. 'short_id' => $oReferral->short_id,
  158. 'guide_sex' => $oReferral->guide_sex,
  159. 'guide_idx' => $oReferral->guide_idx,
  160. 'guide_title' => $oReferral->guide_title,
  161. 'guide_image' => $oReferral->guide_image,
  162. 'utime' => $oReferral->utime,
  163. 'share_title' => $oReferral->share_title,
  164. 'share_image' => $oReferral->share_image,
  165. 'is_collect' => $oReferral->is_collect,
  166. ];
  167. }
  168. public function mkParamsForUpdate(ReferralObject $oReferral)
  169. {
  170. return [
  171. 'type' => $oReferral->type,
  172. 'wx_type' => $oReferral->wx_type,
  173. 'name' => $oReferral->name,
  174. 'push' => $oReferral->push,
  175. 'guide_chapter_idx' => $oReferral->guide_chapter_idx,
  176. 'chapter_id' => $oReferral->chapter_id,
  177. 'chapter_idx' => $oReferral->chapter_idx,
  178. 'chapter_name' => $oReferral->chapter_name,
  179. 'book_id' => $oReferral->book_id,
  180. 'share_title' => $oReferral->share_title,
  181. 'share_image' => $oReferral->share_image,
  182. 'updatetime' => time(),
  183. ];
  184. }
  185. }