实现获取输入框控件参数,写入文本中,并读取数据返回给table控件。
0.后台opt文本 bean实体类,也可以叫模型或者数据库
public class OptModel {
private String cslj;
private String yhlj;
private String xmm;
private String cscys;
private String zdyhcs;
private String zqdx;
private String zsjs;
private String cyjs;
private String yhbs;
private String dbbc;
private String yhqsb;
private String ylys;
private String hsl;
private String bx;
private String jtdccy;
private String dtdcjd;
private String sxbs;
private String xxbs;
private LinkedList<WellData> wellmodel;
}
public class WellData {
private String wellname;
private String type;
private String chanye;
private String up;
private String down;
1.控件
参数控件
<div class="layui-row">
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>初始采样数</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="cscys" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="50" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>最大优化次数</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="zdyhcs" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="100" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>种群大小</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="zqdx" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="20" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>注水井数</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="zsjs" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="4" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>采油井数</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="cyjs" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="9" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>优化步数</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="yhbs" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="4" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>单步步长</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="dbbc" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="360" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>优化起始步</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="yhqsb" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="1" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>压力约束</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="ylys" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="140" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>含水率约束</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="hsl" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="0.9" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>静态单次采样数</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="jtdccy" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="5" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1">
<div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange">*</span>动态单次加点数</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="dtdcjd" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="11" value="4" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1">
<div class="layui-form-item">
<label class="layui-form-label"><span class="f_orange" >*</span>注采上限倍数</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="sxbs" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="" value="1.5" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1">
<div class="layui-form-item">
<label class="layui-form-label" ><span class="f_orange">*</span>注采下限倍数</label>
<div class="layui-input-block width_250 pos-r">
<input type="text" id="xxbs" class="layui-input" name="ColumnCode" lay-verify="required|inputLength_100" placeholder="" value="0.5" autocomplete="off">
<i class="icon_ca_layui"></i>
</div>
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="grid-demo grid-demo-bg1"><div class="layui-form-item">
<div class="layui-form-item">
<label class="layui-form-label">是否并行</label>
<div class="layui-input-block">
<input id="bx" type="radio" name="sex" value="" title="是" checked="">
<input id="bx2" type="radio" name="sex" value="" title="否">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
table显示按钮
<div class="layui-form-item">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend style="color:red">SCH处理</legend>
</fieldset>
<div class="layui-input-block">
<button class="layui-btn" lay-filter="demo1" type="button" value="test" onclick="cuculate()" >加载井生产数据</button>
<button class="layui-btn" lay-filter="demo1" type="button" value="test" onclick="change()" >确认修改</button>
</div>
</div>
<div class="layui-form-item">
table 控件
<table class="layui-table" id="welltb" style='width:68%' lay-skin="line">
<colgroup>
<col width="150">
<col width="150">
<col width="150">
<col width="150">
<col width="150">
</colgroup>
<thead >
<tr >
<th style='width:150px'>井名</th>
<th style='width:150px'>井别</th>
<th style='width:150px'>当前值</th>
<th style='width:150px'>最小调控量</th>
<th style='width:150px'>最大调控量</th>
</tr>
</thead>
<tbody >
</tbody>
</table>
生成文件按钮
</div>
<div class="layui-form-item">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend style="color:red">生成optpar.dat文件</legend>
</fieldset>
2.js
输入框参数上传和获取table数据回显功能
function cuculate(){
layui.use([ 'jquery' ], function() {
var $ = layui.jquery;
//赋值
opts.cscys=$("#cscys").val() ;
opts.zdyhcs=$("#zdyhcs").val() ;
opts.zqdx=$("#zqdx").val() ;
opts.zsjs=$("#zsjs").val() ;
opts.cyjs=$("#cyjs").val() ;
opts.yhbs=$("#yhbs").val() ;
opts.dbbc=$("#dbbc").val() ;
opts.yhqsb=$("#yhqsb").val() ;
opts.ylys=$("#ylys").val() ;
opts.hsl=$("#hsl").val() ;
if($("#bx")[0].checked==true){opts.bx="1"}
else opts.bx="0";
opts.jtdccy=$("#jtdccy").val() ;
opts.dtdcjd=$("#dtdcjd").val() ;
opts.sxbs=$("#sxbs").val() ;
opts.xxbs=$("#xxbs").val() ;
//console.log( opts);
//编码json
$.ajax({
type : 'POST',
url : baseurl+'Culculate',
data : {
"optd" : JSON.stringify(opts )
},
dataType: "json",
success : function(data) {
console.log(data.opt);
complete_Opt=data.opt;
well=data.opt.wellmodel;
//console.log($("#welltb")[0]);
layui.use('layer', function(){
var layer = layui.layer;
//原生方法渲染:
$("#welltb")[0].style.display='block';
for(var i=0;i<well.length;i++){
var tr= "<tr > "+
" <td style='width:150px' > <p contentEditable='true'>"+well[i].wellname+"</p> </td> "+
" <td style='width:150px' > <p contentEditable='true'>"+ well[i].type+"</p> </td> "+
" <td style='width:150px' > <p contentEditable='true'>"+ well[i].chanye+"</p> </td> "+
" <td style='width:150px' > <p contentEditable='true'>"+ well[i].down+"</p> </td> "+
" <td style='width:150px' > <p contentEditable='true'>"+ well[i].up+"</p> </td> ";
$("#welltb").append(tr); //动态添加
};
layer.msg('加载完毕', {icon: 1});
});
}
});
});
}
改变table值的更新,写入opt文本功能
function change(){
layui.use([ 'jquery' ], function() {
var $ = layui.jquery;
//修改数据opts,前台的bean
opts=complete_Opt;
//重新赋值
for(var i=0;i<opts.wellmodel.length;i++){
opts.wellmodel[i].wellname=$("#welltb")[0].rows[i+1].children[0].innerText;
opts.wellmodel[i].type=$("#welltb")[0].rows[i+1].children[1].innerText;
opts.wellmodel[i].chanye=$("#welltb")[0].rows[i+1].children[2].innerText;
opts.wellmodel[i].down=$("#welltb")[0].rows[i+1].children[3].innerText;
opts.wellmodel[i].up=$("#welltb")[0].rows[i+1].children[4].innerText;
//console.log(a);
};
console.log(opts);
$.ajax({
type : 'POST',
url : baseurl+'change',
data : {
"Optmod" : JSON.stringify(opts )
},
dataType : "json",
success : function(n) {
//var name=n.itemname;
//$("#xmm").val(name);
opts=n.opt;
layer.msg('数据修改完毕', {icon: 1});
}
});
});
}
3.后台
读取json参数转为对象和读取sch文件塞给bean并返回
@RequestMapping("/Culculate")
public HashMap nomaosch(String optd) throws JsonParseException, JsonMappingException, IOException {
//前台参数optd
ObjectMapper mapper = new ObjectMapper();
opt = mapper.readValue(optd,OptModel.class);
WellData welldata = new WellData();
LinkedList<WellData> welllist=new LinkedList<WellData>();
//读sch文件
String pathsch =opt.getCslj()+"\\"+opt.getXmm()+".SCH";
System.out.println(pathsch);
Scanner scanner = new Scanner(new FileInputStream(pathsch) ) ;
FileInputStream fis=new FileInputStream(pathsch);
InputStreamReader isr=new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String line="";
String[] arrs=null;
while (true) {
String lines=br.readLine();
if(lines==null)break;
if(lines.contains("WCONPROD")) {//查找关键字
welllist.clear();
while((lines = br.readLine())!=null) {
if(lines.toCharArray().length<16)break;\\选择小于16的数据那一行就是我们要的数据
arrs = lines.split("\\s+");//按照空格分割一行的数据
WellData wellnode = new WellData();
WellData wellnodea = new WellData();
wellnode = nwelldata2oil(wellnodea, arrs, opt.getSxbs(), opt.getXxbs());
welllist.add(wellnode);//加一行 井节点,table数据的一行,循环加完
}
}
if(lines.contains("WCONINJE")) {
while((lines = br.readLine())!=null) {
if(lines.toCharArray().length<16)break;
arrs = lines.split("\\s+");
WellData wellnode = new WellData();
WellData wellnodea = new WellData();
wellnode = nwelldata2water(wellnodea, arrs, opt.getSxbs(), opt.getXxbs());
welllist.add(wellnode);
}
}
opt.setWellmodel(welllist);
writeOptFile(opt);
HashMap data=new HashMap();
data.put("opt",opt);//bean
return data;
}
从文本获取数据的方法业务:一行油水井数据的赋值处理
private WellData welldata(WellData welldata, String[] arrs, String up, String down) {
welldata.setChanye(arrs[4]);
double chanyeliang=Double.parseDouble(arrs[4]);
DecimalFormat df = new DecimalFormat("#.00");
String upd=df.format(Double.parseDouble(up)*chanyeliang);
String dowd=df.format(Double.parseDouble(down)*chanyeliang);
welldata.setUp(String.valueOf(upd) );
welldata.setWellname(arrs[0]);
welldata.setDown(String.valueOf(dowd) );String aa=null;
//int l=arrs[0].length();
//if(arrs[0].length()>6) { aa=(arrs[0].substring(1, 4));}
//else { aa=(arrs[0].substring(0, 3));}
if(arrs[1].equals("WATER")) {
welldata.setType("water");
}
else welldata.setType("oil");
return welldata;
}
private WellData nwelldata2oil(WellData welldata, String[] arrs, String up, String down) {
welldata.setChanye(arrs[4]);
double chanyeliang=Double.parseDouble(arrs[4]);
DecimalFormat df = new DecimalFormat("#.00");
String upd=df.format(Double.parseDouble(up)*chanyeliang);
String dowd=df.format(Double.parseDouble(down)*chanyeliang);
welldata.setUp(String.valueOf(upd) );
welldata.setWellname(arrs[0]);
welldata.setDown(String.valueOf(dowd) );String aa=null;
welldata.setType("oil");
return welldata;
}
private WellData nwelldata2water(WellData welldata, String[] arrs, String up, String down) {
// TODO Auto-generated method stub welldata.setWellname(arrs[0]);
welldata.setChanye(arrs[4]);
double chanyeliang=Double.parseDouble(arrs[4]);
DecimalFormat df = new DecimalFormat("#.00");
String upd=df.format(Double.parseDouble(up)*chanyeliang);
String dowd=df.format(Double.parseDouble(down)*chanyeliang);
welldata.setUp(String.valueOf(upd) );
welldata.setWellname(arrs[0]);
welldata.setDown(String.valueOf(dowd) );String aa=null;
welldata.setType("water");
return welldata;
}
}
改变table后,写进opt文件功能,得到后台运行的文件。
@RequestMapping("/change")
public HashMap change(String Optmod) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
opt = mapper.readValue(Optmod,OptModel.class);
writeOptFile(opt);
HashMap n=new HashMap();
n.put("opt",opt);
return n;
}
private void writeOptFile(OptModel opt2) {
FileWriter fw = null;
FileWriter fw2 = null;
File file = new File(opt2.getCslj()+"\\"+"optpar.dat");
File file2 = new File(path_opt);
try {
if (!file.exists()) {
file.createNewFile();
file2.createNewFile();
}
fw = new FileWriter(file);//写参数
fw2 = new FileWriter(file2);
fw.write(opt2.getCslj()+"\r\n");
fw.write(opt2.getYhlj()+"\r\n");
fw.write(opt2.getXmm()+"\r\n");
fw.write(opt2.getCscys()+"\r\n");
fw.write(opt2.getZdyhcs()+"\r\n");
fw.write(opt2.getZqdx()+"\r\n");
fw.write(opt2.getZsjs()+"\r\n");
fw.write(opt2.getCyjs()+"\r\n");
fw.write(opt2.getYhbs()+"\r\n");
fw.write(opt2.getDbbc()+"\r\n");
fw.write(opt2.getYhqsb()+"\r\n");
fw.write(opt2.getYlys()+"\r\n");
fw.write(opt2.getHsl()+"\r\n");
fw.write(opt2.getBx()+"\r\n");
fw.write(opt2.getJtdccy()+"\r\n");
fw.write(opt2.getDtdcjd()+"\r\n");
fw.write("well"+"\r\n");
fw2.write(opt2.getCslj()+"\r\n");
fw2.write(opt2.getYhlj()+"\r\n");
fw2.write(opt2.getXmm()+"\r\n");
fw2.write(opt2.getCscys()+"\r\n");
fw2.write(opt2.getZdyhcs()+"\r\n");
fw2.write(opt2.getZqdx()+"\r\n");
fw2.write(opt2.getZsjs()+"\r\n");
fw2.write(opt2.getCyjs()+"\r\n");
fw2.write(opt2.getYhbs()+"\r\n");
fw2.write(opt2.getDbbc()+"\r\n");
fw2.write(opt2.getYhqsb()+"\r\n");
fw2.write(opt2.getYlys()+"\r\n");
fw2.write(opt2.getHsl()+"\r\n");
fw2.write(opt2.getBx()+"\r\n");
fw2.write(opt2.getJtdccy()+"\r\n");
fw2.write(opt2.getDtdcjd()+"\r\n");
fw2.write("well"+"\r\n");
LinkedList<WellData> well = opt2.getWellmodel();//循环写井数据
for(int i=0;i<well.size();i++) {
String names = well.get(i).getWellname();
if(names.contains("'")){
names=names.substring(1,names.length()-1);
well.get(i).setWellname(names);
}
fw.write(names+"\r\n");
fw2.write(names+"\r\n");
}
fw.write("boundary"+"\r\n");
fw2.write("boundary"+"\r\n");
for(int i=0;i<well.size();i++) {
fw.write(well.get(i).getChanye()+" "+well.get(i).getDown()+" "+well.get(i).getUp()+"\r\n");
fw2.write(well.get(i).getChanye()+" "+well.get(i).getDown()+" "+well.get(i).getUp()+"\r\n");
}
fw.flush();
fw2.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fw != null){
try {
fw.close();
fw2.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
效果