IntegralController.class.php 2.99 KB
<?php
/**
 * Created by PhpStorm.
 * User: liyifei2012it
 * Date: 17/8/14
 * Time: 17:50
 */
namespace Frontend\Controller\UpdateDB;

use Think\Model;

class IntegralController extends AbstractController
{
    /**
     * 积分策略版本迭代,数据库升级脚本
     * @author liyifei
     * @date 2017-08-15
     */
    public function Index()
    {
        $sql = $this->_updateSql();
        if (empty($sql)) {
            exit('没有可升级的sql');
        }

        $db = \Think\Db::getInstance();
        try {
            $db->execute($sql);
        } catch (\Exception $e) {
            exit("数据库升级失败:" . $e->getMessage());
        }

        exit('数据库升级完成');
    }

    /**
     * 待升级的sql
     *      1、修改oa_news_article表,增加strategy_setting、strategys字段,记录积分策略设置及策略数据;
     *      2、新增oa_news_user_action表,记录用户积分埋点动作;
     * @author liyifei
     * @return string
     */
    private function _updateSql()
    {
        $modelServ = new Model();
        $articleSql = "select * from `oa_news_article`";
        $article = $modelServ->fetch_row($articleSql);

        $alterSql = '';

        // 修改oa_news_article表,增加strategy_setting字段,记录积分策略设置
        if (!isset($article['strategy_setting'])) {
            $alterSql .= "ALTER TABLE `oa_news_article` ADD COLUMN `strategy_setting` TINYINT(1) NOT NULL DEFAULT 2 COMMENT '积分策略设置(1=启用默认策略;2=不启用策略;3=自定义策略)' AFTER `like_total`;";
        }

        // 修改oa_news_article表,增加strategys字段,记录积分策略数据
        if (!isset($article['strategys'])) {
            $alterSql .= "ALTER TABLE `oa_news_article` ADD COLUMN `strategys` TEXT NOT NULL COMMENT '自定义策略数据' AFTER `strategy_setting`;";
        }

        // 新增oa_news_user_action表,记录用户积分埋点动作
        $alterSql .= "
            CREATE TABLE IF NOT EXISTS `oa_news_user_action` (
              `user_action_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
              `uid` char(32) NOT NULL COMMENT '用户ID',
              `data_id` int(10) NOT NULL COMMENT '数据ID',
              `action_key` varchar(50) NOT NULL COMMENT '动作Key',
              `domain` char(32) NOT NULL COMMENT '企业域名',
              `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '数据状态(1=新创建;2=已更新;3=已删除)',
              `created` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建时间',
              `updated` bigint(20) NOT NULL DEFAULT '0' COMMENT '更新时间',
              `deleted` bigint(20) NOT NULL DEFAULT '0' COMMENT '删除时间',
              PRIMARY KEY (`user_action_id`),
              KEY `uid` (`uid`,`action_key`,`data_id`),
              KEY `domain` (`domain`),
              KEY `status` (`status`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户动作表';
        ";

        return $alterSql;
    }
}