317 lines
9.4 KiB
PHP
317 lines
9.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace app\adminapi\controller\firstvisit;
|
|
|
|
use app\adminapi\controller\BaseAdminController;
|
|
use app\adminapi\logic\firstvisit\WecomAcquisitionCustomerLogic;
|
|
use app\adminapi\logic\firstvisit\WecomPromotionLogic;
|
|
use app\common\service\qywx\QywxPromotionContactApiService;
|
|
use app\common\service\qywx\QywxPromotionMediaService;
|
|
use app\common\service\qywx\QywxPromotionOperatorAccess;
|
|
|
|
class WecomPromotionController extends BaseAdminController
|
|
{
|
|
public function tagOptions()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
return $this->run(fn () => $this->data((new QywxPromotionContactApiService())->tagOptions()));
|
|
}
|
|
|
|
public function createTag()
|
|
{
|
|
if (!$this->hasBasePagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
if (!$this->request->isPost()) {
|
|
return $this->fail('请使用 POST 创建标签');
|
|
}
|
|
$name = $this->request->post('name', '');
|
|
if (!is_string($name)) {
|
|
return $this->fail('标签名称格式不正确');
|
|
}
|
|
return $this->run(fn () => $this->data((new QywxPromotionContactApiService())->createTag($name)));
|
|
}
|
|
|
|
public function uploadWelcomeMedia()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
return $this->run(fn () => $this->data((new QywxPromotionMediaService())->upload(
|
|
$this->request->file('file'),
|
|
(string) $this->request->post('type', ''),
|
|
$this->adminId
|
|
)));
|
|
}
|
|
|
|
public function overview()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足,无法访问企业微信获客助手');
|
|
}
|
|
|
|
return $this->run(fn () => $this->data(WecomPromotionLogic::overview(
|
|
$this->adminId,
|
|
$this->adminInfo,
|
|
$this->request->domain()
|
|
)));
|
|
}
|
|
|
|
public function savePool()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
$params = $this->request->post();
|
|
if ((int) ($params['id'] ?? 0) <= 0 && !$this->hasBasePagePermission()) {
|
|
return $this->fail('共享操作人只能编辑已授权方案,不能新建分流方案');
|
|
}
|
|
|
|
return $this->run(fn () => $this->success('分流方案已保存', WecomPromotionLogic::savePool(
|
|
$params,
|
|
$this->adminId,
|
|
$this->adminInfo
|
|
)));
|
|
}
|
|
|
|
public function batchUpdatePools()
|
|
{
|
|
if (!$this->hasBasePagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
|
|
return $this->run(fn () => $this->success('分流方案配置已批量更新', WecomPromotionLogic::batchUpdatePools(
|
|
$this->request->post(),
|
|
$this->adminId,
|
|
$this->adminInfo
|
|
)));
|
|
}
|
|
|
|
public function saveWidget()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
|
|
return $this->run(fn () => $this->success('浮窗配置已保存', WecomPromotionLogic::saveWidget(
|
|
$this->request->post(),
|
|
$this->adminId,
|
|
$this->adminInfo
|
|
)));
|
|
}
|
|
|
|
public function batchSetOperators()
|
|
{
|
|
if (!$this->hasBasePagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
|
|
return $this->run(fn () => $this->success('方案操作人已批量更新', WecomPromotionLogic::batchSetOperators(
|
|
$this->request->post(),
|
|
$this->adminId,
|
|
$this->adminInfo
|
|
)));
|
|
}
|
|
|
|
public function deletePool()
|
|
{
|
|
if (!$this->hasBasePagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
$id = (int) $this->request->post('id', 0);
|
|
|
|
return $this->run(function () use ($id) {
|
|
WecomPromotionLogic::deletePool($id, $this->adminId, $this->adminInfo);
|
|
|
|
return $this->success('分流方案及企业微信官方获客链接已永久删除');
|
|
});
|
|
}
|
|
|
|
public function saveLink()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
|
|
return $this->run(fn () => $this->success('获客助手链接已保存', WecomPromotionLogic::saveLink(
|
|
$this->request->post(),
|
|
$this->adminId,
|
|
$this->adminInfo
|
|
)));
|
|
}
|
|
|
|
public function saveMember()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
|
|
return $this->run(fn () => $this->success('成员分流规则已保存', WecomPromotionLogic::saveMember(
|
|
$this->request->post(),
|
|
$this->adminId,
|
|
$this->adminInfo
|
|
)));
|
|
}
|
|
|
|
public function toggleMember()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
$id = (int) $this->request->post('id', 0);
|
|
$status = (int) $this->request->post('status', 0);
|
|
|
|
return $this->run(fn () => $this->success(
|
|
'成员状态已更新',
|
|
WecomPromotionLogic::toggleMember($id, $status, $this->adminId, $this->adminInfo)
|
|
));
|
|
}
|
|
|
|
public function checkApiPermission()
|
|
{
|
|
if (!$this->hasBasePagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
|
|
return $this->run(fn () => $this->success('获客助手 API 权限验证通过', WecomPromotionLogic::checkApiPermission()));
|
|
}
|
|
|
|
/** 推送当前方案的可用成员,不导入其他官方链接。 */
|
|
public function syncMemberRange()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
if (!$this->request->isPost()) {
|
|
return $this->fail('请使用 POST 同步成员范围');
|
|
}
|
|
$poolId = (int) $this->request->post('pool_id', 0);
|
|
|
|
return $this->run(fn () => $this->data(WecomPromotionLogic::syncMemberRange(
|
|
$poolId,
|
|
$this->adminId,
|
|
$this->adminInfo
|
|
)));
|
|
}
|
|
|
|
public function syncRemoteLinks()
|
|
{
|
|
if (!$this->hasBasePagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
$poolId = (int) $this->request->post('pool_id', 0);
|
|
|
|
return $this->run(fn () => $this->success('企业微信获客链接同步完成', WecomPromotionLogic::syncRemoteLinks(
|
|
$poolId,
|
|
$this->adminId,
|
|
$this->adminInfo
|
|
)));
|
|
}
|
|
|
|
public function remoteLinkDetail()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
$id = (int) $this->request->get('id', 0);
|
|
|
|
return $this->run(fn () => $this->data(WecomPromotionLogic::remoteLinkDetail(
|
|
$id,
|
|
$this->adminId,
|
|
$this->adminInfo
|
|
)));
|
|
}
|
|
|
|
public function deleteRemoteLink()
|
|
{
|
|
if (!$this->hasBasePagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
$id = (int) $this->request->post('id', 0);
|
|
|
|
return $this->run(function () use ($id) {
|
|
WecomPromotionLogic::deleteRemoteLink($id, $this->adminId, $this->adminInfo);
|
|
|
|
return $this->success('企业微信获客链接已永久删除,本地审计记录已保留');
|
|
});
|
|
}
|
|
|
|
public function syncCustomers()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
|
|
return $this->run(fn () => $this->success('获客客户同步完成', WecomAcquisitionCustomerLogic::sync(
|
|
$this->request->post(),
|
|
$this->adminId,
|
|
$this->adminInfo
|
|
)));
|
|
}
|
|
|
|
public function customerStatistics()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
|
|
return $this->run(fn () => $this->data(WecomAcquisitionCustomerLogic::statistics(
|
|
$this->request->get(),
|
|
$this->adminId,
|
|
$this->adminInfo
|
|
)));
|
|
}
|
|
|
|
public function toggleLink()
|
|
{
|
|
if (!$this->hasPagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
$id = (int) $this->request->post('id', 0);
|
|
$status = (int) $this->request->post('status', 0);
|
|
|
|
return $this->run(function () use ($id, $status) {
|
|
WecomPromotionLogic::toggleLink($id, $status, $this->adminId, $this->adminInfo);
|
|
|
|
return $this->success('状态已更新');
|
|
});
|
|
}
|
|
|
|
public function deleteLink()
|
|
{
|
|
if (!$this->hasBasePagePermission()) {
|
|
return $this->fail('权限不足');
|
|
}
|
|
$id = (int) $this->request->post('id', 0);
|
|
|
|
return $this->run(function () use ($id) {
|
|
WecomPromotionLogic::deleteLink($id, $this->adminId, $this->adminInfo);
|
|
|
|
return $this->success('获客助手链接已删除');
|
|
});
|
|
}
|
|
|
|
private function run(callable $callback)
|
|
{
|
|
try {
|
|
return $callback();
|
|
} catch (\Throwable $e) {
|
|
return $this->fail($e->getMessage());
|
|
}
|
|
}
|
|
|
|
private function hasPagePermission(): bool
|
|
{
|
|
return QywxPromotionOperatorAccess::hasPagePermission($this->adminId, $this->adminInfo);
|
|
}
|
|
|
|
private function hasBasePagePermission(): bool
|
|
{
|
|
return QywxPromotionOperatorAccess::hasBasePagePermission($this->adminId, $this->adminInfo);
|
|
}
|
|
}
|