$this->mall_id], ['addons_name' => BargainEnum::ADDONS_NAME], ['status' => StatusEnum::ENABLED]]); return $this->success('', $data??[]); } /** * @desc:活动列表 * @Author: hua * @Date: 2022/1/5 * @Time: 15:48 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionActiveList() { $get = \Yii::$app->request->get(); $where[] = ['mall_id' => $this->mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; $where[] = ['>','stock' , 0]; if (isset($get['active_status'])){ if ($get['active_status'] >= BargainEnum::NOT_STARTED) { $where[] = ['active_status' => $get['active_status']]; } }else{ $where[] = ['active_status' => [BargainEnum::NOT_STARTED,BargainEnum::ACTIVE_HANDING]]; } if (!empty($get['cate_id'])) $where[] = ['cate_id' => $get['cate_id']]; if (!empty($get['active_id'])) $where[] = ['id' => json_decode($get['active_id'], true)]; $list = BargainActive::getActiveList($where, true); $list['active_status_map'] = BargainEnum::getMap(); return $this->success('操作成功', $list); } /** * @desc:商品详情 * @Author: hua * @Date: 2021/12/14 * @Time: 16:01 * @Copyright: copyright (c) 2021 广东七件事集团 */ public function actionActiveGoodsDetail() { $get = \Yii::$app->request->get(); $res = \Yii::$app->services->validate->validate($get, [ [['active_id'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $where[] = ['mall_id' => $this->mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; $where[] = ['id' => $get['active_id']]; $bargain_active = BargainActive::getOne($where, true, [], false, 'id,goods_id,time,begin_time,end_time,stock,min_price,active_status as bargain_active_status ,participant,description'); if ($bargain_active === false) return $this->error(BargainActive::getStaticError()); $select = 'id,is_on_sale,goods_name,price,original_price,unit,attr_groups_format,attr_groups,area_limit,is_attr,is_show_stock,video_url,stock,video_cover_pic,cover_pic,bannar_pic,sales_num,virtual_sales,is_show_sales,detail,services'; $params['mall_id'] = $this->mall_id; $params['where'] = [['id' => $bargain_active['goods_id']], ['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED]]; $params['is_array'] = true; $params['with'] = ['attr' => function ($query) { $query->orderBy('price asc')->select('id,goods_id,goods_no,name,original_price,pic_url,price,sign_id,sort,status,version,weight,stock'); }]; $params['order'] = false; $params['select'] = $select; //查询商品 $goods = Goods::getGoodsDetail($params); unset($goods['is_member_price']); unset($goods['price_type']); foreach ($goods['attr'] as &$item) { $item['min_price'] = $bargain_active['min_price']; $item['stock'] = $bargain_active['stock']; } $goods['member_buy_limit_setting'] = [ 'every_day_num'=>0, 'every_month_num'=>0, 'every_week_num'=>0, 'nums'=>0, 'total_num'=>0, 'member_level'=>[], 'every_num'=>0, ]; $bargain_active['goods'] = $goods; $bargain_active['active_status'] = BargainEnum::getOrderStatusMap(); $bargain_order = BargainOrder::getOne([ ['mall_id' => $params['mall_id']], ['bargain_active_id' => $bargain_active['id']], ['user_id' => $this->user_id], ['order_status' => BargainEnum::ORDER_HANDING], ['status'=>StatusEnum::ENABLED]],true,[],false,'id'); $bargain_active['bargain_order_id'] = $bargain_order['id']; return $this->success('操作成功', $bargain_active); } /** * @desc:获取砍价信息 * @Author: hua * @Date: 2022/1/3 * @Time: 16:10 * @Copyright: copyright (c) 2021 广东七件事集团 */ public function actionOrderActive() { $params = \Yii::$app->request->post(); $res = \Yii::$app->services->validate->validate($params, [ [['bargain_order_id'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $where[] = ['mall_id' => $this->mall_id]; $where[] = ['id' => $params['bargain_order_id']]; $with = [ 'active' => function ($query) { $query->with(['goods' => function ($query) { $query->with(['attr']); }]); }, 'userJoinOrder' => function ($query) { $query->orderBy('price desc')->with(['user']); }, 'user' => function ($query) { } ]; $bargain_order = BargainOrder::getOne($where, true, $with); $setting = \Yii::$app->services->setting->addons->get($this->mall_id, BargainEnum::ADDONS_NAME, 'basic'); $bargain_price = BargainUserOrder::find() ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'bargain_order_id' => $params['bargain_order_id']]) ->sum('price'); // $data['app_share_pic'] = $list['share_pic'] ?? ''; // $data['app_share_title'] = $list['share_title'] ?? ''; $data['bargain_order_id'] = $params['bargain_order_id']; $data['bargain_price'] = $bargain_price; $reset_price = $bargain_order['price'] - $bargain_order['min_price']; if ($reset_price > 0) { $data['bargain_price_per'] = number_format(($bargain_price / $reset_price * 100), 2, '.', ''); } else { $data['bargain_price_per'] = 0; } $list = []; if (!empty($bargain_order['userJoinOrder'])) { foreach ($bargain_order['userJoinOrder'] as $value) { $user = $value['user']; $list[] = [ 'avatar_url' => $user['avatar_url'] ?? '', 'nickname' => $user['nickname'] ?? '', 'price' => $value['price'], ]; } } if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_SMART_FORM)) { // 安装了智能表单的插件,才能执行 $SmartFormInfo = (new SmartFormTemplateGoods())->getGoodsTemplate(['mall_id' => $this->mall_id, 'goods_id' => $bargain_order['active']['goods']['id'], 'user_id' => $this->user_id]); if(!empty($SmartFormInfo['smart_form_template_id'])){ $data['smart_form_template_id'] = $SmartFormInfo['smart_form_template_id']; } } $data['cover_pic'] = $bargain_order['active']['goods']['cover_pic']; $data['finish_time_at'] = min($bargain_order['created_at'] + $bargain_order['active']['time'] * 3600, $bargain_order['active']['end_time']); $data['goods_attr_id'] = $bargain_order['active']['goods']['attr'][0]['id']; $data['goods_id'] = $bargain_order['active']['goods']['id']; $data['goods_name'] = $bargain_order['active']['goods']['goods_name']; $data['initiator_avatar'] = $bargain_order['user']['avatar_url']; $data['initiator_nickname'] = $bargain_order['user']['nickname']; $data['initiator_user_id'] = $bargain_order['user']['id']; $data['min_price'] = $bargain_order['min_price']; $now_price = max(round($bargain_order['price'] - $bargain_price,2), floatval($bargain_order['min_price'])); $data['now_price'] = $now_price; $data['price'] = $bargain_order['price']; $reset_time = $data['finish_time_at'] - time(); $data['reset_time'] = $reset_time > 0 ? $reset_time : 0; $data['list'] = $list; $data['order_status'] = $bargain_order['order_status']; $data['total_people'] = count($bargain_order['userJoinOrder']); $data['type'] = $bargain_order['active']['type']; $data['worse_price'] = round($now_price - $bargain_order['min_price'],2); $data['rule'] = $setting['rule']??''; $data['order_status_map'] = BargainEnum::getOrderStatusMap(); return $this->success('操作成功', $data); } /** * @desc:发布砍价 * @Author: hua * @Date: 2022/1/3 * @Time: 15:16 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionRelease() { $params = \Yii::$app->request->post(); $res = \Yii::$app->services->validate->validate($params, [ [['active_id'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $params['user_id'] = $this->user_id; $params['mall_id'] = $this->mall_id; $res = BargainOrder::release($params); if ($res == false) return $this->error(BargainOrder::getStaticError()); return $this->success('操作成功', ['bargain_order_id'=>$res['id']]); } /** * @desc:用户参与砍价 * @Author: hua * @Date: 2022/1/3 * @Time: 15:53 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionUserJoinBargain() { $params = \Yii::$app->request->post(); $res = \Yii::$app->services->validate->validate($params, [ [['bargain_order_id'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $params['user_id'] = $this->user_id; $params['mall_id'] = $this->mall_id; $res = BargainUserOrder::userJoinBargain($params); if ($res == false) return $this->error(BargainUserOrder::getStaticError()); return $this->success('操作成功', $res); } /** * @desc:我的砍价 * @Author: hua * @Date: 2022/1/10 * @Time: 14:34 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionMyBargainList() { $params = \Yii::$app->request->get(); $res = \Yii::$app->services->validate->validate($params, [ [['order_status'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $where[] = ['mall_id' => $this->mall_id]; $where[] = ['user_id' => $this->user_id]; $where[] = ['status' => StatusEnum::ENABLED]; if (isset($params['order_status'])) $where[] = ['order_status' => $params['order_status']]; $params['where'] = $where; $params['with'] = [ 'active' => function ($query) { $query->with(['goods' => function ($query) { $query->with(['attr']); }]); }, ]; $params['select'] = 'id,is_pay,price,order_status,min_price,bargain_active_id,price,created_at'; $params['order'] = 'id desc'; $list = BargainOrder::listPage($params); if (!empty($list['list'])) { $bargain_order_id_arr = array_column($list['list'], 'id'); $params = []; $params['where'] = [['bargain_order_id' => $bargain_order_id_arr]]; $params['select'] = 'bargain_order_id,sum(price) as price'; $params['group'] = 'bargain_order_id'; $params['index'] = 'bargain_order_id'; $bargain_user_order_arr = BargainUserOrder::lists($params); $time = time(); foreach ($list['list'] as &$item) { $item['bargain_order_id'] = $item['id']; $active = $item['active']; $goods = $active['goods']; $item['active_status'] = $active['active_status']; if($item['active']['status'] != 1){ $item['active_status'] = 2; } $item['cover_pic'] = $goods['cover_pic']; $item['finish_time_at'] = $item['created_at'] + $active['time'] * 3600; $item['finish_time_at'] = min($item['created_at'] + $item['active']['time'] * 3600, $item['active']['end_time']); $item['goods_attr_id'] = $goods['attr'][0]['id']; $item['goods_id'] = $goods['id']; $item['goods_name'] = $goods['goods_name']; $bargain_price = $bargain_user_order_arr[$item['id']]['price'] ?? 0; $item['bargain_price'] = $bargain_price; $item['now_price'] = max(round($item['price'] - $bargain_price,2), floatval($item['min_price'])); $item['reset_price'] = round($item['now_price']- $item['min_price'],2); $reset_time = $item['finish_time_at'] - $time; $row['reset_time'] = $reset_time > 0 ? $reset_time : 0; unset($item['active']); } } $list['order_status_map'] = BargainEnum::getOrderStatusMap(); return $this->success('操作成功', $list); } /** * @desc:订单预览 * @Author: hua * @Date: 2021/12/14 * @Time: 18:36 * @Copyright: copyright (c) 2021 广东七件事集团 */ public function actionPreview() { $params = \Yii::$app->request->post(); $params['mall_id'] = $this->mall_id; $params['user_id'] = $this->user_id; $orderFormLogic = new OrderFormLogic(); $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id); $form->attributes = Yii::$app->request->post(); $form['action'] = AppEnum::ACTION_PREVIEW; !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS; // 初始化订单数据 $orderInitDataLogic = new OrderInitDataLogic(); $form = $orderInitDataLogic->execute($form, PreviewTypeEnum::BUY_NOW); if ($form === false) return $this->error($orderInitDataLogic->getError()); // 购买验证 $orderLimitLogic = new OrderLimitLogic(); $form = $orderLimitLogic->run($form); if ($form === false) return $this->error($orderLimitLogic->getError()); // 获取收货地址 $address_info = UserAddress::getUserAddress($this->user_id, $form->address_id); $form->address_id = $address_info['id']??0; // 运费 $orderMarketingLogic = new OrderMarketingLogic(); $form = $orderMarketingLogic->run($form); if ($form === false) return $this->error($orderMarketingLogic->getError()); $group_order_goods = $form['group_order_goods']; // 供应链处理 $event = new ChainOrderCheckEvent($this->mall_id, $form, false, $this->user); Yii::$app->services->events->dispatch($event); $form = $event->getResultForm(); if ($form === false) return $this->error($event->getErrorMsg()); $marketing = $form['marketing']; $pay_type_list = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform); $shipping_type_list = ShippingTypeEnum::getMap(); $info = compact('group_order_goods', 'marketing', 'address_info', 'pay_type_list', 'shipping_type_list'); $info['total_pay_money'] = $form['total_pay_money']; $info['is_address'] = $form['is_address'] ?? 0; return $this->success('操作成功', $info); } /** * 创建订单 * @Author bing * @DateTime 2021-09-22 09:31:22 * @return void * @copyright: Copyright (c) 2020 广东七件事集团 */ public function actionCreate() { try { $params = \Yii::$app->request->post(); $params['mall_id'] = $this->mall_id; $params['user_id'] = $this->user_id; $orderFormLogic = new OrderFormLogic(); $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id); $form->attributes = Yii::$app->request->post(); $form['action'] = AppEnum::ACTION_CREATE; !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS; // 初始化订单数据 $orderInitDataLogic = new OrderInitDataLogic(); $form = $orderInitDataLogic->execute($form, PreviewTypeEnum::BUY_NOW); if ($form === false) return $this->error($orderInitDataLogic->getError()); // 购买验证 $orderLimitLogic = new OrderLimitLogic(); $form = $orderLimitLogic->run($form); if ($form === false) return $this->error($orderLimitLogic->getError()); // 获取收货地址 $address_info = UserAddress::getUserAddress($this->user_id, $form->address_id); $form->address_id = $address_info['id']; // 运费 $orderMarketingLogic = new OrderMarketingLogic(); $form = $orderMarketingLogic->run($form); if ($form === false) return $this->error($orderMarketingLogic->getError()); // 供应链处理 $event = new ChainOrderCheckEvent($this->mall_id, $form, true, $this->user); Yii::$app->services->events->dispatch($event); $form = $event->getResultForm(); if ($form === false) return $this->error($event->getErrorMsg()); $res = BargainOrder::createOrder($form); if ($res === false) return $this->error(BargainOrder::getStaticError()); return $this->success('操作成功', $res); } catch (\Exception $e) { return $this->error($e->getMessage()); } } public function actionDynamics() { $list = BargainUserOrder::find() ->select('id,user_id,bargain_order_id,created_at') ->where([ 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED ]) ->with(['order', 'user' => function ($query) { $query->select('id,avatar_url,nickname,mobile'); }]) ->orderBy('id desc') ->limit(100) ->asArray() ->all(); if (!$list) { return $this->success('操作成功', []); } $data = array_map(function ($item) { return [ 'user' => $item['user'], 'goods_name' => $item['order']['goods_name'], 'created_at' => date('Y:m:d H:i:s', $item['created_at']) ]; }, $list); return $this->success('操作成功', $data); } /** * @desc:砍价成功弹窗列表 */ public function actionSuccessPopup() { $params = \Yii::$app->request->get(); $show_times = $params['show_times']; $where[] = ['mall_id' => $this->mall_id]; $where[] = ['user_id' => $this->user_id]; $where[] = ['status' => StatusEnum::ENABLED]; $where[] = ['order_status' => BargainEnum::ORDER_HANDING]; $where[] = ['is_pay' => StatusEnum::DISABLED]; $where[] = new Expression('(price - reduce_price) = min_price'); $list = BargainOrder::lists(['where'=>$where,'select'=>'id,cover_pic,goods_name,min_price,bargain_active_id']); if($list){ $cache = Yii::$app->cache; foreach ($list as $k=>$v){ $cache_key = RedisKeyEnum::suffix(RedisKeyEnum::BARGAIN_SUCCESS_POPUP , date('Y_m_d') ."_". $v['id']); $count = $cache->get($cache_key) ? $cache->get($cache_key) : 0; if($show_times <= $count){//每个订单,每天都有显示限制 unset($list[$k]); continue; } $count++; $cache->set($cache_key, $count, 86400); } $list = array_values($list); } return $this->success('操作成功', $list); } }