Files
mier-php/application/api/model/Guard.php

155 lines
6.6 KiB
PHP
Raw Permalink Normal View History

2025-08-11 10:22:05 +08:00
<?php
namespace app\api\model;
use think\Db;
use think\Model;
class Guard extends Model
{
//获取可购买守护列表
public function get_guard_list()
{
$map = [];
$map[] = ['is_delete', '=', 1];
$list = db::name('guard')->field('gid,guard_name,title_image,position_image,frame_image')->cache(60)->where($map)->select();
foreach ($list as $k => &$v) {
$v['title_image'] = localpath_to_netpath($v['title_image']);
$v['position_image'] = localpath_to_netpath($v['position_image']);
$v['frame_image'] = localpath_to_netpath($v['frame_image']);
$map = [];
$map[] = ['gid', '=', $v['gid']];
$map[] = ['is_delete', '=', 1];
$v['guard_price_list'] = db::name('guard_price')->cache(60)->field('id,day,sell_price')->where($map)->select();
}
return ['code' => 200, 'msg' => '获取成功', 'data' => $list];
}
//购买守护
public function buy_guard($uid, $id, $guard_rid, $guard_uid)
{
$map = [];
$map[] = ['rid', '=', $guard_rid];
$map[] = ['is_delete', '=', 1];
$room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid')->where($map)->find();
if (empty($room_info)) {
return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null];
}
if ($uid == $guard_uid) {
return ['code' => 201, 'msg' => '自己不能购买自己的守护', 'data' => null];
}
if ($guard_uid != $room_info['room_host_uid']) {
return ['code' => 201, 'msg' => '守护人当前不是房间主持', 'data' => null];
}
$map = [];
$map[] = ['id', '=', $id];
$guard_price_info = db::name('guard_price')->where($map)->find();
if (empty($guard_price_info)) {
return ['code' => 201, 'msg' => '购买守护信息不存在', 'data' => null];
}
Db::startTrans();
try {
$map = [];
$map[] = ['uid', '=', $uid];
$map[] = ['gid', '=', $guard_price_info['gid']];
$map[] = ['guard_rid', '=', $guard_rid];
$map[] = ['guard_uid', '=', $guard_uid];
$user_guard_info = db::name('user_guard')->where($map)->find();
$ugid = 0;
if (!empty($user_guard_info)) {
$ugid = $user_guard_info['ugid'];
$map = [];
$map[] = ['ugid', '=', $ugid];
$data = [];
$data['over_time'] = $user_guard_info['over_time'] + $guard_price_info['day'] * 24 * 3600;
$data['update_time'] = time();
$reslut = db::name('user_guard')->where($map)->update($data);
if (!$reslut) {
Db::rollback();
return ['code' => 201, 'msg' => "请重试", 'data' => null];
}
} else {
$now_time = time();
$over_time = $now_time + $guard_price_info['day'] * 24 * 3600;
$data = [];
$data['uid'] = $uid;
$data['gid'] = $guard_price_info['gid'];
$data['guard_rid'] = $guard_rid;
$data['guard_uid'] = $guard_uid;
$data['over_time'] = $over_time;
$data['add_time'] = $now_time;
$data['update_time'] = $now_time;
$ugid = db::name('user_guard')->insertGetId($data);
if (empty($ugid)) {
Db::rollback();
return ['code' => 201, 'msg' => "请重试", 'data' => null];
}
}
//扣除账户积分
$reslut = model('admin/User')->change_user_money_by_uid($uid, -$guard_price_info['sell_price'], 2, 8, "购买守护", $uid, $ugid);
if ($reslut['code'] != 200) {
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
Db::commit();
return ['code' => 200, 'msg' => "购买成功", 'data' => null];
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return ['code' => 201, 'msg' => "请重试", 'data' => null];
}
}
public function get_user_guard_list($uid, $page, $page_limit)
{
$page = intval($page);
$page_limit = $page_limit < 10 ? $page_limit : 10;
$map = [];
$map[] = ['uid', '=', $uid];
$map[] = ['over_time', '>', time()];
$user_guard_list = db::name('user_guard')->where($map)->group('guard_uid')->order('ugid desc')->page($page, $page_limit)->select();
$uid_list = array_column($user_guard_list, 'uid');
$guard_uid_list = array_column($user_guard_list, 'guard_uid');
$uid_data = array_merge($uid_list, $guard_uid_list);
$map = [];
$map[] = ['uid', 'in', $uid_data];
$user_list = db::name('user')->field('uid,base64_nick_name,head_pic,sex,special_uid')->where($map)->select();
$user_list_data = [];
foreach ($user_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']);
$user_list_data[$v['uid']] = $v;
}
$map = [];
$map[] = ['is_delete', '=', 1];
$guard_list = db::name('guard')->cache(60)->where($map)->column('guard_name', 'gid');
$now_time = time();
$return_data = [];
foreach ($user_guard_list as $k => $v) {
$data = [];
$data['guard_user_info']['uid'] = $user_list_data[$v['guard_uid']]['uid'];
$data['guard_user_info']['special_uid'] = $user_list_data[$v['guard_uid']]['special_uid'];
$data['guard_user_info']['nick_name'] = $user_list_data[$v['guard_uid']]['nick_name'];
$data['guard_user_info']['head_pic'] = $user_list_data[$v['guard_uid']]['head_pic'];
//获取当前守护用户 多条守护信息
$map = [];
$map[] = ['uid', '=', $v['uid']];
$map[] = ['guard_uid', '=', $v['guard_uid']];
$map[] = ['over_time', '>', $now_time];
$user_guard_list = db::name('user_guard')->where($map)->select();
foreach ($user_guard_list as $m => $n) {
$data['guard_list']['guard_name'] = $guard_list[$v['gid']];
$valid_day = ceil(($v['over_time'] - $now_time) / 86400);
$data['guard_list']['valid_day'] = $valid_day;
}
$return_data[] = $data;
}
return ['code' => 200, 'msg' => "获取成功", 'data' => $return_data];
}
}