IntegralController.class.php
5.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?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;
}
}