refactor(qms): 重构质检模块代码

master
zch 3 days ago
parent c9dd53da27
commit 483297433f

@ -1,12 +1,15 @@
package org.dromara.qms.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.ArrayList;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.common.excel.core.DefaultExcelListener;
import org.dromara.common.excel.core.ExcelResult;
import org.springframework.beans.BeanUtils;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -22,18 +25,14 @@ import org.dromara.qms.domain.vo.QcInspectionMainVo;
import org.dromara.qms.domain.bo.QcInspectionMainBo;
import org.dromara.qms.service.IQcInspectionMainService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.http.MediaType;
import org.springframework.web.multipart.MultipartFile;
import org.dromara.common.excel.core.DefaultExcelListener;
import org.dromara.common.excel.core.ExcelResult;
import org.springframework.beans.BeanUtils;
/**
*
*
* 访:/qms/QcInspectionMain
*
* @author zch
* @date 2025-07-14
* @date 2025-07-24
*/
@Validated
@RequiredArgsConstructor
@ -44,7 +43,7 @@ public class QcInspectionMainController extends BaseController {
private final IQcInspectionMainService qcInspectionMainService;
/**
*
*
*/
@SaCheckPermission("qms:QcInspectionMain:list")
@GetMapping("/list")
@ -53,29 +52,30 @@ public class QcInspectionMainController extends BaseController {
}
/**
*
*
*/
@SaCheckPermission("qms:QcInspectionMain:export")
@Log(title = "质检主表", businessType = BusinessType.EXPORT)
@Log(title = "质检任务", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(QcInspectionMainBo bo, HttpServletResponse response) {
List<QcInspectionMainVo> list = qcInspectionMainService.queryList(bo);
ExcelUtil.exportExcel(list, "质检主表", QcInspectionMainVo.class, response);
ExcelUtil.exportExcel(list, "质检任务", QcInspectionMainVo.class, response);
}
/**
*
*
*/
@SaCheckPermission("qms:QcInspectionMain:export")
@Log(title = "质检主表", businessType = BusinessType.EXPORT)
@Log(title = "质检任务", businessType = BusinessType.EXPORT)
@PostMapping("/exportTemplate")
public void exportTemplate(HttpServletResponse response) {
public void exportTemplate(QcInspectionMainBo bo, HttpServletResponse response) {
List<QcInspectionMainVo> list = new ArrayList<>();
ExcelUtil.exportExcel(list, "质检结果", QcInspectionMainVo.class, response);
ExcelUtil.exportExcel(list, "质检任务", QcInspectionMainVo.class, response);
}
/**
*
*
*
* @param inspectionId
*/
@ -87,10 +87,10 @@ public class QcInspectionMainController extends BaseController {
}
/**
*
*
*/
@SaCheckPermission("qms:QcInspectionMain:add")
@Log(title = "质检主表", businessType = BusinessType.INSERT)
@Log(title = "质检任务", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody QcInspectionMainBo bo) {
@ -98,10 +98,10 @@ public class QcInspectionMainController extends BaseController {
}
/**
*
*
*/
@SaCheckPermission("qms:QcInspectionMain:edit")
@Log(title = "质检主表", businessType = BusinessType.UPDATE)
@Log(title = "质检任务", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody QcInspectionMainBo bo) {
@ -109,12 +109,12 @@ public class QcInspectionMainController extends BaseController {
}
/**
*
*
*
* @param inspectionIds
*/
@SaCheckPermission("qms:QcInspectionMain:remove")
@Log(title = "质检主表", businessType = BusinessType.DELETE)
@Log(title = "质检任务", businessType = BusinessType.DELETE)
@DeleteMapping("/{inspectionIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] inspectionIds) {
@ -123,7 +123,7 @@ public class QcInspectionMainController extends BaseController {
/**
*
*
*/
@GetMapping("/getQcInspectionMainList")

@ -1,13 +1,14 @@
package org.dromara.qms.controller;
import java.util.List;
import java.util.ArrayList;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.common.excel.core.DefaultExcelListener;
import org.dromara.common.excel.core.ExcelResult;
import org.springframework.beans.BeanUtils;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
@ -24,15 +25,14 @@ import org.dromara.qms.domain.vo.QcInspectionResultVo;
import org.dromara.qms.domain.bo.QcInspectionResultBo;
import org.dromara.qms.service.IQcInspectionResultService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.web.multipart.MultipartFile;
/**
*
* 访:/qms/qcInspectionResult
*
* @author Yinq
* @date 2025-07-14
* @author zch
* @date 2025-07-24
*/
@Validated
@RequiredArgsConstructor
@ -62,6 +62,18 @@ public class QcInspectionResultController extends BaseController {
ExcelUtil.exportExcel(list, "质检结果子表", QcInspectionResultVo.class, response);
}
/**
*
*/
@SaCheckPermission("qms:qcInspectionResult:export")
@Log(title = "质检结果子表", businessType = BusinessType.EXPORT)
@PostMapping("/exportTemplate")
public void exportTemplate(QcInspectionResultBo bo, HttpServletResponse response) {
List<QcInspectionResultVo> list = new ArrayList<>();
ExcelUtil.exportExcel(list, "质检结果子表", QcInspectionResultVo.class, response);
}
/**
*
*

@ -4,7 +4,6 @@ import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@ -12,10 +11,10 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* qc_inspection_main
* qc_inspection_main
*
* @author zch
* @date 2025-07-14
* @date 2025-07-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ -36,6 +35,11 @@ public class QcInspectionMain extends TenantEntity {
*/
private String inspectionNo;
/**
* ID
*/
private Long templateId;
/**
*
*/
@ -87,9 +91,9 @@ public class QcInspectionMain extends TenantEntity {
private String workshop;
/**
*
* /
*/
private Long typeId;
private Long inspectionType;
/**
* 0/1
@ -148,24 +152,4 @@ public class QcInspectionMain extends TenantEntity {
private String delFlag;
/**
*
*/
@TableField(exist = false)
private String typeCode;//JOIN
/**
*
*/
@TableField(exist = false)
private String typeName;//JOIN
/**
* (
*/
@TableField(exist = false)
private Long qcInspectionType;//JOIN
}

@ -11,8 +11,8 @@ import java.io.Serial;
/**
* qc_inspection_result
*
* @author Yinq
* @date 2025-07-14
* @author zch
* @date 2025-07-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ -58,6 +58,76 @@ public class QcInspectionResult extends TenantEntity {
*/
private String problemDetail;
/**
*
*/
private String itemCode;
/**
*
*/
private String itemName;
/**
*
*/
private String inspectionPosition;
/**
*
*/
private String categoryName;
/**
*
*/
private Long typeId;
/**
* 0,1
*/
private Long detectType;
/**
* (0,1)
*/
private Long controlType;
/**
*
*/
private BigDecimal standardValue;
/**
*
*/
private BigDecimal upperLimit;
/**
*
*/
private BigDecimal lowerLimit;
/**
*
*/
private String specName;
/**
*
*/
private BigDecimal specUpper;
/**
*
*/
private BigDecimal specLower;
/**
*
*/
private String description;
/**
* 02
*/

@ -8,16 +8,15 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* qc_inspection_main
* qc_inspection_main
*
* @author zch
* @date 2025-07-14
* @date 2025-07-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ -27,7 +26,6 @@ public class QcInspectionMainBo extends BaseEntity {
/**
*
*/
// @NotNull(message = "质检主键不能为空", groups = { AddGroup.class, EditGroup.class })
private Long inspectionId;
/**
@ -35,6 +33,11 @@ public class QcInspectionMainBo extends BaseEntity {
*/
private String inspectionNo;
/**
* ID
*/
private Long templateId;
/**
*
*/
@ -86,9 +89,9 @@ public class QcInspectionMainBo extends BaseEntity {
private String workshop;
/**
*
* /
*/
private Long typeId;
private Long inspectionType;
/**
* 0/1
@ -141,19 +144,4 @@ public class QcInspectionMainBo extends BaseEntity {
private String remark;
/**
*
*/
private String typeCode;//JOIN
/**
*
*/
private String typeName;//JOIN
/**
* (
*/
private Long qcInspectionType;//JOIN
}

@ -13,8 +13,8 @@ import java.math.BigDecimal;
/**
* qc_inspection_result
*
* @author Yinq
* @date 2025-07-14
* @author zch
* @date 2025-07-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ -24,7 +24,6 @@ public class QcInspectionResultBo extends BaseEntity {
/**
*
*/
// @NotNull(message = "结果主键不能为空", groups = { AddGroup.class, EditGroup.class })
private Long resultId;
/**
@ -57,5 +56,75 @@ public class QcInspectionResultBo extends BaseEntity {
*/
private String problemDetail;
/**
*
*/
private String itemCode;
/**
*
*/
private String itemName;
/**
*
*/
private String inspectionPosition;
/**
*
*/
private String categoryName;
/**
*
*/
private Long typeId;
/**
* 0,1
*/
private Long detectType;
/**
* (0,1)
*/
private Long controlType;
/**
*
*/
private BigDecimal standardValue;
/**
*
*/
private BigDecimal upperLimit;
/**
*
*/
private BigDecimal lowerLimit;
/**
*
*/
private String specName;
/**
*
*/
private BigDecimal specUpper;
/**
*
*/
private BigDecimal specLower;
/**
*
*/
private String description;
}

@ -2,7 +2,6 @@ package org.dromara.qms.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.qms.domain.QcInspectionMain;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
@ -19,12 +18,11 @@ import java.util.Date;
/**
* qc_inspection_main
* qc_inspection_main
*
* @author zch
* @date 2025-07-14
* @date 2025-07-24
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = QcInspectionMain.class)
@ -36,7 +34,7 @@ public class QcInspectionMainVo implements Serializable {
/**
*
*/
// @ExcelProperty(value = "质检主键")
@ExcelProperty(value = "质检主键")
private Long inspectionId;
/**
@ -45,6 +43,12 @@ public class QcInspectionMainVo implements Serializable {
@ExcelProperty(value = "检测单号/卡号")
private String inspectionNo;
/**
* ID
*/
@ExcelProperty(value = "关联模板主表ID")
private Long templateId;
/**
*
*/
@ -107,10 +111,11 @@ public class QcInspectionMainVo implements Serializable {
private String workshop;
/**
*
* /
*/
@ExcelProperty(value = "检测类型主键")
private Long typeId;
@ExcelProperty(value = "检验类别", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "qc_inspection_type")
private Long inspectionType;
/**
* 0/1
@ -174,83 +179,4 @@ public class QcInspectionMainVo implements Serializable {
private String remark;
/**
*
*/
private String typeCode;//JOIN
/**
*
*/
private String typeName;//JOIN
/**
* (
*/
private Long qcInspectionType;//JOIN
// ========== PDA专用字段 ==========
/**
*
*/
private List<QcInspectionItemDetailVo> inspectionItems;
/**
* /
*/
private String resultText;
/**
* /
*/
private String statusText;
/**
*
*/
private String inspectionTypeText;
/**
*
*/
private BigDecimal qualifiedRate;
/**
*
*/
private Boolean hasUnqualifiedItems;
/**
*
*/
private Integer totalItemCount;
/**
*
*/
private Integer completedItemCount;
/**
*
*/
private BigDecimal inspectionProgress;
/**
*
*/
private Boolean canSubmit;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}

@ -18,8 +18,8 @@ import java.util.Date;
/**
* qc_inspection_result
*
* @author Yinq
* @date 2025-07-14
* @author zch
* @date 2025-07-24
*/
@Data
@ExcelIgnoreUnannotated
@ -72,5 +72,103 @@ public class QcInspectionResultVo implements Serializable {
@ExcelProperty(value = "定性不合格明细")
private String problemDetail;
/**
*
*/
@ExcelProperty(value = "检测项编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private String itemCode;
/**
*
*/
@ExcelProperty(value = "检测项名称", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private String itemName;
/**
*
*/
@ExcelProperty(value = "检测位置", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private String inspectionPosition;
/**
*
*/
@ExcelProperty(value = "检测项目类别", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private String categoryName;
/**
*
*/
@ExcelProperty(value = "关联检测类型表", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private Long typeId;
/**
* 0,1
*/
@ExcelProperty(value = "检测方式", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "detect_type")
private Long detectType;
/**
* (0,1)
*/
@ExcelProperty(value = "控制类型(0手动,1自动)", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "control_type")
private Long controlType;
/**
*
*/
@ExcelProperty(value = "标准值", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private BigDecimal standardValue;
/**
*
*/
@ExcelProperty(value = "控制上限", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private BigDecimal upperLimit;
/**
*
*/
@ExcelProperty(value = "控制下限", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private BigDecimal lowerLimit;
/**
*
*/
@ExcelProperty(value = "规格名称", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private String specName;
/**
*
*/
@ExcelProperty(value = "规格上限", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private BigDecimal specUpper;
/**
*
*/
@ExcelProperty(value = "规格下限", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private BigDecimal specLower;
/**
*
*/
@ExcelProperty(value = "检测项说明", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "快=照")
private String description;
}

@ -8,26 +8,26 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List;
/**
* Mapper
* Mapper
*
* @author zch
* @date 2025-07-14
* @date 2025-07-24
*/
public interface QcInspectionMainMapper extends BaseMapperPlus<QcInspectionMain, QcInspectionMainVo> {
/**
*
*
*
* @param bo
* @return
* @return
*/
List<QcInspectionMainVo> selectQcInspectionMainList(QcInspectionMainBo bo);
/**
*
*
*
* @param inspectionId
* @return
* @return
*/
QcInspectionMainVo selectQcInspectionMainByInspectionId(Long inspectionId);

@ -10,8 +10,8 @@ import java.util.List;
/**
* Mapper
*
* @author Yinq
* @date 2025-07-14
* @author zch
* @date 2025-07-24
*/
public interface QcInspectionResultMapper extends BaseMapperPlus<QcInspectionResult, QcInspectionResultVo> {

@ -9,54 +9,34 @@ import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.qms.domain.QcInspectionTemplate;
import org.dromara.qms.domain.QcInspectionType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.dromara.qms.domain.bo.QcInspectionMainBo;
import org.dromara.qms.domain.vo.QcInspectionMainVo;
import org.dromara.qms.domain.QcInspectionMain;
import org.dromara.qms.mapper.QcInspectionMainMapper;
import org.dromara.qms.service.IQcInspectionMainService;
import org.dromara.qms.service.IQcUnqualifiedReviewService;
import org.dromara.qms.service.IQcInspectionResultService;
import org.dromara.qms.domain.QcInspectionResult;
import org.dromara.qms.domain.vo.QcInspectionResultVo;
import org.dromara.qms.domain.vo.QcInspectionItemDetailVo;
import org.dromara.qms.domain.bo.QcUnqualifiedReviewBo;
import org.dromara.qms.domain.bo.QcInspectionResultBo;
import org.dromara.qms.utils.QcInspectionResultCalculator;
import org.dromara.common.satoken.utils.LoginHelper;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Date;
import java.util.ArrayList;
/**
* Service
* Service
*
* @author zch
* @date 2025-07-14
* @date 2025-07-24
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class QcInspectionMainServiceImpl implements IQcInspectionMainService {
private final QcInspectionMainMapper baseMapper;
private final IQcUnqualifiedReviewService qcUnqualifiedReviewService;
private final IQcInspectionResultService qcInspectionResultService;
private final QcUnqualifiedGeneratorService qcUnqualifiedGeneratorService;
/**
*
*
*
* @param inspectionId
* @return
* @return
*/
@Override
public QcInspectionMainVo queryById(Long inspectionId){
@ -64,11 +44,11 @@ public class QcInspectionMainServiceImpl implements IQcInspectionMainService {
}
/**
*
*
*
* @param bo
* @param pageQuery
* @return
* @return
*/
@Override
public TableDataInfo<QcInspectionMainVo> queryPageList(QcInspectionMainBo bo, PageQuery pageQuery) {
@ -78,10 +58,10 @@ public class QcInspectionMainServiceImpl implements IQcInspectionMainService {
}
/**
*
*
*
* @param bo
* @return
* @return
*/
@Override
public List<QcInspectionMainVo> queryList(QcInspectionMainBo bo) {
@ -93,13 +73,9 @@ public class QcInspectionMainServiceImpl implements IQcInspectionMainService {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<QcInspectionMain> lqw = JoinWrappers.lambda(QcInspectionMain.class)
.selectAll(QcInspectionMain.class)
//关联检测类型
.select(QcInspectionType::getTypeName, QcInspectionType::getQcInspectionType, QcInspectionType::getTypeCode)
.leftJoin(QcInspectionType.class, QcInspectionType::getTypeId, QcInspectionMain::getTypeId)
.eq(bo.getInspectionId() != null, QcInspectionMain::getInspectionId, bo.getInspectionId())
.eq(bo.getInspectionId() != null, QcInspectionMain::getInspectionId, bo.getInspectionId())
.eq(StringUtils.isNotBlank(bo.getInspectionNo()), QcInspectionMain::getInspectionNo, bo.getInspectionNo())
.eq(bo.getTemplateId() != null, QcInspectionMain::getTemplateId, bo.getTemplateId())
.eq(StringUtils.isNotBlank(bo.getMaterialCode()), QcInspectionMain::getMaterialCode, bo.getMaterialCode())
.eq(StringUtils.isNotBlank(bo.getMaterialType()), QcInspectionMain::getMaterialType, bo.getMaterialType())
.like(StringUtils.isNotBlank(bo.getMaterialName()), QcInspectionMain::getMaterialName, bo.getMaterialName())
@ -110,7 +86,7 @@ public class QcInspectionMainServiceImpl implements IQcInspectionMainService {
.eq(bo.getUnqualifiedQty() != null, QcInspectionMain::getUnqualifiedQty, bo.getUnqualifiedQty())
.eq(bo.getResult() != null, QcInspectionMain::getResult, bo.getResult())
.eq(StringUtils.isNotBlank(bo.getWorkshop()), QcInspectionMain::getWorkshop, bo.getWorkshop())
.eq(bo.getTypeId() != null, QcInspectionMain::getTypeId, bo.getTypeId())
.eq(bo.getInspectionType() != null, QcInspectionMain::getInspectionType, bo.getInspectionType())
.eq(bo.getStatus() != null, QcInspectionMain::getStatus, bo.getStatus())
.eq(StringUtils.isNotBlank(bo.getInspector()), QcInspectionMain::getInspector, bo.getInspector())
.eq(StringUtils.isNotBlank(bo.getShift()), QcInspectionMain::getShift, bo.getShift())
@ -125,9 +101,9 @@ public class QcInspectionMainServiceImpl implements IQcInspectionMainService {
}
/**
*
*
*
* @param bo
* @param bo
* @return
*/
@Override
@ -142,9 +118,9 @@ public class QcInspectionMainServiceImpl implements IQcInspectionMainService {
}
/**
*
*
*
* @param bo
* @param bo
* @return
*/
@Override
@ -162,7 +138,7 @@ public class QcInspectionMainServiceImpl implements IQcInspectionMainService {
}
/**
*
*
*
* @param ids
* @param isValid
@ -175,207 +151,4 @@ public class QcInspectionMainServiceImpl implements IQcInspectionMainService {
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* (for PDA)
*
*/
@Override
public TableDataInfo<QcInspectionMainVo> queryPageUnprocessedTasks(QcInspectionMainBo bo, PageQuery pageQuery) {
// 设置查询条件:只查询未处理的任务
bo.setStatus(0L); // 单据状态0未处理/1完成
return queryPageList(bo, pageQuery);
}
/**
* (for PDA)
*
*/
@Override
public QcInspectionMainVo queryByIdWithResults(Long inspectionId) {
QcInspectionMainVo mainVo = queryById(inspectionId);
if (mainVo != null) {
// 查询关联的检测项结果明细
QcInspectionResultBo resultBo = new QcInspectionResultBo();
resultBo.setInspectionId(inspectionId);
List<QcInspectionResultVo> results = qcInspectionResultService.queryList(resultBo);
// 将检测项结果设置到主表VO中
// 注意这里假设QcInspectionMainVo有results字段如果没有需要添加
// mainVo.setResults(results);
}
return mainVo;
}
/**
* (for PDA)
*
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean submitInspectionResult(QcInspectionMainBo bo) {
try {
// 1. 验证质检数据的完整性
if (!validateInspectionData(bo)) {
log.error("质检数据验证失败: {}", bo.getInspectionId());
return false;
}
// 2. 查询检测项数据
List<QcInspectionItemDetailVo> inspectionItems = getInspectionItems(bo.getInspectionId());
// 3. 计算检测项结果状态
Long overallResult = QcInspectionResultCalculator.calculateOverallResult(inspectionItems);
// 4. 更新质检主表结果
bo.setResult(overallResult);
bo.setStatus(1L); // 设置为已完成
bo.setInspectionTime(new Date());
bo.setUpdateBy(LoginHelper.getUserId());
bo.setUpdateTime(new Date());
// 计算合格数和不合格数
calculateQualifiedQuantities(bo, inspectionItems);
Boolean updated = updateByBo(bo);
if (!updated) {
log.error("更新质检主表失败: {}", bo.getInspectionId());
return false;
}
// 5. 如果存在不合格项,自动生成不合格品评审任务
if (QcInspectionResultCalculator.RESULT_STATUS_UNQUALIFIED.equals(overallResult)) {
QcInspectionMainVo inspectionVo = queryById(bo.getInspectionId());
Boolean generated = qcUnqualifiedGeneratorService.autoGenerateUnqualifiedReview(inspectionVo, inspectionItems);
if (!generated) {
log.warn("生成不合格品评审任务失败,但质检结果已保存: {}", bo.getInspectionId());
}
}
log.info("质检结果提交成功: 任务ID={}, 结果={}", bo.getInspectionId(),
overallResult == 0 ? "合格" : "不合格");
return true;
} catch (Exception e) {
log.error("提交质检结果异常: {}", bo.getInspectionId(), e);
throw e; // 让事务回滚
}
}
/**
* (for PDA)
*/
@Override
public TableDataInfo<QcInspectionMainVo> queryPageTaskHistory(QcInspectionMainBo bo, PageQuery pageQuery) {
// 设置查询条件:只查询已完成的任务
bo.setStatus(1L); // 单据状态0未处理/1完成
return queryPageList(bo, pageQuery);
}
/**
* (for PDA)
*/
@Override
public TableDataInfo<QcInspectionMainVo> queryPageUserTasks(String inspector, PageQuery pageQuery) {
QcInspectionMainBo bo = new QcInspectionMainBo();
//TODO:考虑质检人是填id还是name
bo.setInspector(inspector);
return queryPageList(bo, pageQuery);
}
/**
* (for PDA)
*/
@Override
public Boolean validateInspectionData(QcInspectionMainBo bo) {
QcInspectionResultCalculator.ValidationResult result = QcInspectionResultCalculator.validateInspectionData(bo);
if (result.hasErrors()) {
log.warn("质检数据验证失败: {}, 错误: {}", bo.getInspectionId(), result.getErrors());
return false;
}
// 验证检测项数据
List<QcInspectionItemDetailVo> inspectionItems = getInspectionItems(bo.getInspectionId());
QcInspectionResultCalculator.ValidationResult itemsResult = QcInspectionResultCalculator.validateInspectionItems(inspectionItems);
if (itemsResult.hasErrors()) {
log.warn("检测项数据验证失败: {}, 错误: {}", bo.getInspectionId(), itemsResult.getErrors());
return false;
}
return true;
}
/**
*
*
*/
private List<QcInspectionItemDetailVo> getInspectionItems(Long inspectionId) {
// 这里应该查询检测项明细数据
// 由于没有具体的检测项明细表结构,这里返回空列表
// 实际实现中需要根据具体的表结构来查询
try {
QcInspectionResultBo resultBo = new QcInspectionResultBo();
resultBo.setInspectionId(inspectionId);
List<QcInspectionResultVo> results = qcInspectionResultService.queryList(resultBo);
// 将QcInspectionResultVo转换为QcInspectionItemDetailVo
List<QcInspectionItemDetailVo> items = new ArrayList<>();
for (QcInspectionResultVo result : results) {
QcInspectionItemDetailVo item = convertToItemDetail(result);
items.add(item);
}
return items;
} catch (Exception e) {
log.error("获取检测项数据失败: {}", inspectionId, e);
return new ArrayList<>();
}
}
/**
* QcInspectionResultVoQcInspectionItemDetailVo
*/
private QcInspectionItemDetailVo convertToItemDetail(QcInspectionResultVo result) {
QcInspectionItemDetailVo item = new QcInspectionItemDetailVo();
// 这里需要根据实际的字段映射来转换
// 由于没有看到QcInspectionResultVo的具体结构这里只是示例
item.setItemId(result.getResultId());
// item.setItemCode(result.getItemCode());
// item.setItemName(result.getItemName());
// ... 其他字段映射
return item;
}
/**
*
*/
private void calculateQualifiedQuantities(QcInspectionMainBo bo, List<QcInspectionItemDetailVo> inspectionItems) {
if (inspectionItems == null || inspectionItems.isEmpty()) {
return;
}
// 计算不合格项数量
long unqualifiedCount = inspectionItems.stream()
.filter(item -> QcInspectionResultCalculator.RESULT_STATUS_UNQUALIFIED.equals(
QcInspectionResultCalculator.calculateItemResultStatus(item)))
.count();
BigDecimal unqualifiedCountBigDecimal = BigDecimal.valueOf(unqualifiedCount);
// 设置不合格数量
bo.setUnqualifiedQty(unqualifiedCountBigDecimal);
// 计算合格数量(总检测数量 - 不合格数量)
BigDecimal totalQty = bo.getInspectionQty();
if (totalQty != null) {
// bo.setQualifiedQty(totalQty - unqualifiedCount);
BigDecimal subtract = totalQty.subtract(unqualifiedCountBigDecimal);
bo.setQualifiedQty(subtract);
}
}
}

@ -23,8 +23,8 @@ import java.util.Collection;
/**
* Service
*
* @author Yinq
* @date 2025-07-14
* @author zch
* @date 2025-07-24
*/
@RequiredArgsConstructor
@Service
@ -80,6 +80,20 @@ public class QcInspectionResultServiceImpl implements IQcInspectionResultService
.eq(bo.getDetectValue() != null, QcInspectionResult::getDetectValue, bo.getDetectValue())
.eq(StringUtils.isNotBlank(bo.getSpecInspection()), QcInspectionResult::getSpecInspection, bo.getSpecInspection())
.eq(StringUtils.isNotBlank(bo.getProblemDetail()), QcInspectionResult::getProblemDetail, bo.getProblemDetail())
.eq(StringUtils.isNotBlank(bo.getItemCode()), QcInspectionResult::getItemCode, bo.getItemCode())
.like(StringUtils.isNotBlank(bo.getItemName()), QcInspectionResult::getItemName, bo.getItemName())
.eq(StringUtils.isNotBlank(bo.getInspectionPosition()), QcInspectionResult::getInspectionPosition, bo.getInspectionPosition())
.like(StringUtils.isNotBlank(bo.getCategoryName()), QcInspectionResult::getCategoryName, bo.getCategoryName())
.eq(bo.getTypeId() != null, QcInspectionResult::getTypeId, bo.getTypeId())
.eq(bo.getDetectType() != null, QcInspectionResult::getDetectType, bo.getDetectType())
.eq(bo.getControlType() != null, QcInspectionResult::getControlType, bo.getControlType())
.eq(bo.getStandardValue() != null, QcInspectionResult::getStandardValue, bo.getStandardValue())
.eq(bo.getUpperLimit() != null, QcInspectionResult::getUpperLimit, bo.getUpperLimit())
.eq(bo.getLowerLimit() != null, QcInspectionResult::getLowerLimit, bo.getLowerLimit())
.like(StringUtils.isNotBlank(bo.getSpecName()), QcInspectionResult::getSpecName, bo.getSpecName())
.eq(bo.getSpecUpper() != null, QcInspectionResult::getSpecUpper, bo.getSpecUpper())
.eq(bo.getSpecLower() != null, QcInspectionResult::getSpecLower, bo.getSpecLower())
.eq(StringUtils.isNotBlank(bo.getDescription()), QcInspectionResult::getDescription, bo.getDescription())
.orderByDesc(QcInspectionResult::getCreateTime);
return lqw;
}

@ -4,9 +4,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.qms.mapper.QcInspectionMainMapper">
<resultMap type="QcInspectionMain" id="QcInspectionMainResult">
<resultMap type="org.dromara.qms.domain.vo.QcInspectionMainVo" id="QcInspectionMainResult">
<result property="inspectionId" column="inspection_id" />
<result property="inspectionNo" column="inspection_no" />
<result property="templateId" column="template_id" />
<result property="materialCode" column="material_code" />
<result property="materialType" column="material_type" />
<result property="materialName" column="material_name" />
@ -17,7 +18,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="unqualifiedQty" column="unqualified_qty" />
<result property="result" column="result" />
<result property="workshop" column="workshop" />
<result property="typeId" column="type_id" />
<result property="inspectionType" column="inspection_type" />
<result property="status" column="status" />
<result property="inspector" column="inspector" />
<result property="shift" column="shift" />
@ -31,7 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectQcInspectionMainVo">
select inspection_id, tenant_id, inspection_no, material_code, material_type, material_name, process_name, station_name, inspection_qty, qualified_qty, unqualified_qty, result, workshop, type_id, status, inspector, shift, team, inspection_time, production_order, batch_no, barcode, supplier_name, remark, create_dept, create_by, create_time, update_by, update_time, del_flag
select inspection_id, tenant_id, inspection_no, template_id, material_code, material_type, material_name, process_name, station_name, inspection_qty, qualified_qty, unqualified_qty, result, workshop, inspection_type, status, inspector, shift, team, inspection_time, production_order, batch_no, barcode, supplier_name, remark, create_dept, create_by, create_time, update_by, update_time, del_flag
from qc_inspection_main
</sql>
@ -40,6 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where>
<if test="inspectionId != null "> and inspection_id = #{inspectionId}</if>
<if test="inspectionNo != null and inspectionNo != ''"> and inspection_no = #{inspectionNo}</if>
<if test="templateId != null "> and template_id = #{templateId}</if>
<if test="materialCode != null and materialCode != ''"> and material_code = #{materialCode}</if>
<if test="materialType != null and materialType != ''"> and material_type = #{materialType}</if>
<if test="materialName != null and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
@ -50,7 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="unqualifiedQty != null "> and unqualified_qty = #{unqualifiedQty}</if>
<if test="result != null "> and result = #{result}</if>
<if test="workshop != null and workshop != ''"> and workshop = #{workshop}</if>
<if test="typeId != null "> and type_id = #{typeId}</if>
<if test="inspectionType != null "> and inspection_type = #{inspectionType}</if>
<if test="status != null "> and status = #{status}</if>
<if test="inspector != null and inspector != ''"> and inspector = #{inspector}</if>
<if test="shift != null and shift != ''"> and shift = #{shift}</if>
@ -67,7 +69,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectQcInspectionMainByInspectionId" parameterType="Long" resultMap="QcInspectionMainResult">
<include refid="selectQcInspectionMainVo"/>
where inspection_id = #{inspectionId}
AND del_flag = '0'
</select>
</mapper>

@ -4,7 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.qms.mapper.QcInspectionResultMapper">
<resultMap type="QcInspectionResult" id="QcInspectionResultResult">
<resultMap type="org.dromara.qms.domain.vo.QcInspectionResultVo" id="QcInspectionResultResult">
<result property="resultId" column="result_id" />
<result property="inspectionId" column="inspection_id" />
<result property="itemId" column="item_id" />
@ -12,10 +12,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="detectValue" column="detect_value" />
<result property="specInspection" column="spec_inspection" />
<result property="problemDetail" column="problem_detail" />
<result property="itemCode" column="item_code" />
<result property="itemName" column="item_name" />
<result property="inspectionPosition" column="inspection_position" />
<result property="categoryName" column="category_name" />
<result property="typeId" column="type_id" />
<result property="detectType" column="detect_type" />
<result property="controlType" column="control_type" />
<result property="standardValue" column="standard_value" />
<result property="upperLimit" column="upper_limit" />
<result property="lowerLimit" column="lower_limit" />
<result property="specName" column="spec_name" />
<result property="specUpper" column="spec_upper" />
<result property="specLower" column="spec_lower" />
<result property="description" column="description" />
</resultMap>
<sql id="selectQcInspectionResultVo">
select result_id, tenant_id, inspection_id, item_id, detect_result, detect_value, spec_inspection, problem_detail, create_dept, create_by, create_time, update_by, update_time, del_flag
select result_id, tenant_id, inspection_id, item_id, detect_result, detect_value, spec_inspection, problem_detail, item_code, item_name, inspection_position, category_name, type_id, detect_type, control_type, standard_value, upper_limit, lower_limit, spec_name, spec_upper, spec_lower, description, create_dept, create_by, create_time, update_by, update_time, del_flag
from qc_inspection_result
</sql>
@ -29,6 +43,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="detectValue != null "> and detect_value = #{detectValue}</if>
<if test="specInspection != null and specInspection != ''"> and spec_inspection = #{specInspection}</if>
<if test="problemDetail != null and problemDetail != ''"> and problem_detail = #{problemDetail}</if>
<if test="itemCode != null and itemCode != ''"> and item_code = #{itemCode}</if>
<if test="itemName != null and itemName != ''"> and item_name like concat('%', #{itemName}, '%')</if>
<if test="inspectionPosition != null and inspectionPosition != ''"> and inspection_position = #{inspectionPosition}</if>
<if test="categoryName != null and categoryName != ''"> and category_name like concat('%', #{categoryName}, '%')</if>
<if test="typeId != null "> and type_id = #{typeId}</if>
<if test="detectType != null "> and detect_type = #{detectType}</if>
<if test="controlType != null "> and control_type = #{controlType}</if>
<if test="standardValue != null "> and standard_value = #{standardValue}</if>
<if test="upperLimit != null "> and upper_limit = #{upperLimit}</if>
<if test="lowerLimit != null "> and lower_limit = #{lowerLimit}</if>
<if test="specName != null and specName != ''"> and spec_name like concat('%', #{specName}, '%')</if>
<if test="specUpper != null "> and spec_upper = #{specUpper}</if>
<if test="specLower != null "> and spec_lower = #{specLower}</if>
<if test="description != null and description != ''"> and description = #{description}</if>
</where>
AND del_flag = '0'
</select>
@ -36,7 +64,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectQcInspectionResultByResultId" parameterType="Long" resultMap="QcInspectionResultResult">
<include refid="selectQcInspectionResultVo"/>
where result_id = #{resultId}
AND del_flag = '0'
</select>
</mapper>

Loading…
Cancel
Save