ZengTao
2025-11-11 aa5d2f68e1d97f7a1b20fa15e1bde9195544bb3e
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml
@@ -2,143 +2,197 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mes.hollow.mapper.HollowGlassRelationInfoMapper">
    <resultMap id="baseMap" type="com.mes.hollow.entity.dto.HollowGlassDetailsDTO">
        <result column="process_id" property="flowCardId"/>
        <result column="child_width" property="width"/>
        <result column="child_height" property="height"/>
        <result column="order_number" property="orderSort"/>
        <result column="technology_number" property="layer"/>
        <result column="quantity" property="quantity"/>
    </resultMap>
    <resultMap id="lackBaseMap" type="com.mes.hollow.entity.dto.LackDetailsDTO">
        <result column="flow_card_id" property="flowCardId"/>
        <result column="layer" property="layer"/>
        <result column="films_id" property="filmsId"/>
        <result column="first_length" property="width"/>
        <result column="second_Length" property="height"/>
        <result column="glass_type" property="glassType"/>
        <result column="filmsid" property="filmsId"/>
        <result column="width" property="width"/>
        <result column="height" property="height"/>
        <result column="thickness" property="thickness"/>
        <result column="lack_cout" property="lackCount"/>
        <result column="lack_count" property="lackCount"/>
        <result column="damage_count" property="damageCount"/>
    </resultMap>
    <select id="queryFlowCardIdMaxLayerGlassInfo" resultMap="baseMap">
        with temp_flow as (SELECT t.process_id,
                                  t.order_id,
                                  t.order_number,
                                  t.technology_number,
                                  t.quantity,
                                  t1.child_width,
                                  t1.child_height
                           from pp.flow_card t
                                    LEFT JOIN sd.order_glass_detail t1
                                              on t.order_id = t1.order_id
                                                  and t.order_number = t1.order_number
                                                  and t.technology_number = t1.technology_number
                           where t.process_id = #{flowCardId}),
             glass_info_temp as (
                 select process_id,
                        order_id,
                        GREATEST(child_width, child_height) as first_length,
                        least(child_width, child_height)    as second_length,
                        child_width,
                        child_height,
                        order_number,
                        technology_number,
                        quantity
                 from temp_flow
                 where technology_number = #{totalLayer}
             )
        select row_number() over (order by second_length desc,first_length desc) as rn, t.*
        from glass_info_temp t
    </select>
    <select id="queryFlowCardIdLayerGlassInfo" resultMap="baseMap">
        with temp_flow as (SELECT t.process_id,
                                  t.order_id,
                                  t.order_number,
                                  t.technology_number,
                                  t.quantity,
                                  t1.child_width,
                                  t1.child_height
                           from pp.flow_card t
                                    LEFT JOIN sd.order_glass_detail t1
                                              on t.order_id = t1.order_id
                                                  and t.order_number = t1.order_number
                                                  and t.technology_number = t1.technology_number
                           where t.process_id = #{flowCardId}),
             glass_info_max_layer_temp as (
                 select process_id,
                        order_id,
                        GREATEST(child_width, child_height) as first_length,
                        least(child_width, child_height)    as second_length,
                        child_width,
                        child_height,
                        order_number,
                        technology_number,
                        quantity
                 from temp_flow
                 where technology_number = #{totalLayer}
             ),
             glass_info_layer_temp as (
                 select process_id,
                        order_id,
                        GREATEST(child_width, child_height) as first_length,
                        least(child_width, child_height)    as second_length,
                        child_width,
                        child_height,
                        order_number,
                        technology_number,
                        quantity
                 from temp_flow
                 where technology_number = #{layer}
             ),
             max_layer_sequence as (
                 select row_number() over (order by second_length desc,first_length desc) as rn, t.order_number
                 from glass_info_max_layer_temp t
             ),
             result as (select t.*
                        from glass_info_layer_temp t
                                 INNER join max_layer_sequence t1 on t.order_number = t1.order_number
                        order by t1.rn)
        select *
        from result
    </select>
    <select id="queryLackByFlowCard" resultMap="lackBaseMap">
        with relation_length as (
            select flow_card_id,
                   layer,
                   tempering_layout_id,
                   tempering_feed_sequence,
                   GREATEST(width, height) as first_length,
                   LEAST(width, height)    as second_Length,
                   width,
                   height,
                   thickness,
                   films_id
            from hollow_glass_relation_info
            where flow_card_id = #{flowCardId}
              and tempering_layout_id is null
              and tempering_feed_sequence is null
    <select id="queryLackByFlowCard" resultType="com.mes.hollow.entity.dto.LackDetailsDTO">
        with hollow_flow_temp AS (
        SELECT DISTINCT flow_card_id
        FROM hollow_big_storage_cage_details
        WHERE state = 100
        <if test="flowCardId != null and flowCardId != ''">
            and flow_card_id = #{flowCardId}
        </if>
        )
        select flow_card_id, layer, first_length, films_id, second_Length, thickness, count(*) as lack_cout
        from relation_length
        group by flow_card_id, layer, films_id, first_length, second_Length, thickness
        , glass_temp as (
        select t1.*
        from hollow_flow_temp t
        INNER JOIN glass_info t1 on t.flow_card_id = t1.flow_card_id
        )
        , detail_temp as (
        select t.*
        from glass_temp t
        left join hollow_big_storage_cage_details t1 on t.glass_id = t1.glass_id
        where t1.glass_id is null
        )
        , damage_ranked AS (
        SELECT t.flow_card_id,
        t.layer,
        t.glass_id,
        t.glass_type,
        t.width,
        t.height,
        t.filmsId,
        t.thickness,
        case
        when type in (8, 9) and status = 1 then ''
        else t1.working_procedure end as working_procedure,
        ROW_NUMBER() OVER (PARTITION BY t1.glass_id ORDER BY t1.id DESC) as rn
        FROM detail_temp t
        inner join damage t1 on t.glass_id = t1.glass_id
        )
        , damage_latest AS (
        SELECT *
        FROM damage_ranked
        WHERE rn = 1
        )
        select *
        from damage_latest
    </select>
    <select id="queryAllLackByFlowCard" resultMap="lackBaseMap">
        WITH flow_card_id_info AS (
            SELECT DISTINCT flow_card_id
            FROM hollow_big_storage_cage_details
            WHERE state = 100
        ),
             glass_temp AS (
                 SELECT t.*
                 FROM glass_info t
                          INNER JOIN flow_card_id_info t1 ON t.flow_card_id = t1.flow_card_id
             ),
             detail_temp AS (
                 SELECT t.*
                 FROM glass_temp t
                 WHERE NOT EXISTS(
                         SELECT 1
                         FROM hollow_big_storage_cage_details t1
                         WHERE t1.glass_id = t.glass_id
                           AND t1.state NOT IN (8, 9)
                     )
             ),
             damage_latest AS (
                 SELECT dr.glass_id,
                        dr.type,
                        dr.status
                 FROM (
                          SELECT t1.glass_id,
                                 t1.type,
                                 t1.status,
                                 ROW_NUMBER() OVER(PARTITION BY t1.glass_id ORDER BY t1.id DESC) as rn
                          FROM detail_temp t
                                   INNER JOIN damage t1 ON t.flow_card_id = t1.process_id
                      ) dr
                 WHERE dr.rn = 1
             ),
             result_temp AS (
                 SELECT t.flow_card_id,
                        t.layer,
                        t.glass_type,
                        t.thickness,
                        t.filmsId,
                        t.width,
                        t.height,
                        COUNT(DISTINCT t.glass_id)                                                        as lack_count,
                        COUNT(DISTINCT
                              CASE WHEN t1.type IN (8, 9) AND t1.status = 1 THEN t.glass_id END)          as damage_count
                 FROM detail_temp t
                          LEFT JOIN damage_latest t1 ON t.glass_id = t1.glass_id
                 GROUP BY t.flow_card_id,
                          t.layer,
                          t.glass_type,
                          t.thickness,
                          t.filmsId,
                          t.width,
                          t.height
             )
        SELECT *
        FROM result_temp
        ORDER BY flow_card_id, layer;
    </select>
    <select id="queryLayerByFlowCardId" resultType="java.lang.Integer">
        select count(distinct layer)
        from hollow_glass_relation_info
        where flow_card_id = #{flowCardId}
    </select>
    <select id="queryProductNameByFlowCardId" resultType="java.lang.String">
        select product_name
        from sd.order_detail
        where (order_id, order_number) = (
            select min(order_id) as order_id, min(order_number) as order_number
            from pp.flow_card
            where process_id = #{flowCardId}
    <select id="queryLackGlassByFlowCard" resultType="com.mes.hollow.entity.dto.LackDetailsDTO">
        with glass_temp as (
            select *
            from glass_info
            where flow_card_id = #{flowCardId}
              and glass_type = #{orderSort}
              and layer = #{layer}
        )
        limit 1
           , detail_temp as (
            select t.*
            from glass_temp t
                     left join hollow_big_storage_cage_details t1 on t.glass_id = t1.glass_id and t1.state not in (8, 9)
            where t1.glass_id is null
        )
           , damage_ranked AS (
            SELECT t.flow_card_id,
                   t.layer,
                   t.glass_id,
                   t.glass_type,
                   t.width,
                   t.height,
                   t.filmsId,
                   t.thickness,
                   case
                       when type in (8, 9) and status = 1 then ''
                       else t1.working_procedure end as working_procedure,
                   ROW_NUMBER()                         OVER (PARTITION BY t1.glass_id ORDER BY t1.id DESC) as rn
            FROM detail_temp t
                     inner join damage t1 on t.glass_id = t1.glass_id
        )
           , damage_latest AS (
            SELECT *
            FROM damage_ranked
            WHERE rn = 1
        )
        select *
        from damage_latest
    </select>
    <select id="queryLackByFlowCardByERP" resultType="com.mes.hollow.entity.dto.LackDetailsDTO">
        WITH RECURSIVE nums(n) AS (
        SELECT 1
        UNION ALL
        SELECT n + 1 FROM nums WHERE n &lt; (SELECT MAX(quantity) FROM (
        <foreach collection="flowCardIdList" item="item" separator="UNION ALL">
            SELECT #{item.lackQuantity} AS quantity
        </foreach>
        ) t)
        )
        <foreach collection="flowCardIdList" item="item" separator="UNION ALL">
            SELECT t1.*
            FROM (
            SELECT
            g.flow_card_id AS flowCardId,
            g.layer AS layer,
            g.glass_type AS glassType,
            g.filmsid AS filmsId,
            g.width AS width,
            g.height AS height,
            g.thickness AS thickness
            FROM glass_info g
            WHERE g.flow_card_id = #{item.processId}
            AND g.layer = #{item.technologyNumber}
            AND g.glass_type = #{item.orderNumber}
            LIMIT 1
            ) t1
            CROSS JOIN nums
            WHERE nums.n &lt;= #{item.lackQuantity}
        </foreach>
    </select>
    <update id="clearDirtyFlowCardData">
        update hollow_glass_relation_info