船舶监造系统是船舶制造行业的核心管理工具,它贯穿于船舶设计、采购、生产、质检全流程。这套基于SpringBoot+Vue+MySQL的技术方案,是我在参与某大型船厂数字化改造项目时沉淀的实战成果,经过3个实际项目的验证,系统完整度达到生产级要求。
不同于通用OA系统,船舶监造需要特别关注:
采用SpringBoot 2.7 + JDK11组合,关键依赖包括:
xml复制<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version> <!-- 用于处理船用规格书 -->
</dependency>
特别设计的领域模型:
java复制@Entity
public class ShipSection {
@Id
private String sectionCode; // 分段编号如"A-101"
@Enumerated(EnumType.STRING)
private ConstructionPhase phase; // 分段建造阶段
@OneToMany(mappedBy = "section")
private List<MaterialUsage> materialUsages; // 材料使用记录
}
Vue3 + Element Plus的组合,针对船舶行业特点做了以下优化:
MySQL 8.0采用以下关键表结构:
sql复制CREATE TABLE `ship_inspection` (
`id` varchar(36) NOT NULL COMMENT '检验ID',
`section_code` varchar(20) NOT NULL COMMENT '分段编号',
`inspection_type` enum('WELDING','PAINTING','ASSEMBLY') NOT NULL,
`standard_code` varchar(50) NOT NULL COMMENT '如GB/T 34000-2016',
`result_images` json DEFAULT NULL COMMENT '检验照片JSON数组',
PRIMARY KEY (`id`),
KEY `idx_section` (`section_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
采用有限状态机模型控制建造流程:
mermaid复制stateDiagram
[*] --> MATERIAL_PREPARED
MATERIAL_PREPARED --> SECTION_STARTED: 开工报告
SECTION_STARTED --> WELDING_COMPLETED: 焊接检验
WELDING_COMPLETED --> PAINTING_COMPLETED: 涂装检验
PAINTING_COMPLETED --> QUALITY_APPROVED: 质检放行
对应实现代码:
java复制public class SectionProgressService {
private final StateMachine<ConstructionState, ConstructionEvent> stateMachine;
public void handleInspectionResult(String sectionCode, InspectionResult result) {
if(result.isPassed()) {
stateMachine.sendEvent(ConstructionEvent.valueOf(result.getInspectionType() + "_PASS"));
}
}
}
实现钢材"一物一码"管理:
关键数据库关系:
sql复制-- 材料入库表
CREATE TABLE `material_stock` (
`trace_code` varchar(50) PRIMARY KEY,
`material_type` varchar(20),
`specification` varchar(100),
`inspection_cert` varchar(30)
);
-- 材料使用记录
CREATE TABLE `material_usage` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`trace_code` varchar(50),
`section_code` varchar(20),
`used_time` datetime,
FOREIGN KEY (`trace_code`) REFERENCES `material_stock` (`trace_code`)
);
推荐服务器配置:
bash复制mysql -u root -p < database/init_schema.sql
mysql -u root -p < database/init_data.sql
properties复制# application-prod.properties
spring.datasource.url=jdbc:mysql://db-host:3306/ship_construction?useSSL=false
spring.datasource.username=admin
spring.datasource.password=ENC(AES加密密码)
bash复制VUE_APP_API_BASE_URL=https://your-domain.com/api npm run build
可能原因及解决方案:
| 现象 | 排查步骤 | 解决方法 |
|---|---|---|
| 超过50MB文件上传失败 | 检查nginx配置 | 调整client_max_body_size |
| DWG文件解析异常 | 验证文件版本 | 转换至AutoCAD 2013格式 |
| 版本冲突提示 | 检查图纸编号规则 | 确认PDMS系统对接配置 |
现场常见问题处理流程:
建议采用以下接口规范:
json复制// 生产任务下发接口
POST /api/mes/task
{
"workshop": "分段车间",
"deviceType": "数控切割机",
"taskFile": "base64编码的NC文件"
}
实现LR/DNV等船级社标准对接时:
关键代码示例:
java复制public class ClassSocietyService {
public void generateCertReport(String sectionCode) {
DNVStandard dnv = loadStandard("DNVGL-RU-SHIP");
InspectionReport report = new InspectionReport(dnv);
report.generatePDF();
}
}
重要提示:实际部署时需特别注意船厂网络环境,建议在DMZ区部署前置机处理车间设备通信,避免直接暴露核心服务。我在某项目中就曾因PLC直接访问API服务导致过内存泄漏问题。