zhaojs
2023-07-31 34db7035c9c7880e00b9328d022be65a29c62cb2
application/api/logic/ActivityInfo.php
@@ -2,9 +2,58 @@
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;
    }
    /**
     * 参加活动
     * 
@@ -31,22 +80,198 @@
     */
    public function updateRecruitCount($userid)
    {
        //查询进行中的招募活动
        $nowTime= date("Y-m-d H:i:s",  time());
        $actList=Db::query('select id from t_activity_manage where act_status=1 and start_time<=? and end_time>=? and act_type=0 limit 1',[$nowTime,$nowTime]);
        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;
        }
         //查询是否参加了招募活动
         $recruitid=$actList[0]['id'].'u'.$userid;
         $actReinfo=Db::query('select id from t_recruit_act where id=? and settlement_status=0',[$recruitid]);
         if(empty($actReinfo))
         {//没有参加活动,不用处理
             return true;
         }
        //增加count
        $countres=Db::execute('update t_recruit_act set recruit_count=recruit_count+1 where id=?',[$recruitid]);
        return $countres==1;
        return false;
    }
}