×
微信咨询
微信二维码

长按图片识别添加或保存到相册

首页 > 学习中心 > 公司发布 > 产品动态

产品服务 帮助文档

文章目录

    来团EPR - 招商系统开发方案文档

    最近和一个朋友要合作一个新项目,需要开发一个招商系统,因为我们来团EPR系统新增招商系统,基于ThinkPHP8与LT-ERP框架开发,实现电话线索的投放、套餐、合作公司及客户自助领取一体化管理,涵盖数据进池、匹配投放、客户领取、扣费与充值核心闭环。

    基于 ThinkPHP8 多应用模式 + LT-ERP框架 + Layui 前端
    版本:V1.0 编制日期:2026-09-24
    定位:招商数据(电话线索)的投放、套餐、合作公司与客户自助领取的一体化管理应用


    一、项目背景与目标

    公司将招商获取的电话线索(姓名、电话、品牌、地区等)作为数据产品,投放给合作公司客户使用。需要:

    1. 复用现有客户应用(customer)的客户档案 ,招商系统只维护合作公司的扩展信息,不重复建档。
    2. 合作公司关联客户、绑定套餐并设置提取额度后,可登录客户门户领取投放数据。
    3. 支持两种投放模式: 系统后台分配 (含自动推送)与 客户自己领取 (公共池抢占)。
    4. 以套餐预存 + 按条计费方式结算,提供账户余额、财务流水、充值赠送等账务能力。

    建设目标:一期打通"数据进池 → 匹配投放 → 客户领取 → 扣费 → 充值"核心闭环;二期补充看板分析与采集、支付对接。


    二、需求概述(对应界面)

    端 模块 功能点
    内部后台 电话数据管理 招商数据列表,按时间、顶级分类、子级分类、所属分类、品牌筛选;字段含姓名、电话、所属分类、品牌名称、所属地区、备注、来源站点、入口来源、IP地址、推送时间
    内部后台 合作方案套餐 合作套餐管理:套餐方案、套餐类别(名称)、数据单价、合作周期、日推送数
    内部后台 合作公司管理 合作公司列表、信息修改弹窗;数据领取记录、数据赠送记录、充值赠送记录
    客户门户 客户数据管理 客户数据领取(脱敏号码 + 提取按钮)、我的客户数据、我的品牌数据
    客户门户 账户认证授权 登录账户信息、登录认证授权(子账号)、财务收支明细

    合作公司信息弹窗字段:公司名称、对接人员、公司地址、公司官网、联系电话、旗下品牌、业务经理、自动推送、客户单价、提取限额、行业分配(顶级)、所属子类、套餐分类、套餐详情、关联行业、排除行业。


    三、关键决策记录

    决策项 结论
    合作公司账号体系 复用lterp_admin系统账号 ,新增"合作客户"岗位 + 客户门户权限组,仅授予门户菜单
    套餐与计费关系 套餐即预存,领完即止 :套餐价全额计入账户余额,客户每提取一条按数据单价扣余额,不另设套餐资格费
    领取流程 两段式 :数据先进入客户"待提取"池(显示脱敏号码),客户点"提取"才扣余额并看到完整号码
    数据归属 非独占,可配置最高领取次数 :每条数据有max_claim(如 2),即最多被 2 个公司领取;领取计数达上限后自动出池、不可再分配
    退单/撤回 任何阶段都不可撤回 :数据进入公司名下(含待提取)即占用名额,不支持管理员收回;提取后不支持退单退款
    数据来源 一期支持 Excel 批量导入 ,同时 预留 API/采集对接接口 (保留来源站点、入口来源、IP 字段)
    账号粒度 主账号 + 多个子账号 :子账号由主账号在门户开通,同公司数据共享
    一期范围 先做核心闭环,数据汇总/业务分析看板放二期

    四、总体设计

    4.1 应用组织方式

    新建独立应用 zhaoshang(招商系统) ,业务表统一使用前缀 lterp_zs_。内部后台与客户门户同属一个应用:

    • 内部控制器:app/zhaoshang/controller/
    • 门户控制器:app/zhaoshang/controller/portal/(URL:zhaoshang/portal.控制器/动作)

    两类控制器对应两批权限节点(lterp_admin_rule),通过权限组隔离。框架按 应用/控制器/方法 逐路径鉴权,客户角色拿不到内部节点,直接输入内部 URL 同样被拒绝。

    选型理由:完整复用登录、权限、菜单、导入、日志、定时任务等框架能力;菜单与 URL 天然隔离;不侵入现有 customer 应用,降低与官方版本更新冲突的风险。

    4.2 应用目录结构

    app/zhaoshang/
    ├── controller/                  # 内部后台
    │   ├── Cate.php                 # 招商行业分类(两级)
    │   ├── PackageCate.php          # 套餐方案
    │   ├── Package.php              # 合作套餐
    │   ├── Company.php              # 合作公司(含领取/赠送记录)
    │   ├── Data.php                 # 招商数据池(含导入、后台分配)
    │   ├── Recharge.php             # 充值赠送
    │   ├── Api.php                  # 预留采集对接接口(token 鉴权)
    │   └── portal/                  # 客户门户
    │       ├── Lead.php             # 客户数据领取
    │       ├── Mine.php             # 我的客户数据 / 我的品牌数据
    │       ├── Account.php          # 账户信息 / 财务收支明细
    │       └── Auth.php             # 子账号授权
    ├── model/
    ├── validate/
    ├── view/
    ├── command/
    │   └── ZsPush.php               # 自动推送定时任务(zs:push)
    ├── common.php
    ├── event.php
    └── middleware.php
    

    4.3 系统流转总览

    Excel导入 / API采集
           │
           ▼
     lterp_zs_data 数据池(在池,可领次数 max_claim)
           │
       ┌───┼───────────────┬──────────────────┐
       ▼   ▼               ▼                  ▼
    自动推送         后台分配            客户公共池自领
    (定时任务)       (管理员)            (门户抢占)
       └───┴───────┬──────────────────┘
                   ▼
          lterp_zs_claim(待提取,号码脱敏,进入即占用名额)
                   │ 点"提取":校验余额/日限额/合作期
                   ▼
            已提取:扣余额、写财务流水、展示完整号码(终态,不可撤回)
    

    五、角色与账号体系

    5.1 账号改造

    lterp_admin 增加两列(完整 DDL 见 6.9):

    字段 说明
    company_id 绑定的合作公司 ID(关联lterp_zs_company.id),0 = 内部员工
    is_main 是否合作公司主账号:0 否,1 是

    5.2 岗位与权限组初始化

    1. 在 lterp_position 新建岗位 "合作客户" 。
    2. 在 lterp_admin_group 新建权限分组 "客户门户组" ,rules 只勾选门户权限节点。
    3. 在 lterp_position_group 建立关联:岗位"合作客户" → 组"客户门户组"。
    4. 开通公司时创建主账号(position_id=合作客户岗位,company_id=公司 ID,is_main=1)。
    5. 主账号在门户"登录认证授权"中开通/停用子账号;子账号与主账号同 company_id、同岗位。

    5.3 数据隔离规则

    • 门户所有列表/详情查询强制带 where company_id = 当前账号 company_id。
    • 门户控制器统一通过 lterp_admin.company_id 获取当前公司,不接受前端传入的 company_id。
    • 子账号的写操作(提取、子账号管理按主账号权限控制)计入公司账,数据公司内共享。

    六、数据库设计

    共新增 8 张表 ,改造 1 张表 。时间字段统一 bigint(11) 时间戳,金额统一 decimal,引擎 InnoDB、字符集 utf8mb4。

    6.1 lterp_zs_cate 招商行业分类(两级树)

    CREATE TABLE `lterp_zs_cate` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `pid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '父级ID,0为顶级分类',
      `title` varchar(100) NOT NULL DEFAULT '' COMMENT '分类名称:顶级如餐饮美食,子级如快餐',
      `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序,越小越靠前',
      `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:0禁用 1正常',
      `admin_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建人',
      `create_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
      `update_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
      PRIMARY KEY (`id`) USING BTREE,
      KEY `pid` (`pid`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='招商行业分类表';
    

    6.2 lterp_zs_package_cate 套餐方案

    CREATE TABLE `lterp_zs_package_cate` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `title` varchar(100) NOT NULL DEFAULT '' COMMENT '套餐方案:如维修合作方案、洗车合作方案、通用方案',
      `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
      `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:0禁用 1正常',
      `admin_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建人',
      `create_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
      `update_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='招商套餐方案表';
    

    6.3 lterp_zs_package 合作套餐

    CREATE TABLE `lterp_zs_package` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `cate_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '套餐方案ID',
      `title` varchar(150) NOT NULL DEFAULT '' COMMENT '套餐名称,如:维修(29800套餐)、9800(季度套餐)',
      `price` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '套餐价格(即预存金额,全额计入余额)',
      `data_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '数据单价(元/条)',
      `period_days` int(11) NOT NULL DEFAULT '360' COMMENT '合作周期(天)',
      `daily_push` int(11) NOT NULL DEFAULT '0' COMMENT '日推送数上限(条/天),0不限',
      `daily_extract` int(11) NOT NULL DEFAULT '0' COMMENT '日提取上限(条/天)默认值,0不限',
      `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
      `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:0禁用 1正常',
      `remark` varchar(1000) NOT NULL DEFAULT '' COMMENT '备注',
      `admin_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建人',
      `create_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
      `update_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
      PRIMARY KEY (`id`) USING BTREE,
      KEY `cate_id` (`cate_id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='招商合作套餐表';
    

    6.4 lterp_zs_company 合作公司扩展(核心)

    CREATE TABLE `lterp_zs_company` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `customer_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '关联客户ID(lterp_customer.id)',
      `package_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '绑定套餐ID',
      `name` varchar(255) NOT NULL DEFAULT '' COMMENT '公司名称(冗余客户名称)',
      `contact_person` varchar(50) NOT NULL DEFAULT '' COMMENT '对接人员',
      `contact_mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '联系电话',
      `address` varchar(255) NOT NULL DEFAULT '' COMMENT '公司地址',
      `website` varchar(255) NOT NULL DEFAULT '' COMMENT '公司官网',
      `brands` varchar(500) NOT NULL DEFAULT '' COMMENT '旗下品牌,多个用#分隔',
      `get_mode` tinyint(1) NOT NULL DEFAULT '1' COMMENT '领取模式:1系统分配 2客户自领 3两者都开',
      `auto_push` tinyint(1) NOT NULL DEFAULT '0' COMMENT '自动推送:0否 1是',
      `data_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '客户单价(绑套餐时带出,可单独调整)',
      `daily_extract` int(11) NOT NULL DEFAULT '0' COMMENT '提取限额(条/天),0不限',
      `cate_pids` varchar(500) NOT NULL DEFAULT '' COMMENT '行业分配:顶级分类ID,逗号分隔',
      `cate_ids` varchar(500) NOT NULL DEFAULT '' COMMENT '所属子类ID,逗号分隔',
      `related_keywords` varchar(500) NOT NULL DEFAULT '' COMMENT '关联行业关键词,#分隔,如 母婴#月子#产后',
      `exclude_keywords` varchar(500) NOT NULL DEFAULT '' COMMENT '排除行业关键词,#分隔,最多5个',
      `balance` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '账户余额(套餐预存+充值+赠送-提取)',
      `start_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '合作开始时间',
      `end_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '合作到期时间',
      `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:0停用 1正常 2到期',
      `remark` varchar(1000) NOT NULL DEFAULT '' COMMENT '备注',
      `admin_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '录入人',
      `create_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
      `update_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
      `delete_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
      PRIMARY KEY (`id`) USING BTREE,
      UNIQUE KEY `customer_id` (`customer_id`) USING BTREE,
      KEY `package_id` (`package_id`) USING BTREE,
      KEY `status` (`status`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='招商合作公司扩展表';
    

    列表中"今日获取"= 当日该公司 claim 生成条数;"今日消费"= 当日提取扣费合计,均实时统计,不落字段。

    6.5 lterp_zs_data 招商数据池

    CREATE TABLE `lterp_zs_data` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL DEFAULT '' COMMENT '姓名',
      `mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '电话(库存完整号码,列表展示时脱敏)',
      `cate_pid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '顶级分类ID',
      `cate_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '子级分类ID',
      `brand` varchar(255) NOT NULL DEFAULT '' COMMENT '品牌名称',
      `provinceid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '省份ID',
      `cityid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '城市ID',
      `distid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '区县ID',
      `region` varchar(255) NOT NULL DEFAULT '' COMMENT '所属地区(冗余文本,如 山东-威海市)',
      `remark` varchar(1000) NOT NULL DEFAULT '' COMMENT '备注信息',
      `source_site` varchar(100) NOT NULL DEFAULT '' COMMENT '来源站点',
      `source_entry` varchar(50) NOT NULL DEFAULT '' COMMENT '入口来源,如 百度、头条',
      `ip` varchar(50) NOT NULL DEFAULT '' COMMENT 'IP地址',
      `max_claim` int(11) NOT NULL DEFAULT '1' COMMENT '最高领取次数,默认1即独占',
      `claimed_count` int(11) NOT NULL DEFAULT '0' COMMENT '已被领取次数',
      `import_batch` varchar(50) NOT NULL DEFAULT '' COMMENT '导入批次号',
      `push_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '线索原始推送时间',
      `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1在池可分配 2已领满出池',
      `admin_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '录入人',
      `create_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
      `update_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
      `delete_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
      PRIMARY KEY (`id`) USING BTREE,
      KEY `cate` (`cate_pid`,`cate_id`) USING BTREE,
      KEY `status` (`status`) USING BTREE,
      KEY `mobile` (`mobile`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='招商电话数据池表';
    

    6.6 lterp_zs_claim 领取/分配记录(流转核心)

    CREATE TABLE `lterp_zs_claim` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `data_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '招商数据ID',
      `company_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '合作公司ID',
      `assign_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '进入方式:1自动推送 2后台分配 3公共池自领',
      `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1待提取 2已提取',
      `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '本条扣费单价(生成时快照)',
      `is_gift` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否赠送:0否(扣费)1是(免费)',
      `assign_uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '分配操作人(自动推送为0)',
      `assign_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '进入待领池时间',
      `extract_uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '提取操作账号',
      `extract_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '提取时间',
      `admin_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '记录创建人',
      `create_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
      `update_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
      PRIMARY KEY (`id`) USING BTREE,
      UNIQUE KEY `data_company` (`data_id`,`company_id`) USING BTREE,
      KEY `company_status` (`company_id`,`status`) USING BTREE,
      KEY `data_id` (`data_id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='招商数据领取分配记录表';
    

    6.7 lterp_zs_recharge 充值/赠送登记

    CREATE TABLE `lterp_zs_recharge` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `company_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '合作公司ID',
      `amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '充值金额',
      `gift_amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '赠送金额',
      `pay_type` varchar(50) NOT NULL DEFAULT '' COMMENT '付款方式',
      `pay_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '到账时间',
      `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:0作废 1有效',
      `remark` varchar(1000) NOT NULL DEFAULT '' COMMENT '备注',
      `admin_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '经办人',
      `create_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
      `update_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
      PRIMARY KEY (`id`) USING BTREE,
      KEY `company_id` (`company_id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='招商客户充值赠送登记表';
    

    6.8 lterp_zs_finance_log 财务流水

    CREATE TABLE `lterp_zs_finance_log` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `company_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '合作公司ID',
      `company_name` varchar(255) NOT NULL DEFAULT '' COMMENT '公司名称(快照)',
      `event_type` varchar(30) NOT NULL DEFAULT '' COMMENT '事件类型:package套餐预存/data_extract数据提取/recharge充值/recharge_gift充值赠送/data_gift数据赠送',
      `event_desc` varchar(255) NOT NULL DEFAULT '' COMMENT '事件详细,如:数据提取扣¥30',
      `amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '本次发生额:正数入账,负数扣减',
      `balance` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '变动后账户余额',
      `operate_name` varchar(100) NOT NULL DEFAULT '' COMMENT '操作用户名称',
      `admin_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '操作人ID',
      `create_time` bigint(11) NOT NULL DEFAULT '0' COMMENT '变更时间',
      PRIMARY KEY (`id`) USING BTREE,
      KEY `company_id` (`company_id`) USING BTREE,
      KEY `event_type` (`event_type`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='招商客户财务流水表';
    

    6.9 改造管理员表

    ALTER TABLE `lterp_admin`
      ADD COLUMN `company_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '绑定合作公司ID,0为内部员工' AFTER `position_id`,
      ADD COLUMN `is_main` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否合作公司主账号:0否 1是' AFTER `company_id`;
    

    6.10 财务事件与余额变动对照

    event_type 触发时机 amount
    package 绑定套餐,套餐价预存 +套餐价
    data_extract 客户点"提取" −单价
    recharge 充值登记 +充值额
    recharge_gift 充值含赠送 +赠送额
    data_gift 后台赠送数据(is_gift=1) 0(仅记录,不扣费)

    七、权限节点与菜单初始化

    在后台"系统管理 → 功能节点"中新增(module 均为 zhaoshang),或通过节点插入 SQL 完成。menu=1 为菜单,menu=2 为权限节点。

    顶层分组两种挂法均可:挂一个"招商系统"父节点统一收纳;或参照截图,将"电话数据管理 / 合作方案套餐 / 合作公司管理"分别注册为 pid=0 的顶级分组。下表按统一父节点描述,实际以截图的多顶级分组为准。

    7.1 内部后台节点

    层级 名称 src menu
    1 招商系统 (空) 1
    2 电话数据管理 (空) 1
    3 电话数据列表 zhaoshang/data/datalist 1
    3 新建/编辑 zhaoshang/data/add 2
    3 删除 zhaoshang/data/del 2
    3 Excel导入 zhaoshang/data/import 2
    3 后台分配 zhaoshang/data/assign 2
    2 合作方案套餐 (空) 1
    3 套餐方案 zhaoshang/package_cate/datalist 2
    3 合作套餐管理 zhaoshang/package/datalist 1
    3 新建/编辑/删除 zhaoshang/package/add、del 2
    2 合作公司管理 (空) 1
    3 合作公司列表 zhaoshang/company/datalist 1
    3 新建/编辑 zhaoshang/company/add 2
    3 数据领取记录 zhaoshang/company/claims 1
    3 数据赠送记录/赠送 zhaoshang/company/gifts、gift_add 1 / 2
    3 充值赠送记录/充值 zhaoshang/recharge/datalist、add 1 / 2

    7.2 客户门户节点(组成"客户门户组"的 rules)

    层级 名称 src menu
    1 数据信息汇总 zhaoshang/portal.lead/board 1(二期落地,一期可隐藏)
    1 客户数据管理 (空) 1
    2 客户数据领取 zhaoshang/portal.lead/datalist 1
    2 提取 zhaoshang/portal.lead/extract 2
    2 公共池领取(抢占) zhaoshang/portal.lead/self_get 2
    2 我的客户数据 zhaoshang/portal.mine/data 1
    2 我的品牌数据 zhaoshang/portal.mine/brand 1
    1 账户认证授权 (空) 1
    2 登录账户信息 zhaoshang/portal.account/info 1
    2 登录认证授权(子账号) zhaoshang/portal.auth/datalist、add、set、del 1 / 2
    2 财务收支明细 zhaoshang/portal.account/finance 1
    1 个人信息修改 zhaoshang/portal.account/profile 1

    注意:门户节点 src 以 zhaoshang/portal. 开头,与内部节点路径不重叠,保证权限组勾选边界清晰。子账号管理类节点仅授予主账号(可在"客户门户组"之外另建"主账号组",由 is_main 区分)。

    7.3 应用注册与任务挂载

    1. config/platform.php 的 apps 增加:'zhaoshang' => '招商系统'。
    2. 注册定时任务命令(在控制台配置或系统"定时任务"中添加):zs:push,建议每日固定时间执行(可按公司配置错峰)。
    3. 建好节点与权限组后清理缓存(菜单缓存、权限规则缓存)。

    八、核心业务流程

    8.1 开通合作公司

    1. 在客户应用中确认客户已存在(或新建客户)。
    2. 招商系统"合作公司列表"用客户选择器(picker-customer)关联客户,customer_id 唯一,防止重复开通。
    3. 选择套餐后自动带出:数据单价、合作周期、日推送数、日提取上限;补充对接资料与行业匹配规则。
    4. 提交时事务处理:
      • 写 lterp_zs_company,start_time=当前,end_time=当前+周期天;
      • balance = 套餐价,写 package 类型财务流水(+套餐价);
      • 创建客户主账号并通知账号密码。
    5. 后续续费/换套餐:新开一条预存流水并顺延到期时间(续费操作放二期细化,一期可手工调整)。

    8.2 数据进池

    • Excel 批量导入 :按《批量导入功能开发指南》实现;生成 import_batch 批次号;分类、地区按名称匹配 ID;每行写入 max_claim(模板列,缺省 1),status=1。
    • API 预留 :zhaoshang/api/incoming,token 鉴权,字段与导入一致,供二期采集端推送;来源站点、入口来源、IP 原样落库。

    8.3 数据进入待领池(三种入口)

    ① 自动推送(定时任务 zs:push)

    • 候选公司:status=1、auto_push=1、当前时间在合作期内、balance ≥ data_price、当日已推送数 < daily_push。
    • 候选数据:status=1、claimed_count < max_claim、未分配给该公司(无 claim 记录),且满足匹配规则:
      • 命中:数据 cate_pid ∈ 公司 cate_pids,或 cate_id ∈ 公司 cate_ids,或品牌/关联字段命中 related_keywords 任一关键词;
      • 不命中:命中 exclude_keywords 任一关键词的数据一律排除。
    • 按缺口条数(daily_push − 当日已推送)取数,逐条生成 claim(assign_type=1,status=1,price=公司单价快照)。

    ② 后台分配 :数据池勾选数据指派公司,assign_type=2;同样受唯一约束与 max_claim 限制,不受 daily_push 限制。

    ③ 客户自领 :公司 get_mode ∈ (2,3) 时,门户展示公共池中匹配本公司规则、未领满、未分配给本公司的数据;点击"领取"立即抢占生成 claim(assign_type=3,status=1)。

    8.4 提取(两段式第二段)

    "客户数据领取"页只显示 status=1 的 claim,号码脱敏(如 186****8553)。点击"提取"时依次校验:

    1. claim 仍为待提取;公司 status=1 且在合作期内;
    2. 当日已提取条数 < daily_extract(0 不限);
    3. is_gift=0 时 balance ≥ price。

    通过后在一个数据库事务内:扣减余额、claim 置 status=2 并记提取人/时间、写 data_extract 流水(−price),接口返回完整号码;该记录转入"我的客户数据"。is_gift=1 的赠送条不扣款。

    名额在数据进入待领池时即已占用且不可撤回。余额不足时"提取"会被拦截,客户充值后仍可提取原有的待领数据,不会丢失名额。

    8.5 充值与赠送

    • 充值: 一期仅支持后台管理员手工登记充值 (确认线下款项到账后录入),登记 lterp_zs_recharge(金额 + 赠送额 + 付款方式),余额增加,分别写 recharge、recharge_gift 两条流水;客户门户不支持自助充值,在线支付充值放二期。
    • 数据赠送:管理员直接给公司挂 claim(is_gift=1、price=0),写 data_gift 流水;赠送条提取不扣款。

    8.6 claim 状态机

    生成(自动推送/后台分配/自领/赠送)
                         │
                         ▼
                    待提取(1)(名额已占用,不可撤回)
                         │ 点提取(扣费)
                         ▼
                    已提取(2)(终态,不支持退单退款)
    

    九、并发与一致性控制

    1. 同公司不重复 :lterp_zs_claim 的唯一索引 (data_id, company_id) 兜底。
    2. 领取次数不超限 :占用名额时使用条件原子更新,按影响行数判定成败:
    UPDATE `lterp_zs_data`
    SET `claimed_count` = `claimed_count` + 1
    WHERE `id` = ? AND `claimed_count` < `max_claim`;
    

    影响行数为 0 说明已被抢满,本次领取失败并提示。领满时同步置 status=2 出池。
    3. 提取扣费 :事务内完成余额扣减、claim 状态变更、流水写入;余额校验用 where balance >= price 的条件更新防透支。


    十、页面清单(一期)

    端 页面 控制器/动作 说明
    内部 行业分类管理 zhaoshang/cate/* 两级分类增删改、启用停用
    内部 套餐方案管理 zhaoshang/package_cate/* 方案字典
    内部 合作套餐管理 zhaoshang/package/datalist 列表 + 弹窗/页面编辑
    内部 合作公司列表 zhaoshang/company/datalist 列表 + 信息修改弹窗
    内部 领取/赠送/充值记录 zhaoshang/company、recharge 各记录筛选列表
    内部 电话数据列表 zhaoshang/data/datalist 多维筛选、脱敏展示、分配、导入入口
    门户 客户数据领取 portal.lead/datalist 待提取列表、提取、公共池领取
    门户 我的客户/品牌数据 portal.mine/data、brand 已提取数据,按品牌聚合
    门户 登录账户信息 portal.account/info 公司信息、余额、套餐与到期
    门户 子账号授权 portal.auth/* 仅主账号,开通/停用子账号
    门户 财务收支明细 portal.account/finance 按日期、事件类型筛选
    门户 个人信息修改 portal.account/profile 当前账号资料/密码

    十一、分期建设计划

    一期(核心闭环)

    1. 8 张表建表 + admin 改表;应用注册、权限节点、岗位权限组。
    2. 行业分类、套餐方案、合作套餐维护。
    3. 合作公司关联客户、绑套餐、扩展信息与领取设置。
    4. 数据池:Excel 导入 + 手工维护 + API 接口预留。
    5. 自动推送定时任务、后台分配、公共池自领。
    6. 门户两段式领取、我的数据、账户信息、子账号、财务流水、充值。

    二期

    1. 数据信息汇总、业务数据分析看板(内部 + 门户)。
    2. 采集 API 落地对接(来源站点、IP 等真实回传)。
    3. 在线支付充值、续费与套餐变更流程。
    4. 地区维度匹配、领取规则细化。

    十二、开发规范与注意事项

    1. 控制器继承 appaseBaseController;模型按需要建立,简单 CRUD 可用 Db::name()(表名写 zs_company 等短名,自动拼 lterp_ 前缀)。
    2. 列表返回统一 table_assign(0, '', $list);操作返回 to_assign();关键操作写 add_log()。
    3. 视图继承 common/base,表格使用 Layui + 现有表格工具;弹窗编辑参照《列表页弹窗编辑模式开发指南》。
    4. 导入功能参照《批量导入功能开发指南》,需有批次、错误回执与模板下载。
    5. 手机号在所有对外列表脱敏(建议封装 mask_mobile()),完整号仅在提取成功后返回;内部列表按权限决定是否脱敏。
    6. 门户控制器统一校验当前公司,禁止以前端参数指定 company_id;主账号专属操作校验 is_main=1。
    7. 所有金额计算以数据库 decimal 为准,扣费走事务并写流水,禁止前端传价;单价以生成 claim 时的快照为准。
    8. 多租户 SaaS 说明:Provisioner 默认克隆全部非中心表结构,租户库会得到 zs 系列空表;若租户也需使用招商系统,需另行评估分类等种子数据的下发(加入 seed_tables 或单独开通流程),一期不展开。

    推荐商品

    更多
    来团GEO-AI搜索优化系统 用AI打造企业品牌

    来团GEO-AI搜索优化系统 用AI打造企业品牌

    来团科技GEO优化&AI搜索优化系统,是通过大模型内容投喂+训练,将企业品牌及产品信息在多平台AI生成的答案中获取优先展现,更精准触达潜在目标客户,让企业品牌出现在AI搜索里。让客户一搜就看到你,实现一问就有你,一查就信你,一看就找你的营销效果。

    来团智慧商业小程序零代码开发平台 多行业适用

    来团智慧商业小程序零代码开发平台 多行业适用

    来团智慧商业小程序零代码开发平台,多行业适配。无需代码,拖拽式设计,轻松打造订货商城、会员制商城、分销商城及小程序官网。不仅能满足通用需求,还支持定制化,从页面布局到功能模块,随心定制,助您快速搭建专属商业小程序,抢占市场先机。

    微名通名片 VIP年卡会员 | SVIP永久会员

    微名通名片 VIP年卡会员 | SVIP永久会员

    来团科技微名通不止是电子名片,更是你的商业连接器。比起传统名片,它更像你的 “迷你商业工具”:信息多、好携带、能互动,还不浪费纸张。不管是跑业务、拓人脉,还是展示企业,一张「微名通」电子名片,就能帮你把商机揣在手机里。

    来团LTCRM客户管理系统 可独立部署

    来团LTCRM客户管理系统 可独立部署

    来团科技CRM客户管理系统,帮你把 “线索→成交→回款” 全流程管明白。这就是一套 “让销售省心、老板放心” 的客户管理工具,从获客到回款,帮你把生意攥在手里。

    大纲

    文章目录

      联系我们
      联系方式
      • 官方服务热线:17721141027
      • 邮箱:kf@ilaituan.com
      • QQ:20262336
      扫码添加客服
      微信
      联系我们