StudyScoreLog.php 6.1 KB
<?php

namespace app\common\model;

use think\Db;
use think\db\exception\DataNotFoundException;
use think\db\exception\ModelNotFoundException;
use think\Exception;
use think\exception\DbException;
use think\Model;

class StudyScoreLog extends Model
{
    // 表名
    protected $name = 'study_score_log';
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = 'int';
    // 定义时间戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = 'updatetime';
    // 追加属性
    protected $append = [

    ];


    //加分
    public function addScore($id, $unique)
    {
        $study = new Study();       //学生表
        $teams = new Team();        //战队表
        $item = new Item();         //项目表
        $ronda = new Ronda();       //场次表
        $stu = \db('study')->where('unique', $unique)->find();             //学生信息
        $xm = \db('item')->where('id', $id)->find();                       //项目信息
        $team = \db('team')->where('title', $stu['team'])->find();        //战队信息
        $ronda = \db('ronda')->where('title',$stu['ronda'])->find();       //场次信息
        $radar = explode(',', $xm['radar_ids']);
        $score = explode(',', $xm['score']);
        $sum_score = 0;
        $list = [];
        //判断当前项目是否在学生所属场次内
        $item_ids = explode(',',$ronda['item_ids']);
       if (in_array($id,$item_ids)){
        foreach ($score as $k) {
            $sum_score += $k;
        }
        foreach ($radar as $k1 => $v1) {
            foreach ($score as $k2 => $v2) {
                if ($k1 == $k2) {
                    $list[$k1]['radar'] = $v1;
                    $list[$k1]['score'] = $v2;
                }
            }
        }
        Db::startTrans();
        try {
            //得分加入学生表中
            $study->allowField(true)->save(['earn_score' => $stu['earn_score'] + $sum_score], ['id' => $stu['id']]);
            //得分加入战队表
            $teams->allowField(true)->save(['score' => $team['score'] + $sum_score], ['id' => $team['id']]);
            //得分写入学生分数记录
            $data = [
                'item_id' => $id,
                'campus_id' => $ronda['campus_id'],
                'study_id' => $stu['id'],
                'team' => $stu['team'],
                'score' => $sum_score,
                'memo' => $stu['name'] . '参加' . $xm['title'] . '加分',
                'createtime' => time()
            ];
            $this->allowField(true)->save($data);
            //学生场次得分
            $study_ronda = \db('study_ronda_score')->where(['sid' => $stu['id'], 'team_id' => $team['id'], 'ronda_id' => $ronda['id']])->find();
            if (empty($study_ronda)) {
                \db('study_ronda_score')
                    ->insert([
                        'sid' => $stu['id'],
                        'team_id' => $team['id'],
                        'ronda_id' => $ronda['id'],
                        'score' => $sum_score
                    ]);
            } else {
                \db('study_ronda_score')
                    ->where([
                        'sid' => $stu['id'],
                        'team_id' => $team['id'],
                        'ronda_id' => $ronda['id']
                    ])->update(['score' => ($study_ronda['score'] + $sum_score)]);
            }
            //学生得分存入item_study_score表中
            $find = \db('item_study_score')
                ->where([
                    'sid' => $stu['id'],
                    'item_id' => $id,
                    'campus_id' => $ronda['campus_id'],
                    'ronda_id' => $ronda['id'],
                ])
                ->find();
            if (empty($find)) {
                \db('item_study_score')->insert([
                    'item_id' => $id,
                    'campus_id' => $ronda['campus_id'],
                    'ronda_id' => $ronda['id'],
                    'sid' => $stu['id'],
                    'score' => $sum_score,
                ]);
            } else {
                \db('item_study_score')
                    ->where([
                        'sid' => $stu['id'],
                        'item_id' => $id,
                        'campus_id' => $ronda['campus_id'],
                        'ronda_id' => $ronda['id'],
                    ])
                    ->update(['score' => ($find['score'] + $sum_score)]);
            }
            //战队得分
            $team_score = \db('team_score')->where(['ronda_id' => $ronda['id'], 'team_id' => $team['id']])->find();
            if (empty($team_score)) {
                \db('team_score')
                    ->insert([
                        'ronda_id' => $ronda['id'],
                        'team_id' => $team['id'],
                        'score' => $sum_score
                    ]);
            } else {
                \db('team_score')
                    ->where(['ronda_id' => $ronda['id'], 'team_id' => $team['id']])
                    ->update(['score' => ($team_score['score'] + $sum_score)]);
            }
            //学生维度得分
            foreach ($list as $key => $value) {
                $ronda_score = new RadarScore();
                $res = $ronda_score->where(['study_id' => $stu['id'], 'radar_id' => $value['radar']])->find();
                if (empty($res)) {
                    $resc = [
                        'study_id' => $stu['id'],
                        'radar_id' => $value['radar'],
                        'campus_id' => $ronda['campus_id'],
                        'score' => $value['score'],
                        'createtime' => time()
                    ];
                    $ronda_score->save($resc);
                } else {
                    $ronda_score->where(['study_id' => $stu['id'], 'radar_id' => $value['radar']])->update(['updatetime' => time(),
                        'score' => $res['score'] + $value['score']]);
                }
            }
            Db::commit();
            return 11;
        } catch (Exception $e) {
            Db::rollback();
            $e->getMessage();
        }
       }else{
           return null;
       }
    }
}