博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP TP5 文章评论+积分+签到
阅读量:5012 次
发布时间:2019-06-12

本文共 8837 字,大约阅读时间需要 29 分钟。

头一次做这种带评论带积分的公众号,记录一下,如果有大神看出漏洞了求指教23333

1.操作积分方法函数:

public function makeIntegral($openid,$cate,$num,$remark,$a_id=''){        $uid = $this->getUserId($openid);        $oldScore = Db::name('member')->where(['id'=>$uid])->value('integral');        Db::startTrans();        try{            $map = [                'u_id'      =>$uid,     #用户id                'openid'    =>$openid,  #用户openid                'cate'      =>$cate,    # 1+ 2-                'num'       =>$num,     #分值                'remark'    =>$remark,  #文字记录                'ctime'     =>time(),   #积分操作时间                'status'    =>1,        #数据状态                'a_id'      =>$a_id               ];            if($cate==1){                $newScore = $oldScore+$num;            }else{
$newScore = $oldScore-$num; #新的积分不能为负数 否则返回扣分失败 if($newScore<0){ Log::write('积分扣除失败,您没有足够的积分。时间:'.date('Y-m-d H:i:s').',openid:'.$openid,'info'); return ['code'=>500,'msg'=>'积分扣除失败,您没有足够的积分。']; } } $add = Db::name('integral')->insert($map); $Add = Db::name('member')->where(['openid'=>$openid])->update(['integral'=>$newScore]); Db::commit(); if($add && $Add){ return ['code'=>200,'msg'=>'积分操作成功']; }else{ return ['code'=>500,'msg'=>'积分操作失败']; } }catch(\Exception $e){ Db::rollback(); return ['code'=>500,'msg'=>'错误']; } }

这个方法中要操作两张表,一张是积分表,新增数据,一张是用户表,修改用户的积分值,所以用了tp5的事务,操作错误的时候方便回滚。cate是分数操作类别,1是加分操作,2是减分操作。

2.签到方法

/**     * 签到方法     * @return \think\response\Json     */    public function sign_in(){        $pub=new PublicModel();        $openid = session('userInfo.openid');        $u_id = $pub->getUserId($openid);        $today = date('Y-m-d');                  #今天的年月日        $signList = $pub->getSignRecored($u_id);        #之前签到的时间戳        $continueDay = Db::name('member')                        ->where(['openid'=>$openid,'status'=>1])                        ->value('day');            #连续多少天        if(($continueDay+1)%7==0 && ($continueDay+1)<=7){
#满一周 $today_sign_integral=10; }else if(($continueDay+1)%15==0 && ($continueDay+1)/15==1){
#第一次满15天 $today_sign_integral=20; }else if(($continueDay+1)%30==0 && ($continueDay+1)/30==1){
#第一次满30天 $today_sign_integral=50; }else{ $today_sign_integral=($continueDay%7)+1; } if(!empty($signList)){
#如果签到列表不为空,则查询今天是否完成签到 foreach ($signList as $k=>$v){ $date = date('Y-m-d',$v['ctime']); if($date==$today){
#今天签到过 $arr = ['code'=>300,'msg'=>'您今天已经完成签到']; return json($arr); } } } Db::startTrans(); try{ $data = [ 'u_id'=>$u_id, 'ctime'=>time(), 'integral'=>$today_sign_integral ]; $signIn = Db::name('sign_in')->insert($data);#签到表添加 $addScore = $pub->makeIntegral($openid,1,$today_sign_integral,'签到加分','');#积分记录修改 $addContinueDay = Db::name('member')->where(['status'=>1,'openid'=>$openid])->update(['day'=>($continueDay+1)]); Db::commit(); if($signIn&&$addScore&&$addContinueDay){ return json(['code'=>200,'msg'=>'签到成功','num'=>$today_sign_integral]); }else{ return json(['code'=>500,'msg'=>'操作异常']); } }catch (\Exception $e){ Db::rollback(); return json(['code'=>'500','msg'=>'false']); } }

甲方粑粑要求签到积分,一周一轮,第一天签到+1分,连续第二天签到+2分,连续第三天签到+3分 以此类推,第一次满连续七天签到的当天可获得10分,第一次满连续签到15天的当天可获得20分,第一次满连续签到30天的当天可获得50分。所以我在用户表里给了个字段记录签到天数,有个检查是否断签的方法,断签就把字段清零。签到在签到表里记录,然后加分。

 

3.检查是否断签

/**     * 检查是否断签     * @return array     * @throws \think\Exception     * @throws \think\exception\PDOException     */    public function checkContinueSign($openid){        $pub = new PublicModel();        $u_id = $pub->getUserId($openid);        try{            #判断上一次的签到是否在昨天之内            $signList = Db::name('sign_in')->where(['u_id'=>$u_id,'status'=>1])->order(['ctime'=>'desc'])->select();            if(!$signList){                $arr = ['code'=>400,'msg'=>'第一天签到'];                return  $arr;            }            $last_sign = Db::name('sign_in')->where(['u_id'=>$u_id,'status'=>1])->order(['ctime'=>'desc'])->limit(0,1)->value('ctime');            /**昨天的时间戳时间范围*/            $t = time();            $last_start_time = mktime(0,0,0,date("m",$t),date("d",$t)-1,date("Y",$t));            $last_end_time = mktime(23,59,59,date("m",$t),date("d",$t)-1,date("Y",$t));            /**今天的时间戳时间范围*/            $now_start_time = mktime(0,0,0,date("m",$t),date("d",$t),date("Y",$t));            $now_end_time = mktime(23,59,59,date("m",$t),date("d",$t),date("Y",$t));            if($last_sign>$last_start_time && $last_sign < $last_end_time){
#昨天签到了 $arr = ['code'=>200,'msg'=>'连续签到']; }elseif($last_sign>$now_start_time && $last_sign < $now_end_time){
#今天的签到已完成 $arr = ['code'=>300,'msg'=>'您今天已经完成签到']; }else{
#今天没签到,断签 Db::name('member')->where(['id'=>$u_id,'status'=>1])->update(['day'=>0]); $arr = ['code'=>500,'msg'=>'检测为断签']; } return $arr; }catch (Exception $e){ return ['code'=>$e->getCode(),'msg'=>$e->getMessage()]; } }

 

4.评论方法

/**         * 评论         */        if(request()->isPost()){            $openid = session('userInfo.openid');            $pub = new PublicModel();            $u_id = $pub->getUserId($openid);            $map = input('post.');            $data = [                'ctime'=>time(),                'a_id'=>$map['a_id'],                'u_id'=>$u_id,                'content'=>$map['comment'],                'status'=>1            ];            list($start, $end) = Time::today();            $todayTopComment = Db::name('comment')->where(['status'=>1,'ctime'=>['<',$end],'u_id'=>$u_id])->where(['ctime'=>['>',$start]])->where(['back'=>null])->count();            if($todayTopComment<10){                Db::name('comment')->insert($data);                $res = $pub->makeIntegral($openid,1,1,'发表评论',$map['a_id']);#加分                return json($res);            }else{                $res = Db::name('comment')->insert($data);                if($res){                    return json(['code'=>2019,'msg'=>'评论成功,今日评论加分已到达上限']);                }else{                    return json(['code'=>500,'msg'=>'评论失败']);                }            }        }

甲方爸爸要求用户每评论一个就加一个积分,每天上限10分,我自己给文章设置了一篇文章值只能发表一个评论,当前用户可以删除自己的评论,然后重新发。

 

5.点赞,取消

/**     * 文章点赞/取消     * @return \think\response\Json     */    public function dianzan(){        try{            $openid = session('userInfo.openid');            $pub = new PublicModel();            $data = input('post.');            $u_id = $pub->getUserId($openid);            if($data['cate']==1){
#点赞 $map = [ 'dz_time'=>time(), 'u_id' =>$u_id, 'a_id' =>$data['a_id'], 'status' =>1 ]; }else{
#取消 $map = [ 'qx_time'=>time(), 'status' =>0 ]; } $isZanRecord = Db::name('zan')->where(['u_id'=>$u_id,'a_id'=>$data['a_id']])->find(); if(!$isZanRecord){ $res = Db::name('zan')->insert($map); if($res){ $num = Db::name('zan')->where(['a_id'=>$data['a_id'],'status'=>1])->count(); $arr = ['code'=>200,'data'=>'/static/home/images/article/07.png','msg'=>'点赞成功','num'=>$num,'zan'=>0]; }else{ $arr = ['code'=>500,'data'=>'','msg'=>'点赞失败']; } }else{ $res = Db::name('zan')->where(['u_id'=>$u_id,'a_id'=>$data['a_id']])->update($map); if($res){ $num = Db::name('zan')->where(['a_id'=>$data['a_id'],'status'=>1])->count(); if($data['cate']==1){ $arr = ['code'=>200,'data'=>'/static/home/images/article/07.png','msg'=>'点赞成功','num'=>$num,'zan'=>0]; }else{ $arr = ['code'=>200,'data'=>'/static/home/images/article/06.png','msg'=>'取消成功','num'=>$num,'zan'=>1]; } }else{ $arr = ['code'=>500,'data'=>'','msg'=>'点赞失败']; } } }catch (\Exception $e) { $arr = ['code'=>$e->getCode(),'data'=>'','msg'=>$e->getMessage()]; } return json($arr); }

 

转载于:https://www.cnblogs.com/gushengyan/p/10439048.html

你可能感兴趣的文章
QT自定义消息
查看>>
Save (Not Permitted) Dialog Box
查看>>
装饰模式(Decorator)
查看>>
任务13:在Core Mvc中使用Options
查看>>
利用Excel 2010数据透视图实现数字的可视化的图形直观展示
查看>>
Sort Colors
查看>>
iview树的修改某个节点,树刷新后自动展开你刚才展开的所有节点
查看>>
oracle服务起不来以及无法监听问题解决
查看>>
Mvc--Html.ActionLink()的用法
查看>>
delphi 基础书籍推荐
查看>>
《面向对象程序设计》2018年春学期寒假及博客作业总结
查看>>
iOS开发UI之KVC(取值/赋值) - KVO (观察某个对象的某个属性的改变)
查看>>
1.7 将一个MxN矩阵所有为0的元素所在行和列全部置0
查看>>
删除U盘时提示无法停止‘通用卷’设备的解决方法!!不要每次都硬拔了,对电脑有不小的损害!!!...
查看>>
Java中接口与接口和类之间的关系
查看>>
芯片TPS70925
查看>>
linux shell 发送email 附件
查看>>
人群密度估计 CrowdCount
查看>>
JSON.parse()和JSON.stringify()
查看>>
.net 常用正则表达式
查看>>