's'], [['is_pt', 'is_seckill'], 'safe'] ]; } public function search() { if (!$this->validate()) { return ['code' => 1, 'msg' => $this->getErrorSummary(false)[0]]; } // app端传递$this->attr_list="a,b" 或 a,小程序端传递参数$this->attr_list="[a,b]" $attr_list = json_decode($this->attr_list, true); if (!is_array($attr_list)) { $attr_list = explode(',', $this->attr_list); } $this->attr_list = $attr_list; $goods = Goods::findOne($this->goods_id); if (!$goods) { return [ 'code' => 0, 'msg' => '商品不存在' ]; } // $res = $goods->getAttrInfo($this->attr_list); foreach ($this->attr_list as $index => $value) { if ($value < 0) { unset($this->attr_list[$index]); } } $this->attr_list = array_values($this->attr_list); $GoodsFullMinus = GoodsFullMinus::find() ->select('*') ->where(['store_id' => get_store_id(),'goods_id' => $goods->id]) ->orderBy('full_minus_num ASC')->asArray()->all(); // 门店逻辑 $attr = $goods->attr; $price = $goods->price; if (get_md_id()) { $md_goods = MdGoods::findOne(['goods_id' => $goods->id, 'md_id' => get_md_id()]); if ($md_goods) { $attr = $md_goods->attr; $price = $md_goods->price; } } $seckill_activity_goods = []; if ($this->is_seckill) { //秒杀活动 $seckill_activity_goods = SeckillActivityGoods::find()->alias('sag')->where(['sag.goods_id' => $goods->id]) ->leftJoin(['sa' => SeckillActivity::tableName()], 'sag.activity_id = sa.id') ->andWhere(['AND', ['sa.is_delete' => 0, 'sag.is_delete' => 0], ['>', 'sa.end_time', time()]]) ->andWhere(['OR', ['sa.is_platform' => 1, 'sa.is_platform_audit' => 1, 'sa.status' => 1], ['sa.is_platform' => 0]]) ->select('sa.id, sa.self_limit_num, sa.order_limit_num, sa.start_time, sa.end_time, sag.attr, sag.seckill_num, sag.seckill_price, sag.use_attr, sag.sale_num, sag.virtual_sales')->asArray()->all(); } $seckill_activity_arr = []; if (!empty($seckill_activity_goods)) { $last_names = array_column($seckill_activity_goods,'start_time'); array_multisort($last_names, SORT_ASC, $seckill_activity_goods); foreach ($seckill_activity_goods as $activity_good) { $activity_good['progress'] = sprintf('%.2f', (($activity_good['sale_num'] + $activity_good['virtual_sales']) / ($activity_good['seckill_num'] + $activity_good['virtual_sales'])) * 100); $activity_good['price'] = $goods->price; if ($activity_good['start_time'] < time()) { //活动进行中 前端展示距离结束 $activity_good['status'] = 1; $seckill_activity_arr = $activity_good; goto seckill_activity_arr; } if ($activity_good['start_time'] >= time()) {//活动进行中 前端展示距离开始 $activity_good['status'] = 2; $seckill_activity_arr = $activity_good; goto seckill_activity_arr; } } seckill_activity_arr: } if (!empty($seckill_activity_arr)) { $seckill_activity_arr['attr'] = json_decode($seckill_activity_arr['attr'], true); $GoodsFullMinus = []; $goods->is_level = 0; // if ((int)$goods->use_attr === 1 && !empty($seckill_activity_arr['attr'])) { $open = false; foreach ($seckill_activity_arr['attr'] as $sag_attr) { $sag_attr_id = array_column($sag_attr['attr_list'], 'attr_id'); $new_attr[] = $sag_attr; //与购物车添加的规格id数组比较 if (empty(array_diff($sag_attr_id, $this->attr_list))) { $open = true; } } if ($open) { foreach ($seckill_activity_arr['attr'] as &$sag_attr) { $num = $sag_attr['seckill_num']; $sag_attr['price'] = $sag_attr['seckill_price']; $sag_attr['num'] = $num > 0 ? $num : 0; } $attr = json_encode($seckill_activity_arr['attr']); } $price = $seckill_activity_arr['attr'][0]['seckill_price']; // } else { // $price = $seckill_activity_arr['attr'][0]['seckill_price']; // } } $is_level = $goods->is_level; //新人专享活动 $activityAt = ActivityNewUser::activityAt($goods->store_id); if ($activityAt) { $goods_ext = ActivityNewUserGoods::findOne(['activity_id' => $activityAt->id, 'goods_id' => $goods->id, 'is_delete' => 0]); if ($goods_ext) { $ext_attrs = json_decode($goods_ext->attr, true); $ext_price = 0; foreach($ext_attrs as $ext_attr){ $ext_attr_id = array_column($ext_attr['attr_list'], 'attr_id'); sort($ext_attr_id); sort($this->attr_list); //与购物车添加的规格id数组比较 // array_splice($this->attr_list, 0, 1); if (empty(array_diff($ext_attr_id, $this->attr_list))) { $ext_price = $ext_attr['price']; } } $buy_limit = $activityAt->buy_limit; if ($buy_limit && $buy_limit > 0) { //部分享受优惠 $user = User::findOne(['binding' => get_saas_user()->mobile, 'store_id' => $goods->store_id, 'is_delete' => 0]); $goodsNum = intval(Goods::getBuyNum($user, $goods->id)); if ($goodsNum < $buy_limit) { $price = $ext_price ?: $price; $attr = json_encode($ext_attrs); } } } } //拼团活动 if ((int)$this->is_pt) { $pt_activity_goods = PtActivityGoods::find()->alias('pag')->where(['pag.goods_id' => $goods->id]) ->leftJoin(['pa' => PtActivity::tableName()], 'pag.activity_id = pa.id') ->andWhere(['AND', ['pa.is_delete' => 0, 'pag.is_delete' => 0], ['>', 'pa.end_time', time()], ['<', 'start_time', time()]]) ->andWhere(['OR', ['pa.is_platform' => 1, 'pa.is_platform_audit' => 1, 'pa.status' => 1], ['pa.is_platform' => 0]]) ->select('pa.id, pa.party_size, pa.party_type, pa.party_goods_count, pa.join_num, pa.start_time, pa.end_time, pag.attr, pag.pt_price, pag.use_attr, pag.sale_num, pag.virtual_sales')->asArray()->one(); if (!empty($pt_activity_goods)) { $pt_activity_goods['attr'] = json_decode($pt_activity_goods['attr'], true); $open = false; foreach ($pt_activity_goods['attr'] as &$pt_attr) { $pt_attr_id = array_column($pt_attr['attr_list'], 'attr_id'); sort($pt_attr_id); sort($this->attr_list); //与购物车添加的规格id数组比较 // array_splice($this->attr_list, 0, 1); if (empty(array_diff($pt_attr_id, $this->attr_list))) { $open = true; $pt_attr['price'] = $pt_attr['pt_price']; } } if ($open) { $attr = json_encode($pt_activity_goods['attr']); } $price = $pt_activity_goods['attr'][0]['pt_price']; } $is_level = false; } $goodsData = [ 'attr' => $attr, 'price' => $price, 'is_level' => $is_level, 'mch_id' => $goods->mch_id, 'full_minus' => $GoodsFullMinus, 'unit' => $goods->unit, 'use_attr' => $goods->use_attr, ]; $res = CommonGoods::currentGoodsAttr($goodsData, (array) $this->attr_list, [], $this->number); return [ 'code' => 0, 'data' => $res ]; } }