存客宝 - 添加设备后回调轮询获取最新设备信息
This commit is contained in:
@@ -10,72 +10,73 @@ Route::group('v1/', function () {
|
|||||||
|
|
||||||
// 设备管理相关
|
// 设备管理相关
|
||||||
Route::group('devices', function () {
|
Route::group('devices', function () {
|
||||||
Route::get(':id/related-accounts', 'app\\cunkebao\\controller\\device\\GetRelatedAccountsV1Controller@index'); // 设备关联微信账号路由
|
Route::get(':id/related-accounts', 'app\cunkebao\controller\device\GetRelatedAccountsV1Controller@index'); // 设备关联微信账号路由
|
||||||
Route::get(':id/handle-logs', 'app\\cunkebao\\controller\\device\\GetDeviceHandleLogsV1Controller@index'); // 获取设备操作记录
|
Route::get(':id/handle-logs', 'app\cunkebao\controller\device\GetDeviceHandleLogsV1Controller@index'); // 获取设备操作记录
|
||||||
Route::get('', 'app\\cunkebao\\controller\\device\\GetDeviceListV1Controller@index'); // 获取设备列表
|
Route::get('', 'app\cunkebao\controller\device\GetDeviceListV1Controller@index'); // 获取设备列表
|
||||||
Route::get(':id', 'app\\cunkebao\\controller\\device\\GetDeviceDetailV1Controller@index'); // 获取设备详情
|
Route::get(':id', 'app\cunkebao\controller\device\GetDeviceDetailV1Controller@index'); // 获取设备详情
|
||||||
Route::post('', 'app\\cunkebao\\controller\\device\\PostAddDeviceV1Controller@index'); // 添加设备
|
Route::post('', 'app\cunkebao\controller\device\PostAddDeviceV1Controller@index'); // 添加设备
|
||||||
Route::put('refresh', 'app\\cunkebao\\controller\\device\\RefreshDeviceDetailV1Controller@index'); // 刷新设备状态
|
Route::put('refresh', 'app\cunkebao\controller\device\RefreshDeviceDetailV1Controller@index'); // 刷新设备状态
|
||||||
Route::delete(':id', 'app\\cunkebao\\controller\\Device@delete'); // 删除设备
|
Route::delete(':id', 'app\cunkebao\controller\Device@delete'); // 删除设备
|
||||||
Route::post('task-config', 'app\\cunkebao\\controller\\device\\UpdateDeviceTaskConfigV1Controller@index'); // 更新设备任务配置
|
Route::post('task-config', 'app\cunkebao\controller\device\UpdateDeviceTaskConfigV1Controller@index');
|
||||||
|
Route::get('add-results', 'app\cunkebao\controller\device\GetAddResultedDevicesController@index'); // 更新设备任务配置
|
||||||
});
|
});
|
||||||
|
|
||||||
// 设备微信相关
|
// 设备微信相关
|
||||||
Route::group('device/wechats', function () {
|
Route::group('device/wechats', function () {
|
||||||
Route::get('friends', 'app\\cunkebao\\controller\\DeviceWechat@getFriends'); // 获取微信好友列表
|
Route::get('friends', 'app\cunkebao\controller\DeviceWechat@getFriends'); // 获取微信好友列表
|
||||||
Route::get('count', 'app\\cunkebao\\controller\\DeviceWechat@count'); // 获取在线微信账号数量
|
Route::get('count', 'app\cunkebao\controller\DeviceWechat@count'); // 获取在线微信账号数量
|
||||||
Route::get('device-count', 'app\\cunkebao\\controller\\DeviceWechat@deviceCount'); // 获取有登录微信的设备数量
|
Route::get('device-count', 'app\cunkebao\controller\DeviceWechat@deviceCount'); // 获取有登录微信的设备数量
|
||||||
Route::get('', 'app\\cunkebao\\controller\\DeviceWechat@index'); // 获取在线微信账号列表
|
Route::get('', 'app\cunkebao\controller\DeviceWechat@index'); // 获取在线微信账号列表
|
||||||
Route::get(':id', 'app\\cunkebao\\controller\\DeviceWechat@detail'); // 获取微信号详情
|
Route::get(':id', 'app\cunkebao\controller\DeviceWechat@detail'); // 获取微信号详情
|
||||||
Route::put('refresh', 'app\\cunkebao\\controller\\DeviceWechat@refresh'); // 刷新设备微信状态
|
Route::put('refresh', 'app\cunkebao\controller\DeviceWechat@refresh'); // 刷新设备微信状态
|
||||||
Route::post('transfer-friends', 'app\\cunkebao\\controller\\DeviceWechat@transferFriends'); // 微信好友转移
|
Route::post('transfer-friends', 'app\cunkebao\controller\DeviceWechat@transferFriends'); // 微信好友转移
|
||||||
});
|
});
|
||||||
|
|
||||||
// 获客场景相关
|
// 获客场景相关
|
||||||
Route::group('plan/scenes', function () {
|
Route::group('plan/scenes', function () {
|
||||||
Route::get('', 'app\\cunkebao\\controller\\Scene@index'); // 获取场景列表
|
Route::get('', 'app\cunkebao\controller\Scene@index'); // 获取场景列表
|
||||||
});
|
});
|
||||||
|
|
||||||
// 流量标签相关
|
// 流量标签相关
|
||||||
Route::group('traffic/tags', function () {
|
Route::group('traffic/tags', function () {
|
||||||
Route::get('', 'app\\cunkebao\\controller\\TrafficTag@index'); // 获取标签列表
|
Route::get('', 'app\cunkebao\controller\TrafficTag@index'); // 获取标签列表
|
||||||
});
|
});
|
||||||
|
|
||||||
// 流量池相关
|
// 流量池相关
|
||||||
Route::group('traffic/pool', function () {
|
Route::group('traffic/pool', function () {
|
||||||
Route::post('import', 'app\\cunkebao\\controller\\TrafficPool@importOrders'); // 导入订单标签
|
Route::post('import', 'app\cunkebao\controller\TrafficPool@importOrders'); // 导入订单标签
|
||||||
});
|
});
|
||||||
|
|
||||||
// 工作台相关
|
// 工作台相关
|
||||||
Route::group('workbench', function () {
|
Route::group('workbench', function () {
|
||||||
Route::post('create', 'app\\cunkebao\\controller\\WorkbenchController@create'); // 创建工作台
|
Route::post('create', 'app\cunkebao\controller\WorkbenchController@create'); // 创建工作台
|
||||||
Route::get('list', 'app\\cunkebao\\controller\\WorkbenchController@getList'); // 获取工作台列表
|
Route::get('list', 'app\cunkebao\controller\WorkbenchController@getList'); // 获取工作台列表
|
||||||
Route::post('update-status', 'app\\cunkebao\\controller\\WorkbenchController@updateStatus'); // 更新工作台状态
|
Route::post('update-status', 'app\cunkebao\controller\WorkbenchController@updateStatus'); // 更新工作台状态
|
||||||
Route::delete('delete', 'app\\cunkebao\\controller\\WorkbenchController@delete'); // 删除工作台
|
Route::delete('delete', 'app\cunkebao\controller\WorkbenchController@delete'); // 删除工作台
|
||||||
Route::post('copy', 'app\\cunkebao\\controller\\WorkbenchController@copy'); // 拷贝工作台
|
Route::post('copy', 'app\cunkebao\controller\WorkbenchController@copy'); // 拷贝工作台
|
||||||
Route::get('detail', 'app\\cunkebao\\controller\\WorkbenchController@detail'); // 获取工作台详情
|
Route::get('detail', 'app\cunkebao\controller\WorkbenchController@detail'); // 获取工作台详情
|
||||||
Route::post('update', 'app\\cunkebao\\controller\\WorkbenchController@update'); // 更新工作台
|
Route::post('update', 'app\cunkebao\controller\WorkbenchController@update'); // 更新工作台
|
||||||
});
|
});
|
||||||
|
|
||||||
// 内容库相关
|
// 内容库相关
|
||||||
Route::group('content/library', function () {
|
Route::group('content/library', function () {
|
||||||
Route::post('create', 'app\\cunkebao\\controller\\ContentLibraryController@create'); // 创建内容库
|
Route::post('create', 'app\cunkebao\controller\ContentLibraryController@create'); // 创建内容库
|
||||||
Route::get('list', 'app\\cunkebao\\controller\\ContentLibraryController@getList'); // 获取内容库列表
|
Route::get('list', 'app\cunkebao\controller\ContentLibraryController@getList'); // 获取内容库列表
|
||||||
Route::post('update', 'app\\cunkebao\\controller\\ContentLibraryController@update'); // 更新内容库
|
Route::post('update', 'app\cunkebao\controller\ContentLibraryController@update'); // 更新内容库
|
||||||
Route::delete('delete', 'app\\cunkebao\\controller\\ContentLibraryController@delete'); // 删除内容库
|
Route::delete('delete', 'app\cunkebao\controller\ContentLibraryController@delete'); // 删除内容库
|
||||||
Route::get('detail', 'app\\cunkebao\\controller\\ContentLibraryController@detail'); // 获取内容库详情
|
Route::get('detail', 'app\cunkebao\controller\ContentLibraryController@detail'); // 获取内容库详情
|
||||||
Route::get('collectMoments', 'app\\cunkebao\\controller\\ContentLibraryController@collectMoments'); // 采集朋友圈
|
Route::get('collectMoments', 'app\cunkebao\controller\ContentLibraryController@collectMoments'); // 采集朋友圈
|
||||||
});
|
});
|
||||||
|
|
||||||
// 好友相关
|
// 好友相关
|
||||||
Route::group('friend', function () {
|
Route::group('friend', function () {
|
||||||
Route::get('', 'app\\cunkebao\\controller\\friend\\GetFriendListV1Controller@index'); // 获取好友列表
|
Route::get('', 'app\cunkebao\controller\friend\GetFriendListV1Controller@index'); // 获取好友列表
|
||||||
});
|
});
|
||||||
|
|
||||||
//群相关
|
//群相关
|
||||||
Route::group('chatroom', function () {
|
Route::group('chatroom', function () {
|
||||||
Route::get('', 'app\\cunkebao\\controller\\chatroom\\GetChatroomListV1Controller@index'); // 获取群列表
|
Route::get('', 'app\cunkebao\controller\chatroom\GetChatroomListV1Controller@index'); // 获取群列表
|
||||||
Route::get('getMemberList', 'app\\cunkebao\\controller\\chatroom\\GetChatroomListV1Controller@getMemberList'); // 获取群详情
|
Route::get('getMemberList', 'app\cunkebao\controller\chatroom\GetChatroomListV1Controller@getMemberList'); // 获取群详情
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\cunkebao\controller\device;
|
||||||
|
|
||||||
|
use app\api\controller\DeviceController as ApiDeviceController;
|
||||||
|
use app\common\model\Device as DeviceModel;
|
||||||
|
use app\common\model\User as UserModel;
|
||||||
|
use library\ResponseHelper;
|
||||||
|
use think\Controller;
|
||||||
|
use think\Db;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备控制器
|
||||||
|
*/
|
||||||
|
class GetAddResultedDevicesController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 通过账号id 获取项目id。
|
||||||
|
*
|
||||||
|
* @param int $accountId
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
protected function getCompanyIdByAccountId(int $accountId): int
|
||||||
|
{
|
||||||
|
return UserModel::where('s2_accountId', $accountId)->value('companyId');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目下的所有设备。
|
||||||
|
*
|
||||||
|
* @param int $companyId
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function getAllDevicesIdWithInCompany(int $companyId): array
|
||||||
|
{
|
||||||
|
return DeviceModel::where('companyId', $companyId)->column('id') ?: [0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行数据迁移。
|
||||||
|
*
|
||||||
|
* @param int $accountId
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function migrateData(int $accountId): void
|
||||||
|
{
|
||||||
|
$companyId = $this->getCompanyIdByAccountId($accountId);
|
||||||
|
$deviceIds = $this->getAllDevicesIdWithInCompany($companyId) ?: [0];
|
||||||
|
|
||||||
|
// 从 s2_device 导入数据。
|
||||||
|
$this->getNewDeviceFromS2_device($deviceIds, $companyId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从 s2_device 导入数据。
|
||||||
|
*
|
||||||
|
* @param array $ids
|
||||||
|
* @param int $companyId
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function getNewDeviceFromS2_device(array $ids, int $companyId): void
|
||||||
|
{
|
||||||
|
$ids = implode(',', $ids);
|
||||||
|
|
||||||
|
$sql = "insert into ck_device(`id`, `imei`, `model`, phone, operatingSystem,memo,alive,brand,rooted,xPosed,softwareVersion,extra,createTime,updateTime,deleteTime,companyId)
|
||||||
|
select
|
||||||
|
d.id,d.imei,d.model,d.phone,d.operatingSystem,d.memo,d.alive,d.brand,d.rooted,d.xPosed,d.softwareVersion,d.extra,d.createTime,d.lastUpdateTime,d.deleteTime,a.departmentId companyId
|
||||||
|
from s2_device d
|
||||||
|
join s2_company_account a on d.currentAccountId = a.id
|
||||||
|
where isDeleted = 0 and deletedAndStop = 0 and d.id not in ({$ids}) and a.departmentId = {$companyId}
|
||||||
|
";
|
||||||
|
|
||||||
|
Db::query($sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取添加的关联设备结果。
|
||||||
|
*
|
||||||
|
* @param int $accountId
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function getAddResulted(int $accountId): bool
|
||||||
|
{
|
||||||
|
$result = (new ApiDeviceController())->getlist(
|
||||||
|
[
|
||||||
|
'accountId' => $accountId,
|
||||||
|
'pageIndex' => 0,
|
||||||
|
'pageSize' => 1
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = json_decode($result, true);
|
||||||
|
$result = $result['data']['results'][0] ?? false;
|
||||||
|
|
||||||
|
return $result ? (
|
||||||
|
// 125是前端延迟5秒 + 轮询120次 1次/s
|
||||||
|
time() - strtotime($result['lastUpdateTime']) <= 65
|
||||||
|
) : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取基础统计信息
|
||||||
|
*
|
||||||
|
* @return \think\response\Json
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$accountId = $this->request->param('accountId/d');
|
||||||
|
|
||||||
|
$isAdded = $this->getAddResulted($accountId);
|
||||||
|
$isAdded && $this->migrateData($accountId);
|
||||||
|
|
||||||
|
return ResponseHelper::success(
|
||||||
|
[
|
||||||
|
'added' => $isAdded
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user