ポイントモール機能表の構造設計
1.メンバースコアレコードフォーム(qing_score)の取得元
のユーザーuser_id、チェックインおよび償還レコードフィールドスコア(チェックインは正の値、変換は負の値)、およびポイント情報情報
CREATE TABLE `qing_score` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`user_id` int(10) NOT NULL,
`score` int(10) NOT NULL,
`time` int(10) NOT NULL,
`info` varchar(30) DEFAULT NULL,
`source` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1签到2推荐',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=72 DEFAULT CHARSET=utf8 COMMENT='会员积分';
2.ポイント交換商品テーブルqing_score_goods
は、商品の交換に必要なポイント数を記録し、フィールドスコアは商品の交換に必要なポイント数を示します。
CREATE TABLE `qing_score_goods` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(110) NOT NULL,
`thumb` varchar(110) NOT NULL,
`description` varchar(100) DEFAULT NULL,
`content` text,
`time` int(10) NOT NULL,
`score` int(10) NOT NULL,
`listorder` int(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='积分商品表';
3.製品レコードテーブルscore_recorduser_id
は、どのユーザー、どの製品goode_idが記録するか、およびスコアによって使用されるポイント数を記録します。
CREATE TABLE `qing_score_record` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`score` int(11) NOT NULL,
`goods_id` int(11) NOT NULL,
`status` int(11) NOT NULL DEFAULT '1',
`empress` varchar(100) DEFAULT NULL,
`time` int(11) NOT NULL,
`user_id` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='积分兑换记录';
メンバーサインイン機能の実現
1.ログインしたユーザーが今日サインインしたかどうかを検出します。すでにサインイン
している場合は、今日はサインインしません。2。今日サインインしていない場合は、スコアレコードテーブルに挿入します。
//会员签到
public function sign(){
//验证用户是否登录
$sessionUserData=$this->isLogin();
//先检测今天是否签到
$scoreData=Db::name('score')->where('user_id',$sessionUserData['id'])->whereDay('time')->where('source',1)->order('id desc')->find();
if(!empty($scoreData)){
return alert('你今天已经签到了','index',5);
}
$res=Db::name('score')->insert([
'user_id'=>$sessionUserData['id'],
'time'=>time(),
'score'=>10,
'info'=>'签到赚取积分'
]);
if($res){
return alert('签到成功','index',6);
}else{
return alert('签到失败','index',5);
}
}
ポイント交換プロセス
1.ポイント商品の詳細
1)IDに従ってポイント商品を探す
2)ユーザーポイントを数える
実装コード:
public function score_goods_detail(){
$sessionUserData=$this->isLogin();
$id=input('id');
//1、根据id查找积分商品
$scoreGoodsData=Db::name('score_goods')->find($id);
if(empty($scoreGoodsData)){
return alert('没有改商品','score_shop',5);
}
//2、统计该用户积分
$total_socre=Db::name('score')->where('user_id',$sessionUserData['id'])->sum('score');
return view('',[
'scoreGoodsData'=>$scoreGoodsData,
'total_socre'=>$total_socre,
'left_menu'=>32
]);
}
2.ポイントの引き換え
1)IDに基づいてポイント製品を検索します
2)ユーザーポイントをカウントし、ユーザーポイントがポイント製品で選択した製品のポイントより大きいかどうかを判断します
3)例外キャプチャをオンにして、製品にレコードを挿入しますポイント購入と引き換えたポイントのレコードテーブルscore_record同時に、メンバーポイントレコードテーブルのマイナスポイント情報を挿入します
実装コード:
public function score_exchange(){
$sessionUserData=$this->isLogin();
$id=input('id');
//1、根据id查找积分商品
$scoreGoodsData=Db::name('score_goods')->find($id);
if(empty($scoreGoodsData)){
return json(['status'=>-1,'msg'=>'没有该商品']);
}
//2、统计用户积分并判断该用户积分是否大于积分商品里选中的商品的积分
$total_socre=Db::name('score')->where('user_id',$sessionUserData['id'])->sum('score');
if($total_socre>$scoreGoodsData['score']){
//3、开启异常捕捉,积分换购的积分换取商品记录表score_record插入一条记录,同时插入会员积分记录表负数积分信息
try{
//积分换购表
Db::name('score_record')->insert([
'user_id'=>$sessionUserData['id'],
'score'=>$scoreGoodsData['score'],
'time'=>time(),
'goods_id'=>$id
]);
Db::name('score')->insert([
'user_id'=>$sessionUserData['id'],
'score'=>0-$scoreGoodsData['score'],
'time'=>time(),
'info'=>'商品换购'
]);
}catch (\Exception $e){
return json(['status'=>-1,'msg'=>'服务端异常,换购失败']);
}
return json(['status'=>1,'msg'=>'商品换购成功']);
}else{
return json(['status'=>-1,'msg'=>'积分不足']);
}
}