123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643 |
- <?php
- namespace api\controllers;
- use app\common\controllers\AController;
- use app\modules\doc\models\DocReal;
- use app\modules\doc\models\DocPaylog;
- use app\modules\doc\models\DocDowncode;
- use app\modules\doc\models\DocMail;
- use app\common\components\MessageOne;
- use app\common\components\Wallet;
- use Yii;
- class DownController extends AController
- {
- public function init()
- {
- parent::init();
- }
- public function actionFreedownload()
- {
- $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
- ];
- }
- 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
- ];
- }
- }
- }
- }
|