post['id']); $doc = \app\modules\doc\models\DocReal::findOne($id); if($this->userInfo['is_delete']||$this->userInfo['is_lock']) { return [ 'error' => 1, 'msg' => '账户已被限制,禁止下载', 'data' => [], 'code'=>200 ]; } if(empty($doc)||$doc->is_delete==1) { return [ 'error' => 1, 'msg' => '该'.$this->docname.'不存在', 'data' => [], 'code'=>200 ]; } if(!$doc->realfree) { return [ 'error' => 1, 'msg' => '暂无下载权限', 'data' => [], 'code'=>200 ]; } $existPayLog = DocPaylog::find()->where("user_id=".$this->user_id." and doc_id=$id")->exists(); if(!$existPayLog) { $groupRights = $this->userInfo['group_rights']; $vipSettings = $this->userInfo['vip_settings']?$this->userInfo['vip_settings']:[]; //日期 $timeList = getTimeList(1); $todayStart = $timeList['dayStart']; $todayEnd = $timeList['dayEnd']; //今日免费下载数量 $freeDownNumToday = DocPaylog::find()->where("user_id=".$this->user_id." and (create_time>=".$todayStart." and create_time<=".$todayEnd.") and is_free=1")->count(); //免费总下载数量 $freeDownNumTotal = DocPaylog::find()->where("user_id=".$this->user_id." and is_free=1")->count(); //今日下载数量 $downNumToday = DocPaylog::find()->where("user_id=".$this->user_id." and (create_time>=".$todayStart." and create_time<=".$todayEnd.")")->count(); //总下载数量 $downNumTotal = DocPaylog::find()->where("user_id=".$this->user_id."")->count(); //所在用户组被禁止下载 if($groupRights['doc_downnum_day']==-1||$groupRights['doc_downnum_total']==-1) { return [ 'error' => 1, 'msg' => '您已被禁止下载', 'data' => 1, 'code'=>200 ]; } //VIP下载总量限制检查 if(!empty($vipSettings)) { if($vipSettings['freedoc_download_num']>0) { if($freeDownNumTotal>=$vipSettings['freedoc_download_num']) { return [ 'error' => 1, 'msg' => '您已达到免费'.$this->docname.'下载总量上限('.$vipSettings['freedoc_download_num'].'份),无法继续下载', 'data' => 1, 'code'=>200 ]; } } } //如果并非VIP也不是VIP无限下载权限,需要经过用户等级总量限制检查 if(empty($vipSettings)||$vipSettings['freedoc_download_num']!==0) { if($groupRights['doc_freedownload_totalnum']>0&&$freeDownNumTotal>=$groupRights['doc_freedownload_totalnum']) { return [ 'error' => 1, 'msg' => '您已达到免费'.$this->docname.'下载总量上限('.$groupRights['doc_freedownload_totalnum'].'份),无法继续下载', 'data' => 1, 'code'=>200 ]; } } //用户等级单日免费下载量限制检查 if($groupRights['doc_freedownload_num']>0&&$freeDownNumToday>=$groupRights['doc_freedownload_num']) { return [ 'error' => 1, 'msg' => '您已达到今日免费'.$this->docname.'下载总量上限('.$groupRights['doc_freedownload_num'].'份/天),无法继续下载', 'data' => 1, 'code'=>200 ]; } //用户等级下载总量限制 if($groupRights['doc_downnum_total']>0&&$downNumTotal>=$groupRights['doc_downnum_total']) { return [ 'error' => 1, 'msg' => '您已达到'.$this->docname.'下载总量上限('.$groupRights['doc_downnum_total'].'份),无法继续下载', 'data' => 1, 'code'=>200 ]; } //用户等级单日下载量限制 if($groupRights['doc_downnum_day']>0&&$downNumToday>=$groupRights['doc_downnum_day']) { return [ 'error' => 1, 'msg' => '您已达到今日'.$this->docname.'下载总量上限('.$groupRights['doc_downnum_day'].'份/天),无法继续下载', 'data' => 1, 'code'=>200 ]; } //生成支付记录 $paylog = new DocPaylog(); $paylog->user_id = $this->user_id; $paylog->doc_user_id = $doc->user_id; $paylog->doc_id = $doc->id; $paylog->cat_id = $doc->cat_id; $paylog->cat_ids = $doc->cat_ids; $paylog->doc_type = $doc->doc_type; $paylog->is_free = 1; $paylog->coin_price = $doc->coin_price; $paylog->coin_num = 0; $paylog->agent_id = intval($this->userInfo['referer_id']); $paylog->agent_ids = strval($this->userInfo['referer_ids']); $paylog->create_time = TIMESTAMP; if($paylog->save()) { //更新文档售出次数 $doc->updateCounters(['sales'=>1]); } else { return [ 'error' => 1, 'msg' => $paylog->returnFirstError(), 'data' => [], 'code'=>200 ]; } } //输出下载码 $downCode = new DocDowncode(); $downCode->doc_id = $doc->id; $downCode->openid = ''; $downCode->downcode = strval(getDowncode($doc->id)); $downCode->user_id = $this->user_id; $downCode->doc_user_id = $doc->user_id; $downCode->is_ad = $doc->is_ad;; $downCode->type = 1; $downCode->create_time = TIMESTAMP; $downCode->save(); if(defined('IN_WAP')&&IN_WAP==TRUE) { $downurl = WEB_URL.'ajax/downdoc/?downcode='.$downCode->downcode.'&direct=1'; } else { $downurl = WEB_URL.'ajax/downdoc/?downcode='.$downCode->downcode; } return [ 'error' => 0, 'msg' => '请求下载中,请稍候...', 'data' => ['downcode'=>$downCode->downcode,'downurl'=>$downurl], 'code'=>200 ]; } //直接下载(文档主人或者VIP特权或者购买过) public function actionDirectdown() { $id = intval($this->post['id']); $doc = \app\modules\doc\models\DocReal::findOne($id); if($this->userInfo['is_delete']||$this->userInfo['is_lock']) { return [ 'error' => 1, 'msg' => '账户已被限制,禁止下载', 'data' => [], 'code'=>200 ]; } if(empty($doc)||$doc->is_delete==1) { return [ 'error' => 1, 'msg' => '该'.$this->docname.'不存在', 'data' => [], 'code'=>200 ]; } $downFlag = false; //不是文档主人 if($this->user_id!=$doc->user_id) { //判断是否购买记录 $existPayLog = DocPaylog::find()->where("user_id=".$this->user_id." and doc_id=$id")->exists(); if(!$existPayLog) { $groupRights = $this->userInfo['group_rights']; $vipSettings = $this->userInfo['vip_settings']?$this->userInfo['vip_settings']:[]; //所在用户组被禁止下载 if($groupRights['doc_downnum_day']==-1||$groupRights['doc_downnum_total']==-1) { return [ 'error' => 1, 'msg' => '您已被禁止下载', 'data' => 1, 'code'=>200 ]; } //日期 $timeList = getTimeList(1); $todayStart = $timeList['dayStart']; $todayEnd = $timeList['dayEnd']; //总下载数量 $downNumTotal = DocPaylog::find()->where("user_id=".$this->user_id."")->count(); //今日下载数量 $downNumToday = DocPaylog::find()->where("user_id=".$this->user_id." and (create_time>=".$todayStart." and create_time<=".$todayEnd.")")->count(); //VIP免费下载的总量 $vipfreeDownNumTotal = DocPaylog::find()->where("user_id=".$this->user_id." and vip_free=1")->count(); //下载总量限制 if($groupRights['doc_downnum_total']>0&&$downNumTotal>=$groupRights['doc_downnum_total']) { return [ 'error' => 1, 'msg' => '您已达到'.$this->docname.'下载总量上限('.$groupRights['doc_downnum_total'].'份),无法继续下载', 'data' => 1, 'code'=>200 ]; } //今日下载数量限制 if($groupRights['doc_downnum_day']>0&&$downNumToday>=$groupRights['doc_downnum_day']) { return [ 'error' => 1, 'msg' => '您已达到今日'.$this->docname.'下载总量上限('.$groupRights['doc_downnum_day'].'份),无法继续下载', 'data' => 1, 'code'=>200 ]; } //VIP免费下载 if(($doc->vip_free&&!empty($vipSettings))||(!empty($vipSettings)&&$vipSettings['buy_doc_discount']==0)) { //VIP免费文档数量限制 if(intval($vipSettings['vipfreedoc_download_num'])>0&&$vipfreeDownNumTotal>=$vipSettings['vipfreedoc_download_num']) { return [ 'error' => 1, 'msg' => '您已达到VIP免费'.$this->docname.'下载总量上限('.$vipSettings['vipfreedoc_download_num'].'份),无法继续下载', 'data' => 1, 'code'=>200 ]; } //生成支付记录 $paylog = new DocPaylog(); $paylog->user_id = $this->user_id; $paylog->doc_user_id = $doc->user_id; $paylog->doc_id = $doc->id; $paylog->cat_id = $doc->cat_id; $paylog->cat_ids = $doc->cat_ids; $paylog->doc_type = $doc->doc_type; $paylog->vip_free = 1; $paylog->coin_price = $doc->coin_price; $paylog->coin_num = 0; $paylog->agent_id = intval($this->userInfo['referer_id']); $paylog->agent_ids = strval($this->userInfo['referer_ids']); $paylog->create_time = TIMESTAMP; if($paylog->save()) { //更新文档售出次数 $doc->updateCounters(['sales'=>1]); } else { return [ 'error' => 1, 'msg' => $paylog->returnFirstError(), 'data' => [], 'code'=>200 ]; } $downFlag = true; } else { return [ 'error' => 1, 'msg' => '下载失败', 'data' => [], 'code'=>200 ]; } } else { $downFlag = true; } } else { $downFlag = true; } if($downFlag) { //输出下载码 $downCode = new DocDowncode(); $downCode->doc_id = $doc->id; $downCode->openid = ''; $downCode->downcode = strval(getDowncode($doc->id)); $downCode->user_id = $this->user_id; $downCode->doc_user_id = $doc->user_id; $downCode->is_ad = $doc->is_ad;; $downCode->type = 1; $downCode->create_time = TIMESTAMP; $downCode->save(); if(defined('IN_WAP')&&IN_WAP==TRUE) { $downurl =WEB_URL.'ajax/downdoc/?downcode='.$downCode->downcode."&direct=1"; } else { $downurl = WEB_URL.'ajax/downdoc/?downcode='.$downCode->downcode; } return [ 'error' => 0, 'msg' => '请求下载中,请稍候...', 'data' => ['downcode'=>$downCode->downcode,'downurl'=>$downurl], 'code'=>200 ]; } else { return [ 'error' => 1, 'msg' => '下载失败', 'data' => [], 'code'=>200 ]; } } //金币下载 public function actionCoindown() { $id = intval($this->post['id']); $doc = DocReal::findOne($id); $coin_num = $doc->coin_price; $downFlag = false; if($this->userInfo['is_delete']||$this->userInfo['is_lock']) { return [ 'error' => 1, 'msg' => '账户已被限制,禁止下载', 'data' => [], 'code'=>200 ]; } if(empty($doc)||$doc->is_delete==1) { return [ 'error' => 1, 'msg' => '该'.$this->docname.'不存在', 'data' => [], 'code'=>200 ]; } //判断是否购买记录 $existPayLog = DocPaylog::find()->where("user_id=".$this->user_id." and doc_id=$id")->exists(); if(!$existPayLog) { $groupRights = $this->userInfo['group_rights']; $vipSettings = $this->userInfo['vip_settings']?$this->userInfo['vip_settings']:[]; //所在用户组被禁止下载 if($groupRights['doc_downnum_day']==-1||$groupRights['doc_downnum_total']==-1) { return [ 'error' => 1, 'msg' => '您已被禁止下载', 'data' => [], 'code'=>200 ]; } //下载总量限制(付费不限制) /* $downNumTotal = DocPaylog::find()->where("user_id=".$this->user_id."")->count(); if($groupRights['doc_downnum_total']>0&&$downNumTotal>=$groupRights['doc_downnum_total']) { return [ 'error' => 1, 'msg' => '您已达到'.$this->docname.'下载总量上限('.$groupRights['doc_downnum_total'].'份),无法继续下载', 'data' => [], 'code'=>200 ]; }*/ //VIP专享下载限制 if($doc->is_vip) { if(empty($vipSettings)) { return [ 'error' => 2, 'msg' => '您还不是VIP,无法继续下载', 'data' => [], 'code'=>200 ]; } else { //VIP专享下载的总量(付费文档暂不限制) /*$vipDownNumTotal = DocPaylog::find()->where("user_id=".$this->user_id." and is_vip=1")->count(); if(intval($vipSettings['vipdoc_download_num'])>0&&$vipDownNumTotal>=$vipSettings['vipdoc_download_num']) { return [ 'error' => 1, 'msg' => '您已达到VIP专享'.$this->docname.'下载总量上限('.$vipSettings['vipdoc_download_num'].'份),无法继续下载', 'data' => [], 'code'=>200 ]; }*/ } } //VIP折扣计价 if($vipSettings['buy_doc_discount']<100) { $discount = (intval($vipSettings['buy_doc_discount'])/100); $coin_num = $coin_num*$discount; } //生成支付记录 $paylog = new DocPaylog(); $paylog->user_id = intval($this->user_id); $paylog->doc_user_id = intval($doc->user_id); $paylog->doc_id = $doc->id; $paylog->cat_id = $doc->cat_id; $paylog->cat_ids = $doc->cat_ids; $paylog->doc_type = $doc->doc_type; $paylog->is_vip = ($doc->is_vip||($vipSettings['buy_doc_discount']<100))?1:0; $paylog->coin_price = $doc->coin_price; $paylog->coin_num = $coin_num; $paylog->agent_id = intval($this->userInfo['referer_id']); $paylog->agent_ids = strval($this->userInfo['referer_ids']); $paylog->create_time = TIMESTAMP; if($paylog->save()) { $doc->updateCounters(['sales'=>1]); $left_coin = $coin_num; $point_num = intval($left_coin*Yii::$app->params['point']['coin_prize_rate']); //购买方 $logTitleBuy = '购买'.DocReal::typeOptions($doc->doc_type); Wallet::pointChange($this->user_id,$point_num,$logTitleBuy,1,'point',DocReal::shortTableName(),$doc->id); Wallet::coinChange($this->user_id,$left_coin,$logTitleBuy,2,'coin',DocReal::shortTableName(),$doc->id); //处理分销 $left_coin = Wallet::docCommission($this->user_id,$doc,$paylog,$left_coin); //出售方 $logTitleSell = '出售'.DocReal::typeOptions($doc->doc_type); if($left_coin>0&&$doc->user_id) { //金币变化 Wallet::coinChange($doc->user_id,$left_coin,$logTitleSell,1,'coin_income',DocReal::shortTableName(),$doc->id); //消息通知 MessageOne::soldDoc($logTitleSell,$doc,$left_coin); } $downFlag = true; } } else { $downFlag = true; } if($downFlag) { //输出下载码 $downCode = new DocDowncode(); $downCode->doc_id = $doc->id; $downCode->openid = ''; $downCode->downcode = strval(getDowncode($doc->id)); $downCode->user_id = $this->user_id; $downCode->doc_user_id = $doc->user_id; $downCode->is_ad = $doc->is_ad; $downCode->type = 1; $downCode->create_time = TIMESTAMP; $downCode->save(); if(defined('IN_WAP')&&IN_WAP==TRUE) { $downurl = WEB_URL.'ajax/downdoc/?downcode='.$downCode->downcode."&direct=1"; } else { $downurl = WEB_URL.'ajax/downdoc/?downcode='.$downCode->downcode; } return [ 'error' => 0, 'msg' => '请求下载中,请稍候...', 'data' => ['downcode'=>$downCode->downcode,'downurl'=>$downurl], 'code'=>200 ]; } else { return [ 'error' => 1, 'msg' => '下载失败', 'data' => [], 'code'=>200 ]; } } //添加邮件转存任务 public function actionSavetomail() { extract($this->post); if(empty($table_name)||empty($data_id)) { return [ 'error' => 1, 'msg' => '缺少必要参数', 'data' => [], 'code'=>200 ]; } else { //判断是否有购买记录 $existPayLog = DocPaylog::find()->where("user_id=".$this->user_id." and doc_id=$data_id")->exists(); if($existPayLog) { //判断是否已存在任务 $mailModel = DocMail::find()->where("doc_id=$data_id and email='".$this->userInfo['email']."' and status=0")->one(); if(empty($mailModel)) { $mailModel = new DocMail(); $mailModel->doc_id = $data_id; $mailModel->email = $this->userInfo['email']; if($mailModel->save()) { return [ 'error' => 0, 'msg' => '转存成功,请注意查收邮件!', 'data' => [], 'code'=>200 ]; } else { return [ 'error' => 1, 'msg' => '操作失败', 'data' => [], 'code'=>200 ]; } } else { return [ 'error' => 0, 'msg' => '转存成功,请注意查收邮件!', 'data' => [], 'code'=>200 ]; } } else { return [ 'error' => 1, 'msg' => '请购买后再转存邮箱', 'data' => [], 'code'=>200 ]; } } } }