微搭低代码MBA培训管理系统14——搭建公海池

目录

  • 前情回顾与本节目标
  • [第 1 步:核心数据模型重构](#第 1 步:核心数据模型重构)
    • [1.1 客户表 (MBA_Customers)](#1.1 客户表 (MBA_Customers))
  • [第 2 步:搭建公海池管理页面](#第 2 步:搭建公海池管理页面)
    • [2.1 创建公海池页面](#2.1 创建公海池页面)
    • [2.2 配置页面布局](#2.2 配置页面布局)
    • [2.3 添加数据表格](#2.3 添加数据表格)
    • [2.4 配置筛选条件](#2.4 配置筛选条件)
    • [2.5 配置菜单](#2.5 配置菜单)
  • [第 3 步:捞取功能实现](#第 3 步:捞取功能实现)
  • [第 4 步:极简自动回收引擎(云函数)](#第 4 步:极简自动回收引擎(云函数))
    • [4.1 全局配置表(MBA_GlobalConfig)](#4.1 全局配置表(MBA_GlobalConfig))
    • [4.2 云函数配置](#4.2 云函数配置)
    • [4.3 云函数逻辑实现](#4.3 云函数逻辑实现)
  • 总结

前情回顾与本节目标

在上一讲中,我们完成了跟进管理功能的开发,实现了销售人员对客户跟进记录的完整管理。销售人员可以录入跟进记录,系统会自动更新客户的跟进状态、最后跟进时间等信息。

然而,在实际业务中,我们面临一个关键问题:如何科学地管理客户资源的流转?销售领取线索后如果不及时跟进,资源就会被浪费;新入职的销售没有客户资源,而老销售却霸占着大量不跟进的客户。

传统的做法是通过组合判断 owner_id 是否为空、分配状态是否为特定值来"推导"客户是否在公海,这种设计让代码变得臃肿且难以维护。

在本节教程中,我们将采用极简设计思想:状态显性化 + 保护机制解耦 ,通过引入显式的 sea_status 字段,用最少的字段解决最复杂的问题。

本节核心目标:

  1. 极简数据模型重构 :引入显式的 sea_status 字段和 is_protected 豁免保护开关。
  2. 一行代码前端查询:实现极简、高性能的公海池客户捞取功能。
  3. 极简自动回收引擎:利用微搭云函数 + 全局配置,实现无情、高效的资源流转。

第 1 步:核心数据模型重构

极简设计的第一步,是将复杂的推导逻辑直接变成数据表中的显性状态字段。

1.1 客户表 (MBA_Customers)

我们在微搭控制台找到 MBA_Customers 客户表,对其进行"瘦身"和"升级":

字段名称 字段标识 数据类型 说明 / 极简理念
资源归属状态 sea_status 枚举 核心 :仅限 待分配私海公海 三个明确状态。告别复杂条件组合!
负责人 owner_id 关联关系 关联销售人员。(sea_status为'公海'或'待分配'时此字段为空)
最后跟进时间 last_contact 日期时间 每次写跟进记录时自动更新,重新开始计算回收倒计时。
豁免回收保护 is_protected 布尔值 解耦利器:开启后,无论多久不跟进,都不会掉入公海。替代原有的各种业务状态判断(如'高价值'、'已成单')。

第 2 步:搭建公海池管理页面

2.1 创建公海池页面

点击创建页面,输入"公海池",选择销售布局。

2.2 配置页面布局

切换到页面设计,添加布局组件,修改标题为"公海池"。

2.3 添加数据表格

添加数据表格组件,绑定客户表数据模型:

将操作列的按钮改为认领

2.4 配置筛选条件

配置表格的筛选条件,只显示 sea_status 为"公海"的客户:

2.5 配置菜单

切换到布局设计,添加公海池菜单:

第 3 步:捞取功能实现

表格操作列添加"认领"按钮,绑定如下自定义方法,将当前销售的 ID 写入客户表,并更新状态。

javascript 复制代码
export default async function claimCustomer({ event, data }) {
  const customerId = data.target._id;

  $w.utils.showModal({
    title: '确认抢单',
    content: `确定要将客户【${data.target.name}】捞入您的私海吗?`,
    success: async (res) => {
      if (res.confirm) {
        try {
          await $w.utils.showLoading({ title: '认领中...' });
          const currentUser = $w.app.dataset.state.currentUser;
          
          await $w.cloud.callDataSource({
            dataSourceName: 'MBA_Customers',
            methodName: 'wedaUpdateV2',
            params: {
              filter: { where: { _id: { $eq: customerId } } },
              data: {
                // 【极简逻辑】认领时,只需更新三个核心字段
                sea_status: '2',              // 1. 明确状态变更为私海
                owner_id: {_id:currentUser._id},     // 2. 绑定归属人
                last_contact: Date.now()   // 3. 重置最后跟进时间,重新开始计算回收倒计时
              }
            }
          });

          $w.utils.showToast({ title: '认领成功,请及时跟进!', icon: 'success' });
          $w.table1.refresh(); // 刷新表格
        } finally {
          $w.utils.hideLoading();
        }
      }
    }
  });
}

给认领按钮设置点击事件,调用我们的方法,传入所在行数据


第 4 步:极简自动回收引擎(云函数)

这是极简设计的精华所在。云函数不再需要判断什么是"学员"、什么是"高价值客户",它变成了一个纯粹、高效的"无情清道夫"。

4.1 全局配置表(MBA_GlobalConfig)

字段名称 字段标识 数据类型 说明
配置名称 config_name 单行文本 如:公海回收天数配置
回收天数 public_sea_recycle_days 数字 超过此天数未跟进自动回收
是否启用 is_active 布尔值 启用/禁用该配置

4.2 云函数配置

在微搭控制台找到"云函数/托管 ",新建云函数命名为 dynamicPublicSeaRecycle

首先配置 package.json 文件:

json 复制代码
{
  "name": "dynamic-public-sea-recycle",
  "version": "1.0.0",
  "description": "公海池自动回收云函数",
  "license": "ISC",
  "type": "commonjs",
  "main": "index.js",
  "dependencies": {
    "@cloudbase/node-sdk": "^3.0.0"
  }
}

配置好了点击保存并安装依赖

依赖说明@cloudbase/node-sdk 是腾讯云开发的 Node.js SDK,用于云函数中访问云开发资源。

4.3 云函数逻辑实现

创建 index.js 文件,编写回收逻辑:

javascript 复制代码
'use strict';
const cloudbase = require("@cloudbase/node-sdk");
const app = cloudbase.init({
    env: "lowcode-***", 
    region: "ap-shanghai",
  });
const models = app.models;

exports.main = async (event, context) => {
    let totalRecycled = 0;

    try {
        // 1. 获取全局回收天数(实际业务应从 MBA_GlobalConfig 表读取,这里假设设为 7 天)
        const recycle_days = 7;
        const cutoffTime = Date.now() - (recycle_days * 24 * 60 * 60 * 1000);

        // 2. 极简查询逻辑:找出命中回收规则、超时未跟进的客户
        const { data: customersToRecycle } = await models.MBA_Customers.list({
            filter: {
                where: {
                    $and: [
                        // 条件1:当前归属于某个销售的私海
                        { sea_status: { $eq: '2' } },
                        // 条件2:解耦利器,未开启豁免保护(不论是签约学员还是高价值,未开启保护即参与回收)
                        { is_protected: { $neq: true } },
                        // 条件3:超时判定,最后跟进时间早于阈值
                        { last_contact: { $lt: cutoffTime } }
                    ]
                }
            },
            select: { _id: true }
        });

        const customerIds = customersToRecycle.records.map(c => c._id);

        // 3. 执行批量踢入公海
        if (customerIds.length > 0) {
            await models.MBA_Customers.updateMany({
                filter: { where: { _id: { $in: customerIds } } },
                data: {
                    sea_status: '3',  // 状态改为公海
                    owner_id: null       // 清空负责人
                }
            });
            console.log(`极简自动回收引擎执行完毕:根据全局 ${recycle_days} 天未跟进规则,成功回收了 ${customerIds.length} 条线索入公海。`);
            totalRecycled = customerIds.length;
        }

        return { success: true, totalRecycled };

    } catch (e) {
        console.error('公海动态回收引擎执行异常:', e);
        return { success: false, error: e.message };
    }
};

配置定时触发器

每天凌晨 2 点执行一次(Cron 表达式:0 0 2 * * * *)。


总结

本节教程我们彻底打通了基于极简架构的 MBA 培训系统公海池模块的业务闭环。

这套设计的核心优势在于:

  1. 绝对清晰的边界 :任何角色一看 sea_status: '公海' 就秒懂其含义,不需要去推导和猜测。
  2. 极强的扩展性 :业务部门说要搞个"展会VIP客户不掉落"的活动。你不需要改云函数代码 ,只需要在录入展会客户时,默认把 is_protected 设为 true 即可。系统高度解耦。
  3. 性能更优 :数据库索引只需要打在 sea_statusis_protectedlast_follow_time 上,查询速度比多重嵌套逻辑快得多。

公海池系统不仅是个技术模块,更是企业提升线索转化率、消除霸单/死单的"鲶鱼效应"引擎。希望你可以尝试并从中获益!

下一步,我们将继续完善 CRM 系统的销售管理功能,实现客户分配、销售报表等模块,构建完整的 CRM 销售管理体系。

相关推荐
搭贝2 小时前
河南爱彼爱和新材料 | 打造低成本高敏捷数字化转型的“河南标杆“
大数据·低代码·制造业
低代码布道师1 天前
微搭低代码MBA培训管理系统14——线索跟进
低代码
IT研究所1 天前
从工单到智能分析:AIGC运维助手应用价值
大数据·运维·数据库·人工智能·科技·低代码·自动化
液态不合群1 天前
Java低代码平台工作流引擎设计与实现:从人工审批到智能自动化
java·低代码·状态模式·工作流
码上解惑1 天前
基于 Spring AI Alibaba ReactAgent 辅助低代码表单设计的实现原理与实操步骤
人工智能·spring·低代码·ai
阴阳怪气乌托邦2 天前
请注意!AI低代码正在干掉传统开发
人工智能·低代码·工作流引擎
决斗小饼干2 天前
还在硬编码决策逻辑?JNPF决策流正在干掉大批“手工审批”
低代码·工作流引擎
麦聪聊数据2 天前
SQL2API 网关的透明缓存与请求合并机制
数据库·sql·低代码·微服务
JEECG低代码平台2 天前
JeecgBoot低代码平台作为 Qiankun 子应用接入指南
低代码