InstallController.class.php 2.66 KB
<?php
/**
 * 应用安装时的消息回调
 * 2017-11-23 17:13:22 可以去掉 初始化 已经挪到了 RPC 内
 * User: zhuxun37
 * Date: 16/8/11
 * Time: 下午3:44
 */

namespace Frontend\Controller\Callback;

use Common\Service\PluginService;
use Think\Log;

class InstallController extends AbstractController
{
    // 应用表默认数据
    const PLUGIN_DEFAULT_DATA = [
        'integral_center' => [
            'name' => '积分中心',
            'url' => ''
        ],
    ];

    /**
     * 安装消息回调
     *
     * $this->callBackData 格式如下:
     * {
     *   "epId":"772FF3D97F0000017A0F28797968B245",
     *   "plPluginid":"D194A216C0A8C7BD2C339C03334A40EE",
     *   "thirdIdentifier":"QY",
     *   "eplAvailable":1,
     *   "epEnumber":"t5thr",
     *   "qysSuiteid":"tjb2af82c5590f1698",
     *   "flag":false,
     *   "corpid": "wx59cc12dbc3a0fe4c",
     *   "url":"http://thr.vchangyi.com/t5thr/Jobtrain/Frontend/Callback/Install"
     * }
     *
     * @return bool
     */
    public function Index()
    {
        Log::record(sprintf('---%s %s INSTALL START---', QY_DOMAIN, APP_IDENTIFIER), Log::INFO);
        Log::record(var_export($this->callBackData, true), Log::INFO);
        Log::record(sprintf('---%s %s INSTALL END ---', QY_DOMAIN, APP_IDENTIFIER), Log::INFO);

        // 初始化 plugin 表数据
        $this->initPluginData();

        // 存在安装管理助手 但没安装通讯录 再点击邀请人员 通讯录相关时 会报错的问题
        // 所以这里也去通知通讯录安装
        try {
            $rpc = \Com\Rpc::phprpc(rpcUrl('/Contact/Rpc/Common/Install'));
            call_user_func([$rpc, 'index']);
        } catch (\Exception $e) {
            \Think\Log::record('企业 Domain:' . QY_DOMAIN . '应用初始化失败:' . var_export($e, true));
        }

        exit('SUCCESS');
    }

    /**
     * 初始化 plugin 表数据
     */
    private function initPluginData()
    {
        // 查询 应用表数据
        $pluginServ = new PluginService();
        $pluginList = $pluginServ->list_by_conds([
            'ap_key' => [
                'integral_center'
            ]
        ]);
        $pluginList = array_combine_by_key($pluginList, 'ap_key');

        // 写入 应用表数据
        $pluginInsertList = [];
        foreach (self::PLUGIN_DEFAULT_DATA as $apKey => $item) {
            if (!isset($pluginList[$apKey])) {
                $pluginInsertList[] = [
                    'ap_key' => $apKey,
                    'name' => $item['name'],
                    'url' => $item['url']
                ];
            }
        }
        $pluginServ->insert_all($pluginInsertList);

        return true;
    }
}