| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | <?phpnamespace App\Service;use App\Model\Depart;use App\Model\Employee;use App\Model\EmployeeDepartPermission;use Illuminate\Support\Facades\DB;class TPlusServerService extends Service{    /**     * @var TPlusDatabaseServerService     */    protected $databaseService;    /**     * @var string|null     */    protected $error;    /**     * TPlusServerService constructor.     */    public function __construct()    {        $service = new TPlusDatabaseServerService();        $this->databaseService = $service->db ;        $this->error = $service->error;    }    /**     * 获取错误信息     *     * @return string|null     */    public function getError()    {        return $this->error;    }    /**     * 同步人员部门     *     * @param array $data     * @param array $user     * @return array     */    public function synPersonDepart($data, $user)    {        try {            $this->databaseService->table('AA_Department')                ->select('id','idparent as parent_id','name as title','code','disabled as is_use')                ->chunkById(100, function ($data) {                    DB::transaction(function () use ($data) {                        $dataArray = Collect($data)->map(function ($object) {                            return (array)$object;                        })->toArray();                        $d_id = Depart::whereIn('id', array_column($dataArray,'id'))                            ->pluck('id')                            ->toArray();                        $insert = $update = [];                        foreach ($dataArray as $value){                            $is_use = $value['is_use'] ? 0 : 1;                            if(in_array($value['id'], $d_id)){                                $update[] = [                                    'id' => $value['id'],                                    'parent_id' => $value['parent_id'],                                    'title' => $value['title'],                                    'code' => $value['code'],                                    'is_use' => $is_use                                ];                            }else{                                $insert[] = [                                    'id' => $value['id'],                                    'parent_id' => $value['parent_id'],                                    'title' => $value['title'],                                    'code' => $value['code'],                                    'is_use' => $is_use                                ];                            }                        }                        if(! empty($insert)) Depart::insert($insert);                        if(! empty($update)) {                            foreach ($update as $value){                                Depart::where('id', $value['id'])                                    ->update($value);                            }                        }                    });                });            $this->databaseService->table('AA_Person')                ->select('id','code as number','name as emp_name','mobilePhoneNo as mobile','iddepartment as depart_id','disabled as state')                ->chunkById(100, function ($data) {                    DB::transaction(function () use ($data) {                        $dataArray = Collect($data)->map(function ($object) {                            return (array)$object;                        })->toArray();                        $employee_id = Employee::whereIn('id', array_column($dataArray,'id'))                            ->pluck('id')                            ->toArray();                        $insert = $update = $depart_update = [];                        foreach ($dataArray as $value){                            $state = $value['state'] ? Employee::NOT_USE : Employee::USE;                            if(in_array($value['id'], $employee_id)){                                $update[] = [                                    'id' => $value['id'],                                    'number' => $value['number'],                                    'emp_name' => $value['emp_name'],                                    'mobile' => $value['mobile'],                                    'state' => $state                                ];                            }else{                                $insert[] = [                                    'id' => $value['id'],                                    'number' => $value['number'],                                    'emp_name' => $value['emp_name'],                                    'mobile' => $value['mobile'],                                    'state' => $state                                ];                            }                            $depart_update[] = [                                'employee_id' => $value['id'],                                'depart_id' => $value['depart_id']                            ];                        }                        if(! empty($insert)) Employee::insert($insert);                        if(! empty($update)) {                            foreach ($update as $value){                                Employee::where('id', $value['id'])                                    ->update($value);                            }                        }                        if(! empty($depart_update)){                            EmployeeDepartPermission::whereIn('employee_id',array_column($depart_update,'employee_id'))->delete();                            EmployeeDepartPermission::insert($depart_update);                        }                    });                });        } catch (\Throwable $e) {            return [false, $e->getMessage()];        }        return [true, ''];    }}
 |