签约房-装扮-降身卡功能开发

This commit is contained in:
2025-11-25 18:29:45 +08:00
parent aebef67454
commit 3d17e38bb0
2 changed files with 173 additions and 86 deletions

View File

@@ -60,6 +60,8 @@ class Decorate extends adminApi
$return_list[$k]['is_buy'] = $v['is_buy']; $return_list[$k]['is_buy'] = $v['is_buy'];
$return_list[$k]['createtime'] = date('Y-m-d H:i:s', $v['createtime']); $return_list[$k]['createtime'] = date('Y-m-d H:i:s', $v['createtime']);
$return_list[$k]['admin_name'] = db::name('admin')->where(['id'=>$v['admin_id']])->value('nickname')??"--"; $return_list[$k]['admin_name'] = db::name('admin')->where(['id'=>$v['admin_id']])->value('nickname')??"--";
$return_list[$k]['ext_value'] = $v['ext_value'] ?? 0;
} }
$return_data = [ $return_data = [
@@ -86,6 +88,7 @@ class Decorate extends adminApi
$play_image = input('play_image', ''); $play_image = input('play_image', '');
//靓号 //靓号
$special_num = input('special_num', ''); $special_num = input('special_num', '');
$ext_value = input('ext_value', '');
if($title==""){ if($title==""){
return V(0,"参数错"); return V(0,"参数错");
} }
@@ -104,7 +107,8 @@ class Decorate extends adminApi
'special_num' => $special_num, 'special_num' => $special_num,
'createtime' => time(), 'createtime' => time(),
'updatetime' => time(), 'updatetime' => time(),
'admin_id' => $admin_id 'admin_id' => $admin_id,
'ext_value' => $ext_value,
]; ];
$id = db::name($this->table)->insertGetId($data); $id = db::name($this->table)->insertGetId($data);
if(!$id){ if(!$id){
@@ -143,6 +147,7 @@ class Decorate extends adminApi
$file_type = input('file_type', 2); $file_type = input('file_type', 2);
$play_image = input('play_image', ''); $play_image = input('play_image', '');
$special_num = input('special_num', ''); $special_num = input('special_num', '');
$ext_value = input('ext_value', '');
$data = []; $data = [];
if($title!=""){ if($title!=""){
$data['title'] = $title; $data['title'] = $title;
@@ -168,6 +173,9 @@ class Decorate extends adminApi
if($special_num!=""){ if($special_num!=""){
$data['special_num'] = $special_num; $data['special_num'] = $special_num;
} }
if($ext_value!=""){
$data['ext_value'] = $ext_value;
}
$data['updatetime'] = time(); $data['updatetime'] = time();
$res = db::name($this->table)->where(['did'=>$did])->update($data); $res = db::name($this->table)->where(['did'=>$did])->update($data);
if(!$res){ if(!$res){
@@ -375,7 +383,7 @@ class Decorate extends adminApi
public function give_decorate(){ public function give_decorate(){
$user_id = input('user_id', ''); $user_id = input('user_id', '');
$decorate_id = input('decorate_id', ''); $decorate_id = input('decorate_id', '');
$day = input('day', ''); $day = input('day', 0);
$user = db::name('user')->where(['user_code'=>$user_id])->find(); $user = db::name('user')->where(['user_code'=>$user_id])->find();
if(!$user){ if(!$user){
return V(0,"用户不存在"); return V(0,"用户不存在");
@@ -385,10 +393,12 @@ class Decorate extends adminApi
if(!$decorate){ if(!$decorate){
return V(0,"装扮不存在"); return V(0,"装扮不存在");
} }
if($decorate['type']!=12){
$decorate_price = db::name('vs_decorate_price')->where(['did'=>$decorate_id,'day'=>$day,'is_delete'=>1])->find(); $decorate_price = db::name('vs_decorate_price')->where(['did'=>$decorate_id,'day'=>$day,'is_delete'=>1])->find();
if(!$decorate_price){ if(!$decorate_price){
return V(0,"该装扮天数不存在"); return V(0,"该装扮天数不存在");
} }
}
$result = model('api/Decorate')->pay_decorate($user_id,$decorate_id,$day,2); $result = model('api/Decorate')->pay_decorate($user_id,$decorate_id,$day,2);
if($result['code'] == 1){ if($result['code'] == 1){
return V(1,"成功"); return V(1,"成功");

View File

@@ -75,7 +75,19 @@ class Decorate extends Model
'a.type' => $type, 'a.type' => $type,
]; ];
} }
if($type == 12){
$map = [
'type' => 12,
'delete_time' => 0,
'show_status' => 1,
'is_buy' => 1
];
$list = DB::name($this->table)->where($map)->field('did,title,type,base_image,play_image,price')
->order('price asc')
->select();
}else{
$list = DB::name($this->table)->alias('a')->join('fa_vs_decorate_price b', 'a.did = b.did')->field('a.did,a.title,a.type,a.base_image,a.play_image,min(b.price) as price,special_num')->where($map)->group('b.did')->order('price asc')->select(); $list = DB::name($this->table)->alias('a')->join('fa_vs_decorate_price b', 'a.did = b.did')->field('a.did,a.title,a.type,a.base_image,a.play_image,min(b.price) as price,special_num')->where($map)->group('b.did')->order('price asc')->select();
}
foreach ($list as $k => &$v) { foreach ($list as $k => &$v) {
$v['base_image'] = localpath_to_netpath($v['base_image']); $v['base_image'] = localpath_to_netpath($v['base_image']);
$v['play_image'] = localpath_to_netpath($v['play_image']); $v['play_image'] = localpath_to_netpath($v['play_image']);
@@ -90,6 +102,7 @@ class Decorate extends Model
if (!$decorate) { if (!$decorate) {
return ['code' => 0, 'msg' => '参数错误']; return ['code' => 0, 'msg' => '参数错误'];
} }
if($decorate['type'] == 12){
$decorate_price = DB::name('vs_decorate_price')->where(['did' => $did, 'is_delete' => 1])->order('day asc')->select(); $decorate_price = DB::name('vs_decorate_price')->where(['did' => $did, 'is_delete' => 1])->order('day asc')->select();
if (!$decorate_price) { if (!$decorate_price) {
return ['code' => 0, 'msg' => '参数错误']; return ['code' => 0, 'msg' => '参数错误'];
@@ -104,6 +117,11 @@ class Decorate extends Model
//有效期至 //有效期至
$result['price_list'][$k]['end_time'] = date('Y-m-d',strtotime("+".$v['day']." day")); $result['price_list'][$k]['end_time'] = date('Y-m-d',strtotime("+".$v['day']." day"));
} }
}else{
$result['title'] = $decorate['title'];
$result['price'] = (int)$decorate['price'];
$result['base_image'] = localpath_to_netpath($decorate['base_image']);
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $result]; return ['code' => 1, 'msg' => '获取成功', 'data' => $result];
} }
@@ -117,7 +135,7 @@ class Decorate extends Model
* @param $log_remark 日志备注 * @param $log_remark 日志备注
* *
*/ */
public function pay_decorate($uid, $did, $day,$from_type=1,$give_uid=0,$log_remark=""){ public function pay_decorate($uid, $did, $day=0,$from_type=1,$give_uid=0,$log_remark="",$num=1){
if(empty($log_remark)){ if(empty($log_remark)){
$log_remark = $this->FromType[$from_type]; $log_remark = $this->FromType[$from_type];
} }
@@ -135,6 +153,7 @@ class Decorate extends Model
if(!$decorate_info){ if(!$decorate_info){
return ['code' => 0, 'msg' => '该装扮不存在'.$did, 'data' => null]; return ['code' => 0, 'msg' => '该装扮不存在'.$did, 'data' => null];
} }
if($decorate_info['type'] != 12){
//该天数是否存在 //该天数是否存在
$map = []; $map = [];
$map = [ $map = [
@@ -155,6 +174,12 @@ class Decorate extends Model
if($decorate_info['type'] == 8 && $decorate_info['is_user_buy'] == 1){ if($decorate_info['type'] == 8 && $decorate_info['is_user_buy'] == 1){
return ['code' => 0, 'msg' => '该公会靓号已被购买', 'data' => null]; return ['code' => 0, 'msg' => '该公会靓号已被购买', 'data' => null];
} }
}else{
$decorate_price_info = [
'price' => $decorate_info['price'],
'day' => 0
];
}
$start_time = $now_time = time(); $start_time = $now_time = time();
Db::startTrans(); Db::startTrans();
try { try {
@@ -197,14 +222,22 @@ class Decorate extends Model
if($decorate_price_info['day'] == 0){//如果礼物购买配置的天数为0则永久有效 if($decorate_price_info['day'] == 0){//如果礼物购买配置的天数为0则永久有效
$data['is_using'] = 1; $data['is_using'] = 1;
$data['end_time'] = 0; $data['end_time'] = 0;
$data['is_perpetual'] = 1;
}else{ }else{
$change_time = $day * 24 * 3600; $change_time = $day * 24 * 3600;
$data['is_using'] = 2; $data['is_using'] = 2;
$data['end_time'] = $now_time + $change_time; $data['end_time'] = $now_time + $change_time;
} }
$data['createtime'] = $now_time; $data['createtime'] = $now_time;
$data['special_num'] = $decorate_info['special_num']; $data['special_num'] = $decorate_info['special_num'] ?? '';
$result = db::name('vs_user_decorate')->insert($data); $result = db::name('vs_user_decorate')->insert($data);
}else{
if($decorate_info['type'] == 12){
$result = db::name('vs_user_decorate')->where('udid', $user_decorate_data['udid'])->update([
'is_using' => 2,
'num' => $user_decorate_data['num'] + $num,
'end_time' => 0
]);
}else{ }else{
if($decorate_price_info['day'] > 0){//是不是永久礼物 if($decorate_price_info['day'] > 0){//是不是永久礼物
if($decorate_price_info['price']<=0 && $user_decorate_data['end_time'] > $now_time + $change_time){ if($decorate_price_info['price']<=0 && $user_decorate_data['end_time'] > $now_time + $change_time){
@@ -220,6 +253,7 @@ class Decorate extends Model
$start_time = $update['end_time']; $start_time = $update['end_time'];
} }
} }
}
if(!$result){ if(!$result){
Db::rollback(); Db::rollback();
return ['code' => 0, 'msg' => '操作失败', 'data' => null]; return ['code' => 0, 'msg' => '操作失败', 'data' => null];
@@ -262,7 +296,16 @@ class Decorate extends Model
//用户装扮列表 //用户装扮列表
public function user_decorate($uid, $type,$page=1, $limit=10){ public function user_decorate($uid, $type,$page=1, $limit=10){
if($type == 12){
$reslut = db::name('vs_user_decorate')
->alias('ud')->join('vs_decorate d', 'ud.did = d.did')
->field('ud.udid,ud.user_id,ud.is_using,ud.end_time,ud.is_perpetual,ud.special_num,d.title,d.base_image,d.play_image,d.type,ud.num')
->where('ud.user_id', $uid)
->where('ud.type', $type)
->where(['ud.num'=>[">",0]])
->page($page, $limit)
->select();
}else{
$reslut = db::name('vs_user_decorate') $reslut = db::name('vs_user_decorate')
->alias('ud')->join('vs_decorate d', 'ud.did = d.did') ->alias('ud')->join('vs_decorate d', 'ud.did = d.did')
->field('ud.udid,ud.user_id,ud.is_using,ud.end_time,ud.is_perpetual,ud.special_num,d.title,d.base_image,d.play_image,d.type') ->field('ud.udid,ud.user_id,ud.is_using,ud.end_time,ud.is_perpetual,ud.special_num,d.title,d.base_image,d.play_image,d.type')
@@ -279,7 +322,7 @@ class Decorate extends Model
//剩余天数 取整 //剩余天数 取整
$v['remaining_day'] = $v['is_perpetual']==1 ? '永久' :$remaining_day; $v['remaining_day'] = $v['is_perpetual']==1 ? '永久' :$remaining_day;
$v['end_time'] = date('Y-m-d H:i:s', $v['end_time']); $v['end_time'] = date('Y-m-d H:i:s', $v['end_time']);
}
} }
return ['code' => 1, 'msg' => "获取成功", 'data' => $reslut]; return ['code' => 1, 'msg' => "获取成功", 'data' => $reslut];
} }
@@ -296,10 +339,15 @@ class Decorate extends Model
if (empty($info)) { if (empty($info)) {
return ['code' => 0, 'msg' => '装扮不存在', 'data' => null]; return ['code' => 0, 'msg' => '装扮不存在', 'data' => null];
} }
if($info['type'] == 12){
if ($info['num']-1 < 0) {
return ['code' => 0, 'msg' => '无可用装扮', 'data' => null];
}
}else{
if ($info['end_time'] < time()) { if ($info['end_time'] < time()) {
return ['code' => 0, 'msg' => '装扮已过期', 'data' => null]; return ['code' => 0, 'msg' => '装扮已过期', 'data' => null];
} }
}
Db::startTrans(); Db::startTrans();
try { try {
//清理该类型装扮使用状态 //清理该类型装扮使用状态
@@ -324,6 +372,9 @@ class Decorate extends Model
$data = []; $data = [];
$data['is_using'] = 1; $data['is_using'] = 1;
$data['updatetime'] = time(); $data['updatetime'] = time();
if($info['type'] == 12){
$data['num'] = $info['num'] - 1;
}
$reslut = Db::name('vs_user_decorate')->where($map)->update($data); $reslut = Db::name('vs_user_decorate')->where($map)->update($data);
if (!$reslut) { if (!$reslut) {
Db::rollback(); Db::rollback();
@@ -331,6 +382,32 @@ class Decorate extends Model
} }
// 提交事务 // 提交事务
Db::commit(); Db::commit();
if($info['type'] == 12){
//使用降身卡,降低用户身价
$reduce_ratio = db::name('vs_decorate')->where(['did' => $info['did']])->value('reduce_ratio') ?? 0;
$market_value = db::name('user')->where(['id' => $uid])->value('market_value');
if($reduce_ratio){
$reduce_market_value = $market_value * $reduce_ratio / 100;
}else{
$reduce_market_value = 0;
}
if($reduce_market_value > 0){
$up_market_value = $market_value - $reduce_market_value;
if($up_market_value < 1){
$up_market_value = 1;
}
db::name('user')->where(['id' => $uid])->update(['market_value' => $up_market_value]);
//记录一条日志
db::name('vs_user_market_value_log')->insert([
'user id' => $uid,
'before' => $market_value,
'change value'=> $reduce_market_value,
'afterwards'=> $up_market_value,
'type' => 2,
'createtime'=> time()
]);
}
}else{
//推送信息去所在房间 //推送信息去所在房间
//查询当前所在房间 //查询当前所在房间
$room_id = db::name('vs_room_visitor')->where(['user_id' => $uid])->order('id' , 'desc')->value('room_id'); $room_id = db::name('vs_room_visitor')->where(['user_id' => $uid])->order('id' , 'desc')->value('room_id');
@@ -345,6 +422,7 @@ class Decorate extends Model
$text['text'] = '用户 ' . $text['FromUserInfo']['nickname'] .' 修改了信息'; $text['text'] = '用户 ' . $text['FromUserInfo']['nickname'] .' 修改了信息';
model('Chat')->sendMsg(1035,$room_id,$text,$uid); model('Chat')->sendMsg(1035,$room_id,$text,$uid);
} }
}
return ['code' => 1, 'msg' => "设置成功", 'data' => null]; return ['code' => 1, 'msg' => "设置成功", 'data' => null];
} catch (\Exception $e) { } catch (\Exception $e) {
// 回滚事务 // 回滚事务
@@ -367,7 +445,6 @@ class Decorate extends Model
if (!$reslut) { if (!$reslut) {
return ['code' => 0, 'msg' => "取消装扮失败", 'data' => null]; return ['code' => 0, 'msg' => "取消装扮失败", 'data' => null];
} }
return ['code' => 1, 'msg' => "取消成功", 'data' => null]; return ['code' => 1, 'msg' => "取消成功", 'data' => null];
} }
@@ -434,7 +511,7 @@ class Decorate extends Model
if($user_decorate['is_perpetual']==2 && $user_decorate['end_time'] < time()){ if($user_decorate['is_perpetual']==2 && $user_decorate['end_time'] < time()){
return $reslut; return $reslut;
} }
if($type == 9){ if(in_array($type, [9,12])){
$reslut = db::name('vs_decorate')->where('did', $user_decorate['did'])->value('base_image'); $reslut = db::name('vs_decorate')->where('did', $user_decorate['did'])->value('base_image');
}else{ }else{
$reslut = db::name('vs_decorate')->where('did', $user_decorate['did'])->value('play_image'); $reslut = db::name('vs_decorate')->where('did', $user_decorate['did'])->value('play_image');