果园生产管理一直是农业信息化中的重点难点领域。传统果园管理普遍存在生产过程记录不完整、质量安全难以追溯、农事操作依赖经验等问题。这套基于Java技术栈的可追溯果园生产管理系统,正是为了解决这些痛点而生。
我在实际调研中发现,中小型果园普遍面临三个核心挑战:一是农事记录靠纸质本子,容易丢失且难以统计分析;二是农药化肥使用记录不完整,产品上市时无法提供完整溯源链条;三是不同果园地块的管理标准不统一。这套系统通过信息化手段,将果园从种植到采收的全流程数字化,实现了"生产有记录、流向可追踪、质量可追溯"的管理目标。
系统采用经典的Java EE三层架构:
选择这套技术栈主要基于以下考虑:
系统采用模块化设计,主要包含:
code复制├── orchard-core // 核心业务模块
│ ├── base // 基础实体
│ ├── config // 配置类
│ ├── controller // 控制层
│ ├── dao // 数据访问层
│ ├── service // 业务逻辑层
│ └── util // 工具类
├── orchard-admin // 管理后台模块
└── orchard-mobile // 移动端接口模块
特别值得注意的是农事操作记录模块的设计,采用责任链模式处理不同类型的农事操作(施肥、喷药、修剪等),确保每种操作都有完整的审计日志。
这是系统的核心创新点,实现逻辑如下:
关键代码片段:
java复制// 溯源码生成服务
public class TraceCodeService {
private static final String CODE_FORMAT = "%03d-%s-%ty%tm%td";
public String generateCode(Orchard orchard, ProductBatch batch) {
return String.format(CODE_FORMAT,
orchard.getId(),
batch.getBatchNo(),
batch.getCreateTime());
}
}
采用状态机模式管理农事计划的生命周期:
code复制待分配 -> 已分配 -> 进行中 -> 已完成
↘ 已取消
数据库设计关键表:
sql复制CREATE TABLE `farm_work_plan` (
`id` bigint NOT NULL AUTO_INCREMENT,
`plot_id` bigint NOT NULL COMMENT '地块ID',
`operation_type` varchar(20) NOT NULL COMMENT '操作类型',
`plan_time` datetime NOT NULL COMMENT '计划时间',
`status` varchar(10) NOT NULL DEFAULT 'PENDING' COMMENT '状态',
`material_json` json DEFAULT NULL COMMENT '使用物料',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
系统内置常见农药的安全间隔期数据,在采收计划创建时会自动检查:
实现代码关键逻辑:
java复制public class SafetyIntervalChecker {
public CheckResult checkHarvestSafety(Long plotId, Date harvestDate) {
List<PesticideRecord> records = pesticideDao.queryLast30Days(plotId);
Date earliestDate = harvestDate;
for (PesticideRecord record : records) {
Material material = materialService.getById(record.getMaterialId());
Date safeDate = DateUtils.addDays(record.getOperationTime(),
material.getSafetyInterval());
if (safeDate.after(earliestDate)) {
earliestDate = safeDate;
}
}
return new CheckResult(earliestDate, harvestDate.before(earliestDate));
}
}
为解决果园现场记录难题,开发了微信小程序配套:
网络通信采用增量同步策略:
实测数据表明,200亩规模的果园建议配置:
Spring Boot关键配置:
yaml复制server:
tomcat:
max-threads: 200
min-spare-threads: 10
spring:
datasource:
hikari:
maximum-pool-size: 20
connection-timeout: 30000
典型慢SQL优化案例:
sql复制-- 优化前
EXPLAIN SELECT * FROM farm_work_record
WHERE plot_id = 123 AND operation_time > '2023-01-01';
-- 优化后(添加复合索引)
ALTER TABLE farm_work_record
ADD INDEX idx_plot_operation (plot_id, operation_time);
某猕猴桃种植基地应用效果:
系统截图示例:
典型报错场景:
优化方案:
关键配置:
java复制@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofHours(1))
.disableCachingNullValues();
return RedisCacheManager.builder(factory)
.cacheDefaults(config)
.build();
}
}
扩展思路:
设备数据示例:
json复制{
"deviceId": "TH-001",
"plotId": 5,
"metrics": {
"temperature": 25.6,
"humidity": 68,
"soilMoisture": 42
},
"timestamp": "2023-08-20T14:30:00Z"
}
实施路径:
智能合约示例:
javascript复制async function recordOperation(ctx, operationId, dataHash) {
const key = `op_${operationId}`;
await ctx.stub.putState(key, Buffer.from(dataHash));
}
这套系统在实际部署时有个小技巧:建议先选择1-2个品种进行试点运行,等工作人员熟悉系统后再全面推广。我们在某苹果园实施时发现,经过3周的适应期后,50岁以上的果园工人也能熟练使用移动端进行日常记录。