2019-01-17 11:05:47 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace app\common\Model;
|
|
|
|
|
|
2019-07-11 17:08:31 +08:00
|
|
|
|
use Exception;
|
2019-06-25 16:21:05 +08:00
|
|
|
|
use PDOStatement;
|
2019-06-24 19:10:06 +08:00
|
|
|
|
use service\JwtService;
|
|
|
|
|
use service\NodeService;
|
|
|
|
|
use service\RandomService;
|
2019-01-17 11:05:47 +08:00
|
|
|
|
use think\Db;
|
2019-07-11 17:08:31 +08:00
|
|
|
|
use think\db\exception\DataNotFoundException;
|
|
|
|
|
use think\db\exception\ModelNotFoundException;
|
|
|
|
|
use think\exception\DbException;
|
|
|
|
|
use think\exception\PDOException;
|
2019-01-17 11:05:47 +08:00
|
|
|
|
use think\File;
|
2019-07-11 17:08:31 +08:00
|
|
|
|
use think\Model;
|
2019-01-17 11:05:47 +08:00
|
|
|
|
|
|
|
|
|
class Member extends CommonModel
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
protected $append = [];
|
|
|
|
|
|
2019-06-24 19:10:06 +08:00
|
|
|
|
public static function login($member)
|
2019-01-17 11:05:47 +08:00
|
|
|
|
{
|
2019-06-24 19:10:06 +08:00
|
|
|
|
// 更新登录信息
|
|
|
|
|
Db::name('Member')->where(['id' => $member['id']])->update([
|
|
|
|
|
'last_login_time' => Db::raw('now()'),
|
|
|
|
|
]);
|
|
|
|
|
$list = MemberAccount::where(['member_code' => $member['code']])->order('id asc')->select()->toArray();
|
|
|
|
|
$organizationList = [];
|
|
|
|
|
if ($list) {
|
2019-07-11 17:08:31 +08:00
|
|
|
|
foreach ($list as &$item) {
|
2019-07-15 07:18:37 +08:00
|
|
|
|
$departments = [];
|
2019-07-11 17:08:31 +08:00
|
|
|
|
$departmentCodes = $item['department_code'];
|
|
|
|
|
if ($departmentCodes) {
|
|
|
|
|
$departmentCodes = explode(',', $departmentCodes);
|
|
|
|
|
foreach ($departmentCodes as $departmentCode) {
|
|
|
|
|
$department = Department::where(['code' => $departmentCode])->field('name')->find();
|
2019-07-15 07:18:37 +08:00
|
|
|
|
$departments[] = $department['name'];
|
2019-07-11 17:08:31 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2019-07-15 10:44:41 +08:00
|
|
|
|
$item['department'] = $departments ? implode(' - ', $departments) : '';
|
2019-06-24 19:10:06 +08:00
|
|
|
|
$organization = Organization::where(['code' => $item['organization_code']])->find();
|
|
|
|
|
if ($organization) {
|
|
|
|
|
$organizationList[] = $organization;
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-01-17 11:05:47 +08:00
|
|
|
|
}
|
2019-06-24 19:10:06 +08:00
|
|
|
|
$member['account_id'] = $list[0]['id'];
|
|
|
|
|
$member['is_owner'] = $list[0]['is_owner'];
|
|
|
|
|
$member['authorize'] = $list[0]['authorize'];
|
|
|
|
|
$member['position'] = $list[0]['position'];
|
2019-07-15 10:44:41 +08:00
|
|
|
|
$member['department'] = $list[0]['department'];
|
2019-06-24 19:10:06 +08:00
|
|
|
|
|
|
|
|
|
setCurrentMember($member);
|
|
|
|
|
!empty($member['authorize']) && NodeService::applyProjectAuthNode();
|
|
|
|
|
$member = getCurrentMember();
|
2019-07-17 15:36:18 +08:00
|
|
|
|
$tokenList = JwtService::initToken(['code' => $member['code']]);
|
2019-06-24 19:10:06 +08:00
|
|
|
|
$accessTokenExp = JwtService::decodeToken($tokenList['accessToken'])->exp;
|
|
|
|
|
$tokenList['accessTokenExp'] = $accessTokenExp;
|
|
|
|
|
$loginInfo = ['member' => $member, 'tokenList' => $tokenList, 'organizationList' => $organizationList];
|
|
|
|
|
session('loginInfo', $loginInfo);
|
|
|
|
|
logRecord($loginInfo, 'info', 'member/login');
|
|
|
|
|
return $loginInfo;
|
2019-01-17 11:05:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param $memberData
|
|
|
|
|
* @return Member
|
2019-07-11 17:08:31 +08:00
|
|
|
|
* @throws DataNotFoundException
|
|
|
|
|
* @throws ModelNotFoundException
|
|
|
|
|
* @throws DbException
|
2019-01-17 11:05:47 +08:00
|
|
|
|
*/
|
|
|
|
|
public static function createMember($memberData)
|
|
|
|
|
{
|
|
|
|
|
//需要创建的信息。1、用户 2、用户所属组织 3、组织权限 4、所属组织账号
|
|
|
|
|
$memberData['create_time'] = nowTime();
|
2019-07-13 10:44:02 +08:00
|
|
|
|
(!isset($memberData['avatar']) || !$memberData['avatar']) && $memberData['avatar'] = 'https://static.vilson.online/cover.png';
|
2019-06-24 19:10:06 +08:00
|
|
|
|
!isset($memberData['status']) && $memberData['status'] = 1;
|
|
|
|
|
!isset($memberData['code']) && $memberData['code'] = createUniqueCode('member');
|
|
|
|
|
!isset($memberData['account']) && $memberData['account'] = RandomService::alnumLowercase();
|
2019-06-24 19:25:58 +08:00
|
|
|
|
if (isset($memberData['mobile']) && $memberData['mobile']) {
|
|
|
|
|
$has = self::where(['mobile' => $memberData['mobile']])->find();
|
|
|
|
|
if ($has) {
|
|
|
|
|
unset($memberData['mobile']);
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-06-24 19:27:24 +08:00
|
|
|
|
if (isset($memberData['email']) && $memberData['email']) {
|
|
|
|
|
$has = self::where(['email' => $memberData['email']])->find();
|
|
|
|
|
if ($has) {
|
|
|
|
|
unset($memberData['email']);
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-01-17 11:05:47 +08:00
|
|
|
|
$result = self::create($memberData);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Organization::createOrganization($result);
|
|
|
|
|
// $organizationData = [
|
|
|
|
|
// 'code' => createUniqueCode('organization'),
|
|
|
|
|
// 'name' => $memberData['name'] . '的个人项目',
|
|
|
|
|
// 'personal' => 1,
|
|
|
|
|
// 'create_time' => nowTime(),
|
|
|
|
|
// 'owner_code' => $memberData['code'],
|
|
|
|
|
// ];
|
|
|
|
|
// Organization::create($organizationData);
|
|
|
|
|
//
|
|
|
|
|
// $defaultAdminAuth = ProjectAuth::get(1)->toArray();
|
|
|
|
|
// $defaultMemberAuth = ProjectAuth::get(2)->toArray();
|
|
|
|
|
// unset($defaultAdminAuth['id']);
|
|
|
|
|
// unset($defaultMemberAuth['id']);
|
|
|
|
|
// $defaultAdminAuth['organization_code'] = $defaultMemberAuth['organization_code'] = $organizationData['code'];
|
|
|
|
|
// $defaultAdminAuth = ProjectAuth::create($defaultAdminAuth);
|
|
|
|
|
// $defaultMemberAuth = ProjectAuth::create($defaultMemberAuth);
|
|
|
|
|
// $defaultAdminAuthNode = ProjectAuthNode::where(['auth' => 1])->select()->toArray();
|
|
|
|
|
// $defaultMemberAuthNode = ProjectAuthNode::where(['auth' => 2])->select()->toArray();
|
|
|
|
|
// foreach ($defaultAdminAuthNode as &$item) {
|
|
|
|
|
// unset($item['id']);
|
|
|
|
|
// $item['auth'] = $defaultAdminAuth['id'];
|
|
|
|
|
// ProjectAuthNode::create($item);
|
|
|
|
|
// }
|
|
|
|
|
// foreach ($defaultMemberAuthNode as &$item) {
|
|
|
|
|
// unset($item['id']);
|
|
|
|
|
// $item['auth'] = $defaultMemberAuth['id'];
|
|
|
|
|
// ProjectAuthNode::create($item);
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// $memberAccountData = [
|
|
|
|
|
// 'position' => '资深工程师',
|
|
|
|
|
// 'department' => '某某公司-某某某事业群-某某平台部-某某技术部-BM',
|
|
|
|
|
// 'code' => createUniqueCode('organization'),
|
|
|
|
|
// 'member_code' => $memberData['code'],
|
|
|
|
|
// 'organization_code' => $organizationData['code'],
|
|
|
|
|
// 'is_owner' => 1,
|
|
|
|
|
// 'status' => 1,
|
|
|
|
|
// 'create_time' => nowTime(),
|
|
|
|
|
// 'avatar' => $memberData['avatar'],
|
|
|
|
|
// 'name' => $memberData['name'],
|
|
|
|
|
// 'email' => $memberData['email'],
|
|
|
|
|
// ];
|
|
|
|
|
// MemberAccount::create($memberAccountData);
|
|
|
|
|
return $result;
|
|
|
|
|
}
|
|
|
|
|
|
2019-06-25 16:21:05 +08:00
|
|
|
|
/**
|
|
|
|
|
* 钉钉登录
|
|
|
|
|
* @param $userInfo
|
2019-07-11 17:08:31 +08:00
|
|
|
|
* @return Member|array|PDOStatement|string|Model|null
|
|
|
|
|
* @throws DataNotFoundException
|
|
|
|
|
* @throws ModelNotFoundException
|
|
|
|
|
* @throws DbException
|
2019-06-25 16:21:05 +08:00
|
|
|
|
*/
|
2019-06-24 19:10:06 +08:00
|
|
|
|
public static function dingtalkLogin($userInfo)
|
|
|
|
|
{
|
2019-06-25 16:21:05 +08:00
|
|
|
|
$currentMember = getCurrentMember();
|
2019-06-25 16:29:55 +08:00
|
|
|
|
if ($currentMember) {
|
2019-06-25 23:00:03 +08:00
|
|
|
|
$where = ['code' => $currentMember['code']];
|
2019-06-25 16:29:55 +08:00
|
|
|
|
$currentMember = self::where($where)->find();
|
|
|
|
|
}
|
2019-06-24 19:10:06 +08:00
|
|
|
|
$unionid = $userInfo['unionid'];
|
|
|
|
|
$openid = $userInfo['openid'];
|
|
|
|
|
$member = self::where(['dingtalk_unionid' => $unionid])->find();
|
2019-06-25 16:21:05 +08:00
|
|
|
|
$memberData = [
|
|
|
|
|
'dingtalk_openid' => $openid,
|
|
|
|
|
'dingtalk_unionid' => $unionid,
|
|
|
|
|
'dingtalk_userid' => isset($userInfo['userId']) ? $userInfo['userId'] : '',
|
|
|
|
|
];
|
2019-06-24 19:10:06 +08:00
|
|
|
|
if (!$member) {
|
2019-06-25 16:21:05 +08:00
|
|
|
|
$memberData['name'] = $userInfo['nick'];
|
|
|
|
|
$memberData['avatar'] = isset($userInfo['avatar']) ? $userInfo['avatar'] : '';
|
|
|
|
|
$memberData['mobile'] = isset($userInfo['mobile']) ? $userInfo['mobile'] : '';
|
|
|
|
|
$memberData['email'] = isset($userInfo['email']) ? $userInfo['email'] : '';
|
|
|
|
|
if (!$currentMember) {
|
|
|
|
|
$member = self::createMember($memberData);
|
|
|
|
|
} else {
|
2019-06-25 16:32:37 +08:00
|
|
|
|
//已登录且未绑定,则绑定
|
2019-06-25 23:00:03 +08:00
|
|
|
|
if (!$currentMember['dingtalk_unionid'] || !$currentMember['dingtalk_userid']) {
|
2019-10-07 17:15:03 +08:00
|
|
|
|
if ($currentMember['mobile']) {
|
|
|
|
|
unset($memberData['mobile']);
|
|
|
|
|
}
|
|
|
|
|
if ($currentMember['email']) {
|
|
|
|
|
unset($memberData['email']);
|
|
|
|
|
}
|
2019-06-25 16:21:05 +08:00
|
|
|
|
self::update($memberData, $where);
|
2019-06-25 16:32:37 +08:00
|
|
|
|
$member = self::where($where)->find();
|
2019-06-25 16:21:05 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
2019-06-25 16:29:55 +08:00
|
|
|
|
if ($currentMember && $member['dingtalk_unionid'] != $currentMember['dingtalk_unionid']) {
|
2019-06-25 16:21:05 +08:00
|
|
|
|
return error('1', '您想要绑定的第三方帐号已经被绑定给其他帐号,请先用该第三方帐号登录后,解绑释放它,再切回当前帐号发起绑定');
|
|
|
|
|
}
|
2019-06-25 23:00:03 +08:00
|
|
|
|
if (!$member['dingtalk_userid']) {
|
|
|
|
|
self::update($memberData, ['code' => $member['code']]);
|
|
|
|
|
}
|
2019-06-24 19:10:06 +08:00
|
|
|
|
}
|
|
|
|
|
self::login($member);
|
|
|
|
|
return $member;
|
|
|
|
|
}
|
2019-01-17 11:05:47 +08:00
|
|
|
|
|
2019-06-25 16:21:05 +08:00
|
|
|
|
public static function logout()
|
|
|
|
|
{
|
|
|
|
|
!empty($_SESSION) && $_SESSION = [];
|
|
|
|
|
[session_unset(), session_destroy()];
|
|
|
|
|
setCurrentMember(null);
|
|
|
|
|
session('loginInfo', null);
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-17 11:05:47 +08:00
|
|
|
|
/**
|
|
|
|
|
* @param File $file
|
|
|
|
|
* @return array|bool
|
|
|
|
|
* @throws \think\Exception
|
2019-07-11 17:08:31 +08:00
|
|
|
|
* @throws PDOException
|
|
|
|
|
* @throws Exception
|
2019-01-17 11:05:47 +08:00
|
|
|
|
*/
|
|
|
|
|
public function uploadImg(File $file)
|
|
|
|
|
{
|
|
|
|
|
return $this->_uploadImg($file, config('upload.base_path') . config('upload.member_avatar'));
|
|
|
|
|
}
|
|
|
|
|
}
|