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, ]; // 玩家最低充值金额(分) $min_recharge_amount = isset($group['recharge_gift_value']) ? $group['recharge_gift_value'] : 0; $data = [ 'code' => 200, 'msg' => '获取成功.', 'data' => $kfList ? $kfList : [], 'recharge_gift' => $recharge_gift, 'min_recharge_amount' => $min_recharge_amount, ]; 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; } }