quanwei
2025-12-04 12913c1069347ea4b1f6ab87f480da0f8d8c646a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
 
namespace app\api\model\plus\sign;
 
use app\common\model\plus\sign\Sign as SignModel;
use app\common\exception\BaseException;
use app\api\model\settings\Setting as SettingModel;
 
/**
 * 用户签到模型模型
 */
class Sign extends SignModel
{
 
    /**
     * @param $user_id int 用户id
     * @param $sign_date string 签到时间
     * @return int|mixed
     */
    public function getDays($user_id, $sign_date)
    {
        $row = $this->where('user_id', '=', $user_id)->order(['create_time' => 'desc'])->find();
        if (empty($row)) {
            return 1;
        }
        $dif = (strtotime($sign_date) - strtotime($row['create_time'])) / (24 * 60 * 60);
        if (strtotime($row['sign_date']) == strtotime($sign_date)) {
            throw new BaseException(['msg' => '今天已签到']);
            return false;
        }
        if ($dif > 1) {
            return 1;
        }
        if ($dif < 1) {
            return $row['days'] + 1;
        }
    }
 
    /**
     * 签到
     */
    public function add($user)
    {
        // 更新记录
        $this->startTrans();
        try {
            //积分别名
            $points_name = SettingModel::getPointsName();
            //获取签到配置
            $sign_conf = SettingModel::getItem('sign');
            //签到日期
            $sign_date = date('Y-m-d', time());
            $user_id = $user['user_id'];
 
            //获取连续签到天数
            $days = $this->getDays($user_id, $sign_date);
 
            //修改用户积分
            $points = $user->setPoints($user_id, $days, $sign_conf, $sign_date);
            $data = [
                'user_id' => $user_id,
                'sign_date' => date('Y-m-d', time()),
                'sign_day' => intval(date('d', time())),
                'days' => $days,
                'points' => $points,
                'prize' => $points.'积分',
                'app_id' => self::$app_id
            ];
 
            $this->save($data);
            $this->commit();
            return "签到成功,奖励{$points_name}{$points}个";
        } catch (\Exception $e) {
            $this->rollback();
            return '';
        }
    }
 
    public function getListByUserId($user_id)
    {
        $str = date('Y-m-d', time());
        $arr = explode('-', $str);
        $start_time = strtotime($arr[0] . '-' . $arr[1] . '-01');
        $list = $this->where('user_id', '=', $user_id)
            ->where('create_time', 'between', [$start_time, time()])
            ->order(['create_time' => 'desc'])->select()->toArray();
 
        $res = array_column($list, 'sign_day');
        $len = count($list);
 
        if ($len == 0) {
            $days = 0;
            $is_sign = 0;
        }else{
            $days = $len;
            $is_sign = ($list[$len - 1]['sign_date'] == date('Y-m-d', time())) ? 1 : 0;
        }
 
        return [$res, $days, intval(date('d', time())), $is_sign];
    }
 
 
}