huangxingxing 1 month ago
parent
commit
d0a0d030a8

+ 1 - 0
dbscript/init/generate/03-functionInit.sql

@@ -6,6 +6,7 @@ INSERT INTO SYS_FUNCTION(FUNCTIONID, CLASSNAME, FUNCTIONNAME ,ENABLE)VALUES ('AC
 INSERT INTO SYS_FUNCTION(FUNCTIONID, CLASSNAME, FUNCTIONNAME ,ENABLE)VALUES ('AC00003', '气动设计系统','项目删除',true);
 INSERT INTO SYS_FUNCTION(FUNCTIONID, CLASSNAME, FUNCTIONNAME ,ENABLE)VALUES ('AC00004', '气动设计系统','项目属性查询',true);
 INSERT INTO SYS_FUNCTION(FUNCTIONID, CLASSNAME, FUNCTIONNAME ,ENABLE)VALUES ('AC00005', '气动设计系统','项目属性添加修改',true);
+INSERT INTO SYS_FUNCTION(FUNCTIONID, CLASSNAME, FUNCTIONNAME ,ENABLE)VALUES ('AC00006', '气动设计系统','项目求解',true);
 INSERT INTO SYS_FUNCTION(FUNCTIONID, CLASSNAME, FUNCTIONNAME ,ENABLE)VALUES ('BES001', '气动设计系统','基础字典查询',true);
 -- 基础系统
 INSERT INTO SYS_FUNCTION(FUNCTIONID, CLASSNAME, FUNCTIONNAME ,ENABLE)VALUES ('A00000', '基础系统','获取图片验证码',true);

+ 112 - 0
generated/com/miniframe/generate/business/ac/model/AC00006BaseModel.java

@@ -0,0 +1,112 @@
+package com.miniframe.generate.business.ac.model;
+
+import java.util.Map;
+import java.io.IOException;
+import java.util.LinkedHashMap;
+import com.miniframe.core.BaseMapModel;
+import com.miniframe.core.ext.UtilTools;
+import com.miniframe.core.ext.HttpMapFormater;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import com.miniframe.generate.global.AppGlobalVariableSysconfig;
+
+import com.miniframe.generate.comm.ac.A_ACHEAD;
+import com.miniframe.generate.comm.ac.D_ACHEAD;
+import com.miniframe.generate.comm.ac.A_AC00006;
+import com.miniframe.generate.comm.ac.D_AC00006;
+
+/**
+ * 气动设计,“项目求解”模型类(不要维护,重新生成将覆盖)。
+ */
+@SuppressWarnings({ "rawtypes", "unchecked" })
+public class AC00006BaseModel extends BaseMapModel {
+
+	private static final long serialVersionUID = -1326184831746814093L;
+
+	A_ACHEAD a_achead;//上行头
+	D_ACHEAD d_achead;//下行头
+	A_AC00006 a_ac00006;//上行体
+	D_AC00006 d_ac00006;//下行体
+
+	public AC00006BaseModel(){
+		a_achead=new A_ACHEAD();
+		d_achead=new D_ACHEAD();
+		a_ac00006=new A_AC00006();
+		d_ac00006=new D_AC00006();
+	}
+
+	public void validater() throws Exception {
+		this.a_achead.validater();
+		this.a_ac00006.validater();
+	}
+
+	public void setTransMap(Map map) throws Exception {
+		Map headMap = HttpMapFormater.format(map, A_ACHEAD.class);
+		this.a_achead = UtilTools.map2Obj(headMap, A_ACHEAD.class);
+		Map bodyMap = HttpMapFormater.format(map, A_AC00006.class);
+		this.a_ac00006 = UtilTools.map2Obj(bodyMap, A_AC00006.class);
+	}
+
+	public Map getTransMap() throws Exception {
+		Map reMap = new LinkedHashMap();
+
+		if(UtilTools.isNullOrBlank((this.d_achead).getTransCode())){
+			(this.d_achead).setTransCode((this.a_achead).getTransCode());
+		}
+		if(UtilTools.isNullOrBlank((this.d_achead).getChannelNo())){
+			(this.d_achead).setChannelNo((this.a_achead).getChannelNo());
+		}
+		if(UtilTools.isNullOrBlank((this.d_achead).getUserId())){
+			(this.d_achead).setUserId((this.a_achead).getUserId());
+		}
+        if(UtilTools.isNullOrBlank((this.d_achead).getTransTime())){
+            (this.d_achead).setTransTime(DateTimeFormatter.ofPattern(AppGlobalVariableSysconfig.DATETIMEFORMAT).format(ZonedDateTime.now()));
+        }
+
+		reMap.putAll(UtilTools.obj2Map(this.d_achead));
+		reMap.putAll(UtilTools.obj2Map(this.d_ac00006));
+
+		return reMap;
+	}
+
+	public A_ACHEAD getA_achead() {
+		return this.a_achead;
+	}
+
+	public void setA_achead(A_ACHEAD a_achead) {
+		this.a_achead=a_achead;
+	}
+
+	public D_ACHEAD getD_achead() {
+		return d_achead;
+	}
+
+	public void setD_achead(D_ACHEAD d_achead) {
+		this.d_achead=d_achead;
+	}
+
+	public A_AC00006 getA_ac00006() {
+		return a_ac00006;
+	}
+
+	public void setA_ac00006(A_AC00006 a_ac00006) {
+		this.a_ac00006=a_ac00006;
+	}
+
+	public D_AC00006 getD_ac00006() {
+		return this.d_ac00006;
+	}
+
+	public void setD_ac00006(D_AC00006 d_ac00006) {
+		this.d_ac00006=d_ac00006;
+	}
+
+	@Override
+	public String toString() {
+		try {
+			return UtilTools.obj2Json(this,true);
+		} catch (IOException e) {
+			return "";
+		}
+	}
+}

+ 38 - 0
generated/com/miniframe/generate/comm/ac/A_AC00006.java

@@ -0,0 +1,38 @@
+/**
+ * 气动设计
+ */
+package com.miniframe.generate.comm.ac;
+import com.miniframe.core.BaseMapModel;
+import java.io.Serializable;
+/**
+ * 项目求解
+ */
+public class A_AC00006 extends BaseMapModel implements Serializable {
+	private static final long serialVersionUID = -1463838678425832212L;
+	String pid;//项目id
+	/**
+	 *项目id
+	 */
+	public void setPid(String pid) {
+		this.pid=pid;
+	}
+	/**
+	 *项目id
+	 */
+	public String getPid() {
+		return this.pid;
+	}
+	int type;//类型0气动1结构2气弹
+	/**
+	 *类型0气动1结构2气弹
+	 */
+	public void setType(int type) {
+		this.type=type;
+	}
+	/**
+	 *类型0气动1结构2气弹
+	 */
+	public int getType() {
+		return this.type;
+	}
+}

+ 12 - 0
generated/com/miniframe/generate/comm/ac/D_AC00006.java

@@ -0,0 +1,12 @@
+/**
+ * 气动设计
+ */
+package com.miniframe.generate.comm.ac;
+import com.miniframe.core.BaseMapModel;
+import java.io.Serializable;
+/**
+ * 项目求解
+ */
+public class D_AC00006 extends BaseMapModel implements Serializable {
+	private static final long serialVersionUID = -1463838678425832212L;
+}

+ 99 - 0
generated/com/miniframe/generate/comm/httpesapater/AC00006Client.java

@@ -0,0 +1,99 @@
+package com.miniframe.generate.comm.httpesapater;
+
+import com.miniframe.spring.httpclient.MFHttpRespInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import com.miniframe.core.Transmitter;
+import com.miniframe.core.ext.UtilTools;
+import com.miniframe.generate.comm.ac.D_AC00006;
+import com.miniframe.generate.comm.ac.D_ACHEAD;
+
+import com.miniframe.generate.business.ac.model.AC00006BaseModel;
+
+public class AC00006Client {
+
+	private static final Logger logger = LoggerFactory.getLogger(AC00006Client.class);
+	private MFHttpRespInfo respInfo;
+
+	public MFHttpRespInfo getRespInfo(){
+		return respInfo;
+	}
+
+	/**
+	 * 调用 [气动设计->项目求解((AC00006)]的通讯接口
+	 * @param model 接口模型
+	 * @param extMap 扩展输入
+	 * @param url 请求地址
+	 * @return model 接口模型
+	 * @throws Exception
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public AC00006BaseModel execute(AC00006BaseModel model,final Map extMap,final String url) throws Exception {
+		this.executeToRespInfo(model,extMap,url);
+		return model;
+	}
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public AC00006BaseModel execute(AC00006BaseModel model,final Map extMap) throws Exception {
+		this.executeToRespInfo(model,extMap,null);
+		return model;
+	}
+
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public MFHttpRespInfo executeToRespInfo(AC00006BaseModel model,final Map extMap,final String url) throws Exception {
+		if (logger.isDebugEnabled()) {
+			logger.debug("execute(AC00006BaseModel) - start");
+		}
+
+		if(UtilTools.isNullOrBlank(model.getA_achead().getTransCode())){
+			model.getA_achead().setTransCode("AC00006");
+		}
+
+		Map inMap = new LinkedHashMap();
+		inMap.putAll(UtilTools.obj2Map(model.getA_achead()));
+		inMap.putAll(UtilTools.obj2Map(model.getA_ac00006()));
+		if(extMap!=null && extMap.size()>0){
+			inMap.putAll(extMap);
+		}
+
+		Transmitter httpesApater = (Transmitter) UtilTools.getBean("httpesApater");
+		MFHttpRespInfo respInfo;
+		if(UtilTools.isNotNullAndBlank(url)){
+			respInfo = httpesApater.doPostDataToRespInfo(inMap,url);
+		}else{
+			respInfo = httpesApater.doPostDataToRespInfo(inMap);
+		}
+
+		if(respInfo!=null) {
+			Map outMap=respInfo.getParamMap();
+			D_ACHEAD d_achead =  UtilTools.map2Obj(outMap, D_ACHEAD.class);
+			D_AC00006 d_ac00006 =  UtilTools.map2Obj(outMap, D_AC00006.class);
+			model.setD_achead(d_achead);
+			model.setD_ac00006(d_ac00006);
+
+
+		}
+
+		if (logger.isDebugEnabled()) {
+			logger.debug("execute(AC00006BaseModel) - end");
+		}
+
+        this.respInfo=respInfo;
+
+		return respInfo;
+	}
+
+
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public AC00006BaseModel execute(AC00006BaseModel model) throws Exception {
+		return this.execute(model,null,null);
+	}
+
+
+}

+ 15 - 0
generated/validateform/a_ac00006Form.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+<!-- 项目求解Form配置文件系统生成请勿修改,否则重新生成将覆盖 -->
+<form-validation>
+<formset>
+<form name="a_ac00006Form">
+<field property="pid" depends="required">
+    <arg0 key="a_ac00006.pid"/>
+</field>
+<field property="type" depends="required">
+    <arg0 key="a_ac00006.type"/>
+</field>
+</form>
+</formset>
+</form-validation>

+ 3 - 0
generated/validator/resources_a_ac00006Form_validator.properties

@@ -0,0 +1,3 @@
+a_ac00006.pid = \u9879\u76EEid
+a_ac00006.type = \u7C7B\u578B0\u6C14\u52A81\u7ED3\u67842\u6C14\u5F39
+a_ac00006Form = true

+ 3 - 0
generated/validator/resources_a_ac00006Form_validator_zh_CN.properties

@@ -0,0 +1,3 @@
+a_ac00006.pid = \u9879\u76EEid
+a_ac00006.type = \u7C7B\u578B0\u6C14\u52A81\u7ED3\u67842\u6C14\u5F39
+a_ac00006Form = true

+ 1 - 0
generated/validator/resources_d_ac00006Form_validator.properties

@@ -0,0 +1 @@
+d_ac00006Form = false

+ 1 - 0
generated/validator/resources_d_ac00006Form_validator_zh_CN.properties

@@ -0,0 +1 @@
+d_ac00006Form = false

+ 39 - 0
src/main/java/ac/template/TemplateGenerator.java

@@ -0,0 +1,39 @@
+package ac.template;
+
+import com.miniframe.tools.XIFileUtils;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+public class TemplateGenerator {
+    /**
+     * 配置文件gui.xml
+     * @param pid
+     * @throws IOException
+     * @throws TemplateException
+     */
+    public static void createGuiXml(String pid,Integer type) throws IOException, TemplateException {
+        Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
+        // 设置模板所在目录
+        cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
+        // 获取模板对象
+        Template template = cfg.getTemplate("gui.ftl");
+        // 定义数据模型(Map)
+        Map<String, Object> dataModel = new HashMap<>();
+//        dataModel.put("nodes",TemplateServer.findNodes(pid));
+//        dataModel.put("coms",TemplateServer.findComs(pid));
+//        dataModel.put("sim",TemplateServer.findSimulations(pid));
+        // 将数据模型传入模板进行处理
+        StringWriter writer = new StringWriter();
+        template.process(dataModel, writer);
+        FileWriter fileWriter = new FileWriter(XIFileUtils.getRootPathStr()+"/ac/"+pid+"/"+type+"/gui.xml");
+        fileWriter.write(writer.toString());
+        fileWriter.close();
+    }
+}

+ 4 - 0
src/main/java/ac/template/TemplateServer.java

@@ -0,0 +1,4 @@
+package ac.template;
+
+public class TemplateServer {
+}

+ 111 - 0
src/main/java/com/miniframe/bisiness/ac/AC00006Service.java

@@ -0,0 +1,111 @@
+package com.miniframe.bisiness.ac;
+
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+
+import ac.template.TemplateGenerator;
+import com.github.dockerjava.api.async.ResultCallback;
+import com.github.dockerjava.api.model.Frame;
+import com.miniframe.core.ExecProcessFlow;
+import com.miniframe.generate.business.ac.model.AC00006BaseModel;
+import com.miniframe.tools.XIFileUtils;
+import com.miniframe.tools.docker.DockerExe;
+import service.LogService;
+
+/**
+ * 气动设计系统,“项目求解”逻辑处理(重新生成不覆盖)。
+ */
+public class AC00006Service extends AC00006BaseModel implements ExecProcessFlow {
+	
+	private static final long serialVersionUID = -7051358269847459502L;
+		
+	/**
+	 * 气动设计系统,“项目求解”业务核心处理
+ 	 */
+	public void transExecute() throws Exception {
+		String pid = this.getA_ac00006().getPid();
+		Integer type =this.getA_ac00006().getType();//类型0 气动 1 结构 2 气弹
+		XIFileUtils.mkdir(XIFileUtils.getRootPathStr());
+		XIFileUtils.mkdir(XIFileUtils.getRootPathStr()+"/ac");
+		XIFileUtils.mkdir(XIFileUtils.getRootPathStr()+"/ac/"+pid);
+		XIFileUtils.mkdir(XIFileUtils.getRootPathStr()+"/ac/"+pid+"/"+type);
+		TemplateGenerator.createGuiXml(pid,type);
+		run(pid,type);
+
+	}
+	private void run(String pid,Integer type) throws Exception {
+		LogService.clearLog(pid,type);
+		LogService.addLog(pid,type,"求解——————————————————开始");
+		DockerExe.stopDocker(pid);
+		DockerExe.run(pid,type);
+		final int[] con = {0};
+		final String[] line = {""};
+		CompletableFuture<Void> cf = CompletableFuture.supplyAsync(()-> {try {
+			DockerExe.getDockerLogs(pid,new ResultCallback.Adapter<Frame>() {
+				@Override
+				public void onNext(Frame frame) {
+					if(con[0] <100){
+						line[0]+=new String(frame.getPayload());
+						con[0]++;
+					}else{
+						LogService.addLog(pid,type, line[0]);
+						line[0]="";
+						con[0] =0;
+					}
+//					LogService.addLog(pid, new String(frame.getPayload()));
+					System.out.print(new String(frame.getPayload()));
+					super.onNext(frame);
+				}
+				@Override
+				public void onError(Throwable throwable) {
+					System.err.println("日志获取失败");
+					LogService.addLog(pid,type,line[0]);
+					throwable.printStackTrace();
+					DockerExe.stopDocker(pid);
+					super.onError(throwable);
+				}
+				@Override
+				public void onComplete() {
+					System.out.println("日志获取完成");
+					LogService.addLog(pid,type, line[0]);
+					DockerExe.stopDocker(pid);
+					super.onComplete();
+				}
+			});
+			LogService.addLog(pid,type,"求解——————————————————成功");
+		} catch (Exception e) {
+			LogService.addLog(pid,type,"求解——————————————————失败");
+			e.printStackTrace();
+		}
+			return null;
+		});
+	}
+	
+	/**
+	 * 气动设计系统,“项目求解”业务前处理
+ 	 */
+	public void preTransFlow() throws Exception {
+		this.validater();
+	}
+	
+	/**
+	 * 气动设计系统,“项目求解”业务后处理
+ 	 */
+	public void afterTransFlow() throws Exception {
+	
+	}
+	
+	/**
+	 * 气动设计系统,“项目求解”逻辑入口处理方法
+ 	 */
+ 	@SuppressWarnings("rawtypes")
+	@Override
+	public Map execute(Map vars) throws Exception {
+		this.setTransMap(vars);
+		preTransFlow();// 执行业务开始的规则检查和校验
+		transExecute();// 执行核心业务段
+		afterTransFlow();// 执行核心逻辑完成后的收尾逻辑
+		return this.getTransMap();
+	}
+
+}

+ 10 - 5
src/main/java/com/miniframe/tools/docker/DockerExe.java

@@ -95,7 +95,7 @@ public class DockerExe {
         logContainerCmd.exec(logsexe).awaitCompletion();
     }
 
-    public static void run(String pid) {
+    public static void run(String pid,Integer type) {
         DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
                 .withDockerHost(DOCKERHOST) // 设置 Docker 主机地址
                 .withDockerTlsVerify(false) // 启用 TLS 验证
@@ -111,20 +111,25 @@ public class DockerExe {
 
         Mount wokerMount = new Mount()
                 .withType(MountType.BIND)
-                .withSource("/cephfs/es/"+pid)
-                .withTarget("/cephfs/es/"+pid)
+                .withSource("/cephfs/ac/"+pid)
+                .withTarget("/cephfs/ac/"+pid)
                 .withReadOnly(false);
         List<Mount> am =new ArrayList<>();
         am.add(wokerMount);
 
         //创建容器
         CreateContainerResponse container = dockerClient
-                .createContainerCmd("es:1.0")//镜像名称
+                .createContainerCmd("aircraft:1.0")//镜像名称
                 .withName(pid)//容器名称
                 .withHostConfig(
                         HostConfig.newHostConfig()
                                 .withMounts(am)
-                ).withCmd("bash", "-c", "export LD_LIBRARY_PATH=/home/es/bin:$LD_LIBRARY_PATH && pipenet /cephfs/es/"+pid+"/Calculate")
+                ).withCmd("bash", "-c", "cd /home/aircraft/project " +
+                        "&& export PYTHONPATH=$PYTHONPATH:/home/aircraft/Soad_Project " +
+                        "&& source ~/miniconda3/etc/profile.d/conda.sh " +
+                        "&& conda activate " +
+                        "&& python test.py gui.xml /cephfs/ac/"+pid+"/"+type+
+                        " && conda deactivate")
                 .exec();
         dockerClient.startContainerCmd(container.getId()).exec();
         System.out.println("容器启动成功,ID: " + container.getId());

+ 74 - 0
src/main/java/service/LogService.java

@@ -0,0 +1,74 @@
+package service;
+
+import com.miniframe.core.ext.UtilTools;
+import com.miniframe.tools.XIFileUtils;
+import com.miniframe.websocket.WebsocketEndPoint;
+import io.netty.util.internal.StringUtil;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.concurrent.CompletableFuture;
+
+public class LogService {
+    public static final String BPATH = "/cephfs/ac";
+    /**
+     * 创建文件
+     * @param pid
+     * @return
+     */
+    public static File createLog(String pid,Integer type){
+        String filePath =LogService.BPATH+"/"+pid+"/"+type+"/log.txt";
+        XIFileUtils.mkdir(LogService.BPATH);
+        XIFileUtils.mkdir(LogService.BPATH+"/"+pid);
+        XIFileUtils.mkdir(LogService.BPATH+"/"+pid+"/"+type);
+        File file =new File(filePath);
+        return file;
+    }
+
+    /**
+     * 清空文件
+     * @param
+     */
+    public static void clearLog(String pid,Integer type){
+        String filePath =LogService.BPATH+"/"+pid+"/"+type+"/log.txt";
+        FileWriter writer = null;
+        try {
+            writer = new FileWriter(filePath);
+            writer.write("");  // 将内容设置为空字符串即可清空文件
+            writer.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 文件内容追加
+     * @param
+     */
+    public static void addLog(String pid,Integer type,String log){
+        if(StringUtil.isNullOrEmpty(log.trim())){
+            return;
+        }
+        String filePath =LogService.BPATH+"/"+pid+"/"+type+"/log.txt";
+        FileWriter writer = null;
+        try {
+            writer = new FileWriter(filePath,true);
+            BufferedWriter bwriter = new BufferedWriter(writer);
+            bwriter.write(log);  // 将内容写入文件末尾
+            bwriter.newLine();
+            bwriter.close();
+            writer.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+//        if(log.indexOf("求解")>=0){
+        CompletableFuture<Void> cf = CompletableFuture.supplyAsync(()->{
+            WebsocketEndPoint webs =  (WebsocketEndPoint) UtilTools.getBean("websocketEndPoint");
+            webs.sendMessageToUser(String.valueOf(pid),log);
+            return null;
+        });
+//        }
+    }
+}

+ 78 - 0
src/main/resources/templates/gui.ftl

@@ -0,0 +1,78 @@
+<soad>
+	<header>
+		<name>soad</name>
+		<creator>tyh</creator>
+		<timestamp>2025-07-25</timestamp>
+		<version>1.0</version>
+	</header>
+	<Analysis_type>0</Analysis_type>
+	<!--分析工况:0:"气动", 1:"结构", 2:"气弹"-->
+	<doedriver>
+		<switch>1</switch>
+		<!--0:"off", 1:"on"-->
+        <name>LatinHypercubeGenerator</name>
+		<!--采样方法:LatinHypercubeGenerator:"拉丁超立方", BoxBehnkenGenerator:"BoxBehnken",PlackettBurmanGenerator:"PlackettBurman",FullFactorialGenerator:"全因子设计"-->
+        <configuration>
+            <samples>100</samples>
+			<!--拉丁超立方 * 样本数量:100-->
+			<seed>1</seed>
+			<!--拉丁超立方 * 随机种子:1-->
+        </configuration>
+		<is_sbo>1</is_sbo>
+		<!--0:"No", 1:"Yes"-->
+    </doedriver>
+	<surrogatemodel>
+		<switch>1</switch>
+		<!--0:"off", 1:"on"-->
+		<from_file>doe_prob.sql</from_file>
+		<!--选择文件-->
+        <name>KrigingSurrogate</name>
+		<!--选择模型:KrigingSurrogate:"Kriging", NearestNeighbor:"最近邻",ResponseSurface:"响应面"-->
+        <configuration>
+            <eval_rmse>1</eval_rmse>
+			<!--Kriging * 均方根误差:0:"False", 1:"True"-->
+			<lapack_driver>gesdd</lapack_driver>
+			<!--Kriging * 线性代数库:"gesdd", "gesvd"-->
+        </configuration>
+    </surrogatemodel>
+	<optimizedriver>
+		<switch>0</switch>
+        <name>ScipyOptimizeDriver</name>
+		<!--选择优化器:ScipyOptimizeDriver:"ScipyOptimizeDriver", pyOptSparseDriver:"pyOptSparseDriver",DifferentialEvolutionDriver:"DifferentialEvolutionDriver"-->
+        <configuration>
+			<maxiter>50</maxiter>
+			<!--ScipyOptimizeDriver * 迭代次数:50-->
+			<optimizer>SLSQP</optimizer>
+			<!--ScipyOptimizeDriver * 优化方法:SLSQP、CG、BFGS、Powell-->
+            <tol>1e-6</tol>
+			<!--ScipyOptimizeDriver * 终止容差:1e-6-->
+			<disp>1</disp>
+			<!--ScipyOptimizeDriver * 显示收敛信息:0:"off", 1:"on"-->
+        </configuration>
+    </optimizedriver>
+    <problem>
+        <designVariables>
+			<designVariable  uID="扭转分布">
+				<number mapType="integer">5</number>
+				<!--分布个数-->
+				<upper>15.0</upper>
+				<lower>-10.0</lower>
+            </designVariable>
+		</designVariables>
+		<constraints>
+			<is_cons>1</is_cons>
+			<constraint uID="升力系数">
+                <!-- <equals></equals>-->
+				<type>equals</type>
+				<value>0.5</value>
+				<!--约束类型:equals:"=", upper:"<", lower:">"-->
+            </constraint>
+		</constraints>
+		<objectives>
+			<objective uID="阻力系数">
+                <scaler>1e4</scaler>
+				<!--缩放因子:1e4-->
+            </objective>
+		</objectives>
+    </problem>
+</soad>

+ 44 - 0
src/test/java/com/miniframe/comm/httpesapater/AC00006Test.java

@@ -0,0 +1,44 @@
+package com.miniframe.comm.httpesapater;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.miniframe.comm.httpesapater.HttpesapaterUtil;
+import com.miniframe.generate.comm.ac.A_AC00006;
+import com.miniframe.generate.comm.httpesapater.AC00006Client;
+import com.miniframe.generate.business.ac.model.AC00006BaseModel;
+
+public class AC00006Test {
+
+	private static final Logger logger = LoggerFactory.getLogger(AC00006Test.class);
+
+	/**
+	 * 项目求解,获取报文体
+	 * @return
+	 */
+	public static A_AC00006 getA_ac00006() {
+		A_AC00006 a_ac00006 = new A_AC00006();
+
+		// ----------以下增加【项目求解】上行体赋值-------------
+
+
+
+		// ---------------------------------------------------
+		return a_ac00006;
+	}
+	
+	/**
+	 * 运行客户端测试,项目求解
+	 * 
+	 * @param args
+	 * @throws Exception
+	 */
+	public static void main(String[] args) throws Exception {
+		AC00006BaseModel model = new AC00006BaseModel();
+		model.setA_achead(HttpesapaterUtil.getA_achead("AC00006"));
+		model.setA_ac00006(AC00006Test.getA_ac00006());
+		AC00006Client client = new AC00006Client();
+		logger.error("客户端发送前总线:\r\n"+model);
+		model = client.execute(model);
+		logger.error("客户端发送后总线:\r\n"+model);
+	}
+}

+ 2 - 2
系统设计/系统模块/ac(气动设计系统).csv

@@ -3,6 +3,6 @@
 100002,AC00002,项目添加修改,service,
 100003,AC00003,项目删除,service,
 100004,AC00004,项目属性查询,service,
-100006,AC00005,项目属性添加修改,service,
-
+100005,AC00005,项目属性添加修改,service,
+100006,AC00006,项目求解,service,
 110001,BES001,基础字典查询,service,

+ 3 - 0
系统设计/通信设计/通讯报文/ac(气动设计)/报文体/AC00006_A(项目求解).csv

@@ -0,0 +1,3 @@
+序号,英文名称,中文名称,数据类型,默认值,格式化,非空/引用,最小(长度/值),最大(长度/值),验证规则,标准数据ID,XML样式,TAG标签,映射/子标签,CDATA
+1,pid,项目id,string,,,是,,,,,,,,
+2,type,类型0气动1结构2气弹,int,,,是,,,,,,,,

+ 1 - 0
系统设计/通信设计/通讯报文/ac(气动设计)/报文体/AC00006_D(项目求解).csv

@@ -0,0 +1 @@
+序号,英文名称,中文名称,数据类型,默认值,格式化,非空/引用,最小(长度/值),最大(长度/值),验证规则,标准数据ID,XML样式,TAG标签,映射/子标签,CDATA