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];

}

}

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

  1. HiveSQL面试题18--腾讯面试用户连续签到天数及历史最大连续签到天数问题

    目录 0 题目 1 数据准备 3 数据分析 4 小结 0 题目 有一张用户签到表[t_user_attendence],标记每天用户是否签到(说明:该表包含所有用户所有工作日的出勤记录) ,包含三个字 ...

  2. mysql怎么查出用户连续签到_连续签到奖励 数据库如何设计?

    -- 签到表设计 drop table if exists `t_user_sign`; create table `t_user_sign`( `sign_code` int(8) auto_inc ...

  3. CSDN是怎么实现用户签到,统计签到次数,连续签到天数等功能微服务的

    文章目录 需求分析 设计思路 用户签到和统计连续签到的次数 签到控制层 SignController 签到业务逻辑层 SignService 测试 按月统计用户签到的次数 签到控制层 SignCont ...

  4. 连续签到积分兑换试用流量主小程序开发

    每日签到积分兑换试用流量主小程序开发 打卡兑奖小程序.用户签到活得积分.积分可以兑换商品.观看激励视频广告可以积分翻倍. 用户可以参加试用商品活动参加试用需要提交信息.可以通过分享方式直接获取试用资格 ...

  5. 积分商城运营中,签到任务以及兑换任务的制定要点

    搭建积分商城进行积分营销是当今众多营销方式当中比较好的一种,这种营销方法的营销效果很不错,可以帮助企业增加一定的收益.因此,如今越来越多的企业在操作相关营销工作的时候会直接选择积分营销. 不过,搭建积 ...

  6. java实现用户每日签到功能

    java用户每日签到 签到规则 签到周期以周为单位(最大连续签到天数为 7 天),周一为新的签到周期,所有连续签到天数重新开始计算. 表字段 以下为数据库所需的字段: 代码实现 非全部的代码: /** ...

  7. 【Java项目】如何设计一个用户签到系统?并且这个签到系统支持7天,14天等不同天数的连续签到功能?

    文章目录 问题 Redis的Bitmap MySQL实现 特殊实现思路 问题 这个问题是我再面试阿里的时候遇到的,他问的是: 如果我现在有一个需求,就是我要做一个用户的签到系统,这个签到系统要求做到能 ...

  8. java实现连续签到加分_java实现app签到功能

    本文实例为大家分享了java实现app签到功能的具体代码,供大家参考,具体内容如下 1.首先设计二张表,第一张表sign_calc记录用户连续签到次数,字段id,user_id,continue_da ...

  9. 连续签到数据表设计php,数据库,连续的签到系统怎么设计?

    背景:对连续签到的系统进行递级给积分,并且连续签到有一定的积分奖励,并且用户连续签到30天给比较多的积分. 要求:并不是按照自然月来签到. 怎么判断是不是连续签到呢? 然后就是数据库怎么设计好呢,因为 ...

最新文章

  1. 深度解析:服务器架构和技术变革
  2. C# WebBrowser 取 window.open 新窗口 url的方法
  3. Tomcat总体架构
  4. php url地址 怎么写,php url地址重写
  5. Linux NTP时间服务器
  6. 在Centos 6.5 X64下切割m3u8
  7. java filledrectangle_算法(第4版)-1.1.9 输入输出
  8. 项目管理九大知识领域
  9. OpenProj打开不了或者提示”Failed to load Java VM Library”的错误的解决方案
  10. 【预测模型】自回归(AR)模型
  11. java编程软件安装
  12. GTX1060 Windows10 旧版显卡驱动下载链接
  13. 穆迪任命Shivani Kak为投资者关系主管,David Hogan为临时财务主管
  14. 如何关闭苹果手机自动扣费_手机自动扣费?三招教你关闭
  15. gitLab数据备份和迁移
  16. 【Linux 主机ssh远程连接暴力破解详解】
  17. RabbitMQ:消息模型
  18. 百度篇——应聘百度新产品软件开发工程师及建议(一)——浅谈iGoogle
  19. Queue的一般用法
  20. 低功耗单导联心电监护模块测试说明

热门文章

  1. 欧拉角与旋转矩阵之间的转化公式及原理
  2. 输入三个字符串,按由小到大的 顺序输出,用指针来实现
  3. Cesium-Sandcastle(基本流程)
  4. tomcat服务器cpu占用率居高不下的原因分析及解决
  5. 什么是Web应用程序
  6. 百度秋招笔试三道编程题(2021-09-07)
  7. xBIM 基础06 将STEP物理文件转换为XML
  8. 河北省最好的计算机技校,河北省靠谱的技校排名
  9. 京东云与AI 10 篇论文被AAAI 2020 收录,京东科技实力亮相世界舞台
  10. Android群英传帝落篇——程序人生,路漫漫其修远兮,吾将上下而求索!