Product.php 3.9 KB

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