<?php /** * ActivityService.class.php * 活动信息表 * @author: houyingcai * @email: 594609175@qq.com * @date : 2017-05-05 15:25:21 */ namespace Common\Service; use Common\Common\Helper; use Common\Model\ActivityModel; use Common\Model\CommentModel; use Common\Model\LikeModel; use Common\Model\RightModel; use Com\Validate; use Common\Model\PacketModel; use Common\Common\User; use VcySDK\Member; use VcySDK\Service; class ActivityService extends AbstractService { // 发布活动 const PUBLISH_ACTIVITY = 1; // 结束活动 const STOP_ACTIVITY = 2; // 审核中 const CHECK_ING = 0; // 已通过 const CHECK_PASS = 1; // 已驳回(未通过) const CHECK_FAIL = 2; // 红包功能开启 const RED_OPENED = 1; // 红包功能未开启 const RED_NOT_OPEN = 0; // 红包发放比例和(100) const TOTAL_PRO = 100; // 手机号码位数 const MOBLIE_LENGTH = 11; // 红包类型:随机比例红包 const RAND_PRO_RED = 1; // 基数放大比例数 const BASENUM_PRO = 100; // 活动状态:草稿 const DRAFT_STATUS = 0; // 开启审核 const IS_CHECK_OPEN = 1; // 关闭审核 const IS_CHECK_CLOSE = 0; // 自动审核 const AUTO_CHECK = 2; // 开启抢红包图标 const SHOW_RED_OPEN = 1; // 不开启抢红包图标 const SHOW_RED_CLOSE = 0; //活动未隐藏 const IS_HIDE_NO = 0; // 取一条数据用 const ONE = 1; // 扩展字段必填 const IS_REQUIRE_TRUE = 1; // 扩展字段非必填 const IS_REQUIRE_FALSE = 0; /* @var LikeModel 点赞数据model */ protected $_d_like = null; /* @var CommentModel 回帖数据model */ protected $_d_comment = null; /* @var PacketModel 红包数据model */ protected $_d_packet = null; /* @var RightModel 权限model */ protected $_d_right = null; // 构造方法 public function __construct() { $this->_d = new ActivityModel(); // 实例化点赞 $this->_d_like = new LikeModel(); // 实例化评论 $this->_d_comment = new CommentModel(); // 实例化红包 $this->_d_packet = new PacketModel(); // 实例化权限 $this->_d_right = new RightModel(); parent::__construct(); } /** * 活动中心编辑任务类型 * * @param array $old_activity 原始数据 * @param array $activity 最新提交数据 * * @return array */ public function edit_new_type($old_activity = [], $activity = []) { // 验证数据 $data = $this->new_validate_for_add($activity); // 已发布的不能编辑保存成草稿 if ($old_activity['activity_status'] == ActivityModel::ACTIVITY_PUBLISH && $activity['activity_status'] == ActivityModel::ACTIVITY_DRAFT) { E('_ERR_ACTIVITY_STATUS'); } // 是否是立即发布活动 if ($activity['activity_status'] == ActivityModel::ACTIVITY_PUBLISH) { $data['publish_time'] = MILLI_TIME; } // 活动数据入库 $this->_d->update($old_activity['ac_id'], $data); $result = ['ac_id' => intval($old_activity['ac_id'])]; return $result; } /** * 验证新增活动数据 * * @param array $activity 活动数据 * * @return bool */ public function validate_for_add(&$activity) { // 验证规则 $rules = [ 'subject' => 'require|max:30', 'source' => 'max:20', 'begin_time' => 'require', 'end_time' => 'require', 'cover_id' => 'require', 'content' => 'require', 'is_all' => 'require|in:0,1', 'is_notice' => 'require|in:0,1', 'activity_status' => 'require|in:0,1,2', 'is_red_open' => 'require|in:0,1', ]; // 错误提示 $msgs = [ 'subject.require' => L('_ERR_SUBJECT_EMPTY'), 'subject.max' => L('_ERR_SUBJECT_LENGTH_ERROR'), 'source.max' => L('_ERR_SOURCE_LENGTH_ERROR'), 'begin_time' => L('_ERR_BEGINTIME_EMPTY'), 'end_time' => L('_ERR_ENDTIME_EMPTY'), 'cover_id' => L('_ERR_COVER_EMPTY'), 'content' => L('_ERR_CONTENT_EMPTY'), 'is_all' => L('_ERR_ISALL_INVALID'), 'is_notice' => L('_ERR_ISNOTICE_INVALID'), 'activity_status' => L('_ERR_ACTIVITY_STATUS_INVALID'), 'is_red_open' => L('_ERR_IS_RED_OPEN_INVALID'), ]; // 开始验证 $validate = new Validate($rules, $msgs); if (!$validate->check($activity)) { E($validate->getError()); } // 开始时间不能大于结束时间 if ($activity['begin_time'] > $activity['end_time'] && $activity['end_time'] > 0) { E('_ERR_BEGINTIME_GT_ENDTIME'); } // 如果不是全公司并且参与权限是空 if ($activity['is_all'] != self::IS_ALL && empty($activity['right'])) { E('_ERR_RIGHT_EMPTY'); } // 处理全公司时,传递是否可围观 if ($activity['is_all'] == self::IS_ALL) { $activity['is_all_look'] = Helper::SALE_NOT_ALL_LOOK; } // 判断红包是否开启,红包设置为空,抛错 if ($activity['is_red_open'] == self::RED_OPENED && empty($activity['red_content'])) { E('_EMPTY_REDSET'); } // 开启随机比例红包,校验红包参数 if ($activity['red_content']['red_type'] == 1 && !empty($activity['red_content'])) { // 验证红包配置信息 $rules = [ 'red_type' => 'require|in:1,2,3', 'red_base_num' => 'require', 'is_show_red' => 'require|in:0,1', 'warn_mobile' => 'require', ]; // 错误提示 $msgs = [ 'red_type' => L('_ERR_REDTYPE_INVALID'), 'red_base_num' => L('_EMPTY_RED_BASENUM'), 'is_show_red' => L('_ERR_ISSHOWRED_INVALID'), 'warn_mobile' => L('_EMPTY_MOBILE'), ]; //正整数正则 $is_int = '/^[0-9]*[1-9][0-9]*$/'; // 判断基数是否为正整数 if (!preg_match($is_int, $activity['red_content']['red_base_num'])) { E('_ERR_RED_BASENUM_NOT_NUMBER'); } // 基数格式化 $activity['red_content']['red_base_num'] = $activity['red_content']['red_base_num'] * self::BASENUM_PRO; // 判断手机号码格式正确性 if (!preg_match($is_int, $activity['red_content']['warn_mobile']) || strlen($activity['red_content']['warn_mobile']) != self::MOBLIE_LENGTH) { E('_ERR_MOBILE'); } // 开始验证 $validate = new Validate($rules, $msgs); if (!$validate->check($activity['red_content'])) { E($validate->getError()); } // 每人领取次数验证 if (!empty($activity['red_content']['red_get_num'])) { if (!preg_match($is_int, $activity['red_content']['red_get_num'])) { E('_ERR_RED_GET_NUM_NOT_NUMBER'); } } else { $activity['red_content']['red_get_num'] = 0; } // 空祝福语格式化 if (empty($activity['packet_bless'])) { $activity['packet_bless'] = ''; } // 红包规则验证 if (empty($activity['red_content']['rule_list'])) { E('_EMPTY_RED_RULE'); } $rule_list = $activity['red_content']['rule_list']; // 用于储存比例和 $total_proportion = 0; // 金钱验证正则 $money_rule = '/^[0-9]+(.[0-9]{1,2})?$/'; // 判断红包规则内是否有误 foreach ($rule_list as $key => $value) { if (!is_numeric($rule_list[$key]['red_proportion']) || $rule_list[$key]['red_proportion'] > 100 || $rule_list[$key]['red_proportion'] <= 0) { E('_ERR_RED_PROPORTION'); } // 新增逻辑:判断基数*百分比是否为整数 $percentage_each_num = $value['red_proportion'] * $activity['red_content']['red_base_num'] / 100; if (floor($percentage_each_num) != $percentage_each_num) { // 红包基数与百分比之积必须是整数 E('_ERR_RED_PROPORTION_TOTAL_NOT_NUMERIC'); } $total_proportion += $rule_list[$key]['red_proportion']; if (empty($rule_list[$key]['red_proportion_money']) || !preg_match($money_rule, $rule_list[$key]['red_proportion_money'])) { // 判断金额格式 E('_ERR_RED_PRO_MONEY'); } } // 验证比例和是否错误 if ($total_proportion != self::TOTAL_PRO) { E('_ERR_TOTAL_PRO'); } // 如果开启审核,审核人员为空 if (self::IS_CHECK_OPEN == $activity['is_check_open'] && empty($activity['check_user_list'])) { E('_EMPTY_CHECK_UID'); } } // 扩展字段中名称存在重复值 if (!empty($activity['ext_fields'])) { if (count(unserialize($activity['ext_fields'])) != count(array_combine_by_key(unserialize($activity['ext_fields']), 'name'))) { E('_ERR_EXT_FIELDS_NAME'); } } return true; } /** * 对象数组转换为数组 * * @param $array * * @return array */ public function object_array($array) { if (is_object($array)) { $array = (array)$array; } if (is_array($array)) { foreach ($array as $key => $value) { $array[$key] = $this->object_array($value); } } return $array; } /** * 验证新增活动数据 * * @param array $activity 活动数据 * * @return array|bool */ protected function new_validate_for_add($activity) { // 验证规则 $rules = [ 'subject' => 'require|max:30', 'source' => 'max:10', 'cover_id' => 'require', 'content' => 'require', 'activity_status' => 'require|in:0,1', ]; // 错误提示 $msgs = [ 'subject.require' => L('_ERR_SUBJECT_EMPTY'), 'subject.max' => L('_ERR_SUBJECT_LENGTH_ERROR'), 'source.max' => L('_ERR_SOURCE_LENGTH_ERROR'), 'cover_id' => L('_ERR_COVER_EMPTY'), 'content' => L('_ERR_CONTENT_EMPTY'), 'is_recomend' => L('_ERR_ISRECOMMEND_INVALID'), 'activity_status' => L('_ERR_ACTIVITY_STATUS_INVALID'), ]; // 开始验证 $validate = new Validate($rules, $msgs); if (!$validate->check($activity)) { E($validate->getError()); return false; } // 组装数据 $data = [ 'ac_id' => $activity['ac_id'], 'activity_type' => $activity['activity_type'], 'subject' => $activity['subject'], 'source' => $activity['source'], 'content' => $activity['content'], 'cover_id' => $activity['cover_id'], 'activity_status' => $activity['activity_status'], 'integral_action_type' => self::INTEGRAL_ACTION_TYPE_NO, 'is_all' => self::IS_ALL, 'last_time' => MILLI_TIME, 'begin_time' => 0, 'end_time' => 0 ]; return $data; } /** * 获取活动数据 * * @param array $activity 活动数据 * * @return array|bool */ public function fetch_activity($activity) { $right_view = []; $right = $activity['right']; unset($activity['right']); // 活动状态是否存在 if (!isset($activity['activity_status'])) { E('_EMPTY_ACTIVITY_STATUS'); } // 格式化参与权限字段 if (!empty($right)) { $right_view['r_type'] = !empty($right_view['r_type']) ? $right_view['r_type'] : 0; $right_view['uids'] = !empty($right['user_arr']) ? $right['user_arr'] : ''; $right_view['dp_ids'] = !empty($right['dp_arr']) ? $right['dp_arr'] : ''; $right_view['job_ids'] = !empty($right['job_arr']) ? $right['job_arr'] : ''; $right_view['role_ids'] = !empty($right['role_arr']) ? $right['role_arr'] : ''; $right_view['tag_ids'] = !empty($right['tag_arr']) ? $right['tag_arr'] : ''; } $list = [ 'subject' => raddslashes($activity['subject']), // 活动标题 'source' => raddslashes($activity['source']), // 作者 'begin_time' => $activity['begin_time'], // 活动开始时间 'end_time' => $activity['end_time'] ? $activity['end_time'] : 0, // 活动结束时间 'cover_id' => raddslashes($activity['cover_id']), // 活动封面图片ID 'content' => !empty($activity['content']) ? serialize($activity['content']) : $activity['content'], // content 'is_all' => $activity['is_all'], // 是否全公司可参与(0:否 ,1:是)is_all为0时right不能都为空 'is_notice' => $activity['is_notice'], // 是否发送消息通知(0:否 ,1:是(默认开启)) 'activity_status' => $activity['activity_status'], // 动提交状态(0:草稿,1:发布) 'is_red_open' => intval($activity['is_red_open']), // 是否开启红包(0(默认):否,1:是) 'is_check_open' => intval($activity['is_check_open']), // 审核人员权限数据 'check_user_list' => empty($activity['check_user_list']) ? "" : serialize($activity['check_user_list']), 'right' => $right_view, // 参与权限数组 'red_content' => $activity['red_content'], // 红包数据(仅在is_red_open为1,即开启红包时有值) 'packet_bless' => raddslashes($activity['red_content']['packet_bless']), // 红包祝福语 'is_show_red' => intval($activity['is_show_red']), // 是否显示抢红包(0(默认):否,1:是) 'ext_fields' => !empty($activity['ext_fields']) ? serialize($activity['ext_fields']) : "", // 自定义扩展字段 'is_all_look' => intval($activity['is_all_look']), // 是否可围观 'is_post_remind' => intval($activity['is_post_remind']), // 发帖是否推送消息 'is_recommend' => intval($activity['is_recomend']) // 是否推荐到首页 ]; return $list; } /** * 格式化feed流权限数据 * * @param array $right 权限数组 * * @return array */ protected function format_feed_data($right) { $feed_right = []; // 格式化权限字段 if (!empty($right)) { $feed_right['users'] = !empty($right['uids']) ? array_column($right['uids'], 'memID') : ''; $feed_right['departments'] = !empty($right['dp_ids']) ? array_column($right['dp_ids'], 'dpID') : ''; $feed_right['jobs'] = !empty($right['job_ids']) ? array_column($right['job_ids'], 'jobID') : ''; $feed_right['roles'] = !empty($right['role_ids']) ? array_column($right['role_ids'], 'roleID') : ''; } return $feed_right; } /** * 组装发送消息的数据 * * @param int $ac_id 活动ID * @param array $activity 活动信息数组 * @param string $type 发送消息的类型 * * @return array */ public function assemble_msg_params($ac_id, $activity, $type = 'add') { $right_params = []; $params = [ 'ac_id' => $ac_id, 'subject' => $activity['subject'], 'begin_time' => $activity['begin_time'], 'end_time' => $activity['end_time'], 'content' => unserialize($activity['content']) ]; // 发布、立即发布活动 if ($type == 'add') { // 全公司 if (self::IS_ALL == $activity['is_all']) { $params['is_all'] = $activity['is_all']; } else { $right = $activity['right']; $rightServ = new RightService(); // 获取参与活动权限范围 $right_params = $rightServ->list_by_right($right); } } // 编辑活动 if ($type == 'edit') { $right_params = $activity['right']; } return $params = array_merge($params, $right_params); } /** * 组装给审核人发送消息的数据 * * @param int $ac_id 活动ID * @param array $new_activity 新活动信息数组 * @param array $old_activity 原始活动信息数组 * * @return array */ public function send_check_msg_params($ac_id, $new_activity = [], $old_activity = []) { $params = [ 'ac_id' => $ac_id, 'subject' => $new_activity['subject'], 'begin_time' => $new_activity['begin_time'], 'end_time' => $new_activity['end_time'], 'content' => unserialize($new_activity['content']) ]; $new_uids = array_column(unserialize($new_activity['check_user_list']), 'memID'); // 如果是添加则没有原始审核人 if (empty($old_activity)) { $params['uids'] = $new_uids; return $params; } // 原始审核用户UIDS $old_uids = array_column(unserialize($old_activity['check_user_list']), 'memID'); // 获取差集 $params['uids'] = array_diff($new_uids, $old_uids); return $params; } /** * 获取后台活动列表 * * @param array $params 分页及搜索参数 * * @return mixed */ public function get_list_admin($params = []) { // 默认值 $page = !empty($params['page']) ? intval($params['page']) : self::DEFAULT_PAGE; $limit = !empty($params['limit']) ? intval($params['limit']) : self::DEFAULT_LIMIT; // 分页 list($start, $limit) = page_limit($page, $limit); // 获取记录总数 $total = $this->_d->count_by_where($params); // 获取列表数据 $list = []; if ($total > 0) { // 排序 $order_option = ['last_time' => 'DESC']; $list = $this->_d->list_by_where($params, [$start, $limit], $order_option); } // 组装返回数据 $result['total'] = intval($total); $result['limit'] = intval($limit); $result['page'] = intval($page); $result['list'] = $this->format_list_admin($list); return $result; } /** * 格式化后台活动详情数据 * * @param $data array 活动详情数据 * * @return mixed */ public function format_activity_detail($data) { $data = [ 'subject' => raddslashes($data['subject']), 'source' => raddslashes($data['source']), 'ac_id' => intval($data['ac_id']), 'is_all' => intval($data['is_all']), 'is_notice' => intval($data['is_notice']), 'is_recomend' => intval($data['is_recommend']), 'begin_time' => $data['begin_time'], 'end_time' => $data['end_time'], 'activity_status' => $this->activity_status($data['activity_status'], $data['begin_time'], $data['end_time']), 'cover_url' => imgUrlReal($data['cover_id']), 'cover_id' => $data['cover_id'], 'likes' => intval($data['likes']), 'comments' => intval($data['comments']), 'content' => !empty($data['content']) ? unserialize($data['content']) : $data['content'], 'is_red_open' => intval($data['is_red_open']), 'is_check_open' => intval($data['is_check_open']), 'check_user_list' => !empty($data['check_user_list']) ? unserialize($data['check_user_list']) : [], 'red_content' => raddslashes($data['red_content']), 'packet_bless' => raddslashes($data['packet_bless']), 'is_show_red' => rintval($data['is_show_red']), 'ext_fields' => !empty($data['ext_fields']) ? unserialize($data['ext_fields']) : [], 'is_all_look' => intval($data['is_all_look']), 'is_post_remind' => intval($data['is_post_remind']), 'stop_pay_time' => $data['stop_pay_time'] ]; return $data; } /** * 格式化基本详情数据 * @param array $data 活动详情 * @param array $user 用户详情 * @return array * @throws mixed */ public function format_base_detail_data($data = [], $user = []) { // 获取是否有权限围观,有权限参与,以及活动状态 list($activity_status, $is_join_right, $is_all_look) = $this->is_join_right($data, $user); // 查询当前用户是否点赞 $mylikecount = $this->_d_like->count_by_conds( [ 'uid' => $user['memUid'], 'obj_id' => $data['ac_id'], 'type' => self::LIKE_ACTIVITY_TYPE, ] ); $result = [ 'ac_id' => intval($data['ac_id']), 'source' => $data['source'], 'subject' => $data['subject'], 'cover_id' => $data['cover_id'], 'cover_url' => empty($data['cover_id']) ? '' : imgUrlReal($data['cover_id']), 'begin_time' => $data['begin_time'], 'end_time' => $data['end_time'], 'content' => unserialize($data['content']), 'likes' => intval($data['likes']), // 点赞数 'comments' => intval($data['comments']), 'publish_time' => $data['publish_time'], // 发布时间 'is_join_right' => $is_join_right, 'activity_status' => $activity_status, // 活动状态 'is_all_look' => $is_all_look, 'is_like' => $mylikecount > 0 ? self::IS_LIKE_OK : self::IS_LIKE_NO, // 是否已点赞 ]; return $result; } /** * 验证是否具有参与权限 * * @param array $info 活动详情 * @param array $user * * @return array */ public function is_join_right($info = [], $user = []) { // 默认有权发布评论 $is_join_right = Helper::IS_JOIN_RIGHT; // 初始化围观权限(无权限) $is_all_look = Helper::SALE_NOT_ALL_LOOK; // 获取当前活动状态 $activity_status = $this->activity_status($info['activity_status'], $info['begin_time'], $info['end_time']); // 判断参与活动权限 if ($info['is_all'] != ActivityService::IS_ALL) { $right_serv = new RightService(); $right = $right_serv->list_by_conds(['ac_id' => $info['ac_id']]); // 如果没有权限 if (!$right_serv->check_get_quit($right, $user)) { // 如果不能围观且没有权限则抛错 if (Helper::SALE_NOT_ALL_LOOK == $info['is_all_look']) { E('_ERR_NOT_LOOK_SALE_AUTH'); } // 有查看权限 $is_all_look = Helper::SALE_ALL_LOOK; // 没有参与权限 $is_join_right = Helper::NOT_IS_JOIN_RIGHT; } } return [$activity_status, $is_join_right, $is_all_look]; } /** * 格式化后台活动列表数据 * * @param $list * * @return mixed; */ public function format_list_admin(&$list) { foreach ($list as &$v) { $v['comment_pass_num'] = $this->_d_comment->count_by_conds( [ 'ac_id' => $v['ac_id'], 'check_status' => self::CHECK_PASS ] ); $v['comment_checking_num'] = $this->_d_comment->count_by_conds( [ 'ac_id' => $v['ac_id'], 'check_status' => self::CHECK_ING ] ); $v['ac_id'] = intval($v['ac_id']); $v['join_num'] = intval($v['join_num']); $v['join_total'] = intval($v['join_total']); $v['is_all'] = intval($v['is_all']); $v['is_red_open'] = intval($v['is_red_open']); $v['is_show_red'] = intval($v['is_show_red']); $v['is_hidden'] = intval($v['is_hide']); $v['is_check_open'] = intval($v['is_check_open']); $v['cover_url'] = imgUrlReal($v['cover_id']); $v['is_notice'] = intval($v['is_notice']); $v['content'] = empty($v['content']) ? $v['content'] : unserialize($v['content']); $v['likes'] = intval($v['likes']); $v['comments'] = intval($v['comments']); // 转换数据状态 $v['activity_status'] = $this->activity_status($v['activity_status'], $v['begin_time'], $v['end_time']); } return $list; } /** * 格式化活动列表返回数据(手机端) * * @param array $list 活动列表 * @param int $uid 当前用户uid * * @return array */ public function format_activity_list($list = [], $uid = 0) { if (empty($list)) { return []; } $ac_ids = array_column($list, 'ac_id'); // 获取点赞列表数据 $like_data = $this->_d_like->list_by_conds([ 'obj_id' => $ac_ids, 'type' => self::LIKE_ACTIVITY_TYPE, 'uid' => $uid ], null, [], 'like_id,obj_id'); // 我已经点赞的活动id集合 $back_cid = array_column($like_data, 'obj_id'); // 要返回的字段 $arr = []; // 去除中文空格 $search = [" ", " ", "\n", "\r", "\t"]; $replace = ["", "", "", "", ""]; foreach ($list as $key => $val) { // 组装封面图 $val['ac_id'] = intval($val['ac_id']); if (empty($val['cover_id'])) { $val['cover_url'] = ''; } else { $val['cover_url'] = imgUrlReal($val['cover_id']); } // 组装状态 $val['activity_status'] = $this->activity_status($val['activity_status'], $val['begin_time'], $val['end_time']); $val['is_like'] = in_array($val['ac_id'], $back_cid) ? self::IS_LIKE_OK : self::IS_LIKE_NO; $val['content'] = str_replace($search, $replace, strip_tags(unserialize($val['content']))); $val['likes'] = intval($val['likes']); $val['comments'] = intval($val['comments']); $arr[$key] = $val; } return $arr; } /** * 活动状态转化函数 * * @param string $activity_status 活动状态 * @param string $begin_time 开始时间 * @param string $end_time 结束时间 * * @return int 活动状态1:草稿,2:未开始,3:进行中,4:已结束,5:已终止 */ public function activity_status($activity_status = '0', $begin_time = '0', $end_time = '0') { if (ActivityModel::ACTIVITY_DRAFT == $activity_status) { // 草稿 $status = Helper::STATUS_DRAFT; } elseif (ActivityModel::ACTIVITY_STOP == $activity_status) { // 已终止 $status = Helper::STATUS_STOP; } else { // 已发布 if ($begin_time > MILLI_TIME) { // 未开始 $status = Helper::STATUS_NOT_START; } elseif ($begin_time <= MILLI_TIME && $end_time > MILLI_TIME) { // 进行中 $status = Helper::STATUS_ING; } else { // 已结束 $status = Helper::STATUS_END; } } return $status; } /** * 查询活动信息 * * @param int $ac_id 活动ID * * @return array|bool 查询结果 */ public function activity_info($ac_id = 0) { //获取活动状态 $activity = $this->get($ac_id); if (empty($activity)) { E('_ERR_ARTICLE_NOT_FOUND'); } //转化活动状态 $activity['activity_status'] = $this->activity_status($activity['activity_status'], $activity['begin_time'], $activity['end_time']); return $activity; } /** * 前端获取活动列表 * * @param array $params 列表其提交的参数 * @param array $user 登录用户的信息 * * @return mixed */ public function get_list($params = [], $user = []) { // 默认值 $page = !empty($params['page']) ? intval($params['page']) : self::DEFAULT_PAGE; $limit = !empty($params['limit']) ? intval($params['limit']) : self::DEFAULT_LIMIT; // 分页 list($start, $limit) = page_limit($page, $limit); $right = new RightService(); // 权限为全公司或者有围观权限的IDS集合 $ac_ids_all = []; // 当前用户有权限的活动参与权限IDS集合(不包含权限为全公司的参与权限IDS) $ac_ids_right = []; // 1.查询全公司可参与以及全公司可围观的活动id集合 $is_all_activity_list = $this->get_is_all_look_activity_list(); if (!empty($is_all_activity_list)) { $ac_ids_all = array_column($is_all_activity_list, 'ac_id'); } // 获取当前用户所在部门IDS以及顶级部门IDS集合 $dp_ids = $right->get_user_dp_list($user); // 获取用户标签集合 $userService = new User(); $tagsInfo = $userService->getTagsByUserId($user['memUid']); $tag_ids = []; if (!empty($tagsInfo)) { $userTagInfo = isset($tagsInfo['userTagList']) ? array_column($tagsInfo['userTagList'], 'tagId') : []; $departTagInfo = isset($tagsInfo['departTagList']) ? array_column($tagsInfo['departTagList'], 'tagId') : []; $tag_ids = array_unique(array_merge($userTagInfo, $departTagInfo)); } // 2.查询有权限参与的活动id集合 $is_right_activity_list = $this->_d_right->get_right_look_activity_list($user['memUid'], $dp_ids, $user['job']['jobId'], $user['role']['roleId'], $tag_ids); if (!empty($is_right_activity_list)) { $ac_ids_right = array_column($is_right_activity_list, 'ac_id'); } // 合并活动id集合 $ac_ids = array_filter(array_unique(array_merge($ac_ids_all, $ac_ids_right))); if (empty($ac_ids)) { // 无权限访问任何数据,组装返回数据 return [ 'total' => 0, 'limit' => intval($limit), 'page' => intval($page), 'list' => [] ]; } sort($ac_ids); // 查询条件:有权限看的活动、不是草稿、并且没有隐藏 $conds = [ 'ac_id' => $ac_ids, 'activity_status>?' => self::ACTIVITY_DRAFT, 'is_hide' => self::CLOSE_ACTIVITY_HIDE ]; // 获取记录总数 $total = $this->_d->count_by_conds($conds); // 获取列表数据 $list = []; if ($total > 0) { // 按照发布时间排序 $order_option = ['publish_time' => 'DESC']; $fields = 'ac_id,subject,source,cover_id,begin_time,end_time,content,is_show_red,likes,comments,publish_time,activity_status'; $list = $this->_d->list_by_conds($conds, [$start, $limit], $order_option, $fields); } // 组装返回数据 return [ 'total' => intval($total), 'limit' => intval($limit), 'page' => intval($page), 'list' => $this->format_activity_list($list, $user['memUid']) // 循环格式化返回数据 ]; } /** * 获取全公司可见的活动列表 * @return array */ public function get_is_all_look_activity_list() { return $this->_d->get_is_all_look_activity_list(); } /** * 更新收藏状态 * * @param string $ids 数据ID,逗号分割的字符串 * */ public function update_collection($ids) { $url = rpcUrl('/Public/Rpc/Collection/CollectionUpdate'); $params = [ 'uid' => '', 'app' => 'activity', 'dataId' => $ids ]; $res = \Com\Rpc::phprpc($url)->invoke('Index', $params); return $res; } /** * 执行自定义查询SQL语句(安装应用回调时用) * @author 侯英才 * * @param string $sql 执行的SQL语句 * * @return mixed */ public function query($sql) { return $this->_d->query($sql); } /** * 执行自定义非查询SQL语句(安装应用回调时用) * * @author 侯英才 * * @param string $sql 执行的SQL语句 * * @return mixed */ public function execute($sql) { return $this->_d->execute($sql); } /** * 处理红包格式intval * * @param array $array 红包原数组 * * @return array 处理后的数组 */ public function red_format($array = []) { // 格式化红包数据 $array['id'] = intval($array['id']); $array['ac_id'] = intval($array['ac_id']); $array['type'] = intval($array['type']); $array['red_base_num'] = intval($array['red_base_num']); $array['red_get_num'] = intval($array['max_total']); unset($array['max_total']); $array['status'] = intval($array['status']); $array['red_base_num'] = intval($array['red_base_num'] / self::BASENUM_PRO); $array['rule_list'] = !empty($array['red_content']) ? unserialize($array['red_content']) : $array['red_content']; // 删除无用数据 unset($array['domain'], $array['status'], $array['updated'], $array['deleted'], $array['red_content'], $array['created']); return $array; } /** * 管理后台活动已参与列表 * * @param $params * * @return mixed */ public function list_join($params) { // 默认值 $page = !empty($params['page']) ? intval($params['page']) : self::DEFAULT_PAGE; $limit = !empty($params['limit']) ? intval($params['limit']) : self::DEFAULT_LIMIT; // 分页 list($start, $limit) = page_limit($page, $limit); // 按照发布时间排序 $order_option = ['created' => 'DESC']; // 查询条件:已审核 $conds = [ 'check_status' => ActivityService::CHECK_PASS, 'ac_id' => $params['ac_id'] ]; $join_list = $this->_d_comment->list_join($conds, [$start, $limit], $order_option); foreach ($join_list as $join_k => $join_v) { $join_list[$join_k]['memId'] = $join_v['uid']; } return $join_list; } /** * 通过用户名搜索用户UID * * @param string $username 用户名称 * * @return array|string */ public function get_username_uid($username = "") { $uids = []; if (!empty($username)) { $member = User::instance(); // 获取用户名对应的用户UID $user_list = $member->listAllBasic(['memUsername' => $username]); if (!empty($user_list)) { $uids = array_column($user_list, 'memUid'); } } return !empty($uids) ? $uids : ""; } /** * 推荐首页操作 * * @param int $ac_id 销售活动ID * @param array $activity */ public function send_recommend($ac_id = 0, $activity = []) { // 暂时不给首页推荐 return true; // 初始化权限 $send_right = []; if (!empty($right)) { $send_right = [ 'users' => $right['uids'], 'departments' => $right['dp_ids'], 'jobs' => $right['job_ids'], 'roles' => $right['role_ids'], 'tags' => $right['tag_ids'] ]; } $url = rpcUrl('/Public/Rpc/Recommender/ArticleUpdate'); $data_send = [ 'app' => APP_DIR, 'dataCategoryId' => '', 'dataId' => $ac_id, 'title' => $activity['subject'], 'summary' => $activity['content'], 'dataType' => '', 'endTime' => $activity['end_time'], 'attachId' => $activity['cover_id'], 'pic' => imgUrlReal($activity['cover_id']), 'url' => 'Sale/Frontend/Index/Msg?ac_id=' . $ac_id . '&type=' . self::MSG_TYPE_ACTIVITY, 'right' => $send_right ]; \Com\Rpc::phprpc($url)->invoke('Index', $data_send); } }