|
@@ -0,0 +1,276 @@
|
|
|
+package com.caesolver.server;
|
|
|
+
|
|
|
+
|
|
|
+import java.io.BufferedReader;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.InputStream;
|
|
|
+import java.io.InputStreamReader;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.caesolver.mq.RabbitConfig;
|
|
|
+import com.caesolver.server.util.HttpUtils;
|
|
|
+import com.caesolver.server.util.TimeUtils;
|
|
|
+import com.caesolver.sftp.SFTPUtil;
|
|
|
+
|
|
|
+@Service
|
|
|
+@Async
|
|
|
+public class SolverService {
|
|
|
+ @Value("${caeserverurl}")
|
|
|
+ String url;
|
|
|
+ @Value("${esserverurl}")
|
|
|
+ String esurl;
|
|
|
+// @Autowired
|
|
|
+// BaseElasticService elasticServer;
|
|
|
+ @Autowired
|
|
|
+ SolverBladesignOrderUtil bladesignOrderUtil;
|
|
|
+ @Autowired
|
|
|
+ SolverHcfdOrderUtil hcfdOrderUtil;
|
|
|
+ @Autowired
|
|
|
+ SolverFemOrderUtil femOrderUtil;
|
|
|
+ @Autowired
|
|
|
+ SolverMpmOrderUtil mpmOrderUtil;
|
|
|
+ @Autowired
|
|
|
+ SolverCfdOrderUtil cfdOrderUtil;
|
|
|
+
|
|
|
+ public static final String FEM ="fem";
|
|
|
+ public static final String HCFD ="hcfd";
|
|
|
+ public static final String CFD ="cfd";
|
|
|
+ public static final String MPM ="mpm";
|
|
|
+ public static final String bladesign ="bladesign";
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ SFTPUtil sftpUtil;
|
|
|
+
|
|
|
+ protected static Logger log=LoggerFactory.getLogger(SolverService.class);
|
|
|
+
|
|
|
+ @Async
|
|
|
+ public void processEx(String testMessage) throws IOException, Exception{
|
|
|
+ Map<String, String> map = (Map<String, String>)JSON.parse(testMessage);
|
|
|
+ String jobId = map.get("jobId");
|
|
|
+ String resourcesCode = map.get("resourcesCode");
|
|
|
+ String jobOrder = map.get("jobOrder");
|
|
|
+ String projectType=map.get("projectType");
|
|
|
+ String projectId=map.get("projectId");
|
|
|
+ precess( jobId, resourcesCode, jobOrder, projectType, projectId,100,100);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void precess( String jobId, String resourcesCode, String jobOrder, String projectType,String projectId,Integer vfreq,Integer afreq)
|
|
|
+ throws IOException, Exception {
|
|
|
+ Runtime runtime = Runtime.getRuntime();
|
|
|
+ String startTime =TimeUtils.getNow();
|
|
|
+ Integer i=0;
|
|
|
+ if(resourcesCode.equals(RabbitConfig.RESOURECODE)) {
|
|
|
+ //求解开始
|
|
|
+ log.info("Solver start id={}",projectId);
|
|
|
+ esSeverPut(projectId, "Solver start", i,startTime);
|
|
|
+ if(projectType.equals(FEM)) {
|
|
|
+ precessController(jobId, jobOrder, projectType, projectId,"",vfreq,afreq);
|
|
|
+ }else {
|
|
|
+ i=jobExec(runtime, jobOrder, projectId, startTime);
|
|
|
+ }
|
|
|
+ log.info("Solver changJobState start id={}",projectId);
|
|
|
+ changJobState(jobId, startTime);
|
|
|
+ log.info("Solver changJobState end id={}",projectId);
|
|
|
+ //求解结束
|
|
|
+ esSeverPut(projectId, "Solver end", ++i,startTime);
|
|
|
+ log.info("Solver end id={}",projectId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void precessController( String jobId, String jobOrder, String projectType,String projectId,String orderType,Integer vfreq,Integer afreq)
|
|
|
+ throws IOException, Exception {
|
|
|
+ Runtime runtime = Runtime.getRuntime();
|
|
|
+ String startTime =TimeUtils.getNow();
|
|
|
+ Integer i=0;
|
|
|
+ log.info("Solver start id={}",projectId);
|
|
|
+ esSeverPut(projectId, "Solver start", ++i,startTime);
|
|
|
+ log.info("Solver downLoadAll start id={}",projectId);
|
|
|
+ sftpUtil.downloadByProjectId(projectId,projectType);
|
|
|
+ log.info("Solver downLoadAll end id={}",projectId);
|
|
|
+ log.info("Solver jobExec start id={}",projectId);
|
|
|
+
|
|
|
+
|
|
|
+ jobOrder =createJobOrder(projectId,jobOrder, projectType,orderType,vfreq,afreq,null);
|
|
|
+ log.info("Solver jobExec start jobOrder={}",jobOrder);
|
|
|
+ i=jobExec(runtime, jobOrder, projectId, startTime);
|
|
|
+
|
|
|
+ log.info("Solver jobExec end id={}",projectId);
|
|
|
+ log.info("Solver uploadAll start id={}",projectId);
|
|
|
+ //结果文件处理
|
|
|
+ copyOutFile(projectId, projectType, orderType);
|
|
|
+
|
|
|
+ sftpUtil.uploadByProjectId(projectId,projectType);
|
|
|
+ log.info("Solver uploadByProjectId end id={}",projectId);
|
|
|
+ log.info("Solver changJobState start id={}",projectId);
|
|
|
+ changJobState(jobId, startTime);
|
|
|
+ log.info("Solver changJobState end id={}",projectId);
|
|
|
+ //求解结束
|
|
|
+ esSeverPut(projectId, "Solver end", ++i,startTime);
|
|
|
+ log.info("Solver end id={}",projectId);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void copyOutFile(String projectId,String projectType,String orderType) throws IOException {
|
|
|
+ if(projectType.equals(this.bladesign) && orderType.equals("opt")) {
|
|
|
+ bladesignOrderUtil.copyOutFile(projectId, orderType);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private String createJobOrder(String projectId,String jobOrder,
|
|
|
+ String projectType,String orderType,Integer vfreq,Integer afreq,String resources
|
|
|
+ ) throws IOException {
|
|
|
+// if(projectType.equals(this.CFD)) {
|
|
|
+// Runtime runtime = Runtime.getRuntime();
|
|
|
+// Process p =null;
|
|
|
+// p= runtime.exec("chmod 777 "+jobOrder);
|
|
|
+// }
|
|
|
+ if(projectType.equals(this.bladesign)) {
|
|
|
+ jobOrder =bladesignOrderUtil.createOrder(projectId, orderType);
|
|
|
+ }else if(projectType.equals(this.HCFD)) {
|
|
|
+ jobOrder =hcfdOrderUtil.createOrder(projectId,vfreq,afreq,resources);
|
|
|
+ }else if(projectType.equals(this.FEM)) {
|
|
|
+ jobOrder=femOrderUtil.createOrder(projectId);
|
|
|
+ }else if(projectType.equals(this.MPM)){
|
|
|
+ jobOrder=mpmOrderUtil.createOrder(projectId);
|
|
|
+ }else if(projectType.equals(this.CFD)) {
|
|
|
+ jobOrder=cfdOrderUtil.createOrder(projectId);
|
|
|
+ }
|
|
|
+ return jobOrder;
|
|
|
+ }
|
|
|
+
|
|
|
+ private int jobExec(Runtime runtime, String jobOrder, String projectId, String startTime) throws Exception {
|
|
|
+ log.info("Solver jobExec start jobOrder={}",jobOrder);
|
|
|
+ Process p =null;
|
|
|
+ p= runtime.exec(jobOrder);
|
|
|
+ InputStream fis = p.getInputStream();
|
|
|
+ InputStreamReader isr = new InputStreamReader(fis);
|
|
|
+ BufferedReader br = new BufferedReader(isr);
|
|
|
+ String line = null;
|
|
|
+ int i=0;
|
|
|
+ while ((line = br.readLine()) != null) {
|
|
|
+ log.info(line);
|
|
|
+ i++;
|
|
|
+ if(!line.trim().equals("")) {
|
|
|
+ esSeverPut(projectId,line,i,startTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return i;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void esSeverPut(String projectId,String line, int id,String startTime) throws Exception {
|
|
|
+// System.out.println(esurl);
|
|
|
+// System.out.println(line);
|
|
|
+ Map<String, String> paramMap=new HashMap<>();
|
|
|
+ paramMap.put("projectId", projectId);
|
|
|
+ paramMap.put("log", line);
|
|
|
+ paramMap.put("id", String.valueOf(id));
|
|
|
+ paramMap.put("startTime",startTime);
|
|
|
+ HttpUtils.doPost(esurl+"put","","",new HashMap<String, String>(),new HashMap<String, String>(),paramMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) throws Exception {
|
|
|
+ String startTime =TimeUtils.getNow();
|
|
|
+ Map<String, String> paramMap=new HashMap<>();
|
|
|
+ paramMap.put("projectId", "72a2cdd2d39f4a08920018cae0a02af1");
|
|
|
+ paramMap.put("log", "擦额啊啊啊");
|
|
|
+ paramMap.put("id", String.valueOf(1));
|
|
|
+ paramMap.put("startTime",startTime);
|
|
|
+ HttpUtils.doPost("http://106.3.96.219:8041/"+"put","","",new HashMap<String, String>(),new HashMap<String, String>(),paramMap);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void changJobState(String jobId, String starTime) throws Exception {
|
|
|
+
|
|
|
+ Map<String, String> paramMap=new HashMap<>();
|
|
|
+ paramMap.put("channelNo", "service");
|
|
|
+ paramMap.put("clientToken", "e47b87eec69545559d1e81e56626da68");
|
|
|
+ paramMap.put("transCode", "A00111");
|
|
|
+ paramMap.put("id", jobId);
|
|
|
+ paramMap.put("state", "1");
|
|
|
+ paramMap.put("userId","5f06c8bc77234f969d13e160b54c27e3");
|
|
|
+ paramMap.put("startexeTime", starTime);
|
|
|
+ paramMap.put("endexeTime", TimeUtils.getNow());
|
|
|
+ HttpUtils.doPost(url,"","",new HashMap<String, String>(),new HashMap<String, String>(),paramMap);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param youNumber
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String int2String(int youNumber) {
|
|
|
+ String str = String.format("%010d", youNumber);
|
|
|
+ return str;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void precessController(String jobId, String jobOrder, String projectType, String projectId, String orderType,
|
|
|
+ Integer afreq, Integer vfreq, String resources) throws Exception {
|
|
|
+ Runtime runtime = Runtime.getRuntime();
|
|
|
+ String startTime =TimeUtils.getNow();
|
|
|
+
|
|
|
+ Integer i=0;
|
|
|
+ log.info("Solver start id={}",projectId);
|
|
|
+ esSeverPut(projectId, "Solver start", ++i,startTime);
|
|
|
+ log.info("Solver downLoadAll start id={}",projectId);
|
|
|
+ sftpUtil.downloadByProjectId(projectId,projectType);
|
|
|
+ log.info("Solver downLoadAll end id={}",projectId);
|
|
|
+ log.info("Solver jobExec start id={}",projectId);
|
|
|
+ jobOrder =createJobOrder(projectId,jobOrder, projectType,orderType,vfreq,afreq,resources);
|
|
|
+ i=jobExec(runtime, jobOrder, projectId, startTime);
|
|
|
+
|
|
|
+ log.info("Solver jobExec end id={}",projectId);
|
|
|
+ log.info("Solver uploadAll start id={}",projectId);
|
|
|
+ //结果文件处理
|
|
|
+ copyOutFile(projectId, projectType, orderType);
|
|
|
+
|
|
|
+ sftpUtil.uploadByProjectId(projectId,projectType);
|
|
|
+ log.info("Solver uploadByProjectId end id={}",projectId);
|
|
|
+ log.info("Solver changJobState start id={}",projectId);
|
|
|
+ changJobState(jobId, startTime);
|
|
|
+ log.info("Solver changJobState end id={}",projectId);
|
|
|
+ //求解结束
|
|
|
+ esSeverPut(projectId, "Solver end", ++i,startTime);
|
|
|
+ log.info("Solver end id={}",projectId);
|
|
|
+ String endTime =TimeUtils.getNow();
|
|
|
+ if(projectType.equals(this.HCFD)){
|
|
|
+ this.consume(projectId, startTime, endTime,projectType);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 资源消费接口
|
|
|
+ *
|
|
|
+ */
|
|
|
+ @Async
|
|
|
+ private void consume(String pid,String startTime,String endTime,String type) throws Exception {
|
|
|
+ Map<String, String> paramMap = new HashMap<>();
|
|
|
+ paramMap.put("channelNo", "service");
|
|
|
+ paramMap.put("clientToken", "e47b87eec69545559d1e81e56626da68");
|
|
|
+ paramMap.put("transCode", "HG00003");
|
|
|
+ paramMap.put("otherId", pid);
|
|
|
+ paramMap.put("type", type);
|
|
|
+ paramMap.put("startTime", startTime);
|
|
|
+ paramMap.put("endTime", endTime);
|
|
|
+ paramMap.put("userId", "5f06c8bc77234f969d13e160b54c27e3");
|
|
|
+ HttpUtils.doPost(url, "", "",
|
|
|
+ new HashMap<String, String>(),
|
|
|
+ new HashMap<String, String>(), paramMap);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|