RepairOrderQuestionsController.php 11.7 KB
<?php

namespace app\ht\modules\setting\controllers;

use Yii;
use yii\data\Pagination;
use app\ht\controllers\BaseController;
use common\components\jqueue\base\Exception;
use common\models\RepairOrderInterviewOptions       as RepairOrderInterviewOptionsModel;
use common\models\RepairOrderInterviewQuestions     as RepairOrderInterviewQuestionsModel;
use function time;

/**
 * 订单问卷调查控制器
 * Class RepairOrderInterviewController
 * @package app\ht\modules\setting\controllers
 */
class RepairOrderQuestionsController extends BaseController
{
    /**
     * 问卷调查列表
     */
    public function actionIndex()
    {
        $params = $this->dataList();
        /**
         * 渲染模板
         */
        return $this->render('index', $params);
    }

    /**
     * 添加回访问题
     * @return string
     */
    public function actionCreate()
    {
        return $this->render('create');
    }

    /**
     * 执行添加回访问题操作
     * @return string|\yii\web\Response
     * @throws \Exception
     * @throws \yii\db\Exception
     */
    public function actionDoAdd()
    {
        $request = Yii::$app->request;
        $title = $request->post("title");
        $type = $request->post("type");
        $item_titles = $request->post("item_title");
        $item_sort_orders = $request->post("item_sort_order");
        $sort_order = $request->post("sort_order");

        if (empty($title)) {
            Yii::$app->session->setFlash('danger', '回访问题不能为空');
            return $this->render('create');
        }

        $findQuestion = RepairOrderInterviewQuestionsModel::find()
            ->where(["title"=>$title])->andWhere(["is_deleted" => 0])
            ->count();
        if ($findQuestion) {
            Yii::$app->session->setFlash('danger', '该回访问题已经存在');
            return $this->render('create');
        }

        $transaction = Yii::$app->db->beginTransaction();
        try {
            $interviewModel = new RepairOrderInterviewQuestionsModel();
            $interviewModel->updated_at = time();
            $interviewModel->title = $title;
            $interviewModel->type = $type;
            $interviewModel->sort_order = $sort_order;
            $result = $interviewModel->insert();
            $id = $interviewModel->getAttribute("id");
            $optionResult = false;

            if ($result && $id) {
                if (!empty($item_titles) && !empty($item_sort_orders)) {
                    foreach ($item_titles as $k => $v) {
                        if ($v && $item_sort_orders[$k]) {
                            $optionData = array(
                                'content'       => $v,
                                'question_id'   => $id,
                                'sort_order'    => $item_sort_orders[$k]
                            );
                            $optionModel = new RepairOrderInterviewOptionsModel();
                            $optionModel->setAttributes($optionData,false);
                            $optionResult = $optionModel->insert();
                            unset($optionData);
                        }
                    }
                } else {
                    $optionResult = true;
                }
            }
            if ($optionResult) {
                $transaction->commit();
                Yii::$app->session->setFlash('success', '操作成功');
                return $this->redirect(['index']);
            } else {
                $transaction->rollBack();
                Yii::$app->session->setFlash('danger', '保存失败');
                return $this->render('create');
            }
        } catch (Exception $exception) {
            $transaction->rollBack();
            Yii::$app->session->setFlash('danger', '执行异常');
            return $this->render('create');
        }
    }

    /**
     * 更新回访问题
     * @return string
     */
    public function actionUpdate()
    {
        $request = Yii::$app->request;
        $Id = $request->get("Id");

        $interviewQuestionModel = new RepairOrderInterviewQuestionsModel();
        $interview = $interviewQuestionModel->getInterviewQuestionById($Id);
        $options = RepairOrderInterviewOptionsModel::find()->where("question_id = ". $Id)->orderBy("sort_order asc")->asArray()->all();

        $params = array(
            'info'           => $interview,
            'interviewItems' => $options
        );

        return $this->render('update', $params);
    }

    /**
     * 执行更新回访问题操作
     * @return string
     */
    public function actionDoUpdate()
    {
        $request = Yii::$app->request;
        $id = $request->post("Id");
        $title = $request->post("title");
        $type = $request->post("type");
        $item_titles = $request->post("item_title");
        $item_sort_orders = $request->post("item_sort_order");
        $item_ids = $request->post("item_id");
        $sort_order = $request->post("sort_order");

        if (empty($id)) {
            Yii::$app->session->setFlash('danger', '缺少必要参数');
            return $this->redirect(['index']);
        }

        if (empty($title)) {
            Yii::$app->session->setFlash('danger', '回访问题不能为空');
            return $this->redirect(['update',"Id"=>$id]);
        }

        $findQuestion = RepairOrderInterviewQuestionsModel::find()->where(["title" => $title])->andWhere(["<>", "id", $id])->count();
        if ($findQuestion) {
            Yii::$app->session->setFlash('danger', '该回访问题已经存在');
            return $this->redirect(['update',"Id" => $id]);
        }

        $transaction = Yii::$app->db->beginTransaction();
        try {
            $interviewModel = RepairOrderInterviewQuestionsModel::findOne(["id" => $id]);
            $interviewModel->updated_at = time();
            $interviewModel->title = $title;
            $interviewModel->type = $type;
            $interviewModel->sort_order = $sort_order;
            $result = $interviewModel->save();
            $optionResult = false;
            if ($result) {
                if (!empty($item_titles) && !empty($item_sort_orders)) {
                    foreach ($item_titles as $k => $v) {
                        $item_id = $item_ids[$k];
                        if (empty($item_id)) {
                            if ($v && $item_sort_orders[$k]) {
                                $optionData = array(
                                    'content' => $v,
                                    'question_id' => $id,
                                    'sort_order' => $item_sort_orders[$k]
                                );
                                $optionModel = new RepairOrderInterviewOptionsModel();
                                $optionModel->setAttributes($optionData,false);
                                $optionResult = $optionModel->insert();
                                unset($optionData);
                            }
                        } else if ($item_id) {
                            $optionItem = RepairOrderInterviewOptionsModel::findOne($item_id);
                            if ($v && $item_sort_orders[$k]) {
                                $optionItem->content = $v;
                                $optionItem->sort_order = $item_sort_orders[$k];
                                $optionItem->updated_at = time();
                                $optionResult = $optionItem->save();
                            }
                        }
                    }
                } else {
                    $optionResult = true;
                }
            }

            if ($optionResult) {
                $transaction->commit();
                Yii::$app->session->setFlash('success', '操作成功');
                return $this->redirect(['index']);
            } else {
                $transaction->rollBack();
                Yii::$app->session->setFlash('danger', '保存失败');
                return $this->redirect(['update', "Id" => $id]);
            }
        } catch (Exception $exception) {
            $transaction->rollBack();
            Yii::$app->session->setFlash('danger', '执行异常');
            return $this->redirect(['update', "Id" => $id]);
        }
    }

    protected function dataList()
    {
        $req = Yii::$app->request;

        /**
         * 分页处理
         */
        $findModel = RepairOrderInterviewQuestionsModel::find();
        $pageSize = $req->get("pageSize") ? (int) $req->get("pageSize") : 20;
        $pages = new Pagination(['totalCount' => $findModel->count(), 'pageSize' => $pageSize]);

        $dataList = $findModel->offset($pages->offset)->limit($pages->limit)->orderBy("sort_order asc")->asArray()->all();
        foreach ($dataList as $key=>$item) {
            $options = RepairOrderInterviewOptionsModel::find()->where("question_id =" . $item['id'])->orderBy("sort_order asc")->all();
            $optionsStr = "";
            if ($item['type'] != 0) {
                foreach ($options as $option) {
                    $optionsStr .= '选项' . $option->sort_order . ': ' . $option->content . "<br/>";
                }
            }
            $dataList[$key]["optionsStr"] = $optionsStr;
        }

        return [
            'dataList' => $dataList,
            'pages'    => $pages
        ];
    }

    /**
     * 执行删除回访问题操作
     * @return string
     */
    public function actionDoDelete()
    {
        $request = Yii::$app->request;
        $id = $request->post("Id");

        $interviewModel = RepairOrderInterviewQuestionsModel::findOne($id);
        $interviewModel->updated_at = time();
        $interviewModel->is_deleted = 1;
        $result = $interviewModel->save();

        $msg = array();
        if ($result) {
            $msg['status'] = 1;
            $msg['msg'] = "删除成功";
        } else {
            $msg['status'] = 0;
            $msg['msg'] = "删除失败";
        }
        return $this->renderJson($msg);
    }

    /**
     * 恢复回访问题
     * @return string
     */
    public function actionDoReset()
    {
        $request = Yii::$app->request;
        $id = $request->post("Id");

        $interviewModel = RepairOrderInterviewQuestionsModel::findOne($id);
        $interviewModel->updated_at = time();
        $interviewModel->is_deleted = 0;
        $result = $interviewModel->save();

        $msg = array();
        if ($result) {
            $msg['status'] = 1;
            $msg['msg'] = "恢复成功";
        } else {
            $msg['status'] = 0;
            $msg['msg'] = "恢复失败";
        }

        return $this->renderJson($msg);
    }

    /**
     * 更新排序
     * @return string
     */
    public function actionDoSort()
    {
        $request = Yii::$app->request;
        $post = $request->post();
        $msg = array();

        foreach ($post as $id => $sort) {
            $interviewModel = RepairOrderInterviewQuestionsModel::findOne($id);
            $interviewModel->sort_order = $sort;
            $result = $interviewModel->save();
        }

        if ($result) {
            $msg['status'] = 1;
            $msg['msg'] = "执行成功";
        } else {
            $msg['status'] = 0;
            $msg['msg'] = "执行失败";
        }

        return $this->renderJson($msg);
    }

    /**
     * 执行删除回访问题选项操作
     * @return string
     * @throws \Exception
     */
    public function actionDoDeleteOption()
    {
        $request = Yii::$app->request;
        $id = $request->post("Id");

        $result = RepairOrderInterviewOptionsModel::findOne($id)->delete();
        $msg = array();
        if ($result) {
            $msg['status'] = 1;
            $msg['msg'] = "删除成功";
        } else {
            $msg['status'] = 0;
            $msg['msg'] = "删除失败";
        }

        return $this->renderJson($msg);
    }
}