wu
2025-10-24 a325f9eda08af39cce45cba363e4247a1b7d5465
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -60,30 +60,26 @@
    </resultMap>
    <select id="temperingIsAllByTemperingLayoutId" resultMap="temperingLayoutDTO">
        SELECT T2.*
        SELECT T.*
        FROM (
                 SELECT ENGINEER_ID, TEMPERING_LAYOUT_ID, COUNT(TEMPERING_FEED_SEQUENCE) AS COUNT
                 SELECT ENGINEER_ID, TEMPERING_LAYOUT_ID, COUNT(distinct TEMPERING_FEED_SEQUENCE) AS COUNT
                 FROM BIG_STORAGE_CAGE_DETAILS
                 WHERE STATE = 100
                   and ENGINEER_ID = #{engineerId}
                   AND TEMPERING_LAYOUT_ID = #{temperingLayoutId}
                 GROUP BY ENGINEER_ID, TEMPERING_LAYOUT_ID
             ) T2
                 INNER JOIN (SELECT T.ENGINEER_ID,
                                    T.TEMPERING_LAYOUT_ID,
                                    COUNT(T.TEMPERING_FEED_SEQUENCE) AS COUNT
                             FROM GLASS_INFO T
                                 LEFT JOIN DAMAGE T1
                             ON T.ENGINEER_ID = T1.ENGINEER_ID
                                 AND T.GLASS_ID = T1.GLASS_ID
                                 AND T1.TYPE in (8, 9)
                             WHERE T1.GLASS_ID IS NULL
                               and T.ENGINEER_ID = #{engineerId}
                               AND T.TEMPERING_LAYOUT_ID = #{temperingLayoutId}
                             GROUP BY T.ENGINEER_ID,
                                 T.TEMPERING_LAYOUT_ID) T3 ON T2.ENGINEER_ID = T3.ENGINEER_ID
            AND T2.TEMPERING_LAYOUT_ID = T3.TEMPERING_LAYOUT_ID
            AND T2.COUNT = T3.COUNT
             ) T
                 INNER JOIN (SELECT ENGINEER_ID,
                                    TEMPERING_LAYOUT_ID,
                                    COUNT(distinct TEMPERING_FEED_SEQUENCE) AS COUNT
                             FROM GLASS_INFO
                             WHERE ENGINEER_ID = #{engineerId}
                               AND TEMPERING_LAYOUT_ID = #{temperingLayoutId}
                             GROUP BY ENGINEER_ID,
                                      TEMPERING_LAYOUT_ID) T1
                            ON T.ENGINEER_ID = T1.ENGINEER_ID
                                AND T.TEMPERING_LAYOUT_ID = T1.TEMPERING_LAYOUT_ID
                                AND T.COUNT = T1.COUNT
    </select>
    <select id="temperingIsAll" resultMap="temperingLayoutDTO">
@@ -93,14 +89,14 @@
                        T.TEMPERING_LAYOUT_ID,
                        COUNT(T.TEMPERING_FEED_SEQUENCE) AS COUNT
                 FROM GLASS_INFO T
                     LEFT JOIN DAMAGE T1
                 ON T.ENGINEER_ID = T1.ENGINEER_ID
                     AND T.GLASS_ID = T1.GLASS_ID
                     AND (T1.TYPE = 8
                     OR T1.TYPE = 9)
                          LEFT JOIN DAMAGE T1
                                    ON T.ENGINEER_ID = T1.ENGINEER_ID
                                        AND T.GLASS_ID = T1.GLASS_ID
                                        AND (T1.TYPE = 8
                                            OR T1.TYPE = 9)
                 WHERE T1.GLASS_ID IS NULL
                 GROUP BY T.ENGINEER_ID,
                     T.TEMPERING_LAYOUT_ID
                          T.TEMPERING_LAYOUT_ID
             ) T2
                 INNER JOIN (SELECT ENGINEER_ID, TEMPERING_LAYOUT_ID, COUNT(TEMPERING_FEED_SEQUENCE) AS COUNT
                             FROM BIG_STORAGE_CAGE_DETAILS
@@ -190,7 +186,7 @@
        damage_temp as (
        select engineer_id, tempering_layout_id, count(*) as damage_count
        from damage
        where type in(8,9)
        where type in(8,9) and STATUS = 1
        group by engineer_id, tempering_layout_id
        ),
        result as (
@@ -227,6 +223,10 @@
                         t.engineer_id = t1.engineer_id and t.tempering_layout_id = t1.tempering_layout_id and
                         t.tempering_feed_sequence = t1.tempering_feed_sequence
                 where t1.state = 100
        AND T1.DEVICE_ID IN
        <foreach collection="deviceIdList" item="item" open='(' close=')' separator=','>
            #{item}
        </foreach>
                 group by t.engineer_id, t.tempering_layout_id, t.virtual_slot
             ),
             result_one as (
@@ -296,9 +296,65 @@
    <select id="querybigStorageCageDetail" resultType="com.mes.base.entity.vo.BigStorageVO">
        select bsc.device_id, bsc.slot, count(bscd.glass_id) as count
        from big_storage_cage bsc
            left join big_storage_cage_details bscd
        on bsc.slot = bscd.slot and bscd.state in (100, 102, 103, 104)
                 left join big_storage_cage_details bscd
                           on bsc.slot = bscd.slot and bscd.state in (100, 102, 103, 104)
        group by bsc.device_id, bsc.slot
        order by bsc.device_id, bsc.slot
    </select>
    <select id="queryTemperingGlassCountSummary" resultMap="temperingGlassCount">
        with glass_info_temp as (
        select engineer_id, tempering_layout_id, count(*) as total_count
        from glass_info
        group by engineer_id, tempering_layout_id
        ),
        big_details_temp as (
        select engineer_id, tempering_layout_id, count(*) as real_count, films_id, thickness
        from big_storage_cage_details
        where state = 100
        <if test="isTempering == 0">
            and tempering_layout_id = 0
        </if>
        <if test="isTempering == 1">
            and tempering_layout_id != 0
        </if>
        group by engineer_id, tempering_layout_id, films_id, thickness
        ),
        damage_temp as (
        select engineer_id, tempering_layout_id, count(*) as damage_count
        from damage
        where type in(8,9) and STATUS = 1
        group by engineer_id, tempering_layout_id
        ),
        result as (
        select t.engineer_id,
        t.tempering_layout_id,
        t.films_id,
        t.thickness,
        total_count,
        real_count,
        ifnull(damage_count, 0) as damage_count,
        case when total_count - real_count - ifnull(damage_count, 0) &lt; 0 then 0 else
        total_count - real_count - ifnull(damage_count, 0) end as lack_count
        from big_details_temp t
        inner join glass_info_temp t1 on t.engineer_id = t1.engineer_id and
        t.tempering_layout_id = t1.tempering_layout_id
        left join damage_temp t2
        on t.engineer_id = t2.engineer_id and t.tempering_layout_id = t2.tempering_layout_id
        ),
        -- 二次汇总层
        secondary_summary as (
        select
        engineer_id,
        films_id,
        thickness,
        count(distinct tempering_layout_id) as total_count, -- 计算totalCount的累计数(去重计数)
        sum(total_count) as real_count -- 计算realCount的总和
        from result
        group by engineer_id, films_id, thickness
        )
        select *
        from secondary_summary
        order by engineer_id, films_id, thickness
    </select>
</mapper>