webman/app/dao/SignDao.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;
}
}