model = new SmartDevicesCategory(); $this->validate = true; $this->validateClass = new CategoryValidate(); } /** * @Desc 列表 * @Author Gorden * @Date 2024/3/8 10:07 * * @param Request $request * @return Response * @throws BusinessException */ public function select(Request $request): Response { [$where, $format, $limit, $field, $order] = $this->selectInput($request); $format = 'tree'; $order = $request->get('order', 'desc'); $field = $field ?? 'category_add_time'; $where['category_is_del'] = 0; $query = $this->doSelect($where, $field, $order); return $this->doFormat($query, $format, $limit); } /** * @Desc 执行写入 * @Author Gorden * @Date 2024/3/8 9:09 * * @param array $data * @return mixed|null */ protected function doInsert(array $data) { Db::beginTransaction(); try { $path = '/0/'; if ($data['category_pid'] != 0) { $parent = $this->model->getParent($data['category_pid']); $path = $parent['category_path']; } $primary_key = $this->model->getKeyName(); $model_class = get_class($this->model); $model = new $model_class; foreach ($data as $key => $val) { $model->{$key} = $val; } $model->save(); $model->category_path = $path . $model->$primary_key . '/'; $model->save(); Db::commit(); return $primary_key ? $model->$primary_key : null; } catch (\Exception $e) { Db::rollBack(); throw new BusinessException('数据写入失败'); } } /** * @Desc 执行更新 * @Author Gorden * @Date 2024/3/8 10:00 * * @param $id * @param $data * @return void * @throws BusinessException */ protected function doUpdate($id, $data) { Db::beginTransaction(); try { $model = $this->model->find($id); if ($model->category_pid != $data['category_pid']) { $oldPath = $model->category_path; $parent = $this->model->getParent($data['category_pid']); $model->category_path = $parent['category_path'] . $model->category_id . '/'; // 直系下级,改path $subs = $this->model->getDirectSub($id); foreach ($subs as $sub) { $this->model->updatePath($sub['category_id'], str_replace($oldPath, $model->category_path, $sub['category_path'])); } } foreach ($data as $key => $val) { $model->{$key} = $val; } $model->save(); Db::commit(); } catch (\Exception $e) { Db::rollBack(); throw new BusinessException('数据更新失败~'); } } /** * @Desc 删除 * @Author Gorden * @Date 2024/3/8 10:11 * * @param Request $request * @return Response * @throws BusinessException */ public function delete(Request $request): Response { $ids = $this->deleteInput($request); $this->doSoftDelete($ids, ['category_is_del' => 1]); return json_success('success'); } /** * @Desc 树形数据 * @Author Gorden * @Date 2024/3/8 10:08 * * @param $items * @return Response */ protected function formatTree($items): Response { $format_items = []; foreach ($items as $item) { $format_items[] = [ 'name' => $item->category_name, 'value' => (string)$item->category_id, 'id' => $item->category_id, 'pid' => $item->category_pid, 'category_name' => $item->category_name, 'category_level' => $item->category_level, 'category_add_time' => $item->category_add_time, 'category_update_time' => $item->category_update_time ]; } $tree = new Tree($format_items); return json_success('success', $tree->getTree()); } }