基于 Go 的脚本平台 APP 云控系统

基于 Go 的脚本通用云控系统

系统简介

这是一个用 Go 语言开发的云控管理系统,专为获客场景和矩阵机房的脚本平台 APP 集中管理而生。它的核心功能是通过网络远程控制设备,实现获客脚本的批量下发、执行状态监控、账号管理等操作,让获客和矩阵机房的管理变得简单高效。

B站有演示视频,可以搜博主的昵称.

核心优势:适配获客和矩阵机房需求

1. 轻量部署,即开即用

后端编译示例

bash 复制代码
# 编译 Linux 版本
$ env GOOS=linux GOARCH=amd64 go build -o cloudcontrol-linux cloudcontrol.go business_auth.go

# 编译 Windows 版本
$ go build -o cloudcontrol.exe cloudcontrol.go business_auth.go

启动服务

bash 复制代码
# Linux 下启动
$ ./cloudcontrol-linux -f etc/cloudcontrol.yaml

# Windows 下启动
$ ./cloudcontrol.exe -f etc/cloudcontrol.yaml

特点:矩阵机房通常空间有限,系统轻量部署的特性使其可以在普通服务器甚至工控机上运行,无需占用过多资源。

2. 跨平台支持

系统采用 Go 语言开发,天然支持跨平台编译,可轻松部署到矩阵机房的 Windows 或 Linux 服务器上。前端使用 Vue.js,界面响应式,在任何设备上都能完美显示,方便机房管理人员随时随地监控设备状态。

3. 批量操作,高效管理

前端:设备分组选择

vue 复制代码
<!-- TaskList.vue -->
<el-select v-model="taskForm.device_group_ids" placeholder="请选择设备分组" multiple clearable>
  <!-- 全选功能 -->
  <el-option v-if="groupList.length > 0" label="全选" :value="'all'" />
  <!-- 分组列表 -->
  <el-option
    v-for="group in groupList"
    :key="group.id"
    :label="group.name"
    :value="group.id"
  />
</el-select>

后端:任务下发逻辑

go 复制代码
// start_task_logic.go
func (l *StartTaskLogic) StartTask() (resp *types.BaseResponse, err error) {
    // ... 省略部分代码 ...
    
    // 循环处理多个设备分组
    for _, deviceGroupID := range deviceGroupIDs {
        var devices []model.Device
        if err := db.Where("group_id = ?", deviceGroupID).Find(&devices).Error; err == nil {
         
        }
    }
    
    // ... 省略部分代码 ...
}

特点:矩阵机房通常有数百甚至数千台设备,系统支持"全选"设备分组的功能,可一键下发获客脚本到所有设备,极大提高管理效率。

易用性设计

1. 直观的前端界面

任务创建表单

vue 复制代码
<!-- TaskList.vue -->
<el-form ref="taskFormRef" :model="taskForm" :rules="rules">
  <el-form-item label="任务名称" prop="name">
    <el-input v-model="taskForm.name" placeholder="请输入任务名称" />
  </el-form-item>
  <el-form-item label="脚本选择" prop="script_id">
    <el-select v-model="taskForm.script_id" placeholder="请选择脚本">
      <el-option
        v-for="script in scriptList"
        :key="script.id"
        :label="script.name"
        :value="script.id"
      />
    </el-select>
  </el-form-item>
  <el-form-item label="设备分组" prop="device_group_ids">
    <el-select v-model="taskForm.device_group_ids" placeholder="请选择设备分组" multiple clearable>
      <el-option v-if="groupList.length > 0" label="全选" :value="'all'" />
      <el-option
        v-for="group in groupList"
        :key="group.id"
        :label="group.name"
        :value="group.id"
      />
    </el-select>
  </el-form-item>
  <el-form-item label="执行模式" prop="execution_mode">
    <el-radio-group v-model="taskForm.execution_mode">
      <el-radio label="immediate">立即执行</el-radio>
      <el-radio label="scheduled">定时执行</el-radio>
    </el-radio-group>
  </el-form-item>
</el-form>

特点:表单设计简洁明了,支持"全选"设备分组,适合矩阵机房的规模化操作。获客脚本选择直观,执行模式一键切换,操作流程符合机房管理的高效率需求。

2. 实时反馈,状态透明

WebSocket 设备通知

go 复制代码
// websocket/manager.go
func (manager *Manager) SendCancelToDevice(deviceID uint, taskID uint) error {
    message := map[string]interface{}{
        "type": "task_cancel",
        "data": map[string]interface{}{
            "task_id": taskID,
            "status":  "cancelled",
        },
    }
    // 发送通知到设备
    return manager.sendToDevice(deviceID, message)
}

特点:矩阵机房设备众多,实时反馈功能让管理员随时掌握每台设备的获客脚本执行状态,及时发现并处理异常,确保获客流程的连续性。

3. 智能缓存,流畅体验

Redis 缓存优化

go 复制代码
// start_task_logic.go
// 记录任务下发状态
redisKey := fmt.Sprintf("task_dispatch:%d:%d", taskID, device.ID)
if err := l.svcCtx.Redis.Set(context.Background(), redisKey, "pending", 5*time.Minute).Err(); err != nil {
    logx.Errorf("设置任务下发Redis记录失败: %v", err)
} else {
    logx.Infof("设置任务下发Redis记录: key=%s, TTL=5分钟", redisKey)
}

特点:矩阵机房通常有大量设备,智能缓存功能确保即使管理上千台设备,界面操作依然流畅,无卡顿,适合长时间的批量操作。

实际应用场景

场景一:获客脚本批量更新

操作流程

  1. 在前端上传新版本获客脚本(如社交媒体引流脚本、客户数据采集脚本等)
  2. 选择需要更新的设备分组(支持"全选"所有获客设备)
  3. 创建"更新脚本"任务,选择新版本获客脚本
  4. 点击"启动任务",系统自动下发到所有设备
  5. 实时查看每个设备的更新状态,确保所有设备使用相同版本的获客脚本

优势:矩阵机房设备众多,批量更新功能可节省 90% 以上的时间,确保所有获客设备使用统一的脚本版本,避免账号异常。

场景二:获客任务定时执行

操作流程

  1. 创建"获客"任务,选择对应的获客脚本
  2. 设置执行时间(如每天早上 8 点开始执行)
  3. 选择目标设备分组
  4. 系统到指定时间自动执行获客任务
  5. 查看执行结果和获客数据

优势:获客效果与执行时间密切相关,定时执行功能可确保脚本在最佳时间运行,提高获客效率。

场景三:账号分组管理

操作流程

  1. 根据账号类型(如社交媒体账号、电商平台账号等)创建设备分组
  2. 为不同分组下发对应的获客脚本
  3. 监控不同账号组的获客效果
  4. 根据效果调整脚本策略

优势:获客通常涉及多种账号类型,分组管理功能可实现精细化运营,提高不同类型账号的获客效果。

代码设计:简洁与高效

1. 前端:全选功能实现

vue 复制代码
// TaskList.vue
const handleGroupSelectChange = (value) => {
  if (value && value.includes('all')) {
    // 全选所有设备分组
    const allGroupIds = groupList.value.map(group => group.id)
    taskForm.device_group_ids = allGroupIds
  }
}

特点:支持一键全选设备分组,适合矩阵机房的规模化操作,简化批量下发获客脚本的步骤。

2. 后端:任务启动核心逻辑

go 复制代码
// start_task_logic.go
func (l *StartTaskLogic) StartTask() (resp *types.BaseResponse, err error) {
    // 1. 获取任务信息
    var task model.Task
    if err := db.First(&task, taskID).Error; err != nil {
        return &types.BaseResponse{Code: 404, Message: "任务不存在"}, nil
    }

    // 2. 解析设备分组ID(支持多个分组)
    var deviceGroupIDs []uint
    if err := json.Unmarshal([]byte(task.DeviceGroupIDs), &deviceGroupIDs); err != nil {
        return &types.BaseResponse{Code: 500, Message: "解析设备分组ID失败"}, nil
    }

    // 3. 循环处理每个设备分组
    for _, deviceGroupID := range deviceGroupIDs {
      
    }

    // 6. 更新任务状态
    task.Status = "running"
    task.StartTime = &now
    if err := tx.Save(&task).Error; err != nil {
        return &types.BaseResponse{Code: 500, Message: "启动任务失败"}, nil
    }

    return &types.BaseResponse{Code: 200, Message: "启动任务成功"}, nil
}

特点:支持多个设备分组的循环处理,为每个脚本平台 APP 创建执行记录,确保获客任务下发的可靠性,适合矩阵机房的规模化操作。

结束语

这个基于 Go 的云控系统,专为获客场景和矩阵机房的设备 管理设计,通过简洁的设计和高效的实现,完美适配规模化获客操作的需求。它不仅功能强大,而且操作简单,让矩阵机房的管理变得前所未有的轻松。

核心优势

  • 轻量便携:适合矩阵机房的有限空间和资源
  • 批量操作:一键全选,批量下发获客脚本
  • 实时反馈:设备执行状态实时更新,及时发现异常
  • 流畅体验:智能缓存,支持管理上千台设备
  • 安全可靠:多层加密保护,保障获客账号安全

无论是小型获客团队还是大型矩阵机房,这个系统都能为你节省大量时间和精力,让获客操作变得更加高效和可控。

后期计划

    • rust重构 单服务端5W+设备管理!
相关推荐
rannn_1111 小时前
【苍穹外卖|Day7】缓存菜品、缓存套餐、添加购物车、查看购物车、清空购物车
java·spring boot·redis·后端·缓存·项目
hewence11 小时前
Kotlin CoroutineScope解密
android·开发语言·kotlin
BingoGo1 小时前
“Fatal error: require(): Failed opening required...” 以及如何彻底避免它再次出现
后端·php
咩图1 小时前
VSCode+Python创建项目
开发语言·python
zhanglu51161 小时前
Java Lambda 表达式使用深度解析
开发语言·前端·python
zhougl9961 小时前
Springboot - druid 连接池
java·spring boot·后端
Coding茶水间1 小时前
基于深度学习的车牌识别系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·机器学习
JaguarJack2 小时前
“Fatal error: require(): Failed opening required...” 以及如何彻底避免它再次出现
后端·php·服务端
MX_93592 小时前
Spring基本配置和注入配置注解使用
java·后端·spring