SaveWorkmateSettingController.class.php
6.21 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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
<?php
/**
* Created by PhpStorm.
* User: liyifei2012it
* Date: 17/7/24
* Time: 17:15
*/
namespace Apicp\Controller\Dailytask;
use Com\PackageValidate;
use Com\Validate;
use Common\Common\Constant;
use Common\Common\DailytaskConfig;
use Common\Service\DailytaskService;
class SaveWorkmateSettingController extends \Apicp\Controller\AbstractController
{
/**
* SaveWorkmateSetting
* @author tangxingguo
* @desc 保存同事圈设置接口
* @param Int is_open:true 是否开启(1=关闭;2=开启)
* @param Array workmate_circle 话题规则(有值开启发表话题激励规则;)
* @param Int workmate_circle.count 周期内设置的提问数
* @param Int workmate_circle.integral 获得积分数
* @param Array workmate_comment 评论规则(有值则开启添加评论激励规则;)
* @param Int workmate_comment.count 周期内设置的回答数
* @param Int workmate_comment.integral 获得积分数
* @param Int workmate_comment.is_unique 是否同一个话题仅计一条评论数(1=否;2=是)
* @param Array workmate_like 点赞规则(有值则开启点赞激励规则;)
* @param Int workmate_like.count 周期内设置的回答数
* @param Int workmate_like.integral 获得积分数
* @param Int workmate_like.unique_circle 是否仅计话题的点赞数(1=否;2=是)
* @return array
*/
public function Index_post()
{
// 验证规则
$rules = [
'is_open' => 'require|integer|in:1,2',
'workmate_circle' => 'array',
'workmate_comment' => 'array',
'workmate_like' => 'array',
];
// 验证请求数据
$validate = new PackageValidate($rules, [], array_keys($rules));
$postData = $validate->postData;
// 格式化数据
if ($postData['is_open'] == Constant::DAILYTASK_IS_OPEN_FALSE) {
$sqlData = ['is_open' => Constant::DAILYTASK_IS_OPEN_FALSE];
} else {
$sqlData = $this->_formatPostData($postData);
}
// 入库
$dailyServ = new DailytaskService();
$workmateSetting = $dailyServ->get_by_conds(['app' => Constant::APP_WORKMATE]);
if (empty($workmateSetting)) {
// 新增数据
$dailyServ->insert($sqlData);
} else {
// 修改数据
$dailyServ->update($workmateSetting['dailytask_id'], $sqlData);
}
// 清除缓存
$taskConfig = &DailytaskConfig::instance();
$taskConfig->clearCacheData(Constant::APP_WORKMATE);
}
/**
* 格式化请求数据
* @author tangxingguo
* @param array $postData 请求数据
* @return array
*/
private function _formatPostData($postData)
{
$sqlData = [
'is_open' => $postData['is_open'],
'app' => Constant::APP_WORKMATE,
'update_time' => MILLI_TIME,
];
// 话题规则
$circleRule = [];
if (isset($postData['workmate_circle']) && !empty($postData['workmate_circle'])) {
$circleRule = $postData['workmate_circle'];
$this->_ruleCheck($circleRule);
// keys
$circleRule['action_keys'] = [Constant::ACTION_KEYS_WORKMATE_CIRCLE];
}
// 评论规则
$commentRule = [];
if (isset($postData['workmate_comment']) && !empty($postData['workmate_comment'])) {
$commentRule = $postData['workmate_comment'];
$this->_ruleCheck($commentRule);
if (!in_array($commentRule['is_unique'], [Constant::DAILYTASK_SAME_CIRCLE_FALSE, Constant::DAILYTASK_SAME_CIRCLE_TRUE])) {
E('_ERR_DAILYTASK_PARAM_VALUE_ERROR');
}
// 是否同一个话题仅计一条评论数
switch ($commentRule['is_unique']) {
case Constant::DAILYTASK_SAME_CIRCLE_FALSE:
$commentRule['config']['unique'] = false;
break;
case Constant::DAILYTASK_SAME_CIRCLE_TRUE:
$commentRule['config']['unique'] = true;
break;
}
// keys
$commentRule['action_keys'] = [Constant::ACTION_KEYS_WORKMATE_COMMENT];
}
// 点赞规则
$likeRule = [];
if (isset($postData['workmate_like']) && !empty($postData['workmate_like'])) {
$likeRule = $postData['workmate_like'];
$this->_ruleCheck($likeRule);
if (!in_array($likeRule['unique_circle'], [Constant::DAILYTASK_LIKE_CIRCLE_FALSE, Constant::DAILYTASK_LIKE_CIRCLE_TRUE])) {
E('_ERR_DAILYTASK_PARAM_VALUE_ERROR');
}
// 是否仅计话题的点赞数
switch ($likeRule['unique_circle']) {
case Constant::DAILYTASK_LIKE_CIRCLE_FALSE:
$likeRule['action_keys'] = [
Constant::ACTION_KEYS_WORKMATE_LIKE_CIRCLE,
Constant::ACTION_KEYS_WORKMATE_LIKE_COMMENT,
];
break;
case Constant::DAILYTASK_LIKE_CIRCLE_TRUE:
$likeRule['action_keys'] = [Constant::ACTION_KEYS_WORKMATE_LIKE_CIRCLE];
break;
}
}
// 组合数据、序列化
$rules = [];
if (!empty($circleRule)) {
$rules[Constant::RULE_NAME_WORKMATE_CIRCLE] = $circleRule;
}
if (!empty($commentRule)) {
$rules[Constant::RULE_NAME_WORKMATE_COMMENT] = $commentRule;
}
if (!empty($likeRule)) {
$rules[Constant::RULE_NAME_WORKMATE_LIKE] = $likeRule;
}
if (!empty($rules)) {
$sqlData['rules'] = serialize($rules);
}
return $sqlData;
}
/**
* @desc 公共规则校验
* @author tangxingguo
* @param array $data 规则数据
*/
private function _ruleCheck($data)
{
$rules = [
'count' => 'require|integer|gt:0',
'integral' => 'require|integer|gt:0|max:6',
];
$validate = new Validate($rules, []);
$validate->check($data);
if (!empty($validate->getError())) {
E($validate->getError());
}
}
}