package com.gzlh.bus; import cn.hutool.core.io.FileUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.XML; import com.gzlh.config.dto.*; import com.gzlh.utils.DeviceCache; import lombok.Data; import lombok.extern.slf4j.Slf4j; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.File; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import java.util.Properties; @Data @Slf4j public class SysConfig { public static List eventDTOList; public static SerialSetting serialSetting; public static CaputreSetting caputreSetting; public static ChannelSetting channelSetting; public static ManagerSetting managerSetting; public static PassportSetting passportSetting; public static FaceListDTO faceDTO; public static void initConfig() { Properties properties = System.getProperties(); String rootPath = properties.getProperty("user.dir"); String separator = File.separator; String configFile = rootPath + separator + "config.xml"; if (!FileUtil.exist(configFile)) { log.error("配置文件不存在:{}", configFile); return; } String content = FileUtil.readUtf8String(configFile); JSONObject result = XML.toJSONObject(content); log.info("result:{}", result.toJSONString(0)); ApplicationConfigDTO configDTO = result.toBean(ApplicationConfigDTO.class); eventDTOList = configDTO.getConfig().getEventList().getEvent(); serialSetting = configDTO.getConfig().getSysConfig().getSerialSetting(); caputreSetting = configDTO.getConfig().getSysConfig().getCaputreSetting(); channelSetting = configDTO.getConfig().getChannelSetting(); managerSetting = configDTO.getConfig().getManagerSetting(); passportSetting = configDTO.getConfig().getPassport(); parseFace(result); DeviceCache.deviceStatusInit(); } private static void parseFace(JSONObject result) { JSONObject faceConfig = result.getJSONObject("config").getJSONObject("faceConfig"); if (faceConfig==null) return; boolean enable = faceConfig.getBool("enable"); // 获取 faceList 节点 JSONObject faceList = faceConfig.getJSONObject("faceList"); FaceListDTO faceListDTO = new FaceListDTO(); faceListDTO.setEnable(enable); List faceArray = new ArrayList<>(); // 检查 face 节点是否存在 if (faceList.containsKey("face")) { Object faceObj = faceList.get("face"); if (faceObj instanceof JSONArray) { // 多个 face 节点 JSONArray faces = faceList.getJSONArray("face"); for (int i = 0; i < faces.size(); i++) { JSONObject face = faces.getJSONObject(i); // 处理每个 face 节点 faceArray.add(processFace(face)); } } else if (faceObj instanceof JSONObject) { // 单个 face 节点 JSONObject face = faceList.getJSONObject("face"); // 处理单个 face 节点 faceArray.add(processFace(face)); } } faceListDTO.setFaceList(faceArray); faceDTO = faceListDTO; } private static Face processFace(JSONObject face) { String channelCode = face.getStr("channelCode"); String ip = face.getStr("ip"); short port = face.getShort("port"); String uname = face.getStr("uname"); String pwd = face.getStr("pwd"); return new Face(channelCode, ip, port, uname, pwd); } }