ProjectService.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. /**
  3. * @Name
  4. * @Description
  5. * @Author 刘学玺
  6. * @Date 2024/8/27 10:52
  7. */
  8. namespace App\Http\Services\Backend\Server\Service;
  9. use App\Exceptions\ApiException;
  10. use App\Http\Services\Service;
  11. use App\Models\Service\Project;
  12. use Exception;
  13. use Illuminate\Support\Facades\DB;
  14. class ProjectService extends Service
  15. {
  16. protected array $simpleColumn = ['id', 'title', 'cover'];
  17. protected array $selectColumn = ['sub_title as subTitle', 'time_long as timeLong', 'sort', 'status'];
  18. protected array $selectDetailColumn = ['sale', 'material_price as materialPrice', 'com_balance as comBalance', 'is_add as isAdd', 'is_store as isStore', 'is_door as isDoor', 'introduce', 'explain', 'notice'];
  19. protected string $selectRawColumn = "FORMAT(price/100,2) as price,FORMAT(init_price/100,2) as initPrice,FORMAT(material_price/100,2) as materialPrice";
  20. protected array $appendColumn = ['created_at as createTime'];
  21. public function getProjectList($params)
  22. {
  23. $project = Project::query();
  24. isset($params['title']) && filled($params['title']) && $project->whereLike('title', "%{$params['title']}%");
  25. isset($params['status']) && filled($params['status']) && $project->where('status', $params['status']);
  26. !empty($params['createTime']) && $project->whereIn('created_at', $params['createTime']);
  27. $projectPage = $project->select([...$this->simpleColumn, ...$this->selectColumn, ...$this->appendColumn])->selectRaw($this->selectRawColumn)->paginate($params['pageSize'], ['*'], 'page', $params['pageNo']);
  28. return ['list' => $projectPage->items(), 'total' => $projectPage->total()];
  29. }
  30. /**
  31. * @throws ApiException
  32. */
  33. public function createProject(array $data)
  34. {
  35. $collection = collect($data);
  36. $collection->forget('category');
  37. DB::beginTransaction();
  38. try {
  39. // 保存服务项目
  40. $project = self::toModel($collection, Project::class);
  41. self::initProperty($project);
  42. $project = $project->create($project->getAttributes());
  43. // 关联服务项目所属分类
  44. !empty($data['category']) && $project->saveCategory($data['category']);
  45. DB::commit();
  46. return $project->id;
  47. } catch (Exception) {
  48. DB::rollBack();
  49. self::error('操作失败');
  50. }
  51. }
  52. public function getProject(int $id)
  53. {
  54. $project = Project::query()->select([...$this->simpleColumn, ...$this->selectColumn, ...$this->selectDetailColumn])->selectRaw($this->selectRawColumn)->find($id);
  55. $project->category = $project->getCategory();
  56. return $project;
  57. }
  58. public function updateProject(array $data, int $id): void
  59. {
  60. $collection = collect($data);
  61. $collection->forget('category');
  62. DB::beginTransaction();
  63. try {
  64. // 保存服务项目
  65. $project = self::toModel([...$collection, 'id' => $id], Project::class);
  66. self::initProperty($project);
  67. $project->update($project->getAttributes());
  68. // 清空服务项目所属分类
  69. $project->deleteCategory();
  70. // 关联服务项目所属分类
  71. !empty($data['category']) && $project->saveCategory($data['category']);
  72. DB::commit();
  73. } catch (Exception) {
  74. DB::rollBack();
  75. self::error('操作失败');
  76. }
  77. }
  78. public function deleteProject(int $id)
  79. {
  80. $project = self::toModel(['id' => $id], Project::class);
  81. // 清空服务项目所属分类
  82. $project->deleteCategory();
  83. return $project->delete();
  84. }
  85. protected static function initProperty(Project &$project): void
  86. {
  87. $project['price'] *= 100;
  88. $project['init_price'] *= 100;
  89. $project['material_price'] *= 100;
  90. $project['total_sale'] = (int)($project['sale'] ?? 0 + $project['true_sale'] ?? 0);
  91. $project['introduce'] = $project['introduce'] ?? '';
  92. $project['explain'] = $project['explain'] ?? '';
  93. $project['notice'] = $project['notice'] ?? '';
  94. }
  95. }