|
|
@@ -225,7 +225,51 @@ class ShoppingCartServer
|
|
|
Shopping::where('id',$shopping_info->{'id'})->delete();//删除主表
|
|
|
ShoppingDetail::where('shopping_id',$shopping_info->{'id'})->delete();//删除详情表
|
|
|
}else{
|
|
|
- Shopping::where('id',$shopping_info->{'id'})->update(['number' => $number]);
|
|
|
+ //如果存在购物车
|
|
|
+ if (!empty($goods_spec)){//多规格商品
|
|
|
+ $is_create = false;
|
|
|
+ foreach ($goods_spec as $spec){
|
|
|
+ $shopping_spec_number = ShoppingDetail::where('shopping_id',$shopping_info->{'id'})
|
|
|
+ ->where('goods_id',$goods_id)
|
|
|
+ ->where('goods_spec_id',$spec['id'])
|
|
|
+ ->value('number');
|
|
|
+ if ($shopping_spec_number != $spec['number']){
|
|
|
+ $is_create = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($is_create){//规格数量不一样,创建新的
|
|
|
+ //入库
|
|
|
+ $shopping = Shopping::create([
|
|
|
+ 'm_id' => $m_id,
|
|
|
+ 'shop_id' => $shop_id,
|
|
|
+ 'category_id' => $category_id,
|
|
|
+ 'goods_id' => $goods_id,
|
|
|
+ 'goods_spec_id' => $goods_spec_id,
|
|
|
+ 'number' => $number,
|
|
|
+ ]);
|
|
|
+ $shopping_id = $shopping->{'id'};
|
|
|
+ if (empty($shopping_id)) {
|
|
|
+ DB::rollBack();
|
|
|
+ return ['code' => 0, 'msg' => '操作失败'];
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!empty($goods_spec_data)){//规则明细存入
|
|
|
+ foreach ($goods_spec_data as $spec){
|
|
|
+ ShoppingDetail::create([
|
|
|
+ 'shopping_id' => $shopping_id,
|
|
|
+ 'goods_id' => $goods_id,
|
|
|
+ 'goods_spec_id' => $spec['id'],
|
|
|
+ 'number' => $spec['number'],
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{//规格数量一样,在原来基础上增加
|
|
|
+ Shopping::where('id',$shopping_info->{'id'})->increment('number',$number);
|
|
|
+ }
|
|
|
+
|
|
|
+ }else{
|
|
|
+ Shopping::where('id',$shopping_info->{'id'})->update(['number' => $number]);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -393,4 +437,95 @@ class ShoppingCartServer
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 本地购物车数据组装获取
|
|
|
+ * @param $cartInfo
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ function getCartList($cartInfo)
|
|
|
+ {
|
|
|
+ $total_num = 0;//总商品数
|
|
|
+ $total_goods_money = '0.00';//总商品费用
|
|
|
+ $total_pack_price = 0;//打包费
|
|
|
+ $goods_list = [];
|
|
|
+ foreach ($cartInfo['goods_list'] as $value){
|
|
|
+ $goods = Goods::where('id',$value['goods_id'])
|
|
|
+ ->select(['id as goods_id','shop_id','status','goods_name','goods_image','price','spec_type','category_id','pack_price'])
|
|
|
+ ->orderBy('id','asc')
|
|
|
+ ->first();
|
|
|
+ if (empty($goods)){
|
|
|
+ return ['code' => 0, 'msg' => '商品不存在'];
|
|
|
+ }
|
|
|
+ if ($goods->{'status'} != 1){
|
|
|
+ return ['code' => 0, 'msg' => '商品已下架'];
|
|
|
+ }
|
|
|
+ $goods_price = $goods->{'price'};//商品价格
|
|
|
+ $goods_number = $value['goods_number'];//商品购买数量
|
|
|
+ $goods_spec_list = [];
|
|
|
+ $goods_spec_price = 0;
|
|
|
+ $goods_attr = '';
|
|
|
+ if ($goods->{'spec_type'} == 2 && !empty($value['goods_spec'])){//存在规格
|
|
|
+ foreach ($value['goods_spec'] as $spec){
|
|
|
+ $specInfo = GoodsSpec::where('goods_id',$value['goods_id'])
|
|
|
+ ->where('id',$spec['id'])
|
|
|
+ ->where('is_del',0)
|
|
|
+ ->select(['spec_name','spec_price'])
|
|
|
+ ->first();
|
|
|
+ if (empty($specInfo)){
|
|
|
+ return ['code' => 0, 'msg' => '规则不存在'];
|
|
|
+ }
|
|
|
+ if ($spec['number'] > 1){
|
|
|
+ $goods_attr .= $specInfo['spec_name'].'x'.$spec['number'] . ',';
|
|
|
+ }else{
|
|
|
+ $goods_attr .= $specInfo['spec_name'] . ',';
|
|
|
+ }
|
|
|
+ $goods_spec_price = bcadd($goods_spec_price,bcmul($spec['number'],$specInfo['spec_price'],2),2);//规格数量乘以价格等于 规格总价
|
|
|
+
|
|
|
+ $goods_spec_list[] = [
|
|
|
+ 'goods_id' => $value['goods_id'],
|
|
|
+ 'goods_spec_id' => $spec['id'],
|
|
|
+ 'spec_price' => $specInfo['spec_price'],
|
|
|
+ 'spec_name' => $specInfo['spec_name'],
|
|
|
+ 'number' => $spec['number'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //计算价格
|
|
|
+ $goods_money = bcmul($goods_number,bcadd($goods_price,$goods_spec_price,2),2);//商品价格等于 商品数量X(商品底价+商品规格总价)
|
|
|
+
|
|
|
+
|
|
|
+ $goods_list[] = [
|
|
|
+ 'shop_id' => $goods['shop_id'],
|
|
|
+ 'category_id' => $goods['category_id'],
|
|
|
+ 'goods_id' => $goods['goods_id'],
|
|
|
+ 'goods_money' => rtrim(rtrim($goods_money, '0'),'.'),
|
|
|
+ 'goods_number' => $goods_number,
|
|
|
+ 'goods_name' => $goods['goods_name'],
|
|
|
+ 'goods_image' => $goods['goods_image'],
|
|
|
+ 'spec_type' => $goods['spec_type'],
|
|
|
+ 'price' => $goods_price,
|
|
|
+ 'pack_price' => $goods['pack_price'],
|
|
|
+ 'goods_spec_id' => $goods['goods_spec_id'],
|
|
|
+ 'goods_attr' => trim($goods_attr,','),
|
|
|
+ 'spec_list' => $goods_spec_list,
|
|
|
+ ];
|
|
|
+ //计算打包费
|
|
|
+ $total_pack_price = bcadd($total_pack_price,bcmul($goods_number,$goods['pack_price'],2),2);
|
|
|
+ //计算总数量
|
|
|
+ $total_num += $goods_number;
|
|
|
+ //计算总商品费用
|
|
|
+ $total_goods_money = bcadd($total_goods_money,$goods_money,2);
|
|
|
+ }
|
|
|
+
|
|
|
+ //订单总价-商品总价+总包装费
|
|
|
+ $total_price = bcadd($total_goods_money,$total_pack_price,2);
|
|
|
+
|
|
|
+ $data['total_price'] = rtrim(rtrim($total_price, '0'),'.');
|
|
|
+ $data['total_num'] = (int)$total_num;
|
|
|
+ $data['total_goods_money'] = rtrim(rtrim($total_goods_money, '0'),'.');
|
|
|
+ $data['pack_price'] = $total_pack_price;
|
|
|
+ $data['goods_list'] = $goods_list;
|
|
|
+
|
|
|
+ return ['code' => 1, 'msg' => '成功', 'data'=>$data];
|
|
|
+ }
|
|
|
}
|