ShopCart.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php namespace App\Http\Controllers\Api;
  2. use App\Http\Controllers\Api\Api;
  3. use App\Http\Requests\Api\ShopCart as Request;
  4. use App\Models\Product\Skus as ProductSkus;
  5. use App\Models\ShopCart as Model;
  6. /**
  7. * 购物车接口
  8. *
  9. * @author 刘相欣
  10. *
  11. * */
  12. class ShopCart extends Api{
  13. /**
  14. * 添加 /api/shop_cart/add
  15. *
  16. * @param int $product_id 产品ID
  17. * @param int $buy_num 添加数量
  18. *
  19. * */
  20. public function add(Request $request,Model $Model){
  21. // 接口验签
  22. // $this->verify_sign();
  23. // 验证参数
  24. $request->scene('add')->validate();
  25. // 检查登录
  26. $uid = $this->checkLogin();
  27. // 接收参数
  28. $data['product_id'] = request('product_id',0);
  29. $data['skuid'] = request('skuid',0);
  30. $data['buy_num'] = request('buy_num',1);
  31. $data['custom_uid'] = $uid;
  32. // 查询
  33. $id = $Model->query()->where([['custom_uid','=',$uid],['product_id','=',$data['product_id']],['skuid','=',$data['skuid']]])->value('id');
  34. // 如果存在id,更新数量
  35. $result = $id ? $Model->incrBuyNum($id,$uid,$data['buy_num']) : $Model->add($data);
  36. // 提交结果
  37. if( !$result ) return json_send(['code'=>'success','msg'=>'加入购物车失败','data'=>['error'=>'加入购物车失败']]);
  38. // 返回结果
  39. return json_send(['code'=>'success','msg'=>'添加成功','data'=>$data]);
  40. }
  41. /**
  42. * 更新 /api/shop_cart/edit
  43. *
  44. * @param int $id 购物车id
  45. *
  46. * */
  47. public function edit(Request $request,Model $Model){
  48. // 接口验签
  49. // $this->verify_sign();
  50. // 验证参数
  51. $request->scene('edit')->validate();
  52. // 检查登录
  53. $uid = $this->checkLogin();
  54. // 接收参数
  55. $id = request('id',0);
  56. $data['buy_num'] = request('buy_num',1);
  57. // 如果存在id,更新数量
  58. $result = $Model->edit($id,$uid,$data);
  59. // 提交结果
  60. if( !$result ) return json_send(['code'=>'success','msg'=>'更新失败','data'=>['error'=>'更新购物车失败']]);
  61. // 返回结果
  62. return json_send(['code'=>'success','msg'=>'更新成功','data'=>$data]);
  63. }
  64. /**
  65. * 更新 /api/shop_cart/del
  66. *
  67. * @param int $id 购物车id
  68. *
  69. * */
  70. public function del(Request $request,Model $Model){
  71. // 接口验签
  72. // $this->verify_sign();
  73. // 验证参数
  74. $request->scene('del')->validate();
  75. // 检查登录
  76. $uid = $this->checkLogin();
  77. // 接收参数
  78. $id = request('id',0);
  79. // 如果存在id,更新数量
  80. $result = $Model->del($id,$uid);
  81. // 提交结果
  82. if( !$result ) return json_send(['code'=>'success','msg'=>'删除失败','data'=>['error'=>'删除购物车失败']]);
  83. // 返回结果
  84. return json_send(['code'=>'success','msg'=>'删除成功','data'=>['id'=>$id]]);
  85. }
  86. /**
  87. * 获取列表 /api/shop_cart/get_list
  88. *
  89. * @param int $id 购物车id
  90. *
  91. * */
  92. public function get_list(Request $request,Model $Model,ProductSkus $ProductSkus){
  93. // 接口验签
  94. // $this->verify_sign();
  95. // 验证参数
  96. $request->scene('get_list')->validate();
  97. // 检查登录
  98. $uid = $this->checkLogin();
  99. // 显示
  100. $map = [['shop_cart.custom_uid','=',$uid]];
  101. // 查询
  102. $list = $Model->query()->join('product','shop_cart.product_id','=','product.id')->where($map)->get(['shop_cart.id','shop_cart.checked','shop_cart.product_id','shop_cart.skuid','shop_cart.buy_num','product.stock','product.spec','product.thumb','product.name','product.price','product.market_price','product.status as product_status'])->toArray();
  103. // 判断结果
  104. $skusList = $ProductSkus->getListByIds(array_column($list,'skuid'));
  105. // 循环处理数据
  106. foreach ($list as $key => $value) {
  107. // 如果有sku
  108. if( $value['skuid'] ) {
  109. // 是否存在
  110. $isExist = false;
  111. // 循环SKU
  112. foreach ($skusList as $sku) {
  113. // 如果SKU存在的话
  114. if( $sku['sku_id'] == $value['skuid'] ) {
  115. $value['price'] = $sku['price'];
  116. $value['spec'] = $sku['sku_attr_names'];
  117. $value['stock'] = $sku['stock'];
  118. $isExist = true;
  119. }
  120. }
  121. // 如果不存在,状态变动
  122. if( !$isExist ) $value['product_status'] = 4;
  123. }
  124. // 产品图路径
  125. $value['thumb'] = path_compat($value['thumb']);
  126. // 库存超出的时候
  127. if($value['buy_num'] > $value['stock'] ) $value['buy_num'] = $value['stock'];
  128. // 重组
  129. $list[$key] = $value;
  130. }
  131. // 返回结果
  132. return json_send(['code'=>'success','msg'=>'获取成功','data'=>$list]);
  133. }
  134. /**
  135. * 结算列表 /api/shop_cart/check_list
  136. *
  137. * @param int $id 购物车id
  138. *
  139. * */
  140. public function check_list(Request $request,Model $Model,ProductSkus $ProductSkus){
  141. // 接口验签
  142. // $this->verify_sign();
  143. // 验证参数
  144. $request->scene('check_list')->validate();
  145. // 检查登录
  146. $uid = $this->checkLogin();
  147. // 接收参数
  148. $cartIds = request('cart_ids','');
  149. // 转成数组
  150. $cartIds = explode(',',$cartIds);
  151. // 循环处理
  152. foreach ($cartIds as $key => $value) {
  153. // 如果不是数值
  154. if( $value < 1 ) unset($cartIds[$key]);
  155. }
  156. // 如果不存在的话
  157. if( !$cartIds ) return json_send(['code'=>'error','msg'=>'请选择可用产品','data'=>['error'=>request('cart_ids','')]]);
  158. // 显示
  159. $map = [['shop_cart.custom_uid','=',$uid],['product.status','=',0]];
  160. // 查询
  161. $list = $Model->query()->join('product','shop_cart.product_id','=','product.id')->whereIn('shop_cart.id',$cartIds)->where($map)->get(['shop_cart.id','shop_cart.checked','shop_cart.product_id','shop_cart.skuid','shop_cart.buy_num','product.stock','product.spec','product.thumb','product.name','product.price','product.market_price','product.status as product_status'])->toArray();
  162. // 判断结果
  163. $skusList = $ProductSkus->getListByIds(array_column($list,'skuid'));
  164. // 循环处理数据
  165. foreach ($list as $key => $value) {
  166. // 如果有sku
  167. if( $value['skuid'] ) {
  168. // 是否存在
  169. $isExist = false;
  170. // 循环SKU
  171. foreach ($skusList as $sku) {
  172. // 如果SKU存在的话
  173. if( $sku['sku_id'] == $value['skuid'] ) {
  174. $value['price'] = $sku['price'];
  175. $value['spec'] = $sku['sku_attr_names'];
  176. $value['stock'] = $sku['stock'];
  177. $isExist = true;
  178. }
  179. }
  180. // 如果不存在,状态变动
  181. if( !$isExist ) {
  182. unset($list[$key]);
  183. continue;
  184. }
  185. }
  186. // 如果不存在,状态变动
  187. if( $value['stock'] <= 0 ) {
  188. unset($list[$key]);
  189. continue;
  190. }
  191. // 产品图路径
  192. $value['thumb'] = path_compat($value['thumb']);
  193. // 库存超出的时候
  194. if($value['buy_num'] > $value['stock'] ) $value['buy_num'] = $value['stock'];
  195. // 重组
  196. $list[$key] = $value;
  197. }
  198. // 重组数组
  199. $list = array_values($list);
  200. // 返回结果
  201. return json_send(['code'=>'success','msg'=>'获取成功','data'=>$list]);
  202. }
  203. }