Helper.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace addons\shopro\library\chat\traits;
  3. use addons\shopro\exception\ShoproException;
  4. use addons\shopro\library\chat\Getter;
  5. /**
  6. * 助手方法,需要全局地方可用
  7. */
  8. trait Helper
  9. {
  10. /**
  11. * 客服配置
  12. *
  13. * @var array
  14. */
  15. protected $chatConfig;
  16. /**
  17. * 获取客服配置
  18. *
  19. * @param string $name 要获取的配置项,不能获取第二级的配置项
  20. * @return void
  21. */
  22. public function getConfig($name = null)
  23. {
  24. // 初始化 workerman 的时候不能读取数据库,会导致数据库连接异常
  25. if (!$this->chatConfig) {
  26. $config_path = ROOT_PATH . 'application' . DS . 'extra' . DS . 'chat.php';
  27. if (!file_exists($config_path)) {
  28. throw new ShoproException('客服配置文件不存在,请在后台->商城配置->客服配置,修改并保存客服配置');
  29. }
  30. $this->chatConfig = require($config_path);
  31. }
  32. return $name ? ($this->chatConfig[$name] ?? null) : $this->chatConfig;
  33. }
  34. /**
  35. * 根据类型获取房间完整名字,主要为了记录当前系统总共有多少房间
  36. *
  37. * @param string $type
  38. * @param array $data
  39. * @return string
  40. */
  41. public function getRoomName($type, $data = [])
  42. {
  43. switch ($type) {
  44. case 'online': // 当前在线客户端,包含所有连接着
  45. $group_name = 'online';
  46. break;
  47. case 'auth': // 当前用户认证分组,包含 $this->auth 的所有身份分组
  48. $group_name = 'auth:' . $data['auth'];
  49. break;
  50. case 'identify': // 当前身份分组,customer 顾客,customer_service 客服
  51. $group_name = 'identify:' . $data['identify'];
  52. break;
  53. case 'customer_service_room': // 当前在线客服数组, 这里的客服的状态都是 在线的,如果手动切换为离线,则会被移除该房间
  54. $group_name = 'customer_service_room:' . ($data['room_id'] ?? 'admin');
  55. break;
  56. case 'customer_service_room_waiting': // 当前在线用户所在的客服分组的等待房间种
  57. $group_name = 'customer_service_room_waiting:' . ($data['room_id'] ?? 'admin');
  58. break;
  59. case 'customer_service_room_user': // 当前在线用户所在的客服分组
  60. $group_name = 'customer_service_room_user:' . ($data['room_id'] ?? 'admin') . ':' . ($data['customer_service_id'] ?? 0);
  61. break;
  62. default:
  63. $group_name = $type;
  64. break;
  65. }
  66. return $group_name;
  67. }
  68. /**
  69. * 获取 getter 实例,类中有 getter 属性才可以用
  70. *
  71. * @param string $driver
  72. * @return Getter
  73. */
  74. protected function getter($driver = null)
  75. {
  76. if ($driver) {
  77. return $this->getter->driver($driver);
  78. }
  79. return $this->getter;
  80. }
  81. }