编辑 | blame | 历史 | 原始文档

营销管理 - 销售计划(销售目标)前端联调方案

涉及页面

  • 营销管理 → 销售计划(菜单 1065000,组件 crm/salesTarget/index)
  • 营销管理 → 达成分析(菜单 1065100,组件 crm/salesTarget/analysis/index)

业务流程与数据带入

  1. 设定目标:管理员在「销售计划」页按周期(年/季/月)+ 维度(个人/部门/产品)设定销售目标。目标对象(用户/部门/物料)从系统下拉选择,目标指标(合同金额、回款金额、商机金额、新增客户数、新增合同数)手工录入。
  2. 周期自动换算:前端只提交 periodType(1年/2季度/3月)与 periodValue(如 2026、2026-Q1、2026-07),后台自动换算周期起止时间并落库;列表/详情展示换算后的起止时间。
  3. 状态自动判定:后台保存时按当前时间与周期自动判定状态(未生效/已生效/已结束),前端展示即可;仅「作废/恢复」由用户手动触发。
  4. 达成统计自动带入:列表、详情、达成分析均返回实际达成(合同金额、回款金额、商机金额、新增客户数、新增合同数)与达成率,前端直接展示,无需另行调用统计接口。
  5. 达成分析:用户在「达成分析」页选择周期(必选)+ 维度(可选)+ 状态(可选),后台按周期过滤返回目标列表(含实际达成与达成率)。

API

方法 路径 说明
POST /crm/sales-target/create 创建销售目标
PUT /crm/sales-target/update 更新销售目标
PUT /crm/sales-target/change-status 变更目标状态(作废/恢复/生效)
DELETE /crm/sales-target/delete?id= 删除销售目标
GET /crm/sales-target/get?id= 目标详情(含实际达成+达成率)
GET /crm/sales-target/page 目标分页(含实际达成+达成率)
GET /crm/sales-target/export-excel 导出 Excel
GET /crm/sales-target/get-achievement-analysis 达成分析

创建/更新请求参数(CrmSalesTargetSaveReqVO)

参数 类型 必填 说明
id Long 更新时必填 目标编号
name String 是 目标名称
periodType Integer 是 周期类型(字典 crm_sales_target_period_type:1年/2季度/3月)
periodValue String 是 周期值,如 2026 / 2026-Q1 / 2026-07
targetDimension Integer 是 目标维度(字典 crm_sales_target_dimension:1个人/2部门/3产品)
targetUserId Long 维度=个人时必填 目标用户编号
targetDeptId Long 维度=部门时必填 目标部门编号
targetItemId Long 维度=产品时必填 目标物料编号(关联 MDM)
contractTarget BigDecimal 否 合同金额目标(元)
receivableTarget BigDecimal 否 回款金额目标(元)
businessTarget BigDecimal 否 商机金额目标(元)
customerTarget Integer 否 新增客户数目标
contractCountTarget Integer 否 新增合同数目标
remark String 否 备注

状态变更请求参数(CrmSalesTargetChangeStatusReqVO)

参数 类型 必填 说明
id Long 是 目标编号
status Integer 是 目标状态(字典 crm_sales_target_status:0未生效/1已生效/2已结束/3已作废)

达成分析请求参数(CrmSalesTargetAnalysisReqVO)

参数 类型 必填 说明
periodType Integer 是 周期类型
periodValue String 是 周期值
targetDimension Integer 否 目标维度,为空查全部
status Integer 否 状态,为空查全部

响应字段(CrmSalesTargetRespVO)

目标基础字段(name/periodType/periodValue/startTime/endTime/targetDimension/status/remark/createTime/creator)之上,新增以下字段:

字段 类型 说明
targetUserName String 目标对象名称(维度=个人时为昵称)
targetDeptName String 目标部门名称(维度=部门)
targetItemName String 目标物料名称(维度=产品)
actualContractPrice BigDecimal 实际合同金额(元)
actualReceivablePrice BigDecimal 实际回款金额(元)
actualBusinessPrice BigDecimal 实际商机金额(元)
actualCustomerCount Long 实际新增客户数
actualContractCount Long 实际新增合同数
contractRate BigDecimal 合同金额达成率(%)
receivableRate BigDecimal 回款金额达成率(%)
businessRate BigDecimal 商机金额达成率(%)
customerRate BigDecimal 新增客户数达成率(%)
contractCountRate BigDecimal 新增合同数达成率(%)
creatorName String 创建人名称

响应示例:

{
  "code": 0,
  "data": {
    "id": 1,
    "name": "2026年度销售目标-张三",
    "periodType": 1,
    "periodValue": "2026",
    "startTime": "2026-01-01 00:00:00",
    "endTime": "2027-01-01 00:00:00",
    "targetDimension": 1,
    "targetUserId": 1,
    "targetUserName": "张三",
    "contractTarget": 500000.00,
    "actualContractPrice": 32377.00,
    "contractRate": 6.48,
    "status": 1
  }
}

字段展示规则

字段 展示位置 说明
目标名称 列表、详情 主标题
周期 列表、详情 周期类型字典转文本 + 周期值,如「年度 2026」
目标对象 列表、详情 按维度展示目标用户/部门/物料名称(targetUserName/targetDeptName/targetItemName)
目标指标 列表、详情、分析 合同金额/回款金额/商机金额/新增客户数/新增合同数目标
实际达成 列表、详情、分析 与目标指标一一对应的实际值
达成率 列表、详情、分析 百分比,保留两位小数;目标为 0 或空时达成率为空(展示为 -)
状态 列表、详情 字典转文本,已作废需置灰/禁止编辑
创建人 列表、详情 创建人昵称

业务规则说明

场景 规则
达成率计算 实际值 ÷ 目标值 × 100,保留 2 位小数;目标为空或 ≤0 时达成率返回 null
周期换算 前端无需计算起止时间,后台按 periodValue 换算;年 2026、季 2026-Q1、月 2026-07
状态判定 后台按当前时间自动判定 未生效/已生效/已结束;前端新增编辑时无需手动选状态
作废/恢复 已作废的目标被编辑后仍保持作废状态,需先「恢复」再编辑生效
统计口径 合同金额/数量只统计审核通过(audit_status=20)的合同;回款只统计审核通过的回款;商机只统计赢单(end_status=1);客户按创建时间统计
产品维度 仅统计合同金额与合同数,回款/商机/客户数为 0
部门维度 含子部门下所有用户的数据
数据权限 目标为管理配置,不接入 CRM 数据权限,列表展示全部(可按需按创建人过滤)

注意事项

  • 达成率字段可能为 null,前端展示需兜底为 -,避免显示 0。
  • 周期值格式严格:年 YYYY、季 YYYY-Q1~YYYY-Q4、月 YYYY-MM,前端表单校验需按此约束。
  • 目标维度与目标对象互斥:维度=个人填 userId,部门填 deptId,产品填 itemId,其余留空;前端按维度切换表单项。
  • 达成分析接口的 periodType + periodValue 为必填,未选周期时不应发起请求。
  • 达成统计查询为逐条目标计算(约 5 条小 SQL),目标数量级几十~几百时性能可接受;若后续目标量级增大需改造为聚合统计,需提前知会后端。
  • 「销售计划」页排序建议按创建时间倒序,与后台返回顺序一致(按 id 倒序)。