AnswerHelper.class.php 5.83 KB
<?php
/**
 * Created by PhpStorm.
 * User: zhonglei
 * Date: 2017/5/9
 * Time: 15:21
 */

namespace Common\Common;

use Common\Service\ClassService;

class AnswerHelper
{

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

        static $instance;

        if (is_null($instance)) {

            $instance = new self();
        }

        return $instance;
    }

    /**
     * @desc 根据UID取用户部门、头像
     * @author tangxingguo
     *
     * @param array $uids 人员UID
     *
     * @return array 人员信息
     *              + dpNames格式[['uid' => '部门1;部门2']
     *              + faceList格式[['uid' => 'url']
     */
    public function getUserInfo($uids)
    {

        $dpNames = [];
        $faceList = [];

        // 取人员信息
        $userServ = &User::instance();
        $users = $userServ->listAll(['memUids' => $uids]);

        if (!empty($users)) {
            // 取出人员部门
            $dpList = array_column($users, 'dpName', 'memUid');
            // 部门数组转字串
            foreach ($dpList as $k => $v) {

                $dpName = array_column($v, 'dpName');
                $dpNames[$k] = empty($dpName) ? '' : implode(';', $dpName);
            }

            // 头像
            $faceList = array_column($users, 'memFace', 'memUid');
            // 姓名
            $usernameList = array_column($users, 'memUsername', 'memUid');

            // 性别
            $userSex = array_column($users, 'memGender', 'memUid');
        }

        return [$dpNames, $faceList, $usernameList, $userSex];
    }

    /**
     * @desc 更新用户积分
     * @author tangxingguo
     *
     * @param string $uid 用户ID
     * @param int $integral 用户积分(正整数为增加积分,负数为扣减积分)
     * @param string $remark 积分变更说明
     *
     * @return bool
     */
    public function updateUserIntegral($uid, $integral, $remark)
    {

        $integralUtil = &Integral::instance();
        if ($integral < 0) {
            // 扣减积分
            $integralInfo = $integralUtil->listByUid([$uid]);
            // 当前拥有的积分
            $available = intval($integralInfo[$uid]['available']);

            if (abs($integral) > $available) {
                // 积分不足
                return false;
            }
        }

        // 积分操作
        $appName = str_replace("【", "", C('NOTICE_PREFIX'));
        $appName = str_replace("】", "", $appName);

        $integralUtil->asynUpdateIntegral([
            // 用户id
            'memUid' => $uid,
            // 积分类型 (默认mi_type0)
            'miType' => 'mi_type0',
            // 积分策略key,integral不为空时,传业务自己的积分规则key
            'irKey' => 'dt_answer',
            // 积分变更说明
            'remark' => $appName . '-' . $remark['dsc'],
            // 变更的积分值
            'integral' => $integral,
            // 应用标识(消息推送必要)
            'msgIdentifier' => APP_IDENTIFIER,
            // 积分策略应用标识
            'businessKey' => Constant::INT_APP_KEY,
            // 积分操作方法
            'businessAct' => $remark['act'],
        ]);

        return true;
    }

    /**
     * @desc 格式化审核时间为需求格式
     * @author tangxingguo
     *
     * @param int $check_time 审核时间
     *
     * @return string 格式后的时间文本
     */
    public function formatTime($check_time)
    {

        // 距离现在过去了多久
        $spaceTime = MILLI_TIME - $check_time;

        // 1分钟内显示刚刚
        if ($spaceTime <= 60 * 1000) {

            return '刚刚';
        }

        // 1小时内显示XX分钟前
        if ($spaceTime <= 60 * 60 * 1000) {

            return floor($spaceTime / (60 * 1000)) . '分钟前';
        }

        // 1天以内的显示XX个小时前
        if ($spaceTime <= 24 * 60 * 60 * 1000) {

            return floor($spaceTime / (60 * 60 * 1000)) . '小时前';
        }

        // 1~7天显示XX天前
        if ($spaceTime <= 7 * 24 * 60 * 60 * 1000) {

            return floor($spaceTime / (24 * 60 * 60 * 1000)) . '天前';
        }

        // 超过7天显示具体年-月-日 时-分
        return rgmdate($check_time, 'Y/m/d H:i');
    }

    /**
     * @desc 检查用户审批权限
     * @author tangxingguo
     *
     * @param string $uid 用户ID
     * @param array $questionInfo 提问信息
     *
     * @return bool
     */
    public function checkApprovedRight($uid, $questionInfo)
    {

        // 获取分类数据
        $calssServ = new ClassService();
        $classInfo = $calssServ->get($questionInfo['class_id']);
        if (empty($classInfo)) {
            // 提问未分类,只有管理员可以审批
            return false;
        }

        if ($uid != $classInfo['manager_id'] && $uid != $questionInfo['checker_uid']) {
            // 审批人必须是当前负责人或历史负责人
            return false;
        }

        return true;
    }

    /**
     * 用户头像格式化
     *
     * @param string $face
     *
     * @return null|string|string[]
     */
    public function format_face($face = '')
    {

        // 头像不存在
        if (empty($face)) {

            return '';
        }

        if ('//' == substr($face, -2)) {
            // 如果后两个字符为 // 则重新取
            $avatar_url = substr($face, 0, -1) . '100';
        } elseif ('/' == substr($face, -1)) {
            // 以 / 结尾时
            $avatar_url = $face . '100';
        } elseif ('/100' != substr($face, -3)) {
            // 如果不是以 /100 结尾
            $avatar_url = $face . '/100';
        } else {

            $avatar_url = $face;
        }

        return urlProtocolConversion($avatar_url);
    }
}