<?php

namespace app\common\Model;

use service\ToolsService;
use think\Db;

/**
 * 部门
 * Class Organization
 * @package app\common\Model
 */
class Department extends CommonModel
{
    protected $append = [];

    /**
     * @param $name
     * @param string $parentDepartmentCode
     * @return Department
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function createDepartment($name, $parentDepartmentCode = '')
    {
        $path = '';
        if ($parentDepartmentCode) {
            $parentDepartment = self::where(['code' => $parentDepartmentCode])->field('code,path')->find();
            $parentDepartment['path'] && $parentDepartment['path'] = ",{$parentDepartment['path']}";
            $path = "{$parentDepartment['code']}{$parentDepartment['path']}";
        }
        $data = [
            'organization_code' => getCurrentOrganizationCode(),
            'code' => createUniqueCode('department'),
            'name' => $name,
            'pcode' => $parentDepartmentCode,
            'path' => $path,
            'create_time' => nowTime(),
        ];
        return self::create($data);
    }

    public function deleteDepartment($departmentCode)
    {
        $department = self::where(['code' => $departmentCode])->find();
        if (!$department) {
            throw new \Exception('该部门不存在', 1);
        }
        $prefix = config('database.prefix');
        $sql = "select code from {$prefix}department where find_in_set('{$departmentCode}',path)";
        $departments = Db::name('department')->query($sql);
        $codes = [$departmentCode];
        if ($departments) {
            foreach ($departments as $department) {
                $codes[] = $department['code'];
            }
        }
        $result = self::whereIn('code', $codes)->delete();
        DepartmentMember::whereIn('department_code', $codes)->delete();
        return $result;
    }
}