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

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

涉及页面

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

业务流程与数据带入

  1. 设定目标:管理员在「销售计划」页按周期(年/季/月)+ 维度(个人/部门/产品)设定销售目标。目标对象(用户/部门/物料)从系统下拉选择,目标指标(合同金额、回款金额、商机金额、新增客户数、新增合同数)手工录入。
  2. 周期自动换算:前端只提交 periodType(1年/2季度/3月)与 periodValue(如 20262026-Q12026-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 倒序)。