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

401 lines
17 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 UserPlayerOrder extends Model
{
//陪玩下单
public function create_player_order($uid, $pid, $buy_num, $trade_password)
{
$map = [];
$map[] = ['pid', '=', $pid];
$player_info = db::name('user_player')->field('uid,gid,lid,price,skill_image,cover_image,sound,sound_duration,introduction,status,remarks')->where($map)->find();
if (empty($player_info)) {
return ['code' => 201, 'msg' => '陪玩不存在', 'data' => null];
}
if ($player_info['status'] != 2) {
return ['code' => 201, 'msg' => '该陪玩暂无法接单', 'data' => null];
}
if (!is_int($buy_num * 1)) {
return ['code' => 201, 'msg' => '下单数量非法', 'data' => null];
}
if ($buy_num < 1) {
return ['code' => 201, 'msg' => '下单数量必须大于0', 'data' => null];
}
// $user_trade_password = db::name('user')->where(['uid'=>$uid])->value('trade_password');
// if(empty($user_trade_password)){
// return ['code' => 201, 'msg' => '请设置二级密码', 'data' => null];
// }
// if($user_trade_password!=md5($trade_password)){
// return ['code' => 201, 'msg' => '二级密码有误', 'data' => null];
// }
$total_amount = $player_info['price'] * $buy_num;
$order_sn = $this->create_play_order_sn();
$order_data = [];
$order_data['order_sn'] = $order_sn;
$order_data['uid'] = $uid;
$order_data['pid'] = $pid;
$order_data['gid'] = $player_info['gid'];
$order_data['player_uid'] = $player_info['uid'];
$order_data['price'] = $player_info['price'];
$order_data['num'] = $buy_num;
$order_data['total_amount'] = $total_amount;
$order_data['status'] = 1;
$order_data['receive_time'] = 0;
$order_data['complete_time'] = 0;
$order_data['is_over'] = 1;
$order_data['over_close_time'] = 0;
$order_data['service_rate'] = 0;
$order_data['service_comment'] = '';
$order_data['add_time'] = time();
$order_data['comment_time'] = 0;
$order_data['update_time'] = 0;
Db::startTrans();
try {
//创建订单
$oid = db::name('user_player_order')->insertGetId($order_data);
if (!$oid) {
Db::rollback();
return ['code' => 201, 'msg' => '请重试', 'data' => null];
}
//扣除账户积分
$reslut = model('admin/User')->change_user_money_by_uid($uid, -$total_amount, 2, 2, "陪玩订单:" . $order_sn, $uid, $oid);
if ($reslut['code'] != 200) {
Db::rollback();
return ['code' => 201, 'msg' => '余额不足', 'data' => null];
}
//发送短信提醒
/*
$player_mobile = db::name('user')->where('uid', $player_info['uid'])->value('user_name');
model('sms')->sms_player_order($player_mobile, $order_sn);
*/
$content = "您有新的陪玩订单,请及时接单";
$data = [];
$data['code'] = 1002;
$data['data'] = ['oid' => $oid,'play_order_identity_type'=>1];
model('admin/Jpush')->push_notification_message($player_info['uid'], '陪玩订单提醒', $content, $data);
$reslut=model('api/UserMessage')->send_message($player_info['uid'], 2, $oid, "陪玩订单提醒", $content);
if ($reslut['code']!=200) {
Db::rollback();
return ['code' => 201, 'msg' => "处理失败", 'data' => null];
}
Db::commit();
//下单成功返回订单号
return ['code' => 200, 'msg' => "下单成功", 'data' => $oid];
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return ['code' => 201, 'msg' => "请重试", 'data' => null];
}
}
//获取我的陪玩下单订单
public function get_user_order($uid, $status, $page, $page_limit)
{
$page = intval($page);
$page_limit = $page_limit < 10 ? $page_limit : 10;
$map = [];
$map[] = ['uid', '=', $uid];
if (!empty($status)) {
$map[] = ['status', '=', $status];
}
$list = db::name('user_player_order')->field('oid,gid,pid,order_sn,price,num,total_amount,status,add_time,is_over')->where($map)->page($page, $page_limit)->select();
foreach ($list as $k => &$v) {
$game_info = model('game')->get_game_info($v['gid']);
$v['game_name'] = $game_info['data']['game_name'];
$player_info = model('player')->get_player_info($v['pid']);
$v['player_nick_name'] = $player_info['data']['nick_name'];
$v['player_head_pic'] = localpath_to_netpath($player_info['data']['head_pic']);
$v['player_cover_image'] = localpath_to_netpath($player_info['data']['cover_image']);
}
return ['code' => 200, 'msg' => "获取成功", 'data' => $list];
}
//我的 下单订单详情
public function get_user_order_info($uid, $oid)
{
$map = [];
$map[] = ['oid', '=', $oid];
$map[] = ['uid', '=', $uid];
$info = db::name('user_player_order')->field('oid,gid,pid,uid,player_uid,order_sn,price,num,total_amount,status,receive_time,complete_time,is_over,over_close_time,service_rate,service_comment,comment_time,add_time,kf_uid')->where($map)->find();
if (empty($info)) {
return ['code' => 201, 'msg' => "订单不存在", 'data' => null];
}
$game_info = model('game')->get_game_info($info['gid']);
$info['game_name'] = $game_info['data']['game_name'];
$player_info = model('player')->get_player_info($info['pid']);
$info['player_nick_name'] = $player_info['data']['nick_name'];
$info['uid_nickname'] = db::name('user')->where(['uid' => $info['uid']])->value('nick_name');
$info['is_qx'] = 2; //1 可以取消 2不可取消
$time = $info['add_time'] + 600;
if ($time > time() && $info['is_over'] != 3) {
$info['is_qx'] = 1;
}
return ['code' => 200, 'msg' => "获取成功", 'data' => $info];
}
//获取我的陪玩 接单订单
public function get_player_order($uid, $time, $status, $page, $page_limit)
{
$map = [];
$page = intval($page);
$page_limit = $page_limit < 10 ? $page_limit : 10;
$map[] = ['player_uid', '=', $uid];
if (!empty($status)) {
$map[] = ['status', '=', $status];
}
$list = db::name('user_player_order')->field('oid,gid,pid,uid,player_uid,order_sn,price,num,total_amount,status,receive_time,complete_time,is_over,over_close_time,service_rate,service_comment,comment_time,add_time')->where($map)->page($page, $page_limit)->select();
foreach ($list as $k => &$v) {
$game_info = model('game')->get_game_info($v['gid']);
$v['game_name'] = $game_info['data']['game_name'];
$v['game_ico'] = $game_info['data']['game_ico'];
$user_info = model('user')->get_user_info($v['uid']);
$v['user_nick_name'] = $user_info['data']['nick_name']; //下单用户昵称
$v['user_head_pic'] = localpath_to_netpath($user_info['data']['head_pic']); //下单用户头像
$player_info = model('player')->get_player_info($v['pid']);
$v['player_cover_image'] = localpath_to_netpath($player_info['data']['cover_image']); //陪玩封面
}
return ['code' => 200, 'msg' => "获取成功", 'data' => $list];
}
//接单详情
public function get_player_order_info($uid, $oid)
{
$map = [];
$map[] = ['oid', '=', $oid];
$map[] = ['player_uid', '=', $uid];
$info = db::name('user_player_order')->field('oid,gid,pid,uid,player_uid,order_sn,price,num,total_amount,status,receive_time,complete_time,is_over,over_close_time,service_rate,service_comment,comment_time,add_time,kf_uid')->where($map)->find();
if (empty($info)) {
return ['code' => 201, 'msg' => "订单不存在", 'data' => null];
}
$game_info = model('game')->get_game_info($info['gid']);
$info['game_name'] = $game_info['data']['game_name'];
$user_info = model('user')->get_user_info($info['uid']);
$info['user_nick_name'] = $user_info['data']['nick_name'];
$uid_nickname = db::name('user')->where(['uid' => $info['uid']])->value('base64_nick_name');
$info['uid_nickname'] = mb_convert_encoding(base64_decode($uid_nickname), 'UTF-8', 'UTF-8');
$player_nickname = db::name('user')->where(['uid' => $info['player_uid']])->value('base64_nick_name');
$info['player_nick_name'] = mb_convert_encoding(base64_decode($player_nickname), 'UTF-8', 'UTF-8');;
return ['code' => 200, 'msg' => "获取成功", 'data' => $info];
}
//我的钱包 订单收入明细
public function get_wallet_order($uid, $time, $page, $page_limit)
{
$map = [];
switch ($time) {
case '1': //日
$times1 = strtotime(date('Y-m-d'));
$times2 = strtotime(date('Y-m-d H:i:s'));
$map[] = ['complete_time', 'between', [$times1, $times2]];
break;
case '2': //周
$times1 = strtotime(date('Y-m-d H:i:s', strtotime('-7 day')));
$times2 = strtotime(date('Y-m-d H:i:s'));
$map[] = ['complete_time', 'between', [$times1, $times2]];
break;
case '3': //月
$times1 = strtotime(date('Y-m-d H:i:s', strtotime('-30 day')));
$times2 = strtotime(date('Y-m-d H:i:s'));
$map[] = ['complete_time', 'between', [$times1, $times2]];
break;
case '0': //全部
break;
}
$page = intval($page);
$page_limit = $page_limit < 10 ? $page_limit : 10;
$map[] = ['player_uid', '=', $uid];
$map[] = ['status', '=', 3];
$map[] = ['is_over', '=', 1];
$list = db::name('user_player_order')->field('oid,gid,total_amount,status,complete_time')->where($map)->page($page, $page_limit)->select();
foreach ($list as $k => &$v) {
$game_info = model('game')->get_game_info($v['gid']);
$v['game_name'] = $game_info['data']['game_name'];
$v['game_ico'] = $game_info['data']['game_ico'];
$v['complete_time'] = date('Y-m-d H:i', $v['complete_time']);
}
return ['code' => 200, 'msg' => "获取成功", 'data' => $list];
}
//陪玩接单
public function take_player_order($uid, $oid)
{
$map = [];
$map[] = ['oid', '=', $oid];
$map[] = ['player_uid', '=', $uid];
$info = db::name('user_player_order')->where($map)->find();
if (empty($info)) {
return ['code' => 200, 'msg' => "订单不存在", 'data' => null];
}
if ($info['status'] != 1) {
return ['code' => 200, 'msg' => "该订单状态无法操作", 'data' => null];
}
$data = [];
$data['oid'] = $oid;
$data['receive_time'] = time();
$data['status'] = 2;
$reslut = db::name('user_player_order')->update($data, ['oid' => $oid]);
if (!$reslut) {
return ['code' => 201, 'msg' => "接单失败", 'data' => null];
}
$content = "您的陪玩订单已接单";
$data = [];
$data['code'] = 1002;
$data['data'] = ['oid' => $oid,'play_order_identity_type'=>2];
model('admin/Jpush')->push_notification_message($info['uid'], '陪玩订单提醒', $content, $data);
$reslut=model('api/UserMessage')->send_message($info['uid'], 2, $oid, "陪玩订单提醒", $content);
if ($reslut['code']!=200) {
Db::rollback();
return ['code' => 201, 'msg' => "处理失败", 'data' => null];
}
return ['code' => 200, 'msg' => "接单成功", 'data' => null];
}
//下单人确认陪玩订单
public function confirm_palyer_order($uid, $oid)
{
$map = [];
$map[] = ['oid', '=', $oid];
$map[] = ['uid', '=', $uid];
$info = db::name('user_player_order')->where($map)->find();
if (empty($info)) {
return ['code' => 201, 'msg' => "订单不存在", 'data' => null];
}
if ($info['status'] != 2) {
return ['code' => 201, 'msg' => "该订单状态无法操作", 'data' => null];
}
$config = model('admin/Config')->get_system_config();
$exchange_rate = $config['exchange_rate']; //平台虚拟币兑换比例
$player_order_platform_commission = $config['player_order_platform_commission']; //陪玩平台抽佣
Db::startTrans();
try {
$change_money = $info['total_amount'] / $exchange_rate * (1 - $player_order_platform_commission);
$reslut = model('admin/User')->change_user_money_by_uid($info['player_uid'], $change_money, 1, 5, "陪玩订单完成:" . $info['order_sn'], $info['uid'], $info['oid']);
if ($reslut['code'] != 200) {
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
$data = [];
$data['oid'] = $oid;
$data['complete_time'] = time();
$data['status'] = 3;
$data['is_over'] = 1;
$reslut = db::name('user_player_order')->update($data, ['oid' => $oid]);
if (!$reslut) {
Db::rollback();
return ['code' => 201, 'msg' => '请重试', 'data' => null];
}
//更新陪玩用户表数据
$reslut = db::name('user')->where('uid', $uid)->inc('palyer_order_count', 1)->update($data);
if (!$reslut) {
Db::rollback();
return ['code' => 201, 'msg' => '请重试', 'data' => null];
}
$content = "您的陪玩订单已确认完成";
$data = [];
$data['code'] = 1002;
$data['data'] = ['oid' => $oid,'play_order_identity_type'=>1];
model('admin/Jpush')->push_notification_message($info['player_uid'], '陪玩订单提醒', $content, $data);
$reslut=model('api/UserMessage')->send_message($info['player_uid'], 2, $oid, "陪玩订单提醒", $content);
if ($reslut['code']!=200) {
Db::rollback();
return ['code' => 201, 'msg' => "处理失败", 'data' => null];
}
Db::commit();
return ['code' => 200, 'msg' => "确认成功", 'data' => null];
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return ['code' => 201, 'msg' => "请重试", 'data' => null];
}
}
//下单人取消陪玩订单
public function cancel_order($uid, $oid)
{
$map = [];
$map[] = ['oid', '=', $oid];
$map[] = ['uid', '=', $uid];
$info = db::name('user_player_order')->where($map)->find();
if (empty($info)) {
return ['code' => 201, 'msg' => "订单不存在", 'data' => null];
}
if ($info['status'] != 1) {
return ['code' => 201, 'msg' => "该订单状态无法操作", 'data' => null];
}
Db::startTrans();
try {
$update = db::name('user_player_order')->where($map)->update(['status' => 3, 'is_over' => 3, 'complete_time' => time(), 'update_time' => time()]);
if (!$update) {
Db::rollback();
return ['code' => 201, 'msg' => '请重试', 'data' => null];
}
$reslut = model('admin/User')->change_user_money_by_uid($uid, $info['total_amount'], 2, 10, "陪玩取消订单退款:" . $info['order_sn'], $uid, $info['oid']);
if ($reslut['code'] != 200) {
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
$content = "您的陪玩订单已被取消";
$data = [];
$data['code'] = 1002;
$data['data'] = ['oid' => $oid,'play_order_identity_type'=>1];
model('admin/Jpush')->push_notification_message($info['player_uid'], '陪玩订单提醒', $content, $data);
$reslut=model('api/UserMessage')->send_message($info['player_uid'], 2, $oid, "陪玩订单提醒", $content);
if ($reslut['code']!=200) {
Db::rollback();
return ['code' => 201, 'msg' => "处理失败", 'data' => null];
}
Db::commit();
return ['code' => 200, 'msg' => "取消成功", 'data' => null];
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return ['code' => 201, 'msg' => "请重试", 'data' => null];
}
}
private function create_play_order_sn()
{
$order_sn = 'PW' . date('YmdHis') . mt_rand(10000, 99999);
$map = [];
$map[] = ['order_sn', '=', $order_sn];
$reslut = db::name('user_player_order')->where($map)->find();
if (empty($reslut)) {
return $order_sn;
} else {
$this->create_play_order_sn();
}
}
}