|
@@ -0,0 +1,355 @@
|
|
|
|
+package com.fd.server.impl;
|
|
|
|
+
|
|
|
|
+import com.fd.constant.TypeCode;
|
|
|
|
+import com.fd.entity.ScheduleEntity;
|
|
|
|
+import com.fd.repository.FileRepository;
|
|
|
|
+import com.fd.repository.ScheduleRepository;
|
|
|
|
+import com.fd.server.CmdServer;
|
|
|
|
+import lombok.extern.log4j.Log4j2;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+
|
|
|
|
+import javax.transaction.Transactional;
|
|
|
|
+import java.io.BufferedReader;
|
|
|
|
+import java.io.InputStreamReader;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.Arrays;
|
|
|
|
+import java.util.Date;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * Created by Owen on 2019/10/25 0025 16:06
|
|
|
|
+ */
|
|
|
|
+@Log4j2
|
|
|
|
+@Service
|
|
|
|
+@Transactional
|
|
|
|
+public class CmdServerImpl implements CmdServer {
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private FileRepository fileRepository;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ScheduleRepository scheduleRepository;
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Integer exeCmd(String commandStr, Long id) {
|
|
|
|
+ String result = null;
|
|
|
|
+ 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(), "UTF-8"));
|
|
|
|
+ BufferedReader errorBuf = new BufferedReader(new InputStreamReader(ps.getErrorStream(), "UTF-8"));
|
|
|
|
+
|
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
|
+ StringBuffer errorStr = new StringBuffer();
|
|
|
|
+
|
|
|
|
+ String errorLine;
|
|
|
|
+
|
|
|
|
+ String str = "";
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ ArrayList<Object> arrayList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ double percent;
|
|
|
|
+ int count = 1;
|
|
|
|
+ ScheduleEntity schedule = new ScheduleEntity();
|
|
|
|
+ while ((errorLine = errorBuf.readLine()) != null) {
|
|
|
|
+ errorStr.append(errorLine).append("\n");
|
|
|
|
+
|
|
|
|
+ if (errorLine.contains("Generated tile #")) {
|
|
|
|
+ // 截取百分比
|
|
|
|
+ str = errorLine.substring(errorLine.indexOf("% done)") - 7, errorLine.indexOf("% done)"));
|
|
|
|
+ percent = Double.parseDouble(str);
|
|
|
|
+ arrayList.add(percent);
|
|
|
|
+ if (1 == count) {
|
|
|
|
+ schedule.setFileId(id);
|
|
|
|
+ schedule.setPercent(str);
|
|
|
|
+ schedule.setCreateTime(new Date());
|
|
|
|
+ schedule.setUpdateTime(new Date());
|
|
|
|
+// schedule.setRecStatus("A");
|
|
|
|
+ count = count + 5;
|
|
|
|
+ schedule = scheduleRepository.save(schedule);
|
|
|
|
+ log.info("count 1: {}", count);
|
|
|
|
+ }
|
|
|
|
+ if (percent > count && percent == 100) {
|
|
|
|
+ schedule.setPercent(str);
|
|
|
|
+ schedule.setUpdateTime(new Date());
|
|
|
|
+ schedule = scheduleRepository.save(schedule);
|
|
|
|
+ count = count + 5;
|
|
|
|
+ log.info("count 5: {}", count);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ log.info("error result: {}", errorStr.toString());
|
|
|
|
+ log.info("per: {}", Arrays.toString(arrayList.toArray()));
|
|
|
|
+
|
|
|
|
+ String line;
|
|
|
|
+ while ((line = br.readLine()) != null) {
|
|
|
|
+ log.info("===== br.readLine: ======== {}", br.readLine());
|
|
|
|
+ //执行结果加上回车
|
|
|
|
+ System.out.println("br: " + line);
|
|
|
|
+ sb.append(line).append("\n");
|
|
|
|
+ log.info("line: {}", line);
|
|
|
|
+ }
|
|
|
|
+ result = sb.toString();
|
|
|
|
+ log.info("result: {}", result);
|
|
|
|
+
|
|
|
|
+ // 结束命令行
|
|
|
|
+ isCmd = ps.waitFor();
|
|
|
|
+ if (isCmd == 0) {
|
|
|
|
+ log.info("wsitFore cmd success : {}", isCmd);
|
|
|
|
+ } else {
|
|
|
|
+ log.info("wsitFore cmd run error : {}", isCmd);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 关闭流
|
|
|
|
+ br.close();
|
|
|
|
+ errorBuf.close();
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return isCmd;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Integer exeCmd(String commandStr) {
|
|
|
|
+ String result = null;
|
|
|
|
+ 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(), "UTF-8"));
|
|
|
|
+ BufferedReader errorBuf = new BufferedReader(new InputStreamReader(ps.getErrorStream(), "UTF-8"));
|
|
|
|
+
|
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
|
+ StringBuffer errorStr = new StringBuffer();
|
|
|
|
+
|
|
|
|
+ String errorLine;
|
|
|
|
+
|
|
|
|
+ ArrayList<Object> arrayList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ while ((errorLine = errorBuf.readLine()) != null) {
|
|
|
|
+ errorStr.append(errorLine).append("\n");
|
|
|
|
+ }
|
|
|
|
+ log.info("error result: {}", errorStr.toString());
|
|
|
|
+ log.info("per: {}", Arrays.toString(arrayList.toArray()));
|
|
|
|
+
|
|
|
|
+ String line;
|
|
|
|
+ while ((line = br.readLine()) != null) {
|
|
|
|
+ log.info("===== br.readLine: ======== {}", br.readLine());
|
|
|
|
+ //执行结果加上回车
|
|
|
|
+ sb.append(line).append("\n");
|
|
|
|
+ log.info("line: {}", line);
|
|
|
|
+ }
|
|
|
|
+ result = sb.toString();
|
|
|
|
+ log.info("result: {}", result);
|
|
|
|
+
|
|
|
|
+ // 结束命令行
|
|
|
|
+ isCmd = ps.waitFor();
|
|
|
|
+ if (isCmd == 0) {
|
|
|
|
+ log.info("wsitFore cmd success : {}", isCmd);
|
|
|
|
+ } else {
|
|
|
|
+ log.info("wsitFore cmd run error : {}", isCmd);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 关闭流
|
|
|
|
+ br.close();
|
|
|
|
+ errorBuf.close();
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return isCmd;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Integer exeCmdSlpk2vts(String commandStr, Long id) {
|
|
|
|
+ String result = null;
|
|
|
|
+ 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(), "UTF-8"));
|
|
|
|
+ BufferedReader errorBuf = new BufferedReader(new InputStreamReader(ps.getErrorStream(), "UTF-8"));
|
|
|
|
+
|
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
|
+ StringBuffer errorStr = new StringBuffer();
|
|
|
|
+
|
|
|
|
+ String errorLine;
|
|
|
|
+
|
|
|
|
+ String str = "";
|
|
|
|
+
|
|
|
|
+ ArrayList<Object> arrayList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ double percent;
|
|
|
|
+ int count = 1;
|
|
|
|
+ ScheduleEntity schedule = new ScheduleEntity();
|
|
|
|
+ while ((errorLine = errorBuf.readLine()) != null) {
|
|
|
|
+ errorStr.append(errorLine).append("\n");
|
|
|
|
+ // All done. {slpk2vts.cpp:
|
|
|
|
+ if (errorLine.contains("Generated tile #")) {
|
|
|
|
+ // 截取百分比
|
|
|
|
+ str = errorLine.substring(errorLine.indexOf("% done)") - 7, errorLine.indexOf("% done)"));
|
|
|
|
+ percent = Double.parseDouble(str);
|
|
|
|
+ arrayList.add(percent);
|
|
|
|
+ if (1 == count) {
|
|
|
|
+ schedule.setFileId(id);
|
|
|
|
+ schedule.setPercent(str);
|
|
|
|
+ schedule.setCreateTime(new Date());
|
|
|
|
+ schedule.setUpdateTime(new Date());
|
|
|
|
+ schedule.setType(TypeCode.SCHEDULE_TYPE_MODEL_SLPK);
|
|
|
|
+ count = count + 5;
|
|
|
|
+ schedule = scheduleRepository.save(schedule);
|
|
|
|
+ log.info("count 1: {}", count);
|
|
|
|
+ }
|
|
|
|
+ if (percent > count && percent == 100) {
|
|
|
|
+ schedule.setPercent(str);
|
|
|
|
+ schedule.setUpdateTime(new Date());
|
|
|
|
+ schedule = scheduleRepository.save(schedule);
|
|
|
|
+ count = count + 5;
|
|
|
|
+ log.info("count 5: {}", count);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ log.info("error result: {}", errorStr.toString());
|
|
|
|
+ log.info("exeCmdSlpk2vts per: {}", Arrays.toString(arrayList.toArray()));
|
|
|
|
+
|
|
|
|
+ String line;
|
|
|
|
+ while ((line = br.readLine()) != null) {
|
|
|
|
+ log.info("===== br.readLine: ======== {}", br.readLine());
|
|
|
|
+ //执行结果加上回车
|
|
|
|
+ System.out.println("br: " + line);
|
|
|
|
+ sb.append(line).append("\n");
|
|
|
|
+ log.info("line: {}", line);
|
|
|
|
+ }
|
|
|
|
+ result = sb.toString();
|
|
|
|
+ log.info("result: {}", result);
|
|
|
|
+
|
|
|
|
+ // 结束命令行
|
|
|
|
+ isCmd = ps.waitFor();
|
|
|
|
+ if (isCmd == 0) {
|
|
|
|
+ log.info("wsitFore cmd success : {}", isCmd);
|
|
|
|
+ } else {
|
|
|
|
+ log.info("wsitFore cmd run error : {}", isCmd);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 关闭流
|
|
|
|
+ br.close();
|
|
|
|
+ errorBuf.close();
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return isCmd;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Integer exeCmdVts(String commandStr, Long fileId) {
|
|
|
|
+ String result = null;
|
|
|
|
+ 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(), "UTF-8"));
|
|
|
|
+ BufferedReader errorBuf = new BufferedReader(new InputStreamReader(ps.getErrorStream(), "UTF-8"));
|
|
|
|
+
|
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
|
+ StringBuffer errorStr = new StringBuffer();
|
|
|
|
+
|
|
|
|
+ String errorLine;
|
|
|
|
+
|
|
|
|
+ String str = "";
|
|
|
|
+
|
|
|
|
+ ArrayList<Object> arrayList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ double percent;
|
|
|
|
+ int count = 1;
|
|
|
|
+ ScheduleEntity schedule = new ScheduleEntity();
|
|
|
|
+ while ((errorLine = errorBuf.readLine()) != null) {
|
|
|
|
+ errorStr.append(errorLine).append("\n");
|
|
|
|
+ System.out.println("errorStr: "+ errorLine);
|
|
|
|
+ if (errorLine.contains("(glue) progress:")) {
|
|
|
|
+ // 截取百分比
|
|
|
|
+ str = errorLine.substring(errorLine.indexOf("%.") - 7, errorLine.indexOf("%."));
|
|
|
|
+ percent = Double.parseDouble(str);
|
|
|
|
+ arrayList.add(percent);
|
|
|
|
+ if (1 == count) {
|
|
|
|
+ schedule.setFileId(fileId);
|
|
|
|
+ schedule.setPercent(str);
|
|
|
|
+ schedule.setCreateTime(new Date());
|
|
|
|
+ schedule.setUpdateTime(new Date());
|
|
|
|
+ schedule.setType(TypeCode.SCHEDULE_TYPE_MODEL_VTS);
|
|
|
|
+ count = count + 5;
|
|
|
|
+ schedule = scheduleRepository.save(schedule);
|
|
|
|
+ log.info("count 1: {}", count);
|
|
|
|
+ }
|
|
|
|
+ if (percent > count && percent == 100) {
|
|
|
|
+ schedule.setPercent(str);
|
|
|
|
+ schedule.setUpdateTime(new Date());
|
|
|
|
+ schedule = scheduleRepository.save(schedule);
|
|
|
|
+ count = count + 5;
|
|
|
|
+ log.info("count 5: {}", count);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (errorLine.contains("All done. {vts.cpp:add():")){
|
|
|
|
+ percent = 100;
|
|
|
|
+ str = "100.00";
|
|
|
|
+ schedule.setPercent(str);
|
|
|
|
+ schedule.setUpdateTime(new Date());
|
|
|
|
+ schedule = scheduleRepository.save(schedule);
|
|
|
|
+ arrayList.add(percent);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ log.info("error result: {}", errorStr.toString());
|
|
|
|
+ log.info("exeCmdVts per: {}", Arrays.toString(arrayList.toArray()));
|
|
|
|
+
|
|
|
|
+ String line;
|
|
|
|
+ while ((line = br.readLine()) != null) {
|
|
|
|
+ log.info("===== br.readLine: ======== {}", br.readLine());
|
|
|
|
+ //执行结果加上回车
|
|
|
|
+ System.out.println("br: " + line);
|
|
|
|
+ sb.append(line).append("\n");
|
|
|
|
+ log.info("line: {}", line);
|
|
|
|
+ }
|
|
|
|
+ result = sb.toString();
|
|
|
|
+ log.info("result: {}", result);
|
|
|
|
+
|
|
|
|
+ // 结束命令行
|
|
|
|
+ isCmd = ps.waitFor();
|
|
|
|
+ if (isCmd == 0) {
|
|
|
|
+ log.info("wsitFore cmd success : {}", isCmd);
|
|
|
|
+ } else {
|
|
|
|
+ log.info("wsitFore cmd run error : {}", isCmd);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 关闭流
|
|
|
|
+ br.close();
|
|
|
|
+ errorBuf.close();
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return isCmd;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static void main(String[] args) {
|
|
|
|
+ String e = "(glue) progress: 99.83 %. {progress.cpp:report():48}";
|
|
|
|
+ e = e.substring(e.lastIndexOf("%.")-7, e.lastIndexOf("%."));
|
|
|
|
+ System.out.println(e);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|