ImgDataUpdateController.class.php 4.09 KB
<?php
/**
 * 修正调研老数据(多选单选支持多张图片问题)
 * Auth:dj
 * Date:2017-10-19
 */

namespace Frontend\Controller\Index;

use Common\Service\QuestionService;
use Common\Service\RecordService;

class ImgDataUpdateController extends \Common\Controller\Frontend\AbstractController
{

    /**
     * 不是必须登录
     * @var string $_require_login
     */
    protected $_require_login = false;

    public function Index()
    {
        set_time_limit(0);
        ini_set("memory_limit", "1128M");

        $question = new QuestionService();

        // 查询多选和单选问题
        $question_list = $question->list_by_conds(array('q_type' => array(1, 2)));
        // 获取问题id集合
        $qids = array_column($question_list, 'qid');

        $record = new RecordService();
        // 获取回答详情记录
        $record_list = $record->list_by_conds(array('q_id' => $qids));
        try {
            // 开始事务
            $question->start_trans();

            // 循环更新问题信息
            foreach ($question_list as $v) {
                $field = unserialize($v['q_field']);
                $field_new = array();

                foreach ($field as $_v) {
                    if (isset($_v['img_options'])) {
                        // 如果是新数据
                        continue;
                    }

                    $img_options = array();
                    if (!empty($_v['option_img'])) {
                        $img_options = array(
                            array(
                                'option_img' => strval($_v['option_img']),
                                'option_img_url' => strval($_v['option_img_url'])
                            ),
                        );
                    }

                    $field_new[] = array(
                        'option' => strval($_v['option']),
                        'img_options' =>$img_options
                    );
                }

                if(empty($field_new)){
                    continue;
                }
                // 组装更新选项
                $update_data = array(
                    'q_field' => serialize($field_new)
                );
                // 更新问题数据
                $question->update($v['qid'], $update_data);
            }

            // 循环更新回答详情数据
            foreach ($record_list as $v) {
                if (empty($v['answer'])) {
                    // 如果答案为空
                    continue;
                }
                // 反序列化回答数据
                $answer = unserialize($v['answer']);
                $answer_new = array();
                foreach ($answer as $_v) {
                    if (isset($_v['img_options'])) {
                        // 如果是新数据
                        continue;
                    }

                    $img_options = array();
                    if (!empty($_v['option_img'])) {
                        $img_options = array(
                            array(
                                'option_img' => strval($_v['option_img']),
                                'option_img_url' => strval($_v['option_img_url'])
                            ),
                        );
                    }

                    $answer_new[] = array(
                        'option' => strval($_v['option']),
                        'is_check' => intval($_v['is_check']),
                        'img_options'=>$img_options
                    );
                }

                if(empty($answer_new)){
                    continue;
                }
                // 组装更新答案
                $record_data = array(
                    'answer' => serialize($answer_new)
                );
                // 更新答卷记录数据
                $record->update($v['qr_id'], $record_data);
            }

            // 提交事务
            $question->commit();
        } catch (\Exception $e) {
            // 事务回滚
            $question->rollback();
            exit('数据更新失败');
        }

        exit('数据更新成功');
    }

}