BehaviorRecordRepositories.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: edz
  5. * Date: 2019-06-10
  6. * Time: 17:53
  7. */
  8. namespace App\Repositories;
  9. use App\Models\Behavior;
  10. use App\Models\CommentRecord;
  11. use App\Models\GeneralLedgerRecord;
  12. use App\Models\RegisteredAccountsRecord;
  13. use App\Models\ReleaseRecord;
  14. use Illuminate\Database\QueryException;
  15. use Illuminate\Support\Facades\DB;
  16. use Illuminate\Support\Facades\Log;
  17. use Illuminate\Support\Facades\Redis;
  18. class BehaviorRecordRepositories
  19. {
  20. public function __construct(RegisteredAccountsRecord $registeredAccountsRecord,
  21. GeneralLedgerRecord $generalLedgerRecord,
  22. ReleaseRecord $releaseRecord,
  23. CommentRecord $commentAccountRecord,
  24. Behavior $behavior)
  25. {
  26. $this->registeredAccountsRecord = $registeredAccountsRecord;
  27. $this->generalLedgerRecord = $generalLedgerRecord;
  28. $this->releaseRecord = $releaseRecord;
  29. $this->commentAccountRecord = $commentAccountRecord;
  30. $this->behavior = $behavior;
  31. }
  32. /**
  33. * 根据行为标识获取行为记录表
  34. * @param $behavior
  35. */
  36. private function getBehaviorTable($behavior)
  37. {
  38. $tables = [
  39. 'register' => 'registered_accounts_record',
  40. 'publish' => 'release_record',
  41. 'read' => 'general_ledger_record',
  42. 'like' => 'general_ledger_record',
  43. 'unlike' => 'general_ledger_record',
  44. 'forward' => 'general_ledger_record',
  45. 'collect' => 'general_ledger_record',
  46. 'comment' => 'comment_account_record',
  47. 'comment_like' => 'general_ledger_record'
  48. ];
  49. return isset($tables[$behavior]) ? $tables[$behavior] : false;
  50. }
  51. /**
  52. * 记录账本
  53. * @param $info
  54. * @return bool
  55. */
  56. public function addRecord($info)
  57. {
  58. Log::debug('记录账本-请求参数:' . json_encode($info));
  59. $behavior = $info['behavior_flag'];
  60. $behaviorTable = $this->getBehaviorTable($behavior);
  61. Log::debug('记录账本-table:' . $behaviorTable);
  62. if ($behaviorTable) {
  63. if ($behaviorTable == 'registered_accounts_record') {
  64. return $this->addRegisterRecord($info);
  65. } elseif ($behaviorTable == 'release_record') {
  66. return $this->addReleaseRecord($info);
  67. } elseif ($behaviorTable == 'general_ledger_record') {
  68. return $this->addGeneralRecord($info);
  69. } elseif ($behaviorTable == 'comment_account_record') {
  70. return $this->addCommentRecord($info);
  71. }
  72. }
  73. return false;
  74. }
  75. /**
  76. * 记录账本-用户注册
  77. * @param $register
  78. * @return bool
  79. */
  80. private function addRegisterRecord($register)
  81. {
  82. DB::beginTransaction();
  83. try {
  84. $data['virus_behavior_id'] = $register['virus_behavior_id'];
  85. $data['uid'] = $register['uid'];
  86. $data['trigger_time'] = $register['trigger_time'];
  87. $data['physical_exertion'] = $register['physical_exertion'];
  88. $data['trigger_type'] = $register['trigger_type'];
  89. $data['generation_type'] = $register['generation_type'];
  90. $data['absolute_progression'] = $register['absolute_progression'];
  91. $data['superior_uid'] = $register['superior_uid'];
  92. $data['release_status'] = $register['release_status'];
  93. $data['generation_quantity'] = $register['generation_quantity'];
  94. $data['quantity_issued'] = $register['quantity_issued'];
  95. $this->registeredAccountsRecord->create($data);
  96. //修改行为统计数据
  97. $behavior = Behavior::where('virus_behavior_id', $register['virus_behavior_id'])->first();
  98. $behavior->grant_rainbow_beans += intval($register['quantity_issued']);
  99. $behavior->trigger_times += 1;
  100. //当前绝对级数大于注册行为的绝对级数,则更新注册行为的绝对级数为当前绝对级数
  101. if (intval($register['absolute_progression']) > intval($behavior->absolute_progression)) {
  102. $behavior->absolute_progression = intval($register['absolute_progression']);
  103. }
  104. if ($register['trigger_type']) {
  105. $behavior->effective_trigger += 1;
  106. }
  107. $behavior->save();
  108. DB::commit();
  109. return true;
  110. } catch (QueryException $exception) {
  111. Log::debug('记录账本-注册-exception:' . $exception->getMessage());
  112. DB::rollBack();
  113. return false;
  114. }
  115. }
  116. /**
  117. * 记录账本-内容发布
  118. * @param $release
  119. * @return bool
  120. */
  121. private function addReleaseRecord($release)
  122. {
  123. DB::beginTransaction();
  124. try {
  125. $data['virus_behavior_id'] = $release['virus_behavior_id'];
  126. $data['uid'] = $release['uid'];
  127. $data['trigger_time'] = $release['trigger_time'];
  128. $data['related_content_id'] = $release['related_content_id'];
  129. $data['physical_exertion'] = $release['physical_exertion'];
  130. $data['trigger_type'] = $release['trigger_type'];
  131. $data['generation_type'] = $release['generation_type'];
  132. $data['release_status'] = $release['release_status'];
  133. $data['generation_quantity'] = $release['generation_quantity'];
  134. $data['quantity_issued'] = $release['quantity_issued'];
  135. $this->releaseRecord->create($data);
  136. $behavior = Behavior::where('virus_behavior_id', $release['virus_behavior_id'])->first();
  137. $behavior->grant_rainbow_beans += intval($release['quantity_issued']);
  138. $behavior->trigger_times += 1;
  139. if ($release['trigger_type']) {
  140. $behavior->effective_trigger += 1;
  141. }
  142. $behavior->save();
  143. DB::commit();
  144. return true;
  145. } catch (QueryException $exception) {
  146. Log::debug('记录账本-发布-exception:' . $exception->getMessage());
  147. DB::rollBack();
  148. return false;
  149. }
  150. }
  151. /**
  152. * 记录账本-阅读,转发,点赞,收藏,不喜欢
  153. * @param $general
  154. * @return bool
  155. */
  156. private function addGeneralRecord($general)
  157. {
  158. try {
  159. $data['virus_behavior_id'] = $general['virus_behavior_id'];
  160. $data['uid'] = $general['uid'];
  161. $data['trigger_time'] = $general['trigger_time'];
  162. $data['related_content_id'] = $general['related_content_id'];
  163. $data['content_author_id'] = $general['content_author_id'];
  164. $data['physical_exertion'] = $general['physical_exertion'];
  165. $data['trigger_type'] = $general['trigger_type'];
  166. $data['generation_type'] = $general['generation_type'];
  167. $data['release_status'] = $general['release_status'];
  168. $data['generation_quantity'] = $general['generation_quantity'];
  169. $data['quantity_issued'] = $general['quantity_issued'];
  170. $data['behavior_value'] = $general['behavior_value'];
  171. $this->generalLedgerRecord->create($data);
  172. $behavior = Behavior::where('virus_behavior_id', $general['virus_behavior_id'])->first();
  173. $behavior->grant_rainbow_beans += intval($general['quantity_issued']);
  174. $behavior->trigger_times += 1;
  175. if ($general['trigger_type']) {
  176. $behavior->effective_trigger += 1;
  177. }
  178. //评论点赞 存储当前评论的ID以及评论发布人ID
  179. if ('comment_like' == $general['behavior_flag']) {
  180. $data['related_content_id'] = $general['cl_comment_id'];
  181. $data['content_author_id'] = $general['cl_comment_uid'];
  182. }
  183. $behavior->save();
  184. DB::commit();
  185. //统计用户所有动态当天被阅读数
  186. if ('read' == $general['behavior_flag']) {
  187. $key = "user_visited_count" . date('Y-m-d');
  188. Redis::zincrby($key, 1, $data['content_author_id']);
  189. }
  190. return true;
  191. } catch (QueryException $exception) {
  192. Log::debug('记录账本-普通行为-exception:' . $exception->getMessage());
  193. DB::rollBack();
  194. return false;
  195. }
  196. }
  197. /**
  198. * 记录账本-评论
  199. * @param $comment
  200. * @return bool
  201. */
  202. private function addCommentRecord($comment)
  203. {
  204. try {
  205. $data['virus_behavior_id'] = $comment['virus_behavior_id'];
  206. $data['uid'] = $comment['uid'];
  207. $data['upper_trigger_time'] = $comment['upper_trigger_time'];
  208. $data['related_content_id'] = $comment['related_content_id'];
  209. $data['content_author_id'] = $comment['content_author_id'];
  210. $data['superior_commentator_id'] = $comment['superior_commentator_id'];
  211. $data['physical_exertion'] = $comment['physical_exertion'];
  212. $data['trigger_type'] = $comment['trigger_type'];
  213. $data['generation_type'] = $comment['generation_type'];
  214. $data['release_status'] = $comment['release_status'];
  215. $data['generation_quantity'] = $comment['generation_quantity'];
  216. $data['quantity_issued'] = $comment['quantity_issued'];
  217. $data['current_comment_id'] = $comment['current_comment_id'];
  218. $data['superior_comment_id'] = $comment['superior_comment_id'];
  219. $this->commentAccountRecord->create($data);
  220. $behavior = Behavior::where('virus_behavior_id', $comment['virus_behavior_id'])->first();
  221. $behavior->grant_rainbow_beans += intval($comment['quantity_issued']);
  222. $behavior->trigger_times += 1;
  223. if ($comment['trigger_type']) {
  224. $behavior->effective_trigger += 1;
  225. }
  226. $behavior->save();
  227. DB::commit();
  228. return true;
  229. } catch (QueryException $exception) {
  230. Log::debug('记录账本-评论-exception:' . $exception->getMessage());
  231. DB::rollBack();
  232. return false;
  233. }
  234. }
  235. }