package com.vci.ubcs.code.service.impl;
|
|
import com.vci.ubcs.code.entity.GroupMapAttrXML;
|
import com.vci.ubcs.code.service.IGroupMapAttrXMLService;
|
import com.vci.ubcs.code.util.gennerAttrMapUtil;
|
import com.vci.ubcs.code.vo.GroupMapAttrXMLVO;
|
import com.vci.ubcs.code.vo.webserviceModel.attrmap.ClsfAttrMappingDO;
|
import com.vci.ubcs.code.vo.webserviceModel.attrmap.LibraryClsfDO;
|
import com.vci.ubcs.code.vo.webserviceModel.attrmap.LibraryDO;
|
import com.vci.ubcs.code.webService.config.AttributeMapConfig;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springblade.core.log.exception.ServiceException;
|
import org.springblade.core.tool.api.R;
|
import org.springblade.core.tool.utils.Func;
|
import org.springblade.core.tool.utils.StringUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.EnvironmentAware;
|
import org.springframework.core.env.Environment;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
import org.xml.sax.SAXException;
|
import javax.xml.parsers.ParserConfigurationException;
|
import java.io.File;
|
import java.io.FileWriter;
|
import java.io.IOException;
|
import java.nio.file.Files;
|
import java.nio.file.Paths;
|
import java.rmi.ServerException;
|
import java.security.acl.Group;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 集团属性映射xml配置管理
|
* @author ludc
|
* @date 2024/1/8 9:40
|
*/
|
@Service
|
@Slf4j
|
public class GroupMapAttrXMLServiceImpl implements IGroupMapAttrXMLService,EnvironmentAware {
|
|
@Autowired
|
private AttributeMapConfig attributeMapConfig;
|
|
@Value("${code.universalinterface.attrconfig.attrmap_parent_path:/data1/ubcs/ubcs-server/xml}")
|
private String ATTRMAP_PARENT_PATH;
|
|
/**
|
* 当前操作系统,是否为windows系统
|
*/
|
private String separator = "\\";
|
|
/**
|
* 根据当前运行的环境,匹配分隔符
|
* @param environment
|
*/
|
@Override
|
public void setEnvironment(Environment environment) {
|
String os = environment.getProperty("os.name").toLowerCase();
|
if (!os.contains("win")) {
|
this.separator = "/";
|
}
|
}
|
|
/**
|
* 获取xml文件的详细信息
|
* @param groupMapAttrXML
|
* @return
|
* @throws IOException
|
*/
|
@Override
|
public GroupMapAttrXML getGroupMapXMLInfo(GroupMapAttrXML groupMapAttrXML) throws ServerException {
|
if(Func.isEmpty(groupMapAttrXML.getAttrMapPath())){
|
throw new ServiceException("属性映射文件路径不能为空!");
|
}
|
File file = new File(groupMapAttrXML.getAttrMapPath());
|
Map<String, String> stringStringMap = attributeMapConfig.getSystem_attrmap();
|
GroupMapAttrXML data = new GroupMapAttrXML();
|
if (file.exists() && file.isFile()) {
|
data.setGroupMapAttrName(file.getName());
|
data.setAttrMapPath(file.getPath());
|
if(!stringStringMap.isEmpty() && stringStringMap.containsKey(file.getName().replace(".xml",""))){
|
groupMapAttrXML.setIsEnable(true);
|
}else {
|
groupMapAttrXML.setIsEnable(false);
|
}
|
data.setGroupMapAttrContent(getXMLContent(file.getPath()));
|
}
|
return data;
|
}
|
|
/**
|
* 获取所有配置在nacos上的xml文件内容,(也就是在启用的xml映射文件)
|
* @return
|
*/
|
@Override
|
public List<GroupMapAttrXML> getGroupMapXMLList() {
|
// 获取到已在nacos上配置的的xml映射文件
|
Map<String, String> stringStringMap = attributeMapConfig.getSystem_attrmap();
|
List<GroupMapAttrXML> groupMapAttrXMLList = new ArrayList<>();
|
// 获取到父路径下的文件信息
|
File fileDir = new File(ATTRMAP_PARENT_PATH);
|
File[] childDir = fileDir.listFiles();
|
if(Func.isNotEmpty(childDir) && childDir.length > 0){
|
Arrays.stream(childDir).forEach(file->{
|
GroupMapAttrXML groupMapAttrXML = new GroupMapAttrXML();
|
if(!stringStringMap.isEmpty() && stringStringMap.containsKey(file.getName().replace(".xml",""))){
|
groupMapAttrXML.setIsEnable(true);
|
}else {
|
groupMapAttrXML.setIsEnable(false);
|
}
|
groupMapAttrXML.setGroupMapAttrName(file.getName());
|
groupMapAttrXML.setAttrMapPath(file.getPath());
|
try {
|
groupMapAttrXML.setGroupMapAttrContent(getXMLContent(file.getPath()));
|
} catch (ServerException e) {
|
throw new ServiceException(e.getMessage());
|
}
|
groupMapAttrXMLList.add(groupMapAttrXML);
|
});
|
}
|
return groupMapAttrXMLList;
|
}
|
|
/**
|
* 修改属性映射文件
|
* @param groupMapAttrXMLVO
|
* @return
|
*/
|
public R updateGroupMapXML(GroupMapAttrXMLVO groupMapAttrXMLVO) throws IOException {
|
if(Func.isEmpty(groupMapAttrXMLVO.getAttrMapPath())){
|
throw new ServiceException("属性映射文件路径不能为空!");
|
}
|
File file = new File(groupMapAttrXMLVO.getAttrMapPath());
|
// 文件名相同,就只需要修改内容
|
if(groupMapAttrXMLVO.getGroupMapAttrName().equals(groupMapAttrXMLVO.getUpdateXMLName())){
|
if(!file.exists()){
|
return R.fail("被修改的"+groupMapAttrXMLVO.getGroupMapAttrName()+"文件不存在!");
|
}
|
FileWriter writer = null;
|
try{
|
writer = new FileWriter(file);
|
writer.write(groupMapAttrXMLVO.getGroupMapAttrContent());
|
}catch (IOException e) {
|
e.printStackTrace();
|
throw new ServerException("文件内容修改失败,原因:"+e.getMessage());
|
}finally {
|
writer.close();
|
}
|
}else{
|
//修改了文件名,就需要将文件名和内容进行修改
|
File newFile = new File(groupMapAttrXMLVO.getAttrMapPath().replace(groupMapAttrXMLVO.getGroupMapAttrName(),groupMapAttrXMLVO.getUpdateXMLName()));
|
FileWriter writer = null;
|
try {
|
writer = new FileWriter(newFile);
|
writer.write(groupMapAttrXMLVO.getGroupMapAttrContent());
|
} catch (IOException e) {
|
e.printStackTrace();
|
throw new ServerException("属性映射文件修改失败,原因:"+e.getMessage());
|
}finally {
|
writer.close();
|
}
|
if (!file.delete()) {
|
R.fail("属性映射文件名修改失败,请检查文件名是否重复!");
|
}
|
}
|
Map<String, String> stringStringMap = attributeMapConfig.getSystem_attrmap();
|
if (!stringStringMap.containsKey(groupMapAttrXMLVO.getUpdateXMLName().replace(".xml",""))) {
|
return R.success("修改成功,修改属性映射文件名之后,未在nacos上找到相关配置,请及时更新nacos上的配置!");
|
}
|
return R.success("属性映射文件修改成功!");
|
}
|
|
@Override
|
public R addGroupMapXML(GroupMapAttrXML groupMapAttrXML) throws IOException {
|
if(Func.isEmpty(groupMapAttrXML.getGroupMapAttrName())){
|
throw new ServiceException("属性映射文件名称不能为空!");
|
}
|
// 创建一个新文件
|
File file = new File(ATTRMAP_PARENT_PATH);
|
if(!file.exists()){
|
return R.fail("nacos上xml属性映射文件,父路径配置有误,请检查!");
|
}
|
File[] files = file.listFiles();
|
if(files.length>0){
|
List<File> repeatNameFile = Arrays.stream(files).filter(item -> {
|
if (item.getName().equals(groupMapAttrXML.getGroupMapAttrName())) {
|
return true;
|
}
|
return false;
|
}).collect(Collectors.toList());
|
if (!repeatNameFile.isEmpty()) {
|
return R.fail("新增的属性映射xml文件名已存在!");
|
}
|
}
|
File addXMLFile = new File(ATTRMAP_PARENT_PATH + separator + groupMapAttrXML.getGroupMapAttrName());
|
FileWriter writer = null;
|
try {
|
// 向文件中写入指定内容
|
writer = new FileWriter(addXMLFile);
|
writer.write(groupMapAttrXML.getGroupMapAttrContent());
|
} catch (IOException e) {
|
e.printStackTrace();
|
throw new ServerException("文件内容写入失败,原因:"+e.getMessage());
|
}finally {
|
writer.close();
|
}
|
Map<String, String> stringStringMap = attributeMapConfig.getSystem_attrmap();
|
if (!stringStringMap.containsKey(groupMapAttrXML.getGroupMapAttrName().replace(".xml",""))) {
|
groupMapAttrXML.setIsEnable(false);
|
return R.success("新增成功,但新增的属性映射文件名,未在nacos上找到相关配置,请及时更新nacos上的配置!");
|
}else {
|
groupMapAttrXML.setIsEnable(true);
|
return R.success("新增成功!");
|
}
|
}
|
|
/**
|
* 获取xml文件中内容
|
* @return
|
*/
|
private String getXMLContent(String xmlPath) throws ServerException {
|
try {
|
File file = new File(xmlPath);
|
byte[] bytes = Files.readAllBytes(Paths.get(file.toURI()));
|
return new String(bytes);
|
} catch (Exception e) {
|
throw new ServerException(StringUtil.format("读取%s路径下的xml文件失败,原因:%s",xmlPath,e.getMessage()));
|
}
|
}
|
|
}
|