diff --git a/stwzhj-modules/stwzhj-location/pom.xml b/stwzhj-modules/stwzhj-location/pom.xml
index f3fcd9db..aa92ce7b 100644
--- a/stwzhj-modules/stwzhj-location/pom.xml
+++ b/stwzhj-modules/stwzhj-location/pom.xml
@@ -198,6 +198,13 @@
0.8
+
+ com.belerweb
+ pinyin4j
+ 2.5.1
+
+
+
diff --git a/stwzhj-modules/stwzhj-location/src/main/java/org/dromara/location/controller/LocationController.java b/stwzhj-modules/stwzhj-location/src/main/java/org/dromara/location/controller/LocationController.java
index b9241474..b0cb7afe 100644
--- a/stwzhj-modules/stwzhj-location/src/main/java/org/dromara/location/controller/LocationController.java
+++ b/stwzhj-modules/stwzhj-location/src/main/java/org/dromara/location/controller/LocationController.java
@@ -5,6 +5,11 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.domain.R;
import org.dromara.common.redis.utils.RedisUtils;
@@ -28,6 +33,7 @@ import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.util.*;
@Configuration
@@ -417,6 +423,118 @@ public class LocationController {
return R.ok(list);
}
+
+ @PostMapping(value = "/getAscii")
+ public R>> getAscii(@RequestBody Map params) {
+
+ // 解析JSON中的ASCII字段,使用数组包装以支持lambda赋值
+ String[] typeHolder = new String[1];
+ String[] deptIdHolder = new String[1];
+ String[] zzjgdmHolder = new String[1];
+ Integer[] onlineHolder = new Integer[1];
+ Double[] minLngHolder = new Double[1];
+ Double[] minLatHolder = new Double[1];
+ Double[] maxLngHolder = new Double[1];
+ Double[] maxLatHolder = new Double[1];
+ String[] deviceCodeHolder = new String[1];
+
+ logger.info("接收到的原始参数: {}", params);
+
+ // 支持 ASCII 和 ascii 两种key
+ // 支持 ASCII 和 ascii 两种key
+ Object asciiObj = params.get("ASCII");
+ if (asciiObj == null) {
+ asciiObj = params.get("ascii");
+ }
+ String asciiBody = asciiObj != null ? asciiObj.toString() : null;
+
+ logger.info("接收到的原始ASCII内容: [{}]", asciiBody);
+
+ String parsedAsciiBody = null; // 用于实际解析的明文字符串
+
+ if (asciiBody != null && !asciiBody.isEmpty()) {
+ // 【新增】智能判断:如果字符串只包含 0-9, a-f, A-F,且长度为偶数,则认为是十六进制ASCII码
+ if (asciiBody.matches("^[0-9A-Fa-f]+$") && asciiBody.length() % 2 == 0) {
+ parsedAsciiBody = fromAsciiHex(asciiBody);
+ logger.info("检测到入参为纯十六进制ASCII码,解码后的明文内容: [{}]", parsedAsciiBody);
+ } else {
+ // 否则认为是普通明文(兼容老版本调用)
+ parsedAsciiBody = asciiBody;
+ logger.info("检测到入参为普通明文格式,直接使用: [{}]", parsedAsciiBody);
+ }
+
+ // 使用解码后的明文 parsedAsciiBody 进行解析
+ parseAndSet(parsedAsciiBody, "type", v -> typeHolder[0] = v);
+ parseAndSet(parsedAsciiBody, "deptId", v -> deptIdHolder[0] = v);
+ parseAndSet(parsedAsciiBody, "zzjgdm", v -> zzjgdmHolder[0] = v);
+ parseAndSetInt(parsedAsciiBody, "online", v -> onlineHolder[0] = v);
+ parseAndSetDouble(parsedAsciiBody, "minLng", v -> minLngHolder[0] = v);
+ parseAndSetDouble(parsedAsciiBody, "minLat", v -> minLatHolder[0] = v);
+ parseAndSetDouble(parsedAsciiBody, "maxLng", v -> maxLngHolder[0] = v);
+ parseAndSetDouble(parsedAsciiBody, "maxLat", v -> maxLatHolder[0] = v);
+ parseAndSet(parsedAsciiBody, "deviceCode", v -> deviceCodeHolder[0] = v);
+ }
+
+ String type = typeHolder[0];
+ String deptId = deptIdHolder[0];
+ String zzjgdm = zzjgdmHolder[0];
+ Integer online = onlineHolder[0];
+ Double minLng = minLngHolder[0];
+ Double minLat = minLatHolder[0];
+ Double maxLng = maxLngHolder[0];
+ Double maxLat = maxLatHolder[0];
+ String deviceCode = deviceCodeHolder[0];
+
+ logger.info("ASCII协议POST获取设备位置 - type={}, deptId={}, zzjgdm={}, online={}, deviceCode={}", type, deptId, zzjgdm, online, deviceCode);
+
+ List