<?php

namespace app\api\controller;

use app\common\controller\Api;
use think\Db;
use think\Exception;
use think\exception\PDOException;

/**
 * 绑定资质
 * @ApiWeigh (96)
 */
class Bind extends Api
{
    protected $noNeedLogin = [''];
    protected $noNeedRight = ['*'];


    /**
     * @ApiTitle (输入学号绑定信息)
     * @ApiMethod (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="xh", type="string", required=true, description="学号")
     * @ApiReturn   ({
    "code":"状态码",
    "msg": "提示消息",
    "data": {}
    })
     */
        public function inputSno()
    {
        $sno = $this->request->param('sno');
        $user = $this->auth->getUserinfo();
        if (empty($sno)){
            $this->error('参数错误',['status'=>2]);
        }
            $data = db('study')->where('sno',$sno)->value('user_id');
            if ($data){
                $this->error('您当前已经绑定过学生了,请勿重复操作',$data);
            }
            db('study')
                ->where('sno',$sno)
                ->update([
                    'user_id'=>$user['id'],
                    'updatetime'=>time()
                ]);
        $this->success('绑定成功');
    }

    /**
     * @ApiTitle (扫码绑定信息)
     * @ApiMethod (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="unique", type="string", required=true, description="条形码id")
     * @ApiReturn   ({
    "code":"状态码",
    "msg": "提示消息",
    "data": {}
    })
     */
    public function scanCode()
    {
        $unique = $this->request->param('unique');
        $user = $this->auth->getUserinfo();
        if (empty($unique)){
            $this->error('参数错误',['status'=>2]);
        }
        db('study')
            ->where('unique',$unique)
            ->update([
                'user_id'=>$user['id'],
                'updatetime'=>time()
            ]);
        $data = db('study')->where('unique',$unique)->field('id,grade,name,sno')->find();
        $this->success('绑定成功',[$data, 'status' => 1]);
    }

    /**
     * @ApiTitle (项目管理[老师])
     * @ApiMethod (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiReturn   ({
    "code":"状态码",
    "msg": "提示消息",
    "data": {
    "id": 项目id,
    "title": "项目名称",
    "radar_id": "维度id",
    "user_id": "用户id",
    "ronda_id": "场次id",
    "score": "项目积分",
    "createtime": "创建时间",
    "updatetime": "更新时间"
    }
    })
     */
    public function teachItem(){
        $user = $this->auth->getUserinfo();
        $data = db('item')
            ->where('user_id',$user['id'])
            ->select();
        if (empty($data)){
            $this->error('当前还未关联项目',['status'=>2]);
        }
        $this->success('获取项目成功',[$data, 'status' => 1]);
    }

    /**
     * @ApiTitle (活动现场[扫码])
     * @ApiMethod (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="items_id", type="string", required=true, description="项目id")
     * @ApiParams   (name="unique", type="string", required=true, description="条形码唯一标识")
     * @ApiReturn   ({
    "code":"状态码",
    "msg": "提示消息",
    "data": {
    "name": "姓名",
    "gender": "性别",
    "sno": "学号"
     }
    })
     */
    public function Ewm(){
        $items_id = $this->request->param('items_id');
        $unique = $this->request->param('unique');
        if (empty($unique) && empty($items_id)){
            $this->error('参数错误',['status'=>2]);
        }
        $study = db('study')->where('unique',$unique)->field('id,grade,name,sno,team_id,earn_score')->find();
        $rel = \db('item_ronda_rel')->where('item_id',$items_id)->find();
        $item = db('item')->where('id',$rel['item_id'])->field('score,title')->find();
        $team = \db('team')->where('id',$study['team_id'])->field('title,score')->find();
        $sum1 = $team['score'] + $item['score'];    //合计战队总分
        $sum2 = $study['earn_score'] +  $item['score'];  //合计个人总分
        Db::startTrans();
        try {
            db('study_score_log')->insert([
                'item_id'=>$items_id,
                'campus_id'=>$rel['campus_id'],
                'study_id'=>$study['id'],
                'team_id'=>$study['team_id'],
                'score'=>$item['score'],
                'memo'=>$study['name'].'参加'.$item['title'].'项目给'.$team['title'].'加分',
                'createtime'=>time()
            ]);
            db('study')
                ->where('id', $study['id'])
                ->update([
                    'earn_score' => $sum2,
                ]);
            \db('team')
                ->where('id',$study['team_id'])
                ->update([
                    'score' => $sum1,
                    'updatetime'=>time()
                ]);
            Db::commit();
        } catch (Exception $e) {
            Db::rollback();
            $this->error('连接错误',['status' => 3]);
        }
        $data = db('study')->where('unique',$unique)->field('name,gender,sno')->find();
        $this->success('扫码成功',[$data, 'status' => 1]);
    }

    /**
     * @ApiTitle (获取学生信息)
     * @ApiMethod (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="campus_id", type="string", required=true, description="校区id")
     * @ApiReturn   ({
    "code":"状态码",
    "msg": "提示消息",
    "data": {
    "study_info": 学生信息{
    "avatar": "学生头像",
    "name": "学生名称",
    "earn_score": "学生获得分数"
    },
    "study_score": 学生积分构成{
    "total": 2,
    "per_page": 3,
    "current_page": 1,
    "last_page": 1,
    "data": [
    {
    "item_id": 项目id,
    "sum_score": "项目所获分数",
    "item_ronda": 项目对应雷达维度名称[
    {
    "radar_id": 雷达维度id,
    "title": "雷达维度名称"
    }
    ]
    },}
    })
     */
    public function getScore(){
        $user = $this->auth->getUserinfo();
        $campus_id = $this->request->param('campus_id');
        $sid = \db('study')->where('user_id',$user['id'])->value('id');
        //获取学生的信息
        $data['study_info'] = \db('study')->where('id',$sid)->field('avatar,name,earn_score')->find();
        //获取雷达维度
        $data['study_score'] = \db('study_score_log')
            ->distinct('item_id')
            ->field('item_id,SUM(score) as sum_score')
            ->group('item_id')
            ->where(['campus_id'=>$campus_id,'study_id'=>$sid])
            ->paginate(3,false)
            ->each(function ($item,$key){
                $item['item_ronda'] = \db('item i')
                ->join('radar r','i.radar_id = r.id')
                ->where('i.id',$item['item_id'])
                ->field('i.radar_id,r.title')
                ->select();
                return $item;
            });
        $this->success('获取学生信息成功',[$data, 'status' => 1]);
    }

}