<?php /** * Created by PhpStorm. * User: yingcai * Date: 2018/3/23 * Time: 下午4:01 */ namespace Common\Service; use Com\Validate; use Common\Common\Constant; use Common\Model\ActivityModel; class ActivityService extends AbstractService { // 构造方法 public function __construct() { $this->_d = new ActivityModel(); parent::__construct(); } /** * 验证活动数据 * * @param array $activity 活动数据 * @param int $activity_status 活动状态 * * @return bool */ public function validate_for_data(&$activity, $activity_status = 0) { // 验证规则 $rules = array( 'is_all' => 'require|in:0,1', 'title' => 'require|max:20', 'start_time' => 'require', 'end_time' => 'require', 'integral' => 'require|number', 'prize_list' => 'require', 'rule' => 'require', 'prize_intro' => 'require', 'is_push_msg' => 'require|in:0,1', 'activity_status' => 'require|in:0,1,2', 'num_limit' => 'number', 'limit_type' => 'in:1,2', ); // 错误提示 $msgs = array( 'is_all' => L('_ERR_IS_ALL_INVALID'), 'title.require' => L('_EMPTY_ACTIVITY_TITLE'), 'title.max' => L('_ERR_TITLE_LENGTH'), 'start_time' => L('_EMPTY_BEGIN_TIME'), 'end_time' => L('_EMPTY_END_TIME'), 'integral' => L('_EMPTY_INTEGRAL'), 'prize_list' => L('_EMPTY_PRIZE_LIST'), 'rule' => L('_EMPTY_ACTIVITY_RULE'), 'prize_intro' => L('_EMPTY_PRIZE_INTRO'), 'is_push_msg' => L('_ERR_IS_PUSH_MSG_INVALID'), 'activity_status.require' => L('_EMPTY_ACTIVITY_STATUS'), 'activity_status.in' => L('_ERR_ACTIVITY_STATUS_INVALID'), ); // 开始验证 $validate = new Validate($rules, $msgs); if (!$validate->check($activity)) { E($validate->getError()); } // 进行中的活动不验证时间(编辑时用到) if ($activity_status != Constant::STATUS_ING) { // 开始时间不能小于当前时间 if ($activity['start_time'] <= MILLI_TIME) { E('_ERR_BEGIN_TIME_LT_NOW_TIME'); } // 开始时间不能大于结束时间 if ($activity['start_time'] > $activity['end_time']) { E('_ERR_BEGIN_TIME_GT_END_TIME'); } } // 如果不是全公司 && 参与权限为空 if ($activity['is_all'] != Constant::IS_ALL_TRUE && empty($activity['right'])) { E('_ERR_RIGHT_EMPTY'); } // 验证积分数是否是正整数 if ($activity['integral'] <= 0) { E('_ERR_INTEGRAL_NUM_LT_ZERO'); } // 验证奖品数量 if (count($activity['prize_list']) != Constant::PRIZE_LIMIT_NUM) { E('_ERR_PRIZE_NUM_EIGHT'); } // 验证奖品参数 foreach ($activity['prize_list'] as $val) { if (empty($val['name'])) { // 奖品名称不能为空 E('_EMPTY_PRIZE_NAME'); } if (!\Com\Validator::is_len_in_range($val['name'], 1, 6, 'utf-8')) { // 奖品名称长度超限 E(L('_ERR_PRIZE_NAME_LENGTH',['name' => $val['name']])); } if (empty($val['cover_id'])) { // 奖品:{$name}图片不能为空 E(L('_EMPTY_PRIZE_COVER', ['name' => $val['name']])); } // 如果是可中奖的奖品(是否视为未中奖(0:否,1:是)) if (!$val['is_prize']) { if (!intval($val['num'])) { // 奖品:{$name}数量不能为空 E(L('_EMPTY_PRIZE_NUM', ['name' => $val['name']])); } if (empty($val['percent']) || !is_numeric($val['percent'])) { // 奖品:{$name}中奖概率不能为空 E(L('_EMPTY_PRIZE_PERCENT', ['name' => $val['name']])); } if (intval($val['num']) < intval($val['lottery_max'])) { // 奖品:{$name}中奖限制次数不得超过奖品数量 E(L('_ERR_PRIZE_NUM_LT_LOTTERY_MAX', ['name' => $val['name']])); } } } // 奖品概率之和不能大于100 $percens = array_sum(array_column($activity['prize_list'], 'percent')); if ($percens > 100) { E('_ERR_PRIZE_PERCENT_SUM_GT_HUNDRED'); } $is_prize_status = array_column($activity['prize_list'], 'is_prize'); // 必须有一个不可中奖的奖品 if (!in_array(Constant::NO_PRIZE, $is_prize_status)) { E('_ERR_MAST_NOT_NOE_PRIZE'); } // 必须有一个可中奖的奖品 if (!in_array(Constant::HAVE_PRIZE, $is_prize_status) && Constant::PRIZE_LIMIT_NUM == count($is_prize_status)) { E('_ERR_MAST_NOE_PRIZE'); } $activity['rule'] = serialize($activity['rule']); $activity['prize_intro'] = serialize($activity['prize_intro']); return true; } /** * 组装发送消息的数据 * * @param int $ac_id 活动ID * @param array $activity 活动信息数组 * * @return array */ public function assemble_msg_params($ac_id, $activity) { $right_params = []; $params = [ 'ac_id' => $ac_id, 'title' => $activity['title'], 'start_time' => $activity['start_time'], 'end_time' => $activity['end_time'], 'integral' => $activity['integral'], ]; // 全公司 if ($activity['is_all'] == Constant::IS_ALL_TRUE) { $params['is_all'] = $activity['is_all']; } else { $right = $activity['right']; $rightServ = new RightService(); // 获取参与活动权限范围 $right_params = $rightServ->list_by_right($right); } return $params = array_merge($params, $right_params); } /** * 根据条件查询总数据条数 * @param array $params * @return int|mixed */ public function count_by_where($params = []) { return $this->_d->count_by_where($params); } /** * 根据条件查询数据列表 * @param array $params 查询条件 * @param null $page_option 分页参数 * @param array $order_option 排序参数 * @param string $fields 查询字段 * @return array|bool */ public function list_by_where($params = [], $page_option = null, $order_option = [], $fields = '*') { return $this->_d->list_by_where($params,$page_option,$order_option,$fields); } }