# suzhouhgport **Repository Path**: xuting/suzhouhgport ## Basic Information - **Project Name**: suzhouhgport - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-17 - **Last Updated**: 2026-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 东松智慧通关系统 苏州海关报关单商检材料管理平台,由**上海东松医疗科技股份有限公司**与**苏州海关**联合开发。 ## 技术栈 - **后端**: Spring Boot 3.2.0 + Java 17 - **数据库**: Oracle 11g - **前端**: HTML5 + CSS3 + 原生 JavaScript - **UI框架**: Bootstrap 5.3 - **文件上传**: MultipartFile (单文件最大 100MB) ## 项目结构 ``` src/main/java/com/suzhou/customs/ ├── controller/ │ ├── DeclarationController.java # 报关单 API │ ├── LoginController.java # 登录认证 │ └── MaterialController.java # 材料上传/下载 ├── model/ │ ├── Declaration.java # 报关单实体 │ └── Material.java # 商检材料实体 ├── repository/ │ ├── DeclarationRepository.java │ └── MaterialRepository.java └── service/ ├── DeclarationService.java ├── LoginService.java └── MaterialService.java src/main/resources/ ├── application.yml # 应用配置 ├── static/ │ ├── login.html # 登录页 │ ├── clerk.html # 业务端页面(报关员) │ ├── customs.html # 海关端页面 │ └── js/ │ ├── app.js # 公共 JS(导航栏、注销等) │ ├── clerk.js # 报关员端 JS │ └── customs.js # 海关端 JS └── templates/ # Thymeleaf 模板 ``` ## 功能模块 ### 业务端(报关员) - 查看报关单列表(支持按报关单号、合同号、UDI、注册证号搜索) - 上传商检材料(支持拖拽上传) - 提醒列表(未上传材料的报关单) - 查看/删除已上传材料 ### 海关端 - 查看报关单列表(卡片式布局) - 按进口日期倒序排列,支持分页懒加载(每页50条) - 幻灯片查看商检材料(支持旋转、缩放、全屏) - 键盘控制:左右箭头翻页,R旋转,Z缩放,F全屏,ESC关闭 - 批量下载材料(下载为 ZIP 压缩包,文件名即为报关单号) - 多条件搜索筛选: - 关键字搜索(报关单号、合同号、UDI、注册证号) - 进口日期范围筛选 + 本周/本月/本年快捷筛选 - 下载状态筛选(全部/已下载/未下载) - 上传状态筛选(全部/已上传/未上传) - 卡片显示下载次数 ## 数据库表结构 ### declarations(报关单表) | 字段 | 说明 | |------|------| | id | 报关单号(主键) | | contract_no | 合同号 | | ggxh | 规格型号(申报要素) | | zczh | 注册证号(逗号分隔) | | udi | UDI码(逗号分隔) | | import_date | 进口日期 | | status | 状态(pending/approved/rejected/processing) | | download_count | 下载次数(海关端下载材料时累加) | | uploaded_count | 上传材料数量(报关端上传材料时更新) | ### materials(材料表) | 字段 | 说明 | |------|------| | id | 材料ID(自增序列) | | declaration_id | 报关单号(外键) | | file_name | 文件名 | | file_path | 文件路径 | | file_type | 文件类型(MIME) | | upload_time | 上传时间 | ## API 接口 | 方法 | 路径 | 说明 | |------|------|------| | POST | /api/login | 用户登录 | | POST | /api/logout | 用户登出 | | GET | /api/declarations | 获取所有报关单 | | GET | /api/declarations/paginated | 分页获取报关单(page, size, keyword, startDate, endDate, downloaded, uploaded) | | GET | /api/declarations/{id} | 获取单个报关单 | | GET | /api/declarations/{id}/materials | 获取报关单的材料 | | POST | /api/declarations/{id}/materials | 上传材料 | | GET | /api/declarations/{id}/download-zip | 下载该报关单的所有材料(ZIP 压缩包) | | POST | /api/declarations/{id}/record-download | 记录一次下载次数 | | DELETE | /api/materials/{id} | 删除材料 | ## 启动方式 1. 确保 Oracle 数据库连接配置正确(application.yml) 2. 执行数据库初始化脚本 `oracle_schema.sql` 3. 运行: ```bash ./mvnw spring-boot:run ``` 或使用打包后的 JAR: ```bash java -jar target/customs-1.0.0.jar ``` 访问地址:http://localhost:3847 ## 登录账号 | 角色 | 用户名 | 密码 | |------|--------|------| | 报关员 | clerk | 123456 | | 海关老师 | customs | 123456 | ## 文件存储 上传的文件存储在:`D:/aiproject/suzhouhgport/uploads/` 目录结构: ``` uploads/ └── {报关单号}/ ├── 材料1.jpg └── 材料2.pdf ```