2025-02-17 11:49:38 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace app\dao;
|
|
|
|
|
|
|
|
use App\model\Signlog;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SignDao {
|
|
|
|
/**
|
|
|
|
* 签到函数
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public static function Sign($user_id) {
|
|
|
|
$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());//获取该月份的最后一天
|
2025-02-17 13:27:10 +08:00
|
|
|
$mon_data=Signlog::whereBetween('created_at', [$startTime." 00:00:00", $endTime." 23:59:59"])->orderBy('created_at','ASC')->get();
|
|
|
|
$signDates = [];
|
|
|
|
foreach ($mon_data as $sign) {
|
|
|
|
// 将签到日期提取出来
|
|
|
|
$signDates[] = $sign->created_at->format('Y-m-d'); // 格式化为 Y-m-d 格式
|
|
|
|
}
|
|
|
|
|
|
|
|
// 判断是否连续签到
|
|
|
|
$consecutiveSign = true;
|
|
|
|
$missingDates = []; // 用于记录未签到的日期
|
|
|
|
|
|
|
|
for ($i = 1; $i < count($signDates); $i++) {
|
|
|
|
// 计算相邻两天的差距
|
|
|
|
$currentDate = strtotime($signDates[$i]);
|
|
|
|
$previousDate = strtotime($signDates[$i - 1]);
|
|
|
|
$diff = ($currentDate - $previousDate) / (60 * 60 * 24); // 日期差值(天数)
|
|
|
|
|
|
|
|
if ($diff != 1) {
|
|
|
|
$consecutiveSign = false; // 如果差距不为 1 天,说明不是连续签到
|
|
|
|
$missingDates[] = date('Y-m-d', strtotime('+1 day', $previousDate)); // 记录缺失的日期
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return [
|
|
|
|
'consecutive' => $consecutiveSign,
|
|
|
|
'missing_dates' => $missingDates
|
|
|
|
];
|
2025-02-17 11:49:38 +08:00
|
|
|
}
|
|
|
|
}
|