SaveQuestionSettingController.class.php
5.36 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
<?php
/**
* Created by PhpStorm.
* User: liyifei2012it
* Date: 17/7/24
* Time: 17:15
*/
namespace Apicp\Controller\Dailytask;
use Com\Validate;
use Com\PackageValidate;
use Common\Common\Constant;
use Common\Common\DailytaskConfig;
use Common\Service\DailytaskService;
class SaveQuestionSettingController extends \Apicp\Controller\AbstractController
{
/**
* SaveQuestionSetting
* @author liyifei
* @desc 保存问答中心设置接口
* @param Int is_open:true 功能开关(1=关闭;2=开启)
* @param Array answer_question 提问规则(任务设置:非空数组表示开启发起提问)
* @param Int answer_question.count:true 周期内设置的提问数
* @param Int answer_question.integral:true 获得积分数
* @param Array answer_answer 回答规则(任务设置:非空数组表示开启添加回答)
* @param Int answer_answer.count:true 周期内设置的回答数
* @param Int answer_answer.integral:true 获得积分数
* @param Int answer_answer.is_unique:true 是否同一提问仅记一条回答(1=否;2=是)
* @return void
*/
public function Index_post()
{
// 验证规则
$rules = [
'is_open' => 'require|integer|in:1,2',
'answer_question' => 'array',
'answer_answer' => 'array',
];
// 验证请求数据
$validate = new PackageValidate($rules, [], array_keys($rules));
// 格式化请求数据
$data = $this->_formatPostData($validate->postData);
// 获取问答中心每日任务配置
$dailyServ = new DailytaskService();
$daily = $dailyServ->get_by_conds(['app' => Constant::APP_ANSWER]);
if (empty($daily)) {
// 新增数据
$dailyServ->insert($data);
} else {
// 修改数据
$dailyServ->update($daily['dailytask_id'], $data);
}
// 清除缓存
$taskConfig = &DailytaskConfig::instance();
$taskConfig->clearCacheData(Constant::APP_ANSWER);
}
/**
* 校验并格式化请求数据
* @author liyifei
* @param array $postData 请求数据
* @return array
*/
private function _formatPostData($postData)
{
// 关闭任务时,仅操作关闭,不处理规则数据
if ($postData['is_open'] == Constant::DAILYTASK_IS_OPEN_FALSE) {
return [
'app' => Constant::APP_ANSWER,
'is_open' => Constant::DAILYTASK_IS_OPEN_FALSE,
'update_time' => MILLI_TIME,
];
}
// 开启任务时,必须设置规则
if (empty($postData['answer_question']) && empty($postData['answer_answer'])) {
E('_ERR_DAILYTASK_MUST_SET_RULES');
}
// 公共规则
$rules = [
'count' => 'require|integer|gt:0',
'integral' => 'require|integer|gt:0',
];
// 校验、格式化提问规则
$answerQuestion = [];
if (isset($postData['answer_question']) && !empty($postData['answer_question'])) {
// 只保留前端有效字段
$answerQuestion = array_intersect_key_reserved($postData['answer_question'], array_keys($rules), true);
// 校验数据
$validate = new Validate($rules, []);
if (!$validate->check($answerQuestion)) {
E($validate->getError());
}
// 补全后端参数:action_keys
$answerQuestion['action_keys'] = [
Constant::ACTION_KEYS_ANSWER_SEND_QUESTION,
];
}
// 校验、格式化回答规则
$answerAnswer = [];
if (isset($postData['answer_answer']) && !empty($postData['answer_answer'])) {
// 添加回答的特殊规则
$rules['is_unique'] = 'integer|in:1,2';
// 只保留前端有效字段
$answerAnswer = array_intersect_key_reserved($postData['answer_answer'], array_keys($rules), true);
// 校验数据
$validate = new Validate($rules, []);
if (!$validate->check($answerAnswer)) {
E($validate->getError());
}
// 补全后端参数:特殊条件配置
if (isset($answerAnswer['is_unique'])) {
switch ($answerAnswer['is_unique']) {
case Constant::DAILYTASK_SAME_QUESTION_FALSE:
$answerAnswer['config']['unique'] = false;
break;
case Constant::DAILYTASK_SAME_QUESTION_TRUE:
$answerAnswer['config']['unique'] = true;
break;
}
}
// 补全后端参数:action_keys
$answerAnswer['action_keys'] = [
Constant::ACTION_KEYS_ANSWER_SEND_ANSWER,
];
}
$ruleData = [];
if (!empty($answerQuestion)) {
$ruleData[Constant::RULE_NAME_ANSWER_QUESTION] = $answerQuestion;
}
if (!empty($answerAnswer)) {
$ruleData[Constant::RULE_NAME_ANSWER_ANSWER] = $answerAnswer;
}
return [
'app' => Constant::APP_ANSWER,
'is_open' => Constant::DAILYTASK_IS_OPEN_TRUE,
'update_time' => MILLI_TIME,
'rules' => empty($ruleData) ? '' : serialize($ruleData),
];
}
}