CategoryController.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. namespace app\admin\controller\smart_devices;
  3. use app\admin\validate\smart_devices\CategoryValidate;
  4. use app\common\Tree;
  5. use app\controller\Curd;
  6. use app\model\SmartDevicesCategory;
  7. use support\Db;
  8. use support\exception\BusinessException;
  9. use support\Request;
  10. use support\Response;
  11. class CategoryController extends Curd
  12. {
  13. public function __construct()
  14. {
  15. $this->model = new SmartDevicesCategory();
  16. $this->validate = true;
  17. $this->validateClass = new CategoryValidate();
  18. }
  19. /**
  20. * @Desc 列表
  21. * @Author Gorden
  22. * @Date 2024/3/8 10:07
  23. *
  24. * @param Request $request
  25. * @return Response
  26. * @throws BusinessException
  27. */
  28. public function select(Request $request): Response
  29. {
  30. [$where, $format, $limit, $field, $order] = $this->selectInput($request);
  31. $format = 'tree';
  32. $order = $request->get('order', 'desc');
  33. $field = $field ?? 'category_add_time';
  34. $where['category_is_del'] = 0;
  35. $query = $this->doSelect($where, $field, $order);
  36. return $this->doFormat($query, $format, $limit);
  37. }
  38. /**
  39. * @Desc 执行写入
  40. * @Author Gorden
  41. * @Date 2024/3/8 9:09
  42. *
  43. * @param array $data
  44. * @return mixed|null
  45. */
  46. protected function doInsert(array $data)
  47. {
  48. Db::beginTransaction();
  49. try {
  50. $path = '/0/';
  51. if ($data['category_pid'] != 0) {
  52. $parent = $this->model->getParent($data['category_pid']);
  53. $path = $parent['category_path'];
  54. }
  55. $primary_key = $this->model->getKeyName();
  56. $model_class = get_class($this->model);
  57. $model = new $model_class;
  58. foreach ($data as $key => $val) {
  59. $model->{$key} = $val;
  60. }
  61. $model->save();
  62. $model->category_path = $path . $model->$primary_key . '/';
  63. $model->save();
  64. Db::commit();
  65. return $primary_key ? $model->$primary_key : null;
  66. } catch (\Exception $e) {
  67. Db::rollBack();
  68. throw new BusinessException('数据写入失败');
  69. }
  70. }
  71. /**
  72. * @Desc 执行更新
  73. * @Author Gorden
  74. * @Date 2024/3/8 10:00
  75. *
  76. * @param $id
  77. * @param $data
  78. * @return void
  79. * @throws BusinessException
  80. */
  81. protected function doUpdate($id, $data)
  82. {
  83. Db::beginTransaction();
  84. try {
  85. $model = $this->model->find($id);
  86. if ($model->category_pid != $data['category_pid']) {
  87. $oldPath = $model->category_path;
  88. $parent = $this->model->getParent($data['category_pid']);
  89. $model->category_path = $parent['category_path'] . $model->category_id . '/';
  90. // 直系下级,改path
  91. $subs = $this->model->getDirectSub($id);
  92. foreach ($subs as $sub) {
  93. $this->model->updatePath($sub['category_id'], str_replace($oldPath, $model->category_path, $sub['category_path']));
  94. }
  95. }
  96. foreach ($data as $key => $val) {
  97. $model->{$key} = $val;
  98. }
  99. $model->save();
  100. Db::commit();
  101. } catch (\Exception $e) {
  102. Db::rollBack();
  103. throw new BusinessException('数据更新失败~');
  104. }
  105. }
  106. /**
  107. * @Desc 删除
  108. * @Author Gorden
  109. * @Date 2024/3/8 10:11
  110. *
  111. * @param Request $request
  112. * @return Response
  113. * @throws BusinessException
  114. */
  115. public function delete(Request $request): Response
  116. {
  117. $ids = $this->deleteInput($request);
  118. $this->doSoftDelete($ids, ['category_is_del' => 1]);
  119. return json_success('success');
  120. }
  121. /**
  122. * @Desc 树形数据
  123. * @Author Gorden
  124. * @Date 2024/3/8 10:08
  125. *
  126. * @param $items
  127. * @return Response
  128. */
  129. protected function formatTree($items): Response
  130. {
  131. $format_items = [];
  132. foreach ($items as $item) {
  133. $format_items[] = [
  134. 'name' => $item->category_name,
  135. 'value' => (string)$item->category_id,
  136. 'id' => $item->category_id,
  137. 'pid' => $item->category_pid,
  138. 'category_name' => $item->category_name,
  139. 'category_level' => $item->category_level,
  140. 'category_add_time' => $item->category_add_time,
  141. 'category_update_time' => $item->category_update_time
  142. ];
  143. }
  144. $tree = new Tree($format_items);
  145. return json_success('success', $tree->getTree());
  146. }
  147. }