1. 项目概述
农贸市场作为城乡居民日常生活的重要组成部分,长期以来面临着管理效率低下、信息不对称等问题。随着数字化转型浪潮的推进,传统农贸市场亟需一套现代化的信息管理系统来提升运营效率和服务质量。本项目基于Spring Boot框架开发了一套完整的农贸市场信息管理系统,实现了商家与管理员的高效协同工作。
1.1 系统核心功能
系统采用B/S架构,主要分为商家端和管理端两大模块:
商家端功能:
- 农产品信息管理:发布、编辑、下架农产品
- 设备租赁管理:查看、申请、管理租赁设备
- 个人中心:管理个人信息、租赁记录、收藏和评论
- 信息浏览:查看通知公告、新闻资讯
管理端功能:
- 用户管理:审核和管理商家账户
- 产品管理:维护农产品分类和信息
- 设备管理:管理市场租赁设备
- 租赁管理:处理设备租赁申请
- 系统管理:轮播图设置、通知公告发布
1.2 技术选型
系统采用主流的技术栈组合:
- 后端:Spring Boot 2.7 + MyBatis
- 前端:Vue.js + Element UI
- 数据库:MySQL 8.0
- 部署环境:Tomcat 9.0
这套技术组合确保了系统的稳定性、可扩展性和开发效率,同时也便于后续维护和功能扩展。
2. 系统设计与实现
2.1 系统架构设计
系统采用典型的三层架构:
- 表现层:负责用户界面展示和交互
- 业务逻辑层:处理核心业务逻辑
- 数据访问层:负责数据持久化
前后端采用完全分离的设计模式,通过RESTful API进行数据交互。这种架构设计带来了以下优势:
- 前后端开发可以并行进行
- 便于后期单独扩展或替换某一层
- 接口定义清晰,降低系统耦合度
2.2 数据库设计
数据库设计遵循第三范式,主要包含以下几张核心表:
商家用户表(merchant_users)
sql复制CREATE TABLE `merchant_users` (
`merchant_users_id` int NOT NULL AUTO_INCREMENT,
`merchant_name` varchar(64) DEFAULT NULL,
`merchant_age` varchar(64) DEFAULT NULL,
`merchant_gender` varchar(64) DEFAULT NULL,
`merchant_address` varchar(64) DEFAULT NULL,
`business_license` varchar(255) DEFAULT NULL,
`examine_state` varchar(16) NOT NULL,
`user_id` int NOT NULL,
PRIMARY KEY (`merchant_users_id`),
UNIQUE KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
农产品信息表(agricultural_information)
sql复制CREATE TABLE `agricultural_information` (
`agricultural_information_id` int NOT NULL AUTO_INCREMENT,
`product_code` varchar(64) DEFAULT NULL,
`product_name` varchar(64) DEFAULT NULL,
`product_type` varchar(64) DEFAULT NULL,
`cover_photo` varchar(255) DEFAULT NULL,
`product_price` double DEFAULT NULL,
`production_area` varchar(64) DEFAULT NULL,
`release_date` date DEFAULT NULL,
`product_specifications` varchar(64) DEFAULT NULL,
`product_introduction` longtext,
`merchant_id` int NOT NULL,
PRIMARY KEY (`agricultural_information_id`),
KEY `merchant_id` (`merchant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
设备信息表(equipment_information)
sql复制CREATE TABLE `equipment_information` (
`equipment_information_id` int NOT NULL AUTO_INCREMENT,
`equipment_number` varchar(64) DEFAULT NULL,
`equipment_name` varchar(64) DEFAULT NULL,
`equipment_type` varchar(64) DEFAULT NULL,
`cover_photo` varchar(255) DEFAULT NULL,
`rental_unit` varchar(64) DEFAULT NULL,
`rental_price` double DEFAULT NULL,
`equipment_introduction` longtext,
`status` tinyint DEFAULT '1' COMMENT '1-可用 0-不可用',
PRIMARY KEY (`equipment_information_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
租赁信息表(rental_information)
sql复制CREATE TABLE `rental_information` (
`rental_information_id` int NOT NULL AUTO_INCREMENT,
`equipment_number` varchar(64) DEFAULT NULL,
`equipment_name` varchar(64) DEFAULT NULL,
`equipment_type` varchar(64) DEFAULT NULL,
`rental_unit` varchar(64) DEFAULT NULL,
`rental_price` double DEFAULT NULL,
`merchant_users` int DEFAULT NULL,
`merchant_name` varchar(64) DEFAULT NULL,
`number_of_leases` double DEFAULT NULL,
`lease_days` double DEFAULT NULL,
`total_amount` double DEFAULT NULL,
`lease_remarks` text,
`status` tinyint DEFAULT '0' COMMENT '0-待审核 1-已通过 2-已拒绝',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`rental_information_id`),
KEY `merchant_users` (`merchant_users`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.3 核心功能实现
2.3.1 用户认证模块
采用JWT(JSON Web Token)实现无状态认证,关键代码如下:
java复制@Service
public class AuthService {
@Value("${jwt.secret}")
private String secret;
@Value("${jwt.expiration}")
private Long expiration;
public String generateToken(UserDetails userDetails) {
Map<String, Object> claims = new HashMap<>();
return Jwts.builder()
.setClaims(claims)
.setSubject(userDetails.getUsername())
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + expiration * 1000))
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}
public Boolean validateToken(String token, UserDetails userDetails) {
final String username = getUsernameFromToken(token);
return (username.equals(userDetails.getUsername()) && !isTokenExpired(token));
}
// 其他辅助方法...
}
2.3.2 农产品管理模块
实现农产品CRUD操作及图片上传功能:
java复制@RestController
@RequestMapping("/api/products")
public class ProductController {
@Autowired
private ProductService productService;
@PostMapping
public ResponseEntity<?> createProduct(
@RequestPart ProductDTO productDTO,
@RequestPart(required = false) MultipartFile image) {
if (image != null && !image.isEmpty()) {
String imagePath = fileStorageService.storeFile(image);
productDTO.setCoverPhoto(imagePath);
}
Product product = productService.createProduct(productDTO);
return ResponseEntity.ok(product);
}
@GetMapping("/{id}")
public ResponseEntity<Product> getProductById(@PathVariable Long id) {
Product product = productService.getProductById(id);
return ResponseEntity.ok(product);
}
// 其他方法...
}
2.3.3 设备租赁模块
处理设备租赁申请和状态变更:
java复制@Service
public class RentalServiceImpl implements RentalService {
@Autowired
private RentalRepository rentalRepository;
@Autowired
private EquipmentRepository equipmentRepository;
@Transactional
public RentalInfo createRental(RentalDTO rentalDTO) {
Equipment equipment = equipmentRepository.findById(rentalDTO.getEquipmentId())
.orElseThrow(() -> new ResourceNotFoundException("Equipment not found"));
if (equipment.getStatus() != EquipmentStatus.AVAILABLE) {
throw new BusinessException("Equipment is not available for rental");
}
RentalInfo rental = new RentalInfo();
// 设置租赁信息...
equipment.setStatus(EquipmentStatus.RENTED);
equipmentRepository.save(equipment);
return rentalRepository.save(rental);
}
// 其他方法...
}
3. 系统特色与创新点
3.1 双角色协同工作流
系统设计了完善的商家-管理员协同工作流程:
- 商家提交注册申请 → 管理员审核
- 商家发布农产品 → 管理员审核
- 商家申请设备租赁 → 管理员审批
- 交易完成 → 双方互评
这种流程设计既保证了信息的真实性,又实现了权力的制衡。
3.2 智能提醒机制
系统内置多种提醒机制:
- 农产品临期提醒
- 租赁到期提醒
- 待办事项提醒
- 系统公告推送
这些提醒通过站内信和邮件双重渠道发送,确保重要信息不被遗漏。
3.3 数据可视化分析
管理员后台提供丰富的数据看板:
- 交易趋势分析
- 热门农产品统计
- 设备使用率分析
- 商家活跃度排名
这些数据帮助市场管理者做出更科学的决策。
4. 部署与运维
4.1 系统部署方案
推荐采用Docker容器化部署,docker-compose.yml配置示例:
yaml复制version: '3'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: market
MYSQL_USER: market
MYSQL_PASSWORD: market123
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
backend:
build: ./backend
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/market
SPRING_DATASOURCE_USERNAME: market
SPRING_DATASOURCE_PASSWORD: market123
depends_on:
- db
frontend:
build: ./frontend
ports:
- "80:80"
depends_on:
- backend
volumes:
mysql_data:
4.2 性能优化建议
-
数据库优化:
- 为常用查询字段建立索引
- 合理设计表关联
- 定期执行ANALYZE TABLE优化统计信息
-
缓存策略:
- 使用Redis缓存热点数据
- 实现多级缓存机制
- 合理设置缓存过期时间
-
前端优化:
- 实现懒加载和按需加载
- 使用CDN加速静态资源
- 启用Gzip压缩
5. 常见问题与解决方案
5.1 商家注册审核慢
问题描述:新商家反映注册后审核时间过长
解决方案:
- 实现自动化初审:通过OCR技术自动核验营业执照基本信息
- 设置审核时效提醒:超时未审核自动提醒管理员
- 提供审核进度查询功能
5.2 图片上传失败
问题描述:部分商家反映农产品图片上传失败
解决方案:
- 前端增加图片大小和格式校验
- 后端实现分块上传和断点续传
- 提供图片压缩服务,自动调整过大图片
5.3 设备租赁冲突
问题描述:同一设备被多人同时申请导致冲突
解决方案:
- 实现乐观锁机制
- 引入预约排队系统
- 提供相似设备推荐功能
6. 项目总结与展望
本农贸市场信息管理系统通过信息化手段有效解决了传统市场管理中的诸多痛点,实现了:
- 信息透明化,减少信息不对称
- 流程标准化,提高管理效率
- 服务智能化,提升用户体验
未来可考虑以下扩展方向:
- 增加移动端小程序,方便消费者使用
- 引入区块链技术确保交易不可篡改
- 开发智能定价系统辅助商家决策
- 整合物流配送服务形成完整生态
在实际部署过程中,我们发现系统的易用性和稳定性得到了商家和管理员的一致好评。特别是设备租赁模块,将平均处理时间从原来的2天缩短到了2小时,大大提高了市场运营效率。