202 lines
7.8 KiB
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];
|
|
}
|
|
|
|
|
|
}
|