Product.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace app\api\model\plus\points;
  3. use app\common\exception\BaseException;
  4. use app\common\model\plus\point\Product as PointProductModel;
  5. use app\api\model\product\Product as ProductModel;
  6. use app\api\model\supplier\Supplier as SupplierModel;
  7. use app\api\model\supplier\ServiceApply;
  8. /**
  9. * 积分商城模型
  10. */
  11. class Product extends PointProductModel
  12. {
  13. /*
  14. * 获取列表
  15. */
  16. public function getList($params)
  17. {
  18. // 获取列表数据
  19. $list = $this->with(['product.image.file','sku'])
  20. ->where('is_delete','=', 0)
  21. ->where('status', '=', 10)
  22. ->order(['sort' => 'asc'])
  23. ->paginate($params);
  24. foreach ($list as $key => $val) {
  25. $list[$key]['product_image'] = $val['product']['image'][0]['file_path'];
  26. }
  27. return $list;
  28. }
  29. /**
  30. * 获取积分任务的商品列表(用于订单结算)
  31. */
  32. public static function getPointsProduct($params)
  33. {
  34. // 积分商品详情
  35. $points = self::detail($params['point_product_id'],['sku']);
  36. if (empty($points) || $points['status'] == 20 || $points['is_delete'] == 1) {
  37. throw new BaseException(['msg' => '积分兑换商品不存在或已结束']);
  38. }
  39. // 积分商品详情
  40. $product = ProductModel::detail($points['product_id']);
  41. // 积分商品sku信息
  42. $point_sku = null;
  43. if($product['spec_type'] == 10){
  44. $point_sku = $points['sku'][0];
  45. }else{
  46. //多规格
  47. foreach ($points['sku'] as $sku){
  48. if($sku['point_product_sku_id'] == $params['point_product_sku_id']){
  49. $point_sku = $sku;
  50. break;
  51. }
  52. }
  53. }
  54. if ($point_sku == null) {
  55. throw new BaseException(['msg' => '积分兑换商品规格不存在']);
  56. }
  57. // 商品sku信息
  58. $product['product_sku'] = ProductModel::getProductSku($product, $params['product_sku_id']);
  59. $product['point_sku'] = $point_sku;
  60. // 商品列表
  61. $productList = [$product->hidden(['category', 'content', 'image', 'sku'])];
  62. // 只会有一个商品
  63. foreach ($productList as &$item) {
  64. // 商品单价
  65. $item['product_price'] = $point_sku['point_money'];
  66. // 商品购买数量
  67. $item['total_num'] = $params['product_num'];
  68. $item['spec_sku_id'] = $item['product_sku']['spec_sku_id'];
  69. // 商品购买总金额
  70. $item['total_price'] = $point_sku['point_money'] * $item['total_num'];
  71. $item['points_num'] = $point_sku['point_num'] * $item['total_num'];
  72. $item['point_product_sku_id'] = $point_sku['point_product_sku_id'];
  73. $item['product_sku_id'] = $params['product_sku_id'];
  74. $item['product_source_id'] = $point_sku['point_product_id'];
  75. $item['sku_source_id'] = $point_sku['point_product_sku_id'];
  76. // 积分商品最大兑换数
  77. $item['point_product'] = [
  78. 'limit_num' => $points['limit_num']
  79. ];
  80. // 积分抵扣金额
  81. $item['points_money'] = ($item['product_sku']['product_price'] - $point_sku['point_money']) * $params['product_num'];
  82. }
  83. $supplierData[] = [
  84. 'shop_supplier_id' => $product['shop_supplier_id'],
  85. 'supplier' => $product['supplier'],
  86. 'productList' => $productList
  87. ];
  88. unset($product['supplier']);
  89. return $supplierData;
  90. }
  91. /**
  92. * 积分商品详情
  93. */
  94. public function getPointDetail($point_product_id)
  95. {
  96. $result = self::detail($point_product_id, ['product.image.file','sku.productSku.image']);
  97. if (!empty($result)) {
  98. $point_arr = array_column($result->toArray()['sku'], 'assemble_price');
  99. $product_arr = array_column($result->toArray()['sku'], 'product_price');
  100. sort($point_arr);
  101. sort($product_arr);
  102. $result['point_price'] = current($point_arr);
  103. $result['line_price'] = current($product_arr);
  104. if (count($point_arr) > 1) {
  105. $res['point_high_price'] = end($point_arr);
  106. $res['line_high_price'] = end($product_arr);
  107. }
  108. $SupplierModel =new SupplierModel;
  109. if($result['shop_supplier_id']){
  110. $supplier = $SupplierModel::detail($result['shop_supplier_id'],['logo', 'category']);
  111. $supplier['logos'] = $supplier['logo']['file_path'];unset($supplier['logo']);
  112. $supplier['category_name'] = $supplier['category']['name'];unset($supplier['category']);
  113. $supplier->visible(['logos', 'category_name', 'name', 'shop_supplier_id', 'product_sales', 'server_score','store_type']);
  114. $server = (new ServiceApply())->getList($result['shop_supplier_id']);
  115. }else{
  116. $supplier = [];
  117. $server = [];
  118. }
  119. $result['supplier'] = $supplier;
  120. $result['server'] = $server;
  121. }
  122. return $result;
  123. }
  124. }