model = new MedicalDept(); $this->model = new SysDept(); $this->validate = true; $this->validateClass = new DeptValidate(); } /** * @Desc * @Author Gorden * @Date 2024/3/1 14:38 * * @param Request $request * @return Response * @throws \support\exception\BusinessException */ public function select(Request $request): Response { [$where, $format, $limit, $field, $order] = $this->selectInput($request); // if (!isset($where['dept_category'])) { // $where['dept_category'] = '医护科室'; // } $where['dept_category'] = ['<>','桌台']; $limit = 1000; $format = 'tree'; $order = $request->get('order', 'desc'); $field = $field ?? 'dept_addtimes'; $query = $this->doSelect($where, $field, $order); return $this->doFormat($query, $format, $limit); } /** * @Desc 执行写入数据 * @Author Gorden * @Date 2024/3/1 15:42 * * @param array $data * @return mixed|null * @throws Exception */ protected function doInsert(array $data) { $hospitalId = SysDept::where('dept_category', '医院')->value('dept_id'); Db::beginTransaction(); try { $primary_key = $this->model->getKeyName(); $model_class = get_class($this->model); $model = new $model_class; // $model->dept_category = '医护科室'; // $model->dept_super_path = "/0/"; foreach ($data as $key => $val) { $model->{$key} = $val; } $model->save(); if ($model->dept_super_id != 0) { $superior = $this->model->getByPrimaryKey($model->dept_super_id); $model->dept_super_path = $superior->dept_super_path . $model->dept_id . '/'; } else { $model->dept_super_path = '/0/' . $model->dept_id . '/'; } $model->save(); Db::commit(); } catch (\Exception $e) { dump($e->getMessage()); Db::rollBack(); throw new \Exception('数据写入失败'); } return $primary_key ? $model->$primary_key : null; } /** * @Desc 执行更新 * @Author Gorden * @Date 2024/3/1 15:51 * * @param $id * @param $data * @return void */ protected function doUpdate($id, $data) { Db::beginTransaction(); try { $model = $this->model->find($id); $oldDeptPid = $model->dept_super_id; $oldDeptPath = $model->dept_super_path; foreach ($data as $key => $val) { $model->{$key} = $val; } // 上级 if ($model->dept_super_id != 0) { $superior = $this->model->getByPrimaryKey($model->dept_super_id); $model->dept_super_path = $superior->dept_super_path.$model->dept_id . '/'; } $model->save(); // pid变动,如果有下级,path应跟着变 if ($data['dept_super_id'] != $oldDeptPid) { $subs = $this->model->getAllSubDept($oldDeptPath); if ($subs) { foreach ($subs as $sub) { $this->model->where('dept_id', $sub['dept_id'])->update(['dept_super_path' => str_replace($oldDeptPath, $model->dept_super_path, $sub['dept_super_path'])]); } } } Db::commit(); } catch (\Exception $e) { Db::rollBack(); dump($e->getMessage()); throw new BusinessException('数据更新失败~'); } } /** * @Desc 软删除 * @Author Gorden * @Date 2024/3/1 14:39 * * @param Request $request * @return Response * @throws \support\exception\BusinessException */ public function delete(Request $request): Response { $ids = $this->deleteInput($request); $this->doSoftDelete($ids, ['dept_is_del' => 1]); return json_success('success'); } /** * @Desc 树形 * @Author Gorden * @Date 2024/3/4 8:31 * * @param $items * @return Response */ protected function formatTree($items): Response { $format_items = []; foreach ($items as $item) { $format_items[] = [ 'name' => $item->dept_name, 'value' => (string)$item->dept_id, 'id' => $item->dept_id, 'pid' => $item->dept_super_id, 'dept_id' => $item->dept_id, 'dept_pid' => $item->dept_pid, 'dept_name' => $item->dept_name, 'dept_type' => $item->dept_type, 'dept_status' => $item->dept_status, 'dept_telephone' => $item->dept_telephone, 'dept_city_str' => $item->dept_city, 'dept_city' => !empty($item->dept_city) ? explode(',', $item->dept_city) : '', 'dept_address' => $item->dept_address, 'dept_remark' => $item->dept_remark, 'dept_addTime' => date("Y-m-d H:i:s", strtotime($item->dept_addtimes)), ]; } $tree = new Tree($format_items); return json_success('success', $tree->getTree()); } }