修正A2C过火墙、删除工单同步删除工单关联的号码
This commit is contained in:
+25
-25
@@ -57,33 +57,12 @@ require_once __DIR__ . '/Whatshub.php'; // Whatshub 工单平台
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
try {
|
|
||||||
echo "🚀 开始执行<ChatKnow SCRM>抓取任务 (多引擎智能调度)...\n\r";
|
|
||||||
$pageUrl = 'https://user.chatknow.com/child/workorder-share?shareKey=jf5t6MNrJ2mC76N'; // PageUrl 入口授权页
|
|
||||||
$username = ""; // 登录账号
|
|
||||||
$password = ""; // 登录密码
|
|
||||||
$spider = new Chatknow($pageUrl, $username, $password);
|
|
||||||
$finalData = $spider->run();
|
|
||||||
|
|
||||||
echo "✅ 任务完成!统一数据如下:\n\r";
|
|
||||||
echo "----------------------------------------\n\r";
|
|
||||||
echo "当日新增:{$finalData->todayNewCount} 人\n\r";
|
|
||||||
echo "在线号码:{$finalData->totalOnline} 个\n\r";
|
|
||||||
echo "离线号码:{$finalData->totalOffline} 个\n\r";
|
|
||||||
echo "Total:" . $finalData->total . " 个号码\n\r";
|
|
||||||
echo "实际总共抓取:" . count($finalData->numbers) . " 个号码\n\r";
|
|
||||||
echo "号码列表:\n\r";
|
|
||||||
echo dd($finalData->numbers);
|
|
||||||
} catch (Exception $e) {
|
|
||||||
echo "🚨 抓取异常:" . $e->getMessage() . "\n\r";
|
|
||||||
}
|
|
||||||
|
|
||||||
// try {
|
// try {
|
||||||
// echo "🚀 开始执行<A2c云控>抓取任务 (多引擎智能调度)...\n\r";
|
// echo "🚀 开始执行<ChatKnow SCRM>抓取任务 (多引擎智能调度)...\n\r";
|
||||||
// $pageUrl = 'https://yyk.ink/8415O53'; // PageUrl 入口授权页
|
// $pageUrl = 'https://user.chatknow.com/child/workorder-share?shareKey=jf5t6MNrJ2mC76N'; // PageUrl 入口授权页
|
||||||
// $username = ""; // 登录账号
|
// $username = ""; // 登录账号
|
||||||
// $password = ""; // 登录密码
|
// $password = ""; // 登录密码
|
||||||
// $spider = new A2c($pageUrl, $username, $password);
|
// $spider = new Chatknow($pageUrl, $username, $password);
|
||||||
// $finalData = $spider->run();
|
// $finalData = $spider->run();
|
||||||
|
|
||||||
// echo "✅ 任务完成!统一数据如下:\n\r";
|
// echo "✅ 任务完成!统一数据如下:\n\r";
|
||||||
@@ -95,11 +74,32 @@ try {
|
|||||||
// echo "实际总共抓取:" . count($finalData->numbers) . " 个号码\n\r";
|
// echo "实际总共抓取:" . count($finalData->numbers) . " 个号码\n\r";
|
||||||
// echo "号码列表:\n\r";
|
// echo "号码列表:\n\r";
|
||||||
// echo dd($finalData->numbers);
|
// echo dd($finalData->numbers);
|
||||||
|
|
||||||
// } catch (Exception $e) {
|
// } catch (Exception $e) {
|
||||||
// echo "🚨 抓取异常:" . $e->getMessage() . "\n\r";
|
// echo "🚨 抓取异常:" . $e->getMessage() . "\n\r";
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
try {
|
||||||
|
echo "🚀 开始执行<A2c云控>抓取任务 (多引擎智能调度)...\n\r";
|
||||||
|
$pageUrl = 'https://yyk.ink/52oXZRG'; // PageUrl 入口授权页
|
||||||
|
$username = ""; // 登录账号
|
||||||
|
$password = ""; // 登录密码
|
||||||
|
$spider = new A2c($pageUrl, $username, $password);
|
||||||
|
$finalData = $spider->run();
|
||||||
|
|
||||||
|
echo "✅ 任务完成!统一数据如下:\n\r";
|
||||||
|
echo "----------------------------------------\n\r";
|
||||||
|
echo "当日新增:{$finalData->todayNewCount} 人\n\r";
|
||||||
|
echo "在线号码:{$finalData->totalOnline} 个\n\r";
|
||||||
|
echo "离线号码:{$finalData->totalOffline} 个\n\r";
|
||||||
|
echo "Total:" . $finalData->total . " 个号码\n\r";
|
||||||
|
echo "实际总共抓取:" . count($finalData->numbers) . " 个号码\n\r";
|
||||||
|
echo "号码列表:\n\r";
|
||||||
|
echo dd($finalData->numbers);
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo "🚨 抓取异常:" . $e->getMessage() . "\n\r";
|
||||||
|
}
|
||||||
|
|
||||||
// try {
|
// try {
|
||||||
// echo "🚀 开始执行<星河云控>抓取任务 (多引擎智能调度)...\n\r";
|
// echo "🚀 开始执行<星河云控>抓取任务 (多引擎智能调度)...\n\r";
|
||||||
// $pageUrl = 'http://8.218.14.51/share/share/index.html?token=hn6z3egq4nnnebkv4063pcdouzr4ug5js902mlqo2n3yp9gzhe'; // PageUrl 入口授权页
|
// $pageUrl = 'http://8.218.14.51/share/share/index.html?token=hn6z3egq4nnnebkv4063pcdouzr4ug5js902mlqo2n3yp9gzhe'; // PageUrl 入口授权页
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ declare(strict_types=1);
|
|||||||
namespace app\admin\model\split;
|
namespace app\admin\model\split;
|
||||||
|
|
||||||
use app\common\service\SplitSyncConfigService;
|
use app\common\service\SplitSyncConfigService;
|
||||||
|
use app\common\service\SplitTicketRuleService;
|
||||||
|
use app\common\service\SplitTicketSyncLockService;
|
||||||
use think\Db;
|
use think\Db;
|
||||||
use think\Model;
|
use think\Model;
|
||||||
|
|
||||||
@@ -15,6 +17,15 @@ class Ticket extends Model
|
|||||||
{
|
{
|
||||||
protected $name = 'split_ticket';
|
protected $name = 'split_ticket';
|
||||||
|
|
||||||
|
protected static function init(): void
|
||||||
|
{
|
||||||
|
// 删除工单时:释放同步锁,并物理删除同步导入的号码(manual_manage=0)
|
||||||
|
self::beforeDelete(function (self $ticket): void {
|
||||||
|
(new SplitTicketSyncLockService())->release((int) $ticket['id']);
|
||||||
|
(new SplitTicketRuleService())->deleteSyncedNumbersForTicket($ticket);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
protected $autoWriteTimestamp = 'integer';
|
protected $autoWriteTimestamp = 'integer';
|
||||||
|
|
||||||
protected $createTime = 'createtime';
|
protected $createTime = 'createtime';
|
||||||
|
|||||||
@@ -5,10 +5,11 @@ declare(strict_types=1);
|
|||||||
namespace app\common\library\scrm\spider;
|
namespace app\common\library\scrm\spider;
|
||||||
|
|
||||||
use app\common\library\scrm\AbstractScrmSpider;
|
use app\common\library\scrm\AbstractScrmSpider;
|
||||||
|
use app\common\library\scrm\AntiBotConfigBuilder;
|
||||||
use app\common\library\scrm\UnifiedScrmData;
|
use app\common\library\scrm\UnifiedScrmData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A2C 云控蜘蛛
|
* A2C 云控蜘蛛(Real Browser + Turnstile 过盾 + UI 翻页)
|
||||||
*/
|
*/
|
||||||
class A2cSpider extends AbstractScrmSpider
|
class A2cSpider extends AbstractScrmSpider
|
||||||
{
|
{
|
||||||
@@ -50,6 +51,7 @@ class A2cSpider extends AbstractScrmSpider
|
|||||||
'authActions' => [
|
'authActions' => [
|
||||||
['type' => 'wait', 'ms' => 2000],
|
['type' => 'wait', 'ms' => 2000],
|
||||||
],
|
],
|
||||||
|
'antiBot' => AntiBotConfigBuilder::build('a2c', $this->pageUrl),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,29 @@ class SplitTicketRuleService
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单物理删除时,移除该工单同步导入的号码(manual_manage=0)
|
||||||
|
*
|
||||||
|
* 关联键与 SplitTicketNumberSyncService 一致:admin_id + split_link_id + ticket_name
|
||||||
|
* manual_manage=1 的手动管理号码保留
|
||||||
|
*
|
||||||
|
* @return int 删除行数
|
||||||
|
*/
|
||||||
|
public function deleteSyncedNumbersForTicket(Ticket $ticket): int
|
||||||
|
{
|
||||||
|
$ticketName = trim((string) ($ticket['ticket_name'] ?? ''));
|
||||||
|
$linkId = (int) ($ticket['split_link_id'] ?? 0);
|
||||||
|
if ($ticketName === '' || $linkId <= 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Number::where('admin_id', (int) $ticket['admin_id'])
|
||||||
|
->where('split_link_id', $linkId)
|
||||||
|
->where('ticket_name', $ticketName)
|
||||||
|
->where('manual_manage', 0)
|
||||||
|
->delete();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 手动切换工单状态时,联动非手动管理的号码
|
* 手动切换工单状态时,联动非手动管理的号码
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ return array (
|
|||||||
),
|
),
|
||||||
'split_platform_domain' => 'flowerbells.top',
|
'split_platform_domain' => 'flowerbells.top',
|
||||||
'split_scrm_node_host' => 'http://127.0.0.1:3001',
|
'split_scrm_node_host' => 'http://127.0.0.1:3001',
|
||||||
'split_scrm_antibot_types' => 'whatshub,chatknow',
|
'split_scrm_antibot_types' => 'whatshub,chatknow,a2c',
|
||||||
'split_scrm_session_ttl_minutes' => '120',
|
'split_scrm_session_ttl_minutes' => '120',
|
||||||
'split_sync_interval_a2c' => '3',
|
'split_sync_interval_a2c' => '3',
|
||||||
'split_sync_interval_haiwang' => '3',
|
'split_sync_interval_haiwang' => '3',
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ declare(strict_types=1);
|
|||||||
namespace app\admin\model\split;
|
namespace app\admin\model\split;
|
||||||
|
|
||||||
use app\common\service\SplitSyncConfigService;
|
use app\common\service\SplitSyncConfigService;
|
||||||
|
use app\common\service\SplitTicketRuleService;
|
||||||
|
use app\common\service\SplitTicketSyncLockService;
|
||||||
use think\Db;
|
use think\Db;
|
||||||
use think\Model;
|
use think\Model;
|
||||||
|
|
||||||
@@ -15,6 +17,15 @@ class Ticket extends Model
|
|||||||
{
|
{
|
||||||
protected $name = 'split_ticket';
|
protected $name = 'split_ticket';
|
||||||
|
|
||||||
|
protected static function init(): void
|
||||||
|
{
|
||||||
|
// 删除工单时:释放同步锁,并物理删除同步导入的号码(manual_manage=0)
|
||||||
|
self::beforeDelete(function (self $ticket): void {
|
||||||
|
(new SplitTicketSyncLockService())->release((int) $ticket['id']);
|
||||||
|
(new SplitTicketRuleService())->deleteSyncedNumbersForTicket($ticket);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
protected $autoWriteTimestamp = 'integer';
|
protected $autoWriteTimestamp = 'integer';
|
||||||
|
|
||||||
protected $createTime = 'createtime';
|
protected $createTime = 'createtime';
|
||||||
|
|||||||
@@ -5,10 +5,11 @@ declare(strict_types=1);
|
|||||||
namespace app\common\library\scrm\spider;
|
namespace app\common\library\scrm\spider;
|
||||||
|
|
||||||
use app\common\library\scrm\AbstractScrmSpider;
|
use app\common\library\scrm\AbstractScrmSpider;
|
||||||
|
use app\common\library\scrm\AntiBotConfigBuilder;
|
||||||
use app\common\library\scrm\UnifiedScrmData;
|
use app\common\library\scrm\UnifiedScrmData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A2C 云控蜘蛛
|
* A2C 云控蜘蛛(Real Browser + Turnstile 过盾 + UI 翻页)
|
||||||
*/
|
*/
|
||||||
class A2cSpider extends AbstractScrmSpider
|
class A2cSpider extends AbstractScrmSpider
|
||||||
{
|
{
|
||||||
@@ -50,6 +51,7 @@ class A2cSpider extends AbstractScrmSpider
|
|||||||
'authActions' => [
|
'authActions' => [
|
||||||
['type' => 'wait', 'ms' => 2000],
|
['type' => 'wait', 'ms' => 2000],
|
||||||
],
|
],
|
||||||
|
'antiBot' => AntiBotConfigBuilder::build('a2c', $this->pageUrl),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,29 @@ class SplitTicketRuleService
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单物理删除时,移除该工单同步导入的号码(manual_manage=0)
|
||||||
|
*
|
||||||
|
* 关联键与 SplitTicketNumberSyncService 一致:admin_id + split_link_id + ticket_name
|
||||||
|
* manual_manage=1 的手动管理号码保留
|
||||||
|
*
|
||||||
|
* @return int 删除行数
|
||||||
|
*/
|
||||||
|
public function deleteSyncedNumbersForTicket(Ticket $ticket): int
|
||||||
|
{
|
||||||
|
$ticketName = trim((string) ($ticket['ticket_name'] ?? ''));
|
||||||
|
$linkId = (int) ($ticket['split_link_id'] ?? 0);
|
||||||
|
if ($ticketName === '' || $linkId <= 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Number::where('admin_id', (int) $ticket['admin_id'])
|
||||||
|
->where('split_link_id', $linkId)
|
||||||
|
->where('ticket_name', $ticketName)
|
||||||
|
->where('manual_manage', 0)
|
||||||
|
->delete();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 手动切换工单状态时,联动非手动管理的号码
|
* 手动切换工单状态时,联动非手动管理的号码
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user