<?php
|
namespace app\api\logic;
|
|
use app\common\logic\Basic as BasicLogic;
|
use think\console\output\descriptor\Console;
|
use think\Db;
|
use app\common\model\User as ModelUser;
|
use app\api\logic\SettlementRecord as LogicSettlementRecord;
|
use app\api\logic\UserBrowse as LogicUserBrowse;
|
|
class ActivityInfo extends BasicLogic
|
{
|
|
|
/**
|
* 获取活动信息
|
*/
|
public function getActInfo($actid,$userid)
|
{
|
$res=Db::query('SELECT * FROM t_activity_manage WHERE id=?',[$actid]);
|
$response=[
|
'actstatus'=>1,
|
'joinstatus'=>0
|
];
|
if(empty($res)){
|
$response['actstatus']=0;//不存在
|
return $response;
|
}
|
if($res[0]['act_status']==0)
|
{
|
$response['actstatus']=-1;//已结束
|
return $response;
|
}
|
if(time()<strtotime($res[0]['start_time']))
|
{
|
$response['actstatus']= -2;//未开始
|
return $response;
|
}
|
if(time()>strtotime($res[0]['end_time']))
|
{
|
$response['actstatus']= -3;//已结束
|
return $response;
|
}
|
//是否已参加活动
|
$recruitid=$actid.'u'.$userid;
|
$canjia=Db::query('select id from t_recruit_act where id=?',[$recruitid]);
|
if(empty($canjia))
|
{
|
$response['joinstatus']=0;//未参加
|
}
|
else{
|
$response['joinstatus']=1;//已参加
|
}
|
return $response;
|
}
|
|
/**
|
* 参加活动
|
*
|
*/
|
public function attendAct($actid,$userid)
|
{
|
//查询活动是否存在
|
$res=Db::query('SELECT * FROM t_activity_manage WHERE id=?',[$actid]);
|
if(empty($res)){
|
return false;
|
}
|
if($res[0]['act_status']==0||time()>strtotime($res[0]['end_time'])||time()<strtotime($res[0]['start_time']))
|
{
|
return false;
|
}
|
//插入活动表
|
$recruitid=$actid.'u'.$userid;
|
$inser=Db::execute('insert ignore into t_recruit_act (id,user_id,act_id,create_time) values(?,?,?,?)',[$recruitid,$userid,$actid,time()]);
|
return true;
|
}
|
|
/**
|
* 更新获取已邀请人数
|
*/
|
public function updateRecruitCount($userid)
|
{
|
try{
|
//查询进行中的招募活动
|
$nowTime= date("Y-m-d H:i:s", time());
|
$actList=Db::query('select id,end_time from t_activity_manage where act_status=1 and start_time<=? and end_time>=? and act_type=0 limit 1',[$nowTime,$nowTime]);
|
if(empty($actList))
|
{//没有进行中的活动,不用处理
|
return true;
|
}
|
|
//查询是否参加了招募活动
|
$recruitid=$actList[0]['id'].'u'.$userid;
|
$actReinfo=Db::query('select id,create_time from t_recruit_act where id=? and user_t=0 and settlement_status=0',[$recruitid]);
|
if(empty($actReinfo))
|
{//没有参加活动,不用处理
|
return true;
|
}
|
//获取已邀请人数
|
$actEndTime=strtotime($actList[0]['end_time']);//活动结束时间
|
$yqCount=Db::query('select count(DISTINCT(login_deviceid)) as count from t_user where invitation_id=? and status=? and invite_bind_time>=? and invite_bind_time<=?',[$userid,'normal',$actReinfo[0]['create_time'],$actEndTime]);
|
$count=0;
|
if(!empty($yqCount))
|
{
|
$count=$yqCount[0]['count'];
|
}
|
//增加count
|
$countres=Db::execute('update t_recruit_act set recruit_count=? where id=?',[$count,$recruitid]);
|
return $countres==1;
|
}
|
catch(\Exception $e)
|
{
|
|
}
|
}
|
|
/**
|
* 获取已邀请人数
|
*/
|
public function getActRecruitCount($actid,$userid)
|
{
|
$recruitid=$actid.'u'.$userid;
|
$count=Db::query('select recruit_count from t_recruit_act where id=?',[$recruitid]);
|
if(empty($count))
|
{
|
return [
|
'membercount'=>0,
|
'award'=>0
|
];
|
}
|
//获取金额信息
|
$actList=Db::query('select * from t_activity_manage where id=? and count_status=0 and act_type=0 and act_status=1',[$actid]);
|
$rewardRule=json_decode($actList[0]['act_json']);
|
$award=$this->stepAllRule($rewardRule->rule,$count[0]['recruit_count']);
|
return [
|
'membercount'=>$count[0]['recruit_count'],
|
'award'=>$award
|
];
|
}
|
|
/**
|
* 获取排名
|
*/
|
public function getRankingList($actid,$userid)
|
{
|
$rList=Db::query('SELECT a.id,a.nickname,a.avatar,b.recruit_count from t_recruit_act b left join t_user a on a.id =b.user_id where b.act_id=? and b.recruit_count>0 order by b.recruit_count desc limit 7',[$actid]);
|
if(empty($rList))
|
{
|
return [];
|
}
|
return $rList;
|
}
|
|
|
/**
|
* 计算招募活动金额
|
*
|
*/
|
public function run_countRecruitAct()
|
{
|
//先查询招募活动
|
$actList=Db::query('select * from t_activity_manage where count_status=0 and act_type=0 and act_status=1');
|
if(empty($actList))
|
{
|
return '没有符合的活动';
|
}
|
|
foreach($actList as $act)
|
{//循环活动,计算金额
|
//修改活动计算状态
|
$this->run_UpdateActCount($act['id'],1);
|
$actEndTime=strtotime($act['end_time']);//活动结束时间
|
//查询所有参与活动的会员
|
$cusList=Db::query('select * from t_recruit_act where act_id=? and settlement_status=0 and user_t=0',[$act['id']]);
|
if(empty($cusList))
|
{
|
$this->run_UpdateActCount($act['id'],2);
|
continue;
|
}
|
//活动规则
|
$rewardRule=json_decode($act['act_json']);
|
foreach($cusList as $cus)
|
{//循环参与活动的会员
|
$tradeId=$act['id'].'u'.$cus['user_id'];
|
$yqCount=Db::query('select count(DISTINCT(login_deviceid)) as count from t_user where invitation_id=? and status=? and invite_bind_time>=? and invite_bind_time<=?',[$cus['user_id'],'normal',$cus['create_time'],$actEndTime]);
|
if(empty($yqCount))
|
{
|
Db::execute('update t_recruit_act set settlement_status=?,settlement_time=?,act_count=0,act_award=0 where id=?',[1, date("Y-m-d H:i:s", time()),$tradeId]);
|
continue;
|
}
|
//计算应得金额
|
$price=0;
|
switch($rewardRule->act_type)
|
{
|
case 'step_all'://阶梯完成后赠送
|
$price=$this->stepAllRule($rewardRule->rule,$yqCount[0]['count']);
|
break;
|
default:
|
break;
|
}
|
if($price<=0)
|
{
|
Db::execute('update t_recruit_act set settlement_status=?,settlement_time=?,act_count=?,act_award=0 where id=?',[1, date("Y-m-d H:i:s", time()),$yqCount[0]['count'],$tradeId]);
|
continue;
|
}
|
//插入聚推客的订单
|
$tradeHas=Db::query('select id from t_jtk_union_order_commission where trade_parent_id=?',[$tradeId]);
|
if(!empty($tradeHas))
|
{//已经有订单
|
continue;
|
}
|
//计算订单收益
|
$title = $act['act_name'].'-活动奖励结算';
|
ModelUser::money('inc',$price,$cus['user_id'],$title);
|
LogicSettlementRecord::writeLog('jtk',$price,$cus['user_id'],$title);
|
$tradeRes=Db::execute('insert into t_jtk_union_order_commission (trade_parent_id,trade_id,member_id,buy_member_id,is_own,alipay_total_price,pub_share_pre_fee,item_title,item_id,is_settle,tb_paid_time,create_time,update_time,tk_status,tk_earning_time,pub_share_fee)values(?,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?)',[$tradeId,$tradeId,$cus['user_id'],$cus['user_id'],$price,$price,$act['act_name'].'-活动奖励',$act['id'],1,date("Y-m-d H:i:s", time()),time(),time(),3,time(),$price]);
|
if($tradeRes==1)
|
{//修改计算状态
|
Db::execute('update t_recruit_act set settlement_status=?,settlement_time=?,act_count=?,act_award=? where id=?',[1, date("Y-m-d H:i:s", time()),$yqCount[0]['count'],$price,$tradeId]);
|
}
|
}
|
$this->run_UpdateActCount($act['id'],2);
|
}
|
return '执行-success';
|
}
|
|
public function run_UpdateActCount($actid,$countStatus)
|
{
|
if($countStatus==1)
|
{
|
Db::execute('update t_activity_manage set count_status=? where id=?',[$countStatus,$actid]);
|
}
|
else{
|
Db::execute('update t_activity_manage set count_status=?,count_time=? where id=?',[$countStatus,time(),$actid]);
|
}
|
}
|
|
/**
|
* step_all规则
|
*
|
*/
|
public function stepAllRule($rule,$yqCount)
|
{
|
$maxReward=0;
|
foreach($rule as $r_item)
|
{
|
if($r_item->c_count>$yqCount)
|
{
|
continue;
|
}
|
if($maxReward<$r_item->reward)
|
{
|
$maxReward=$r_item->reward;
|
}
|
}
|
return $maxReward;
|
}
|
|
/**
|
* 自定义弹窗-0元购
|
*/
|
public function popupcus_freebuy($userInfo)
|
{
|
$LogicUserBrowse = new LogicUserBrowse();
|
$res = $LogicUserBrowse->checkIsFirstFree($userInfo->id);
|
if($res === false)
|
{
|
return false;
|
}
|
if(empty($res))
|
{
|
return true;
|
}
|
return false;
|
}
|
|
}
|