说在前面:
本记录仅仅是作为一个小小的开发记录,表设计及开发上并不尽善尽美。如果有更好的方式,希望各位前辈也能够多多指正与讨论。
我会尽可能的每天更新开发进度
使用架构
后端:Yii2
部分设置:
新建/app/services 文件夹,services是业务类,控制器不进行任何操作,中转到业务类中对应操作.
后台:element+vue
前端:小程序
服务器:LNMP
项目记录
接口必传数值
@cauth_iden 该值属于不变的唯一标识符,存在于管理后台与小程序中。
传任何参数必带此参数。
@token 小程序登录后,返回token作为检验状态,存在于小程序中,请求任何接口必传。
积分管理
由于鼓励学生每日签到,提高使用频率,因此设计中包含了 签到奖励、邀请好友(老带新)注册
成功双方获得积分。
积分获取途径
1.在线付费课程 获取积分
2.邀请好友登录 获取积分
3.每日签到 获取积分
积分消耗
1.积分兑换(实物兑换消耗积分)
表设计
score_set表 积分设置表
| 字段 | 类型 | 描述 |
|---|---|---|
| id | int | |
| cauth_iden | varchar | 唯一标识符 |
| in_score | int | 积分x100入表 |
| in_price | int | 金额x100入表 |
| out_score | int | 积分x100入表 |
| out_price | int | 金额x100入表 |
| sign_in_score | int | 签到积分 |
| invite_score | int | 邀请获得积分 |
| invite_image | int | 邀请主题图片 |
| uid | int | 用户id |
| dates | int | 安装时间 |
| status | tinyint | 状态 默认为1 |
score_logs 积分使用表
| 字段 | 类型 | 描述 |
|---|---|---|
| id | int | |
| cauth_iden | varchar | 唯一标识符 |
| uid | int | 用户id |
| score | int | 0为支出 1为获得 |
| types | varchar | 类型 如 签到 邀请 购买 |
| dates | int | 安装时间 |
| status | tinyint | 状态 默认为1 |
user_score 用户积分记录
| 字段 | 类型 | 描述 |
|---|---|---|
| id | int | |
| cauth_iden | varchar | 唯一标识符 |
| total_score | int | 积分x100入表 总积分 |
| uid | int | 用户id |
| dates | int | 安装时间 |
| status | tinyint | 状态 默认为1 |
后台积分设置
参数说明: uid 用户id token 唯一验证 inScore 获得积分 inPrice 积分金钱比 outPrice 支出金钱比 outScore 支出积分比 signInscore 签到积分 inviteScore 邀请获得积分 cauth_iden 唯一标识
URL:/addons/score/score/scoreset
主要参数
handle: create edit disable delete
handle:create{
uid,token,inPrice,inScore,outPrice,outScore,signInScore,inviteScore,cauth_iden
}
handle:edit
{
id,uid,token,inPrice,inScore,outPrice,outScore,signInScore,inviteScore,cauth_iden
}
handle:disable
{token,id}
handle:delete
{token,id}
成功返回 true
错误返回 message status
相关代码 ScoreController
<?php
namespace app\controllers\addons\score;
use app\services\Utils;
use SebastianBergmann\CodeCoverage\Util;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use app\services\Authory;
use app\services\score\Score;
use app\services\General;
class ScoreController extends Controller
{
function actionScoreset()
{
/*
* 积分设置
* */
$request = Yii::$app->request;
$token = $request->post('token');
$handle = $request->post('handle');
$uid = $request->post('uid');
$auth = new Authory($token);
$auth->loggingVerify();
$cauth_iden = $request->post('cauth_iden');
$inPrice = $request->post('inPrice');
$inScore = $request->post('inScore');
$outPrice = $request->post('outPrice');
$outScore = $request->post('outScore');
$inviteScore = $request->post('inviteScore');
$inviteImage = $request->post('inviteImage');
$signInScore = $request->post('signInScore');
$id = $request->post('id');
try{
$inPrice = $inPrice*100;
$inScore = $inScore*100;
$outPrice = $outPrice*100;
$outScore = $outScore*100;
//积分设置
$service = new Score();
$general = new General();
$result = '';
switch ($handle)
{
case 'create':
$result = $service->CreateScoreSet($inScore,$inPrice,$outScore,$outPrice,$uid,$signInScore,$inviteScore,$inviteImage,$cauth_iden);
break;
case 'edit':
$result = $service->EditScoreSet($id,$inScore,$inPrice,$outScore,$outPrice,$uid,$signInScore,$inviteScore,$inviteImage,$cauth_iden);
break;
case 'disable':
$result = $general->disable('score\ScoreSet',$id);
break;
case 'delete':
$result = $general->delete('score\ScoreSet',$id);
break;
default:
$result = ['message'=>'出错了','status'=>41007];
break;
}
Utils::apiDisplay($result);
}catch(\Exception $e)
{
$result = ['message'=>$e->getMessage(),'status'=>$e->getCode()];
Utils::apiDisplay($result);
}
}
}
Score.php 业务类,在/services业务文件夹中
<?php
namespace app\services\score;
use app\models\admin\AdminUser;
use app\models\AuthRules;
use app\models\score\ScoreLogs;//积分明细表
use app\models\score\ScoreSet;//积分设置表
use app\models\Users;
use app\models\Cauth;
// use Phalcon\Crypt; //加密类
Class Score{
function CreateScoreSet($inScore,$inPrice,$outScore,$outPrice,$uid,$signInScore,$inviteScore,$inviteImage,$cauth_iden)
{
/*
* 创建积分规则
*写入
* */
$model = new ScoreSet();
$model->uid = $uid;
$model->cauth_iden = $cauth_iden;
$model->in_score = $inScore;
$model->in_price = $inPrice;
$model->out_score = $outScore;
$model->sign_in_score = $signInScore;
$model->invite_score = $inviteScore;
$model->out_price = $outPrice;
$model->invite_image = $inviteImage;
$model->dates = time();
if($model->insert() == false)
throw new \Exception('创建积分规则失败',20010);
return true;
}
function EditScoreSet($id,$inScore,$inPrice,$outScore,$outPrice,$uid,$signInScore,$inviteScore,$inviteImage,$cauth_iden)
{
/*
* 编辑积分
* */
$result = ScoreSet::findOne($id);
if(!$result)
throw new \Exception('不存在该设置',20011);
$result->uid = $uid;
$result->cauth_iden = $cauth_iden;
$result->in_score = $inScore;
$result->in_price = $inPrice;
$result->out_score = $outScore;
$result->out_price = $outPrice;
$result->sign_in_score = $signInScore;
$result->invite_score = $inviteScore;
$model->invite_image = $inviteImage;
$result->dates = time();
if($result->save() == false)
throw new \Exception('编辑积分设置失败',20012);
return true;
}
function createInvite($uid)
{
/*
* 获取创建邀请人信息
* 拉取邀请图片
* */
}
}