4 changed files with 322 additions and 12 deletions
-
185mdp-lcode/src/main/java/com/mdp/lcode/ctrl/FormDataController.java
-
4mdp-lcode/src/main/java/com/mdp/lcode/entity/FormDef.java
-
128mdp-lcode/src/main/java/com/mdp/lcode/service/DbTableService.java
-
19mdp-lcode/src/main/java/com/mdp/lcode/service/FormDefService.java
@ -0,0 +1,128 @@ |
|||||
|
package com.mdp.lcode.service; |
||||
|
|
||||
|
|
||||
|
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; |
||||
|
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
|
import com.mdp.core.SpringContextUtils; |
||||
|
import com.mdp.core.entity.Result; |
||||
|
import com.mdp.core.query.QueryTools; |
||||
|
import com.mdp.core.utils.ObjectTools; |
||||
|
import com.mdp.dev.dao.CodeGenDao; |
||||
|
import com.mdp.dev.entity.FieldInfo; |
||||
|
import com.mdp.lcode.entity.FormData; |
||||
|
import com.mdp.lcode.entity.FormDef; |
||||
|
import com.mdp.lcode.entity.FormField; |
||||
|
import com.mdp.meta.client.entity.ItemVo; |
||||
|
import com.mdp.meta.client.entity.ExtInfo; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
@Service |
||||
|
public class DbTableService { |
||||
|
|
||||
|
@Autowired |
||||
|
CodeGenDao codeGenDao; |
||||
|
|
||||
|
DynamicRoutingDataSource dataSourceService; |
||||
|
|
||||
|
void createTable(FormDef formDef, List<FormField> formFields){ |
||||
|
if("3".equals(formDef.getCtType())){ |
||||
|
return; |
||||
|
} |
||||
|
if(dataSourceService==null){ |
||||
|
dataSourceService= SpringContextUtils.getBean(DynamicRoutingDataSource.class); |
||||
|
} |
||||
|
DataSource dataSource=dataSourceService.getDataSource(formDef.getTableOwner()); |
||||
|
JdbcTemplate jdbcTemplate=new JdbcTemplate(); |
||||
|
jdbcTemplate.setDataSource(dataSource); |
||||
|
StringBuffer sqlBuff=new StringBuffer(); |
||||
|
if(formDef.getTableName().indexOf(formDef.getBranchId())<0){ |
||||
|
formDef.setTableName(formDef.getBranchId()+"_"+formDef.getTableName()); |
||||
|
} |
||||
|
//如果没有则创建 |
||||
|
if("2".equals(formDef.getCtType())){ |
||||
|
List<FieldInfo> cols=codeGenDao.getColumnsInfo(formDef.getTableOwner(),formDef.getTableName()); |
||||
|
if(cols!=null && cols.size()>0){ |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
String tableName=formDef.getTableName().replaceAll("-","").replaceAll("@","").replaceAll("$",""); |
||||
|
formDef.setTableName(tableName); |
||||
|
//先删除后创建 |
||||
|
if("1".equals(formDef.getCtType())){ |
||||
|
sqlBuff.append(" DROP TABLE IF EXISTS "+formDef.getTableName()); |
||||
|
jdbcTemplate.update(sqlBuff.toString()); |
||||
|
} |
||||
|
sqlBuff=new StringBuffer(); |
||||
|
sqlBuff.append(" create table ").append(formDef.getTableName()).append(" ("); |
||||
|
for (FormField f : formFields) { |
||||
|
Map<String,ExtInfo> extInfoMap= ItemVo.parseExtInfosMap(f.getExtInfos()); |
||||
|
sqlBuff.append(" "+f.getId()).append(" "+getDBTypeByFieldType(f,extInfoMap)).append(" COMMENT '"+f.getRemark()+"',"); |
||||
|
} |
||||
|
String sql=sqlBuff.toString(); |
||||
|
if(sql.endsWith(",")){ |
||||
|
sql=sql.substring(0,sql.length()-1); |
||||
|
} |
||||
|
sql=sql+") COMMENT = '"+formDef.getFormName()+"'"; |
||||
|
jdbcTemplate.update(sql); |
||||
|
} |
||||
|
|
||||
|
private String getDBTypeByFieldType(FormField f, Map<String, ExtInfo> extInfoMap) { |
||||
|
|
||||
|
if(ObjectTools.isEmpty(f.getTyp())){ |
||||
|
if("user".equals(f.getExtType())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
}else if("dept".equals(f.getExtType())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
}else if("image".equals(f.getExtType())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
}else if("json".equals(f.getExtType())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
}else if("att".equals(f.getExtType())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
}else if("link".equals(f.getExtType())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
}else if("tag".equals(f.getExtType())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
}else if("cate".equals(f.getExtType())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
}else if("html".equals(f.getExtType())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
}else if("text".equals(f.getTyp())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
} else if("datetime".equals(f.getTyp())){ |
||||
|
return " datetime "; |
||||
|
}else if("date".equals(f.getTyp())){ |
||||
|
return " date "; |
||||
|
}else if("month".equals(f.getTyp())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
}else if("year".equals(f.getTyp())){ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
}else if("number".equals(f.getTyp())){ |
||||
|
ExtInfo scale=extInfoMap.get("scale"); |
||||
|
if(scale==null && f.getLen()<=8){ |
||||
|
return "int"; |
||||
|
}else{ |
||||
|
return "decimal("+f.getLen()+","+scale.getValue()+")"; |
||||
|
} |
||||
|
}else { |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
} |
||||
|
}else{ |
||||
|
return "VARCHAR("+f.getLen()+")"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public Result list(FormDef formDef,List<FormField> fields,Map<String,Object> params) { |
||||
|
QueryWrapper qw=new QueryWrapper(); |
||||
|
return Result.ok(); |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue