liding
2025-04-07 894f398c74611d6cb42fd0d4e17a41f9b5ab9db4
检验项目参数和查询优化
已修改2个文件
70 ■■■■■ 文件已修改
basic-server/src/main/java/com/ruoyi/basic/excel/MultiSheetImportListener.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/excel/MultiSheetImportListener.java
@@ -78,8 +78,7 @@
        // 查询数据库中是否存在相同记录
        LambdaQueryWrapper<StructureItemParameter> wrapper = Wrappers.lambdaQuery(StructureItemParameter.class)
                .eq(StructureItemParameter::getInspectionItem, data.getInspectionItem())
                .eq(StructureItemParameter::getSample, data.getSample())
                .last("limit 1");
                .eq(StructureItemParameter::getSample, data.getSample());
        // 判断是否有检验项类型
        if (ObjectUtils.isNotEmpty(data.getInspectionItemClass())) {
@@ -169,9 +168,6 @@
        if (data.getManDay() == null) {
            data.setManDay(null);
        }
        // 设置当前Sheet名为分类标识
        data.setInspectionItemClass(currentSheetName);
        // 添加到缓存列表
        cachedList.add(data);
basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml
@@ -43,7 +43,25 @@
        where sample like concat('%', #{sample}, '%')
    </delete>
    <select id="selectItemParameterList" resultType="com.ruoyi.basic.pojo.StructureItemParameter">
        select * from (select A.id,
        WITH temp_sample AS (
        SELECT
        *,
        CASE
        WHEN INSTR(sample, ',') > 0 THEN
        SUBSTRING_INDEX(SUBSTRING_INDEX(sample, '","', 1), '"', -1)
        WHEN sample = '[""]' THEN
        NULL
        WHEN sample = '[]' THEN
        NULL
        ELSE
        TRIM(BOTH '["]' FROM SUBSTRING_INDEX(REPLACE(sample, '[["', ''), '"]]', 1))
        END AS samples
        FROM
        structure_item_parameter
        ),
        temp_join AS (
        SELECT DISTINCT
        A.id,
        inspection_item,
        inspection_item_en,
        inspection_item_subclass,
@@ -75,31 +93,39 @@
        code,
        radius_list,
        rates
        from (select *,
        CASE
        WHEN INSTR(sample, ',') > 0 THEN
        SUBSTRING_INDEX(SUBSTRING_INDEX(sample, '","', 1), '"', -1)
        when sample = '[""]' then null
        when sample = '[]' then null
        ELSE
        TRIM(BOTH '["]' FROM SUBSTRING_INDEX(REPLACE(sample, '[["', ''), '"]]', 1))
        END AS samples
        from structure_item_parameter) A
        left join structure_test_object sto on samples = specimen_name
        FROM
        temp_sample A
        LEFT JOIN
        structure_test_object sto ON A.samples = sto.specimen_name
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>)B
        order by CASE
        </if>
        )
        SELECT
        *
        FROM
        temp_join
        ORDER BY
        -- 处理 code 字段的排序
        CASE
        WHEN code IS NULL THEN 1
        ELSE 0
        END,
        CAST(code AS UNSIGNED),
        case when man_hour_group is NULL then 1
        when man_hour_group ='' then 1 else 0 end,
        -- 处理 man_hour_group 字段的排序
        CASE
        WHEN man_hour_group REGEXP '^[0-9]' THEN CAST(man_hour_group AS UNSIGNED) -- 如果以数字开头,则按照数字大小排序
        WHEN man_hour_group REGEXP '[0-9]+' THEN CAST(SUBSTRING(man_hour_group, 2)AS UNSIGNED) END -- 提取字母后面的数字部分
        ,id asc
        WHEN man_hour_group IS NULL OR man_hour_group = '' THEN 1
        ELSE 0
        END,
        CASE
        WHEN man_hour_group REGEXP '^[0-9]' THEN
        CAST(man_hour_group AS UNSIGNED)
        WHEN man_hour_group REGEXP '[0-9]+' THEN
        CAST(SUBSTRING(man_hour_group, 2) AS UNSIGNED)
        ELSE
        NULL
        END,
        id ASC
    </select>
    <resultMap id="getInsProductions" type="map">