From 3f1d871318231ebabb3be06c4ca2ca770b5b0220 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期四, 19 三月 2026 09:59:13 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New_kthg' into dev_New_kthg
---
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java | 3
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 2
src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java | 10
src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java | 7
src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java | 3
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 6
src/main/java/com/ruoyi/quality/pojo/RawMaterial.java | 13
src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml | 10
src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java | 4
src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java | 8
src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java | 6
src/main/resources/mapper/quality/QualityInspectMapper.xml | 578 ++++++++++++++++++++++------------------------------
12 files changed, 278 insertions(+), 372 deletions(-)
diff --git a/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java b/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
index 371b086..b4e7256 100644
--- a/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
@@ -8,10 +8,10 @@
CUSTOMIZATION_STOCK_IN("0", "鍚堟牸鑷畾涔夊叆搴�"),
- PRODUCTION_REPORT_STOCK_IN("2", "鐢熶骇鎶ュ伐-鍏ュ簱"),
+ PRODUCTION_REPORT_STOCK_IN("2", "鐢熶骇鎶ュ伐-鍏ュ簱");
// PURCHASE_STOCK_IN("7", "閲囪喘-鍏ュ簱"),
- QUALITYINSPECT_STOCK_IN("6", "璐ㄦ-鍚堟牸鍏ュ簱"),
- DEFECTIVE_PASS("11", "涓嶅悎鏍�-璁╂鏀捐");
+// QUALITYINSPECT_STOCK_IN("6", "璐ㄦ-鍚堟牸鍏ュ簱"),
+// DEFECTIVE_PASS("11", "涓嶅悎鏍�-璁╂鏀捐");
private final String code;
diff --git a/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java b/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
index 7e85b3e..f4d92f7 100644
--- a/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
@@ -5,8 +5,8 @@
@Getter
public enum StockOutQualifiedRecordTypeEnum implements BaseEnum<String> {
- CUSTOMIZATION_STOCK_OUT("1", "鍚堟牸鑷畾涔夊嚭搴�"),
- PRODUCTION_REPORT_STOCK_OUT("3", "鐢熶骇鎶ュ伐-鍑哄簱");
+ CUSTOMIZATION_STOCK_OUT("1", "鍚堟牸鑷畾涔夊嚭搴�");
+// PRODUCTION_REPORT_STOCK_OUT("3", "鐢熶骇鎶ュ伐-鍑哄簱");
// SALE_STOCK_OUT("8", "閿�鍞�-鍑哄簱"),
// SALE_SHIP_STOCK_OUT("13", "閿�鍞�-鍙戣揣鍑哄簱");
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 819ce65..64cdd02 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -4,7 +4,6 @@
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
-import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
import com.ruoyi.stock.pojo.StockInRecord;
@@ -13,15 +12,11 @@
import com.ruoyi.stock.service.StockInventoryService;
import com.ruoyi.stock.service.StockOutRecordService;
import com.ruoyi.stock.service.StockUninventoryService;
-import com.ruoyi.stock.service.impl.StockInRecordServiceImpl;
-import com.ruoyi.stock.service.impl.StockOutRecordServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
@Component
@RequiredArgsConstructor
@@ -72,12 +67,13 @@
* @param recordType
* @param recordId
*/
- public void addStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) {
+ public void addStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId,Long productId) {
StockInventoryDto stockInventoryDto = new StockInventoryDto();
stockInventoryDto.setRecordId(recordId);
stockInventoryDto.setRecordType(String.valueOf(recordType));
stockInventoryDto.setQualitity(quantity);
stockInventoryDto.setProductModelId(productModelId);
+ stockInventoryDto.setProductId(productId);
stockInventoryService.addstockInventory(stockInventoryDto);
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 58d1025..166d2c3 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -169,7 +169,7 @@
/*鏂板璐ㄦ*/
List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
//涓嶇鏄惁璐ㄦ閮界洿鎺ュ叆搴�
- stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
+ stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId(),productModel.getProductId());
/*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
@@ -187,7 +187,7 @@
}
if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
//濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
- productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
+ productOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity());
if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
}
@@ -276,7 +276,7 @@
new LambdaQueryWrapper<QualityInspectParam>()
.eq(QualityInspectParam::getInspectId, q.getId()));
qualityInspectMapper.deleteById(q.getId());
- stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
+ stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode());
});
// 鍒犻櫎浜у嚭璁板綍
diff --git a/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java b/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java
index d2f8e88..9380941 100644
--- a/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java
+++ b/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java
@@ -136,8 +136,13 @@
@ApiModelProperty("鍏宠仈妫�娴媔d")
private Long inspectId;
-
@ApiModelProperty("鏄惁涓嶅悎鏍煎鐞嗚嚜宸辨柊澧�")
@TableField(exist = false)
private Boolean method;
+
+ @ApiModelProperty("鎵瑰彿")
+ private String batchNo;
+
+ @ApiModelProperty("妫�娴嬬被鍨�")
+ private Integer checkType;
}
diff --git a/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java b/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
index f84e322..bf7d158 100644
--- a/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
+++ b/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
@@ -1,13 +1,6 @@
package com.ruoyi.quality.pojo;
import com.baomidou.mybatisplus.annotation.*;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.Date;
-
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModel;
@@ -15,6 +8,10 @@
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
/**
* <p>
@@ -47,7 +44,7 @@
private String batchNo;
@ApiModelProperty("妫�楠岀粨鏋� 0鍚堟牸 1涓嶅悎鏍�")
- @Excel(name = "妫�楠岀粨鏋�", readConverterExp = "0=鍚堟牸,1=涓嶅悎鏍�")
+ @Excel(name = "妫�楠岀粨鏋�", readConverterExp = "0=涓嶅悎鏍�,1=鍚堟牸")
private Integer checkResult;
@ApiModelProperty("绫诲埆(0:鏈彁浜�;1:宸叉彁浜�)")
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index 8a1e066..15a89b8 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -9,7 +9,6 @@
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
@@ -98,7 +97,7 @@
qualityUnqualifiedMapper.insert(qualityUnqualified);
} else {
//鍚堟牸鐩存帴鍏ュ簱
- stockUtils.addStock(qualityInspect.getProductModelId(), qualityInspect.getQuantity(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(), qualityInspect.getId());
+ stockUtils.addStock(qualityInspect.getProductModelId(), qualityInspect.getQuantity(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), qualityInspect.getId(),qualityInspect.getProductId());
}
qualityInspect.setInspectState(1);//宸叉彁浜�
return qualityInspectMapper.updateById(qualityInspect);
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
index f01f315..cd2aee6 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
@@ -1,9 +1,6 @@
package com.ruoyi.quality.service.impl;
-import com.ruoyi.basic.service.IProductModelService;
-import com.ruoyi.basic.service.IProductService;
import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.production.service.ProductOrderService;
import com.ruoyi.quality.dto.*;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.service.QualityReportService;
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
index 1650690..2d0a02a 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -8,7 +8,6 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -17,7 +16,10 @@
import com.ruoyi.production.mapper.ProductProcessRouteMapper;
import com.ruoyi.production.mapper.ProductWorkOrderMapper;
import com.ruoyi.production.mapper.ProductionProductMainMapper;
-import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.pojo.ProductProcessRoute;
+import com.ruoyi.production.pojo.ProductProcessRouteItem;
+import com.ruoyi.production.pojo.ProductWorkOrder;
import com.ruoyi.production.service.ProductOrderService;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
import com.ruoyi.quality.pojo.QualityInspect;
@@ -131,7 +133,7 @@
break;
case "璁╂鏀捐":
//璋冪敤鎻愪氦鍚堟牸鐨勬帴鍙�
- stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
+ stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), unqualified.getId(),qualityInspect.getProductId());
break;
default:
break;
@@ -146,7 +148,7 @@
break;
case "璁╂鏀捐":
//璋冪敤鎻愪氦鍚堟牸鐨勬帴鍙�
- stockUtils.addStock(modelId, unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
+ stockUtils.addStock(modelId, unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), unqualified.getId(),qualityInspect.getProductId());
break;
default:
break;
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 6cd768c..bbb9c7d 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -389,7 +389,7 @@
//鍒犻櫎鍑哄簱璁板綍
for (Long productMainId : productMainIds) {
//鍒犻櫎鐢熶骇鍑哄簱璁板綍
- stockUtils.deleteStockOutRecord(productMainId, StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
+ stockUtils.deleteStockOutRecord(productMainId, StockOutQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_OUT.getCode());
//鍒犻櫎鎶ュ簾鐨勫叆搴撹褰�
stockUtils.deleteStockInRecord(productMainId, StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
}
diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index 48fb369..5d12ed6 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -75,369 +75,277 @@
</delete>
<select id="getInspectStatistics" resultType="com.ruoyi.quality.dto.QualityInspectStatDto">
- SELECT CASE pp.product_name
- WHEN '鍘熸潗鏂�' THEN 0
- WHEN '鍗婃垚鍝�' THEN 1
- WHEN '鎴愬搧' THEN 2
- END AS modelType,
-
- IFNULL(SUM(qi.quantity), 0) AS totalCount,
-
- IFNULL(SUM(CASE
- WHEN qi.inspect_state = 1 THEN qi.quantity
- ELSE 0
- END), 0) AS completedCount
-
- FROM product p
- INNER JOIN product pp
- ON p.parent_id = pp.id
- LEFT JOIN product_model pm
- ON pm.product_id = p.id
- LEFT JOIN quality_inspect qi
- ON qi.product_model_id = pm.id
-
- WHERE pp.product_name IN ('鍘熸潗鏂�', '鍗婃垚鍝�', '鎴愬搧')
-
- GROUP BY pp.product_name
-
+ SELECT
+ rm.check_type AS modelType,
+ COUNT(*) AS totalCount,
+ SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) AS completedCount,
+ SUM(CASE WHEN rm.inspect_state = 0 THEN 1 ELSE 0 END) AS uncommittedCount
+ FROM raw_material rm
+ WHERE rm.inspect_state IN (0, 1)
+ GROUP BY rm.check_type
+ ORDER BY rm.check_type;
</select>
<select id="getPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto">
- SELECT t.modelType,
-
- COALESCE(SUM(qi.quantity), 0) AS totalCount,
-
- COALESCE(SUM(
- CASE
- WHEN qi.inspect_state = 1 THEN qi.quantity
- ELSE 0
- END
- ), 0) AS completedCount,
-
- COALESCE(SUM(
- CASE
- WHEN qi.inspect_state = 1
- AND qi.check_result = '鍚堟牸'
- THEN qi.quantity
- ELSE 0
- END
- ), 0) AS qualifiedCount,
-
- COALESCE(SUM(
- CASE
- WHEN qi.inspect_state = 1
- AND qi.check_result = '涓嶅悎鏍�'
- THEN qi.quantity
- ELSE 0
- END
- ), 0) AS unqualifiedCount,
-
- /* 瀹屾垚鐜� */
- IF(COALESCE(SUM(qi.quantity), 0) = 0, 0,
- ROUND(
- COALESCE(SUM(
- CASE
- WHEN qi.inspect_state = 1 THEN qi.quantity
- ELSE 0
- END
- ), 0)
- / SUM(qi.quantity) * 100, 2)
- ) AS completionRate,
-
- /* 鍚堟牸鐜� */
- IF(COALESCE(SUM(
- CASE
- WHEN qi.inspect_state = 1 THEN qi.quantity
- ELSE 0
- END
- ), 0) = 0, 0,
- ROUND(
- COALESCE(SUM(
- CASE
- WHEN qi.inspect_state = 1
- AND qi.check_result = '鍚堟牸'
- THEN qi.quantity
- ELSE 0
- END
- ), 0)
- /
- COALESCE(SUM(
- CASE
- WHEN qi.inspect_state = 1 THEN qi.quantity
- ELSE 0
- END
- ), 0) * 100, 2)
- ) AS passRate
-
- FROM (SELECT 0 AS modelType
- UNION ALL
- SELECT 1
- UNION ALL
- SELECT 2) t
- LEFT JOIN product p
- ON 1 = 1
- LEFT JOIN product pp
- ON p.parent_id = pp.id
- LEFT JOIN product_model pm
- ON pm.product_id = p.id
- LEFT JOIN quality_inspect qi
- ON qi.product_model_id = pm.id
- AND (
- (pp.product_name = '鍘熸潗鏂�' AND t.modelType = 0) OR
- (pp.product_name = '鍗婃垚鍝�' AND t.modelType = 1) OR
- (pp.product_name = '鎴愬搧' AND t.modelType = 2)
- )
-
- GROUP BY t.modelType
+ SELECT
+ t.modelType,
+ COALESCE(rm.totalCount, 0) AS totalCount,
+ COALESCE(rm.completedCount, 0) AS completedCount,
+ COALESCE(rm.qualifiedCount, 0) AS qualifiedCount,
+ COALESCE(rm.unqualifiedCount, 0) AS unqualifiedCount,
+ COALESCE(rm.uncommittedCount, 0) AS uncommittedCount,
+ COALESCE(rm.completionRate, 0) AS completionRate,
+ COALESCE(rm.passRate, 0) AS passRate
+ FROM (
+ SELECT 0 AS modelType
+ UNION ALL
+ SELECT 1
+ UNION ALL
+ SELECT 2
+ ) t
+ LEFT JOIN (
+ SELECT
+ rm.check_type AS modelType,
+ COUNT(*) AS totalCount,
+ SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) AS completedCount,
+ SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) AS qualifiedCount,
+ SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 0 THEN 1 ELSE 0 END) AS unqualifiedCount,
+ SUM(CASE WHEN rm.inspect_state = 0 THEN 1 ELSE 0 END) AS uncommittedCount,
+ IF(COUNT(*) = 0, 0,
+ ROUND(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2)
+ ) AS completionRate,
+ IF(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) = 0, 0,
+ ROUND(SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) /
+ SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) * 100, 2)
+ ) AS passRate
+ FROM raw_material rm
+ GROUP BY rm.check_type
+ ) rm ON t.modelType = rm.modelType
ORDER BY t.modelType;
</select>
<select id="getMonthlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityMonthlyPassRateDto">
WITH RECURSIVE
- months AS (SELECT 1 AS month_num
- UNION ALL
- SELECT month_num + 1
- FROM months
- WHERE month_num < 12),
- types AS (SELECT 0 AS modelType
- UNION ALL
- SELECT 1
- UNION ALL
- SELECT 2),
- base AS (SELECT m.month_num, t.modelType
- FROM months m
- CROSS JOIN types t)
-
- SELECT CASE b.month_num
- WHEN 1 THEN '涓�鏈�'
- WHEN 2 THEN '浜屾湀'
- WHEN 3 THEN '涓夋湀'
- WHEN 4 THEN '鍥涙湀'
- WHEN 5 THEN '浜旀湀'
- WHEN 6 THEN '鍏湀'
- WHEN 7 THEN '涓冩湀'
- WHEN 8 THEN '鍏湀'
- WHEN 9 THEN '涔濇湀'
- WHEN 10 THEN '鍗佹湀'
- WHEN 11 THEN '鍗佷竴鏈�'
- WHEN 12 THEN '鍗佷簩鏈�'
- END AS month,
-
- b.modelType,
-
- /* 鎬绘暟閲� */
- COALESCE(SUM(qi.quantity), 0) AS totalCount,
-
- /* 宸插畬鎴� */
- COALESCE(SUM(
- CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
- ), 0) AS completedCount,
-
- /* 鍚堟牸 */
- COALESCE(SUM(
- CASE
- WHEN qi.inspect_state = 1 AND qi.check_result = '鍚堟牸'
- THEN qi.quantity
- ELSE 0
- END
- ), 0) AS qualifiedCount,
-
- /* 涓嶅悎鏍� */
- COALESCE(SUM(
- CASE
- WHEN qi.inspect_state = 1 AND qi.check_result = '涓嶅悎鏍�'
- THEN qi.quantity
- ELSE 0
- END
- ), 0) AS unqualifiedCount,
-
- /* 瀹屾垚鐜� */
- IF(COALESCE(SUM(qi.quantity), 0) = 0, 0,
- ROUND(
- COALESCE(SUM(
- CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
- ), 0) / SUM(qi.quantity) * 100, 2
- )
- ) AS completionRate,
-
- /* 鍚堟牸鐜� */
- IF(COALESCE(SUM(
- CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
- ), 0) = 0, 0,
- ROUND(
- COALESCE(SUM(
- CASE
- WHEN qi.inspect_state = 1 AND qi.check_result = '鍚堟牸'
- THEN qi.quantity
- ELSE 0
- END
- ), 0)
- /
- COALESCE(SUM(
- CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
- ), 0) * 100, 2
- )
- ) AS passRate
-
+ months AS (
+ SELECT 1 AS month_num
+ UNION ALL
+ SELECT month_num + 1
+ FROM months
+ WHERE month_num < 12
+ ),
+ types AS (
+ SELECT 0 AS modelType
+ UNION ALL
+ SELECT 1
+ UNION ALL
+ SELECT 2
+ ),
+ base AS (
+ SELECT m.month_num, t.modelType
+ FROM months m
+ CROSS JOIN types t
+ )
+ SELECT
+ CASE b.month_num
+ WHEN 1 THEN '涓�鏈�'
+ WHEN 2 THEN '浜屾湀'
+ WHEN 3 THEN '涓夋湀'
+ WHEN 4 THEN '鍥涙湀'
+ WHEN 5 THEN '浜旀湀'
+ WHEN 6 THEN '鍏湀'
+ WHEN 7 THEN '涓冩湀'
+ WHEN 8 THEN '鍏湀'
+ WHEN 9 THEN '涔濇湀'
+ WHEN 10 THEN '鍗佹湀'
+ WHEN 11 THEN '鍗佷竴鏈�'
+ WHEN 12 THEN '鍗佷簩鏈�'
+ END AS month,
+ b.modelType,
+ COALESCE(rm.totalCount, 0) AS totalCount,
+ COALESCE(rm.completedCount, 0) AS completedCount,
+ COALESCE(rm.qualifiedCount, 0) AS qualifiedCount,
+ COALESCE(rm.unqualifiedCount, 0) AS unqualifiedCount,
+ COALESCE(rm.uncommittedCount, 0) AS uncommittedCount,
+ COALESCE(rm.completionRate, 0) AS completionRate,
+ COALESCE(rm.passRate, 0) AS passRate
FROM base b
- LEFT JOIN product p ON 1 = 1
- LEFT JOIN product pp ON p.parent_id = pp.id
- LEFT JOIN product_model pm ON pm.product_id = p.id
- LEFT JOIN quality_inspect qi
- ON qi.product_model_id = pm.id
- AND YEAR(qi.check_time) = #{year}
- AND MONTH(qi.check_time) = b.month_num
- AND (
- (pp.product_name = '鍘熸潗鏂�' AND b.modelType = 0)
- OR (pp.product_name = '鍗婃垚鍝�' AND b.modelType = 1)
- OR (pp.product_name = '鎴愬搧' AND b.modelType = 2)
- )
-
- GROUP BY b.month_num, b.modelType
+ LEFT JOIN (
+ SELECT
+ MONTH(rm.create_time) AS month_num,
+ rm.check_type AS modelType,
+ COUNT(*) AS totalCount,
+ SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) AS completedCount,
+ SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) AS qualifiedCount,
+ SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 0 THEN 1 ELSE 0 END) AS unqualifiedCount,
+ SUM(CASE WHEN rm.inspect_state = 0 THEN 1 ELSE 0 END) AS uncommittedCount,
+ IF(COUNT(*) = 0, 0,
+ ROUND(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2)
+ ) AS completionRate,
+ IF(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) = 0, 0,
+ ROUND(SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) /
+ SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) * 100, 2)
+ ) AS passRate
+ FROM raw_material rm
+ WHERE YEAR(rm.create_time) = #{year} -- 鎸夊勾浠界瓫閫�
+ GROUP BY MONTH(rm.create_time), rm.check_type
+ ) rm ON b.month_num = rm.month_num AND b.modelType = rm.modelType
ORDER BY b.month_num, b.modelType;
-
</select>
<select id="getYearlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto">
- SELECT t.modelType,
-
- COALESCE(SUM(
- CASE
- WHEN pp.product_name = '鍘熸潗鏂�' AND t.modelType = 0 THEN qi.quantity
- WHEN pp.product_name = '鍗婃垚鍝�' AND t.modelType = 1 THEN qi.quantity
- WHEN pp.product_name = '鎴愬搧' AND t.modelType = 2 THEN qi.quantity
- ELSE 0
- END
- ), 0) AS totalCount
-
- FROM (SELECT 0 AS modelType
- UNION ALL
- SELECT 1
- UNION ALL
- SELECT 2) t
- LEFT JOIN product p ON 1 = 1
- LEFT JOIN product pp ON p.parent_id = pp.id
- LEFT JOIN product_model pm ON pm.product_id = p.id
- LEFT JOIN quality_inspect qi
- ON qi.product_model_id = pm.id
- AND YEAR(qi.check_time) = #{year}
- AND qi.inspect_state = 1
- AND qi.check_result = '鍚堟牸'
-
- GROUP BY t.modelType
+ SELECT
+ t.modelType,
+ COALESCE(rm.totalCount, 0) AS totalCount,
+ COALESCE(rm.completedCount, 0) AS completedCount,
+ COALESCE(rm.uncommittedCount, 0) AS uncommittedCount,
+ COALESCE(rm.qualifiedCount, 0) AS qualifiedCount,
+ COALESCE(rm.unqualifiedCount, 0) AS unqualifiedCount,
+ COALESCE(rm.completionRate, 0) AS completionRate,
+ COALESCE(rm.passRate, 0) AS passRate
+ FROM (
+ SELECT 0 AS modelType
+ UNION ALL
+ SELECT 1
+ UNION ALL
+ SELECT 2
+ ) t
+ LEFT JOIN (
+ SELECT
+ rm.check_type AS modelType,
+ COUNT(*) AS totalCount,
+ SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) AS completedCount,
+ SUM(CASE WHEN rm.inspect_state = 0 THEN 1 ELSE 0 END) AS uncommittedCount,
+ SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) AS qualifiedCount,
+ SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 0 THEN 1 ELSE 0 END) AS unqualifiedCount,
+ -- 瀹屾垚鐜� = 宸叉彁浜ゆ暟閲� / 鎬绘暟閲� * 100
+ IF(COUNT(*) = 0, 0,
+ ROUND(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2)
+ ) AS completionRate,
+ -- 鍚堟牸鐜� = 鍚堟牸鏁伴噺 / 宸叉彁浜ゆ暟閲� * 100
+ IF(SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) = 0, 0,
+ ROUND(SUM(CASE WHEN rm.inspect_state = 1 AND rm.check_result = 1 THEN 1 ELSE 0 END) /
+ SUM(CASE WHEN rm.inspect_state = 1 THEN 1 ELSE 0 END) * 100, 2)
+ ) AS passRate
+ FROM raw_material rm
+ WHERE rm.inspect_state IN (0, 1)
+ AND YEAR(rm.create_time) = #{year} -- 鎸夊勾浠界瓫閫夛紝鍋囪鏈夋椂闂村瓧娈�
+ GROUP BY rm.check_type
+ ) rm ON t.modelType = rm.modelType
ORDER BY t.modelType;
</select>
<select id="getMonthlyCompletionDetails" resultType="com.ruoyi.quality.dto.QualityMonthlyDetailDto">
- WITH RECURSIVE months AS (SELECT 1 AS month_num
- UNION ALL
- SELECT month_num + 1
- FROM months
- WHERE month_num < 12)
- SELECT CASE m.month_num
- WHEN 1 THEN '涓�鏈�'
- WHEN 2 THEN '浜屾湀'
- WHEN 3 THEN '涓夋湀'
- WHEN 4 THEN '鍥涙湀'
- WHEN 5 THEN '浜旀湀'
- WHEN 6 THEN '鍏湀'
- WHEN 7 THEN '涓冩湀'
- WHEN 8 THEN '鍏湀'
- WHEN 9 THEN '涔濇湀'
- WHEN 10 THEN '鍗佹湀'
- WHEN 11 THEN '鍗佷竴鏈�'
- WHEN 12 THEN '鍗佷簩鏈�'
- END AS month,
-
- /* 鍘熸潗鏂� */
- COALESCE(SUM(
- CASE
- WHEN pp.product_name = '鍘熸潗鏂�'
- THEN qi.quantity
- ELSE 0
- END
- ), 0) AS rawMaterialCount,
-
- /* 鍗婃垚鍝� */
- COALESCE(SUM(
- CASE
- WHEN pp.product_name = '鍗婃垚鍝�'
- THEN qi.quantity
- ELSE 0
- END
- ), 0) AS processCount,
-
- /* 鎴愬搧 */
- COALESCE(SUM(
- CASE
- WHEN pp.product_name = '鎴愬搧'
- THEN qi.quantity
- ELSE 0
- END
- ), 0) AS outgoingCount
-
+ WITH RECURSIVE months AS (
+ SELECT 1 AS month_num
+ UNION ALL
+ SELECT month_num + 1
+ FROM months
+ WHERE month_num < 12
+ )
+ SELECT
+ CASE m.month_num
+ WHEN 1 THEN '涓�鏈�'
+ WHEN 2 THEN '浜屾湀'
+ WHEN 3 THEN '涓夋湀'
+ WHEN 4 THEN '鍥涙湀'
+ WHEN 5 THEN '浜旀湀'
+ WHEN 6 THEN '鍏湀'
+ WHEN 7 THEN '涓冩湀'
+ WHEN 8 THEN '鍏湀'
+ WHEN 9 THEN '涔濇湀'
+ WHEN 10 THEN '鍗佹湀'
+ WHEN 11 THEN '鍗佷竴鏈�'
+ WHEN 12 THEN '鍗佷簩鏈�'
+ END AS month,
+ /* 鍏ュ満妫� (check_type = 0) */
+ COALESCE(SUM(
+ CASE
+ WHEN rm.check_type = 0
+ THEN 1 -- 缁熻璁板綍鏁帮紝鍥犱负鍘烻QL鐢ㄧ殑鏄痲uantity瀛楁
+ ELSE 0
+ END
+ ), 0) AS rawMaterialCount,
+ /* 杞﹂棿妫� (check_type = 1) */
+ COALESCE(SUM(
+ CASE
+ WHEN rm.check_type = 1
+ THEN 1
+ ELSE 0
+ END
+ ), 0) AS processCount,
+ /* 鍑哄巶妫� (check_type = 2) */
+ COALESCE(SUM(
+ CASE
+ WHEN rm.check_type = 2
+ THEN 1
+ ELSE 0
+ END
+ ), 0) AS outgoingCount
FROM months m
- LEFT JOIN product p ON 1 = 1
- LEFT JOIN product pp ON p.parent_id = pp.id
- LEFT JOIN product_model pm ON pm.product_id = p.id
- LEFT JOIN quality_inspect qi
- ON qi.product_model_id = pm.id
- AND qi.inspect_state = 1
- AND YEAR(qi.check_time) = #{year}
- AND MONTH(qi.check_time) = m.month_num
-
+ LEFT JOIN raw_material rm
+ ON YEAR(rm.create_time) = #{year}
+ AND MONTH(rm.create_time) = m.month_num
+ AND rm.inspect_state = 1 -- 宸叉彁浜�
+ AND rm.check_result = 1 -- 鍚堟牸
GROUP BY m.month_num
ORDER BY m.month_num;
-
</select>
<select id="getTopParameters" resultType="com.ruoyi.quality.dto.QualityParameterStatDto">
- WITH parameter_counts AS (SELECT qip.parameter_item AS name,
- COUNT(*) AS count
- FROM quality_inspect_param qip
- JOIN quality_inspect qi
- ON qip.inspect_id = qi.id
- JOIN product p
- ON qi.product_id = p.id
- JOIN product pp
- ON p.parent_id = pp.id
- WHERE qi.inspect_state = 1
- AND (
- (#{modelType} = 1 AND pp.product_name = '鍘熸潗鏂�')
- OR (#{modelType} = 2 AND pp.product_name = '鍗婃垚鍝�')
- OR (#{modelType} = 3 AND pp.product_name = '鎴愬搧')
- )
- GROUP BY qip.parameter_item),
- ranked AS (SELECT name,
- count,
- ROW_NUMBER() OVER (ORDER BY count DESC) AS rn
- FROM parameter_counts),
- total AS (SELECT SUM(count) AS total_count
- FROM parameter_counts)
+ WITH parameter_counts AS (
+ SELECT
+ qii.name,
+ COUNT(*) AS count
+ FROM raw_material rm
+ LEFT JOIN raw_material_quality_inspect_item rmqi
+ ON rmqi.raw_material_id = rm.id
+ LEFT JOIN quality_inspect_item qii
+ ON qii.id = rmqi.quality_inspect_item_id
+ WHERE qii.name IS NOT NULL
+ AND rm.check_type = CASE
+ WHEN #{modelType} = 1 THEN 0 -- 鍓嶇1 鈫� 鏁版嵁搴�0
+ WHEN #{modelType} = 2 THEN 1 -- 鍓嶇2 鈫� 鏁版嵁搴�1
+ WHEN #{modelType} = 3 THEN 2 -- 鍓嶇3 鈫� 鏁版嵁搴�2
+ END
+ GROUP BY qii.name
+ ),
+ ranked AS (
+ SELECT
+ name,
+ count,
+ ROW_NUMBER() OVER (ORDER BY count DESC) AS rn
+ FROM parameter_counts
+ ),
+ total AS (
+ SELECT SUM(count) AS total_count
+ FROM parameter_counts
+ )
- SELECT name,
- count,
- CASE
- WHEN (SELECT total_count FROM total) = 0 THEN 0
- ELSE ROUND(count / (SELECT total_count FROM total) * 100, 2)
- END AS percentage
- FROM (SELECT name, count, rn
- FROM ranked
- WHERE rn <= 4
-
- UNION ALL
-
- SELECT '鍏朵粬妫�娴�' AS name,
- SUM(count) AS count,
- 5 AS rn
- FROM ranked
- WHERE rn > 4
- HAVING SUM(count) > 0) t
+ SELECT
+ name,
+ count,
+ CASE
+ WHEN (SELECT total_count FROM total) = 0 THEN 0
+ ELSE ROUND(count / (SELECT total_count FROM total) * 100, 2)
+ END AS percentage
+ FROM (
+ SELECT name, count, rn
+ FROM ranked
+ WHERE rn <= 4
+ UNION ALL
+ -- 鍏朵粬鍚堝苟
+ SELECT
+ '鍏朵粬妫�娴�' AS name,
+ SUM(count) AS count,
+ 5 AS rn
+ FROM ranked
+ WHERE rn > 4
+ HAVING SUM(count) > 0
+ ) t
ORDER BY rn;
-
</select>
diff --git a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
index 5bda4f6..705a3ff 100644
--- a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
+++ b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
@@ -16,6 +16,8 @@
qu.deal_result,
qu.deal_name,
qu.deal_time,
+ qu.batch_no,
+ qu.check_type,
CASE
WHEN qu.model = pm.id THEN pm.model
ELSE qu.model
@@ -28,20 +30,20 @@
LEFT JOIN product_model pm ON qu.model = pm.id
where
1=1
- <if test="qualityUnqualified.inspectType != null ">
- AND inspect_type = #{qualityUnqualified.inspectType}
+ <if test="qualityUnqualified.checkType != null ">
+ AND check_type = #{qualityUnqualified.checkType}
</if>
<if test="qualityUnqualified.inspectState != null ">
AND inspect_state = #{qualityUnqualified.inspectState}
</if>
<if test="qualityUnqualified.productName != null and qualityUnqualified.productName != '' ">
- AND product_name = #{qualityUnqualified.productName}
+ AND product_name like concat('%',#{qualityUnqualified.productName},'%')
</if>
<if test="qualityUnqualified.entryDateStart != null and qualityUnqualified.entryDateStart != '' ">
AND check_time >= DATE_FORMAT(#{qualityUnqualified.entryDateStart},'%Y-%m-%d')
</if>
<if test="qualityUnqualified.entryDateEnd != null and qualityUnqualified.entryDateEnd != '' ">
- AND check_time <= DATE_FORMAT(#{qualityUnqualified.entryDateEnd},'%Y-%m-%d')
+ AND check_time <= DATE_FORMAT(#{qualityUnqualified.entryDateEnd},'%Y-%m-%d')
</if>
</select>
<select id="qualityUnqualifiedExport" resultType="com.ruoyi.quality.pojo.QualityUnqualified">
--
Gitblit v1.9.3