260 lines
11 KiB
PHP
260 lines
11 KiB
PHP
<?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;
|
||
}
|
||
|
||
}
|
||
|