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 | 336 +++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 310 insertions(+), 26 deletions(-)
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index c016951..bb3e9b2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -13,46 +13,111 @@
<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 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
- LEFT JOIN BIG_STORAGE_CAGE_DETAILS T2 ON T.ENGINEER_ID = T2.ENGINEER_ID
- AND T.GLASS_ID = T2.GLASS_ID
- WHERE
- T1.GLASS_ID IS NULL
- AND T2.GLASS_ID IS NULL
- AND ( T.ENGINEER_ID
- , T.TEMPERING_LAYOUT_ID ) IN ( SELECT DISTINCT ENGINEER_ID
- , TEMPERING_LAYOUT_ID FROM BIG_STORAGE_CAGE_DETAILS WHERE STATE = 100 )
- GROUP BY
- T.ENGINEER_ID,
- T.TEMPERING_LAYOUT_ID
- HAVING
- COUNT = 0
- ORDER BY
- T.TEMPERING_LAYOUT_ID
- LIMIT 1
+ SELECT T2.*
+ FROM (
+ 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 = 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)
+ 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 >= #{count} LIMIT 1
+ HAVING SLOT_COUNT >= #{count}
+ ORDER BY SLOT_COUNT DESC
</select>
<select id="queryGlassMaxAndMin" resultMap="slotSequenceDTO">
SELECT T.*,
@@ -61,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
@@ -73,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) < 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) < 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