feat(qms): 实现不合格品记录查询和统计功能

- 添加了不合格品记录的分页查询功能,包括按条件查询和日期范围查询
- 实现了不合格品的统计功能,包括总数、待评审数、已评审数等
- 优化了不合格品评审记录的生成逻辑
- 修复了一些代码格式和导入问题
master
zch 1 week ago
parent b16301a671
commit f73b17aeca

@ -9,6 +9,7 @@ import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.qms.domain.QcUnqualifiedReview;
import org.springframework.stereotype.Service;
import org.dromara.qms.domain.bo.QcUnqualifiedRecordBo;
import org.dromara.qms.domain.vo.QcUnqualifiedRecordVo;
@ -133,16 +134,35 @@ public class QcUnqualifiedRecordServiceImpl implements IQcUnqualifiedRecordServi
@Override
public TableDataInfo<QcUnqualifiedRecordVo> queryPageListWithDetails(QcUnqualifiedRecordBo bo, PageQuery pageQuery) {
return null;
MPJLambdaWrapper<QcUnqualifiedRecord> lqw = new MPJLambdaWrapper<>();
lqw.selectAll(QcUnqualifiedRecord.class)
.leftJoin(QcUnqualifiedReview.class, QcUnqualifiedReview::getReviewId, QcUnqualifiedRecord::getReviewId)
.select(QcUnqualifiedReview::getUnqualifiedNo, QcUnqualifiedReview::getReviewResult)
// 添加更多关联如果需要
.eq(bo.getRecordId() != null, QcUnqualifiedRecord::getRecordId, bo.getRecordId())
.eq(bo.getReviewId() != null, QcUnqualifiedRecord::getReviewId, bo.getReviewId())
.orderByDesc(QcUnqualifiedRecord::getCreateTime);
Page<QcUnqualifiedRecordVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
@Override
public TableDataInfo<QcUnqualifiedRecordVo> queryPageUserRecords(String reviewer, PageQuery pageQuery) {
return null;
QcUnqualifiedRecordBo bo = new QcUnqualifiedRecordBo();
// 假设QcUnqualifiedRecord有reviewer字段否则需关联
// bo.setReviewer(reviewer);
return queryPageListWithDetails(bo, pageQuery); // 或自定义
}
@Override
public TableDataInfo<QcUnqualifiedRecordVo> queryPageRecordsByDateRange(QcUnqualifiedRecordBo bo, PageQuery pageQuery) {
return null;
MPJLambdaWrapper<QcUnqualifiedRecord> lqw = buildQueryWrapper(bo);
Map<String, Object> params = bo.getParams();
if (params != null) {
lqw.ge(params.get("beginTime") != null, QcUnqualifiedRecord::getCreateTime, params.get("beginTime"))
.le(params.get("endTime") != null, QcUnqualifiedRecord::getCreateTime, params.get("endTime"));
}
Page<QcUnqualifiedRecordVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
}

@ -14,6 +14,7 @@ import org.dromara.qms.domain.QcInspectionMain;
import org.dromara.qms.domain.QcInspectionType;
import org.dromara.qms.domain.bo.QcInspectionMainBo;
import org.dromara.qms.domain.bo.QcInspectionResultBo;
import org.dromara.qms.domain.vo.QcInspectionMainVo;
import org.dromara.qms.domain.vo.QcInspectionResultVo;
import org.dromara.qms.service.IQcInspectionResultService;
import org.springframework.stereotype.Service;
@ -619,7 +620,7 @@ public class QcUnqualifiedReviewServiceImpl implements IQcUnqualifiedReviewServi
.leftJoin(QcInspectionMain.class, QcInspectionMain::getInspectionId, QcUnqualifiedReview::getInspectionId)
//关联检测类型
.select(QcInspectionType::getTypeName, QcInspectionType::getQcInspectionType, QcInspectionType::getTypeCode, QcInspectionType::getQcInspectionType)
.leftJoin(QcInspectionType.class, QcInspectionType::getTypeId, QcInspectionMain::getTypeId)
.leftJoin(QcInspectionType.class, QcInspectionType::getTypeId, QcUnqualifiedReview::getTypeId)
.eq(bo.getReviewId() != null, QcUnqualifiedReview::getReviewId, bo.getReviewId())
.eq(StringUtils.isNotBlank(bo.getUnqualifiedNo()), QcUnqualifiedReview::getUnqualifiedNo, bo.getUnqualifiedNo())
@ -690,4 +691,57 @@ public class QcUnqualifiedReviewServiceImpl implements IQcUnqualifiedReviewServi
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public Boolean autoGenerateUnqualifiedReview(QcInspectionMainVo inspectionVo, List<QcInspectionResultVo> inspectionResults) {
// 检查是否有不合格项
boolean hasUnqualified = inspectionResults.stream()
.anyMatch(result -> Long.valueOf(1).equals(result.getDetectResult()));
if (!hasUnqualified) {
log.info("无不合格项,无需生成评审记录: inspectionId={}", inspectionVo.getInspectionId());
return false;
}
QcUnqualifiedReviewBo bo = new QcUnqualifiedReviewBo();
bo.setInspectionId(inspectionVo.getInspectionId());
// bo.setTypeId(inspectionVo.getTypeId());
bo.setMaterialCode(inspectionVo.getMaterialCode());
bo.setMaterialName(inspectionVo.getMaterialName());
bo.setProcessName(inspectionVo.getProcessName());
bo.setWorkOrder(inspectionVo.getProductionOrder());
bo.setBatchNo(inspectionVo.getBatchNo());
bo.setInspectorResult(inspectionVo.getResult().toString());
// 生成唯一的不合格编号
String unqualifiedNo = generateUnqualifiedNo();
bo.setUnqualifiedNo(unqualifiedNo);
// 设置默认值
bo.setReviewResult(null); // 待评审
Boolean inserted = insertByBo(bo);
if (inserted) {
log.info("不合格品评审记录生成成功: reviewId={}, unqualifiedNo={}", bo.getReviewId(), unqualifiedNo);
} else {
log.error("不合格品评审记录生成失败: inspectionId={}", inspectionVo.getInspectionId());
}
return inserted;
}
/**
*
* : UNQ-yyyyMMdd-XXXX (XXXX4)
*/
private String generateUnqualifiedNo() {
LocalDate today = LocalDate.now();
String prefix = "UNQ-" + today.format(DateTimeFormatter.ofPattern("yyyyMMdd")) + "-";
// 查询当天已生成的记录数
long count = baseMapper.selectCount(Wrappers.<QcUnqualifiedReview>lambdaQuery()
.likeRight(QcUnqualifiedReview::getUnqualifiedNo, prefix));
// 生成序列号
String seq = String.format("%04d", count + 1);
return prefix + seq;
}
}

Loading…
Cancel
Save