QuestionService.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: sdf_sky
  5. * Date: 2017/2/21
  6. * Time: 上午11:36
  7. */
  8. namespace App\Services;
  9. use App\Models\Answer;
  10. use App\Models\Question;
  11. use App\Models\Tag;
  12. use App\Models\UserTag;
  13. use Carbon\Carbon;
  14. use Illuminate\Support\Facades\DB;
  15. use Illuminate\Support\Facades\Log;
  16. class QuestionService
  17. {
  18. /*创建问题*/
  19. public static function create(array $data){
  20. $question = Question::create($data);
  21. if($question){
  22. /*添加标签*/
  23. $tagString = trim($data['tags']);
  24. Tag::multiSave($tagString,$question);
  25. $question->userData->increment('questions');
  26. UserTag::multiIncrement($question->user_id,$question->tags()->get(),'questions');
  27. }
  28. return $question;
  29. }
  30. /*添加回答*/
  31. public static function addAnswer(array $data){
  32. $question = Question::find($data['question_id']);
  33. $answer = Answer::create($data);
  34. if($answer){
  35. /*用户回答数+1*/
  36. $answer->userData->increment('answers');
  37. /*问题回答数+1*/
  38. $question->increment('answers');
  39. UserTag::multiIncrement($answer->user_id,$question->tags()->get(),'answers');
  40. }
  41. return $answer;
  42. }
  43. /*采纳回答*/
  44. public static function adoptAnswer($answerId){
  45. $answer = Answer::find($answerId);
  46. if(!$answer){
  47. return false;
  48. }
  49. if($answer->adopted_at){
  50. return false;
  51. }
  52. DB::beginTransaction();
  53. try{
  54. $answer->adopted_at = Carbon::now();
  55. $answer->save();
  56. $answer->question->status = 2;
  57. $answer->question->save();
  58. $answer->user->userData->increment('adoptions');
  59. /*悬赏处理*/
  60. $percent = Setting()->get('best_answer_percent',100) / 100;
  61. $earning = ceil($answer->question->price * $percent) + Setting()->get('coins_adopted',0);
  62. CreditService::create($answer->user_id,'answer_adopted',$earning,Setting()->get('credits_adopted'),$answer->question->id,$answer->question->title);
  63. UserTag::multiIncrement($answer->user->id,$answer->question->tags()->get(),'adoptions');
  64. NotificationService::notify($answer->question->user_id,$answer->user_id,'adopt_answer',$answer->question_title,$answer->question_id);
  65. DB::commit();
  66. /*发送邮件通知*/
  67. if($answer->user->allowedEmailNotify('adopt_answer')){
  68. $emailSubject = '您对于问题「'.$answer->question_title.'」的回答被采纳了!';
  69. $emailContent = "您对于问题「".$answer->question_title."」的回答被采纳了!<br /> 点击此链接查看详情 → ".route('ask.question.detail',['question_id'=>$answer->question_id]);
  70. NotificationService::sendEmail($answer->user->email,$emailSubject,$emailContent);
  71. }
  72. return true;
  73. }catch (\Exception $e) {
  74. Log::error("adopt_answer_error:".$e->getMessage());
  75. DB::rollBack();
  76. return false;
  77. }
  78. }
  79. }