GrantMedalController.class.php 2.72 KB
<?php
namespace Apicp\Controller\Medal;

use Com\PackageValidate;
use Common\Common\Constant;
use Common\Common\Integral;
use Common\Common\Msg;
use Common\Common\User;
use Common\Model\MedalLogModel;
use Common\Service\MedalService;

class GrantMedalController extends AbstractController
{
    /**
     * GrantMedal
     * @author tangxingguo
     * @desc 授予勋章接口
     * @param Array im_ids:true 勋章ID
     * @param Array uids:true 人员ID
     * @param String description 描述
     * @return Array
     */
    public function index()
    {
        $rules = [
            'im_ids' => 'require|array',
            'uids' => 'require|array',
            'description' => 'max:80',
        ];

        // 验证请求数据
        $validate = new PackageValidate($rules, [], array_keys($rules));
        $imIds = $validate->postData['im_ids'];
        $uids = $validate->postData['uids'];
        $desc = $validate->postData['description'] ?? '';

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

        // 取勋章信息
        $medalServ = new MedalService();
        $medalList = $medalServ->list_by_conds(['im_id' => $imIds]);
        $medalList = array_combine_by_key($medalList, 'im_id');

        $integralUtil = &Integral::instance();
        foreach ($uids as $uid) {
            foreach ($imIds as $imId) {
                if (isset($users[$uid]) && isset($medalList[$imId])) {
                    // 授予勋章
                    $integralUtil->endowMedal(
                        $imId,
                        $uid,
                        $users[$uid]['memUsername'],
                        MedalLogModel::GET_TYPE_HM,
                        $this->_login->user
                    );

                    // 推送消息
                    $this->sendAwardNotice($uid, $medalList[$imId]['name'], $desc);
                }
            }
        }
    }

    /**
     * @desc 勋章推送
     * @author tangxingguo
     * @param array $uid 用户信息
     * @param array $medalName 勋章名称
     * @param string $desc 描述
     * @return bool;
     */
    public function sendAwardNotice($uid, $medalName, $desc = '')
    {
        if (!empty($desc)) {
            $desc = "\n内容:{$desc}";
        }

        $msgServ = &Msg::instance();
        $msg_data = [
            [
                'title' => "恭喜您,获得【{$medalName}】勋章",
                'description' => "获取渠道:管理员授予\n获取时间:" . rgmdate(MILLI_TIME, 'Y-m-d H:i') . $desc,
                'url' => oaUrl('Frontend/Index/Medal/Index'),
            ]
        ];

        $msgServ->sendNews($uid, null, null, $msg_data);
    }
}