Helper.class.php 6.01 KB
<?php
/**
 * Created by PhpStorm.
 * User: xtong
 * Date: 2017/11/29
 * Time: 10:51
 */

namespace Common\Common;

class Helper
{

    // 活动综合状态 :草稿
    const STATUS_DRAFT = 1;
    // 活动综合状态 :未开始
    const STATUS_NOT_START = 2;
    // 活动综合状态 :进行中
    const STATUS_ING = 3;
    // 活动综合状态 :已结束
    const STATUS_END = 4;
    // 活动综合状态 :已终止
    const STATUS_STOP = 5;

    // 扩展字段类型
    // 文本类型
    const EXT_FIELD_TEXT_TYPE = 1;
    // 数字类型
    const EXT_FIELD_NUMBER_TYPE = 2;
    // 单选类型
    const EXT_FIELD_RADIO_TYPE = 3;
    // 多选类型
    const EXT_FIELD_MULTI_SELECT_TYPE = 4;
    // 时分类型
    const EXT_FIELD_TIME_HI_TYPE = 5;
    // 年月日类型
    const EXT_FIELD_TIME_YMD_TYPE = 6;
    // 年月日时分
    const EXT_FIELD_TIME_YMD_HI_TYPE = 7;

    // 多选单选选项值被选中
    const EXT_FIELD_CHECK = 1;

    // 是否可围观
    // 全公司不可围观
    const SALE_NOT_ALL_LOOK = 0;
    // 全公可围观
    const SALE_ALL_LOOK = 1;

    // 无参加权限
    const NOT_IS_JOIN_RIGHT = 0;
    // 有参加权限
    const IS_JOIN_RIGHT = 1;

    // 移动端首页不推荐
    const SALE_NOT_INDEX_RECOMMEND = 0;
    // 移动端首页推荐
    const SALE_INDEX_RECOMMEND = 1;

    // 是否具有审核权限
    // 不具有审核权限
    const SALE_NOT_CHECK_AUTH = 0;
    // 具有审核权限
    const SALE_CHECK_AUTH = 1;
    // 最大导出条数
    const MAX_EXPORT_NUM = 1000;

    // 用户在当前活动存在一个回帖(含删除)
    const COMMENT_COUNT_ONE = 1;

    // 按部门条件查询时,部门递归查询人员
    const USER_DEPARTMENTCHILDRENFLAG_TRUE = 1;
    // 按部门条件查询时,部门不递归查询人员
    const USER_DEPARTMENTCHILDRENFLAG_FALSE = 0;

    // 时分的正则表达式
    const HOUR_MIN_REGULAR = '/^([01][0-9]|2[0-3]):([0-5][0-9])$/';
    // 年月日的正则表达式
    const YEAR_MONTH_DAY_REGULAR = '/[0-9]{4}\/([1][0-2]|[0][1-9])\/([3][0-1]|[0][1-9]|[1-2][0-9])/';
    // 年月日时分的正则表达式
    const YEAR_MONTH_DAY_HOUR_MIN_REGULAR = '/[0-9]{4}\/([1][0-2]|[0][1-9])\/([3][0-1]|[0][1-9]|[1-2][0-9])\s([01][0-9]|2[0-3]):([0-5][0-9])/';

    /**
     * 实例化
     *
     * @author xtong
     * @return Helper
     */
    public static function &instance()
    {

        static $instance;

        if (is_null($instance)) {
            $instance = new self();
        }

        return $instance;
    }

    // 构造方法
    public function __construct()
    {

        return true;
    }

    /**
     * 获取有权限的人员UID集合
     *
     * @param int $is_all 是否全公司 0=否 1=是
     * @param array $uids 用户UIDS集合
     * @param array $dp_ids 用户部门ID集合
     * @param array $job_ids 用户岗位ID集合
     * @param array $role_ids 用户角色ID集合
     * @param array $is_notes_uids 不需要发消息的用户IDS集合
     *
     * @return array
     */
    public static function get_send_msg_user($is_all = 0, $uids = [], $dp_ids = [], $job_ids = [], $role_ids = [], $is_notes_uids = [])
    {

        $data = [
            'is_all' => $is_all,
            'uids' => $uids,
            'dp_ids' => $dp_ids,
            'job_ids' => $job_ids,
            'role_ids' => $role_ids
        ];

        // 获取有权限的用户集合
        $uids = self::list_uids_by_right($data);

        // 如果有指定不提醒消息的用户UID集合
        if (!empty($is_notes_uids)) {
            // 取差集
            $uids = array_diff($uids, $is_notes_uids);
        }

        sort($uids);

        return $uids;
    }

    /**
     * 获取权限表中的人员
     *
     * @author houyingcai
     *
     * @param array $right 权限数据
     *
     * @return array
     */
    public static function list_uids_by_right($right)
    {

        // 初始化用户类
        $userServ = &User::instance();
        // 全公司
        if (!empty($right['is_all'])) {
            // 公司人员列表
            $res_list = $userServ->listAllBasic([]);

            // 返回人员id集合
            return array_column($res_list, 'memUid');
        }

        // 初始化有权限人员id集合
        $uids = isset($right['uids']) ? $right['uids'] : [];

        // 处理部门
        if (!empty($right['dp_ids'])) {
            // 部门ID去重
            $dp_ids = array_unique($right['dp_ids']);
            sort($dp_ids);

            // 遍历获取部门下的人员,递归查询子部门的人员
            foreach ($dp_ids as $dpid) {

                $params = [
                    'dpId' => $dpid,
                    'departmentChildrenFlag' => self::USER_DEPARTMENTCHILDRENFLAG_TRUE, // 按部门条件查询时,表示部门递归查询人员
                ];
                // 部门人员列表
                $userList = $userServ->listAllBasic($params);

                if (!empty($userList)) {

                    $uids = array_merge($uids, array_column($userList, 'memUid'));
                }
            }
        }

        // 处理岗位
        if (!empty($right['job_ids'])) {

            $job_ids = array_unique($right['job_ids']);
            sort($job_ids);

            // 获取岗位人员列表
            $job_list = $userServ->listAllBasic(['jobIdList' => $job_ids]);
            // 岗位人员列表不为空
            if (!empty($job_list)) {

                $uids = array_merge($uids, array_column($job_list, 'memUid'));
            }

        }

        // 处理角色
        if (!empty($right['role_ids'])) {

            $role_ids = array_unique($right['role_ids']);
            sort($role_ids);

            // 获取角色人员列表
            $role_List = $userServ->listAllBasic(['roleIdList' => $role_ids]);
            // 角色人员列表不为空
            if (!empty($role_List)) {

                $uids = array_merge($uids, array_column($role_List, 'memUid'));
            }

        }

        return array_unique($uids);
    }
}