Commit 2e997ea1 authored by wanghao's avatar wanghao

1 空闲柜子查找优化

parent 3d79e866
...@@ -104,26 +104,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -104,26 +104,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
FROM ( FROM (
SELECT SELECT
*, *,
-- 计算距离:北边(1-15)距离范围1-150,南边(16-30)距离范围151-300(确保北边优先) -- 计算排序权重:实现1,16,2,17,3,18,...的交替顺序
CASE CASE
-- 北边柜子:(柜子编号-1)*10 + 层号(1-1→1,1-10→10,15-10→150) -- 1-15号柜:奇数权重 1,3,5,7,...
WHEN cabinet_num BETWEEN 1 AND 15 THEN (cabinet_num - 1) * 10 + layer_num WHEN cabinet_num BETWEEN 1 AND 15 THEN (cabinet_num - 1) * 2 + 1
-- 南边柜子:在北边最大距离(150)基础上累加,确保所有南边距离>北边(16-1→151,30-10→300 -- 16-30号柜:偶数权重 2,4,6,8,...(对应对面的柜子
WHEN cabinet_num BETWEEN 16 AND 30 THEN 150 + (cabinet_num - 16) * 10 + layer_num WHEN cabinet_num BETWEEN 16 AND 30 THEN (cabinet_num - 16) * 2 + 2
END AS distance END AS sort_weight
FROM ( FROM (
SELECT SELECT
*, *,
-- 拆分柜子编号(如1-1中的“1” -- 拆分柜子编号(如1-1中的"1"
CAST(SUBSTRING_INDEX(f_storey_code, '-', 1) AS UNSIGNED) AS cabinet_num, CAST(SUBSTRING_INDEX(f_storey_code, '-', 1) AS UNSIGNED) AS cabinet_num,
-- 拆分层号(如1-1中的“1” -- 拆分层号(如1-1中的"1"
CAST(SUBSTRING_INDEX(f_storey_code, '-', -1) AS UNSIGNED) AS layer_num CAST(SUBSTRING_INDEX(f_storey_code, '-', -1) AS UNSIGNED) AS layer_num
FROM t_storey_info FROM t_storey_info
WHERE f_status = '0' -- 只筛选空闲状态 WHERE f_status = '0' -- 只筛选空闲状态
) AS parsed ) AS parsed
) AS calculated ) AS calculated
-- 按距离升序排序(北边先于南边,同区域内近的在前) -- 按排序权重升序,同柜子内按层号升序
ORDER BY distance ASC ORDER BY sort_weight ASC, layer_num ASC
LIMIT 1; LIMIT 1;
</select> </select>
<insert id="insertBatch" parameterType="list"> <insert id="insertBatch" parameterType="list">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment