<?php /** * 员工名单表Service * @author: houyingcai * @email: 594609175@qq.com * @date : 2017-08-29 16:35:26 * @version $Id$ */ namespace Common\Service; use Common\Model\RightModel; use Common\Model\RightUsersModel; class RightUsersService extends AbstractService { // 用户报名(结果)状态:未报名 const SIGN_NO = 0; // 用户报名(结果)状态:报名成功 const SIGN_SUCCESS = 1; // 用户报名状态:报名待审核 const SIGN_WAIT_CHECK = 2; // 用户报名状态:报名未通过 const SIGN_UN_PASS = 3; // 已报名 const SIGN_STATUS_SIGNED = 1; // 未报名 const SIGN_STATUS_UN_SIGN = 2; // 已支付 const SIGN_CHARGE_PAY = 1; // 未支付 const SIGN_CHARGE_UN_PAY = 2; // 待审核 const SIGN_CHECK_WAIT = 0; // 审核通过 const SIGN_CHECK_PASS = 1; // 审核不通过 const SIGN_CHECK_UN_PASS = 2; /** @var RightUsersModel */ protected $_d; public function __construct() { // 实例化员工名单model $this->_d = new RightUsersModel(); parent::__construct(); } /** * 根据培训权限范围添加保存班级人员 * * @author houyingcai * @param int $ed_id 培训ID * @param int $is_sign 是否开启报名 * * @return array */ public function save_right_users($ed_id = 0, $is_sign = 0) { $right_serv = new RightService(); // 获取权限数据 $post_data = $right_serv->list_by_conds(['ed_id' => $ed_id]); // 格式化权限数据 $post_right = []; $rights = $right_serv->format_db_data($post_data); if ($rights[RightService::RIGHT_TYPE_ALL]) { $post_right['is_all'] = self::IS_ALL; } if ($rights[RightService::RIGHT_TYPE_DEPARTMENT]) { $post_right['dp_ids'] = $rights[RightService::RIGHT_TYPE_DEPARTMENT]; } if ($rights[RightService::RIGHT_TYPE_TAG]) { $post_right['tag_ids'] = $rights[RightService::RIGHT_TYPE_TAG]; } if ($rights[RightService::RIGHT_TYPE_USER]) { $post_right['uids'] = $rights[RightService::RIGHT_TYPE_USER]; } if ($rights[RightService::RIGHT_TYPE_JOB]) { $post_right['job_ids'] = $rights[RightService::RIGHT_TYPE_JOB]; } if ($rights[RightService::RIGHT_TYPE_ROLE]) { $post_right['role_ids'] = $rights[RightService::RIGHT_TYPE_ROLE]; } // 获取所有人员UID $uids = $right_serv->list_post_right_uids($post_right); // 人员UID去重 $uids = array_filter(array_unique($uids)); // 开启报名时,报名状态为未报名,否则为已报名 $ru_sign_status = $is_sign ? self::SIGN_STATUS_UN_SIGN : self::SIGN_STATUS_SIGNED; // 开启报名时,报名时间为初始化,否则为当前时间 $ru_sign_up_time = $is_sign ? 0 : MILLI_TIME; $data = [ 'ed_id' => $ed_id, 'ru_sign_status' => $ru_sign_status, 'ru_sign_up_time' => $ru_sign_up_time, ]; $insert_data = []; foreach ($uids as $uid) { $insert_data[] = array_merge($data, ['ru_uid' => $uid]); } // 批量插入新增数据 if (!empty($insert_data)) { $row = $this->insert_all($insert_data); if (!$row) { E('_ERR_RIGHT_USERS_SAVE'); } } // 未开启报名时,并且用户不能为空,更新培训表的已报名人数 if (!$is_sign && !empty($uids)) { $education_server = new EducationService(); $education_server->update($ed_id, ['ed_joined_count' => count($uids)]); } return $uids; } /** * 根据条件查询班级人员列表 * * @author houyingcai * @param array $params 查询条件 * * @return mixed */ public function list_by_right_users($params = []) { // 分页 list($start, $limit) = page_limit($params['page'], $params['limit']); // 分页参数 $page_option = [$start, $limit]; // 发布时间倒序 $order_option = ['ed_id' => 'ASC']; // 组装查询条件 $conds = $this->get_search_where($params); $fields = 'ru_id,ru_uid,ed_id,ru_sign_up_time,ru_sign_status,ru_pay_status,ru_check_status,ru_comments'; return $this->_d->list_by_conds($conds, $page_option, $order_option, $fields); } /** * 统计班级人员数量 * * @param array $params 查询条件 * * @return number */ public function count_by_right_users($params = []) { // 组装查询条件 $conds = $this->get_search_where($params); return $this->_d->count_by_conds($conds); } /** * 组装查询条件 * * @author houyingcai * @param array $params 查询条件 * * @return array */ public function get_search_where($params = []) { $conds = []; $conds['ed_id'] = $params['ed_id']; // 支付状态 $ru_pay_status = intval($params['ru_pay_status']); if (!empty($params['ru_pay_status']) && in_array($ru_pay_status, [self::SIGN_CHARGE_PAY, self::SIGN_CHARGE_UN_PAY]) ) { $conds['ru_pay_status'] = $ru_pay_status; } // 审核状态 $ru_check_status = intval($params['ru_check_status']); if (!empty($params['ru_check_status']) && in_array($ru_check_status, [self::SIGN_CHECK_PASS, self::SIGN_CHECK_UN_PASS]) ) { $conds['ru_check_status'] = $ru_check_status; } // 报名状态 $ru_sign_status = intval($params['ru_sign_status']); if (!empty($params['ru_sign_status']) && in_array($ru_sign_status, [self::SIGN_STATUS_SIGNED, self::SIGN_STATUS_UN_SIGN]) ) { $conds['ru_sign_status'] = $ru_sign_status; } // 报名时间 if (!empty($params['sign_start_time']) && $params['sign_start_time'] != 'NaN' && !empty($params['sign_end_time']) && $params['sign_end_time'] != 'NaN') { $conds['ru_sign_up_time >= ?'] = $params['sign_start_time']; $conds['ru_sign_up_time <= ?'] = $params['sign_end_time']; } // 用户UID if (!empty($params['ru_uids'])) { $conds['ru_uid in(?)'] = $params['ru_uids']; } return $conds; } /** * 班级添加人员接口 * * @author caijianhua * @param array $params * * @return mixed */ public function add_user($params = []) { $ed_id = $params['ed_id']; if (empty($ed_id)) { // 培训ID不能为空 E('_EMPTY_EDUCATION_ID'); } $education_ser = New EducationService(); $education = $education_ser->get($ed_id); if (empty($education)) { // 培训不存在 E('_ERR_EDUCATION_NOT_EXIST'); } $education_status = $education_ser->get_ed_status($education); // 判断培训状态 如果终止或者结束时,不允许添加班级 if ($education_status == EducationService::EDUCATION_PROCESS_END || $education_status == EducationService::EDUCATION_PROCESS_STOP) { E('_ERR_EDUCATION_STOP_END'); } $user_uids = array_column($params['user_list'], 'memID'); $user_uids = array_filter(array_unique($user_uids)); if (empty($user_uids)) { // 人员不能为空 E('_EMPTY_RIGHT_USER'); } // 查询已经添加的人员 $list = $this->_d->list_by_conds(['ed_id' => $ed_id, 'ru_uid' => $user_uids], null, 'ru_uid'); $uids = array_column($list, 'ru_uid'); // 取差集获取新的用户 $news_uid = array_diff($user_uids, $uids); if (empty($news_uid)) { return true; } $user_list = $this->get_all_user_by_cache($news_uid); $news_uid = array_column($user_list, 'memUid'); if (empty($news_uid)) { return true; } // 是否开启报名 $is_sign = $education['ed_is_sign_up']; // 是否开始审核 $is_check = $education['ed_is_check']; // 开启报名时,报名状态为未报名,否则为已报名 $ru_sign_status = $is_sign ? self::SIGN_STATUS_UN_SIGN : self::SIGN_STATUS_SIGNED; // 开启报名时,报名时间为初始化,否则为当前时间 $ru_sign_up_time = $is_sign ? 0 : MILLI_TIME; // 开启报名并且需要手动审核,审核状态为待审核,否则为已审核 $ru_check_status = $is_sign && $is_check ? self::SIGN_CHECK_WAIT : self::SIGN_CHECK_PASS; $data = [ 'ed_id' => $ed_id, 'ru_sign_status' => $ru_sign_status, 'ru_check_status' => $ru_check_status, 'ru_sign_up_time' => $ru_sign_up_time, ]; $insert_data = []; foreach ($news_uid as $uid) { $insert_data[] = array_merge($data, ['ru_uid' => $uid]); } try { $this->start_trans(); // 批量插入新增数据 if (!empty($insert_data)) { $this->insert_all($insert_data); } $conds = ['ed_id' => $ed_id]; // 查询班级人数 $count = $this->_d->count_by_conds($conds); $update_data = []; // 应参与人数 $update_data['ed_join_count'] = $count; // 没有开启报名 参与人数为列表总数 if (EducationService::EDUCATION_SIGN_CLOSE == $is_sign) { // 已参加人数 $update_data['ed_joined_count'] = $count; } // 更新数据不为空更新 if (!empty($update_data)) { $education_ser->update_by_conds($conds, $update_data); } $this->commit(); } catch (\Exception $e) { $this->rollback(); return false; } $msg_params = [ 'ed_id' => $ed_id, 'name' => $education['ed_name'], 'begin_time' => $education['ed_begin_time'], 'end_time' => $education['ed_end_time'], 'address' => $education['ed_address'], 'img_id' => $education['ed_cover_id'], 'uids' => $news_uid, ]; $this->send_msg($msg_params, EducationService::MSG_EDUCATION_PUBLISH); return true; } /** * 获取用户报名状态 * @author:wanghuan * * @param array $education 培训信息 * @param array $right_users 用户报名数据 * * @return int 用户报名状态 */ public function get_sign_up_status($education, $right_users) { // 默认未报名 $sign_up_status = self::SIGN_NO; // 是否开启报名 $ed_is_sign_up = $education['ed_is_sign_up']; // 未开启报名 if (EducationService::EDUCATION_SIGN_CLOSE == $ed_is_sign_up) { // 报名成功 $sign_up_status = self::SIGN_SUCCESS; } // 开启报名 if (EducationService::EDUCATION_SIGN_OPEN == $ed_is_sign_up) { // 报名状态 $ru_sign_status = $right_users['ru_sign_status']; // 支付状态 $ru_pay_status = $right_users['ru_pay_status']; // 审核状态 $ru_check_status = $right_users['ru_check_status']; // 是否收费 $ed_is_charge = $education['ed_is_charge']; // 是否审核 $ed_is_check = $education['ed_is_check']; // 不收费、不审核、状态为已报名 if (EducationService::EDUCATION_UN_CHARGE == $ed_is_charge && EducationService::EDUCATION_UN_CHECK == $ed_is_check && self::SIGN_STATUS_SIGNED == $ru_sign_status ) { // 报名成功 $sign_up_status = self::SIGN_SUCCESS; } // 收费、不审核、状态为已支付 if (EducationService::EDUCATION_CHARGE == $ed_is_charge && EducationService::EDUCATION_UN_CHECK == $ed_is_check && self::SIGN_CHARGE_PAY == $ru_pay_status ) { // 报名成功 $sign_up_status = self::SIGN_SUCCESS; } // 不收费、审核 if (EducationService::EDUCATION_UN_CHARGE == $ed_is_charge && EducationService::EDUCATION_CHECK == $ed_is_check) { // 待审核 if (self::SIGN_CHECK_WAIT == $ru_check_status && self::SIGN_STATUS_SIGNED == $right_users['ru_sign_status']) { // 报名待审核 $sign_up_status = self::SIGN_WAIT_CHECK; } // 审核通过 if (self::SIGN_CHECK_PASS == $ru_check_status) { // 报名成功 $sign_up_status = self::SIGN_SUCCESS; } // 审核不通过 if (self::SIGN_CHECK_UN_PASS == $ru_check_status) { // 报名未通过 $sign_up_status = self::SIGN_UN_PASS; } } } return $sign_up_status; } }