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