123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <?php namespace App\Http\Controllers\Api\Riddle;
- use App\Http\Controllers\Api\Api;
- use App\Models\Riddle\Answer as Model;
- use App\Models\Riddle\Active;
- use App\Models\Riddle\ActiveShare;
- use App\Models\Riddle\ActiveRecord;
- use App\Models\Lottery\RiddleUsable;
- use Illuminate\Support\Facades\DB;
- /**
- * 灯谜问答
- *
- * @author 刘相欣
- *
- * */
- class Answer extends Api{
- /**
- * 判断回答是否正确 /api/riddle_answer/check_answer
- *
- * */
- public function check_answer(Model $Model,Active $Active,ActiveRecord $ActiveRecord,ActiveShare $ActiveShare,RiddleUsable $RiddleUsable){
- // 接口验签
- // $this->verify_sign();
- // 检查登录
- $uid = $this->checkLogin();
- // 获取参数
- $activeId = request('active_id',0);
- $questionId = request('question_id',0);
- $answerId = request('answer_id',0);
- // 获取客户城市的数据
- $data = $Active->getOne($activeId);
- // 如果存在的话
- if( !$data ) return json_send(['code'=>'error','msg'=>'活动已下线或不存在','data'=>'']);
- // 获取参与次数
- $joinTotal = $ActiveRecord->query()->where([['active_id','=',$activeId],['custom_uid','=',$uid]])->count();
- // 获取答题次数
- $shareTotal = $ActiveShare->query()->where([['active_id','=',$activeId],['custom_uid','=',$uid]])->count();
- // 计算答题次数
- $data['join_total'] = $data['join_total'] + ( $shareTotal >= $data['join_share'] ? $data['join_share'] : $shareTotal);
- // 计算剩余参与次数
- $data['join_last'] = $data['join_total'] - $joinTotal;
- // 如果次数不够
- if( $data['join_last'] <= 0 ) return json_send(['code'=>'error','msg'=>'您已经没有参与次数了','data'=>'']);
- // 获取问题列表
- $answer = $Model->getOne($questionId,$answerId);
- // 组合数据,写入订单表,子表
- DB::beginTransaction();
- try {
- // 记录答题记录
- $result = $ActiveRecord->add(['active_id'=>$activeId,'custom_uid'=>$uid,'question_id'=>$questionId,'answer_id'=>$answerId,'is_answer'=>$answer['is_answer']]);
- // 如果记录失败
- if( !$result ) {
- // 回滚事务
- DB::rollBack();
- // 返回结果
- return json_send(['code'=>'error','msg'=>'提交失败','data'=>['error'=>'答题记录失败']]);
- }
- // 判断答案是否正确
- if( $answer['is_answer'] ) {
- /**
- * @todo
- * 对应的抽奖活动 为用户增加一次抽奖机会
- */
- $usable = $RiddleUsable->query()->where([['custom_uid','=',$uid],['lottery_id','=',$data['lottery_id']]])->first();
- if (!$usable) {
- $result = $RiddleUsable->query()->insert(['custom_uid'=>$uid,'lottery_id'=>$data['lottery_id'],'number'=>1,'insert_time'=>time(),'update_time'=>time()]);
- }else{
- $result = $RiddleUsable->query()->where([['custom_uid','=',$uid],['lottery_id','=',$data['lottery_id']]])->increment('number',1);
- }
- if( !$result ) {
- DB::rollBack();
- // 返回结果
- return json_send(['code'=>'error','msg'=>'提交失败','data'=>['error'=>'抽奖机会增加失败']]);
- }
- }
- // 提交事务
- DB::commit();
- // 返回结果
- return json_send(['code'=>'success','msg'=>'提交成功','data'=>['is_answer'=>$answer['is_answer']]]);
- } catch (\Throwable $th) {
- // 返回结果
- return json_send(['code'=>'success','msg'=>'提交失败','data'=>['error'=>$th->getMessage()]]);
- }
- }
-
- }
|