Product.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. return $this->renderSuccess('', compact('list'));
  48. }
  49. /**
  50. * 推荐产品
  51. */
  52. public function recommendProduct($location)
  53. {
  54. $recommend = SettingModel::getItem('recommend');
  55. $model = new ProductModel;
  56. $is_recommend = RecommendService::checkRecommend($recommend, $location);
  57. $list = [];
  58. if ($is_recommend) {
  59. $list = $model->getRecommendProduct($recommend);
  60. }
  61. return $this->renderSuccess('', compact('list', 'recommend', 'is_recommend'));
  62. }
  63. /**
  64. * 获取商品详情
  65. */
  66. public function detail($product_id, $url)
  67. {
  68. $params = $this->postData();
  69. // 用户信息
  70. $user = $this->getUser(false);
  71. // 商品详情
  72. $model = new ProductModel;
  73. $product = $model->getDetails($product_id, $this->getUser(false));
  74. if ($product === false) {
  75. return $this->renderError($model->getError() ?: '商品信息不存在');
  76. }
  77. // 多规格商品sku信息
  78. $specData = $product['spec_type'] == 20 ? $model->getManySpecData($product['spec_rel'], $product['sku']) : null;
  79. $isfollow = 0;
  80. if ($user) {
  81. if (FavoriteModel::detail($product_id, 20, $user['user_id'])) {
  82. $isfollow = 1;
  83. }
  84. }
  85. $product['isfollow'] = $isfollow;
  86. $dataCoupon['shop_supplier_id'] = $product['shop_supplier_id'];
  87. $model = new CouponModel;
  88. $couponList = $model->getWaitList($dataCoupon, $this->getUser(false), 1);
  89. // 访问记录
  90. (new VisitModel())->addVisit($user, $product['supplier'], $params['visitcode'], $product);
  91. return $this->renderSuccess('', [
  92. // 商品详情
  93. 'detail' => $product,
  94. // 购物车商品总数量
  95. 'cart_total_num' => $user ? (new CartModel($user))->getProductNum() : 0,
  96. // 多规格商品sku信息
  97. 'specData' => $specData,
  98. // 微信公众号分享参数
  99. 'share' => $this->getShareParams($url, $product['product_name'], $product['product_name'], '/pages/product/detail/detail', $product['image'][0]['file_path']),
  100. 'couponList' => $couponList,
  101. //是否显示店铺信息
  102. 'store_open' => SettingModel::getStoreOpen(),
  103. //是否开启客服
  104. 'service_open' => SettingModel::getSysConfig()['service_open'],
  105. //店铺客服信息
  106. 'mp_service' => ServiceModel::detail($product['shop_supplier_id']),
  107. ]);
  108. }
  109. /**
  110. * 生成商品海报
  111. */
  112. public function poster($product_id, $source)
  113. {
  114. // 商品详情
  115. $detail = ProductModel::detail($product_id);
  116. $Qrcode = new ProductService($detail, $this->getUser(false), $source);
  117. return $this->renderSuccess('', [
  118. 'qrcode' => $Qrcode->getImage(),
  119. ]);
  120. }
  121. }