From ebfc4e86415881146c7ae221feb6aa4ff64c8a3c Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期三, 14 一月 2026 17:48:32 +0800
Subject: [PATCH] feat: 合格率统计调整,明细表格导出接口
---
inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java | 29 ++++++++------
inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml | 19 ++++++---
inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java | 51 +++++++++++++++++++++++++
inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java | 6 +++
4 files changed, 86 insertions(+), 19 deletions(-)
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java
index 933df44..c6efafd 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java
@@ -2,7 +2,9 @@
import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.inspect.dto.DataAnalysisDto;
+import com.ruoyi.inspect.dto.MaterialPropTableDTO;
import com.ruoyi.inspect.service.DataAnalysisService;
import com.ruoyi.inspect.vo.DeviationAnalyzeVo;
import io.swagger.annotations.Api;
@@ -10,6 +12,9 @@
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.List;
/**
@@ -51,7 +56,7 @@
/**
* 鏌ヨ鐗╂枡灞炴�у悎鏍肩巼琛ㄦ牸
*
- * @param dataAnalysisDto
+ * @param dataAnalysisDto 鏌ヨ鍙傛暟
* @return
*/
@ApiOperation(value = "鏌ヨ鐗╂枡灞炴�у悎鏍肩巼琛ㄦ牸")
@@ -60,6 +65,50 @@
return Result.success(dataAnalysisService.getMaterialPropTable(dataAnalysisDto));
}
+ @PostMapping("/exportSupplierExcel")
+ public void exportSupplierExcel(HttpServletResponse response, @RequestBody List<MaterialPropTableDTO> materialProps) {
+
+ if (materialProps == null || materialProps.isEmpty()) {
+ return;
+ }
+
+ int index = 1;
+ for (MaterialPropTableDTO dto : materialProps) {
+ dto.setIndex(String.valueOf(index++));
+ }
+
+ int totalBatchSum = 0;
+ int unqualifiedBatchSum = 0;
+
+ for (MaterialPropTableDTO dto : materialProps) {
+ if (dto.getTotalBatch() != null) {
+ totalBatchSum += dto.getTotalBatch();
+ }
+ if (dto.getUnqualifiedBatch() != null) {
+ unqualifiedBatchSum += dto.getUnqualifiedBatch();
+ }
+ }
+
+ BigDecimal passRateSum = BigDecimal.ZERO;
+ if (totalBatchSum > 0) {
+ passRateSum = BigDecimal
+ .valueOf(totalBatchSum - unqualifiedBatchSum)
+ .multiply(BigDecimal.valueOf(100))
+ .divide(BigDecimal.valueOf(totalBatchSum), 2, RoundingMode.HALF_UP);
+ }
+
+ MaterialPropTableDTO totalRow = new MaterialPropTableDTO();
+ totalRow.setIndex("鍚堣");
+ totalRow.setSupplierName("");
+ totalRow.setTotalBatch(totalBatchSum);
+ totalRow.setUnqualifiedBatch(unqualifiedBatchSum);
+ totalRow.setPassRate(passRateSum);
+ materialProps.add(totalRow);
+
+ ExcelUtil<MaterialPropTableDTO> excelUtil = new ExcelUtil<>(MaterialPropTableDTO.class);
+ excelUtil.exportExcel(response, materialProps, "鍚堟牸鐜囩粺璁�");
+ }
+
/**
* 鏌ヨ鍘熸潗鏂欓」
*
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java
index 2e76cd1..091c6a6 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java
@@ -1,26 +1,31 @@
package com.ruoyi.inspect.dto;
+import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
-import java.util.Date;
@Data
public class MaterialPropTableDTO {
- @ApiModelProperty(value = "淇敼鍚庢壒娆″彿")
- private String updateBatchNo;
+ @Excel(name = "搴忓彿")
+ @ApiModelProperty(value = "搴忓彿")
+ private String index;
- @ApiModelProperty(value = "鎶佃揪鐨勯噰璐暟閲�")
- private BigDecimal qtyArrived;
+ @Excel(name = "渚涘簲鍟嗗悕绉�")
+ @ApiModelProperty(value = "渚涘簲鍟嗗悕绉�")
+ private String supplierName;
- @ApiModelProperty(value = "闆朵欢鎻忚堪")
- private String partDesc;
+ @Excel(name = "鍒拌揣鎵规")
+ @ApiModelProperty(value = "鍒拌揣鎵规")
+ private Integer totalBatch;
- @ApiModelProperty(value = "鍚堟牸鐘舵��")
- private Integer inspectStatus;
+ @Excel(name = "涓嶅悎鏍兼壒娆�")
+ @ApiModelProperty(value = "涓嶅悎鏍兼壒娆�")
+ private Integer unqualifiedBatch;
- @ApiModelProperty(value = "涓嬪彂鏃堕棿")
- private Date sendTime;
-}
+ @Excel(name = "鍚堟牸鐜�(%)")
+ @ApiModelProperty(value = "鍚堟牸鐜�(%)")
+ private BigDecimal passRate;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java
index 123c9fe..e108c5d 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java
@@ -47,6 +47,12 @@
*/
Map<String, Object> getRawPassRateByCake(@Param("dto") DataAnalysisDto dataAnalysisDto);
+ /**
+ * 鏌ョ湅鐗╂枡灞炴�ф槑缁嗚〃鏍�
+ *
+ * @param dataAnalysisDto 鏌ユ壘鍊�
+ * @return 鏄庣粏琛ㄦ牸
+ */
List<MaterialPropTableDTO> getMaterialPropTable(@Param("dto") DataAnalysisDto dataAnalysisDto);
diff --git a/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml b/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
index 3c19453..749041b 100644
--- a/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
+++ b/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
@@ -241,17 +241,18 @@
<select id="getMaterialPropTable" resultType="com.ruoyi.inspect.dto.MaterialPropTableDTO">
SELECT
- iiq.update_batch_no AS updateBatchNo, -- 淇敼鍚庢壒娆″彿
- iiq.qty_arrived AS qtyArrived, -- 鎶佃揪鐨勯噰璐暟閲�
- iiq.part_desc AS partDesc, -- 闆朵欢鎻忚堪
- iiq.inspect_status AS inspectStatus, -- 鍚堟牸鐘舵��
- io1.send_time AS sendTime -- 涓嬪彂鏃堕棿
+ iiq.supplier_name AS supplierName,
+ COUNT(*) AS totalBatch,
+ SUM(CASE WHEN iiq.inspect_status = 2 THEN 1 ELSE 0 END) AS unqualifiedBatch,
+ ROUND(SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) / COUNT(*)* 100, 2 ) AS passRate
+
FROM ifs_inventory_quantity iiq
INNER JOIN ins_order io1
ON io1.ifs_inventory_id = iiq.id
AND io1.order_type = #{dto.orderType}
AND io1.state != -1
AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
+
LEFT JOIN (
SELECT
ins_order_id,
@@ -260,6 +261,7 @@
FROM ins_sample
GROUP BY ins_order_id
) ins ON ins.ins_order_id = io1.id
+
WHERE
iiq.is_finish = 1
AND iiq.inspect_status IN (1,2)
@@ -280,7 +282,12 @@
AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
</if>
- ORDER BY io1.send_time DESC
+ GROUP BY
+ iiq.supplier_name
+
+ ORDER BY
+ passRate DESC;
+
</select>
<select id="getRawProductAnalysisAllSample" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto">
--
Gitblit v1.9.3