From 58a8f9880cb537bc7a78505f8d90f5723a1b3850 Mon Sep 17 00:00:00 2001 From: tangmingyou <234767776@qq.com> Date: Mon, 23 May 2022 00:13:45 +0800 Subject: [PATCH] friend api --- .gitignore | 3 +- .../so-im-backup-2022522232935.pdma.json | 2293 +++++++++++++++++ .../so-im-backup-2022522232938.pdma.json | 2293 +++++++++++++++++ .../so-im-backup-2022522232940.pdma.json | 2293 +++++++++++++++++ doc/db/so-im.chnr.json | 492 +++- .../soim/client/cmd/args/ArgsAddFriend.java | 20 + .../soim/client/cmd/args/ArgsSearch.java | 4 +- .../client/handler/cmd/AddFriendHandler.java | 23 + .../client/handler/cmd/SearchHandler.java | 5 +- .../das/user/api/model/entity/ImFriend.java | 46 + .../sopod/soim/das/user/dao/FriendMapper.java | 16 + .../src/main/resources/application.properties | 13 +- .../main/resources/mapper/FriendMapper.xml | 5 + .../friend/ReqFriendSearchHandler.java | 59 - .../user/ReqAccountSearchHandler.java | 48 + .../sopod/soim/data/msg/friend/Friend.java | 2225 ---------------- .../soim/data/msg/user/AccountSearch.java | 1425 ++++++++++ .../sopod/soim/data/msg/user/AddFriend.java | 1038 ++++++++ .../sopod/soim/data/msg/user/UserGroup.java | 159 +- .../main/resources/proto/friend/Friend.proto | 19 - .../resources/proto/user/AccountSearch.proto | 15 + .../main/resources/proto/user/AddFriend.proto | 14 + .../main/resources/proto/user/UserGroup.proto | 2 +- .../src/main/resources/protoSerialNoTable.txt | 27 +- .../soim/logic/common/model/UserInfo.java | 2 + .../api/user/service/AccountService.java | 18 + im-service-api/pom.xml | 8 +- .../friend/service/UserSearchServiceImpl.java | 2 +- .../user/service/AccountServiceImpl.java | 39 + 29 files changed, 10256 insertions(+), 2350 deletions(-) create mode 100644 doc/db/.back_so-im/so-im-backup-2022522232935.pdma.json create mode 100644 doc/db/.back_so-im/so-im-backup-2022522232938.pdma.json create mode 100644 doc/db/.back_so-im/so-im-backup-2022522232940.pdma.json create mode 100644 im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsAddFriend.java create mode 100644 im-client/src/main/java/net/sopod/soim/client/handler/cmd/AddFriendHandler.java create mode 100644 im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java create mode 100644 im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/FriendMapper.java create mode 100644 im-das/im-das-user/src/main/resources/mapper/FriendMapper.xml delete mode 100644 im-entry/src/main/java/net/sopod/soim/entry/handlers/friend/ReqFriendSearchHandler.java create mode 100644 im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAccountSearchHandler.java delete mode 100644 im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/friend/Friend.java create mode 100644 im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AccountSearch.java create mode 100644 im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AddFriend.java delete mode 100644 im-service-api/im-entry-protocol/src/main/resources/proto/friend/Friend.proto create mode 100644 im-service-api/im-entry-protocol/src/main/resources/proto/user/AccountSearch.proto create mode 100644 im-service-api/im-entry-protocol/src/main/resources/proto/user/AddFriend.proto create mode 100644 im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/api/user/service/AccountService.java create mode 100644 im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/AccountServiceImpl.java diff --git a/.gitignore b/.gitignore index 75090a7..4bd2418 100644 --- a/.gitignore +++ b/.gitignore @@ -54,4 +54,5 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -/log \ No newline at end of file +/log +*/.back_so-im diff --git a/doc/db/.back_so-im/so-im-backup-2022522232935.pdma.json b/doc/db/.back_so-im/so-im-backup-2022522232935.pdma.json new file mode 100644 index 0000000..8f2532f --- /dev/null +++ b/doc/db/.back_so-im/so-im-backup-2022522232935.pdma.json @@ -0,0 +1,2293 @@ +{ + "name": "so-im", + "describe": "sopod-soim", + "avatar": "", + "version": "4.1.1", + "createdTime": "2022-3-7 15:11:08", + "updatedTime": "2022-5-22 23:29:29", + "profile": { + "default": { + "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", + "dbConn": "", + "entityInitFields": [ + { + "defKey": "TENANT_ID", + "defName": "租户号", + "comment": "", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "refDict": "", + "uiHint": "", + "id": "AFCBBC02-ECE9-47B0-9680-9F0494CDCB57" + }, + { + "defKey": "REVISION", + "defName": "乐观锁", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "C6E4A7AF-BD29-444B-BF64-1D2D2EC37CF0" + }, + { + "defKey": "CREATED_BY", + "defName": "创建人", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "2D4573C1-B54E-4BDF-BBD4-F4C2FD1FC8C4" + }, + { + "defKey": "CREATED_TIME", + "defName": "创建时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "7AB9290E-20AA-4A3E-97E3-96C905B496D3" + }, + { + "defKey": "UPDATED_BY", + "defName": "更新人", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "C0C6343D-A720-4EB1-835A-28F7227B036F" + }, + { + "defKey": "UPDATED_TIME", + "defName": "更新时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "FEBBEA16-0F4D-4557-95E2-278C7C127BB9" + } + ], + "entityInitProperties": {} + }, + "sql": { + "delimiter": "" + }, + "dataTypeSupports": [ + { + "defKey": "MYSQL", + "id": "8FE7C65E-40EB-41B6-B60E-79063AFF6273" + }, + { + "defKey": "JAVA_MP", + "id": "1E385761-67B3-4B80-A194-E302E590E54E" + }, + { + "defKey": "PostgreSQL", + "id": "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A" + }, + { + "defKey": "ORACLE", + "id": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542" + }, + { + "defKey": "SQLServer", + "id": "BFC87171-C74F-494A-B7C2-76B9C55FACC9" + }, + { + "defKey": "DB2", + "id": "89504F5D-94BF-4C9E-8B2E-44F37305FED5" + }, + { + "defKey": "DM", + "id": "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307" + }, + { + "defKey": "GaussDB", + "id": "592C7013-143D-4E7B-AF64-0D7BF1E28230" + }, + { + "defKey": "Kingbase", + "id": "77BD85E5-9D0D-4096-8427-CBA306FC9C6A" + }, + { + "defKey": "MaxCompute", + "id": "11D1FB71-A587-4217-89BA-611B8A1F83E0" + }, + { + "defKey": "SQLite", + "id": "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1" + }, + { + "defKey": "JAVA", + "id": "797A1496-D649-4261-89B4-544132EC3F36" + }, + { + "defKey": "JavaMybatis", + "id": "895CFD1D-4273-4D32-A2C4-CAC70200AB5B" + }, + { + "defKey": "JavaMybatisPlus", + "id": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073" + }, + { + "defKey": "C#", + "id": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30" + }, + { + "defKey": "Hive", + "id": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2" + }, + { + "defKey": "Golang", + "id": "B91D99E0-9B7C-416C-8737-B760957DAF09" + } + ], + "codeTemplates": [ + { + "type": "dbDDL", + "applyFor": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", + "isDefault": true, + "createTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};\nCREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}} {{= field.notNull ? 'NOT NULL' : '' }} {{= field.autoIncrement ? 'AUTO_INCREMENT' : '' }} {{= field.defaultValue ? it.func.join('DEFAULT',field.defaultValue,' ') : '' }} COMMENT '{{=it.func.join(field.defName,field.comment,';')}}' {{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}\n", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push('ALTER TABLE '+before.defKey+' RENAME TO '+after.defKey);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n ret.push('ALTER TABLE '+after.defKey+' COMMENT \\''+commentText+'\\'');\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldAdded) { \n let ddlItem = 'ADD COLUMN '+field.defKey+' '+field.dbType;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n if(field.autoIncrement){\n ddlItem += ' AUTO_INCREMENT';\n }\n if(field.defaultValue){\n ddlItem += (' DEFAULT' + field.defaultValue);\n }\n ddlItem += (' COMMENT \\''+field.defName+';'+field.comment+'\\'');\n \n if(field.index>0 && field.afterFieldKey){\n ddlItem += (' AFTER '+field.afterFieldKey);\n }\n ret.push(ddlItem);\n }\n return firstDDL+'\\n'+ret.join(',\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldRemoved) { \n ret.push('DROP '+field.defKey);\n }\n return firstDDL+'\\n'+ret.join(',\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey === after.defKey){\n changeDDL += (' MODIFY COLUMN '+after.defKey);\n }else{\n changeDDL += (' CHANGE COLUMN '+before.defKey+' '+after.defKey);\n }\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(field.scale)>0){\n changeDDL += (','+field.scale);\n }\n changeDDL += ')';\n }\n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n let defaultValue = '';\n if(after.defaultValue != null && after.defaultValue.length>0){\n defaultValue = (after.defaultValue);\n }else{\n defaultValue = 'NULL';\n }\n changeDDL += (' DEFAULT ' + defaultValue);\n let comment = after.comment||'';\n changeDDL += (' COMMENT \\''+comment+'\\';');\n ret.push(firstDDL+' '+changeDDL);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "type": "dbDDL", + "applyFor": "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A", + "isDefault": true, + "createTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};\nCREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' AUTO_INCREMENT' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`ALTER TABLE ${before.defKey} RENAME TO ${after.defKey}`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `COMMENT ON TABLE ${after.defKey} IS '${commentText}'`;\n ret.push(myText);\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD COLUMN ${field.defKey} ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n } \n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `COMMENT ON COLUMN ${entity.data.baseInfo.defKey}.${field.defKey} IS '${commentText}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN ${field.defKey}`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldModified) { \n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey !== after.defKey){\n let renameText = `ALTER TABLE ${entity.data.baseInfo.defKey} RENAME COLUMN ${before.defKey} TO ${after.defKey};`;\n ret.push(renameText);\n }\n /*如果没有变化,则不生成变更语句*/\n if(before.dbType === after.dbType \n && before['len'] === after['len'] \n && before.scale === after.scale\n && before.primaryKey === after.primaryKey\n && before.notNull === after.notNull\n && before.autoIncrement === after.autoIncrement\n && before.defaultValue === after.defaultValue){\n continue;\n }\n if(before.dbType !== after.dbType || before.len !== after.len || before.scale !== after.scale){\n let dbTypeDDL = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${after.defKey} TYPE ${before.dbType}`;\n if(after.len>0){\n dbTypeDDL += ('('+after.len);\n if(parseInt(after.scale)>0){\n dbTypeDDL += (','+after.scale);\n }\n dbTypeDDL += ')';\n }\n ret.push(dbTypeDDL+';');\n }\n \n if(before.defaultValue !== after.defaultValue){\n let defaultDDL = '';\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"NULL\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n defaultDDL += ('SET DEFAULT ' + defaultValue);\n }\n let defaultTpl = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${defaultDDL};`;\n ret.push(defaultTpl);\n }\n \n if(before.notNull !== after.notNull){\n let notNullDDL= 'SET NULL';\n if(after.notNull){\n let notNullDDL= 'SET NOT NULL';\n }\n let notNullTpl = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${notNullDDL};`;\n ret.push(notNullTpl);\n }\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n-- 索引重建\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "type": "appCode", + "applyFor": "1E385761-67B3-4B80-A194-E302E590E54E", + "isDefault": true, + "content": "\n$blankline\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.extension.activerecord.Model;\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport java.util.Date;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport lombok.experimental.Accessors;\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n var hours=today.getHours();\n var minutes=today.getMinutes();\n}}\n /**\n * @author : CHINER\n * @date : {{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n * @desc : {{=it.entity.defName}}{{? it.entity.comment}},{{=it.entity.comment}}{{?}}\n */\n@Data\n@EqualsAndHashCode(callSuper = true)\n@Accessors(chain = true)\n@ApiModel(value = \"{{=it.entity.defName}}\"{{? it.entity.comment}}, description = \"{{=it.entity.comment}}\"{{?}})\n@TableName(\"{{=it.entity.defKey}}\")\npublic class {{=it.func.camel(it.entity.defKey,true) }} extends Model<{{=it.func.camel(it.entity.defKey,true) }}> {\n{{~it.entity.fields:field:index}}\n $blankline\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n {{? field.primaryKey }}\n @TableId(value = \"{{=field.defKey}}\"{{? field.autoIncrement}}, type=IdType.AUTO{{?}})\n {{??}}\n @TableField(value = \"{{=field.defKey}}\")\n {{?}}\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}};\n{{~}}\n$blankline\n}\n$blankline" + }, + { + "type": "dbDDL", + "applyFor": "dictSQLTemplate", + "isDefault": true, + "content": "/* 插入字典总表[{{=it.dict.defKey}}-{{=it.dict.defName}}] */\nINSERT INTO SYS_DICT(KEY_,LABEL,INTRO,REVISION) VALUES('{{=it.dict.defKey}}','{{=it.dict.defName}}','{{=it.dict.intro}}',1);\n/* 插入字典明细表 */\n{{~it.dict.items:item:index}}\nINSERT INTO SYS_DICT_ITEM(DICT_KEY,KEY_,LABEL,SORT_,INTRO,REVISION) VALUES('{{=it.dict.defKey}}','{{=item.defKey}}','{{=item.defName}}','{{=item.sort}}','{{=item.intro}}',1);\n{{~}}" + }, + { + "applyFor": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542", + "type": "dbDDL", + "createTable": "CREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* -------------------------------------------------- */\n创建表:\n{{~ createEntities:entity}}\n {{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* -------------------------------------------------- */\n删除表:\n{{~ dropEntities:entity}}\n {{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* -------------------------------------------------- */\n修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n {{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n {{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n {{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n {{?}}{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}\n {{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('\\n\\t建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('\\n\\t解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}\n{{=indexChanged?'\\n\\t更改了索引':''}}\n{{=changed?'\\n\\t更改了属性':''}}\n{{=relaArray.length>0?relaArray.join(''):''}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`ALTER TABLE ${before.defKey} RENAME TO ${after.defKey}`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `COMMENT ON TABLE ${after.defKey} IS '${commentText}'`;\n ret.push(myText);\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD (${field.defKey} ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n ddlItem += ')';\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `COMMENT ON COLUMN ${entity.data.baseInfo.defKey}.${field.defKey} IS '${commentText}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN ${field.defKey}`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey !== after.defKey){\n let renameText = `ALTER TABLE ${entity.data.baseInfo.defKey} RENAME COLUMN ${before.defKey} TO ${after.defKey};`;\n ret.push(renameText);\n }\n /*如果没有变化,则不生成变更语句*/\n if(before.dbType === after.dbType \n && before['len'] === after['len'] \n && before.scale === after.scale\n && before.primaryKey === after.primaryKey\n && before.notNull === after.notNull\n && before.autoIncrement === after.autoIncrement\n && before.defaultValue === after.defaultValue){\n continue;\n }\n changeDDL += ('MODIFY ('+after.defKey+'');\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(field.scale)>0){\n changeDDL += (','+field.scale);\n }\n changeDDL += ')';\n }\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n changeDDL += (' DEFAULT ' + defaultValue);\n }\n \n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n changeDDL += ')';\n ret.push(`${firstDDL} ${changeDDL};`);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "applyFor": "BFC87171-C74F-494A-B7C2-76B9C55FACC9", + "type": "dbDDL", + "createTable": "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[{{=it.entity.defKey}}]') AND type in (N'U')) DROP TABLE [dbo].[{{=it.entity.defKey}}];\n\nCREATE TABLE [dbo].[{{=it.entity.defKey}}](\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' IDENTITY(1,1)' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`EXEC sp_rename '${before.defKey}','${after.defKey}'`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `IF ((SELECT COUNT(*) FROM ::fn_listextendedproperty('MS_Description','SCHEMA', 'dbo','TABLE', '${after.defKey}', NULL, NULL)) > 0)\n \\n\\tEXEC sp_updateextendedproperty 'MS_Description', '${commentText}','SCHEMA', 'dbo','TABLE', '${after.defKey}'\n \\nELSE\n \\n\\tEXEC sp_addextendedproperty 'MS_Description', '${commentText}', 'SCHEMA', 'dbo','TABLE', '${after.defKey}'\n `;\n ret.push(myText);\n /*ret.push('ALTER TABLE '+after.defKey+' COMMENT \\''+commentText+'\\'');*/\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD [${field.defKey}] ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `EXEC sp_addextendedproperty 'MS_Description', N'${commentText}','SCHEMA', N'dbo','TABLE', N'${entity.data.baseInfo.defKey}','COLUMN', N'${field.defKey}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN [${field.defKey}]`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey === after.defKey){\n changeDDL += (' ALTER COLUMN ['+after.defKey+']');\n }else{\n let renameText = `EXEC sp_rename '[dbo].[${entity.data.baseInfo.defKey}].[${before.defKey}]','${after.defKey}','COLUMN';`;\n ret.push(renameText);\n continue;\n }\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(after.scale)>0){\n changeDDL += (','+after.scale);\n }\n changeDDL += ')';\n }\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n changeDDL += (' DEFAULT ' + defaultValue);\n }\n \n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n ret.push(`${firstDDL} ${changeDDL};`);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "type": "dbDDL", + "applyFor": "89504F5D-94BF-4C9E-8B2E-44F37305FED5", + "createTable": "CREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ','('+field.defaultValue+')',' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' AUTO_INCREMENT' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}} {{= field.notNull ? 'NOT NULL' : '' }} {{= field.autoIncrement ? 'AUTOINCREMENT' : '' }} {{= field.defaultValue ? it.func.join('DEFAULT',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }} --{{=it.func.join(field.defName,field.comment,';')}}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i queryById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.queryById({{=pkVarName}}));\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n @ApiOperation(\"分页查询\")\n @GetMapping\n public ResponseEntity> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n return ResponseEntity.ok({{=serviceVarName}}.paginQuery({{=beanVarName}}, pageRequest));\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"新增数据\")\n @PostMapping\n public ResponseEntity<{{=beanClass}}> add({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.insert({{=beanVarName}}));\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"更新数据\")\n @PutMapping\n public ResponseEntity<{{=beanClass}}> edit({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.update({{=beanVarName}}));\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n @ApiOperation(\"通过主键删除数据\")\n @DeleteMapping\n public ResponseEntity deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}", + "Service": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.service;\n$blankline\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.domain.PageRequest;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务接口\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\npublic interface {{=serviceClass}}{\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n \n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest);\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} insert({{=beanClass}} {{=beanVarName}});\n\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n boolean deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "ServiceImpl": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkVarNameU = \"UndefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkVarNameU = it.func.camel(field.defKey,true);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n var mapperName = beanVarName+'Mapper';\n \n}}package {{=pkgName}}.service.impl;\n$blankline\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.domain.PageImpl;\nimport org.springframework.data.domain.PageRequest;\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.mapper.{{=beanClass}}Mapper;\nimport {{=pkgName}}.service.{{=serviceClass}};\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务实现类\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Service\npublic class {{=serviceClass}}Impl implements {{=serviceClass}}{\n @Autowired\n private {{=beanClass}}Mapper {{=mapperName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n public {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}}){\n return {{=mapperName}}.queryById({{=pkVarName}});\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n public Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n long total = {{=mapperName}}.count({{=beanVarName}});\n return new PageImpl<>({{=mapperName}}.queryAllByLimit({{=beanVarName}}, pageRequest), pageRequest, total);\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} insert({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.insert({{=beanVarName}});\n return {{=beanVarName}};\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} update({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.update({{=beanVarName}});\n return queryById({{=beanVarName}}.get{{=pkVarNameU}}());\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n public boolean deleteById({{=pkDataType}} {{=pkVarName}}){\n int total = {{=mapperName}}.deleteById({{=pkVarName}});\n return total > 0;\n }\n}", + "Mapper": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.mapper;\n$blankline\nimport java.util.List;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.data.domain.Pageable;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表数据库访问层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Mapper\npublic interface {{=beanClass}}Mapper{\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n \n /** \n * 分页查询指定行数据\n *\n * @param {{=beanVarName}} 查询条件\n * @param pageable 分页对象\n * @return 对象列表\n */\n List<{{=beanClass}}> queryAllByLimit({{=beanClass}} {{=beanVarName}}, @Param(\"pageable\") Pageable pageable);\n\n /** \n * 统计总行数\n *\n * @param {{=beanVarName}} 查询条件\n * @return 总行数\n */\n long count({{=beanClass}} {{=beanVarName}});\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 影响行数\n */\n int insert({{=beanClass}} {{=beanVarName}});\n\n /** \n * 批量新增数据\n *\n * @param entities List<{{=beanClass}}> 实例对象列表\n * @return 影响行数\n */\n int insertBatch(@Param(\"entities\") List<{{=beanClass}}> entities);\n \n /** \n * 批量新增或按主键更新数据\n *\n * @param entities List<{{=beanClass}}> 实例对象列表\n * @return 影响行数\n */\n int insertOrUpdateBatch(@Param(\"entities\") List<{{=beanClass}}> entities);\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 影响行数\n */\n int update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 影响行数\n */\n int deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "Mapper.xml": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n var pkField = \"UNDEFINED_ID\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkField = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}\n\n\n \n {{~it.entity.fields:field:index}}\n \n {{~}}\n \n $blankline\n \n \n $blankline\n \n \n $blankline\n \n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values ({{=it.entity.fields.map(function(e,i){return '#{'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n \n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n \n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n on duplicate key update\n {{=it.entity.fields.map(function(e,i){return e.defKey + '=values('+e.defKey+')'}).join(',\\n\\t\\t')}}\n \n $blankline\n \n \n update {{=it.entity.defKey}}\n \n {{~it.entity.fields:field:index}}\n \n {{=field.defKey}} = #{{{=it.func.camel(field.defKey,false)}}},\n \n {{~}}\n \n where {{=pkField}} = #{{{=pkVarName}}}\n \n $blankline\n \n \n delete from {{=it.entity.defKey}} where {{=pkField}} = #{{{=pkVarName}}}\n \n\n\n", + "Entity": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.entity;\n$blankline\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport java.io.Serializable;\nimport java.util.Date;\n$blankline\n\n /**\n * {{=it.entity.defName}};{{=it.entity.comment}}\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@ApiModel(value = \"{{=it.entity.defName}}\",description = \"{{=it.entity.comment}}\")\npublic class {{=beanClass}} implements Serializable,Cloneable{\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n @ApiModelProperty(name = \"{{=field.defName}}\",notes = \"{{=field.comment}}\")\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}} ;\n{{~}}\n$blankline\n\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public {{=field.type}} get{{=it.func.camel(field.defKey,true)}}(){\n return this.{{=it.func.camel(field.defKey,false)}};\n }\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public void set{{=it.func.camel(field.defKey,true)}}({{=field.type}} {{= it.func.camel(field.defKey,false) }}){\n this.{{=it.func.camel(field.defKey,false)}}={{=it.func.camel(field.defKey,false)}};\n }\n{{~}}\n}" + }, + { + "applyFor": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073", + "type": "appCode", + "Controller": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.controller;\n$blankline\nimport java.util.List;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.domain.PageImpl;\nimport org.springframework.data.domain.PageRequest;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.*;\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.service.{{=serviceClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表控制层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Api(tags = \"{{=it.entity.defName}}对象功能接口\")\n@RestController\n@RequestMapping(\"/{{=it.func.camel(it.entity.defKey,false)}}\")\npublic class {{=beanClass}}Controller{\n @Autowired\n private {{=serviceClass}} {{=serviceVarName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n @ApiOperation(\"通过ID查询单条数据\")\n @GetMapping(\"{{{=it.func.camel(pkVarName,false)}}}\")\n public ResponseEntity<{{=beanClass}}> queryById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.queryById({{=pkVarName}}));\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n @ApiOperation(\"分页查询\")\n @GetMapping\n public ResponseEntity> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n //1.分页参数\n long current = pageRequest.getPageNumber();\n long size = pageRequest.getPageSize();\n\n //2.分页查询\n /*把Mybatis的分页对象做封装转换,MP的分页对象上有一些SQL敏感信息,还是通过spring的分页模型来封装数据吧*/\n com.baomidou.mybatisplus.extension.plugins.pagination.Page<{{=beanClass}}> pageResult = {{=serviceVarName}}.paginQuery({{=beanVarName}}, current,size);\n\n //3. 分页结果组装\n List<{{=beanClass}}> dataList = pageResult.getRecords();\n long total = pageResult.getTotal();\n PageImpl<{{=beanClass}}> retPage = new PageImpl<{{=beanClass}}>(dataList,pageRequest,total);\n return ResponseEntity.ok(retPage);\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"新增数据\")\n @PostMapping\n public ResponseEntity<{{=beanClass}}> add({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.insert({{=beanVarName}}));\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"更新数据\")\n @PutMapping\n public ResponseEntity<{{=beanClass}}> edit({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.update({{=beanVarName}}));\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n @ApiOperation(\"通过主键删除数据\")\n @DeleteMapping\n public ResponseEntity deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}", + "Service": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.service;\n$blankline\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务接口\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\npublic interface {{=serviceClass}}{\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n $blankline\n /**\n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param current 当前页码\n * @param size 每页大小\n * @return\n */\n Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, long current, long size);\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} insert({{=beanClass}} {{=beanVarName}});\n\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n boolean deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "ServiceImpl": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkVarNameU = \"UndefinedId\";\n var pkFieldKey = \"UNDEFINED\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkFieldKey = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkVarNameU = it.func.camel(field.defKey,true);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n var mapperName = beanVarName+'Mapper';\n \n}}package {{=pkgName}}.service.impl;\n$blankline\nimport cn.hutool.core.util.StrUtil;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;\n\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.mapper.{{=beanClass}}Mapper;\nimport {{=pkgName}}.service.{{=serviceClass}};\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务实现类\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Service\npublic class {{=serviceClass}}Impl implements {{=serviceClass}}{\n @Autowired\n private {{=beanClass}}Mapper {{=mapperName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n public {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}}){\n return {{=mapperName}}.selectById({{=pkVarName}});\n }\n $blankline\n /**\n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param current 当前页码\n * @param size 每页大小\n * @return\n */\n public Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, long current, long size){\n //1. 构建动态查询条件\n LambdaQueryWrapper<{{=beanClass}}> queryWrapper = new LambdaQueryWrapper<>();\n {{~it.entity.fields.filter(function(e){return e[\"type\"]===\"String\"&&e.defKey !== pkFieldKey}):field:index}}\n if(StrUtil.isNotBlank({{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}())){\n queryWrapper.eq({{=beanClass}}::get{{=it.func.camel(field.defKey,true)}}, {{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}());\n }\n {{~}}\n\n //2. 执行分页查询\n Page<{{=beanClass}}> pagin = new Page<>(current , size , true);\n IPage<{{=beanClass}}> selectResult = {{=mapperName}}.selectByPage(pagin , queryWrapper);\n pagin.setPages(selectResult.getPages());\n pagin.setTotal(selectResult.getTotal());\n pagin.setRecords(selectResult.getRecords());\n\n //3. 返回结果\n return pagin;\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} insert({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.insert({{=beanVarName}});\n return {{=beanVarName}};\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} update({{=beanClass}} {{=beanVarName}}){\n //1. 根据条件动态更新\n LambdaUpdateChainWrapper<{{=beanClass}}> chainWrapper = new LambdaUpdateChainWrapper<{{=beanClass}}>({{=mapperName}});\n {{~it.entity.fields.filter(function(e){return e[\"type\"]===\"String\"&&e.defKey !== pkFieldKey}):field:index}}\n if(StrUtil.isNotBlank({{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}())){\n chainWrapper.eq({{=beanClass}}::get{{=it.func.camel(field.defKey,true)}}, {{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}());\n }\n {{~}}\n //2. 设置主键,并更新\n chainWrapper.set({{=beanClass}}::get{{=pkVarNameU}}, {{=beanVarName}}.get{{=pkVarNameU}}());\n boolean ret = chainWrapper.update();\n //3. 更新成功了,查询最最对象返回\n if(ret){\n return queryById({{=beanVarName}}.get{{=pkVarNameU}}());\n }else{\n return {{=beanVarName}};\n }\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n public boolean deleteById({{=pkDataType}} {{=pkVarName}}){\n int total = {{=mapperName}}.deleteById({{=pkVarName}});\n return total > 0;\n }\n}", + "Mapper": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.mapper;\n$blankline\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.Constants;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表数据库访问层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Mapper\npublic interface {{=beanClass}}Mapper extends BaseMapper<{{=beanClass}}>{\n /** \n * 分页查询指定行数据\n *\n * @param page 分页参数\n * @param wrapper 动态查询条件\n * @return 分页对象列表\n */\n IPage<{{=beanClass}}> selectByPage(IPage<{{=beanClass}}> page , @Param(Constants.WRAPPER) Wrapper<{{=beanClass}}> wrapper);\n}", + "Mapper.xml": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n var pkField = \"UNDEFINED_ID\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkField = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}\n\n$blankline\n\n\n \n\n\n", + "Entity": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.entity;\n$blankline\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport java.io.Serializable;\nimport java.util.Date;\n$blankline\n\n /**\n * {{=it.entity.defName}};{{=it.entity.comment}}\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@ApiModel(value = \"{{=it.entity.defName}}\",description = \"{{=it.entity.comment}}\")\n@TableName(\"{{=it.entity.defKey}}\")\npublic class {{=beanClass}} implements Serializable,Cloneable{\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n @ApiModelProperty(name = \"{{=field.defName}}\",notes = \"{{=field.comment}}\")\n {{? field.primaryKey }}\n @TableId\n {{?}}\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}} ;\n{{~}}\n$blankline\n\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public {{=field.type}} get{{=it.func.camel(field.defKey,true)}}(){\n return this.{{=it.func.camel(field.defKey,false)}};\n }\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public void set{{=it.func.camel(field.defKey,true)}}({{=field.type}} {{= it.func.camel(field.defKey,false) }}){\n this.{{=it.func.camel(field.defKey,false)}}={{=it.func.camel(field.defKey,false)}};\n }\n{{~}}\n}" + }, + { + "type": "appCode", + "applyFor": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30", + "Default": "using System;\nusing System.Collections.Generic;\n\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n}}\n/*\n * @author : http://www.chiner.com.cn\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n * @desc : {{=it.func.join(it.entity.defName,it.entity.comment,'-')}}\n */\nnamespace PDManer.Application\n{\n public partial class {{=it.func.camel(it.entity.defKey,true) }}\n {\n \n {{~it.entity.fields:field:index}}\n /// \n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// \n public {{=field.type}} {{=it.func.camel(field.defKey,true)}} { get; set; }\n $blankline\n {{~}}\n \n }\n}", + "SqlSugar": "using System;\nusing System.Collections.Generic;\nusing SqlSugar;\n\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n var sqlSugartable='[SugarTable(\"{{=it.entity.defKey}}\", TableDescription = \"{{=it.func.join(it.entity.defName,it.entity.comment,';')}}\")]';\n}}\n/*\n * @author : xkdong@163.com\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n * @desc : {{=it.func.join(it.entity.defName,it.entity.comment,'-')}}\n */\nnamespace Model.DBModel\n{\n /// \n /// {{=it.func.join(it.entity.defName,it.entity.comment,';')}}\n /// \n {{=sqlSugartable}}\n public class {{=it.entity.defKey}}\n {\n {{~it.entity.fields:field:index}}\n /// \n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// \n {{? field.primaryKey }}\n [SugarColumn(IsIdentity = true, IsPrimaryKey = true)]\n {{?}}\n public {{=field.type}} {{=it.func.camel(field.defKey,true)}}{ get; set; }\n $blankline\n {{~}}\n }\n}" + }, + { + "applyFor": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2", + "type": "dbDDL", + "createTable": "/**字段名,关键字等全部用的小写*/\ndrop table if exists {{=it.entity.defKey}};\n/**补充上库名,external关键字根据建表规范看是否添加*/\ncreate [external] table if not exists {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n/**这里把varchar,char,text,date,datetime字段全部映射为string类型.tinyint unsigned,bit,Integer,tinyint,smallint,mediumint映射为int类型,int unsigned映射为bigint.其它自定义映射规则根据自己情况修改*/\n/**当长度>0只有为decimal类型或double类型时才保留长度和小数的位数*/\n{{~it.entity.fields:field:index}}\n {{=it.func.lowerCase(field.defKey)}} {{=it.func.lowerCase(field.dbType)=='varchar'||it.func.lowerCase(field.dbType)=='char'||it.func.lowerCase(field.dbType)=='text'||it.func.lowerCase(field.dbType)=='date'||it.func.lowerCase(field.dbType)=='datetime' ? 'string':it.func.lowerCase(field.dbType)=='tinyint unsigned'||it.func.lowerCase(field.dbType)=='bit'||it.func.lowerCase(field.dbType)=='integer'||it.func.lowerCase(field.dbType)=='tinyint'||it.func.lowerCase(field.dbType)=='smallint'||it.func.lowerCase(field.dbType)=='mediumint' ? 'int':it.func.lowerCase(field.dbType)=='int unsigned' ? 'bigint':it.func.lowerCase(field.dbType)}}{{?field.len>0&&(it.func.lowerCase(field.dbType)=='decimal'||it.func.lowerCase(field.dbType)=='double')}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{=')'}}{{?}}{{?}} comment '{{=it.func.join(field.defName,field.comment,'')}}' {{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n{{?}}\n)\n{{\n let partitionedBy = it.entity.properties['partitioned by'];\n partitionedBy = partitionedBy?partitionedBy:'请在扩展属性中配置[partitioned by]属性';\n}}\ncomment '{{=it.func.join(it.entity.defName,';') }}'\n/**是否分区表,分区字段名和字段注释自定义*/\n[partitioned by {{=partitionedBy}}]\n/**文件存储格式自定义*/\n[stored as orc]\n/**hdfs上的地址自定义*/\n[location xxx]\n;", + "createView": "", + "deleteTable": "", + "createIndex": "", + "deleteIndex": "", + "message": "", + "update": "" + }, + { + "applyFor": "B91D99E0-9B7C-416C-8737-B760957DAF09", + "type": "appCode", + "content": "{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1<10?\"0\"+today.getMonth():today.getMonth();\n var days=today.getDate()<10?\"0\"+today.getDate():today.getDate();\n var hours = today.getHours()<10?\"0\"+today.getHours():today.getHours(); \n\tvar minutes = today.getMinutes()<10?\"0\"+today.getMinutes():today.getMinutes(); \n\tvar seconds = today.getSeconds()<10?\"0\"+today.getSeconds():today.getSeconds(); \n}}\n// Package models {{=it.func.join(it.entity.defName,it.entity.comment,',')}}\n// author : http://www.liyang.love\n// date : {{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n// desc : {{=it.func.join(it.entity.defName,it.entity.comment,',')}}\npackage models\n\n$blankline\n\n// {{=it.func.camel(it.entity.defKey,true) }} {{=it.func.join(it.entity.defName,it.entity.comment,',')}}。\n// 说明:{{=it.entity.comment}}\n// 表名:{{=it.entity.defKey}}\n// group: {{=it.func.camel(it.entity.defKey,true) }}\n// obsolete:\n// appliesto:go 1.8+;\n// namespace:hongmouer.his.models.{{=it.func.camel(it.entity.defKey,true) }}\n// assembly: hongmouer.his.models.go\n// class:HongMouer.HIS.Models.{{=it.func.camel(it.entity.defKey,true) }}\n// version:{{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\ntype {{=it.func.camel(it.entity.defKey,true) }} struct {\n {{~it.entity.fields:field:index}}\n {{=formatGoLang(it.func.camel(field.defKey,true),null,field,it.entity.fields,null,1)}} {{=formatGoLang(field.type,\"type\",field,it.entity.fields,10,3)}} `gorm:\"column:{{=field.primaryKey?\"primaryKey;\":\"\"}}{{=field.defKey}}\" json:\"{{=it.func.camel(field.defKey,true)}}\"` {{=formatGoLang(\"gorm:column:\"+field.defKey+\" json:\"+it.func.camel(field.defKey,true),null,field,it.entity.fields,null,2)}} //type:{{=formatGoLang(field.type,\"type\",field,it.entity.fields,null,3)}} comment:{{=formatGoLang(it.func.join(field.defName,field.comment,';'),\"defName\",field,it.entity.fields,null,4)}} version:{{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n {{~}}\n}\n\n\n$blankline\n// TableName 表名:{{=it.entity.defKey}},{{=it.entity.defName}}。\n// 说明:{{=it.entity.comment}}\nfunc (ZentaoUserInfo) TableName() string {\n\treturn \"{{=it.entity.defKey}}\"\n}\n\n{{\n\nfunction formatGoLang(str, fieldName, field, fileds, emptLength, isFiled) {\n var maxLength = 0;\n\n if (isFiled == 1) {\n for (var i = 0; i < fileds.length; i++) {\n if (getBlength(it.func.camel(fileds[i].defKey, true)) > maxLength) {\n maxLength = getBlength(it.func.camel(fileds[i].defKey, true)) + 2;\n }\n }\n } else if (isFiled == 2) {\n for (var i = 0; i < fileds.length; i++) {\n var newStr = \"gorm:column:\" + fileds[i].defKey + \" json:\" + it.func.camel(fileds[i].defKey, true);\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 2;\n }\n }\n var empt = \"\";\n var strLength = getBlength(str);\n if (field.primaryKey) {\n strLength += getBlength(\"primaryKey;\");\n }\n for (var j = 0; j < maxLength - strLength; j++) {\n empt += ' ';\n }\n return empt;\n } else if (isFiled == 3) {\n /*获取某个字段的最大长度*/\n for (var i = 0; i < fileds.length; i++) {\n var newStr = eval(\"fileds[\" + i + \"].\" + fieldName);\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 1;\n }\n }\n } else if (isFiled == 4) {\n /*获取某个字段的最大长度*/\n for (var i = 0; i < fileds.length; i++) {\n var newStr = fileds[i].comment + \";\" + fileds[i].defName;\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 1;\n }\n }\n }\n else {\n maxLength = emptLength;\n }\n\n var strLength = getBlength(str);\n for (var j = 0; j < maxLength - strLength; j++) {\n str += ' ';\n }\n return str;\n}\n\nfunction getBlength(str) {\n var n = 0;\n for (var i = str.length; i--;) {\n n += str.charCodeAt(i) > 255 ? 2 : 1;\n }\n return n;\n} \n\n}}" + } + ], + "generatorDoc": { + "docTemplate": "" + }, + "relationFieldSize": 30, + "uiHint": [ + { + "defKey": "Input", + "defName": "普通输入框", + "id": "6DD45F73-AE5E-426A-9C51-7E6CFABE23F6" + }, + { + "defKey": "Select", + "defName": "下拉输入框", + "id": "A1EA6B0B-E0EC-4A2A-8B22-9B7522DE1F0E" + }, + { + "defKey": "CheckBox", + "defName": "复选框", + "id": "8AD07131-FDFB-4932-B4EF-20FDA92C6F04" + }, + { + "defKey": "RadioBox", + "defName": "单选框", + "id": "3A4C23CC-E68F-43F9-97C1-7307AA638D1F" + }, + { + "defKey": "Double", + "defName": "小数输入", + "id": "33B230A9-C60E-417D-8C35-EE9130EE3D1D" + }, + { + "defKey": "Integer", + "defName": "整数输入", + "id": "2AFFF582-7624-4CE1-A6A8-A88BB0E5EBBF" + }, + { + "defKey": "Money", + "defName": "金额输入", + "id": "5E216947-0E7F-4488-95EB-6F6A51F49D96" + }, + { + "defKey": "Date", + "defName": "日期输入", + "id": "97980CB0-93F7-477C-A744-31D81A76CF06" + }, + { + "defKey": "DataYearMonth", + "defName": "年月输入", + "id": "6B1ACA65-DD29-4886-BC28-4E032FA6A63B" + }, + { + "defKey": "Text", + "defName": "长文本输入", + "id": "FCBB76EC-4E91-4C9A-A24C-8C1BC98A8C4B" + }, + { + "defKey": "RichText", + "defName": "富文本输入", + "id": "9965DCFB-54BE-4C5A-9518-DF09D4E58140" + } + ], + "menuWidth": "244px", + "headers": [ + { + "refKey": "defKey", + "hideInGraph": false + }, + { + "refKey": "defName", + "hideInGraph": false + }, + { + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "refKey": "notNull", + "hideInGraph": true + }, + { + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "refKey": "domain", + "hideInGraph": true + }, + { + "refKey": "type", + "hideInGraph": false + }, + { + "refKey": "len", + "hideInGraph": false + }, + { + "refKey": "scale", + "hideInGraph": false + }, + { + "refKey": "comment", + "hideInGraph": true + }, + { + "refKey": "refDict", + "hideInGraph": true + }, + { + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "refKey": "isStandard", + "hideInGraph": false + }, + { + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true + } + ] + }, + "entities": [ + { + "id": "373ED1A7-A39C-47F4-89AF-46992DD3CA83", + "defKey": "t_w_water_order", + "defName": "订单信息", + "comment": "", + "properties": {}, + "fields": [ + { + "rowNo": 1, + "defKey": "order_no", + "defName": "系统订单号", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "varchar", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "varchar(32)", + "primaryKeyName": "√", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "BA550922-0749-41FB-B23D-6738BA5DE665" + }, + { + "rowNo": 2, + "defKey": "order_type", + "defName": "订单类型(type=1加价费订单 )", + "comment": "", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "type": "int", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "int", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "7F07DB81-F6C1-4391-B672-B9A519870619" + }, + { + "defKey": "ref_id", + "defName": "关联编号(缴费数据)", + "comment": "", + "type": "VARCHAR", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "", + "id": "F41FE343-C68D-461C-B0CF-53D7AD321957" + }, + { + "defKey": "prod_name", + "defName": "商品名称", + "comment": "", + "type": "NVARCHAR", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "", + "id": "92D8161F-42EE-468B-84BD-4EC3F7211088" + }, + { + "rowNo": 3, + "defKey": "order_money", + "defName": "订单金额", + "comment": "", + "domain": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "decimal(12,2)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "FA153E93-8959-42A0-B98A-FF4320A82778" + }, + { + "rowNo": 4, + "defKey": "pay_money", + "defName": "实付金额", + "comment": "", + "domain": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "decimal(12,2)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "52F3B778-6F28-41FB-ADF8-8FA99CEF5617" + }, + { + "rowNo": 5, + "defKey": "refund_money", + "defName": "实退金额", + "comment": "", + "domain": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "decimal(12,2)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "82EA738A-9499-43FD-A173-09B9CA81885D" + }, + { + "rowNo": 6, + "defKey": "status", + "defName": "账单状态(1待支付,2已支付,3已取消,4已退款,5部分退款)", + "comment": "", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "type": "int", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "int", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "D7A34977-ED3D-47B4-9472-D4644E297580" + }, + { + "defKey": "pay_status", + "defName": "付款状态(0.已失败,1.未付款,2.已付款,3.不确定待查询,4.待轮询)", + "comment": "", + "type": "int", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "8AB0F3E7-409D-49F0-90C8-2135A6A37F29" + }, + { + "defKey": "trade_id", + "defName": "建行交易流水号", + "comment": "", + "type": "VARCHAR", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "", + "id": "4E49B24A-3074-494E-B72A-40B7C0D4D857" + }, + { + "rowNo": 7, + "defKey": "platform_pay_no", + "defName": "支付平台流水号(wx/alipay)", + "comment": "", + "domain": "", + "type": "varchar", + "len": 64, + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "varchar(64)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "B4044C3A-E17D-415C-BBAC-7A58A2140985" + }, + { + "rowNo": 8, + "defKey": "pay_time", + "defName": "支付完成时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "datetime", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "datetime", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "497A89D1-ED7C-46D9-BE21-D938BCEAE58D" + }, + { + "rowNo": 9, + "defKey": "refund_time", + "defName": "退款完成时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "datetime", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "datetime", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "CAEDF742-75BA-4F45-8BA1-18348557AECC" + }, + { + "rowNo": 10, + "defKey": "create_time", + "defName": "订单创建时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "datetime", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "datetime", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "E9736BCA-55FA-42A2-AFA6-CAA5EC355901" + }, + { + "rowNo": 11, + "defKey": "remark", + "defName": "订单备注", + "comment": "", + "domain": "", + "type": "nvarchar", + "len": 32, + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "nvarchar(32)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "B1548CA2-84D2-4E64-AEA8-BA825F6E5AFF" + }, + { + "defKey": "receipt_money", + "defName": "平台实收金额", + "comment": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "4A752610-041F-4A72-8FBE-27137257757B" + }, + { + "defKey": "charge_money", + "defName": "手续费(实付减实收)", + "comment": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "864F6CE2-3491-47FE-A26D-2D522D235137" + }, + { + "defKey": "third_trade_no", + "defName": "第三方订单号(支付宝/微信)", + "comment": "", + "type": "varchar", + "len": 100, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "id": "06F2B2D8-F4C8-4E9C-B63B-C0DE404E9194" + }, + { + "defKey": "pay_channel", + "defName": "支付渠道(按支付方式查询详情)", + "comment": "", + "type": "varchar", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "id": "405632DF-3944-4756-BC6D-131754E43049" + }, + { + "defKey": "pay_channel_name", + "defName": "支付渠道名称", + "comment": "", + "type": "nvarchar", + "len": 64, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "C5B92F02-496D-4BBB-94B8-788B9D32F20C" + }, + { + "defKey": "pay_way", + "defName": "付款方式(1.龙支付,2.微信,3.支付宝,4.银联)", + "comment": "", + "type": "int", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "4A77CDA9-2090-4861-AF0D-083C8661A470" + }, + { + "defKey": "pay_way_name", + "defName": "付款类型名称", + "comment": "", + "type": "nvarchar", + "len": 64, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "6F6946AC-6938-4766-AC3D-901C9D3911C3" + }, + { + "defKey": "pay_qr_code", + "defName": "被扫支付付款码(轮询查询结果时用)", + "comment": "", + "type": "varchar", + "len": 512, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "86D9ABDA-C602-4ABB-AAFC-0F2C1CCF469E" + }, + { + "defKey": "error_code", + "defName": "错误码", + "comment": "", + "type": "varchar", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "id": "D0B091E6-22B0-4E0D-9B0C-255CB8CCF120" + }, + { + "defKey": "error_msg", + "defName": "失败消息", + "comment": "", + "type": "nvarchar", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "id": "D31A28C0-5585-468C-8C94-ED37CCA635D9" + }, + { + "defKey": "open_id", + "defName": "客户识别号", + "comment": "", + "type": "varchar", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "15F7A05D-CAF2-478B-A1CE-854D90293921" + }, + { + "defKey": "sub_open_id", + "defName": "用户子标识(微信)", + "comment": "", + "type": "varchar", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "id": "8ED56900-51B3-4D3E-82E7-5F5F7E89F5DE" + } + ], + "indexes": [ + { + "defKey": "Key_1", + "unique": false, + "defName": "Key_1", + "comment": "", + "fields": [ + { + "ascOrDesc": null, + "id": "27E2B60B-000A-43B5-9921-13D27EF2CCCE", + "fieldDefKey": "BA550922-0749-41FB-B23D-6738BA5DE665" + } + ], + "id": "BFC0EC49-F132-4B03-8D91-937A34B05227" + } + ], + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "correlations": [] + }, + { + "id": "A741CFD3-2ED1-4994-997E-A5A0E2FAE0F0", + "defKey": "im_user", + "defName": "用户表", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "id", + "defName": "id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "F06C0F3B-A0F1-47EC-80E5-F57ABD41984F" + }, + { + "defKey": "status", + "defName": "状态:1.正常,2.禁用,3删除", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "ED141994-B3F8-42C8-96AE-91244E115A35" + }, + { + "defKey": "account", + "defName": "登录账号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "CC17D845-14BD-443E-B780-AC2C9FF59306", + "id": "BB5539DD-5A96-4729-AF84-205D99479F51" + }, + { + "defKey": "nickname", + "defName": "用户昵称", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "85C805F2-4AEC-4AAE-B607-415D9B4544A2" + }, + { + "defKey": "password", + "defName": "密码", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "E5070C9C-9C16-470A-98AE-82B640B1324C" + }, + { + "defKey": "phone", + "defName": "手机号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "CC17D845-14BD-443E-B780-AC2C9FF59306", + "id": "02FB8316-D443-4D08-A65C-4350B7535925" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "11E5C3FA-B5B8-4E6C-A120-78385F09D7C1" + }, + { + "defKey": "last_login_time", + "defName": "最后登录时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "A33DF9A6-5122-4CB0-95BE-57D88B09DD5C" + }, + { + "defKey": "last_active_time", + "defName": "最后活跃时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "AE4C5769-E1BE-4DE8-951E-D045A30187F9" + } + ], + "correlations": [], + "indexes": [ + { + "defKey": "idx_account_status", + "defName": null, + "unique": false, + "comment": "", + "fields": [ + { + "fieldDefKey": "BB5539DD-5A96-4729-AF84-205D99479F51", + "ascOrDesc": "A", + "id": "C8BEC04D-D87C-45DE-97C5-D03C3B7A2EB9" + }, + { + "fieldDefKey": "ED141994-B3F8-42C8-96AE-91244E115A35", + "ascOrDesc": "A", + "id": "FF7AA195-A640-4E60-B12D-6DDDD562C758" + } + ], + "id": "359FE803-740A-4200-A215-525BED9E9761" + } + ] + }, + { + "id": "2D7374DF-CFF5-46FF-BAB1-CBD3ED793F6D", + "defKey": "im_friend", + "defName": "好友关系表", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "id", + "defName": "", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "4D5EBBEB-09E6-4D73-8741-5FD759597C9D" + }, + { + "defKey": "uid", + "defName": "用户id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "9E46DCFD-99F2-4086-B8CB-DE195BA93ECD" + }, + { + "defKey": "fid", + "defName": "好友id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "E8A2D3BB-2D91-42C5-9403-FE6B103C2712" + }, + { + "defKey": "status", + "defName": "状态:0删除1正常", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "09839FE6-4295-489C-9A58-7B2FF7817DC5", + "id": "A38D6DB7-AAAB-470B-93B4-1370C52519FB" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "90EFD940-FD7F-4775-A274-4B0EE181BEE7" + } + ], + "correlations": [], + "indexes": [] + }, + { + "id": "E79C9C4C-FFC3-44BB-BD98-4F44F528B4B8", + "defKey": "im_segment_id", + "defName": "分段id", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "biz_tag", + "defName": "业务标签", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "F6D445F1-ADD3-4A28-AFDA-2606A912C007" + }, + { + "defKey": "current_id", + "defName": "当前id值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "3E9E2CBB-B458-49D5-B6DC-454A11FB9633" + }, + { + "defKey": "init_step", + "defName": "业务标签初始步长", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "38C65486-2A4E-4862-9875-EFE113FFD627" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "87279682-D6B5-4BA0-9BE5-03FC436313C9" + }, + { + "defKey": "update_time", + "defName": "更新时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "1F373AF6-4C60-4AC4-B75F-604B91AEC0C6" + }, + { + "defKey": "version", + "defName": "版本号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "D376659D-0FFA-4D1A-AA3C-0C5CBA66B41B" + } + ], + "correlations": [], + "indexes": [] + }, + { + "id": "A843E8FC-C8E8-4F0A-8EB0-C5C104BE241F", + "defKey": "im_segment_fragment", + "defName": "分段id碎片id段(id端回收)", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "id", + "defName": "主键id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": true, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "32D9CFBB-3E32-4614-B576-E0E062E8FBF6" + }, + { + "defKey": "biz_tag", + "defName": "业务标签", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "031DE904-D768-4F8B-958C-B97213421A46" + }, + { + "defKey": "min_id", + "defName": "id段最小值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "BF29BB31-2AA3-4CF3-BD29-304DA6F60F97" + }, + { + "defKey": "end_id", + "defName": "id段最大值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "27254611-5E86-4EAA-BADA-AE78CAD14528" + }, + { + "defKey": "begin_id", + "defName": "id段当前值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "BEBCA2FF-01B5-4834-8218-7F7051250C3D" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "72DD10F8-60AE-4F2A-89E1-D69C51B30849", + "id": "4989C582-86B0-4011-A3D7-A2C43FFC3F76" + }, + { + "defKey": "update_time", + "defName": "更新时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "72DD10F8-60AE-4F2A-89E1-D69C51B30849", + "id": "9DC77CD9-4006-42B2-9F63-13B309BC7BA1" + }, + { + "defKey": "version", + "defName": "版本号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "C83AAC89-59CB-49E9-8C8F-2F5796BF65FE" + } + ], + "correlations": [], + "indexes": [] + } + ], + "views": [], + "dicts": [], + "viewGroups": [], + "dataTypeMapping": { + "referURL": "", + "mappings": [ + { + "defKey": "string", + "defName": "字串", + "id": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "VARCHAR", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "VARCHAR2", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "VARCHAR", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "VARCHAR", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "VARCHAR", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "VARCHAR2", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "VARCHAR", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "VARCHAR", + "797D129F-7619-4FF3-8595-DB942D773571": "STRING", + "1E385761-67B3-4B80-A194-E302E590E54E": "String", + "F4F01E06-3181-4CCC-A561-6111A936862C": "string", + "7565A719-3C24-4064-8FEE-DC55725E9569": "TEXT" + }, + { + "defKey": "double", + "defName": "小数", + "id": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "DECIMAL", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "DECIMAL", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "DECIMAL", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "NUMERIC", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "DECIMAL", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "DECIMAL", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "NUMERIC", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "NUMERIC", + "797D129F-7619-4FF3-8595-DB942D773571": "DOUBLE", + "1E385761-67B3-4B80-A194-E302E590E54E": "Double", + "F4F01E06-3181-4CCC-A561-6111A936862C": "decimal", + "7565A719-3C24-4064-8FEE-DC55725E9569": "REAL" + }, + { + "defKey": "int", + "defName": "整数", + "id": "E522C027-26AA-45E3-9861-A78B6C658EED", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "INT", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "INT", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "INT", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "INTEGER", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "INT", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "INTEGER", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "INTEGER", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "INT4", + "797D129F-7619-4FF3-8595-DB942D773571": "INT", + "1E385761-67B3-4B80-A194-E302E590E54E": "Integer", + "F4F01E06-3181-4CCC-A561-6111A936862C": "int", + "7565A719-3C24-4064-8FEE-DC55725E9569": "INTEGER" + }, + { + "defKey": "date", + "defName": "日期", + "id": "79417FE2-7972-4A82-98C7-2EAB557884A5", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "DATETIME", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "DATE", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "DATETIME", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "DATE", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "DATE", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "DATE", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "DATE", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "DATE", + "797D129F-7619-4FF3-8595-DB942D773571": "DATETIME", + "1E385761-67B3-4B80-A194-E302E590E54E": "Date", + "F4F01E06-3181-4CCC-A561-6111A936862C": "DateTime", + "7565A719-3C24-4064-8FEE-DC55725E9569": "NUMERIC" + }, + { + "defKey": "bytes", + "defName": "二进制", + "id": "6B786A15-5962-48EC-BAC5-3D6E9882C985", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "BLOB", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "BLOB", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "VARBINARY", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "BYTEA", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "BLOB", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "BLOB", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "BYTEA", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "BYTEA", + "797D129F-7619-4FF3-8595-DB942D773571": "BINARY", + "1E385761-67B3-4B80-A194-E302E590E54E": "byte[]", + "F4F01E06-3181-4CCC-A561-6111A936862C": "byte[]", + "7565A719-3C24-4064-8FEE-DC55725E9569": "NONE" + }, + { + "defKey": "largeText", + "defName": "大文本", + "id": "852F9202-C5CB-4A9A-9064-26304FF36CF2", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "TEXT", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "CLOB", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "TEXT", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "TEXT", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "CLOB", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "CLOB", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "TEXT", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "TEXT", + "797D129F-7619-4FF3-8595-DB942D773571": "STRING", + "1E385761-67B3-4B80-A194-E302E590E54E": "String", + "F4F01E06-3181-4CCC-A561-6111A936862C": "string", + "7565A719-3C24-4064-8FEE-DC55725E9569": "TEXT" + }, + { + "defKey": "bigint", + "defName": "大整数", + "id": "4CAF2CA7-EEA7-42C2-8FF5-746D6F03D923", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "bigint", + "1E385761-67B3-4B80-A194-E302E590E54E": "Long", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "bigint" + }, + { + "defKey": "tinyint", + "defName": "小整数", + "id": "E5017FA4-F0CA-4CE5-B7E9-F59E8BD8E7BD", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "tinyint", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "tinyint", + "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542": "", + "797A1496-D649-4261-89B4-544132EC3F36": "Integer", + "1E385761-67B3-4B80-A194-E302E590E54E": "Integer", + "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "Integer", + "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "Integer", + "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30": "", + "B91D99E0-9B7C-416C-8737-B760957DAF09": "int32" + } + ] + }, + "domains": [ + { + "defKey": "DefaultString", + "defName": "默认字串", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 255, + "scale": "", + "uiHint": "", + "id": "72DD10F8-60AE-4F2A-89E1-D69C51B30849" + }, + { + "defKey": "IdOrKey", + "defName": "主键标识", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 32, + "scale": "", + "uiHint": "", + "id": "4159ACB8-2488-4350-9C3B-797336F7246E" + }, + { + "defKey": "Name", + "defName": "名称", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 90, + "scale": "", + "uiHint": "", + "id": "0EE54036-962D-4166-A613-16F67228D05C" + }, + { + "defKey": "Int", + "defName": "整数", + "applyFor": "E522C027-26AA-45E3-9861-A78B6C658EED", + "len": "", + "scale": "", + "uiHint": "", + "id": "CBE2B93C-DD97-4950-86A8-B583971583C8" + }, + { + "defKey": "Double", + "defName": "小数", + "applyFor": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", + "len": 24, + "scale": 6, + "uiHint": "", + "id": "F1708A7E-8DDE-47BA-94CC-489838C22267" + }, + { + "defKey": "Money", + "defName": "金额", + "applyFor": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", + "len": 24, + "scale": 6, + "uiHint": "", + "id": "B31176E9-883C-4F95-ACB2-3C5BD307473C" + }, + { + "defKey": "DateTime", + "defName": "日期时间", + "applyFor": "79417FE2-7972-4A82-98C7-2EAB557884A5", + "len": "", + "scale": "", + "uiHint": "", + "id": "4E3ADE61-41F4-4E74-8068-C1E543F9095C" + }, + { + "defKey": "YesNo", + "defName": "是否", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": "1", + "scale": "", + "uiHint": "", + "id": "8996EFF3-7388-4F6B-932F-4328F6B8715F" + }, + { + "defKey": "Dict", + "defName": "数据字典", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": "32", + "scale": "", + "uiHint": "", + "id": "498C9D3B-26B1-4914-9E4A-616B5D761BDE" + }, + { + "defKey": "DescText", + "defName": "描述文本", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": "900", + "scale": "", + "uiHint": "", + "id": "8FF076E7-81A9-4500-A0EA-870639178F2D" + }, + { + "defKey": "bigint", + "defName": "大整数", + "applyFor": "4CAF2CA7-EEA7-42C2-8FF5-746D6F03D923", + "len": "", + "scale": "", + "uiHint": "", + "id": "1E5537DF-B204-49BC-AC1D-457BC6DEE707" + }, + { + "defKey": "string128", + "defName": "字串128", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 128, + "scale": "", + "uiHint": "", + "id": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6" + }, + { + "defKey": "string32", + "defName": "字串32", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 32, + "scale": "", + "uiHint": "", + "id": "CC17D845-14BD-443E-B780-AC2C9FF59306" + }, + { + "defKey": "tinyint", + "defName": "小整数", + "applyFor": "E5017FA4-F0CA-4CE5-B7E9-F59E8BD8E7BD", + "len": "", + "scale": "", + "uiHint": "", + "id": "09839FE6-4295-489C-9A58-7B2FF7817DC5" + } + ], + "diagrams": [ + { + "defKey": "order_relation", + "defName": "订单结构", + "relationType": "field", + "canvasData": { + "cells": [ + { + "id": "c88a6b8d-51c1-41a1-b49e-d53af66078df", + "shape": "table", + "position": { + "x": 740, + "y": -371 + }, + "count": 0, + "originKey": "EBAD8E23-3861-4D61-82E1-0D7AA5FD8DF8" + }, + { + "id": "ec6ac74b-352b-4f0b-bc5a-8b50752aed52", + "shape": "table", + "position": { + "x": 740, + "y": 250 + }, + "count": 0, + "originKey": "28786E25-243A-4D50-9524-16CFE8B5379B" + }, + { + "id": "f2a5fa0c-0fab-485c-b85e-94c547181e27", + "shape": "table", + "position": { + "x": 740, + "y": -54 + }, + "count": 0, + "originKey": "EE84861E-D381-4596-B895-FD9B91290815" + }, + { + "id": "e5c3f06e-19ff-4fe8-99d4-007bfbd9046c", + "shape": "table", + "position": { + "x": -448, + "y": 40 + }, + "count": 0, + "originKey": "03EC19D5-A2B3-4D16-BDBE-E398A57ED86B" + }, + { + "id": "dd033551-96d7-40fd-85c5-b4a2b65d5b1b", + "shape": "erdRelation", + "source": { + "cell": "4abdd7cd-87bc-4fb0-a445-ac5b88c4a459", + "port": "58F2326B-31BF-4986-8858-28ADD0AEC5E2%out" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%in" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "bdb220ff-64d9-463d-bdf0-d48d7e9b82fe", + "shape": "erdRelation", + "source": { + "cell": "e5c3f06e-19ff-4fe8-99d4-007bfbd9046c", + "port": "6EC0C0BA-6D83-4B68-B91D-F133E1282DA3%out" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%in" + }, + "relation": "1:n", + "vertices": [], + "fillColor": "#ACDAFC" + }, + { + "id": "c02bb0f1-399d-4cd9-8c61-5c1f080a937e", + "shape": "erdRelation", + "source": { + "cell": "f2a5fa0c-0fab-485c-b85e-94c547181e27", + "port": "B82E4A03-4D7B-4B61-BDC2-ACDE048E3BB6%in" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%out" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "c089a78c-6e2d-4f8a-a869-38d966bb94cc", + "shape": "erdRelation", + "source": { + "cell": "c88a6b8d-51c1-41a1-b49e-d53af66078df", + "port": "BCAB762D-1D4D-44F8-BF8B-8ADC5737F057%in" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%out" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "f8906da8-8b2d-4745-8e11-7eb5d2230ed6", + "shape": "erdRelation", + "source": { + "cell": "ec6ac74b-352b-4f0b-bc5a-8b50752aed52", + "port": "8492DC65-9EAA-401C-A416-9C430474910E%in" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%out" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "4abdd7cd-87bc-4fb0-a445-ac5b88c4a459", + "shape": "table", + "position": { + "x": -566, + "y": -284 + }, + "count": 0, + "originKey": "C3166434-A5C0-415A-BABE-1FEBB4BB8BD6" + }, + { + "id": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "shape": "table", + "position": { + "x": 40, + "y": -287 + }, + "count": 0, + "originKey": "373ED1A7-A39C-47F4-89AF-46992DD3CA83" + } + ] + }, + "id": "2A859C63-E1E5-4778-B413-19FFADDB631B" + } + ], + "standardFields": [] +} \ No newline at end of file diff --git a/doc/db/.back_so-im/so-im-backup-2022522232938.pdma.json b/doc/db/.back_so-im/so-im-backup-2022522232938.pdma.json new file mode 100644 index 0000000..e7f77d7 --- /dev/null +++ b/doc/db/.back_so-im/so-im-backup-2022522232938.pdma.json @@ -0,0 +1,2293 @@ +{ + "name": "so-im", + "describe": "sopod-soim", + "avatar": "", + "version": "4.1.1", + "createdTime": "2022-3-7 15:11:08", + "updatedTime": "2022-5-22 23:29:35", + "profile": { + "default": { + "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", + "dbConn": "", + "entityInitFields": [ + { + "defKey": "TENANT_ID", + "defName": "租户号", + "comment": "", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "refDict": "", + "uiHint": "", + "id": "AFCBBC02-ECE9-47B0-9680-9F0494CDCB57" + }, + { + "defKey": "REVISION", + "defName": "乐观锁", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "C6E4A7AF-BD29-444B-BF64-1D2D2EC37CF0" + }, + { + "defKey": "CREATED_BY", + "defName": "创建人", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "2D4573C1-B54E-4BDF-BBD4-F4C2FD1FC8C4" + }, + { + "defKey": "CREATED_TIME", + "defName": "创建时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "7AB9290E-20AA-4A3E-97E3-96C905B496D3" + }, + { + "defKey": "UPDATED_BY", + "defName": "更新人", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "C0C6343D-A720-4EB1-835A-28F7227B036F" + }, + { + "defKey": "UPDATED_TIME", + "defName": "更新时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "FEBBEA16-0F4D-4557-95E2-278C7C127BB9" + } + ], + "entityInitProperties": {} + }, + "sql": { + "delimiter": "" + }, + "dataTypeSupports": [ + { + "defKey": "MYSQL", + "id": "8FE7C65E-40EB-41B6-B60E-79063AFF6273" + }, + { + "defKey": "JAVA_MP", + "id": "1E385761-67B3-4B80-A194-E302E590E54E" + }, + { + "defKey": "PostgreSQL", + "id": "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A" + }, + { + "defKey": "ORACLE", + "id": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542" + }, + { + "defKey": "SQLServer", + "id": "BFC87171-C74F-494A-B7C2-76B9C55FACC9" + }, + { + "defKey": "DB2", + "id": "89504F5D-94BF-4C9E-8B2E-44F37305FED5" + }, + { + "defKey": "DM", + "id": "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307" + }, + { + "defKey": "GaussDB", + "id": "592C7013-143D-4E7B-AF64-0D7BF1E28230" + }, + { + "defKey": "Kingbase", + "id": "77BD85E5-9D0D-4096-8427-CBA306FC9C6A" + }, + { + "defKey": "MaxCompute", + "id": "11D1FB71-A587-4217-89BA-611B8A1F83E0" + }, + { + "defKey": "SQLite", + "id": "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1" + }, + { + "defKey": "JAVA", + "id": "797A1496-D649-4261-89B4-544132EC3F36" + }, + { + "defKey": "JavaMybatis", + "id": "895CFD1D-4273-4D32-A2C4-CAC70200AB5B" + }, + { + "defKey": "JavaMybatisPlus", + "id": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073" + }, + { + "defKey": "C#", + "id": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30" + }, + { + "defKey": "Hive", + "id": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2" + }, + { + "defKey": "Golang", + "id": "B91D99E0-9B7C-416C-8737-B760957DAF09" + } + ], + "codeTemplates": [ + { + "type": "dbDDL", + "applyFor": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", + "isDefault": true, + "createTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};\nCREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}} {{= field.notNull ? 'NOT NULL' : '' }} {{= field.autoIncrement ? 'AUTO_INCREMENT' : '' }} {{= field.defaultValue ? it.func.join('DEFAULT',field.defaultValue,' ') : '' }} COMMENT '{{=it.func.join(field.defName,field.comment,';')}}' {{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}\n", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push('ALTER TABLE '+before.defKey+' RENAME TO '+after.defKey);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n ret.push('ALTER TABLE '+after.defKey+' COMMENT \\''+commentText+'\\'');\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldAdded) { \n let ddlItem = 'ADD COLUMN '+field.defKey+' '+field.dbType;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n if(field.autoIncrement){\n ddlItem += ' AUTO_INCREMENT';\n }\n if(field.defaultValue){\n ddlItem += (' DEFAULT' + field.defaultValue);\n }\n ddlItem += (' COMMENT \\''+field.defName+';'+field.comment+'\\'');\n \n if(field.index>0 && field.afterFieldKey){\n ddlItem += (' AFTER '+field.afterFieldKey);\n }\n ret.push(ddlItem);\n }\n return firstDDL+'\\n'+ret.join(',\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldRemoved) { \n ret.push('DROP '+field.defKey);\n }\n return firstDDL+'\\n'+ret.join(',\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey === after.defKey){\n changeDDL += (' MODIFY COLUMN '+after.defKey);\n }else{\n changeDDL += (' CHANGE COLUMN '+before.defKey+' '+after.defKey);\n }\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(field.scale)>0){\n changeDDL += (','+field.scale);\n }\n changeDDL += ')';\n }\n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n let defaultValue = '';\n if(after.defaultValue != null && after.defaultValue.length>0){\n defaultValue = (after.defaultValue);\n }else{\n defaultValue = 'NULL';\n }\n changeDDL += (' DEFAULT ' + defaultValue);\n let comment = after.comment||'';\n changeDDL += (' COMMENT \\''+comment+'\\';');\n ret.push(firstDDL+' '+changeDDL);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "type": "dbDDL", + "applyFor": "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A", + "isDefault": true, + "createTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};\nCREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' AUTO_INCREMENT' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`ALTER TABLE ${before.defKey} RENAME TO ${after.defKey}`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `COMMENT ON TABLE ${after.defKey} IS '${commentText}'`;\n ret.push(myText);\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD COLUMN ${field.defKey} ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n } \n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `COMMENT ON COLUMN ${entity.data.baseInfo.defKey}.${field.defKey} IS '${commentText}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN ${field.defKey}`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldModified) { \n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey !== after.defKey){\n let renameText = `ALTER TABLE ${entity.data.baseInfo.defKey} RENAME COLUMN ${before.defKey} TO ${after.defKey};`;\n ret.push(renameText);\n }\n /*如果没有变化,则不生成变更语句*/\n if(before.dbType === after.dbType \n && before['len'] === after['len'] \n && before.scale === after.scale\n && before.primaryKey === after.primaryKey\n && before.notNull === after.notNull\n && before.autoIncrement === after.autoIncrement\n && before.defaultValue === after.defaultValue){\n continue;\n }\n if(before.dbType !== after.dbType || before.len !== after.len || before.scale !== after.scale){\n let dbTypeDDL = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${after.defKey} TYPE ${before.dbType}`;\n if(after.len>0){\n dbTypeDDL += ('('+after.len);\n if(parseInt(after.scale)>0){\n dbTypeDDL += (','+after.scale);\n }\n dbTypeDDL += ')';\n }\n ret.push(dbTypeDDL+';');\n }\n \n if(before.defaultValue !== after.defaultValue){\n let defaultDDL = '';\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"NULL\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n defaultDDL += ('SET DEFAULT ' + defaultValue);\n }\n let defaultTpl = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${defaultDDL};`;\n ret.push(defaultTpl);\n }\n \n if(before.notNull !== after.notNull){\n let notNullDDL= 'SET NULL';\n if(after.notNull){\n let notNullDDL= 'SET NOT NULL';\n }\n let notNullTpl = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${notNullDDL};`;\n ret.push(notNullTpl);\n }\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n-- 索引重建\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "type": "appCode", + "applyFor": "1E385761-67B3-4B80-A194-E302E590E54E", + "isDefault": true, + "content": "\n$blankline\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.extension.activerecord.Model;\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport java.util.Date;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport lombok.experimental.Accessors;\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n var hours=today.getHours();\n var minutes=today.getMinutes();\n}}\n /**\n * @author : CHINER\n * @date : {{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n * @desc : {{=it.entity.defName}}{{? it.entity.comment}},{{=it.entity.comment}}{{?}}\n */\n@Data\n@EqualsAndHashCode(callSuper = true)\n@Accessors(chain = true)\n@ApiModel(value = \"{{=it.entity.defName}}\"{{? it.entity.comment}}, description = \"{{=it.entity.comment}}\"{{?}})\n@TableName(\"{{=it.entity.defKey}}\")\npublic class {{=it.func.camel(it.entity.defKey,true) }} extends Model<{{=it.func.camel(it.entity.defKey,true) }}> {\n{{~it.entity.fields:field:index}}\n $blankline\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n {{? field.primaryKey }}\n @TableId(value = \"{{=field.defKey}}\"{{? field.autoIncrement}}, type=IdType.AUTO{{?}})\n {{??}}\n @TableField(value = \"{{=field.defKey}}\")\n {{?}}\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}};\n{{~}}\n$blankline\n}\n$blankline" + }, + { + "type": "dbDDL", + "applyFor": "dictSQLTemplate", + "isDefault": true, + "content": "/* 插入字典总表[{{=it.dict.defKey}}-{{=it.dict.defName}}] */\nINSERT INTO SYS_DICT(KEY_,LABEL,INTRO,REVISION) VALUES('{{=it.dict.defKey}}','{{=it.dict.defName}}','{{=it.dict.intro}}',1);\n/* 插入字典明细表 */\n{{~it.dict.items:item:index}}\nINSERT INTO SYS_DICT_ITEM(DICT_KEY,KEY_,LABEL,SORT_,INTRO,REVISION) VALUES('{{=it.dict.defKey}}','{{=item.defKey}}','{{=item.defName}}','{{=item.sort}}','{{=item.intro}}',1);\n{{~}}" + }, + { + "applyFor": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542", + "type": "dbDDL", + "createTable": "CREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* -------------------------------------------------- */\n创建表:\n{{~ createEntities:entity}}\n {{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* -------------------------------------------------- */\n删除表:\n{{~ dropEntities:entity}}\n {{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* -------------------------------------------------- */\n修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n {{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n {{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n {{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n {{?}}{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}\n {{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('\\n\\t建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('\\n\\t解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}\n{{=indexChanged?'\\n\\t更改了索引':''}}\n{{=changed?'\\n\\t更改了属性':''}}\n{{=relaArray.length>0?relaArray.join(''):''}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`ALTER TABLE ${before.defKey} RENAME TO ${after.defKey}`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `COMMENT ON TABLE ${after.defKey} IS '${commentText}'`;\n ret.push(myText);\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD (${field.defKey} ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n ddlItem += ')';\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `COMMENT ON COLUMN ${entity.data.baseInfo.defKey}.${field.defKey} IS '${commentText}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN ${field.defKey}`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey !== after.defKey){\n let renameText = `ALTER TABLE ${entity.data.baseInfo.defKey} RENAME COLUMN ${before.defKey} TO ${after.defKey};`;\n ret.push(renameText);\n }\n /*如果没有变化,则不生成变更语句*/\n if(before.dbType === after.dbType \n && before['len'] === after['len'] \n && before.scale === after.scale\n && before.primaryKey === after.primaryKey\n && before.notNull === after.notNull\n && before.autoIncrement === after.autoIncrement\n && before.defaultValue === after.defaultValue){\n continue;\n }\n changeDDL += ('MODIFY ('+after.defKey+'');\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(field.scale)>0){\n changeDDL += (','+field.scale);\n }\n changeDDL += ')';\n }\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n changeDDL += (' DEFAULT ' + defaultValue);\n }\n \n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n changeDDL += ')';\n ret.push(`${firstDDL} ${changeDDL};`);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "applyFor": "BFC87171-C74F-494A-B7C2-76B9C55FACC9", + "type": "dbDDL", + "createTable": "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[{{=it.entity.defKey}}]') AND type in (N'U')) DROP TABLE [dbo].[{{=it.entity.defKey}}];\n\nCREATE TABLE [dbo].[{{=it.entity.defKey}}](\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' IDENTITY(1,1)' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`EXEC sp_rename '${before.defKey}','${after.defKey}'`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `IF ((SELECT COUNT(*) FROM ::fn_listextendedproperty('MS_Description','SCHEMA', 'dbo','TABLE', '${after.defKey}', NULL, NULL)) > 0)\n \\n\\tEXEC sp_updateextendedproperty 'MS_Description', '${commentText}','SCHEMA', 'dbo','TABLE', '${after.defKey}'\n \\nELSE\n \\n\\tEXEC sp_addextendedproperty 'MS_Description', '${commentText}', 'SCHEMA', 'dbo','TABLE', '${after.defKey}'\n `;\n ret.push(myText);\n /*ret.push('ALTER TABLE '+after.defKey+' COMMENT \\''+commentText+'\\'');*/\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD [${field.defKey}] ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `EXEC sp_addextendedproperty 'MS_Description', N'${commentText}','SCHEMA', N'dbo','TABLE', N'${entity.data.baseInfo.defKey}','COLUMN', N'${field.defKey}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN [${field.defKey}]`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey === after.defKey){\n changeDDL += (' ALTER COLUMN ['+after.defKey+']');\n }else{\n let renameText = `EXEC sp_rename '[dbo].[${entity.data.baseInfo.defKey}].[${before.defKey}]','${after.defKey}','COLUMN';`;\n ret.push(renameText);\n continue;\n }\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(after.scale)>0){\n changeDDL += (','+after.scale);\n }\n changeDDL += ')';\n }\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n changeDDL += (' DEFAULT ' + defaultValue);\n }\n \n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n ret.push(`${firstDDL} ${changeDDL};`);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "type": "dbDDL", + "applyFor": "89504F5D-94BF-4C9E-8B2E-44F37305FED5", + "createTable": "CREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ','('+field.defaultValue+')',' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' AUTO_INCREMENT' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}} {{= field.notNull ? 'NOT NULL' : '' }} {{= field.autoIncrement ? 'AUTOINCREMENT' : '' }} {{= field.defaultValue ? it.func.join('DEFAULT',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }} --{{=it.func.join(field.defName,field.comment,';')}}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i queryById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.queryById({{=pkVarName}}));\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n @ApiOperation(\"分页查询\")\n @GetMapping\n public ResponseEntity> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n return ResponseEntity.ok({{=serviceVarName}}.paginQuery({{=beanVarName}}, pageRequest));\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"新增数据\")\n @PostMapping\n public ResponseEntity<{{=beanClass}}> add({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.insert({{=beanVarName}}));\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"更新数据\")\n @PutMapping\n public ResponseEntity<{{=beanClass}}> edit({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.update({{=beanVarName}}));\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n @ApiOperation(\"通过主键删除数据\")\n @DeleteMapping\n public ResponseEntity deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}", + "Service": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.service;\n$blankline\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.domain.PageRequest;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务接口\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\npublic interface {{=serviceClass}}{\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n \n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest);\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} insert({{=beanClass}} {{=beanVarName}});\n\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n boolean deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "ServiceImpl": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkVarNameU = \"UndefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkVarNameU = it.func.camel(field.defKey,true);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n var mapperName = beanVarName+'Mapper';\n \n}}package {{=pkgName}}.service.impl;\n$blankline\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.domain.PageImpl;\nimport org.springframework.data.domain.PageRequest;\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.mapper.{{=beanClass}}Mapper;\nimport {{=pkgName}}.service.{{=serviceClass}};\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务实现类\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Service\npublic class {{=serviceClass}}Impl implements {{=serviceClass}}{\n @Autowired\n private {{=beanClass}}Mapper {{=mapperName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n public {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}}){\n return {{=mapperName}}.queryById({{=pkVarName}});\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n public Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n long total = {{=mapperName}}.count({{=beanVarName}});\n return new PageImpl<>({{=mapperName}}.queryAllByLimit({{=beanVarName}}, pageRequest), pageRequest, total);\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} insert({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.insert({{=beanVarName}});\n return {{=beanVarName}};\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} update({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.update({{=beanVarName}});\n return queryById({{=beanVarName}}.get{{=pkVarNameU}}());\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n public boolean deleteById({{=pkDataType}} {{=pkVarName}}){\n int total = {{=mapperName}}.deleteById({{=pkVarName}});\n return total > 0;\n }\n}", + "Mapper": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.mapper;\n$blankline\nimport java.util.List;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.data.domain.Pageable;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表数据库访问层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Mapper\npublic interface {{=beanClass}}Mapper{\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n \n /** \n * 分页查询指定行数据\n *\n * @param {{=beanVarName}} 查询条件\n * @param pageable 分页对象\n * @return 对象列表\n */\n List<{{=beanClass}}> queryAllByLimit({{=beanClass}} {{=beanVarName}}, @Param(\"pageable\") Pageable pageable);\n\n /** \n * 统计总行数\n *\n * @param {{=beanVarName}} 查询条件\n * @return 总行数\n */\n long count({{=beanClass}} {{=beanVarName}});\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 影响行数\n */\n int insert({{=beanClass}} {{=beanVarName}});\n\n /** \n * 批量新增数据\n *\n * @param entities List<{{=beanClass}}> 实例对象列表\n * @return 影响行数\n */\n int insertBatch(@Param(\"entities\") List<{{=beanClass}}> entities);\n \n /** \n * 批量新增或按主键更新数据\n *\n * @param entities List<{{=beanClass}}> 实例对象列表\n * @return 影响行数\n */\n int insertOrUpdateBatch(@Param(\"entities\") List<{{=beanClass}}> entities);\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 影响行数\n */\n int update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 影响行数\n */\n int deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "Mapper.xml": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n var pkField = \"UNDEFINED_ID\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkField = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}\n\n\n \n {{~it.entity.fields:field:index}}\n \n {{~}}\n \n $blankline\n \n \n $blankline\n \n \n $blankline\n \n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values ({{=it.entity.fields.map(function(e,i){return '#{'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n \n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n \n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n on duplicate key update\n {{=it.entity.fields.map(function(e,i){return e.defKey + '=values('+e.defKey+')'}).join(',\\n\\t\\t')}}\n \n $blankline\n \n \n update {{=it.entity.defKey}}\n \n {{~it.entity.fields:field:index}}\n \n {{=field.defKey}} = #{{{=it.func.camel(field.defKey,false)}}},\n \n {{~}}\n \n where {{=pkField}} = #{{{=pkVarName}}}\n \n $blankline\n \n \n delete from {{=it.entity.defKey}} where {{=pkField}} = #{{{=pkVarName}}}\n \n\n\n", + "Entity": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.entity;\n$blankline\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport java.io.Serializable;\nimport java.util.Date;\n$blankline\n\n /**\n * {{=it.entity.defName}};{{=it.entity.comment}}\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@ApiModel(value = \"{{=it.entity.defName}}\",description = \"{{=it.entity.comment}}\")\npublic class {{=beanClass}} implements Serializable,Cloneable{\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n @ApiModelProperty(name = \"{{=field.defName}}\",notes = \"{{=field.comment}}\")\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}} ;\n{{~}}\n$blankline\n\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public {{=field.type}} get{{=it.func.camel(field.defKey,true)}}(){\n return this.{{=it.func.camel(field.defKey,false)}};\n }\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public void set{{=it.func.camel(field.defKey,true)}}({{=field.type}} {{= it.func.camel(field.defKey,false) }}){\n this.{{=it.func.camel(field.defKey,false)}}={{=it.func.camel(field.defKey,false)}};\n }\n{{~}}\n}" + }, + { + "applyFor": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073", + "type": "appCode", + "Controller": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.controller;\n$blankline\nimport java.util.List;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.domain.PageImpl;\nimport org.springframework.data.domain.PageRequest;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.*;\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.service.{{=serviceClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表控制层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Api(tags = \"{{=it.entity.defName}}对象功能接口\")\n@RestController\n@RequestMapping(\"/{{=it.func.camel(it.entity.defKey,false)}}\")\npublic class {{=beanClass}}Controller{\n @Autowired\n private {{=serviceClass}} {{=serviceVarName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n @ApiOperation(\"通过ID查询单条数据\")\n @GetMapping(\"{{{=it.func.camel(pkVarName,false)}}}\")\n public ResponseEntity<{{=beanClass}}> queryById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.queryById({{=pkVarName}}));\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n @ApiOperation(\"分页查询\")\n @GetMapping\n public ResponseEntity> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n //1.分页参数\n long current = pageRequest.getPageNumber();\n long size = pageRequest.getPageSize();\n\n //2.分页查询\n /*把Mybatis的分页对象做封装转换,MP的分页对象上有一些SQL敏感信息,还是通过spring的分页模型来封装数据吧*/\n com.baomidou.mybatisplus.extension.plugins.pagination.Page<{{=beanClass}}> pageResult = {{=serviceVarName}}.paginQuery({{=beanVarName}}, current,size);\n\n //3. 分页结果组装\n List<{{=beanClass}}> dataList = pageResult.getRecords();\n long total = pageResult.getTotal();\n PageImpl<{{=beanClass}}> retPage = new PageImpl<{{=beanClass}}>(dataList,pageRequest,total);\n return ResponseEntity.ok(retPage);\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"新增数据\")\n @PostMapping\n public ResponseEntity<{{=beanClass}}> add({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.insert({{=beanVarName}}));\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"更新数据\")\n @PutMapping\n public ResponseEntity<{{=beanClass}}> edit({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.update({{=beanVarName}}));\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n @ApiOperation(\"通过主键删除数据\")\n @DeleteMapping\n public ResponseEntity deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}", + "Service": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.service;\n$blankline\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务接口\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\npublic interface {{=serviceClass}}{\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n $blankline\n /**\n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param current 当前页码\n * @param size 每页大小\n * @return\n */\n Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, long current, long size);\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} insert({{=beanClass}} {{=beanVarName}});\n\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n boolean deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "ServiceImpl": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkVarNameU = \"UndefinedId\";\n var pkFieldKey = \"UNDEFINED\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkFieldKey = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkVarNameU = it.func.camel(field.defKey,true);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n var mapperName = beanVarName+'Mapper';\n \n}}package {{=pkgName}}.service.impl;\n$blankline\nimport cn.hutool.core.util.StrUtil;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;\n\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.mapper.{{=beanClass}}Mapper;\nimport {{=pkgName}}.service.{{=serviceClass}};\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务实现类\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Service\npublic class {{=serviceClass}}Impl implements {{=serviceClass}}{\n @Autowired\n private {{=beanClass}}Mapper {{=mapperName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n public {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}}){\n return {{=mapperName}}.selectById({{=pkVarName}});\n }\n $blankline\n /**\n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param current 当前页码\n * @param size 每页大小\n * @return\n */\n public Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, long current, long size){\n //1. 构建动态查询条件\n LambdaQueryWrapper<{{=beanClass}}> queryWrapper = new LambdaQueryWrapper<>();\n {{~it.entity.fields.filter(function(e){return e[\"type\"]===\"String\"&&e.defKey !== pkFieldKey}):field:index}}\n if(StrUtil.isNotBlank({{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}())){\n queryWrapper.eq({{=beanClass}}::get{{=it.func.camel(field.defKey,true)}}, {{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}());\n }\n {{~}}\n\n //2. 执行分页查询\n Page<{{=beanClass}}> pagin = new Page<>(current , size , true);\n IPage<{{=beanClass}}> selectResult = {{=mapperName}}.selectByPage(pagin , queryWrapper);\n pagin.setPages(selectResult.getPages());\n pagin.setTotal(selectResult.getTotal());\n pagin.setRecords(selectResult.getRecords());\n\n //3. 返回结果\n return pagin;\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} insert({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.insert({{=beanVarName}});\n return {{=beanVarName}};\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} update({{=beanClass}} {{=beanVarName}}){\n //1. 根据条件动态更新\n LambdaUpdateChainWrapper<{{=beanClass}}> chainWrapper = new LambdaUpdateChainWrapper<{{=beanClass}}>({{=mapperName}});\n {{~it.entity.fields.filter(function(e){return e[\"type\"]===\"String\"&&e.defKey !== pkFieldKey}):field:index}}\n if(StrUtil.isNotBlank({{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}())){\n chainWrapper.eq({{=beanClass}}::get{{=it.func.camel(field.defKey,true)}}, {{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}());\n }\n {{~}}\n //2. 设置主键,并更新\n chainWrapper.set({{=beanClass}}::get{{=pkVarNameU}}, {{=beanVarName}}.get{{=pkVarNameU}}());\n boolean ret = chainWrapper.update();\n //3. 更新成功了,查询最最对象返回\n if(ret){\n return queryById({{=beanVarName}}.get{{=pkVarNameU}}());\n }else{\n return {{=beanVarName}};\n }\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n public boolean deleteById({{=pkDataType}} {{=pkVarName}}){\n int total = {{=mapperName}}.deleteById({{=pkVarName}});\n return total > 0;\n }\n}", + "Mapper": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.mapper;\n$blankline\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.Constants;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表数据库访问层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Mapper\npublic interface {{=beanClass}}Mapper extends BaseMapper<{{=beanClass}}>{\n /** \n * 分页查询指定行数据\n *\n * @param page 分页参数\n * @param wrapper 动态查询条件\n * @return 分页对象列表\n */\n IPage<{{=beanClass}}> selectByPage(IPage<{{=beanClass}}> page , @Param(Constants.WRAPPER) Wrapper<{{=beanClass}}> wrapper);\n}", + "Mapper.xml": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n var pkField = \"UNDEFINED_ID\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkField = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}\n\n$blankline\n\n\n \n\n\n", + "Entity": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.entity;\n$blankline\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport java.io.Serializable;\nimport java.util.Date;\n$blankline\n\n /**\n * {{=it.entity.defName}};{{=it.entity.comment}}\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@ApiModel(value = \"{{=it.entity.defName}}\",description = \"{{=it.entity.comment}}\")\n@TableName(\"{{=it.entity.defKey}}\")\npublic class {{=beanClass}} implements Serializable,Cloneable{\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n @ApiModelProperty(name = \"{{=field.defName}}\",notes = \"{{=field.comment}}\")\n {{? field.primaryKey }}\n @TableId\n {{?}}\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}} ;\n{{~}}\n$blankline\n\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public {{=field.type}} get{{=it.func.camel(field.defKey,true)}}(){\n return this.{{=it.func.camel(field.defKey,false)}};\n }\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public void set{{=it.func.camel(field.defKey,true)}}({{=field.type}} {{= it.func.camel(field.defKey,false) }}){\n this.{{=it.func.camel(field.defKey,false)}}={{=it.func.camel(field.defKey,false)}};\n }\n{{~}}\n}" + }, + { + "type": "appCode", + "applyFor": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30", + "Default": "using System;\nusing System.Collections.Generic;\n\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n}}\n/*\n * @author : http://www.chiner.com.cn\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n * @desc : {{=it.func.join(it.entity.defName,it.entity.comment,'-')}}\n */\nnamespace PDManer.Application\n{\n public partial class {{=it.func.camel(it.entity.defKey,true) }}\n {\n \n {{~it.entity.fields:field:index}}\n /// \n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// \n public {{=field.type}} {{=it.func.camel(field.defKey,true)}} { get; set; }\n $blankline\n {{~}}\n \n }\n}", + "SqlSugar": "using System;\nusing System.Collections.Generic;\nusing SqlSugar;\n\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n var sqlSugartable='[SugarTable(\"{{=it.entity.defKey}}\", TableDescription = \"{{=it.func.join(it.entity.defName,it.entity.comment,';')}}\")]';\n}}\n/*\n * @author : xkdong@163.com\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n * @desc : {{=it.func.join(it.entity.defName,it.entity.comment,'-')}}\n */\nnamespace Model.DBModel\n{\n /// \n /// {{=it.func.join(it.entity.defName,it.entity.comment,';')}}\n /// \n {{=sqlSugartable}}\n public class {{=it.entity.defKey}}\n {\n {{~it.entity.fields:field:index}}\n /// \n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// \n {{? field.primaryKey }}\n [SugarColumn(IsIdentity = true, IsPrimaryKey = true)]\n {{?}}\n public {{=field.type}} {{=it.func.camel(field.defKey,true)}}{ get; set; }\n $blankline\n {{~}}\n }\n}" + }, + { + "applyFor": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2", + "type": "dbDDL", + "createTable": "/**字段名,关键字等全部用的小写*/\ndrop table if exists {{=it.entity.defKey}};\n/**补充上库名,external关键字根据建表规范看是否添加*/\ncreate [external] table if not exists {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n/**这里把varchar,char,text,date,datetime字段全部映射为string类型.tinyint unsigned,bit,Integer,tinyint,smallint,mediumint映射为int类型,int unsigned映射为bigint.其它自定义映射规则根据自己情况修改*/\n/**当长度>0只有为decimal类型或double类型时才保留长度和小数的位数*/\n{{~it.entity.fields:field:index}}\n {{=it.func.lowerCase(field.defKey)}} {{=it.func.lowerCase(field.dbType)=='varchar'||it.func.lowerCase(field.dbType)=='char'||it.func.lowerCase(field.dbType)=='text'||it.func.lowerCase(field.dbType)=='date'||it.func.lowerCase(field.dbType)=='datetime' ? 'string':it.func.lowerCase(field.dbType)=='tinyint unsigned'||it.func.lowerCase(field.dbType)=='bit'||it.func.lowerCase(field.dbType)=='integer'||it.func.lowerCase(field.dbType)=='tinyint'||it.func.lowerCase(field.dbType)=='smallint'||it.func.lowerCase(field.dbType)=='mediumint' ? 'int':it.func.lowerCase(field.dbType)=='int unsigned' ? 'bigint':it.func.lowerCase(field.dbType)}}{{?field.len>0&&(it.func.lowerCase(field.dbType)=='decimal'||it.func.lowerCase(field.dbType)=='double')}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{=')'}}{{?}}{{?}} comment '{{=it.func.join(field.defName,field.comment,'')}}' {{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n{{?}}\n)\n{{\n let partitionedBy = it.entity.properties['partitioned by'];\n partitionedBy = partitionedBy?partitionedBy:'请在扩展属性中配置[partitioned by]属性';\n}}\ncomment '{{=it.func.join(it.entity.defName,';') }}'\n/**是否分区表,分区字段名和字段注释自定义*/\n[partitioned by {{=partitionedBy}}]\n/**文件存储格式自定义*/\n[stored as orc]\n/**hdfs上的地址自定义*/\n[location xxx]\n;", + "createView": "", + "deleteTable": "", + "createIndex": "", + "deleteIndex": "", + "message": "", + "update": "" + }, + { + "applyFor": "B91D99E0-9B7C-416C-8737-B760957DAF09", + "type": "appCode", + "content": "{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1<10?\"0\"+today.getMonth():today.getMonth();\n var days=today.getDate()<10?\"0\"+today.getDate():today.getDate();\n var hours = today.getHours()<10?\"0\"+today.getHours():today.getHours(); \n\tvar minutes = today.getMinutes()<10?\"0\"+today.getMinutes():today.getMinutes(); \n\tvar seconds = today.getSeconds()<10?\"0\"+today.getSeconds():today.getSeconds(); \n}}\n// Package models {{=it.func.join(it.entity.defName,it.entity.comment,',')}}\n// author : http://www.liyang.love\n// date : {{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n// desc : {{=it.func.join(it.entity.defName,it.entity.comment,',')}}\npackage models\n\n$blankline\n\n// {{=it.func.camel(it.entity.defKey,true) }} {{=it.func.join(it.entity.defName,it.entity.comment,',')}}。\n// 说明:{{=it.entity.comment}}\n// 表名:{{=it.entity.defKey}}\n// group: {{=it.func.camel(it.entity.defKey,true) }}\n// obsolete:\n// appliesto:go 1.8+;\n// namespace:hongmouer.his.models.{{=it.func.camel(it.entity.defKey,true) }}\n// assembly: hongmouer.his.models.go\n// class:HongMouer.HIS.Models.{{=it.func.camel(it.entity.defKey,true) }}\n// version:{{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\ntype {{=it.func.camel(it.entity.defKey,true) }} struct {\n {{~it.entity.fields:field:index}}\n {{=formatGoLang(it.func.camel(field.defKey,true),null,field,it.entity.fields,null,1)}} {{=formatGoLang(field.type,\"type\",field,it.entity.fields,10,3)}} `gorm:\"column:{{=field.primaryKey?\"primaryKey;\":\"\"}}{{=field.defKey}}\" json:\"{{=it.func.camel(field.defKey,true)}}\"` {{=formatGoLang(\"gorm:column:\"+field.defKey+\" json:\"+it.func.camel(field.defKey,true),null,field,it.entity.fields,null,2)}} //type:{{=formatGoLang(field.type,\"type\",field,it.entity.fields,null,3)}} comment:{{=formatGoLang(it.func.join(field.defName,field.comment,';'),\"defName\",field,it.entity.fields,null,4)}} version:{{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n {{~}}\n}\n\n\n$blankline\n// TableName 表名:{{=it.entity.defKey}},{{=it.entity.defName}}。\n// 说明:{{=it.entity.comment}}\nfunc (ZentaoUserInfo) TableName() string {\n\treturn \"{{=it.entity.defKey}}\"\n}\n\n{{\n\nfunction formatGoLang(str, fieldName, field, fileds, emptLength, isFiled) {\n var maxLength = 0;\n\n if (isFiled == 1) {\n for (var i = 0; i < fileds.length; i++) {\n if (getBlength(it.func.camel(fileds[i].defKey, true)) > maxLength) {\n maxLength = getBlength(it.func.camel(fileds[i].defKey, true)) + 2;\n }\n }\n } else if (isFiled == 2) {\n for (var i = 0; i < fileds.length; i++) {\n var newStr = \"gorm:column:\" + fileds[i].defKey + \" json:\" + it.func.camel(fileds[i].defKey, true);\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 2;\n }\n }\n var empt = \"\";\n var strLength = getBlength(str);\n if (field.primaryKey) {\n strLength += getBlength(\"primaryKey;\");\n }\n for (var j = 0; j < maxLength - strLength; j++) {\n empt += ' ';\n }\n return empt;\n } else if (isFiled == 3) {\n /*获取某个字段的最大长度*/\n for (var i = 0; i < fileds.length; i++) {\n var newStr = eval(\"fileds[\" + i + \"].\" + fieldName);\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 1;\n }\n }\n } else if (isFiled == 4) {\n /*获取某个字段的最大长度*/\n for (var i = 0; i < fileds.length; i++) {\n var newStr = fileds[i].comment + \";\" + fileds[i].defName;\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 1;\n }\n }\n }\n else {\n maxLength = emptLength;\n }\n\n var strLength = getBlength(str);\n for (var j = 0; j < maxLength - strLength; j++) {\n str += ' ';\n }\n return str;\n}\n\nfunction getBlength(str) {\n var n = 0;\n for (var i = str.length; i--;) {\n n += str.charCodeAt(i) > 255 ? 2 : 1;\n }\n return n;\n} \n\n}}" + } + ], + "generatorDoc": { + "docTemplate": "" + }, + "relationFieldSize": 30, + "uiHint": [ + { + "defKey": "Input", + "defName": "普通输入框", + "id": "6DD45F73-AE5E-426A-9C51-7E6CFABE23F6" + }, + { + "defKey": "Select", + "defName": "下拉输入框", + "id": "A1EA6B0B-E0EC-4A2A-8B22-9B7522DE1F0E" + }, + { + "defKey": "CheckBox", + "defName": "复选框", + "id": "8AD07131-FDFB-4932-B4EF-20FDA92C6F04" + }, + { + "defKey": "RadioBox", + "defName": "单选框", + "id": "3A4C23CC-E68F-43F9-97C1-7307AA638D1F" + }, + { + "defKey": "Double", + "defName": "小数输入", + "id": "33B230A9-C60E-417D-8C35-EE9130EE3D1D" + }, + { + "defKey": "Integer", + "defName": "整数输入", + "id": "2AFFF582-7624-4CE1-A6A8-A88BB0E5EBBF" + }, + { + "defKey": "Money", + "defName": "金额输入", + "id": "5E216947-0E7F-4488-95EB-6F6A51F49D96" + }, + { + "defKey": "Date", + "defName": "日期输入", + "id": "97980CB0-93F7-477C-A744-31D81A76CF06" + }, + { + "defKey": "DataYearMonth", + "defName": "年月输入", + "id": "6B1ACA65-DD29-4886-BC28-4E032FA6A63B" + }, + { + "defKey": "Text", + "defName": "长文本输入", + "id": "FCBB76EC-4E91-4C9A-A24C-8C1BC98A8C4B" + }, + { + "defKey": "RichText", + "defName": "富文本输入", + "id": "9965DCFB-54BE-4C5A-9518-DF09D4E58140" + } + ], + "menuWidth": "244px", + "headers": [ + { + "refKey": "defKey", + "hideInGraph": false + }, + { + "refKey": "defName", + "hideInGraph": false + }, + { + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "refKey": "notNull", + "hideInGraph": true + }, + { + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "refKey": "domain", + "hideInGraph": true + }, + { + "refKey": "type", + "hideInGraph": false + }, + { + "refKey": "len", + "hideInGraph": false + }, + { + "refKey": "scale", + "hideInGraph": false + }, + { + "refKey": "comment", + "hideInGraph": true + }, + { + "refKey": "refDict", + "hideInGraph": true + }, + { + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "refKey": "isStandard", + "hideInGraph": false + }, + { + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true + } + ] + }, + "entities": [ + { + "id": "373ED1A7-A39C-47F4-89AF-46992DD3CA83", + "defKey": "t_w_water_order", + "defName": "订单信息", + "comment": "", + "properties": {}, + "fields": [ + { + "rowNo": 1, + "defKey": "order_no", + "defName": "系统订单号", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "varchar", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "varchar(32)", + "primaryKeyName": "√", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "BA550922-0749-41FB-B23D-6738BA5DE665" + }, + { + "rowNo": 2, + "defKey": "order_type", + "defName": "订单类型(type=1加价费订单 )", + "comment": "", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "type": "int", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "int", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "7F07DB81-F6C1-4391-B672-B9A519870619" + }, + { + "defKey": "ref_id", + "defName": "关联编号(缴费数据)", + "comment": "", + "type": "VARCHAR", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "", + "id": "F41FE343-C68D-461C-B0CF-53D7AD321957" + }, + { + "defKey": "prod_name", + "defName": "商品名称", + "comment": "", + "type": "NVARCHAR", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "", + "id": "92D8161F-42EE-468B-84BD-4EC3F7211088" + }, + { + "rowNo": 3, + "defKey": "order_money", + "defName": "订单金额", + "comment": "", + "domain": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "decimal(12,2)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "FA153E93-8959-42A0-B98A-FF4320A82778" + }, + { + "rowNo": 4, + "defKey": "pay_money", + "defName": "实付金额", + "comment": "", + "domain": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "decimal(12,2)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "52F3B778-6F28-41FB-ADF8-8FA99CEF5617" + }, + { + "rowNo": 5, + "defKey": "refund_money", + "defName": "实退金额", + "comment": "", + "domain": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "decimal(12,2)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "82EA738A-9499-43FD-A173-09B9CA81885D" + }, + { + "rowNo": 6, + "defKey": "status", + "defName": "账单状态(1待支付,2已支付,3已取消,4已退款,5部分退款)", + "comment": "", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "type": "int", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "int", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "D7A34977-ED3D-47B4-9472-D4644E297580" + }, + { + "defKey": "pay_status", + "defName": "付款状态(0.已失败,1.未付款,2.已付款,3.不确定待查询,4.待轮询)", + "comment": "", + "type": "int", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "8AB0F3E7-409D-49F0-90C8-2135A6A37F29" + }, + { + "defKey": "trade_id", + "defName": "建行交易流水号", + "comment": "", + "type": "VARCHAR", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "", + "id": "4E49B24A-3074-494E-B72A-40B7C0D4D857" + }, + { + "rowNo": 7, + "defKey": "platform_pay_no", + "defName": "支付平台流水号(wx/alipay)", + "comment": "", + "domain": "", + "type": "varchar", + "len": 64, + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "varchar(64)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "B4044C3A-E17D-415C-BBAC-7A58A2140985" + }, + { + "rowNo": 8, + "defKey": "pay_time", + "defName": "支付完成时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "datetime", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "datetime", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "497A89D1-ED7C-46D9-BE21-D938BCEAE58D" + }, + { + "rowNo": 9, + "defKey": "refund_time", + "defName": "退款完成时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "datetime", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "datetime", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "CAEDF742-75BA-4F45-8BA1-18348557AECC" + }, + { + "rowNo": 10, + "defKey": "create_time", + "defName": "订单创建时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "datetime", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "datetime", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "E9736BCA-55FA-42A2-AFA6-CAA5EC355901" + }, + { + "rowNo": 11, + "defKey": "remark", + "defName": "订单备注", + "comment": "", + "domain": "", + "type": "nvarchar", + "len": 32, + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "nvarchar(32)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "B1548CA2-84D2-4E64-AEA8-BA825F6E5AFF" + }, + { + "defKey": "receipt_money", + "defName": "平台实收金额", + "comment": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "4A752610-041F-4A72-8FBE-27137257757B" + }, + { + "defKey": "charge_money", + "defName": "手续费(实付减实收)", + "comment": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "864F6CE2-3491-47FE-A26D-2D522D235137" + }, + { + "defKey": "third_trade_no", + "defName": "第三方订单号(支付宝/微信)", + "comment": "", + "type": "varchar", + "len": 100, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "id": "06F2B2D8-F4C8-4E9C-B63B-C0DE404E9194" + }, + { + "defKey": "pay_channel", + "defName": "支付渠道(按支付方式查询详情)", + "comment": "", + "type": "varchar", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "id": "405632DF-3944-4756-BC6D-131754E43049" + }, + { + "defKey": "pay_channel_name", + "defName": "支付渠道名称", + "comment": "", + "type": "nvarchar", + "len": 64, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "C5B92F02-496D-4BBB-94B8-788B9D32F20C" + }, + { + "defKey": "pay_way", + "defName": "付款方式(1.龙支付,2.微信,3.支付宝,4.银联)", + "comment": "", + "type": "int", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "4A77CDA9-2090-4861-AF0D-083C8661A470" + }, + { + "defKey": "pay_way_name", + "defName": "付款类型名称", + "comment": "", + "type": "nvarchar", + "len": 64, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "6F6946AC-6938-4766-AC3D-901C9D3911C3" + }, + { + "defKey": "pay_qr_code", + "defName": "被扫支付付款码(轮询查询结果时用)", + "comment": "", + "type": "varchar", + "len": 512, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "86D9ABDA-C602-4ABB-AAFC-0F2C1CCF469E" + }, + { + "defKey": "error_code", + "defName": "错误码", + "comment": "", + "type": "varchar", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "id": "D0B091E6-22B0-4E0D-9B0C-255CB8CCF120" + }, + { + "defKey": "error_msg", + "defName": "失败消息", + "comment": "", + "type": "nvarchar", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "id": "D31A28C0-5585-468C-8C94-ED37CCA635D9" + }, + { + "defKey": "open_id", + "defName": "客户识别号", + "comment": "", + "type": "varchar", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "15F7A05D-CAF2-478B-A1CE-854D90293921" + }, + { + "defKey": "sub_open_id", + "defName": "用户子标识(微信)", + "comment": "", + "type": "varchar", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "id": "8ED56900-51B3-4D3E-82E7-5F5F7E89F5DE" + } + ], + "indexes": [ + { + "defKey": "Key_1", + "unique": false, + "defName": "Key_1", + "comment": "", + "fields": [ + { + "ascOrDesc": null, + "id": "27E2B60B-000A-43B5-9921-13D27EF2CCCE", + "fieldDefKey": "BA550922-0749-41FB-B23D-6738BA5DE665" + } + ], + "id": "BFC0EC49-F132-4B03-8D91-937A34B05227" + } + ], + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "correlations": [] + }, + { + "id": "A741CFD3-2ED1-4994-997E-A5A0E2FAE0F0", + "defKey": "im_user", + "defName": "用户表", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "id", + "defName": "id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "F06C0F3B-A0F1-47EC-80E5-F57ABD41984F" + }, + { + "defKey": "status", + "defName": "状态:1.正常,2.禁用,3删除", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "ED141994-B3F8-42C8-96AE-91244E115A35" + }, + { + "defKey": "account", + "defName": "登录账号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "CC17D845-14BD-443E-B780-AC2C9FF59306", + "id": "BB5539DD-5A96-4729-AF84-205D99479F51" + }, + { + "defKey": "nickname", + "defName": "用户昵称", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "85C805F2-4AEC-4AAE-B607-415D9B4544A2" + }, + { + "defKey": "password", + "defName": "密码", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "E5070C9C-9C16-470A-98AE-82B640B1324C" + }, + { + "defKey": "phone", + "defName": "手机号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "CC17D845-14BD-443E-B780-AC2C9FF59306", + "id": "02FB8316-D443-4D08-A65C-4350B7535925" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "11E5C3FA-B5B8-4E6C-A120-78385F09D7C1" + }, + { + "defKey": "last_login_time", + "defName": "最后登录时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "A33DF9A6-5122-4CB0-95BE-57D88B09DD5C" + }, + { + "defKey": "last_active_time", + "defName": "最后活跃时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "AE4C5769-E1BE-4DE8-951E-D045A30187F9" + } + ], + "correlations": [], + "indexes": [ + { + "defKey": "idx_account_status", + "defName": null, + "unique": false, + "comment": "", + "fields": [ + { + "fieldDefKey": "BB5539DD-5A96-4729-AF84-205D99479F51", + "ascOrDesc": "A", + "id": "C8BEC04D-D87C-45DE-97C5-D03C3B7A2EB9" + }, + { + "fieldDefKey": "ED141994-B3F8-42C8-96AE-91244E115A35", + "ascOrDesc": "A", + "id": "FF7AA195-A640-4E60-B12D-6DDDD562C758" + } + ], + "id": "359FE803-740A-4200-A215-525BED9E9761" + } + ] + }, + { + "id": "2D7374DF-CFF5-46FF-BAB1-CBD3ED793F6D", + "defKey": "im_friend", + "defName": "好友关系表", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "id", + "defName": "", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "4D5EBBEB-09E6-4D73-8741-5FD759597C9D" + }, + { + "defKey": "uid", + "defName": "用户id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "9E46DCFD-99F2-4086-B8CB-DE195BA93ECD" + }, + { + "defKey": "fid", + "defName": "好友id", + "comment": "", + "type": "bigint", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "", + "id": "E8A2D3BB-2D91-42C5-9403-FE6B103C2712" + }, + { + "defKey": "status", + "defName": "状态:0删除1正常", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "09839FE6-4295-489C-9A58-7B2FF7817DC5", + "id": "A38D6DB7-AAAB-470B-93B4-1370C52519FB" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "90EFD940-FD7F-4775-A274-4B0EE181BEE7" + } + ], + "correlations": [], + "indexes": [] + }, + { + "id": "E79C9C4C-FFC3-44BB-BD98-4F44F528B4B8", + "defKey": "im_segment_id", + "defName": "分段id", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "biz_tag", + "defName": "业务标签", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "F6D445F1-ADD3-4A28-AFDA-2606A912C007" + }, + { + "defKey": "current_id", + "defName": "当前id值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "3E9E2CBB-B458-49D5-B6DC-454A11FB9633" + }, + { + "defKey": "init_step", + "defName": "业务标签初始步长", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "38C65486-2A4E-4862-9875-EFE113FFD627" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "87279682-D6B5-4BA0-9BE5-03FC436313C9" + }, + { + "defKey": "update_time", + "defName": "更新时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "1F373AF6-4C60-4AC4-B75F-604B91AEC0C6" + }, + { + "defKey": "version", + "defName": "版本号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "D376659D-0FFA-4D1A-AA3C-0C5CBA66B41B" + } + ], + "correlations": [], + "indexes": [] + }, + { + "id": "A843E8FC-C8E8-4F0A-8EB0-C5C104BE241F", + "defKey": "im_segment_fragment", + "defName": "分段id碎片id段(id端回收)", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "id", + "defName": "主键id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": true, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "32D9CFBB-3E32-4614-B576-E0E062E8FBF6" + }, + { + "defKey": "biz_tag", + "defName": "业务标签", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "031DE904-D768-4F8B-958C-B97213421A46" + }, + { + "defKey": "min_id", + "defName": "id段最小值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "BF29BB31-2AA3-4CF3-BD29-304DA6F60F97" + }, + { + "defKey": "end_id", + "defName": "id段最大值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "27254611-5E86-4EAA-BADA-AE78CAD14528" + }, + { + "defKey": "begin_id", + "defName": "id段当前值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "BEBCA2FF-01B5-4834-8218-7F7051250C3D" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "72DD10F8-60AE-4F2A-89E1-D69C51B30849", + "id": "4989C582-86B0-4011-A3D7-A2C43FFC3F76" + }, + { + "defKey": "update_time", + "defName": "更新时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "72DD10F8-60AE-4F2A-89E1-D69C51B30849", + "id": "9DC77CD9-4006-42B2-9F63-13B309BC7BA1" + }, + { + "defKey": "version", + "defName": "版本号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "C83AAC89-59CB-49E9-8C8F-2F5796BF65FE" + } + ], + "correlations": [], + "indexes": [] + } + ], + "views": [], + "dicts": [], + "viewGroups": [], + "dataTypeMapping": { + "referURL": "", + "mappings": [ + { + "defKey": "string", + "defName": "字串", + "id": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "VARCHAR", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "VARCHAR2", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "VARCHAR", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "VARCHAR", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "VARCHAR", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "VARCHAR2", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "VARCHAR", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "VARCHAR", + "797D129F-7619-4FF3-8595-DB942D773571": "STRING", + "1E385761-67B3-4B80-A194-E302E590E54E": "String", + "F4F01E06-3181-4CCC-A561-6111A936862C": "string", + "7565A719-3C24-4064-8FEE-DC55725E9569": "TEXT" + }, + { + "defKey": "double", + "defName": "小数", + "id": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "DECIMAL", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "DECIMAL", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "DECIMAL", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "NUMERIC", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "DECIMAL", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "DECIMAL", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "NUMERIC", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "NUMERIC", + "797D129F-7619-4FF3-8595-DB942D773571": "DOUBLE", + "1E385761-67B3-4B80-A194-E302E590E54E": "Double", + "F4F01E06-3181-4CCC-A561-6111A936862C": "decimal", + "7565A719-3C24-4064-8FEE-DC55725E9569": "REAL" + }, + { + "defKey": "int", + "defName": "整数", + "id": "E522C027-26AA-45E3-9861-A78B6C658EED", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "INT", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "INT", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "INT", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "INTEGER", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "INT", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "INTEGER", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "INTEGER", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "INT4", + "797D129F-7619-4FF3-8595-DB942D773571": "INT", + "1E385761-67B3-4B80-A194-E302E590E54E": "Integer", + "F4F01E06-3181-4CCC-A561-6111A936862C": "int", + "7565A719-3C24-4064-8FEE-DC55725E9569": "INTEGER" + }, + { + "defKey": "date", + "defName": "日期", + "id": "79417FE2-7972-4A82-98C7-2EAB557884A5", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "DATETIME", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "DATE", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "DATETIME", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "DATE", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "DATE", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "DATE", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "DATE", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "DATE", + "797D129F-7619-4FF3-8595-DB942D773571": "DATETIME", + "1E385761-67B3-4B80-A194-E302E590E54E": "Date", + "F4F01E06-3181-4CCC-A561-6111A936862C": "DateTime", + "7565A719-3C24-4064-8FEE-DC55725E9569": "NUMERIC" + }, + { + "defKey": "bytes", + "defName": "二进制", + "id": "6B786A15-5962-48EC-BAC5-3D6E9882C985", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "BLOB", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "BLOB", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "VARBINARY", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "BYTEA", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "BLOB", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "BLOB", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "BYTEA", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "BYTEA", + "797D129F-7619-4FF3-8595-DB942D773571": "BINARY", + "1E385761-67B3-4B80-A194-E302E590E54E": "byte[]", + "F4F01E06-3181-4CCC-A561-6111A936862C": "byte[]", + "7565A719-3C24-4064-8FEE-DC55725E9569": "NONE" + }, + { + "defKey": "largeText", + "defName": "大文本", + "id": "852F9202-C5CB-4A9A-9064-26304FF36CF2", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "TEXT", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "CLOB", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "TEXT", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "TEXT", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "CLOB", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "CLOB", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "TEXT", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "TEXT", + "797D129F-7619-4FF3-8595-DB942D773571": "STRING", + "1E385761-67B3-4B80-A194-E302E590E54E": "String", + "F4F01E06-3181-4CCC-A561-6111A936862C": "string", + "7565A719-3C24-4064-8FEE-DC55725E9569": "TEXT" + }, + { + "defKey": "bigint", + "defName": "大整数", + "id": "4CAF2CA7-EEA7-42C2-8FF5-746D6F03D923", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "bigint", + "1E385761-67B3-4B80-A194-E302E590E54E": "Long", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "bigint" + }, + { + "defKey": "tinyint", + "defName": "小整数", + "id": "E5017FA4-F0CA-4CE5-B7E9-F59E8BD8E7BD", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "tinyint", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "tinyint", + "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542": "", + "797A1496-D649-4261-89B4-544132EC3F36": "Integer", + "1E385761-67B3-4B80-A194-E302E590E54E": "Integer", + "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "Integer", + "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "Integer", + "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30": "", + "B91D99E0-9B7C-416C-8737-B760957DAF09": "int32" + } + ] + }, + "domains": [ + { + "defKey": "DefaultString", + "defName": "默认字串", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 255, + "scale": "", + "uiHint": "", + "id": "72DD10F8-60AE-4F2A-89E1-D69C51B30849" + }, + { + "defKey": "IdOrKey", + "defName": "主键标识", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 32, + "scale": "", + "uiHint": "", + "id": "4159ACB8-2488-4350-9C3B-797336F7246E" + }, + { + "defKey": "Name", + "defName": "名称", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 90, + "scale": "", + "uiHint": "", + "id": "0EE54036-962D-4166-A613-16F67228D05C" + }, + { + "defKey": "Int", + "defName": "整数", + "applyFor": "E522C027-26AA-45E3-9861-A78B6C658EED", + "len": "", + "scale": "", + "uiHint": "", + "id": "CBE2B93C-DD97-4950-86A8-B583971583C8" + }, + { + "defKey": "Double", + "defName": "小数", + "applyFor": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", + "len": 24, + "scale": 6, + "uiHint": "", + "id": "F1708A7E-8DDE-47BA-94CC-489838C22267" + }, + { + "defKey": "Money", + "defName": "金额", + "applyFor": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", + "len": 24, + "scale": 6, + "uiHint": "", + "id": "B31176E9-883C-4F95-ACB2-3C5BD307473C" + }, + { + "defKey": "DateTime", + "defName": "日期时间", + "applyFor": "79417FE2-7972-4A82-98C7-2EAB557884A5", + "len": "", + "scale": "", + "uiHint": "", + "id": "4E3ADE61-41F4-4E74-8068-C1E543F9095C" + }, + { + "defKey": "YesNo", + "defName": "是否", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": "1", + "scale": "", + "uiHint": "", + "id": "8996EFF3-7388-4F6B-932F-4328F6B8715F" + }, + { + "defKey": "Dict", + "defName": "数据字典", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": "32", + "scale": "", + "uiHint": "", + "id": "498C9D3B-26B1-4914-9E4A-616B5D761BDE" + }, + { + "defKey": "DescText", + "defName": "描述文本", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": "900", + "scale": "", + "uiHint": "", + "id": "8FF076E7-81A9-4500-A0EA-870639178F2D" + }, + { + "defKey": "bigint", + "defName": "大整数", + "applyFor": "4CAF2CA7-EEA7-42C2-8FF5-746D6F03D923", + "len": "", + "scale": "", + "uiHint": "", + "id": "1E5537DF-B204-49BC-AC1D-457BC6DEE707" + }, + { + "defKey": "string128", + "defName": "字串128", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 128, + "scale": "", + "uiHint": "", + "id": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6" + }, + { + "defKey": "string32", + "defName": "字串32", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 32, + "scale": "", + "uiHint": "", + "id": "CC17D845-14BD-443E-B780-AC2C9FF59306" + }, + { + "defKey": "tinyint", + "defName": "小整数", + "applyFor": "E5017FA4-F0CA-4CE5-B7E9-F59E8BD8E7BD", + "len": "", + "scale": "", + "uiHint": "", + "id": "09839FE6-4295-489C-9A58-7B2FF7817DC5" + } + ], + "diagrams": [ + { + "defKey": "order_relation", + "defName": "订单结构", + "relationType": "field", + "canvasData": { + "cells": [ + { + "id": "c88a6b8d-51c1-41a1-b49e-d53af66078df", + "shape": "table", + "position": { + "x": 740, + "y": -371 + }, + "count": 0, + "originKey": "EBAD8E23-3861-4D61-82E1-0D7AA5FD8DF8" + }, + { + "id": "ec6ac74b-352b-4f0b-bc5a-8b50752aed52", + "shape": "table", + "position": { + "x": 740, + "y": 250 + }, + "count": 0, + "originKey": "28786E25-243A-4D50-9524-16CFE8B5379B" + }, + { + "id": "f2a5fa0c-0fab-485c-b85e-94c547181e27", + "shape": "table", + "position": { + "x": 740, + "y": -54 + }, + "count": 0, + "originKey": "EE84861E-D381-4596-B895-FD9B91290815" + }, + { + "id": "e5c3f06e-19ff-4fe8-99d4-007bfbd9046c", + "shape": "table", + "position": { + "x": -448, + "y": 40 + }, + "count": 0, + "originKey": "03EC19D5-A2B3-4D16-BDBE-E398A57ED86B" + }, + { + "id": "dd033551-96d7-40fd-85c5-b4a2b65d5b1b", + "shape": "erdRelation", + "source": { + "cell": "4abdd7cd-87bc-4fb0-a445-ac5b88c4a459", + "port": "58F2326B-31BF-4986-8858-28ADD0AEC5E2%out" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%in" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "bdb220ff-64d9-463d-bdf0-d48d7e9b82fe", + "shape": "erdRelation", + "source": { + "cell": "e5c3f06e-19ff-4fe8-99d4-007bfbd9046c", + "port": "6EC0C0BA-6D83-4B68-B91D-F133E1282DA3%out" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%in" + }, + "relation": "1:n", + "vertices": [], + "fillColor": "#ACDAFC" + }, + { + "id": "c02bb0f1-399d-4cd9-8c61-5c1f080a937e", + "shape": "erdRelation", + "source": { + "cell": "f2a5fa0c-0fab-485c-b85e-94c547181e27", + "port": "B82E4A03-4D7B-4B61-BDC2-ACDE048E3BB6%in" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%out" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "c089a78c-6e2d-4f8a-a869-38d966bb94cc", + "shape": "erdRelation", + "source": { + "cell": "c88a6b8d-51c1-41a1-b49e-d53af66078df", + "port": "BCAB762D-1D4D-44F8-BF8B-8ADC5737F057%in" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%out" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "f8906da8-8b2d-4745-8e11-7eb5d2230ed6", + "shape": "erdRelation", + "source": { + "cell": "ec6ac74b-352b-4f0b-bc5a-8b50752aed52", + "port": "8492DC65-9EAA-401C-A416-9C430474910E%in" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%out" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "4abdd7cd-87bc-4fb0-a445-ac5b88c4a459", + "shape": "table", + "position": { + "x": -566, + "y": -284 + }, + "count": 0, + "originKey": "C3166434-A5C0-415A-BABE-1FEBB4BB8BD6" + }, + { + "id": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "shape": "table", + "position": { + "x": 40, + "y": -287 + }, + "count": 0, + "originKey": "373ED1A7-A39C-47F4-89AF-46992DD3CA83" + } + ] + }, + "id": "2A859C63-E1E5-4778-B413-19FFADDB631B" + } + ], + "standardFields": [] +} \ No newline at end of file diff --git a/doc/db/.back_so-im/so-im-backup-2022522232940.pdma.json b/doc/db/.back_so-im/so-im-backup-2022522232940.pdma.json new file mode 100644 index 0000000..9a6c749 --- /dev/null +++ b/doc/db/.back_so-im/so-im-backup-2022522232940.pdma.json @@ -0,0 +1,2293 @@ +{ + "name": "so-im", + "describe": "sopod-soim", + "avatar": "", + "version": "4.1.1", + "createdTime": "2022-3-7 15:11:08", + "updatedTime": "2022-5-22 23:29:38", + "profile": { + "default": { + "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", + "dbConn": "", + "entityInitFields": [ + { + "defKey": "TENANT_ID", + "defName": "租户号", + "comment": "", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "refDict": "", + "uiHint": "", + "id": "AFCBBC02-ECE9-47B0-9680-9F0494CDCB57" + }, + { + "defKey": "REVISION", + "defName": "乐观锁", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "C6E4A7AF-BD29-444B-BF64-1D2D2EC37CF0" + }, + { + "defKey": "CREATED_BY", + "defName": "创建人", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "2D4573C1-B54E-4BDF-BBD4-F4C2FD1FC8C4" + }, + { + "defKey": "CREATED_TIME", + "defName": "创建时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "7AB9290E-20AA-4A3E-97E3-96C905B496D3" + }, + { + "defKey": "UPDATED_BY", + "defName": "更新人", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "C0C6343D-A720-4EB1-835A-28F7227B036F" + }, + { + "defKey": "UPDATED_TIME", + "defName": "更新时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "refDict": "", + "uiHint": "", + "id": "FEBBEA16-0F4D-4557-95E2-278C7C127BB9" + } + ], + "entityInitProperties": {} + }, + "sql": { + "delimiter": "" + }, + "dataTypeSupports": [ + { + "defKey": "MYSQL", + "id": "8FE7C65E-40EB-41B6-B60E-79063AFF6273" + }, + { + "defKey": "JAVA_MP", + "id": "1E385761-67B3-4B80-A194-E302E590E54E" + }, + { + "defKey": "PostgreSQL", + "id": "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A" + }, + { + "defKey": "ORACLE", + "id": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542" + }, + { + "defKey": "SQLServer", + "id": "BFC87171-C74F-494A-B7C2-76B9C55FACC9" + }, + { + "defKey": "DB2", + "id": "89504F5D-94BF-4C9E-8B2E-44F37305FED5" + }, + { + "defKey": "DM", + "id": "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307" + }, + { + "defKey": "GaussDB", + "id": "592C7013-143D-4E7B-AF64-0D7BF1E28230" + }, + { + "defKey": "Kingbase", + "id": "77BD85E5-9D0D-4096-8427-CBA306FC9C6A" + }, + { + "defKey": "MaxCompute", + "id": "11D1FB71-A587-4217-89BA-611B8A1F83E0" + }, + { + "defKey": "SQLite", + "id": "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1" + }, + { + "defKey": "JAVA", + "id": "797A1496-D649-4261-89B4-544132EC3F36" + }, + { + "defKey": "JavaMybatis", + "id": "895CFD1D-4273-4D32-A2C4-CAC70200AB5B" + }, + { + "defKey": "JavaMybatisPlus", + "id": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073" + }, + { + "defKey": "C#", + "id": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30" + }, + { + "defKey": "Hive", + "id": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2" + }, + { + "defKey": "Golang", + "id": "B91D99E0-9B7C-416C-8737-B760957DAF09" + } + ], + "codeTemplates": [ + { + "type": "dbDDL", + "applyFor": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", + "isDefault": true, + "createTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};\nCREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}} {{= field.notNull ? 'NOT NULL' : '' }} {{= field.autoIncrement ? 'AUTO_INCREMENT' : '' }} {{= field.defaultValue ? it.func.join('DEFAULT',field.defaultValue,' ') : '' }} COMMENT '{{=it.func.join(field.defName,field.comment,';')}}' {{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}\n", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push('ALTER TABLE '+before.defKey+' RENAME TO '+after.defKey);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n ret.push('ALTER TABLE '+after.defKey+' COMMENT \\''+commentText+'\\'');\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldAdded) { \n let ddlItem = 'ADD COLUMN '+field.defKey+' '+field.dbType;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n if(field.autoIncrement){\n ddlItem += ' AUTO_INCREMENT';\n }\n if(field.defaultValue){\n ddlItem += (' DEFAULT' + field.defaultValue);\n }\n ddlItem += (' COMMENT \\''+field.defName+';'+field.comment+'\\'');\n \n if(field.index>0 && field.afterFieldKey){\n ddlItem += (' AFTER '+field.afterFieldKey);\n }\n ret.push(ddlItem);\n }\n return firstDDL+'\\n'+ret.join(',\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldRemoved) { \n ret.push('DROP '+field.defKey);\n }\n return firstDDL+'\\n'+ret.join(',\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey === after.defKey){\n changeDDL += (' MODIFY COLUMN '+after.defKey);\n }else{\n changeDDL += (' CHANGE COLUMN '+before.defKey+' '+after.defKey);\n }\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(field.scale)>0){\n changeDDL += (','+field.scale);\n }\n changeDDL += ')';\n }\n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n let defaultValue = '';\n if(after.defaultValue != null && after.defaultValue.length>0){\n defaultValue = (after.defaultValue);\n }else{\n defaultValue = 'NULL';\n }\n changeDDL += (' DEFAULT ' + defaultValue);\n let comment = after.comment||'';\n changeDDL += (' COMMENT \\''+comment+'\\';');\n ret.push(firstDDL+' '+changeDDL);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "type": "dbDDL", + "applyFor": "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A", + "isDefault": true, + "createTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};\nCREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' AUTO_INCREMENT' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`ALTER TABLE ${before.defKey} RENAME TO ${after.defKey}`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `COMMENT ON TABLE ${after.defKey} IS '${commentText}'`;\n ret.push(myText);\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD COLUMN ${field.defKey} ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n } \n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `COMMENT ON COLUMN ${entity.data.baseInfo.defKey}.${field.defKey} IS '${commentText}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN ${field.defKey}`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldModified) { \n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey !== after.defKey){\n let renameText = `ALTER TABLE ${entity.data.baseInfo.defKey} RENAME COLUMN ${before.defKey} TO ${after.defKey};`;\n ret.push(renameText);\n }\n /*如果没有变化,则不生成变更语句*/\n if(before.dbType === after.dbType \n && before['len'] === after['len'] \n && before.scale === after.scale\n && before.primaryKey === after.primaryKey\n && before.notNull === after.notNull\n && before.autoIncrement === after.autoIncrement\n && before.defaultValue === after.defaultValue){\n continue;\n }\n if(before.dbType !== after.dbType || before.len !== after.len || before.scale !== after.scale){\n let dbTypeDDL = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${after.defKey} TYPE ${before.dbType}`;\n if(after.len>0){\n dbTypeDDL += ('('+after.len);\n if(parseInt(after.scale)>0){\n dbTypeDDL += (','+after.scale);\n }\n dbTypeDDL += ')';\n }\n ret.push(dbTypeDDL+';');\n }\n \n if(before.defaultValue !== after.defaultValue){\n let defaultDDL = '';\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"NULL\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n defaultDDL += ('SET DEFAULT ' + defaultValue);\n }\n let defaultTpl = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${defaultDDL};`;\n ret.push(defaultTpl);\n }\n \n if(before.notNull !== after.notNull){\n let notNullDDL= 'SET NULL';\n if(after.notNull){\n let notNullDDL= 'SET NOT NULL';\n }\n let notNullTpl = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${notNullDDL};`;\n ret.push(notNullTpl);\n }\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n-- 索引重建\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "type": "appCode", + "applyFor": "1E385761-67B3-4B80-A194-E302E590E54E", + "isDefault": true, + "content": "\n$blankline\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.extension.activerecord.Model;\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport java.util.Date;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport lombok.experimental.Accessors;\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n var hours=today.getHours();\n var minutes=today.getMinutes();\n}}\n /**\n * @author : CHINER\n * @date : {{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n * @desc : {{=it.entity.defName}}{{? it.entity.comment}},{{=it.entity.comment}}{{?}}\n */\n@Data\n@EqualsAndHashCode(callSuper = true)\n@Accessors(chain = true)\n@ApiModel(value = \"{{=it.entity.defName}}\"{{? it.entity.comment}}, description = \"{{=it.entity.comment}}\"{{?}})\n@TableName(\"{{=it.entity.defKey}}\")\npublic class {{=it.func.camel(it.entity.defKey,true) }} extends Model<{{=it.func.camel(it.entity.defKey,true) }}> {\n{{~it.entity.fields:field:index}}\n $blankline\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n {{? field.primaryKey }}\n @TableId(value = \"{{=field.defKey}}\"{{? field.autoIncrement}}, type=IdType.AUTO{{?}})\n {{??}}\n @TableField(value = \"{{=field.defKey}}\")\n {{?}}\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}};\n{{~}}\n$blankline\n}\n$blankline" + }, + { + "type": "dbDDL", + "applyFor": "dictSQLTemplate", + "isDefault": true, + "content": "/* 插入字典总表[{{=it.dict.defKey}}-{{=it.dict.defName}}] */\nINSERT INTO SYS_DICT(KEY_,LABEL,INTRO,REVISION) VALUES('{{=it.dict.defKey}}','{{=it.dict.defName}}','{{=it.dict.intro}}',1);\n/* 插入字典明细表 */\n{{~it.dict.items:item:index}}\nINSERT INTO SYS_DICT_ITEM(DICT_KEY,KEY_,LABEL,SORT_,INTRO,REVISION) VALUES('{{=it.dict.defKey}}','{{=item.defKey}}','{{=item.defName}}','{{=item.sort}}','{{=item.intro}}',1);\n{{~}}" + }, + { + "applyFor": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542", + "type": "dbDDL", + "createTable": "CREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* -------------------------------------------------- */\n创建表:\n{{~ createEntities:entity}}\n {{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* -------------------------------------------------- */\n删除表:\n{{~ dropEntities:entity}}\n {{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* -------------------------------------------------- */\n修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n {{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n {{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n {{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n {{?}}{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}\n {{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('\\n\\t建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('\\n\\t解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}\n{{=indexChanged?'\\n\\t更改了索引':''}}\n{{=changed?'\\n\\t更改了属性':''}}\n{{=relaArray.length>0?relaArray.join(''):''}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`ALTER TABLE ${before.defKey} RENAME TO ${after.defKey}`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `COMMENT ON TABLE ${after.defKey} IS '${commentText}'`;\n ret.push(myText);\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD (${field.defKey} ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n ddlItem += ')';\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `COMMENT ON COLUMN ${entity.data.baseInfo.defKey}.${field.defKey} IS '${commentText}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN ${field.defKey}`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey !== after.defKey){\n let renameText = `ALTER TABLE ${entity.data.baseInfo.defKey} RENAME COLUMN ${before.defKey} TO ${after.defKey};`;\n ret.push(renameText);\n }\n /*如果没有变化,则不生成变更语句*/\n if(before.dbType === after.dbType \n && before['len'] === after['len'] \n && before.scale === after.scale\n && before.primaryKey === after.primaryKey\n && before.notNull === after.notNull\n && before.autoIncrement === after.autoIncrement\n && before.defaultValue === after.defaultValue){\n continue;\n }\n changeDDL += ('MODIFY ('+after.defKey+'');\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(field.scale)>0){\n changeDDL += (','+field.scale);\n }\n changeDDL += ')';\n }\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n changeDDL += (' DEFAULT ' + defaultValue);\n }\n \n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n changeDDL += ')';\n ret.push(`${firstDDL} ${changeDDL};`);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "applyFor": "BFC87171-C74F-494A-B7C2-76B9C55FACC9", + "type": "dbDDL", + "createTable": "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[{{=it.entity.defKey}}]') AND type in (N'U')) DROP TABLE [dbo].[{{=it.entity.defKey}}];\n\nCREATE TABLE [dbo].[{{=it.entity.defKey}}](\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' IDENTITY(1,1)' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`EXEC sp_rename '${before.defKey}','${after.defKey}'`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `IF ((SELECT COUNT(*) FROM ::fn_listextendedproperty('MS_Description','SCHEMA', 'dbo','TABLE', '${after.defKey}', NULL, NULL)) > 0)\n \\n\\tEXEC sp_updateextendedproperty 'MS_Description', '${commentText}','SCHEMA', 'dbo','TABLE', '${after.defKey}'\n \\nELSE\n \\n\\tEXEC sp_addextendedproperty 'MS_Description', '${commentText}', 'SCHEMA', 'dbo','TABLE', '${after.defKey}'\n `;\n ret.push(myText);\n /*ret.push('ALTER TABLE '+after.defKey+' COMMENT \\''+commentText+'\\'');*/\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD [${field.defKey}] ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `EXEC sp_addextendedproperty 'MS_Description', N'${commentText}','SCHEMA', N'dbo','TABLE', N'${entity.data.baseInfo.defKey}','COLUMN', N'${field.defKey}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN [${field.defKey}]`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey === after.defKey){\n changeDDL += (' ALTER COLUMN ['+after.defKey+']');\n }else{\n let renameText = `EXEC sp_rename '[dbo].[${entity.data.baseInfo.defKey}].[${before.defKey}]','${after.defKey}','COLUMN';`;\n ret.push(renameText);\n continue;\n }\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(after.scale)>0){\n changeDDL += (','+after.scale);\n }\n changeDDL += ')';\n }\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n changeDDL += (' DEFAULT ' + defaultValue);\n }\n \n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n ret.push(`${firstDDL} ${changeDDL};`);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "type": "dbDDL", + "applyFor": "89504F5D-94BF-4C9E-8B2E-44F37305FED5", + "createTable": "CREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ','('+field.defaultValue+')',' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' AUTO_INCREMENT' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}} {{= field.notNull ? 'NOT NULL' : '' }} {{= field.autoIncrement ? 'AUTOINCREMENT' : '' }} {{= field.defaultValue ? it.func.join('DEFAULT',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }} --{{=it.func.join(field.defName,field.comment,';')}}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i queryById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.queryById({{=pkVarName}}));\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n @ApiOperation(\"分页查询\")\n @GetMapping\n public ResponseEntity> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n return ResponseEntity.ok({{=serviceVarName}}.paginQuery({{=beanVarName}}, pageRequest));\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"新增数据\")\n @PostMapping\n public ResponseEntity<{{=beanClass}}> add({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.insert({{=beanVarName}}));\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"更新数据\")\n @PutMapping\n public ResponseEntity<{{=beanClass}}> edit({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.update({{=beanVarName}}));\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n @ApiOperation(\"通过主键删除数据\")\n @DeleteMapping\n public ResponseEntity deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}", + "Service": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.service;\n$blankline\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.domain.PageRequest;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务接口\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\npublic interface {{=serviceClass}}{\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n \n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest);\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} insert({{=beanClass}} {{=beanVarName}});\n\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n boolean deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "ServiceImpl": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkVarNameU = \"UndefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkVarNameU = it.func.camel(field.defKey,true);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n var mapperName = beanVarName+'Mapper';\n \n}}package {{=pkgName}}.service.impl;\n$blankline\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.domain.PageImpl;\nimport org.springframework.data.domain.PageRequest;\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.mapper.{{=beanClass}}Mapper;\nimport {{=pkgName}}.service.{{=serviceClass}};\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务实现类\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Service\npublic class {{=serviceClass}}Impl implements {{=serviceClass}}{\n @Autowired\n private {{=beanClass}}Mapper {{=mapperName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n public {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}}){\n return {{=mapperName}}.queryById({{=pkVarName}});\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n public Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n long total = {{=mapperName}}.count({{=beanVarName}});\n return new PageImpl<>({{=mapperName}}.queryAllByLimit({{=beanVarName}}, pageRequest), pageRequest, total);\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} insert({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.insert({{=beanVarName}});\n return {{=beanVarName}};\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} update({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.update({{=beanVarName}});\n return queryById({{=beanVarName}}.get{{=pkVarNameU}}());\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n public boolean deleteById({{=pkDataType}} {{=pkVarName}}){\n int total = {{=mapperName}}.deleteById({{=pkVarName}});\n return total > 0;\n }\n}", + "Mapper": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.mapper;\n$blankline\nimport java.util.List;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.data.domain.Pageable;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表数据库访问层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Mapper\npublic interface {{=beanClass}}Mapper{\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n \n /** \n * 分页查询指定行数据\n *\n * @param {{=beanVarName}} 查询条件\n * @param pageable 分页对象\n * @return 对象列表\n */\n List<{{=beanClass}}> queryAllByLimit({{=beanClass}} {{=beanVarName}}, @Param(\"pageable\") Pageable pageable);\n\n /** \n * 统计总行数\n *\n * @param {{=beanVarName}} 查询条件\n * @return 总行数\n */\n long count({{=beanClass}} {{=beanVarName}});\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 影响行数\n */\n int insert({{=beanClass}} {{=beanVarName}});\n\n /** \n * 批量新增数据\n *\n * @param entities List<{{=beanClass}}> 实例对象列表\n * @return 影响行数\n */\n int insertBatch(@Param(\"entities\") List<{{=beanClass}}> entities);\n \n /** \n * 批量新增或按主键更新数据\n *\n * @param entities List<{{=beanClass}}> 实例对象列表\n * @return 影响行数\n */\n int insertOrUpdateBatch(@Param(\"entities\") List<{{=beanClass}}> entities);\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 影响行数\n */\n int update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 影响行数\n */\n int deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "Mapper.xml": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n var pkField = \"UNDEFINED_ID\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkField = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}\n\n\n \n {{~it.entity.fields:field:index}}\n \n {{~}}\n \n $blankline\n \n \n $blankline\n \n \n $blankline\n \n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values ({{=it.entity.fields.map(function(e,i){return '#{'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n \n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n \n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n on duplicate key update\n {{=it.entity.fields.map(function(e,i){return e.defKey + '=values('+e.defKey+')'}).join(',\\n\\t\\t')}}\n \n $blankline\n \n \n update {{=it.entity.defKey}}\n \n {{~it.entity.fields:field:index}}\n \n {{=field.defKey}} = #{{{=it.func.camel(field.defKey,false)}}},\n \n {{~}}\n \n where {{=pkField}} = #{{{=pkVarName}}}\n \n $blankline\n \n \n delete from {{=it.entity.defKey}} where {{=pkField}} = #{{{=pkVarName}}}\n \n\n\n", + "Entity": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.entity;\n$blankline\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport java.io.Serializable;\nimport java.util.Date;\n$blankline\n\n /**\n * {{=it.entity.defName}};{{=it.entity.comment}}\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@ApiModel(value = \"{{=it.entity.defName}}\",description = \"{{=it.entity.comment}}\")\npublic class {{=beanClass}} implements Serializable,Cloneable{\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n @ApiModelProperty(name = \"{{=field.defName}}\",notes = \"{{=field.comment}}\")\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}} ;\n{{~}}\n$blankline\n\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public {{=field.type}} get{{=it.func.camel(field.defKey,true)}}(){\n return this.{{=it.func.camel(field.defKey,false)}};\n }\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public void set{{=it.func.camel(field.defKey,true)}}({{=field.type}} {{= it.func.camel(field.defKey,false) }}){\n this.{{=it.func.camel(field.defKey,false)}}={{=it.func.camel(field.defKey,false)}};\n }\n{{~}}\n}" + }, + { + "applyFor": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073", + "type": "appCode", + "Controller": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.controller;\n$blankline\nimport java.util.List;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.domain.PageImpl;\nimport org.springframework.data.domain.PageRequest;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.*;\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.service.{{=serviceClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表控制层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Api(tags = \"{{=it.entity.defName}}对象功能接口\")\n@RestController\n@RequestMapping(\"/{{=it.func.camel(it.entity.defKey,false)}}\")\npublic class {{=beanClass}}Controller{\n @Autowired\n private {{=serviceClass}} {{=serviceVarName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n @ApiOperation(\"通过ID查询单条数据\")\n @GetMapping(\"{{{=it.func.camel(pkVarName,false)}}}\")\n public ResponseEntity<{{=beanClass}}> queryById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.queryById({{=pkVarName}}));\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n @ApiOperation(\"分页查询\")\n @GetMapping\n public ResponseEntity> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n //1.分页参数\n long current = pageRequest.getPageNumber();\n long size = pageRequest.getPageSize();\n\n //2.分页查询\n /*把Mybatis的分页对象做封装转换,MP的分页对象上有一些SQL敏感信息,还是通过spring的分页模型来封装数据吧*/\n com.baomidou.mybatisplus.extension.plugins.pagination.Page<{{=beanClass}}> pageResult = {{=serviceVarName}}.paginQuery({{=beanVarName}}, current,size);\n\n //3. 分页结果组装\n List<{{=beanClass}}> dataList = pageResult.getRecords();\n long total = pageResult.getTotal();\n PageImpl<{{=beanClass}}> retPage = new PageImpl<{{=beanClass}}>(dataList,pageRequest,total);\n return ResponseEntity.ok(retPage);\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"新增数据\")\n @PostMapping\n public ResponseEntity<{{=beanClass}}> add({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.insert({{=beanVarName}}));\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"更新数据\")\n @PutMapping\n public ResponseEntity<{{=beanClass}}> edit({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.update({{=beanVarName}}));\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n @ApiOperation(\"通过主键删除数据\")\n @DeleteMapping\n public ResponseEntity deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}", + "Service": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.service;\n$blankline\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务接口\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\npublic interface {{=serviceClass}}{\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n $blankline\n /**\n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param current 当前页码\n * @param size 每页大小\n * @return\n */\n Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, long current, long size);\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} insert({{=beanClass}} {{=beanVarName}});\n\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n boolean deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "ServiceImpl": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkVarNameU = \"UndefinedId\";\n var pkFieldKey = \"UNDEFINED\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkFieldKey = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkVarNameU = it.func.camel(field.defKey,true);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n var mapperName = beanVarName+'Mapper';\n \n}}package {{=pkgName}}.service.impl;\n$blankline\nimport cn.hutool.core.util.StrUtil;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;\n\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.mapper.{{=beanClass}}Mapper;\nimport {{=pkgName}}.service.{{=serviceClass}};\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务实现类\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Service\npublic class {{=serviceClass}}Impl implements {{=serviceClass}}{\n @Autowired\n private {{=beanClass}}Mapper {{=mapperName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n public {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}}){\n return {{=mapperName}}.selectById({{=pkVarName}});\n }\n $blankline\n /**\n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param current 当前页码\n * @param size 每页大小\n * @return\n */\n public Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, long current, long size){\n //1. 构建动态查询条件\n LambdaQueryWrapper<{{=beanClass}}> queryWrapper = new LambdaQueryWrapper<>();\n {{~it.entity.fields.filter(function(e){return e[\"type\"]===\"String\"&&e.defKey !== pkFieldKey}):field:index}}\n if(StrUtil.isNotBlank({{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}())){\n queryWrapper.eq({{=beanClass}}::get{{=it.func.camel(field.defKey,true)}}, {{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}());\n }\n {{~}}\n\n //2. 执行分页查询\n Page<{{=beanClass}}> pagin = new Page<>(current , size , true);\n IPage<{{=beanClass}}> selectResult = {{=mapperName}}.selectByPage(pagin , queryWrapper);\n pagin.setPages(selectResult.getPages());\n pagin.setTotal(selectResult.getTotal());\n pagin.setRecords(selectResult.getRecords());\n\n //3. 返回结果\n return pagin;\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} insert({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.insert({{=beanVarName}});\n return {{=beanVarName}};\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} update({{=beanClass}} {{=beanVarName}}){\n //1. 根据条件动态更新\n LambdaUpdateChainWrapper<{{=beanClass}}> chainWrapper = new LambdaUpdateChainWrapper<{{=beanClass}}>({{=mapperName}});\n {{~it.entity.fields.filter(function(e){return e[\"type\"]===\"String\"&&e.defKey !== pkFieldKey}):field:index}}\n if(StrUtil.isNotBlank({{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}())){\n chainWrapper.eq({{=beanClass}}::get{{=it.func.camel(field.defKey,true)}}, {{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}());\n }\n {{~}}\n //2. 设置主键,并更新\n chainWrapper.set({{=beanClass}}::get{{=pkVarNameU}}, {{=beanVarName}}.get{{=pkVarNameU}}());\n boolean ret = chainWrapper.update();\n //3. 更新成功了,查询最最对象返回\n if(ret){\n return queryById({{=beanVarName}}.get{{=pkVarNameU}}());\n }else{\n return {{=beanVarName}};\n }\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n public boolean deleteById({{=pkDataType}} {{=pkVarName}}){\n int total = {{=mapperName}}.deleteById({{=pkVarName}});\n return total > 0;\n }\n}", + "Mapper": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.mapper;\n$blankline\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.Constants;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表数据库访问层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Mapper\npublic interface {{=beanClass}}Mapper extends BaseMapper<{{=beanClass}}>{\n /** \n * 分页查询指定行数据\n *\n * @param page 分页参数\n * @param wrapper 动态查询条件\n * @return 分页对象列表\n */\n IPage<{{=beanClass}}> selectByPage(IPage<{{=beanClass}}> page , @Param(Constants.WRAPPER) Wrapper<{{=beanClass}}> wrapper);\n}", + "Mapper.xml": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n var pkField = \"UNDEFINED_ID\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkField = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}\n\n$blankline\n\n\n \n\n\n", + "Entity": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.entity;\n$blankline\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport java.io.Serializable;\nimport java.util.Date;\n$blankline\n\n /**\n * {{=it.entity.defName}};{{=it.entity.comment}}\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@ApiModel(value = \"{{=it.entity.defName}}\",description = \"{{=it.entity.comment}}\")\n@TableName(\"{{=it.entity.defKey}}\")\npublic class {{=beanClass}} implements Serializable,Cloneable{\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n @ApiModelProperty(name = \"{{=field.defName}}\",notes = \"{{=field.comment}}\")\n {{? field.primaryKey }}\n @TableId\n {{?}}\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}} ;\n{{~}}\n$blankline\n\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public {{=field.type}} get{{=it.func.camel(field.defKey,true)}}(){\n return this.{{=it.func.camel(field.defKey,false)}};\n }\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public void set{{=it.func.camel(field.defKey,true)}}({{=field.type}} {{= it.func.camel(field.defKey,false) }}){\n this.{{=it.func.camel(field.defKey,false)}}={{=it.func.camel(field.defKey,false)}};\n }\n{{~}}\n}" + }, + { + "type": "appCode", + "applyFor": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30", + "Default": "using System;\nusing System.Collections.Generic;\n\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n}}\n/*\n * @author : http://www.chiner.com.cn\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n * @desc : {{=it.func.join(it.entity.defName,it.entity.comment,'-')}}\n */\nnamespace PDManer.Application\n{\n public partial class {{=it.func.camel(it.entity.defKey,true) }}\n {\n \n {{~it.entity.fields:field:index}}\n /// \n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// \n public {{=field.type}} {{=it.func.camel(field.defKey,true)}} { get; set; }\n $blankline\n {{~}}\n \n }\n}", + "SqlSugar": "using System;\nusing System.Collections.Generic;\nusing SqlSugar;\n\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n var sqlSugartable='[SugarTable(\"{{=it.entity.defKey}}\", TableDescription = \"{{=it.func.join(it.entity.defName,it.entity.comment,';')}}\")]';\n}}\n/*\n * @author : xkdong@163.com\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n * @desc : {{=it.func.join(it.entity.defName,it.entity.comment,'-')}}\n */\nnamespace Model.DBModel\n{\n /// \n /// {{=it.func.join(it.entity.defName,it.entity.comment,';')}}\n /// \n {{=sqlSugartable}}\n public class {{=it.entity.defKey}}\n {\n {{~it.entity.fields:field:index}}\n /// \n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// \n {{? field.primaryKey }}\n [SugarColumn(IsIdentity = true, IsPrimaryKey = true)]\n {{?}}\n public {{=field.type}} {{=it.func.camel(field.defKey,true)}}{ get; set; }\n $blankline\n {{~}}\n }\n}" + }, + { + "applyFor": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2", + "type": "dbDDL", + "createTable": "/**字段名,关键字等全部用的小写*/\ndrop table if exists {{=it.entity.defKey}};\n/**补充上库名,external关键字根据建表规范看是否添加*/\ncreate [external] table if not exists {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n/**这里把varchar,char,text,date,datetime字段全部映射为string类型.tinyint unsigned,bit,Integer,tinyint,smallint,mediumint映射为int类型,int unsigned映射为bigint.其它自定义映射规则根据自己情况修改*/\n/**当长度>0只有为decimal类型或double类型时才保留长度和小数的位数*/\n{{~it.entity.fields:field:index}}\n {{=it.func.lowerCase(field.defKey)}} {{=it.func.lowerCase(field.dbType)=='varchar'||it.func.lowerCase(field.dbType)=='char'||it.func.lowerCase(field.dbType)=='text'||it.func.lowerCase(field.dbType)=='date'||it.func.lowerCase(field.dbType)=='datetime' ? 'string':it.func.lowerCase(field.dbType)=='tinyint unsigned'||it.func.lowerCase(field.dbType)=='bit'||it.func.lowerCase(field.dbType)=='integer'||it.func.lowerCase(field.dbType)=='tinyint'||it.func.lowerCase(field.dbType)=='smallint'||it.func.lowerCase(field.dbType)=='mediumint' ? 'int':it.func.lowerCase(field.dbType)=='int unsigned' ? 'bigint':it.func.lowerCase(field.dbType)}}{{?field.len>0&&(it.func.lowerCase(field.dbType)=='decimal'||it.func.lowerCase(field.dbType)=='double')}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{=')'}}{{?}}{{?}} comment '{{=it.func.join(field.defName,field.comment,'')}}' {{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n{{?}}\n)\n{{\n let partitionedBy = it.entity.properties['partitioned by'];\n partitionedBy = partitionedBy?partitionedBy:'请在扩展属性中配置[partitioned by]属性';\n}}\ncomment '{{=it.func.join(it.entity.defName,';') }}'\n/**是否分区表,分区字段名和字段注释自定义*/\n[partitioned by {{=partitionedBy}}]\n/**文件存储格式自定义*/\n[stored as orc]\n/**hdfs上的地址自定义*/\n[location xxx]\n;", + "createView": "", + "deleteTable": "", + "createIndex": "", + "deleteIndex": "", + "message": "", + "update": "" + }, + { + "applyFor": "B91D99E0-9B7C-416C-8737-B760957DAF09", + "type": "appCode", + "content": "{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1<10?\"0\"+today.getMonth():today.getMonth();\n var days=today.getDate()<10?\"0\"+today.getDate():today.getDate();\n var hours = today.getHours()<10?\"0\"+today.getHours():today.getHours(); \n\tvar minutes = today.getMinutes()<10?\"0\"+today.getMinutes():today.getMinutes(); \n\tvar seconds = today.getSeconds()<10?\"0\"+today.getSeconds():today.getSeconds(); \n}}\n// Package models {{=it.func.join(it.entity.defName,it.entity.comment,',')}}\n// author : http://www.liyang.love\n// date : {{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n// desc : {{=it.func.join(it.entity.defName,it.entity.comment,',')}}\npackage models\n\n$blankline\n\n// {{=it.func.camel(it.entity.defKey,true) }} {{=it.func.join(it.entity.defName,it.entity.comment,',')}}。\n// 说明:{{=it.entity.comment}}\n// 表名:{{=it.entity.defKey}}\n// group: {{=it.func.camel(it.entity.defKey,true) }}\n// obsolete:\n// appliesto:go 1.8+;\n// namespace:hongmouer.his.models.{{=it.func.camel(it.entity.defKey,true) }}\n// assembly: hongmouer.his.models.go\n// class:HongMouer.HIS.Models.{{=it.func.camel(it.entity.defKey,true) }}\n// version:{{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\ntype {{=it.func.camel(it.entity.defKey,true) }} struct {\n {{~it.entity.fields:field:index}}\n {{=formatGoLang(it.func.camel(field.defKey,true),null,field,it.entity.fields,null,1)}} {{=formatGoLang(field.type,\"type\",field,it.entity.fields,10,3)}} `gorm:\"column:{{=field.primaryKey?\"primaryKey;\":\"\"}}{{=field.defKey}}\" json:\"{{=it.func.camel(field.defKey,true)}}\"` {{=formatGoLang(\"gorm:column:\"+field.defKey+\" json:\"+it.func.camel(field.defKey,true),null,field,it.entity.fields,null,2)}} //type:{{=formatGoLang(field.type,\"type\",field,it.entity.fields,null,3)}} comment:{{=formatGoLang(it.func.join(field.defName,field.comment,';'),\"defName\",field,it.entity.fields,null,4)}} version:{{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n {{~}}\n}\n\n\n$blankline\n// TableName 表名:{{=it.entity.defKey}},{{=it.entity.defName}}。\n// 说明:{{=it.entity.comment}}\nfunc (ZentaoUserInfo) TableName() string {\n\treturn \"{{=it.entity.defKey}}\"\n}\n\n{{\n\nfunction formatGoLang(str, fieldName, field, fileds, emptLength, isFiled) {\n var maxLength = 0;\n\n if (isFiled == 1) {\n for (var i = 0; i < fileds.length; i++) {\n if (getBlength(it.func.camel(fileds[i].defKey, true)) > maxLength) {\n maxLength = getBlength(it.func.camel(fileds[i].defKey, true)) + 2;\n }\n }\n } else if (isFiled == 2) {\n for (var i = 0; i < fileds.length; i++) {\n var newStr = \"gorm:column:\" + fileds[i].defKey + \" json:\" + it.func.camel(fileds[i].defKey, true);\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 2;\n }\n }\n var empt = \"\";\n var strLength = getBlength(str);\n if (field.primaryKey) {\n strLength += getBlength(\"primaryKey;\");\n }\n for (var j = 0; j < maxLength - strLength; j++) {\n empt += ' ';\n }\n return empt;\n } else if (isFiled == 3) {\n /*获取某个字段的最大长度*/\n for (var i = 0; i < fileds.length; i++) {\n var newStr = eval(\"fileds[\" + i + \"].\" + fieldName);\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 1;\n }\n }\n } else if (isFiled == 4) {\n /*获取某个字段的最大长度*/\n for (var i = 0; i < fileds.length; i++) {\n var newStr = fileds[i].comment + \";\" + fileds[i].defName;\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 1;\n }\n }\n }\n else {\n maxLength = emptLength;\n }\n\n var strLength = getBlength(str);\n for (var j = 0; j < maxLength - strLength; j++) {\n str += ' ';\n }\n return str;\n}\n\nfunction getBlength(str) {\n var n = 0;\n for (var i = str.length; i--;) {\n n += str.charCodeAt(i) > 255 ? 2 : 1;\n }\n return n;\n} \n\n}}" + } + ], + "generatorDoc": { + "docTemplate": "" + }, + "relationFieldSize": 30, + "uiHint": [ + { + "defKey": "Input", + "defName": "普通输入框", + "id": "6DD45F73-AE5E-426A-9C51-7E6CFABE23F6" + }, + { + "defKey": "Select", + "defName": "下拉输入框", + "id": "A1EA6B0B-E0EC-4A2A-8B22-9B7522DE1F0E" + }, + { + "defKey": "CheckBox", + "defName": "复选框", + "id": "8AD07131-FDFB-4932-B4EF-20FDA92C6F04" + }, + { + "defKey": "RadioBox", + "defName": "单选框", + "id": "3A4C23CC-E68F-43F9-97C1-7307AA638D1F" + }, + { + "defKey": "Double", + "defName": "小数输入", + "id": "33B230A9-C60E-417D-8C35-EE9130EE3D1D" + }, + { + "defKey": "Integer", + "defName": "整数输入", + "id": "2AFFF582-7624-4CE1-A6A8-A88BB0E5EBBF" + }, + { + "defKey": "Money", + "defName": "金额输入", + "id": "5E216947-0E7F-4488-95EB-6F6A51F49D96" + }, + { + "defKey": "Date", + "defName": "日期输入", + "id": "97980CB0-93F7-477C-A744-31D81A76CF06" + }, + { + "defKey": "DataYearMonth", + "defName": "年月输入", + "id": "6B1ACA65-DD29-4886-BC28-4E032FA6A63B" + }, + { + "defKey": "Text", + "defName": "长文本输入", + "id": "FCBB76EC-4E91-4C9A-A24C-8C1BC98A8C4B" + }, + { + "defKey": "RichText", + "defName": "富文本输入", + "id": "9965DCFB-54BE-4C5A-9518-DF09D4E58140" + } + ], + "menuWidth": "244px", + "headers": [ + { + "refKey": "defKey", + "hideInGraph": false + }, + { + "refKey": "defName", + "hideInGraph": false + }, + { + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "refKey": "notNull", + "hideInGraph": true + }, + { + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "refKey": "domain", + "hideInGraph": true + }, + { + "refKey": "type", + "hideInGraph": false + }, + { + "refKey": "len", + "hideInGraph": false + }, + { + "refKey": "scale", + "hideInGraph": false + }, + { + "refKey": "comment", + "hideInGraph": true + }, + { + "refKey": "refDict", + "hideInGraph": true + }, + { + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "refKey": "isStandard", + "hideInGraph": false + }, + { + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true + } + ] + }, + "entities": [ + { + "id": "373ED1A7-A39C-47F4-89AF-46992DD3CA83", + "defKey": "t_w_water_order", + "defName": "订单信息", + "comment": "", + "properties": {}, + "fields": [ + { + "rowNo": 1, + "defKey": "order_no", + "defName": "系统订单号", + "comment": "", + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "type": "varchar", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "varchar(32)", + "primaryKeyName": "√", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "BA550922-0749-41FB-B23D-6738BA5DE665" + }, + { + "rowNo": 2, + "defKey": "order_type", + "defName": "订单类型(type=1加价费订单 )", + "comment": "", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "type": "int", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "int", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "7F07DB81-F6C1-4391-B672-B9A519870619" + }, + { + "defKey": "ref_id", + "defName": "关联编号(缴费数据)", + "comment": "", + "type": "VARCHAR", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "", + "id": "F41FE343-C68D-461C-B0CF-53D7AD321957" + }, + { + "defKey": "prod_name", + "defName": "商品名称", + "comment": "", + "type": "NVARCHAR", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "", + "id": "92D8161F-42EE-468B-84BD-4EC3F7211088" + }, + { + "rowNo": 3, + "defKey": "order_money", + "defName": "订单金额", + "comment": "", + "domain": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "decimal(12,2)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "FA153E93-8959-42A0-B98A-FF4320A82778" + }, + { + "rowNo": 4, + "defKey": "pay_money", + "defName": "实付金额", + "comment": "", + "domain": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "decimal(12,2)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "52F3B778-6F28-41FB-ADF8-8FA99CEF5617" + }, + { + "rowNo": 5, + "defKey": "refund_money", + "defName": "实退金额", + "comment": "", + "domain": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "decimal(12,2)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "82EA738A-9499-43FD-A173-09B9CA81885D" + }, + { + "rowNo": 6, + "defKey": "status", + "defName": "账单状态(1待支付,2已支付,3已取消,4已退款,5部分退款)", + "comment": "", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "type": "int", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "int", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "D7A34977-ED3D-47B4-9472-D4644E297580" + }, + { + "defKey": "pay_status", + "defName": "付款状态(0.已失败,1.未付款,2.已付款,3.不确定待查询,4.待轮询)", + "comment": "", + "type": "int", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "8AB0F3E7-409D-49F0-90C8-2135A6A37F29" + }, + { + "defKey": "trade_id", + "defName": "建行交易流水号", + "comment": "", + "type": "VARCHAR", + "len": 32, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "", + "id": "4E49B24A-3074-494E-B72A-40B7C0D4D857" + }, + { + "rowNo": 7, + "defKey": "platform_pay_no", + "defName": "支付平台流水号(wx/alipay)", + "comment": "", + "domain": "", + "type": "varchar", + "len": 64, + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "varchar(64)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "B4044C3A-E17D-415C-BBAC-7A58A2140985" + }, + { + "rowNo": 8, + "defKey": "pay_time", + "defName": "支付完成时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "datetime", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "datetime", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "497A89D1-ED7C-46D9-BE21-D938BCEAE58D" + }, + { + "rowNo": 9, + "defKey": "refund_time", + "defName": "退款完成时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "datetime", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "datetime", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "CAEDF742-75BA-4F45-8BA1-18348557AECC" + }, + { + "rowNo": 10, + "defKey": "create_time", + "defName": "订单创建时间", + "comment": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "type": "datetime", + "len": "", + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "datetime", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "E9736BCA-55FA-42A2-AFA6-CAA5EC355901" + }, + { + "rowNo": 11, + "defKey": "remark", + "defName": "订单备注", + "comment": "", + "domain": "", + "type": "nvarchar", + "len": 32, + "scale": "", + "primaryKey": null, + "notNull": null, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "typeFullName": "nvarchar(32)", + "primaryKeyName": "", + "notNullName": "", + "autoIncrementName": "", + "refDict": "", + "id": "B1548CA2-84D2-4E64-AEA8-BA825F6E5AFF" + }, + { + "defKey": "receipt_money", + "defName": "平台实收金额", + "comment": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "4A752610-041F-4A72-8FBE-27137257757B" + }, + { + "defKey": "charge_money", + "defName": "手续费(实付减实收)", + "comment": "", + "type": "decimal", + "len": 12, + "scale": 2, + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "864F6CE2-3491-47FE-A26D-2D522D235137" + }, + { + "defKey": "third_trade_no", + "defName": "第三方订单号(支付宝/微信)", + "comment": "", + "type": "varchar", + "len": 100, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "id": "06F2B2D8-F4C8-4E9C-B63B-C0DE404E9194" + }, + { + "defKey": "pay_channel", + "defName": "支付渠道(按支付方式查询详情)", + "comment": "", + "type": "varchar", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "id": "405632DF-3944-4756-BC6D-131754E43049" + }, + { + "defKey": "pay_channel_name", + "defName": "支付渠道名称", + "comment": "", + "type": "nvarchar", + "len": 64, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "C5B92F02-496D-4BBB-94B8-788B9D32F20C" + }, + { + "defKey": "pay_way", + "defName": "付款方式(1.龙支付,2.微信,3.支付宝,4.银联)", + "comment": "", + "type": "int", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "4A77CDA9-2090-4861-AF0D-083C8661A470" + }, + { + "defKey": "pay_way_name", + "defName": "付款类型名称", + "comment": "", + "type": "nvarchar", + "len": 64, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "6F6946AC-6938-4766-AC3D-901C9D3911C3" + }, + { + "defKey": "pay_qr_code", + "defName": "被扫支付付款码(轮询查询结果时用)", + "comment": "", + "type": "varchar", + "len": 512, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "86D9ABDA-C602-4ABB-AAFC-0F2C1CCF469E" + }, + { + "defKey": "error_code", + "defName": "错误码", + "comment": "", + "type": "varchar", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "id": "D0B091E6-22B0-4E0D-9B0C-255CB8CCF120" + }, + { + "defKey": "error_msg", + "defName": "失败消息", + "comment": "", + "type": "nvarchar", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "id": "D31A28C0-5585-468C-8C94-ED37CCA635D9" + }, + { + "defKey": "open_id", + "defName": "客户识别号", + "comment": "", + "type": "varchar", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "id": "15F7A05D-CAF2-478B-A1CE-854D90293921" + }, + { + "defKey": "sub_open_id", + "defName": "用户子标识(微信)", + "comment": "", + "type": "varchar", + "len": 128, + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": true, + "id": "8ED56900-51B3-4D3E-82E7-5F5F7E89F5DE" + } + ], + "indexes": [ + { + "defKey": "Key_1", + "unique": false, + "defName": "Key_1", + "comment": "", + "fields": [ + { + "ascOrDesc": null, + "id": "27E2B60B-000A-43B5-9921-13D27EF2CCCE", + "fieldDefKey": "BA550922-0749-41FB-B23D-6738BA5DE665" + } + ], + "id": "BFC0EC49-F132-4B03-8D91-937A34B05227" + } + ], + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "correlations": [] + }, + { + "id": "A741CFD3-2ED1-4994-997E-A5A0E2FAE0F0", + "defKey": "im_user", + "defName": "用户表", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "id", + "defName": "id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "F06C0F3B-A0F1-47EC-80E5-F57ABD41984F" + }, + { + "defKey": "status", + "defName": "状态:1.正常,2.禁用,3删除", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "ED141994-B3F8-42C8-96AE-91244E115A35" + }, + { + "defKey": "account", + "defName": "登录账号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "CC17D845-14BD-443E-B780-AC2C9FF59306", + "id": "BB5539DD-5A96-4729-AF84-205D99479F51" + }, + { + "defKey": "nickname", + "defName": "用户昵称", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "85C805F2-4AEC-4AAE-B607-415D9B4544A2" + }, + { + "defKey": "password", + "defName": "密码", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "E5070C9C-9C16-470A-98AE-82B640B1324C" + }, + { + "defKey": "phone", + "defName": "手机号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "CC17D845-14BD-443E-B780-AC2C9FF59306", + "id": "02FB8316-D443-4D08-A65C-4350B7535925" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "11E5C3FA-B5B8-4E6C-A120-78385F09D7C1" + }, + { + "defKey": "last_login_time", + "defName": "最后登录时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "A33DF9A6-5122-4CB0-95BE-57D88B09DD5C" + }, + { + "defKey": "last_active_time", + "defName": "最后活跃时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "AE4C5769-E1BE-4DE8-951E-D045A30187F9" + } + ], + "correlations": [], + "indexes": [ + { + "defKey": "idx_account_status", + "defName": null, + "unique": false, + "comment": "", + "fields": [ + { + "fieldDefKey": "BB5539DD-5A96-4729-AF84-205D99479F51", + "ascOrDesc": "A", + "id": "C8BEC04D-D87C-45DE-97C5-D03C3B7A2EB9" + }, + { + "fieldDefKey": "ED141994-B3F8-42C8-96AE-91244E115A35", + "ascOrDesc": "A", + "id": "FF7AA195-A640-4E60-B12D-6DDDD562C758" + } + ], + "id": "359FE803-740A-4200-A215-525BED9E9761" + } + ] + }, + { + "id": "2D7374DF-CFF5-46FF-BAB1-CBD3ED793F6D", + "defKey": "im_friend", + "defName": "好友关系表", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "id", + "defName": "", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "4D5EBBEB-09E6-4D73-8741-5FD759597C9D" + }, + { + "defKey": "uid", + "defName": "用户id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "9E46DCFD-99F2-4086-B8CB-DE195BA93ECD" + }, + { + "defKey": "fid", + "defName": "好友id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "E8A2D3BB-2D91-42C5-9403-FE6B103C2712" + }, + { + "defKey": "status", + "defName": "状态:0删除1正常", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "09839FE6-4295-489C-9A58-7B2FF7817DC5", + "id": "A38D6DB7-AAAB-470B-93B4-1370C52519FB" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "90EFD940-FD7F-4775-A274-4B0EE181BEE7" + } + ], + "correlations": [], + "indexes": [] + }, + { + "id": "E79C9C4C-FFC3-44BB-BD98-4F44F528B4B8", + "defKey": "im_segment_id", + "defName": "分段id", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "biz_tag", + "defName": "业务标签", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "F6D445F1-ADD3-4A28-AFDA-2606A912C007" + }, + { + "defKey": "current_id", + "defName": "当前id值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "3E9E2CBB-B458-49D5-B6DC-454A11FB9633" + }, + { + "defKey": "init_step", + "defName": "业务标签初始步长", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "38C65486-2A4E-4862-9875-EFE113FFD627" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "87279682-D6B5-4BA0-9BE5-03FC436313C9" + }, + { + "defKey": "update_time", + "defName": "更新时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "1F373AF6-4C60-4AC4-B75F-604B91AEC0C6" + }, + { + "defKey": "version", + "defName": "版本号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "D376659D-0FFA-4D1A-AA3C-0C5CBA66B41B" + } + ], + "correlations": [], + "indexes": [] + }, + { + "id": "A843E8FC-C8E8-4F0A-8EB0-C5C104BE241F", + "defKey": "im_segment_fragment", + "defName": "分段id碎片id段(id端回收)", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "id", + "defName": "主键id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": true, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "32D9CFBB-3E32-4614-B576-E0E062E8FBF6" + }, + { + "defKey": "biz_tag", + "defName": "业务标签", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", + "id": "031DE904-D768-4F8B-958C-B97213421A46" + }, + { + "defKey": "min_id", + "defName": "id段最小值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "BF29BB31-2AA3-4CF3-BD29-304DA6F60F97" + }, + { + "defKey": "end_id", + "defName": "id段最大值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "27254611-5E86-4EAA-BADA-AE78CAD14528" + }, + { + "defKey": "begin_id", + "defName": "id段当前值", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "BEBCA2FF-01B5-4834-8218-7F7051250C3D" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "72DD10F8-60AE-4F2A-89E1-D69C51B30849", + "id": "4989C582-86B0-4011-A3D7-A2C43FFC3F76" + }, + { + "defKey": "update_time", + "defName": "更新时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "72DD10F8-60AE-4F2A-89E1-D69C51B30849", + "id": "9DC77CD9-4006-42B2-9F63-13B309BC7BA1" + }, + { + "defKey": "version", + "defName": "版本号", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "C83AAC89-59CB-49E9-8C8F-2F5796BF65FE" + } + ], + "correlations": [], + "indexes": [] + } + ], + "views": [], + "dicts": [], + "viewGroups": [], + "dataTypeMapping": { + "referURL": "", + "mappings": [ + { + "defKey": "string", + "defName": "字串", + "id": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "VARCHAR", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "VARCHAR2", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "VARCHAR", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "VARCHAR", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "VARCHAR", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "VARCHAR2", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "VARCHAR", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "VARCHAR", + "797D129F-7619-4FF3-8595-DB942D773571": "STRING", + "1E385761-67B3-4B80-A194-E302E590E54E": "String", + "F4F01E06-3181-4CCC-A561-6111A936862C": "string", + "7565A719-3C24-4064-8FEE-DC55725E9569": "TEXT" + }, + { + "defKey": "double", + "defName": "小数", + "id": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "DECIMAL", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "DECIMAL", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "DECIMAL", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "NUMERIC", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "DECIMAL", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "DECIMAL", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "NUMERIC", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "NUMERIC", + "797D129F-7619-4FF3-8595-DB942D773571": "DOUBLE", + "1E385761-67B3-4B80-A194-E302E590E54E": "Double", + "F4F01E06-3181-4CCC-A561-6111A936862C": "decimal", + "7565A719-3C24-4064-8FEE-DC55725E9569": "REAL" + }, + { + "defKey": "int", + "defName": "整数", + "id": "E522C027-26AA-45E3-9861-A78B6C658EED", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "INT", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "INT", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "INT", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "INTEGER", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "INT", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "INTEGER", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "INTEGER", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "INT4", + "797D129F-7619-4FF3-8595-DB942D773571": "INT", + "1E385761-67B3-4B80-A194-E302E590E54E": "Integer", + "F4F01E06-3181-4CCC-A561-6111A936862C": "int", + "7565A719-3C24-4064-8FEE-DC55725E9569": "INTEGER" + }, + { + "defKey": "date", + "defName": "日期", + "id": "79417FE2-7972-4A82-98C7-2EAB557884A5", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "DATETIME", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "DATE", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "DATETIME", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "DATE", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "DATE", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "DATE", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "DATE", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "DATE", + "797D129F-7619-4FF3-8595-DB942D773571": "DATETIME", + "1E385761-67B3-4B80-A194-E302E590E54E": "Date", + "F4F01E06-3181-4CCC-A561-6111A936862C": "DateTime", + "7565A719-3C24-4064-8FEE-DC55725E9569": "NUMERIC" + }, + { + "defKey": "bytes", + "defName": "二进制", + "id": "6B786A15-5962-48EC-BAC5-3D6E9882C985", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "BLOB", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "BLOB", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "VARBINARY", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "BYTEA", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "BLOB", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "BLOB", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "BYTEA", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "BYTEA", + "797D129F-7619-4FF3-8595-DB942D773571": "BINARY", + "1E385761-67B3-4B80-A194-E302E590E54E": "byte[]", + "F4F01E06-3181-4CCC-A561-6111A936862C": "byte[]", + "7565A719-3C24-4064-8FEE-DC55725E9569": "NONE" + }, + { + "defKey": "largeText", + "defName": "大文本", + "id": "852F9202-C5CB-4A9A-9064-26304FF36CF2", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "TEXT", + "7B3BDD41-C634-4E65-934C-2D054A42299D": "CLOB", + "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "TEXT", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "TEXT", + "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "CLOB", + "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "CLOB", + "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "TEXT", + "831AFF3D-F477-4E06-819B-3C1739E321C8": "TEXT", + "797D129F-7619-4FF3-8595-DB942D773571": "STRING", + "1E385761-67B3-4B80-A194-E302E590E54E": "String", + "F4F01E06-3181-4CCC-A561-6111A936862C": "string", + "7565A719-3C24-4064-8FEE-DC55725E9569": "TEXT" + }, + { + "defKey": "bigint", + "defName": "大整数", + "id": "4CAF2CA7-EEA7-42C2-8FF5-746D6F03D923", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "bigint", + "1E385761-67B3-4B80-A194-E302E590E54E": "Long", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "bigint" + }, + { + "defKey": "tinyint", + "defName": "小整数", + "id": "E5017FA4-F0CA-4CE5-B7E9-F59E8BD8E7BD", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "tinyint", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "tinyint", + "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542": "", + "797A1496-D649-4261-89B4-544132EC3F36": "Integer", + "1E385761-67B3-4B80-A194-E302E590E54E": "Integer", + "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "Integer", + "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "Integer", + "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30": "", + "B91D99E0-9B7C-416C-8737-B760957DAF09": "int32" + } + ] + }, + "domains": [ + { + "defKey": "DefaultString", + "defName": "默认字串", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 255, + "scale": "", + "uiHint": "", + "id": "72DD10F8-60AE-4F2A-89E1-D69C51B30849" + }, + { + "defKey": "IdOrKey", + "defName": "主键标识", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 32, + "scale": "", + "uiHint": "", + "id": "4159ACB8-2488-4350-9C3B-797336F7246E" + }, + { + "defKey": "Name", + "defName": "名称", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 90, + "scale": "", + "uiHint": "", + "id": "0EE54036-962D-4166-A613-16F67228D05C" + }, + { + "defKey": "Int", + "defName": "整数", + "applyFor": "E522C027-26AA-45E3-9861-A78B6C658EED", + "len": "", + "scale": "", + "uiHint": "", + "id": "CBE2B93C-DD97-4950-86A8-B583971583C8" + }, + { + "defKey": "Double", + "defName": "小数", + "applyFor": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", + "len": 24, + "scale": 6, + "uiHint": "", + "id": "F1708A7E-8DDE-47BA-94CC-489838C22267" + }, + { + "defKey": "Money", + "defName": "金额", + "applyFor": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", + "len": 24, + "scale": 6, + "uiHint": "", + "id": "B31176E9-883C-4F95-ACB2-3C5BD307473C" + }, + { + "defKey": "DateTime", + "defName": "日期时间", + "applyFor": "79417FE2-7972-4A82-98C7-2EAB557884A5", + "len": "", + "scale": "", + "uiHint": "", + "id": "4E3ADE61-41F4-4E74-8068-C1E543F9095C" + }, + { + "defKey": "YesNo", + "defName": "是否", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": "1", + "scale": "", + "uiHint": "", + "id": "8996EFF3-7388-4F6B-932F-4328F6B8715F" + }, + { + "defKey": "Dict", + "defName": "数据字典", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": "32", + "scale": "", + "uiHint": "", + "id": "498C9D3B-26B1-4914-9E4A-616B5D761BDE" + }, + { + "defKey": "DescText", + "defName": "描述文本", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": "900", + "scale": "", + "uiHint": "", + "id": "8FF076E7-81A9-4500-A0EA-870639178F2D" + }, + { + "defKey": "bigint", + "defName": "大整数", + "applyFor": "4CAF2CA7-EEA7-42C2-8FF5-746D6F03D923", + "len": "", + "scale": "", + "uiHint": "", + "id": "1E5537DF-B204-49BC-AC1D-457BC6DEE707" + }, + { + "defKey": "string128", + "defName": "字串128", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 128, + "scale": "", + "uiHint": "", + "id": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6" + }, + { + "defKey": "string32", + "defName": "字串32", + "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", + "len": 32, + "scale": "", + "uiHint": "", + "id": "CC17D845-14BD-443E-B780-AC2C9FF59306" + }, + { + "defKey": "tinyint", + "defName": "小整数", + "applyFor": "E5017FA4-F0CA-4CE5-B7E9-F59E8BD8E7BD", + "len": "", + "scale": "", + "uiHint": "", + "id": "09839FE6-4295-489C-9A58-7B2FF7817DC5" + } + ], + "diagrams": [ + { + "defKey": "order_relation", + "defName": "订单结构", + "relationType": "field", + "canvasData": { + "cells": [ + { + "id": "c88a6b8d-51c1-41a1-b49e-d53af66078df", + "shape": "table", + "position": { + "x": 740, + "y": -371 + }, + "count": 0, + "originKey": "EBAD8E23-3861-4D61-82E1-0D7AA5FD8DF8" + }, + { + "id": "ec6ac74b-352b-4f0b-bc5a-8b50752aed52", + "shape": "table", + "position": { + "x": 740, + "y": 250 + }, + "count": 0, + "originKey": "28786E25-243A-4D50-9524-16CFE8B5379B" + }, + { + "id": "f2a5fa0c-0fab-485c-b85e-94c547181e27", + "shape": "table", + "position": { + "x": 740, + "y": -54 + }, + "count": 0, + "originKey": "EE84861E-D381-4596-B895-FD9B91290815" + }, + { + "id": "e5c3f06e-19ff-4fe8-99d4-007bfbd9046c", + "shape": "table", + "position": { + "x": -448, + "y": 40 + }, + "count": 0, + "originKey": "03EC19D5-A2B3-4D16-BDBE-E398A57ED86B" + }, + { + "id": "dd033551-96d7-40fd-85c5-b4a2b65d5b1b", + "shape": "erdRelation", + "source": { + "cell": "4abdd7cd-87bc-4fb0-a445-ac5b88c4a459", + "port": "58F2326B-31BF-4986-8858-28ADD0AEC5E2%out" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%in" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "bdb220ff-64d9-463d-bdf0-d48d7e9b82fe", + "shape": "erdRelation", + "source": { + "cell": "e5c3f06e-19ff-4fe8-99d4-007bfbd9046c", + "port": "6EC0C0BA-6D83-4B68-B91D-F133E1282DA3%out" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%in" + }, + "relation": "1:n", + "vertices": [], + "fillColor": "#ACDAFC" + }, + { + "id": "c02bb0f1-399d-4cd9-8c61-5c1f080a937e", + "shape": "erdRelation", + "source": { + "cell": "f2a5fa0c-0fab-485c-b85e-94c547181e27", + "port": "B82E4A03-4D7B-4B61-BDC2-ACDE048E3BB6%in" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%out" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "c089a78c-6e2d-4f8a-a869-38d966bb94cc", + "shape": "erdRelation", + "source": { + "cell": "c88a6b8d-51c1-41a1-b49e-d53af66078df", + "port": "BCAB762D-1D4D-44F8-BF8B-8ADC5737F057%in" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%out" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "f8906da8-8b2d-4745-8e11-7eb5d2230ed6", + "shape": "erdRelation", + "source": { + "cell": "ec6ac74b-352b-4f0b-bc5a-8b50752aed52", + "port": "8492DC65-9EAA-401C-A416-9C430474910E%in" + }, + "target": { + "cell": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "port": "BA550922-0749-41FB-B23D-6738BA5DE665%out" + }, + "relation": "1:n", + "fillColor": "#ACDAFC" + }, + { + "id": "4abdd7cd-87bc-4fb0-a445-ac5b88c4a459", + "shape": "table", + "position": { + "x": -566, + "y": -284 + }, + "count": 0, + "originKey": "C3166434-A5C0-415A-BABE-1FEBB4BB8BD6" + }, + { + "id": "5b29c047-cacc-4c24-a4b3-c1578735c26f", + "shape": "table", + "position": { + "x": 40, + "y": -287 + }, + "count": 0, + "originKey": "373ED1A7-A39C-47F4-89AF-46992DD3CA83" + } + ] + }, + "id": "2A859C63-E1E5-4778-B413-19FFADDB631B" + } + ], + "standardFields": [] +} \ No newline at end of file diff --git a/doc/db/so-im.chnr.json b/doc/db/so-im.chnr.json index a61a7f9..1d8ad47 100644 --- a/doc/db/so-im.chnr.json +++ b/doc/db/so-im.chnr.json @@ -2,9 +2,9 @@ "name": "so-im", "describe": "sopod-soim", "avatar": "", - "version": "3.5.7", + "version": "4.1.1", "createdTime": "2022-3-7 15:11:08", - "updatedTime": "2022-4-20 23:20:02", + "updatedTime": "2022-5-22 23:29:40", "profile": { "default": { "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", @@ -130,6 +130,62 @@ { "defKey": "PostgreSQL", "id": "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A" + }, + { + "defKey": "ORACLE", + "id": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542" + }, + { + "defKey": "SQLServer", + "id": "BFC87171-C74F-494A-B7C2-76B9C55FACC9" + }, + { + "defKey": "DB2", + "id": "89504F5D-94BF-4C9E-8B2E-44F37305FED5" + }, + { + "defKey": "DM", + "id": "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307" + }, + { + "defKey": "GaussDB", + "id": "592C7013-143D-4E7B-AF64-0D7BF1E28230" + }, + { + "defKey": "Kingbase", + "id": "77BD85E5-9D0D-4096-8427-CBA306FC9C6A" + }, + { + "defKey": "MaxCompute", + "id": "11D1FB71-A587-4217-89BA-611B8A1F83E0" + }, + { + "defKey": "SQLite", + "id": "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1" + }, + { + "defKey": "JAVA", + "id": "797A1496-D649-4261-89B4-544132EC3F36" + }, + { + "defKey": "JavaMybatis", + "id": "895CFD1D-4273-4D32-A2C4-CAC70200AB5B" + }, + { + "defKey": "JavaMybatisPlus", + "id": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073" + }, + { + "defKey": "C#", + "id": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30" + }, + { + "defKey": "Hive", + "id": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2" + }, + { + "defKey": "Golang", + "id": "B91D99E0-9B7C-416C-8737-B760957DAF09" } ], "codeTemplates": [ @@ -139,7 +195,9 @@ "isDefault": true, "createTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};\nCREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}} {{= field.notNull ? 'NOT NULL' : '' }} {{= field.autoIncrement ? 'AUTO_INCREMENT' : '' }} {{= field.defaultValue ? it.func.join('DEFAULT',field.defaultValue,' ') : '' }} COMMENT '{{=it.func.join(field.defName,field.comment,';')}}' {{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}\n", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push('ALTER TABLE '+before.defKey+' RENAME TO '+after.defKey);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n ret.push('ALTER TABLE '+after.defKey+' COMMENT \\''+commentText+'\\'');\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldAdded) { \n let ddlItem = 'ADD COLUMN '+field.defKey+' '+field.dbType;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n if(field.autoIncrement){\n ddlItem += ' AUTO_INCREMENT';\n }\n if(field.defaultValue){\n ddlItem += (' DEFAULT' + field.defaultValue);\n }\n ddlItem += (' COMMENT \\''+field.defName+';'+field.comment+'\\'');\n \n if(field.index>0 && field.afterFieldKey){\n ddlItem += (' AFTER '+field.afterFieldKey);\n }\n ret.push(ddlItem);\n }\n return firstDDL+'\\n'+ret.join(',\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldRemoved) { \n ret.push('DROP '+field.defKey);\n }\n return firstDDL+'\\n'+ret.join(',\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey === after.defKey){\n changeDDL += (' MODIFY COLUMN '+after.defKey);\n }else{\n changeDDL += (' CHANGE COLUMN '+before.defKey+' '+after.defKey);\n }\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(field.scale)>0){\n changeDDL += (','+field.scale);\n }\n changeDDL += ')';\n }\n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n let defaultValue = '';\n if(after.defaultValue != null && after.defaultValue.length>0){\n defaultValue = (after.defaultValue);\n }else{\n defaultValue = 'NULL';\n }\n changeDDL += (' DEFAULT ' + defaultValue);\n let comment = after.comment||'';\n changeDDL += (' COMMENT \\''+comment+'\\';');\n ret.push(firstDDL+' '+changeDDL);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" }, { "type": "dbDDL", @@ -147,7 +205,9 @@ "isDefault": true, "createTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};\nCREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' AUTO_INCREMENT' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`ALTER TABLE ${before.defKey} RENAME TO ${after.defKey}`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `COMMENT ON TABLE ${after.defKey} IS '${commentText}'`;\n ret.push(myText);\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD COLUMN ${field.defKey} ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n } \n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `COMMENT ON COLUMN ${entity.data.baseInfo.defKey}.${field.defKey} IS '${commentText}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN ${field.defKey}`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldModified) { \n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey !== after.defKey){\n let renameText = `ALTER TABLE ${entity.data.baseInfo.defKey} RENAME COLUMN ${before.defKey} TO ${after.defKey};`;\n ret.push(renameText);\n }\n /*如果没有变化,则不生成变更语句*/\n if(before.dbType === after.dbType \n && before['len'] === after['len'] \n && before.scale === after.scale\n && before.primaryKey === after.primaryKey\n && before.notNull === after.notNull\n && before.autoIncrement === after.autoIncrement\n && before.defaultValue === after.defaultValue){\n continue;\n }\n if(before.dbType !== after.dbType || before.len !== after.len || before.scale !== after.scale){\n let dbTypeDDL = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${after.defKey} TYPE ${before.dbType}`;\n if(after.len>0){\n dbTypeDDL += ('('+after.len);\n if(parseInt(after.scale)>0){\n dbTypeDDL += (','+after.scale);\n }\n dbTypeDDL += ')';\n }\n ret.push(dbTypeDDL+';');\n }\n \n if(before.defaultValue !== after.defaultValue){\n let defaultDDL = '';\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"NULL\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n defaultDDL += ('SET DEFAULT ' + defaultValue);\n }\n let defaultTpl = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${defaultDDL};`;\n ret.push(defaultTpl);\n }\n \n if(before.notNull !== after.notNull){\n let notNullDDL= 'SET NULL';\n if(after.notNull){\n let notNullDDL= 'SET NOT NULL';\n }\n let notNullTpl = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${notNullDDL};`;\n ret.push(notNullTpl);\n }\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n-- 索引重建\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" }, { "type": "appCode", @@ -160,6 +220,121 @@ "applyFor": "dictSQLTemplate", "isDefault": true, "content": "/* 插入字典总表[{{=it.dict.defKey}}-{{=it.dict.defName}}] */\nINSERT INTO SYS_DICT(KEY_,LABEL,INTRO,REVISION) VALUES('{{=it.dict.defKey}}','{{=it.dict.defName}}','{{=it.dict.intro}}',1);\n/* 插入字典明细表 */\n{{~it.dict.items:item:index}}\nINSERT INTO SYS_DICT_ITEM(DICT_KEY,KEY_,LABEL,SORT_,INTRO,REVISION) VALUES('{{=it.dict.defKey}}','{{=item.defKey}}','{{=item.defName}}','{{=item.sort}}','{{=item.intro}}',1);\n{{~}}" + }, + { + "applyFor": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542", + "type": "dbDDL", + "createTable": "CREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* -------------------------------------------------- */\n创建表:\n{{~ createEntities:entity}}\n {{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* -------------------------------------------------- */\n删除表:\n{{~ dropEntities:entity}}\n {{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* -------------------------------------------------- */\n修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n {{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n {{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n {{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n {{?}}{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}\n {{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('\\n\\t建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('\\n\\t解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}\n{{=indexChanged?'\\n\\t更改了索引':''}}\n{{=changed?'\\n\\t更改了属性':''}}\n{{=relaArray.length>0?relaArray.join(''):''}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`ALTER TABLE ${before.defKey} RENAME TO ${after.defKey}`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `COMMENT ON TABLE ${after.defKey} IS '${commentText}'`;\n ret.push(myText);\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD (${field.defKey} ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n ddlItem += ')';\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `COMMENT ON COLUMN ${entity.data.baseInfo.defKey}.${field.defKey} IS '${commentText}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN ${field.defKey}`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey !== after.defKey){\n let renameText = `ALTER TABLE ${entity.data.baseInfo.defKey} RENAME COLUMN ${before.defKey} TO ${after.defKey};`;\n ret.push(renameText);\n }\n /*如果没有变化,则不生成变更语句*/\n if(before.dbType === after.dbType \n && before['len'] === after['len'] \n && before.scale === after.scale\n && before.primaryKey === after.primaryKey\n && before.notNull === after.notNull\n && before.autoIncrement === after.autoIncrement\n && before.defaultValue === after.defaultValue){\n continue;\n }\n changeDDL += ('MODIFY ('+after.defKey+'');\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(field.scale)>0){\n changeDDL += (','+field.scale);\n }\n changeDDL += ')';\n }\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n changeDDL += (' DEFAULT ' + defaultValue);\n }\n \n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n changeDDL += ')';\n ret.push(`${firstDDL} ${changeDDL};`);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "applyFor": "BFC87171-C74F-494A-B7C2-76B9C55FACC9", + "type": "dbDDL", + "createTable": "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[{{=it.entity.defKey}}]') AND type in (N'U')) DROP TABLE [dbo].[{{=it.entity.defKey}}];\n\nCREATE TABLE [dbo].[{{=it.entity.defKey}}](\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' IDENTITY(1,1)' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}", + "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`EXEC sp_rename '${before.defKey}','${after.defKey}'`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `IF ((SELECT COUNT(*) FROM ::fn_listextendedproperty('MS_Description','SCHEMA', 'dbo','TABLE', '${after.defKey}', NULL, NULL)) > 0)\n \\n\\tEXEC sp_updateextendedproperty 'MS_Description', '${commentText}','SCHEMA', 'dbo','TABLE', '${after.defKey}'\n \\nELSE\n \\n\\tEXEC sp_addextendedproperty 'MS_Description', '${commentText}', 'SCHEMA', 'dbo','TABLE', '${after.defKey}'\n `;\n ret.push(myText);\n /*ret.push('ALTER TABLE '+after.defKey+' COMMENT \\''+commentText+'\\'');*/\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD [${field.defKey}] ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `EXEC sp_addextendedproperty 'MS_Description', N'${commentText}','SCHEMA', N'dbo','TABLE', N'${entity.data.baseInfo.defKey}','COLUMN', N'${field.defKey}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN [${field.defKey}]`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey === after.defKey){\n changeDDL += (' ALTER COLUMN ['+after.defKey+']');\n }else{\n let renameText = `EXEC sp_rename '[dbo].[${entity.data.baseInfo.defKey}].[${before.defKey}]','${after.defKey}','COLUMN';`;\n ret.push(renameText);\n continue;\n }\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(after.scale)>0){\n changeDDL += (','+after.scale);\n }\n changeDDL += ')';\n }\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n changeDDL += (' DEFAULT ' + defaultValue);\n }\n \n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n ret.push(`${firstDDL} ${changeDDL};`);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" + }, + { + "type": "dbDDL", + "applyFor": "89504F5D-94BF-4C9E-8B2E-44F37305FED5", + "createTable": "CREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ','('+field.defaultValue+')',' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' AUTO_INCREMENT' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}} {{= field.notNull ? 'NOT NULL' : '' }} {{= field.autoIncrement ? 'AUTOINCREMENT' : '' }} {{= field.defaultValue ? it.func.join('DEFAULT',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }} --{{=it.func.join(field.defName,field.comment,';')}}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i queryById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.queryById({{=pkVarName}}));\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n @ApiOperation(\"分页查询\")\n @GetMapping\n public ResponseEntity> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n return ResponseEntity.ok({{=serviceVarName}}.paginQuery({{=beanVarName}}, pageRequest));\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"新增数据\")\n @PostMapping\n public ResponseEntity<{{=beanClass}}> add({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.insert({{=beanVarName}}));\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"更新数据\")\n @PutMapping\n public ResponseEntity<{{=beanClass}}> edit({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.update({{=beanVarName}}));\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n @ApiOperation(\"通过主键删除数据\")\n @DeleteMapping\n public ResponseEntity deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}", + "Service": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.service;\n$blankline\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.domain.PageRequest;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务接口\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\npublic interface {{=serviceClass}}{\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n \n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest);\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} insert({{=beanClass}} {{=beanVarName}});\n\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n boolean deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "ServiceImpl": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkVarNameU = \"UndefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkVarNameU = it.func.camel(field.defKey,true);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n var mapperName = beanVarName+'Mapper';\n \n}}package {{=pkgName}}.service.impl;\n$blankline\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.domain.PageImpl;\nimport org.springframework.data.domain.PageRequest;\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.mapper.{{=beanClass}}Mapper;\nimport {{=pkgName}}.service.{{=serviceClass}};\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务实现类\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Service\npublic class {{=serviceClass}}Impl implements {{=serviceClass}}{\n @Autowired\n private {{=beanClass}}Mapper {{=mapperName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n public {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}}){\n return {{=mapperName}}.queryById({{=pkVarName}});\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n public Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n long total = {{=mapperName}}.count({{=beanVarName}});\n return new PageImpl<>({{=mapperName}}.queryAllByLimit({{=beanVarName}}, pageRequest), pageRequest, total);\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} insert({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.insert({{=beanVarName}});\n return {{=beanVarName}};\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} update({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.update({{=beanVarName}});\n return queryById({{=beanVarName}}.get{{=pkVarNameU}}());\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n public boolean deleteById({{=pkDataType}} {{=pkVarName}}){\n int total = {{=mapperName}}.deleteById({{=pkVarName}});\n return total > 0;\n }\n}", + "Mapper": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.mapper;\n$blankline\nimport java.util.List;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.data.domain.Pageable;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表数据库访问层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Mapper\npublic interface {{=beanClass}}Mapper{\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n \n /** \n * 分页查询指定行数据\n *\n * @param {{=beanVarName}} 查询条件\n * @param pageable 分页对象\n * @return 对象列表\n */\n List<{{=beanClass}}> queryAllByLimit({{=beanClass}} {{=beanVarName}}, @Param(\"pageable\") Pageable pageable);\n\n /** \n * 统计总行数\n *\n * @param {{=beanVarName}} 查询条件\n * @return 总行数\n */\n long count({{=beanClass}} {{=beanVarName}});\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 影响行数\n */\n int insert({{=beanClass}} {{=beanVarName}});\n\n /** \n * 批量新增数据\n *\n * @param entities List<{{=beanClass}}> 实例对象列表\n * @return 影响行数\n */\n int insertBatch(@Param(\"entities\") List<{{=beanClass}}> entities);\n \n /** \n * 批量新增或按主键更新数据\n *\n * @param entities List<{{=beanClass}}> 实例对象列表\n * @return 影响行数\n */\n int insertOrUpdateBatch(@Param(\"entities\") List<{{=beanClass}}> entities);\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 影响行数\n */\n int update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 影响行数\n */\n int deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "Mapper.xml": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n var pkField = \"UNDEFINED_ID\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkField = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}\n\n\n \n {{~it.entity.fields:field:index}}\n \n {{~}}\n \n $blankline\n \n \n $blankline\n \n \n $blankline\n \n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values ({{=it.entity.fields.map(function(e,i){return '#{'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n \n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n \n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n on duplicate key update\n {{=it.entity.fields.map(function(e,i){return e.defKey + '=values('+e.defKey+')'}).join(',\\n\\t\\t')}}\n \n $blankline\n \n \n update {{=it.entity.defKey}}\n \n {{~it.entity.fields:field:index}}\n \n {{=field.defKey}} = #{{{=it.func.camel(field.defKey,false)}}},\n \n {{~}}\n \n where {{=pkField}} = #{{{=pkVarName}}}\n \n $blankline\n \n \n delete from {{=it.entity.defKey}} where {{=pkField}} = #{{{=pkVarName}}}\n \n\n\n", + "Entity": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.entity;\n$blankline\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport java.io.Serializable;\nimport java.util.Date;\n$blankline\n\n /**\n * {{=it.entity.defName}};{{=it.entity.comment}}\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@ApiModel(value = \"{{=it.entity.defName}}\",description = \"{{=it.entity.comment}}\")\npublic class {{=beanClass}} implements Serializable,Cloneable{\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n @ApiModelProperty(name = \"{{=field.defName}}\",notes = \"{{=field.comment}}\")\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}} ;\n{{~}}\n$blankline\n\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public {{=field.type}} get{{=it.func.camel(field.defKey,true)}}(){\n return this.{{=it.func.camel(field.defKey,false)}};\n }\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public void set{{=it.func.camel(field.defKey,true)}}({{=field.type}} {{= it.func.camel(field.defKey,false) }}){\n this.{{=it.func.camel(field.defKey,false)}}={{=it.func.camel(field.defKey,false)}};\n }\n{{~}}\n}" + }, + { + "applyFor": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073", + "type": "appCode", + "Controller": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.controller;\n$blankline\nimport java.util.List;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.domain.PageImpl;\nimport org.springframework.data.domain.PageRequest;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.*;\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.service.{{=serviceClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表控制层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Api(tags = \"{{=it.entity.defName}}对象功能接口\")\n@RestController\n@RequestMapping(\"/{{=it.func.camel(it.entity.defKey,false)}}\")\npublic class {{=beanClass}}Controller{\n @Autowired\n private {{=serviceClass}} {{=serviceVarName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n @ApiOperation(\"通过ID查询单条数据\")\n @GetMapping(\"{{{=it.func.camel(pkVarName,false)}}}\")\n public ResponseEntity<{{=beanClass}}> queryById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.queryById({{=pkVarName}}));\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n @ApiOperation(\"分页查询\")\n @GetMapping\n public ResponseEntity> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n //1.分页参数\n long current = pageRequest.getPageNumber();\n long size = pageRequest.getPageSize();\n\n //2.分页查询\n /*把Mybatis的分页对象做封装转换,MP的分页对象上有一些SQL敏感信息,还是通过spring的分页模型来封装数据吧*/\n com.baomidou.mybatisplus.extension.plugins.pagination.Page<{{=beanClass}}> pageResult = {{=serviceVarName}}.paginQuery({{=beanVarName}}, current,size);\n\n //3. 分页结果组装\n List<{{=beanClass}}> dataList = pageResult.getRecords();\n long total = pageResult.getTotal();\n PageImpl<{{=beanClass}}> retPage = new PageImpl<{{=beanClass}}>(dataList,pageRequest,total);\n return ResponseEntity.ok(retPage);\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"新增数据\")\n @PostMapping\n public ResponseEntity<{{=beanClass}}> add({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.insert({{=beanVarName}}));\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"更新数据\")\n @PutMapping\n public ResponseEntity<{{=beanClass}}> edit({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.update({{=beanVarName}}));\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n @ApiOperation(\"通过主键删除数据\")\n @DeleteMapping\n public ResponseEntity deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}", + "Service": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.service;\n$blankline\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务接口\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\npublic interface {{=serviceClass}}{\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n $blankline\n /**\n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param current 当前页码\n * @param size 每页大小\n * @return\n */\n Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, long current, long size);\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} insert({{=beanClass}} {{=beanVarName}});\n\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n boolean deleteById({{=pkDataType}} {{=pkVarName}});\n}", + "ServiceImpl": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkVarNameU = \"UndefinedId\";\n var pkFieldKey = \"UNDEFINED\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkFieldKey = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkVarNameU = it.func.camel(field.defKey,true);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n var mapperName = beanVarName+'Mapper';\n \n}}package {{=pkgName}}.service.impl;\n$blankline\nimport cn.hutool.core.util.StrUtil;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;\n\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.mapper.{{=beanClass}}Mapper;\nimport {{=pkgName}}.service.{{=serviceClass}};\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务实现类\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Service\npublic class {{=serviceClass}}Impl implements {{=serviceClass}}{\n @Autowired\n private {{=beanClass}}Mapper {{=mapperName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n public {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}}){\n return {{=mapperName}}.selectById({{=pkVarName}});\n }\n $blankline\n /**\n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param current 当前页码\n * @param size 每页大小\n * @return\n */\n public Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, long current, long size){\n //1. 构建动态查询条件\n LambdaQueryWrapper<{{=beanClass}}> queryWrapper = new LambdaQueryWrapper<>();\n {{~it.entity.fields.filter(function(e){return e[\"type\"]===\"String\"&&e.defKey !== pkFieldKey}):field:index}}\n if(StrUtil.isNotBlank({{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}())){\n queryWrapper.eq({{=beanClass}}::get{{=it.func.camel(field.defKey,true)}}, {{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}());\n }\n {{~}}\n\n //2. 执行分页查询\n Page<{{=beanClass}}> pagin = new Page<>(current , size , true);\n IPage<{{=beanClass}}> selectResult = {{=mapperName}}.selectByPage(pagin , queryWrapper);\n pagin.setPages(selectResult.getPages());\n pagin.setTotal(selectResult.getTotal());\n pagin.setRecords(selectResult.getRecords());\n\n //3. 返回结果\n return pagin;\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} insert({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.insert({{=beanVarName}});\n return {{=beanVarName}};\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} update({{=beanClass}} {{=beanVarName}}){\n //1. 根据条件动态更新\n LambdaUpdateChainWrapper<{{=beanClass}}> chainWrapper = new LambdaUpdateChainWrapper<{{=beanClass}}>({{=mapperName}});\n {{~it.entity.fields.filter(function(e){return e[\"type\"]===\"String\"&&e.defKey !== pkFieldKey}):field:index}}\n if(StrUtil.isNotBlank({{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}())){\n chainWrapper.eq({{=beanClass}}::get{{=it.func.camel(field.defKey,true)}}, {{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}());\n }\n {{~}}\n //2. 设置主键,并更新\n chainWrapper.set({{=beanClass}}::get{{=pkVarNameU}}, {{=beanVarName}}.get{{=pkVarNameU}}());\n boolean ret = chainWrapper.update();\n //3. 更新成功了,查询最最对象返回\n if(ret){\n return queryById({{=beanVarName}}.get{{=pkVarNameU}}());\n }else{\n return {{=beanVarName}};\n }\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n public boolean deleteById({{=pkDataType}} {{=pkVarName}}){\n int total = {{=mapperName}}.deleteById({{=pkVarName}});\n return total > 0;\n }\n}", + "Mapper": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.mapper;\n$blankline\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.Constants;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表数据库访问层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Mapper\npublic interface {{=beanClass}}Mapper extends BaseMapper<{{=beanClass}}>{\n /** \n * 分页查询指定行数据\n *\n * @param page 分页参数\n * @param wrapper 动态查询条件\n * @return 分页对象列表\n */\n IPage<{{=beanClass}}> selectByPage(IPage<{{=beanClass}}> page , @Param(Constants.WRAPPER) Wrapper<{{=beanClass}}> wrapper);\n}", + "Mapper.xml": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n var pkField = \"UNDEFINED_ID\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkField = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}\n\n$blankline\n\n\n \n\n\n", + "Entity": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.entity;\n$blankline\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport java.io.Serializable;\nimport java.util.Date;\n$blankline\n\n /**\n * {{=it.entity.defName}};{{=it.entity.comment}}\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@ApiModel(value = \"{{=it.entity.defName}}\",description = \"{{=it.entity.comment}}\")\n@TableName(\"{{=it.entity.defKey}}\")\npublic class {{=beanClass}} implements Serializable,Cloneable{\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n @ApiModelProperty(name = \"{{=field.defName}}\",notes = \"{{=field.comment}}\")\n {{? field.primaryKey }}\n @TableId\n {{?}}\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}} ;\n{{~}}\n$blankline\n\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public {{=field.type}} get{{=it.func.camel(field.defKey,true)}}(){\n return this.{{=it.func.camel(field.defKey,false)}};\n }\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public void set{{=it.func.camel(field.defKey,true)}}({{=field.type}} {{= it.func.camel(field.defKey,false) }}){\n this.{{=it.func.camel(field.defKey,false)}}={{=it.func.camel(field.defKey,false)}};\n }\n{{~}}\n}" + }, + { + "type": "appCode", + "applyFor": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30", + "Default": "using System;\nusing System.Collections.Generic;\n\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n}}\n/*\n * @author : http://www.chiner.com.cn\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n * @desc : {{=it.func.join(it.entity.defName,it.entity.comment,'-')}}\n */\nnamespace PDManer.Application\n{\n public partial class {{=it.func.camel(it.entity.defKey,true) }}\n {\n \n {{~it.entity.fields:field:index}}\n /// \n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// \n public {{=field.type}} {{=it.func.camel(field.defKey,true)}} { get; set; }\n $blankline\n {{~}}\n \n }\n}", + "SqlSugar": "using System;\nusing System.Collections.Generic;\nusing SqlSugar;\n\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n var sqlSugartable='[SugarTable(\"{{=it.entity.defKey}}\", TableDescription = \"{{=it.func.join(it.entity.defName,it.entity.comment,';')}}\")]';\n}}\n/*\n * @author : xkdong@163.com\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n * @desc : {{=it.func.join(it.entity.defName,it.entity.comment,'-')}}\n */\nnamespace Model.DBModel\n{\n /// \n /// {{=it.func.join(it.entity.defName,it.entity.comment,';')}}\n /// \n {{=sqlSugartable}}\n public class {{=it.entity.defKey}}\n {\n {{~it.entity.fields:field:index}}\n /// \n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// \n {{? field.primaryKey }}\n [SugarColumn(IsIdentity = true, IsPrimaryKey = true)]\n {{?}}\n public {{=field.type}} {{=it.func.camel(field.defKey,true)}}{ get; set; }\n $blankline\n {{~}}\n }\n}" + }, + { + "applyFor": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2", + "type": "dbDDL", + "createTable": "/**字段名,关键字等全部用的小写*/\ndrop table if exists {{=it.entity.defKey}};\n/**补充上库名,external关键字根据建表规范看是否添加*/\ncreate [external] table if not exists {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n/**这里把varchar,char,text,date,datetime字段全部映射为string类型.tinyint unsigned,bit,Integer,tinyint,smallint,mediumint映射为int类型,int unsigned映射为bigint.其它自定义映射规则根据自己情况修改*/\n/**当长度>0只有为decimal类型或double类型时才保留长度和小数的位数*/\n{{~it.entity.fields:field:index}}\n {{=it.func.lowerCase(field.defKey)}} {{=it.func.lowerCase(field.dbType)=='varchar'||it.func.lowerCase(field.dbType)=='char'||it.func.lowerCase(field.dbType)=='text'||it.func.lowerCase(field.dbType)=='date'||it.func.lowerCase(field.dbType)=='datetime' ? 'string':it.func.lowerCase(field.dbType)=='tinyint unsigned'||it.func.lowerCase(field.dbType)=='bit'||it.func.lowerCase(field.dbType)=='integer'||it.func.lowerCase(field.dbType)=='tinyint'||it.func.lowerCase(field.dbType)=='smallint'||it.func.lowerCase(field.dbType)=='mediumint' ? 'int':it.func.lowerCase(field.dbType)=='int unsigned' ? 'bigint':it.func.lowerCase(field.dbType)}}{{?field.len>0&&(it.func.lowerCase(field.dbType)=='decimal'||it.func.lowerCase(field.dbType)=='double')}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{=')'}}{{?}}{{?}} comment '{{=it.func.join(field.defName,field.comment,'')}}' {{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n{{?}}\n)\n{{\n let partitionedBy = it.entity.properties['partitioned by'];\n partitionedBy = partitionedBy?partitionedBy:'请在扩展属性中配置[partitioned by]属性';\n}}\ncomment '{{=it.func.join(it.entity.defName,';') }}'\n/**是否分区表,分区字段名和字段注释自定义*/\n[partitioned by {{=partitionedBy}}]\n/**文件存储格式自定义*/\n[stored as orc]\n/**hdfs上的地址自定义*/\n[location xxx]\n;", + "createView": "", + "deleteTable": "", + "createIndex": "", + "deleteIndex": "", + "message": "", + "update": "" + }, + { + "applyFor": "B91D99E0-9B7C-416C-8737-B760957DAF09", + "type": "appCode", + "content": "{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1<10?\"0\"+today.getMonth():today.getMonth();\n var days=today.getDate()<10?\"0\"+today.getDate():today.getDate();\n var hours = today.getHours()<10?\"0\"+today.getHours():today.getHours(); \n\tvar minutes = today.getMinutes()<10?\"0\"+today.getMinutes():today.getMinutes(); \n\tvar seconds = today.getSeconds()<10?\"0\"+today.getSeconds():today.getSeconds(); \n}}\n// Package models {{=it.func.join(it.entity.defName,it.entity.comment,',')}}\n// author : http://www.liyang.love\n// date : {{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n// desc : {{=it.func.join(it.entity.defName,it.entity.comment,',')}}\npackage models\n\n$blankline\n\n// {{=it.func.camel(it.entity.defKey,true) }} {{=it.func.join(it.entity.defName,it.entity.comment,',')}}。\n// 说明:{{=it.entity.comment}}\n// 表名:{{=it.entity.defKey}}\n// group: {{=it.func.camel(it.entity.defKey,true) }}\n// obsolete:\n// appliesto:go 1.8+;\n// namespace:hongmouer.his.models.{{=it.func.camel(it.entity.defKey,true) }}\n// assembly: hongmouer.his.models.go\n// class:HongMouer.HIS.Models.{{=it.func.camel(it.entity.defKey,true) }}\n// version:{{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\ntype {{=it.func.camel(it.entity.defKey,true) }} struct {\n {{~it.entity.fields:field:index}}\n {{=formatGoLang(it.func.camel(field.defKey,true),null,field,it.entity.fields,null,1)}} {{=formatGoLang(field.type,\"type\",field,it.entity.fields,10,3)}} `gorm:\"column:{{=field.primaryKey?\"primaryKey;\":\"\"}}{{=field.defKey}}\" json:\"{{=it.func.camel(field.defKey,true)}}\"` {{=formatGoLang(\"gorm:column:\"+field.defKey+\" json:\"+it.func.camel(field.defKey,true),null,field,it.entity.fields,null,2)}} //type:{{=formatGoLang(field.type,\"type\",field,it.entity.fields,null,3)}} comment:{{=formatGoLang(it.func.join(field.defName,field.comment,';'),\"defName\",field,it.entity.fields,null,4)}} version:{{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n {{~}}\n}\n\n\n$blankline\n// TableName 表名:{{=it.entity.defKey}},{{=it.entity.defName}}。\n// 说明:{{=it.entity.comment}}\nfunc (ZentaoUserInfo) TableName() string {\n\treturn \"{{=it.entity.defKey}}\"\n}\n\n{{\n\nfunction formatGoLang(str, fieldName, field, fileds, emptLength, isFiled) {\n var maxLength = 0;\n\n if (isFiled == 1) {\n for (var i = 0; i < fileds.length; i++) {\n if (getBlength(it.func.camel(fileds[i].defKey, true)) > maxLength) {\n maxLength = getBlength(it.func.camel(fileds[i].defKey, true)) + 2;\n }\n }\n } else if (isFiled == 2) {\n for (var i = 0; i < fileds.length; i++) {\n var newStr = \"gorm:column:\" + fileds[i].defKey + \" json:\" + it.func.camel(fileds[i].defKey, true);\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 2;\n }\n }\n var empt = \"\";\n var strLength = getBlength(str);\n if (field.primaryKey) {\n strLength += getBlength(\"primaryKey;\");\n }\n for (var j = 0; j < maxLength - strLength; j++) {\n empt += ' ';\n }\n return empt;\n } else if (isFiled == 3) {\n /*获取某个字段的最大长度*/\n for (var i = 0; i < fileds.length; i++) {\n var newStr = eval(\"fileds[\" + i + \"].\" + fieldName);\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 1;\n }\n }\n } else if (isFiled == 4) {\n /*获取某个字段的最大长度*/\n for (var i = 0; i < fileds.length; i++) {\n var newStr = fileds[i].comment + \";\" + fileds[i].defName;\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 1;\n }\n }\n }\n else {\n maxLength = emptLength;\n }\n\n var strLength = getBlength(str);\n for (var j = 0; j < maxLength - strLength; j++) {\n str += ' ';\n }\n return str;\n}\n\nfunction getBlength(str) {\n var n = 0;\n for (var i = str.length; i--;) {\n n += str.charCodeAt(i) > 255 ? 2 : 1;\n }\n return n;\n} \n\n}}" } ], "generatorDoc": { @@ -223,7 +398,69 @@ "id": "9965DCFB-54BE-4C5A-9518-DF09D4E58140" } ], - "menuWidth": "244px" + "menuWidth": "244px", + "headers": [ + { + "refKey": "defKey", + "hideInGraph": false + }, + { + "refKey": "defName", + "hideInGraph": false + }, + { + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "refKey": "notNull", + "hideInGraph": true + }, + { + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "refKey": "domain", + "hideInGraph": true + }, + { + "refKey": "type", + "hideInGraph": false + }, + { + "refKey": "len", + "hideInGraph": false + }, + { + "refKey": "scale", + "hideInGraph": false + }, + { + "refKey": "comment", + "hideInGraph": true + }, + { + "refKey": "refDict", + "hideInGraph": true + }, + { + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "refKey": "isStandard", + "hideInGraph": false + }, + { + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true + } + ] }, "entities": [ { @@ -718,17 +955,17 @@ "nameTemplate": "{defKey}[{defName}]", "headers": [ { - "freeze": false, + "freeze": true, "refKey": "hideInGraph", "hideInGraph": true }, { - "freeze": true, + "freeze": false, "refKey": "defKey", "hideInGraph": false }, { - "freeze": true, + "freeze": false, "refKey": "defName", "hideInGraph": false }, @@ -791,6 +1028,11 @@ "freeze": false, "refKey": "uiHint", "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false } ], "correlations": [] @@ -804,17 +1046,17 @@ "nameTemplate": "{defKey}[{defName}]", "headers": [ { - "freeze": false, + "freeze": true, "refKey": "hideInGraph", "hideInGraph": true }, { - "freeze": true, + "freeze": false, "refKey": "defKey", "hideInGraph": false }, { - "freeze": true, + "freeze": false, "refKey": "defName", "hideInGraph": false }, @@ -877,6 +1119,11 @@ "freeze": false, "refKey": "uiHint", "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false } ], "fields": [ @@ -1048,6 +1295,184 @@ } ] }, + { + "id": "2D7374DF-CFF5-46FF-BAB1-CBD3ED793F6D", + "defKey": "im_friend", + "defName": "好友关系表", + "comment": "", + "properties": {}, + "nameTemplate": "{defKey}[{defName}]", + "headers": [ + { + "freeze": true, + "refKey": "hideInGraph", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "defName", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "primaryKey", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "notNull", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "autoIncrement", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "domain", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "type", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "len", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "scale", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "comment", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "refDict", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "defaultValue", + "hideInGraph": true + }, + { + "freeze": false, + "refKey": "isStandard", + "hideInGraph": false + }, + { + "freeze": false, + "refKey": "uiHint", + "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false + } + ], + "fields": [ + { + "defKey": "id", + "defName": "", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": true, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "4D5EBBEB-09E6-4D73-8741-5FD759597C9D" + }, + { + "defKey": "uid", + "defName": "用户id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "9E46DCFD-99F2-4086-B8CB-DE195BA93ECD" + }, + { + "defKey": "fid", + "defName": "好友id", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "E8A2D3BB-2D91-42C5-9403-FE6B103C2712" + }, + { + "defKey": "status", + "defName": "状态:0删除1正常", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "09839FE6-4295-489C-9A58-7B2FF7817DC5", + "id": "A38D6DB7-AAAB-470B-93B4-1370C52519FB" + }, + { + "defKey": "create_time", + "defName": "创建时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "90EFD940-FD7F-4775-A274-4B0EE181BEE7" + } + ], + "correlations": [], + "indexes": [] + }, { "id": "E79C9C4C-FFC3-44BB-BD98-4F44F528B4B8", "defKey": "im_segment_id", @@ -1057,17 +1482,17 @@ "nameTemplate": "{defKey}[{defName}]", "headers": [ { - "freeze": false, + "freeze": true, "refKey": "hideInGraph", "hideInGraph": true }, { - "freeze": true, + "freeze": false, "refKey": "defKey", "hideInGraph": false }, { - "freeze": true, + "freeze": false, "refKey": "defName", "hideInGraph": false }, @@ -1130,6 +1555,11 @@ "freeze": false, "refKey": "uiHint", "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false } ], "fields": [ @@ -1242,17 +1672,17 @@ "nameTemplate": "{defKey}[{defName}]", "headers": [ { - "freeze": false, + "freeze": true, "refKey": "hideInGraph", "hideInGraph": true }, { - "freeze": true, + "freeze": false, "refKey": "defKey", "hideInGraph": false }, { - "freeze": true, + "freeze": false, "refKey": "defName", "hideInGraph": false }, @@ -1315,6 +1745,11 @@ "freeze": false, "refKey": "uiHint", "hideInGraph": true + }, + { + "refKey": "extProps", + "hideInGraph": true, + "freeze": false } ], "fields": [ @@ -1566,6 +2001,20 @@ "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "bigint", "1E385761-67B3-4B80-A194-E302E590E54E": "Long", "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "bigint" + }, + { + "defKey": "tinyint", + "defName": "小整数", + "id": "E5017FA4-F0CA-4CE5-B7E9-F59E8BD8E7BD", + "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "tinyint", + "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "tinyint", + "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542": "", + "797A1496-D649-4261-89B4-544132EC3F36": "Integer", + "1E385761-67B3-4B80-A194-E302E590E54E": "Integer", + "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "Integer", + "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "Integer", + "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30": "", + "B91D99E0-9B7C-416C-8737-B760957DAF09": "int32" } ] }, @@ -1686,6 +2135,15 @@ "scale": "", "uiHint": "", "id": "CC17D845-14BD-443E-B780-AC2C9FF59306" + }, + { + "defKey": "tinyint", + "defName": "小整数", + "applyFor": "E5017FA4-F0CA-4CE5-B7E9-F59E8BD8E7BD", + "len": "", + "scale": "", + "uiHint": "", + "id": "09839FE6-4295-489C-9A58-7B2FF7817DC5" } ], "diagrams": [ diff --git a/im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsAddFriend.java b/im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsAddFriend.java new file mode 100644 index 0000000..d4a7c4f --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsAddFriend.java @@ -0,0 +1,20 @@ +package net.sopod.soim.client.cmd.args; + +import com.beust.jcommander.Parameter; +import lombok.Data; + +import java.util.List; + +/** + * ArgsAddFriend + * + * @author tmy + * @date 2022-05-21 19:28 + */ +@Data +public class ArgsAddFriend { + + @Parameter + private List parameters; + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsSearch.java b/im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsSearch.java index 44428cc..5894a40 100644 --- a/im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsSearch.java +++ b/im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsSearch.java @@ -1,6 +1,7 @@ package net.sopod.soim.client.cmd.args; import com.beust.jcommander.Parameter; +import lombok.Data; import java.util.List; @@ -10,12 +11,13 @@ import java.util.List; * @author tmy * @date 2022-05-17 23:10 */ +@Data public class ArgsSearch { @Parameter private List parameters; - @Parameter(names = {"-u", "-account"}, required = false, description = "账号") + @Parameter(names = {"-u", "-account"}, required = true, description = "账号") private String account; } diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/AddFriendHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/AddFriendHandler.java new file mode 100644 index 0000000..7c7105b --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/AddFriendHandler.java @@ -0,0 +1,23 @@ +package net.sopod.soim.client.handler.cmd; + +import com.google.inject.Inject; +import com.google.inject.Singleton; +import net.sopod.soim.client.session.SoImSession; + +/** + * AddFriendHandler + * + * @author tmy + * @date 2022-05-21 19:29 + */ +@Singleton +public class AddFriendHandler { + + @Inject + private SoImSession soImSession; + + public void a() { + + } + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SearchHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SearchHandler.java index 79fc405..b106b3e 100644 --- a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SearchHandler.java +++ b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SearchHandler.java @@ -5,7 +5,7 @@ import com.google.inject.Singleton; import net.sopod.soim.client.cmd.args.ArgsSearch; import net.sopod.soim.client.cmd.handler.CmdHandler; import net.sopod.soim.client.session.SoImSession; -import net.sopod.soim.data.msg.friend.Friend; +import net.sopod.soim.data.msg.user.AccountSearch; /** * SearchHandler @@ -26,7 +26,8 @@ public class SearchHandler implements CmdHandler { @Override public void handleArgs(ArgsSearch args) { - Friend.ReqFriendSearch reqSearch = Friend.ReqFriendSearch.newBuilder().setKeyword("").build(); + AccountSearch.ReqAccountSearch reqSearch = AccountSearch.ReqAccountSearch + .newBuilder().setKeyword(args.getAccount()).build(); soImSession.send(reqSearch); } diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java new file mode 100644 index 0000000..014b96e --- /dev/null +++ b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java @@ -0,0 +1,46 @@ +package net.sopod.soim.das.user.api.model.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * ImFriend + * 好友关系表 + * + * @author tmy + * @date 2022-05-22 23:22 + */ +@Data +@Accessors(chain = true) +@TableName("im_friend") +public class ImFriend implements Serializable { + + private static final long serialVersionUID = -4703347353944742873L; + + /** */ + @TableId(value = "id") + private Long id; + + /** 用户id */ + @TableField(value = "uid") + private Long uid; + + /** 好友id */ + @TableField(value = "fid") + private Long fid; + + /** 状态:0删除1正常 */ + @TableField(value = "status") + private Integer status; + + /** 创建时间 */ + @TableField(value = "create_time") + private Date createTime; + +} diff --git a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/FriendMapper.java b/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/FriendMapper.java new file mode 100644 index 0000000..862b02f --- /dev/null +++ b/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/FriendMapper.java @@ -0,0 +1,16 @@ +package net.sopod.soim.das.user.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.sopod.soim.das.user.api.model.entity.ImFriend; +import org.springframework.stereotype.Repository; + +/** + * FriendMapper + * + * @author tmy + * @date 2022-05-22 23:24 + */ +@Repository +public interface FriendMapper extends BaseMapper { + +} diff --git a/im-das/im-das-user/src/main/resources/application.properties b/im-das/im-das-user/src/main/resources/application.properties index b766c15..2441421 100644 --- a/im-das/im-das-user/src/main/resources/application.properties +++ b/im-das/im-das-user/src/main/resources/application.properties @@ -17,12 +17,19 @@ spring.shardingsphere.datasource.ds1.password=sopod@2347# # 5.1.0 ֱ # https://github.com/apache/shardingsphere/blob/master/examples/shardingsphere-jdbc-example/single-feature-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-tables.yaml -spring.shardingsphere.rules.sharding.tables.im_user.actual-data-nodes=ds1.im_user_$->{0..2} +# im_user +spring.shardingsphere.rules.sharding.binding-tables=im_user,im_friend +spring.shardingsphere.rules.sharding.tables.im_user.actual-data-nodes=ds1.im_user_$->{0..3} spring.shardingsphere.rules.sharding.tables.im_user.table-strategy.standard.sharding-column=id spring.shardingsphere.rules.sharding.tables.im_user.table-strategy.standard.sharding-algorithm-name=im-user-inline -spring.shardingsphere.rules.sharding.binding-tables=im_user spring.shardingsphere.rules.sharding.sharding-algorithms.im-user-inline.type=INLINE -spring.shardingsphere.rules.sharding.sharding-algorithms.im-user-inline.props.algorithm-expression=im_user_$->{id % 3} +spring.shardingsphere.rules.sharding.sharding-algorithms.im-user-inline.props.algorithm-expression=im_user_$->{id % 4} +# im_friend +spring.shardingsphere.rules.sharding.tables.im_friend.actual-data-nodes=ds1.im_user_$->{0..7} +spring.shardingsphere.rules.sharding.tables.im_friend.table-strategy.standard.sharding-column=id +spring.shardingsphere.rules.sharding.tables.im_friend.table-strategy.standard.sharding-algorithm-name=im-friend-inline +spring.shardingsphere.rules.sharding.sharding-algorithms.im-friend-inline.type=INLINE +spring.shardingsphere.rules.sharding.sharding-algorithms.im-friend-inline.props.algorithm-expression=im-friend-_$->{uid % 8} # sharding-jdbc sql־ spring.shardingsphere.props.sql-show=true diff --git a/im-das/im-das-user/src/main/resources/mapper/FriendMapper.xml b/im-das/im-das-user/src/main/resources/mapper/FriendMapper.xml new file mode 100644 index 0000000..f218f25 --- /dev/null +++ b/im-das/im-das-user/src/main/resources/mapper/FriendMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/friend/ReqFriendSearchHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/friend/ReqFriendSearchHandler.java deleted file mode 100644 index 5528632..0000000 --- a/im-entry/src/main/java/net/sopod/soim/entry/handlers/friend/ReqFriendSearchHandler.java +++ /dev/null @@ -1,59 +0,0 @@ -package net.sopod.soim.entry.handlers.friend; - -import com.google.protobuf.MessageLite; -import lombok.extern.slf4j.Slf4j; -import net.sopod.soim.data.msg.friend.Friend; -import net.sopod.soim.entry.server.handler.AccountMessageHandler; -import net.sopod.soim.entry.server.session.Account; -//import net.sopod.soim.logic.api.friend.search.AccountInfo; -//import net.sopod.soim.logic.api.friend.search.AccountSearchService; -//import net.sopod.soim.logic.api.friend.search.ReqAccountSearch; -//import net.sopod.soim.logic.api.friend.search.ResAccountSearch; -import org.apache.dubbo.config.annotation.DubboReference; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; - -/** - * ReqFriendSearchHandler - * 账号搜索服务 - * - * @author tmy - * @date 2022-05-17 22:54 - */ -@Slf4j -@Service -public class ReqFriendSearchHandler extends AccountMessageHandler { - - @Override - public MessageLite handle(Account account, Friend.ReqFriendSearch msg) { - return null; - } - -// @DubboReference -// private AccountSearchService accountSearchService; -// -// @Override -// public MessageLite handle(Account account, Friend.ReqFriendSearch msg) { -// msg.getKeyword(); -// ReqAccountSearch search = ReqAccountSearch.newBuilder().setKeyword(msg.getKeyword()).build(); -// CompletableFuture future = accountSearchService.searchAccountLikelyAsync(search); -// future.thenAccept(res -> { -// log.info("用户搜索开始..."); -// List accounts = res.getAccountsList(); -// List userInfos = accounts.stream().map( -// acc -> Friend.UserInfo.newBuilder() -// .setAccount(acc.getAccount()) -// .setNickname(acc.getNickname()) -// .setUid(acc.getUid()) -// .build() -// ).collect(Collectors.toList()); -// Friend.ResFriendSearch resSearch = Friend.ResFriendSearch.newBuilder().addAllUsers(userInfos).build(); -// account.writeNow(resSearch); -// }); -// return null; -// } - -} diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAccountSearchHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAccountSearchHandler.java new file mode 100644 index 0000000..45d8646 --- /dev/null +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAccountSearchHandler.java @@ -0,0 +1,48 @@ +package net.sopod.soim.entry.handlers.user; + +import com.google.protobuf.MessageLite; +import net.sopod.soim.data.msg.user.AccountSearch; +import net.sopod.soim.data.msg.user.UserGroup; +import net.sopod.soim.entry.server.handler.AccountMessageHandler; +import net.sopod.soim.entry.server.session.Account; +import net.sopod.soim.logic.api.user.service.AccountService; +import net.sopod.soim.logic.common.model.UserInfo; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +/** + * ReqAccountSearchHandler + * + * @author tmy + * @date 2022-05-21 19:41 + */ +@Service +public class ReqAccountSearchHandler extends AccountMessageHandler { + + @DubboReference + private AccountService accountService; + + @Override + public MessageLite handle(Account account, AccountSearch.ReqAccountSearch msg) { + CompletableFuture> future = accountService.searchAccountLikely(msg.getKeyword()); + future.thenAccept(userInfos -> { + List infos = userInfos.stream().map( + acc -> UserGroup.UserInfo.newBuilder() + .setAccount(acc.getAccount()) + .setNickname(acc.getNickname()) + .setUid(acc.getUid()) + .build() + ).collect(Collectors.toList()); + AccountSearch.ResAccountSearch resSearch = AccountSearch.ResAccountSearch + .newBuilder() + .addAllUsers(infos).build(); + account.writeNow(resSearch); + }); + return null; + } + +} diff --git a/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/friend/Friend.java b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/friend/Friend.java deleted file mode 100644 index ea81737..0000000 --- a/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/friend/Friend.java +++ /dev/null @@ -1,2225 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: proto/friend/Friend.proto - -package net.sopod.soim.data.msg.friend; - -public final class Friend { - private Friend() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - public interface ReqFriendSearchOrBuilder extends - // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.friend.ReqFriendSearch) - com.google.protobuf.MessageOrBuilder { - - /** - * string keyword = 1; - * @return The keyword. - */ - java.lang.String getKeyword(); - /** - * string keyword = 1; - * @return The bytes for keyword. - */ - com.google.protobuf.ByteString - getKeywordBytes(); - } - /** - * Protobuf type {@code net.sopod.soim.data.msg.friend.ReqFriendSearch} - */ - public static final class ReqFriendSearch extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.friend.ReqFriendSearch) - ReqFriendSearchOrBuilder { - private static final long serialVersionUID = 0L; - // Use ReqFriendSearch.newBuilder() to construct. - private ReqFriendSearch(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private ReqFriendSearch() { - keyword_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new ReqFriendSearch(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private ReqFriendSearch( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - java.lang.String s = input.readStringRequireUtf8(); - - keyword_ = s; - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_ReqFriendSearch_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_ReqFriendSearch_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch.class, net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch.Builder.class); - } - - public static final int KEYWORD_FIELD_NUMBER = 1; - private volatile java.lang.Object keyword_; - /** - * string keyword = 1; - * @return The keyword. - */ - @java.lang.Override - public java.lang.String getKeyword() { - java.lang.Object ref = keyword_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - keyword_ = s; - return s; - } - } - /** - * string keyword = 1; - * @return The bytes for keyword. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getKeywordBytes() { - java.lang.Object ref = keyword_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - keyword_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(keyword_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, keyword_); - } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(keyword_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, keyword_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch)) { - return super.equals(obj); - } - net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch other = (net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch) obj; - - if (!getKeyword() - .equals(other.getKeyword())) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + KEYWORD_FIELD_NUMBER; - hash = (53 * hash) + getKeyword().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code net.sopod.soim.data.msg.friend.ReqFriendSearch} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.friend.ReqFriendSearch) - net.sopod.soim.data.msg.friend.Friend.ReqFriendSearchOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_ReqFriendSearch_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_ReqFriendSearch_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch.class, net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch.Builder.class); - } - - // Construct using net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - keyword_ = ""; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_ReqFriendSearch_descriptor; - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch getDefaultInstanceForType() { - return net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch.getDefaultInstance(); - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch build() { - net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch buildPartial() { - net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch result = new net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch(this); - result.keyword_ = keyword_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch) { - return mergeFrom((net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch other) { - if (other == net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch.getDefaultInstance()) return this; - if (!other.getKeyword().isEmpty()) { - keyword_ = other.keyword_; - onChanged(); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private java.lang.Object keyword_ = ""; - /** - * string keyword = 1; - * @return The keyword. - */ - public java.lang.String getKeyword() { - java.lang.Object ref = keyword_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - keyword_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string keyword = 1; - * @return The bytes for keyword. - */ - public com.google.protobuf.ByteString - getKeywordBytes() { - java.lang.Object ref = keyword_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - keyword_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string keyword = 1; - * @param value The keyword to set. - * @return This builder for chaining. - */ - public Builder setKeyword( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - keyword_ = value; - onChanged(); - return this; - } - /** - * string keyword = 1; - * @return This builder for chaining. - */ - public Builder clearKeyword() { - - keyword_ = getDefaultInstance().getKeyword(); - onChanged(); - return this; - } - /** - * string keyword = 1; - * @param value The bytes for keyword to set. - * @return This builder for chaining. - */ - public Builder setKeywordBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - keyword_ = value; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.friend.ReqFriendSearch) - } - - // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.friend.ReqFriendSearch) - private static final net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch(); - } - - public static net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public ReqFriendSearch parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new ReqFriendSearch(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.ReqFriendSearch getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface ResFriendSearchOrBuilder extends - // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.friend.ResFriendSearch) - com.google.protobuf.MessageOrBuilder { - - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - java.util.List - getUsersList(); - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - net.sopod.soim.data.msg.friend.Friend.UserInfo getUsers(int index); - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - int getUsersCount(); - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - java.util.List - getUsersOrBuilderList(); - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - net.sopod.soim.data.msg.friend.Friend.UserInfoOrBuilder getUsersOrBuilder( - int index); - } - /** - * Protobuf type {@code net.sopod.soim.data.msg.friend.ResFriendSearch} - */ - public static final class ResFriendSearch extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.friend.ResFriendSearch) - ResFriendSearchOrBuilder { - private static final long serialVersionUID = 0L; - // Use ResFriendSearch.newBuilder() to construct. - private ResFriendSearch(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private ResFriendSearch() { - users_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new ResFriendSearch(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private ResFriendSearch( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 66: { - if (!((mutable_bitField0_ & 0x00000001) != 0)) { - users_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00000001; - } - users_.add( - input.readMessage(net.sopod.soim.data.msg.friend.Friend.UserInfo.parser(), extensionRegistry)); - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000001) != 0)) { - users_ = java.util.Collections.unmodifiableList(users_); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_ResFriendSearch_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_ResFriendSearch_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.data.msg.friend.Friend.ResFriendSearch.class, net.sopod.soim.data.msg.friend.Friend.ResFriendSearch.Builder.class); - } - - public static final int USERS_FIELD_NUMBER = 8; - private java.util.List users_; - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - @java.lang.Override - public java.util.List getUsersList() { - return users_; - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - @java.lang.Override - public java.util.List - getUsersOrBuilderList() { - return users_; - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - @java.lang.Override - public int getUsersCount() { - return users_.size(); - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.UserInfo getUsers(int index) { - return users_.get(index); - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.UserInfoOrBuilder getUsersOrBuilder( - int index) { - return users_.get(index); - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - for (int i = 0; i < users_.size(); i++) { - output.writeMessage(8, users_.get(i)); - } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - for (int i = 0; i < users_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(8, users_.get(i)); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof net.sopod.soim.data.msg.friend.Friend.ResFriendSearch)) { - return super.equals(obj); - } - net.sopod.soim.data.msg.friend.Friend.ResFriendSearch other = (net.sopod.soim.data.msg.friend.Friend.ResFriendSearch) obj; - - if (!getUsersList() - .equals(other.getUsersList())) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getUsersCount() > 0) { - hash = (37 * hash) + USERS_FIELD_NUMBER; - hash = (53 * hash) + getUsersList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(net.sopod.soim.data.msg.friend.Friend.ResFriendSearch prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code net.sopod.soim.data.msg.friend.ResFriendSearch} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.friend.ResFriendSearch) - net.sopod.soim.data.msg.friend.Friend.ResFriendSearchOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_ResFriendSearch_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_ResFriendSearch_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.data.msg.friend.Friend.ResFriendSearch.class, net.sopod.soim.data.msg.friend.Friend.ResFriendSearch.Builder.class); - } - - // Construct using net.sopod.soim.data.msg.friend.Friend.ResFriendSearch.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getUsersFieldBuilder(); - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - if (usersBuilder_ == null) { - users_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - } else { - usersBuilder_.clear(); - } - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_ResFriendSearch_descriptor; - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.ResFriendSearch getDefaultInstanceForType() { - return net.sopod.soim.data.msg.friend.Friend.ResFriendSearch.getDefaultInstance(); - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.ResFriendSearch build() { - net.sopod.soim.data.msg.friend.Friend.ResFriendSearch result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.ResFriendSearch buildPartial() { - net.sopod.soim.data.msg.friend.Friend.ResFriendSearch result = new net.sopod.soim.data.msg.friend.Friend.ResFriendSearch(this); - int from_bitField0_ = bitField0_; - if (usersBuilder_ == null) { - if (((bitField0_ & 0x00000001) != 0)) { - users_ = java.util.Collections.unmodifiableList(users_); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.users_ = users_; - } else { - result.users_ = usersBuilder_.build(); - } - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof net.sopod.soim.data.msg.friend.Friend.ResFriendSearch) { - return mergeFrom((net.sopod.soim.data.msg.friend.Friend.ResFriendSearch)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(net.sopod.soim.data.msg.friend.Friend.ResFriendSearch other) { - if (other == net.sopod.soim.data.msg.friend.Friend.ResFriendSearch.getDefaultInstance()) return this; - if (usersBuilder_ == null) { - if (!other.users_.isEmpty()) { - if (users_.isEmpty()) { - users_ = other.users_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureUsersIsMutable(); - users_.addAll(other.users_); - } - onChanged(); - } - } else { - if (!other.users_.isEmpty()) { - if (usersBuilder_.isEmpty()) { - usersBuilder_.dispose(); - usersBuilder_ = null; - users_ = other.users_; - bitField0_ = (bitField0_ & ~0x00000001); - usersBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getUsersFieldBuilder() : null; - } else { - usersBuilder_.addAllMessages(other.users_); - } - } - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - net.sopod.soim.data.msg.friend.Friend.ResFriendSearch parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (net.sopod.soim.data.msg.friend.Friend.ResFriendSearch) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private java.util.List users_ = - java.util.Collections.emptyList(); - private void ensureUsersIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { - users_ = new java.util.ArrayList(users_); - bitField0_ |= 0x00000001; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - net.sopod.soim.data.msg.friend.Friend.UserInfo, net.sopod.soim.data.msg.friend.Friend.UserInfo.Builder, net.sopod.soim.data.msg.friend.Friend.UserInfoOrBuilder> usersBuilder_; - - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public java.util.List getUsersList() { - if (usersBuilder_ == null) { - return java.util.Collections.unmodifiableList(users_); - } else { - return usersBuilder_.getMessageList(); - } - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public int getUsersCount() { - if (usersBuilder_ == null) { - return users_.size(); - } else { - return usersBuilder_.getCount(); - } - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public net.sopod.soim.data.msg.friend.Friend.UserInfo getUsers(int index) { - if (usersBuilder_ == null) { - return users_.get(index); - } else { - return usersBuilder_.getMessage(index); - } - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public Builder setUsers( - int index, net.sopod.soim.data.msg.friend.Friend.UserInfo value) { - if (usersBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureUsersIsMutable(); - users_.set(index, value); - onChanged(); - } else { - usersBuilder_.setMessage(index, value); - } - return this; - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public Builder setUsers( - int index, net.sopod.soim.data.msg.friend.Friend.UserInfo.Builder builderForValue) { - if (usersBuilder_ == null) { - ensureUsersIsMutable(); - users_.set(index, builderForValue.build()); - onChanged(); - } else { - usersBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public Builder addUsers(net.sopod.soim.data.msg.friend.Friend.UserInfo value) { - if (usersBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureUsersIsMutable(); - users_.add(value); - onChanged(); - } else { - usersBuilder_.addMessage(value); - } - return this; - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public Builder addUsers( - int index, net.sopod.soim.data.msg.friend.Friend.UserInfo value) { - if (usersBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureUsersIsMutable(); - users_.add(index, value); - onChanged(); - } else { - usersBuilder_.addMessage(index, value); - } - return this; - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public Builder addUsers( - net.sopod.soim.data.msg.friend.Friend.UserInfo.Builder builderForValue) { - if (usersBuilder_ == null) { - ensureUsersIsMutable(); - users_.add(builderForValue.build()); - onChanged(); - } else { - usersBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public Builder addUsers( - int index, net.sopod.soim.data.msg.friend.Friend.UserInfo.Builder builderForValue) { - if (usersBuilder_ == null) { - ensureUsersIsMutable(); - users_.add(index, builderForValue.build()); - onChanged(); - } else { - usersBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public Builder addAllUsers( - java.lang.Iterable values) { - if (usersBuilder_ == null) { - ensureUsersIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, users_); - onChanged(); - } else { - usersBuilder_.addAllMessages(values); - } - return this; - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public Builder clearUsers() { - if (usersBuilder_ == null) { - users_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - } else { - usersBuilder_.clear(); - } - return this; - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public Builder removeUsers(int index) { - if (usersBuilder_ == null) { - ensureUsersIsMutable(); - users_.remove(index); - onChanged(); - } else { - usersBuilder_.remove(index); - } - return this; - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public net.sopod.soim.data.msg.friend.Friend.UserInfo.Builder getUsersBuilder( - int index) { - return getUsersFieldBuilder().getBuilder(index); - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public net.sopod.soim.data.msg.friend.Friend.UserInfoOrBuilder getUsersOrBuilder( - int index) { - if (usersBuilder_ == null) { - return users_.get(index); } else { - return usersBuilder_.getMessageOrBuilder(index); - } - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public java.util.List - getUsersOrBuilderList() { - if (usersBuilder_ != null) { - return usersBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(users_); - } - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public net.sopod.soim.data.msg.friend.Friend.UserInfo.Builder addUsersBuilder() { - return getUsersFieldBuilder().addBuilder( - net.sopod.soim.data.msg.friend.Friend.UserInfo.getDefaultInstance()); - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public net.sopod.soim.data.msg.friend.Friend.UserInfo.Builder addUsersBuilder( - int index) { - return getUsersFieldBuilder().addBuilder( - index, net.sopod.soim.data.msg.friend.Friend.UserInfo.getDefaultInstance()); - } - /** - * repeated .net.sopod.soim.data.msg.friend.UserInfo users = 8; - */ - public java.util.List - getUsersBuilderList() { - return getUsersFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - net.sopod.soim.data.msg.friend.Friend.UserInfo, net.sopod.soim.data.msg.friend.Friend.UserInfo.Builder, net.sopod.soim.data.msg.friend.Friend.UserInfoOrBuilder> - getUsersFieldBuilder() { - if (usersBuilder_ == null) { - usersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - net.sopod.soim.data.msg.friend.Friend.UserInfo, net.sopod.soim.data.msg.friend.Friend.UserInfo.Builder, net.sopod.soim.data.msg.friend.Friend.UserInfoOrBuilder>( - users_, - ((bitField0_ & 0x00000001) != 0), - getParentForChildren(), - isClean()); - users_ = null; - } - return usersBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.friend.ResFriendSearch) - } - - // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.friend.ResFriendSearch) - private static final net.sopod.soim.data.msg.friend.Friend.ResFriendSearch DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new net.sopod.soim.data.msg.friend.Friend.ResFriendSearch(); - } - - public static net.sopod.soim.data.msg.friend.Friend.ResFriendSearch getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public ResFriendSearch parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new ResFriendSearch(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.ResFriendSearch getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface UserInfoOrBuilder extends - // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.friend.UserInfo) - com.google.protobuf.MessageOrBuilder { - - /** - * int64 uid = 1; - * @return The uid. - */ - long getUid(); - - /** - * string account = 2; - * @return The account. - */ - java.lang.String getAccount(); - /** - * string account = 2; - * @return The bytes for account. - */ - com.google.protobuf.ByteString - getAccountBytes(); - - /** - * string nickname = 3; - * @return The nickname. - */ - java.lang.String getNickname(); - /** - * string nickname = 3; - * @return The bytes for nickname. - */ - com.google.protobuf.ByteString - getNicknameBytes(); - } - /** - * Protobuf type {@code net.sopod.soim.data.msg.friend.UserInfo} - */ - public static final class UserInfo extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.friend.UserInfo) - UserInfoOrBuilder { - private static final long serialVersionUID = 0L; - // Use UserInfo.newBuilder() to construct. - private UserInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private UserInfo() { - account_ = ""; - nickname_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new UserInfo(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private UserInfo( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - - uid_ = input.readInt64(); - break; - } - case 18: { - java.lang.String s = input.readStringRequireUtf8(); - - account_ = s; - break; - } - case 26: { - java.lang.String s = input.readStringRequireUtf8(); - - nickname_ = s; - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_UserInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_UserInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.data.msg.friend.Friend.UserInfo.class, net.sopod.soim.data.msg.friend.Friend.UserInfo.Builder.class); - } - - public static final int UID_FIELD_NUMBER = 1; - private long uid_; - /** - * int64 uid = 1; - * @return The uid. - */ - @java.lang.Override - public long getUid() { - return uid_; - } - - public static final int ACCOUNT_FIELD_NUMBER = 2; - private volatile java.lang.Object account_; - /** - * string account = 2; - * @return The account. - */ - @java.lang.Override - public java.lang.String getAccount() { - java.lang.Object ref = account_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - account_ = s; - return s; - } - } - /** - * string account = 2; - * @return The bytes for account. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getAccountBytes() { - java.lang.Object ref = account_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - account_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int NICKNAME_FIELD_NUMBER = 3; - private volatile java.lang.Object nickname_; - /** - * string nickname = 3; - * @return The nickname. - */ - @java.lang.Override - public java.lang.String getNickname() { - java.lang.Object ref = nickname_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - nickname_ = s; - return s; - } - } - /** - * string nickname = 3; - * @return The bytes for nickname. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getNicknameBytes() { - java.lang.Object ref = nickname_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - nickname_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (uid_ != 0L) { - output.writeInt64(1, uid_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, account_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nickname_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, nickname_); - } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (uid_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(1, uid_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, account_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nickname_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, nickname_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof net.sopod.soim.data.msg.friend.Friend.UserInfo)) { - return super.equals(obj); - } - net.sopod.soim.data.msg.friend.Friend.UserInfo other = (net.sopod.soim.data.msg.friend.Friend.UserInfo) obj; - - if (getUid() - != other.getUid()) return false; - if (!getAccount() - .equals(other.getAccount())) return false; - if (!getNickname() - .equals(other.getNickname())) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + UID_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getUid()); - hash = (37 * hash) + ACCOUNT_FIELD_NUMBER; - hash = (53 * hash) + getAccount().hashCode(); - hash = (37 * hash) + NICKNAME_FIELD_NUMBER; - hash = (53 * hash) + getNickname().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.data.msg.friend.Friend.UserInfo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(net.sopod.soim.data.msg.friend.Friend.UserInfo prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code net.sopod.soim.data.msg.friend.UserInfo} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.friend.UserInfo) - net.sopod.soim.data.msg.friend.Friend.UserInfoOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_UserInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_UserInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.data.msg.friend.Friend.UserInfo.class, net.sopod.soim.data.msg.friend.Friend.UserInfo.Builder.class); - } - - // Construct using net.sopod.soim.data.msg.friend.Friend.UserInfo.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - uid_ = 0L; - - account_ = ""; - - nickname_ = ""; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return net.sopod.soim.data.msg.friend.Friend.internal_static_net_sopod_soim_data_msg_friend_UserInfo_descriptor; - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.UserInfo getDefaultInstanceForType() { - return net.sopod.soim.data.msg.friend.Friend.UserInfo.getDefaultInstance(); - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.UserInfo build() { - net.sopod.soim.data.msg.friend.Friend.UserInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.UserInfo buildPartial() { - net.sopod.soim.data.msg.friend.Friend.UserInfo result = new net.sopod.soim.data.msg.friend.Friend.UserInfo(this); - result.uid_ = uid_; - result.account_ = account_; - result.nickname_ = nickname_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof net.sopod.soim.data.msg.friend.Friend.UserInfo) { - return mergeFrom((net.sopod.soim.data.msg.friend.Friend.UserInfo)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(net.sopod.soim.data.msg.friend.Friend.UserInfo other) { - if (other == net.sopod.soim.data.msg.friend.Friend.UserInfo.getDefaultInstance()) return this; - if (other.getUid() != 0L) { - setUid(other.getUid()); - } - if (!other.getAccount().isEmpty()) { - account_ = other.account_; - onChanged(); - } - if (!other.getNickname().isEmpty()) { - nickname_ = other.nickname_; - onChanged(); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - net.sopod.soim.data.msg.friend.Friend.UserInfo parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (net.sopod.soim.data.msg.friend.Friend.UserInfo) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private long uid_ ; - /** - * int64 uid = 1; - * @return The uid. - */ - @java.lang.Override - public long getUid() { - return uid_; - } - /** - * int64 uid = 1; - * @param value The uid to set. - * @return This builder for chaining. - */ - public Builder setUid(long value) { - - uid_ = value; - onChanged(); - return this; - } - /** - * int64 uid = 1; - * @return This builder for chaining. - */ - public Builder clearUid() { - - uid_ = 0L; - onChanged(); - return this; - } - - private java.lang.Object account_ = ""; - /** - * string account = 2; - * @return The account. - */ - public java.lang.String getAccount() { - java.lang.Object ref = account_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - account_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string account = 2; - * @return The bytes for account. - */ - public com.google.protobuf.ByteString - getAccountBytes() { - java.lang.Object ref = account_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - account_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string account = 2; - * @param value The account to set. - * @return This builder for chaining. - */ - public Builder setAccount( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - account_ = value; - onChanged(); - return this; - } - /** - * string account = 2; - * @return This builder for chaining. - */ - public Builder clearAccount() { - - account_ = getDefaultInstance().getAccount(); - onChanged(); - return this; - } - /** - * string account = 2; - * @param value The bytes for account to set. - * @return This builder for chaining. - */ - public Builder setAccountBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - account_ = value; - onChanged(); - return this; - } - - private java.lang.Object nickname_ = ""; - /** - * string nickname = 3; - * @return The nickname. - */ - public java.lang.String getNickname() { - java.lang.Object ref = nickname_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - nickname_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string nickname = 3; - * @return The bytes for nickname. - */ - public com.google.protobuf.ByteString - getNicknameBytes() { - java.lang.Object ref = nickname_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - nickname_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string nickname = 3; - * @param value The nickname to set. - * @return This builder for chaining. - */ - public Builder setNickname( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - nickname_ = value; - onChanged(); - return this; - } - /** - * string nickname = 3; - * @return This builder for chaining. - */ - public Builder clearNickname() { - - nickname_ = getDefaultInstance().getNickname(); - onChanged(); - return this; - } - /** - * string nickname = 3; - * @param value The bytes for nickname to set. - * @return This builder for chaining. - */ - public Builder setNicknameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - nickname_ = value; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.friend.UserInfo) - } - - // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.friend.UserInfo) - private static final net.sopod.soim.data.msg.friend.Friend.UserInfo DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new net.sopod.soim.data.msg.friend.Friend.UserInfo(); - } - - public static net.sopod.soim.data.msg.friend.Friend.UserInfo getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public UserInfo parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new UserInfo(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public net.sopod.soim.data.msg.friend.Friend.UserInfo getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_net_sopod_soim_data_msg_friend_ReqFriendSearch_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_net_sopod_soim_data_msg_friend_ReqFriendSearch_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_net_sopod_soim_data_msg_friend_ResFriendSearch_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_net_sopod_soim_data_msg_friend_ResFriendSearch_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_net_sopod_soim_data_msg_friend_UserInfo_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_net_sopod_soim_data_msg_friend_UserInfo_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\031proto/friend/Friend.proto\022\036net.sopod.s" + - "oim.data.msg.friend\"\"\n\017ReqFriendSearch\022\017" + - "\n\007keyword\030\001 \001(\t\"J\n\017ResFriendSearch\0227\n\005us" + - "ers\030\010 \003(\0132(.net.sopod.soim.data.msg.frie" + - "nd.UserInfo\":\n\010UserInfo\022\013\n\003uid\030\001 \001(\003\022\017\n\007" + - "account\030\002 \001(\t\022\020\n\010nickname\030\003 \001(\tB*\n\036net.s" + - "opod.soim.data.msg.friendB\006FriendP\000b\006pro" + - "to3" - }; - descriptor = com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }); - internal_static_net_sopod_soim_data_msg_friend_ReqFriendSearch_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_net_sopod_soim_data_msg_friend_ReqFriendSearch_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_net_sopod_soim_data_msg_friend_ReqFriendSearch_descriptor, - new java.lang.String[] { "Keyword", }); - internal_static_net_sopod_soim_data_msg_friend_ResFriendSearch_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_net_sopod_soim_data_msg_friend_ResFriendSearch_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_net_sopod_soim_data_msg_friend_ResFriendSearch_descriptor, - new java.lang.String[] { "Users", }); - internal_static_net_sopod_soim_data_msg_friend_UserInfo_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_net_sopod_soim_data_msg_friend_UserInfo_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_net_sopod_soim_data_msg_friend_UserInfo_descriptor, - new java.lang.String[] { "Uid", "Account", "Nickname", }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AccountSearch.java b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AccountSearch.java new file mode 100644 index 0000000..9d08135 --- /dev/null +++ b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AccountSearch.java @@ -0,0 +1,1425 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: proto/user/AccountSearch.proto + +package net.sopod.soim.data.msg.user; + +public final class AccountSearch { + private AccountSearch() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface ReqAccountSearchOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.user.ReqAccountSearch) + com.google.protobuf.MessageOrBuilder { + + /** + * string keyword = 1; + * @return The keyword. + */ + java.lang.String getKeyword(); + /** + * string keyword = 1; + * @return The bytes for keyword. + */ + com.google.protobuf.ByteString + getKeywordBytes(); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.user.ReqAccountSearch} + */ + public static final class ReqAccountSearch extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.user.ReqAccountSearch) + ReqAccountSearchOrBuilder { + private static final long serialVersionUID = 0L; + // Use ReqAccountSearch.newBuilder() to construct. + private ReqAccountSearch(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ReqAccountSearch() { + keyword_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ReqAccountSearch(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ReqAccountSearch( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + keyword_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.user.AccountSearch.internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.user.AccountSearch.internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch.class, net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch.Builder.class); + } + + public static final int KEYWORD_FIELD_NUMBER = 1; + private volatile java.lang.Object keyword_; + /** + * string keyword = 1; + * @return The keyword. + */ + @java.lang.Override + public java.lang.String getKeyword() { + java.lang.Object ref = keyword_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + keyword_ = s; + return s; + } + } + /** + * string keyword = 1; + * @return The bytes for keyword. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getKeywordBytes() { + java.lang.Object ref = keyword_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + keyword_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(keyword_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, keyword_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(keyword_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, keyword_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch other = (net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch) obj; + + if (!getKeyword() + .equals(other.getKeyword())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + KEYWORD_FIELD_NUMBER; + hash = (53 * hash) + getKeyword().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.user.ReqAccountSearch} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.user.ReqAccountSearch) + net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearchOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.user.AccountSearch.internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.user.AccountSearch.internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch.class, net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + keyword_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.user.AccountSearch.internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch getDefaultInstanceForType() { + return net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch build() { + net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch buildPartial() { + net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch result = new net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch(this); + result.keyword_ = keyword_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch) { + return mergeFrom((net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch other) { + if (other == net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch.getDefaultInstance()) return this; + if (!other.getKeyword().isEmpty()) { + keyword_ = other.keyword_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object keyword_ = ""; + /** + * string keyword = 1; + * @return The keyword. + */ + public java.lang.String getKeyword() { + java.lang.Object ref = keyword_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + keyword_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string keyword = 1; + * @return The bytes for keyword. + */ + public com.google.protobuf.ByteString + getKeywordBytes() { + java.lang.Object ref = keyword_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + keyword_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string keyword = 1; + * @param value The keyword to set. + * @return This builder for chaining. + */ + public Builder setKeyword( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + keyword_ = value; + onChanged(); + return this; + } + /** + * string keyword = 1; + * @return This builder for chaining. + */ + public Builder clearKeyword() { + + keyword_ = getDefaultInstance().getKeyword(); + onChanged(); + return this; + } + /** + * string keyword = 1; + * @param value The bytes for keyword to set. + * @return This builder for chaining. + */ + public Builder setKeywordBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + keyword_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.user.ReqAccountSearch) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.user.ReqAccountSearch) + private static final net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch(); + } + + public static net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ReqAccountSearch parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ReqAccountSearch(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AccountSearch.ReqAccountSearch getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ResAccountSearchOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.user.ResAccountSearch) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + java.util.List + getUsersList(); + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + net.sopod.soim.data.msg.user.UserGroup.UserInfo getUsers(int index); + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + int getUsersCount(); + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + java.util.List + getUsersOrBuilderList(); + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder getUsersOrBuilder( + int index); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.user.ResAccountSearch} + */ + public static final class ResAccountSearch extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.user.ResAccountSearch) + ResAccountSearchOrBuilder { + private static final long serialVersionUID = 0L; + // Use ResAccountSearch.newBuilder() to construct. + private ResAccountSearch(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ResAccountSearch() { + users_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ResAccountSearch(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ResAccountSearch( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 66: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + users_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + users_.add( + input.readMessage(net.sopod.soim.data.msg.user.UserGroup.UserInfo.parser(), extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + users_ = java.util.Collections.unmodifiableList(users_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.user.AccountSearch.internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.user.AccountSearch.internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch.class, net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch.Builder.class); + } + + public static final int USERS_FIELD_NUMBER = 8; + private java.util.List users_; + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + @java.lang.Override + public java.util.List getUsersList() { + return users_; + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + @java.lang.Override + public java.util.List + getUsersOrBuilderList() { + return users_; + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + @java.lang.Override + public int getUsersCount() { + return users_.size(); + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + @java.lang.Override + public net.sopod.soim.data.msg.user.UserGroup.UserInfo getUsers(int index) { + return users_.get(index); + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + @java.lang.Override + public net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder getUsersOrBuilder( + int index) { + return users_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < users_.size(); i++) { + output.writeMessage(8, users_.get(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < users_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, users_.get(i)); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch other = (net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch) obj; + + if (!getUsersList() + .equals(other.getUsersList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getUsersCount() > 0) { + hash = (37 * hash) + USERS_FIELD_NUMBER; + hash = (53 * hash) + getUsersList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.user.ResAccountSearch} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.user.ResAccountSearch) + net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearchOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.user.AccountSearch.internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.user.AccountSearch.internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch.class, net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getUsersFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (usersBuilder_ == null) { + users_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + usersBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.user.AccountSearch.internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch getDefaultInstanceForType() { + return net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch build() { + net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch buildPartial() { + net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch result = new net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch(this); + int from_bitField0_ = bitField0_; + if (usersBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + users_ = java.util.Collections.unmodifiableList(users_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.users_ = users_; + } else { + result.users_ = usersBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch) { + return mergeFrom((net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch other) { + if (other == net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch.getDefaultInstance()) return this; + if (usersBuilder_ == null) { + if (!other.users_.isEmpty()) { + if (users_.isEmpty()) { + users_ = other.users_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureUsersIsMutable(); + users_.addAll(other.users_); + } + onChanged(); + } + } else { + if (!other.users_.isEmpty()) { + if (usersBuilder_.isEmpty()) { + usersBuilder_.dispose(); + usersBuilder_ = null; + users_ = other.users_; + bitField0_ = (bitField0_ & ~0x00000001); + usersBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getUsersFieldBuilder() : null; + } else { + usersBuilder_.addAllMessages(other.users_); + } + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.util.List users_ = + java.util.Collections.emptyList(); + private void ensureUsersIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + users_ = new java.util.ArrayList(users_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + net.sopod.soim.data.msg.user.UserGroup.UserInfo, net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder, net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder> usersBuilder_; + + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public java.util.List getUsersList() { + if (usersBuilder_ == null) { + return java.util.Collections.unmodifiableList(users_); + } else { + return usersBuilder_.getMessageList(); + } + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public int getUsersCount() { + if (usersBuilder_ == null) { + return users_.size(); + } else { + return usersBuilder_.getCount(); + } + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public net.sopod.soim.data.msg.user.UserGroup.UserInfo getUsers(int index) { + if (usersBuilder_ == null) { + return users_.get(index); + } else { + return usersBuilder_.getMessage(index); + } + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public Builder setUsers( + int index, net.sopod.soim.data.msg.user.UserGroup.UserInfo value) { + if (usersBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureUsersIsMutable(); + users_.set(index, value); + onChanged(); + } else { + usersBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public Builder setUsers( + int index, net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder builderForValue) { + if (usersBuilder_ == null) { + ensureUsersIsMutable(); + users_.set(index, builderForValue.build()); + onChanged(); + } else { + usersBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public Builder addUsers(net.sopod.soim.data.msg.user.UserGroup.UserInfo value) { + if (usersBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureUsersIsMutable(); + users_.add(value); + onChanged(); + } else { + usersBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public Builder addUsers( + int index, net.sopod.soim.data.msg.user.UserGroup.UserInfo value) { + if (usersBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureUsersIsMutable(); + users_.add(index, value); + onChanged(); + } else { + usersBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public Builder addUsers( + net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder builderForValue) { + if (usersBuilder_ == null) { + ensureUsersIsMutable(); + users_.add(builderForValue.build()); + onChanged(); + } else { + usersBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public Builder addUsers( + int index, net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder builderForValue) { + if (usersBuilder_ == null) { + ensureUsersIsMutable(); + users_.add(index, builderForValue.build()); + onChanged(); + } else { + usersBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public Builder addAllUsers( + java.lang.Iterable values) { + if (usersBuilder_ == null) { + ensureUsersIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, users_); + onChanged(); + } else { + usersBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public Builder clearUsers() { + if (usersBuilder_ == null) { + users_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + usersBuilder_.clear(); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public Builder removeUsers(int index) { + if (usersBuilder_ == null) { + ensureUsersIsMutable(); + users_.remove(index); + onChanged(); + } else { + usersBuilder_.remove(index); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder getUsersBuilder( + int index) { + return getUsersFieldBuilder().getBuilder(index); + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder getUsersOrBuilder( + int index) { + if (usersBuilder_ == null) { + return users_.get(index); } else { + return usersBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public java.util.List + getUsersOrBuilderList() { + if (usersBuilder_ != null) { + return usersBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(users_); + } + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder addUsersBuilder() { + return getUsersFieldBuilder().addBuilder( + net.sopod.soim.data.msg.user.UserGroup.UserInfo.getDefaultInstance()); + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder addUsersBuilder( + int index) { + return getUsersFieldBuilder().addBuilder( + index, net.sopod.soim.data.msg.user.UserGroup.UserInfo.getDefaultInstance()); + } + /** + * repeated .net.sopod.soim.data.msg.user.UserInfo users = 8; + */ + public java.util.List + getUsersBuilderList() { + return getUsersFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + net.sopod.soim.data.msg.user.UserGroup.UserInfo, net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder, net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder> + getUsersFieldBuilder() { + if (usersBuilder_ == null) { + usersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + net.sopod.soim.data.msg.user.UserGroup.UserInfo, net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder, net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder>( + users_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + users_ = null; + } + return usersBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.user.ResAccountSearch) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.user.ResAccountSearch) + private static final net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch(); + } + + public static net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ResAccountSearch parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ResAccountSearch(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AccountSearch.ResAccountSearch getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\036proto/user/AccountSearch.proto\022\034net.so" + + "pod.soim.data.msg.user\032\032proto/user/UserG" + + "roup.proto\"#\n\020ReqAccountSearch\022\017\n\007keywor" + + "d\030\001 \001(\t\"I\n\020ResAccountSearch\0225\n\005users\030\010 \003" + + "(\0132&.net.sopod.soim.data.msg.user.UserIn" + + "foB\021B\rAccountSearchP\000b\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + net.sopod.soim.data.msg.user.UserGroup.getDescriptor(), + }); + internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_descriptor, + new java.lang.String[] { "Keyword", }); + internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_descriptor, + new java.lang.String[] { "Users", }); + net.sopod.soim.data.msg.user.UserGroup.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AddFriend.java b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AddFriend.java new file mode 100644 index 0000000..04e0d0b --- /dev/null +++ b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AddFriend.java @@ -0,0 +1,1038 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: proto/user/AddFriend.proto + +package net.sopod.soim.data.msg.user; + +public final class AddFriend { + private AddFriend() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface ReqAddFriendOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.user.ReqAddFriend) + com.google.protobuf.MessageOrBuilder { + + /** + * int64 uid = 1; + * @return The uid. + */ + long getUid(); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.user.ReqAddFriend} + */ + public static final class ReqAddFriend extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.user.ReqAddFriend) + ReqAddFriendOrBuilder { + private static final long serialVersionUID = 0L; + // Use ReqAddFriend.newBuilder() to construct. + private ReqAddFriend(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ReqAddFriend() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ReqAddFriend(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ReqAddFriend( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + uid_ = input.readInt64(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.user.AddFriend.internal_static_net_sopod_soim_data_msg_user_ReqAddFriend_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.user.AddFriend.internal_static_net_sopod_soim_data_msg_user_ReqAddFriend_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend.class, net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend.Builder.class); + } + + public static final int UID_FIELD_NUMBER = 1; + private long uid_; + /** + * int64 uid = 1; + * @return The uid. + */ + @java.lang.Override + public long getUid() { + return uid_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (uid_ != 0L) { + output.writeInt64(1, uid_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (uid_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, uid_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend other = (net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend) obj; + + if (getUid() + != other.getUid()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + UID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getUid()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.user.ReqAddFriend} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.user.ReqAddFriend) + net.sopod.soim.data.msg.user.AddFriend.ReqAddFriendOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.user.AddFriend.internal_static_net_sopod_soim_data_msg_user_ReqAddFriend_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.user.AddFriend.internal_static_net_sopod_soim_data_msg_user_ReqAddFriend_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend.class, net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + uid_ = 0L; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.user.AddFriend.internal_static_net_sopod_soim_data_msg_user_ReqAddFriend_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend getDefaultInstanceForType() { + return net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend build() { + net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend buildPartial() { + net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend result = new net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend(this); + result.uid_ = uid_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend) { + return mergeFrom((net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend other) { + if (other == net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend.getDefaultInstance()) return this; + if (other.getUid() != 0L) { + setUid(other.getUid()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private long uid_ ; + /** + * int64 uid = 1; + * @return The uid. + */ + @java.lang.Override + public long getUid() { + return uid_; + } + /** + * int64 uid = 1; + * @param value The uid to set. + * @return This builder for chaining. + */ + public Builder setUid(long value) { + + uid_ = value; + onChanged(); + return this; + } + /** + * int64 uid = 1; + * @return This builder for chaining. + */ + public Builder clearUid() { + + uid_ = 0L; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.user.ReqAddFriend) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.user.ReqAddFriend) + private static final net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend(); + } + + public static net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ReqAddFriend parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ReqAddFriend(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AddFriend.ReqAddFriend getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ResAddFriendOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.user.ResAddFriend) + com.google.protobuf.MessageOrBuilder { + + /** + * bool success = 1; + * @return The success. + */ + boolean getSuccess(); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.user.ResAddFriend} + */ + public static final class ResAddFriend extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.user.ResAddFriend) + ResAddFriendOrBuilder { + private static final long serialVersionUID = 0L; + // Use ResAddFriend.newBuilder() to construct. + private ResAddFriend(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ResAddFriend() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ResAddFriend(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ResAddFriend( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + success_ = input.readBool(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.user.AddFriend.internal_static_net_sopod_soim_data_msg_user_ResAddFriend_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.user.AddFriend.internal_static_net_sopod_soim_data_msg_user_ResAddFriend_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.user.AddFriend.ResAddFriend.class, net.sopod.soim.data.msg.user.AddFriend.ResAddFriend.Builder.class); + } + + public static final int SUCCESS_FIELD_NUMBER = 1; + private boolean success_; + /** + * bool success = 1; + * @return The success. + */ + @java.lang.Override + public boolean getSuccess() { + return success_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (success_ != false) { + output.writeBool(1, success_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (success_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(1, success_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.user.AddFriend.ResAddFriend)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.user.AddFriend.ResAddFriend other = (net.sopod.soim.data.msg.user.AddFriend.ResAddFriend) obj; + + if (getSuccess() + != other.getSuccess()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUCCESS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getSuccess()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.user.AddFriend.ResAddFriend prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.user.ResAddFriend} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.user.ResAddFriend) + net.sopod.soim.data.msg.user.AddFriend.ResAddFriendOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.user.AddFriend.internal_static_net_sopod_soim_data_msg_user_ResAddFriend_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.user.AddFriend.internal_static_net_sopod_soim_data_msg_user_ResAddFriend_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.user.AddFriend.ResAddFriend.class, net.sopod.soim.data.msg.user.AddFriend.ResAddFriend.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.user.AddFriend.ResAddFriend.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + success_ = false; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.user.AddFriend.internal_static_net_sopod_soim_data_msg_user_ResAddFriend_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AddFriend.ResAddFriend getDefaultInstanceForType() { + return net.sopod.soim.data.msg.user.AddFriend.ResAddFriend.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AddFriend.ResAddFriend build() { + net.sopod.soim.data.msg.user.AddFriend.ResAddFriend result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AddFriend.ResAddFriend buildPartial() { + net.sopod.soim.data.msg.user.AddFriend.ResAddFriend result = new net.sopod.soim.data.msg.user.AddFriend.ResAddFriend(this); + result.success_ = success_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.user.AddFriend.ResAddFriend) { + return mergeFrom((net.sopod.soim.data.msg.user.AddFriend.ResAddFriend)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.user.AddFriend.ResAddFriend other) { + if (other == net.sopod.soim.data.msg.user.AddFriend.ResAddFriend.getDefaultInstance()) return this; + if (other.getSuccess() != false) { + setSuccess(other.getSuccess()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.user.AddFriend.ResAddFriend parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.user.AddFriend.ResAddFriend) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private boolean success_ ; + /** + * bool success = 1; + * @return The success. + */ + @java.lang.Override + public boolean getSuccess() { + return success_; + } + /** + * bool success = 1; + * @param value The success to set. + * @return This builder for chaining. + */ + public Builder setSuccess(boolean value) { + + success_ = value; + onChanged(); + return this; + } + /** + * bool success = 1; + * @return This builder for chaining. + */ + public Builder clearSuccess() { + + success_ = false; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.user.ResAddFriend) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.user.ResAddFriend) + private static final net.sopod.soim.data.msg.user.AddFriend.ResAddFriend DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.user.AddFriend.ResAddFriend(); + } + + public static net.sopod.soim.data.msg.user.AddFriend.ResAddFriend getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ResAddFriend parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ResAddFriend(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.user.AddFriend.ResAddFriend getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_user_ReqAddFriend_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_user_ReqAddFriend_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_user_ResAddFriend_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_user_ResAddFriend_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\032proto/user/AddFriend.proto\022\034net.sopod." + + "soim.data.msg.user\"\033\n\014ReqAddFriend\022\013\n\003ui" + + "d\030\001 \001(\003\"\037\n\014ResAddFriend\022\017\n\007success\030\001 \001(\010" + + "B\rB\tAddFriendP\000b\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_net_sopod_soim_data_msg_user_ReqAddFriend_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_net_sopod_soim_data_msg_user_ReqAddFriend_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_user_ReqAddFriend_descriptor, + new java.lang.String[] { "Uid", }); + internal_static_net_sopod_soim_data_msg_user_ResAddFriend_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_net_sopod_soim_data_msg_user_ResAddFriend_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_user_ResAddFriend_descriptor, + new java.lang.String[] { "Success", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/UserGroup.java b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/UserGroup.java index fb8e5b6..9ec6175 100644 --- a/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/UserGroup.java +++ b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/UserGroup.java @@ -1560,6 +1560,18 @@ public final class UserGroup { */ com.google.protobuf.ByteString getAccountBytes(); + + /** + * string nickname = 3; + * @return The nickname. + */ + java.lang.String getNickname(); + /** + * string nickname = 3; + * @return The bytes for nickname. + */ + com.google.protobuf.ByteString + getNicknameBytes(); } /** * Protobuf type {@code net.sopod.soim.data.msg.user.UserInfo} @@ -1575,6 +1587,7 @@ public final class UserGroup { } private UserInfo() { account_ = ""; + nickname_ = ""; } @java.lang.Override @@ -1618,6 +1631,12 @@ public final class UserGroup { account_ = s; break; } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + nickname_ = s; + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -1699,6 +1718,44 @@ public final class UserGroup { } } + public static final int NICKNAME_FIELD_NUMBER = 3; + private volatile java.lang.Object nickname_; + /** + * string nickname = 3; + * @return The nickname. + */ + @java.lang.Override + public java.lang.String getNickname() { + java.lang.Object ref = nickname_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nickname_ = s; + return s; + } + } + /** + * string nickname = 3; + * @return The bytes for nickname. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNicknameBytes() { + java.lang.Object ref = nickname_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + nickname_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -1719,6 +1776,9 @@ public final class UserGroup { if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) { com.google.protobuf.GeneratedMessageV3.writeString(output, 2, account_); } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nickname_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, nickname_); + } unknownFields.writeTo(output); } @@ -1735,6 +1795,9 @@ public final class UserGroup { if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, account_); } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nickname_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, nickname_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -1754,6 +1817,8 @@ public final class UserGroup { != other.getUid()) return false; if (!getAccount() .equals(other.getAccount())) return false; + if (!getNickname() + .equals(other.getNickname())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -1770,6 +1835,8 @@ public final class UserGroup { getUid()); hash = (37 * hash) + ACCOUNT_FIELD_NUMBER; hash = (53 * hash) + getAccount().hashCode(); + hash = (37 * hash) + NICKNAME_FIELD_NUMBER; + hash = (53 * hash) + getNickname().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -1907,6 +1974,8 @@ public final class UserGroup { account_ = ""; + nickname_ = ""; + return this; } @@ -1935,6 +2004,7 @@ public final class UserGroup { net.sopod.soim.data.msg.user.UserGroup.UserInfo result = new net.sopod.soim.data.msg.user.UserGroup.UserInfo(this); result.uid_ = uid_; result.account_ = account_; + result.nickname_ = nickname_; onBuilt(); return result; } @@ -1990,6 +2060,10 @@ public final class UserGroup { account_ = other.account_; onChanged(); } + if (!other.getNickname().isEmpty()) { + nickname_ = other.nickname_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -2125,6 +2199,82 @@ public final class UserGroup { onChanged(); return this; } + + private java.lang.Object nickname_ = ""; + /** + * string nickname = 3; + * @return The nickname. + */ + public java.lang.String getNickname() { + java.lang.Object ref = nickname_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nickname_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string nickname = 3; + * @return The bytes for nickname. + */ + public com.google.protobuf.ByteString + getNicknameBytes() { + java.lang.Object ref = nickname_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + nickname_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string nickname = 3; + * @param value The nickname to set. + * @return This builder for chaining. + */ + public Builder setNickname( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + nickname_ = value; + onChanged(); + return this; + } + /** + * string nickname = 3; + * @return This builder for chaining. + */ + public Builder clearNickname() { + + nickname_ = getDefaultInstance().getNickname(); + onChanged(); + return this; + } + /** + * string nickname = 3; + * @param value The bytes for nickname to set. + * @return This builder for chaining. + */ + public Builder setNicknameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + nickname_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -2206,9 +2356,10 @@ public final class UserGroup { "soim.data.msg.user\"$\n\021ReqOnlineUserList\022" + "\017\n\007keyword\030\002 \001(\t\"J\n\021ResOnlineUserList\0225\n" + "\005users\030\002 \003(\0132&.net.sopod.soim.data.msg.u" + - "ser.UserInfo\"(\n\010UserInfo\022\013\n\003uid\030\001 \001(\003\022\017\n" + - "\007account\030\002 \001(\tB+\n\034net.sopod.soim.data.ms" + - "g.userB\tUserGroupP\000b\006proto3" + "ser.UserInfo\":\n\010UserInfo\022\013\n\003uid\030\001 \001(\003\022\017\n" + + "\007account\030\002 \001(\t\022\020\n\010nickname\030\003 \001(\tB+\n\034net." + + "sopod.soim.data.msg.userB\tUserGroupP\000b\006p" + + "roto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -2231,7 +2382,7 @@ public final class UserGroup { internal_static_net_sopod_soim_data_msg_user_UserInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_net_sopod_soim_data_msg_user_UserInfo_descriptor, - new java.lang.String[] { "Uid", "Account", }); + new java.lang.String[] { "Uid", "Account", "Nickname", }); } // @@protoc_insertion_point(outer_class_scope) diff --git a/im-service-api/im-entry-protocol/src/main/resources/proto/friend/Friend.proto b/im-service-api/im-entry-protocol/src/main/resources/proto/friend/Friend.proto deleted file mode 100644 index 7881446..0000000 --- a/im-service-api/im-entry-protocol/src/main/resources/proto/friend/Friend.proto +++ /dev/null @@ -1,19 +0,0 @@ -syntax="proto3"; - -option java_multiple_files = false; -option java_outer_classname = "Friend"; -option java_package = "net.sopod.soim.data.msg.friend"; - -package net.sopod.soim.data.msg.friend; - -message ReqFriendSearch { - string keyword = 1; -} -message ResFriendSearch { - repeated UserInfo users = 8; -} -message UserInfo { - int64 uid = 1; - string account = 2; - string nickname = 3; -} diff --git a/im-service-api/im-entry-protocol/src/main/resources/proto/user/AccountSearch.proto b/im-service-api/im-entry-protocol/src/main/resources/proto/user/AccountSearch.proto new file mode 100644 index 0000000..b4d5e66 --- /dev/null +++ b/im-service-api/im-entry-protocol/src/main/resources/proto/user/AccountSearch.proto @@ -0,0 +1,15 @@ +syntax="proto3"; + +option java_multiple_files = false; +option java_outer_classname = "AccountSearch"; + +package net.sopod.soim.data.msg.user; + +import "proto/user/UserGroup.proto"; + +message ReqAccountSearch { + string keyword = 1; +} +message ResAccountSearch { + repeated UserInfo users = 8; +} \ No newline at end of file diff --git a/im-service-api/im-entry-protocol/src/main/resources/proto/user/AddFriend.proto b/im-service-api/im-entry-protocol/src/main/resources/proto/user/AddFriend.proto new file mode 100644 index 0000000..14da0e9 --- /dev/null +++ b/im-service-api/im-entry-protocol/src/main/resources/proto/user/AddFriend.proto @@ -0,0 +1,14 @@ +syntax="proto3"; + +option java_multiple_files = false; +option java_outer_classname = "AddFriend"; + +package net.sopod.soim.data.msg.user; + +message ReqAddFriend { + int64 uid = 1; +} + +message ResAddFriend { + bool success = 1; +} diff --git a/im-service-api/im-entry-protocol/src/main/resources/proto/user/UserGroup.proto b/im-service-api/im-entry-protocol/src/main/resources/proto/user/UserGroup.proto index dfab1d2..1854171 100644 --- a/im-service-api/im-entry-protocol/src/main/resources/proto/user/UserGroup.proto +++ b/im-service-api/im-entry-protocol/src/main/resources/proto/user/UserGroup.proto @@ -14,8 +14,8 @@ message ReqOnlineUserList { message ResOnlineUserList { repeated UserInfo users = 2; // 查询用户列表 } - message UserInfo { int64 uid = 1; string account = 2; + string nickname = 3; } diff --git a/im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt b/im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt index 7f8f487..275654b 100644 --- a/im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt +++ b/im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt @@ -1,14 +1,15 @@ -net.sopod.soim.data.msg.net.HeartBeat$Ping=10000 -net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10001 -net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10002 -net.sopod.soim.data.msg.friend.Friend$ResFriendSearch=10003 -net.sopod.soim.data.msg.hello.HelloPB$Hello=10004 -net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10005 -net.sopod.soim.data.msg.friend.Friend$ReqFriendSearch=10006 -net.sopod.soim.data.msg.friend.Friend$UserInfo=10007 -net.sopod.soim.data.msg.user.UserGroup$UserInfo=10008 -net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10009 +net.sopod.soim.data.msg.hello.HelloPB$Hello=10000 +net.sopod.soim.data.msg.net.HeartBeat$Ping=10001 +net.sopod.soim.data.msg.user.UserGroup$UserInfo=10002 +net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10003 +net.sopod.soim.data.msg.chat.Chat$TextChat=10004 +net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10005 +net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10006 +net.sopod.soim.data.msg.hello.HelloPB$World=10007 +net.sopod.soim.data.msg.user.AddFriend$ReqAddFriend=10008 +net.sopod.soim.data.msg.user.AddFriend$ResAddFriend=10009 net.sopod.soim.data.msg.auth.Auth$ReqTokenAuth=10010 -net.sopod.soim.data.msg.net.HeartBeat$Pong=10011 -net.sopod.soim.data.msg.chat.Chat$TextChat=10012 -net.sopod.soim.data.msg.hello.HelloPB$World=10013 +net.sopod.soim.data.msg.user.AccountSearch$ReqAccountSearch=10011 +net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10012 +net.sopod.soim.data.msg.net.HeartBeat$Pong=10013 +net.sopod.soim.data.msg.user.AccountSearch$ResAccountSearch=10014 diff --git a/im-service-api/im-logic-common/src/main/java/net/sopod/soim/logic/common/model/UserInfo.java b/im-service-api/im-logic-common/src/main/java/net/sopod/soim/logic/common/model/UserInfo.java index 3391007..822b65d 100644 --- a/im-service-api/im-logic-common/src/main/java/net/sopod/soim/logic/common/model/UserInfo.java +++ b/im-service-api/im-logic-common/src/main/java/net/sopod/soim/logic/common/model/UserInfo.java @@ -21,4 +21,6 @@ public class UserInfo implements Serializable { private String account; + private String nickname; + } diff --git a/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/api/user/service/AccountService.java b/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/api/user/service/AccountService.java new file mode 100644 index 0000000..92c972d --- /dev/null +++ b/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/api/user/service/AccountService.java @@ -0,0 +1,18 @@ +package net.sopod.soim.logic.api.user.service; + +import net.sopod.soim.logic.common.model.UserInfo; + +import java.util.List; +import java.util.concurrent.CompletableFuture; + +/** + * AccountService + * + * @author tmy + * @date 2022-05-21 19:07 + */ +public interface AccountService { + + CompletableFuture> searchAccountLikely(String keyword); + +} diff --git a/im-service-api/pom.xml b/im-service-api/pom.xml index 502a66d..6b5f927 100644 --- a/im-service-api/pom.xml +++ b/im-service-api/pom.xml @@ -46,16 +46,16 @@ - + + os-maven-plugin 1.6.1 - + org.xolstice.maven.plugins protobuf-maven-plugin @@ -94,7 +94,7 @@ - + --> \ No newline at end of file diff --git a/im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/service/UserSearchServiceImpl.java b/im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/service/UserSearchServiceImpl.java index 7c80d15..d749f03 100644 --- a/im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/service/UserSearchServiceImpl.java +++ b/im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/service/UserSearchServiceImpl.java @@ -27,7 +27,7 @@ public class UserSearchServiceImpl implements AccountSearchService { @Override public ResAccountSearch searchAccountLikely(ReqAccountSearch request) { - // 查询在线用户列表 + // 查询用户账户列表 List imUsers = userDas.searchImUser(request.getKeyword(), 10); List userInfos = imUsers.stream().map( imUser -> AccountInfo.newBuilder(). diff --git a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/AccountServiceImpl.java b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/AccountServiceImpl.java new file mode 100644 index 0000000..65c78c1 --- /dev/null +++ b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/AccountServiceImpl.java @@ -0,0 +1,39 @@ +package net.sopod.soim.logic.user.service; + +import net.sopod.soim.das.user.api.model.entity.ImUser; +import net.sopod.soim.das.user.api.service.UserDas; +import net.sopod.soim.logic.api.user.service.AccountService; +import net.sopod.soim.logic.common.model.UserInfo; +import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.dubbo.config.annotation.DubboService; + +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +/** + * AccountServiceImpl + * + * @author tmy + * @date 2022-05-21 19:08 + */ +@DubboService +public class AccountServiceImpl implements AccountService { + + @DubboReference + private UserDas userDas; + + @Override + public CompletableFuture> searchAccountLikely(String keyword) { + // 查询用户账户列表 + List imUsers = userDas.searchImUser(keyword, 10); + List userInfos = imUsers.stream().map(imUser -> + new UserInfo() + .setUid(imUser.getId()) + .setAccount(imUser.getAccount()) + .setNickname(imUser.getNickname()) + ).collect(Collectors.toList()); + return CompletableFuture.completedFuture(userInfos); + } + +}