DeleteDataController.class.php 4.23 KB
<?php
/**
 * 删除状态为已删除的和初始化的试卷数据
 * User: yingcai
 * Date: 2017/11/7
 * Time: 下午4:45
 */

namespace Frontend\Controller\Temp;

use Common\Service\PaperService;
use Think\Exception;

class DeleteDataController extends AbstractController
{
    protected $_require_login = false;

    /** @var  PaperService  实例化试卷表对象 */
    protected $paper_service;

    public function before_action($action = '')
    {
        if (!parent::before_action($action)) {

            return false;
        }

        $this->paper_service = new PaperService();

        return true;
    }

    public function Index()
    {
        set_time_limit(0);

        // 实例化think下的model类
        $com_model = new \Think\Model();

        // 初始化状态过期时间
        $deadline = MILLI_TIME - 86400*1000;

        // 从paper表获取已删除的或者试卷状态为初始化且超过有效期的试卷ID
        $sql = "SELECT ep_id FROM `oa_exam_paper` WHERE `status` = 3 OR (`exam_status` = 0 AND `created` < {$deadline})";

        $list = $com_model->query($sql);
        // 需要被删除的时间ID集合
        $ep_ids = array_column($list, 'ep_id');
        $ep_ids_str = implode(',', $ep_ids);

        // 查询被删除的题库
        $bank_sql = "SELECT eb_id FROM `oa_exam_bank` WHERE `status` = 3";
        $bank_list = $com_model->query($bank_sql);
        $eb_ids = array_column($bank_list, 'eb_id');
        $eb_ids_str = implode(',', $eb_ids);

        try {

            $this->paper_service->start_trans();

            if (!empty($ep_ids_str)) {

                // 删除答卷
                $del_answer_sql = "DELETE FROM `oa_exam_answer` WHERE `ep_id` IN ({$ep_ids_str})";
                $com_model->execute($del_answer_sql);

                // 删除答卷详情
                $del_answer_detail_sql = "DELETE FROM `oa_exam_answer_detail` WHERE `ep_id` IN ({$ep_ids_str})";
                $com_model->execute($del_answer_detail_sql);

                // 删除答卷详情扩展
                $del_answer_detail_extend_sql = "DELETE FROM `oa_exam_answer_detail_extend` WHERE `ep_id` IN ({$ep_ids_str})";
                $com_model->execute($del_answer_detail_extend_sql);

                // 删除试卷快照(非随机抽题)
                $del_snapshot_sql = "DELETE FROM `oa_exam_snapshot` WHERE `ep_id` IN ({$ep_ids_str})";
                $com_model->execute($del_snapshot_sql);

                // 删除随机试卷快照
                $del_random_snapshot_sql = "DELETE FROM `oa_exam_random_snapshot` WHERE `ep_id` IN ({$ep_ids_str})";
                $com_model->execute($del_random_snapshot_sql);

                // 删除试卷临时备选题目
                $del_paper_temp_sql = "DELETE FROM `oa_exam_paper_temp` WHERE `ep_id` IN ({$ep_ids_str})";
                $com_model->execute($del_paper_temp_sql);

                // 删除随机答卷临时表数据
                $del_answer_temp = "DELETE FROM `oa_exam_answer_temp` WHERE `ep_id` IN ({$ep_ids_str})";
                $com_model->execute($del_answer_temp);

                // 删除随机答卷详情临时表数据
                $del_answer_detail_temp = "DELETE FROM `oa_exam_answer_detail_temp` WHERE `ep_id` IN ({$ep_ids_str})";
                $com_model->execute($del_answer_detail_temp);

                // 删除试题统计
                $del_statistics_sql = "DELETE FROM `oa_exam_statistics` WHERE `ep_id` IN ({$ep_ids_str})";
                $com_model->execute($del_statistics_sql);

                // 删除试卷
                $del_paper_sql = "DELETE FROM `oa_exam_paper` WHERE `ep_id` IN ({$ep_ids_str})";
                $com_model->execute($del_paper_sql);
            }

            if (!empty($eb_ids_str)) {

                // 删除题库
                $del_bank_sql = "DELETE FROM `oa_exam_bank` WHERE `eb_id` IN ({$eb_ids_str})";
                $com_model->execute($del_bank_sql);

                // 删除题目
                $del_topic_sql = "DELETE FROM `oa_exam_topic` WHERE `eb_id` IN ({$eb_ids_str})";
                $com_model->execute($del_topic_sql);
            }

            $this->paper_service->commit();

        } catch (Exception $e) {

            $this->paper_service->rollback();
        }
    }
}