webman_duanju/app/api/model/DiscSpinningRecord.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;
}
}