CartService.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace App\Modules\Mini\Services;
  3. use App\Base\BaseService;
  4. use App\Models\Cart;
  5. use App\Models\Goods\Goods;
  6. use App\Models\Goods\GoodsSku;
  7. use App\Models\Order\Order;
  8. use App\Models\User\User;
  9. use Illuminate\Support\Arr;
  10. use Illuminate\Support\Facades\Auth;
  11. class CartService extends BaseService
  12. {
  13. public function paginate(User $user, $params)
  14. {
  15. $p = Cart::where("user_id", $user->id)->orderByDesc("id")->paginate($params['page_size']);
  16. return [
  17. "total" => $p->total(),
  18. "page_total" => $p->lastPage(),
  19. "list" => array_map(function (Cart $model) {
  20. return [
  21. "id" => $model->id,
  22. "sn" => $model->sn,
  23. "name" => $model->goods_name,
  24. "thumb" => $model->thumb,
  25. "count" => $model->count,
  26. ];
  27. }, $p->items()),
  28. ];
  29. }
  30. public function add(User $user, $params): Cart
  31. {
  32. $gid = $params['id'];
  33. $goods = Goods::findOrFail($gid);
  34. $sku = GoodsSku::findOrFail($params['sku_id']);
  35. $cart = new Cart();
  36. $cart->user_id = $user->id;
  37. $cart->goods_id = $goods->id;
  38. $cart->count = 1;
  39. $sn = $sku->sn;
  40. if ($skuCustom = Arr::get($params, "sku_custom")) {
  41. $sn = $sn . "-" . implode("-", Arr::pluck($skuCustom, "spec_attr_custom"));
  42. }
  43. $cart->extra = [
  44. "goods_name" => $goods->name,
  45. "thumb" => $goods->thumb,
  46. "sn" => $sn,
  47. "sku_id" => $sku->id,
  48. ];
  49. $cart->save();
  50. return $cart;
  51. }
  52. public function update(User $user, $params)
  53. {
  54. $cart = Cart::where("id", $params['id'])->where("user_id", $user->id)->firstOrFail();
  55. if ($params['count']) {
  56. $cart->count = $params['count'];
  57. $cart->save();
  58. } else {
  59. $cart->delete();
  60. }
  61. return $cart;
  62. }
  63. public function ask(User $user, $params)
  64. {
  65. $params['source'] = Order::SOURCE_CART;
  66. return app(OrderService::class)->askByCart($user, $params);
  67. }
  68. }