1. 项目背景与核心需求
海鲜批发市场作为生鲜供应链的重要环节,其信息化管理水平直接影响着商品流通效率和商户经营效益。传统海鲜市场普遍存在以下痛点:
- 交易数据手工记录易出错,价格波动频繁导致对账困难
- 库存管理依赖人工盘点,海鲜易腐特性导致损耗率高
- 买卖双方信息不对称,优质货源难以触达下游餐饮客户
- 缺乏电子支付渠道,大额现金交易存在安全隐患
本项目实现的网络海鲜市场管理系统,采用SpringBoot+Vue技术栈构建,主要解决以下核心需求:
- 多角色权限管理:实现市场管理员、批发商户、采购客户三类角色的差异化功能权限
- 商品全生命周期管理:从入库质检、在库养护到出库销售的完整流程数字化
- 智能定价系统:根据供需关系、库存周期自动生成建议批发价
- 移动端交易支持:微信小程序端实现扫码下单、电子支付功能
- 冷链物流对接:集成第三方物流API实现温控运输订单追踪
系统设计特别考虑了海鲜行业的特殊性:商品批次管理(区别于普通SKU)、重量浮动结算(去皮重计算)、短保质期预警等业务细节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 整体技术选型
采用前后端分离架构,技术栈组成如下:
后端服务层:
- 基础框架:SpringBoot 2.7.5(兼顾稳定性和社区支持)
- 数据持久化:MyBatis-Plus 3.5.3 + MySQL 8.0
- 安全认证:Spring Security + JWT
- 缓存机制:Redis 6.2(商品目录缓存、会话管理)
- 消息队列:RabbitMQ 3.11(异步处理订单状态变更)
- 文件存储:MinIO(海鲜商品图片存储)
前端展现层:
- 核心框架:Vue 3.2 + TypeScript
- UI组件库:Element Plus 2.3
- 状态管理:Pinia 2.0
- 可视化:ECharts 5.4(销售数据看板)
- 辅助工具:Vite 4.0(构建工具)
2.2 关键架构决策
-
混合部署方案:
- 管理后台:Vue SPA部署在Nginx
- 商户端:同一套API服务对接微信小程序(Uniapp编译)
- 采用Nginx反向代理解决跨域问题
-
数据库设计原则:
sql复制CREATE TABLE seafood_sku ( id BIGINT PRIMARY KEY, batch_no VARCHAR(32) NOT NULL COMMENT '捕捞批次号', origin_code CHAR(6) NOT NULL COMMENT '原产地编码', storage_temp DECIMAL(3,1) COMMENT '建议存储温度(℃)', live_status TINYINT DEFAULT 1 COMMENT '0-冰鲜 1-活鲜', weight_range VARCHAR(20) COMMENT '单件重量区间(克)', shelf_life_hours SMALLINT COMMENT '保质期(小时)', qr_code VARCHAR(64) UNIQUE COMMENT '溯源码' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -
性能优化措施:
- 二级缓存策略:Redis缓存热点商品数据 + Caffeine本地缓存
- 批量操作接口:采用MyBatis的
@BatchInsert注解优化海鲜入库性能 - 数据库分片:按海鲜品类进行水平分表(鱼类/贝类/甲壳类)
3. 核心功能实现细节
3.1 智能定价算法实现
海鲜商品的动态定价是系统的核心业务逻辑,主要考虑以下因素:
-
基础参数:
- 采购成本价
- 当前库存量/库存周转率
- 剩余保质期占比
- 市场同类商品均价
-
算法实现:
java复制@Service public class PricingServiceImpl implements PricingService { private static final Logger logger = LoggerFactory.getLogger(PricingServiceImpl.class); @Override public BigDecimal calculateDynamicPrice(SeafoodStock stock) { // 获取基准价(最近10笔成交均价的80%) BigDecimal basePrice = transactionMapper.selectAvgPrice( stock.getSeafoodId(), 10).multiply(new BigDecimal("0.8")); // 库存压力系数(0.8~1.2) double stockFactor = 1 - (stock.getStockAmount() / stock.getMaxCapacity()) * 0.4; // 保质期衰减系数 double shelfLifeFactor = Math.pow( (double)stock.getRemainingHours() / stock.getTotalShelfLife(), 0.5); // 最终价格 = 基准价 × 库存系数 × 保质期系数 BigDecimal finalPrice = basePrice .multiply(BigDecimal.valueOf(stockFactor)) .multiply(BigDecimal.valueOf(shelfLifeFactor)); logger.info("Calculated price for {}: base={} final={}", stock.getSeafoodName(), basePrice, finalPrice); return finalPrice.setScale(2, RoundingMode.HALF_UP); } } -
价格更新策略:
- 定时任务:每天凌晨2点全量更新
- 事件驱动:库存量变化超过20%时触发局部更新
- 人工干预:允许商户设置价格浮动上下限
3.2 交易流程中的特殊处理
海鲜交易相比普通电商需要特殊处理的场景:
-
称重商品处理:
- 前端通过蓝牙电子秤获取实时重量
- 系统自动扣除包装重量(皮重)
- 视频取证功能记录称重过程
-
损耗补偿机制:
java复制// 订单完成时计算运输损耗补偿 if (order.getActualWeight() < order.getExpectedWeight()) { double lossRatio = (order.getExpectedWeight() - order.getActualWeight()) / order.getExpectedWeight(); if (lossRatio > 0.05) { // 超过5%损耗 Compensation comp = new Compensation(); comp.setOrderId(order.getId()); comp.setAmount(order.getTotalPrice() .multiply(BigDecimal.valueOf(lossRatio - 0.05))); compensationMapper.insert(comp); } } -
支付超时控制:
- 活鲜订单:15分钟未支付自动取消
- 冰鲜订单:2小时未支付自动取消
- 使用Redis的过期键通知机制实现
4. 系统安全与稳定性保障
4.1 多层级安全措施
-
通信安全:
- HTTPS + HSTS强制加密
- 敏感接口二次验证(短信/邮箱验证码)
-
数据安全:
- 数据库字段级加密(使用Jasypt):
yaml复制jasypt: encryptor: bean: jasyptStringEncryptor password: ${JASYPT_PASSWORD} # 从环境变量读取 - 日志脱敏处理(身份证、银行卡等信息)
- 数据库字段级加密(使用Jasypt):
-
风控机制:
- 基于规则的异常交易检测(如短时间内大量下单)
- 商户信用评级系统(根据历史履约情况)
4.2 高可用设计
-
服务降级方案:
- 本地缓存兜底:当Redis不可用时自动切换Caffeine
- 限流保护:使用Sentinel对核心接口做QPS限制
-
数据一致性保障:
- 分布式事务:使用Seata处理跨服务操作
- 补偿机制:定时任务扫描异常状态订单
-
监控体系:
- Spring Boot Admin监控服务健康状态
- ELK日志分析平台
- 自定义海鲜商品新鲜度预警指标
5. 部署与运维实践
5.1 容器化部署方案
采用Docker Compose编排服务:
dockerfile复制version: '3.8'
services:
app:
image: seafood-market:${TAG:-latest}
environment:
- SPRING_PROFILES_ACTIVE=prod
- DB_HOST=mysql
depends_on:
- mysql
- redis
mysql:
image: mysql:8.0
volumes:
- mysql_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
- MYSQL_DATABASE=seafood
redis:
image: redis:6.2-alpine
volumes:
- redis_data:/data
volumes:
mysql_data:
redis_data:
5.2 性能调优经验
-
JVM参数优化:
bash复制JAVA_OPTS="-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=35" -
MySQL优化:
- 海鲜批次表增加复合索引:
(category_id, storage_temp) - 调整InnoDB缓冲池大小:
ini复制[mysqld] innodb_buffer_pool_size = 2G innodb_buffer_pool_instances = 4
- 海鲜批次表增加复合索引:
-
前端性能提升:
- 使用Vue的
<script setup>语法减少代码量 - 路由懒加载拆分代码包
- 商品图片WebP格式转换
- 使用Vue的
6. 项目演进方向
在实际运营过程中,我们持续收集到以下改进需求:
-
AI图像识别:
- 通过拍照自动识别海鲜品类和新鲜度
- 基于OpenCV实现鱼鳃颜色分析
-
供应链金融:
- 对接银行API提供存货质押贷款服务
- 基于区块链的电子仓单系统
-
物联网集成:
- 冷链运输车辆温度实时监控
- 仓库环境传感器数据采集
-
大数据分析:
- 价格趋势预测模型
- 客户采购行为分析
这个系统从第一版上线至今已经迭代了7个主要版本,核心经验是:海鲜行业的数字化转型必须深度理解业务细节,技术方案要适配行业特性而非简单套用通用电商模式。比如我们早期直接复用普通电商的库存模型,就出现了无法处理"同一批次的鱼个体差异"的问题,后来重构为"批次+等级"的二维管理模型才解决。
