isAjax()){
$param = input('param.');
$limit = $param['pageSize'];
$offset = ($param['pageNumber'] - 1) * $limit;
$result = db('users')->where($this->where)->limit($offset, $limit)->order('id', 'desc')->select();
foreach($result as $key=>$vo){
// 优化显示头像
$result[$key]['user_avatar'] = '
';
// 优化显示状态
if(1 == $vo['status']){
$result[$key]['status'] = '';
} else {
$result[$key]['status'] = '';
}
// 查询分组
$result[$key]['group'] = '-';
$groups = db('groups')->field('name')->where('id', $vo['group_id'])->find();
if(!empty($groups)){
$result[$key]['group'] = $groups['name'];
}
$result[$key]['kf_type_name'] = $vo['kf_type'] == 1 ? '充值客服' : '聊天客服';
// 所属分组
$organize = db('organize')->field('name')->where('id', $vo['organize_id'])->find();
$result[$key]['organize_name'] = !empty($organize) ? $organize['name'] : '暂无';
//生成支付账号详情按钮
$result[$key]['show_payment'] = $this->makeShowBtn($vo['id']);
// 生成操作按钮
$result[$key]['operate'] = $this->makeBtn($vo['id']);
$result[$key]['user_log'] = $this->makeUserLogBtn($vo['id']);
}
$return['total'] = db('users')->where($this->where)->count(); //总数据
$return['rows'] = $result;
return json($return);
}
return $this->fetch();
}
// 添加客服
public function addUser()
{
$gdb = db('groups');
$odb = db('organize');
if(request()->isPost()){
$param = input('post.');
$param['user_name'] = htmlentities($param['user_name']);
unset($param['file']); // 删除layui头像上传隐藏字段
// 检测头像
if(empty($param['user_avatar'])){
return json(['code' => -1, 'data' => '', 'msg' => '请上传头像']);
}
// 检测客服的限制金额是否为正整数
if(!preg_match("/^[0-9][0-9]*$/",$param['remaining_amount']) && !empty($param['remaining_amount'])){
return json(['code' => -6, 'data' => '', 'msg' => '可充值总额度只能为正整数或为0']);
}
if(empty($param['group_id']) && $this->is_root){
return json(['code' => -4, 'data' => '', 'msg' => '请选择平台']);
} elseif(empty($param['group_id']) && $this->role_name == '平台管理员') {
$param['group_id'] = $this->where['group_id'];
}
// 检测分组
if ($this->role_name == '组长') {
$param['organize_id'] = $this->where['organize_id'];
$organize = $odb->where('id', $this->where['organize_id'])->find();
$param['group_id'] = $organize['group_id'];
}
if (!isset($param['organize_id'])) return resultJson(0, '请选择分组');
// 减去小组的金额
$group = $odb->where('id', $param['organize_id'])->find();
if ($param['remaining_amount'] > $group['money']) return json(['code' => -6, 'data' => '', 'msg' => '分配金额超出分组充值余额']);
$has = db('users')->field('id')->where('user_name', $param['user_name'])->find();
if(!empty($has)){
return json(['code' => -2, 'data' => '', 'msg' => '该客服已经存在']);
}
$rule = "/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/";
if (!preg_match($rule, $param['user_pwd'])) {
return json(['code' => -2, 'data' => '', 'msg' => '密码必须是8-16位的字母和数字组成!']);
}
$param['user_pwd'] = password_hash($param['user_pwd'], PASSWORD_DEFAULT);
$param['online'] = 2; // 离线状态
$param['access_token'] = md5(config('salt').$param['user_name'].$param['user_pwd'].time());
$param['expire_time'] = time()+7*24*60*60;
$param['rate_num'] = random_int(20000,90000);
$param['rank_num'] = 10;
try{
$save = db('users')->insertGetId($param);
$odb->where('id', $param['organize_id'])->setDec('money', $param['remaining_amount']);
$this->saveMoneyFlowLog($group['admin_id'], 'k_' . $save, $param['remaining_amount'], "'{$param['user_name']}'客服分配金额");
}catch(\Exception $e){
return json(['code' => -3, 'data' => '', 'msg' => $e->getMessage()]);
}
LogRepository::write('系统管理', '添加客服成功');
return json(['code' => 1, 'data' => '', 'msg' => '添加客服成功']);
}
// 客服类型
$kf_type = [
[
'name' => '充值客服',
'value' => 1,
],
[
'name' => '聊天客服',
'value' => 2,
],
];
// 如果是平台管理员获取分组
if ($this->role_name == '平台管理员') {
$organize = $odb->where($this->where)->select();
} else {
$organize = [];
}
$this->assign([
'groups' => db('groups')->select(),
'organize' => $organize,
'status' => config('kf_status'),
'kf_type' => $kf_type,
'is_root' => $this->is_root,
]);
return $this->fetch('adduser');
}
// 编辑客服
public function editUser()
{
$gdb = db('groups');
$odb = db('organize');
$udb = db('users');
if(request()->isAjax()){
$param = input('post.');
$param['user_name'] = htmlentities($param['user_name']);
unset($param['file']); // 删除layui头像上传隐藏字段
if(empty($param['group_id']) && $this->is_root){
return json(['code' => -4, 'data' => '', 'msg' => '请选择平台']);
} elseif(empty($param['group_id']) && $this->role_name == '平台管理员') {
$param['group_id'] = $this->where['group_id'];
}
// 检测分组
if ($this->role_name == '组长') {
$param['organize_id'] = $this->where['organize_id'];
$organize = $odb->where('id', $this->where['organize_id'])->find();
$param['group_id'] = $organize['group_id'];
}
if (!isset($param['organize_id'])) return resultJson(0, '请选择分组');
// 检测客服的限制金额是否为正整数
if(!preg_match("/^[0-9][0-9]*$/",$param['remaining_amount'])){
return json(['code' => -3, 'data' => '', 'msg' => '可充值总额度只能为正整数']);
}
$user = db('users')->where('id', $param['id'])->find();
// 减去平台的金额
$group = $odb->where('id', $param['organize_id'])->find();
$money = $param['remaining_amount'] > $user['remaining_amount'] ? intval($param['remaining_amount'] - $user['remaining_amount']) : 0;
if ($money > $group['money']) return json(['code' => -6, 'data' => '', 'msg' => '分配金额超出组的充值余额']);
// 检测用户修改的用户名是否重复
$has = db('users')->where('user_name', $param['user_name'])->where('id', '<>', $param['id'])->find();
if(!empty($has)){
return json(['code' => -1, 'data' => '', 'msg' => '该客服已经存在']);
}
// 修改用户头像
if(empty($param['user_avatar'])){
unset($param['user_avatar']);
}
// 修改用户密码
if(empty($param['user_pwd'])){
unset($param['user_pwd']);
}else{
// $param['user_pwd'] = md5($param['user_pwd'] . config('salt'));
$param['user_pwd'] = password_hash($param['user_pwd'], PASSWORD_DEFAULT);
}
$save = db('users')->where('id', $param['id'])->update($param);
if (!$save) return resultJson(0, '保存失败');
if ($money > 0) {
// $odb->where('id', $param['organize_id'])->setDec('money', $money);
// 资金流动记录
$compare = $param['remaining_amount'] > $user['remaining_amount'];
$money = $compare ? $param['remaining_amount'] - $user['remaining_amount'] : abs($param['remaining_amount'] - $user['remaining_amount']);
if ($compare) {
$this->saveMoneyFlowLog($group['admin_id'], 'k_' . $param['id'], $money, "'{$param['user_name']}'客服分配金额");
}
}
LogRepository::write('系统管理', '编辑客服成功');
return json(['code' => 1, 'data' => '', 'msg' => '编辑客服成功']);
}
$id = input('param.id/d');
$info = db('users')->where('id', $id)->find();
// 客服类型
$kf_type = [
[
'name' => '充值客服',
'value' => 1,
],
[
'name' => '聊天客服',
'value' => 2,
],
];
// 如果是平台管理员获取分组
if ($this->role_name == '平台管理员' || $info['group_id']) {
$where = $info['group_id'] ? ['group_id' => $info['group_id']] : $this->where;
$organize = db('organize')->where($where)->select();
} else {
$organize = [];
}
$this->assign([
'info' => $info,
'status' => config('kf_status'),
'groups' => db('groups')->select(),
'kf_type' => $kf_type,
'is_root' => $this->is_root,
'organize' => $organize,
]);
return $this->fetch('edituser');
}
// 删除客服
public function delUser()
{
$gdb = db('groups');
$udb = db('users');
if(request()->isAjax()){
$id = input('param.id/d');
$user = $udb->where('id', $id)->field('remaining_amount, group_id')->find();
try{
$del = $udb->where('id', $id)->delete();
$gdb->where('id', $user['group_id'])->setInc('money', $user['remaining_amount']);
}catch(\Exception $e){
return json(['code' => -1, 'data' => '', 'msg' => $e->getMessage()]);
}
LogRepository::write('系统管理', '删除客服成功');
return json(['code' => 1, 'data' => '', 'msg' => '删除客服成功']);
}
}
/**
* 启用或禁用客服
*/
public function chageStatus()
{
$gdb = db('groups');
$udb = db('users');
if(request()->isAjax()){
$id = input('param.id');
$type = input('param.type');
try{
$del = $udb->where('id', $id)->update(['status' => $type]);
}catch(\Exception $e){
return json(['code' => -1, 'data' => '', 'msg' => $e->getMessage()]);
}
$hint = $type == 1 ? '启用' : '禁用';
LogRepository::write('系统管理', $hint . '客服成功');
return json(['code' => 1, 'data' => '', 'msg' => $hint . '客服成功']);
}
}
// 上传客服头像
public function upAvatar()
{
if(request()->isAjax()) {
$file = request()->file('file');
if (!empty($file)) {
$fileInfo = $file->getInfo();
/*if($fileInfo['size'] > 1024 * 1024 * 2){
// 上传失败获取错误信息
return json( ['code' => -2, 'data' => '', 'msg' => '文件超过2M'] );
}*/
//检测图片格式
$ext = explode('.', $fileInfo['name']);
$ext = array_pop($ext);
$extArr = explode('|', 'jpg|png|gif|jpeg');
if(!in_array($ext, $extArr)){
return json(['code' => -3, 'data' => '', 'msg' => '只能上传jpg|png|gif|jpeg的文件']);
}
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'avatar');
if ($info) {
$src = config('img_take_prefix').'/uploads/avatar' . '/' . date('Ymd') . '/' . $info->getFilename();
return json(['code' => 0, 'data' => ['src' => $src], 'msg' => 'ok']);
} else {
// 上传失败获取错误信息
return json(['code' => -1, 'data' => '', 'msg' => $file->getError()]);
}
}
}
}
//获取客服所拥有的支付账号
public function getPayment(){
$id = input('param.id/d');
if(request()->isAjax()) {
$res = db('payment')->alias('a')
->field('a.id,a.account_num,b.type_name')
->join('ws_payment_type b','a.payment_type = b.id')
->where('kf_id',$id)
->where('is_use',1)
->select();
if($res){
$return['rows'] = $res;
return json($return);
}else{
return json(['code' => 0, 'data' => '', 'msg' => '获取支付账号失败']);
}
}
}
// 生成操作按钮
private function makeBtn($id)
{
$operate = '';
$operate .= ' ';
$operate .= ' ';
//$operate .= '';
//$operate .= '';
return $operate;
}
// 生成支付账号详情按钮
private function makeShowBtn($id)
{
$operate = '';
$operate .= ' ';
return $operate;
}
// 用户操作记录
private function makeUserLogBtn($id)
{
$operate = '';
$operate .= ' ';
return $operate;
}
/**
* 用户操作记录列表
* @return mixed|\think\response\Json
* @throws \think\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function user_log_list(){
if(request()->isAjax()){
$param = input('param.');
$limit = $param['pageSize'];
$offset = ($param['pageNumber'] - 1) * $limit;
$result = db('user_action_log')->where(['kf_id' => $param['id']])->limit($offset, $limit)->order('id', 'desc')->select();
$ip2region = new \Ip2Region();
foreach($result as $key=>$vo){
$info = $ip2region->btreeSearch($vo['ip']);
$city = explode('|', $info['region']);
if(0 != $info['city_id']){
$result[$key]['ip'] = $city['2'] . $city['3'] .'---'. $city['4'];
}else{
$result[$key]['ip'] = $vo['ip'] . $city['3'] .'---'. $city['4'];
}
$result[$key]['operate'] = "";
// $result[$key]['operate'] = $this->makeBtn($vo['id']);
}
$return['total'] = db('user_action_log')->where(['kf_id' => $param['id']])->count(); //总数据
$return['rows'] = $result;
return json($return);
}
$this->assign([
'id' => input('id'),
]);
return $this->fetch();
}
/**
* 删除用户操作记录
* @return \think\response\Json
*/
public function user_log_del(){
if(request()->isAjax()){
$id = input('param.id/d');
try{
db('user_action_log')->where('id', $id)->delete();
}catch(\Exception $e){
return json(['code' => -1, 'data' => '', 'msg' => $e->getMessage()]);
}
return json(['code' => 1, 'data' => '', 'msg' => '删除成功']);
}
}
}