組織構造
Doggy は完全な企業組織構造管理機能を提供します。Gedmo Nested Set に基づいてツリー構造を実装し、複数会社、複数部門、職位編成をサポートします。
エンティティモデル
組織構造の関連エンティティは src/Entity/Organization/ にあります:
| エンティティ | テーブル名 | 説明 |
|---|---|---|
Corporation | — | グループ/企業グループ |
Company | — | 会社 |
Department | org_department | 部門(Gedmo NestedTree) |
Position | — | 職位 |
PositionLevel | — | 職級 |
Employee | — | 従業員(システムユーザーを兼ねる) |
部門管理
部門は Gedmo NestedTree で無限階層のツリー構造を実装します(src/Entity/Organization/Department.php):
php
#[ORM\Entity]
#[ORM\Table(name: 'org_department')]
#[Gedmo\Tree(type: 'nested')]
class Department implements GedmoNode
{
use CommonTrait;
#[ORM\Id]
#[ORM\Column(type: 'uuid', unique: true)]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
private $id;
#[ORM\Column(length: 100)]
private string $name;
#[ORM\Column(length: 50, nullable: true)]
private ?string $code = null;
#[Gedmo\TreeLeft]
#[ORM\Column(type: 'integer')]
private int $lft;
#[Gedmo\TreeLevel]
#[ORM\Column(type: 'integer')]
private int $lvl;
#[Gedmo\TreeRight]
#[ORM\Column(type: 'integer')]
private int $rgt;
#[Gedmo\TreeRoot]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $root = null;
#[Gedmo\TreeParent]
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
private ?self $parent = null;
#[ORM\OneToMany(targetEntity: self::class, mappedBy: 'parent')]
private Collection $children;
/** Many-to-Many with Employee for managers */
#[ORM\ManyToMany(targetEntity: Employee::class)]
private Collection $manager;
}部門属性
| フィールド | タイプ | 説明 |
|---|---|---|
| name | string | 部門名 |
| code | string | 一意のコード |
| parent | self (NestedTree) | 上位部門 |
| manager | ManyToMany(Employee) | 部門責任者 |
| company | ManyToOne(Company) | 所属会社 |
| type | string | 部門タイプ |
| state | string | 有効/無効 |
| sortOrder | integer | ソート重み |
管理画面
管理画面の入口: App\Controller\Admin\OrgController
- ツリー構造のビジュアル表示(
templates/admin/org/department.html.twig) - 部門編集(
departmentEdit.html.twig) - 部門ツリーノードコンポーネント(
department_node.html.twig) - 部門セレクター(
department/singleSelect.html.twig)
職位管理
職位は組織内のポジション定義であり、部門と関連付けられます。管理の入口は templates/admin/org/position/:
- 職位一覧(
index.html.twig) - 職位の作成/編集(
create_drawer.html.twig,edit_drawer.html.twig) - 職級管理(
level_index.html.twig) - 職位セレクター(
position_modal.html.twig,position_multi_modal.html.twig)
会社管理
複数会社構造をサポート:
Corporation: 企業グループの最上位Company: 傘下の会社。CommonTrait内のcorporation/companyリレーションで関連付け- 管理画面:
corporation.html.twig、companyEdit.html.twig
キャッシュ
組織構造はセマンティックキャッシュ戦略を採用し、Doctrine のイベントリスナーでキャッシュの一貫性を自動維持します。