| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- <?php
- namespace addons\Pk\api\modules\v1\controllers;
- use addons\Pk\common\enums\PkEnum;
- use addons\Pk\common\models\PkActivityStatistic;
- use addons\Pk\common\models\PkActivity;
- use addons\Pk\common\models\PkInviteLog;
- use addons\Pk\common\models\PkOrder;
- use addons\Pk\common\models\PkPerformanceLog;
- use addons\Pk\common\models\PkPersonalMember;
- use addons\Pk\common\models\PkShareLog;
- use addons\Pk\common\models\PkShareVisitLog;
- use addons\QiJuhe\common\enums\OrderEnum;
- use common\enums\StatusEnum;
- use common\models\user\User;
- use Yii;
- use api\controllers\OnAuthController;
- use yii\base\Exception;
- /**
- * 默认控制器
- *
- * Class DefaultController
- * @package addons\Pk\api\modules\v1\controllers
- */
- class DefaultController extends OnAuthController
- {
- public $modelClass = '';
- /**
- * 不用进行登录验证的方法
- *
- * 例如: ['index', 'update', 'create', 'view', 'delete']
- * 默认全部需要验证
- *
- * @var array
- */
- protected $authOptional = ['index', 'pk-order-callback', 'count-visit-log'];
- /**
- * 个人PK排行
- *
- * @return string
- */
- public function actionIndex()
- {
- if (\Yii::$app->request->isGet) {
- $get_active = PkActivity::getCurrentPkActivity($this->mall_id);
- $get_active['activity_apply_status'] = PkActivity::getPersonalActivityApplyStatus($get_active['id'], $this->user_id, $this->mall_id);
- $data['activity'] = $get_active;
- $performance_type = $get_active['performance_type'] ?? 1;
- $new_where[] = ['=','status',StatusEnum::ENABLED];
- $new_where[] = ['=','mall_id',$this->mall_id];
- $new_where[] = ['=','activity_id',$get_active['id'] ?? 0];
- $new_where[] = $performance_type == PkEnum::NEW_ACTIVE ? ['>', 'new_user_num', 0] : ['>', 'order_money_num', 0];
- $params['where'] = $new_where;
- $params['order'] = $performance_type == PkEnum::NEW_ACTIVE ? 'new_user_num desc,id asc' : 'order_money_num desc,id asc';
- $params['with'] = 'user';
- $params['limit'] = Yii::$app->request->get('limit', 10);
- $list = PkActivityStatistic::listPage($params,false,true);
- unset($list['sql']);
- $data['pk_list'] = $list;
- $config = \Yii::$app->services->setting->addons->get($this->mall_id, PkEnum::ADDONS_NAME, 'basic');
- $data['bj_images'] = $config['bg_img'];
- $data['is_enable'] = $config['is_enable'];//活动未开始
- return $this->success('操作成功',$data);
- }
- }
- /**
- * 个人参加PK
- */
- public function actionPersonJoin()
- {
- $activity_id = \Yii::$app->request->post('activity_id', 0);
- $performance_goal = \Yii::$app->request->post('performance_goal', 0);
- return $this->success('操作成功', compact('activity_id', 'performance_goal'));
- }
- /**
- * 获取个人活动详情
- */
- public function actionDetailPersonActivity()
- {
- if (\Yii::$app->request->isGet) {
- $params = Yii::$app->request->get();
- // 检查提交的参数
- $res = Yii::$app->services->validate->validate($params, [
- [['activity_id'], 'integer'],
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- }
- $data = PkActivity::getOne([['mall_id'=>$this->mall_id,'id'=>$params['activity_id']]],true);
- if (!$data) {
- return $this->success("成功", null);
- }
- $data['prize'] = json_decode($data['prize'], true);
- $data['activity_apply_status'] = PkActivity::getPersonalActivityApplyStatus($data['id'], $this->user_id, $this->mall_id);
- return $this->success("成功", $data);
- }
- /**
- * 获取PK规则
- */
- public function actionGetRules()
- {
- $data = \Yii::$app->services->setting->addons->get($this->mall_id, PkEnum::ADDONS_NAME, 'basic');
- return $this->success('成功', $data['person']);
- }
- /**
- * 拉新明细 | 业绩明细
- */
- public function actionInviteList()
- {
- if (\Yii::$app->request->isGet) {
- $params = Yii::$app->request->get();
- // 检查提交的参数
- $res = Yii::$app->services->validate->validate($params, [
- [['activity_id', 'page', 'limit'], 'integer'],
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $activity = PkActivity::getOne([['id'=> $params['activity_id']]],true);
- $number = PkActivityStatistic::getOne([['activity_id'=> $params['activity_id'],'user_id'=>$this->user_id]],true);
- $log_where[] = ['=','share_user_id',$this->user_id];
- $log_where[] = ['=','mall_id',$this->mall_id];
- $log_where[] = ['=','activity_id',$params['activity_id']];
- $with = 'user';
- if($activity['performance_type'] == PkEnum::NEW_ACTIVE){//拉新
- $pk_num = (float) $number['new_user_num'];
- $where_stitic[] = ['>','new_user_num',$number['new_user_num']];
- //获取列表
- $list = PkInviteLog::listPage(array('where' => $log_where,'with'=>$with, 'limit' => $params['limit']),false,true);
- }else{
- $pk_num = (float) $number['order_money_num'];
- $where_stitic[] = ['>','order_money_num',$number['order_money_num']];
- $list = PkPerformanceLog::listPage(array('where' => $log_where,'with'=>$with, 'limit' => $params['limit']),false,true);
- }
- $where_stitic[] = ['=','activity_id',$params['activity_id']];
- $where_stitic[] = ['=','mall_id',$this->mall_id];
- $rank = PkActivityStatistic::getOne($where_stitic,true,'','','count(id) as num');
- if($pk_num > 0){
- if($rank['num'] == 0){
- $rank['num'] = 1;
- }
- }else{
- $rank['num'] = '';
- }
- $data['rank'] = $rank;
- $data['number'] = $number;
- $data['activity'] = $activity;
- $data['list'] = $list;
- $data['share_user'] = User::getOne([['id'=>$this->user_id]],true,'','','id,mobile,nickname,avatar_url,parent_id,username');
- $this->success('成功', $data);
- }
- }
- /**
- * 加入PK操作
- */
- public function actionPersonPkJoin()
- {
- if (\Yii::$app->request->isPost) {
- $params = Yii::$app->request->post();
- // 检查提交的参数
- $res = Yii::$app->services->validate->validate($params,[
- [['activity_id','performance_type','performance_goal'], 'integer'],
- ]);
- if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $is_join = PkActivityStatistic::findOne([
- 'activity_id' => $params['activity_id'],
- 'user_id' => $this->user_id,
- 'mall_id' => $this->mall_id,
- 'status' => PkEnum::IS_ENABLE
- ]);
- if ($is_join) {
- return $this->error('您已参与该活动');
- }
- if ($params['performance_goal'] <= 0) {
- return $this->error('我的目标必须为非负数');
- }
- $activity = PkActivity::getOne([['id'=>$params['activity_id']]],false);
- if (!$activity || $activity->is_enable !=1) {
- return $this->error('活动不存在或已结束或者暂停');
- }
- if (!in_array($activity->status, [PkEnum::STATUS_STARTED, PkEnum::STATUS_NOT_START])) {
- return $this->error("个人活动状态只有在未开始或进行中才可以加入", [], 1001);
- }
- if ($activity->people_max_amount != PkEnum::PEOPLE_NUM_NO_LIMIT) {
- if ($activity->member_num >= $activity->people_max_amount && $activity->performance_type == 1) {
- return $this->error("超出活动人数上限", [], 1003);
- }
- }
- if (strtotime($activity->begin_time) > time()) {
- return $this->error("活动未开始", [], 1004);
- }
- if (!PkActivity::isLegalApplyTime($activity) || strtotime($activity->end_time) <= time()) {
- return $this->error("已到禁止报名PK活动时间", [], 1005);
- }
- $where = [
- ['user_id' => $this->user_id],
- ['mall_id' => $this->mall_id],
- ['activity_id' => $params['activity_id']],
- ['=', 'status', StatusEnum::ENABLED]
- ];
- $is_personal_member = PkActivityStatistic::getOne($where, true);
- if ($is_personal_member) {
- return $this->error("已经加入了该活动", [], 1004);
- }
- $data = [];
- $add_data['mall_id'] = $this->mall_id;
- $add_data['is_pay'] = PkEnum::IS_NOT_PAY;
- $add_data['order_no'] = PkOrder::getOrderNo();
- $add_data['user_id'] = $this->user_id;
- $add_data['activity_id'] = $activity->id;
- $add_data['status'] = StatusEnum::ENABLED;
- $add_data['money'] = $activity['price'];
- $add_data['order_type'] = PkEnum::ORDER_TYPE_PERSON;
- $add_data['pay_type'] = "";
- $add_data['performance_goal'] = $params['performance_goal'];
- $add_order = PkOrder::setData($add_data);
- $data['trade'] = $add_order;
- $data['money'] = $activity['price'];
- if ($add_order === false) return $this->error(PkOrder::getStaticError());
- return $this->success("成功", $data);
- }
- }
- // 统计分享次数
- public function actionCountShareLog()
- {
- $request = Yii::$app->request;
- if ($request->isPost) {
- $activity_id = $request->post('activity_id', 0);
- $share_desc = $request->post('share_desc', '');
- $share_url = $request->post('share_url', '');
- $check = Yii::$app->services->validate->validate($params,[
- [['activity_id'], 'integer'],
- [['share_desc', 'share_url'], 'string'],
- ]);
- if($check === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $tran = Yii::$app->db->beginTransaction();
- try {
- PkShareLog::addShareNum($this->mall_id, $activity_id, $this->user_id, $share_url, $share_desc);
- $tran->commit();
- } catch (\Exception $e) {
- $tran->rollBack();
- return $this->success("fail", []);
- }
- }
- return $this->success("success", []);
- }
- // 统计访问次数
- public function actionCountVisitLog()
- {
- $request = Yii::$app->request;
- if ($request->isPost) {
- $activity_id = $request->post('activity_id', 0);
- $share_user_id = (int) $request->post('pid', '');
- $visit_url = $request->post('visit_url', '');
- $user_id = (int) $this->user_id ?? 0;
- $check = Yii::$app->services->validate->validate($params,[
- [['activity_id', 'pid'], 'integer'],
- [['visit_url'], 'string'],
- ]);
- if($check === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $tran = Yii::$app->db->beginTransaction();
- try {
- PkShareVisitLog::addVisitNum($this->mall_id, $activity_id, $share_user_id, $user_id, $visit_url);
- $tran->commit();
- } catch (\Exception $e) {
- $tran->rollBack();
- return $this->success("fail: " . $e->getMessage(), []);
- }
- }
- return $this->success("success", []);
- }
- }
|