GoodsService.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace App\Modules\Admin\Services;
  3. use App\Base\BaseService;
  4. use App\Models\Goods\Goods;
  5. use App\Models\Goods\GoodsCategoryMap;
  6. use App\Models\Goods\GoodsSku;
  7. use App\Models\Goods\SpecAttr;
  8. use Illuminate\Database\Eloquent\Builder;
  9. use Illuminate\Support\Arr;
  10. class GoodsService extends BaseService
  11. {
  12. public function paginate($params)
  13. {
  14. $p = Goods::query()->when($params['status'], function (Builder $query) use ($params) {
  15. return $query->where("status", $params['status']);
  16. })->when($params['name'], function (Builder $query) use ($params) {
  17. return $query->where("name", "like", "%{$params['name']}%");
  18. })->orderByDesc("id")->paginate($params['page_size']);
  19. return [
  20. "total" => $p->total(),
  21. "page_total" => $p->lastPage(),
  22. "list" => array_map(function (Goods $model) {
  23. return [
  24. "id" => $model->id,
  25. "name" => $model->name,
  26. "thumb" => Arr::first($model->image_list),
  27. "weight" => $model->weight,
  28. "status" => $model->status,
  29. "created_at" => $model->created_at->format("Y-m-d H:i:s"),
  30. ];
  31. }, $p->items()),
  32. ];
  33. }
  34. public function info($params)
  35. {
  36. $id = $params['id'];
  37. $model = Goods::findOrFail($id);
  38. $return = [
  39. "id" => $model->id,
  40. "image_list" => $model->image_list,
  41. "category" => $model->map->map(function (GoodsCategoryMap $map) {
  42. return [
  43. "id" => $map->category->id,
  44. "is_public" => $map->is_public,
  45. ];
  46. }),
  47. "spec" => $model->spec,
  48. "sku" => $model->sku->map(function (GoodsSku $sku) {
  49. return [
  50. "id" => $sku->id,
  51. "sn" => $sku->sn,
  52. "3d_url" => $sku->url_3d,
  53. "is_use" => $sku->is_use,
  54. "spec_attr" => array_map(function ($specAttrId) {
  55. return [
  56. "id" => $specAttrId,
  57. "name" => SpecAttr::where("id", $specAttrId)->value("name"),
  58. ];
  59. }, $sku->spec_attr_list),
  60. ];
  61. }),
  62. "weight" => $model->weight,
  63. "desc_html" => $model->desc_html,
  64. "spec_attr_html" => $model->spec_attr_html,
  65. "faq_html" => $model->faq_html,
  66. ];
  67. return $return;
  68. }
  69. }