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]; } }