request->get('status', SeckillActivity::ACTIVITY_STATUS_ING); $status_map = SeckillActivity::getActivityStatusMap(); if(!array_key_exists($activity_status,$status_map)){ $activity_status = SeckillActivity::ACTIVITY_STATUS_ING; } $wheres[] = ['and', ['mall_id' => $this->mall_id], ['!=', 'status', StatusEnum::DELETE]]; $time = time(); switch ($activity_status) { case SeckillActivity::ACTIVITY_STATUS_WAIT: // 未开始 $wheres[] = ['and', ['>=', 'begin_time', $time], ['<=', 'hot_time', $time]]; break; case SeckillActivity::ACTIVITY_STATUS_ING: // 进行中 $wheres[] = ['and', ['<=', 'begin_time', $time], ['>=', 'end_time', $time]]; break; case SeckillActivity::ACTIVITY_STATUS_END: // 已结束 $wheres[] = ['<=', 'end_time', $time]; break; } $params = [ //'select' => 'id,cate_id,title,start_time,end_time,group_num,random_win_num,virtual_num,created_at,status', 'where' => $wheres, 'order' => 'id desc', ]; $data = SeckillActivity::listPage($params); if (false === $data['list']) { return $this->error(SeckillActivity::getStaticError()); } $goods_ids = array_column($data['list'], 'goods_id'); $goods_list = Goods::find() ->select('id as goods_id,goods_name,price,original_price,cover_pic,status,stock as goods_stock') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $goods_ids]) ->asArray() ->all(); $goods_list = array_column($goods_list,null,'goods_id'); $attr_ids = array_column($data['list'], 'attr_id'); $goods_attr_list = GoodsAttr::find() ->select('id,price')->where(['id' => $attr_ids])->asArray()->all(); $goods_attr_list = array_column($goods_attr_list,null,'id'); foreach ($data['list'] as &$list) { $list['goods_name'] = $goods_list[$list['goods_id']]['goods_name'] ?? ''; $list['cover_pic'] = $goods_list[$list['goods_id']]['cover_pic'] ?? ''; $list['activity_status'] = SeckillActivity::checkActivityStatus($list['begin_time'],$list['end_time']); $list['begin_time'] = date('Y-m-d H:i:s',$list['begin_time']); $list['end_time'] = date('Y-m-d H:i:s',$list['end_time']); $list['hot_time'] = date('Y-m-d H:i:s',$list['hot_time']); $list['now_stock'] = ($list['stock'] - $list['sale_nums']) > 0 ? ($list['stock'] - $list['sale_nums']) : 0; $list['goods_original_price'] = $goods_attr_list[$list['attr_id']]['price'] ?? 0; $list['sale_percent'] = $list['stock'] > 0 ? bcdiv($list['sale_nums'],$list['stock'],2) : 0; } $status_map = SeckillActivity::getActivityStatusMap(); $data['status_map'] = $status_map; return $this->success('请求成功', $data); }catch(Exception $e){ return $this->error($e->getMessage()); } } /** * 活动商品详情 * @return mixed|void */ public function actionInfo() { try{ $activity_id = \Yii::$app->request->get('activity_id', 0); //$wheres[] = ['and', ['mall_id' => $this->mall_id], ['!=', 'status', StatusEnum::DELETE],['=','id',$activity_id]]; $info = SeckillActivity::getActivityByCache($activity_id); if(!$info){ throw new Exception('活动不存在'); } if($info['mall_id'] != $this->mall_id){ throw new Exception('活动不存在'); } $info['remain_time'] = 0; //活动剩余时间:秒 if($info['activity_status'] == SeckillActivity::ACTIVITY_STATUS_ING){ //活动开始:获取库存信息 $info['now_stock'] = ActivityLogic::getNowStock($activity_id); $info['sale_nums'] = ($info['stock'] - $info['now_stock']) > 0 ? $info['stock'] - $info['now_stock'] : 0; $info['remain_time'] = ($info['end_time'] - time()) > 0 ? $info['end_time'] - time() : 0; $info['goods']['stock'] = $info['now_stock']; } if($info['activity_status'] == SeckillActivity::ACTIVITY_STATUS_WAIT){ $info['remain_time'] = ($info['begin_time'] - time()) > 0 ? $info['begin_time'] - time() : 0; } $info['goods']['is_bind_popups'] = UserPartitionRelationship::getIsNeedPopups($this->mall_id, $this->user_id ?? 0); return $this->success('请求成功', $info); }catch(Exception $e){ return $this->error($e->getMessage()); } } }