一、需求分析
随机抽检管理是小象买菜系统中的重要质量控制环节,主要功能包括:
1. 自动从订单/商品中随机抽取样本进行质量检查
2. 记录抽检结果并生成报告
3. 跟踪问题商品的处理流程
4. 提供抽检数据统计分析
二、系统架构设计
1. 数据库设计
```sql
-- 抽检任务表
CREATE TABLE inspection_tasks (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
task_name VARCHAR(100) NOT NULL,
task_type ENUM(order, product, supplier) NOT NULL,
sample_size INT NOT NULL,
status ENUM(pending, in_progress, completed, cancelled) DEFAULT pending,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
complete_time DATETIME,
creator_id BIGINT NOT NULL,
remark TEXT
);
-- 抽检样本表
CREATE TABLE inspection_samples (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
task_id BIGINT NOT NULL,
sample_type ENUM(order, product, batch) NOT NULL,
sample_id VARCHAR(50) NOT NULL,
sample_name VARCHAR(100) NOT NULL,
inspection_status ENUM(pending, passed, failed, rechecking) DEFAULT pending,
inspection_result TEXT,
inspector_id BIGINT,
inspection_time DATETIME,
FOREIGN KEY (task_id) REFERENCES inspection_tasks(id)
);
-- 抽检问题记录表
CREATE TABLE inspection_issues (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
sample_id BIGINT NOT NULL,
issue_type VARCHAR(50) NOT NULL,
issue_description TEXT NOT NULL,
severity ENUM(minor, major, critical) NOT NULL,
status ENUM(open, in_progress, resolved, closed) DEFAULT open,
handler_id BIGINT,
handle_time DATETIME,
solution TEXT,
FOREIGN KEY (sample_id) REFERENCES inspection_samples(id)
);
```
2. 核心模块设计
随机抽检算法模块
```java
public class RandomInspectionService {
// 从订单中随机抽检
public List
randomSelectOrders(int sampleSize) {
// 获取当日所有订单ID
List allOrderIds = orderRepository.findAllTodayOrderIds();
// 随机打乱顺序
Collections.shuffle(allOrderIds);
// 取前sampleSize个
List sampleIds = allOrderIds.subList(0, Math.min(sampleSize, allOrderIds.size()));
return orderRepository.findByIdIn(sampleIds);
}
// 从商品中随机抽检
public List randomSelectProducts(int sampleSize, String category) {
// 获取符合条件的商品ID
List productIds = productRepository.findProductIdsByCategory(category);
// 随机打乱顺序
Collections.shuffle(productIds);
// 取前sampleSize个
List sampleIds = productIds.subList(0, Math.min(sampleSize, productIds.size()));
return productRepository.findByIdIn(sampleIds);
}
}
```
抽检任务管理模块
```java
public class InspectionTaskService {
@Transactional
public InspectionTask createInspectionTask(InspectionTaskDTO dto) {
// 创建抽检任务
InspectionTask task = new InspectionTask();
task.setTaskName(dto.getTaskName());
task.setTaskType(dto.getTaskType());
task.setSampleSize(dto.getSampleSize());
task.setStatus("pending");
task.setCreatorId(dto.getCreatorId());
// 保存任务
InspectionTask savedTask = taskRepository.save(task);
// 根据任务类型抽取样本
List sampleIds = new ArrayList<>();
if ("order".equals(dto.getTaskType())) {
sampleIds = randomInspectionService.randomSelectOrders(dto.getSampleSize())
.stream().map(Order::getId).collect(Collectors.toList());
} else if ("product".equals(dto.getTaskType())) {
sampleIds = randomInspectionService.randomSelectProducts(dto.getSampleSize(), dto.getCategory())
.stream().map(Product::getId).collect(Collectors.toList());
}
// 创建样本记录
List samples = sampleIds.stream().map(id -> {
InspectionSample sample = new InspectionSample();
sample.setTaskId(savedTask.getId());
sample.setSampleType(dto.getTaskType());
sample.setSampleId(id.toString());
sample.setSampleName(dto.getTaskType().equals("order") ?
orderRepository.findById(id).getOrderNo() :
productRepository.findById(id).getName());
return sample;
}).collect(Collectors.toList());
sampleRepository.saveAll(samples);
return savedTask;
}
// 其他任务管理方法...
}
```
三、关键功能实现
1. 随机抽检算法
实现多种抽检策略:
- 简单随机抽样:使用Java的Collections.shuffle()方法
- 分层抽样:按商品类别、供应商等维度分层后抽样
- 时间加权抽样:近期订单/商品有更高抽中概率
```java
public class SamplingStrategy {
// 简单随机抽样
public List simpleRandomSampling(List population, int sampleSize) {
if (sampleSize >= population.size()) {
return new ArrayList<>(population);
}
List shuffled = new ArrayList<>(population);
Collections.shuffle(shuffled);
return shuffled.subList(0, sampleSize);
}
// 分层随机抽样(按类别)
public List stratifiedSampling(List products, int sampleSize, String category) {
List categoryProducts = products.stream()
.filter(p -> p.getCategory().equals(category))
.collect(Collectors.toList());
return simpleRandomSampling(categoryProducts, sampleSize);
}
}
```
2. 抽检结果记录与处理
```java
public class InspectionResultService {
public void recordInspectionResult(Long sampleId, String result, String inspectorId) {
InspectionSample sample = sampleRepository.findById(sampleId)
.orElseThrow(() -> new RuntimeException("Sample not found"));
sample.setInspectionResult(result);
sample.setInspectionStatus("completed");
sample.setInspectorId(inspectorId);
sample.setInspectionTime(LocalDateTime.now());
sampleRepository.save(sample);
// 如果抽检不合格,创建问题记录
if ("failed".equals(result)) {
InspectionIssue issue = new InspectionIssue();
issue.setSampleId(sampleId);
// 其他字段设置...
issueRepository.save(issue);
}
}
public List getOpenIssues() {
return issueRepository.findByStatusIn(Arrays.asList("open", "in_progress"));
}
}
```
3. 抽检统计与分析
```java
public class InspectionStatisticsService {
public InspectionStatsDTO getInspectionStats(Date startDate, Date endDate) {
// 抽检任务总数
long totalTasks = taskRepository.countByCreateTimeBetween(startDate, endDate);
// 完成的任务数
long completedTasks = taskRepository.countByCreateTimeBetweenAndStatus(
startDate, endDate, "completed");
// 抽检合格率
long passedSamples = sampleRepository.countByInspectionStatus("passed");
long totalSamples = sampleRepository.count();
double passRate = totalSamples > 0 ? (passedSamples * 100.0 / totalSamples) : 0;
// 问题分类统计
Map issueTypeCounts = issueRepository.groupByIssueType()
.stream().collect(Collectors.toMap(
IssueTypeCount::getIssueType,
IssueTypeCount::getCount
));
return new InspectionStatsDTO(
totalTasks, completedTasks, passRate, issueTypeCounts
);
}
}
```
四、前端界面设计
1. 抽检任务创建页面:
- 任务名称、类型选择(订单/商品/供应商)
- 抽样数量设置
- 商品类别筛选(如果选择商品抽检)
- 创建按钮
2. 抽检任务列表页面:
- 任务状态过滤
- 任务名称、创建时间、完成状态等列
- 操作列(查看详情、编辑、删除)
3. 抽检详情页面:
- 任务基本信息
- 样本列表(订单号/商品名、抽检状态、结果)
- 问题记录区域
- 抽检结果录入表单
4. 统计分析页面:
- 抽检合格率趋势图
- 问题分类饼图
- 抽检任务完成情况统计
五、系统集成与测试
1. 与订单系统集成:
- 实时获取订单数据用于抽检
- 抽检结果关联到具体订单
2. 与商品系统集成:
- 获取商品信息用于抽检
- 抽检结果影响商品状态
3. 测试用例:
- 随机性验证:多次运行抽检算法,验证样本分布
- 边界条件测试:样本量为0、大于总人口等
- 性能测试:大数据量下的抽检效率
- 异常处理测试:网络中断、数据不一致等情况
六、部署与运维
1. 部署方案:
- 抽检服务作为独立微服务部署
- 使用定时任务触发每日抽检
- 提供REST API供其他系统调用
2. 监控指标:
- 抽检任务完成率
- 平均抽检处理时间
- 抽检问题发现率
- 系统资源使用情况
3. 日志记录:
- 抽检任务创建日志
- 抽检结果变更日志
- 系统异常日志
七、扩展功能考虑
1. 智能抽检策略:
- 基于历史数据的风险评估抽检
- 供应商评级抽检(高风险供应商增加抽检频次)
2. 移动端支持:
- 抽检人员APP端操作
- 现场拍照上传功能
3. 区块链存证:
- 抽检结果上链确保不可篡改
4. AI辅助检测:
- 图像识别辅助商品质量检测
- 自然语言处理分析抽检描述
通过以上设计,小象买菜系统的随机抽检管理模块能够实现高效、公平、可追溯的质量控制流程,有效保障生鲜商品的质量安全。