|
@@ -227,75 +227,77 @@ class ShopCart extends Api{
|
|
|
* @param int $id 购物车id
|
|
|
*
|
|
|
* */
|
|
|
- public function check_list(Request $request,Model $Model,ProductSkus $ProductSkus,Business $Business,PromoProduct $PromoProduct,Custom $Custom,WeiBanTags $WeiBanTags,PayCity $PayCity,ProductCity $ProductCity){
|
|
|
- // 接口验签
|
|
|
- // $this->verify_sign();
|
|
|
+ public function check_list(Request $request,Model $Model,ProductSkus $ProductSkus,Business $Business,PromoProduct $PromoProduct,Custom $Custom,WeiBanTags $WeiBanTags,PayCity $PayCity,ProductCity $ProductCity){
|
|
|
+ // 接口验签
|
|
|
+ // $this->verify_sign();
|
|
|
// 验证参数
|
|
|
- $request->scene('check_list')->validate();
|
|
|
- // 检查登录
|
|
|
- $uid = $this->checkLogin();
|
|
|
+ $request->scene('check_list')->validate();
|
|
|
+ // 检查登录
|
|
|
+ $uid = $this->checkLogin();
|
|
|
// 获取客户信息
|
|
|
$custom = $uid ? $Custom->getOne($uid) : [];
|
|
|
- // 接收参数
|
|
|
- $cartIds = request('cart_ids','');
|
|
|
- // 转成数组
|
|
|
- $cartIds = explode(',',$cartIds);
|
|
|
- // 循环处理
|
|
|
- foreach ($cartIds as $key => $value) {
|
|
|
- // 如果不是数值
|
|
|
- if( $value < 1 ) unset($cartIds[$key]);
|
|
|
- }
|
|
|
- // 如果不存在的话
|
|
|
- if( !$cartIds ) return json_send(['code'=>'error','msg'=>'请选择可用产品','data'=>['error'=>request('cart_ids','')]]);
|
|
|
- // 显示
|
|
|
- $map = [['shop_cart.custom_uid','=',$uid],['product.status','=',0]];
|
|
|
- // 查询
|
|
|
- $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.business_id','product.spec','product.thumb','product.name','product.price','product.market_price','product.status as product_status'
|
|
|
- ])->toArray();
|
|
|
- // 判断结果
|
|
|
- $skusList = $ProductSkus->getListByIds(array_column($list,'skuid'));
|
|
|
+ // 接收参数
|
|
|
+ $cartIds = request('cart_ids','');
|
|
|
+ // 转成数组
|
|
|
+ $cartIds = explode(',',$cartIds);
|
|
|
+ // 循环处理
|
|
|
+ foreach ($cartIds as $key => $value) {
|
|
|
+ // 如果不是数值
|
|
|
+ if( $value < 1 ) unset($cartIds[$key]);
|
|
|
+ }
|
|
|
+ // 如果不存在的话
|
|
|
+ if( !$cartIds ) return json_send(['code'=>'error','msg'=>'请选择可用产品','data'=>['error'=>request('cart_ids','')]]);
|
|
|
+ // 显示
|
|
|
+ $map = [['shop_cart.custom_uid','=',$uid],['product.status','=',0]];
|
|
|
+ // 查询
|
|
|
+ $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.business_id','product.spec','product.thumb','product.name','product.price','product.market_price','product.status as product_status'
|
|
|
+ ])->toArray();
|
|
|
+ // 判断结果
|
|
|
+ $skusList = $ProductSkus->getListByIds(array_column($list,'skuid'));
|
|
|
//查询产品活动
|
|
|
$promoList = $PromoProduct->getListByIds(array_column($list,'product_id'));
|
|
|
// 查询用户标签
|
|
|
$tags = empty($custom['weiban_extid']) ? [] : $WeiBanTags->getListByWeibanExtid($custom['weiban_extid']);
|
|
|
- // 用户所在城市
|
|
|
+ // 用户所在城市
|
|
|
$cityId = empty($custom['city_id']) ? 0 : $custom['city_id'];
|
|
|
- // 满减活动
|
|
|
+ // 满减活动
|
|
|
$promoProductList = [];
|
|
|
- // 循环处理数据
|
|
|
- foreach ($list as $key => $value) {
|
|
|
- // 获取店铺名称
|
|
|
- $value['business_name'] = $value['business_id'] ? (string)$Business->getOne($value['business_id'],'name') : '';
|
|
|
- // 如果有sku
|
|
|
- if( $value['skuid'] ) {
|
|
|
- // 是否存在
|
|
|
- $isExist = false;
|
|
|
- // 循环SKU
|
|
|
- foreach ($skusList as $sku) {
|
|
|
- // 如果SKU存在的话
|
|
|
- if( $sku['sku_id'] == $value['skuid'] ) {
|
|
|
- $value['price'] = $sku['price'];
|
|
|
- $value['spec'] = $sku['sku_attr_names'];
|
|
|
- $value['stock'] = $sku['stock'];
|
|
|
- $isExist = true;
|
|
|
- }
|
|
|
- }
|
|
|
- // 如果不存在,状态变动
|
|
|
- if( !$isExist ) {
|
|
|
- unset($list[$key]);
|
|
|
- continue;
|
|
|
- }
|
|
|
- }
|
|
|
- // 如果不存在,状态变动
|
|
|
- if( $value['stock'] <= 0 ) {
|
|
|
- unset($list[$key]);
|
|
|
- continue;
|
|
|
- }
|
|
|
+ // 产品价格同级,用于优惠券计算
|
|
|
+ $productPrice = [];
|
|
|
+ // 循环处理数据
|
|
|
+ foreach ($list as $key => $value) {
|
|
|
+ // 获取店铺名称
|
|
|
+ $value['business_name'] = $value['business_id'] ? (string)$Business->getOne($value['business_id'],'name') : '';
|
|
|
+ // 如果有sku
|
|
|
+ if( $value['skuid'] ) {
|
|
|
+ // 是否存在
|
|
|
+ $isExist = false;
|
|
|
+ // 循环SKU
|
|
|
+ foreach ($skusList as $sku) {
|
|
|
+ // 如果SKU存在的话
|
|
|
+ if( $sku['sku_id'] == $value['skuid'] ) {
|
|
|
+ $value['price'] = $sku['price'];
|
|
|
+ $value['spec'] = $sku['sku_attr_names'];
|
|
|
+ $value['stock'] = $sku['stock'];
|
|
|
+ $isExist = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果不存在,状态变动
|
|
|
+ if( !$isExist ) {
|
|
|
+ unset($list[$key]);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果不存在,状态变动
|
|
|
+ if( $value['stock'] <= 0 ) {
|
|
|
+ unset($list[$key]);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if ($promoList && $cityId){
|
|
|
if (isset($promoList[$value['product_id']])){
|
|
|
$promoInfo = $promoList[$value['product_id']];
|
|
@@ -341,10 +343,10 @@ class ShopCart extends Api{
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- // 产品图路径
|
|
|
- $value['thumb'] = path_compat($value['thumb']);
|
|
|
- // 库存超出的时候
|
|
|
- if($value['buy_num'] > $value['stock'] ) $value['buy_num'] = $value['stock'];
|
|
|
+ // 产品图路径
|
|
|
+ $value['thumb'] = path_compat($value['thumb']);
|
|
|
+ // 库存超出的时候
|
|
|
+ if($value['buy_num'] > $value['stock'] ) $value['buy_num'] = $value['stock'];
|
|
|
// 允许城市
|
|
|
$allowCity = $ProductCity->where([['product_id','=',$value['product_id']]])->pluck('city_id')->toArray();
|
|
|
//判断产品城市是否设置了支付
|
|
@@ -357,32 +359,16 @@ class ShopCart extends Api{
|
|
|
}
|
|
|
}
|
|
|
$value['is_pay'] = $isPay;
|
|
|
- // 重组
|
|
|
- $list[$key] = $value;
|
|
|
- }
|
|
|
- $promoRebateIds = [];
|
|
|
- //满折扣
|
|
|
- $discount = 0;
|
|
|
- //满减
|
|
|
- $reduction = 0;
|
|
|
- //计算产品促销活动优惠价格
|
|
|
- if ($promoProductList){
|
|
|
- foreach ($promoProductList as $key => $value){
|
|
|
- $priceSum = array_sum(array_column($value,'price'));
|
|
|
- if ($priceSum >= $value[0]['std_pay']) {
|
|
|
- switch ($value[0]['rebate_type']){
|
|
|
- case 1:
|
|
|
- $reduction += $value[0]['rebate'];
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- $discount += $priceSum - number_format($priceSum * $value[0]['rebate']/10,2);
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- $promoRebateIds[] = $key;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ // 重组
|
|
|
+ $list[$key] = $value;
|
|
|
+ // 计算总价
|
|
|
+ $productPrice[$value['product_id']]['price_total'] = bcmul($value['price'],$value['buy_num'],2) ;
|
|
|
}
|
|
|
+ /*活动优惠数据*/
|
|
|
+ $promoListData = $PromoProduct->getRebatePriceNew(array_column($list,'product_id'),$uid,$productPrice,$cityId,$tags);
|
|
|
+ $discount_total = $promoListData['discount_total'];
|
|
|
+ $reduction_total = $promoListData['reduction_total'];
|
|
|
+ $promoRebateIds = $promoListData['promo_rebate_ids'];
|
|
|
$promoRebateList = [];
|
|
|
//如果有赠品
|
|
|
if ($promoRebateIds){
|
|
@@ -402,11 +388,10 @@ class ShopCart extends Api{
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- $discount = number_format($discount,2);
|
|
|
- // 重组数组
|
|
|
- $list = array_values($list);
|
|
|
- // 返回结果
|
|
|
- return json_send(['code'=>'success','msg'=>'获取成功','data'=>$list,'discount'=>$discount,'reduction'=>$reduction,'promoRebateList'=>$promoRebateList]);
|
|
|
- }
|
|
|
+ // 重组数组
|
|
|
+ $list = array_values($list);
|
|
|
+ // 返回结果
|
|
|
+ return json_send(['code'=>'success','msg'=>'获取成功','data'=>$list,'discount'=>$discount_total,'reduction'=>$reduction_total,'promoRebateList'=>$promoRebateList]);
|
|
|
+ }
|
|
|
|
|
|
}
|