Browse Source

代码提交,用于处理JSON导入时候的数据获取

cxd 5 months ago
parent
commit
9feaf6dbfe
1 changed files with 270 additions and 0 deletions
  1. 270 0
      gqy-common/src/main/java/com/gqy/common/utils/CustomJsonParser.java

+ 270 - 0
gqy-common/src/main/java/com/gqy/common/utils/CustomJsonParser.java

@@ -0,0 +1,270 @@
+package com.gqy.common.utils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class CustomJsonParser {
+
+
+    /**
+     * 获取指定键的值
+     * @param input 输入字符串
+     * @param key 要查找的键
+     * @return 值,如果未找到返回null
+     */
+    public static String getParamValue(String input, String key) {
+        try {
+            // 移除所有多余的空格
+            input = input.replaceAll("\\s+", " ").trim();
+
+            // 构建可能的键模式
+            String[] patterns = {
+                key + ":", // 标准冒号
+                key + ":", // 中文冒号
+                "\"" + key + "\":", // 带引号的键
+                "\"" + key + "\":" // 带引号和中文冒号
+            };
+
+            int valueStart = -1;
+            int patternLength = -1;
+
+            // 查找第一个匹配的模式
+            for (String pattern : patterns) {
+                int index = input.indexOf(pattern);
+                if (index != -1) {
+                    valueStart = index + pattern.length();
+                    patternLength = pattern.length();
+                    break;
+                }
+            }
+
+            if (valueStart == -1) {
+                return null;
+            }
+
+            // 获取值的结束位置
+            int valueEnd = findValueEnd(input, valueStart);
+
+            if (valueEnd == -1) {
+                valueEnd = input.length();
+            }
+
+            // 提取值并处理特殊字符
+            String value = input.substring(valueStart, valueEnd).trim();
+
+            // 根据不同的键进行特殊处理
+            return cleanValue(value, key);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /**
+     * 清理值
+     */
+    private static String cleanValue(String value, String key) {
+        // 移除首尾引号
+        value = value.replaceAll("^\"*", "").replaceAll("\"*$", "");
+
+        // 根据不同的键进行特殊处理
+        if (key.equals("型号")) {
+            // 保留连字符和字母数字
+            value = value.replaceAll("[^\\w\\-]", "");
+        } else if (key.equals("控制盒")) {
+            // 移除特殊字符,保留中文、字母、数字
+            value = value.replaceAll("[\"{}\\[\\]\\\\}]", "");
+        } else {
+            // 其他字段移除特殊字符
+            value = value.replaceAll("[\"{}\\[\\]]", "");
+        }
+
+        return value.trim();
+    }
+
+    /**
+     * 查找值的结束位置
+     */
+    private static int findValueEnd(String input, int startIndex) {
+        int length = input.length();
+        boolean inBracket = false;
+        int bracketCount = 0;
+
+        for (int i = startIndex; i < length; i++) {
+            char c = input.charAt(i);
+
+            if (c == '{') {
+                inBracket = true;
+                bracketCount++;
+            } else if (c == '}') {
+                bracketCount--;
+                inBracket = bracketCount > 0;
+            } else if (!inBracket && (c == ',' || c == '}')) {
+                return i;
+            }
+        }
+
+        return -1;
+    }
+
+
+
+    /**
+     * 获取参数
+     * @param input
+     * @return
+     */
+    public static Map getParam(String input){
+
+        Map maps = new HashMap();
+        // 工程名称 - 项目工程名称
+        String wk_name = getParamValue(input,"工程");
+
+        // 产品名称 - 产品的具体名称
+        String dcp_name = getParamValue(input,"产品名称");
+        // OA编码 - 产品在OA系统中的唯一编码
+        String dcp_oa_code = getParamValue(input,"OA编码");
+        // 系统类别 - 产品所属的系统分类
+        String sys_name = getParamValue(input,"系统类别");
+
+
+//        int  sys_no = Integer.parseInt(content.get("sys_no").toString());
+//        int wr_id = Integer.parseInt(content.get("wr_id").toString());
+
+
+        // 箱体参数 - 产品箱体的物理参数
+        String dlpxthd = getParamValue(input,"厚");      // 厚度 - 箱体厚度(mm)
+        String dlpxtcl = getParamValue(input,"材质");    // 材质 - 箱体材质类型
+        String dlpdyxtlx = getParamValue(input,"类型");  // 类型 - 箱体类型
+
+        // 屏幕参数 - 显示屏幕的规格参数
+        String dlppmbl = getParamValue(input,"屏幕比例"); // 屏幕比例 - 显示屏幕的宽高比
+        String dlppmcc = getParamValue(input,"屏幕尺寸"); // 屏幕尺寸 - 显示屏幕的对角线尺寸(英寸)
+        String dlppmlx = getParamValue(input,"型号");     // 型号 - 屏幕的具体型号
+
+        // 投影机参数 - 投影设备的技术参数
+        String dlptyjld = getParamValue(input,"亮度");    // 亮度 - 投影机亮度(流明)
+        String dlpledkzh = getParamValue(input,"控制盒"); // 控制盒 - 投影机控制设备类型
+        String dlptyjlx = getParamValue(input,"光源");    // 光源 - 投影机光源类型
+
+        // 分辨率参数 - 显示分辨率规格
+        String dlpfblW = getParamValue(input,"W");    // 分辨率宽度(像素)
+        String dlpfblH = getParamValue(input,"H");    // 分辨率高度(像素)
+
+        // 尺寸参数 - 产品物理尺寸
+        String dlpxtkgk = getParamValue(input,"宽");    // 宽度(mm)
+        String dlpxtkgg = getParamValue(input,"高");    // 高度(mm)
+
+
+
+
+        // 将所有参数添加到map中用于返回
+        maps.put("wk_name", wk_name);           // 工程名称
+        maps.put("dcp_name", dcp_name);         // 产品名称
+        maps.put("dcp_oa_code", dcp_oa_code);   // OA编码
+        maps.put("sys_name", sys_name);         // 系统类别
+
+
+        maps.put("dlpxthd", dlpxthd);          // 箱体厚度
+        maps.put("dlpxtcl", dlpxtcl);          // 箱体材质
+        maps.put("dlpdyxtlx", dlpdyxtlx);      // 箱体类型
+
+        maps.put("dlppmbl", dlppmbl);          // 屏幕比例
+        maps.put("dlppmcc", dlppmcc);          // 屏幕尺寸
+        maps.put("dlppmlx", dlppmlx);          // 屏幕型号
+
+        maps.put("dlptyjld", dlptyjld);        // 投影机亮度
+        maps.put("dlpledkzh", dlpledkzh);      // 控制盒类型
+        maps.put("dlptyjlx", dlptyjlx);        // 光源类型
+
+        maps.put("dlpfblW", dlpfblW);          // 分辨率宽度
+        maps.put("dlpfblH", dlpfblH);          // 分辨率高度
+
+        maps.put("dlpxtkgk", dlpxtkgk);        // 产品宽度
+        maps.put("dlpxtkgg", dlpxtkgg);        // 产品高度
+
+        //处理特殊的尺寸组合
+        processSpecialDimensions(maps);
+
+        return maps;
+    }
+
+
+
+    /**
+     * 处理特殊的尺寸组合
+     * @param mapResult 需要处理的Map数据
+     */
+    private static void processSpecialDimensions(Map<String, Object> mapResult) {
+        // 处理第一组: dlpfblW 和 dlpfblH
+        Object fblW = mapResult.get("dlpfblW");
+        Object fblH = mapResult.get("dlpfblH");
+        if (fblW != null && fblH != null) {
+            String combinedFbl = fblW.toString() + "×" + fblH.toString();
+            mapResult.put("dlpfbl", combinedFbl);  // 存储组合后的值
+            // 可选:移除原始键
+            mapResult.remove("dlpfblW");
+            mapResult.remove("dlpfblH");
+        }
+
+        // 处理第二组: dlpxtkgk 和 dlpxtkgg
+        Object xtkgk = mapResult.get("dlpxtkgk");
+        Object xtkgg = mapResult.get("dlpxtkgg");
+        if (xtkgk != null && xtkgg != null) {
+            String combinedXtkg = xtkgk.toString() + "×" + xtkgg.toString();
+            mapResult.put("dlpxtkg", combinedXtkg);  // 存储组合后的值 箱体宽高
+            // 可选:移除原始键
+            mapResult.remove("dlpxtkgk");
+            mapResult.remove("dlpxtkgg");
+        }
+    }
+
+
+
+    /**
+     * 使用示例
+     */
+    public static void main(String[] args) {
+        String input = "DDW{\tOA编码:,\t产品名称:DLP拼接单元,工程:视讯工程,系统类别:DLPPJXT,\t型号:DDW-60EF,\t箱体{\t类型:反射,\t材质:铁,\t尺寸{宽:1328,高:747,厚:850}\t},\t屏幕{\t型号:CSP-P,\t屏幕比例:16:9,\t屏幕尺寸:60\t}\t投影机{\t光源:LED3X4,\t分辨率{W:1920,H:1080},\t亮度:1200,\t控制盒:单电源\t},\t}\n" ;
+        // 测试不同的键
+        System.out.println("控制盒: " + getParamValue(input, "控制盒")); // 输出: 单电源
+        System.out.println("型号: " + getParamValue(input, "型号")); // 输出: DDW-60EF
+        System.out.println("亮度: " + getParamValue(input, "亮度")); // 输出: 1200
+        System.out.println("宽: " + getParamValue(input, "宽")); // 输出: 1328
+        System.out.println("材质: " + getParamValue(input, "材质")); // 输出: 单电源
+        System.out.println("产品名称: " + getParamValue(input, "产品名称")); // 输出: 厚
+
+        System.out.println("系统类别: " + getParamValue(input, "系统类别")); // 输出: 厚
+
+        System.out.println("W: " + getParamValue(input, "W"));
+        System.out.println("W: " + getParamValue(input, "H"));
+
+
+    }
+
+    /**
+     * 提取所有键值对
+     */
+    public static List<String> extractAllValues(String input) {
+        List<String> results = new ArrayList<>();
+        String[] keys = {
+            "型号", "类型", "材质", "宽", "高", "厚",
+            "屏幕比例", "屏幕尺寸", "光源", "亮度", "控制盒"
+        };
+
+        for (String key : keys) {
+            String result = getParamValue(input, key);
+            if (result != null) {
+                results.add(result);
+            }
+        }
+
+        return results;
+    }
+
+}