From 2dbebce0af5320aaac6213352ab767c9dde726c0 Mon Sep 17 00:00:00 2001 From: shenzhouyu Date: Thu, 30 Apr 2026 10:38:53 +0800 Subject: [PATCH] =?UTF-8?q?qms=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/pms/controller/QcController.java | 18 +++ .../com/heai/modules/pms/mapper/QcMapper.java | 12 ++ .../pms/service/Impl/QcServiceImpl.java | 153 +++++++++++++++++- .../heai/modules/pms/service/QcService.java | 6 + src/main/resources/mapper/pms/QcMapper.xml | 102 ++++++++++++ 5 files changed, 289 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/heai/modules/pms/controller/QcController.java b/src/main/java/com/heai/modules/pms/controller/QcController.java index 7335f66..accba71 100644 --- a/src/main/java/com/heai/modules/pms/controller/QcController.java +++ b/src/main/java/com/heai/modules/pms/controller/QcController.java @@ -1613,6 +1613,24 @@ public class QcController { return R.ok(); } + @PostMapping("/faiRecordOverLoad") + public R faiRecordOverLoad(@RequestBody QcFAIRecordData data){ + qcService.faiRecordOverLoad(data); + return R.ok(); + } + + @PostMapping("/ipqcRecordOverLoad") + public R ipqcRecordOverLoad(@RequestBody QcFAIRecordData data){ + qcService.ipqcRecordOverLoad(data); + return R.ok(); + } + + @PostMapping("/fqcRecordOverLoad") + public R fqcRecordOverLoad(@RequestBody QcFAIRecordData data){ + qcService.fqcRecordOverLoad(data); + return R.ok(); + } + // ======================= SQC检验API ======================= @PostMapping(value="/qcSQCInspectionSearch") diff --git a/src/main/java/com/heai/modules/pms/mapper/QcMapper.java b/src/main/java/com/heai/modules/pms/mapper/QcMapper.java index c2eddc1..397ca85 100644 --- a/src/main/java/com/heai/modules/pms/mapper/QcMapper.java +++ b/src/main/java/com/heai/modules/pms/mapper/QcMapper.java @@ -319,8 +319,20 @@ public interface QcMapper { void saveIQCDetailedRecordByTemplate(QcFAIRecordData data); + void saveFAIDetailedRecordByTemplate(QcFAIRecordData data); + + void saveIPQCDetailedRecordByTemplate(QcFAIRecordData data); + + void saveFQCDetailedRecordByTemplate(QcFAIRecordData data); + void updateIQCRecord(QcFAIRecordData qcFAIRecordData); + void updateFAIRecordOverLoad(QcFAIRecordData data); + + void updateIPQCRecordOverLoad(QcFAIRecordData data); + + void updateFQCRecordOverLoad(QcFAIRecordData data); + IPage qcIQCInspectionSearch(Page qcFAIRecordDataPage,@Param("query") QcFAIRecordData data); List iqcDetailSearch(QcFAIRecordData data); diff --git a/src/main/java/com/heai/modules/pms/service/Impl/QcServiceImpl.java b/src/main/java/com/heai/modules/pms/service/Impl/QcServiceImpl.java index 4db73b3..4c8fbde 100644 --- a/src/main/java/com/heai/modules/pms/service/Impl/QcServiceImpl.java +++ b/src/main/java/com/heai/modules/pms/service/Impl/QcServiceImpl.java @@ -3017,6 +3017,155 @@ public class QcServiceImpl implements QcService { } } + @Override + @Transactional + public void faiRecordOverLoad(QcFAIRecordData data) { + for (QcFAIRecordData recordData : data.getSubmitList()) { + qcMapper.deleteFAIDetailedRecord(recordData); + qcMapper.deleteFAISubDetailedRecord(recordData); + //qcMapper.deleteEquipmentDataAcquisition(recordData); + qcMapper.deleteInspectionFiles(recordData); + + QcFAIRecordData masterData = buildOverLoadMasterData(recordData, "106"); + List templates = queryOverLoadTemplates(recordData, masterData); + if (!templates.isEmpty()) { + applySamplingFromTemplate(masterData, recordData, templates.get(0)); + insertDetailedByTemplate(templates, masterData, recordData, "FAI",recordData.getOrderNo()); + } + qcMapper.updateFAIRecordOverLoad(masterData); + } + } + + @Override + @Transactional + public void ipqcRecordOverLoad(QcFAIRecordData data) { + for (QcFAIRecordData recordData : data.getSubmitList()) { + qcMapper.deleteIPQCDetailedRecord(recordData); + qcMapper.deleteIPQCSubDetailedRecord(recordData); + //qcMapper.deleteEquipmentDataAcquisition(recordData); + qcMapper.deleteInspectionFiles(recordData); + + QcFAIRecordData masterData = buildOverLoadMasterData(recordData, "101"); + List templates = queryOverLoadTemplates(recordData, masterData); + if (!templates.isEmpty()) { + applySamplingFromTemplate(masterData, recordData, templates.get(0)); + insertDetailedByTemplate(templates, masterData, recordData, "IPQC",recordData.getOrderNo()); + } + qcMapper.updateIPQCRecordOverLoad(masterData); + } + } + + @Override + @Transactional + public void fqcRecordOverLoad(QcFAIRecordData data) { + for (QcFAIRecordData recordData : data.getSubmitList()) { + qcMapper.deleteFQCDetailedRecord(recordData); + qcMapper.deleteFQCSubDetailedRecord(recordData); + //qcMapper.deleteEquipmentDataAcquisition(recordData); + qcMapper.deleteInspectionFiles(recordData); + + QcFAIRecordData masterData = buildOverLoadMasterData(recordData, "107"); + List templates = queryOverLoadTemplates(recordData, masterData); + if (!templates.isEmpty()) { + applySamplingFromTemplate(masterData, recordData, templates.get(0)); + insertDetailedByTemplate(templates, masterData, recordData, "FQC",recordData.getOrderNo()); + } + qcMapper.updateFQCRecordOverLoad(masterData); + } + } + + private QcFAIRecordData buildOverLoadMasterData(QcFAIRecordData recordData, String inspectionTypeNo) { + QcFAIRecordData masterData = new QcFAIRecordData(); + String supplierNo = StringUtils.defaultString(recordData.getSupplierNo(), ""); + masterData.setSite(recordData.getSite()); + masterData.setBuNo(recordData.getBuNo()); + masterData.setInspectionNo(recordData.getInspectionNo()); + masterData.setInspectionTypeNo(inspectionTypeNo); + masterData.setPartNo(recordData.getPartNo()); + masterData.setPartDesc(recordData.getPartDesc()); + masterData.setRollQty(recordData.getRollQty()); + masterData.setSupplierNo(supplierNo); + return masterData; + } + + private List queryOverLoadTemplates(QcFAIRecordData recordData, QcFAIRecordData masterData) { + String supplierNo = StringUtils.defaultString(recordData.getSupplierNo(), ""); + String partNo = recordData.getPartNo(); + String attributeType1 = "A"; + recordData.setInspectionTypeNo(masterData.getInspectionTypeNo()); + + List partAttribute = qcMapper.selectTemplateByPartNoForOverLoad(recordData); + if (partAttribute == null || partAttribute.isEmpty()) { + partAttribute = qcMapper.selectPartAttributeByPartNo(recordData.getSite(), recordData.getBuNo(), partNo, attributeType1, masterData.getInspectionTypeNo(), supplierNo); + } + if (partAttribute != null && !partAttribute.isEmpty()) { + return partAttribute; + } + + String familyId = qcMapper.selectFamilyIdByPartNo(partNo, recordData.getSite()); + String attributeType2 = "B"; + List familyAttribute = qcMapper.selectPartAttributeByPartNo(recordData.getSite(), recordData.getBuNo(), familyId, attributeType2, masterData.getInspectionTypeNo(), supplierNo); + return familyAttribute == null ? new ArrayList<>() : familyAttribute; + } + + private void applySamplingFromTemplate(QcFAIRecordData masterData, QcFAIRecordData recordData, QcFAIRecordData template) { + if (template.getInspectionCycle() != null) { + masterData.setInspectionCycle(template.getInspectionCycle()); + } + if (StringUtils.isNotBlank(template.getSamplingProgrammeNo())) { + QcSamplingInspectionProgrammeData samplingInspectionProgrammeData = new QcSamplingInspectionProgrammeData(); + samplingInspectionProgrammeData.setSite(template.getSite()); + samplingInspectionProgrammeData.setBuNo(template.getBuNo()); + samplingInspectionProgrammeData.setSamplingProgrammeNo(template.getSamplingProgrammeNo()); + List dataList = qcMapper.searchSamplingProgrammeDetails(samplingInspectionProgrammeData); + for (QcSamplingInspectionProgrammeData programmeData : dataList) { + if (programmeData.getSamplingLevelNo().equals(template.getSamplingLevelNo()) && + (recordData.getRollCount().compareTo(programmeData.getMinQty()) > 0 || recordData.getRollCount().compareTo(programmeData.getMinQty()) == 0) && + (recordData.getRollCount().compareTo(programmeData.getMaxQty()) < 0 || recordData.getRollCount().compareTo(programmeData.getMaxQty()) == 0)) { + masterData.setSamplingQty(programmeData.getSamplingQty()); + } + } + } else if (template.getDefaultSamplingQuantity() != null) { + masterData.setSamplingQty(template.getDefaultSamplingQuantity()); + } else if (template.getDefaultSamplingProportion() != null) { + BigDecimal d = template.getDefaultSamplingProportion().multiply(recordData.getRollCount() == null? new BigDecimal(0) : recordData.getRollCount()).divide(new BigDecimal(100), 3, BigDecimal.ROUND_HALF_UP); + masterData.setSamplingQty(d); + } + } + + private void insertDetailedByTemplate(List templates, QcFAIRecordData masterData, QcFAIRecordData recordData, String type,String orderNo) { + for (QcFAIRecordData template : templates) { + QcFAIRecordData detailData = new QcFAIRecordData(); + detailData.setSite(recordData.getSite()); + detailData.setBuNo(recordData.getBuNo()); + detailData.setInspectionNo(masterData.getInspectionNo()); + detailData.setTemplateId(template.getTemplateId()); + detailData.setSamplingLevelNo(template.getSamplingLevelNo()); + detailData.setSamplingLevelDesc(template.getSamplingLevelDesc()); + detailData.setSamplingProgrammeNo(template.getSamplingProgrammeNo()); + detailData.setSamplingProgrammeDesc(template.getSamplingProgrammeDesc()); + detailData.setAql(template.getAql()); + detailData.setAc(template.getAc()); + detailData.setRe(template.getRe()); + detailData.setSamplingQty(masterData.getSamplingQty()); + detailData.setPartNo(recordData.getPartNo()); + detailData.setOrderNo(orderNo); + switch (type) { + case "FAI": + qcMapper.saveFAIDetailedRecordByTemplate(detailData); + break; + case "IPQC": + qcMapper.saveIPQCDetailedRecordByTemplate(detailData); + break; + case "FQC": + qcMapper.saveFQCDetailedRecordByTemplate(detailData); + break; + default: + break; + } + } + } + // ======================= SQC检验维护 ======================= @Override @@ -3186,7 +3335,7 @@ public class QcServiceImpl implements QcService { qcMapper.deleteSQCDetailedRecord(recordData); qcMapper.deleteSQCSubDetailedRecord(recordData); qcMapper.deleteSQCRecord(recordData); - qcMapper.deleteEquipmentDataAcquisition(recordData); + //qcMapper.deleteEquipmentDataAcquisition(recordData); qcMapper.deleteInspectionFiles(recordData); } } @@ -3198,7 +3347,7 @@ public class QcServiceImpl implements QcService { for (QcFAIRecordData recordData : data.getSubmitList()) { qcMapper.deleteSQCDetailedRecord(recordData); qcMapper.deleteSQCSubDetailedRecord(recordData); - qcMapper.deleteEquipmentDataAcquisition(recordData); + //qcMapper.deleteEquipmentDataAcquisition(recordData); qcMapper.deleteInspectionFiles(recordData); String supplierNo = ""; diff --git a/src/main/java/com/heai/modules/pms/service/QcService.java b/src/main/java/com/heai/modules/pms/service/QcService.java index 1f7b624..e47a5da 100644 --- a/src/main/java/com/heai/modules/pms/service/QcService.java +++ b/src/main/java/com/heai/modules/pms/service/QcService.java @@ -310,6 +310,12 @@ public interface QcService { void iqcRecordOverLoad(QcFAIRecordData data); + void faiRecordOverLoad(QcFAIRecordData data); + + void ipqcRecordOverLoad(QcFAIRecordData data); + + void fqcRecordOverLoad(QcFAIRecordData data); + List upload(MultipartFile[] list, GetParamInData inData); diff --git a/src/main/resources/mapper/pms/QcMapper.xml b/src/main/resources/mapper/pms/QcMapper.xml index 3bb690a..613cf1d 100644 --- a/src/main/resources/mapper/pms/QcMapper.xml +++ b/src/main/resources/mapper/pms/QcMapper.xml @@ -2883,6 +2883,72 @@ WHERE A.SITE = #{site} AND A.bu_no = #{buNo} AND A.template_id = #{templateId} + + INSERT INTO dbo.qc_fai_detailed_record + ( + inspection_no, template_id, sampling_level_no, sampling_level_desc, + sampling_programme_no, sampling_programme_desc, AQL, AC, RE, + item_no, item_desc, object_id, object_desc, default_value, min_value, max_value, + item_result, value_type_db, value_type, is_submit, site, sampling_qty, bu_no, order_id,order_no + ) + SELECT + #{inspectionNo}, #{templateId}, #{samplingLevelNo}, #{samplingLevelDesc}, + #{samplingProgrammeNo}, #{samplingProgrammeDesc}, #{aql,jdbcType=DECIMAL}, #{ac,jdbcType=DECIMAL}, #{re,jdbcType=DECIMAL}, + A.ItemNo, B.ItemDesc, A.object_id, A.object_desc, + COALESCE(C.default_value, A.default_value, B.defaultValue), + COALESCE(C.min_value, A.min_value, B.minvalue), + COALESCE(C.max_value, A.max_value, B.maxValue), + 'Y', B.ValueType_DB, B.ValueType, 'N', #{site}, #{samplingQty,jdbcType=DECIMAL}, #{buNo}, A.order_id,#{orderNo} + FROM qc_template_detailed A + INNER JOIN eam_properties_item B ON A.SITE = B.SITE AND A.bu_no = B.bu_no AND A.ItemNo = B.ItemNo + LEFT JOIN qc_part_attr_detailed C ON B.site = C.site AND B.bu_no = C.bu_no AND B.ItemNo = C.item_no AND C.attribute_no = #{partNo} + WHERE A.SITE = #{site} AND A.bu_no = #{buNo} AND A.template_id = #{templateId} + + + + INSERT INTO dbo.qc_ipqc_detailed_record + ( + inspection_no, template_id, sampling_level_no, sampling_level_desc, + sampling_programme_no, sampling_programme_desc, AQL, AC, RE, + item_no, item_desc, object_id, object_desc, default_value, min_value, max_value, + item_result, value_type_db, value_type, is_submit, site, sampling_qty, bu_no, order_id,order_no + ) + SELECT + #{inspectionNo}, #{templateId}, #{samplingLevelNo}, #{samplingLevelDesc}, + #{samplingProgrammeNo}, #{samplingProgrammeDesc}, #{aql,jdbcType=DECIMAL}, #{ac,jdbcType=DECIMAL}, #{re,jdbcType=DECIMAL}, + A.ItemNo, B.ItemDesc, A.object_id, A.object_desc, + COALESCE(C.default_value, A.default_value, B.defaultValue), + COALESCE(C.min_value, A.min_value, B.minvalue), + COALESCE(C.max_value, A.max_value, B.maxValue), + 'Y', B.ValueType_DB, B.ValueType, 'N', #{site}, #{samplingQty,jdbcType=DECIMAL}, #{buNo}, A.order_id,#{orderNo} + FROM qc_template_detailed A + INNER JOIN eam_properties_item B ON A.SITE = B.SITE AND A.bu_no = B.bu_no AND A.ItemNo = B.ItemNo + LEFT JOIN qc_part_attr_detailed C ON B.site = C.site AND B.bu_no = C.bu_no AND B.ItemNo = C.item_no AND C.attribute_no = #{partNo} + WHERE A.SITE = #{site} AND A.bu_no = #{buNo} AND A.template_id = #{templateId} + + + + INSERT INTO dbo.qc_fqc_detailed_record + ( + inspection_no, template_id, sampling_level_no, sampling_level_desc, + sampling_programme_no, sampling_programme_desc, AQL, AC, RE, + item_no, item_desc, object_id, default_value, min_value, max_value, + item_result, value_type_db, value_type, is_submit, site, sampling_qty, bu_no, order_id,order_no + ) + SELECT + #{inspectionNo}, #{templateId}, #{samplingLevelNo}, #{samplingLevelDesc}, + #{samplingProgrammeNo}, #{samplingProgrammeDesc}, #{aql,jdbcType=DECIMAL}, #{ac,jdbcType=DECIMAL}, #{re,jdbcType=DECIMAL}, + A.ItemNo, B.ItemDesc, A.object_id, + COALESCE(C.default_value, A.default_value, B.defaultValue), + COALESCE(C.min_value, A.min_value, B.minvalue), + COALESCE(C.max_value, A.max_value, B.maxValue), + 'Y', B.ValueType_DB, B.ValueType, 'N', #{site}, #{samplingQty,jdbcType=DECIMAL}, #{buNo}, A.order_id,#{orderNo} + FROM qc_template_detailed A + INNER JOIN eam_properties_item B ON A.SITE = B.SITE AND A.bu_no = B.bu_no AND A.ItemNo = B.ItemNo + LEFT JOIN qc_part_attr_detailed C ON B.site = C.site AND B.bu_no = C.bu_no AND B.ItemNo = C.item_no AND C.attribute_no = #{partNo} + WHERE A.SITE = #{site} AND A.bu_no = #{buNo} AND A.template_id = #{templateId} + + UPDATE qc_iqc_record @@ -2899,6 +2965,42 @@ WHERE inspection_no = #{inspectionNo} and site = #{site} and bu_no = #{buNo} + + UPDATE qc_fai_record + SET inspection_type_no = #{inspectionTypeNo}, + sampling_qty = #{samplingQty}, + inspection_cycle = #{inspectionCycle}, + part_no = #{partNo}, + state = '未开始', + action_date = '', + action_by = '' + WHERE inspection_no = #{inspectionNo} and site = #{site} and bu_no = #{buNo} + + + + UPDATE qc_ipqc_record + SET inspection_type_no = #{inspectionTypeNo}, + sampling_qty = #{samplingQty}, + inspection_cycle = #{inspectionCycle}, + part_no = #{partNo}, + state = '未开始', + action_date = '', + action_by = '' + WHERE inspection_no = #{inspectionNo} and site = #{site} and bu_no = #{buNo} + + + + UPDATE qc_fqc_record + SET inspection_type_no = #{inspectionTypeNo}, + sampling_qty = #{samplingQty}, + inspection_cycle = #{inspectionCycle}, + part_no = #{partNo}, + state = '未开始', + action_date = '', + action_by = '' + WHERE inspection_no = #{inspectionNo} and site = #{site} and bu_no = #{buNo} + +