gongchunyi
2026-06-25 caab0b18b4500c34173f0f932499b7324997ab92
fix: 质检报表合格率修改
已修改4个文件
135 ■■■■■ 文件已修改
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/quality/QualityInspectMapper.xml 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -53,6 +53,7 @@
        if (StringUtils.isNotBlank(timingTask.getTaskName())) {
            queryWrapper.like(TimingTask::getTaskName, timingTask.getTaskName());
        }
        queryWrapper.orderByDesc(TimingTask::getCreateTime);
        IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, queryWrapper);
        // 2. 如果没有数据,直接返回空分页
src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java
@@ -29,9 +29,9 @@
    List<QualityInspectStatDto> getInspectStatistics();
    /**
     * 获取合格率统计数据
     * 获取合格率统计原始数据
     */
    List<QualityPassRateDto> getPassRateStatistics();
    List<QualityInspect> getRawPassRateStatistics();
    /**
     * 获取月度合格率统计数据
src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
@@ -1,21 +1,16 @@
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.pojo.QualityInspect;
import com.ruoyi.quality.service.QualityReportService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@@ -32,7 +27,79 @@
    @Override
    public List<QualityPassRateDto> getPassRateStatistics() {
        return qualityInspectMapper.getPassRateStatistics();
        List<QualityInspect> rawList = qualityInspectMapper.getRawPassRateStatistics();
        Map<Integer, QualityPassRateDto> map = new HashMap<>();
        for (int i = 0; i <= 2; i++) {
            QualityPassRateDto dto = new QualityPassRateDto();
            dto.setModelType(i);
            dto.setTotalCount(BigDecimal.ZERO);
            dto.setCompletedCount(BigDecimal.ZERO);
            dto.setQualifiedCount(BigDecimal.ZERO);
            dto.setUnqualifiedCount(BigDecimal.ZERO);
            map.put(i, dto);
        }
        for (QualityInspect qi : rawList) {
            Integer type = qi.getInspectType();
            if (type == null || !map.containsKey(type) || qi.getQuantity() == null) continue;
            QualityPassRateDto dto = map.get(type);
            BigDecimal qty = qi.getQuantity();
            dto.setTotalCount(dto.getTotalCount().add(qty));
            if (qi.getInspectState() != null && qi.getInspectState() == 1) {
                dto.setCompletedCount(dto.getCompletedCount().add(qty));
                BigDecimal qualified = BigDecimal.ZERO;
                BigDecimal unqualified = BigDecimal.ZERO;
                String result = qi.getCheckResult();
                BigDecimal qiQualified = qi.getQualifiedQuantity() != null ? qi.getQualifiedQuantity() : BigDecimal.ZERO;
                BigDecimal qiUnqualified = qi.getUnqualifiedQuantity() != null ? qi.getUnqualifiedQuantity() : BigDecimal.ZERO;
                if ("合格".equals(result)) {
                    qualified = qty;
                } else if ("不合格".equals(result)) {
                    unqualified = qty;
                } else if ("部分合格".equals(result)) {
                    if (qiUnqualified.compareTo(BigDecimal.ZERO) > 0) {
                        qualified = qty.subtract(qiUnqualified);
                        unqualified = qiUnqualified;
                    } else {
                        qualified = qiQualified;
                        unqualified = qty.subtract(qiQualified);
                    }
                } else {
                    qualified = qiQualified;
                    unqualified = qiUnqualified;
                }
                dto.setQualifiedCount(dto.getQualifiedCount().add(qualified));
                dto.setUnqualifiedCount(dto.getUnqualifiedCount().add(unqualified));
            }
        }
        List<QualityPassRateDto> resultList = new ArrayList<>();
        for (int i = 0; i <= 2; i++) {
            QualityPassRateDto dto = map.get(i);
            if (dto.getTotalCount().compareTo(BigDecimal.ZERO) == 0) {
                dto.setCompletionRate(BigDecimal.ZERO);
            } else {
                dto.setCompletionRate(dto.getCompletedCount().divide(dto.getTotalCount(), 4, java.math.RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, java.math.RoundingMode.HALF_UP));
            }
            if (dto.getCompletedCount().compareTo(BigDecimal.ZERO) == 0) {
                dto.setPassRate(BigDecimal.ZERO);
            } else {
                dto.setPassRate(dto.getQualifiedCount().divide(dto.getCompletedCount(), 4, java.math.RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, java.math.RoundingMode.HALF_UP));
            }
            resultList.add(dto);
        }
        return resultList;
    }
    @Override
src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -158,7 +158,7 @@
        GROUP BY pt.root_id, pt.root_name
    </select>
    <select id="getPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto">
    <select id="getRawPassRateStatistics" resultType="com.ruoyi.quality.pojo.QualityInspect">
        WITH RECURSIVE product_tree AS (SELECT id,
                                               product_name,
                                               CASE product_name
@@ -177,42 +177,15 @@
                                        FROM product p
                                                 INNER JOIN product_tree pt ON p.parent_id = pt.id)
        SELECT base.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 THEN IFNULL(qi.qualified_quantity,
                                                                          CASE WHEN qi.check_result = '合格' THEN IFNULL(qi.quantity, 0) ELSE 0 END)
                                  ELSE 0 END), 0)                                  AS qualifiedCount,
               COALESCE(SUM(CASE
                                  WHEN qi.inspect_state = 1 THEN IFNULL(qi.unqualified_quantity,
                                                                        CASE WHEN qi.check_result IN ('不合格', '部分合格') THEN IFNULL(qi.quantity, 0) ELSE 0 END)
                                  ELSE 0 END), 0)                                  AS unqualifiedCount,
               IF(COALESCE(SUM(qi.quantity), 0) = 0, 0,
                  ROUND(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END)
                            / SUM(qi.quantity) * 100, 2)
                   )                                                                        AS completionRate,
               IF(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) = 0, 0,
                  ROUND(SUM(CASE
                                WHEN qi.inspect_state = 1 THEN IFNULL(qi.qualified_quantity,
                                                                        CASE WHEN qi.check_result = '合格' THEN IFNULL(qi.quantity, 0) ELSE 0 END)
                                ELSE 0 END)
                            / SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END) * 100, 2)
                   )                                                                        AS passRate
        FROM (SELECT 0 AS modelType
              UNION ALL
              SELECT 1
              UNION ALL
              SELECT 2) base
                 LEFT JOIN product_tree pt ON base.modelType = pt.modelType
                 LEFT JOIN product_model pm ON pm.product_id = pt.id
                 LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id
        GROUP BY base.modelType
        ORDER BY base.modelType
        SELECT pt.modelType AS inspectType,
               qi.quantity,
               qi.inspect_state AS inspectState,
               qi.check_result AS checkResult,
               qi.qualified_quantity AS qualifiedQuantity,
               qi.unqualified_quantity AS unqualifiedQuantity
        FROM product_tree pt
                 INNER JOIN product_model pm ON pm.product_id = pt.id
                 INNER JOIN quality_inspect qi ON qi.product_model_id = pm.id
    </select>
    <select id="getMonthlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityMonthlyPassRateDto">