diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index 4c193779..33aa4dd7 100644 --- a/app/Http/Controllers/ApiController.php +++ b/app/Http/Controllers/ApiController.php @@ -14,6 +14,7 @@ use App\Models\Role; use App\Models\Sip; use App\Models\User; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Redis; use Illuminate\Support\Facades\Storage; @@ -263,7 +264,6 @@ class ApiController extends Controller } - public function payList(Request $request) { $id = $request->input('id'); @@ -271,4 +271,19 @@ class ApiController extends Controller return $this->success('ok',['list'=>$res->items(),'lastPage'=>$res->lastPage()]); } + public function getSipsByQueueId(Request $request) + { + $queueId = $request->input('queue_id'); + $lists = Sip::with('user')->get(); + $values = []; + if ($queueId){ + $values = DB::table('queue_sip')->where('queue_id',$queueId)->pluck('sip_id')->toArray(); + } + foreach ($lists as $item){ + $item->checked = in_array($item->id,$values) ? true : false; + } + return $this->success('ok',['lists'=>$lists,'values'=>$values]); + } + + } diff --git a/app/Http/Controllers/Callcenter/QueueController.php b/app/Http/Controllers/Callcenter/QueueController.php new file mode 100644 index 00000000..ab1cc662 --- /dev/null +++ b/app/Http/Controllers/Callcenter/QueueController.php @@ -0,0 +1,127 @@ +ajax()){ + $res = Queue::withCount('sips')->orderByDesc('id')->paginate($request->input('limit',30)); + return $this->success('ok',$res->items(),$res->total()); + } + return View::make('callcenter.queue.index'); + } + + public function create() + { + return View::make('callcenter.queue.create'); + } + + public function store(Request $request) + { + $data = $request->all([ + 'name', + 'strategy', + 'max_wait_time', + 'sips', + ]); + $data['sips'] = $data['sips'] ? explode(',',$data['sips']) : []; + DB::beginTransaction(); + try { + $queueId = DB::table('queue')->insertGetId([ + 'name' => $data['name'], + 'strategy' => $data['strategy'], + 'max_wait_time' => $data['max_wait_time'], + ]); + foreach ($data['sips'] as $sipId){ + DB::table('queue_sip')->insert([ + 'queue_id' => $queueId, + 'sip_id' => $sipId, + ]); + } + DB::commit(); + return $this->success(); + }catch (\Exception $exception){ + DB::rollBack(); + Log::error('添加队列异常:'.$exception->getMessage()); + return $this->error(); + } + } + + public function edit($id) + { + $model = Queue::query()->where('id',$id)->first(); + return View::make('callcenter.queue.edit',compact('model')); + } + + public function update(Request $request,$id) + { + $model = Queue::query()->where('id',$id)->first(); + $data = $request->all([ + 'name', + 'strategy', + 'max_wait_time', + ]); + $sipids = $request->input('sips') ? explode(',',$request->input('sips')) : []; + DB::beginTransaction(); + try { + $model->update($data); + $model->sips()->sync($sipids); + DB::commit(); + return $this->success(); + }catch (\Exception $exception){ + DB::rollBack(); + Log::error('更新队列异常:'.$exception->getMessage()); + return $this->error(); + } + } + + public function destroy(Request $request) + { + $ids = $request->get('ids'); + if (empty($ids)){ + return $this->error('请选择删除项'); + } + DB::beginTransaction(); + try{ + DB::table('queue_sip')->whereIn('queue_id',$ids)->delete(); + DB::table('queue')->whereIn('id',$ids)->delete(); + DB::commit(); + return $this->success(); + }catch (\Exception $exception){ + DB::rollBack(); + Log::error('删除队列异常:'.$exception->getMessage()); + return $this->error(); + } + } + + public function updateXml() + { + $queues = Queue::with('sips')->get()->toArray(); + try{ + $client = new Client(); + $client->post(config('freeswitch.swoole_http_url.callcenter'), + [ + 'json' => $queues, + 'timeout' => 30 + ] + ); + return $this->success(); + }catch (\Exception $exception){ + Log::error('更新群呼配置异常:' . $exception->getMessage()); + return $this->error('更新失败'); + } + } + + +} diff --git a/app/Http/Controllers/Callcenter/Task.php b/app/Http/Controllers/Callcenter/Task.php new file mode 100644 index 00000000..987adf9c --- /dev/null +++ b/app/Http/Controllers/Callcenter/Task.php @@ -0,0 +1,11 @@ +belongsToMany(Sip::class,'queue_sip'); + } + + public function getStrategyNameAttribute() + { + return $this->attributes['strategy_name'] = Arr::get(config('freeswitch.strategy'),$this->strategy); + } + +} diff --git a/app/Models/Sip.php b/app/Models/Sip.php index 361e58f7..7430e437 100644 --- a/app/Models/Sip.php +++ b/app/Models/Sip.php @@ -34,7 +34,7 @@ class Sip extends Model */ public function user() { - return $this->hasOne('App\Models\User','sip_id','id')->withDefault(['nickname'=>'-']); + return $this->hasOne('App\Models\User','sip_id','id')->withDefault(['nickname'=>'未分配']); } } diff --git a/app/Models/Task.php b/app/Models/Task.php index a79ef4a9..58531793 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -6,5 +6,6 @@ use Illuminate\Database\Eloquent\Model; class Task extends Model { - // + protected $table = 'task'; + protected $guarded = ['id']; } diff --git a/database/seeds/MenuTableSeeder.php b/database/seeds/MenuTableSeeder.php index a405a5bb..88787bd0 100644 --- a/database/seeds/MenuTableSeeder.php +++ b/database/seeds/MenuTableSeeder.php @@ -99,6 +99,25 @@ class MenuTableSeeder extends Seeder ], ] ], + [ + 'name' => '群呼管理', + 'route' => null, + 'url' => null, + 'icon' => 'layui-icon-group', + 'type' => 2, + 'sort' => 2, + 'permission_name' => 'callcenter', + 'child' => [ + [ + 'name' => '队列管理', + 'route' => 'callcenter.queue', + 'url' => null, + 'icon' => 'layui-icon-user', + 'type' => 1, + 'permission_name' => 'callcenter.queue', + ], + ] + ], [ 'name' => '实时聊天', 'route' => null, diff --git a/database/seeds/UserTableSeeder.php b/database/seeds/UserTableSeeder.php index 42787947..4ba4e2ea 100644 --- a/database/seeds/UserTableSeeder.php +++ b/database/seeds/UserTableSeeder.php @@ -123,6 +123,22 @@ class UserTableSeeder extends Seeder ], ], ], + [ + 'name' => 'callcenter', + 'display_name' => '群呼管理', + 'child' => [ + [ + 'name' => 'callcenter.queue', + 'display_name' => '队列管理', + 'child' => [ + ['name' => 'callcenter.queue.create', 'display_name' => '添加'], + ['name' => 'callcenter.queue.edit', 'display_name' => '编辑'], + ['name' => 'callcenter.queue.destroy', 'display_name' => '删除'], + ['name' => 'callcenter.queue.updateXml', 'display_name' => '更新配置'], + ] + ], + ], + ], [ 'name' => 'crm', 'display_name' => 'CRM管理', diff --git a/resources/views/callcenter/queue/_form.blade.php b/resources/views/callcenter/queue/_form.blade.php new file mode 100644 index 00000000..c1e21423 --- /dev/null +++ b/resources/views/callcenter/queue/_form.blade.php @@ -0,0 +1,35 @@ +{{csrf_field()}} +