gongchunyi
2 天以前 d546e42089177442c5e43f9944052fcf3611b08d
feat: 质检绑定支持规格型号
已添加2个文件
已修改12个文件
120 ■■■■ 文件已修改
doc/20260916_检测标准绑定支持规格型号.sql 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/dto/QualityTestStandardBindingDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/dto/QualityTestStandardDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/mapper/QualityTestStandardMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/pojo/QualityTestStandardBinding.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/service/IQualityTestStandardService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/service/impl/QualityTestStandardBindingServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/service/impl/QualityTestStandardServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/quality/QualityTestStandardBindingMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/quality/QualityTestStandardMapper.xml 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/20260916_¼ì²â±ê×¼°ó¶¨Ö§³Ö¹æ¸ñÐͺÅ.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
SET
@col_exists = (
    SELECT COUNT(1)
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'quality_test_standard_binding'
      AND COLUMN_NAME = 'product_model_id'
);
SET
@ddl = IF(@col_exists = 0,
    'ALTER TABLE quality_test_standard_binding ADD COLUMN product_model_id BIGINT NULL COMMENT ''产品规格型号ID,为空表示绑定整个产品'' AFTER product_id',
    'SELECT ''product_model_id å·²å­˜åœ¨ï¼Œè·³è¿‡'' AS msg');
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET
@idx_exists = (
    SELECT COUNT(1)
    FROM information_schema.STATISTICS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'quality_test_standard_binding'
      AND INDEX_NAME = 'idx_qtsb_standard_product'
);
SET
@ddl = IF(@idx_exists = 0,
    'ALTER TABLE quality_test_standard_binding ADD INDEX idx_qtsb_standard_product (test_standard_id, product_id, product_model_id)',
    'SELECT ''索引已存在,跳过'' AS msg');
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -24,6 +24,7 @@
import com.ruoyi.project.system.service.ISysNoticeService;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.quality.dto.QualityTestStandardDto;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityInspectParamMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
@@ -319,7 +320,7 @@
        qualityInspect.setUnit(saleProduct.getUnit());
        qualityInspect.setQuantity(saleProduct.getQuantity());
        qualityInspectMapper.insert(qualityInspect);
        List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0, null);
        List<QualityTestStandardDto> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), saleProduct.getProductModelId(), 0, null);
        if (qualityTestStandard.size() > 0) {
            qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
            qualityInspectMapper.updateById(qualityInspect);
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -24,6 +24,7 @@
import com.ruoyi.production.service.ProductionProductMainService;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.quality.dto.QualityTestStandardDto;
import com.ruoyi.quality.mapper.*;
import com.ruoyi.quality.pojo.*;
import com.ruoyi.stock.pojo.StockInRecord;
@@ -327,7 +328,7 @@
                qualityInspect.setProductMainId(productionProductMain.getId());
                qualityInspect.setProductModelId(productModel.getId());
                qualityInspectMapper.insert(qualityInspect);
                List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType, process);
                List<QualityTestStandardDto> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), productModel.getId(), inspectType, process);
                if (!qualityTestStandard.isEmpty()) {
                    qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
                    qualityInspectMapper.updateById(qualityInspect);
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -39,6 +39,7 @@
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.purchase.service.IPurchaseLedgerService;
import com.ruoyi.quality.dto.QualityTestStandardDto;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityInspectParamMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
@@ -191,7 +192,7 @@
        qualityInspect.setUnit(saleProduct.getUnit());
        qualityInspect.setQuantity(saleProduct.getQuantity());
        qualityInspectMapper.insert(qualityInspect);
        List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0,null);
        List<QualityTestStandardDto> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), saleProduct.getProductModelId(), 0,null);
        if (qualityTestStandard.size()>0){
            qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
            qualityInspectMapper.updateById(qualityInspect);
src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java
@@ -121,8 +121,8 @@
    @GetMapping("/getQualityTestStandardByProductId")
    @Operation(summary = "根据产品id查询相关的检验标准")
    @Log(title = "根据产品id查询相关的检验标准", businessType = BusinessType.OTHER)
    public R<?> getQualityTestStandardByProductId(@Nonnull Long productId, @Nonnull Integer inspectType, String process) {
        return R.ok(qualityTestStandardService.getQualityTestStandardByProductId(productId,inspectType,process));
    public R<?> getQualityTestStandardByProductId(@Nonnull Long productId, @Nonnull Integer inspectType, Long productModelId, String process) {
        return R.ok(qualityTestStandardService.getQualityTestStandardByProductId(productId, productModelId, inspectType, process));
    }
    /**
src/main/java/com/ruoyi/quality/dto/QualityTestStandardBindingDto.java
@@ -9,5 +9,7 @@
    private String productName;
    private String model;
    private Long qualityTestStandardBindingId;
}
src/main/java/com/ruoyi/quality/dto/QualityTestStandardDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.ruoyi.quality.dto;
import com.ruoyi.quality.pojo.QualityTestStandard;
import lombok.Data;
@Data
public class QualityTestStandardDto extends QualityTestStandard {
    private String productModel;
}
src/main/java/com/ruoyi/quality/mapper/QualityTestStandardMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.quality.dto.QualityTestStandardDto;
import com.ruoyi.quality.pojo.QualityTestStandard;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@@ -22,5 +23,5 @@
    IPage<QualityTestStandard> qualityTestStandardListPage(Page page, @Param("c") QualityTestStandard qualityTestStandard);
    List<QualityTestStandard> getQualityTestStandardByProductId(@Param("productId") Long productId, @Param("inspectType") Integer inspectType, @Param("process") String process);
    List<QualityTestStandardDto> getQualityTestStandardByProductId(@Param("productId") Long productId, @Param("productModelId") Long productModelId, @Param("inspectType") Integer inspectType, @Param("process") String process);
}
src/main/java/com/ruoyi/quality/pojo/QualityTestStandardBinding.java
@@ -33,6 +33,9 @@
    @Schema(description = "产品ID")
    private Long productId;
    @Schema(description = "产品规格型号ID,为空表示绑定整个产品")
    private Long productModelId;
    @Schema(description = "关联检测标准主表id")
    private Integer testStandardId;
src/main/java/com/ruoyi/quality/service/IQualityTestStandardService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.quality.dto.QualityTestStandardDto;
import com.ruoyi.quality.pojo.QualityTestStandard;
import com.ruoyi.quality.pojo.QualityTestStandardParam;
@@ -22,7 +23,7 @@
    int copyParam(QualityTestStandard qualityTestStandard);
    List<QualityTestStandard> getQualityTestStandardByProductId(Long productId, Integer inspectType,String process);
    List<QualityTestStandardDto> getQualityTestStandardByProductId(Long productId, Long productModelId, Integer inspectType, String process);
    int delQualityTestStandard(List<Integer> ids);
}
src/main/java/com/ruoyi/quality/service/impl/QualityTestStandardBindingServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.quality.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.quality.dto.QualityTestStandardBindingDto;
@@ -36,14 +37,22 @@
        ArrayList<QualityTestStandardBinding> qualityTestStandardBindings1 = new ArrayList<>(qualityTestStandardBindings.size());
        //判断是否已经有绑定过的数据
        for (QualityTestStandardBinding qualityTestStandardBinding : qualityTestStandardBindings) {
            List<QualityTestStandardBinding> testStandardBindings = qualityTestStandardBindingMapper.selectList(Wrappers.<QualityTestStandardBinding>lambdaQuery()
            LambdaQueryWrapper<QualityTestStandardBinding> queryWrapper = Wrappers.<QualityTestStandardBinding>lambdaQuery()
                    .eq(QualityTestStandardBinding::getTestStandardId, qualityTestStandardBinding.getTestStandardId())
                    .eq(QualityTestStandardBinding::getProductId, qualityTestStandardBinding.getProductId()));
            if (testStandardBindings.size() > 0){
                    .eq(QualityTestStandardBinding::getProductId, qualityTestStandardBinding.getProductId());
            if (qualityTestStandardBinding.getProductModelId() == null) {
                queryWrapper.isNull(QualityTestStandardBinding::getProductModelId);
            } else {
                queryWrapper.eq(QualityTestStandardBinding::getProductModelId, qualityTestStandardBinding.getProductModelId());
            }
            if (qualityTestStandardBindingMapper.selectCount(queryWrapper) > 0) {
                continue;
            }
            qualityTestStandardBindings1.add(qualityTestStandardBinding);
        }
        if (qualityTestStandardBindings1.isEmpty()) {
            return 0;
        }
        saveBatch(qualityTestStandardBindings1);
        return 0;
    }
src/main/java/com/ruoyi/quality/service/impl/QualityTestStandardServiceImpl.java
@@ -7,6 +7,7 @@
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
import com.ruoyi.quality.mapper.QualityTestStandardParamMapper;
import com.ruoyi.quality.dto.QualityTestStandardDto;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityTestStandard;
import com.ruoyi.quality.pojo.QualityTestStandardParam;
@@ -59,8 +60,8 @@
    }
    @Override
    public List<QualityTestStandard> getQualityTestStandardByProductId(Long productId, Integer inspectType, String process) {
        return qualityTestStandardMapper.getQualityTestStandardByProductId(productId, inspectType, process);
    public List<QualityTestStandardDto> getQualityTestStandardByProductId(Long productId, Long productModelId, Integer inspectType, String process) {
        return qualityTestStandardMapper.getQualityTestStandardByProductId(productId, productModelId, inspectType, process);
    }
    @Override
src/main/resources/mapper/quality/QualityTestStandardBindingMapper.xml
@@ -15,9 +15,11 @@
    </resultMap>
    <select id="listBinding" resultType="com.ruoyi.quality.dto.QualityTestStandardBindingDto">
        select t2.product_name,
               t3.model,
               t1.id qualityTestStandardBindingId
        from quality_test_standard_binding t1
                 left join product t2 on t1.product_id = t2.id
                 left join product_model t3 on t1.product_model_id = t3.id
        where t1.test_standard_id = #{testStandardId}
    </select>
src/main/resources/mapper/quality/QualityTestStandardMapper.xml
@@ -20,16 +20,35 @@
            AND inspect_type =#{c.inspectType}
        </if>
    </select>
    <select id="getQualityTestStandardByProductId" resultType="com.ruoyi.quality.pojo.QualityTestStandard">
        SELECT qts.*
    <select id="getQualityTestStandardByProductId" resultType="com.ruoyi.quality.dto.QualityTestStandardDto">
        SELECT DISTINCT qts.*, pm.model as product_model
        FROM quality_test_standard qts
                 left join quality_test_standard_binding qtsb on qtsb.test_standard_id = qts.id
                 left join technology_operation toper on qts.process_id = toper.id
        WHERE qtsb.product_id = #{productId}
          AND qts.inspect_type = #{inspectType}
                 left join product_model pm on qtsb.product_model_id = pm.id
        WHERE qts.inspect_type = #{inspectType}
          AND (
              qtsb.product_id = #{productId}
              or qtsb.product_id in (
                  WITH RECURSIVE product_parent AS (
                      SELECT parent_id
                      FROM product
                      WHERE id = #{productId} AND parent_id IS NOT NULL
                      UNION ALL
                      SELECT p.parent_id
                      FROM product p
                      INNER JOIN product_parent pp ON p.id = pp.parent_id
                      WHERE p.parent_id IS NOT NULL
                  )
                  SELECT parent_id FROM product_parent
              )
          )
        <if test="productModelId != null">
            and (qtsb.product_model_id is null or qtsb.product_model_id = #{productModelId})
        </if>
        <if test="process!='' and process!=null">
            and toper.name = #{process}
        </if>
        order by qts.id desc
        order by qtsb.product_model_id is not null, qts.id desc
    </select>
</mapper>