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.

208 lines
7.0 KiB

1 year ago
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\controller\api\store\service;
use app\common\repositories\store\service\StoreServiceLogRepository;
use app\common\repositories\store\service\StoreServiceRepository;
use app\common\repositories\store\service\StoreServiceUserRepository;
use app\common\repositories\system\ExtendRepository;
use app\common\repositories\system\merchant\MerchantRepository;
use crmeb\basic\BaseController;
use think\App;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\facade\Cache;
/**
* Class Service
* @package app\controller\api\store\service
* @author xaboy
* @day 2020/5/29
*/
class Service extends BaseController
{
/**
* @var StoreServiceRepository
*/
protected $repository;
/**
* Service constructor.
* @param App $app
* @param StoreServiceRepository $repository
*/
public function __construct(App $app, StoreServiceRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
/**
* @param $id
* @param StoreServiceLogRepository $repository
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020/6/15
*/
public function chatHistory($id, StoreServiceLogRepository $repository)
{
[$page, $limit] = $this->getPage();
return app('json')->success($repository->userList($id, $this->request->uid(), $page, $limit));
}
/**
* @param StoreServiceLogRepository $repository
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020/6/16
*/
public function getList(StoreServiceUserRepository $repository)
{
[$page, $limit] = $this->getPage();
return app('json')->success($repository->userMerchantList($this->request->uid(), $page, $limit));
}
/**
* @param StoreServiceLogRepository $repository
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020/6/16
*/
public function serviceUserList($merId, StoreServiceUserRepository $repository)
{
[$page, $limit] = $this->getPage();
return app('json')->success($repository->merUserList($merId, $this->request->uid(), $page, $limit));
}
/**
* @param $merId
* @param $id
* @param StoreServiceLogRepository $repository
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020/6/15
*/
public function serviceHistory($merId, $id, StoreServiceLogRepository $repository)
{
[$page, $limit] = $this->getPage();
return app('json')->success($repository->merList($merId, $id, $this->request->uid(), $page, $limit));
}
public function user($merId, $uid, StoreServiceUserRepository $serviceUserRepository)
{
if (!$service = $this->repository->search([
'uid' => $this->request->uid(),
'mer_id' => (int)$merId,
'status' => 1
])->find()) {
return app('json')->fail('没有权限');
}
$user = $serviceUserRepository->search(['uid' => $uid, 'service_user_id' => $service->service_user_id])->with(['user' => function ($query) use ($merId) {
$query->field('uid,avatar,nickname,is_promoter' . (!$merId ? ',phone' : ''));
}, 'mark' => function ($query) use ($merId) {
$query->where('mer_id', $merId)->bind(['mark' => 'extend_value']);
}])->find();
if (!$user) {
return app('json')->fail('用户不存在');
}
return app('json')->success($user->toArray());
}
public function mark($merId, $uid, StoreServiceUserRepository $serviceUserRepository, ExtendRepository $extendRepository)
{
$data = $this->request->params(['mark']);
if (!$service = $this->repository->search([
'uid' => $this->request->uid(),
'mer_id' => (int)$merId,
'status' => 1
])->find()) {
return app('json')->fail('没有权限');
}
if ($service->mer_id && !$serviceUserRepository->existsWhere(['uid' => (int)$uid, 'mer_id' => $service->mer_id])) {
return app('json')->fail('用户不存在');
}
$extendRepository->updateInfo(ExtendRepository::TYPE_SERVICE_USER_MARK, (int)$uid, $service->mer_id, (string)$data['mark']);
return app('json')->success('备注成功');
}
public function merchantInfo($id)
{
if ($id) {
$merchant = app()->make(MerchantRepository::class)->get((int)$id);
if (!$merchant)
return app('json')->fail('商户不存在');
$data = [
'mer_id' => $merchant['mer_id'],
'avatar' => $merchant['mer_avatar'],
'name' => $merchant['mer_name'],
];
} else {
$config = systemConfig(['site_logo', 'site_name']);
$data = [
'mer_id' => 0,
'avatar' => $config['site_logo'],
'name' => $config['site_name'],
];
}
return app('json')->success($data);
}
public function hasService($id){
$uid = 0;
if ($this->request->isLogin()) {
$uid = $this->request->uid();
}
$data = $this->repository->getChatService($id, $uid);
if (!$data) {
return app('json')->fail('暂无可用客服');
}
return app('json')->success(200);
}
public function scanLogin($key)
{
$serviceId = (int)$this->request->param('service_id');
if (!$serviceId || !$service = $this->repository->search([
'uid' => $this->request->uid(),
'service_id' => $serviceId,
])->find()) {
return app('json')->fail('用户不存在');
}
if (!$service['is_open'] || !$service['status']) {
return app('json')->fail('账号已被关闭');
}
if (Cache::has('_scan_ser_login' . $key))
Cache::set('_scan_ser_login' . $key, $serviceId);
else
return app('json')->fail('操作超时');
return app('json')->success('登录成功');
}
}