Product.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php namespace App\Http\Controllers\Api;
  2. use App\Http\Controllers\Api\Api;
  3. use App\Http\Requests\Api\Product as Request;
  4. use App\Models\Business;
  5. use App\Models\Custom;
  6. use App\Models\Product as Model;
  7. use App\Models\Product\Attr as ProductAttr;
  8. use App\Models\Product\City as ProductCity;
  9. use App\Models\Product\Spec as ProductSpec;
  10. use App\Models\Product\Skus as ProductSkus;
  11. use App\Models\ProductPhoto;
  12. /**
  13. * 产品接口
  14. *
  15. * @author 刘相欣
  16. *
  17. * */
  18. class Product extends Api{
  19. /**
  20. * 获取产品列表 /api/product/get_list
  21. *
  22. * @param string $name 产品名称
  23. * @param int $page 页码,默认1
  24. * @param int $limit 每页条数,默认10条
  25. *
  26. * */
  27. public function get_list(Request $request,Model $Model,Custom $Custom){
  28. // 接口验签
  29. // $this->verify_sign();
  30. // 验证参数
  31. $request->scene('get_list')->validate();
  32. // 检查登录
  33. $uid = $this->getUid();
  34. // 获取客户信息
  35. $custom = $uid ? $Custom->getOne($uid) : [];
  36. // 接收参数
  37. $name = request('name','');
  38. $limit = request('limit',10);
  39. // 显示
  40. $map = [['status','=','0'],['stock','>',0]];
  41. // 分类ID
  42. if( $name ) $map[] = ['name','like','%'.$name.'%'];
  43. // 是否有城市
  44. $wherIn = empty($custom['city_id']) ? [1] : [1,$custom['city_id']];
  45. // 获取分页信息
  46. $Paginator = $Model->query()
  47. ->join('product_city','product_city.product_id','=','product.id')
  48. ->where($map)
  49. ->whereIn('product_city.city_id',$wherIn)
  50. ->groupBy('product_id')
  51. ->orderBy('product.sort')
  52. ->orderBy('product.id')
  53. ->paginate($limit,['product.id','product.sort','product.name','product.thumb','product.spec','product.price','product.market_price','product.stock']);
  54. // 获取数据
  55. $data['total'] = $Paginator->total();
  56. $data['current_page'] = $Paginator->currentPage();
  57. $data['per_page'] = $Paginator->perPage();
  58. $data['last_page'] = $Paginator->lastPage();
  59. $data['data'] = $Paginator->items();
  60. // 处理请求
  61. foreach ( $data['data'] as $key => $value ) {
  62. // 处理数据
  63. $value['thumb'] = path_compat($value['thumb']);
  64. // 重组数据
  65. $data['data'][$key] = $value;
  66. }
  67. // 返回结果
  68. return json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]);
  69. }
  70. /**
  71. * 获取产品列表 /api/product/get_detail
  72. *
  73. * @param int $id 产品id
  74. *
  75. * */
  76. public function get_detail(Request $request,Model $Model,ProductPhoto $ProductPhoto,Business $Business,ProductAttr $ProductAttr,ProductSpec $ProductSpec,ProductSkus $ProductSkus ){
  77. // 接口验签
  78. // $this->verify_sign();
  79. // 验证参数
  80. $request->scene('get_detail')->validate();
  81. // 检查登录
  82. // $uid = $this->checkLogin();
  83. // 接收参数
  84. $id = request('id',0);
  85. // 显示
  86. $map[] = ['status','=','0'];
  87. // 查询
  88. $data = $Model->query()->where($map)->find($id,['id','name','thumb','stock','spec','poster','price','business_id','market_price']);
  89. // 如果没有数据
  90. if( !$data ) return json_send(['code'=>'error','msg'=>'产品已下架','data'=>['error'=>'产品已下架或不存在']]);
  91. // 转数组
  92. $data = $data->toArray();
  93. // 处理数据
  94. $data['thumb'] = path_compat($data['thumb']);
  95. $data['poster'] = $data['poster'] ? path_compat($data['poster']) : '';
  96. $data['description'] = $Model->getDesc($id);
  97. $data['business_info'] = $Business->getOne($data['business_id']);
  98. $data['photo_list'] = $ProductPhoto->getListByProductId($id);
  99. // 缩略图处理
  100. foreach ($data['photo_list'] as $key => $value) {
  101. $value['thumb'] = path_compat($value['thumb']);
  102. $data['photo_list'][$key] = $value;
  103. }
  104. // 主图追加进去
  105. if( $data['photo_list'] ) array_unshift($data['photo_list'],['id'=>0,'sort'=>0,'thumb'=>$data['thumb']]);
  106. // 获取产品属性
  107. $attr = $ProductAttr->getListByProductId($id);
  108. // 规格属性
  109. $specAttr = [];
  110. // 获取数据
  111. foreach ($attr as $value) {
  112. // 默认未选中
  113. $value['active'] = 0;
  114. $specAttr[$value['spec_id']]['spec_id'] = $value['spec_id'];
  115. $specAttr[$value['spec_id']]['spec_name'] = $ProductSpec->getOne($value['spec_id'],'name');
  116. $specAttr[$value['spec_id']]['attr_list'][] = $value;
  117. }
  118. // 获取规格详情数据
  119. $data['product_attr'] = array_values($specAttr);
  120. // 获取SKU数据
  121. $data['product_sku'] = $ProductSkus->getListByProductId($id);
  122. // 获取数据
  123. foreach ($data['product_sku'] as $key=>$value) {
  124. // 默认未选中
  125. $value['sku_thumb'] = $value['sku_thumb'] ? path_compat($value['sku_thumb']) : '';
  126. $data['product_sku'][$key]= $value;
  127. }
  128. // 手机号
  129. if( isset($data['business_info']['phone']) ) unset($data['business_info']['phone']);
  130. if( isset($data['business_info']['logopic']) ) $data['business_info']['logopic'] = path_compat($data['business_info']['logopic']);
  131. // 返回结果
  132. return json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]);
  133. }
  134. /**
  135. * 获取产品列表 /api/product/get_sku
  136. *
  137. * @param int $id 产品id
  138. *
  139. * */
  140. public function get_sku(Request $request,ProductAttr $ProductAttr,ProductSpec $ProductSpec,ProductSkus $ProductSkus ){
  141. // 接口验签
  142. // $this->verify_sign();
  143. // 验证参数
  144. $request->scene('get_sku')->validate();
  145. // 检查登录
  146. $uid = $this->checkLogin();
  147. // 接收参数
  148. $id = request('id',0);
  149. // 获取产品属性
  150. $attr = $ProductAttr->getListByProductId($id);
  151. // 规格属性
  152. $specAttr = [];
  153. // 获取数据
  154. foreach ($attr as $value) {
  155. // 默认未选中
  156. $value['active'] = 0;
  157. $specAttr[$value['spec_id']]['spec_id'] = $value['spec_id'];
  158. $specAttr[$value['spec_id']]['spec_name'] = $ProductSpec->getOne($value['spec_id'],'name');
  159. $specAttr[$value['spec_id']]['attr_list'][] = $value;
  160. }
  161. // 获取规格详情数据
  162. $data['product_attr'] = $specAttr;
  163. // 获取SKU数据
  164. $data['product_sku'] = $ProductSkus->getListByProductId($id);
  165. // 返回结果
  166. return json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]);
  167. }
  168. }