158 lines
3.9 KiB
PHP
158 lines
3.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types = 1);
|
|
namespace App\System\Service;
|
|
|
|
|
|
use App\System\Mapper\SystemDeptMapper;
|
|
use Builder\Abstracts\AbstractService;
|
|
use Builder\Exception\NormalStatusException;
|
|
|
|
class SystemDeptService extends AbstractService
|
|
{
|
|
/**
|
|
* @var SystemDeptMapper
|
|
*/
|
|
public $mapper;
|
|
|
|
public function __construct(SystemDeptMapper $mapper)
|
|
{
|
|
$this->mapper = $mapper;
|
|
}
|
|
|
|
/**
|
|
* @param array|null $params
|
|
* @param bool $isScope
|
|
* @return array
|
|
*/
|
|
public function getTreeList(?array $params = null, bool $isScope = true): array
|
|
{
|
|
$params = array_merge(['orderBy' => 'sort', 'orderType' => 'desc'], $params);
|
|
return parent::getTreeList($params, $isScope);
|
|
}
|
|
|
|
/**
|
|
* 获取部门领导列表
|
|
* @param array|null $params
|
|
* @return array
|
|
*/
|
|
public function getLeaderList(?array $params = null): array
|
|
{
|
|
return $this->mapper->getLeaderList($params);
|
|
}
|
|
|
|
/**
|
|
* 新增部门领导
|
|
* @param array $data
|
|
* @return bool
|
|
*/
|
|
public function addLeader(array $data): bool
|
|
{
|
|
$users = [];
|
|
foreach ($data['users'] as $item) {
|
|
$users[] = array_merge(['created_at' => date('Y-m-d H:i:s')], $item);
|
|
}
|
|
return $this->mapper->addLeader((int) $data['id'], $users);
|
|
}
|
|
|
|
/**
|
|
* 删除部门领导
|
|
* @param array $data
|
|
* @return bool
|
|
*/
|
|
public function delLeader(array $data): bool
|
|
{
|
|
$users = [];
|
|
foreach ($data['ids'] as $id) {
|
|
$users[] = [ 'user_id' => $id ];
|
|
}
|
|
return $this->mapper->delLeader((int) $data['id'], $users);
|
|
}
|
|
|
|
/**
|
|
* 获取前端选择树
|
|
* @return array
|
|
*/
|
|
public function getSelectTree(): array
|
|
{
|
|
return $this->mapper->getSelectTree();
|
|
}
|
|
|
|
/**
|
|
* 新增部门
|
|
* @param array $data
|
|
* @return int
|
|
* @throws \Psr\Container\ContainerExceptionInterface
|
|
* @throws \Psr\Container\NotFoundExceptionInterface
|
|
*/
|
|
public function save(array $data): int
|
|
{
|
|
return $this->mapper->save($this->handleData($data));
|
|
}
|
|
|
|
/**
|
|
* 更新部门
|
|
* @param int $id
|
|
* @param array $data
|
|
* @return bool
|
|
* @throws \Psr\Container\ContainerExceptionInterface
|
|
* @throws \Psr\Container\NotFoundExceptionInterface
|
|
*/
|
|
public function update(int $id, array $data): bool
|
|
{
|
|
return $this->mapper->update($id, $this->handleData($data));
|
|
}
|
|
|
|
/**
|
|
* 处理数据
|
|
* @param $data
|
|
* @return array
|
|
* @throws \Psr\Container\ContainerExceptionInterface
|
|
* @throws \Psr\Container\NotFoundExceptionInterface
|
|
*/
|
|
protected function handleData($data): array
|
|
{
|
|
if (isset($data['id']) && $data['id'] == $data['parent_id']) {
|
|
throw new NormalStatusException(t('system.parent_dept_error'), 500);
|
|
}
|
|
|
|
$pid = $data['parent_id'] ?? 0;
|
|
|
|
if ($pid === 0) {
|
|
$data['level'] = $data['parent_id'] = '0';
|
|
} else {
|
|
$data['level'] = $this->read($data['parent_id'])->level . ',' . $data['parent_id'];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 真实删除部门
|
|
* @param array $ids
|
|
* @return array|null
|
|
*/
|
|
public function realDel(array $ids): ?array
|
|
{
|
|
// 跳过的部门
|
|
$ctuIds = [];
|
|
if (count($ids)) foreach ($ids as $id) {
|
|
if (!$this->checkChildrenExists( (int) $id)) {
|
|
$this->mapper->realDelete([$id]);
|
|
} else {
|
|
$ctuIds[] = $id;
|
|
}
|
|
}
|
|
return count($ctuIds) ? $this->mapper->getDeptName($ctuIds) : null;
|
|
}
|
|
|
|
/**
|
|
* 检查子部门是否存在
|
|
* @param int $id
|
|
* @return bool
|
|
*/
|
|
public function checkChildrenExists(int $id): bool
|
|
{
|
|
return $this->mapper->checkChildrenExists($id);
|
|
}
|
|
} |