CRMEB/crmeb/app/api/controller/v1/user/StoreService.php
2023-02-15 19:20:36 +08:00

192 lines
6.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\api\controller\v1\user;
use app\api\validate\user\StoreServiceFeedbackValidate;
use app\Request;
use app\services\kefu\service\StoreServiceFeedbackServices;
use app\services\kefu\service\StoreServiceLogServices;
use app\services\kefu\service\StoreServiceRecordServices;
use app\services\kefu\service\StoreServiceServices;
use app\services\other\CacheServices;
use crmeb\services\CacheService;
/**
* 客服类
* Class StoreService
* @package app\api\controller\user
*/
class StoreService
{
/**
* @var StoreServiceLogServices
*/
protected $services;
/**
* StoreService constructor.
* @param StoreServiceLogServices $services
*/
public function __construct(StoreServiceLogServices $services)
{
$this->services = $services;
}
/**
* 客服列表
* @param StoreServiceServices $services
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function lst(StoreServiceServices $services)
{
$serviceInfoList = $services->getServiceList(['status' => 1]);
if (!count($serviceInfoList)) return app('json')->success([]);
return app('json')->success($serviceInfoList['list']);
}
/**
* 客服聊天记录
* @param Request $request
* @param StoreServiceServices $services
* @param StoreServiceRecordServices $recordServices
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function record(Request $request, StoreServiceServices $services, StoreServiceRecordServices $recordServices)
{
list($uidTo) = $request->getMore([
['uidTo', 0]
], true);
$serviceInfoList = $services->getServiceList(['status' => 1]);
if (!count($serviceInfoList)) return app('json')->fail(410136);
$uid = $request->uid();
$uids = array_column($serviceInfoList['list'], 'uid');
if (!$uidTo) {
//自己是客服
if (in_array($uid, $uids)) {
$uids = array_merge(array_diff($uids, [$uid]));
if (!$uids) return app('json')->fail(410137);
}
} else {
if (in_array($uid, $uids)) {
$uid = $uidTo;
}
}
if (!$uids) {
return app('json')->fail(410136);
}
//上次聊天客服优先对话
$toUid = $recordServices->value(['user_id' => $uid], 'to_uid');
if (!in_array($toUid, $uids)) {
$toUid = 0;
}
if (!$toUid) {
$toUid = $uids[array_rand($uids)] ?? 0;
}
if (!$toUid) return app('json')->fail(410136);
$result = ['serviceList' => [], 'uid' => $toUid];
$serviceLogList = $this->services->getChatList(['uid' => $uid], $uid);
if (!$serviceLogList) return app('json')->success($result);
$idArr = array_column($serviceLogList, 'id');
array_multisort($idArr, SORT_ASC, $serviceLogList);
$result['serviceList'] = $serviceLogList;
return app('json')->success($result);
}
/**
* 获取客服页面广告内容
* @return mixed
*/
public function getKfAdv()
{
/** @var CacheServices $cache */
$cache = app()->make(CacheServices::class);
$content = $cache->getDbCache('kf_adv', '');
return app('json')->success(compact('content'));
}
/**
* 保存反馈信息
* @param Request $request
* @param StoreServiceFeedbackServices $services
* @return mixed
*/
public function saveFeedback(Request $request, StoreServiceFeedbackServices $services)
{
$data = $request->postMore([
['rela_name', ''],
['phone', ''],
['content', ''],
]);
validate(StoreServiceFeedbackValidate::class)->check($data);
$data['content'] = htmlspecialchars($data['content']);
$data['add_time'] = time();
$data['uid'] = $request->uid();
$services->save($data);
return app('json')->success(100000);
}
/**
* 客服反馈页面头部文字
* @return mixed
*/
public function getFeedbackInfo()
{
return app('json')->success(['feedback' => sys_config('service_feedback')]);
}
/**
* 确认登录
* @param Request $request
* @param StoreServiceServices $services
* @param string $code
* @return mixed
*/
public function setLoginCode(Request $request, StoreServiceServices $services, string $code)
{
if (!$code) {
return app('json')->fail(410020);
}
$cacheCode = CacheService::get($code);
if ($cacheCode === false || $cacheCode === null) {
return app('json')->fail(410021);
}
$userInfo = $services->get(['uid' => $request->uid()]);
if (!$userInfo) {
return app('json')->fail(410138);
}
$userInfo->uniqid = $code;
$userInfo->save();
CacheService::set($code, '0', 600);
return app('json')->success(410001);
}
/**
* 获取当前客服和用户的聊天记录
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function recordList(StoreServiceRecordServices $services, Request $request, string $nickname = '', $is_tourist = 0)
{
return app('json')->success($services->getServiceList((int)$request->uid(), $nickname, (int)$is_tourist));
}
}