IntegralController.class.php 5.66 KB
<?php
/**
 * Created by PhpStorm.
 * User: liyifei2012it
 * Date: 17/8/15
 * Time: 16:42
 */
namespace Frontend\Controller\UpdateDB;

use Think\Model;

class IntegralController extends AbstractController
{
    /*
     * 迭代上线时间,即:数据脚本执行时间点
     */
    protected $update_time = '2017-08-28 22:00';

    public function before_action($action = '')
    {
        $this->update_time = rstrtotime($this->update_time, 1);

        return parent::before_action($action);
    }

    /**
     * 积分策略版本迭代,数据库升级脚本
     * @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如下:{$sql}");
    }

    /**
     * 待升级的sql
     *      1.1、修改oa_course_article(课程主表),增加strategy_setting字段,记录积分策略设置;
     *      1.2、修改oa_course_article(课程主表),增加strategys字段,记录策略数据;
     *      2、新增oa_course_user_action(用户积分埋点动作表),记录用户积分埋点动作;
     *      3、清空oa_course_study(课程已学人员表)数据;
     *      4、清空oa_course_study_record(课程学习记录表)数据;
     *      5、清空oa_course_exam(课程测评结果记录表)数据;
     *      6、删除oa_course_award(激励类型表)积分相关数据;
     *      7、删除oa_course_user_award(人员激励数据表)积分相关数据;
     *      8、删除oa_course_user(人员数据表)学习时长数据;
     * @author liyifei
     * @return string
     */
    private function _updateSql()
    {
        $modelServ = new Model();
        $articleSql = "select * from `oa_course_article`";
        $article = $modelServ->fetch_row($articleSql);

        $alterSql = '';

        // 1.1、修改oa_course_article(课程主表),增加strategy_setting字段,记录积分策略设置;
        if (!isset($article['strategy_setting'])) {

            $alterSql .= "ALTER TABLE `oa_course_article` ADD COLUMN `strategy_setting` TINYINT(1) NOT NULL DEFAULT 2 COMMENT '积分策略设置(1=启用默认策略;2=不启用策略;3=自定义策略)' AFTER `article_status`;";
        }

        // 1.2、修改oa_course_article(课程主表),增加strategys字段,记录策略数据;
        if (!isset($article['strategys'])) {

            $alterSql .= "ALTER TABLE `oa_course_article` ADD COLUMN `strategys` TEXT NOT NULL COMMENT '自定义策略数据' AFTER `strategy_setting`;";
        }

        // 2、新增oa_course_user_action(用户积分埋点动作表),记录用户积分埋点动作;
        $alterSql .= "
            CREATE TABLE IF NOT EXISTS `oa_course_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='用户动作表';
        ";

        $qy_domain = QY_DOMAIN;
        $milli_time = MILLI_TIME;

        // 3、清空oa_course_study(课程已学人员表)数据;
        $alterSql .= "UPDATE `oa_course_study` SET `status` = 3, `deleted` = {$milli_time} WHERE `status` < 3 AND `domain` = '{$qy_domain}' AND `created` < {$this->update_time};";

        // 4、清空oa_course_study_record(课程学习记录表)数据;
        $alterSql .= "UPDATE `oa_course_study_record` SET `status` = 3, `deleted` = {$milli_time} WHERE `status` < 3 AND `domain` = '{$qy_domain}' AND `created` < {$this->update_time};";

        // 5、清空oa_course_exam(课程测评结果记录表)数据;
        $alterSql .= "UPDATE `oa_course_exam` SET `status` = 3, `deleted` = {$milli_time} WHERE `status` < 3 AND `domain` = '{$qy_domain}' AND `created` < {$this->update_time};";

        // 6、删除oa_course_award(激励类型表)积分相关数据;
        $alterSql .= "UPDATE `oa_course_award` SET `status` = 3, `deleted`  = {$milli_time} WHERE `status` < 3 AND `domain` = '{$qy_domain}' AND `created` < {$this->update_time} AND `award_type` = 2;";

        // 7、删除oa_course_user_award(人员激励数据表)积分相关数据;
        $alterSql .= "UPDATE `oa_course_user_award` SET `status` = 3, `deleted`  = {$milli_time} WHERE `status` < 3 AND `domain` = '{$qy_domain}' AND `created` < {$this->update_time} AND `award_type` = 2;";

        // 8、删除oa_course_user(人员数据表)学习时长数据;
        $alterSql .= "UPDATE `oa_course_user` SET `status` = 3, `deleted`  = {$milli_time} WHERE `status` < 3 AND `domain` = '{$qy_domain}' AND `created` < {$this->update_time};";

        return $alterSql;
    }
}