You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Service.php 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. <?php
  2. namespace app\controller\kefu;
  3. use app\Request;
  4. use think\facade\App;
  5. use app\services\kefu\KefuServices;
  6. use app\services\other\CategoryServices;
  7. use app\validate\kefu\SpeechcraftValidate;
  8. use app\services\message\service\StoreServiceSpeechcraftServices;
  9. /**
  10. * Class Service
  11. * @package app\kefuapi\controller
  12. */
  13. class Service extends AuthController
  14. {
  15. /**
  16. * Service constructor.
  17. * @param App $app
  18. * @param KefuServices $services
  19. */
  20. public function __construct(App $app, KefuServices $services)
  21. {
  22. parent::__construct($app);
  23. $this->services = $services;
  24. }
  25. /**
  26. * 转接客服列表
  27. * @param Request $request
  28. * @return mixed
  29. * @throws \think\db\exception\DataNotFoundException
  30. * @throws \think\db\exception\DbException
  31. * @throws \think\db\exception\ModelNotFoundException
  32. */
  33. public function getServiceList(Request $request, $uid = 0)
  34. {
  35. $where = $request->getMore([
  36. ['nickname', ''],
  37. ]);
  38. return $this->success($this->services->getServiceList($where, [$this->kefuInfo['uid'], $uid]));
  39. }
  40. /**
  41. * 话术列表
  42. * @param Request $request
  43. * @param StoreServiceSpeechcraftServices $services
  44. * @return mixed
  45. * @throws \think\db\exception\DataNotFoundException
  46. * @throws \think\db\exception\DbException
  47. * @throws \think\db\exception\ModelNotFoundException
  48. */
  49. public function getSpeechcraftList(Request $request, StoreServiceSpeechcraftServices $services)
  50. {
  51. $where = $request->getMore([
  52. ['title', ''],
  53. ['cate_id', ''],
  54. ['type', 0]
  55. ]);
  56. if ($where['type']) {
  57. $where['kefu_id'] = $this->kefuId;
  58. } else {
  59. $where['kefu_id'] = 0;
  60. }
  61. $data = $services->getSpeechcraftList($where);
  62. return $this->success($data['list']);
  63. }
  64. /**
  65. * 添加分类
  66. * @param Request $request
  67. * @param CategoryServices $services
  68. * @return mixed
  69. */
  70. public function saveCate(Request $request, CategoryServices $services)
  71. {
  72. $data = $request->postMore([
  73. ['name', ''],
  74. [['sort', 'd'], 0],
  75. ]);
  76. if (!$data['name']) {
  77. return $this->fail('分类名称不能为空');
  78. }
  79. $data['add_time'] = time();
  80. $data['owner_id'] = $this->kefuId;
  81. $data['type'] = 1;
  82. $data['group'] = 1;
  83. $services->save($data);
  84. return $this->success('添加成功');
  85. }
  86. /**
  87. * 修改分类
  88. * @param Request $request
  89. * @param CategoryServices $services
  90. * @param $id
  91. * @return mixed
  92. */
  93. public function editCate(Request $request, CategoryServices $services, $id)
  94. {
  95. $data = $request->postMore([
  96. ['name', ''],
  97. [['sort', 'd'], 0],
  98. ]);
  99. if (!$data['name']) {
  100. return $this->fail('分类不能为空');
  101. }
  102. $cateInfo = $services->get($id);
  103. if (!$cateInfo) {
  104. return $this->fail('分类没有查到无法删除');
  105. }
  106. $cateInfo->name = $data['name'];
  107. $cateInfo->sort = $data['sort'];
  108. if ($cateInfo->save()) {
  109. return $this->success('分类修改成功');
  110. } else {
  111. return $this->fail('分类没有查到无法删除');
  112. }
  113. }
  114. /**
  115. * 删除分类
  116. * @param CategoryServices $services
  117. * @param $id
  118. * @return mixed
  119. */
  120. public function deleteCate(CategoryServices $services, $id)
  121. {
  122. $cateInfo = $services->get($id);
  123. if (!$cateInfo) {
  124. return $this->fail('分类不存在');
  125. }
  126. if ($cateInfo->delete()) {
  127. return $this->success('删除成功');
  128. } else {
  129. return $this->fail('删除失败');
  130. }
  131. }
  132. /**
  133. * 获取当前客服分类
  134. * @param CategoryServices $services
  135. * @return mixed
  136. * @throws \think\db\exception\DataNotFoundException
  137. * @throws \think\db\exception\DbException
  138. * @throws \think\db\exception\ModelNotFoundException
  139. */
  140. public function getCateList(CategoryServices $services, $type)
  141. {
  142. return $this->success($services->getCateList(['owner_id' => $type ? $this->kefuId : 0, 'type' => 1], ['id', 'name', 'sort']));
  143. }
  144. /**
  145. * 添加话术
  146. * @param Request $request
  147. * @param StoreServiceSpeechcraftServices $services
  148. * @return mixed
  149. */
  150. public function saveSpeechcraft(Request $request, StoreServiceSpeechcraftServices $services, CategoryServices $categoryServices)
  151. {
  152. $data = $request->postMore([
  153. ['title', ''],
  154. ['cate_id', 0],
  155. ['message', ''],
  156. ['sort', 0]
  157. ]);
  158. validate(SpeechcraftValidate::class)->check($data);
  159. if (!$categoryServices->count(['owner_id' => $this->kefuId, 'type' => 1, 'id' => $data['cate_id']])) {
  160. return $this->fail('您选择的分类不存在');
  161. }
  162. if ($services->count(['message' => $data['message']])) {
  163. return $this->fail('添加的内容重复');
  164. }
  165. $data['add_time'] = time();
  166. $data['kefu_id'] = $this->kefuId;
  167. $res = $services->save($data);
  168. if ($res) {
  169. return $this->success('添加话术成功', $res->toArray());
  170. } else {
  171. return $this->fail('添加话术失败');
  172. }
  173. }
  174. /**
  175. * 修改话术
  176. * @param Request $request
  177. * @param StoreServiceSpeechcraftServices $services
  178. * @param $id
  179. * @return mixed
  180. */
  181. public function editSpeechcraft(Request $request, StoreServiceSpeechcraftServices $services, CategoryServices $categoryServices, $id)
  182. {
  183. $data = $request->postMore([
  184. ['title', ''],
  185. ['cate_id', 0],
  186. ['message', ''],
  187. ]);
  188. if (!$data['message']) {
  189. return $this->fail('话术标题内容不能为空');
  190. }
  191. if (!$categoryServices->count(['owner_id' => $this->kefuId, 'type' => 1, 'id' => $data['cate_id']])) {
  192. return $this->fail('您选择的分类不存在');
  193. }
  194. $speechcraft = $services->get($id);
  195. if (!$speechcraft) {
  196. return $this->fail('话术没有被查到');
  197. }
  198. if (!$speechcraft->kefu_id) {
  199. return $this->fail('公共话术不能修改');
  200. }
  201. $speechcraft->title = $data['title'];
  202. if ($data['cate_id']) {
  203. $speechcraft->cate_id = $data['cate_id'];
  204. }
  205. $speechcraft->message = $data['message'];
  206. if ($speechcraft->save()) {
  207. return $this->success('修改成功');
  208. } else {
  209. return $this->fail('修改失败');
  210. }
  211. }
  212. /**
  213. * 删除话术
  214. * @param StoreServiceSpeechcraftServices $services
  215. * @param $id
  216. * @return mixed
  217. */
  218. public function deleteSpeechcraft(StoreServiceSpeechcraftServices $services, $id)
  219. {
  220. $speechcraft = $services->get($id);
  221. if (!$speechcraft) {
  222. return $this->fail('话术没有被查到');
  223. }
  224. if ($speechcraft->delete()) {
  225. return $this->success('删除成功');
  226. } else {
  227. return $this->fail('删除失败');
  228. }
  229. }
  230. /**
  231. * 聊天记录
  232. * @param $uid
  233. * @return mixed
  234. */
  235. public function getChatList(Request $request)
  236. {
  237. [$uid, $upperId, $is_tourist] = $request->postMore([
  238. ['uid', 0],
  239. ['upperId', 0],
  240. ['is_tourist', 0],
  241. ], true);
  242. if (!$uid) {
  243. return $this->fail('缺少参数');
  244. }
  245. return $this->success($this->services->getChatList($this->kefuInfo['uid'], $uid, (int)$upperId, $is_tourist));
  246. }
  247. /**
  248. * 当前客服详细信息
  249. * @return mixed
  250. */
  251. public function getServiceInfo()
  252. {
  253. $this->kefuInfo['site_name'] = sys_config('site_name');
  254. $this->kefuInfo['config_export_open'] = sys_config('config_export_open');
  255. return $this->success($this->kefuInfo->toArray());
  256. }
  257. /**
  258. * 客服转接
  259. * @return mixed
  260. */
  261. public function transfer()
  262. {
  263. [$kefuToUid, $uid] = $this->request->postMore([
  264. ['kefuToUid', 0],
  265. ['uid', 0]
  266. ], true);
  267. if (!$kefuToUid || !$uid) {
  268. return $this->fail('缺少转接人id');
  269. }
  270. $this->services->setTransfer($this->kefuInfo['uid'], (int)$uid, (int)$kefuToUid);
  271. return $this->success('转接成功');
  272. }
  273. }