一、需求分析 随机抽检管理是小象买菜系统质量管控的重要环节,主要功能包括: -自动随机选择待抽检的商品批次 -记录抽检过程和结果 -生成抽检报告 -触发后续处理流程(如合格入库、不合格处理等) 二、系统设计 1.数据库设计 ```sql --抽检批次表 C
一、需求分析
随机抽检管理是小象买菜系统质量管控的重要环节,主要功能包括:
- 自动随机选择待抽检的商品批次
- 记录抽检过程和结果
- 生成抽检报告
- 触发后续处理流程(如合格入库、不合格处理等)
二、系统设计
1. 数据库设计
```sql
-- 抽检批次表
CREATE TABLE inspection_batches (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
batch_no VARCHAR(32) NOT NULL COMMENT 抽检批次号,
inspection_type TINYINT NOT NULL COMMENT 抽检类型(1-入库抽检,2-出库抽检,3-定期抽检),
product_id BIGINT NOT NULL COMMENT 商品ID,
product_name VARCHAR(100) NOT NULL COMMENT 商品名称,
supplier_id BIGINT COMMENT 供应商ID,
batch_quantity INT NOT NULL COMMENT 批次总量,
sample_quantity INT NOT NULL COMMENT 抽样数量,
inspection_status TINYINT DEFAULT 0 COMMENT 抽检状态(0-待抽检,1-抽检中,2-合格,3-不合格),
create_time DATETIME NOT NULL COMMENT 创建时间,
inspector_id BIGINT COMMENT 抽检人员ID,
inspection_time DATETIME COMMENT 抽检时间,
report_url VARCHAR(255) COMMENT 检测报告URL,
remark VARCHAR(500) COMMENT 备注
);
-- 抽检项目表
CREATE TABLE inspection_items (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
batch_id BIGINT NOT NULL COMMENT 抽检批次ID,
item_name VARCHAR(100) NOT NULL COMMENT 检测项目名称,
standard_value VARCHAR(100) COMMENT 标准值/范围,
actual_value VARCHAR(100) COMMENT 实际检测值,
is_qualified TINYINT DEFAULT 0 COMMENT 是否合格(0-否,1-是),
item_order INT COMMENT 项目排序
);
-- 抽检历史记录表
CREATE TABLE inspection_history (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
batch_id BIGINT NOT NULL COMMENT 抽检批次ID,
operation_type TINYINT NOT NULL COMMENT 操作类型(1-创建,2-抽检,3-修改结果,4-审核),
operator_id BIGINT NOT NULL COMMENT 操作人ID,
operation_time DATETIME NOT NULL COMMENT 操作时间,
operation_content VARCHAR(500) COMMENT 操作内容
);
```
2. 核心功能设计
随机抽检算法
```java
public InspectionBatch generateRandomInspection(InspectionType type, int sampleRate) {
// 1. 根据抽检类型获取待抽检商品列表
List
candidateBatches = productBatchRepository.findByStatusAndType(
BatchStatus.AVAILABLE, type);
if (candidateBatches.isEmpty()) {
return null;
}
// 2. 随机选择一个批次
Random random = new Random();
ProductBatch selectedBatch = candidateBatches.get(
random.nextInt(candidateBatches.size()));
// 3. 计算抽样数量(按百分比或固定数量)
int sampleQuantity = calculateSampleQuantity(
selectedBatch.getQuantity(), sampleRate);
// 4. 创建抽检批次
InspectionBatch inspectionBatch = new InspectionBatch();
inspectionBatch.setBatchNo(generateBatchNo());
inspectionBatch.setInspectionType(type);
inspectionBatch.setProductId(selectedBatch.getProductId());
inspectionBatch.setProductName(selectedBatch.getProductName());
inspectionBatch.setSupplierId(selectedBatch.getSupplierId());
inspectionBatch.setBatchQuantity(selectedBatch.getQuantity());
inspectionBatch.setSampleQuantity(sampleQuantity);
inspectionBatch.setCreateTime(new Date());
inspectionBatch.setInspectionStatus(InspectionStatus.PENDING);
return inspectionBatchRepository.save(inspectionBatch);
}
private int calculateSampleQuantity(int totalQuantity, int sampleRate) {
// 实现抽样数量计算逻辑,可以是固定数量或百分比
// 示例:按5%抽样,最少抽1个
double rate = sampleRate / 100.0;
int sample = (int) Math.ceil(totalQuantity * rate);
return Math.max(sample, 1);
}
```
抽检流程控制
```java
public InspectionResult processInspection(Long batchId, InspectionData data) {
InspectionBatch batch = inspectionBatchRepository.findById(batchId)
.orElseThrow(() -> new BusinessException("抽检批次不存在"));
if (batch.getInspectionStatus() != InspectionStatus.PENDING) {
throw new BusinessException("当前批次状态不允许抽检");
}
// 1. 更新抽检状态为进行中
batch.setInspectionStatus(InspectionStatus.IN_PROGRESS);
batch.setInspectorId(data.getInspectorId());
batch.setInspectionTime(new Date());
inspectionBatchRepository.save(batch);
// 2. 保存检测项目结果
List items = new ArrayList<>();
for (InspectionItemDTO itemDto : data.getItems()) {
InspectionItem item = new InspectionItem();
item.setBatchId(batchId);
item.setItemName(itemDto.getItemName());
item.setStandardValue(itemDto.getStandardValue());
item.setActualValue(itemDto.getActualValue());
item.setIsQualified(itemDto.getActualValue().equals(itemDto.getStandardValue()) ? 1 : 0);
items.add(item);
}
inspectionItemRepository.saveAll(items);
// 3. 判断整体是否合格
boolean allQualified = items.stream().allMatch(i -> i.getIsQualified() == 1);
batch.setInspectionStatus(allQualified ? InspectionStatus.QUALIFIED : InspectionStatus.UNQUALIFIED);
inspectionBatchRepository.save(batch);
// 4. 记录操作历史
recordInspectionHistory(batchId, OperationType.INSPECTION,
data.getInspectorId(), "完成抽检,结果:" + (allQualified ? "合格" : "不合格"));
// 5. 触发后续处理流程
if (allQualified) {
// 合格处理
productBatchService.markAsQualified(batch.getProductId(), batch.getBatchNo());
} else {
// 不合格处理
qualityControlService.handleUnqualifiedBatch(batch);
}
return new InspectionResult(batch, allQualified);
}
```
三、前端实现要点
1. 抽检任务列表页面
- 显示待抽检、抽检中、已完成的任务
- 支持按商品、供应商、时间范围筛选
- 提供抽检操作入口
2. 抽检操作页面
```javascript
// 示例Vue组件
export default {
data() {
return {
batch: {},
inspectionItems: [
{ id: 1, name: 外观检查, standard: 无破损, actual: , qualified: null },
{ id: 2, name: 重量检测, standard: 500g±5g, actual: , qualified: null },
// 更多检测项目...
],
inspectorId: null
}
},
methods: {
async submitInspection() {
// 验证必填项
const hasEmpty = this.inspectionItems.some(item => !item.actual);
if (hasEmpty) {
this.$message.error(请填写所有检测项目的实际值);
return;
}
// 计算每个项目是否合格
const itemsData = this.inspectionItems.map(item => ({
itemName: item.name,
standardValue: item.standard,
actualValue: item.actual,
isQualified: item.actual === item.standard ? 1 : 0
}));
try {
await api.submitInspection({
batchId: this.batch.id,
inspectorId: this.inspectorId,
items: itemsData
});
this.$message.success(抽检提交成功);
this.$router.push(/inspection/list);
} catch (error) {
this.$message.error(提交失败: + error.message);
}
}
}
}
```
3. 抽检报告生成
- 使用ECharts或类似库生成可视化报告
- 包含抽检基本信息、各项目检测结果、合格率统计等
- 支持导出PDF格式
四、系统集成考虑
1. 与采购系统集成:
- 自动获取新入库商品批次信息
- 根据供应商评级调整抽检比例
2. 与仓储系统集成:
- 抽检合格后自动更新库存状态
- 抽检不合格时锁定相关批次
3. 与供应商系统集成:
- 自动通知供应商抽检结果
- 提供不合格批次整改入口
4. 与数据分析系统集成:
- 提供抽检数据接口
- 支持质量趋势分析
五、扩展功能建议
1. 智能抽检策略:
- 基于历史数据的风险评估
- 对高风险商品提高抽检比例
- 对优质供应商降低抽检频率
2. 移动端支持:
- 抽检人员使用移动设备现场操作
- 拍照上传功能
- 实时同步抽检数据
3. 区块链存证:
- 将抽检结果上链,确保不可篡改
- 提供可信的质量追溯
4. AI辅助检测:
- 图像识别用于外观检测
- 数据分析预测潜在质量问题
六、实施计划
1. 第一阶段(2周):
- 完成数据库设计和基础API开发
- 实现随机抽检算法
- 开发抽检任务管理页面
2. 第二阶段(3周):
- 实现完整抽检流程
- 开发抽检操作页面
- 集成仓储系统接口
3. 第三阶段(2周):
- 开发报告生成功能
- 实现移动端适配
- 完成系统测试
4. 第四阶段(1周):
- 用户培训
- 上线部署
- 收集反馈优化
通过以上设计和实现,小象买菜系统可以建立一个完善的随机抽检管理体系,有效保障商品质量,提升用户信任度。