ListController.class.php 7.14 KB
<?php
/**
 * Created by PhpStorm.
 * User: zs_anything
 * Date: 17/06/26
 * @reader zs_anything 2017-06-29
 */
namespace Apicp\Controller\Invite;


use Common\Common\Department;
use Common\Common\User;
use Common\Model\InviteUserModel;
use Common\Service\InviteUserService;
use VcySDK\Adminer;
use VcySDK\Service;

class ListController extends AbstractController
{
    // 部门ID key
    const ATTR_DP_ID = "dp_id";

    // 审核人ID key
    const ATTR_CHECK_UID = "check_uid";

    /**
     * 待审核的邀请记录
     */
    public function Index_post()
    {
        $page = I("post.page", 1);
        $limit = I("post.limit", 10);

        // 获取所有邀请记录
        list($limit, $page, $inviteUserList, $total) = $this->getInviteUserList($page, $limit);

        $inviteeDepartments = $this->getAllInviteeDepartment($inviteUserList);

        $inviteUserList = $this->formatResultData($inviteUserList, $inviteeDepartments);

        $this->_result = [
            'page' => $page,
            'limit' => $limit,
            'total' => $total,
            'list' => $inviteUserList,
        ];

    }

    /**
     * 获取所有邀请记录
     * @param $page
     * @param $limit
     * @return array
     */
    private function getInviteUserList($page, $limit)
    {
        $dpIds = I('post.dpIds', []);
        $userName = I('post.userName', '');
        $checkStatus = I('post.checkStatus', '');
        $jobName = I('post.jobName', '');
        $roleName = I('post.roleName', '');
        $applyTimeStart = I('post.applyTimeStart', 0);
        $applyTimeEnd = I('post.applyTimeEnd', 0);

        $conds = [];
        if (count($dpIds) > 0) {
            $conds[self::ATTR_DP_ID] = $dpIds;
        }
        if (!empty($userName)) {
            $conds['username LIKE ? '] = "%" . $userName . "%";
        }
        if (!empty($checkStatus)) {
            $conds['check_status'] = $checkStatus;
        }
        if (!empty($jobName)) {
            $conds['job_name LIKE ? '] = '%' . $jobName . '%';
        }
        if (!empty($roleName)) {
            $conds['role_name LIKE ? '] = '%' . $roleName . '%';
        }
        if (!empty($applyTimeStart)) {
            $conds['created >= ? '] = $applyTimeStart;
        }
        if (!empty($applyTimeEnd)) {
            $conds['created <= ? '] = $applyTimeEnd;
        }

        $conds['type'] = InviteUserModel::INVITE_TYPE_APPROVAL;

        list($start, $limit, $page) = page_limit($page, $limit);

        $inviteUserService = new InviteUserService();
        $inviteUserList = $inviteUserService->list_by_conds($conds, [$start, $limit], ['created' => 'DESC']);
        $inviteUserCount = $inviteUserService->count_by_conds($conds);

        return array($limit, $page, $inviteUserList, $inviteUserCount);
    }

    /**
     * 获取所有被邀请人所在组织
     * @param $inviteUserList
     * @return array
     */
    private function getAllInviteeDepartment($inviteUserList)
    {
        // 被邀请人所在组织ID
        $dpIds = array_column($inviteUserList, self::ATTR_DP_ID);

        $departmentUtil = new Department();
        return array_combine_by_key($departmentUtil->listById($dpIds), "dpId");

    }

    /**
     * 封装返回数据
     * 封装被邀请人所在组织名称
     * 封装审核人名称
     * @param $inviteUserList     邀请记录
     * @param $inviteeDepartments 被邀请人所在组织
     * @return mixed
     */
    private function formatResultData($inviteUserList, $inviteeDepartments)
    {

        list($checkUserList, $checkAdminList) = $this->getAllCheckUserInfo($inviteUserList);

        foreach ($inviteUserList as &$item) {

            $form = unserialize($item['form']);
            $form = array_combine_by_key($form, 'field_name');
            // 封装被邀请人所在组织名称
            $item['dp_name'] = $this->formatInviteeDpName($inviteeDepartments, $item);
            $item['job_name'] = $form['memJob']['attr_value'];
            $item['role_name'] = $form['memRole']['attr_value'];
            // 如果已审核, 封装审核人名称
            if ($item['check_status'] != InviteUserModel::CHECK_STATUS_WAIT) {
                $item['check_name'] = $this->formatCheckUserName($checkUserList, $checkAdminList, $item);
            } else {
                $item['check_name'] = "";
            }
        }

        return $inviteUserList;
    }

    /**
     * 封装被邀请人所在组织
     * @param $dpList
     * @param $item
     * @return mixed
     */
    private function formatInviteeDpName($dpList, $item)
    {
        $dpInfo = $dpList[$item[self::ATTR_DP_ID]];

        if (empty($dpInfo)) {
            return '';
        } else {
            return $dpInfo['dpName'];
        }
    }



    /**
     * 获取所有审核人信息
     * 返回管理员审核人和员工审核人数据
     * @param $inviteUserList
     * @return array
     */
    private function getAllCheckUserInfo($inviteUserList)
    {

        // 管理员审核的管理员ID
        $checkAdminEaIds = [];

        // 员工审核的UID
        $checkUserUids = [];

        foreach ($inviteUserList as $item) {
            // 邀请记录已审核
            if ($item['check_status'] != InviteUserModel::CHECK_STATUS_WAIT) {
                // 管理员审核
                if (InviteUserModel::CHECK_TYPE_ADMIN == $item['check_type']) {
                    $checkAdminEaIds[] = $item[self::ATTR_CHECK_UID];
                } else if (InviteUserModel::CHECK_TYPE_USER == $item['check_type']) {
                    // 员工审核
                    $checkUserUids[] = $item[self::ATTR_CHECK_UID];
                }
            }
        }

        // 去重
        $checkAdminEaIds = array_filter($checkAdminEaIds);
        $checkUserUids = array_filter($checkUserUids);

        // 获取员工审核人的信息
        $checkUserList = [];
        if (count($checkUserUids) > 0) {
            $userUtil = new User();
            $checkUserList = $userUtil->listByUid($checkUserUids);
            $checkUserList = array_combine_by_key($checkUserList, "memUid");
        }

        // 获取管理员审核人的信息
        $checkAdminList = [];
        if (count($checkAdminEaIds) > 0) {
            $adminUtil = new Adminer(Service::instance());
            $checkAdminList = $adminUtil->listAll([
                'eaIds' => $checkAdminEaIds,
                'pageSize' => 999,
            ]);

            $checkAdminList = array_combine_by_key($checkAdminList['list'], "eaId");
        }

        return array($checkUserList, $checkAdminList);

    }

    /**
     * 封装审核人名称
     * 审核人分为管理员和员工
     * @param $checkUserList
     * @param $checkAdminList
     * @param $inviteData
     * @return mixed
     */
    private function formatCheckUserName($checkUserList, $checkAdminList, $inviteData)
    {
        if (!empty($checkUserList[$inviteData[self::ATTR_CHECK_UID]])) {
            return $checkUserList[$inviteData[self::ATTR_CHECK_UID]]['memUsername'];
        } else if (!empty($checkAdminList[$inviteData[self::ATTR_CHECK_UID]])) {
            return $checkAdminList[$inviteData[self::ATTR_CHECK_UID]]['eaRealname'];
        } else {
            return "已删除";
        }
    }
}