生成api代码

This commit is contained in:
吕金泽 2022-03-29 00:55:40 +08:00
parent 25b91353b1
commit 2e19ca3493
11 changed files with 533 additions and 33 deletions

View File

@ -0,0 +1,10 @@
{
"properties" : { },
"id" : "20316fcfa94644d685fa1b464f135f9a",
"name" : "数据管理",
"type" : "api",
"parentId" : "0",
"path" : "/data",
"paths" : [ ],
"options" : [ ]
}

View File

@ -0,0 +1,10 @@
{
"properties" : { },
"id" : "152b9ad78aaf49a7a8945b5de088c1da",
"name" : "测试生成",
"type" : "api",
"parentId" : "20316fcfa94644d685fa1b464f135f9a",
"path" : "/test",
"paths" : [ ],
"options" : [ ]
}

View File

@ -0,0 +1,169 @@
{
"properties" : { },
"id" : "d6c54f1563964523b601bd03d32e1bf0",
"script" : null,
"groupId" : "152b9ad78aaf49a7a8945b5de088c1da",
"name" : "保存",
"createTime" : null,
"updateTime" : 1648486126527,
"lock" : null,
"createBy" : null,
"updateBy" : null,
"path" : "/save",
"method" : "POST",
"parameters" : [ {
"name" : "name",
"value" : "111111",
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
}, {
"name" : "sex",
"value" : "222222",
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
}, {
"name" : "head_portrait",
"value" : "333333",
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
}, {
"name" : "remarks",
"value" : "444444",
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
}, {
"name" : "id",
"value" : "09c850212e1740e99485a850b90825a5",
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
} ],
"options" : [ {
"name" : "wrap_request_parameter",
"value" : "data",
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
} ],
"requestBody" : "",
"headers" : [ ],
"paths" : [ ],
"responseBody" : "{\n \"code\": 200,\n \"message\": \"success\",\n \"data\": \"09c850212e1740e99485a850b90825a5\",\n \"timestamp\": 1648486104458,\n \"executeTime\": 12\n}",
"description" : null,
"requestBodyDefinition" : null,
"responseBodyDefinition" : {
"name" : "",
"value" : "",
"description" : "",
"required" : false,
"dataType" : "Object",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ {
"name" : "code",
"value" : "200",
"description" : "",
"required" : false,
"dataType" : "Integer",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "message",
"value" : "success",
"description" : "",
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "data",
"value" : "09c850212e1740e99485a850b90825a5",
"description" : "",
"required" : false,
"dataType" : "Object",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "timestamp",
"value" : "1648486104458",
"description" : "",
"required" : false,
"dataType" : "Long",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "executeTime",
"value" : "12",
"description" : "",
"required" : false,
"dataType" : "Integer",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
} ]
}
}
================================
return db.table('t_data_test').primary('id').saveOrUpdate(data)

View File

@ -0,0 +1,31 @@
{
"properties" : { },
"id" : "90986654bb2d4560ada10c309195f500",
"script" : null,
"groupId" : "152b9ad78aaf49a7a8945b5de088c1da",
"name" : "列表",
"createTime" : 1648486052761,
"updateTime" : null,
"lock" : null,
"createBy" : null,
"updateBy" : null,
"path" : "/list",
"method" : "POST",
"parameters" : [ ],
"options" : [ ],
"requestBody" : null,
"headers" : [ ],
"paths" : [ ],
"responseBody" : null,
"description" : null,
"requestBodyDefinition" : null,
"responseBodyDefinition" : null
}
================================
return db.page("""
select id,name,sex,head_portrait,remarks from t_data_test where 1=1
?{name, and name like concat('%',#{name},'%') }
?{sex, and sex = #{sex} }
?{headPortrait, and head_portrait in(#{headPortrait.split(',')}) }
?{remarks, and remarks <= #{remarks} }
""")

View File

@ -0,0 +1,25 @@
{
"properties" : { },
"id" : "7443f294349446289c25d4ef6fe2b499",
"script" : null,
"groupId" : "152b9ad78aaf49a7a8945b5de088c1da",
"name" : "删除",
"createTime" : 1648486052772,
"updateTime" : null,
"lock" : null,
"createBy" : null,
"updateBy" : null,
"path" : "/delete",
"method" : "DELETE",
"parameters" : [ ],
"options" : [ ],
"requestBody" : null,
"headers" : [ ],
"paths" : [ ],
"responseBody" : null,
"description" : null,
"requestBodyDefinition" : null,
"responseBodyDefinition" : null
}
================================
return db.table('t_data_test').logic().where().eq('id', id).delete()

View File

@ -0,0 +1,27 @@
{
"properties" : { },
"id" : "f0e1cfcf4f254e17b75d7647f4f09f25",
"script" : null,
"groupId" : "152b9ad78aaf49a7a8945b5de088c1da",
"name" : "详情",
"createTime" : 1648486052778,
"updateTime" : null,
"lock" : null,
"createBy" : null,
"updateBy" : null,
"path" : "/get",
"method" : "GET",
"parameters" : [ ],
"options" : [ ],
"requestBody" : null,
"headers" : [ ],
"paths" : [ ],
"responseBody" : null,
"description" : null,
"requestBodyDefinition" : null,
"responseBodyDefinition" : null
}
================================
return db.selectOne("""
select id,name,sex,head_portrait,remarks from t_data_test where id = #{id}
""")

View File

@ -5,7 +5,7 @@
"groupId" : "f2538e0f370a4cabab0ae920f5e77ae7",
"name" : "列表",
"createTime" : null,
"updateTime" : 1648391602307,
"updateTime" : 1648475787119,
"lock" : null,
"createBy" : null,
"updateBy" : null,
@ -124,4 +124,5 @@ return db.page("""
?{tableComment, and table_comment like concat('%',#{tableComment},'%')}
?{createDate && createDate.split(',')[0], and create_date >= #{createDate.split(',')[0]}}
?{createDate && createDate.split(',')[1], and create_date <= #{createDate.split(',')[1]}}
order by create_date desc
""")

View File

@ -5,20 +5,116 @@
"groupId" : "f2538e0f370a4cabab0ae920f5e77ae7",
"name" : "执行生成",
"createTime" : null,
"updateTime" : 1648426498457,
"updateTime" : 1648486047810,
"lock" : null,
"createBy" : null,
"updateBy" : null,
"path" : "/execute",
"method" : "GET",
"parameters" : [ ],
"method" : "POST",
"parameters" : [ {
"name" : "info",
"value" : "{\"moduleName\":\"数据管理\",\"modulePath\":\"/data\",\"businessName\":\"测试生成\",\"businessPath\":\"/test\",\"template\":\"singleTable\"}",
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
}, {
"name" : "columns",
"value" : "[{\"columnName\":\"name\",\"columnComment\":\"名字\",\"columnType\":\"varchar(255)\",\"component\":\"component: 'input'\",\"where\":\"like\",\"save\":true,\"query\":true,\"list\":true,\"required\":false},{\"columnName\":\"sex\",\"columnComment\":\"性别\",\"columnType\":\"varchar(255)\",\"component\":\"component: 'radio-group'\",\"where\":\"=\",\"save\":true,\"query\":true,\"list\":true,\"required\":false,\"dictType\":\"sex\"},{\"columnName\":\"headPortrait\",\"columnComment\":\"头像\",\"columnType\":\"varchar(255)\",\"component\":\"component: 'upload-image'\",\"where\":\"in\",\"save\":true,\"query\":true,\"list\":true,\"required\":false},{\"columnName\":\"remarks\",\"columnComment\":\"备注\",\"columnType\":\"text\",\"component\":\"component: 'input',\\n props: {\\n type: 'textarea'\\n }\\n \",\"where\":\"<=\",\"save\":true,\"query\":true,\"list\":true,\"required\":false}]",
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
}, {
"name" : "tableName",
"value" : "t_data_test",
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
}, {
"name" : "tableComment",
"value" : "测试生成",
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
} ],
"options" : [ ],
"requestBody" : "",
"headers" : [ ],
"paths" : [ ],
"responseBody" : "{\n \"code\": 200,\n \"message\": \"success\",\n \"data\": \"02df51e4d7184780a98b632f43dc5848\",\n \"timestamp\": 1648309158679,\n \"executeTime\": 8\n}",
"responseBody" : "{\n \"code\": 200,\n \"message\": \"success\",\n \"data\": [{\n \"columnName\": \"is_del\"\n }, {\n \"columnName\": \"create_by\"\n }, {\n \"columnName\": \"create_date\"\n }, {\n \"columnName\": \"update_by\"\n }, {\n \"columnName\": \"update_date\"\n }],\n \"timestamp\": 1648485740429,\n \"executeTime\": 51\n}",
"description" : null,
"requestBodyDefinition" : null,
"requestBodyDefinition" : {
"name" : "root",
"value" : "",
"description" : "",
"required" : false,
"dataType" : "Object",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ {
"name" : "info",
"value" : "",
"description" : "",
"required" : false,
"dataType" : "Object",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ {
"name" : "moduleName",
"value" : "数据管理",
"description" : "",
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "modulePath",
"value" : "/data",
"description" : "",
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
} ]
} ]
},
"responseBodyDefinition" : {
"name" : "",
"value" : "",
@ -56,7 +152,7 @@
"children" : [ ]
}, {
"name" : "data",
"value" : "02df51e4d7184780a98b632f43dc5848",
"value" : "",
"description" : "",
"required" : false,
"dataType" : "Object",
@ -65,10 +161,34 @@
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
"children" : [ {
"name" : "",
"value" : "",
"description" : "",
"required" : false,
"dataType" : "Object",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ {
"name" : "columnName",
"value" : "is_del",
"description" : "",
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
} ]
} ]
}, {
"name" : "timestamp",
"value" : "1648309158679",
"value" : "1648485740429",
"description" : "",
"required" : false,
"dataType" : "Long",
@ -80,7 +200,7 @@
"children" : [ ]
}, {
"name" : "executeTime",
"value" : "8",
"value" : "51",
"description" : "",
"required" : false,
"dataType" : "Integer",
@ -94,7 +214,120 @@
}
}
================================
import org.ssssssss.magicapi.core.model.ApiInfo
import org.ssssssss.magicapi.core.model.Group
import org.ssssssss.magicapi.core.service.MagicResourceService
import log
info = info::json
var moduleGroup = MagicResourceService.tree('api').children.filter(it => {
return it.node.path == info.modulePath || it.node.path == info.modulePath.substring(1, info.modulePath.length())
})
if(moduleGroup.length == 0){
Group group = new Group();
group.setId(UUID.randomUUID().toString().replace('-', ''));
group.setName(info.moduleName);
group.setPath(info.modulePath);
group.setParentId("0");
group.setType('api')
MagicResourceService.saveGroup(group);
moduleGroup = group;
}else{
moduleGroup = moduleGroup[0].node
}
return MagicResourceService.tree('api').children.filter(it => it.node.path == '')[0].node.id
var businessGroup = MagicResourceService.tree('api').children.filter(it => it.node.id == moduleGroup.id)[0].children.filter(it => {
return it.node.path == info.businessPath || it.node.path == info.businessPath.substring(1, info.businessPath.length())
})
if(businessGroup.length == 0){
Group group = new Group();
group.setId(UUID.randomUUID().toString().replace('-', ''));
group.setName(info.businessName);
group.setPath(info.businessPath);
group.setParentId(moduleGroup.getId());
group.setType('api')
MagicResourceService.saveGroup(group);
businessGroup = group;
}else{
businessGroup = businessGroup[0].node
}
columns = columns::json
var listFields = columns.filter(it => it.list).map(it => it.columnName.replace(/([A-Z])/g,"_$1").toLowerCase()).join(',')
var wheres = '';
columns.forEach(it => {
var field = it.columnName.replace(/([A-Z])/g,"_$1").toLowerCase()
if(it.query){
if(it.where == 'in'){
wheres += ` ?{${it.columnName}, and ${field} in(#{`+it.columnName+`.split(',')}) }\n`
}else if(it.where == 'like'){
wheres += ` ?{${it.columnName}, and ${field} like concat('%',#{${it.columnName}},'%') }\n`
}else{
wheres += ` ?{${it.columnName}, and ${field} ${it.where} #{${it.columnName}} }\n`
}
}
})
wheres = wheres.substring(0,wheres.length() - 1)
var commonField = db.select("""
SELECT
column_name
FROM
information_schema.COLUMNS
WHERE
table_name = #{tableName} AND column_name IN ( 'is_del', 'create_by', 'create_date', 'update_by', 'update_date' ) AND table_schema = DATABASE()
""")
commonField = commonField.map(it => it.columnName)
var primary = db.selectValue("SELECT column_name FROM information_schema.COLUMNS WHERE table_name = #{tableName} and column_key = 'PRI' and table_schema = database() limit 1")
var primaryLowerCamelCase = primary.replace(/([A-Z])/g,"_$1").toLowerCase()
ApiInfo listApi = new ApiInfo()
listApi.setName("列表")
listApi.setPath("/list")
listApi.setMethod("POST")
listApi.setGroupId(businessGroup.getId())
listApi.setScript(`return db.page("""
select ${primary},${listFields} from ${tableName} where 1=1
${wheres}
""")`)
MagicResourceService.saveFile(listApi)
var saveMethod = 'save(data)'
if(commonField.size() >= 4){
saveMethod = 'saveOrUpdate(data)'
}
ApiInfo saveApi = new ApiInfo()
saveApi.setName("保存")
saveApi.setPath("/save")
saveApi.setMethod("POST")
saveApi.setGroupId(businessGroup.getId())
saveApi.setScript(`return db.table('${tableName}').primary('${primary}').${saveMethod}`)
saveApi.setOption([{ name: 'wrap_request_parameter', value: 'data' }])
MagicResourceService.saveFile(saveApi)
var logic = ''
if(commonField.contains('is_del')){
logic = '.logic()'
}
ApiInfo deleteApi = new ApiInfo()
deleteApi.setName("删除")
deleteApi.setPath("/delete")
deleteApi.setMethod("DELETE")
deleteApi.setGroupId(businessGroup.getId())
deleteApi.setScript(`return db.table('${tableName}')${logic}.where().eq('${primary}', ${primaryLowerCamelCase}).delete()`)
MagicResourceService.saveFile(deleteApi)
var saveFields = columns.filter(it => it.save).map(it => it.columnName.replace(/([A-Z])/g,"_$1").toLowerCase()).join(',')
ApiInfo getApi = new ApiInfo()
getApi.setName("详情")
getApi.setPath("/get")
getApi.setMethod("GET")
getApi.setGroupId(businessGroup.getId())
getApi.setScript(`return db.selectOne("""
select ${primary},${saveFields} from ${tableName} where ${primary} = #{${primaryLowerCamelCase}}
""")`)
MagicResourceService.saveFile(getApi)
return commonField

View File

@ -5,7 +5,7 @@
"groupId" : "f2538e0f370a4cabab0ae920f5e77ae7",
"name" : "根据表名查出所有列",
"createTime" : null,
"updateTime" : 1648312786910,
"updateTime" : 1648484373195,
"lock" : null,
"createBy" : null,
"updateBy" : null,
@ -204,5 +204,5 @@ return {
AND column_name NOT IN ( 'id', 'is_del', 'create_by', 'create_date', 'update_by', 'update_date' )
AND table_schema = DATABASE()
"""),
primary: db.selectValue("SELECT column_name FROM information_schema.COLUMNS WHERE table_name = #{tableName} and column_key = 'PRI' and table_schema = database()")
primary: db.selectValue("SELECT column_name FROM information_schema.COLUMNS WHERE table_name = #{tableName} and column_key = 'PRI' and table_schema = database() limit 1")
}

View File

@ -5,7 +5,7 @@
"groupId" : "1952f25c81084e24b55b11385767dc38",
"name" : "登录",
"createTime" : null,
"updateTime" : 1648307403240,
"updateTime" : 1648478302933,
"lock" : "0",
"createBy" : null,
"updateBy" : null,

View File

@ -140,7 +140,7 @@
columnComment: it.columnComment,
columnType: it.columnType,
component: `component: 'input'`,
where: 'eq',
where: '=',
save: true,
query: true,
list: true,
@ -187,35 +187,29 @@
component: 'select',
props: {
options: [{
label: 'eq',
value: 'eq'
label: '=',
value: '='
},{
label: 'ne',
value: 'ne'
label: '!=',
value: '!='
},{
label: 'lt',
value: 'lt'
label: '<',
value: '<'
},{
label: 'lte',
value: 'lte'
label: '<=',
value: '<='
},{
label: 'gt',
value: 'gt'
label: '>',
value: '>'
},{
label: 'gte',
value: 'gte'
label: '>=',
value: '>='
},{
label: 'in',
value: 'in'
},{
label: 'notIn',
value: 'notIn'
},{
label: 'like',
value: 'like'
},{
label: 'notLike',
value: 'notLike'
}]
}
}, {