lizhen_gitee пре 1 месец
родитељ
комит
ec00aa3efa
1 измењених фајлова са 164 додато и 0 уклоњено
  1. 164 0
      application/api/controller/Usersign.php

+ 164 - 0
application/api/controller/Usersign.php

@@ -0,0 +1,164 @@
+<?php
+
+namespace app\api\controller;
+
+use app\common\controller\Api;
+use think\Db;
+
+/**
+ * 签到
+ */
+class Usersign extends Api
+{
+    protected $noNeedLogin = [];
+    protected $noNeedRight = ['*'];
+
+    /**
+     * 配置
+     */
+    public function config()
+    {
+        $list = Db::name('signin')->order('id asc')->select();
+        //连续签到次数
+        $user_sign = Db::name('user_sign')->where(['uid' => $this->auth->id])->order('id desc')->find();
+        $yesterday_time = strtotime('yesterday'); //昨天0点时间戳
+        $today_time = $yesterday_time + 86400; //今日0点时间戳
+        if ($user_sign) {
+            if ($user_sign['createtime'] >= $yesterday_time) {
+                $data['sign_times'] = $user_sign['times']; //连续签到天数
+            } else {
+                $data['sign_times'] = 0;//昨天没签到,归零
+            }
+            if ($user_sign['createtime'] >= $today_time) {
+                $data['is_sign'] = 1; //今日是否签到: 1已签到 0未签到
+            } else {
+                $data['is_sign'] = 0; //今日是否签到: 1已签到 0未签到
+            }
+
+        } else {
+            $data['sign_times'] = 0; //连续签到天数
+            $data['is_sign'] = 0; //今日是否签到: 1已签到 0未签到
+        }
+
+        $data['sign_round_times'] = $data['sign_times'] % 7;
+
+        $data['list'] = $list;
+
+        $this->success('success',$data);
+    }
+
+    //签到
+    public function signin(){
+        $uid = $this->auth->id;
+
+        //记录日志
+        $data = [
+            'uid' => $uid,
+            'times' => 1,
+            'goldnum' => 0,
+            'createtime' => time(),
+        ];
+
+        $yesterday_time = strtotime('yesterday'); //昨天0点时间戳
+        $today_time = $yesterday_time + 86400; //今日0点时间戳
+
+        //修正当前次数
+        $check = Db::name('user_sign')->where('uid',$uid)->order('id desc')->find();
+        if($check){
+            //今天只能签一次
+            if($check['createtime'] > $today_time){
+                $this->error('今天已经签过了');
+            }
+            if ($check['createtime'] >= $yesterday_time) {
+                $data['times'] = $check['times'] + 1; //连续签到次数
+            }else{
+                //没有连起来,默认1
+            }
+
+        }
+
+        if($data['times'] > 7){
+            $data['times'] = 1;
+        }
+
+        //匹配对应金币数
+        $list = Db::name('signin')->order('id asc')->column('id,goldnum');
+        $data['goldnum'] = isset($list[$data['times']]) ? $list[$data['times']] : 0 ;
+
+        Db::startTrans();
+        //记录日志
+        $log_id = Db::name('user_sign')->insertGetId($data);
+        if(!$log_id){
+            Db::rollback();
+            $this->error('签到失败');
+        }
+
+        //加钱
+        $rs = model('wallet')->lockChangeAccountRemain($this->auth->id,'bean',$data['goldnum'],101,'签到奖励','user_sign',$log_id);
+        if($rs['status'] === false){
+            Db::rollback();
+            $this->error($rs['msg']);
+        }
+
+        //第七天赠送vip
+        $vip_rs = false;
+        $user_sign_gift_vipdays = intval(config('site.user_sign_gift_vipdays'));
+        if($data['times'] == 7 && $user_sign_gift_vipdays > 0){
+
+            //$vip_rs = $this->gift_vip($user_sign_gift_vipdays);
+        }
+
+        Db::commit();
+        $remark = '获得善豆'.$data['goldnum'];
+        if($vip_rs){
+            $remark .= ',vip'.$user_sign_gift_vipdays.'天';
+        }
+        $this->success('签到成功',$remark);
+    }
+
+    //第七天赠送vip
+    //找出最近七天的次数
+    private function gift_vip($user_sign_gift_vipdays){
+        $start = strtotime(date('Y-m-d')) - 518400;
+        $map = [
+            'uid' => $this->auth->id,
+            'createtime' => ['gt',$start],
+        ];
+        $count = Db::name('user_sign')->where($map)->count();
+
+        if($count >= 7){  //七天内签到次数 >= 7
+            //赠送vip三天
+            $add_time = 86400 * $user_sign_gift_vipdays;
+
+            //有vip的续费,没有的从现在开始
+            $vip_endtime = model('wallet')->getWallet($this->auth->id,'vip_endtime');
+            if($vip_endtime <= time()){
+                $new_vip_endtime = time() + $add_time;
+                $vip_type = 1;
+            }else{
+                $new_vip_endtime = $vip_endtime + $add_time;
+                $vip_type = 2;
+            }
+            $rs = Db::name('user_wallet')->where('user_id',$this->auth->id)->update(['vip_endtime'=>$new_vip_endtime]);
+
+            //记录日志
+            $log_data = [
+                'user_id' => $this->auth->id,
+                'before'  => $vip_endtime,
+                'change_value'  => $add_time,
+                'remain'  => $new_vip_endtime,
+                'remark'  => '签到送vip',
+                'createtime'  => time(),
+                'vip_type'  => $vip_type,
+            ];
+            Db::name('user_vip_log')->insertGetId($log_data);
+
+            if($rs === false){
+                Db::rollback();
+                $this->error('连续签到赠送vip失败');
+            }
+            return true;
+        }
+        return false;
+    }
+}