request->isAjax) { if (\Yii::$app->request->isGet) { $get = \Yii::$app->request->get(); $where[] = ['mall_id' => $this->mall_id]; // $where[] = ['status' => StatusEnum::ENABLED]; if (!empty($get['goods_name'])) { $goods_list = Goods::lists(['where' => [['mall_id' => $this->mall_id], ['like', 'goods_name', trim($get['goods_name']) . '%', false], ['status' => StatusEnum::ENABLED]], 'select' => 'id']); $goods_id_arr = array_column($goods_list, 'id'); $where[] = ['goods_id' => $goods_id_arr]; } if (isset($get['group_status']) && $get['group_status'] != -1) $where[] = ['group_status' => $get['group_status']]; $params['limit'] = 10; $params['where'] = $where; $params['order'] = 'id DESC'; $params['with'] = ['goods']; $pageData = DepositPresaleActive::listPage($params, false); //增加分类查询 foreach($pageData['list'] as $k=>$v){ $pageData['list'][$k]['cate_name']=DepositPresaleCate::findOne(['id'=>$v['cate_id']])->name; } if ($pageData === false) return $this->error(DepositPresaleActive::getStaticError()); $pageData['statistics'] = DepositPresaleActive::getAcitvityStatistics($this->mall_id); return $this->success('操作成功', $pageData); } } return $this->render('index', []); } /** * @desc:详情 * @Author: hua * @Date: 2021/12/13 * @Time: 18:50 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|string|void */ public function actionDetail() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $get = \Yii::$app->request->get(); DepositPresaleActive::checkActive($get['id'], $this->mall_id); $list = DepositPresaleActiveGoodsAttr::lists(['where' => [['mall_id' => $this->mall_id], ['deposit_presale_active_id' => $get['id']]], 'with' => [ 'goodsAttr' => function ($query) { $query->where(['status' => StatusEnum::ENABLED]); }, 'goods' => function ($query) { $query->where(['status' => StatusEnum::ENABLED]); }, 'depositPresaleActive' => function ($query) { $query->where(['status' => StatusEnum::ENABLED]); }, ]]); if ($list === false) return $this->error(DepositPresaleActive::getStaticError()); $commander_level_limit = ''; $user_level_limit = ''; foreach ($list as $item) { $commander_level_limit = $item['depositPresaleActive']['commander_level_limit']; $user_level_limit = $item['depositPresaleActive']['user_level_limit']; break; } $function = function ($level_limit) { $level_arr = explode(',', $level_limit); $user_level_list = UserLevel::lists(['where' => [['level' => $level_arr], ['mall_id' => $this->mall_id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]], 'select' => 'name']); $temp = array_column($user_level_list, 'name'); return join(',', $temp); }; $commander_level_limit_text = '全部'; $user_level_limit_text = '全部'; if ($commander_level_limit != 'all') { $commander_level_limit_text = $function($commander_level_limit); } if ($user_level_limit != 'all') { $user_level_limit_text = $function($user_level_limit); } return $this->success('操作成功', ['list' => $list, 'commander_level_limit_text' => $commander_level_limit_text, 'user_level_limit_text' => $user_level_limit_text]); } } return $this->render('index', []); } /** * @desc:删除 * @Author: hua * @Date: 2021/12/13 * @Time: 18:50 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|string|void */ public function actionDel() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $get = \Yii::$app->request->get(); $get['mall_id'] = $this->mall_id; $res = DepositPresaleActive::delData($get); if ($res === false) return $this->error(DepositPresaleActive::getStaticError()); return $this->success('操作成功'); } } return $this->render('index', []); } public function actionAdd() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isPost) { $params = \Yii::$app->request->post(); $params['mall_id'] = $this->mall_id; $result = $this->validateActivityData($params); if(!empty($result['msg'])) return $this->error($result['msg']); $res = DepositPresaleActive::setData($params); if ($res === false) return $this->error(DepositPresaleActive::getStaticError()); return $this->success('操作成功'); }else{ $id = \Yii::$app->request->get('id'); $where = [ ['id' => $id], ['mall_id' => $this->mall_id] ]; $with = ['goods', 'activeGoodsAttr', 'category']; DepositPresaleActive::checkActive($id, $this->mall_id); $data = DepositPresaleActive::getOne($where, true, $with); $format_fields = ['activity_start_at', 'activity_end_at','deposit_start_at','deposit_end_at', 'final_payment_start_at', 'final_payment_end_at', 'send_goods_start_at']; foreach($data as $key => &$item){ if(in_array($key, $format_fields) && !empty($item)){ $item = date('Y-m-d H:i:s', $item); } if(in_array($key, ['deposit_start_at','deposit_end_at'])){ $data['depositActiveTime'][] = $item; } if(in_array($key, ['final_payment_start_at', 'final_payment_end_at'])){ $data['finalPaymentActiveTime'][] = $item; } if(in_array($key, ['activity_start_at', 'activity_end_at'])){ $data['activityDateTime'][] = $item; } if(in_array($key, ['send_goods_start_at'])){ $data['sendGoodsTime'] = $item; } $data['cate_name'] = $data['category']['name']; } $data['formGoodsList'][] =$data['goods']; $data['is_attr'] =$data['goods']['is_attr']; return $this->success('操作成功', $data ?? []); } } $title = '添加页面'; return $this->render('add', ['title' => $title]); } /** * @desc:开团列表 * @Author: hua * @Date: 2021/12/13 * @Time: 18:49 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|string|void */ public function actionOpenList() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $params = \Yii::$app->request->get(); $where[] = ['deposit_presale_active_id' => $params['deposit_presale_active_id']]; $where[] = ['mall_id' => $this->mall_id]; $where[] = ['is_commander' => 1]; if (!empty($params['nickname'])) { $user_list = User::lists(['where' => [['like', 'nickname', $params['nickname'] . '%', false]], 'select' => 'id']); $where[] = ['user_id' => array_column($user_list, 'id')]; } if (!empty($params['begin_time'])) $where[] = ['>=', 'created_at', strtotime($params['begin_time'])]; if (!empty($params['end_time'])) $where[] = ['<=', 'created_at', strtotime($params['end_time'])]; if (isset($params['order_status']) && $params['order_status'] != -1) $where[] = ['order_status' => $params['order_status']]; $params['limit'] = 10; $params['where'] = $where; $params['with'] = ['user', 'groupBuyActive']; $list = DepositPresaleOrder::listPage($params); if (!empty($list['list'])) { $open_group_id_arr = array_column($list['list'], 'open_group_id'); $order_arr = DepositPresaleOrder::lists(['where' => [['open_group_id' => $open_group_id_arr], ['is_pay' => 1]], 'select' => 'open_group_id,count(*) as counts', 'group' => 'open_group_id', 'index' => 'open_group_id']); foreach ($list['list'] as &$item) { $item['counts'] = $order_arr[$item['open_group_id']]['counts'] ?? 0; } } return $this->success('操作成功', $list); } } return $this->render('open-list', []); } /** * @desc:预售成员 * @Author: hua * @Date: 2021/12/14 * @Time: 14:49 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionDepositPresaleTeam() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $get = \Yii::$app->request->get(); $where[] = ['deposit_presale_active_id' => $get['deposit_presale_active_id']]; $where[] = ['open_group_id' => $get['open_group_id']]; $where[] = ['commander_id' => $get['commander_id']]; $where[] = ['mall_id' => $this->mall_id]; $where[] = ['is_pay' => 1]; $params['where'] = $where; $params['with'] = ['user', 'groupBuyActive']; $list = DepositPresaleOrder::listPage($params); return $this->success('操作成功', $list); } } } /** * @desc:结束预售 * @Author: hua * @Date: 2021/12/14 * @Time: 15:16 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionFinish() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $get = \Yii::$app->request->get(); $counts = DepositPresaleOrder::find()->where(['mall_id'=>$this->mall_id,'open_group_id'=>$get['open_group_id'],'is_pay'=>1])->count(); $group_order = DepositPresaleOrder::findOne(['mall_id'=>$this->mall_id,'id'=>$get['open_group_id'],'is_pay'=>1]); $active = DepositPresaleActive::findOne(['mall_id'=>$this->mall_id,'id'=>$group_order['deposit_presale_active_id']]); if($active->is_virtual){ if($active->virtual_group_type==2&&$counts<$active->gt_group_size){ $res = DepositPresaleOrder::finishDepositPresaleOrder($this->mall_id, $get['open_group_id']); if ($res == false) return $this->error(DepositPresaleOrder::getStaticError()); }else{ //成功 $list = DepositPresaleOrder::findAll(['mall_id' => $this->mall_id, 'open_group_id' => $get['open_group_id'], 'order_status' => DepositPresaleEnum::JOINING]); $res = DepositPresaleOrder::addMainOrder($group_order,$list,$active,$counts); if ($res == false) return $this->error(DepositPresaleOrder::getStaticError()); } } return $this->success('操作成功', []); } } } /** * @desc:预售订单 * @Author: hua * @Date: 2021/12/17 * @Time: 16:35 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|string|void */ public function actionOrderList() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $get = \Yii::$app->request->get(); $where[] = ['mall_id' => $this->mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; if (!empty($get['mobile'])) { $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], ['like', 'mobile', trim($get['mobile']) . '%', false], ['status' => StatusEnum::ENABLED]], 'select' => 'id']); $user_id_arr = array_column($user_list, 'id'); $where[] = ['user_id' => $user_id_arr]; } if (!empty($get['nickname'])) { $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], ['like', 'nickname', trim($get['nickname']) . '%', false], ['status' => StatusEnum::ENABLED]], 'select' => 'id']); $user_id_arr = array_column($user_list, 'id'); $where[] = ['user_id' => $user_id_arr]; } if (!empty($get['order_no'])) { $where[] = ['order_no' => $get['order_no']]; } if (isset($get['order_status']) && $get['order_status'] != -1) $where[] = ['order_status' => $get['order_status']]; $params['limit'] = 10; $params['where'] = $where; $params['order'] = 'id DESC'; $params['with'] = ['user', 'depositPresaleActive']; $pageData = DepositPresaleOrder::listPage($params, false); if ($pageData === false) return $this->error(DepositPresaleOrder::getStaticError()); $pageData['order_status_map'] = DepositPresaleEnum::getOrderStatusMap(); $pageData['statistics'] = DepositPresaleOrder::getOrderStatistics($this->mall_id); return $this->success('操作成功', $pageData); } } return $this->render('order-list', []); } /** * @desc:查询退款状态 * @Author: hua * @Date: 2021/12/20 * @Time: 15:38 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException */ public function actionQueryRefund() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $get = \Yii::$app->request->get(); $deposit_presale_order = DepositPresaleOrder::findOne(['id' => $get['id'], 'mall_id' => $this->mall_id]); if ($deposit_presale_order == false) return $this->error(DepositPresaleOrder::getStaticError()); switch ($deposit_presale_order->payment_type) { case PayTypeEnum::BALANCE: return $this->success('已退款'); case PayTypeEnum::WECHAT: $payment_order = PaymentTradeOrder::findOne(['order_no' => $deposit_presale_order->order_no]); $payment_trade = PaymentTrade::findOne(['id' => $payment_order->trade_id]); $out_trade_no = $payment_trade['out_trade_no']; $config = Yii::$app->services->pay->getWechatConfig($this->mall_id); $wechatConfig = [ 'app_id' => $config['app_id'], 'mch_id' => $config['wechat_mch_id'], 'key' => $config['wechat_pay_secret'], // API 密钥 'cert_path' => dirname(Yii::$app->basePath) . '/' . $config['wechat_cert_pem_file'], 'key_path' => dirname(Yii::$app->basePath) . '/' . $config['wechat_key_pem_file'], 'notify_url' => ''//回调地址 ]; $res = Factory::payment($wechatConfig)->refund->queryByOutTradeNumber($out_trade_no); if ($res['result_code'] != 'SUCCESS') return $this->error($res['err_code_des']); return $this->success('操作成功', $res['return_msg']); default: return $this->error('暂时不支持该支付方式查询'); } } } } /** * @desc: 活动装修 * @Author: hua * @Date: 2021/12/20 * @Time: 15:56 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionDiyIndex() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isPost) { $params = \Yii::$app->request->post(); $res = \Yii::$app->services->validate->validate($params, [ [['content'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $params['mall_id'] = $this->mall_id; $params['addons_name'] = DepositPresaleEnum::ADDONS_NAME; $res = AddonsMarketingSetting::setData($params); if ($res == false) return $this->error(AddonsMarketingSetting::getStaticError()); return $this->success('操作成功', []); } if (\Yii::$app->request->isGet) { $params['mall_id'] = $this->mall_id; $params['addons_name'] = DepositPresaleEnum::ADDONS_NAME; $params['status'] = StatusEnum::ENABLED; $res = AddonsMarketingSetting::findOne($params); if ($res == false) return $this->success('操作成功', []); $data = $res->toArray(); return $this->success('操作成功', $data); } } return $this->render('diy-index'); } /** * @desc:预售分类列表 * @Author: hua * @Date: 2021/12/13 * @Time: 18:49 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|string|void */ public function actionCateIndex() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $where[] = ['mall_id' => $this->mall_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $params['limit'] = 10; $params['where'] = $where; $params['order'] = 'id DESC'; $pageData = DepositPresaleCate::listPage($params, false); if ($pageData === false) return $this->error(DepositPresaleCate::getStaticError()); return $this->success('操作成功', $pageData); } } return $this->render('cate-index', []); } /** * @desc:编辑预售分类 * @Author: hua * @Date: 2021/12/13 * @Time: 18:49 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|string|void */ public function actionCateEdit() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isGet) { $params = Yii::$app->request->get(); $params['mall_id'] = $this->mall_id; $data = DepositPresaleCate::findOne(['id' => $params['id'], 'mall_id' => $params['mall_id'], 'status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]); return $this->success('操作成功', $data); } if (\Yii::$app->request->isPost) { $params = Yii::$app->request->post(); $params['mall_id'] = $this->mall_id; if (isset($params['status']) && in_array($params['status'], [StatusEnum::DISABLED, StatusEnum::DELETE])) { $res = DepositPresaleActive::findOne(['mall_id' => $this->mall_id, 'cate_id' => $params['id'], 'group_status' => [DepositPresaleEnum::NOT_STARTED, DepositPresaleEnum::OPEN_GROUP]]); if ($res) return $this->error('该预售分类已关联预售活动'); } $res = DepositPresaleCate::setData($params); if ($res === false) return $this->error(DepositPresaleCate::getStaticError()); return $this->success('操作成功', []); } } } /** * @desc:获取会员等级列表,添加活动使用,不用验证权限 * @Author: hua * @Date: 2021/12/13 * @Time: 18:50 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|string|void */ public function actionUserLevelList() { $request = Yii::$app->request; if ($request->isAjax) { // 查询参数 $where[] = ['in', 'status', [StatusEnum::ENABLED]]; $where[] = ['=', 'mall_id', $this->mall['id']]; $params = array('where' => $where, 'select' => 'id,level,name', 'order' => 'level asc', 'limit' => $request->get('limit', 12)); $page_data = UserLevel::listPage($params, false); $page_data['list'] = array_merge([['id' => 0, 'level' => 0, 'name' => '普通用户']], $page_data['list']); return $this->success('操作成功', $page_data); } return $this->render($this->action->id); } /** * @desc:获取商品列表,添加活动使用,不用验证权限 * @Author: hua * @Date: 2021/12/13 * @Time: 18:51 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|string|void */ public function actionGoodsList() { $request = Yii::$app->request; if ($request->isAjax) { //商品列表筛选 $get = Yii::$app->request->get(); $where = [['mall_id' => $this->mall['id'], 'status' => [StatusEnum::ENABLED]], ['is_on_sale' => 1]]; // 筛选 if (isset($get['search'])) { $search = json_decode($get['search'], true); isset($search['keyword']) && $where[] = ['like', 'goods_name', trim($search['keyword']) . '%', false]; } // 排序 $deposit_presale_active_list = DepositPresaleActive::findAll(['mall_id' => $this->mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]); $goods_id_arr = array_column($deposit_presale_active_list, 'goods_id'); $where[] = ['not in', 'id', $goods_id_arr]; $sort = 'sort ASC,id DESC'; $params = ['where' => $where, 'limit' => 20, 'order' => $sort]; $page_data = Goods::listPage($params, false, true); if ($page_data === false) return $this->error(Goods::getStaticError()); return $this->success('操作成功', $page_data); } return $this->render($this->action->id); } /** * @desc:获取商品详情,添加活动使用,不用验证权限 * @Author: hua * @Date: 2021/12/13 * @Time: 18:51 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|string|void */ public function actionGoodsDetail() { $request = Yii::$app->request; if ($request->isAjax) { $get = Yii::$app->request->get(); $res = Yii::$app->services->validate->validate($get, [[['id'], 'integer']]); if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $detail = isset($get['id']) ? Goods::getOne([['id' => $get['id'], 'mall_id' => $this->mall_id], 'status' => StatusEnum::ENABLED], true, ['cats', 'attr', 'extra']) : []; $detail['attr_groups'] = json_decode($detail['attr_groups'], true) ?? []; $detail['attr_groups_format'] = json_decode($detail['attr_groups_format'], true) ?? []; $detail['attr'] = GoodsAttr::formatFormAttr($detail['attr'] ?? [], $detail['attr_groups_format']); return $this->success('操作成功', compact('detail')); } return $this->render($this->action->id); } /** * @desc:获取预售分类列表,添加活动使用,不用验证权限 * @Author: hua * @Date: 2021/12/13 * @Time: 18:51 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|string|void */ public function actionCateList() { $request = Yii::$app->request; if ($request->isAjax) { $list = DepositPresaleCate::lists(['where' => [['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED]], 'order' => 'id asc', 'select' => 'id,name']); return $this->success('操作成功', compact('list')); } } /** * @desc:预售商品列表 * @Author: hua * @Date: 2021/12/14 * @Time: 15:52 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionCheckActiveList() { $get = \Yii::$app->request->get(); $where[] = ['mall_id' => $this->mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; if (isset($get['active_id'])) $where[] = ['id' => json_decode($get['active_id'], true)]; $list = DepositPresaleActive::getActiveList($where, false); return $this->success('操作成功', $list); } protected function validateActivityData($params){ $result = ['msg' => '']; $presale_goods_info = $params['deposit_presale_goods']; try{ if(empty($presale_goods_info['presale_name'])){ throw new \Exception('预售名称不能为空'); } if(empty($presale_goods_info['cate_id'])){ throw new \Exception('预售分类不能为空'); } if(empty($presale_goods_info['activity_start_at']) || empty($presale_goods_info['activity_end_at'])){ throw new \Exception('活动时间不能为空'); } if(empty($presale_goods_info['deposit_start_at']) || empty($presale_goods_info['deposit_end_at'])){ throw new \Exception('支付定金时间不能为空'); } if(empty($presale_goods_info['final_payment_start_at']) || empty($presale_goods_info['final_payment_end_at'])){ throw new \Exception('支付尾款时间不能为空'); } if ($presale_goods_info['is_attr'] == 0) { if($presale_goods_info['presale_price'] < $presale_goods_info['deposit_price']){ throw new \Exception('预售价不能小于定金'); } if($presale_goods_info['goods_stock'] <= 0){ throw new \Exception('预售库存不能小于0'); } }else{ $select_attr_groups = $params['form']['select_attr_groups']; foreach($select_attr_groups as $item){ if($item['deposit_presale_price'] < $item['deposit_price']){ throw new \Exception('预售价不能小于定金'); } if($item['deposit_stock'] <= 0){ throw new \Exception('预售库存不能小于0'); } } } }catch(\Exception $e){ $result['msg'] = $e->getMessage(); } return $result; } }