作为一家快速发展的科技企业,我们每年产生的专利数量呈指数级增长。纸质文档和Excel表格的管理方式已经严重制约了研发效率,经常出现专利重复申请、状态更新滞后、权属不清等问题。去年一次关键的专利纠纷事件,更让我们意识到建立标准化专利管理体系的紧迫性。
经过与法务、研发、管理层多轮沟通,我们明确了系统需要解决的三大核心痛点:
采用微服务架构实现模块化部署,主要考虑因素包括:
技术栈组合:
专利主表关键字段设计示例:
sql复制CREATE TABLE `patent` (
`id` bigint NOT NULL COMMENT '雪花算法ID',
`patent_no` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '专利号',
`current_status` tinyint NOT NULL COMMENT '1-创意提交 2-内部审核...',
`priority_date` date NOT NULL COMMENT '优先权日',
`tech_category` json DEFAULT NULL COMMENT '技术分类树形结构',
`attachments` json DEFAULT NULL COMMENT '附件URL数组',
`version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_patent_no` (`patent_no`),
KEY `idx_status_category` (`current_status`,`tech_category`(10))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
基于Activiti 7改造的轻量级流程引擎:
核心流程跳转逻辑:
java复制public void approvePatent(Long patentId, User operator) {
Patent patent = patentMapper.selectById(patentId);
if (patent.getCurrentStatus() != PatentStatus.WAITING_LEGAL_REVIEW) {
throw new BusinessException("当前状态不可执行此操作");
}
// 检查权限
if (!permissionService.checkLegalPermission(operator)) {
throw new ForbiddenException("非法务人员无权审批");
}
// 更新状态并记录审计日志
patent.setCurrentStatus(PatentStatus.LEGAL_APPROVED);
patentMapper.updateById(patent);
auditLogService.logApproval(patentId, operator);
// 触发下一环节
workflowEngine.triggerNextStep(patentId);
}
基于时间轮算法的提醒服务:
提醒规则配置表示例:
| 提醒类型 | 触发条件 | 通知渠道 | 提前天数 | 是否循环 |
|---|---|---|---|---|
| 年费缴纳 | 专利授权后 | 邮件+站内信 | 90,30,7 | 是 |
| 实审答复 | 收到审查意见 | 短信+钉钉 | 15 | 否 |
采用AOP+注解方式记录关键操作:
java复制@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuditLog {
String module();
OperationType type();
}
// 使用示例
@AuditLog(module = "专利管理", type = OperationType.UPDATE)
public void updatePatent(PatentDTO dto) {
// 业务逻辑
}
日志存储采用MongoDB分片集群,支持按操作人、时间范围、操作类型等多维度检索。
案例:年费提醒邮件重复发送
根因:RabbitMQ消息重复消费
解决方案:
系统上线后关键指标提升:
后续规划: