Commit 9b1166f7 authored by tianbo's avatar tianbo

fix(ymt): 修复电梯代码生成逻辑

- 在查询电梯代码时增加纯数字校验,确保代码格式正确 - 修改电梯代码排序方式,使用数值排序替代字符串排序 - 优化电梯代码生成逻辑,提高效率并避免潜在的错误
parent 80d9fa3d
...@@ -26,21 +26,24 @@ ...@@ -26,21 +26,24 @@
SELECT CODE96333 code SELECT CODE96333 code
FROM biz_jg_supervisory_code bjsc FROM biz_jg_supervisory_code bjsc
WHERE CODE96333 LIKE CONCAT(#{elevatorCode}, '%') WHERE CODE96333 LIKE CONCAT(#{elevatorCode}, '%')
AND CODE96333 ~ '^\d+$' -- 确保是纯数字
<if test="status != null and status != ''"> <if test="status != null and status != ''">
and status = #{status} and status = #{status}
</if> </if>
<if test="status != 2 ">ORDER BY CAST(CODE96333 AS UNSIGNED) DESC LIMIT 1 </if> <if test="status != 2 ">ORDER BY CODE96333::BIGINT DESC LIMIT 1 </if>
<if test="status == 2 ">ORDER BY CAST(CODE96333 AS UNSIGNED) ASC LIMIT 1 </if> <if test="status == 2 ">ORDER BY CODE96333::BIGINT ASC LIMIT 1 </if>
</select> </select>
<select id="selectElevatorCodeMaxValue" resultType="com.yeejoin.amos.boot.module.ymt.api.dto.KV"> <select id="selectElevatorCodeMaxValue" resultType="com.yeejoin.amos.boot.module.ymt.api.dto.KV">
WITH ElevatorResults AS ( WITH ElevatorResults AS (
SELECT ROW_NUMBER() OVER (PARTITION BY SUBSTRING (CODE96333 FROM 1 FOR 2) ORDER BY CODE96333 DESC) AS row_num, SELECT ROW_NUMBER() OVER (PARTITION BY SUBSTRING (CODE96333 FROM 1 FOR 2) ORDER BY CODE96333::BIGINT DESC) AS row_num,
CODE96333 CODE96333
FROM biz_jg_supervisory_code FROM biz_jg_supervisory_code
WHERE CREATE_STATUS = 1 WHERE CREATE_STATUS = 1
AND CODE96333 IS NOT NULL AND CODE96333 IS NOT NULL
AND CODE96333 <![CDATA[<> '']]>) AND CODE96333 <![CDATA[<> '']]>
AND CODE96333 ~ '^\d+$' -- 确保是纯数字
)
SELECT '96333_' || SUBSTRING(CODE96333 FROM 1 FOR 2) AS name, SELECT '96333_' || SUBSTRING(CODE96333 FROM 1 FOR 2) AS name,
CODE96333 AS value CODE96333 AS value
FROM ElevatorResults WHERE row_num = 1 FROM ElevatorResults WHERE row_num = 1
...@@ -174,11 +177,13 @@ ...@@ -174,11 +177,13 @@
<select id="selectExceedElevatorCodeList" resultType="java.lang.Integer"> <select id="selectExceedElevatorCodeList" resultType="java.lang.Integer">
SELECT CODE96333 code SELECT CODE96333 code
FROM biz_jg_supervisory_code bjsc FROM biz_jg_supervisory_code bjsc
WHERE code LIKE CONCAT(#{prefix}, '%') WHERE
code ~ '^\d+$' -- 确保是纯数字
AND code LIKE CONCAT(#{prefix}, '%')
<if test="start != null and start != ''"> <if test="start != null and start != ''">
AND code <![CDATA[ >= ]]> #{start} AND code::BIGINT <![CDATA[ >= ]]> #{start}::BIGINT -- 数值比较
</if> </if>
ORDER BY code ORDER BY code::BIGINT -- 数值排序
</select> </select>
<select id="selectCode" resultType="java.lang.Integer"> <select id="selectCode" resultType="java.lang.Integer">
...@@ -198,6 +203,6 @@ ...@@ -198,6 +203,6 @@
SELECT CODE96333 code SELECT CODE96333 code
FROM biz_jg_supervisory_code FROM biz_jg_supervisory_code
WHERE CODE96333 = #{elevatorCode} WHERE CODE96333 = #{elevatorCode}
ORDER BY code ORDER BY code::BIGINT;
</select> </select>
</mapper> </mapper>
...@@ -884,14 +884,25 @@ public class EquipmentCategoryServiceImpl extends BaseService<EquipmentCategoryD ...@@ -884,14 +884,25 @@ public class EquipmentCategoryServiceImpl extends BaseService<EquipmentCategoryD
stopWatch.start(); stopWatch.start();
Integer start = Integer.valueOf(prefix + EquipmentCategoryEnum.getCode.get(prefix)); Integer start = Integer.valueOf(prefix + EquipmentCategoryEnum.getCode.get(prefix));
Integer end = Integer.valueOf(elevatorOtherInfo.getCode()); Integer end = Integer.valueOf(elevatorOtherInfo.getCode());
List<Integer> allCodeList = IntStream.rangeClosed(start, end) // List<Integer> allCodeList = IntStream.rangeClosed(start, end)
.boxed() // .boxed()
.collect(Collectors.toList()); // .collect(Collectors.toList());
List<Integer> codeList = categoryOtherInfoMapper.selectExceedElevatorCodeList(start, prefix); List<Integer> codeList = categoryOtherInfoMapper.selectExceedElevatorCodeList(start, prefix);
List<Integer> resultList = getDiffrent(allCodeList, codeList); // 使用TreeSet便于快速查找和排序
if (!ObjectUtils.isEmpty(resultList)) { TreeSet<Integer> usedCodes = new TreeSet<>(codeList);
Integer firstAvailableCode = null;
// 从start开始查找第一个未使用的编码
for (int i = start; i <= end; i++) {
if (!usedCodes.contains(i)) {
firstAvailableCode = i;
break;
}
}
if (firstAvailableCode != null) {
elevatorCode.setLength(0); elevatorCode.setLength(0);
elevatorCode.append(resultList.get(0)); elevatorCode.append(firstAvailableCode);
} else { } else {
//// 获取补零位长度 //// 获取补零位长度
//String elevatorCode1 = elevatorOtherInfo.getCode().substring(2); //String elevatorCode1 = elevatorOtherInfo.getCode().substring(2);
......
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