<?php
declare(strict_types=1);
/**
* This file is part of MoChat.
* @link https://mo.chat
* @document https://mochat.wiki
* @contact group@mo.chat
* @license https://github.com/mochat-cloud/mochat/blob/master/LICENSE
*/
namespace MoChat\App\WorkEmployee\Logic;
use Hyperf\Contract\StdoutLoggerInterface;
use Hyperf\DbConnection\Db;
use MoChat\App\Corp\Constants\WorkUpdateTime\Type;
use MoChat\App\Corp\Contract\CorpContract;
use MoChat\App\Corp\Contract\WorkUpdateTimeContract;
use MoChat\App\User\Contract\UserContract;
use MoChat\App\WorkDepartment\Contract\WorkDepartmentContract;
use MoChat\App\WorkEmployee\Constants\ContactAuth;
use MoChat\App\WorkEmployee\Contract\WorkEmployeeContract;
use MoChat\App\WorkEmployee\Contract\WorkEmployeeDepartmentContract;
use MoChat\Framework\WeWork\WeWork;
use Qbhy\HyperfAuth\AuthManager;
use Qbhy\SimpleJwt\JWTManager;
/**
* 成员管理-同步.
*
* Class SyncLogic
*/
class SyncLogic
{
/**
* @var WeWork
*/
protected $client;
/**
* @var WorkEmployeeContract
*/
protected $workEmployeeService;
/**
* @var WorkEmployeeDepartmentContract
*/
protected $workEmployeeDepartmentService;
/**
* @var UserContract
*/
protected $userService;
/**
* @var StdoutLoggerInterface
*/
protected $logger;
/**
* @var WorkDepartmentContract
*/
protected $workDepartmentService;
/**
* @var CorpContract
*/
protected $corpService;
/**
* @var WorkUpdateTimeContract
*/
protected $workUpdateTimeService;
/**
* @var AuthManager
*/
protected $authManager;
public function handle(array $corpIds): bool
{
$this->logger = make(StdoutLoggerInterface::class);
if (empty($corpIds)) {
$this->logger->error('WorkEmployeeSyncLogic->handle同步创建成员corp不能为空');
return true;
}
$this->client = make(WeWork::class);
$this->workEmployeeService = make(WorkEmployeeContract::class);
$this->workDepartmentService = make(WorkDepartmentContract::class);
$this->workEmployeeDepartmentService = make(WorkEmployeeDepartmentContract::class);
$this->workUpdateTimeService = make(WorkUpdateTimeContract::class);
$this->authManager = make(AuthManager::class);
//处理成员
$this->dealEmployee($corpIds);
//同步时间
$this->getSysTime($corpIds);
return true;
}
/**
* 处理成员信息.
* @param $corpIds
* @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
* @return bool
*/
protected function dealEmployee($corpIds)
{
//成员基础信息
$corpData = $this->getCorpData($corpIds);
$createEmployeeData = $updateEmployeeDepartment = $createEmployeeDepartmentData = $userIds = $updateEmployee = $createData = $fileQueueData = $phones = [];
foreach ($corpData as $corpId => $cdv) {
$tenantId = (int) $cdv['tenant_id'];
unset($cdv['tenant_id']);
$employeeData = $departments = $userList = $employeeDepartment = $employee = [];
//公司下的所有部门
$departments = $this->getDepartmentIds($corpId);
if (empty($departments)) {
continue;
}
//成员基础信息
$employeeData = $this->getEmployeeData($corpId);
//成员部门关系
$employeeDepartment = $this->getEmployeeDepartment($employeeData['employee'], $employeeData['wxEmployee']);
//处理部门关系数据
$employeeDepartmentData = $this->handleEmployeeDepartment($employeeDepartment, $departments);
//组装数据
$employee = $this->handleDepartment($employeeDepartmentData);
foreach ($departments as $key => $value) {
//企业微信端用户信息
$userList = $this->client->provider('user')->app($cdv)->user->getDetailedDepartmentUsers($value['wxDepartmentId']);
if (! empty($userList['errcode']) || empty($userList['userlist'])) {
continue;
}
// 处理员工子账户信息
$this->createEmployeeAccount($corpId, $userList['userlist'], $departments);
$this->handleSyncData(
$corpId,
$userList,
$employee,
$departments,
$updateEmployeeDepartment,
$createEmployeeDepartmentData,
$createEmployeeData,
$updateEmployee,
$userIds,
$phones,
$fileQueueData
);
}
if (! empty($createEmployeeData[$corpId])) {
//根据手机号查询子账户信息
$createData[$corpId] = $this->getUserData($tenantId, $phones, $createEmployeeData[$corpId]);
}
if (! empty($createData[$corpId])) {
//外部联系人权限
$createData[$corpId] = $this->getContactAuth($cdv, $createData[$corpId]);
}
}
//处理成员基础信息
$createEmployee = $this->handleEmployee($createData);
//创建成员基础信息
$employeeResult = $this->createEmployee($createEmployee);
if (empty($employeeResult)) {
$this->logger->error('WorkEmployeeSyncLogic->handle同步创建成员失败:' . json_encode($updateEmployeeDepartment));
return true;
}
//创建成员部门关系
if (! empty($createEmployeeDepartmentData)) {
$employeeDepartmentResult = $this->createEmployeeDepartment($corpIds, $userIds, $createEmployeeDepartmentData);
if (empty($employeeDepartmentResult)) {
$this->logger->error('WorkEmployeeSyncLogic->handle同步删除成员部门关系失败:' . json_encode($updateEmployeeDepartment));
return true;
}
}
//删除成员部门关系失败
if (! empty($updateEmployeeDepartment)) {
$result = $this->workEmployeeDepartmentService->deleteWorkEmployeeDepartments($updateEmployeeDepartment);
if (empty($result)) {
$this->logger->error('WorkEmployeeSyncLogic->handle同步删除成员部门关系失败:' . json_encode($updateEmployeeDepartment));
}
}
if (! empty($updateEmployee)) {
$updateResult = $this->workEmployeeService->updateWorkEmployeesCaseIds($updateEmployee);
if (empty($updateResult)) {
$this->logger->error('WorkEmployeeSyncLogic->handle同步头像失败:' . json_encode($updateEmployee));
}
}
//上传图片
if (! empty($fileQueueData)) {
file_upload_queue($fileQueueData);
}
unset($departments, $employee, $userList);
return true;
}
/**
* 整合同步数据.
* @param $corpId
* @param $userList
* @param $employee
* @param $departments
* @param $updateEmployeeDepartment
* @param $createEmployeeDepartmentData
* @param $createEmployeeData
* @param $updateEmployee
* @param $userIds
* @param $phones
* @param mixed $fileQueueData
*/
protected function handleSyncData(
$corpId,
$userList,
$employee,
$departments,
&$updateEmployeeDepartment,
&$createEmployeeDepartmentData,
&$createEmployeeData,
&$updateEmployee,
&$userIds,
&$phones,
&$fileQueueData
) {
//获取部门员工关联信息
foreach ($userList['userlist'] as $k => $user) {
$userIds[$user['userid']] = $user['userid'];
//判断是否增加过成员(是:判断是否添加过成员
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
mochat-master.zip (1817个子文件)
.browserslistrc 34B
.browserslistrc 30B
.browserslistrc 30B
Dockerfile 444B
.editorconfig 657B
.editorconfig 121B
.eslintignore 0B
.env.example 893B
.env.example 111B
.env.example 110B
.env.example 110B
.gitattributes 26B
.gitignore 326B
.gitignore 308B
.gitignore 283B
.gitignore 281B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 105B
.gitignore 83B
.gitignore 49B
index.html 2KB
index.html 1KB
index.html 824B
index.html 140B
index.html 5B
favicon.ico 4KB
favicon.ico 4KB
favicon.ico 4KB
12.jpeg 34KB
14.jpeg 30KB
5.jpeg 27KB
1.jpeg 26KB
13.jpeg 26KB
9.jpeg 24KB
10.jpeg 15KB
6.jpeg 15KB
3.jpeg 15KB
4.jpeg 14KB
8.jpeg 12KB
7.jpeg 10KB
11.jpeg 9KB
2.jpeg 7KB
logo.jpg 55KB
lottery.jpg 14KB
download.jpg 14KB
mission-create-default-avatar.jpg 1KB
link.jpg 424B
districts.js 102KB
asyncRouter.js 29KB
wxCodeAuth.js 8KB
index.js 6KB
workRoom.js 5KB
router.config.js 4KB
icons.js 4KB
shopCode.js 4KB
vue.config.js 3KB
plugin.config.js 3KB
routes.js 3KB
lazy_use.js 2KB
navigationGuards.js 2KB
roomClockIn.js 2KB
radar.js 2KB
.eslintrc.js 2KB
channelCode.js 2KB
workContact.js 2KB
themePluginConfig.js 2KB
.eslintrc.js 2KB
roomFission.js 2KB
workContactTag.js 2KB
request.js 2KB
mediumGroup.js 2KB
index.js 2KB
autoTag.js 2KB
contactBatchAdd.js 2KB
app.js 2KB
workFission.js 2KB
lottery.js 2KB
user.js 2KB
共 1817 条
- 1
- 2
- 3
- 4
- 5
- 6
- 19
资源评论
m0_72731342
- 粉丝: 2
- 资源: 1832
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功