<?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()); } } }