Files
mier-php/application/admin/model/Multiple.php

576 lines
21 KiB
PHP
Raw Normal View History

2025-08-11 10:22:05 +08:00
<?php
namespace app\admin\model;
use think\Db;
use think\Model;
class Multiple extends Model
{
//类型列表
public function get_gift_multiple_type_list($id, $name, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($id)) {
$map[] = ['id', '=', $id];
}
if (!empty($name)) {
$map[] = ['name', 'like', '%' . $name . '%'];
}
$map[] = ['is_delete', '=', 1];
$list = db::name('gift_multiple_type')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => &$v) {
}
$data = [];
$data['count'] = db::name('gift_multiple_type')->where($map)->count();
$data['list'] = $list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//编辑类型
public function edit_gift_multiple_type($data)
{
if (empty($data)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$info = db::name('gift_multiple_type')->find($data['id']);
if (empty($info)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$update_data = [];
$update_data['name'] = $data['name'];
$update_data['update_time'] = time();
$reslut = db::name('gift_multiple_type')->where(['id' => $data['id']])->update($update_data);
if (!$reslut) {
return ['code' => 201, 'msg' => '修改失败', 'data' => null];
} else {
return ['code' => 200, 'msg' => '修改成功', 'data' => null];
}
}
//添加类型
public function add_gift_multiple_type($data)
{
$add_data = [];
$add_data['name'] = $data['name'];
$add_data['update_time'] = time();
$add_data['add_time'] = time();
$reslut = db::name('gift_multiple_type')->insert($add_data);
if (!$reslut) {
return ['code' => 201, 'msg' => '添加失败', 'data' => null];
} else {
return ['code' => 200, 'msg' => '添加成功', 'data' => null];
}
}
//获取类型信息
public function get_gift_multiple_type_info($id)
{
if (empty($id)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$info = db::name('gift_multiple_type')->where(['id' => $id])->find();
return ['code' => 200, 'msg' => '获取成功', 'data' => $info];
}
//删除类型
public function del_gift_multiple_type($id)
{
if (empty($id)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$reslut = db::name('gift_multiple_type')->where(['id' => $id])->update(['is_delete' => 2, 'update_time' => time()]);
if (!$reslut) {
return ['code' => 201, 'msg' => '删除失败', 'data' => null];
} else {
return ['code' => 200, 'msg' => '删除成功', 'data' => null];
}
}
//列表
public function get_gift_multiple_rate_list($pid, $order, $sort, $page = 1, $limit = 20)
{
set_time_limit(0);
ini_set('memory_limit', '1024M');
$redis = connectionRedis();
$map = [];
if (!empty($pid)) {
$map[] = ['pid', '=', $pid];
}
$map[] = ['is_delete', '=', 1];
$count = db::name('gift_multiple_rate')->where($map)->sum('rate_num');
$list = db::name('gift_multiple_rate')->where($map)->order($order, $sort)->page($page, $limit)->select();
$total_unopen_num = 0;
$total_open_num = 0;
foreach ($list as $k => &$v) {
$v['rate'] = round(($v['rate_num']/$count),6)*100;
$v['rate'] = $v['rate'].'%';
$un_redis_list = [];
if(in_array($v['pid'],$un_redis_list)){
$v['unopen_num'] = $v['rate_num'];
$v['open_num'] = $v['rate_num'];
}else{
$keyname = "multiple:list:type:".$v['pid'];
$redis_data_list = $redis->Lrange($keyname, 0, -1);
$redis_gift_data = [];
foreach ($redis_data_list as $a => $b) {
$gift_data = explode('-', $b);
if (empty($redis_gift_data[$gift_data[1]])) {
$redis_gift_data[$gift_data[1]] = 1;
} else {
$redis_gift_data[$gift_data[1]]++;
}
}
if (empty($redis_gift_data[$v['multiple']])) {
$v['unopen_num'] = 0;
} else {
$v['unopen_num'] = $redis_gift_data[$v['multiple']];
}
// $total_unopen_num += $v['unopen_num'];
$sum_num = $count;
if(count($redis_data_list) > $sum_num){
$count_redis_data_list = count($redis_data_list);
$place = ceil($count_redis_data_list/$sum_num);
$v['open_num'] = $v['rate_num']*$place - $v['unopen_num'];
}else{
$v['open_num'] = $v['rate_num'] - $v['unopen_num'];
}
// $total_open_num += $v['open_num'];
}
}
$data = [];
$data['count'] = db::name('gift_multiple_rate')->where($map)->count();
$data['list'] = $list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//编辑
public function edit_gift_multiple_rate($data)
{
if (empty($data)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$info = db::name('gift_multiple_rate')->find($data['id']);
if (empty($info)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$map = [];
$map[] = ['multiple', '=', $data['multiple']];
$map[] = ['pid', 'neq', $info['pid']];
$map[] = ['is_delete', '=', 1];
$gift_multiple_rate = db::name('gift_multiple_rate')->where($map)->find();
if($gift_multiple_rate){
return ['code' => 201, 'msg' => '该倍率已添加过', 'data' => null];
}
// dump($data);exit;
$update_data = [];
$update_data['multiple'] = $data['multiple'];
$update_data['rate_num'] = $data['rate_num'];
$update_data['update_time'] = time();
$reslut = db::name('gift_multiple_rate')->where(['id' => $data['id']])->update($update_data);
if (!$reslut) {
return ['code' => 201, 'msg' => '修改失败', 'data' => null];
} else {
return ['code' => 200, 'msg' => '修改成功', 'data' => null];
}
}
//添加
public function add_gift_multiple_rate($data)
{
$map = [];
$map[] = ['pid', '=', $data['pid']];
$map[] = ['multiple', '=', $data['multiple']];
$map[] = ['is_delete', '=', 1];
$gift_multiple_rate = db::name('gift_multiple_rate')->where($map)->find();
if($gift_multiple_rate){
return ['code' => 201, 'msg' => '该倍率已添加过', 'data' => null];
}
$add_data = [];
$add_data['pid'] = $data['pid'];
$add_data['multiple'] = $data['multiple'];
$add_data['rate_num'] = $data['rate_num'];
$add_data['update_time'] = time();
$add_data['add_time'] = time();
$reslut = db::name('gift_multiple_rate')->insert($add_data);
if (!$reslut) {
return ['code' => 201, 'msg' => '添加失败', 'data' => null];
} else {
return ['code' => 200, 'msg' => '添加成功', 'data' => null];
}
}
//获取信息
public function get_gift_multiple_rate_info($id)
{
if (empty($id)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$info = db::name('gift_multiple_rate')->where(['id' => $id])->find();
return ['code' => 200, 'msg' => '获取成功', 'data' => $info];
}
//删除
public function del_gift_multiple_rate($id)
{
if (empty($id)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$reslut = db::name('gift_multiple_rate')->where(['id' => $id])->update(['is_delete' => 2, 'update_time' => time()]);
if (!$reslut) {
return ['code' => 201, 'msg' => '删除失败', 'data' => null];
} else {
return ['code' => 200, 'msg' => '删除成功', 'data' => null];
}
}
//
public function get_user_send_gift_rate_list($uid, $room_id, $room_uid, $receive_uid, $gid, $gift_name, $start, $end, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($uid)) {
$map[] = ['a.uid', '=', $uid];
}
if (!empty($room_id)) {
$map[] = ['c.room_number', '=', $room_id];
}
if (!empty($room_uid)) {
$map[] = ['a.room_uid', '=', $room_uid];
}
if (!empty($receive_uid)) {
$map[] = ['a.receive_uid', '=', $receive_uid];
}
if (!empty($gid)) {
$map[] = ['a.gid', '=', $gid];
}
if (!empty($gift_name)) {
$map[] = ['a.gift_name', 'like', '%' . $gift_name . '%'];
}
if (!empty($start)) {
$map[] = ['a.add_time', '>=', strtotime($start)];
}
if (!empty($end)) {
$map[] = ['a.add_time', '<=', strtotime($end)];
}
if (empty($order)) {
$order = 'a.sid';
}
if (empty($sort)) {
$sort = 'desc';
}
$list = db::name('user_send_gift_rate')
->alias('a')->join('yy_user b', 'a.uid = b.uid')->join('yy_room c', 'a.rid = c.rid')
->field('a.*,b.nick_name,c.room_name')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => $v) {
$list[$k]['user_nick_name'] = $v['uid'] . '-' . $v['nick_name'];
}
$data = [];
$data['list'] = $list;
$totalRowData = db::name('user_send_gift_rate')->alias('a')->join('yy_user b', 'a.uid = b.uid')->join('yy_room c', 'a.rid = c.rid')->field('count(a.sid) as count,SUM(a.gift_num) as gift_num,SUM(a.gift_total_price) as gift_total_price,SUM(a.win_price) as win_price,SUM(a.room_owner_profit) as room_owner_profit, SUM(a.room_host_profit) as room_host_profit, SUM(a.receiver_profit) as receiver_profit')->where($map)->find();
$data['count'] = $totalRowData['count'];
unset($totalRowData['count']);
//dump($totalRowData);
$data['totalRow'] = $totalRowData;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//获取列表
public function room_subsidy($order, $sort, $page, $limit)
{
$map = [];
$map[] = ['is_delete', '=', 1];
$list = db::name('room_subsidy_lucky')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => &$v){
if($v['type'] == 2){
$v['money'] = $v['money'].'%';
}
}
$data = [];
$data['count'] = db::name('room_subsidy_lucky')->where($map)->count();
$data['list'] = $list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//删除
public function room_subsidy_del($id)
{
$del = db::name('room_subsidy_lucky')->where(['id' => $id])->update(['is_delete' => 2]);
if ($del) {
return ['code' => 200, 'msg' => '删除成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '删除失败', 'data' => null];
}
}
//获取
public function room_subsidy_info($id)
{
if (empty($id)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$room_subsidy_info = db::name('room_subsidy_lucky')->find($id);
return ['code' => 200, 'msg' => '获取成功', 'data' => $room_subsidy_info];
}
//修改
public function edit_room_subsidy($id, $level_name, $total_gift_price, $money, $type)
{
if (empty($id)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$arr = [];
$arr['type'] = $type;
$arr['level_name'] = $level_name;
$arr['total_gift_price'] = $total_gift_price;
$arr['money'] = $money;
$arr['update_time'] = time();
$upd = db::name('room_subsidy_lucky')->where(['id' => $id])->update($arr);
if ($upd) {
return ['code' => 200, 'msg' => '修改成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '修改失败', 'data' => null];
}
}
//添加
public function add_room_subsidy($level_name, $total_gift_price, $money, $type)
{
$arr = [];
$arr['type'] = $type;
$arr['level_name'] = $level_name;
$arr['total_gift_price'] = $total_gift_price;
$arr['money'] = $money;
$arr['add_time'] = time();
$add = db::name('room_subsidy_lucky')->insert($arr);
if ($add) {
return ['code' => 200, 'msg' => '添加成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '添加失败', 'data' => null];
}
}
//获取列表
public function give_room_subsidy_list($room_number, $uid, $is_delete, $order, $sort, $page, $limit, $start){
$map = [];
if(!empty($room_number)){
$rid = db::name('room')->where('room_number', $room_number)->value('rid');
$map[] = ['rid', '=', $rid];
}
if(!empty($uid)){
$map[] = ['uid', '=', $uid];
}
if(!empty($is_delete)){
$map[] = ['is_delete', '=', $is_delete];
}
if(!empty($start)){
$now_time = strtotime($start);
$last_week = strtotime('-1 week last sunday', $now_time);
$map[] = ['last_week_time', '=', $last_week];
}else{
$now_time = time();
$last_week = strtotime('-1 week last sunday', $now_time);
$map[] = ['last_week_time', '=', $last_week];
}
$map[] = ['type', '=', 2];
$list = db::name('user_room_week_earnings')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => &$v){
$room_info = db::name('room')->find($v['rid']);
$v['room_number'] = $room_info['room_number'];
$v['room_name'] = mb_convert_encoding(base64_decode($room_info['base64_room_name']), 'UTF-8', 'UTF-8');
$user_info = db::name('user')->find($v['uid']);
$v['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
}
$data = [];
$data['count'] = db::name('user_room_week_earnings')->where($map)->count();
$data['list'] = $list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//批量结算
public function batch_give_room_subsidy($data){
if(empty($data)){
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$gid_list = [];
foreach ($data as $k => $v){
if(in_array($v['is_delete'], [2])) {
return ['code' => 201, 'msg' => '批量结算中包含已发放的', 'data' => null];
}
$gid_list[] = $v['id'];
}
Db::startTrans();
try {
$map = [];
$map[] = ['id', 'in', $gid_list];
$map[] = ['is_delete', '=', 1];
$list = db::name('user_room_week_earnings')->where($map)->select();
if(!empty($list)){
foreach ($list as $k => $v){
$reslut = model('admin/User')->change_user_money_by_uid($v['uid'], $v['user_earnings'], 1, 35, '房间幸运补贴收益', $v['uid'], 0, $v['rid']);
if ($reslut['code'] == 201) {
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
$reslut = db::name('user_room_week_earnings')->where('id', $v['id'])->update(['is_delete' => 2, 'update_time' => time()]);
if (!$reslut) {
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
}
}
// 提交事务
Db::commit();
return ['code' => 200, 'msg' => "发放成功", 'data' => null];
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return ['code' => 201, 'msg' => "发放失败", 'data' => null];
}
}
//补贴详情
public function get_give_room_subsidy_info($id){
if(empty($id)){
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$user_room_week_earnings = db::name('user_room_week_earnings')->where('id', $id)->find();
if(!$user_room_week_earnings){
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
return ['code' => 200, 'msg' => '获取成功', 'data' => $user_room_week_earnings];
}
//修改补贴
public function edit_give_room_subsidy($id, $user_earnings){
if(empty($id)){
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$user_room_week_earnings = db::name('user_room_week_earnings')->where('id', $id)->find();
if(!$user_room_week_earnings){
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
if($user_earnings < 0){
return ['code' => 201, 'msg' => '收益不能小于0', 'data' => null];
}
if($user_room_week_earnings['is_delete'] == 2){
return ['code' => 201, 'msg' => '该收益已结算,无法编辑', 'data' => null];
}
$update = [];
$update['user_earnings'] = $user_earnings;
$update['update_time'] = time();
$reslut = db::name('user_room_week_earnings')->where('id', $id)->update($update);
if($reslut){
return ['code' => 200, 'msg' => '编辑成功', 'data' => null];
}else{
return ['code' => 201, 'msg' => '编辑失败', 'data' => null];
}
}
//监控宝箱redis list 剩余宝箱数量 生成
//tid 宝箱类型
//is_reset 0不重置 1重置
public function control_gift_multiple($id = 0, $is_reset = 0)
{
set_time_limit(0);
ini_set('memory_limit', '1024M');
$redis = connectionRedis();
// dump($id);
// dump($is_reset);
// exit;
$map = [];
if (!empty($id)) {
$map[] = ['id', '=', $id];
}
$map[] = ['is_delete', '=', 1];
$gift_multiple_type_list = db::name('gift_multiple_type')->where($map)->select();
$list_len = 0;
foreach ($gift_multiple_type_list as $k => $v) {
$map = [];
$map[] = ['pid', '=', $v['id']];
$map[] = ['is_delete', '=', 1];
$gift_multiple_rate_list = Db::name('gift_multiple_rate')->where($map)->select();
$keyname = "multiple:list:type:" . $v['id'];
if ($is_reset == 1) {
$redis->del($keyname); //如果重置则删除原队列
}
//剩余开奖次数少于5000 则补充下一期奖池
if ($redis->llen($keyname) < 500) {
$insert_data = [];
$total_gift_value = 0;
foreach ($gift_multiple_rate_list as $m => $n) {
//更新添加次数
for ($q = 0; $q < $n['rate_num']; $q++) {
$insert_data[] = $n['multiple'];
}
}
shuffle($insert_data);
if (!empty($gift_multiple_rate_list)) {
//插入期日志表
$data = [];
$data['pid'] = $v['id'];
$data['total_num'] = count($insert_data);
$data['open_num'] = 0;
$data['config_text'] = json_encode($gift_multiple_rate_list);
$data['add_time'] = time();
$data['update_time'] = time();
$bl_id = db::name('gift_multiple_log')->insertGetId($data);
foreach ($insert_data as $p => $q) {
$insert_data[$p] = $bl_id . '-' . $insert_data[$p];
}
// shuffle($insert_data);
array_unshift($insert_data, $keyname);
call_user_func_array([$redis, 'rPush'], $insert_data);
}
}
$list_len = $redis->llen($keyname);
//echo date('Y-m-d H:i:s') . " " . $keyname . "宝箱剩余数量:$list_len" . "\r\n";
}
return ['code' => 200, 'msg' => '生成成功', 'data' => "剩余数量: $list_len"];
}
}