{ "properties" : { }, "id" : "bb23ca6e863b41b8ad81994b87a4fc0d", "script" : null, "groupId" : "f2538e0f370a4cabab0ae920f5e77ae7", "name" : "执行生成", "createTime" : null, "updateTime" : 1649260158450, "lock" : null, "createBy" : null, "updateBy" : null, "path" : "/execute", "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\": [{\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" : { "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" : "", "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" : "", "description" : "", "required" : false, "dataType" : "Object", "type" : null, "defaultValue" : null, "validateType" : "", "error" : "", "expression" : "", "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" : "1648485740429", "description" : "", "required" : false, "dataType" : "Long", "type" : null, "defaultValue" : null, "validateType" : "", "error" : "", "expression" : "", "children" : [ ] }, { "name" : "executeTime", "value" : "51", "description" : "", "required" : false, "dataType" : "Integer", "type" : null, "defaultValue" : null, "validateType" : "", "error" : "", "expression" : "", "children" : [ ] } ] } } ================================ import org.ssssssss.magicapi.core.model.Option import org.ssssssss.magicapi.component.model.ComponentInfo import org.ssssssss.magicapi.core.model.ApiInfo import org.ssssssss.magicapi.core.model.Group import org.ssssssss.magicapi.core.service.MagicResourceService import log import org.ssssssss.magicapi.modules.db.cache.SqlCache; import '@get:/system/menu/cache/delete' as cacheDelete; info = info::json var permissionPrefix = (info.modulePath + info.businessPath).replace(/^\//,'').replace(/\/\//, '/').replace('/', ':') if(!db.selectValue("""select id from sys_menu where url = #{info.modulePath + info.businessPath} and is_del = 0""")){ var menuId = uuid() var sort = db.selectInt("""select max(sort) + 10 from sys_menu where pid = #{info.pid} and is_del = 0""") || 10 db.update(""" insert into sys_menu(id, pid,name,url,component_name,sort,is_show) values(#{menuId}, #{info.pid}, #{info.businessName},#{info.modulePath + info.businessPath},#{permissionPrefix.replace(':','-') + '-list'},#{sort},1) """) db.update(""" insert into sys_menu(id, pid, name, permission, sort, keep_alive) values(#{uuid()}, #{menuId}, '查看', #{permissionPrefix + ':view'}, 10, 0) """) db.update(""" insert into sys_menu(id, pid, name, permission, sort, keep_alive) values(#{uuid()}, #{menuId}, '保存', #{permissionPrefix + ':save'}, 20, 0) """) db.update(""" insert into sys_menu(id, pid, name, permission, sort, keep_alive) values(#{uuid()}, #{menuId}, '删除', #{permissionPrefix + ':delete'}, 30, 0) """) SqlCache.delete('permissions:1') cacheDelete(); } var getGroup = (type) => { var moduleGroup = MagicResourceService.tree(type).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(type) MagicResourceService.saveGroup(group); moduleGroup = group; }else{ moduleGroup = moduleGroup[0].node } var businessGroup = MagicResourceService.tree(type).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(type) MagicResourceService.saveGroup(group); businessGroup = group; }else{ businessGroup = businessGroup[0].node } return { moduleGroup, businessGroup } } var deleteFiles = (groupId, paths) => { var listFiles = MagicResourceService.listFiles(groupId) listFiles.forEach(it => { if(paths.indexOf(it.path) != -1){ MagicResourceService.delete(it.id) } }) } var businessGroup = getGroup('api').businessGroup deleteFiles(businessGroup.getId(),['/list', '/save', '/get', '/delete']) 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` } } }) 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() var logic = '' if(commonField.contains('is_del')){ logic = '.logic()' wheres += ` and is_del = 0\n` } wheres = wheres.substring(0,wheres.length() - 1) 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} """)`) listApi.setOption([new Option('permission', `${permissionPrefix}:view`, '允许拥有该权限的访问')]) 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([new Option('wrap_request_parameter', 'data'), new Option('permission', `${permissionPrefix}:save`, '允许拥有该权限的访问')]) MagicResourceService.saveFile(saveApi) 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()`) deleteApi.setOption([new Option('permission', `${permissionPrefix}: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}} """)`) getApi.setOption([new Option('permission', `${permissionPrefix}:view`, '允许拥有该权限的访问')]) MagicResourceService.saveFile(getApi) var componentBusinessGroup = getGroup('component').businessGroup deleteFiles(componentBusinessGroup.getId(),['/list']) ComponentInfo componentInfo = new ComponentInfo() componentInfo.setGroupId(componentBusinessGroup.getId()) componentInfo.setName("列表") componentInfo.setPath("/list") componentInfo.setScript(componentScript) MagicResourceService.saveFile(componentInfo) return 1