GoodsService.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace App\Modules\Mini\Services;
  3. use App\Base\BaseService;
  4. use App\Exceptions\ClientException;
  5. use App\Models\Goods\Goods;
  6. use App\Models\Goods\GoodsCategoryMap;
  7. use App\Models\Goods\GoodsSku;
  8. use App\Models\Goods\Spec;
  9. use App\Models\Goods\SpecAttr;
  10. use App\Models\User\UserFav;
  11. class GoodsService extends BaseService
  12. {
  13. public function info($params)
  14. {
  15. $id = $params['id'];
  16. $goods = Goods::where("status", Goods::STATUS_OK)->where("id", $id)->firstOrFail();
  17. $goods->view_total++;
  18. $goods->save();
  19. return [
  20. "id" => $goods->id,
  21. "name" => $goods->name,
  22. "category_name" => $goods->map->map(function (GoodsCategoryMap $map) {
  23. return optional($map->category)->name;
  24. })->implode("/"),
  25. "image_list" => $goods->image_list,
  26. "spec" => array_map(function ($specId) {
  27. try {
  28. /** @var Spec $spec */
  29. $spec = Spec::find($specId);
  30. return [
  31. "id" => $spec->id,
  32. "name" => $spec->name,
  33. "is_custom" => $spec->is_custom,
  34. "attr" => $spec->attrs->map(function (SpecAttr $a) {
  35. return [
  36. "id" => $a->id,
  37. "name" => $a->name,
  38. ];
  39. }),
  40. ];
  41. } catch (\Exception $e) {
  42. throw new ClientException("商品规格有误,请联系管理员");
  43. }
  44. }, $goods->spec),
  45. "sku" => $goods->sku->map(function (GoodsSku $sku) {
  46. if (empty($sku->sn)) {
  47. return null;
  48. }
  49. return [
  50. "id" => $sku->id,
  51. "sn" => $sku->sn,
  52. "url_3d" => $sku->url_3d,
  53. "spec_attr" => $sku->spec_attr_list,
  54. ];
  55. })->filter()->values(),
  56. "desc_html" => $goods->desc_html,
  57. "faq_html" => $goods->faq_html,
  58. "spec_attr_html" => $goods->spec_attr_html,
  59. "is_fav" => (int)$this->goodsIsFav($goods->id),
  60. ];
  61. }
  62. protected function goodsIsFav($gid): bool
  63. {
  64. $ret = false;
  65. $uid = \Auth::id();
  66. if ($uid) {
  67. if (UserFav::where("user_id", $uid)->whereGoodsId($gid)->first()) {
  68. $ret = true;
  69. }
  70. }
  71. return $ret;
  72. }
  73. }