商城签到功能的设计与实现

需求分析       

  1、用户当天登录商城,只要签到就直接奖励一定的积分或者根据用户本周或者本月内已经连续签到的天数进行积分奖励,后台可以设置具体的奖励规则,这里假设本周内连续登录三天奖励 1 积分,五天奖励 2 积分,七天奖励 3 积分,每周一签到次数归零(归零方法不一定是每周一签到次数自动设为零,详见下文)

  2、实现形式:在个人中心放置签到按钮或者登录成功之后进行弹窗提示

  3、个人中心,用户可以看到签到日志(如果设置日志记录的话)和积分流水

  4、商城后台可以对签到送积分的规则进行设置,也可以看到签到日子和积分流水,具体规则包括:1、奖励模式 2、相应模式配置 3、日志记录 4、是否开启等,具体详见签到配置表


签到配置列表


这些配置信息可以格式化以后放在商城的某一项配置中


type


签到模式(当天签到就有奖励(1)、连续签到一定天数会有不同奖励(2))


configs


type为1时,表示每天签到奖励积分数;type为2时,表示连续签到天数以及奖励阶梯(可以作为数组元素并存)


open_log


是否记录签到日志


save_days


签到日志保存天数


is_open


是否开启签到机制

数据库设计相关

  1、商城用户表添加下面两个字段

    last_signin_time 保存用户上一次签到时间

    cont_days 保存用户连续签到天数

  2、商城配置表添加一下字段

    signin_configs 保存商城签到功能配置信息(json格式化或者序列化都可以)

  3、签到日志表


表名:pre_signin


功能:用于保存签到机制规则


字段


数据类型


属性


约束条件


说明


id


int(10)


无符号、非空、自增


主键


主键id


user_id


int(10)


无符号、非空、默认0


外键、普通索引(signin_user_id)


用户id


integral_num


int(5)


无符号、非空、默认0


签到奖励积分


add_time


int(11)


无符号、非空、默认0


签到时间

设计思路分析(用户签到操作时处理)

  1、当天签到就送积分的简单模式(无需多言)

  2、根据用户连续签到天数进行积分奖励的复杂模式

    连续性判断:这个简单,判断昨天有没有签到就行

    连续签到次数判断:根据连续性判断结果,再判断当天是不是周一,确定或者重置本周当前连续签到次数

    奖励积分数实现:确定了连续签到次数,就可以根据商城签到配置信息确定当天签到后该奖励的积分数量并进行日志记录和积分流水记录操作

php 示例代码(ecshop实现)

/*** 代码中以文章开头的假设为思路,具体根据商城配置做修改*/function userSignin(){
    if (!$_SESSION[‘user_id‘])
    {
        return false;
    }
    $time = getdate();
    $today_zero = mktime(0, 0, 0, $time[‘mon‘], $time[‘mday‘], $time[‘year‘]);
    $sql = "select last_signin_time from ".$GLOBALS[‘ecs‘]->table(‘users‘)." where user_id  = ‘$_SESSION[user_id]‘";
    $last_signin_time = $GLOBALS[‘db‘]->getOne($sql);
    if($today_zero < $last_signin_time && $last_signin_time < ($today_zero + 24*60*60)){
       // 今日已经签到过了    array(‘error‘=>true, ‘msg‘=>‘你今日已经签过到咯‘);
    }else{
        // 签到处理
        if($time[‘wday‘] == 1){
            // 如果是周一,签到从零算起
            $sql = "update ".$GLOBALS[‘ecs‘]->table(‘users‘)." set cont_days = 1, last_signin_time = ".time()." where user_id = ‘$_SESSION[user_id]‘";
            $GLOBALS[‘db‘]->query($sql);       return array(‘error‘=>false, ‘msg‘=>‘签到成功‘);
        }else{
            // 如果不是周一得判断有没有连续签到,具体方法是判断昨天有没有签到,如果签到了,连续签到次数加一,如果没有签到,连续次数归一
            if(($today_zero - 24 * 60 *60) < $last_signin_time && $last_signin_time < $today_zero){
                // 昨天已经签过到,连续签到天数加一
                $sql = "update ".$GLOBALS[‘ecs‘]->table(‘users‘)." set cont_days = cont_days + 1, last_signin_time = ".time()." where user_id = ‘$_SESSION[user_id]‘";
                $GLOBALS[‘db‘]->query($sql);
                $cont_days = $GLOBALS[‘db‘]->getOne("select cont_days from ".$GLOBALS[‘ecs‘]->table(‘users‘)." where user_id  = ‘$_SESSION[user_id]‘");          // 根据文章开头的假设确定奖励积分数量
                switch ($cont_days) {
                    case 3:
                        $add_integrals = 1;
                        break;
                    case 5:
                        $add_integrals = 2;
                        break;
                    case 7:
                        $add_integrals = 3;
                        break;
                    default:
                        break;
                }          // code...  // 签到日志记录操作和积分账户处理操作代码省略……
          if($add_integrals){            return array(‘error‘=>false, ‘msg‘=>‘你已经连续签到 ‘.$cont_days.‘ 天,获得奖励 ‘.$add_integrals.‘ 积分‘);          }else{            return array(‘error‘=>false, ‘msg‘=>‘签到成功‘);          }
            }else{
                // 昨天没有签到,连续签到天数归一
                $sql = "update ".$GLOBALS[‘ecs‘]->table(‘users‘)." set cont_days = 1, last_signin_time = ".time()." where user_id = ‘$_SESSION[user_id]‘";
                $GLOBALS[‘db‘]->query($sql);          return array(‘error‘=>false, ‘msg‘=>‘签到成功‘);
            }
        }
    }
}

$signinRes = userSignin();var_dump($signinRes);  // 打印签到结果 
时间: 2024-07-30 21:45:28

商城签到功能的设计与实现的相关文章

Atitit.收银机小票打印功能的设计&#160;&#160;java&#160;php&#160;c#.net版本

Atitit.收银机小票打印功能的设计  java php c#.net版本 1. 1. 打印方式有4种:1 1.1. 1.1. 一是不经过任何修改,直接调用javascript中的window.print()打印.1 1.2. 1.2. 二根据客户要求的报表格式,编写相应格式的html,装载数据打印,同样调用window.print()打印,只是对html的格式要求比较高.1 1.3. 1.3. 三是通过客户提供的word格式,通过xml配置文件与数据库的数据进行关联,自动装载数据到word中

电子商务系统的设计与实现(五):账务系统的功能接口设计

电商系统.p2p网贷系统.第三方支付都可以有自己的账务系统,账务系统与用户系统可以完全独立,不需要用户ID等信息,只提供给其它系统若干接口.服务可以用WebService的方式实现,对内提供服务非常方便,调用接口,就要调用普通的API一样.也可以做成HTTP的方式,外部使用相对麻烦一些.疑问:WebService提供的接口,可以直接用HTTP的方式调用么? 账务系统的功能接口设计 1.开户  可选输入:用户ID.账户资金类型(人民币.美元)  功能描述:创建一个账户.  理论上不需要存入用户的I

网站统计功能的设计与实现

关键字:网站统计 设计 实现 作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/website-statistic-analysis.html 本文简要介绍网站统计功能的设计与实现. 本文分为以下五个部分: 埋点设计与实现 页面引入 数据接收 数据入库 统计分析 一.埋点设计与实现 在JavaScript中,包含了很多对象,可以用于获取用户的数据.比如Document对象用于分析每个载入浏览器的 HTML 文档,可以获得当前文档的域名.URL.及当前文档的

java签到功能

原文:java签到功能 源代码下载地址:http://www.zuidaima.com/share/1550463784176640.htm spring+springMVC+hibernate框架 简单的登陆验证 签到的主要处理在于签到历史的显示 测试账号test 密码test 插件路径在readme里 截图:    

欧美斯项目签到功能,实时获取当前所在位置的经纬度

由于欧美斯项目需要签到功能,因此需要给后台传一个当前位置的经纬度,以下是获取经纬度的方法 1>导入CoreLocation.frameWork 2>引入头文件,并遵循协议 #import <CoreLocation/CoreLocation.h> <CLLocationManagerDelegate> 3>代码 @interface YYAboutUsViewController ()<UIWebViewDelegate,CLLocationManagerD

Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)

标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力活:对于自动化测试与人工测试优缺势的问题,这里不想深入讨论,开一个博客收集一些观点然后开个讨论组讨论效果可能会更好. 标题上列的,是自己对web自动化这块统一的一个想象或是一套完整的自动化应所包含的的部分,目前完成了excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试

Python 的网络传输文件功能的设计与实现

摘要:Python 是目前较流行的程序设计语言之一,它具有简单易学代码简洁等特点,并且Python 提供了大量的功能库文件,开发大型应用程序时非常方便,广泛用于网站开发.游戏后台开发等方面.该文基Python 提供的网络编程库,开发了网络文件传输的功能,该功能可以快速有效地在互联网上进行文件的传输.1 Python 介绍Python是由Guido van Rossum在1989年底创造的,在1991年发行了第一个公开版本.Python是一种面向对象的.解释型的.动态数据类型的程序设计语言.Pyt

数据资源管理程序的功能以及设计的总结

数据资源管理程序的功能以及设计的总结1.数据如何存储2.数据如何与源数据保持同步更新3.数据如何与源数据做全量同步4.数据与源数据的一致性如何检测 设计是从功能出发,设计也要包含非功能性的设计(比如程序的健壮性,可用性等等):而功能开发的出发点是需求,需求包括正常的功能需求,也包括开发人员自身提出的对工程的专业性的要求下的需求 原文地址:https://www.cnblogs.com/big1987/p/10606574.html

H5 签到功能

原文:H5 签到功能 Introduce(介绍) 用户签到的H5例子(css+jquery,无图片),由于网上找的的用户签到例子都不好,要不就是好多图片组成的,要不就大量冗余代码,所以特意做了个签到界面(移动端). User sign sample page for mobile using h5 which only use css + jquery + html. Demo https://fallstar0.github.io/SignSample/ Shot(截图) 一些关键的地方 这个