401 lines
17 KiB
PHP
401 lines
17 KiB
PHP
|
|
<?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();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|