AC00006Service.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package com.miniframe.bisiness.ac;
  2. import java.util.Map;
  3. import java.util.concurrent.CompletableFuture;
  4. import ac.template.TemplateGenerator;
  5. import com.github.dockerjava.api.async.ResultCallback;
  6. import com.github.dockerjava.api.model.Frame;
  7. import com.miniframe.core.ExecProcessFlow;
  8. import com.miniframe.generate.business.ac.model.AC00006BaseModel;
  9. import com.miniframe.tools.XIFileUtils;
  10. import com.miniframe.tools.docker.DockerExe;
  11. import service.LogService;
  12. /**
  13. * 气动设计系统,“项目求解”逻辑处理(重新生成不覆盖)。
  14. */
  15. public class AC00006Service extends AC00006BaseModel implements ExecProcessFlow {
  16. private static final long serialVersionUID = -7051358269847459502L;
  17. /**
  18. * 气动设计系统,“项目求解”业务核心处理
  19. */
  20. public void transExecute() throws Exception {
  21. String pid = this.getA_ac00006().getPid();
  22. Integer type =this.getA_ac00006().getType();//类型0 气动 1 结构 2 气弹
  23. XIFileUtils.mkdir(XIFileUtils.getRootPathStr());
  24. XIFileUtils.mkdir(XIFileUtils.getRootPathStr()+"/ac");
  25. XIFileUtils.mkdir(XIFileUtils.getRootPathStr()+"/ac/"+pid);
  26. XIFileUtils.mkdir(XIFileUtils.getRootPathStr()+"/ac/"+pid+"/"+type);
  27. TemplateGenerator.createGuiXml(pid,type);
  28. run(pid,type);
  29. }
  30. private void run(String pid,Integer type) throws Exception {
  31. LogService.clearLog(pid,type);
  32. LogService.addLog(pid,type,"求解——————————————————开始");
  33. DockerExe.stopDocker(pid);
  34. DockerExe.run(pid,type);
  35. final int[] con = {0};
  36. final String[] line = {""};
  37. CompletableFuture<Void> cf = CompletableFuture.supplyAsync(()-> {try {
  38. DockerExe.getDockerLogs(pid,new ResultCallback.Adapter<Frame>() {
  39. @Override
  40. public void onNext(Frame frame) {
  41. if(con[0] <100){
  42. line[0]+=new String(frame.getPayload());
  43. con[0]++;
  44. }else{
  45. line[0]+=new String(frame.getPayload());
  46. LogService.addLog(pid,type, line[0]);
  47. line[0]="";
  48. con[0] =0;
  49. }
  50. // LogService.addLog(pid, new String(frame.getPayload()));
  51. System.out.print(new String(frame.getPayload()));
  52. super.onNext(frame);
  53. }
  54. @Override
  55. public void onError(Throwable throwable) {
  56. System.err.println("日志获取失败");
  57. LogService.addLog(pid,type,line[0]);
  58. throwable.printStackTrace();
  59. DockerExe.stopDocker(pid);
  60. super.onError(throwable);
  61. }
  62. @Override
  63. public void onComplete() {
  64. System.out.println("日志获取完成");
  65. LogService.addLog(pid,type, line[0]);
  66. DockerExe.stopDocker(pid);
  67. super.onComplete();
  68. }
  69. });
  70. LogService.addLog(pid,type,"求解——————————————————成功");
  71. } catch (Exception e) {
  72. LogService.addLog(pid,type,"求解——————————————————失败");
  73. e.printStackTrace();
  74. }
  75. return null;
  76. });
  77. }
  78. /**
  79. * 气动设计系统,“项目求解”业务前处理
  80. */
  81. public void preTransFlow() throws Exception {
  82. this.validater();
  83. }
  84. /**
  85. * 气动设计系统,“项目求解”业务后处理
  86. */
  87. public void afterTransFlow() throws Exception {
  88. }
  89. /**
  90. * 气动设计系统,“项目求解”逻辑入口处理方法
  91. */
  92. @SuppressWarnings("rawtypes")
  93. @Override
  94. public Map execute(Map vars) throws Exception {
  95. this.setTransMap(vars);
  96. preTransFlow();// 执行业务开始的规则检查和校验
  97. transExecute();// 执行核心业务段
  98. afterTransFlow();// 执行核心逻辑完成后的收尾逻辑
  99. return this.getTransMap();
  100. }
  101. }