一级需求部门功能开发文档
📋 需求概述
业务背景
当前系统中部门类型分为"需求部门"和"接单部门"。现需要新增"一级需求部门"类型,用于支持更上层的需求发起流程。一级需求部门可以发起简化的需求任务,由下级需求部门负责完善任务明细后再发布到设计部门。
核心功能
- 新增"一级需求部门"部门类型
- 一级需求部门可发起简化需求(任务明细可不填)
- 需求部门可设置负责的品牌
- 根据品牌自动路由到对应需求部门审核
- 需求部门完善任务明细后继续原有流程
- 任务卡片显示"一级部门需求人"信息
🔄 业务流程
一级需求部门发起任务流程
┌─────────────────┐
│ 一级需求部门用户 │
│ 发起需求 │
│ (可不填明细) │
└────────┬────────┘
│ 选择品牌
▼
┌─────────────────┐
│ 系统根据品牌 │
│ 路由到对应 │
│ 需求部门负责人 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 需求部门负责人 │
│ 审核需求 │
│ 指定成员完善 │
└────────┬────────┘
│ 审核通过
▼
┌─────────────────┐
│ 需求部门成员 │
│ 完善任务明细 │
│ 提交发布 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 进入原有流程 │
│ (需求部门审核 │
│ → 接单部门) │
└─────────────────┘
任务状态流转
| 阶段 |
状态 |
说明 |
| 一级部门发起 |
pending_primary_approval |
待一级审核(需求部门负责人审核) |
| 需求部门审核通过 |
pending_detail_completion |
待完善明细 |
| 明细完善提交 |
pending_demand_approval |
进入原有需求部门审核流程 |
积分流转逻辑
┌─────────────────────────────────────────────────────────────────┐
│ 积分流转说明 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 一级需求部门发起任务 │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 校验一级部门积分 │ ← 积分不足则不允许发起 │
│ └────────┬────────┘ │
│ │ 积分充足 │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 暂不扣除积分 │ ← 等待需求部门审核 │
│ └────────┬────────┘ │
│ │ │
│ ┌─────┴─────┐ │
│ ▼ ▼ │
│ [审核通过] [审核驳回] │
│ │ │ │
│ │ ▼ │
│ │ ┌───────────┐ │
│ │ │ 不扣积分 │ ← 驳回不产生积分变动 │
│ │ └───────────┘ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 需求部门完善明细 │ │
│ │ 提交发布 │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 扣除一级部门积分 │ ← 只扣一级部门,不扣需求部门 │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 任务进入正常流程 │ │
│ └─────────────────┘ │
│ │
│ 【任务撤回/取消时】 │
│ 积分返还给一级需求部门(非需求部门) │
│ │
└─────────────────────────────────────────────────────────────────┘
| 场景 |
一级部门积分 |
需求部门积分 |
| 一级部门发起任务 |
校验余额,暂不扣除 |
不变 |
| 需求部门审核驳回 |
不变 |
不变 |
| 需求部门完善后发布 |
扣除 |
不变 |
| 任务撤回/取消 |
返还 |
不变 |
| 任务完成 |
不变 |
不变 |
📊 数据库设计
0. 系统配置表 sys_config 新增配置项
-- 新增系统配置:一级需求部门是否允许填写任务明细
INSERT INTO sys_config (config_key, config_value, config_name, config_group, description, create_time)
VALUES ('primary_dept_can_fill_detail', 'false', '一级需求部门可填写明细', 'task', '开启后一级需求部门发布任务时可以填写任务明细,关闭后不允许填写', NOW());
| 配置项 |
默认值 |
说明 |
| primary_dept_can_fill_detail |
false |
一级需求部门是否允许填写任务明细 |
1. 部门表 sys_dept 修改
-- 新增字段
ALTER TABLE sys_dept ADD COLUMN responsible_brand_ids VARCHAR(500) COMMENT '负责的品牌ID列表(逗号分隔)';
-- 修改 dept_type 字段说明
-- dept_type: primary_demand-一级需求部门, demand-需求部门, receiving-接单部门
| 字段名 |
类型 |
说明 |
| responsible_brand_ids |
VARCHAR(500) |
负责的品牌ID列表(逗号分隔),仅需求部门使用 |
2. 任务表 task 修改
-- 新增字段
ALTER TABLE task ADD COLUMN primary_publisher_id BIGINT COMMENT '一级部门发起人ID';
ALTER TABLE task ADD COLUMN primary_publisher_dept_id BIGINT COMMENT '一级部门ID';
ALTER TABLE task ADD COLUMN detail_completer_id BIGINT COMMENT '明细完善人ID';
ALTER TABLE task ADD COLUMN is_primary_task TINYINT DEFAULT 0 COMMENT '是否一级部门任务:0-否,1-是';
ALTER TABLE task ADD COLUMN detail_completed TINYINT DEFAULT 0 COMMENT '明细是否已完善:0-否,1-是';
| 字段名 |
类型 |
说明 |
| primary_publisher_id |
BIGINT |
一级部门发起人ID |
| primary_publisher_dept_id |
BIGINT |
一级部门ID |
| detail_completer_id |
BIGINT |
明细完善人ID(需求部门指定的成员) |
| is_primary_task |
TINYINT |
是否一级部门任务:0-否,1-是 |
| detail_completed |
TINYINT |
明细是否已完善:0-否,1-是 |
3. 新增品牌-部门关联表 dept_brand_relation
CREATE TABLE dept_brand_relation (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
dept_id BIGINT NOT NULL COMMENT '部门ID(需求部门)',
brand_id BIGINT NOT NULL COMMENT '品牌ID',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_brand_id (brand_id), -- 一个品牌只能对应一个需求部门
INDEX idx_dept_id (dept_id)
) COMMENT '部门品牌负责关系表';
⚠️ 注意:
brand_id 设置唯一索引,确保一个品牌只能被一个需求部门负责
- 支持多品牌对应一个需求部门:一个需求部门可以负责多个品牌
品牌-部门关系示例:
| 需求部门 |
负责品牌 |
| 设计一部 |
品牌A、品牌B、品牌C |
| 设计二部 |
品牌D、品牌E |
| 设计三部 |
品牌F |
🔧 后端开发
1. 实体类修改
Department.java
// 新增字段
private String responsibleBrandIds; // 负责的品牌ID列表
// dept_type 可选值新增
// primary_demand - 一级需求部门
// demand - 需求部门
// receiving - 接单部门
Task.java
// 新增字段
private Long primaryPublisherId; // 一级部门发起人ID
private Long primaryPublisherDeptId; // 一级部门ID
private Long detailCompleterId; // 明细完善人ID
private Integer isPrimaryTask; // 是否一级部门任务
private Integer detailCompleted; // 明细是否已完善
2. 新增实体类
DeptBrandRelation.java
@TableName("dept_brand_relation")
public class DeptBrandRelation {
private Long id;
private Long deptId;
private Long brandId;
private LocalDateTime createTime;
}
3. Service 层修改
DepartmentService.java
// 新增方法
// 根据品牌ID获取负责的需求部门
Department getDemandDeptByBrandId(Long brandId);
// 设置部门负责的品牌
void setDeptResponsibleBrands(Long deptId, List<Long> brandIds);
// 获取部门负责的品牌列表
List<Brand> getDeptResponsibleBrands(Long deptId);
TaskService.java
// 新增方法
// 一级部门创建任务(简化版)
Task createPrimaryTask(TaskCreateDTO dto, Long userId);
// 需求部门审核一级任务并指定完善人
void approvePrimaryTask(Long taskId, Long completerId, Long approverId);
// 完善任务明细
void completeTaskDetail(Long taskId, TaskDetailDTO dto, Long userId);
4. Controller 层修改
TaskController.java
// 新增接口
@PostMapping("/primary")
Result<Task> createPrimaryTask(@RequestBody TaskCreateDTO dto);
@PostMapping("/{id}/approve-primary")
Result<Void> approvePrimaryTask(@PathVariable Long id, @RequestParam Long completerId);
@PostMapping("/{id}/complete-detail")
Result<Void> completeTaskDetail(@PathVariable Long id, @RequestBody TaskDetailDTO dto);
DepartmentController.java
// 新增接口
@PostMapping("/{id}/responsible-brands")
Result<Void> setResponsibleBrands(@PathVariable Long id, @RequestBody List<Long> brandIds);
@GetMapping("/{id}/responsible-brands")
Result<List<Brand>> getResponsibleBrands(@PathVariable Long id);
5. 审核状态新增
// ApprovalStatus 新增状态
PENDING_PRIMARY_APPROVAL("pending_primary_approval", "待一级审核"),
PENDING_DETAIL_COMPLETION("pending_detail_completion", "待完善明细"),
6. 数据分析Service扩展
AnalyticsService.java
// 新增方法
/**
* 获取一级需求部门统计数据
*/
PrimaryDeptStatisticsVO getPrimaryDeptStatistics(Long deptId, LocalDateTime startTime, LocalDateTime endTime);
/**
* 获取一级需求部门排名
*/
List<PrimaryDeptRankingVO> getPrimaryDeptRanking(LocalDateTime startTime, LocalDateTime endTime);
/**
* 获取一级需求流转效率分析
*/
PrimaryTaskFlowEfficiencyVO getPrimaryTaskFlowEfficiency(LocalDateTime startTime, LocalDateTime endTime);
/**
* 获取品牌任务分布(一级需求)
*/
List<BrandTaskDistributionVO> getPrimaryTaskBrandDistribution(LocalDateTime startTime, LocalDateTime endTime);
新增VO类
// PrimaryDeptStatisticsVO.java - 一级需求部门统计
public class PrimaryDeptStatisticsVO {
private Integer totalTasks; // 发起任务数
private Integer approvedTasks; // 审核通过数
private Integer rejectedTasks; // 审核驳回数
private BigDecimal consumedScore; // 消耗积分
private BigDecimal taskGrowthRate; // 任务增长率
private BigDecimal approvalGrowthRate; // 通过增长率
private BigDecimal rejectGrowthRate; // 驳回增长率
private BigDecimal scoreGrowthRate; // 积分增长率
}
// PrimaryDeptRankingVO.java - 一级需求部门排名
public class PrimaryDeptRankingVO {
private Integer rank; // 排名
private Long deptId; // 部门ID
private String deptName; // 部门名称
private Integer taskCount; // 发起任务数
private BigDecimal approvalRate; // 审核通过率
private BigDecimal consumedScore; // 消耗积分
private Double avgResponseHours; // 平均响应时间(小时)
}
// PrimaryTaskFlowEfficiencyVO.java - 一级需求流转效率
public class PrimaryTaskFlowEfficiencyVO {
private Double avgSubmitToReviewHours; // 发起到审核平均耗时
private Double avgReviewToCompleteHours; // 审核到完善平均耗时
private Double avgCompleteToPublishHours; // 完善到发布平均耗时
private Double avgPublishToFinishHours; // 发布到完成平均耗时
private Double avgTotalHours; // 平均总耗时
}
// BrandTaskDistributionVO.java - 品牌任务分布
public class BrandTaskDistributionVO {
private Long brandId; // 品牌ID
private String brandName; // 品牌名称
private Integer taskCount; // 任务数
private BigDecimal percentage; // 占比
private Long responsibleDeptId; // 负责部门ID
private String responsibleDeptName; // 负责部门名称
}
7. 数据分析Controller扩展
AnalyticsController.java
// 新增接口
@GetMapping("/primary-dept/statistics")
@Operation(summary = "获取一级需求部门统计数据")
Result<PrimaryDeptStatisticsVO> getPrimaryDeptStatistics(
@RequestParam(required = false) Long deptId,
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startTime,
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endTime
);
@GetMapping("/primary-dept/ranking")
@Operation(summary = "获取一级需求部门排名")
Result<List<PrimaryDeptRankingVO>> getPrimaryDeptRanking(
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startTime,
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endTime
);
@GetMapping("/primary-task/flow-efficiency")
@Operation(summary = "获取一级需求流转效率分析")
Result<PrimaryTaskFlowEfficiencyVO> getPrimaryTaskFlowEfficiency(
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startTime,
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endTime
);
@GetMapping("/primary-task/brand-distribution")
@Operation(summary = "获取品牌任务分布(一级需求)")
Result<List<BrandTaskDistributionVO>> getPrimaryTaskBrandDistribution(
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startTime,
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endTime
);
🎨 前端开发
1. 系统设置页面修改
新增"一级需求部门设置"配置项
- 配置名称:一级需求部门可填写任务明细
- 配置说明:开启后一级需求部门发布任务时可以填写任务明细,关闭后不允许填写
- 控件类型:开关(Switch)
- 默认值:关闭
┌─────────────────────────────────────────────────────────────┐
│ 一级需求部门设置 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 一级需求部门可填写任务明细 [关闭 ○━━━━━━━━━━━○ 开启] │
│ │
│ 说明:关闭后,一级需求部门发布任务时无法填写任务明细, │
│ 任务明细将完全由需求部门成员填写。 │
│ │
└─────────────────────────────────────────────────────────────┘
2. 部门管理页面修改
部门类型选择
- 新增"一级需求部门"选项
- 部门类型:一级需求部门 / 需求部门 / 接单部门
需求部门设置
- 新增"负责品牌"多选配置
- 仅当部门类型为"需求部门"时显示
3. 任务发起页面修改
一级需求部门用户
- 根据系统配置
primary_dept_can_fill_detail 控制任务明细区域
- 开启:显示任务明细填写区域(选填)
- 关闭:隐藏或禁用任务明细填写区域,显示提示"任务明细将由需求部门填写"
- 必填项:品牌、基本需求描述、积分预算
- 品牌选择后显示提示:"该任务将发送至 [XX部门] 审核"
表单字段变化
| 字段 |
普通需求部门 |
一级需求部门(开启明细填写) |
一级需求部门(关闭明细填写) |
| 品牌 |
必填 |
必填 |
必填 |
| 任务标题 |
必填 |
必填 |
必填 |
| 需求描述 |
必填 |
必填 |
必填 |
| 任务明细 |
必填 |
选填 |
隐藏/禁用 |
| 预估积分 |
必填 |
必填 |
必填 |
| 附件 |
选填 |
选填 |
选填 |
| 指定设计师 |
可选 |
不支持 |
不支持 |
| 指定需求部门 |
可选 |
不支持(通过品牌自动路由) |
不支持 |
💡 系统配置:primary_dept_can_fill_detail
- 开启(true):一级需求部门可以选填任务明细
- 关闭(false):一级需求部门不显示/禁用任务明细填写区域,明细完全由需求部门填写
需求部门完善明细时的表单权限
| 字段 |
是否可编辑 |
说明 |
| 品牌 |
❌ 不可编辑 |
一级部门已选定 |
| 任务标题 |
❌ 不可编辑 |
一级部门已填写 |
| 需求描述 |
❌ 不可编辑 |
一级部门已填写 |
| 预估积分 |
❌ 不可编辑 |
一级部门已填写 |
| 附件(基本) |
❌ 不可编辑 |
一级部门已上传 |
| 任务明细 |
✅ 可编辑 |
需求部门完善 |
| 明细附件 |
✅ 可编辑 |
需求部门补充 |
4. 任务大厅页面修改
任务卡片
- 新增显示"一级部门需求人"字段(仅一级部门任务显示)
- 格式:
一级需求人: 张三 (运营一部)
筛选条件
- 新增"任务来源"筛选:全部 / 普通需求 / 一级需求
5. 需求部门工作台
新增"待审核一级需求"列表
- 显示一级部门发起的待审核任务
- 操作:审核通过(指定完善人)/ 驳回
新增"待完善明细"列表
- 显示被指定需要完善明细的任务
- 操作:编辑完善 / 提交发布
6. 审核流程页面
一级任务审核弹窗
- 显示任务基本信息
- 选择完善人(需求部门成员下拉)
- 审核通过 / 驳回
7. 数据分析页面修改
新增"一级需求部门统计"模块
┌─────────────────────────────────────────────────────────────────────────┐
│ 一级需求部门统计 [本月 ▼] │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 发起任务数 │ │ 审核通过数 │ │ 审核驳回数 │ │ 消耗积分 │ │
│ │ 128 │ │ 115 │ │ 8 │ │ 12,580 │ │
│ │ ↑ 12.5% │ │ ↑ 15.2% │ │ ↓ 20.0% │ │ ↑ 18.3% │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
一级需求部门排名
| 排名 |
部门名称 |
发起任务数 |
审核通过率 |
消耗积分 |
平均响应时间 |
| 1 |
运营一部 |
45 |
95.2% |
4,580 |
2.3小时 |
| 2 |
运营二部 |
38 |
92.1% |
3,820 |
3.1小时 |
| 3 |
市场部 |
32 |
88.5% |
2,960 |
4.2小时 |
一级需求流转效率分析
┌─────────────────────────────────────────────────────────────────────────┐
│ 一级需求流转效率 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 发起 ──────► 审核 ──────► 完善 ──────► 发布 ──────► 完成 │
│ 2.3h 4.5h 1.2h 24.6h │
│ │
│ 平均总耗时:32.6 小时 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
品牌任务分布(一级需求)
| 品牌 |
任务数 |
占比 |
负责部门 |
| 品牌A |
45 |
35.2% |
设计一部 |
| 品牌B |
32 |
25.0% |
设计一部 |
| 品牌C |
28 |
21.9% |
设计二部 |
| 其他 |
23 |
17.9% |
- |
统计指标说明
| 指标 |
计算方式 |
说明 |
| 发起任务数 |
COUNT(is_primary_task = 1) |
一级部门发起的任务总数 |
| 审核通过率 |
通过数 / 总数 × 100% |
需求部门审核通过的比例 |
| 消耗积分 |
SUM(score) WHERE is_primary_task = 1 |
一级部门消耗的总积分 |
| 平均响应时间 |
AVG(审核时间 - 发起时间) |
需求部门响应一级需求的平均时间 |
| 平均完善时间 |
AVG(完善提交时间 - 审核通过时间) |
明细完善的平均耗时 |
| 平均总耗时 |
AVG(任务完成时间 - 发起时间) |
从发起到完成的平均时间 |
数据筛选条件
- 时间范围:今日 / 本周 / 本月 / 本季度 / 自定义
- 一级部门:全部 / 指定部门
- 品牌:全部 / 指定品牌
- 任务状态:全部 / 进行中 / 已完成
📱 通知设计
核心原则:一级需求部门的通知机制与需求部门完全一致,包括站内通知和钉钉通知
通知场景汇总
| 场景 |
通知对象 |
通知内容 |
通知方式 |
| 一级部门发起任务 |
品牌对应的需求部门负责人 |
[运营一部-张三] 发起了新的一级需求任务 [任务标题],请审核 |
站内 + 钉钉 |
| 需求部门审核通过 |
被指定的明细完善人 |
您被指定完善任务 [任务标题] 的明细,请尽快处理 |
站内 + 钉钉 |
| 需求部门审核通过 |
一级部门发起人 |
您发起的任务 [任务标题] 已通过审核,正在等待明细完善 |
站内 + 钉钉 |
| 需求部门驳回 |
一级部门发起人 |
您发起的任务 [任务标题] 被驳回,原因:[驳回原因] |
站内 + 钉钉 |
| 明细完善提交 |
一级部门发起人 |
任务 [任务标题] 明细已完善,进入正常审核流程 |
站内 + 钉钉 |
| 任务进入审核流程 |
需求部门负责人 |
任务 [任务标题] 待审核 |
站内 + 钉钉 |
| 任务被抢单 |
一级部门发起人 |
任务 [任务标题] 已被设计师 YYY 抢单 |
站内 + 钉钉 |
| 任务完成 |
一级部门发起人 |
任务 [任务标题] 已完成 |
站内 + 钉钉 |
钉钉通知说明
一级需求部门成员的钉钉通知配置与需求部门完全一致:
- 通知触发:与需求部门相同的事件触发相同的通知
- 通知格式:使用相同的消息模板
- 通知链接:点击可跳转到任务详情页
- 通知权限:
- 一级部门发起人可收到自己任务的所有状态变更通知
- 与需求部门发起人收到的通知类型完全一致
通知模板示例
【任务状态变更】
任务名称:XXX
任务状态:待完善明细
操作人:张三
操作时间:2026-01-19 15:30:00
备注:请尽快完善任务明细
点击查看详情 >>
✅ 验收标准
功能验收
权限验收
数据分析验收
数据验收
📅 开发计划(建议)
| 阶段 |
内容 |
预估工时 |
| 第一阶段 |
数据库设计与实体类修改 |
0.5天 |
| 第二阶段 |
后端Service和Controller开发(任务流程) |
1.5天 |
| 第三阶段 |
后端数据分析接口开发 |
1天 |
| 第四阶段 |
前端部门管理页面修改 |
0.5天 |
| 第五阶段 |
前端任务发起页面修改 |
1天 |
| 第六阶段 |
前端任务大厅和工作台修改 |
1天 |
| 第七阶段 |
前端数据分析页面修改 |
1天 |
| 第八阶段 |
通知功能开发 |
0.5天 |
| 第九阶段 |
联调测试 |
1天 |
| 合计 |
|
8天 |
👁️ 一级需求部门权限说明
权限对比
| 功能模块 |
需求部门 |
一级需求部门 |
说明 |
| 任务大厅 |
✅ 可查看 |
✅ 可查看 |
相同 |
| 我发起的任务 |
✅ 可查看 |
✅ 可查看 |
相同 |
| 任务详情 |
✅ 可查看 |
✅ 可查看 |
相同 |
| 数据分析 |
✅ 可查看 |
✅ 可查看 |
相同 |
| 设计师大厅 |
✅ 可查看 |
✅ 可查看 |
相同 |
| 通知消息 |
✅ 可接收 |
✅ 可接收 |
相同 |
| 发起任务 |
✅ 完整表单 |
✅ 简化表单 |
一级部门明细可选/禁用 |
| 审核任务 |
✅ 可审核 |
❌ 不可审核 |
一级部门只发起不审核 |
| 完善明细 |
✅ 可完善 |
❌ 不可完善 |
一级部门任务由需求部门完善 |
| 指定设计师 |
✅ 可指定 |
❌ 不可指定 |
一级部门不支持 |
| 指定需求部门 |
✅ 可指定 |
❌ 不可指定 |
一级部门通过品牌路由 |
核心原则
一级需求部门的查看权限与需求部门完全一致,仅在任务发起流程上有差异(简化表单、品牌路由)
⚠️ 注意事项
- 积分逻辑:一级需求部门发起任务时需要校验积分余额,积分从一级部门扣除
- 品牌路由:如果品牌没有对应的需求部门,需要给出明确提示
- 权限控制:严格控制各环节的操作权限,查看权限与需求部门一致
- 数据兼容:现有任务数据的
is_primary_task 默认为 0
- 审核超时:考虑是否需要增加审核超时提醒机制
✅ 已确认事项
| 序号 |
问题 |
确认结果 |
| 1 |
一级需求部门的积分池是独立的还是共用的? |
独立的。一级需求部门任务只扣一级部门积分,需求部门完善明细后发布不扣需求部门积分 |
| 2 |
一级需求被驳回后,积分是否立即返还? |
是。驳回后积分立即返还给一级需求部门 |
| 3 |
明细完善人是否可以修改一级部门填写的基本信息? |
不可以。需求部门成员只能编辑任务明细,不能修改基本信息 |
| 4 |
一个品牌是否可以被多个需求部门负责? |
不可以。一个品牌只能对应一个需求部门,但一个需求部门可以负责多个品牌 |
| 5 |
是否需要支持一级部门直接指定需求部门? |
不支持。一级需求部门不支持指定设计师和指定需求部门,只能通过品牌路由 |
🔍 系统集成复核
现有系统架构分析
1. 部门类型(Department.deptType)
- 现有值:
demand(需求部门)、receiving(接单部门)
- 新增值:
primary_demand(一级需求部门)
- ✅ 兼容性良好,只需扩展枚举值
2. 任务审批流程(Task.approvalStatus)
- 现有状态:
pending_demand_approval - 待需求部门审核
pending_receiving_approval - 待接单部门审核
approved - 已通过
- 新增状态:
pending_primary_approval - 待一级审核(需求部门审核一级任务)
pending_detail_completion - 待完善明细
- ✅ 状态扩展,与现有流程兼容
3. 积分扣除时机(现有逻辑)
- 现有逻辑:接单部门审核通过后扣除积分(
TaskApprovalService.approveReceivingLevel)
- 一级任务逻辑:需求部门完善明细后发布时扣除一级部门积分
- ⚠️ 需要在
TaskService 中增加判断:如果是一级任务,扣除 primaryPublisherDeptId 的积分
4. 任务创建权限检查(现有逻辑)
// 现有代码检查 deptType == "demand"
if (!"demand".equals(department.getDeptType())) {
throw new BusinessException(ResultCode.FORBIDDEN, "只有需求部门可以发起任务");
}
- ⚠️ 需要修改为:
"demand".equals(deptType) || "primary_demand".equals(deptType)
5. 系统配置表(sys_config)
- 现有结构:完全匹配,可直接使用
- 字段:
config_key, config_value, config_group, config_name, description, value_type
- ✅ 新增配置项完全兼容
6. 前端部门类型选择(Settings.vue)
- 现有实现:Radio 组件,
demand / receiving 两个选项
- ⚠️ 需要增加
primary_demand 选项
- ⚠️ 需要增加"负责品牌"配置(仅需求部门显示)
需要特别注意的集成点
| 序号 |
集成点 |
现有代码位置 |
修改说明 |
| 1 |
任务创建权限 |
TaskService.createTask() |
允许 primary_demand 类型部门发起任务 |
| 2 |
任务创建权限 |
TaskService.createPipelineTask() |
同上 |
| 3 |
积分扣除 |
TaskApprovalService.approveReceivingLevel() |
一级任务扣除一级部门积分 |
| 4 |
积分返还 |
TaskService.withdrawTask() |
一级任务返还给一级部门 |
| 5 |
审批流程初始化 |
TaskService.initApprovalStatus() |
一级任务路由到需求部门 |
| 6 |
前端部门类型 |
Settings.vue 部门表单 |
增加一级需求部门选项 |
| 7 |
前端任务发起 |
CreateTask.vue |
根据部门类型调整表单 |
| 8 |
前端任务卡片 |
TaskHall.vue |
显示一级需求人信息 |
数据库迁移脚本
-- V13__add_primary_demand_dept.sql
-- 1. 系统配置:一级需求部门是否允许填写任务明细
INSERT INTO sys_config (config_key, config_value, config_group, config_name, description, value_type, built_in, sort_order, create_time, update_time, deleted)
VALUES ('primary_dept_can_fill_detail', 'false', 'task', '一级需求部门可填写明细', '开启后一级需求部门发布任务时可以填写任务明细,关闭后不允许填写', 'boolean', 0, 100, NOW(), NOW(), 0);
-- 2. 部门表新增字段(用于需求部门设置负责品牌,备用)
-- 注意:主要使用 dept_brand_relation 表管理关系
-- ALTER TABLE sys_dept ADD COLUMN responsible_brand_ids VARCHAR(500) COMMENT '负责的品牌ID列表(逗号分隔)';
-- 3. 任务表新增字段
ALTER TABLE task ADD COLUMN primary_publisher_id BIGINT COMMENT '一级部门发起人ID';
ALTER TABLE task ADD COLUMN primary_publisher_dept_id BIGINT COMMENT '一级部门ID';
ALTER TABLE task ADD COLUMN detail_completer_id BIGINT COMMENT '明细完善人ID';
ALTER TABLE task ADD COLUMN is_primary_task TINYINT DEFAULT 0 COMMENT '是否一级部门任务:0-否,1-是';
ALTER TABLE task ADD COLUMN detail_completed TINYINT DEFAULT 0 COMMENT '明细是否已完善:0-否,1-是';
-- 4. 创建品牌-部门关联表
CREATE TABLE IF NOT EXISTS dept_brand_relation (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
dept_id BIGINT NOT NULL COMMENT '部门ID(需求部门)',
brand_id BIGINT NOT NULL COMMENT '品牌ID',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_brand_id (brand_id),
INDEX idx_dept_id (dept_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门品牌负责关系表';
-- 5. 为现有任务设置默认值
UPDATE task SET is_primary_task = 0 WHERE is_primary_task IS NULL;
UPDATE task SET detail_completed = 1 WHERE detail_completed IS NULL;
风险评估
| 风险项 |
风险等级 |
缓解措施 |
| 现有任务数据兼容 |
低 |
新增字段有默认值,不影响现有数据 |
| 审批流程复杂度增加 |
中 |
增加充分的状态校验和日志记录 |
| 积分扣除逻辑变更 |
中 |
增加单元测试,确保各场景积分正确 |
| 前端表单逻辑复杂 |
中 |
抽取公共组件,按部门类型条件渲染 |
文档版本:v1.2
创建日期:2026年1月19日
最后更新:2026年1月19日
状态:已确认,系统集成复核完成,待开发