1], [['attr'],'string'], [['cart_id_list', 'attr_list'],'safe'] ]; } public function save() { try { if (!$this->validate()) { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0] ]; } $form = new PlatformForm(); $form->id = $this->goods_id; $glist = $form->goodsInfo(); $goods = ''; if($glist['code'] == 0 && $glist['data']['count'] == 1){ $goods = $glist['data']['list'][0]; } if (!$goods) { return [ 'code' => 1, 'msg' => '商品不存在或已下架', ]; } $this->attr = json_decode($this->attr, true); $attr = []; foreach ($this->attr as $item) { if (!empty($item['attr_id'])) { $attr[] = intval($item['attr_id']); } } sort($attr); $attr = json_encode($attr, JSON_UNESCAPED_UNICODE); $cart = PurchaseCart::findOne([ 'store_id' => $this->store_id, 'goods_id' => $this->goods_id, 'saas_id' => $this->saas_id, //'md_id' => get_md_id(), 'is_delete' => 0, 'attr' => $attr, ]); if (!$cart) { $cart = new PurchaseCart(); $cart->store_id = $this->store_id; $cart->goods_id = $this->goods_id; $cart->saas_id = $this->saas_id; $cart->num = 0; $cart->created_at = time(); $cart->is_delete = 0; $cart->attr = $attr; // if (get_md_id()) { // $cart->md_id = get_md_id(); // } } $cart->num += $this->num; if ($cart->save()) { return [ 'code' => 0, 'msg' => '添加购物车成功', ]; } else { return ['code' => 1, 'msg' => $cart->errors[0]]; } } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() . 'line=' . $e->getLine() ]; } } public function del() { if (!$this->validate()) { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0] ]; } $del = PurchaseCart::updateAll(['is_delete'=>1], [ 'is_delete' => 0, 'saas_id' => $this->saas_id, 'id' => $this->cart_id_list, ]); if($del){ return [ 'code' => 0, 'msg' => '删除完成', ]; } return [ 'code' => 1, 'msg' => '操作失败', ]; } public function search() { if(isset($this->attr_list) && !empty($this->attr_list) && !empty($this->goods_id)){ $list = []; foreach ($this->attr_list as $value){ $attr = []; foreach (json_decode($value['attr'], true) as $item) { if (!empty($item['attr_id'])) { $attr[] = intval($item['attr_id']); } } sort($attr); $list[] = [ 'id' => 0, 'goods_id' => $this->goods_id, 'attr' => json_encode($attr), 'num' => $value['num'], ]; } $count = count($this->attr_list); }else{ $query = PurchaseCart::find()->asArray()->where(['saas_id' => $this->saas_id, 'is_delete' => 0]); if($this->store_id > 0){ $query->andWhere(['store_id' => $this->store_id]); } if($this->cart_id_list){ $query->andWhere(['id' => $this->cart_id_list]); } $count = $query->count(); $list = $query->orderBy('created_at DESC')->all(); } $form = new PlatformForm(); $form->ids = implode(',', array_column($list, 'goods_id')); $form->is_self = 1; $goods_list = $form->goodsInfo(); if ($goods_list['code'] == 0) { foreach ($list as $i => &$goods_item) { foreach ($goods_list['data']['list'] as $cloud_goods) { if (intval($goods_item['goods_id']) === intval($cloud_goods['id'])) { $goods_item['goods'] = $cloud_goods; } } } } $price_total = 0; return [ 'code' => 0, 'msg' => 'success', 'count' => $count, 'data' => self::cartGoodsList($list, $price_total), 'price_total' => $price_total, ]; } public static function cartGoodsList($goodsList = [], &$priceTotal = 0) { $glist = []; foreach ($goodsList as $item){ if (!$item['goods']) { continue; } $_glist = [ 'attr' => $item['attr'], 'num' => $item['num'], 'cart_id' => $item['id'], ]; $goodsId = $item['goods_id']; $supplier = \app\models\Supplier::findOne(['cloud_supplier_id' => $item['goods']['supplier']['id']]); if($supplier){ $item['goods'] = \app\modules\admin\models\jushuitan\JuShuiTanForm::syncSupplierJstGoodsQty($supplier['id'], $item['goods']); } $glist[$goodsId]['goods'] = $item['goods']; $glist[$goodsId]['cart_num'] = 0; $_attrParent = []; foreach($item['goods']['AttrGroupList'] as $ag){ foreach ($ag['attr_list'] as $at) { $_attrParent[$at['attr_id']] = $ag; } } $attrs = json_decode($item['goods']['attrs'], true); foreach ($attrs as $gattr){ $_attrs = []; $_arr = []; foreach ($gattr['attr_list'] as $_item){ $_arr[] = intval($_item['attr_id']); $_attrs[] = [ 'attr_group_id' => $_attrParent[intval($_item['attr_id'])]['attr_group_id'], 'attr_group_name' => $_attrParent[intval($_item['attr_id'])]['attr_group_name'], 'attr_id' => intval($_item['attr_id']), 'attr_name' => $_item['attr_name'], ]; } sort($_arr); if($item['attr'] == json_encode($_arr)){ $_glist['price'] = sprintf("%.2f",($gattr['wholesale_price'] ?? $gattr['price'])); $_glist['pic'] = $gattr['pic']; $_glist['stock'] = $gattr['num']; $_glist['attr_list'] = $_attrs; $priceTotal += $_glist['price'] * $_glist['num']; $glist[$goodsId]['cart_num'] += $_glist['num']; } } $give_goods_list = []; if (intval($item['goods']['goods_full_give_switch']) === 1) { foreach ($item['goods']['give_goods_list'] as $give_goods_item) { if ($give_goods_item['num'] <= $glist[$goodsId]['cart_num']) { $give_goods_list[] = $give_goods_item; } } } $glist[$goodsId]['give_goods_list'] = $give_goods_list; $glist[$goodsId]['cart'][] = $_glist; } $res = []; foreach ($glist as $g) { $supplier = $g['goods']['supplier']; $res[$supplier['id']]['supplier'] = $supplier; $res[$supplier['id']]['supplier_price'] = 0; $discount = 1; if(!empty($g['goods']['wholesale_ladder_rebate']) && (int)$g['goods']['wholesale_rebate_switch'] === 1){ $last_names = array_column($g['goods']['wholesale_ladder_rebate'],'num'); array_multisort($last_names, SORT_ASC, $g['goods']['wholesale_ladder_rebate']); foreach($g['goods']['wholesale_ladder_rebate'] as $item){ if($g['cart_num'] >= $item['num']){ $discount = sprintf("%.2f",$item['discount'] / 10); if ((int)$g['goods']['wholesale_ladder_type'] === 1) { $discount = $item['discount']; } } } } foreach($g['cart'] as &$value){ $value['original_price'] = $value['price']; $value['price'] = sprintf("%.2f",$value['price'] * 1); $value['cart_price'] = sprintf("%.2f",$value['price'] * $value['num']); if ((int)$g['goods']['wholesale_ladder_type'] === 1) { $res[$supplier['id']]['supplier_price'] += sprintf("%.2f",($discount * $value['num'])) * 1; } else { $res[$supplier['id']]['supplier_price'] += sprintf("%.2f",($value['price'] * $value['num'] * $discount)) * 1; } } $res[$supplier['id']]['goods_list'][] = $g; } $res = array_values($res); return $res; } }