|
@@ -30,8 +30,10 @@ import org.springframework.data.domain.Sort;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
+import java.io.BufferedReader;
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
+import java.io.InputStreamReader;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Optional;
|
|
@@ -301,12 +303,6 @@ public class RasterServerImpl implements RasterServer {
|
|
|
return new R(200, outputFile);
|
|
|
}
|
|
|
|
|
|
-// @Override
|
|
|
-// public R findByType(String fileTypeRaster, PageDto pageDto) {
|
|
|
-// Page<OutputFileEntity> page = outputFileRepository.findByType(fileTypeRaster, PageRequest.of(pageDto.getPageNum(), pageDto.getPageSize(), Sort.by("createTime").descending()));
|
|
|
-// return new R(200, page);
|
|
|
-// }
|
|
|
-
|
|
|
|
|
|
@Override
|
|
|
public R findByType(String fileTypeRaster, PageDto pageDto) {
|
|
@@ -327,7 +323,6 @@ public class RasterServerImpl implements RasterServer {
|
|
|
@Override
|
|
|
public List<FileEntity> findByFileName(String fileName) {
|
|
|
|
|
|
-// return fileRepository.findByFileNameAndType(fileName, TypeCode.FILE_TYPE_RASTER);
|
|
|
return fileRepository.findByFileNameAndTypeAndResStatus(fileName, TypeCode.FILE_TYPE_RASTER, 0);
|
|
|
}
|
|
|
|
|
@@ -353,6 +348,203 @@ public class RasterServerImpl implements RasterServer {
|
|
|
return fileRepository.save(fileEntity);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Integer cmdJudgeCoord(String commandStr) {
|
|
|
+ // 命令运行结果 1:失败, 0:成功
|
|
|
+ Integer isCmd = null;
|
|
|
+
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
+ StringBuffer errorStr = new StringBuffer();
|
|
|
+ try {
|
|
|
+ String[] cmd = new String[]{"/bin/sh", "-c", commandStr};
|
|
|
+ Process ps = Runtime.getRuntime().exec(cmd);
|
|
|
+
|
|
|
+ BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
|
|
|
+ BufferedReader errorBuf = new BufferedReader(new InputStreamReader(ps.getErrorStream()));
|
|
|
+
|
|
|
+ // error : 坑, 控制台信息是从errorBuf这里出来的
|
|
|
+ String errorLine;
|
|
|
+ while ((errorLine = errorBuf.readLine()) != null) {
|
|
|
+ errorStr.append(errorLine).append("\n");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(errorStr)){
|
|
|
+ log.info("error result: {}", errorStr.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ // success ,没有获取到信息
|
|
|
+ String line;
|
|
|
+ while ((line = br.readLine()) != null) {
|
|
|
+// log.info("===== br.readLine: ======== {}", br.readLine());
|
|
|
+ //执行结果加上回车
|
|
|
+ sb.append(line).append("\n");
|
|
|
+ }
|
|
|
+ log.info("result: {}", sb.toString());
|
|
|
+
|
|
|
+ // 结束命令行
|
|
|
+ isCmd = ps.waitFor();
|
|
|
+
|
|
|
+ // 关闭流
|
|
|
+ br.close();
|
|
|
+ errorBuf.close();
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (isCmd == 0) {
|
|
|
+ log.info("end exeCmd : {}", isCmd);
|
|
|
+ // 判断坐标
|
|
|
+ if (sb.toString().contains("+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000")) {
|
|
|
+ // 需要坐标转换
|
|
|
+ // 1000: 需要转换
|
|
|
+ isCmd = 1000;
|
|
|
+ }
|
|
|
+ if (sb.toString().contains("+proj=longlat +datum=WGS84")) {
|
|
|
+ // 不需要坐标转换
|
|
|
+ isCmd = 0;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.info("error cmd wsitFore: {}", isCmd);
|
|
|
+ }
|
|
|
+ return isCmd;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Integer exeCmd(String cmd1, String cmd2) {
|
|
|
+
|
|
|
+ exeCmdSingle(cmd1);
|
|
|
+ Integer isCmd = exeCmdSingle(cmd2);
|
|
|
+ return isCmd;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Integer cmdSlice(String commandStr, OutputFileEntity entity) {
|
|
|
+ log.warn("run cmdSlice");
|
|
|
+ Integer isCmd = null; // 命令运行结果 1:失败, 0:成功
|
|
|
+ try {
|
|
|
+ String[] cmd = new String[]{"/bin/sh", "-c", commandStr};
|
|
|
+ Process ps = Runtime.getRuntime().exec(cmd);
|
|
|
+
|
|
|
+ BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
|
|
|
+ BufferedReader errorBuf = new BufferedReader(new InputStreamReader(ps.getErrorStream()));
|
|
|
+
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
+ // 进度
|
|
|
+ int pre = 0;
|
|
|
+ int num;
|
|
|
+ String str;
|
|
|
+ while ((num = br.read()) != -1) {
|
|
|
+ str = String.valueOf((char) num);
|
|
|
+
|
|
|
+ // 判断数字
|
|
|
+ if (numRegex(str)) {
|
|
|
+ if (!str.equals("0")) {
|
|
|
+ // 非0开头的
|
|
|
+ sb.append(",").append(str);
|
|
|
+ } else {
|
|
|
+ // 以0开头的
|
|
|
+ sb.append(str);
|
|
|
+ }
|
|
|
+ // 截取进度数字
|
|
|
+ str = StringUtils.substringAfterLast(sb.toString(), ",");
|
|
|
+
|
|
|
+ // 100,1000都会当一次
|
|
|
+ if (str.length() == 2) {
|
|
|
+ pre = pre + 5;
|
|
|
+ log.warn("pre: {}", pre);
|
|
|
+ // 能被2整除的存一下db
|
|
|
+ if (pre % 2 == 0) {
|
|
|
+ entity.setProgress(pre);
|
|
|
+ entity.setUpdateTime(new Date());
|
|
|
+ outputFileRepository.save(entity);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("cmd console: {}", sb.toString());
|
|
|
+
|
|
|
+ StringBuffer errorStr = new StringBuffer();
|
|
|
+ String errorLine;
|
|
|
+ while ((errorLine = errorBuf.readLine()) != null) {
|
|
|
+ errorStr.append(errorLine).append("\n");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(errorStr)){
|
|
|
+ log.info("error result: {}", errorStr.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 结束命令行
|
|
|
+ isCmd = ps.waitFor();
|
|
|
+
|
|
|
+ // 关闭流
|
|
|
+ br.close();
|
|
|
+ errorBuf.close();
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isCmd == 0) {
|
|
|
+ log.info("end exeCmd : {}", isCmd);
|
|
|
+ } else {
|
|
|
+ log.info("wsitFore cmd run error : {}", isCmd);
|
|
|
+ }
|
|
|
+ log.warn("end exeCmdRasterSlice");
|
|
|
+ return isCmd;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Integer exeCmdSingle(String commandStr) {
|
|
|
+
|
|
|
+ // 命令运行结果 1:失败, 0:成功
|
|
|
+ Integer isCmd = null;
|
|
|
+ try {
|
|
|
+ String[] cmd = new String[]{"/bin/sh", "-c", commandStr};
|
|
|
+ Process ps = Runtime.getRuntime().exec(cmd);
|
|
|
+
|
|
|
+ BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
|
|
|
+ BufferedReader errorBuf = new BufferedReader(new InputStreamReader(ps.getErrorStream()));
|
|
|
+
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
+ StringBuffer errorStr = new StringBuffer();
|
|
|
+
|
|
|
+ // error : 坑, 控制台信息是从errorBuf这里出来的
|
|
|
+ String errorLine;
|
|
|
+ while ((errorLine = errorBuf.readLine()) != null) {
|
|
|
+ errorStr.append(errorLine).append("\n");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(errorStr)){
|
|
|
+ log.info("error result: {}", errorStr.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ // success ,没有获取到信息
|
|
|
+ String line;
|
|
|
+ while ((line = br.readLine()) != null) {
|
|
|
+ //执行结果加上回车
|
|
|
+ sb.append(line).append("\n");
|
|
|
+ }
|
|
|
+ log.info("result: {}", sb.toString());
|
|
|
+
|
|
|
+ // 结束命令行
|
|
|
+ isCmd = ps.waitFor();
|
|
|
+
|
|
|
+ // 关闭流
|
|
|
+ br.close();
|
|
|
+ errorBuf.close();
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isCmd == 0) {
|
|
|
+ log.info("end exeCmd : {}", isCmd);
|
|
|
+ } else {
|
|
|
+ log.info("wsitFore cmd run error : {}", isCmd);
|
|
|
+ }
|
|
|
+ return isCmd;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
private void writeJsonFile(ConfigJsonDto param, String lastName, OutputFileEntity entity) {
|
|
|
String s = FileUtils.readFile(CONFIG_JSON_PATH);
|
|
|
|
|
@@ -405,4 +597,15 @@ public class RasterServerImpl implements RasterServer {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ // 匹配数字
|
|
|
+ private boolean numRegex(String str) {
|
|
|
+ String reg = "\\d";
|
|
|
+ if (StringUtils.isEmpty(str)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return str.matches(reg);
|
|
|
+ }
|
|
|
+
|
|
|
}
|