105 lines
3.1 KiB
PHP
105 lines
3.1 KiB
PHP
<?php
|
|
|
|
namespace app\dao;
|
|
|
|
use App\model\Signlog;
|
|
|
|
|
|
|
|
class SignDao
|
|
{
|
|
/**
|
|
* 签到函数
|
|
*
|
|
*/
|
|
public static function Sign($user_id)
|
|
{
|
|
if (self::search_Sign_today($user_id) == 1) {
|
|
return 0;
|
|
}
|
|
$Signlog = new Signlog();
|
|
$Signlog->userid = $user_id;
|
|
$Signlog->save();
|
|
UserRewardDao::sing($user_id, 30);
|
|
}
|
|
/**
|
|
* 查询今天是否签到
|
|
* 0没签到1签到
|
|
*/
|
|
public static function search_Sign_today($user_id)
|
|
{
|
|
$today = date('Y-m-d');
|
|
$is_sign = Signlog::where('userid', $user_id)->where('created_at', '>=', $today . " 00:00:00")->count();
|
|
return $is_sign == 0 ? 0 : 1;
|
|
}
|
|
/**
|
|
* 查询当月签到数据
|
|
*
|
|
*/
|
|
public static function search_Sign_tomon($user_id)
|
|
{
|
|
$startTime = date('Y-m-01', time()); //获取该月份的第一天
|
|
$endTime = date('Y-m-t', time()); //获取该月份的最后一天
|
|
$mon_data = Signlog::where('userid',$user_id)->whereBetween('created_at', [$startTime . " 00:00:00", $endTime . " 23:59:59"])->orderBy('created_at', 'ASC')->get();
|
|
$days = [];
|
|
foreach ($mon_data as $sign) {
|
|
// 将签到日期提取出来
|
|
$days[] = $sign->created_at->format('d'); // 格式化为 Y-m-d 格式
|
|
}
|
|
// 获取当前月份的天数
|
|
$days_in_month = date('t');
|
|
for ($day = 1; $day <= $days_in_month; $day++) {
|
|
// 判断该天是否有签到
|
|
if (in_array($day, $days)) {
|
|
$res[$day] = 1; // 已签到
|
|
} else {
|
|
$res[$day] = 0; // 未签到
|
|
}
|
|
}
|
|
return $res;
|
|
}
|
|
/**
|
|
* 查询连续签到天数
|
|
*
|
|
*/
|
|
public static function search_Sign_tolong($user_id)
|
|
{
|
|
$startTime = date('Y-m-01', time()); // 获取该月份的第一天
|
|
$endTime = date('Y-m-t', time()); // 获取该月份的最后一天
|
|
$mon_data = Signlog::where('userid',$user_id)->whereBetween('created_at', [$startTime . " 00:00:00", $endTime . " 23:59:59"])
|
|
->orderBy('created_at', 'ASC')
|
|
->get();
|
|
|
|
// 签到的日期数组
|
|
$signed_days = [];
|
|
$today = date('d');
|
|
foreach ($mon_data as $sign) {
|
|
// 获取签到的日期并保存
|
|
// 只有没有兑换奖励的才算签到有效
|
|
if ($sign->isexchange == 0) {
|
|
$signed_days[] = $sign->created_at->format('d');
|
|
}
|
|
}
|
|
|
|
// 获取当前月份的天数
|
|
$days_in_month = date('t');
|
|
$sign_days = 0; // 连续签到天数
|
|
|
|
// 检查每从今天开始往后是否连续签到
|
|
for ($day = $today; $day >= 0; $day--) {
|
|
// 检查当前日期是否有签到
|
|
if (in_array($day, $signed_days)) {
|
|
$sign_days++; // 连续签到天数加 1
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
if($sign_days==7){
|
|
UserRewardDao::sing($user_id,500);
|
|
}
|
|
|
|
// 返回连续签到天数
|
|
return $sign_days;
|
|
}
|
|
}
|