128 lines
4.5 KiB
PHP
128 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace app\api\model;
|
|
|
|
use app\common\library\DatabaseRoute;
|
|
use think\facade\Cache;
|
|
use think\facade\Db;
|
|
|
|
class DiscSpinningRecord
|
|
{
|
|
|
|
public static function countDraw($userId)
|
|
{
|
|
return DatabaseRoute::getDb('disc_spinning_record', $userId)->where([
|
|
'source' => 'order',
|
|
'draw_day' => date('Y-m-d')
|
|
])->count();
|
|
}
|
|
|
|
|
|
public static function countTaskDisc($userId, $type)
|
|
{
|
|
$countTaskDisc = 0;
|
|
$signCount = null;
|
|
|
|
// 检查类型参数
|
|
if (empty($type) || $type === "1") {
|
|
return 0;
|
|
}
|
|
|
|
$db_name = \think\facade\Db::connect(config('think-orm.search_library'));
|
|
$task = $db_name->name('task_center')->where(['type' => 2]);
|
|
// 构建查询条件
|
|
$sourceType = null;
|
|
if ($type === "2") {
|
|
$task =$task->where('number', '>', 1);
|
|
$task =$task->where('number', '<', 8);
|
|
$sourceType = "taskW";
|
|
} elseif ($type === "3") {
|
|
$task =$task->where('number', '>', 7);
|
|
$task =$task->where('number', '<', 32);
|
|
$sourceType = "taskM";
|
|
}
|
|
|
|
// 检查是否已有抽奖记录
|
|
$spCount = DatabaseRoute::getDb('disc_spinning_record', $userId)->where(['source' => $sourceType])->count();
|
|
if (!empty($spCount) && $spCount > 0) {
|
|
return 0;
|
|
}
|
|
|
|
// 获取任务列表
|
|
$taskCenters = $task->select();
|
|
foreach ($taskCenters as $k => $taskCenter) {
|
|
// 获取任务奖励配置
|
|
$rewardMap_arr = $db_name->name('task_center_reward')->field('type,number')->where(['task_id' => $taskCenter['id']])->select()->toArray();
|
|
if (empty($rewardMap_arr)) {
|
|
continue;
|
|
}
|
|
$number = 0;
|
|
$rewardMap = [];
|
|
foreach ($rewardMap_arr as $tk => $tv) {
|
|
$number += $tv['number'];
|
|
$t_type = $tv['type'];
|
|
}
|
|
$rewardMap[$t_type] = $number;
|
|
$taskWRedisMap = [];
|
|
if ($type === "2") {
|
|
// 周任务处理逻辑
|
|
$taskWCount = UserSignRecord::getTaskWCount($userId, $rewardMap[9]);
|
|
if (!empty($taskWCount)) {
|
|
foreach ($taskWCount as $key => $value) {
|
|
if ($value > 0) {
|
|
$countTaskDisc += $value;
|
|
$taskWRedisMap[$key] = $value;
|
|
}
|
|
}
|
|
}
|
|
if (!empty($taskWRedisMap)) {
|
|
Cache::set("date:spinning:draw:taskW" . $userId, json_encode($taskWRedisMap), todayAfterSecond());
|
|
}
|
|
} elseif ($type === "3") {
|
|
// 月任务处理逻辑
|
|
if ($signCount === null) {
|
|
$signCount = UserSignRecord::getUserSignCount($userId);
|
|
}
|
|
|
|
if ($signCount >= $taskCenter['number']) {
|
|
if (isset($rewardMap[9])) {
|
|
$spinningCount = DatabaseRoute::getDb('disc_spinning_record', $userId)->where(['source' => 'taskM', 'source_id' => $taskCenter['id']])->count();
|
|
$countTaskDisc = $rewardMap[9] - ($spinningCount ?? 0);
|
|
|
|
if ($countTaskDisc > 0) {
|
|
$taskWRedisMap[$taskCenter['id']] = $countTaskDisc;
|
|
}
|
|
}
|
|
}
|
|
if (!empty($taskWRedisMap)) {
|
|
Cache::set("date:spinning:draw:taskM" . $userId, json_encode($taskWRedisMap), todayAfterSecond());
|
|
}
|
|
}
|
|
}
|
|
return $countTaskDisc;
|
|
}
|
|
|
|
|
|
public static function selectOrdersCountStatisticsByDay($user_id, $limit)
|
|
{
|
|
$db = Db::connect(DatabaseRoute::getConnection('orders', ['user_id' => $user_id]));
|
|
$count = $db->name('orders')
|
|
->alias('o')
|
|
->leftJoin('disc_spinning_record record', 'o.orders_id = record.source_id AND record.source = "order"')
|
|
->where('o.user_id', $user_id)
|
|
->where('o.status', 1)
|
|
->where('o.pay_way', 9)
|
|
->whereraw('o.create_time > DATE_FORMAT(NOW(), "%Y-%m-%d 00:00:00")')
|
|
->whereNull('record.source_id')
|
|
->order('o.create_time')
|
|
->count();
|
|
if ($count == null) {
|
|
return 0;
|
|
}
|
|
if ($count <= $limit) {
|
|
return $count;
|
|
}
|
|
return $limit;
|
|
}
|
|
|
|
} |