From a325f9eda08af39cce45cba363e4247a1b7d5465 Mon Sep 17 00:00:00 2001
From: wu <731351411@qq.com>
Date: 星期五, 24 十月 2025 15:50:40 +0800
Subject: [PATCH] 切割排产,钢化排产的排序指定功能,排序规则重写

---
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml |  312 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 299 insertions(+), 13 deletions(-)

diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index b49e679..bb3e9b2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -13,10 +13,74 @@
         <result column="engineer_id" property="engineerId"/>
         <result column="tempering_layout_id" property="temperingLayoutId"/>
         <result column="slot" property="slot"/>
+        <result column="glass_count" property="glassCount"/>
         <result column="max_sequence" property="maxSequence"/>
         <result column="min_sequence" property="minSequence"/>
         <result column="remain_width" property="remainWidth"/>
     </resultMap>
+
+    <resultMap id="virtualSlotSequenceDTO" type="com.mes.bigstorage.entity.dto.BigStorageRelationDTO">
+        <result column="engineer_id" property="engineerId"/>
+        <result column="tempering_layout_id" property="temperingLayoutId"/>
+        <result column="virtual_slot" property="virtualSlot"/>
+    </resultMap>
+    <resultMap id="baseSlotSequenceDTO" type="com.mes.bigstorage.entity.dto.BigStorageSequenceDTO">
+        <result column="slot" property="slot"/>
+        <result column="max_sequence" property="maxSequence"/>
+        <result column="min_sequence" property="minSequence"/>
+    </resultMap>
+
+    <resultMap id="temperingGlassCount" type="com.mes.bigstorage.entity.dto.TemperingGlassCountDTO">
+        <result column="engineer_id" property="engineerId"/>
+        <result column="tempering_layout_id" property="temperingLayoutId"/>
+        <result column="films_id" property="filmsId"/>
+        <result column="thickness" property="thickness"/>
+        <result column="total_count" property="totalCount"/>
+        <result column="real_count" property="realCount"/>
+        <result column="damage_count" property="damageCount"/>
+        <result column="lack_count" property="lackCount"/>
+    </resultMap>
+
+    <resultMap id="glassInfoLackDTO" type="com.mes.bigstorage.entity.dto.GlassInfoLackDTO">
+        <result column="flow_card_id" property="flowCardId"/>
+        <result column="width" property="width"/>
+        <result column="height" property="height"/>
+        <result column="thickness" property="thickness"/>
+        <result column="filmsid" property="filmsid"/>
+        <result column="total_layer" property="totalLayer"/>
+        <result column="layer" property="layer"/>
+        <result column="tempering_layout_id" property="temperingLayoutId"/>
+        <result column="tempering_feed_sequence" property="temperingFeedSequence"/>
+        <result column="x_coordinate" property="xCoordinate"/>
+        <result column="y_coordinate" property="yCoordinate"/>
+        <result column="angle" property="angle"/>
+        <result column="engineer_id" property="engineerId"/>
+        <result column="glass_id" property="glassId"/>
+        <result column="is_damage" property="isDamage"/>
+    </resultMap>
+
+    <select id="temperingIsAllByTemperingLayoutId" resultMap="temperingLayoutDTO">
+        SELECT T.*
+        FROM (
+                 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
+             ) 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">
         SELECT T2.*
@@ -24,33 +88,36 @@
                  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
-                 WHERE
-                     T1.GLASS_ID IS NULL
-                 GROUP BY
-                     T.ENGINEER_ID,
-                     T.TEMPERING_LAYOUT_ID
+                 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)
+                 WHERE T1.GLASS_ID IS NULL
+                 GROUP BY T.ENGINEER_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
-                             WHERE STATE in (100, 101, 102, 103)
+                             WHERE STATE in (100)
                              GROUP BY ENGINEER_ID, 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
+                 INNER JOIN ENGINEERING T4 ON T2.ENGINEER_ID = T4.ENGINEER_ID
+        ORDER BY T4.ID, T2.TEMPERING_LAYOUT_ID
     </select>
 
     <select id="queryTemperingOccupySlot" resultMap="temperingLayoutDTO">
-        SELECT TEMPERING_LAYOUT_ID,
+        SELECT ENGINEER_ID,
+               TEMPERING_LAYOUT_ID,
                COUNT(DISTINCT SLOT) as SLOT_COUNT
         FROM BIG_STORAGE_CAGE_DETAILS
         WHERE STATE = 100
         GROUP BY ENGINEER_ID,
                  TEMPERING_LAYOUT_ID
-        HAVING SLOT_COUNT &gt;= #{count} LIMIT 1
+        HAVING SLOT_COUNT &gt;= #{count}
+        ORDER BY SLOT_COUNT DESC
     </select>
     <select id="queryGlassMaxAndMin" resultMap="slotSequenceDTO">
         SELECT T.*,
@@ -59,6 +126,7 @@
                  SELECT ENGINEER_ID,
                         TEMPERING_LAYOUT_ID,
                         SLOT,
+                        count(*)                     as glass_count,
                         MAX(TEMPERING_FEED_SEQUENCE) AS MAX_SEQUENCE,
                         MIN(TEMPERING_FEED_SEQUENCE) AS MIN_SEQUENCE
                  FROM BIG_STORAGE_CAGE_DETAILS
@@ -71,4 +139,222 @@
                  INNER JOIN BIG_STORAGE_CAGE T1 ON T.SLOT = T1.SLOT
         ORDER BY T.MAX_SEQUENCE DESC
     </select>
+
+    <update id="updateBySlot">
+        update big_storage_cage_details
+        <set>
+            state = #{state}
+        </set>
+        <where>
+            (glass_id,slot) in (
+            <foreach collection="list" item="item" separator=",">
+                (#{item.glassId}, #{item.targetSlot})
+            </foreach>
+            )
+            and state !=101
+        </where>
+    </update>
+    <update id="updateDeviceIdBySlot">
+        update big_storage_cage_details t inner join big_storage_cage t1 on t.slot = t1.slot
+        set t.device_id = t1.device_id
+        where t.slot in (
+        <foreach collection="list" item="item" separator=",">
+            #{item}
+        </foreach>
+        )
+    </update>
+
+    <select id="selectTemperingGlassCount" 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
+        )
+        select *
+        from result
+        order by engineer_id,tempering_layout_id
+    </select>
+
+    <select id="queryIsAllNeedDispatchVirtualSlot" resultMap="virtualSlotSequenceDTO">
+        with relation_temp as (
+            select engineer_id, tempering_layout_id, virtual_slot, count(1) as slot_count
+            from big_storage_glass_relation_info
+            group by engineer_id, tempering_layout_id, virtual_slot
+        ),
+             details_temp as (
+                 select t.engineer_id, t.tempering_layout_id, t.virtual_slot, count(1) as slot_count
+                 from big_storage_glass_relation_info t
+                          left join big_storage_cage_details t1 on
+                         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 (
+                 select t.*, t1.slot_count as tslot_count
+                 from relation_temp t
+                          INNER JOIN details_temp t1 on t.engineer_id = t1.engineer_id and
+                                                        t.tempering_layout_id = t1.tempering_layout_id and
+                                                        t.virtual_slot = t1.virtual_slot
+                 where t.slot_count = t1.slot_count
+             )
+        select engineer_id, tempering_layout_id, virtual_slot
+        from result_one
+        order by engineer_id, tempering_layout_id
+    </select>
+
+    <select id="queryNeedDispatchSlot" resultMap="baseSlotSequenceDTO">
+        with glass_id_temp as (
+            select engineer_id, tempering_layout_id, tempering_feed_sequence
+            from big_storage_glass_relation_info
+            where (engineer_id, tempering_layout_id, virtual_slot) =
+                  (#{engineerId}, #{temperingLayoutId}, #{virtualSlot})
+        )
+        select t.slot, max(t1.tempering_feed_sequence) as max_sequence, min(t1.tempering_feed_sequence) as min_sequence
+        from big_storage_cage_details t
+                 inner join big_storage_glass_relation_info t1
+                            on 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 (t.engineer_id, t.tempering_layout_id, t.tempering_feed_sequence) in
+              (select engineer_id, tempering_layout_id, tempering_feed_sequence from glass_id_temp)
+          and t.state = 100
+        group by t.slot
+        order by max_sequence desc
+    </select>
+    <select id="queryLackGlassInfo" resultMap="glassInfoLackDTO">
+        WITH glass_info_temp AS (SELECT *
+                                 FROM glass_info
+                                 WHERE engineer_id = #{engineerId}
+                                   AND tempering_layout_id = #{temperingLayoutId}),
+             big_details_temp AS (SELECT *
+                                  FROM big_storage_cage_details
+                                  WHERE state = 100
+                                    AND engineer_id = #{engineerId}
+                                    AND tempering_layout_id = #{temperingLayoutId}),
+             damage_temp AS (SELECT *
+                             FROM damage
+                             WHERE type IN (8, 9)
+                               AND engineer_id = #{engineerId}
+                               AND tempering_layout_id = #{temperingLayoutId}),
+             result_lack AS (SELECT t.*
+                             FROM glass_info_temp t
+                                      LEFT JOIN big_details_temp t1 ON t.glass_id = t1.glass_id
+                             WHERE t1.glass_id IS NULL),
+             result AS (
+                 SELECT t.*,
+                        CASE
+
+                            WHEN t1.glass_id is null THEN
+                                0
+                            ELSE 1
+                            END AS is_damage
+                 FROM result_lack t
+                          LEFT JOIN damage_temp t1 ON t.glass_id = t1.glass_id
+             )
+        SELECT *
+        FROM result
+    </select>
+    <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)
+        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>
\ No newline at end of file

--
Gitblit v1.8.0