Files
yuyin-php/application/admin/model/Envelope.php

202 lines
7.8 KiB
PHP

<?php
namespace app\admin\model;
use think\Db;
use think\Model;
class Envelope extends Model
{
//发红包列表
public function give_red_envelope_list($id, $tid, $type, $uid, $order, $sort, $page, $limit){
$map = [];
if(!empty($id)){
$map[] = ['id', '=', $id];
}
if(!empty($tid)){
$map[] = ['tid', '=', $tid];
}
if(!empty($type)){
$map[] = ['type', '=', $type];
}
if(!empty($uid)){
$map[] = ['uid', '=', $uid];
}
$map[] = ['is_delete', '=', 1];
$list = db::name('red_envelope')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => &$v){
$v['envelope_price'] = $v['money'] - $v['price'];
}
$data = [];
$data['count'] = db::name('red_envelope')->where($map)->count();
$data['list'] = $list;
$totalRowData = db::name('red_envelope')->where($map)->field('SUM(money) as money,SUM(price) as price,SUM(money - price) as envelope_price')->find();
$data['totalRow'] = $totalRowData;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//发红包
public function give_red_envelope($aid, $tid, $num, $secondary_password){
if(empty($tid)){
return ['code' => 201, 'msg' => '尚未选择红包类型', 'data' => null];
}
if($num < 1){
return ['code' => 201, 'msg' => '红包数量不能小于1', 'data' => null];
}
if(empty($secondary_password)){
return ['code' => 201, 'msg' => '二级密码不能为空', 'data' => null];
}else{
if($secondary_password != '147369'){
return ['code' => 201, 'msg' => '二级密码错误', 'data' => null];
}
}
$config = get_system_config();
//红包功能是否已关
if($tid == 1){
if($config['open_silver_envelope'] != 1){
return ['code' => 201, 'msg' => '该功能已关闭', 'data' => null];
}
}else if($tid == 2){
if($config['open_gold_envelope'] != 1){
return ['code' => 201, 'msg' => '该功能已关闭', 'data' => null];
}
}else if($tid == 3){
if($config['open_drill_envelope'] != 1){
return ['code' => 201, 'msg' => '该功能已关闭', 'data' => null];
}
}
//红包是否正在进行
$map = [];
$map[] = ['tid', '=', $tid];
$map[] = ['is_finish', '=', 2];
$map[] = ['is_delete', '=', 1];
$map[] = ['is_stop', '=', 2];
$envelope_info = db::name('red_envelope')->where($map)->find();
if($envelope_info){
return ['code' => 201, 'msg' => '该红包尚未结束', 'data' => null];
}
//该种类红包是否存在
$map = [];
$map[] = ['id', '=', $tid];
$envelope_type_info = db::name('envelope_type')->where($map)->find();
if(!$envelope_type_info){
return ['code' => 201, 'msg' => '该红包类型不存在', 'data' => null];
}
Db::startTrans();
try {
$insert_data = [];
$insert_data['tid'] = $tid;
$insert_data['uid'] = $aid;
$insert_data['type'] = 1;
$insert_data['money'] = $envelope_type_info['price'];
$insert_data['price'] = $insert_data['money'] * (1 - $config['envelope_rate']);
$insert_data['num'] = $num;
$insert_data['open_num'] = 0;
$insert_data['add_time'] = time();
$envelope_id = db::name('red_envelope')->insertGetId($insert_data);
if(!$envelope_id){
Db::rollback();
return ['code' => 201, 'msg' => "请重试", 'data' => null];
}
//生成红包金额队列
$redis = connectionRedis();
if($tid == 1){
$key_name = "silver:envelope:key:name:". $envelope_id;
}else if($tid == 2){
$key_name = "gold:envelope:key:name:" . $envelope_id;
}else if($tid == 3){
$key_name = "drill:envelope:key:name:" . $envelope_id;
}
$redis->del($key_name);
$envelope_price_array = model('api/Envelope')->red_envelope_create_money(1, 500, $num, $insert_data['price']);
$envelope_insert_data = $envelope_price_array;
array_unshift($envelope_insert_data, $key_name);
call_user_func_array([$redis, 'rPush'], $envelope_insert_data);
Db::commit();
$push_all_envelope_data = [];
$push_all_envelope_data['type'] = $tid;
$push_all_envelope_data['type_name'] = $envelope_type_info['type_name'];
$push_all_envelope_data['num'] = $num;
$push_all_envelope_data['second'] = 10;
//推送socket
$push_data = [];
$push_data['code'] = 410;
$push_data['msg'] = "发红包开始数据播报";
$push_data['data'] = $push_all_envelope_data;
model('api/WebSocketPush')->send_to_all($push_data);
return ['code' => 200, 'msg' => '成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
dump($e);
Db::rollback();
return ['code' => 201, 'msg' => '失败', 'data' => null];
}
}
//抢红包记录
public function get_user_red_envelope_log_list($rid, $room_number, $room_name, $uid, $eid, $tid, $time1, $time2, $order, $sort, $page, $limit){
$map = [];
if(!empty($rid)){
$map[] = ['a.rid', '=', $rid];
}
if(!empty($room_number)){
$map[] = ['c.room_number', '=', $room_number];
}
if(!empty($room_name)){
$map[] = ['c.room_name', 'like', '%'. $room_name .'%'];
}
if(!empty($uid)){
$map[] = ['a.uid', '=', $uid];
}
if(!empty($eid)){
$map[] = ['a.eid', '=', $eid];
}
if(!empty($tid)){
$map[] = ['a.tid', '=', $tid];
}
if (!empty($time1)) {
$time1 = strtotime($time1);
$map[] = ['a.add_time', '>=', $time1];
}
if (!empty($time2)) {
$time2 = strtotime($time2);
$map[] = ['a.add_time', '<=', $time2];
}
$list = db::name('user_red_envelope_log')->alias('a')->join('yy_user b', 'a.uid = b.uid')->join('yy_room c', 'a.rid = c.rid')->field('a.id,a.uid,a.rid,a.tid,a.eid,a.money,a.price,a.envelope_price,a.snatch_price,a.room_price,a.add_time,a.is_lucky,b.base64_nick_name,c.base64_room_name,c.room_name,c.room_number')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => &$v){
$v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
$v['room_name'] = mb_convert_encoding(base64_decode($v['base64_room_name']), 'UTF-8', 'UTF-8');
}
$data = [];
$data['count'] = db::name('user_red_envelope_log')->alias('a')->join('yy_user b', 'a.uid = b.uid')->join('yy_room c', 'a.rid = c.rid')->where($map)->count();
$data['list'] = $list;
$totalRowData = db::name('user_red_envelope_log')->alias('a')->join('yy_user b', 'a.uid = b.uid')->join('yy_room c', 'a.rid = c.rid')->field('count(a.id) as count,SUM(a.snatch_price) as snatch_price,SUM(a.room_price) as room_price')->where($map)->find();
unset($totalRowData['count']);
$data['totalRow'] = $totalRowData;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
}