package com.terra.proxy.controller;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.fastjson.JSON;
|
import com.terra.proxy.bean.*;
|
import com.terra.proxy.config.SysTemPropertyConfig;
|
import com.terra.proxy.intercepter.ServiceExcelListener;
|
import com.terra.proxy.mapper.LogMapper;
|
import com.terra.proxy.properties.TerraProperties;
|
import com.terra.proxy.service.Impl.ServerRegisterServiceImpl;
|
import com.terra.proxy.util.JedisUtils;
|
import com.terra.proxy.util.JwtUtils;
|
import com.terra.proxy.util.Result;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.util.StringUtils;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.multipart.MultipartFile;
|
import redis.clients.jedis.Jedis;
|
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.*;
|
import java.net.URI;
|
import java.net.URISyntaxException;
|
import java.net.URLEncoder;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Objects;
|
|
@RestController
|
@RequestMapping("/excel")
|
public class ExcelController {
|
@Autowired
|
private SysTemPropertyConfig sys;
|
|
@Autowired
|
private ServerRegisterServiceImpl serverRegisterService;
|
|
@Autowired
|
private TerraProperties properties;
|
|
@Autowired
|
private JwtUtils JwtUtils;
|
|
@Autowired
|
private LogMapper logMapper;
|
|
private static String fileName = "服务注册模板Excel.xlsx";
|
|
private static String fileResultName = "服务注册结果.xlsx";
|
@Value("${sys.jwt.expire}")
|
private Long expireSeconds;
|
|
/*
|
* 获取注册服务的Excel模板
|
*
|
* */
|
@GetMapping("getExcelModle")
|
public ResponseEntity getExcelModle() {
|
String uploadPath = sys.getUploadPath();
|
File file = new File(uploadPath);
|
if (!file.exists()) {
|
file.mkdir();
|
}
|
ArrayList<ServerExcelApplyEntity> userEntities = new ArrayList<>();
|
userEntities.add(new ServerExcelApplyEntity());
|
EasyExcel.write(uploadPath + File.separator + fileName, ServerExcelApplyEntity.class).sheet("服务注册表").doWrite(userEntities);
|
return ResponseEntity.ok().body(null);
|
}
|
|
/*
|
* 获取注册服务的Excel文件
|
*
|
* */
|
@GetMapping("getExcel")
|
public ResponseEntity getExcel(HttpServletResponse response) throws IOException {
|
String uploadPath = sys.getUploadPath();
|
FileInputStream fileInputStream = null;
|
ServletOutputStream outputStream = response.getOutputStream();
|
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
|
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
|
File file = new File(uploadPath + File.separator + fileName);
|
if (file.exists() && file.canRead()) {
|
fileInputStream = new FileInputStream(file);
|
byte[] bytes = new byte[1024];
|
int length;
|
while ((length = fileInputStream.read(bytes)) != -1) {
|
outputStream.write(bytes, 0, length);
|
}
|
}
|
if (null != fileInputStream) {
|
fileInputStream.close();
|
}
|
if (null != outputStream) {
|
outputStream.flush();
|
outputStream.close();
|
}
|
return ResponseEntity.ok().body(null);
|
}
|
|
/*
|
* 导入注册服务的Excel文件
|
*
|
* */
|
@PostMapping("importExcel")
|
public String importExcel(@RequestPart("file") MultipartFile file, HttpServletRequest req) {
|
InputStream inputStream;
|
List<ServerExcelApplyEntity> serverExcelEntityList;
|
List<ServerExcelResultEntity> excelEntities = new ArrayList<>();
|
Jedis jedis = JedisUtils.getJedis();
|
try {
|
inputStream = file.getInputStream();
|
serverExcelEntityList = EasyExcel.read(inputStream, ServerExcelApplyEntity.class, new ServiceExcelListener()).doReadAllSync();
|
//注册服务 申请token
|
serverExcelEntityList.stream().forEach(ServerExcelApplyEntity -> excelEntities.add(addArcGisServer(req, ServerExcelApplyEntity, jedis)));
|
returnExcel(excelEntities);
|
return JSON.toJSONString(Result.ok().put("msg", "").put("data", ""));
|
} catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
if (null != jedis) {
|
JedisUtils.close(jedis);
|
}
|
}
|
return "";
|
}
|
|
/*
|
* 获取注册服务结果的Excel文件
|
*
|
* */
|
@GetMapping("getExcelResult")
|
public ResponseEntity getExcelResult(HttpServletResponse response) throws IOException {
|
String uploadPath = sys.getUploadPath();
|
FileInputStream fileInputStream = null;
|
ServletOutputStream outputStream = response.getOutputStream();
|
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
|
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileResultName, "utf-8"));
|
File file = new File(uploadPath + File.separator + fileResultName);
|
if (file.exists() && file.canRead()) {
|
fileInputStream = new FileInputStream(file);
|
byte[] bytes = new byte[1024];
|
int length;
|
while ((length = fileInputStream.read(bytes)) != -1) {
|
outputStream.write(bytes, 0, length);
|
}
|
}
|
if (null != fileInputStream) {
|
fileInputStream.close();
|
}
|
if (null != outputStream) {
|
outputStream.flush();
|
outputStream.close();
|
}
|
return ResponseEntity.ok().body(null);
|
}
|
|
|
private void returnExcel(List serverExcelEntityList) throws IOException {
|
File file = new File(sys.getUploadPath() + File.separator + fileResultName);
|
FileOutputStream fileOutputStream = new FileOutputStream(file);
|
EasyExcel.write(fileOutputStream, ServerExcelResultEntity.class).sheet("服务注册结果").doWrite(serverExcelEntityList);
|
fileOutputStream.close();
|
}
|
|
private String genToken(HttpServletRequest req, ServerExcelApplyEntity serverExcelEntity, Jedis jedis) {
|
String identyinfo = serverExcelEntity.getApplySys();
|
String resourceid = serverExcelEntity.getZyId().toString();
|
Long expiration = serverExcelEntity.getTime();
|
try {
|
CustomerToken cutToken = new CustomerToken();
|
cutToken.setResourceId(resourceid);
|
cutToken.setUserid("0");
|
cutToken.setAppUrl("");
|
cutToken.setAppId("");
|
cutToken.setClientIp(req.getRemoteHost());
|
cutToken.setRemark(identyinfo == null ? "" : identyinfo);
|
String token = expiration != null ? JwtUtils.generateToken(cutToken.toString(), expiration) : JwtUtils.generateToken(cutToken.toString(), expireSeconds);
|
TokenRecord record = new TokenRecord();
|
record.setApplytime(new Date());
|
record.setExpiration(expiration != null ? expiration.intValue() : expireSeconds.intValue());
|
record.setIdentyinfo(identyinfo);
|
record.setTokeninfo(cutToken.toString());
|
if (!StringUtils.isEmpty(resourceid)) {
|
record.setResourceid(Integer.valueOf(resourceid));
|
}
|
record.setToken(token);
|
record.setTokenapplyer(req.getRemoteHost());
|
logMapper.saveTokenRecord(record);
|
expiration = expiration != null ? expiration : expireSeconds;
|
jedis.setex("zytoken:" + token, expiration.intValue(), expiration.toString());
|
return token;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
private ServerExcelResultEntity addArcGisServer(HttpServletRequest req, ServerExcelApplyEntity serverExcelApplyEntity, Jedis jedis) {
|
if (StringUtils.isEmpty(serverExcelApplyEntity.getPubliceIs())) {
|
serverExcelApplyEntity.setPubliceIs("0");
|
}
|
Integer isPublic = Integer.valueOf(serverExcelApplyEntity.getPubliceIs());
|
ServerRgBean serverRgBean = new ServerRgBean();
|
serverRgBean.setEnable(1);
|
serverRgBean.setIspublic(isPublic);
|
serverRgBean.setFromsys("HYJGPT");
|
serverRgBean.setResourceid(serverExcelApplyEntity.getZyId());
|
serverRgBean.setUrlid(null);
|
serverRgBean.setContextpath(null);
|
serverRgBean.setSuffix(null);
|
serverRgBean.setServername(serverExcelApplyEntity.getServerName());
|
serverRgBean.setServerurl(serverExcelApplyEntity.getServerUrl());
|
String servername = judgeServerType(serverExcelApplyEntity.getServerUrl());
|
serverRegisterService.addServer(serverRgBean);
|
ServerExcelResultEntity serverExcelEntity = getServerExcelResultEntity(serverExcelApplyEntity);
|
String proxyurl = new StringBuilder(properties.getProxy().getHost()).append("/arcgis/rest/services/").append(serverExcelApplyEntity.getZyId()).append("/").append(servername).toString();
|
serverExcelEntity.setProxyurl(proxyurl);
|
String useToken = serverExcelApplyEntity.getUseToken();
|
String autoToken = serverExcelApplyEntity.getAutoToken();
|
if (Objects.equals("0", useToken)) {
|
return serverExcelEntity;
|
}
|
//生成token genToken
|
String token = genToken(req, serverExcelApplyEntity, jedis);
|
serverExcelEntity.setToken(token);
|
//加入redis中完成自动续约
|
if (Objects.equals(autoToken, "1")) {
|
jedis.sadd("autoToken", token);
|
}
|
return serverExcelEntity;
|
}
|
|
private ServerExcelResultEntity getServerExcelResultEntity(ServerExcelApplyEntity serverExcelApplyEntity) {
|
ServerExcelResultEntity resultEntity = new ServerExcelResultEntity();
|
BeanUtil.copyProperties(serverExcelApplyEntity, resultEntity);
|
return resultEntity;
|
}
|
|
public static String judgeServerType(String serverUrl) {
|
String type = null;
|
try {
|
URI uri = new URI(serverUrl);
|
String path = uri.getPath();
|
String[] t = path.split("/");
|
if (isdigit(t[t.length - 1])) {
|
type = t[t.length - 2];
|
} else {
|
type = t[t.length - 1];
|
}
|
} catch (URISyntaxException e) {
|
e.printStackTrace();
|
}
|
return type;
|
}
|
|
public static boolean isdigit(String str) {
|
return str.matches("[0-9]+");
|
}
|
|
|
}
|