php会员签到送积分程序,PHP用户连续签到赠送额外积分

class IntegralService{

/**

* [积分赠送日志]公共方法

* @param $userId 用户ID

* @param $fkType 赠送类型:1:新用户注册;2用户签到;3用户消费;4邀请新用户;...

* @param int $fkId 关联ID:如果类型为用户消费,则关联ID为订单的ID;如果类型为邀请新用户,则关联ID为新用户的ID...

* @return array 返回[积分,备注]

*/

public static function insert($userId, $fkType, $fkId = 0){

$remark = '';

$integral = 0;

$userDao = new UserDao();

if ($fkType == 1){ //新用户注册

$integral = 20; //新用户注册赠送积分:这个可以写到配置里

$remark = '新用户赠送积分';

}else if ($fkType == 2){ //每日签到赠送额外积分

list($integral, $remark) = self::userSign($userId, $userDao);

}else if ($fkType == 3){ //消费

//...

}else if ($fkType == 4){ //推荐新用户

$userInfo = $userDao->info($fkId); //新用户的ID

if (empty($userInfo)){

exit('被邀请用户不存在');

}

$integral = 10; //推荐新用户注册赠送积分:这个可以写到配置里

$remark = '邀请新用户 [ ' . $userInfo['username'] . ' ] 赠送积分';

}

//积分日志记录

$data = [

'userId' => $userId,

'fkId' => $fkId,

'fkType' => $fkType,

'integral' => $integral,

'remark' => $remark

];

$integralDao = new IntegralLogDao();

$integralDao->insert($data); //添加数据,createTime,updateTime已在该方法中追加

//用户积分自增$integral

$userDao->setInc(['id' => $userId], 'integral', $integral);

return [$integral, $remark];

}

/**

* 获取会员签到获取的积分,备注

* @param $userId

* @param $userDao

* @return array

*/

public static function userSign($userId, $userDao){

$userInfo = $userDao->info($userId);

if (empty($userInfo)){

exit('用户不存在');

}

$signDay = $userInfo['signDay']; //用户连续签到天数

$remark = '';

$integral = 3; //用户每日签到积分:这个可以写到配置里

if ($signDay != 0){ //如果签到日期不为0

# 签到额外送积分:这个可以写到配置里

/**

* name:说明

* desc:备注,这里表示连续签到天数

* value:值,这里表示额外赠送积分数量

*/

$extraIntegral = [

['name' => '连续签到7天额外赠送1积分', 'desc' => 7, 'value' => 1],

['name' => '连续签到15天额外赠送2积分', 'desc' => 15, 'value' => 2],

['name' => '连续签到30天额外赠送5积分', 'desc' => 30, 'value' => 5],

];

//二维数组排序:按照积分降序,如果同时满足多个连续签到任务,则取最大签到天数的积分。

$values = array_column($extraIntegral, 'value');

array_multisort($values, SORT_DESC, $extraIntegral);

$isGiveExtra = false; //是否已经赠送了额外积分

foreach ($extraIntegral as $value){

$day = $value['desc']; //配置的签到天数

$giveIntegral = $value['value']; //赠送额外积分

if (($signDay % $day) == 0){ //如果:用户连续签到天数 % 配置的连续签到天数 = 0;我们认为该用户可以获取额外积分

if ($isGiveExtra){ //如果:已经赠送了额外积分,则不再赠送,结束循环

break;

}

$integral += $giveIntegral; //积分 = 每日签到默认积分 + 连续签到额外赠送的积分

$remark = "您已经连续签到了 [ {$day} ] 天,额外赠送您 [ {$giveIntegral} ] 积分"; //备注

$isGiveExtra = true; //设置为true,已经赠送了积分,不再重复赠送

}

}

}

$remark = $remark ? $remark : '签到赠送积分';

return [$integral, $remark];

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值