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(); } } }