kefu/application/api/controller/Game.php

260 lines
11 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* 首页控制器
*/
namespace app\api\controller;
use Repository\LogRepository;
use think\Db;
use think\Controller;
use think\Log;
// class Game extends Controller
class Game extends Base
{
/**
* 获取全部客服列表
*/
public function getKfList()
{
$groupId = input('param.group_id');
$param = input('param.data');
// if(empty($groupId)){
// return json(['code' => 400, 'msg' => '平台ID不能为空', 'data' =>[] ]);
// }
$groupId = empty($groupId) ? 1 : $groupId;
$kfList = db('users')->field('CONCAT("KF",id) as id, user_name, user_avatar,rank_num,rate_num')
->where(['status' => 1,'group_id'=>$groupId,'kf_type' => 1,'online'=>1])->order('rate_num desc')->select();
if(empty($kfList)){
return json(['code' => 400, 'msg' => '抱歉~ 暂无客服.', 'data' => [] ]);
}
if ($param != '') {
// $param = json_decode('{"user_level":1,"phone_mobel":"ios","client_version":"1.0.0"}', true);
$param = json_decode($param, true);
if (isset($param['user_level'])) $member['user_level'] = $param['user_level'];
$member['phone_mobel'] = isset($param['phone_mobel']) ? $param['phone_mobel'] : '';
$member['client_version'] = isset($param['client_version']) ? $param['client_version'] : '';
$status = true;
if (!$member['phone_mobel'] || !$member['client_version']) $status = false;
if ($status === true) {
$check_version = $member['phone_mobel'] == 'ios' ? version_compare($member['client_version'], '1.0.1', '<') : version_compare($member['client_version'], '1.1.4', '<');
}
}
// var_dump($member, $param, json_decode("{'user_level': 1}"), json_encode(['user_level' => 1]));
foreach ($kfList as &$item) {
$id = $this->kf2Num($item['id']);
// 会员类型等级权限设置
if (isset($member['user_level']) && $member['user_level'] !== '') {
$pay_type = db('member_level')->where(['level' => $member['user_level'], 'group_id' => $groupId])->find();
if ($pay_type && isset($pay_type['rules']) && $pay_type['rules']) {
$where['b.id'] = ['in', $pay_type['rules']];
$where['kf_id'] = $id;
$where['is_use'] = 1;
$where['a.status'] = '1';
$item['support_pay'] = db('payment')->alias('a')->join('payment_type b','a.payment_type=b.id')->field('b.alias_id')->where($where)->select();
} else {
$item['support_pay'] = [];
}
} else {
$item['support_pay'] = db('payment')->alias('a')->join('payment_type b','a.payment_type=b.id')->field('b.alias_id')->where(['kf_id'=>$id,'is_use'=>1,'a.status'=>'1'])->select();
}
// 支付类型兼容旧版本sdk
// var_dump($check_version)
if ((isset($status) && $status == false) || (isset($check_version) && $check_version)) {
foreach($item['support_pay'] as $k => $v) {
if ($v['alias_id'] == 'baitiao' || $v['alias_id'] == 'cloud_pay') {
unset($item['support_pay'][$k]);
}
}
$item['support_pay'] = array_values($item['support_pay']);
}
$item['service_num'] = db('service_log')->where(['end_time' => 0, 'kf_type' => 1, 'kf_id' => $id, 'group_id' => $groupId])->count();
if(!empty(input('param.uid'))){
$item['is_recharged'] = db('finish_recharge')->where(['uid' => input('param.uid'),'kf_id' => $id])->count();
}
}
unset($item);
// 接客少的放前边
// array_multisort(array_column($kfList,'service_num'),SORT_ASC,$kfList);
if(!empty(input('param.uid'))){
$arrRecharged = array_column($kfList,'is_recharged');
if(in_array(1,$arrRecharged)) {
$left = $right = [];
foreach ($kfList as $value) {
if($value['is_recharged'] == 1){
$left[] = $value;
}else{
$right[] = $value;
}
}
array_multisort(array_column($left,'service_num'),SORT_ASC,$left);
$kfList = array_merge($left,$right);
}
}
foreach ($kfList as &$v) {
unset($v['service_num']);
unset($v['is_recharged']);
}
unset($v);
// 客服列表乱序
$group = db('groups')->where(['id' => $groupId])->find();
if ($group['kf_sort'] === 1) {
$kfList = shuffle_assoc($kfList);
}
// 充值赠送信息
$recharge_gift = [
'recharge_gift_type' => isset($group['recharge_gift_type']) ? $group['recharge_gift_type'] : 0,
'recharge_gift_value' => isset($group['recharge_gift_value']) ? $group['recharge_gift_value'] : 0,
];
$data = [
'code' => 200,
'msg' => '获取成功.',
'data' => $kfList ? $kfList : [],
'recharge_gift' => $recharge_gift,
];
return json($data);
}
/**
* 获取普通聊天客服列表
*/
public function getCommonKfList()
{
$groupId = input('param.group_id');
if(empty($groupId)){
return json(['code' => 400, 'msg' => '平台ID不能为空', 'data' =>[] ]);
}
$kfList = db('users')->field('id, user_name, user_avatar, online as is_online')
->where(['status' => 1,'group_id'=>$groupId,'kf_type' => 2])->select();
if(empty($kfList)){
return json(['code' => 400, 'msg' => '抱歉~ 暂无客服.', 'data' => [] ]);
}
foreach ($kfList as &$item) {
$serviceNum = db('service_log')->where(['end_time' => 0, 'kf_type' => 2, 'kf_id' => $item['id'], 'group_id' => $groupId])->count();
$item['service_num'] = $serviceNum;
$item['id'] = 'KF'.$item['id'];
}
unset($item);
array_multisort(array_column($kfList,'service_num'),SORT_ASC,$kfList);
array_multisort(array_column($kfList,'is_online'),SORT_ASC,$kfList);
return json(['code' => 200, 'msg' => '获取成功.', 'data' => $kfList ? $kfList : []]);
}
/**
* 提交客服评价
*/
public function putKfRate(){
if(request()->isPost()) {
$param_str = input('post.param');
$param = json_decode($param_str,true);
if (empty($param['kf_id']) || empty($param['user_id']) || empty($param['order_id']) || !isset($param['rank_num']) || !isset($param['content'])) {
return json(['code' => 400, 'msg' => '缺少参数']);
}
if ($param['rank_num'] > 10 || $param['rank_num'] < 0) {
return json(['code' => 400, 'msg' => '参数错误']);
}
$data['kf_id'] = $param['kf_id']; // 客服id
$data['user_id'] = $param['user_id']; // 用户id
$data['order_id'] = $param['order_id']; // 订单id
$data['rank_num'] = $param['rank_num']; // 评价星级
$data['content'] = $param['content']; // 评价内容
$data['created_time'] = time();
// 用户只能评价一次订单
if (db('kf_rate')->where(['kf_id' => $data['kf_id'], 'user_id' => $data['user_id'], 'order_id' => $data['order_id']])->count()) {
return json(['code' => 400, 'msg' => '您已经评价过,请勿重新评价']);
}
// 调游戏后台接口
$api = "/power/customer_service/order_evaluate/";
$customer_name = db('users')->where(['id'=>$param['kf_id'],'status'=>1])->value('user_name');
$send['customer_id'] = $param['kf_id']; // 客服id
$send['customer_name'] = $customer_name; // 客服名称
$send['snid'] = $param['user_id']; // 用户id
$send['order_id'] = $param['order_id']; // 订单id
$send['star'] = $param['rank_num']; // 评价星级
$send['evaluate'] = $param['content']; // 评价内容
$res = callRemoteApi($api, $send);
// file_put_contents('rate_remote.txt', date('Y-m-d H:i:s')."\n".json_encode($send)."\n".json_encode($res)."\n\n", FILE_APPEND);
if($res['Tag'] == 0){
Db::startTrans();
$res = db('kf_rate')->insert($data);
if ($res) {
// 因使用事务所以本次查询结果不包含当次评价数据下面修改users表的数据时需要手动计算出来
$rate_info = db('kf_rate')->where(['kf_id' => $param['kf_id']])->field('count(id) as rateNum, avg(rank_num) as rankNum')->find();
$rateNum = $rankNum = 0;
if ($rate_info) {
$rateNum = $rate_info['rateNum'];
$rankNum = $rate_info['rankNum'];
}
if (strpos($rankNum, '.')) {
list($int, $float) = explode('.', $rankNum);
$rankNum = $int + 1;
}
$result = db('users')->where(['id' => $this->kf2Num($param['kf_id'])])->update(['rate_num' => $rateNum, 'rank_num' => $rankNum]);
if ($result) {
Db::commit();
LogRepository::apiLogWrite('客服评价', $param_str);
return json(['code' => 200, 'msg' => 'success','data'=>['rate_id'=>db('kf_rate')->count("id")]]);
}
Db::rollback();
}
}
return json(['code' => 400, 'msg' => '评价失败!']);
}
return json(['code' => 400, 'msg' => '请求错误!']);
}
/**
* 获取客服评价内容
*/
public function getKfRate(){
if(empty(input('param.order_id')) || empty(input('param.kf_id'))){
return json(['code' => 400, 'msg' => '缺少参数']);
}
$orderId = input('param.order_id');
$kfId = input('param.kf_id');
$res = db('kf_rate')->field('kf_id,rank_num,content')->where(['kf_id' => $kfId,'order_id'=>$orderId])->find();
if(empty($res)){
return json(['code' => 400, 'msg' => '抱歉,没有相关记录']);
}
return json(['code' => 200, 'msg' => 'success','data' => $res]);
}
private function kf2Num($kfId){
if(!is_numeric($kfId) && strpos($kfId,'KF') === 0){
$kfId = substr($kfId,2);
}
return $kfId;
}
}