InstallController.class.php 7.35 KB
<?php
/**
 * 应用安装时的消息回调
 * User: zhuxun37
 * Date: 16/8/11
 * Time: 下午3:44
 */

namespace Frontend\Controller\Callback;

use Common\Service\ActivityService;
use Think\Log;

class InstallController extends AbstractController
{
    /**
     * 应用状态,可用
     */
    const PLUGIN_STATE_AVAILABLE = 1;

    /**
     * 应用状态,不可用
     */
    const PLUGIN_STATE_UNAVAILABLE = 2;

    // 活动主表
    /** @var ActivityService */
    protected $activity_serv;

    public function __construct()
    {
        parent::__construct();

        // 实例化活动表
        $this->activity_serv = new ActivityService();

    }

    /**
     * 安装消息回调
     *
     * $this->callBackData 格式如下:
     * {
     *   "epId":"B646C6F67F0000017D3965FCF2FD3A2F",
     *   "plPluginid":"D194A216C0A8C7BD2C339C03334A40EE",
     *   "thirdIdentifier":"QY",
     *   "eplAvailable":1,
     *   "epEnumber":"local",
     *   "qysSuiteid":"tj371afbea374f01b2",
     *   "flag":false,
     *   "corpid": "wxac606454f473e98f",
     *   "url":"http://thr.vchangyi.com/local/Contact/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);

        $this->Install();
        exit('SUCCESS');
    }

    /**
     * 安装应用
     * @author liyifei
     * @return void
     */
    public function Install()
    {
        exit('SUCCESS');
    }

    /**
     * 卸载应用
     * @author zhonglei
     * @return void
     */
    public function Uninstall()
    {
        exit('SUCCESS');
    }

    /**
     * 应用数据库数据更新升级【v3.0.0】
     *
     * @author heyuelong
     *
     * @return void
     */
    public function UpdateDBv3()
    {
        set_time_limit(0);
        ini_set("memory_limit", "1128M");
        $sql = [];
        // 活动中心主表
        $pes = $this->activity_serv->query("SHOW FIELDS FROM  oa_activity_activity");
        $field = array_column($pes, 'field');
        if (!in_array('integral_action_type', $field)) {
            // 新增策略类型字段
            $sql[] = "ALTER TABLE oa_activity_activity add integral_action_type TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '积分策略(1:启用默认,2:不启用,3:启用自定义策略)'";
        }
        if (!in_array('integral_strategyid', $field)) {
            // 新增策略id字段
            $sql[] = "ALTER TABLE oa_activity_activity add integral_strategyid varchar(255) NOT NULL DEFAULT '' COMMENT '积分策略ID集合(逗号分隔)'";
        }

        if (!in_array('floor', $field)) {
            // 新增楼层字段
            $sql[] = "ALTER TABLE oa_activity_activity add floor INT (11) NOT NULL DEFAULT '0' COMMENT '楼层'";
        }

        // 回复表
        $pes_commit = $this->activity_serv->query("SHOW FIELDS FROM  oa_activity_comment");

        $commit_field = array_column($pes_commit, 'field');

        // 回复楼层字段
        if (!in_array('sort', $commit_field)) {

            $sql[] = "ALTER TABLE oa_activity_comment add   `sort` INT(10) NOT NULL DEFAULT '0' COMMENT '排序'";

        }


        // 新增活动回复,被回复统计信息表
        $sql[] = "CREATE TABLE IF NOT EXISTS `oa_activity_count` (
              `id` INT(10) NOT NULL AUTO_INCREMENT,
              `uid` CHAR(32) NOT NULL DEFAULT '' COMMENT '用户ID',
              `replies_total` INT(10) NOT NULL DEFAULT '0' COMMENT '回帖被回复次数',
              `replies_num` INT(10) NOT NULL DEFAULT '0' COMMENT '回帖被回复个数',
              `reply_total` INT(10) NOT NULL DEFAULT '0' COMMENT '回帖次数',
              `reply_num` INT(10) NOT NULL DEFAULT '0' COMMENT '回复活动数',
              `answer_total` INT(10) NOT NULL DEFAULT '0' COMMENT '回复次数',
              `answer_num` INT(10) NOT NULL DEFAULT '0' COMMENT '回复回帖个数',
              `domain` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '企业域名',
              `status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态, 1=初始化,2=已更新,3=已删除',
              `created` BIGINT(13) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间',
              `updated` BIGINT(13) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间',
              `deleted` BIGINT(13) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除时间',
              PRIMARY KEY (`id`),
              KEY `uid` (`uid`),
              KEY `domain_status` (`domain`,`status`)
            ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='活动回复,被回复统计信息表' AUTO_INCREMENT=1;";


        // 新增同事圈话题被回复,回复话题日志表
        $sql[]="CREATE TABLE IF NOT EXISTS `oa_activity_history` (
          `id` INT(10) NOT NULL AUTO_INCREMENT,
          `uid` CHAR(32) NOT NULL DEFAULT '' COMMENT '用户ID',
          `ac_id` INT (10) NOT NULL DEFAULT '0' COMMENT '话题ID',
          `pid` INT(10) NOT NULL DEFAULT '0' COMMENT '帖子ID',
          `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '回复类型, 1:回复活动类型, 2:回帖被回复,3.被回复帖子',
          `post_man` CHAR(32) NOT NULL DEFAULT '' COMMENT '回帖人UID',
          `domain` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '企业域名',
          `status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态, 1=初始化,2=已更新,3=已删除',
          `created` BIGINT(13) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间',
          `updated` BIGINT(13) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间',
          `deleted` BIGINT(13) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除时间',
          PRIMARY KEY (`id`),
          KEY `uid` (`uid`),
          KEY `post_man` (`post_man`),
          KEY `pid` (`pid`),
          KEY `domain_status` (`domain`,`status`)
        ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='同事圈话题被回复,回复话题日志表' AUTO_INCREMENT=1;";

        // 新增活动积分日志表
        $sql[] = "CREATE TABLE IF NOT EXISTS `oa_activity_log` (
          `id` INT(10) NOT NULL AUTO_INCREMENT,
          `uid` CHAR(32) NOT NULL DEFAULT '' COMMENT '用户ID',
          `pid` INT(10) NOT NULL DEFAULT '0' COMMENT '帖子ID',
          `businessId` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '业务ID',
          `domain` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '企业域名',
          `status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态, 1=初始化,2=已更新,3=已删除',
          `created` BIGINT(13) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间',
          `updated` BIGINT(13) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间',
          `deleted` BIGINT(13) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除时间',
          PRIMARY KEY (`id`),
          KEY `uid` (`uid`),
          KEY `businessId` (`businessId`),
          KEY `domain_status` (`domain`,`status`)
        ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='活动积分日志表' AUTO_INCREMENT=1;";

        if (!empty($sql)) {
            // 循环执行sql更新语句
            foreach ($sql as $key => $value) {
                $this->activity_serv->execute($value);
            }
        }

        exit('SUCCESS');
    }
}