155 lines
6.6 KiB
PHP
155 lines
6.6 KiB
PHP
|
|
<?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];
|
||
|
|
}
|
||
|
|
}
|