<?php /** * 【考试中心-后台】 删除试卷 * @author: houyingcai * @email: 594609175@qq.com * @date : 2017-05-23 16:29:40 * @version $Id$ */ namespace Apicp\Controller\Paper; use Common\Common\AttachOperation; use Common\Common\DataCenter; use Common\Service\AnswerDetailExtendService; use Common\Service\AnswerDetailService; use Common\Service\AnswerService; use Common\Service\PaperService; use Common\Service\PaperTempService; use Common\Service\RightService; use Common\Service\SnapshotService; use Think\Exception; use VcySDK\Cron; use VcySDK\Service; use Common\Common\StudyMap; class DeleteController extends AbstractController { /** @var PaperService */ protected $paper_service; /** @var RightService */ protected $right_service; /** @var SnapshotService */ protected $snapshot_service; /** @var PaperTempService */ protected $paper_temp_service; /** @var AnswerService */ protected $answer_service; /** @var AnswerDetailService */ protected $answer_detail_service; /** @var AnswerDetailExtendService */ protected $answer_detail_extend_service; public function before_action($action = '') { if (!parent::before_action($action)) { return false; } // 实例化试卷表对象 $this->paper_service = new PaperService(); // 实例化权限表对象 $this->right_service = new RightService(); // 实例化试卷快照表对象 $this->snapshot_service = new SnapshotService(); // 实例化试卷临时备选题目储存表对象 $this->paper_temp_service = new PaperTempService(); // 实例化试卷答题表 $this->answer_service = new AnswerService(); // 实例化试卷答题详情表 $this->answer_detail_service = new AnswerDetailService(); // 实例化试卷答题试题扩展详情表 $this->answer_detail_extend_service = new AnswerDetailExtendService(); return true; } public function Index_post() { $params = I('post.ep_ids'); $ep_ids = array_column($params, 'ep_id'); // 试卷ID不能为空 if (empty($ep_ids) || !is_array($ep_ids)) { E('_ERR_EP_ID_EMPY'); } // 被学习路径关联的课程不可删除 $mapUsedIds = StudyMap::checkAppDataUsed($ep_ids); if (!empty($mapUsedIds)) { E('_ERR_MAP_USED_CANNOT_DELETE'); } // 获取试卷列表 $papers_list = $this->paper_service->list_by_conds(['ep_id' => $ep_ids]); // 遍历验证是否可删除数据 foreach ($papers_list as $key => $v) { // 如果是常规了考试且是已发布的 if (PaperService::NOMAL_TYPE == $v['exam_type'] && PaperService::PAPER_PUBLISH == $v['exam_status']) { // 如果有在进行中的 if ($v['begin_time'] < MILLI_TIME && $v['end_time'] >= MILLI_TIME) { E('_EMPTY_PAPER_DEL_DATA'); } } } $answer_list = $this->answer_service->list_by_conds(['ep_id' => $ep_ids]); // 获取回答记录中的语音题回答记录 $answer_detail_list = $this->answer_detail_service->list_by_conds(['ep_id' => $ep_ids, 'et_type' => PaperService::TOPIC_TYPE_VOICE, 'my_answer<>?' => '']); try { $this->paper_service->start_trans(); // 获取所有试卷 $papers = $papers_list; // 删除试卷 $this->paper_service->delete($ep_ids); // 删除试卷权限 $delete_condition = [ 'epc_id' => $ep_ids, 'er_type' => PaperService::RIGHT_PAPER ]; $this->right_service->delete_by_conds($delete_condition); // 删除回答 $this->answer_service->delete_by_conds(['ep_id' => $ep_ids]); // 删除回答详情 $this->answer_detail_service->delete_by_conds(['ep_id' => $ep_ids]); // 删除试题扩展详情 $this->answer_detail_extend_service->delete_by_conds(['ep_id' => $ep_ids]); // 删除试卷快照 $this->snapshot_service->delete_by_conds(['ep_id' => $ep_ids]); // 删除试卷临时备选题目 $this->paper_temp_service->delete_by_conds(['ep_id' => $ep_ids]); // 循环删除试卷统计的计划任务 $cron_serv = new Cron(Service::instance()); foreach ($papers as $key => $val) { if (!empty($val['cron_statistics'])) { try { $cron_serv->delete($val['cron_statistics']); } catch (\VcySDK\Exception $e) { } } } $this->paper_service->commit(); } catch (Exception $e) { $this->paper_service->rollback(); E('_ERR_DELETE_TOPIC_FAILED'); return false; } // 删除附件操作 $attach_serv = new AttachOperation(); $attach_serv->delete_attach( APP_DIR, 'paper', $ep_ids ); // 循环删除推荐 foreach ($ep_ids as $v) { $url = rpcUrl('/Public/Rpc/Recommender/ArticleDelete'); $data_send = [ 'app' => APP_DIR, 'dataCategoryId' => '', 'dataId' => $v ]; \Com\Rpc::phprpc($url)->invoke('Index', $data_send); } /* 数据中心:删除点赞埋点*/ // 查询考试的所有回答记录 $answer_serv = new AnswerService(); $answer_list = $answer_serv->list_by_conds(['ep_id' => $ep_ids, 'answer_status' => AnswerService::READ_OVER], null, [], 'ea_id'); // 答卷记录id集合 $cids = []; if (!empty($answer_list)) { $cids = array_column($answer_list, 'ea_id'); } if (!empty($cids)) { $datacenter =& DataCenter::instance(); // 执行删除 $datacenter->delLike($cids); } return true; } }