Product.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?php
  2. namespace app\api\model\plus\bargain;
  3. use app\common\exception\BaseException;
  4. use app\common\library\helper;
  5. use app\common\model\plus\bargain\Product as BargainProductModel;
  6. use app\api\model\product\Product as ProductModel;
  7. use app\api\model\supplier\Supplier as SupplierModel;
  8. use app\api\model\supplier\ServiceApply;
  9. /**
  10. * 砍价商品模型
  11. */
  12. class Product extends BargainProductModel
  13. {
  14. /**
  15. * 隐藏字段
  16. */
  17. protected $hidden = [
  18. 'sales_initial',
  19. 'total_sales',
  20. 'is_delete',
  21. 'app_id',
  22. 'create_time',
  23. 'update_time'
  24. ];
  25. /**
  26. * 获取首页砍价商品显示
  27. */
  28. public function getProductList($bargain_activity_id, $limit)
  29. {
  30. // 获取列表数据
  31. $list = $this->with(['product.image.file', 'bargainSku'])
  32. ->where('bargain_activity_id', '=', $bargain_activity_id)
  33. ->where('is_delete', '=', 0)
  34. ->where('status', '=', 10)
  35. ->limit($limit)
  36. ->visible(['product.product_id','product.product_name','product.file_path'])
  37. ->select();
  38. foreach ($list as $key => $product) {
  39. $bargain_arr = array_column($product['bargainSku']->toArray(), 'bargain_price');
  40. $product_arr = array_column($product['bargainSku']->toArray(), 'product_price');
  41. sort($bargain_arr);
  42. sort($product_arr);
  43. $product['bargain_price'] = current($bargain_arr);
  44. $product['product_price'] = current($product_arr);
  45. $product['product']['file_path'] = $product['product']['image'][0]['file_path'];
  46. unset($product['bargainSku']);
  47. unset($product['product']['image']);
  48. }
  49. return $list;
  50. }
  51. /**
  52. * 获取商品列表
  53. */
  54. public static function getBargainProduct($params)
  55. {
  56. // 砍价任务详情
  57. $bargain = self::detail($params['bargain_product_id'], ['bargainSku']);
  58. $task = Task::detail($params['bargain_task_id']);
  59. if (empty($task)) {
  60. throw new BaseException(['msg' => '任务不存在']);
  61. }
  62. if ($task['is_buy'] == 1) {
  63. throw new BaseException(['msg' => '当前砍价任务商品已购买']);
  64. }
  65. if (empty($bargain)) {
  66. throw new BaseException(['msg' => '商品不存在或已结束']);
  67. }
  68. // 商品详情
  69. $product = ProductModel::detail($bargain['product_id']);
  70. // 商品sku信息
  71. $bargain_sku = null;
  72. if ($product['spec_type'] == 10) {
  73. $bargain_sku = $bargain['bargainSku'][0];
  74. } else {
  75. //多规格
  76. foreach ($bargain['bargainSku'] as $sku) {
  77. if ($sku['bargain_product_sku_id'] == $params['bargain_product_sku_id']) {
  78. $bargain_sku = $sku;
  79. break;
  80. }
  81. }
  82. }
  83. if ($bargain_sku == null) {
  84. throw new BaseException(['msg' => '商品规格不存在']);
  85. }
  86. // 商品sku信息
  87. $product['product_sku'] = self::getProductSku($product, $params['product_sku_id']);
  88. $product['bargain_sku'] = $bargain_sku;
  89. // 商品列表
  90. $productList = [$product->hidden(['category', 'content', 'image', 'sku'])];
  91. foreach ($productList as &$item) {
  92. // 商品单价
  93. $item['product_price'] = $task['actual_price'];
  94. // 商品购买数量
  95. $item['total_num'] = 1;
  96. $item['spec_sku_id'] = $item['product_sku']['spec_sku_id'];
  97. // 商品购买总金额
  98. $item['total_price'] = $task['actual_price'];
  99. $item['bargain_product_sku_id'] = $bargain_sku['bargain_product_sku_id'];
  100. $item['product_sku_id'] = $params['product_sku_id'];
  101. $item['product_source_id'] = $bargain_sku['bargain_product_id'];
  102. $item['sku_source_id'] = $bargain_sku['bargain_product_sku_id'];
  103. // 砍价活动id
  104. $item['activity_id'] = $bargain['bargain_activity_id'];
  105. // 砍价订单id
  106. $item['bill_source_id'] = $params['bargain_task_id'];
  107. }
  108. $supplierData[] = [
  109. 'shop_supplier_id' => $product['shop_supplier_id'],
  110. 'supplier' => $product['supplier'],
  111. 'productList' => $productList
  112. ];
  113. unset($product['supplier']);
  114. return $supplierData;
  115. }
  116. /**
  117. * 指定的商品规格信息
  118. */
  119. private static function getProductSku($product, $product_sku_id)
  120. {
  121. // 获取指定的sku
  122. $productSku = [];
  123. foreach ($product['sku'] as $item) {
  124. if ($item['product_sku_id'] == $product_sku_id) {
  125. $productSku = $item;
  126. break;
  127. }
  128. }
  129. if (empty($productSku)) {
  130. return false;
  131. }
  132. // 多规格文字内容
  133. $productSku['product_attr'] = '';
  134. if ($product['spec_type'] == 20) {
  135. $specRelData = helper::arrayColumn2Key($product['spec_rel'], 'spec_value_id');
  136. $attrs = explode('_', $productSku['spec_sku_id']);
  137. foreach ($attrs as $specValueId) {
  138. $productSku['product_attr'] .= $specRelData[$specValueId]['spec']['spec_name'] . ':'
  139. . $specRelData[$specValueId]['spec_value'] . '; ';
  140. }
  141. }
  142. return $productSku;
  143. }
  144. /**
  145. * 获取列表页砍价数据
  146. * 目前未分页,后续有可能会分页
  147. */
  148. public function getActivityList($bargain_activity_id)
  149. {
  150. // 获取列表数据
  151. $list = $this->with(['product.image.file', 'bargainSku'])
  152. ->where('bargain_activity_id', '=', $bargain_activity_id)
  153. ->where('is_delete', '=', 0)
  154. ->visible(['product.product_id','product.product_name','product.file_path'])
  155. ->select();
  156. foreach ($list as $product) {
  157. $bargain_arr = array_column($product['bargainSku']->toArray(), 'bargain_price');
  158. $product_arr = array_column($product['bargainSku']->toArray(), 'product_price');
  159. sort($bargain_arr);
  160. sort($product_arr);
  161. $product['bargain_price'] = current($bargain_arr);
  162. $product['product_price'] = current($product_arr);
  163. $product['product']['file_path'] = $product['product']['image'][0]['file_path'];
  164. unset($product['bargainSku']);
  165. unset($product['product']['image']);
  166. }
  167. return $list;
  168. }
  169. /**
  170. * 拼团商品详情
  171. */
  172. public function getBargainDetail($bargain_product_id)
  173. {
  174. $result = $this->with(['product.image.file', 'bargainSku.productSku.image'])
  175. ->where('bargain_product_id', '=', $bargain_product_id)->find();
  176. if (!empty($result)) {
  177. $bargain_arr = array_column($result->toArray()['bargainSku'], 'bargain_price');
  178. $product_arr = array_column($result->toArray()['bargainSku'], 'product_price');
  179. sort($bargain_arr);
  180. sort($product_arr);
  181. $result['bargain_price'] = current($bargain_arr);
  182. $result['line_price'] = current($product_arr);
  183. if (count($bargain_arr) > 1) {
  184. $result['bargain_high_price'] = end($bargain_arr);
  185. $result['line_high_price'] = end($product_arr);
  186. }
  187. $SupplierModel =new SupplierModel;
  188. if($result['shop_supplier_id']){
  189. $supplier = $SupplierModel::detail($result['shop_supplier_id'],['logo', 'category']);
  190. $supplier['logos'] = $supplier['logo']['file_path'];unset($supplier['logo']);
  191. $supplier['category_name'] = $supplier['category']['name'];unset($supplier['category']);
  192. $supplier->visible(['logos', 'category_name', 'name', 'shop_supplier_id', 'product_sales', 'server_score','store_type']);
  193. $server = (new ServiceApply())->getList($result['shop_supplier_id']);
  194. }else{
  195. $supplier = [];
  196. $server = [];
  197. }
  198. $result['supplier'] = $supplier;
  199. $result['server'] = $server;
  200. }
  201. return $result;
  202. }
  203. }