Browse Source

低代码管理

master
陈裕财 2 years ago
parent
commit
8c4b1043f4
  1. 183
      mdp-lcode/src/main/java/com/mdp/lcode/ctrl/FormDataController.java
  2. 4
      mdp-lcode/src/main/java/com/mdp/lcode/entity/FormDef.java
  3. 128
      mdp-lcode/src/main/java/com/mdp/lcode/service/DbTableService.java
  4. 19
      mdp-lcode/src/main/java/com/mdp/lcode/service/FormDefService.java

183
mdp-lcode/src/main/java/com/mdp/lcode/ctrl/FormDataController.java

@ -3,15 +3,21 @@ package com.mdp.lcode.ctrl;
import java.util.*;
import java.util.stream.Collectors;
import com.alibaba.fastjson.JSON;
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.mdp.Util;
import com.mdp.core.SpringContextUtils;
import com.mdp.core.utils.BaseUtils;
import com.mdp.core.utils.ObjectTools;
import com.mdp.lcode.entity.FormDefVo;
import com.mdp.lcode.entity.FormField;
import com.mdp.lcode.entity.FormQx;
import com.mdp.lcode.entity.*;
import com.mdp.lcode.service.FormDefService;
import com.mdp.lcode.service.FormFieldService;
import com.mdp.meta.client.entity.ExtInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -32,7 +38,6 @@ import com.mdp.swagger.ApiEntityParams;
import springfox.documentation.annotations.ApiIgnore;
import com.mdp.lcode.service.FormDataService;
import com.mdp.lcode.entity.FormData;
@RestController
@RequestMapping(value="/**/lcode/formData")
@ -48,6 +53,9 @@ public class FormDataController {
@Autowired
private FormFieldService formFieldService;
private DynamicRoutingDataSource dataSourceService;
@ApiOperation( value = "表单数据表-查询列表",notes=" ")
@ApiEntityParams(FormData.class)
@ApiResponses({
@ -122,9 +130,23 @@ public class FormDataController {
}
}
qw.eq("branch_id",user.getBranchId());
IPage page=QueryTools.initPage(params);
List<Map<String,Object>> datas = formDataService.selectListMapByWhere(page,qw,params);
List<Map<String,Object>> datas=new ArrayList<>();
FormDef formDef=formDefVo.getFormDef();
if("2".equals(formDefVo.getFormDef().getDataType()) ||"3".equals(formDefVo.getFormDef().getDataType())){
if(dataSourceService==null){
dataSourceService= SpringContextUtils.getBean(DynamicRoutingDataSource.class);
}
if("2".equals(formDefVo.getFormDef().getDataType())){
JdbcTemplate template=new JdbcTemplate();
template.setDataSource(dataSourceService.getDataSource(formDefVo.getFormDef().getTableOwner()));
datas=template.queryForList("select * from "+formDef.getTableName());
}
}else{
qw.eq("branch_id",user.getBranchId());
datas = formDataService.selectListMapByWhere(page,qw,params);
}
return Result.ok("query-ok","查询成功").setData(datas).setTotal(page.getTotal());
}catch (BizException e) {
return Result.error(e);
@ -139,11 +161,14 @@ public class FormDataController {
@ApiResponse(code = 200,response=FormData.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
})
@RequestMapping(value="/add",method=RequestMethod.POST)
public Result addFormData(@RequestBody FormData formData) {
public Result addFormData(@RequestBody Map<String,Object> params) {
FormData formData=BaseUtils.fromMap(params,FormData.class);
if(StringUtils.isEmpty(formData.getFstate())) {
formData.setFstate("0");
}
if(ObjectTools.isEmpty(formData.getFormId())){
return Result.error("formId-required","表单编号不能为空");
}
FormDefVo formDefVo=formFieldService.getFormFieldFromCache(formData.getFormId());
if(formDefVo==null){
throw new BizException("formDef-0","表单不存在");
@ -159,8 +184,74 @@ public class FormDataController {
formData.setDeptName(user.getDeptName());
formData.setCtime(new Date());
formData.setLtime(new Date());
FormDef formDef=formDefVo.getFormDef();
if("2".equals(formDef.getDataType())||"3".equals(formDef.getDataType())){
if("3".equals(formDef.getDataType())){//独立建表
if(dataSourceService==null){
dataSourceService= SpringContextUtils.getBean(DynamicRoutingDataSource.class);
}
JdbcTemplate template=new JdbcTemplate();
template.setDataSource(dataSourceService.getDataSource(formDefVo.getFormDef().getTableOwner()));
StringBuffer sb=new StringBuffer();
List<Object> varList=new ArrayList<>();
List<FormField> fields=FormDefService.calcDbFields(formFields);
sb.append("insert ");
sb.append(formDef.getTableName());
sb.append("(");
for (int i = 0; i < fields.size(); i++) {
FormField field=fields.get(i);
sb.append(field.getId());
if(i< fields.size()-1){
sb.append(",");
}
}
sb.append(")value(");
for (int i = 0; i < fields.size(); i++) {
FormField field=fields.get(i);
sb.append("?");
if(i< fields.size()-1){
sb.append(",");
}
varList.add(params.get(field.getIdCamel()));
}
sb.append(")");
template.update(sb.toString(),varList.toArray());
}else{//寄存某个字段
if(dataSourceService==null){
dataSourceService= SpringContextUtils.getBean(DynamicRoutingDataSource.class);
}
JdbcTemplate template=new JdbcTemplate();
template.setDataSource(dataSourceService.getDataSource(formDefVo.getFormDef().getTableOwner()));
StringBuffer sb=new StringBuffer();
List<FormField> fields= FormDefService.calcDbFields(formDefVo.getFormFields());
sb.append("update ");
sb.append(formDef.getTableName());
sb.append(" set "+ObjectTools.camelToUnderline(formDef.getDataField())).append(" = ? ");
sb.append(" where 1=1");
List<Object> vars=new ArrayList<>();
if(ObjectTools.isEmpty(formDef.getPks())){
return Result.error("pks-not-setting","没有设置主键,无法插入数据");
}
for (String k : formDef.getPks().split(",")) {
sb.append(" and "+ObjectTools.camelToUnderline(k)+"=?");
vars.add(params.get(params.get(ObjectTools.camelName(k))));
}
if(vars.size()==0){
return Result.error("pks-not-setting","没有设置主键,无法更新数据");
}
List<ExtInfo> extInfos=new ArrayList<>();
for (FormField field : fields) {
ExtInfo extInfo=new ExtInfo();
extInfo.setValue((String) params.get(field.getIdCamel()));
extInfo.setId(field.getIdCamel());
extInfo.setName(field.getTitle());
extInfos.add(extInfo);
}
template.update(sb.toString(),JSON.toJSONString(extInfos),vars.toArray());
}
return Result.ok();
}
/**
* 必输项检查
@ -199,7 +290,8 @@ public class FormDataController {
@ApiResponse(code = 200,response=FormData.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
})
@RequestMapping(value="/edit",method=RequestMethod.POST)
public Result editFormData(@RequestBody FormData formData) {
public Result editFormData(@RequestBody Map<String,Object> params) {
FormData formData=BaseUtils.fromMap(params,FormData.class);
if(ObjectTools.isEmpty(formData.getId())){
return Result.error("id-0","主键不能为空");
}
@ -227,13 +319,80 @@ public class FormDataController {
/**
* 必输项检查
*/
Map<String,Object> formDataMap=BaseUtils.toMap(formData);
for (FormField field : formFields) {
Object pkValue= formDataMap.get(field.getIdCamel());
Object pkValue= params.get(field.getIdCamel());
if("1".equals(field.getReq()) && ObjectTools.isEmpty(pkValue)){
return Result.error("field-required","%s不能为空",field.getTitle());
}
}
FormDef formDef=formDefVo.getFormDef();
if("2".equals(formDef.getDataType())||"3".equals(formDef.getDataType())){
if("3".equals(formDef.getDataType())){//独立建表
if(dataSourceService==null){
dataSourceService= SpringContextUtils.getBean(DynamicRoutingDataSource.class);
}
JdbcTemplate template=new JdbcTemplate();
template.setDataSource(dataSourceService.getDataSource(formDefVo.getFormDef().getTableOwner()));
StringBuffer sb=new StringBuffer();
List<Object> varList=new ArrayList<>();
if(ObjectTools.isEmpty(formDef.getPks())){
return Result.error("pks-not-setting","没有设置主键,无法插入数据");
}
List<FormField> fields=FormDefService.calcDbFields(formFields);
sb.append("update ");
sb.append(formDef.getTableName());
sb.append(" set ");
for (int i = 0; i < fields.size(); i++) {
FormField field=fields.get(i);
sb.append(field.getId()+"= ?");
if(i<fields.size()-1){
sb.append(",");
}
varList.add(params.get(field.getIdCamel()));
}
sb.append(" where 1=1 ");
String[] pks=formDef.getPks().split(",");
for (String k : pks) {
sb.append(" and "+ObjectTools.camelToUnderline(k)+"=?");
varList.add(params.get(ObjectTools.camelName(k)));
}
template.update(sb.toString(),varList.toArray());
}else{//寄存某个字段
if(dataSourceService==null){
dataSourceService= SpringContextUtils.getBean(DynamicRoutingDataSource.class);
}
JdbcTemplate template=new JdbcTemplate();
template.setDataSource(dataSourceService.getDataSource(formDefVo.getFormDef().getTableOwner()));
StringBuffer sb=new StringBuffer();
List<FormField> fields= FormDefService.calcDbFields(formDefVo.getFormFields());
sb.append("update ");
sb.append(formDef.getTableName());
sb.append(" set "+ObjectTools.camelToUnderline(formDef.getDataField())).append(" = ? ");
sb.append(" where 1=1");
List<Object> vars=new ArrayList<>();
if(ObjectTools.isEmpty(formDef.getPks())){
return Result.error("pks-not-setting","没有设置主键,无法插入数据");
}
for (String k : formDef.getPks().split(",")) {
sb.append(" and "+ObjectTools.camelToUnderline(k)+"=?");
vars.add(params.get(params.get(ObjectTools.camelName(k))));
}
if(vars.size()==0){
return Result.error("pks-not-setting","没有设置主键,无法更新数据");
}
List<ExtInfo> extInfos=new ArrayList<>();
for (FormField field : fields) {
ExtInfo extInfo=new ExtInfo();
extInfo.setValue((String) params.get(field.getIdCamel()));
extInfo.setId(field.getIdCamel());
extInfo.setName(field.getTitle());
extInfos.add(extInfo);
}
template.update(sb.toString(),JSON.toJSONString(extInfos),vars.toArray());
}
return Result.ok();
}
String bizKey= formDataService.createBizKey(formDefVo,formData);
formData.setBizKey(ObjectTools.isNotEmpty(bizKey)?bizKey:formDataDb.getId());

4
mdp-lcode/src/main/java/com/mdp/lcode/entity/FormDef.java

@ -102,6 +102,10 @@ public class FormDef implements java.io.Serializable {
@ApiModelProperty(notes="函数列表",allowEmptyValue=true,example="",allowableValues="")
String funcs;
@ApiModelProperty(notes="建表方式",allowEmptyValue=true,example="",allowableValues="")
String ctType;
/**
*主键
**/

128
mdp-lcode/src/main/java/com/mdp/lcode/service/DbTableService.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();
}
}

19
mdp-lcode/src/main/java/com/mdp/lcode/service/FormDefService.java

@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -31,6 +32,10 @@ import org.springframework.transaction.annotation.Transactional;
***/
@Service
public class FormDefService extends BaseService<FormDefMapper,FormDef> {
@Autowired
DbTableService dbTableService;
static Logger logger =LoggerFactory.getLogger(FormDefService.class);
/**
@ -82,6 +87,11 @@ public class FormDefService extends BaseService<FormDefMapper,FormDef> {
super.update(uw);
}
public static List<FormField> calcDbFields(List<FormField> fieldList){
return fieldList.stream().filter(k->!"row".equals(k.getExtType()) && !"tabs".equals(k.getExtType()) && !"card".equals(k.getExtType())).collect(Collectors.toList());
}
@Transactional
public void addFormDefAndFields(FormDefVo formDefVo) {
User user= LoginUtils.getCurrentUserInfo();
@ -97,6 +107,8 @@ public class FormDefService extends BaseService<FormDefMapper,FormDef> {
List<FormField> formFields=formDefVo.getFormFields();
for (FormField formField : formFields) {
formField.setFormId(formDef.getId());
if(ObjectTools.isEmpty(formField.getId())){
@ -104,6 +116,10 @@ public class FormDefService extends BaseService<FormDefMapper,FormDef> {
}
}
if("3".equals(formDef.getDataType())){
dbTableService.createTable(formDef,formFields);
}
super.save(formDef);
this.ffs.saveBatch(formFields);
formFieldCacheService.putFormFields(formId, formDefVo);
@ -132,6 +148,9 @@ public class FormDefService extends BaseService<FormDefMapper,FormDef> {
this.updateById(formDef,true);
this.ffs.deleteByFormId(formDef.getId());
this.ffs.saveBatch(formFields);
if("3".equals(formDef.getDataType())){
dbTableService.createTable(formDef,formFields);
}
formFieldCacheService.putFormFields(formDef.getId(), null);
}

Loading…
Cancel
Save