AdministratorsController.php 6.64 KB
<?php

namespace app\ht\modules\system\controllers;

use domain\system\EngineerAdministrators;
use Yii;
use yii\data\Pagination;
use app\ht\controllers\BaseController;
use app\wx\models\Engineer              as EngineerModel;
use common\models\EngineerProfile       as EngineerProfileModel;
use domain\system\models\EngineerAdministrators as EngineerAdministratorsModel;
use stdClass;
use yii\web\NotFoundHttpException;

/**
 * 客服接收信息管理控制器
 * Class AdminLog
 * @package app\ht\modules\system\controllers
 */
class AdministratorsController extends BaseController
{
    /**
     * 接收信息工程师列表
     */
    public function actionIndex()
    {
        $request = Yii::$app->request;
        $engineerName = $request->get('engineerName');
        $engineerPhone = $request->get('engineerPhone');

        /**
         * 查询过滤处理
         */
        $get = [];
        $get['engineerName'] = empty($engineerName) ? "" : $engineerName;
        $get['engineerPhone'] = empty($engineerPhone) ? "" : $engineerPhone;

        $query = EngineerAdministratorsModel::find()
            ->alias("a")
            ->select(['a.*', 'ep.nickname', 'e.phone','concat(ep.firstname, ep.lastname) as realname'])
            ->leftJoin(EngineerModel::tableName() . ' e', "a.engineer_id = e.id")
            ->leftJoin(EngineerProfileModel::tableName() . ' ep', "e.id = ep.engineer_id")
            ->orderBy('a.id DESC');

        if (!empty($engineerName)) {
            $query->andWhere(['or', ['like', 'concat(ep.firstname, ep.lastname)', $engineerName], ['like', 'ep.nickname', $engineerName]]);
        }
        if (!empty($engineerPhone)) {
            $query->andWhere(['like', 'e.phone', $engineerPhone]);
        }

        /**
         * 分页处理
         */
        $pageSize = $request->get("pageSize") ? (int)$request->get("pageSize") : 30;
        $pages = new Pagination(['totalCount' => $query->count(), 'pageSize' => $pageSize]);
        $dataList = $query->offset($pages->offset)->limit($pages->limit)->asArray()->all();
        return $this->render('index', array(
            'dataList'  => $dataList,
            'pages'     => $pages,
            'gets'      => $get
        ));
    }

    /**
     * 根据主键查找模型
     */
    protected function findModel($id)
    {
        $user = Yii::createObject(EngineerAdministratorsModel::className());
        if (($model = $user::findOne($id)) !== null) {
            return $model;
        } else {
            throw new NotFoundHttpException('访问页面不存在');
        }
    }

    /**
     * is_order_notify 是否接收订单通知:0-否 1-是
     * 启用或禁用
     */
    public function actionEnableOrderNotify($id)
    {
        $model = $this->findModel($id);
        $model->is_order_notify = ($model->is_order_notify == 1) ? 0 : 1;
        $model->save();

        Yii::$app->session->setFlash('success', '设置成功');

        return $this->redirect(['index']);
    }

    /**
     * is_order_share 是否可以分享订单:0-否 1-是
     * 启用或禁用
     */
    public function actionEnableOrderShare($id)
    {
        $model = $this->findModel($id);
        $model->is_order_share = ($model->is_order_share == 1) ? 0 : 1;
        $model->save();

        Yii::$app->session->setFlash('success', '设置成功');

        return $this->redirect(['index']);
    }

    /**
     * is_cs_notify 是否可以接收客服通知:0-否 1-是
     * 启用或禁用
     */
    public function actionEnableCsNotify($id)
    {
        $model = $this->findModel($id);
        $model->is_cs_notify = ($model->is_cs_notify == 1) ? 0 : 1;
        $model->save();

        Yii::$app->session->setFlash('success', '设置成功');

        return $this->redirect(['index']);
    }

    /**
     * is_activity_notify 是否可以接收营销活动通知:0-否 1-是
     * 启用或禁用
     */
    public function actionEnableActivityNotify($id)
    {
        $model = $this->findModel($id);
        $model->is_activity_notify = ($model->is_activity_notify == 1) ? 0 : 1;
        $model->save();

        Yii::$app->session->setFlash('success', '设置成功');

        return $this->redirect(['index']);
    }

    /**
     * 删除工程师
     */
    public function actionDelete($id)
    {
        $result = EngineerAdministratorsModel::deleteAll(["id" => $id]);

        Yii::$app->session->setFlash('success', '删除成功');

        return $this->redirect(['index']);
    }

    /**
     * 添加工程师
     */
    public function actionDoAdd()
    {
        $userId = Yii::$app->request->post("engineer_id");
        $engineer = Yii::$app->request->post("engineer");
        if ($userId) {
            $hasExists = EngineerAdministratorsModel::findOne(["engineer_id" => $userId]);
            if (empty($hasExists)) {
                $addResult = EngineerAdministrators::Create(["engineer_id" => $userId]);
                if ($addResult) {
                    Yii::$app->session->setFlash('success', '添加成功');
                } else {
                    Yii::$app->session->setFlash('error', '添加失败');
                }
            } else {
                Yii::$app->session->setFlash('error', "工程师($engineer)添加失败,因为之前已经添加");
            }
        } else {
            Yii::$app->session->setFlash('error', '添加失败');
        }
        return $this->redirect(['index']);
    }

    /** 搜索可收信息工程师
     * @return string
     */
    public function actionSearchEngineer()
    {
        $e = new stdClass();
        $e->success = false;
        $e->list = [];
        $req = Yii::$app->request;
        $keyword = $req->post('query');

        $keyword = str_replace(array(" ", " ", "\t", "\n", "\r"), '', $keyword);
        $engineerModel = EngineerModel::find();
        $engineerModel->leftJoin('engineer_profile', "engineer.id = engineer_profile.engineer_id");
        $engineerModel->select(['engineer.id as id', 'engineer.phone as phone', 'engineer_profile.nickname as nickname', 'concat(engineer_profile.firstname,engineer_profile.lastname) as name']);
        if (!empty($keyword)) {
            $engineerModel->where(['or', ['like', 'engineer.phone', $keyword], ['like', 'engineer_profile.nickname', $keyword], ['like', 'concat(engineer_profile.firstname,engineer_profile.lastname)', $keyword]]);
        }
        $engineerModel->andWhere(['engineer.subscribe' => 1]);
        $engineerModel->andWhere("ifnull(engineer.phone,'') <> ''");
        $engineerModel->asArray();
        $engineerModel->limit(10);
        $engineerList = $engineerModel->all();
        $e->success = true;

        $e->list = $engineerList;
        return $this->renderJson($e);
    }
}