From 6708adde877df2df8afb7c0ca2c40d6cfbbab2c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=B3=E6=B8=85=E7=88=BD?= Date: Wed, 30 Apr 2025 17:28:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=98=E5=AE=A2=E5=AE=9D=20-=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=AE=BE=E5=A4=87=E5=90=8E=E5=9B=9E=E8=B0=83=E8=BD=AE?= =?UTF-8?q?=E8=AF=A2=E8=8E=B7=E5=8F=96=E6=9C=80=E6=96=B0=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Server/application/cunkebao/config/route.php | 69 +++++----- .../GetAddResultedDevicesController.php | 120 ++++++++++++++++++ 2 files changed, 155 insertions(+), 34 deletions(-) create mode 100644 Server/application/cunkebao/controller/device/GetAddResultedDevicesController.php diff --git a/Server/application/cunkebao/config/route.php b/Server/application/cunkebao/config/route.php index 6a14bb07..309a6dfd 100644 --- a/Server/application/cunkebao/config/route.php +++ b/Server/application/cunkebao/config/route.php @@ -10,72 +10,73 @@ Route::group('v1/', function () { // 设备管理相关 Route::group('devices', function () { - Route::get(':id/related-accounts', 'app\\cunkebao\\controller\\device\\GetRelatedAccountsV1Controller@index'); // 设备关联微信账号路由 - Route::get(':id/handle-logs', 'app\\cunkebao\\controller\\device\\GetDeviceHandleLogsV1Controller@index'); // 获取设备操作记录 - Route::get('', 'app\\cunkebao\\controller\\device\\GetDeviceListV1Controller@index'); // 获取设备列表 - Route::get(':id', 'app\\cunkebao\\controller\\device\\GetDeviceDetailV1Controller@index'); // 获取设备详情 - Route::post('', 'app\\cunkebao\\controller\\device\\PostAddDeviceV1Controller@index'); // 添加设备 - Route::put('refresh', 'app\\cunkebao\\controller\\device\\RefreshDeviceDetailV1Controller@index'); // 刷新设备状态 - Route::delete(':id', 'app\\cunkebao\\controller\\Device@delete'); // 删除设备 - Route::post('task-config', 'app\\cunkebao\\controller\\device\\UpdateDeviceTaskConfigV1Controller@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('', 'app\cunkebao\controller\device\GetDeviceListV1Controller@index'); // 获取设备列表 + Route::get(':id', 'app\cunkebao\controller\device\GetDeviceDetailV1Controller@index'); // 获取设备详情 + Route::post('', 'app\cunkebao\controller\device\PostAddDeviceV1Controller@index'); // 添加设备 + Route::put('refresh', 'app\cunkebao\controller\device\RefreshDeviceDetailV1Controller@index'); // 刷新设备状态 + Route::delete(':id', 'app\cunkebao\controller\Device@delete'); // 删除设备 + 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::get('friends', 'app\\cunkebao\\controller\\DeviceWechat@getFriends'); // 获取微信好友列表 - Route::get('count', 'app\\cunkebao\\controller\\DeviceWechat@count'); // 获取在线微信账号数量 - Route::get('device-count', 'app\\cunkebao\\controller\\DeviceWechat@deviceCount'); // 获取有登录微信的设备数量 - Route::get('', 'app\\cunkebao\\controller\\DeviceWechat@index'); // 获取在线微信账号列表 - Route::get(':id', 'app\\cunkebao\\controller\\DeviceWechat@detail'); // 获取微信号详情 - Route::put('refresh', 'app\\cunkebao\\controller\\DeviceWechat@refresh'); // 刷新设备微信状态 - Route::post('transfer-friends', 'app\\cunkebao\\controller\\DeviceWechat@transferFriends'); // 微信好友转移 + Route::get('friends', 'app\cunkebao\controller\DeviceWechat@getFriends'); // 获取微信好友列表 + Route::get('count', 'app\cunkebao\controller\DeviceWechat@count'); // 获取在线微信账号数量 + Route::get('device-count', 'app\cunkebao\controller\DeviceWechat@deviceCount'); // 获取有登录微信的设备数量 + Route::get('', 'app\cunkebao\controller\DeviceWechat@index'); // 获取在线微信账号列表 + Route::get(':id', 'app\cunkebao\controller\DeviceWechat@detail'); // 获取微信号详情 + Route::put('refresh', 'app\cunkebao\controller\DeviceWechat@refresh'); // 刷新设备微信状态 + Route::post('transfer-friends', 'app\cunkebao\controller\DeviceWechat@transferFriends'); // 微信好友转移 }); // 获客场景相关 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::get('', 'app\\cunkebao\\controller\\TrafficTag@index'); // 获取标签列表 + Route::get('', 'app\cunkebao\controller\TrafficTag@index'); // 获取标签列表 }); // 流量池相关 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::post('create', 'app\\cunkebao\\controller\\WorkbenchController@create'); // 创建工作台 - Route::get('list', 'app\\cunkebao\\controller\\WorkbenchController@getList'); // 获取工作台列表 - Route::post('update-status', 'app\\cunkebao\\controller\\WorkbenchController@updateStatus'); // 更新工作台状态 - Route::delete('delete', 'app\\cunkebao\\controller\\WorkbenchController@delete'); // 删除工作台 - Route::post('copy', 'app\\cunkebao\\controller\\WorkbenchController@copy'); // 拷贝工作台 - Route::get('detail', 'app\\cunkebao\\controller\\WorkbenchController@detail'); // 获取工作台详情 - Route::post('update', 'app\\cunkebao\\controller\\WorkbenchController@update'); // 更新工作台 + Route::post('create', 'app\cunkebao\controller\WorkbenchController@create'); // 创建工作台 + Route::get('list', 'app\cunkebao\controller\WorkbenchController@getList'); // 获取工作台列表 + Route::post('update-status', 'app\cunkebao\controller\WorkbenchController@updateStatus'); // 更新工作台状态 + Route::delete('delete', 'app\cunkebao\controller\WorkbenchController@delete'); // 删除工作台 + Route::post('copy', 'app\cunkebao\controller\WorkbenchController@copy'); // 拷贝工作台 + Route::get('detail', 'app\cunkebao\controller\WorkbenchController@detail'); // 获取工作台详情 + Route::post('update', 'app\cunkebao\controller\WorkbenchController@update'); // 更新工作台 }); // 内容库相关 Route::group('content/library', function () { - Route::post('create', 'app\\cunkebao\\controller\\ContentLibraryController@create'); // 创建内容库 - Route::get('list', 'app\\cunkebao\\controller\\ContentLibraryController@getList'); // 获取内容库列表 - Route::post('update', 'app\\cunkebao\\controller\\ContentLibraryController@update'); // 更新内容库 - Route::delete('delete', 'app\\cunkebao\\controller\\ContentLibraryController@delete'); // 删除内容库 - Route::get('detail', 'app\\cunkebao\\controller\\ContentLibraryController@detail'); // 获取内容库详情 - Route::get('collectMoments', 'app\\cunkebao\\controller\\ContentLibraryController@collectMoments'); // 采集朋友圈 + Route::post('create', 'app\cunkebao\controller\ContentLibraryController@create'); // 创建内容库 + Route::get('list', 'app\cunkebao\controller\ContentLibraryController@getList'); // 获取内容库列表 + Route::post('update', 'app\cunkebao\controller\ContentLibraryController@update'); // 更新内容库 + Route::delete('delete', 'app\cunkebao\controller\ContentLibraryController@delete'); // 删除内容库 + Route::get('detail', 'app\cunkebao\controller\ContentLibraryController@detail'); // 获取内容库详情 + Route::get('collectMoments', 'app\cunkebao\controller\ContentLibraryController@collectMoments'); // 采集朋友圈 }); // 好友相关 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::get('', 'app\\cunkebao\\controller\\chatroom\\GetChatroomListV1Controller@index'); // 获取群列表 - Route::get('getMemberList', 'app\\cunkebao\\controller\\chatroom\\GetChatroomListV1Controller@getMemberList'); // 获取群详情 + Route::get('', 'app\cunkebao\controller\chatroom\GetChatroomListV1Controller@index'); // 获取群列表 + Route::get('getMemberList', 'app\cunkebao\controller\chatroom\GetChatroomListV1Controller@getMemberList'); // 获取群详情 }); diff --git a/Server/application/cunkebao/controller/device/GetAddResultedDevicesController.php b/Server/application/cunkebao/controller/device/GetAddResultedDevicesController.php new file mode 100644 index 00000000..6a5e23a9 --- /dev/null +++ b/Server/application/cunkebao/controller/device/GetAddResultedDevicesController.php @@ -0,0 +1,120 @@ +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 + ] + ); + } +} \ No newline at end of file