| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- <?php
- namespace addons\ElectronCoupon\backend\controllers;
- use addons\ElectronCoupon\common\enums\ElectronCouponEnums;
- use addons\ElectronCoupon\common\models\ElectronCoupon;
- use addons\ElectronCoupon\common\models\ElectronCouponGoods;
- use addons\ElectronCoupon\common\models\ElectronCouponUserCoupon;
- use common\enums\StatusEnum;
- use common\models\user\User;
- use common\models\user\UserLevel;
- use Yii;
- use common\controllers\AddonsController;
- /**
- * 默认控制器
- *
- * Class DefaultController
- * @package addons\ElectronCoupon\backend\controllers
- */
- class DefaultController extends BaseController
- {
- public $enableCsrfValidation = false;
- /**
- * 电子券管理
- *
- * @return string
- */
- public function actionIndex()
- {
- if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
- $params = Yii::$app->request->post();
- $res = Yii::$app->services->validate->validate($params, [
- [['page', 'receive_status', 'usage_status'], 'integer'],
- [['name'], 'string'],
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $where = [
- ['=', 'mall_id', $this->mall_id],
- ['>=', 'status', StatusEnum::DISABLED],
- ];
- // 电子券名称
- if (isset($params['name']) && $params['name'] != '' && $params['name'] != null) {
- $where[] = ['like', 'name', "%{$params['name']}%", false];
- }
- $now_time = time();
- // 领取状态
- if (isset($params['receive_status']) && $params['receive_status'] != '' && $params['receive_status'] != null) {
- if ($params['receive_status'] == 0) { // 未开始
- $where[] = ['>=', 'receive_begin_time', $now_time];
- } else if ($params['receive_status'] == 1) { // 领取中
- $where[] = ['<=', 'receive_begin_time', $now_time];
- $where[] = ['>=', 'receive_end_time', $now_time];
- } else if ($params['receive_status'] == 2) { // 已结束
- $where[] = ['<=', 'receive_end_time', $now_time];
- }
- }
- // 使用状态
- if (isset($params['usage_status']) && $params['usage_status'] != '' && $params['usage_status'] != null) {
- if ($params['usage_status'] == 0) { // 未开始
- $where[] = ['>=', 'use_begin_time', $now_time];
- } else if ($params['usage_status'] == 1) { // 使用中
- $where[] = ['<=', 'use_begin_time', $now_time];
- $where[] = ['>=', 'use_end_time', $now_time];
- } else if ($params['usage_status'] == 2) { // 已过期
- $where[] = ['<=', 'use_end_time', $now_time];
- }
- }
- $condition = ['where' => $where, 'order' => 'sort desc,id desc'];
- $page_data = ElectronCoupon::listPage($condition, false, true);
- $page_data['list'] = is_array($page_data['list']) ? $page_data['list'] : [];
- // 列表中的等级
- $level_array = array_unique(array_filter(array_column($page_data['list'], 'receive_member_level')));
- $user_levels = UserLevel::find()
- ->select('level,name')
- ->where(['>', 'status', StatusEnum::DISABLED])
- ->where(['in', 'level', $level_array]) // 如果把这个条件移到最后,mall_id 就不灵了 。。。。。。
- ->where(['=', 'mall_id', $this->mall_id])
- ->asArray()
- ->all();
- $level_name_data = array_column($user_levels, 'name', 'level');
- foreach ($page_data['list'] as $index => $item) {
- $item['user_level_name'] = $level_name_data[$item['receive_member_level']] ?? '';
- // 剩余数量 = 发行数量 - 领取数量
- $item['remain_num'] = (int)$item['amount'] - (int)$item['receive_amount'];
- // 领取状态
- if ($item['receive_begin_time'] > $now_time) {
- $item['receive_status'] = 0;
- $item['receive_status_name'] = '未开始';
- } else if ($item['receive_begin_time'] <= $now_time && $item['receive_end_time'] >= $now_time) {
- $item['receive_status'] = 1;
- $item['receive_status_name'] = '领取中';
- } else if ($item['receive_end_time'] <= $now_time) {
- $item['receive_status'] = 2;
- $item['receive_status_name'] = '已结束';
- }
- // 使用状态
- if ($item['use_begin_time'] > $now_time) {
- $item['usage_status'] = 0;
- $item['usage_status_name'] = '未开始';
- } else if ($item['use_begin_time'] <= $now_time && $item['use_end_time'] >= $now_time) {
- $item['usage_status'] = 1;
- $item['usage_status_name'] = '使用中';
- } else if ($item['use_end_time'] <= $now_time) {
- $item['usage_status'] = 2;
- $item['usage_status_name'] = '已过期';
- }
- $page_data['list'][$index] = $item;
- }
- $this->success('获取成功', compact('page_data'));
- } else {
- return $this->render('index');
- }
- }
- /**
- * 电子券管理-表格操作
- */
- public function actionHandle()
- {
- if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
- $params = Yii::$app->request->post();
- $res = Yii::$app->services->validate->validate($params, [
- [['id', 'status', 'is_show_in_center'], 'integer'],
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params['mall_id'] = $this->mall_id;
- if (isset($params['status'])) {
- $res = ElectronCoupon::changeStatus($this->mall_id, $params['id'], $params['status']);
- if ($res == false) return $this->error("修改失败: " . ElectronCoupon::getStaticError());
- return $this->success("修改成功");
- }
- if (isset($params['is_show_in_center'])) {
- $res = ElectronCoupon::changeIsShowInCenter($this->mall_id, $params['id'], $params['is_show_in_center']);
- if ($res == false) return $this->error("修改失败: " . ElectronCoupon::getStaticError());
- return $this->success("修改成功");
- }
- return $this->error('请求参数错误');
- }
- }
- /**
- * 选择优惠券
- * @Author: ltm
- * @DateTime: 2022/6/27 0017 10:16
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @return mixed|string|void
- */
- public function actionSelectCoupon()
- {
- if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
- $params = Yii::$app->request->post();
- $params['where'][] = ['mall_id' => $this->mall_id];
- $params['where'][] = ['status' => [StatusEnum::ENABLED]];
- $params['where'][] = ['>', 'amount', 'receive_amount'];
- $params['where'][] = ['>', 'use_end_time', time()];
- if (!empty($params['keyword'])) $params['where'][] = ['like', 'name', '%' . trim($params['keyword']) . '%', false];
- unset($params['keyword']);
- $params['order'] = 'sort desc,id desc';
- $params['select'] = 'id,name,amount,price,receive_amount,receive_begin_time,receive_end_time,use_begin_time,use_end_time,status';
- $list = ElectronCoupon::listPage($params);
- $list['list'] = $list['list'] ?? [];
- //判断是否过期
- foreach ($list['list'] as $k => $v) {
- $v['use_end_time'] < time() ? $list['list'][$k]['is_failure'] = 1 : $list['list'][$k]['is_failure'] = 0;
- }
- return $this->success('操作成功', $list);
- }
- }
- /**
- * 编辑电子券
- */
- public function actionEdit()
- {
- if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
- $params = Yii::$app->request->post();
- $electronCoupon = new ElectronCoupon();
- $rules = $electronCoupon->rules();
- unset($params['receive_amount'], $params['used_amount']);
- $res = Yii::$app->services->validate->validate($params, $rules);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params['mall_id'] = $this->mall_id;
- if (empty($params['share_expiry'])) $params['share_expiry'] = 0;
- if (empty($params['give_store_price'])) $params['give_store_price'] = 0;
- $res = ElectronCoupon::setData($params);
- if ($res == false) return $this->error("保存失败: " . ElectronCoupon::getStaticError());
- return $this->success("保存成功");
- } else {
- return $this->render('edit');
- }
- }
- /**
- * 电子券详情
- * @return mixed|void
- */
- public function actionInfo()
- {
- if (Yii::$app->request->isAjax && Yii::$app->request->isGet) {
- $params = Yii::$app->request->get();
- $res = Yii::$app->services->validate->validate($params, [
- [['inc_id'], 'integer']
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $info = ElectronCoupon::getOne([
- ['=', 'id', $params['inc_id']],
- ['=', 'mall_id', $this->mall_id]
- ], true);
- return $this->success("保存成功", compact('info'));
- }
- }
- /**
- * 会员等级
- * @return mixed|void
- */
- public function actionUserLevel()
- {
- if (Yii::$app->request->isAjax && Yii::$app->request->isGet) {
- $user_level = UserLevel::find()
- ->select('level,name')
- ->where(['mall_id' => $this->mall_id])
- ->andWhere(['>=', 'status', StatusEnum::DISABLED])
- ->asArray()
- ->all();
- return $this->success("保存成功", compact('user_level'));
- }
- }
- /**
- * 获取商品独立设置的优惠券设置
- * @Author: ltm
- * @DateTime: 2022/6/28 15:53
- * @Copyright: copyright (c) 2021 xuan-e
- * @return mixed|void
- */
- public function actionGetElectronCoupon()
- {
- $params = Yii::$app->request->post();
- $data = [];
- $where[] = ['=', 'mall_id', $this->mall_id];
- $where[] = ['=', 'status', StatusEnum::ENABLED];
- $where[] = ['=', 'goods_id', $params['goods_id']];
- // 获取配置
- $result = ElectronCouponGoods::lists(['where' => $where, 'with' => 'coupon', 'order' => 'id desc'], true);
- //var_dump($result);
- if (empty($result)) return $this->success('操作成功', $data);
- // 重新组合数组
- $electron_selection = [];
- foreach ($result as $item) {
- $data['is_open'] = $item['is_open'];
- $data['send_type'] = $item['send_type'];
- $coupon['coupon_id'] = $item['e_coupon_id'];
- $coupon['num'] = $item['num'];
- $coupon['name'] = $item['coupon']['name'];
- $coupon['price'] = $item['coupon']['price'];
- $coupon['amount'] = $item['coupon']['amount'];
- $coupon['receive_amount'] = $item['coupon']['receive_amount'];
- $coupon['status'] = $item['coupon']['status'];
- $electron_selection[] = $coupon;
- }
- $data['electron_selection'] = $electron_selection;
- return $this->success('操作成功', $data);
- }
- //状态开关
- public function actionHandleStatus()
- {
- if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
- $params = Yii::$app->request->post();
- $res = Yii::$app->services->validate->validate($params, [
- [['id', 'status'], 'integer'],
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $condition = ['id' => $params['id'], 'mall_id' => $this->mall_id];
- $field = ['status' => $params['status']];
- $res = ElectronCoupon::updateAll($field, $condition);
- if ($res == false) return $this->error("修改失败: " . ElectronCoupon::getStaticError());
- return $this->success("修改成功");
- }
- }
- //赠送
- public function actionGiveCoupon()
- {
- if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
- $params = Yii::$app->request->post();
- $res = Yii::$app->services->validate->validate($params, [
- [['e_coupon_id', 'user_id', 'number'], 'required'],
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params['mall_id'] = $this->mall_id;
- $params['get_type'] = ElectronCouponEnums::COUPON_GET_TYPE_SYSTEM;
- $params['receive_times'] = $params['number'];
- $result = ElectronCouponUserCoupon::userReceiveCoupon($params);
- if ($result === false) return $this->error(ElectronCouponUserCoupon::getStaticError());
- return $this->success("赠送成功");
- }
- }
- //搜索用户
- public function actionSearchUser()
- {
- if (\Yii::$app->request->isAjax) {
- if (!\Yii::$app->request->isGet) return $this->error('请求方式错误');
- $keyword = \Yii::$app->request->get('keyword');
- $params = [];
- $where[] = ['mall_id' => $this->mall_id];
- $where[] = ['status' => StatusEnum::ENABLED];
- if (!empty($keyword)) $where[] = ['or', ['like', 'nickname', $keyword], ['like', 'mobile', $keyword], ['like', 'id', $keyword]];
- $params['where'] = $where;
- $params['select'] = 'id,nickname,mobile,username,avatar_url';
- $params['limit'] = 20;
- $list = User::lists($params);
- if (!empty($list)) {
- foreach ($list as &$item) {
- if (empty($item['nickname'])) $item['nickname'] = $item['mobile'] . "(id:{$item['id']})";
- }
- }
- return $this->success('操作成功', ['list' => $list]);
- }
- }
- }
|