104 Commits

Author SHA1 Message Date
077a0e23e0 关系 2026-01-31 15:39:17 +08:00
b65b416e89 赠送爵位 2026-01-31 10:03:48 +08:00
3d6d14d6a9 礼物墙 2026-01-30 19:36:04 +08:00
e2fb2c4f05 bug修改 2026-01-30 19:19:04 +08:00
3f30ee6062 bug修改 2026-01-30 19:16:08 +08:00
0985204f1d bug修改 2026-01-30 19:14:15 +08:00
ee533bbe73 bug修改 2026-01-30 19:12:41 +08:00
14f9ac26d4 bug修改 2026-01-30 19:06:42 +08:00
41c6a1d51e 礼物墙 2026-01-30 19:02:54 +08:00
bdf072663a bug修改 2026-01-30 19:00:16 +08:00
9600bd5103 bug修改 2026-01-30 18:55:38 +08:00
5afeecdfc1 礼物墙 2026-01-30 18:45:06 +08:00
89d994554e 礼物墙 2026-01-30 18:43:36 +08:00
d3687c0565 排麦列表 2026-01-30 17:53:41 +08:00
5de94eb016 排麦列表 2026-01-30 17:50:27 +08:00
40a70c20e2 bug修改 2026-01-30 17:17:25 +08:00
30b580f374 bug修改 2026-01-30 16:56:17 +08:00
961e4c7788 趣味礼物排序 2026-01-30 16:05:13 +08:00
4fd29220e9 bug修改 2026-01-30 14:11:37 +08:00
41c849999a bug修改 2026-01-30 11:09:30 +08:00
485d460c7b 趣味礼物排序 2026-01-30 10:23:41 +08:00
45fe36a98b 趣味礼物排序 2026-01-30 10:22:55 +08:00
47f0e0143c 趣味礼物排序 2026-01-30 10:16:25 +08:00
906517d103 Merge remote-tracking branch 'origin/develop' into develop 2026-01-30 10:12:41 +08:00
8683aed1d9 bug修改 2026-01-30 10:12:24 +08:00
38fb18899b 趣味礼物排序 2026-01-30 10:08:46 +08:00
9c1f2793c2 私密设置整理 2026-01-30 09:16:55 +08:00
6a58f37a76 私密设置整理 2026-01-30 09:15:36 +08:00
b18517abf2 房间修改为签约 取消热门 2026-01-30 09:14:39 +08:00
0f80219b71 开盲盒补偿数据 2026-01-30 09:12:27 +08:00
fed756efae 私密设置整理 2026-01-29 18:18:57 +08:00
54848b2864 私密设置整理 2026-01-29 18:02:27 +08:00
c839743f50 热门房间 2026-01-29 17:55:31 +08:00
18c88570f0 bug修改 2026-01-29 17:27:36 +08:00
14660c72be bug修改 2026-01-29 17:15:25 +08:00
84dac71bd6 封禁 强制退出 2026-01-29 17:06:35 +08:00
f4a5b2ced8 开关调整 2026-01-29 16:36:48 +08:00
c7eece32d6 开关调整 2026-01-29 16:34:45 +08:00
d8f244caf0 Merge remote-tracking branch 'origin/develop' into develop 2026-01-29 16:30:45 +08:00
8089ce8c6a 爵位赠送不送金币 2026-01-29 16:30:39 +08:00
612bb07bec 封禁 强制退出 2026-01-29 16:24:58 +08:00
8107d9961e 爱豆计划调整 2026-01-29 16:23:13 +08:00
de2ec9ff87 爱豆计划调整 2026-01-29 16:19:24 +08:00
742722544c 失效退出登录 2026-01-29 16:06:03 +08:00
cbecd88a3a 爱豆计划调整 2026-01-29 15:06:52 +08:00
f4fcfef729 爱豆计划调整 2026-01-29 14:28:54 +08:00
cee9802959 爱豆计划调整 2026-01-29 10:25:36 +08:00
254aee03e8 爱豆计划调整 2026-01-29 10:18:29 +08:00
1b0043743b 抽奖记录 2026-01-29 09:28:36 +08:00
46c07ac9e1 恋仙传奇 搬移。 2026-01-29 09:10:10 +08:00
3d491faed5 恋仙传奇 搬移。 2026-01-28 18:57:43 +08:00
51cb1ac2f4 幸运币列表倍数 2026-01-28 15:38:42 +08:00
4bcd069c85 收到礼物数 2026-01-28 14:13:39 +08:00
66edc41718 爆币 2026-01-28 11:53:13 +08:00
bf1b69b1cb Merge remote-tracking branch 'origin/develop' into develop 2026-01-28 11:34:09 +08:00
c2674ea33e 恋仙传奇 搬移。 2026-01-28 11:34:03 +08:00
15c8098b1f 爆币 2026-01-28 11:32:55 +08:00
9ca9909e6f 恋仙传奇 搬移。 2026-01-28 11:19:57 +08:00
fcca1cd794 恋仙传奇 搬移。 2026-01-28 10:55:22 +08:00
4a5fc09ce4 爆币 2026-01-28 10:46:25 +08:00
1160d9f908 恋仙传奇 搬移。 2026-01-28 10:42:19 +08:00
5f6c99538f 恋仙传奇 搬移。 2026-01-28 10:36:14 +08:00
8e4086b4ca 恋仙传奇 搬移。 2026-01-28 10:00:01 +08:00
765fafe218 连线传奇 搬移。 2026-01-28 09:53:35 +08:00
14ea649634 连线传奇 搬移。 2026-01-28 09:50:41 +08:00
de6676895a 爆币 2026-01-28 09:42:04 +08:00
2eeee057f8 连线传奇 搬移。 2026-01-28 09:11:41 +08:00
466db48ac2 连线传奇 搬移。 2026-01-27 20:44:37 +08:00
e8894d95cf 爆币 2026-01-27 20:35:25 +08:00
aff3440e42 连线传奇 搬移。 2026-01-27 20:32:29 +08:00
fc368aeda4 爆币 2026-01-27 20:32:04 +08:00
841f19e551 爆币 2026-01-27 20:30:36 +08:00
8b12d46912 爆币 2026-01-27 20:26:35 +08:00
a8725713aa Merge remote-tracking branch 'origin/develop' into develop 2026-01-27 20:16:47 +08:00
a6420812df 连线传奇 搬移。 2026-01-27 20:16:42 +08:00
c26e96f3dd 爆币 2026-01-27 20:15:41 +08:00
8b3d340456 Merge remote-tracking branch 'origin/develop' into develop 2026-01-27 20:13:11 +08:00
9fbf23279b 连线传奇 搬移。 2026-01-27 20:13:04 +08:00
786295bc47 爆币 2026-01-27 20:12:31 +08:00
31181d74c7 连线传奇 搬移。 2026-01-27 20:01:19 +08:00
7f82bb539e 爆币 2026-01-27 19:37:24 +08:00
935ef9f998 爆币 2026-01-27 19:25:16 +08:00
5f5954da52 管理后台-封禁-调试 2026-01-27 11:47:46 +08:00
d9eb6d01bf 管理后台-封禁-调试 2026-01-27 10:42:00 +08:00
4a2fdadfdb 管理后台-封禁-调试 2026-01-27 10:35:01 +08:00
7b990a5ecd 管理后台-封禁-调试 2026-01-27 10:30:02 +08:00
ac2c12c0c9 管理后台-封禁-调试 2026-01-27 10:27:22 +08:00
f4da4ffae9 管理后台-封禁-调试 2026-01-27 10:13:42 +08:00
210a325688 管理后台-封禁-调试 2026-01-27 10:09:17 +08:00
3567e02642 管理后台-封禁-调试 2026-01-27 10:05:18 +08:00
c7a70cb128 发送系统消息修改 2026-01-27 09:58:48 +08:00
466d94fda4 管理后台-封禁-调试 2026-01-27 09:51:32 +08:00
aedf9e1559 管理后台-封禁-调试 2026-01-27 09:35:31 +08:00
fcff5c1da5 管理后台-封禁-调试 2026-01-27 09:32:22 +08:00
808a111853 管理后台-封禁-调试 2026-01-27 09:30:27 +08:00
a38317a58c 管理后台-封禁-调试 2026-01-27 09:14:22 +08:00
486f42bd5b 管理后台-封禁 2026-01-27 09:00:12 +08:00
02ce80b8ed 爆币 2026-01-26 20:46:24 +08:00
1598df9824 爆币 2026-01-26 20:32:25 +08:00
2fc52ee53a 爆币 2026-01-26 20:00:19 +08:00
67703d073f 爆币 2026-01-26 19:59:00 +08:00
ff65b56590 爆币 2026-01-26 19:49:13 +08:00
f733aefd03 爆币 2026-01-26 19:41:53 +08:00
9dcec5fb27 爆币 2026-01-26 19:38:04 +08:00
42 changed files with 2553 additions and 127 deletions

View File

@@ -683,6 +683,8 @@ class Activities extends adminApi
}
if($gift_bag_id){
$where['a.gift_bag_id'] = $gift_bag_id;
}else{
$where['a.gift_bag_id'] = ['in', [1,2]];
}
if($begin_time){
$where['a.createtime'] = ['>=', strtotime($begin_time)];

View File

@@ -188,9 +188,9 @@ class BlindBox extends adminApi
if($type){
$where['type'] = $type;
}
if($label){
$where['label'] = $label;
}
// if($label){
// $where['label'] = $label;
// }
$list = db::name("vs_gift")->where($where)->order('sort','asc')->select();
$list_data = [];
foreach ($list as $k=>$v){
@@ -537,7 +537,7 @@ class BlindBox extends adminApi
if($activities_id == ""){
$activities_id = 4;
}
$bag_list = db::name("vs_gift_bag")->field('id,name')->where(['activities_id'=>$activities_id,'status'=>1])->select();
$bag_list = db::name("vs_gift_bag")->field('id,name')->where(['activities_id'=>$activities_id])->select();
return V(1,"成功", $bag_list);
}
//--------------------------盲盒转盘与巡乐会-------------------------------------------------------

View File

@@ -90,6 +90,7 @@ class Guild extends adminApi
$list[$k]['status_str'] = $v['status'] == 1 ? '正常' : '解散';
$list[$k]['createtime'] = date('Y-m-d H:i:s',$v['createtime']);
$list[$k]['updatetime'] = date('Y-m-d H:i:s',$v['updatetime']);
$list[$k]['delete_time'] = $v['delete_time'] ? date('Y-m-d H:i:s',$v['delete_time']) : "";
$list[$k]['user_id'] = $user['user_code']??"";
$list[$k]['intro'] = $v['intro'];
//幸运币流水
@@ -699,6 +700,11 @@ class Guild extends adminApi
//更新公会人数
db('vs_guild')->where('id', $merge_guild_id)->setInc('num');
//拉用户进入工会群聊
if($merge_guild_id<=95){
$merge_guild_id = "g".$merge_guild_id;
}else{
$merge_guild_id = $merge_guild_id;
}
$rid = 'g'.$merge_guild_id;
$reslut = model('api/Tencent')->add_group_member($rid, $value['user_id']);
}
@@ -708,6 +714,11 @@ class Guild extends adminApi
return V(0,"失败");
}
//解散群
if($guild_id<=95){
$guild_id = "g".$guild_id;
}else{
$guild_id = $guild_id;
}
model('api/Tencent')->delete_group('g'.$guild_id);
db::commit();
return V(1,"成功");

View File

@@ -30,7 +30,7 @@ class Lottery extends adminApi
* 配置列表
*/
public function config_list(){
$list = db::name("bb_lottery_config")->order('sort desc')->select();
$list = db::name("bb_lottery_config")->where(['delete_time' => 0])->order('sort desc')->select();
$list_data = [];
foreach ($list as $k=>$v){
$list_data[$k]['id'] = $v['id'];
@@ -46,30 +46,113 @@ class Lottery extends adminApi
* 配置设置
*/
public function config_set(){
$bb_lottery_config = Db::name('bb_lottery_config')->column('value', 'key');
$small_pool_trigger_times = $bb_lottery_config['small_pool_trigger_times'];//初级开奖的累计次数
$lottery_rate = $bb_lottery_config['lottery_rate'];//初级最大爆币率
$small_pool_trigger_times_5 = $bb_lottery_config['small_pool_trigger_times_5'];//中级开奖的累计次数
$lottery_rate_5 = $bb_lottery_config['lottery_rate_5'];//中级最大爆币率
$small_pool_trigger_times_10 = $bb_lottery_config['small_pool_trigger_times_10'];//高级最大爆币率
$lottery_rate_10 = $bb_lottery_config['lottery_rate_10'];//高级最大爆币率
$params = $this->request->post();
$small_type = 0;
$small_type_5 = 0;
$small_type_10 = 0;
foreach ($params as $k=>$v){
$data = [
'value'=>$v,
];
db::name("bb_lottery_config")->where(['key'=>$k])->update($data);
if($k=='small_pool_trigger_times'){
if($v != $small_pool_trigger_times){
$small_type = 1;
}
}
if($k=='lottery_rate'){
if($v != $lottery_rate){
$small_type = 1;
}
}
if($k=='small_pool_trigger_times_5'){
if($v != $small_pool_trigger_times_5){
$small_type_5 = 1;
}
}
if($k=='lottery_rate_5'){
if($v != $lottery_rate_5){
$small_type_5 = 1;
}
}
if($k=='small_pool_trigger_times_10'){
if($v != $small_pool_trigger_times_10){
$small_type_10 = 1;
}
}
if($k=='lottery_rate_10'){
if($v != $lottery_rate_10){
$small_type_10 = 1;
}
}
}
$this->redis = Cache::store('redis')->handler();
$prize_amount = $this->redis->get('lottery:small_pool:total_gold');
if($small_type==1){
$prize_amount = $this->redis->get('lottery:small_pool:total_gold');
Db::name('bb_lottery_winner_record')->insert([
'uid' => 0,
'prize_type' => 1,
'prize_amount' => $prize_amount,
'pool_amount' => $prize_amount,
'ratio' => 100,
'release_amount' => $prize_amount,
'create_time' => time(),
'status' => 0 // 未发放
]);
//修改开启下一轮
$dd =$this->redis->get('lottery:small_pool:round');
$this->redis->set('lottery:small_pool:round', $dd+1);
$this->redis->set('lottery:small_pool:total_times',0);
$this->redis->set('lottery:small_pool:total_gold',0);
}
if($small_type_5==1){
$prize_amount_5 = $this->redis->get('lottery:small_pool:total_gold_5');
Db::name('bb_lottery_winner_record')->insert([
'uid' => 0,
'prize_type' => 3,
'prize_amount' => $prize_amount_5,
'pool_amount' => $prize_amount_5,
'ratio' => 100,
'release_amount' => $prize_amount_5,
'create_time' => time(),
'status' => 0 // 未发放
]);
//修改开启下一轮
$dd5 =$this->redis->get('lottery:small_pool:round_5');
$this->redis->set('lottery:small_pool:round_5', $dd5+1);
$this->redis->set('lottery:small_pool:total_times_5',0);
$this->redis->set('lottery:small_pool:total_gold_5',0);
}
if($small_type_10==1){
$prize_amount_10 = $this->redis->get('lottery:small_pool:total_gold_10');
Db::name('bb_lottery_winner_record')->insert([
'uid' => 0,
'prize_type' => 4,
'prize_amount' => $prize_amount_10,
'pool_amount' => $prize_amount_10,
'ratio' => 100,
'release_amount' => $prize_amount_10,
'create_time' => time(),
'status' => 0 // 未发放
]);
//修改开启下一轮
$dd_10 =$this->redis->get('lottery:small_pool:round_10');
$this->redis->set('lottery:small_pool:round_10', $dd_10+1);
$this->redis->set('lottery:small_pool:total_times_10',0);
$this->redis->set('lottery:small_pool:total_gold_10',0);
}
Db::name('bb_lottery_winner_record')->insert([
'uid' => 0,
'prize_type' => 1,
'prize_amount' => $prize_amount,
'pool_amount' => $prize_amount,
'ratio' => 100,
'release_amount' => $prize_amount,
'create_time' => time(),
'status' => 0 // 未发放
]);
//清除缓存
$this->redis->rm('lottery:small_pool:round');
$this->redis->rm('lottery:small_pool:total_times');
$this->redis->rm('lottery:small_pool:total_gold');
return V(1,"成功");
}
@@ -82,7 +165,18 @@ class Lottery extends adminApi
$page_limit = input('page_limit', 30);
$stime = input('stime', '');
$etime = input('etime', '');
$pool_type = input('pool_type', '1');
$user_code = input('user_code');
if($user_code){
$userId = db::name('user')->where(['user_code'=>$user_code])->value('id');
if($userId){
$where['uid'] = $userId;
}else{
$where['uid'] = '1';
}
}
$where = [];
$where['prize_type'] = $pool_type;
if($stime!==""){
$where['create_time'] = ['>=', strtotime($stime)];
}
@@ -93,7 +187,9 @@ class Lottery extends adminApi
$where['create_time'] = ['between', [strtotime($stime), strtotime($etime)]];
}
$count = db::name('bb_lottery_winner_record')->where($where)->count();
$lists_data = db::name('bb_lottery_winner_record')->field('id,uid as user_id,prize_type,prize_amount,pool_amount,ratio,release_amount,status,create_time as createtime')->where($where)->page($page, $page_limit)->order("id desc")->select();
$lists_data = db::name('bb_lottery_winner_record')
->field('id,uid as user_id,prize_type,prize_amount,pool_amount,ratio,release_amount,status,create_time as createtime')
->where($where)->page($page, $page_limit)->order("id desc")->select();
foreach ($lists_data as $k=>$v){
if($v['user_id'] > 0){
$user_info = db::name('user')->where(['id'=>$v['user_id']])->find();
@@ -105,12 +201,25 @@ class Lottery extends adminApi
}
//奖项类型1-小奖 2-大奖
$lists_data[$k]['prize_type_str'] = $v['prize_type']==1?"小奖":"大奖";
if($v['prize_type']==4){
$lists_data[$k]['prize_type_str'] = "高级奖";
$gift_price = 10;
}elseif ($v['prize_type']==2){
$gift_price = 1;
$lists_data[$k]['prize_type_str'] = "大奖";
}elseif ($v['prize_type']==3){
$gift_price = 5;
$lists_data[$k]['prize_type_str'] = "中级奖";
}else{
$gift_price = 1;
$lists_data[$k]['prize_type_str'] = "小奖";
}
//状态1-已发放 0-未发放'
$lists_data[$k]['status_str'] = $v['status']==1?"已发放":"未发放";
$lists_data[$k]['createtime'] = date("Y-m-d H:i:s", $v['createtime']);
$lists_data[$k]['prize_amount'] = floor($v['prize_amount']);
$lists_data[$k]['beilv'] = floor($v['prize_amount']);
$lists_data[$k]['beilv'] = floor($v['prize_amount'] / $gift_price);
}
$return_data = [
'page' =>$page,
@@ -127,23 +236,48 @@ class Lottery extends adminApi
* 实时统计
*/
public function realtime_statistics(){
$pool_type = input('pool_type', '1');
$bb_config = db::name('bb_lottery_config')->field('key,value')->select();
$bb_config = array_column($bb_config, null, 'key');
// 循环奖池进度
//最新轮次
$latest_times = db::name('bb_lottery_pool_flow')->where(['pool_type'=>1])->max('times');
$pool_progress = db::name('bb_lottery_pool_flow')->where(['pool_type'=>1,'times'=>$latest_times])->count();//当前进度
$pool_total_amount = db::name('bb_lottery_pool_flow')->where(['pool_type'=>1,'times'=>$latest_times,'type'=>1])->sum('amount');
//获取配置表中奖池配置
$pool_progress_str = $pool_progress."/".$bb_config['small_pool_trigger_times']['value']."(".$pool_total_amount."金币)";
if($pool_type == 4){
$latest_times = db::name('bb_lottery_pool_flow_10')->where(['pool_type'=>1])->max('times');//最新轮次
$pool_progress = db::name('bb_lottery_pool_flow_10')->where(['pool_type'=>1,'times'=>$latest_times])->count();//当前进度
$pool_total_amount = db::name('bb_lottery_pool_flow_10')->where(['pool_type'=>1,'times'=>$latest_times,'type'=>1])->sum('amount');
//获取配置表中奖池配置
$pool_progress_str = $pool_progress."/".$bb_config['small_pool_trigger_times_10']['value']."(".$pool_total_amount."金币)";
//最近中奖用户
$last_winner_user_id = db::name('bb_lottery_winner_record')->where(['status'=>1,'prize_type'=>4])->order('id desc')->find();
//平台累计收入
$platform_total_income = db::name('bb_lottery_winner_record')->where(['prize_type'=>4])->sum('release_amount');
}elseif($pool_type == 3){
$latest_times = db::name('bb_lottery_pool_flow_5')->where(['pool_type'=>1])->max('times');//最新轮次
$pool_progress = db::name('bb_lottery_pool_flow_5')->where(['pool_type'=>1,'times'=>$latest_times])->count();//当前进度
$pool_total_amount = db::name('bb_lottery_pool_flow_5')->where(['pool_type'=>1,'times'=>$latest_times,'type'=>1])->sum('amount');
//获取配置表中奖池配置
$pool_progress_str = $pool_progress."/".$bb_config['small_pool_trigger_times_5']['value']."(".$pool_total_amount."金币)";
//最近中奖用户
$last_winner_user_id = db::name('bb_lottery_winner_record')->where(['status'=>1,'prize_type'=>3])->order('id desc')->find();
//平台累计收入
$platform_total_income = db::name('bb_lottery_winner_record')->where(['prize_type'=>3])->sum('release_amount');
}else{
$latest_times = db::name('bb_lottery_pool_flow')->where(['pool_type'=>1])->max('times');//最新轮次
$pool_progress = db::name('bb_lottery_pool_flow')->where(['pool_type'=>1,'times'=>$latest_times])->count();//当前进度
$pool_total_amount = db::name('bb_lottery_pool_flow')->where(['pool_type'=>1,'times'=>$latest_times,'type'=>1])->sum('amount');
//获取配置表中奖池配置
$pool_progress_str = $pool_progress."/".$bb_config['small_pool_trigger_times']['value']."(".$pool_total_amount."金币)";
//最近中奖用户
$last_winner_user_id = db::name('bb_lottery_winner_record')->where(['status'=>1,'prize_type'=>1])->order('id desc')->find();
//平台累计收入
$platform_total_income = db::name('bb_lottery_winner_record')->where(['prize_type'=>1])->sum('release_amount');
}
//蓄水池当前金额
$big_round = db::name('bb_lottery_pool_flow')->where(['pool_type'=>2])->max('times');
$bigAddGold = Db::name('bb_lottery_pool_flow')
->where(['pool_type' => 2, 'type' => 3, 'times' => $big_round])
->sum('amount') ?: 0;
//最近中奖用户
$last_winner_user_id = db::name('bb_lottery_winner_record')->where(['status'=>1])->order('id desc')->find();
// $big_round = db::name('bb_lottery_pool_flow')->where(['pool_type'=>2])->max('times');
// $bigAddGold = Db::name('bb_lottery_pool_flow')->where(['pool_type' => 2, 'type' => 3, 'times' => $big_round])->sum('amount') ?: 0;
$bigAddGold = 0;
if($last_winner_user_id){
$last_winner_user_info = db::name('user')->where(['id'=>$last_winner_user_id['uid']])->find();
$last_winner_user_text = "用户ID:".$last_winner_user_info['user_code']." 获得 ".$last_winner_user_id['prize_amount']." 金币 ".$last_winner_user_id['ratio']."%)";
@@ -152,7 +286,8 @@ class Lottery extends adminApi
}
//平台累计收入
$platform_total_income = db::name('bb_lottery_pool_flow')->where(['type'=>4])->sum('amount');
// $platform_total_income = db::name('bb_lottery_pool_flow')->where(['type'=>4])->sum('amount');
$return_data=[
'pool_progress' => $pool_progress_str,
'pool_amount_now' => ($bigAddGold)."金币 ".(($bigAddGold)/$bb_config['big_pool_threshold']['value'])."%)",
@@ -161,4 +296,67 @@ class Lottery extends adminApi
];
return V(1,"成功", $return_data);
}
/*
* 抽奖记录
*/
public function pool_flow_list(){
$page = input('page', 1);
$page_limit = input('page_limit', 30);
$stime = input('stime', '');
$etime = input('etime', '');
$pool_type = input('pool_type', '1');
$user_code = input('user_code');
if($user_code){
$userId = db::name('user')->where(['user_code'=>$user_code])->value('id');
if($userId){
$where['uid'] = $userId;
}else{
$where['uid'] = '1';
}
}
if($pool_type == 4){
$table = 'bb_lottery_gift_record_10';
}
elseif($pool_type == 3){
$table = 'bb_lottery_gift_record_5';
}
else{
$table = 'bb_lottery_gift_record';
}
$where = [];
if($stime!==""){
$where['create_time'] = ['>=', strtotime($stime)];
}
if($etime!==""){
$where['create_time'] = ['<=', strtotime($etime)];
}
if($stime!=="" && $etime!==""){
$where['create_time'] = ['between', [strtotime($stime), strtotime($etime)]];
}
$count = db::name($table)->where($where)->count();
$lists_data = db::name($table)
->field('id,send_uid,recv_uid,gift_id,gift_gold,recv_gold,small_pool_add,remark,create_time as createtime')
->where($where)
->order("id desc")
->page($page, $page_limit)->select();
foreach ($lists_data as $k=>$v){
$send_user_info = db::name('user')->field('nickname,user_code')->where(['id'=>$v['send_uid']])->find();
$recv_user_info = db::name('user')->field('nickname,user_code')->where(['id'=>$v['recv_uid']])->find();
$lists_data[$k]['send_nickname'] = $send_user_info['user_code']."-".$send_user_info['nickname'];
$lists_data[$k]['recv_nickname'] = $recv_user_info['user_code']."-".$recv_user_info['nickname'];
$lists_data[$k]['gift_name'] = db::name('vs_gift')->where(['gid'=>$v['gift_id']])->value('gift_name');
$lists_data[$k]['createtime'] = date("Y-m-d H:i:s", $v['createtime']);
}
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'count' => $count,
'lists' => $lists_data,
'total_data' => [
]
];
return V(1,"成功", $return_data);
}
}

View File

@@ -0,0 +1,146 @@
<?php
namespace app\adminapi\controller;
use app\admin\model\AdminLog;
use app\common\controller\adminApi;
use think\Cache;
use think\Config;
use think\Db;
class Monster extends adminApi
{
//获取列表
public function get_monster_list()
{
$order = input('order', 'id');
$sort = input('sort', 'desc');
$page = input('page', 1);
$limit = input('limit', 20);
$reslut = model('Monster')->get_monster_list($order, $sort, $page, $limit);
$data = [];
$data['code'] = 0;
$data['msg'] = '获取成功';
$data['count'] = $reslut['data']['count'];
$data['data'] = $reslut['data']['list'];
return V(1,"成功", $data);
}
//获取详情
public function get_monster_info()
{
$id = input('id', 0);
$reslut = model('Monster')->get_monster_info($id);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//编辑
public function edit_monster()
{
$data['id'] = input('id', 0);
$data['gid'] = input('gid', 0);
$data['num'] = input('num', 0);
$data['type_name'] = input('type_name', 0);
$data['multiple'] = input('multiple', 0);
$reslut = model('Monster')->edit_monster($data);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//获取礼物列表
public function get_gift_list()
{
$reslut = model('Monster')->get_gift_list();
$data = [];
$data['code'] = 0;
$data['msg'] = '获取成功';
$data['count'] = $reslut['data']['count'];
$data['data'] = $reslut['data']['list'];
return V(1,"成功", $data);
}
//获取列表
public function get_monster_multiple_list()
{
$order = input('order', 'id');
$sort = input('sort', 'desc');
$page = input('page', 1);
$limit = input('limit', 20);
$reslut = model('Monster')->get_monster_multiple_list($order, $sort, $page, $limit);
$data = [];
$data['code'] = 0;
$data['msg'] = '获取成功';
$data['count'] = $reslut['data']['count'];
$data['data'] = $reslut['data']['list'];
return V(1,"成功", $data);
}
//获取详情
public function get_monster_multiple_info()
{
$id = input('id', 0);
$reslut = model('Monster')->get_monster_multiple_info($id);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//编辑
public function edit_monster_multiple()
{
$data['id'] = input('id', 0);
$data['multiple'] = input('multiple', 0);
$reslut = model('Monster')->edit_monster_multiple($data);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//获取列表
public function get_monster_log(){
$order = input('order', 'id');
$sort = input('sort', 'desc');
$page = input('page', 1);
$limit = input('limit', 20);
$reslut = model('Monster')->get_monster_log($order, $sort, $page, $limit);
$data = [];
$data['code'] = 0;
$data['msg'] = '获取成功';
$data['count'] = $reslut['data']['count'];
$data['data'] = $reslut['data']['list'];
$data['totalRow'] = $reslut['data']['totalRow'];
return V(1,"成功", $data);
}
//获取列表
public function get_user_monster_log(){
$mid = input('mid', 0);
$order = input('order', 'id');
$sort = input('sort', 'desc');
$page = input('page', 1);
$limit = input('limit', 20);
$reslut = model('Monster')->get_user_monster_log($mid, $order, $sort, $page, $limit);
$data = [];
$data['code'] = 0;
$data['msg'] = '获取成功';
$data['count'] = $reslut['data']['count'];
$data['data'] = $reslut['data']['list'];
return V(1,"成功", $data);
}
//获取列表
public function get_user_monster_win_log(){
$mid = input('mid', 0);
$order = input('order', 'id');
$sort = input('sort', 'desc');
$page = input('page', 1);
$limit = input('limit', 20);
$reslut = model('Monster')->get_user_monster_win_log($mid, $order, $sort, $page, $limit);
$data = [];
$data['code'] = 0;
$data['msg'] = '获取成功';
$data['count'] = $reslut['data']['count'];
$data['data'] = $reslut['data']['list'];
return V(1,"成功", $data);
}
}

View File

@@ -426,7 +426,7 @@ class Nobility extends adminApi
if (empty($lid)) {
return V(0, "请选择爵位");
}
$reslut = model('api/Nobility')->buyNobility($user_id,$lid);
$reslut = model('api/Nobility')->buyNobility($user_id,$lid,1);
return V($reslut['code'],$reslut['msg'], null);
}
}

View File

@@ -343,7 +343,12 @@ class Room extends adminApi
$count = db::name($this->relation)->where($where)->count();
$lists = db::name($this->relation)->where($where)->page($page, $page_limit)->select();
foreach ($lists as $key => $value) {
$lists[$key]['type_str'] = model('Room')->relation_type[$value['type']];
if($value['type'] > 0){
$lists[$key]['type_str'] = model('Room')->relation_type[$value['type']];
}else{
$lists[$key]['type_str'] = '无关系';
}
$lists[$key]['is_open_movie'] = $value['is_open_movie']==1?'是':'否';
$lists[$key]['createtime'] = date('Y-m-d H:i:s', $value['createtime']);
}
@@ -2057,4 +2062,39 @@ class Room extends adminApi
return V(1, "成功", $return_data);
}
//房间幸运值流水详情
public function room_luck_list(){
$page = input('page', 1);
$page_limit = input('page_limit', 10);
$room_id = input('room_id', '');
if(empty($room_id)){
return V(0, "房间ID不能为空");
}
$count = db::name("vs_room_luck_value")->where(['room_id'=>$room_id])->count();
$room_host_lists = db::name("vs_room_luck_value")
->where(['room_id'=>$room_id])
->order('createtime desc')
->page($page, $page_limit)->select();
if($room_host_lists){
foreach ($room_host_lists as $key => $value){
$room_host_lists[$key]['send_nickname'] = db::name('user')->where(['id'=>$value['send_uid']])->value('nickname');
$room_host_lists[$key]['send_avatar'] = db::name('user')->where(['id'=>$value['send_uid']])->value('avatar');
$room_host_lists[$key]['send_user_code'] = db::name('user')->where(['id'=>$value['send_uid']])->value('user_code');
$room_host_lists[$key]['recv_nickname'] = db::name('user')->where(['id'=>$value['recv_uid']])->value('nickname');
$room_host_lists[$key]['recv_avatar'] = db::name('user')->where(['id'=>$value['recv_uid']])->value('avatar');
$room_host_lists[$key]['recv_user_code'] = db::name('user')->where(['id'=>$value['recv_uid']])->value('user_code');
$room_host_lists[$key]['gift_name'] = db::name('vs_gift')->where(['gid'=>$value['gift_id']])->value('gift_name');
$room_host_lists[$key]['createtime'] = date('Y-m-d H:i:s', $value['createtime']);
}
}
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
'count' => $count,
'lists' => $room_host_lists
];
return V(1, "成功", $return_data);
}
}

View File

@@ -25,16 +25,18 @@ class SysSet extends adminApi
public $configType = [
'1' => '基础设置',
'2' => '登录设置',
// '2' => '登录设置',
'3' => '支付配置',
'4' => '提现设置',
'5' => '推送及IM配置',
// '5' => '推送及IM配置',
// '6' => '每日任务设置',
'7' => '云存储配置',
'7' => '第三方配置',
'8' => '房间配置',
'9' => '弹窗内容设置',
// '9' => '弹窗内容设置',
'10' => '邀请奖励',
'11' => '二级密码',
'12' => '情侣任务设置',
'13' => '趣味活动中',
];
public $noAdminConfigType = [
'1' => '基础设置',

View File

@@ -105,7 +105,7 @@ class SystemMessage extends adminApi
if($receiving_id){
$data['receiving_id'] = $receiving_id;
}else{
$user_list = db::name('user')->field('id')->select();
$user_list = db::name('user')->where('delete_time',0)->where(['sex'=>['<>',0]])->field('id')->select();
$data['receiving_id'] = implode(',', array_column($user_list, 'id'));
}
if($id){

View File

@@ -146,6 +146,8 @@ class User extends adminApi
$lists[$key]['user_block_time'] = '';
$lists[$key]['mobile_block_time'] = '';
$lists[$key]['ip_block_time'] = '';
//禁用理由
$lists[$key]['user_block_reason'] = '';
if($is_block_user){
$lists[$key]['is_block_user'] = 1;
if($is_block_user['block_time']==0){
@@ -153,6 +155,7 @@ class User extends adminApi
}else{
$lists[$key]['user_block_time'] = date('Y-m-d H:i:s',$is_block_user['block_time']);
}
$lists[$key]['user_block_reason'] = model('Block')->getBanReason()[$is_block_user['ban_eason']];
}
// if($is_block_mobile){
// $lists[$key]['is_block_mobile'] = 1;
@@ -271,14 +274,21 @@ class User extends adminApi
return V(0, "添加失败");
}
//加推送单聊消息
$content = "您的账号因 含有".model('Block')->getBanReason()[$ban_eason] . "内容 于".date('Y-m-d H:i:s',time())." 被封禁".model('Block')->getBanTime()[$ban_day]." ".date('Y-m-d H:i:s',$block_time)."解封,如对处罚有异议请及时联系管理员申诉";
if($block_time){
$content = "您的账号因 含有".model('Block')->getBanReason()[$ban_eason] . "内容 于".date('Y-m-d H:i:s',time())." 被封禁".model('Block')->getBanTime()[$ban_day]." ".date('Y-m-d H:i:s',$block_time)."解封,如对处罚有异议请及时联系管理员申诉";
}else{
$content = "您的账号因 含有".model('Block')->getBanReason()[$ban_eason] . "内容 于".date('Y-m-d H:i:s',time())." 被永久封禁".model('Block')->getBanTime()[$ban_day]." ,请及时联系管理员申诉";
}
$text = [
'MsgType' => 404,
'ToUserId' => $user_id,
'Text' => $content
'Text' => [
'text' => $content
]
];
//谁发送给谁什么消息是否同步到发送者1是2否消息是否只下发给在线用户 1 是0 否
model('api/Tencent')->user_sendmsg("管理员",$user_id,json_encode($text));
model('api/Tencent')->user_sendmsg("administrator",$user_id,json_encode($text),2,1);
}else{
if($type ==1) {
$res = model('User')->where('id', $user_id)->update(['status' => 1]);
@@ -850,6 +860,7 @@ class User extends adminApi
$type = input('type', 1);
$type_text = input('type_text', '');
$block_time = input('block_time', 0);
$ban_eason = input('ban_eason', 0);
$admin_id = Session::get('admin_id');
//插入fa_block 表
$res = Db::name('block')->insert([
@@ -858,10 +869,27 @@ class User extends adminApi
'type_text' => $type_text,
'block_time' => strtotime($block_time),
'createtime' => time(),
'ban_eason' => $ban_eason,
]);
if (!$res) {
return V(0, "添加失败");
}
//1账号, 2设备, 3ip 4禁言
if($type == 1){
$user_id = db::name('user')->where('user_code', $type_text)->value('id');
}
if($type == 2){
$user_id = db::name('user')->where('login_device', $type_text)->value('id');
}
if($type == 3){
$user_id = db::name('user')->where('loginip', $type_text)->value('id');
}
if(isset($user_id)){
$token = db::name('user_token')->where('user_id', $user_id)->value('token');
// 删除这个Token使其失效
TokenLib::delete($token);
}
return V(1,"添加成功", null);
}
/*

View File

@@ -0,0 +1,253 @@
<?php
namespace app\adminapi\model;
use think\Db;
use think\Model;
class Monster extends Model
{
//列表
public function get_monster_list($order, $sort, $page = 1, $limit = 20)
{
$list = db::name('Monster')->order($order, $sort)->page($page, $limit)->select();
$total_num = db::name('Monster')->sum('num');
foreach ($list as $k => &$v) {
$gift_info = db::name('vs_gift')->where('gid', $v['gid'])->find();
$v['gift_name'] = $gift_info['gift_name'];
$v['base_image'] = localpath_to_netpath($gift_info['base_image']);
$v['gift_price'] = $gift_info['gift_price'];
$v['rate'] = round(($v['num']/$total_num), 6) * 100;
$v['rate'] .= '%';
$v['createtime'] = date('Y-m-d H:i:s', $v['createtime']);
$v['updatetime'] = date('Y-m-d H:i:s', $v['updatetime']);
}
$data = [];
$data['count'] = db::name('Monster')->count();
$data['list'] = $list;
return ['code' => 1, 'msg' => '获取成功', 'data' => $data];
}
//获取礼物列表
public function get_gift_list(){
$map = [];
// $map[] = ['gid', 'not in', [36,37,38]];
$map['type'] = ['=', 2];
// $map['label'] = ['=', 18];
$map['is_show'] = ['=',1];
$map['delete_time'] = ['=', 0];
$list = db::name('vs_gift')->where($map)->order('gift_price asc')->select();
$data = [];
$data['count'] = db::name('vs_gift')->where($map)->count();
$data['list'] = $list;
return ['code' => 1, 'msg' => '获取成功', 'data' => $data];
}
//编辑
public function edit_monster($data)
{
if (empty($data)) {
return ['code' => 0, 'msg' => '参数异常', 'data' => null];
}
$monster_info = db::name('Monster')->find($data['id']);
if (empty($monster_info)) {
return ['code' => 0, 'msg' => '参数异常', 'data' => null];
}
$map = [];
$map['gid'] = ['=', $data['gid']];
// $map['type'] = ['=', 1];
$map['is_show'] = ['=',1];
$map['delete_time'] = ['=', 0];
$gift_info = db::name('vs_gift')->where($map)->find();
if(!$gift_info){
return ['code' => 0, 'msg' => '配置礼物不存在', 'data' => null];
}
if($monster_info['multiple'] * 10 != $gift_info['gift_price']){
return ['code' => 0, 'msg' => '配置礼物的价格必须为倍数的10倍', 'data' => null];
}
Db::startTrans();
try {
$update_data = [];
$update_data['type_name'] = $data['type_name'];
if($data['multiple']){
$update_data['multiple'] = $data['multiple'];
}
$update_data['gid'] = $data['gid'];
$update_data['num'] = $data['num'];
$update_data['updatetime'] = time();
$reslut = db::name('Monster')->where(['id' => $data['id']])->update($update_data);
if (!$reslut) {
Db::rollback();
return ['code' => 0, 'msg' => '修改失败', 'data' => null];
}
Db::commit();
return ['code' => 1, 'msg' => '修改成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
dump($e);
Db::rollback();
return ['code' => 0, 'msg' => '修改失败', 'data' => null];
}
}
//获取信息
public function get_monster_info($id)
{
if (empty($id)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$monster_info = db::name('Monster')->where(['id' => $id])->find();
return ['code' => 1, 'msg' => '获取成功', 'data' => $monster_info];
}
//列表
public function get_monster_multiple_list($order, $sort, $page = 1, $limit = 20)
{
$list = db::name('monster_multiple')->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => &$v) {
}
$data = [];
$data['count'] = db::name('monster_multiple')->count();
$data['list'] = $list;
return ['code' => 1, 'msg' => '获取成功', 'data' => $data];
}
//编辑
public function edit_monster_multiple($data)
{
if (empty($data)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$monster_info = db::name('monster_multiple')->find($data['id']);
if (empty($monster_info)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
Db::startTrans();
try {
$update_data = [];
$update_data['multiple'] = $data['multiple'];
$update_data['updatetime'] = time();
$reslut = db::name('monster_multiple')->where(['id' => $data['id']])->update($update_data);
if (!$reslut) {
Db::rollback();
return ['code' => 0, 'msg' => '修改失败', 'data' => null];
}
Db::commit();
return ['code' => 1, 'msg' => '修改成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
dump($e);
Db::rollback();
return ['code' => 0, 'msg' => '修改失败', 'data' => null];
}
}
//获取信息
public function get_monster_multiple_info($id)
{
if (empty($id)) {
return ['code' => 0, 'msg' => '参数异常', 'data' => null];
}
$monster_info = db::name('monster_multiple')->where(['id' => $id])->find();
return ['code' => 1, 'msg' => '获取成功', 'data' => $monster_info];
}
//列表
public function get_monster_log($order, $sort, $page = 1, $limit = 20)
{
$list = db::name('monster_log')->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => &$v) {
$v['type_name'] = '暂未开奖';
$v['gid'] = 0;
$v['gift_name'] = '';
$v['base_image'] = '';
$v['gift_price'] = 0;
if($v['is_delete'] == 2){
$gift_info = db::name('Monster')->alias('a')->join('vs_gift b', 'a.gid = b.gid')->field('b.gid,b.gift_name,b.base_image,b.gift_price,a.type_name')->where('a.type', $v['win_type'])->find();
$v['gid'] = $gift_info['gid'];
$v['gift_name'] = $gift_info['gift_name'];
$v['base_image'] = localpath_to_netpath($gift_info['base_image']);
$v['gift_price'] = $gift_info['gift_price'];
$v['type_name'] = $gift_info['type_name'];
$v['createtime'] = date('Y-m-d H:i:s', $v['createtime']);
$v['updatetime'] = date('Y-m-d H:i:s', $v['updatetime']);
$v['end_time'] = date('Y-m-d H:i:s', $v['end_time']);
}
}
$data = [];
$data['count'] = db::name('monster_log')->count();
$data['list'] = $list;
$totalRowData = db::name('monster_log')->field('count(1) as count,SUM(out_amount) as out_amount,SUM(in_amount) as in_amount')->find();
unset($totalRowData['count']);
$data['totalRow'] = $totalRowData;
return ['code' => 1, 'msg' => '获取成功', 'data' => $data];
}
//列表
public function get_user_monster_log($mid, $order, $sort, $page = 1, $limit = 20)
{
$list = db::name('user_monster_log')->where('mid', $mid)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => &$v) {
$user_info = db::name('user')->where('id', $v['uid'])->field('id,nickname,avatar')->find();
$v['nickname'] = $user_info['nickname'];
$v['avatar'] = localpath_to_netpath($user_info['avatar']);
$v['type_name'] = db::name('Monster')->where('type', $v['type'])->value('type_name');
$v['createtime'] = date('Y-m-d H:i:s', $v['createtime']);
$v['updatetime'] = date('Y-m-d H:i:s', $v['updatetime']);
}
$data = [];
$data['count'] = db::name('user_monster_log')->where('mid', $mid)->count();
$data['list'] = $list;
return ['code' => 1, 'msg' => '获取成功', 'data' => $data];
}
//列表
public function get_user_monster_win_log($mid, $order, $sort, $page = 1, $limit = 20)
{
$list = db::name('user_monster_win_log')->where('mid', $mid)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => &$v) {
$user_info = db::name('user')->where('id', $v['uid'])->field('id,nickname,avatar')->find();
$v['nickname'] = $user_info['nickname'];
$v['avatar'] = localpath_to_netpath($user_info['avatar']);
$v['type_name'] = db::name('Monster')->where('type', $v['win_type'])->value('type_name');
$gift_info = db::name('vs_gift')->where('gid', $v['win_gid'])->field('gid,gift_name,base_image,gift_price')->find();
$v['gift_name'] = $gift_info['gift_name'];
$v['base_image'] = localpath_to_netpath($gift_info['base_image']);
$v['gift_price'] = $gift_info['gift_price'];
$v['createtime'] = date('Y-m-d H:i:s', $v['createtime']);
$v['updatetime'] = date('Y-m-d H:i:s', $v['updatetime']);
}
$data = [];
$data['count'] = db::name('user_monster_win_log')->where('mid', $mid)->count();
$data['list'] = $list;
return ['code' => 1, 'msg' => '获取成功', 'data' => $data];
}
}

View File

@@ -40,7 +40,7 @@ class BlindBoxTurntable extends BaseCom
$num = input('num',1);
$heart_id = input('heart_id',0);
$auction_id = input('auction_id',0);
if(!in_array($gift_bag_id,[10,11,12])){
if(!in_array($gift_bag_id,[10,11,12,61])){
return v(0,'非法活动ID', null);
}
//删除字符串里所有的空格
@@ -144,7 +144,8 @@ class BlindBoxTurntable extends BaseCom
* 1.开启 2.关闭
*/
public function blind_box_status(){
$reslut = model('BlindBoxTurntableGift')->blind_box_status();
$user_id = $this->uid;
$reslut = model('BlindBoxTurntableGift')->blind_box_status($user_id);
return v($reslut['code'], $reslut['msg'], $reslut['data']);
}
}

View File

@@ -0,0 +1,109 @@
<?php
namespace app\api\controller;
use app\common\controller\BaseCom;
use think\Controller;
use think\Db;
/**
* 活动:
* 1.首充好礼
*
*/
class Monster extends BaseCom
{
//初始化
protected function initialize()
{
//允许跨域
header('Access-Control-Allow-Origin: *');
}
//选择金币列表
public function choice_gold_list(){
$reslut = model('Monster')->choice_gold_list();
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//游戏详情
public function get_monster_info(){
$uid = $this->uid;
$reslut = model('Monster')->get_monster_info($uid);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//生成/结算喂养怪兽
public function create_monster_log(){
$uid = $this->uid;
$key_name = "api:Monster:create_monster_log";
redis_lock_exit($key_name);
$reslut = model('Monster')->create_monster_log();
redis_unlock($key_name);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//喂养怪兽
public function open_beat_monster(){
$uid = $this->uid;
$rid = input('rid', 0);
$type = input('type', 0);
$num = input('num', 0);
$key_name = "api:Monster:open_beat_monster:uid:".$uid;
redis_lock_exit($key_name);
$reslut = model('Monster')->open_beat_monster($uid, $rid, $type, $num);
redis_unlock($key_name);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//规则
public function get_monster_note(){
$reslut = model('Monster')->get_monster_note();
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//奖池
public function get_monster_box_list(){
$reslut = model('Monster')->get_monster_box_list();
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//开奖记录
public function get_monster_log(){
$uid = $this->uid;
$page = input('page', 1);
$page_limit = input('page_limit', 20);
$reslut = model('Monster')->get_monster_log($uid, $page, $page_limit);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//我的记录
public function get_user_monster_log(){
$uid = $this->uid;
$page = input('page', 1);
$page_limit = input('page_limit', 20);
$reslut = model('Monster')->get_user_monster_log($uid, $page, $page_limit);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//中奖次数榜单
public function get_monster_winner_num_list(){
$uid = $this->uid;
$time = input('time', 1);
$reslut = model('Monster')->get_monster_winner_num_list($uid, $time);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
//设置房间期数开关
public function operate_room_monster_show_status(){
$uid = $this->uid;
$rid = input('rid', 0);
$is_show_monster_push = input('is_show_monster_push', 1);
$reslut = model('Monster')->operate_room_monster_show_status($uid, $rid, $is_show_monster_push);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
}

View File

@@ -39,7 +39,7 @@ class Nobility extends BaseCom
public function buy_nobility(){
$lid = input('lid', 0);
$uid = input('uid', $this->uid);
$reslut = model('Nobility')->buyNobility($uid,$lid);
$reslut = model('Nobility')->buyNobility($uid,$lid,$is_send);
return V($reslut['code'],$reslut['msg'], null);
}
}

View File

@@ -31,9 +31,12 @@ class SendGift extends BaseCom
}
//获取幸运币
$pool_gift_id = db::name('bb_lottery_config')->where(['key' => 'pool_gift_id'])->value('value');
if($gift_id == $pool_gift_id){//送的是幸运币
$reslut = model('Lottery')->gift($this->uid, $to_uid, $gift_id, $room_id,$gift_num);
$pool_gift_ids = Db::name('bb_lottery_config')->column('value', 'key');
//转成数组
$pool_gift_id_arr = [$pool_gift_ids['pool_gift_id']??0,$pool_gift_ids['pool_gift_id_5']??0,$pool_gift_ids['pool_gift_id_10']??0];
if(in_array($gift_id, $pool_gift_id_arr)){//送的是幸运币
$reslut = model('Lottery')->gift($this->uid, $to_uid, $gift_id, $room_id,$gift_num,$pool_gift_ids);
redis_unlocks($key_name);
return V($reslut['code'], $reslut['msg'], $reslut['data']);
}else{

View File

@@ -31,7 +31,7 @@ class Xintiao extends BaseCom
]);
}
//查询房间是否热门房间
$is_hot_room = db::name('vs_room')->where(['id' => $room_id,'is_hot' => 1])->find();
$is_hot_room = db::name('vs_room')->where(['id' => $room_id,'is_hot' => 2])->find();
if($is_hot_room){
//任务18-每日在线时长 5 分钟
model('Tasks')->tasks_complete($user_id,18);

View File

@@ -23,18 +23,18 @@ class BlindBoxTurntableGift extends Model
public function get_gift_list($gift_bag_id,$room_id)
{
$box = db::name('vs_gift_bag')->where('id',$gift_bag_id)->find();
$gifts = db::name('vs_gift_bag_detail')->where('gift_bag_id',$gift_bag_id)->order("id desc")->select();
$gifts = db::name('vs_gift_bag_detail')->alias('a')
->field('a.*,aa.gid,aa.gift_name,aa.base_image,aa.play_image,aa.gift_price')
->join('vs_gift aa','a.foreign_id = aa.gid')
->where('gift_bag_id',$gift_bag_id)->order("gift_price desc")->select();
$gift_list = [];
foreach ($gifts as $key => $value) {
$gift_data = db::name('vs_gift')->where('gid',$value['foreign_id'])->where('delete_time',0)->find();
if($gift_data){
$gift_list[$key]['number'] = $key;
$gift_list[$key]['gift_id'] = $gift_data['gid'];
$gift_list[$key]['gift_name'] = $gift_data['gift_name'];
$gift_list[$key]['base_image'] = $gift_data['base_image'];
$gift_list[$key]['play_image'] = $gift_data['play_image'];
$gift_list[$key]['gift_price'] = $gift_data['gift_price'];
}
$gift_list[$key]['number'] = $key;
$gift_list[$key]['gift_id'] = $value['gid'];
$gift_list[$key]['gift_name'] = $value['gift_name'];
$gift_list[$key]['base_image'] = $value['base_image'];
$gift_list[$key]['play_image'] = $value['play_image'];
$gift_list[$key]['gift_price'] = $value['gift_price'];
}
$ext = json_decode($box['ext'],true);
$box_gift = Db::name('vs_gift')->where('gid',$ext['gift_id'])->find();
@@ -464,10 +464,32 @@ class BlindBoxTurntableGift extends Model
}
//盲盒转盘开启状态
public function blind_box_status(){
$gift_bag_ids = [11,12];
public function blind_box_status($user_id=0){
$gift_bag_ids = [11,12,60,61];
$gift_bag = db::name('vs_gift_bag')->where(['id'=>['in',$gift_bag_ids]])->select();
$open_monster_status = get_system_config_value('open_monster_status');
$fun_activities_recharge_restrictions = get_system_config_value('fun_activities_recharge_restrictions');
if($fun_activities_recharge_restrictions ==0){
return ['code' => 0, 'msg' => '趣味活动关闭', 'data' => null];
}
//用户充值金额
$user_recharge_money = db::name('vs_user_recharge')->where(['user_id'=>$user_id,'pay_status'=>2])->sum('money');
//内测用户
//先从cache中获取
$inside_uid = Cache::get('inside_uid');
if(!$inside_uid){
$inside_uid = get_system_config_value('inside_uid');
//缓存 并设置缓存时间
Cache::set('inside_uid',$inside_uid,3600);
}
$inside_uid = explode(',',$inside_uid);
if(($user_recharge_money < $fun_activities_recharge_restrictions) && !in_array($user_id,$inside_uid)){
return ['code' => 0, 'msg' => '充值金额不足', 'data' => null];
}
foreach ($gift_bag as $bag){
if($bag['id']==60 && $open_monster_status ==0){
$bag['status'] = 0;
}
if($bag['status'] == 1){
$result_data[] = [
'gift_bag_id' => $bag['id'],

View File

@@ -38,6 +38,10 @@ class BlindBoxTurntableGiftDrawWorldNew extends Model
public function draw_gift(int $gift_bag_id, int $user_id, string $gift_user_ids, $num = 1, $room_id = 0, $heart_id = 0, $auction_id = 0)
{
try {
$bag_data = db::name("vs_gift_bag")->field('id,status')->where('id', $gift_bag_id)->find();
if($bag_data['status']==0){ //其他转盘游戏
return ['code' => 0, 'msg' => '游戏已关闭', 'data' => null];
}
// 收礼人
$gift_user_ids = explode(',', $gift_user_ids);
$total_num = $num * count($gift_user_ids); //总数量
@@ -1074,9 +1078,13 @@ class BlindBoxTurntableGiftDrawWorldNew extends Model
{
$resultList = [];
foreach ($giftCounts as $gift) {
$gift_data = Db::name('vs_gift')->where(['gid'=>$gift['gift_id']])->find();
$resultList[] = [
'gift_id' => $gift['gift_id'],
'count' => $gift['count']
'count' => $gift['count'],
'gift_price' => $gift_data['gift_price'],
'gift_name' => $gift_data['gift_name'],
'base_image' => $gift_data['base_image'],
];
}
return [
@@ -1105,6 +1113,10 @@ class BlindBoxTurntableGiftDrawWorldNew extends Model
return ['code' => 0, 'msg' => '用户不在房间,无法获取房主信息', 'data' => null];
}
$gift_bag_id = 13;
$bag_data = db::name("vs_gift_bag")->field('id,status')->where('id', $gift_bag_id)->find();
if($bag_data['status']==0){ //其他转盘游戏
return ['code' => 0, 'msg' => '游戏已关闭', 'data' => null];
}
// 1. 获取并缓存盲盒配置
$ext = $this->getCachedGiftBag($gift_bag_id); //获取转盘信息
$bag_gift_price = $ext['xlh_box_price'] * $num;
@@ -1536,6 +1548,18 @@ class BlindBoxTurntableGiftDrawWorldNew extends Model
public function draw_gift_drop_bag($gift_bag_id, $user_id, $num = 1, $room_id = 0)
{
try {
$open_monster_status = get_system_config_value('open_monster_status');
$fun_activities_recharge_restrictions = get_system_config_value('fun_activities_recharge_restrictions');
if($fun_activities_recharge_restrictions == 0){
return ['code' => 0, 'msg' => '趣味活动关闭', 'data' => null];
}
if($gift_bag_id ==60 && $open_monster_status ==0){ //恋仙传说
return ['code' => 0, 'msg' => '游戏已关闭', 'data' => null];
}
$bag_data = db::name("vs_gift_bag")->field('id,status')->where('id', $gift_bag_id)->find();
if(in_array($gift_bag_id,[11,12,61]) && $bag_data['status']==0){ //其他转盘游戏
return ['code' => 0, 'msg' => '游戏已关闭', 'data' => null];
}
// 参数验证
$validation_result = $this->validateDrawParams($gift_bag_id, $user_id, $num);
if ($validation_result['code'] !== 1) {

View File

@@ -647,6 +647,24 @@ class Decorate extends Model
'end_time' => date('Y-m-d H:00:00', time()),
'createtime' => time()
]);
//推送消息
$FromUserInfo = db::name('user')->where(['id' => $uid])->find();
$text1 = $FromUserInfo['nickname'] . ' 在本房间使用了房间热度卡 提升房间'.$increase_hot_value.'热度';
$text = [
'FromUserInfo' => $FromUserInfo,
'ToUserInfo' => null,
'GiftInfo' => [
'gift_id' => 0,
'gift_name' => '房间热度卡',
'gift_icon' => "",
'play_image' => "",
'base_image' => db::name('vs_decorate')->where(['did' => $info['did']])->value('base_image'),
],
'gift_num' => $num,
'text' => $text1
];
//聊天室推送系统消息
model('Chat')->sendMsg(1005,$room_id,$text);
}else{
$map = [
'user_id' => $uid,
@@ -688,6 +706,24 @@ class Decorate extends Model
'end_time' => date('Y-m-d H:00:00', time()),
'createtime' => time()
]);
//推送消息
$FromUserInfo = db::name('user')->where(['id' => $uid])->find();
$text1 = $FromUserInfo['nickname'] . ' 在本房间使用了房间热度卡 提升房间'.$increase_hot_value_all.'热度';
$text = [
'FromUserInfo' => $FromUserInfo,
'ToUserInfo' => null,
'GiftInfo' => [
'gift_id' => 0,
'gift_name' => '房间热度卡',
'gift_icon' => "",
'play_image' => "",
'base_image' => db::name('vs_decorate')->where(['did' => $info['did']])->value('base_image'),
],
'gift_num' => $num,
'text' => $text1
];
//聊天室推送系统消息
model('Chat')->sendMsg(1005,$room_id,$text);
}
// 提交事务
Db::commit();

View File

@@ -135,8 +135,11 @@ class Gift extends Model
}
}
//爆币
$pool_gift_id = db::name('bb_lottery_config')->where(['key' => 'pool_gift_id'])->value('value');
if($pool_gift_id == $v['gift_id']){
$pool_gift_id_arr[] = db::name('bb_lottery_config')->where(['key' => 'pool_gift_id'])->value('value');
$pool_gift_id_arr[] = db::name('bb_lottery_config')->where(['key' => 'pool_gift_id_5'])->value('value');
$pool_gift_id_arr[] = db::name('bb_lottery_config')->where(['key' => 'pool_gift_id_10'])->value('value');
if(in_array($v['gift_id'],$pool_gift_id_arr)){
$v['gift_bag_name'] = "幸运币活动";
$v['rule'] = "幸运羽币";
$v['rule_url'] = get_system_config_value('web_site')."/api/Page/page_show?id=35";

View File

@@ -4,6 +4,8 @@ namespace app\api\model;
use app\common\controller\Push;
use app\common\service\LotteryService;
use app\common\service\LotteryService5;
use app\common\service\LotteryService10;
use think\Db;
use think\Exception;
use think\Log;
@@ -15,7 +17,7 @@ class Lottery extends Model
* 送礼参与抽奖接口
* @return json
*/
public function gift($send_uid, $recv_uid,$gift_id, $room_id, $num)
public function gift($send_uid, $recv_uid, $gift_id, $room_id, $num, $pool_gift_ids)
{
if (ceil($num) != $num) {
return ['code' => 0, 'msg' => '打赏礼物数量必须为整数', 'data' => null];
@@ -65,6 +67,18 @@ class Lottery extends Model
$lucky_rate = db::name('bb_lottery_config')->where(['key' => 'lucky_rate'])->value('value');
$recv_coin = round($gift_price * $lucky_rate / 100, 2);
$small_pool = $gift_price - $recv_coin;
if($gift_id == $pool_gift_ids['pool_gift_id_5']){
$table = 'bb_lottery_gift_record_5';
$poole_type = 5;
}elseif($gift_id == $pool_gift_ids['pool_gift_id_10']){
$table = 'bb_lottery_gift_record_10';
$poole_type = 10;
}else{
$table = 'bb_lottery_gift_record';
$poole_type = 1;
}
foreach ($toarray as $k => $to_id){
// 1. 记录礼物赠送
$giftRecord = [
@@ -77,7 +91,7 @@ class Lottery extends Model
'create_time' => time(),
'remark' => '幸运币收益率'.$lucky_rate.'%'
];
$giftId = Db::name('bb_lottery_gift_record')->insertGetId($giftRecord);
$giftId = Db::name($table)->insertGetId($giftRecord);
//收礼记录行为日志
$give_gift = model('api/SendGift')->change_user_give_gift_logs($send_uid,$gift_id,$gift_price,$num,$to_id,2,1,0,'送幸运币');
@@ -121,7 +135,7 @@ class Lottery extends Model
//计算爆币
$nums = $num * count($toarray);
$ress = $this->lottery($send_uid,$gift_info['gift_price'],$nums,$room_id,$gift_id,$FromUserInfo,$gift_info);
$ress = $this->lottery($send_uid,$gift_info['gift_price'],$nums,$room_id,$gift_id,$FromUserInfo,$gift_info,$poole_type);
if($ress['code'] == 0){
return ['code' => 0, 'msg' => $ress['msg'], 'data' => null];
}
@@ -131,12 +145,24 @@ class Lottery extends Model
//抽奖(不带大奖池)
public function lottery($send_uid,$gift_price,$num,$room_id,$giftId,$fromUserInfo=null,$gift_info=null)
public function lottery($send_uid,$gift_price,$num,$room_id,$giftId,$fromUserInfo=null,$gift_info=null,$poole_type = 1)
{
$small_prize_play_image = db::name('bb_lottery_config')->where(['key' => 'small_prize_play_image'])->value('value');
try {
$gift_gold = $gift_price;
$service = new LotteryService();
if($poole_type == 5){
$text = '中级';
$small_prize_play_image = db::name('bb_lottery_config')->where(['key' => 'big_prize_play_image'])->value('value');
$service = new LotteryService5();
}elseif($poole_type == 10){
$text = '高级';
$small_prize_play_image = db::name('bb_lottery_config')->where(['key' => 'gao_prize_play_image'])->value('value');
$service = new LotteryService10();
}else{
$text = '初级';
$small_prize_play_image = db::name('bb_lottery_config')->where(['key' => 'small_prize_play_image'])->value('value');
$service = new LotteryService();
}
for($i=0;$i<$num;$i++){
$reslut = $service->handleGift($send_uid, $gift_gold, $giftId);
if ($reslut['code'] == 1) {
@@ -146,13 +172,13 @@ class Lottery extends Model
//不做处理
} else {//开奖
$beilv = floor($result['small_prize_amount'] / $gift_price);
$small_prize_amount = floor($result['small_prize_amount']);
$small_prize_amount = floor($result['small_prize_amount'] / $gift_price) * $gift_price;
$wallet_update = model('api/UserWallet')->change_user_cion_log($send_uid,$small_prize_amount,$room_id,58,'参与幸运币活动获得'.$beilv.'倍');
if(!$wallet_update){
return ['code' => 0, 'msg' => '流水记录失败', 'data' => null];
}
$tet['text'] = '恭喜用户'.$fromUserInfo['nickname'].'在幸运币活动中获得幸运币'.$beilv.'倍';
$tet['text'] = '恭喜用户'.$fromUserInfo['nickname'].'在'.$text.'幸运币活动中获得幸运币'.$beilv.'倍';
$tet['type'] = 2;
$tet['beilv'] = $beilv;
$tet['play_image'] = $small_prize_play_image;
@@ -162,7 +188,7 @@ class Lottery extends Model
$push = new Push($send_uid, $room_id);
$room_name = Db::name('vs_room')->where(['id' => $room_id, 'apply_status' => 2])->value('room_name');
$text = '恭喜'.$fromUserInfo['nickname'] . '在' . $room_name . '房间获得幸运币'. $beilv . '倍';
$text = '恭喜'.$fromUserInfo['nickname'] . '在' . $room_name . '房间获得'.$text.'幸运币'. $beilv . '倍';
$text_list_new[] = [
'text' => $text,
'gift_picture' => $gift_info['base_image'],

View File

@@ -0,0 +1,730 @@
<?php
namespace app\api\model;
use app\common\controller\Push;
use think\Db;
use think\Model;
class Monster extends Model
{
// 开启自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
public static function init()
{
self::beforeWrite(function ($row) {
});
}
//选择金币列表
public function choice_gold_list(){
$list = db::name('monster_multiple')->field('multiple')->select();
$data = [];
$data['list'] = $list;
return ['code' => 1, 'msg' => '获取成功', 'data' => $data];
}
//游戏详情
public function get_monster_info($uid){
$config = get_system_config();
$user_info = db::name('user_wallet_coin')->where('user_id', $uid)->field('id,coin')->find();
if(!$user_info){
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
}
$now_time = time();
$data = [];
$data['surplus_time'] = 0;
$data['is_finsh'] = 3;
$data['win_number'] = 0;
// $data['list'] = [];
$data['open_monster_price'] = $config['open_monster_price'];
$data['integral'] = $user_info['coin'];
$data['multiple_list'] = db::name('monster')->field('id,type,type_name,multiple')->order('id asc')->select();
foreach ($data['multiple_list'] as $a => &$b){
$b['num'] = 0;
}
//当前是否有开放该活动
$monster_log = db::name('monster_log')->order('id desc')->limit(1)->find();
if(empty($monster_log)){
return ['code' => 0, 'msg' => '获取成功', 'data' => $data];
}else{
if($monster_log['end_time'] <= $now_time){
$is_finish = 1;
$data['win_number'] = $monster_log['win_type'];
}else{
$is_finish = 2;
$data['surplus_time'] = $monster_log['end_time'] - $now_time;
}
$data['is_finsh'] = $is_finish;
foreach ($data['multiple_list'] as $a => &$b){
$user_monster_feed_log = db::name('user_monster_log')->where('uid', $uid)->where('mid', $monster_log['id'])->where('type', $b['type'])->find();
if(!empty($user_monster_feed_log)){
$b['num'] = $user_monster_feed_log['num'];
}
}
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $data];
}
//生成当前国王游戏期数
public function create_monster_log(){
set_time_limit(0);
ini_set('memory_limit', '1024M');
$config = get_system_config();
$now_time = time();
$is_push = 5;//不推送
Db::startTrans();
try {
$map = [];
$map['is_delete'] = 1;
$monster_log = db::name('monster_log')->where($map)->find();
if($monster_log){//当前有未结束的国王游戏期数
if($now_time >= $monster_log['end_time']){
$key_name = "api:monster:create_monster_log:id".$monster_log['id'];
$redis_order_sn = redis_lock_exits($key_name,1,7);
if(!$redis_order_sn){
return ['code' => 0, 'msg' => '请重试1', 'data' => null];
}
$win_type = $monster_log['win_type'];
$in_amount = 0;
$win_type = $this->check_win_type_is_loss($win_type, $monster_log);
$win_gift_info = db::name('vs_gift')->alias('a')->join('monster b', 'a.gid = b.gid')->where('b.type', $win_type)->field('a.gid,a.gift_name,a.gift_price,a.base_image,b.multiple')->find();
if(!$win_gift_info){
Db::rollback();
return ['code' => 0, 'msg' => '为配置礼物', 'data' => null];
}
//获取得奖用户ID
$map = [];
$map['mid'] = $monster_log['id'];
$part_user_array = db::name('user_monster_log')->where($map)->group('uid')->column('uid');
$map['type'] = $win_type;
$user_array = db::name('user_monster_log')->where($map)->group('uid')->column('uid');
if(!empty($user_array)){
//有获奖用户
$insert_all = [];
foreach ($user_array as $a => $b){
$map = [];
$map['mid'] = $monster_log['id'];
$map['uid'] = $b;
$map['type'] = $win_type;
$user_monster_log = db::name('user_monster_log')->where($map)->find();
$wim_num = floor($user_monster_log['price'] * $win_gift_info['multiple'] / $win_gift_info['gift_price']);
$in_amount += $win_gift_info['gift_price'] * $wim_num;
//礼物送到背包
if($wim_num > 0){
$reslut = model('api/UserGiftPack')->change_user_gift_pack($b, $win_gift_info['gid'], $wim_num, model('UserGiftPack')::LY_DRAW_GIFT_GET, '炼仙传说中奖获取');
if($reslut['code'] == 0){
Db::rollback();
return ['code' => 0, 'msg' => $reslut['msg'], 'data' => null];
}
}
//用户中奖信息
$insert = [];
$insert['uid'] = $b;
$insert['rid'] = $user_monster_log['rid'];
$insert['mid'] = $monster_log['id'];
$insert['win_type'] = $win_type;
$insert['win_gid'] = $win_gift_info['gid'];
$insert['price'] = $user_monster_log['price'];
$insert['num'] = $wim_num;
$insert['createtime'] = time();
$insert_all[] = $insert;
}
$reslut = db::name('user_monster_win_log')->insertAll($insert_all);
if(!$reslut){
Db::rollback();
return ['code' => 0, 'msg' => '请重试2', 'data' => null];
}
}
//结束当前抽卡期数
$update = [];
$update['win_type'] = $win_type;
$update['in_amount'] = $in_amount;
$update['is_delete'] = 2;
$update['updatetime'] = time();
$reslut = db::name('monster_log')->where('id', $monster_log['id'])->update($update);
if(!$reslut){
Db::rollback();
return ['code' => 0, 'msg' => '请重试3', 'data' => null];
}
$is_push = 2;
}
}else{//当前未有国王游戏期数
if($config['open_monster_status'] != 1){
Db::rollback();
return ['code' => 0, 'msg' => '游戏已关闭', 'data' => null];
}
//距离上次多长时间
$map = [];
$map['is_delete'] = 2;
$last_monster_log = db::name('monster_log')->where($map)->order('id desc')->limit(1)->find();
if($last_monster_log){
// $interval_time = $last_monster_log['end_time'] + 10 + $config['end_interval_time'];
$interval_time = time() - $last_monster_log['end_time'];
if($interval_time < $config['end_interval_time']){
Db::rollback();
return ['code' => 0, 'msg' => '距离上次结束尚未超过'.$config['end_interval_time'].'秒', 'data' => null];
}
}
//当前国王游戏配置信息
$monster_list = db::name('monster')->order('id asc')->select();
$monster_data = '';
$total_num = 0;
$win_number_data = [];
foreach ($monster_list as $a => $b){
$da = $b['id'].'-'.$b['gid'].'-'.$b['num'].';';
$monster_data .= $da;
$total_num += $b['num'];
for($i = 0; $i < $b['num']; $i++){
$win_number_data[] = $b['id'];
}
}
shuffle($win_number_data);
$win_key = array_rand($win_number_data);
//随机抽取中奖数字
$win_type = $win_number_data[$win_key];
//生成最新
$insert = [];
$insert['win_type'] = $win_type;
$insert['total_num'] = $total_num;
$insert['config_text'] = $monster_data;
$insert['createtime'] = $now_time;
$insert['end_time'] = $now_time + $config['monster_count_down_time'];
$reslut = db::name('monster_log')->insert($insert);
if(!$reslut){
Db::rollback();
return ['code' => 0, 'msg' => '生成失败', 'data' => null];
}
$is_push = 1;//开启推送
}
Db::commit();
if($is_push == 1){
$push_feed_monster_data = $this->get_new_feed_monster_info();
$push_data = [];
$push_data['code'] = 3031;
$push_data['msg'] = "探索开始播报";
$push_data['data'] = $push_feed_monster_data;
// 推送
$push = new Push();
$push->xianxuan($push_data);
}else if($is_push == 2){
$push_feed_monster_data = $this->get_new_feed_monster_info();
$push_feed_monster_data['win_count'] = count($user_array);
$push_feed_monster_data['game_name'] = '国王游戏';
$push_feed_monster_data['win_type_name'] = db::name('monster')->where('type', $win_type)->value('type_name');
$push_feed_monster_data['gift_name'] = $win_gift_info['gift_name'];
$push_feed_monster_data['num'] = 0;
$push_feed_monster_data['total_gift_price'] = 0;
$push_feed_monster_data['is_push_message'] = 2;
$push_feed_monster_data['base_image'] = localpath_to_netpath($win_gift_info['base_image']);
// if(!empty($part_user_array)){
// foreach ($part_user_array as $k => $v){
// $push_user_monster_data = [];
// $push_user_monster_data['win_type'] = $win_type;
// $push_user_monster_data['type_name'] = db::name('monster')->where('type', $win_type)->value('type_name');
// //是否中奖
// $map = [];
// $map['mid'] = $monster_log['id'];
// $map['uid'] = $v;
// $user_win_info = db::name('user_monster_win_log')->where($map)->find();
// if($user_win_info){//中奖
// $push_user_monster_data['is_win'] = 1;
// $push_user_monster_data['gid'] = $win_gift_info['gid'];
// $push_user_monster_data['gift_name'] = $win_gift_info['gift_name'];
// $push_user_monster_data['base_image'] = localpath_to_netpath($win_gift_info['base_image']);
// $push_user_monster_data['gift_price'] = $win_gift_info['gift_price'];
// $push_user_monster_data['num'] = $user_win_info['num'];
// $push_user_monster_data['total_gift_price'] = $win_gift_info['gift_price'] * $user_win_info['num'];
// $push_feed_monster_data['num'] += $user_win_info['num'];
// $push_feed_monster_data['total_gift_price'] += $push_user_monster_data['total_gift_price'];
// }else{//未中奖
// $push_user_monster_data['is_win'] = 2;
// $push_user_monster_data['gid'] = 0;
// $push_user_monster_data['gift_name'] = '';
// $push_user_monster_data['base_image'] = '';
// $push_user_monster_data['gift_price'] = 0;
// $push_user_monster_data['num'] = 0;
// }
//
// $push_data = [];
// $push_data['code'] = 3032;
// $push_data['msg'] = "抽卡个人结束播报";
// $push_data['data'] = $push_user_monster_data;
// $push = new Push();
// $push->xianxuan($push_data);
// // error_log(date('Y-m-d H:i:s').'_'.$v.'_'.$reslut."\r\n", 3, '1111.txt');
// }
// }
$push_feed_monster_data['num'] = db::name('user_monster_win_log')->where(['mid'=>$monster_log['id']])->sum('num');
if($push_feed_monster_data['num'] > 0){
$push_feed_monster_data['is_push_message'] = 1;
$push_feed_monster_data['total_gift_price'] = $win_gift_info['gift_price'] * $push_feed_monster_data['num'];
}
$push_data = [];
$push_data['code'] = 3033;
$push_data['msg'] = "探索结束播报";
$push_data['data'] = $push_feed_monster_data;
$push = new Push();
$push->xianxuan($push_data);
// $close_data = $this->get_close_monster_win_log();
// $push_colse_data = [];
// $push_colse_data['code'] = 3034;
// $push_colse_data['msg'] = "国王游戏结束播报";
// $push_colse_data['data'] = $close_data;
// model('api/WebSocketPush')->send_to_all($push_colse_data);
}
return ['code' => 1, 'msg' => '成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
dump($e);
Db::rollback();
return ['code' => 0, 'msg' => '失败', 'data' => null];
}
}
//是否修改中奖类型
public function check_win_type_is_loss($win_type, $monster_log){
$config = get_system_config();
//当前亏损数值是否大于
$map = [];
$map['is_delete'] = 2;
$map['out_amount'] = ['>', 0];
$now_monster_out_amount = db::name('monster_log')->where($map)->sum('out_amount');//投入
$now_monster_in_amount = db::name('monster_log')->where($map)->sum('in_amount');//产出
//获取得奖用户ID
$map = [];
$map['mid'] = [ '=', $monster_log['id']];
$map['type'] = ['=', $win_type];
$user_array = db::name('user_monster_log')->where($map)->group('uid')->column('uid');
if(!empty($user_array)){
$wim_monster = db::name('monster')->where('type', $win_type)->find();
$in_amount = 0;
foreach ($user_array as $a => $b){
$map = [];
$map['mid'] = ['=', $monster_log['id']];
$map['uid'] = ['=', $b];
$map['type'] = ['=', $win_type];
$user_monster_log = db::name('user_monster_log')->where($map)->find();
//中奖金额
$win_price = $user_monster_log['price'] * $wim_monster['multiple'];
$in_amount += $win_price;
}
$profit = ($now_monster_in_amount + $in_amount) - ($now_monster_out_amount + $monster_log['out_amount']);
if($profit > $config['monster_max_loss_price']){//亏损大于3w
$type_price_1 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 1)->sum('price');
$win_type_amount_1 = $type_price_1 * 2;
$type_price_2 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 2)->sum('price');
$win_type_amount_2 = $type_price_2 * 4;
$type_price_3 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 3)->sum('price');
$win_type_amount_3 = $type_price_3 * 6.5;
$type_price_4 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 4)->sum('price');
$win_type_amount_4 = $type_price_4 * 10;
$type_price_5 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 5)->sum('price');
$win_type_amount_5 = $type_price_5 * 15;
$type_price_6 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 6)->sum('price');
$win_type_amount_6 = $type_price_6 * 20;
// $type_price_6 = db::name('user_monster_log')->where('mid', $monster_log['id'])->where('type', 6)->sum('price');
// $win_type_amount_6 = $type_price_6 * 50;
// $win_type_amount_arr = [$win_type_amount_1, $win_type_amount_2, $win_type_amount_3, $win_type_amount_4, $win_type_amount_5, $win_type_amount_6];
$win_type_amount_arr = [$win_type_amount_1, $win_type_amount_2, $win_type_amount_3, $win_type_amount_4, $win_type_amount_5, $win_type_amount_6];
// $win_type_amount_arr = [$win_type_amount_1, $win_type_amount_2, $win_type_amount_3, $win_type_amount_4];
$win_type_min = min($win_type_amount_arr);
// if($win_type_amount_4 == $win_type_min && $win_type_amount_3 == $win_type_min && $win_type_amount_2 == $win_type_min && $win_type_amount_1 == $win_type_min){
// $win_type = rand(1,4);
// }else
if($win_type_amount_1 == $win_type_min){
$win_type = 1;
}else if($win_type_amount_2 == $win_type_min){
$win_type = 2;
}else if($win_type_amount_3 == $win_type_min){
$win_type = 3;
}else if($win_type_amount_4 == $win_type_min){
$win_type = 4;
}else if($win_type_amount_5 == $win_type_min){
$win_type = 5;
}else if($win_type_amount_6 == $win_type_min){
$win_type = 6;
}
}
}
return $win_type;
}
//当前最新探索信息
public function get_new_feed_monster_info(){
$now_time = time();
$data = [];
$data['surplus_time'] = 0;
$data['is_finsh'] = 3;
$data['win_number'] = 0;
// $data['list'] = [];
$data['multiple_list'] = db::name('monster')->field('id,type,type_name,multiple')->order('id asc')->select();
//当前是否有开放该活动
$monster_log = db::name('monster_log')->order('id desc')->limit(1)->find();
if(empty($monster_log)){
return $data;
}else{
if($monster_log['end_time'] <= $now_time){
$is_finish = 1;
$data['win_number'] = $monster_log['win_type'];
}else{
$is_finish = 2;
$data['surplus_time'] = $monster_log['end_time'] - $now_time;
}
$data['is_finsh'] = $is_finish;
}
//当前参与用户探索列表
// $list = db::name('user_monster_feed_log')->alias('a')->join('yy_user b', 'a.uid = b.uid')->join('yy_monster c', 'a.type = c.type')->where('a.mid', $monster_log['id'])->field('a.id,b.uid,b.nick_name,b.base64_nick_name,b.head_pic,c.type_name,a.price')->order('a.id desc')->select();
// foreach ($list as $k => &$v){
// $v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
// $v['head_pic'] = localpath_to_netpath($v['head_pic']);
// }
// $data['list'] = $list;
return $data;
}
//国王游戏
public function open_beat_monster($uid, $rid, $type, $num){
$user_info = db::name('user_wallet_coin')->where('user_id', $uid)->field('id,coin')->find();
if(!$user_info){
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
}
$config = get_system_config();
$now_time = time();
$monster = db::name('monster')->where('type', $type)->find();
if(!$monster){
return ['code' => 0, 'msg' => '当前类型不存在', 'data' => null];
}
//
$map = [];
$map['end_time'] = ['>', time()];
$map['is_delete'] = 1;
$monster_log = db::name('monster_log')->where($map)->find();
if(!$monster_log){
return ['code' => 0, 'msg' => '请等待新一轮开启', 'data' => null];
}else{
$surplus_time = $monster_log['end_time'] - 5;
if($surplus_time < time()){
return ['code' => 0, 'msg' => '最后五秒内无法参与', 'data' => null];
}
}
if($num < 1){
return ['code' => 0, 'msg' => '次数不能小于1', 'data' => null];
}
//该星途已探索多少次数
$map = [];
$map['mid'] = $monster_log['id'];
$map['uid'] = $uid;
$user_type_num = db::name('user_monster_log')->where($map)->column('type');
$map['type'] = $type;
$user_monster_num = db::name('user_monster_log')->where($map)->sum('num');
if($user_monster_num > 0){
if($user_monster_num + $num > $config['open_monster_max_num']){
return ['code' => 0, 'msg' => '该玩法次数已达上限', 'data' => null];
}
}else{
if($num > $config['open_monster_max_num']){
return ['code' => 0, 'msg' => '该玩法次数已达上限', 'data' => null];
}
}
$user_monster_log = db::name('user_monster_log')->where($map)->find();
if(count($user_type_num) >= 6 && !in_array($type, $user_type_num)){
return ['code' => 0, 'msg' => '玩法类型不能大于六个', 'data' => null];
}
// $open_monster_ticket = $config['open_monster_ticket'];
// $pay_ticket = $num * $open_monster_ticket;
// if($user_info['had_ticket_num'] < $pay_ticket){
// return ['code' => 201, 'msg' => '用户剩余门票数不足', 'data' => null];
// }
$money = $num * $config['open_monster_price'];
if($user_info['coin'] < $money){
return ['code' => 0, 'msg' => '金币不足', 'data' => null];
}
Db::startTrans();
try {
//扣除用户金币
$reslut = model('common/UserWallet')->change_user_money($uid, $money, 1, model('common/UserWallet')::LINGXIAN_TRADITION_LOTTERY_COIN,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::LINGXIAN_TRADITION_LOTTERY_COIN));
if ($reslut['code'] != 1) {
Db::rollback();
return ['code' => 0, 'msg' => $reslut['msg'], 'data' => null];
}
//是否探索过
if($user_monster_log){//已探索则继续
$update = [];
$update['updatetime'] = time();
$reslut = db::name('user_monster_log')->where('id', $user_monster_log['id'])->inc('num', $num)->inc('price', $money)->update($update);
if(!$reslut){
Db::rollback();
return ['code' => 0, 'msg' => '请重试', 'data' => null];
}
}else{//未探索则探索
$insert = [];
$insert['uid'] = $uid;
$insert['rid'] = $rid;
$insert['mid'] = $monster_log['id'];
$insert['type'] = $type;
$insert['num'] = $num;
$insert['price'] = $money;
$insert['createtime'] = time();
$reslut = db::name('user_monster_log')->insert($insert);
if(!$reslut){
Db::rollback();
return ['code' => 0, 'msg' => '请重试', 'data' => null];
}
}
//用户探索记录表
$insert_data = [];
$insert_data['uid'] = $uid;
$insert_data['rid'] = $rid;
$insert_data['mid'] = $monster_log['id'];
$insert_data['type'] = $type;
$insert_data['num'] = $num;
$insert_data['price'] = $money;
$insert_data['createtime'] = time();
$fid = db::name('user_monster_feed_log')->insertGetId($insert_data);
if(!$fid){
Db::rollback();
return ['code' => 0, 'msg' => '请重试', 'data' => null];
}
//计入当期支出累消
$update = [];
$update['updatetime'] = time();
$reslut = db::name('monster_log')->where('id', $monster_log['id'])->inc('out_amount', $money)->update($update);
if(!$reslut){
Db::rollback();
return ['code' => 0, 'msg' => '请重试', 'data' => null];
}
Db::commit();
$user_data = db::name('user')->where('id', $uid)->find();
$push_feed_monster_data = [];
$push_feed_monster_data['id'] = $fid;
$push_feed_monster_data['uid'] = $uid;
$push_feed_monster_data['nick_name'] = $user_data['nickname']??"";
$push_feed_monster_data['head_pic'] = $user_data['avatar']??"";
$push_feed_monster_data['type'] = $type;
$push_feed_monster_data['type_name'] = db::name('monster')->where('type', $type)->value('type_name');
$push_feed_monster_data['price'] = $money;
$push_feed_monster_data['num'] = db::name('user_monster_log')->where('mid',$monster_log['id'])->where('uid', $uid)->where('type', $type)->sum('num');
// $push_feed_monster_data['pay_ticket'] = $pay_ticket;
$push_feed_monster_data['integral'] = db::name('user_wallet_coin')->where('user_id', $uid)->value('coin');
// $push_data = [];
// $push_data['code'] = 334;
// $push_data['msg'] = "探索公屏播报";
// $push_data['data'] = $push_feed_monster_data;
// model('api/WebSocketPush')->send_to_all($push_data);
return ['code' => 1, 'msg' => '探索成功', 'data' => $push_feed_monster_data];
} catch (\Exception $e) {
// 回滚事务
// dump($e);
Db::rollback();
return ['code' => 0, 'msg' => '探索失败', 'data' => null];
}
}
//规则
public function get_monster_note(){
$config = get_system_config();
$note = $config['monster_feed_note'];
return ['code' => 1, 'msg' => '获取成功', 'data' => $note];
}
//奖池
public function get_monster_box_list(){
$monster_gift_list = db::name('monster')->alias('a')->join('vs_gift b', 'a.gid = b.gid')->field('a.gid,b.base_image,b.gift_name,b.gift_price')->order('b.gift_price asc')->select();
foreach ($monster_gift_list as $k => &$v){
$v['base_image'] = localpath_to_netpath($v['base_image']);
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $monster_gift_list];
}
//开奖记录
public function get_monster_log($uid, $page, $page_limit){
$user_info = db::name('user')->where('id', $uid)->find();
if(!$user_info){
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
}
$map = [];
$map['a.is_delete'] = ['=', 2];
$monster_list = db::name('monster_log')->alias('a')->join('monster b', 'a.win_type = b.type')->field('a.id,a.win_type,b.type_name,a.createtime as add_time')->where($map)->order('a.id desc')->page($page, $page_limit)->select();
foreach ($monster_list as $k => &$v){
$v['is_join'] = 3;
$v['gift_name'] = '';
$v['base_image'] = '';
$v['gift_price'] = 0;
$v['num'] = 0;
$user_monster_log = db::name('user_monster_log')->where('uid', $uid)->where('mid', $v['id'])->find();
if($user_monster_log){
$v['is_join'] = 2;
$user_monster_win_log = db::name('user_monster_win_log')->where('uid', $uid)->where('mid', $v['id'])->find();
if($user_monster_win_log){
$v['is_join'] = 1;
$gift_info = db::name('vs_gift')->find($user_monster_win_log['win_gid']);
$v['gift_name'] = $gift_info['gift_name'];
$v['base_image'] = localpath_to_netpath($gift_info['base_image']);
$v['gift_price'] = $gift_info['gift_price'];
$v['num'] = $user_monster_win_log['num'];
}
}
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $monster_list];
}
//我的列表
public function get_user_monster_log($uid, $page, $page_limit){
$user_info = db::name('user')->where('id', $uid)->find();
if(!$user_info){
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
}
// $map = [];
// $map[] = ['a.uid', '=', $uid];
$user_monster_log = db::name('user_monster_win_log')
->alias('a')
->join('user b', 'a.uid = b.id')
->join('monster c', 'a.win_type = c.type')
->join('vs_gift d', 'd.gid = a.win_gid')
->field('a.id,a.mid,b.id as uid,b.nickname,b.avatar,a.win_type,c.type_name,d.gift_name,d.base_image,d.gift_price,a.num,a.createtime as add_time')->order('a.id desc')->page($page, $page_limit)->select();
foreach ($user_monster_log as $k => &$v){
$user_info = db::name('user')->where('id', $v['uid'])->field('id,nickname,avatar')->find();
$v['nick_name'] = $user_info['nickname'];
$v['head_pic'] = $user_info['avatar'];
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $user_monster_log];
}
//中奖次数榜单
public function get_monster_winner_num_list($uid, $time){
if(in_array($time, [1,2,3])){
}
$model = db::name('user_monster_win_log')->field('uid, count(id) as win_num');
if($time == 1){
$model = $model->whereTime('add_time', 'today');
}else if($time == 2){
$model = $model->whereTime('add_time', 'week');
}else if($time == 3){
$model = $model->whereTime('add_time', 'month');
}
$list = $model->group('uid')->order('win_num desc, uid asc')->limit(30)->select();
foreach ($list as $k => &$v){
$user_info = db::name('user')->where('id', $v['uid'])->field('id,nickname,avatar')->find();
$v['nick_name'] = $user_info['nickname'];
$v['head_pic'] = $user_info['avatar'];
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $list];
}
//设置房间期数开关
public function operate_room_monster_show_status($uid, $rid, $is_show_monster_push){
$room_info = db::name('vs_room')-> where('id', $rid)->find();
if(!$room_info){
return ['code' => 0, 'msg' => '该房间不存在', 'data' => null];
}
$room_admin_uid_arr = explode(',', $room_info['room_admin_uid']);
if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) {
return ['code' => 0, 'msg' => '无权限操作', 'data' => null];
}
Db::startTrans();
try {
$update = [];
$update['is_show_monster_push'] = $is_show_monster_push;
$update['update_time'] = time();
$reslut = db::name('room')->where('rid', $rid)->update($update);
if(!$reslut){
Db::rollback();
return ['code' => 0, 'msg' => '修改失败', 'data' => null];
}
Db::commit();
$data = [];
$data['rid'] = $rid;
$data['is_show_monster_push'] = $is_show_monster_push;
//推送
$push_data = [];
$push_data['code'] = 3035;
$push_data['msg'] = "修改房间期数开关";
$push_data['data'] = $data;
model('api/WebSocketPush')->send_to_group($rid, $push_data);
return ['code' => 1, 'msg' => '修改成功', 'data' => $data];
} catch (\Exception $e) {
// 回滚事务
// dump($e);
Db::rollback();
return ['code' => 0, 'msg' => '修改失败', 'data' => null];
}
}
}

View File

@@ -129,7 +129,7 @@ class Nobility extends Model
}
//购买爵位
public function buyNobility($user_id,$lid){
public function buyNobility($user_id,$lid,$is_send=0){
$nobility_info = db::name('vs_nobility')
->field('lid,name,pay_price,renew_price,pay_coin,day,renew_coin')
->where('delete_time', 0)
@@ -245,9 +245,11 @@ class Nobility extends Model
$pay_coin = $nobility_info['pay_coin'] ?? 0;
}
if($pay_coin > 0){
$reslut = model('common/UserWallet')->change_user_money($user_id, $pay_coin, model('common/UserWallet')::MONEYTYPECOIN, model('common/UserWallet')::NOBILITY_PURCHASE_COIN,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::NOBILITY_PURCHASE_COIN));
if (!$reslut) {
return ['code' => 0, 'msg' => '失败', 'data' => null];
if($is_send != 1){
$reslut = model('common/UserWallet')->change_user_money($user_id, $pay_coin, model('common/UserWallet')::MONEYTYPECOIN, model('common/UserWallet')::NOBILITY_PURCHASE_COIN,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::NOBILITY_PURCHASE_COIN));
if (!$reslut) {
return ['code' => 0, 'msg' => '失败', 'data' => null];
}
}
}

View File

@@ -2753,7 +2753,7 @@ class Room extends Model
$user_info['is_room_owner'] = db::name('vs_room')->where(['id' => $room_id, 'user_id' => $user_id])->find() ? 1 : 0;
$user_info['is_follow'] = db::name('user_follow')->where(['user_id' => $uid, 'follow_id' => $user_id,'type' => 1])->find() ? 1 : 0;
//近90天内收到的礼物数量
$user_info['gift_num'] = db::name('vs_give_gift')->where(['gift_user' => $user_id])->whereTime('createtime', '>', strtotime('-90 day'))->sum('number')?? 0;
$user_info['gift_num'] = db::name('user_gift_wall')->where(['user_id' => $user_id])->sum('count')?? 0;
$user_info['qinmi'] = null;
$user_info['zhenai'] = null;
@@ -3026,7 +3026,8 @@ class Room extends Model
'label_id' => 7,
'type_id' => $type,
'room_up_pit_type' => 1,//1-排麦模式2-自由模式
'sign_type' => 0 //0-等待签约
'sign_type' => 0, //0-等待签约
'is_hot' => 1,//1-等待上热门
];
}

View File

@@ -546,7 +546,7 @@ class RoomPit extends Model
array_unshift($list['special'],$special);
}
if($list['special']){
foreach ($list['special'] as $k => $v){
foreach ($list['special'] as &$v){
//查询用户的爵位
$juewei = model('Nobility')->getUserNobilityInfo($v['user_id']);
if($juewei){

View File

@@ -288,7 +288,7 @@ class SendGift extends Model
//查询礼物是否是盲盒
if($gift_info['label'] == 2){//趣味礼物(盲盒)
//前端没传参数补偿
if(!$gift_bag_id){
if($gift_bag_id <= 0){
if($gid == 302){
$gift_bag_id = 7;
}elseif ($gid == 303){
@@ -856,7 +856,7 @@ class SendGift extends Model
//查询礼物是否是盲盒
if($gift_info['label'] == 2){//趣味礼物(盲盒)
//前端没传参数补偿
if(!$gift_bag_id){
if($gift_bag_id <= 0){
if($gid == 302){
$gift_bag_id = 7;
}elseif ($gid == 303){
@@ -1483,11 +1483,17 @@ class SendGift extends Model
//获取盲盒配置
if($gift_bag_id){
$gift_bag = db::name("vs_gift_bag")->where(['id'=>$gift_bag_id])->find();
if($gift_bag['status'] ==0){
return ['code' => 0, 'msg' => '当前盲盒已关闭', 'data' => []];
}
if(!$gift_bag){
return ['code' => 0, 'msg' => '当前盲盒不存在', 'data' => []];
}
$periods = $gift_bag['periods'] ?? 0;
$bag_gift = db::name("vs_gift")->where(['gid'=>$gift_id])->find();// 获取盲盒信息
$bag_gift = db::name("vs_gift")->where(['gid'=>$gift_id,'is_show'=>1,'is_can_buy'=>1])->find();// 获取盲盒信息
if(empty($bag_gift)){
return ['code' => 0, 'msg' => '当前盲盒已关闭', 'data' => []];
}
//随机获取一个礼物
$where = [
'gift_bag_id' => $gift_bag_id,

View File

@@ -405,23 +405,42 @@ class Tencent extends Model
$im_admin = 'administrator';
$admin_sig = $this->tencent_user_sig_info($im_admin);
$rand = rand(111111111,9999999999);
$postUrl = 'https://console.tim.qq.com/v4/openim/sendmsg?sdkappid='.$tencentyun_im_appid.'&identifier='.$im_admin.'&usersig='.$admin_sig.'&random='.$rand.'&contenttype=json';
$curlPost = array(
'SyncOtherMachine' => $machine_type,
'From_Account' => strval('u'.$uid),
'To_Account' => strval('u'.$receive_uid),
'MsgRandom' => time(),
'MsgBody' => array(
array(
'MsgType' => 'TIMTextElem',
'MsgContent' => array(
'Text' => $message,
if($uid == 'administrator'){
$from_Account ="administrator";
$curlPost = array(
'SyncOtherMachine' => $machine_type,
'From_Account' => strval($from_Account),
'To_Account' => strval('u'.$receive_uid),
'MsgRandom' => time(),
'SendMsgControl' => ["NoUnread", "NoLastMsg", "NoMsgCheck"],
'MsgBody' => array(
array(
'MsgType' => 'TIMCustomElem',
'MsgContent' => array(
'Data' => $message,
)
)
),
);
}else{
$from_Account ="u".$uid;
$curlPost = array(
'SyncOtherMachine' => $machine_type,
'From_Account' => strval($from_Account),
'To_Account' => strval('u'.$receive_uid),
'MsgRandom' => time(),
'MsgBody' => array(
array(
'MsgType' => 'TIMTextElem',
'MsgContent' => array(
'Text' => $message,
),
),
),
);
}
if($OnlineOnlyFlag == 1){
$curlPost['OnlineOnlyFlag'] = 1;
}

View File

@@ -484,18 +484,21 @@ class User extends Model
foreach ($result as $item){
$userInfo = [];
$top_users_count = 0;
$users = json_decode($item['give_user_ids'], true);
if($users){
foreach ($users as $kk => $user_id){
$userInfo[$kk] = db::name('user')->where(['id' => $user_id['user_id']])->field('id user_id,nickname,avatar')->find();
$userInfo[$kk]['count'] = $user_id['count'];
$top_users_count ++;
if($item['give_user_ids'] != null){
$users = json_decode($item['give_user_ids'], true);
if($users && is_array($users)){
foreach ($users as $kk => $user_id){
$userInfo[$kk] = db::name('user')->where(['id' => $user_id['user_id']])->field('id user_id,nickname,avatar')->find();
$userInfo[$kk]['count'] = $user_id['count'];
$top_users_count ++;
}
//用户信息$userInfo 按照数量 count 排序且保留前三个
usort($userInfo, function ($a, $b) {
return $b['count'] - $a['count'];
});
$userInfo = array_slice($userInfo, 0, 3);
}
//用户信息$userInfo 按照数量 count 排序且保留前三个
usort($userInfo, function ($a, $b) {
return $b['count'] - $a['count'];
});
$userInfo = array_slice($userInfo, 0, 3);
}
$data[] = [

View File

@@ -37,7 +37,7 @@ class UserCp extends Model
->where(['from_user_id' => $to_user_id, 'to_user_id' => $from_user_id,'status' => 0])
->find();
if($res && $res['createtime'] + 86400 < time()){//24小时内
if($res && $res['createtime'] - 86400 < time()){//24小时内
//创建推送信息1回应送礼 并创建Cp空间
$data = [
'from_user_id' => $from_user_id,

View File

@@ -44,6 +44,8 @@ class UserGiftPack extends Model
const DAILY_SIGN = 12;
//盲盒转盘抽奖所得
const BLANK_BOX_DRAW_GIFT_GET = 13;
//炼仙传说中奖获取
const LY_DRAW_GIFT_GET = 14;
public static function init()
{
@@ -66,7 +68,8 @@ class UserGiftPack extends Model
self::NEW_CHARGE_GIFT => '新人充值好礼',
self::TASK_REWARD => '任务奖励',
self::DAILY_SIGN => '每日签到',
self::BLANK_BOX_DRAW_GIFT_GET => '盲盒转盘抽奖所得'
self::BLANK_BOX_DRAW_GIFT_GET => '盲盒转盘抽奖所得',
self::LY_DRAW_GIFT_GET => '炼仙传说中奖获取'
];
}

View File

@@ -54,7 +54,7 @@ class UserWallet extends Model
// 15.首充 16.天降好礼充值 17.退出工会扣款 18.房主收益 19.主持人收益 20.抢头条 21.公会长收益22.提现驳回或提现失败返还23.财富等级奖励金币领取24.删除关系扣金币,
// 25.赠送好友金币26.好友转赠所得金币27.小时榜获得金币28.新人充值好礼29.发红包钻石30.抢红包金币31.抢红包钻石32.发红包(金币),
// 33.红包剩余退回金币34-红包剩余退回钻石35-爵位购买赠送金币金币40-后台充值金币41-后台充值钻石42-后台扣除金币43-后台扣除钻石,
//50-签约,51-签约失败退回,52-首次被签约收入53.签约师傅每日返还,54-叛徒补偿55-徒弟收礼返佣56-续约57-签到58-爆币,59-红包手续费
//50-签约,51-签约失败退回,52-首次被签约收入53.签约师傅每日返还,54-叛徒补偿55-徒弟收礼返佣56-续约57-签到58-爆币,59-红包手续费 60-炼仙传说抽奖扣除金币
public function log_list($uid, $last_id, $page_limit,$in_out_type,$start_time,$end_time,$gift_type)
{
// 时间范围处理
@@ -76,7 +76,7 @@ class UserWallet extends Model
$in_out_types = [2,5,6,8,13,14,15,16,22,23,26,27,30,28,33,40,44,51,57,58];
$map['change_type'] = ['in', $in_out_types];
}else{//2-支出
$in_out_types = [4,7,10,17,20,24,25,32,42,50,56,59];
$in_out_types = [4,7,10,17,20,24,25,32,42,50,56,59,60];
$map['change_type'] = ['in', $in_out_types];
}
@@ -233,14 +233,14 @@ class UserWallet extends Model
// 15.首充 16.天降好礼充值 17.退出工会扣款 18.房主收益 19.主持人收益 20.抢头条 21.公会长收益22.提现驳回或提现失败返还23.财富等级奖励金币领取24.删除关系扣金币,
// 25.赠送好友金币26.好友转赠所得金币27.小时榜获得金币28.新人充值好礼29.发红包钻石30.抢红包金币31.抢红包钻石32.发红包(金币),
// 33.红包剩余退回金币34-红包剩余退回钻石35-爵位购买赠送金币金币40-后台充值金币41-后台充值钻石42-后台扣除金币43-后台扣除钻石,
//50-签约,51-签约失败退回,52-首次被签约收入53.签约师傅每日返还,54-叛徒补偿55-徒弟收礼返佣56-续约57-签到58-爆币,59-红包手续费
//50-签约,51-签约失败退回,52-首次被签约收入53.签约师傅每日返还,54-叛徒补偿55-徒弟收礼返佣56-续约57-签到58-爆币,59-红包手续费 60-炼仙传说抽奖扣除金币
//资金操作
public function change_user_cion_log($user_id,$money,$room_id,$change_type,$remarks)
{
//增加用户金币类型
$in_types = [2,5,6,8,13,14,15,16,23,26,27,28,30,33,35,40,51,57,58,44];
//减少用户金币类型
$out_types = [4,7,10,17,20,24,25,32,42,50,56,59];
$out_types = [4,7,10,17,20,24,25,32,42,50,56,59,60];
$user_wallet = Db::name('user_wallet_coin')->where(['user_id' => $user_id])->lock(true)->find();
if (!$user_wallet) {

View File

@@ -82,7 +82,7 @@ class UserZone extends Model
}
$map['a.show_status'] = 1;//1:显示 0不显示
$map['a.is_delete'] = 1;//是否删除 1否2是
// $map['b.status'] = ['<>',0];//是否注销 1正常2禁止登录0注销
$map['b.status'] = ['<>',0];//是否注销 1正常2禁止登录0注销
$order_string = 'a.createtime desc'; //排序规则

View File

@@ -78,7 +78,7 @@ class BaseCom extends Controller
if (empty($token)) {
// 3. Token为空拒绝访问
return V(0, 'Token不能为空');
return V(301, 'Token不能为空');
}
// 4. 核心验证检查Token是否有效

View File

@@ -77,6 +77,8 @@ class Push
const PUSH_ROOM_PAN_HOUR_PROGRESS = 8001;
//红包
const PUSH_ROOM_PAN_RED_PROGRESS = 8002;
//炼仙传说
const PUSH_ROOM_PAN_XLXS_PROGRESS = 8003;
public $user_id, $room_id, $topic_room, $topic_client;
@@ -315,6 +317,12 @@ class Push
$this->push(self::PUSH_ROOM_PAN_RED_PROGRESS, $topic, $data);
}
//炼仙传说
public function xianxuan($data){
$topic = 'qx_xianxuan';
$this->push(self::PUSH_ROOM_PAN_XLXS_PROGRESS, $topic, $data);
}
// =========================================项目使用结束=====================================================

View File

@@ -17,8 +17,10 @@ local lucky_rate = tonumber(ARGV[5]) -- 收益率
local lottery_rate = tonumber(ARGV[6]) -- 爆币率
-- 1. 基础金额拆分
local recv_gold = gift_gold * (lucky_rate / 100)
local small_pool_add = gift_gold * (1-(lucky_rate / 100))
local recv_gold = gift_gold * lucky_rate / 100
local pool_add_rate = 100 - lucky_rate
local small_pool_add = gift_gold * pool_add_rate / 100
-- 2. Redis键定义
local small_round_key = "lottery:small_pool:round"
@@ -32,8 +34,9 @@ redis.call('set', small_round_key, small_round)
-- 3. 小奖池累计更新
local small_total_times = tonumber(redis.call('incr', small_total_times_key))
local small_total_gold = tonumber(redis.call('get', small_total_gold_key) or 0)
small_total_gold = math.floor((small_total_gold + small_pool_add) * 100) / 100
redis.call('set', small_total_gold_key, small_total_gold)
small_total_gold = small_total_gold + small_pool_add
local small_total_golds = string.format("%.2f", small_total_gold)
redis.call('set', small_total_gold_key, small_total_golds)
-- 4. 返回结果初始化(区分大小轮次)
local result = {
@@ -63,6 +66,143 @@ if small_total_times >= small_trigger_times then
result.small_round = small_round
end
-- 返回结果
return cjson.encode(result)
LUA;
}
// 获取Lua脚本
public static function getLotteryLuaScript5()
{
return <<<LUA
-- 接收参数send_uid, gift_gold, small_trigger_times, big_threshold, small_round, big_round, big_total_gold
local send_uid = ARGV[1]
local gift_gold = tonumber(ARGV[2])
local small_trigger_times = tonumber(ARGV[3]) or 200 -- 小奖池触发次数
local small_round = tonumber(ARGV[4]) -- 小奖池当前轮次
local lucky_rate = tonumber(ARGV[5]) -- 收益率
local lottery_rate = tonumber(ARGV[6]) -- 爆币率
-- 1. 基础金额拆分
local pool_add_rate = 100 - lucky_rate -- 累加金币率
local small_pool_add = gift_gold * pool_add_rate / 100 -- 累加金币
-- 2. Redis键定义
local small_round_key = "lottery:small_pool:round_5"
local small_total_times_key = "lottery:small_pool:total_times_5"
local small_total_gold_key = "lottery:small_pool:total_gold_5"
-- 初始化轮次确保Redis与入参一致
redis.call('set', small_round_key, small_round)
-- 3. 小奖池累计更新
local small_total_times = tonumber(redis.call('incr', small_total_times_key))
local small_total_gold = tonumber(redis.call('get', small_total_gold_key) or 0)
small_total_gold = small_total_gold + small_pool_add
local small_total_golds = string.format("%.2f", small_total_gold)
redis.call('set', small_total_gold_key, small_total_golds)
-- 4. 返回结果初始化(区分大小轮次)
local result = {
send_uid = send_uid,
gift_gold = gift_gold,
small_pool_add = small_pool_add,
small_total_times = small_total_times,
small_total_gold = small_total_gold,
is_small_prize = 0,
small_prize_amount = 0,
small_round = small_round, -- 小奖池轮次
}
-- 5. 小奖池开奖判断(小轮次+1
if small_total_times >= small_trigger_times then
result.is_small_prize = 1
-- 小奖随机比例
local small_ratio = math.random(2, lottery_rate)
result.small_prize_amount = math.floor(small_total_gold * small_ratio / 100 * 100) / 100
-- 重置小奖池,小轮次+1
redis.call('set', small_total_times_key, 0)
redis.call('set', small_total_gold_key, 0)
small_round = small_round + 1
redis.call('set', small_round_key, small_round)
result.small_round = small_round
end
-- 返回结果
return cjson.encode(result)
LUA;
}
// 获取Lua脚本
public static function getLotteryLuaScript10()
{
return <<<LUA
-- 接收参数send_uid, gift_gold, small_trigger_times, big_threshold, small_round, big_round, big_total_gold
local send_uid = ARGV[1]
local gift_gold = tonumber(ARGV[2])
local small_trigger_times = tonumber(ARGV[3]) or 200 -- 小奖池触发次数
local small_round = tonumber(ARGV[4]) -- 小奖池当前轮次
local lucky_rate = tonumber(ARGV[5]) -- 收益率
local lottery_rate = tonumber(ARGV[6]) -- 爆币率
-- 1. 基础金额拆分
local pool_add_rate = 100 - lucky_rate
local small_pool_adds = gift_gold * pool_add_rate / 100
local small_pool_add = string.format("%.2f", small_pool_adds)
-- 2. Redis键定义
local small_round_key = "lottery:small_pool:round_10"
local small_total_times_key = "lottery:small_pool:total_times_10"
local small_total_gold_key = "lottery:small_pool:total_gold_10"
-- 初始化轮次确保Redis与入参一致
redis.call('set', small_round_key, small_round)
-- 3. 小奖池累计更新
local small_total_times = tonumber(redis.call('incr', small_total_times_key))
local small_total_gold = tonumber(redis.call('get', small_total_gold_key) or 0)
small_total_gold = small_total_gold + small_pool_add
local small_total_golds = string.format("%.2f", small_total_gold)
redis.call('set', small_total_gold_key, small_total_golds)
-- 4. 返回结果初始化(区分大小轮次)
local result = {
send_uid = send_uid,
gift_gold = gift_gold,
small_pool_add = small_pool_add,
small_total_times = small_total_times,
small_total_gold = small_total_gold,
is_small_prize = 0,
small_prize_amount = 0,
small_round = small_round, -- 小奖池轮次
}
-- 5. 小奖池开奖判断(小轮次+1
if small_total_times >= small_trigger_times then
result.is_small_prize = 1
-- 小奖随机比例
local small_ratio = math.random(2, lottery_rate)
result.small_prize_amount = math.floor(small_total_gold * small_ratio / 100 * 100) / 100
-- 重置小奖池,小轮次+1
redis.call('set', small_total_times_key, 0)
redis.call('set', small_total_gold_key, 0)
small_round = small_round + 1
redis.call('set', small_round_key, small_round)
result.small_round = small_round
end
-- 返回结果
return cjson.encode(result)
LUA;

View File

@@ -123,6 +123,8 @@ class UserWallet extends Model
const BACKGROUND_DEDUCTION_DIAMOND = 43;
//公会会员付费退出会长收入
const GUILD_EXIT_DEACON_INCOME = 44;
//炼仙传说抽奖扣除金币
const LINGXIAN_TRADITION_LOTTERY_COIN = 60;
//金币支出类型数组
@@ -139,8 +141,9 @@ class UserWallet extends Model
self::RENEWAL,
self::RED_PACKET_FEE,
self::BACKGROUND_DEDUCTION_COIN,
self::LINGXIAN_TRADITION_LOTTERY_COIN,
];
//钻石支出类型数组
public $diamond_consumption_type_array = [
self::OPERATION_WITHDRAW,
@@ -219,7 +222,8 @@ class UserWallet extends Model
self::BACKGROUND_RECHARGE_DIAMOND => '后台充值钻石',
self::BACKGROUND_DEDUCTION_COIN => '后台扣除金币',
self::BACKGROUND_DEDUCTION_DIAMOND => '后台扣除钻石',
self::GUILD_EXIT_DEACON_INCOME => "公会会员付费退出会长收入"
self::GUILD_EXIT_DEACON_INCOME => "公会会员付费退出会长收入",
self::LINGXIAN_TRADITION_LOTTERY_COIN => '炼仙传说抽奖扣除金币',
];
if ($type) {
return $status[$type] ?? '';

View File

@@ -156,7 +156,7 @@ class LotteryService
$result['small_prize_amount'],//中奖金额
$result['small_total_gold'],//奖池总金额
$this->getSmallRatio($result['small_prize_amount'], $result['small_total_gold']),//中奖比例
$result['small_total_gold'] - $result['small_prize_amount'] //释放金额
$result['small_total_gold'] - floor($result['small_prize_amount']) //释放金额
);
// 3. 小奖池开奖流水
$this->addPoolFlow(

View File

@@ -0,0 +1,253 @@
<?php
namespace app\common\service;
use app\common\library\LotteryGiftLua;
use think\Cache;
use think\Db;
use think\Exception;
class LotteryService10
{
// Redis实例
private $redis;
// 配置参数
private $config;
public function __construct()
{
$this->redis = Cache::store('redis')->handler();
// 加载配置
$this->config = Db::name('bb_lottery_config')->column('value', 'key');
// 初始化Redis缓存若Redis数据丢失从数据库恢复
$this->initRedisFromDb();
}
/**
* 缓存恢复:独立恢复大小轮次+对应金额
*/
private function initRedisFromDb()
{
// 1. 恢复小奖池轮次取pool_type=1的最大times
$maxSmallRound = Db::name('bb_lottery_pool_flow_10')->where('pool_type', 1)->max('times') ?: 1;
if (!$this->redis->get('lottery:small_pool:round_10')) {
$this->redis->set('lottery:small_pool:round_10', $maxSmallRound);
}
// 2. 恢复小奖池当前轮次的次数/金额
$small_round = intval($this->redis->get('lottery:small_pool:round_10'));
if (!$this->redis->get('lottery:small_pool:total_times_10')) {
$smallTotalTimes = Db::name('bb_lottery_pool_flow_10')
->where(['pool_type' => 1, 'type' => 1, 'times' => $small_round])
->count();
$this->redis->set('lottery:small_pool:total_times_10', $smallTotalTimes);
}
if (!$this->redis->get('lottery:small_pool:total_gold_10')) {
$smallTotalGold = Db::name('bb_lottery_pool_flow_10')
->where(['pool_type' => 1, 'type' => 1, 'times' => $small_round])
->sum('amount') ?: 0;
$this->redis->set('lottery:small_pool:total_gold_10', $smallTotalGold);
}
}
/**
* 处理送礼抽奖逻辑
* @param int $send_uid 送礼用户ID
* @param float $gift_gold 礼物金币数
* @param int $giftId 礼物ID
* @return array 处理结果
* @throws Exception
*/
public function handleGift($send_uid, $gift_gold, $giftId)
{
// 参数校验
if ($gift_gold <= 0 || !$send_uid) {
throw new Exception('参数错误');
}
// 读取配置+独立轮次
$small_trigger_times = intval($this->config['small_pool_trigger_times_10'] ?? 200);//触发抽奖次数
$small_round = intval($this->redis->get('lottery:small_pool:round_10') ?: 1);//小奖轮次
$lucky_rate = intval($this->config['lucky_rate'] ?? 1);//收益率
$lottery_rate = intval($this->config['lottery_rate_10'] ?? 100);//爆币率
if($lottery_rate <= 2){
throw new Exception('配置错误');
}
// 加载Lua脚本
$luaSha = LotteryGiftLua::getLotteryLuaScript10();
// 执行Lua脚本入参small_round + big_round
$result = $this->redis->eval($luaSha, [
$send_uid,
$gift_gold,
$small_trigger_times,
$small_round,
$lucky_rate,
$lottery_rate
], 0);
$result = json_decode($result, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception('Lua脚本执行失败');
}
// 开启数据库事务
Db::startTrans();
try {
// . 1记录小奖池累计流水未开奖时
if ($result['is_small_prize'] == 0) {
$this->addPoolFlow(
1, // 小奖池
1, // 累计
$result['small_pool_add'],
$result['small_total_gold'] - $result['small_pool_add'],
$result['small_total_gold'],
$giftId,
$result['small_round'], // 新增:传入轮次
"小奖池累计:用户{$send_uid}送礼,轮次{$result['small_round']}"
);
} else {
$winnerUid = $send_uid; // 奖默认给当前送礼用户
//中奖金额
$prizeAmount = floor($result['small_prize_amount'] / $gift_gold) * $gift_gold;
// 小奖中奖记录
$this->addWinnerRecord(
$winnerUid,
4, // 高级奖池
$prizeAmount,//中奖金额
$result['small_total_gold'],//奖池总金额
$this->getSmallRatio($result['small_prize_amount'], $result['small_total_gold']),//中奖比例
$result['small_total_gold'] - $prizeAmount //释放金额
);
// 3. 小奖池开奖流水
$this->addPoolFlow(
1, //
4, //
$prizeAmount,
$result['small_total_gold'],
$result['small_total_gold'] - $prizeAmount,
$giftId,
$result['small_round'] - 1, // 开奖轮次为当前轮次-1已结束的轮次
"小奖池开奖:轮次" . ($result['small_round'] - 1).",中奖金额:{$result['small_prize_amount']}金币"
);
}
Db::commit();
return [
'code' => 1,
'msg' => '处理成功',
'data' => $result
];
} catch (Exception $e) {
Db::rollback();
throw new Exception($e->getMessage());
}
}
/**
* 添加奖池流水
* @param int $pool_type 奖池类型1-小 2-大
* @param int $type 流水类型1-累计 2-开奖 3-划转 4-释放
* @param float $amount 金额
* @param float $before_amount 操作前金额
* @param float $after_amount 操作后金额
* @param int $relate_id 关联ID
* @param int $times 轮次
* @param string $remark 备注
*/
private function addPoolFlow($pool_type, $type, $amount, $before_amount, $after_amount, $relate_id, $times, $remark)
{
Db::name('bb_lottery_pool_flow_10')->insert([
'pool_type' => $pool_type,
'type' => $type,
'amount' => $amount,
'before_amount' => $before_amount,
'after_amount' => $after_amount,
'relate_id' => $relate_id,
'times' => $times, // 新增:写入轮次
'remark' => $remark,
'create_time' => time()
]);
}
/**
* 添加中奖记录
* @param int $uid 中奖用户ID
* @param int $prize_type 奖项类型1-小 2-大
* @param float $prize_amount 中奖金额
* @param float $pool_amount 奖池总金额
* @param int $ratio 中奖比例
* @param float $release_amount 释放金额
*/
private function addWinnerRecord($uid, $prize_type, $prize_amount, $pool_amount, $ratio, $release_amount)
{
Db::name('bb_lottery_winner_record')->insert([
'uid' => $uid,
'prize_type' => $prize_type,
'prize_amount' => $prize_amount,
'pool_amount' => $pool_amount,
'ratio' => $ratio,
'release_amount' => $release_amount,
'create_time' => time(),
'status' => 1 // 已发放
]);
// 此处可添加用户金币入账逻辑(如更新用户金币表)
}
/**
* 计算小奖中奖比例
* @param float $prize_amount 中奖金额
* @param float $pool_amount 奖池金额
* @return int 比例(%
*/
private function getSmallRatio($prize_amount, $pool_amount)
{
return intval(round($prize_amount / $pool_amount * 100));
}
/**
* 计算大奖中奖比例
* @param float $prize_amount 中奖金额
* @param float $pool_amount 奖池金额
* @return int 比例(%
*/
private function getBigRatio($prize_amount, $pool_amount)
{
return intval(round($prize_amount / $pool_amount * 100));
}
/**
* 统计中奖数据
* @param array $where 筛选条件如uid、prize_type、time
* @return array 统计结果
*/
public function statWinner($where = [])
{
$query = Db::name('bb_lottery_winner_record');
if (!empty($where['uid'])) {
$query->where('uid', $where['uid']);
}
if (!empty($where['prize_type'])) {
$query->where('prize_type', $where['prize_type']);
}
if (!empty($where['start_time']) && !empty($where['end_time'])) {
$query->whereBetween('create_time', [$where['start_time'], $where['end_time']]);
}
// 总中奖金额、总释放金额、中奖次数
$stat = $query->field([
'SUM(prize_amount) as total_prize',
'SUM(release_amount) as total_release',
'COUNT(id) as total_times'
])->find();
return [
'total_prize' => $stat['total_prize'] ?? 0,
'total_release' => $stat['total_release'] ?? 0,
'total_times' => $stat['total_times'] ?? 0
];
}
}

View File

@@ -0,0 +1,255 @@
<?php
namespace app\common\service;
use app\common\library\LotteryGiftLua;
use think\Cache;
use think\Db;
use think\Exception;
class LotteryService5
{
// Redis实例
private $redis;
// 配置参数
private $config;
private $bigPrizeWeights;
public function __construct()
{
$this->redis = Cache::store('redis')->handler();
// 加载配置
$this->config = Db::name('bb_lottery_config')->column('value', 'key');
// 初始化Redis缓存若Redis数据丢失从数据库恢复
$this->initRedisFromDb();
}
/**
* 缓存恢复:独立恢复大小轮次+对应金额
*/
private function initRedisFromDb()
{
// 1. 恢复奖池轮次取pool_type=1的最大times
$maxSmallRound = Db::name('bb_lottery_pool_flow_5')->where('pool_type', 1)->max('times') ?: 1;
if (!$this->redis->get('lottery:small_pool:round_5')) {
$this->redis->set('lottery:small_pool:round_5', $maxSmallRound);
}
// 2. 恢复奖池当前轮次的次数/金额
$small_round = intval($this->redis->get('lottery:small_pool:round_5'));
if (!$this->redis->get('lottery:small_pool:total_times_5')) {
$smallTotalTimes = Db::name('bb_lottery_pool_flow_5')
->where(['pool_type' => 1, 'type' => 1, 'times' => $small_round])
->count();
$this->redis->set('lottery:small_pool:total_times_5', $smallTotalTimes);
}
if (!$this->redis->get('lottery:small_pool:total_gold_5')) {
$smallTotalGold = Db::name('bb_lottery_pool_flow_5')
->where(['pool_type' => 1, 'type' => 1, 'times' => $small_round])
->sum('amount') ?: 0;
$this->redis->set('lottery:small_pool:total_gold_5', $smallTotalGold);
}
}
/**
* 处理送礼抽奖逻辑
* @param int $send_uid 送礼用户ID
* @param float $gift_gold 礼物金币数
* @param int $giftId 礼物ID
* @return array 处理结果
* @throws Exception
*/
public function handleGift($send_uid, $gift_gold, $giftId)
{
// 参数校验
if ($gift_gold <= 0 || !$send_uid) {
throw new Exception('参数错误');
}
// 读取配置+独立轮次
$small_trigger_times = intval($this->config['small_pool_trigger_times_5'] ?? 200);//触发抽奖次数
$small_round = intval($this->redis->get('lottery:small_pool:round_5') ?: 1);//轮次
$lucky_rate = intval($this->config['lucky_rate'] ?? 1);//收益率
$lottery_rate = intval($this->config['lottery_rate_5'] ?? 100);//爆币率
if($lottery_rate <= 2){
throw new Exception('配置错误');
}
// 加载Lua脚本
$luaSha = LotteryGiftLua::getLotteryLuaScript5();
// 执行Lua脚本入参small_round + big_round
$result = $this->redis->eval($luaSha, [
$send_uid,
$gift_gold,
$small_trigger_times,
$small_round,
$lucky_rate,
$lottery_rate
], 0);
$result = json_decode($result, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception('Lua脚本执行失败');
}
// 开启数据库事务
Db::startTrans();
try {
// . 1记录小奖池累计流水未开奖时
if ($result['is_small_prize'] == 0) {
$this->addPoolFlow(
1, // 中级奖池
1, // 累计
$result['small_pool_add'],
$result['small_total_gold'] - $result['small_pool_add'],
$result['small_total_gold'],
$giftId,
$result['small_round'], // 新增:传入轮次
"小奖池累计:用户{$send_uid}送礼,轮次{$result['small_round']}"
);
} else {
$winnerUid = $send_uid; // 奖默认给当前送礼用户
//中奖金额
$prizeAmount = floor($result['small_prize_amount'] / $gift_gold) * $gift_gold;
// 小奖中奖记录
$this->addWinnerRecord(
$winnerUid,
3, // 中级奖
$prizeAmount,//中奖金额
$result['small_total_gold'],//奖池总金额
$this->getSmallRatio($result['small_prize_amount'], $result['small_total_gold']),//中奖比例
$result['small_total_gold'] - $prizeAmount //释放金额
);
// 3. 小奖池开奖流水
$this->addPoolFlow(
1, //
4, //
$prizeAmount,
$result['small_total_gold'],
$result['small_total_gold'] - $prizeAmount,
$giftId,
$result['small_round'] - 1, // 开奖轮次为当前轮次-1已结束的轮次
"小奖池开奖:轮次" . ($result['small_round'] - 1).",中奖金额:{$result['small_prize_amount']}金币"
);
}
Db::commit();
return [
'code' => 1,
'msg' => '处理成功',
'data' => $result
];
} catch (Exception $e) {
Db::rollback();
throw new Exception($e->getMessage());
}
}
/**
* 添加奖池流水
* @param int $pool_type 奖池类型1-小 2-大
* @param int $type 流水类型1-累计 2-开奖 3-划转 4-释放
* @param float $amount 金额
* @param float $before_amount 操作前金额
* @param float $after_amount 操作后金额
* @param int $relate_id 关联ID
* @param int $times 轮次
* @param string $remark 备注
*/
private function addPoolFlow($pool_type, $type, $amount, $before_amount, $after_amount, $relate_id, $times, $remark)
{
Db::name('bb_lottery_pool_flow_5')->insert([
'pool_type' => $pool_type,
'type' => $type,
'amount' => $amount,
'before_amount' => $before_amount,
'after_amount' => $after_amount,
'relate_id' => $relate_id,
'times' => $times, // 新增:写入轮次
'remark' => $remark,
'create_time' => time()
]);
}
/**
* 添加中奖记录
* @param int $uid 中奖用户ID
* @param int $prize_type 奖项类型1-小 2-大
* @param float $prize_amount 中奖金额
* @param float $pool_amount 奖池总金额
* @param int $ratio 中奖比例
* @param float $release_amount 释放金额
*/
private function addWinnerRecord($uid, $prize_type, $prize_amount, $pool_amount, $ratio, $release_amount)
{
Db::name('bb_lottery_winner_record')->insert([
'uid' => $uid,
'prize_type' => $prize_type,
'prize_amount' => $prize_amount,
'pool_amount' => $pool_amount,
'ratio' => $ratio,
'release_amount' => $release_amount,
'create_time' => time(),
'status' => 1 // 已发放
]);
// 此处可添加用户金币入账逻辑(如更新用户金币表)
}
/**
* 计算小奖中奖比例
* @param float $prize_amount 中奖金额
* @param float $pool_amount 奖池金额
* @return int 比例(%
*/
private function getSmallRatio($prize_amount, $pool_amount)
{
return intval(round($prize_amount / $pool_amount * 100));
}
/**
* 计算大奖中奖比例
* @param float $prize_amount 中奖金额
* @param float $pool_amount 奖池金额
* @return int 比例(%
*/
private function getBigRatio($prize_amount, $pool_amount)
{
return intval(round($prize_amount / $pool_amount * 100));
}
/**
* 统计中奖数据
* @param array $where 筛选条件如uid、prize_type、time
* @return array 统计结果
*/
public function statWinner($where = [])
{
$query = Db::name('bb_lottery_winner_record');
if (!empty($where['uid'])) {
$query->where('uid', $where['uid']);
}
if (!empty($where['prize_type'])) {
$query->where('prize_type', $where['prize_type']);
}
if (!empty($where['start_time']) && !empty($where['end_time'])) {
$query->whereBetween('create_time', [$where['start_time'], $where['end_time']]);
}
// 总中奖金额、总释放金额、中奖次数
$stat = $query->field([
'SUM(prize_amount) as total_prize',
'SUM(release_amount) as total_release',
'COUNT(id) as total_times'
])->find();
return [
'total_prize' => $stat['total_prize'] ?? 0,
'total_release' => $stat['total_release'] ?? 0,
'total_times' => $stat['total_times'] ?? 0
];
}
}

View File

@@ -193,7 +193,7 @@ class RedpacketService
->where('user_id',$userId)
->where('createtime', '>=', strtotime(date('Y-m-d')))
->count();
if($tady_red_num >= 5){
if($tady_red_num <= 5){
model('api/Tasks')->tasks_complete($userId,36);
}
return [

View File

@@ -4,6 +4,7 @@ namespace app\cron\controller;
use app\common\model\Redpacket;
use app\common\model\UserWallet;
use app\common\controller\Push;
use think\Cache;
use think\Db;
use Yzh\YunPay;
@@ -55,6 +56,10 @@ class PerformPerSecond
$this->bar_room_time_end();
echo "\n";
echo "炼仙传说监控:\n";
$this->create_monster_log();
echo "\n";
}
@@ -390,4 +395,17 @@ class PerformPerSecond
}
echo "酒吧房间时间结束处理完成\n";
}
//监控练仙传说
public function create_monster_log(){
$key_name = "admin:cli:create_monster_log";
redis_lock_exit($key_name,1,1);
$reslut = model('api/Monster')->create_monster_log();
redis_unlock($key_name);
if($reslut['code'] == 0){
echo date('Y-m-d H:i:s') . "监控练仙传说 执行失败" . $reslut['msg'] . "\r\n";
}else{
echo date('Y-m-d H:i:s') . "监控练仙传说 执行成功" . $reslut['data'] . "\r\n";
}
}
}

View File

@@ -34,6 +34,7 @@ class Test
// $this->createGuildSubsidyDataNew();
// $this->repair_guild_room_data();
// $this->check_guild_room_data();
// $this->merge_guild();
}
@@ -1094,4 +1095,83 @@ class Test
}
echo "完成";
}
public function merge_guild(){die("暂停");
$guild_id = 10029; // 要合并的
$merge_guild_id = 10005; //并入的
//解散工会
$guild = model('adminapi/Guild')->getOne(['guild_special_id'=>$guild_id]);
$merge_guild=model('adminapi/Guild')->getOne(['guild_special_id'=>$merge_guild_id]);
// if(empty($guild)){
// echo "该工会不存在";
// }
// if($guild['status'] == 2){
// echo "该工会已解散";
// }
// if(!$merge_guild_id){
// echo "请选择并入工会";
// }
// if(empty($merge_guild)){
// echo "并入工会不存在";
// }
$guild_id = $guild['id'];
$merge_guild_id = $merge_guild['id'];
// db::startTrans();
// try{
// $res = model('adminapi/Guild')->edit(['id'=>$guild_id],['status'=>2,'delete_time'=>time()]);
$merge_guild_user = db('vs_guild_user')->where(['guild_id'=>$guild_id,'quit_type'=>3,'status'=>1])->select();
$use_num = 0;
echo "公会名称:".$guild['guild_name']." 公会Id".$guild_id." 公会人数:".count($merge_guild_user)." 合并公会名称:".$merge_guild['guild_name']." 合并公会Id".$merge_guild_id."\n";
foreach ($merge_guild_user as $key=>$value){
// $res = db('vs_guild_user')->insert([
// 'user_id'=>$value['user_id'],
// 'guild_id'=>$merge_guild_id,
// 'room_id'=>$value['room_id'],
// 'status'=>$value['status'],
// 'is_show_room'=>$value['is_show_room'],
// 'remarks'=>"公会合并:从".$guild['guild_name']."合入".$merge_guild['guild_name'],
// 'settlement_ratio' =>$value['settlement_ratio'],
// 'apply_time'=>time(),
// 'createtime'=>time(),
// ]);
// if(!$res){
// db::rollback();
// return V(0,"失败");
// }
//更新公会人数
// db('vs_guild')->where('id', $merge_guild_id)->setInc('num');
//拉用户进入工会群聊
if($merge_guild_id<=95){
$merge_guild_id = "g".$merge_guild_id;
}else{
$merge_guild_id = $merge_guild_id;
}
$rid = 'g'.$merge_guild_id;
// $reslut = model('api/Tencent')->add_group_member($rid, $value['user_id']);
// if($reslut['code']==1){
// echo "用户:".$value['user_id']."加入群聊:".$rid;
// $use_num ++;
// }
echo 'u'.$value['user_id']."\n";
}
echo " 成功:".$use_num."\n";
// $return = db('vs_guild_user')->where(['guild_id'=>$guild_id,'quit_type'=>0])->update(['quit_type'=>3,'quit_time'=>time(),'updatetime'=>time(),'delete_time'=>time()]);
// if (!$return) {
// db::rollback();
// return V(0,"失败");
// }
// //解散群
// if($guild_id<=95){
// $guild_id = "g".$guild_id;
// }else{
// $guild_id = $guild_id;
// }
// model('api/Tencent')->delete_group('g'.$guild_id);
// db::commit();
// return V(1,"成功");
// } catch(\Exception $e) {
// db::rollback();
// return V(0,$e->getMessage());
// }
}
}