372 lines
12 KiB
PHP
372 lines
12 KiB
PHP
<?php
|
|
|
|
namespace app\adminapi\controller;
|
|
|
|
use think\Db;
|
|
|
|
class RoomHourRanking
|
|
{
|
|
public static function withdraw_status (){
|
|
return [
|
|
// [25 => '全时段'],
|
|
[0 => '00:00-01:00'],
|
|
[1 => '01:00-02:00'],
|
|
[2 => '02:00-03:00'],
|
|
[3 => '03:00-04:00'],
|
|
[4 => '04:00-05:00'],
|
|
[5 => '05:00-06:00'],
|
|
[6 => '06:00-07:00'],
|
|
[7 => '07:00-08:00'],
|
|
[8 => '08:00-09:00'],
|
|
[9 => '09:00-10:00'],
|
|
[10 => '10:00-11:00'],
|
|
[11 => '11:00-12:00'],
|
|
[12 => '12:00-13:00'],
|
|
[13 => '13:00-14:00'],
|
|
[14 => '14:00-15:00'],
|
|
[15 => '15:00-16:00'],
|
|
[16 => '16:00-17:00'],
|
|
[17 => '17:00-18:00'],
|
|
[18 => '18:00-19:00'],
|
|
[19 => '19:00-20:00'],
|
|
[20 => '20:00-21:00'],
|
|
[21 => '21:00-22:00'],
|
|
[22 => '22:00-23:00'],
|
|
[23 => '23:00-00:00'],
|
|
];
|
|
}
|
|
|
|
|
|
//房间小时榜列表
|
|
public function room_hour_ranking()
|
|
{
|
|
$page = input('page', 1);
|
|
$page_limit = input('page_limit', 20);
|
|
$search_ranking = input('search_ranking', '');
|
|
$search_stime = input('search_stime', '');
|
|
$search_etime = input('search_etime', '');
|
|
$where = [];
|
|
if ($search_ranking) {
|
|
$where[] = ['room_name', 'like', '%' . $search_ranking . '%'];
|
|
}
|
|
if ($search_stime) {
|
|
$where[] = ['stime', '>=', $search_stime];
|
|
}
|
|
if ($search_etime) {
|
|
$where[] = ['etime', '<=', $search_etime];
|
|
}
|
|
$count = db::name('vs_hour_ranking')->where($where)->count();
|
|
$list = db::name('vs_hour_ranking')->where($where)->page($page, $page_limit)->order('id desc')->select();
|
|
if($list){
|
|
foreach ($list as &$v){
|
|
$v['room_name'] = db::name('vs_room')->where(['id'=>$v['room_id']])->value('room_name');
|
|
$v['user_id'] = db::name('vs_room')->where(['id'=>$v['room_id']])->value('user_id');
|
|
if($v['user_id']){
|
|
$v['nickname'] = db::name('user')->where(['id'=>$v['user_id']])->value('nickname');
|
|
}
|
|
$v['stime'] = date('Y-m-d H:i', $v['stime']);
|
|
$v['etime'] = date('Y-m-d H:i', $v['etime']);
|
|
|
|
}
|
|
}
|
|
$return_data = [
|
|
'page' =>$page,
|
|
'page_limit' => $page_limit,
|
|
'count' => $count,
|
|
'lists' => $list
|
|
];
|
|
return V(1,"成功", $return_data);
|
|
}
|
|
|
|
//房间小时榜配置
|
|
public function room_hour_ranking_config()
|
|
{
|
|
$list = db::name('vs_hour_ranking_config')->where('id', '1')->find();
|
|
if($list){
|
|
//open_time 字段转化为2025-09-30 07:00 的格式
|
|
$list['open_time'] = $list['open_time'] ? date('Y-m-d H:i', $list['open_time']) : 0;
|
|
}
|
|
return V(1,"成功", $list);
|
|
}
|
|
|
|
//房间小时榜配置修改
|
|
public function room_hour_ranking_config_edit()
|
|
{
|
|
$id = input('id');
|
|
$data['is_open_red_pack'] = 0;//暂时不开启
|
|
$data['is_public_server'] = input('is_public_server');
|
|
$data['broadcast_times'] = input('broadcast_times');
|
|
$data['is_open_xlh'] = input('is_open_xlh');
|
|
$data['min_price'] = input('min_price');
|
|
$open_time = input('open_time');
|
|
$data['open_time'] = $open_time ? strtotime($open_time) : 0;
|
|
$data['createtime'] = time();
|
|
$data['updatetime'] = time();
|
|
|
|
$timeSlots = json_decode(input('timeJson'), true);
|
|
|
|
$timePeriods = $this->withdraw_status();
|
|
|
|
// 构建正确的时间映射关系
|
|
$timeMap = [];
|
|
foreach($timePeriods as $period) {
|
|
foreach($period as $key => $value) {
|
|
$timeMap[$key] = $value;
|
|
}
|
|
}
|
|
|
|
//$timeMap 里面 键值互换
|
|
$timeMap = array_flip($timeMap);
|
|
//开启事务
|
|
db::startTrans();
|
|
if($timeSlots){
|
|
$insertData = [];
|
|
foreach ($timeSlots as $timeSlot) {
|
|
// $timeRange = ;
|
|
$timeRange = $timeMap[$timeSlot['time']] ?? '99';
|
|
|
|
foreach ($timeSlot['reward'] as $rewardItem) {
|
|
$hasReward = !empty($rewardItem['content']);
|
|
|
|
if ($hasReward) {
|
|
// 有奖励内容:为每个奖励内容创建一条记录
|
|
foreach ($rewardItem['content'] as $rewardContent) {
|
|
if($rewardContent['type'] == 0){
|
|
$coin = $rewardContent['value'];
|
|
$gift_id = 0;
|
|
$gift_name = '';
|
|
}else{
|
|
$coin = 0;
|
|
$gift_id = $rewardContent['value'];
|
|
$gift_name = $rewardContent['name'];
|
|
}
|
|
$insertData[] = [
|
|
'time_id' => $timeRange,
|
|
'ranking' => $rewardItem['index'],
|
|
// 'rank_name' => $rewardItem['name'],
|
|
'gift_type' => $rewardContent['type'],
|
|
'gift_id' => $gift_id,
|
|
'coin' => $coin,
|
|
'name' => $gift_name,
|
|
'createtime' => time()
|
|
];
|
|
}
|
|
} else {
|
|
// 无奖励内容:插入一条空奖励记录
|
|
$insertData[] = [
|
|
'time_id' => $timeRange,
|
|
'ranking' => $rewardItem['index'],
|
|
// 'rank_name' => $rewardItem['name'],
|
|
'gift_type' => 0,
|
|
'gift_id' => 0,
|
|
'coin' => 0,
|
|
'name' => '',
|
|
'createtime' => time(),
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
// 批量插入
|
|
if (!empty($insertData)) {
|
|
$del = db::name('vs_hour_ranking_gift_config')->where('id','>',0)->delete();
|
|
$ins = db::name('vs_hour_ranking_gift_config')->insertAll($insertData);
|
|
}else{
|
|
$ins = false;
|
|
$del = false;
|
|
}
|
|
|
|
}else{
|
|
$del = true;
|
|
$ins = true;
|
|
}
|
|
|
|
// $res = db::name('vs_hour_ranking_config')->where('id', $id)->update($data);
|
|
$res = db::name('vs_hour_ranking_config')->where('id', $id)->update($data);
|
|
// if ($del && $ins && $res) {
|
|
if ($ins) {
|
|
db::commit();
|
|
return V(1, "成功");
|
|
} else {
|
|
db::rollback();
|
|
return V(0, "失败");
|
|
}
|
|
}
|
|
|
|
//时间段对应关系
|
|
public function time_period_correspondence()
|
|
{
|
|
$list = $this->withdraw_status();
|
|
$timePeriods = $this->withdraw_status();
|
|
$timeMap = [];
|
|
foreach($timePeriods as $period) {
|
|
foreach($period as $key => $value) {
|
|
$timeMap[$key] = $value;
|
|
}
|
|
}
|
|
return V(1,"成功", $timeMap);
|
|
}
|
|
|
|
|
|
//添加核心配置
|
|
public function add_core_config()
|
|
{
|
|
$data['is_public_server'] = input('is_public_server');
|
|
$data['createtime'] = time();
|
|
$data['updatetime'] = time();
|
|
|
|
|
|
$res = db::name('vs_hour_ranking_config')->insert($data);
|
|
}
|
|
|
|
//核心配置列表
|
|
public function core_config_list()
|
|
{
|
|
$timePeriods = $this->withdraw_status();
|
|
|
|
// 构建正确的时间映射关系
|
|
$timeMap = [];
|
|
foreach($timePeriods as $period) {
|
|
foreach($period as $key => $value) {
|
|
$timeMap[$key] = $value;
|
|
}
|
|
}
|
|
|
|
// 先按时间段和排名索引分组查询
|
|
$timeRanges = db::name('vs_hour_ranking_gift_config')->distinct(true)
|
|
->order('time_id')
|
|
->column('time_id');
|
|
|
|
$result = [];
|
|
foreach ($timeRanges as $timeRange) {
|
|
// 查询该时间段的所有数据
|
|
$rewards = db::name('vs_hour_ranking_gift_config')->where('time_id', $timeRange)
|
|
->field('ranking, gift_type, gift_id,coin,name')
|
|
->order('ranking')
|
|
->select();
|
|
|
|
$rewardMap = [];
|
|
foreach ($rewards as $reward) {
|
|
$rankIndex = $reward['ranking'];
|
|
|
|
if (!isset($rewardMap[$rankIndex])) {
|
|
$rewardMap[$rankIndex] = [
|
|
'index' => $rankIndex,
|
|
// 'name' => $reward['rank_name'],
|
|
'content' => []
|
|
];
|
|
}
|
|
|
|
// 添加奖励内容到content数组
|
|
if ($reward['gift_id'] != 0 || $reward['coin'] != 0) {
|
|
if($reward['gift_id'] != 0){
|
|
$rewardMap[$rankIndex]['content'][] = [
|
|
'type' => $reward['gift_type'],
|
|
'value' => $reward['gift_id'],
|
|
// 'coin' => $reward['coin'],
|
|
'name' => $reward['name'],
|
|
];
|
|
}
|
|
if($reward['coin'] != 0){
|
|
$rewardMap[$rankIndex]['content'][] = [
|
|
'type' => $reward['gift_type'],
|
|
'value' => $reward['coin'],
|
|
'name' => $reward['name'],
|
|
];
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
// 按index排序
|
|
ksort($rewardMap);
|
|
|
|
$result[] = [
|
|
'time' => $timeMap[$timeRange],
|
|
'reward' => array_values($rewardMap)
|
|
];
|
|
}
|
|
|
|
return V(1, "成功", $result);
|
|
|
|
}
|
|
|
|
// public function core_config_lists()
|
|
// {
|
|
// $list = db::name('vs_hour_ranking_gift_config')->select();
|
|
// $data = [];
|
|
//
|
|
// // 按 time_id 和 ranking 重组数据
|
|
// $reorganizedData = [];
|
|
// $timePeriods = $this->withdraw_status();
|
|
//
|
|
// // 构建正确的时间映射关系
|
|
// $timeMap = [];
|
|
// foreach($timePeriods as $period) {
|
|
// foreach($period as $key => $value) {
|
|
// $timeMap[$key] = $value;
|
|
// }
|
|
// }
|
|
//
|
|
// foreach ($list as $item) {
|
|
//// $timeId = $item['time_id'];
|
|
// $timeId = $timeMap[$item['time_id']] ?? '未知时间段';
|
|
// $ranking = $item['ranking'];
|
|
//
|
|
// $gift_name = '';
|
|
// if (!isset($reorganizedData[$timeId])) {
|
|
// $reorganizedData[$timeId] = [];
|
|
// }
|
|
// if (!isset($reorganizedData[$timeId][$ranking])) {
|
|
// $reorganizedData[$timeId][$ranking] = [];
|
|
// }
|
|
// if($item['gift_id']){
|
|
// if($item['gift_type'] == 2){
|
|
// $gift_name = db::name('vs_gift')->where(['gid'=>$item['gift_id']])->value('gift_name');
|
|
// }
|
|
// if($item['gift_type'] == 3 || $item['gift_type'] == 4){
|
|
// $gift_name = db::name('vs_decorate')->where(['did'=>$item['gift_id']])->value('title');
|
|
// }
|
|
//
|
|
// }else{
|
|
// $gift_name = '';
|
|
// }
|
|
// $reorganizedData[$timeId][$ranking][] = [
|
|
// 'gift_type' => $item['gift_type'],
|
|
// 'gift_id' => $item['gift_id'],
|
|
// 'gift_name' => $gift_name,
|
|
// 'coin' => $item['coin']
|
|
// ];
|
|
// }
|
|
//
|
|
// // 输出重组后的数据
|
|
// print_r($reorganizedData);
|
|
// return V(1, "成功", $data);
|
|
// }
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|