Answer.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php namespace App\Http\Controllers\Api\Riddle;
  2. use App\Http\Controllers\Api\Api;
  3. use App\Models\Riddle\Answer as Model;
  4. use App\Models\Riddle\Active;
  5. use App\Models\Riddle\ActiveShare;
  6. use App\Models\Riddle\ActiveRecord;
  7. use App\Models\Lottery\RiddleUsable;
  8. use Illuminate\Support\Facades\DB;
  9. /**
  10. * 灯谜问答
  11. *
  12. * @author 刘相欣
  13. *
  14. * */
  15. class Answer extends Api{
  16. /**
  17. * 判断回答是否正确 /api/riddle_answer/check_answer
  18. *
  19. * */
  20. public function check_answer(Model $Model,Active $Active,ActiveRecord $ActiveRecord,ActiveShare $ActiveShare,RiddleUsable $RiddleUsable){
  21. // 接口验签
  22. // $this->verify_sign();
  23. // 检查登录
  24. $uid = $this->checkLogin();
  25. // 获取参数
  26. $activeId = request('active_id',0);
  27. $questionId = request('question_id',0);
  28. $answerId = request('answer_id',0);
  29. // 获取客户城市的数据
  30. $data = $Active->getOne($activeId);
  31. // 如果存在的话
  32. if( !$data ) return json_send(['code'=>'error','msg'=>'活动已下线或不存在','data'=>'']);
  33. // 获取参与次数
  34. $joinTotal = $ActiveRecord->query()->where([['active_id','=',$activeId],['custom_uid','=',$uid]])->count();
  35. // 获取答题次数
  36. $shareTotal = $ActiveShare->query()->where([['active_id','=',$activeId],['custom_uid','=',$uid]])->count();
  37. // 计算答题次数
  38. $data['join_total'] = $data['join_total'] + ( $shareTotal >= $data['join_share'] ? $data['join_share'] : $shareTotal);
  39. // 计算剩余参与次数
  40. $data['join_last'] = $data['join_total'] - $joinTotal;
  41. // 如果次数不够
  42. if( $data['join_last'] <= 0 ) return json_send(['code'=>'error','msg'=>'您已经没有参与次数了','data'=>'']);
  43. // 获取问题列表
  44. $answer = $Model->getOne($questionId,$answerId);
  45. // 组合数据,写入订单表,子表
  46. DB::beginTransaction();
  47. try {
  48. // 记录答题记录
  49. $result = $ActiveRecord->add(['active_id'=>$activeId,'custom_uid'=>$uid,'question_id'=>$questionId,'answer_id'=>$answerId,'is_answer'=>$answer['is_answer']]);
  50. // 如果记录失败
  51. if( !$result ) {
  52. // 回滚事务
  53. DB::rollBack();
  54. // 返回结果
  55. return json_send(['code'=>'error','msg'=>'提交失败','data'=>['error'=>'答题记录失败']]);
  56. }
  57. // 判断答案是否正确
  58. if( $answer['is_answer'] ) {
  59. /**
  60. * @todo
  61. * 对应的抽奖活动 为用户增加一次抽奖机会
  62. */
  63. $usable = $RiddleUsable->query()->where([['custom_uid','=',$uid],['lottery_id','=',$data['lottery_id']]])->first();
  64. if (!$usable) {
  65. $result = $RiddleUsable->query()->insert(['custom_uid'=>$uid,'lottery_id'=>$data['lottery_id'],'number'=>1,'insert_time'=>time(),'update_time'=>time()]);
  66. }else{
  67. $result = $RiddleUsable->query()->where([['custom_uid','=',$uid],['lottery_id','=',$data['lottery_id']]])->increment('number',1);
  68. }
  69. if( !$result ) {
  70. DB::rollBack();
  71. // 返回结果
  72. return json_send(['code'=>'error','msg'=>'提交失败','data'=>['error'=>'抽奖机会增加失败']]);
  73. }
  74. }
  75. // 提交事务
  76. DB::commit();
  77. // 返回结果
  78. return json_send(['code'=>'success','msg'=>'提交成功','data'=>['is_answer'=>$answer['is_answer']]]);
  79. } catch (\Throwable $th) {
  80. // 返回结果
  81. return json_send(['code'=>'success','msg'=>'提交失败','data'=>['error'=>$th->getMessage()]]);
  82. }
  83. }
  84. }