532 lines
24 KiB
PHP
532 lines
24 KiB
PHP
<?php
|
|
|
|
namespace app\api\model;
|
|
|
|
use think\Db;
|
|
use think\Model;
|
|
|
|
class NewRoom extends Model
|
|
{
|
|
|
|
//开始拍卖
|
|
public function open_auction($uid, $rid)
|
|
{
|
|
$config = get_uncache_system_config();
|
|
|
|
$user_info = db::name('user')->field('uid')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$room_info = db::name('room')->find($rid);
|
|
if(!$room_info){
|
|
return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null];
|
|
}
|
|
|
|
//是否有权限
|
|
if($uid != $room_info['room_host_uid'] && $uid != $room_info['room_owner_uid']){
|
|
return ['code' => 201, 'msg' => '您无权限进行该操作', 'data' => null];
|
|
}
|
|
|
|
//当前是否已有未结束的拍卖
|
|
$map = [];
|
|
$map[] = ['rid', '=', $rid];
|
|
$map[] = ['is_stop', '=', 2];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$room_auction_info = db::name('room_new_auction_log')->where($map)->find();
|
|
if($room_auction_info){
|
|
return ['code' => 201, 'msg' => '当前尚有进行中的拍卖', 'data' => null];
|
|
}
|
|
|
|
//是否有新人在拍卖位上
|
|
$map = [];
|
|
$map[] = ['rid', '=', $rid];
|
|
$map[] = ['micro_id', '=', 1];
|
|
$room_micro_info = db::name('room_micro')->where($map)->find();
|
|
if($room_micro_info && $room_micro_info['uid'] <= 0){
|
|
return ['code' => 201, 'msg' => '当前尚未有人在麦上,无法开启', 'data' => null];
|
|
}
|
|
|
|
//该用户是否已被签约
|
|
$map = [];
|
|
$map[] = ['sign_uid', '=', $room_micro_info['uid']];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$user_contract = db::name('user_sign_contract')->where($map)->find();
|
|
if($user_contract){
|
|
return ['code' => 201, 'msg' => '该用户已被签约', 'data' => null];
|
|
}
|
|
|
|
//新人信息
|
|
$new_user_info = db::name('user')->where('uid', $room_micro_info['uid'])->find();
|
|
|
|
Db::startTrans();
|
|
try {
|
|
//开始拍卖
|
|
$insert = [];
|
|
$insert['rid'] = $rid;
|
|
$insert['uid'] = $room_micro_info['uid'];
|
|
$insert['auction_uid'] = 0;
|
|
if($new_user_info['social'] < 1){
|
|
$insert['start_value'] = $config['initial_user_social'];
|
|
}else{
|
|
$insert['start_value'] = $new_user_info['social'];
|
|
}
|
|
$insert['add_time'] = time();
|
|
$reslut = db::name('room_new_auction_log')->insert($insert);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '开启失败', 'data' => null];
|
|
}
|
|
|
|
Db::commit();
|
|
|
|
model('api/room')->push_room_micro_data($rid);
|
|
|
|
return ['code' => 200, 'msg' => '开启成功', 'data' => null];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '开启失败', 'data' => null];
|
|
}
|
|
|
|
|
|
}
|
|
|
|
//当前拍卖前三名
|
|
public function get_room_new_auction_rank($rid){
|
|
$room_info = db::name('room')->find($rid);
|
|
if(!$room_info){
|
|
return ['code' => 201, 'msg' => '该房间信息不存在', 'data' => null];
|
|
}
|
|
|
|
//当前房间是否有拍卖
|
|
$room_new_auction_log = db::name('room_new_auction_log')->where('rid', $rid)->where('is_stop', 2)->where('is_delete', 1)->find();
|
|
if(!$room_new_auction_log){
|
|
$data = [];
|
|
$data['list'] = [];
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
//前三
|
|
$room_new_auction_price_list = db::name('room_new_auction_price')->alias('a')->join('yy_user b', 'a.auction_uid = b.uid')->field('a.id, b.uid, b.nick_name, b.base64_nick_name, b.head_pic, a.price')->where('a.nid', $room_new_auction_log['id'])->order('a.price desc')->limit(3)->select();
|
|
foreach ($room_new_auction_price_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 = [];
|
|
$data['list'] = $room_new_auction_price_list;
|
|
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
|
}
|
|
|
|
//出价列表
|
|
public function get_room_auction_price_list(){
|
|
$list = db::name('auction_price')->where('is_delete', 1)->field('price')->order('price asc')->select();
|
|
return ['code' => 200, 'msg' => '成功', 'data' => $list];
|
|
|
|
}
|
|
|
|
//用户出价
|
|
public function user_auction_price($uid, $rid, $price){
|
|
$user_info = db::name('user')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$room_info = db::name('room')->find($rid);
|
|
if(!$room_info){
|
|
return ['code' => 201, 'msg' => '该房间信息不存在', 'data' => null];
|
|
}
|
|
|
|
//该价位是否存在
|
|
$auction_price = db::name('auction_price')->where('price', $price)->where('is_delete', 1)->find();
|
|
if(!$auction_price){
|
|
return ['code' => 201, 'msg' => '该加价信息不存在', 'data' => null];
|
|
}
|
|
|
|
//当前房间拍卖信息
|
|
$room_auction_info = db::name('room_new_auction_log')->where('rid', $rid)->where('is_stop', 2)->where('is_delete', 1)->find();
|
|
if(!$room_auction_info){
|
|
return ['code' => 201, 'msg' => '当前房间尚未开启拍卖', 'data' => null];
|
|
}
|
|
|
|
if($uid == $room_auction_info['uid']){
|
|
return ['code' => 201, 'msg' => '自己不能竞拍自己', 'data' => null];
|
|
}
|
|
|
|
Db::startTrans();
|
|
try {
|
|
//当前竞拍价
|
|
$new_auction_price = db::name('room_new_auction_log')->where('id', $room_auction_info['id'])->value('start_value');
|
|
|
|
//当前用户金额是否可以加价
|
|
$user_auction_price = model('NewRoom')->get_user_auction_price($uid);
|
|
if($user_info['integral'] < ($user_auction_price + $price + $new_auction_price)){
|
|
return ['code' => 201, 'msg' => '您当前的金币不足以加价', 'data' => null];
|
|
}
|
|
|
|
|
|
|
|
//用户加价信息
|
|
$room_auction_price = db::name('room_new_auction_price')->where('auction_uid', $uid)->where('nid', $room_auction_info['id'])->find();
|
|
if($room_auction_price){
|
|
$update = [];
|
|
$update['price'] = $new_auction_price + $price;
|
|
$update['update_time'] = time();
|
|
$reslut = db::name('room_new_auction_price')->where('id', $room_auction_price['id'])->update($update);
|
|
|
|
}else{
|
|
|
|
$insert = [];
|
|
$insert['rid'] = $rid;
|
|
$insert['nid'] = $room_auction_info['id'];
|
|
$insert['uid'] = $room_auction_info['uid'];
|
|
$insert['auction_uid'] = $uid;
|
|
$insert['price'] = $new_auction_price + $price;
|
|
$insert['add_time'] = time();
|
|
$insert['update_time'] = time();
|
|
$reslut = db::name('room_new_auction_price')->insert($insert);
|
|
|
|
}
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '开启失败', 'data' => null];
|
|
}
|
|
|
|
//用户加价记录
|
|
$insert_data = [];
|
|
$insert_data['nid'] = $room_auction_info['id'];
|
|
$insert_data['rid'] = $rid;
|
|
$insert_data['auction_uid'] = $uid;
|
|
$insert_data['uid'] = $room_auction_info['uid'];
|
|
$insert_data['change_value'] = $new_auction_price;
|
|
$insert_data['add_value'] = $price;
|
|
$insert_data['add_time'] = time();
|
|
$reslut = db::name('user_room_new_aution_log')->insert($insert_data);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '开启失败', 'data' => null];
|
|
}
|
|
|
|
//修改当前用户基础起拍价
|
|
$update = [];
|
|
$update['update_time'] = time();
|
|
$reslut = db::name('room_new_auction_log')->where('id', $room_auction_info['id'])->inc('start_value', $price)->update($update);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '开启失败', 'data' => null];
|
|
}
|
|
|
|
Db::commit();
|
|
|
|
model('api/room')->push_room_micro_data($rid);
|
|
|
|
$push_data = [];
|
|
$push_data['code'] = 3001;
|
|
$push_data['msg'] = "竞拍前三名信息";
|
|
$data = $this->get_room_new_auction_rank($rid);
|
|
$push_data['data'] = $data['data'];
|
|
model('api/WebSocketPush')->send_to_group($rid, $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_auction_price($uid){
|
|
$user_auction_price = 0;
|
|
|
|
//新人厅出价
|
|
$map = [];
|
|
$map[] = ['auction_uid', '=', $uid];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$room_new_auction_price = db::name('room_new_auction_price')->where($map)->select();
|
|
if(!empty($room_new_auction_price)){
|
|
$new_auction_price = db::name('room_new_auction_price')->where($map)->sum('price');
|
|
$user_auction_price += $new_auction_price;
|
|
}
|
|
|
|
//K歌厅出价
|
|
$map = [];
|
|
$map[] = ['auction_uid', '=', $uid];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$room_new_auction_price = db::name('user_room_song_auction')->where($map)->select();
|
|
if(!empty($room_new_auction_price)){
|
|
$song_auction_price = 0;
|
|
foreach ($room_new_auction_price as $k => $v){
|
|
$room_user_song_log = db::name('room_song_user_log')->where('rsid', $v['rsid'])->where('uid', $v['uid'])->find();
|
|
if($room_user_song_log){
|
|
if($room_user_song_log['is_delete'] == 1){
|
|
$song_auction_price += $v['price'];
|
|
}
|
|
}
|
|
}
|
|
// $song_auction_price = db::name('user_room_song_auction')->where($map)->sum('price');
|
|
$user_auction_price += $song_auction_price;
|
|
}
|
|
|
|
return $user_auction_price;
|
|
}
|
|
|
|
//结束拍卖
|
|
public function finish_auction($uid, $rid){
|
|
$config = get_uncache_system_config();
|
|
|
|
$user_info = db::name('user')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$room_info = db::name('room')->find($rid);
|
|
if(!$room_info){
|
|
return ['code' => 201, 'msg' => '该房间信息不存在', 'data' => null];
|
|
}
|
|
|
|
//是否有权限结束
|
|
if($room_info['room_host_uid'] != $uid){
|
|
return ['code' => 201, 'msg' => '当前麦上主持才可结束', 'data' => null];
|
|
}
|
|
|
|
//当前房间是否正在进行的拍卖
|
|
$room_auction_info = db::name('room_new_auction_log')->where('rid', $rid)->where('is_stop', 2)->where('is_delete', 1)->find();
|
|
if(!$room_auction_info){
|
|
return ['code' => 201, 'msg' => '当前房间尚未开启拍卖', 'data' => null];
|
|
}
|
|
|
|
//
|
|
Db::startTrans();
|
|
try {
|
|
$now_time = time();
|
|
|
|
//是否有最高出价
|
|
$room_auction_price_info = db::name('room_new_auction_price')->where('nid', $room_auction_info['id'])->order('price desc')->limit(1)->find();
|
|
if(empty($room_auction_price_info)){//流拍
|
|
//当前拍卖结束
|
|
$reslut = db::name('room_new_auction_log')->where('id', $room_auction_info['id'])->update(['is_stop' => 1, 'is_delete' => 2, 'update_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
$is_push = 2;
|
|
}else{//签约
|
|
$insert = [];
|
|
$insert['uid'] = $room_auction_price_info['auction_uid'];
|
|
$insert['sign_uid'] = $room_auction_price_info['uid'];
|
|
$insert['price'] = $room_auction_price_info['price'];
|
|
$insert['add_time'] = $now_time;
|
|
$insert['end_time'] = $now_time + (60*60*24*7);
|
|
$reslut = db::name('user_sign_contract')->insert($insert);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
//修改用户身价及是否签约
|
|
$reslut = db::name('user')->where('uid', $room_auction_price_info['uid'])->update(['social' => $room_auction_price_info['price'], 'is_sign' => 1, 'update_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
//修改用户制作人身份
|
|
$reslut = db::name('user')->where('uid', $room_auction_price_info['auction_uid'])->update(['is_producer' => 1, 'update_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
//新手签约奖励
|
|
$user_is_song_award = 2;
|
|
$user_song_money = 1;
|
|
$user_award_num = db::name('user_new_award_log')->where('uid', $room_auction_price_info['uid'])->find();
|
|
if($user_award_num){
|
|
if($user_award_num < 3){
|
|
$reslut = model('admin/User')->change_user_money_by_uid($room_auction_price_info['uid'], $user_song_money, 1, 43, "新手签约奖励", $room_auction_price_info['uid'], 0, $rid);
|
|
if ($reslut['code'] == 201) {
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
}
|
|
|
|
$reslut = db::name('user_new_award_log')->where('id', $user_award_num['id'])->inc('num', 1)->update();
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
$user_is_song_award = 1;
|
|
}
|
|
}else{
|
|
$reslut = model('admin/User')->change_user_money_by_uid($room_auction_price_info['uid'], $user_song_money, 1, 43, "新手签约奖励", $room_auction_price_info['uid'], 0, $rid);
|
|
if ($reslut['code'] == 201) {
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
}
|
|
|
|
$insert = [];
|
|
$insert['uid'] = $room_auction_price_info['uid'];
|
|
$insert['num'] = 1;
|
|
$insert['add_time'] = time();
|
|
$reslut = db::name('user_new_award_log')->insert($insert);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
$user_is_song_award = 1;
|
|
}
|
|
|
|
//主持获得签约成功的金币
|
|
$host_is_award = 2;
|
|
$money = 2;
|
|
//主持当天是否达到100个艺人
|
|
$room_host_num = db::name('user_new_host_award_log')->where('uid', $room_info['room_host_uid'])->whereTime('add_time', 'today')->find();
|
|
if($room_host_num){
|
|
if($room_host_num['num'] < 100){
|
|
$reslut = model('admin/User')->change_user_money_by_uid($room_info['room_host_uid'], $money, 2, 23, "签约成功主持获得金币", $room_info['room_host_uid'], 0, $rid);
|
|
if ($reslut['code'] == 201) {
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
}
|
|
|
|
$reslut = db::name('user_new_host_award_log')->where('id', $room_host_num['id'])->inc('num', 1)->update();
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
$host_is_award = 1;
|
|
}
|
|
}else{
|
|
$reslut = model('admin/User')->change_user_money_by_uid($room_info['room_host_uid'], $money, 2, 23, "签约成功主持获得金币", $room_info['room_host_uid'], 0, $rid);
|
|
if ($reslut['code'] == 201) {
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
}
|
|
|
|
$insert = [];
|
|
$insert['uid'] = $room_info['room_host_uid'];
|
|
$insert['num'] = 1;
|
|
$insert['add_time'] = time();
|
|
$reslut = db::name('user_new_host_award_log')->insert($insert);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '请重试', 'data' => null];
|
|
}
|
|
$host_is_award = 1;
|
|
}
|
|
|
|
//扣除拍卖人的金币
|
|
$reslut = model('admin/User')->change_user_money_by_uid($room_auction_price_info['auction_uid'], -$room_auction_price_info['price'], 2, 24, "拍卖签约扣除金币", $room_auction_price_info['auction_uid'], 0, $rid);
|
|
if ($reslut['code'] == 201) {
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
}
|
|
|
|
//当前拍卖结束
|
|
$reslut = db::name('room_new_auction_log')->where('id', $room_auction_info['id'])->update(['auction_uid' => $room_auction_price_info['auction_uid'], 'end_value' => $room_auction_price_info['price'], 'is_stop' => 1, 'is_delete' => 2, 'update_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
//结束当前拍卖价位
|
|
$reslut = db::name('room_new_auction_price')->where('nid', $room_auction_info['id'])->update(['is_delete' => 2, 'update_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
$is_push = 1;
|
|
}
|
|
|
|
//拍卖用户下麦
|
|
$map = [];
|
|
$map[] = ['rid', '=', $rid];
|
|
$map[] = ['micro_id', 'in', [1]];
|
|
$map[] = ['uid', '>', 0];
|
|
$reslut = db::name('room_micro')->where($map)->update(['uid' => 0, 'update_time' => time(), 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid' => 0, 'right_gid' => 0]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
// $reslut = model('api/room')->user_down_micro($room_auction_info['uid'], $rid, 2);
|
|
// if($reslut['code'] != 200){
|
|
// Db::rollback();
|
|
// return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
// }
|
|
|
|
Db::commit();
|
|
|
|
model('api/room')->push_room_micro_data($rid);
|
|
|
|
if($is_push == 1){
|
|
$auction_user_info = db::name('user')->find($room_auction_price_info['auction_uid']);
|
|
$sign_user_info = db::name('user')->find($room_auction_price_info['uid']);
|
|
$room_host_info = db::name('user')->find($room_info['room_host_uid']);
|
|
|
|
$push_message = [];
|
|
$push_message['auction_user_info']['uid'] = $room_auction_price_info['auction_uid'];
|
|
$push_message['auction_user_info']['nick_name'] = mb_convert_encoding(base64_decode($auction_user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$push_message['auction_user_info']['head_pic'] = localpath_to_netpath($auction_user_info['head_pic']);
|
|
$push_message['sign_user_info']['uid'] = $room_auction_price_info['uid'];
|
|
$push_message['sign_user_info']['nick_name'] = mb_convert_encoding(base64_decode($sign_user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$push_message['sign_user_info']['head_pic'] = localpath_to_netpath($sign_user_info['head_pic']);
|
|
$push_message['is_push_user_song_award'] = $user_is_song_award;
|
|
$push_message['push_user_song_award']['uid'] = 0;
|
|
$push_message['push_user_song_award']['nick_name'] = '';
|
|
$push_message['push_user_song_award']['head_pic'] = '';
|
|
$push_message['push_user_song_award']['content'] = '';
|
|
if($user_is_song_award == 1){
|
|
$push_message['push_user_song_award']['uid'] = $room_auction_price_info['uid'];
|
|
$push_message['push_user_song_award']['nick_name'] = mb_convert_encoding(base64_decode($sign_user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$push_message['push_user_song_award']['head_pic'] = localpath_to_netpath($sign_user_info['head_pic']);
|
|
$push_message['push_user_song_award']['content'] = '唱歌完成获得1钻石奖励';
|
|
|
|
}
|
|
$push_message['is_push_host_award'] = $host_is_award;
|
|
$push_message['push_host_award']['uid'] = 0;
|
|
$push_message['push_host_award']['nick_name'] = '';
|
|
$push_message['push_host_award']['head_pic'] = '';
|
|
$push_message['push_host_award']['content'] = '';
|
|
if($host_is_award == 1){
|
|
$push_message['push_host_award']['uid'] = $room_info['room_host_uid'];
|
|
$push_message['push_host_award']['nick_name'] = mb_convert_encoding(base64_decode($room_host_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$push_message['push_host_award']['head_pic'] = localpath_to_netpath($room_host_info['head_pic']);
|
|
$push_message['push_host_award']['content'] = '获得签约新人奖励2金币';
|
|
}
|
|
|
|
|
|
//提示签约成功
|
|
$push_data = [];
|
|
$push_data['code'] = 3002;
|
|
$push_data['msg'] = "签约成功";
|
|
$push_data['data'] = $push_message;
|
|
model('api/WebSocketPush')->send_to_group($rid, $push_data);
|
|
}
|
|
|
|
|
|
return ['code' => 200, 'msg' => '结束成功', 'data' => null];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|