swagger导出excel文档_通过swagger json一键解析为html页面、导出word和excel的解析算法分享...

packagexxxxxxxx;importcn.hutool.json.JSONObject;importcom.alibaba.fastjson.JSON;importlombok.extern.slf4j.Slf4j;importnet.evecom.scplatform.common.entry.CommonResp;importnet.evecom.scplatform.common.entry.system.CommonEntry;importnet.evecom.scplatform.common.entry.system.UserUtil;importnet.evecom.scplatform.common.utils.text.IDUtils;import net.evecom.scplatform.openapi.dao.*;import net.evecom.scplatform.openapi.entity.*;importnet.evecom.scplatform.openapi.entity.dto.SwaggerHtmlDto;importnet.evecom.scplatform.openapi.service.SwaggerJsonImportService;importnet.evecom.scplatform.openapi.util.SwaggerJsonUtils;importorg.apache.commons.lang3.StringUtils;importorg.apache.http.HttpEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClientBuilder;importorg.apache.http.util.EntityUtils;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Service;importorg.springframework.transaction.annotation.Transactional;importorg.springframework.util.CollectionUtils;importorg.springframework.web.client.RestTemplate;importjava.io.IOException;importjava.io.InputStream;importjava.net.HttpURLConnection;importjava.net.URL;importjava.text.SimpleDateFormat;import java.util.*;/***@authorTorres Liu

* @description //TODO 服务导入/导出 业务层

* @date 2020-04-10 14:06 下午

**/@SuppressWarnings({"unchecked", "rawtypes"})

@Slf4j

@Service

@Transactional(rollbackFor= Exception.class)public class SwaggerJsonImportServiceImpl implementsSwaggerJsonImportService {

@AutowiredprivateRestTemplate restTemplate;

@AutowiredprivateServiceCatalogDao serviceCatalogDao;

@AutowiredprivateServiceResourceDao serviceResourceDao;

@AutowiredprivateServiceRequestDao serviceRequestDao;

@AutowiredprivateResponseStatusDao responseStatusDao;

@AutowiredprivateServiceResponseDao serviceResponseDao;

@AutowiredprivateServiceCatalogRelaDao serviceCatalogRelaDao;

@Value("${kong.server-addr}")privateString kongServerAddr;/*** array*/

private static final String ARRAY_VAL = "array";/*** $ref*/

private static final String REF_VAL = "$ref";/*** format*/

private static final String FORMAT_VAL = "format";/*** schema*/

private static final String SCHEMA_VAL = "schema";/*** 成功的code*/

private static final int SUCCESS_CODE = 200;/*** 递归次数*/

private static final int RECURSION_NUMS = 199;/*** 通过JSON或URL导入服务

*

*@paramjsonUrl

*@paramserviceSwagger

*@paramisAuthorized

*@returnnet.evecom.scplatform.common.entry.CommonResp

*@authorTorres Liu

* @description //TODO 通过JSON或URL导入服务

* @date 2020/4/24 5:46 下午

**/@Override

@Transactional(rollbackFor= Exception.class)public CommonResp swaggerJsonImport(String jsonUrl, ServiceSwagger serviceSwagger, String isAuthorized) throwsIOException {

String jsonStr= "";

CloseableHttpClient httpClient=HttpClientBuilder.create().build();//提前生成 一级标题的id字段 by liumingyu

String firstTitleUuid =IDUtils.new32UUID();//获取前端传入的是否授权标识 by liumingyu

String isAuthorizedAccessStr = StringUtils.defaultIfBlank(isAuthorized, "0");

Integer isAuthorizedAccess=Integer.valueOf(isAuthorizedAccessStr);try{//判断是通过url or json传入数据 by liumingyu

if (!StringUtils.isBlank(jsonUrl) && "".equals(serviceSwagger.getSwaggerJson())) {//判断url的有效性

boolean urlValidity =ifUrlValidity(jsonUrl);//判断url是否是swagger的url

boolean swaggerUrl =ifSwaggerUrl(jsonUrl);if (urlValidity &&swaggerUrl) {

HttpGet httpGet= newHttpGet(jsonUrl);

CloseableHttpResponse response=httpClient.execute(httpGet);if (response.getStatusLine().getStatusCode() ==SUCCESS_CODE) {

HttpEntity entity=response.getEntity();

String string= EntityUtils.toString(entity, "utf-8");

jsonStr=string;

}

response.close();

httpClient.close();

}else{return CommonResp.exception("传入的url不正确!");

}

}else if (serviceSwagger != null && !"".equals(serviceSwagger.getSwaggerJson())) {

String swaggerJson=serviceSwagger.getSwaggerJson();//判断字符串是否为json格式

boolean isJson =isJson(swaggerJson);if(isJson) {

JSONObject jsonObject= newJSONObject(swaggerJson);

Object o=JSON.toJSON(jsonObject);

jsonStr=com.alibaba.fastjson.JSONObject.toJSONString(o);

}else{return CommonResp.exception("传入的json格式不正确!");

}

}else{return CommonResp.exception("服务导入URL或JSON出错!");

}//获取当前租户

String gmtTenant =UserUtil.getLoginUser().getGmtTenant();//获取当前用户id

String userId =UserUtil.getLoginUser().getId();

String gmtCreator= (userId != null) ? userId : "";//转换 JSON string to Map by liumingyu

Map map = SwaggerJsonUtils.readValue(jsonStr, HashMap.class);//解析info by liumingyu

Map infoMap = (Map) map.get("info");//拿到一级标题 by liumingyu

String catalogName = (String) infoMap.get("title");//拿到所有二级标题(类标题)的List by liumingyu

List> tags = (List>) map.get("tags");//如果表中没有该一级标题名称,需要新增一个 by liumingyu

if (catalogName != null) {//查询库中是否有当前登录用户且pid为-1的根目录

ServiceCatalog catalogBeanByCreatorAndPid = serviceCatalogDao.findByCreatorAndPid(gmtCreator, "-1");//查询库中是否存在该一级标题名称 by liumingyu

ServiceCatalog catalogBean =serviceCatalogDao.findByCatalogNameAndCreator(gmtCreator, catalogName);//若不存在该标题名称,新增一级目录和二级目录 by liumingyu//1.插入一级二级标题数据到服务目录表 by liumingyu

if (catalogBean == null && catalogBeanByCreatorAndPid != null) {

ServiceCatalog serviceCatalog= newServiceCatalog();

serviceCatalog.setId(firstTitleUuid);//将根目录id作为一级目录的pid

serviceCatalog.setPid(catalogBeanByCreatorAndPid.getId());

serviceCatalog.setCatalogName(catalogName);

serviceCatalogDao.add(serviceCatalog);//添加二级标题(目录)by liumingyu

addTags(tags, firstTitleUuid, gmtTenant, gmtCreator);

}else{//存在的话只要新增二级标题 by liumingyu//拿到该一级目录的id by liumingyu

if (catalogBean != null && catalogBean.getId() != null) {

String fatherId=catalogBean.getId();//添加二级标题(目录)by liumingyu

addTags(tags, fatherId, gmtTenant, gmtCreator);

}

}

}//解析model by liumingyu

Map definitinMapOld =parseDefinitions(map);

Map> definitinMap =newParseDefinitions(map);//获取服务版本(取得是一级info的版本号)by liumingyu

String version = (String) infoMap.get("version");//解析paths by liumingyu

Map> paths = (Map>) map.get("paths");//解析bashPath by liumingyu

String basePath = (String) map.get("basePath");

String[] basePathSplit= null;if (basePath != null && !"".equals(basePath)) {

basePathSplit= basePath.split(",");

}if (paths != null) {//通过entrySet()取出映射关系,iterator()迭代,存放到迭代器中 by liumingyu

Iterator>> it =paths.entrySet().iterator();//开始遍历paths by liumingyu

while(it.hasNext()) {//拿到单个path的数据信息,用map的Entry对象存起来 by liumingyu

Map.Entry> path =it.next()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值