Product.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace app\api\controller\product;
  3. use app\api\model\product\Product as ProductModel;
  4. use app\api\model\order\Cart as CartModel;
  5. use app\api\controller\Controller;
  6. use app\api\model\settings\Setting as SettingModel;
  7. use app\api\model\user\Visit as VisitModel;
  8. use app\api\service\common\RecommendService;
  9. use app\common\service\qrcode\ProductService;
  10. use app\api\model\user\Favorite as FavoriteModel;
  11. use app\api\model\plus\coupon\Coupon as CouponModel;
  12. use app\common\model\supplier\Service as ServiceModel;
  13. /**
  14. * 商品控制器
  15. */
  16. class Product extends Controller
  17. {
  18. /**
  19. * 商品列表
  20. */
  21. public function lists()
  22. {
  23. // 整理请求的参数
  24. $param = array_merge($this->postData(), [
  25. 'product_status' => 10,
  26. 'audit_status' => 10
  27. ]);
  28. // 获取列表数据
  29. $model = new ProductModel;
  30. $list = $model->getList($param, $this->getUser(false));
  31. return $this->renderSuccess('', compact('list'));
  32. }
  33. /**
  34. * 商品列表
  35. */
  36. public function listsByCate()
  37. {
  38. // 整理请求的参数
  39. $param = array_merge($this->postData(), [
  40. 'product_status' => 10,
  41. 'audit_status' => 10,
  42. 'sku'=> true,
  43. ]);
  44. // 获取列表数据
  45. $model = new ProductModel;
  46. $list = $model->getList($param, $this->getUser(false));
  47. $cartModel = new CartModel($this->getUser());
  48. $carts = $cartModel->getCartProductList();
  49. return $this->renderSuccess('', compact('list','carts'));
  50. }
  51. /**
  52. * 推荐产品
  53. */
  54. public function recommendProduct($location)
  55. {
  56. $recommend = SettingModel::getItem('recommend');
  57. $model = new ProductModel;
  58. $is_recommend = RecommendService::checkRecommend($recommend, $location);
  59. $list = [];
  60. if ($is_recommend) {
  61. $list = $model->getRecommendProduct($recommend);
  62. }
  63. return $this->renderSuccess('', compact('list', 'recommend', 'is_recommend'));
  64. }
  65. /**
  66. * 获取商品详情
  67. */
  68. public function detail($product_id, $url)
  69. {
  70. $params = $this->postData();
  71. // 用户信息
  72. $user = $this->getUser(false);
  73. // 商品详情
  74. $model = new ProductModel;
  75. $product = $model->getDetails($product_id, $this->getUser(false));
  76. if ($product === false) {
  77. return $this->renderError($model->getError() ?: '商品信息不存在');
  78. }
  79. // 多规格商品sku信息
  80. $specData = $product['spec_type'] == 20 ? $model->getManySpecData($product['spec_rel'], $product['sku']) : null;
  81. $isfollow = 0;
  82. if ($user) {
  83. if (FavoriteModel::detail($product_id, 20, $user['user_id'])) {
  84. $isfollow = 1;
  85. }
  86. }
  87. $product['isfollow'] = $isfollow;
  88. $dataCoupon['shop_supplier_id'] = $product['shop_supplier_id'];
  89. $model = new CouponModel;
  90. $couponList = $model->getWaitList($dataCoupon, $this->getUser(false), 1);
  91. // 访问记录
  92. (new VisitModel())->addVisit($user, $product['supplier'], $params['visitcode'], $product);
  93. return $this->renderSuccess('', [
  94. // 商品详情
  95. 'detail' => $product,
  96. // 购物车商品总数量
  97. 'cart_total_num' => $user ? (new CartModel($user))->getProductNum() : 0,
  98. // 多规格商品sku信息
  99. 'specData' => $specData,
  100. // 微信公众号分享参数
  101. 'share' => $this->getShareParams($url, $product['product_name'], $product['product_name'], '/pages/product/detail/detail', $product['image'][0]['file_path']),
  102. 'couponList' => $couponList,
  103. //是否显示店铺信息
  104. 'store_open' => SettingModel::getStoreOpen(),
  105. //是否开启客服
  106. 'service_open' => SettingModel::getSysConfig()['service_open'],
  107. //店铺客服信息
  108. 'mp_service' => ServiceModel::detail($product['shop_supplier_id']),
  109. ]);
  110. }
  111. /**
  112. * 生成商品海报
  113. */
  114. public function poster($product_id, $source)
  115. {
  116. // 商品详情
  117. $detail = ProductModel::detail($product_id);
  118. $Qrcode = new ProductService($detail, $this->getUser(false), $source);
  119. return $this->renderSuccess('', [
  120. 'qrcode' => $Qrcode->getImage(),
  121. ]);
  122. }
  123. }