123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659
  1. {
  2. "name": "灌南条码",
  3. "describe": "灌南条码",
  4. "avatar": "",
  5. "version": "4.0.0",
  6. "createdTime": "2022-5-6 10:02:51",
  7. "updatedTime": "2022-5-6 10:59:35",
  8. "dbConns": [],
  9. "profile": {
  10. "default": {
  11. "db": "29D1CE08-4C35-4D2D-AAA9-23D93305B52E",
  12. "dbConn": "",
  13. "entityInitFields": [
  14. {
  15. "defKey": "id",
  16. "defName": "id",
  17. "comment": "",
  18. "type": "",
  19. "len": "",
  20. "scale": "",
  21. "primaryKey": true,
  22. "notNull": true,
  23. "autoIncrement": false,
  24. "defaultValue": "",
  25. "hideInGraph": false,
  26. "refDict": "",
  27. "domain": "16120F75-6AA7-4483-868D-F07F511BB081",
  28. "id": "5C4D7A6C-A76B-4835-A7E3-C9DB5ECC258A"
  29. },
  30. {
  31. "defKey": "name",
  32. "defName": "名称",
  33. "comment": "",
  34. "type": "",
  35. "len": "",
  36. "scale": "",
  37. "primaryKey": false,
  38. "notNull": false,
  39. "autoIncrement": false,
  40. "defaultValue": "",
  41. "hideInGraph": false,
  42. "refDict": "",
  43. "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6",
  44. "id": "07757787-5242-470A-B7C5-0AEABEC64183"
  45. },
  46. {
  47. "defKey": "status",
  48. "defName": "状态",
  49. "comment": "",
  50. "type": "INT",
  51. "len": 1,
  52. "scale": "",
  53. "primaryKey": false,
  54. "notNull": false,
  55. "autoIncrement": false,
  56. "defaultValue": "1",
  57. "hideInGraph": false,
  58. "refDict": "",
  59. "domain": "",
  60. "id": "76545D0F-CE60-4242-BCB1-659890042354"
  61. },
  62. {
  63. "defKey": "create_date",
  64. "defName": "创建日期",
  65. "comment": "",
  66. "type": "",
  67. "len": "",
  68. "scale": "",
  69. "primaryKey": false,
  70. "notNull": false,
  71. "autoIncrement": false,
  72. "defaultValue": "CURRENT_TIMESTAMP",
  73. "hideInGraph": false,
  74. "refDict": "",
  75. "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
  76. "id": "1FE07EA9-DBB0-4D21-A5F2-4B7016D20E1F"
  77. }
  78. ],
  79. "entityInitProperties": {
  80. "partitioned by": "(date string)",
  81. "row format delimited": "",
  82. "fields terminated by ','": "",
  83. "collection items terminated by '-'": "",
  84. "map keys terminated by ':'": "",
  85. "store as textfile;": ""
  86. }
  87. },
  88. "javaHome": "",
  89. "sql": {
  90. "delimiter": ""
  91. },
  92. "dataTypeSupports": [
  93. {
  94. "defKey": "MYSQL",
  95. "id": "29D1CE08-4C35-4D2D-AAA9-23D93305B52E"
  96. },
  97. {
  98. "defKey": "ORACLE",
  99. "id": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542"
  100. },
  101. {
  102. "defKey": "SQLServer",
  103. "id": "BFC87171-C74F-494A-B7C2-76B9C55FACC9"
  104. },
  105. {
  106. "defKey": "PostgreSQL",
  107. "id": "DFBEC1DD-AA84-456E-BBF3-C95DD0DB2022"
  108. },
  109. {
  110. "defKey": "DB2",
  111. "id": "89504F5D-94BF-4C9E-8B2E-44F37305FED5"
  112. },
  113. {
  114. "defKey": "DM",
  115. "id": "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307"
  116. },
  117. {
  118. "defKey": "GaussDB",
  119. "id": "592C7013-143D-4E7B-AF64-0D7BF1E28230"
  120. },
  121. {
  122. "defKey": "Kingbase",
  123. "id": "77BD85E5-9D0D-4096-8427-CBA306FC9C6A"
  124. },
  125. {
  126. "defKey": "MaxCompute",
  127. "id": "11D1FB71-A587-4217-89BA-611B8A1F83E0"
  128. },
  129. {
  130. "defKey": "SQLite",
  131. "id": "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1"
  132. },
  133. {
  134. "defKey": "JAVA",
  135. "id": "797A1496-D649-4261-89B4-544132EC3F36"
  136. },
  137. {
  138. "defKey": "JavaMybatis",
  139. "id": "895CFD1D-4273-4D32-A2C4-CAC70200AB5B"
  140. },
  141. {
  142. "defKey": "JavaMybatisPlus",
  143. "id": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073"
  144. },
  145. {
  146. "defKey": "C#",
  147. "id": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30"
  148. },
  149. {
  150. "defKey": "Hive",
  151. "id": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2"
  152. }
  153. ],
  154. "codeTemplates": [
  155. {
  156. "type": "appCode",
  157. "applyFor": "797A1496-D649-4261-89B4-544132EC3F36",
  158. " JpaBean": "{{ 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 javax.persistence.*;\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@Table(name=\"{{=it.entity.defKey}}\")\npublic class {{=beanClass}} implements Serializable,Cloneable{\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n {{? field.primaryKey }}\n @Id\n @GeneratedValue\n {{?}}\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}"
  159. },
  160. {
  161. "type": "appCode",
  162. "applyFor": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30",
  163. "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 /// <summary>\n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// </summary>\n public {{=field.type}} {{=it.func.camel(field.defKey,true)}} { get; set; }\n $blankline\n {{~}}\n \n }\n}",
  164. "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 /// <summary>\n /// {{=it.func.join(it.entity.defName,it.entity.comment,';')}}\n /// </summary>\n {{=sqlSugartable}}\n public class {{=it.entity.defKey}}\n {\n {{~it.entity.fields:field:index}}\n /// <summary>\n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// </summary>\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}"
  165. },
  166. {
  167. "applyFor": "895CFD1D-4273-4D32-A2C4-CAC70200AB5B",
  168. "type": "appCode",
  169. "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 io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.domain.Page;\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<Page<{{=beanClass}}>> 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<Boolean> deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}",
  170. "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}",
  171. "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}",
  172. "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}",
  173. "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}}<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"{{=pkgName}}.mapper.{{=beanClass}}Mapper\">\n <resultMap type=\"{{=pkgName}}.entity.{{=beanClass}}\" id=\"{{=beanClass}}Map\">\n {{~it.entity.fields:field:index}}\n <result property=\"{{=it.func.camel(field.defKey,false)}}\" column=\"{{=field.defKey}}\" jdbcType=\"{{=field.dbType}}\"/>\n {{~}}\n </resultMap>\n $blankline\n <!-- 通过ID查询单条数据 -->\n <select id=\"queryById\" resultMap=\"{{=beanClass}}Map\">\n select\n {{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}}\n from {{=it.entity.defKey}}\n where {{=pkField}} = #{{{=pkVarName}}}\n </select>\n $blankline\n <!--分页查询指定行数据-->\n <select id=\"queryAllByLimit\" resultMap=\"{{=beanClass}}Map\">\n select\n {{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}}\n from {{=it.entity.defKey}}\n <where>\n {{~it.entity.fields:field:index}}\n <if test=\"{{=it.func.camel(field.defKey,false)}} != null and {{=it.func.camel(field.defKey,false)}} != ''\">\n and {{=field.defKey}} = #{{{=it.func.camel(field.defKey,false)}}}\n </if>\n {{~}}\n </where>\n limit #{pageable.offset}, #{pageable.pageSize}\n </select>\n $blankline\n <!--统计总行数-->\n <select id=\"count\" resultType=\"java.lang.Long\">\n select count(1)\n from {{=it.entity.defKey}}\n <where>\n {{~it.entity.fields:field:index}}\n <if test=\"{{=it.func.camel(field.defKey,false)}} != null and {{=it.func.camel(field.defKey,false)}} != ''\">\n and {{=field.defKey}} = #{{{=it.func.camel(field.defKey,false)}}}\n </if>\n {{~}}\n </where>\n </select>\n $blankline\n <!--新增数据-->\n <insert id=\"insert\" keyProperty=\"{{=pkField}}\" useGeneratedKeys=\"true\">\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 </insert>\n $blankline\n <!-- 批量新增数据 -->\n <insert id=\"insertBatch\" keyProperty=\"{{=pkField}}\" useGeneratedKeys=\"true\">\n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n <foreach collection=\"entities\" item=\"entity\" separator=\",\">\n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n </foreach>\n </insert>\n $blankline\n <!-- 批量新增或按主键更新数据 -->\n <insert id=\"insertOrUpdateBatch\" keyProperty=\"{{=pkField}}\" useGeneratedKeys=\"true\">\n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n <foreach collection=\"entities\" item=\"entity\" separator=\",\">\n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n </foreach>\n on duplicate key update\n {{=it.entity.fields.map(function(e,i){return e.defKey + '=values('+e.defKey+')'}).join(',\\n\\t\\t')}}\n </insert>\n $blankline\n <!-- 更新数据 -->\n <update id=\"update\">\n update {{=it.entity.defKey}}\n <set>\n {{~it.entity.fields:field:index}}\n <if test=\"{{=it.func.camel(field.defKey,false)}} != null and {{=it.func.camel(field.defKey,false)}} != ''\">\n {{=field.defKey}} = #{{{=it.func.camel(field.defKey,false)}}},\n </if>\n {{~}}\n </set>\n where {{=pkField}} = #{{{=pkVarName}}}\n </update>\n $blankline\n <!--通过主键删除-->\n <delete id=\"deleteById\">\n delete from {{=it.entity.defKey}} where {{=pkField}} = #{{{=pkVarName}}}\n </delete>\n</mapper>\n\n",
  174. "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}"
  175. },
  176. {
  177. "applyFor": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073",
  178. "type": "appCode",
  179. "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<PageImpl<{{=beanClass}}>> 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<Boolean> deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}",
  180. "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}",
  181. "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}",
  182. "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}",
  183. "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}}<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n$blankline\n\n<mapper namespace=\"{{=pkgName}}.mapper.{{=beanClass}}Mapper\">\n <select id=\"selectByPage\" resultType=\"{{=pkgName}}.entity.{{=beanClass}}\">\n select * from user ${ew.customSqlSegment}\n </select>\n</mapper>\n\n",
  184. "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}"
  185. },
  186. {
  187. "applyFor": "29D1CE08-4C35-4D2D-AAA9-23D93305B52E",
  188. "type": "dbDDL",
  189. "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.dbType}}{{?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<pkList.length-1 ? ',' : '' }}{{~}})\n{{?}}\n) COMMENT = '{{=it.func.join(it.entity.defName,it.entity.comment,';') }}';\n$blankline\n",
  190. "createView": "CREATE VIEW {{=it.view.defKey}} AS\nSELECT \n{{~it.view.fields:field:index}}\n {{=field.refEntity}}.{{=field.refEntityField}} AS {{=field.defKey}}{{= index < it.view.fields.length-1 ? ',' : ''}}\n{{~}}\nFROM {{~it.view.refEntities:refEntity:index}}{{=refEntity}}{{= index < it.view.refEntities.length-1 ? ',' : ''}}{{~}};\n$blankline\n",
  191. "deleteTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};",
  192. "createIndex": "{{~ it.entity.indexes:index}}\nCREATE {{? index.unique}}UNIQUE {{?}}INDEX {{=index.defKey}} ON {{=it.entity.defKey}}({{ fieldsKeys = index.fields.map(function(field){return field.fieldDefKey}) ; }}{{=it.func.join(...fieldsKeys,',')}});\n{{~}}",
  193. "deleteIndex": "{{~ it.entity.indexes:index}}\nDROP INDEX {{=index.defKey}} ;\n{{~}}",
  194. "message": "{{\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 baseChanged(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('代码:'+(before.defKey||'NULL')+'->'+(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",
  195. "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{{?}}"
  196. },
  197. {
  198. "applyFor": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542",
  199. "type": "dbDDL",
  200. "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<pkList.length-1 ? ',' : '' }}{{~}})\n{{?}}\n);\n$blankline\n{{? it.entity.defKey || it.entity.defName}}COMMENT ON TABLE {{=it.entity.defKey}} IS '{{=it.func.join(it.entity.defName,it.entity.comment,';')}}';{{?}}\n{{~it.entity.fields:field:index}}\n{{? field.defName || field.comment}}COMMENT ON COLUMN {{=it.entity.defKey}}.{{=field.defKey}} IS '{{=it.func.join(field.defName,field.comment,';')}}';{{?}}\n{{~}}",
  201. "createView": "CREATE VIEW {{=it.view.defKey}} AS\nSELECT \n{{~it.view.fields:field:index}}\n {{=field.refEntity}}.{{=field.refEntityField}} AS {{=field.defKey}}{{= index < it.view.fields.length-1 ? ',' : ''}}\n{{~}}\nFROM {{~it.view.refEntities:refEntity:index}}{{=refEntity}}{{= index < it.view.refEntities.length-1 ? ',' : ''}}{{~}};\n$blankline\n",
  202. "deleteTable": "DROP TABLE {{=it.entity.defKey}};",
  203. "createIndex": "{{~ it.entity.indexes:index}}\nCREATE {{? index.unique}}UNIQUE {{?}}INDEX {{=index.defKey}} ON {{=it.entity.defKey}}({{ fieldsKeys = index.fields.map(function(field){return field.fieldDefKey}) ; }}{{=it.func.join(...fieldsKeys,',')}});\n{{~}}",
  204. "deleteIndex": "{{~ it.entity.indexes:index}}\nDROP INDEX {{=index.defKey}} ;\n{{~}}",
  205. "message": "{{\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 baseChanged(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('代码:'+(before.defKey||'NULL')+'->'+(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{{?}}",
  206. "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{{?}}"
  207. },
  208. {
  209. "applyFor": "BFC87171-C74F-494A-B7C2-76B9C55FACC9",
  210. "type": "dbDDL",
  211. "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<pkList.length-1 ? ',' : '' }}{{~}})\n{{?}}\n);\n$blankline\n{{? it.entity.defKey || it.entity.defName}}EXEC sp_addextendedproperty 'MS_Description', '{{=it.func.join(it.entity.defName,it.entity.comment,';')}}', 'SCHEMA', dbo, 'table', {{=it.entity.defKey}}, null, null;{{?}}\n{{~it.entity.fields:field:index}}\nEXEC sp_addextendedproperty 'MS_Description', '{{=it.func.join(field.defName,field.comment,';')}}', 'SCHEMA', dbo, 'table', {{=it.entity.defKey}}, 'column', {{=field.defKey}};\n{{~}}\n",
  212. "createView": "CREATE VIEW {{=it.view.defKey}} AS\nSELECT \n{{~it.view.fields:field:index}}\n {{=field.refEntity}}.{{=field.refEntityField}} AS {{=field.defKey}}{{= index < it.view.fields.length-1 ? ',' : ''}}\n{{~}}\nFROM {{~it.view.refEntities:refEntity:index}}{{=refEntity}}{{= index < it.view.refEntities.length-1 ? ',' : ''}}{{~}};\n$blankline\n",
  213. "deleteTable": "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}}];",
  214. "createIndex": "{{~ it.entity.indexes:index}}\nCREATE {{? index.unique}}UNIQUE {{?}}INDEX {{=index.defKey}} ON {{=it.entity.defKey}}({{ fieldsKeys = index.fields.map(function(field){return field.fieldDefKey}) ; }}{{=it.func.join(...fieldsKeys,',')}});\n{{~}}",
  215. "deleteIndex": "",
  216. "message": "{{\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 baseChanged(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('代码:'+(before.defKey||'NULL')+'->'+(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{{?}}",
  217. "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(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 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{{?}}"
  218. },
  219. {
  220. "applyFor": "DFBEC1DD-AA84-456E-BBF3-C95DD0DB2022",
  221. "type": "dbDDL",
  222. "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<pkList.length-1 ? ',' : '' }}{{~}})\n{{?}}\n);\n$blankline\n{{? it.entity.defKey || it.entity.defName}}COMMENT ON TABLE {{=it.entity.defKey}} IS '{{=it.func.join(it.entity.defName,it.entity.comment,';')}}';{{?}}\n{{~it.entity.fields:field:index}}\n{{? field.defName || field.comment}}COMMENT ON COLUMN {{=it.entity.defKey}}.{{=field.defKey}} IS '{{=it.func.join(field.defName,field.comment,';')}}';{{?}}\n{{~}}",
  223. "createView": "CREATE VIEW {{=it.view.defKey}} AS\nSELECT \n{{~it.view.fields:field:index}}\n {{=field.refEntity}}.{{=field.refEntityField}} AS {{=field.defKey}}{{= index < it.view.fields.length-1 ? ',' : ''}}\n{{~}}\nFROM {{~it.view.refEntities:refEntity:index}}{{=refEntity}}{{= index < it.view.refEntities.length-1 ? ',' : ''}}{{~}};\n$blankline\n",
  224. "deleteTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};",
  225. "createIndex": "{{~ it.entity.indexes:index}}\nCREATE {{? index.unique}}UNIQUE {{?}}INDEX {{=index.defKey}} ON {{=it.entity.defKey}}({{ fieldsKeys = index.fields.map(function(field){return field.fieldDefKey}) ; }}{{=it.func.join(...fieldsKeys,',')}});\n{{~}}",
  226. "deleteIndex": "{{~ it.entity.indexes:index}}\nDROP INDEX {{=index.defKey}} ;\n{{~}}",
  227. "message": "{{\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 baseChanged(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('代码:'+(before.defKey||'NULL')+'->'+(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{{?}}",
  228. "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{{?}}"
  229. },
  230. {
  231. "type": "dbDDL",
  232. "applyFor": "89504F5D-94BF-4C9E-8B2E-44F37305FED5",
  233. "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 }}{{= i<pkList.length-1 ? ',' : '' }}{{~}})\n{{?}}\n);\n$blankline\n{{? it.entity.defKey || it.entity.defName}}COMMENT ON TABLE {{=it.entity.defKey}} IS '{{=it.func.join(it.entity.defName,it.entity.comment,';')}}';{{?}}\n{{~it.entity.fields:field:index}}\n{{? field.defName || field.comment}}COMMENT ON COLUMN {{=it.entity.defKey}}.{{=field.defKey}} IS '{{=it.func.join(field.defName,field.comment,';')}}';{{?}}\n{{~}}",
  234. "createIndex": "{{~ it.entity.indexes:index}}\nCREATE {{? index.unique}}UNIQUE {{?}}INDEX {{=index.defKey}} ON {{=it.entity.defKey}}({{ fieldsKeys = index.fields.map(function(field){return field.fieldDefKey}) ; }}{{=it.func.join(...fieldsKeys,',')}});\n{{~}}",
  235. "createView": "CREATE VIEW {{=it.view.defKey}} AS\nSELECT \n{{~it.view.fields:field:index}}\n {{=field.refEntity}}.{{=field.refEntityField}} AS {{=field.defKey}}{{= index < it.view.fields.length-1 ? ',' : ''}}\n{{~}}\nFROM {{~it.view.refEntities:refEntity:index}}{{=refEntity}}{{= index < it.view.refEntities.length-1 ? ',' : ''}}{{~}};\n$blankline\n"
  236. },
  237. {
  238. "type": "dbDDL",
  239. "applyFor": "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307",
  240. "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 }}{{= i<pkList.length-1 ? ',' : '' }}{{~}})\n{{?}}\n);\n$blankline\n{{? it.entity.defKey || it.entity.defName}}COMMENT ON TABLE {{=it.entity.defKey}} IS '{{=it.func.join(it.entity.defName,it.entity.comment,';')}}';{{?}}\n{{~it.entity.fields:field:index}}\n{{? field.defName || field.comment}}COMMENT ON COLUMN {{=it.entity.defKey}}.{{=field.defKey}} IS '{{=it.func.join(field.defName,field.comment,';')}}';{{?}}\n{{~}}",
  241. "createIndex": "{{~ it.entity.indexes:index}}\nCREATE {{? index.unique}}UNIQUE {{?}}INDEX {{=index.defKey}} ON {{=it.entity.defKey}}({{ fieldsKeys = index.fields.map(function(field){return field.fieldDefKey}) ; }}{{=it.func.join(...fieldsKeys,',')}});\n{{~}}",
  242. "createView": "CREATE VIEW {{=it.view.defKey}} AS\nSELECT \n{{~it.view.fields:field:index}}\n {{=field.refEntity}}.{{=field.refEntityField}} AS {{=field.defKey}}{{= index < it.view.fields.length-1 ? ',' : ''}}\n{{~}}\nFROM {{~it.view.refEntities:refEntity:index}}{{=refEntity}}{{= index < it.view.refEntities.length-1 ? ',' : ''}}{{~}};\n$blankline\n"
  243. },
  244. {
  245. "type": "dbDDL",
  246. "applyFor": "592C7013-143D-4E7B-AF64-0D7BF1E28230",
  247. "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<pkList.length-1 ? ',' : '' }}{{~}})\n{{?}}\n);\n$blankline\n{{? it.entity.defKey || it.entity.defName}}COMMENT ON TABLE {{=it.entity.defKey}} IS '{{=it.func.join(it.entity.defName,it.entity.comment,';')}}';{{?}}\n{{~it.entity.fields:field:index}}\n{{? field.defName || field.comment}}COMMENT ON COLUMN {{=it.entity.defKey}}.{{=field.defKey}} IS '{{=it.func.join(field.defName,field.comment,';')}}';{{?}}\n{{~}}",
  248. "createIndex": "{{~ it.entity.indexes:index}}\nCREATE {{? index.unique}}UNIQUE {{?}}INDEX {{=index.defKey}} ON {{=it.entity.defKey}}({{ fieldsKeys = index.fields.map(function(field){return field.fieldDefKey}) ; }}{{=it.func.join(...fieldsKeys,',')}});\n{{~}}",
  249. "createView": "CREATE VIEW {{=it.view.defKey}} AS\nSELECT \n{{~it.view.fields:field:index}}\n {{=field.refEntity}}.{{=field.refEntityField}} AS {{=field.defKey}}{{= index < it.view.fields.length-1 ? ',' : ''}}\n{{~}}\nFROM {{~it.view.refEntities:refEntity:index}}{{=refEntity}}{{= index < it.view.refEntities.length-1 ? ',' : ''}}{{~}};\n$blankline\n"
  250. },
  251. {
  252. "type": "dbDDL",
  253. "applyFor": "77BD85E5-9D0D-4096-8427-CBA306FC9C6A",
  254. "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.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 }}{{= i<pkList.length-1 ? ',' : '' }}{{~}})\n{{?}}\n);\n$blankline\n{{? it.entity.defKey || it.entity.defName}}COMMENT ON TABLE {{=it.entity.defKey}} IS '{{=it.func.join(it.entity.defName,it.entity.comment,';')}}';{{?}}\n{{~it.entity.fields:field:index}}\n{{? field.defName || field.comment}}COMMENT ON COLUMN {{=it.entity.defKey}}.{{=field.defKey}} IS '{{=it.func.join(field.defName,field.comment,';')}}';{{?}}\n{{~}}",
  255. "createIndex": "{{~ it.entity.indexes:index}}\nCREATE {{? index.unique}}UNIQUE {{?}}INDEX {{=index.defKey}} ON {{=it.entity.defKey}}({{ fieldsKeys = index.fields.map(function(field){return field.fieldDefKey}) ; }}{{=it.func.join(...fieldsKeys,',')}});\n{{~}}",
  256. "createView": "CREATE VIEW {{=it.view.defKey}} AS\nSELECT \n{{~it.view.fields:field:index}}\n {{=field.refEntity}}.{{=field.refEntityField}} AS {{=field.defKey}}{{= index < it.view.fields.length-1 ? ',' : ''}}\n{{~}}\nFROM {{~it.view.refEntities:refEntity:index}}{{=refEntity}}{{= index < it.view.refEntities.length-1 ? ',' : ''}}{{~}};\n$blankline\n"
  257. },
  258. {
  259. "type": "dbDDL",
  260. "applyFor": "11D1FB71-A587-4217-89BA-611B8A1F83E0",
  261. "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.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<pkList.length-1 ? ',' : '' }}{{~}})\n{{?}}\n) COMMENT = '{{=it.func.join(it.entity.defName,it.entity.comment,';') }}';\n$blankline\n",
  262. "createIndex": "",
  263. "createView": "CREATE VIEW {{=it.view.defKey}} AS\nSELECT \n{{~it.view.fields:field:index}}\n {{=field.refEntity}}.{{=field.refEntityField}} AS {{=field.defKey}}{{= index < it.view.fields.length-1 ? ',' : ''}}\n{{~}}\nFROM {{~it.view.refEntities:refEntity:index}}{{=refEntity}}{{= index < it.view.refEntities.length-1 ? ',' : ''}}{{~}};\n$blankline\n"
  264. },
  265. {
  266. "applyFor": "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1",
  267. "type": "dbDDL",
  268. "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 ? '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<pkList.length-1 ? ',' : '' }}{{~}})\n{{?}}\n) ; --{{=it.func.join(it.entity.defName,it.entity.comment,';') }}\n$blankline\n",
  269. "createIndex": "{{~ it.entity.indexes:index}}\nCREATE {{? index.unique}}UNIQUE {{?}}INDEX {{=index.defKey}} ON {{=it.entity.defKey}}({{ fieldsKeys = index.fields.map(function(field){return field.fieldDefKey}) ; }}{{=it.func.join(...fieldsKeys,',')}});\n{{~}}",
  270. "createView": "CREATE VIEW {{=it.view.defKey}} AS\nSELECT \n{{~it.view.fields:field:index}}\n {{=field.refEntity}}.{{=field.refEntityField}} AS {{=field.defKey}}{{= index < it.view.fields.length-1 ? ',' : ''}}\n{{~}}\nFROM {{~it.view.refEntities:refEntity:index}}{{=refEntity}}{{= index < it.view.refEntities.length-1 ? ',' : ''}}{{~}};\n$blankline\n"
  271. },
  272. {
  273. "type": "dbDDL",
  274. "applyFor": "dictSQLTemplate",
  275. "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{{~}}"
  276. },
  277. {
  278. "applyFor": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2",
  279. "type": "dbDDL",
  280. "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;",
  281. "createView": "",
  282. "deleteTable": "",
  283. "createIndex": "",
  284. "deleteIndex": "",
  285. "message": "",
  286. "update": ""
  287. }
  288. ],
  289. "generatorDoc": {
  290. "docTemplate": ""
  291. },
  292. "relationFieldSize": "15",
  293. "uiHint": [
  294. {
  295. "defKey": "Input",
  296. "defName": "普通输入框",
  297. "id": "642D2E0A-8846-4549-BE56-8C0473F26EDE"
  298. },
  299. {
  300. "defKey": "Select",
  301. "defName": "下拉输入框",
  302. "id": "FB111359-2B73-4443-926C-08A98E446448"
  303. },
  304. {
  305. "defKey": "CheckBox",
  306. "defName": "复选框",
  307. "id": "0CB8A6C9-1115-4FC0-B51E-5C028065082F"
  308. },
  309. {
  310. "defKey": "RadioBox",
  311. "defName": "单选框",
  312. "id": "5C04987A-260F-4B7C-A5D5-22A181AAE9CA"
  313. },
  314. {
  315. "defKey": "Double",
  316. "defName": "小数输入",
  317. "id": "8D5BAFE4-E15C-4707-A047-8EE59C58E70F"
  318. },
  319. {
  320. "defKey": "Integer",
  321. "defName": "整数输入",
  322. "id": "9999AF2A-A44E-415C-A2DC-D7C613BD0073"
  323. },
  324. {
  325. "defKey": "Money",
  326. "defName": "金额输入",
  327. "id": "2B0C3D0C-7BAF-4B36-81AD-9362B5E5DC2E"
  328. },
  329. {
  330. "defKey": "Date",
  331. "defName": "日期输入",
  332. "id": "E4D94E14-F695-487F-AFC2-4D888009B7DA"
  333. },
  334. {
  335. "defKey": "DataYearMonth",
  336. "defName": "年月输入",
  337. "id": "936927E3-DD2D-4096-87FD-074CDE278D59"
  338. },
  339. {
  340. "defKey": "Text",
  341. "defName": "长文本输入",
  342. "id": "D89DD4F1-ADAC-4469-BF8D-B3FF41AE7963"
  343. },
  344. {
  345. "defKey": "RichText",
  346. "defName": "富文本输入",
  347. "id": "C134EB1F-4CFF-49E0-882F-2C6FB275CB20"
  348. }
  349. ]
  350. },
  351. "entities": [
  352. {
  353. "id": "4D287E40-E9E7-415C-8B63-47451C6E2124",
  354. "env": {
  355. "base": {
  356. "nameSpace": "",
  357. "codeRoot": ""
  358. }
  359. },
  360. "defKey": "ta_person",
  361. "defName": "人员表",
  362. "comment": "",
  363. "properties": {
  364. "partitioned by": "(date string)",
  365. "row format delimited": "",
  366. "fields terminated by ','": "",
  367. "collection items terminated by '-'": "",
  368. "map keys terminated by ':'": "",
  369. "store as textfile;": ""
  370. },
  371. "nameTemplate": "{defKey}[{defName}]",
  372. "headers": [
  373. {
  374. "freeze": false,
  375. "refKey": "hideInGraph",
  376. "hideInGraph": true
  377. },
  378. {
  379. "freeze": true,
  380. "refKey": "defKey",
  381. "hideInGraph": false
  382. },
  383. {
  384. "freeze": true,
  385. "refKey": "defName",
  386. "hideInGraph": false
  387. },
  388. {
  389. "freeze": false,
  390. "refKey": "primaryKey",
  391. "hideInGraph": false
  392. },
  393. {
  394. "freeze": false,
  395. "refKey": "notNull",
  396. "hideInGraph": true
  397. },
  398. {
  399. "freeze": false,
  400. "refKey": "autoIncrement",
  401. "hideInGraph": true
  402. },
  403. {
  404. "freeze": false,
  405. "refKey": "domain",
  406. "hideInGraph": true
  407. },
  408. {
  409. "freeze": false,
  410. "refKey": "type",
  411. "hideInGraph": false
  412. },
  413. {
  414. "freeze": false,
  415. "refKey": "len",
  416. "hideInGraph": false
  417. },
  418. {
  419. "freeze": false,
  420. "refKey": "scale",
  421. "hideInGraph": false
  422. },
  423. {
  424. "freeze": false,
  425. "refKey": "comment",
  426. "hideInGraph": true
  427. },
  428. {
  429. "freeze": false,
  430. "refKey": "refDict",
  431. "hideInGraph": true
  432. },
  433. {
  434. "freeze": false,
  435. "refKey": "defaultValue",
  436. "hideInGraph": true
  437. },
  438. {
  439. "freeze": false,
  440. "refKey": "isStandard",
  441. "hideInGraph": false
  442. },
  443. {
  444. "freeze": false,
  445. "refKey": "uiHint",
  446. "hideInGraph": true
  447. }
  448. ],
  449. "fields": [
  450. {
  451. "defKey": "person_id",
  452. "defName": "用户ID",
  453. "comment": "",
  454. "type": "",
  455. "len": "",
  456. "scale": "",
  457. "primaryKey": true,
  458. "notNull": true,
  459. "autoIncrement": false,
  460. "defaultValue": "",
  461. "hideInGraph": false,
  462. "refDict": "",
  463. "domain": "16120F75-6AA7-4483-868D-F07F511BB081",
  464. "id": "BEB7250A-E412-4F3A-960C-892166ACBB60"
  465. },
  466. {
  467. "defKey": "person_name",
  468. "defName": "用户名",
  469. "comment": "",
  470. "type": "",
  471. "len": "",
  472. "scale": "",
  473. "primaryKey": false,
  474. "notNull": false,
  475. "autoIncrement": false,
  476. "defaultValue": "",
  477. "hideInGraph": false,
  478. "refDict": "",
  479. "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6",
  480. "id": "EF255C27-342F-405D-8ED0-579D3792D2B4"
  481. },
  482. {
  483. "defKey": "phone",
  484. "defName": "手机号",
  485. "comment": "",
  486. "type": "VARCHAR",
  487. "len": 32,
  488. "scale": "",
  489. "primaryKey": false,
  490. "notNull": false,
  491. "autoIncrement": false,
  492. "defaultValue": "",
  493. "hideInGraph": false,
  494. "refDict": "",
  495. "domain": "",
  496. "id": "BCA69240-ACCB-4876-8876-26DB1C0D5F86"
  497. },
  498. {
  499. "defKey": "id_no",
  500. "defName": "身份证号码",
  501. "comment": "",
  502. "type": "VARCHAR",
  503. "len": 32,
  504. "scale": "",
  505. "primaryKey": false,
  506. "notNull": false,
  507. "autoIncrement": false,
  508. "defaultValue": "",
  509. "hideInGraph": false,
  510. "refDict": "",
  511. "domain": "",
  512. "id": "F829640B-8052-4B4D-B473-ADCD6311FDD8"
  513. },
  514. {
  515. "defKey": "dept_name",
  516. "defName": "科室名称",
  517. "comment": "",
  518. "type": "",
  519. "len": "",
  520. "scale": "",
  521. "primaryKey": false,
  522. "notNull": false,
  523. "autoIncrement": false,
  524. "defaultValue": "",
  525. "hideInGraph": false,
  526. "refDict": "",
  527. "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
  528. "id": "DFAB3D1E-D6BE-49E8-B9EE-CB2E74659AC4"
  529. },
  530. {
  531. "defKey": "status",
  532. "defName": "状态",
  533. "comment": "",
  534. "type": "",
  535. "len": "",
  536. "scale": "",
  537. "primaryKey": false,
  538. "notNull": false,
  539. "autoIncrement": false,
  540. "defaultValue": "1",
  541. "hideInGraph": false,
  542. "refDict": "",
  543. "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E",
  544. "id": "DCA9637C-B8FA-4E24-A119-9BC8301FAC35"
  545. },
  546. {
  547. "defKey": "create_date",
  548. "defName": "创建时间",
  549. "comment": "",
  550. "type": "",
  551. "len": "",
  552. "scale": "",
  553. "primaryKey": false,
  554. "notNull": false,
  555. "autoIncrement": false,
  556. "defaultValue": "CURRENT_TIMESTAMP",
  557. "hideInGraph": false,
  558. "refDict": "",
  559. "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
  560. "id": "ED1033D7-B99A-4F34-B2F2-60C9D1F8A4DA"
  561. }
  562. ],
  563. "correlations": [],
  564. "indexes": []
  565. },
  566. {
  567. "id": "0128720E-EDED-4F5F-82DA-B493CBE87EEC",
  568. "env": {
  569. "base": {
  570. "nameSpace": "",
  571. "codeRoot": ""
  572. }
  573. },
  574. "defKey": "wx_user",
  575. "defName": "微信用户",
  576. "comment": "",
  577. "properties": {
  578. "partitioned by": "(date string)",
  579. "row format delimited": "",
  580. "fields terminated by ','": "",
  581. "collection items terminated by '-'": "",
  582. "map keys terminated by ':'": "",
  583. "store as textfile;": ""
  584. },
  585. "nameTemplate": "{defKey}[{defName}]",
  586. "headers": [
  587. {
  588. "freeze": false,
  589. "refKey": "hideInGraph",
  590. "hideInGraph": true
  591. },
  592. {
  593. "freeze": true,
  594. "refKey": "defKey",
  595. "hideInGraph": false
  596. },
  597. {
  598. "freeze": true,
  599. "refKey": "defName",
  600. "hideInGraph": false
  601. },
  602. {
  603. "freeze": false,
  604. "refKey": "primaryKey",
  605. "hideInGraph": false
  606. },
  607. {
  608. "freeze": false,
  609. "refKey": "notNull",
  610. "hideInGraph": true
  611. },
  612. {
  613. "freeze": false,
  614. "refKey": "autoIncrement",
  615. "hideInGraph": true
  616. },
  617. {
  618. "freeze": false,
  619. "refKey": "domain",
  620. "hideInGraph": true
  621. },
  622. {
  623. "freeze": false,
  624. "refKey": "type",
  625. "hideInGraph": false
  626. },
  627. {
  628. "freeze": false,
  629. "refKey": "len",
  630. "hideInGraph": false
  631. },
  632. {
  633. "freeze": false,
  634. "refKey": "scale",
  635. "hideInGraph": false
  636. },
  637. {
  638. "freeze": false,
  639. "refKey": "comment",
  640. "hideInGraph": true
  641. },
  642. {
  643. "freeze": false,
  644. "refKey": "refDict",
  645. "hideInGraph": true
  646. },
  647. {
  648. "freeze": false,
  649. "refKey": "defaultValue",
  650. "hideInGraph": true
  651. },
  652. {
  653. "freeze": false,
  654. "refKey": "isStandard",
  655. "hideInGraph": false
  656. },
  657. {
  658. "freeze": false,
  659. "refKey": "uiHint",
  660. "hideInGraph": true
  661. }
  662. ],
  663. "fields": [
  664. {
  665. "defKey": "user_id",
  666. "defName": "用户ID",
  667. "comment": "",
  668. "type": "",
  669. "len": 32,
  670. "scale": "",
  671. "primaryKey": true,
  672. "notNull": true,
  673. "autoIncrement": false,
  674. "defaultValue": "",
  675. "hideInGraph": true,
  676. "domain": "16120F75-6AA7-4483-868D-F07F511BB081",
  677. "refDict": "",
  678. "uiHint": "",
  679. "id": "DB5AF1B9-07C5-42C0-BD63-AA95FF2BF2A2"
  680. },
  681. {
  682. "defKey": "app_id",
  683. "defName": "APPID",
  684. "comment": "",
  685. "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
  686. "type": "",
  687. "len": "",
  688. "scale": "",
  689. "primaryKey": false,
  690. "notNull": false,
  691. "autoIncrement": false,
  692. "defaultValue": "",
  693. "hideInGraph": true,
  694. "refDict": "",
  695. "uiHint": "",
  696. "id": "B5EBC422-14FF-4303-A639-E61712492A07"
  697. },
  698. {
  699. "defKey": "openid",
  700. "defName": "openid",
  701. "comment": "",
  702. "type": "",
  703. "len": "",
  704. "scale": "",
  705. "primaryKey": false,
  706. "notNull": false,
  707. "autoIncrement": false,
  708. "defaultValue": "",
  709. "hideInGraph": false,
  710. "refDict": "",
  711. "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
  712. "id": "5FE57E33-A332-4C90-BA35-105FEBED4AF4"
  713. },
  714. {
  715. "defKey": "nick_name",
  716. "defName": "昵称",
  717. "comment": "",
  718. "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
  719. "type": "",
  720. "len": "",
  721. "scale": "",
  722. "primaryKey": false,
  723. "notNull": false,
  724. "autoIncrement": false,
  725. "defaultValue": "",
  726. "hideInGraph": true,
  727. "refDict": "",
  728. "uiHint": "",
  729. "id": "9E36D9CA-ABF6-4FCA-923A-8DBDD0F277D8"
  730. },
  731. {
  732. "defKey": "avatar",
  733. "defName": "头像",
  734. "comment": "",
  735. "domain": "",
  736. "type": "TEXT",
  737. "len": "",
  738. "scale": "",
  739. "primaryKey": false,
  740. "notNull": false,
  741. "autoIncrement": false,
  742. "defaultValue": "",
  743. "hideInGraph": true,
  744. "refDict": "",
  745. "uiHint": "",
  746. "id": "13351630-4B8E-4480-B558-EF3BDD162131"
  747. },
  748. {
  749. "defKey": "phone",
  750. "defName": "手机号",
  751. "comment": "",
  752. "domain": "16120F75-6AA7-4483-868D-F07F511BB081",
  753. "type": "",
  754. "len": 32,
  755. "scale": "",
  756. "primaryKey": false,
  757. "notNull": false,
  758. "autoIncrement": false,
  759. "defaultValue": "",
  760. "hideInGraph": true,
  761. "refDict": "",
  762. "uiHint": "",
  763. "id": "67B5C9BF-E921-471E-BEA0-80AE34142481"
  764. },
  765. {
  766. "defKey": "person_id",
  767. "defName": "关联人员",
  768. "comment": "",
  769. "domain": "16120F75-6AA7-4483-868D-F07F511BB081",
  770. "type": "",
  771. "len": "",
  772. "scale": "",
  773. "primaryKey": false,
  774. "notNull": false,
  775. "autoIncrement": false,
  776. "defaultValue": "",
  777. "hideInGraph": true,
  778. "refDict": "",
  779. "uiHint": "",
  780. "id": "F958B678-F331-4125-9512-A91AB22A9DAF"
  781. },
  782. {
  783. "defKey": "status",
  784. "defName": "状态",
  785. "comment": "",
  786. "type": "",
  787. "len": "",
  788. "scale": "",
  789. "primaryKey": false,
  790. "notNull": false,
  791. "autoIncrement": false,
  792. "defaultValue": "1",
  793. "hideInGraph": false,
  794. "refDict": "",
  795. "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E",
  796. "id": "57AFA8D3-36F7-415F-B34A-FC51A854AE0E"
  797. },
  798. {
  799. "defKey": "create_date",
  800. "defName": "创建时间",
  801. "comment": "",
  802. "type": "",
  803. "len": "",
  804. "scale": "",
  805. "primaryKey": false,
  806. "notNull": false,
  807. "autoIncrement": false,
  808. "defaultValue": "CURRENT_TIMESTAMP",
  809. "hideInGraph": false,
  810. "refDict": "",
  811. "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
  812. "id": "59E58AE3-6230-4907-A697-A4CDDBAFA053"
  813. }
  814. ],
  815. "correlations": [],
  816. "indexes": []
  817. }
  818. ],
  819. "views": [],
  820. "dicts": [
  821. {
  822. "defKey": "Gender",
  823. "defName": "性别",
  824. "intro": "",
  825. "items": [
  826. {
  827. "defKey": "M",
  828. "defName": "男",
  829. "intro": "",
  830. "parentKey": "",
  831. "enabled": true,
  832. "attr1": "",
  833. "attr2": "",
  834. "attr3": "",
  835. "sort": "1",
  836. "id": "3622D417-DA1A-408F-BEE1-11D328D534A0"
  837. },
  838. {
  839. "defKey": "F",
  840. "defName": "女",
  841. "intro": "",
  842. "parentKey": "",
  843. "enabled": true,
  844. "attr1": "",
  845. "attr2": "",
  846. "attr3": "",
  847. "sort": "2",
  848. "id": "380A0790-64A7-481E-831C-32F7BEE1502B"
  849. },
  850. {
  851. "defKey": "U",
  852. "defName": "未知",
  853. "intro": "",
  854. "parentKey": "",
  855. "enabled": true,
  856. "attr1": "",
  857. "attr2": "",
  858. "attr3": "",
  859. "sort": "3",
  860. "id": "FA239F4D-1276-40D9-B230-F66BD35C3C27"
  861. }
  862. ],
  863. "id": "BF9E20E0-80D3-486D-BD58-5FADCF3E4A1D"
  864. },
  865. {
  866. "defKey": "Political",
  867. "defName": "政治面貌",
  868. "intro": "",
  869. "items": [
  870. {
  871. "defKey": "10",
  872. "defName": "共青团员",
  873. "intro": "",
  874. "parentKey": "",
  875. "enabled": true,
  876. "attr1": "",
  877. "attr2": "",
  878. "attr3": "",
  879. "id": "61F3145A-7599-4CCB-B298-D5EE788107BE"
  880. },
  881. {
  882. "defKey": "20",
  883. "defName": "中共党员",
  884. "intro": "",
  885. "parentKey": "",
  886. "enabled": true,
  887. "attr1": "",
  888. "attr2": "",
  889. "attr3": "",
  890. "id": "ED16D25A-AB2F-4FA0-BB48-2B9031FA28C4"
  891. },
  892. {
  893. "defKey": "30",
  894. "defName": "民主党派",
  895. "intro": "",
  896. "parentKey": "",
  897. "enabled": true,
  898. "attr1": "",
  899. "attr2": "",
  900. "attr3": "",
  901. "id": "0FB7974A-AE11-438F-86E0-B163316F9272"
  902. },
  903. {
  904. "defKey": "40",
  905. "defName": "群众",
  906. "intro": "",
  907. "parentKey": "",
  908. "enabled": true,
  909. "attr1": "",
  910. "attr2": "",
  911. "attr3": "",
  912. "id": "7D247234-7E97-45B1-8C56-4A17A370854A"
  913. },
  914. {
  915. "defKey": "90",
  916. "defName": "未知",
  917. "intro": "",
  918. "parentKey": "",
  919. "enabled": true,
  920. "attr1": "",
  921. "attr2": "",
  922. "attr3": "",
  923. "id": "DA65D752-AF04-4A11-81D8-14A38692A64A"
  924. }
  925. ],
  926. "id": "06EED564-BBA9-4747-8D73-AF809A330CB8"
  927. },
  928. {
  929. "defKey": "Marital",
  930. "defName": "婚姻状况",
  931. "intro": "婚姻状况的码表",
  932. "items": [
  933. {
  934. "defKey": "UNMARRIED",
  935. "defName": "未婚",
  936. "intro": "",
  937. "parentKey": "",
  938. "enabled": true,
  939. "attr1": "",
  940. "attr2": "",
  941. "attr3": "",
  942. "sort": "1",
  943. "id": "20EE81BC-74EE-47DA-A56F-9663B23F44BD"
  944. },
  945. {
  946. "defKey": "MARRIED",
  947. "defName": "已婚",
  948. "intro": "",
  949. "parentKey": "",
  950. "enabled": true,
  951. "attr1": "",
  952. "attr2": "",
  953. "attr3": "",
  954. "sort": "2",
  955. "id": "4DCA10A8-417E-4A8D-BDF6-0A278C060ADC"
  956. },
  957. {
  958. "defKey": "WIDOWED",
  959. "defName": "丧偶",
  960. "intro": "",
  961. "parentKey": "",
  962. "enabled": true,
  963. "attr1": "",
  964. "attr2": "",
  965. "attr3": "",
  966. "sort": "3",
  967. "id": "826062A7-057C-4892-B338-06459F5B808D"
  968. },
  969. {
  970. "defKey": "DIVORCE",
  971. "defName": "离婚",
  972. "intro": "",
  973. "parentKey": "",
  974. "enabled": true,
  975. "attr1": "",
  976. "attr2": "",
  977. "attr3": "",
  978. "sort": "4",
  979. "id": "B23200B4-5E59-4F5E-A779-D981A040FA32"
  980. },
  981. {
  982. "defKey": "UNSPECIFIED",
  983. "defName": "未说明",
  984. "intro": "",
  985. "parentKey": "",
  986. "enabled": true,
  987. "attr1": "",
  988. "attr2": "",
  989. "attr3": "",
  990. "sort": "5",
  991. "id": "A7928FE2-349A-4702-9682-2EF7205E077B"
  992. }
  993. ],
  994. "id": "EA1587B7-3954-437A-BFE0-FCB0453BCABA"
  995. },
  996. {
  997. "defKey": "StudentStatus",
  998. "defName": "学生状态",
  999. "intro": "",
  1000. "items": [
  1001. {
  1002. "defKey": "Normal",
  1003. "defName": "正常",
  1004. "intro": "",
  1005. "parentKey": "",
  1006. "enabled": true,
  1007. "attr1": "",
  1008. "attr2": "",
  1009. "attr3": "",
  1010. "sort": "1",
  1011. "id": "E9CA1CC9-8851-4F6B-86BA-B9CF0E44EB73"
  1012. },
  1013. {
  1014. "defKey": "Graduated",
  1015. "defName": "毕业",
  1016. "intro": "",
  1017. "parentKey": "",
  1018. "enabled": true,
  1019. "attr1": "",
  1020. "attr2": "",
  1021. "attr3": "",
  1022. "sort": "2",
  1023. "id": "DEC51D7C-99DF-430C-817D-0499862D3CCC"
  1024. },
  1025. {
  1026. "defKey": "Studied",
  1027. "defName": "肄业",
  1028. "intro": "",
  1029. "parentKey": "",
  1030. "enabled": true,
  1031. "attr1": "",
  1032. "attr2": "",
  1033. "attr3": "",
  1034. "sort": "3",
  1035. "id": "8853D6B6-75D3-4479-9006-FC731CD85B20"
  1036. },
  1037. {
  1038. "defKey": "Stop",
  1039. "defName": "休学",
  1040. "intro": "",
  1041. "parentKey": "",
  1042. "enabled": true,
  1043. "attr1": "",
  1044. "attr2": "",
  1045. "attr3": "",
  1046. "sort": "4",
  1047. "id": "C74BA8CF-1DC6-4C79-BAAC-F11EB9C6AF01"
  1048. }
  1049. ],
  1050. "id": "4642BC5F-02EE-4E17-A60C-CF22F86A0282"
  1051. },
  1052. {
  1053. "defKey": "GBNation",
  1054. "defName": "民族",
  1055. "intro": "",
  1056. "items": [
  1057. {
  1058. "defKey": "01",
  1059. "defName": "汉族",
  1060. "intro": "",
  1061. "parentKey": "",
  1062. "enabled": true,
  1063. "attr1": "",
  1064. "attr2": "",
  1065. "attr3": "",
  1066. "id": "9224DF53-F7C0-447D-B8ED-0A39F799EE19"
  1067. },
  1068. {
  1069. "defKey": "02",
  1070. "defName": "蒙古族",
  1071. "intro": "",
  1072. "parentKey": "",
  1073. "enabled": true,
  1074. "attr1": "",
  1075. "attr2": "",
  1076. "attr3": "",
  1077. "id": "D57818E3-9206-45BB-AE79-27C64A4AB80F"
  1078. },
  1079. {
  1080. "defKey": "03",
  1081. "defName": "回族",
  1082. "intro": "",
  1083. "parentKey": "",
  1084. "enabled": true,
  1085. "attr1": "",
  1086. "attr2": "",
  1087. "attr3": "",
  1088. "id": "0A1A3CA9-6D68-4E15-8BD0-9A2FF428D804"
  1089. },
  1090. {
  1091. "defKey": "04",
  1092. "defName": "藏族",
  1093. "intro": "",
  1094. "parentKey": "",
  1095. "enabled": true,
  1096. "attr1": "",
  1097. "attr2": "",
  1098. "attr3": "",
  1099. "id": "7CC6B6BE-47EA-460E-ACFA-C377468DEA11"
  1100. },
  1101. {
  1102. "defKey": "05",
  1103. "defName": "维吾尔族",
  1104. "intro": "",
  1105. "parentKey": "",
  1106. "enabled": true,
  1107. "attr1": "",
  1108. "attr2": "",
  1109. "attr3": "",
  1110. "id": "A666D51F-D249-4FAC-B1F3-78C371836CB3"
  1111. },
  1112. {
  1113. "defKey": "06",
  1114. "defName": "苗族",
  1115. "intro": "",
  1116. "parentKey": "",
  1117. "enabled": true,
  1118. "attr1": "",
  1119. "attr2": "",
  1120. "attr3": "",
  1121. "id": "A0C9E1BA-D87B-4695-ADFA-287FDA32BB5A"
  1122. },
  1123. {
  1124. "defKey": "07",
  1125. "defName": "彝族",
  1126. "intro": "",
  1127. "parentKey": "",
  1128. "enabled": true,
  1129. "attr1": "",
  1130. "attr2": "",
  1131. "attr3": "",
  1132. "id": "149B5B9E-C1D1-4790-8CCF-0ED5F4B25172"
  1133. },
  1134. {
  1135. "defKey": "08",
  1136. "defName": "壮族",
  1137. "intro": "",
  1138. "parentKey": "",
  1139. "enabled": true,
  1140. "attr1": "",
  1141. "attr2": "",
  1142. "attr3": "",
  1143. "id": "F9A3E65C-BF4D-4C6B-ADB7-8C9CF0487360"
  1144. },
  1145. {
  1146. "defKey": "09",
  1147. "defName": "布依族",
  1148. "intro": "",
  1149. "parentKey": "",
  1150. "enabled": true,
  1151. "attr1": "",
  1152. "attr2": "",
  1153. "attr3": "",
  1154. "id": "14F17DE4-E96A-460B-98A6-F84EC8CF9885"
  1155. },
  1156. {
  1157. "defKey": "10",
  1158. "defName": "朝鲜族",
  1159. "intro": "",
  1160. "parentKey": "",
  1161. "enabled": true,
  1162. "attr1": "",
  1163. "attr2": "",
  1164. "attr3": "",
  1165. "id": "8A81AB18-B1BF-4797-A6E5-DEDB2C6566B0"
  1166. },
  1167. {
  1168. "defKey": "11",
  1169. "defName": "满族",
  1170. "intro": "",
  1171. "parentKey": "",
  1172. "enabled": true,
  1173. "attr1": "",
  1174. "attr2": "",
  1175. "attr3": "",
  1176. "id": "7D460947-FBD2-4E4D-8366-3B38DCAF09D1"
  1177. }
  1178. ],
  1179. "id": "115EDEFC-0323-410E-81AB-CCAB8879837A"
  1180. },
  1181. {
  1182. "defKey": "GradeLevel",
  1183. "defName": "受教育程度",
  1184. "sort": "",
  1185. "intro": "",
  1186. "items": [],
  1187. "id": "9E7C9788-B805-4C7D-8531-FD1D9DC79B05"
  1188. }
  1189. ],
  1190. "viewGroups": [
  1191. {
  1192. "defKey": "system",
  1193. "defName": "系统",
  1194. "refEntities": [
  1195. "4D287E40-E9E7-415C-8B63-47451C6E2124",
  1196. "0128720E-EDED-4F5F-82DA-B493CBE87EEC"
  1197. ],
  1198. "refViews": [],
  1199. "refDiagrams": [],
  1200. "refDicts": [],
  1201. "id": "666196C3-8993-4A3F-8D4C-B1340554BD82"
  1202. }
  1203. ],
  1204. "dataTypeMapping": {
  1205. "referURL": "",
  1206. "mappings": [
  1207. {
  1208. "defKey": "string",
  1209. "defName": "字串",
  1210. "id": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
  1211. "29D1CE08-4C35-4D2D-AAA9-23D93305B52E": "VARCHAR",
  1212. "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542": "VARCHAR2",
  1213. "BFC87171-C74F-494A-B7C2-76B9C55FACC9": "VARCHAR",
  1214. "DFBEC1DD-AA84-456E-BBF3-C95DD0DB2022": "VARCHAR",
  1215. "89504F5D-94BF-4C9E-8B2E-44F37305FED5": "VARCHAR",
  1216. "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307": "VARCHAR2",
  1217. "592C7013-143D-4E7B-AF64-0D7BF1E28230": "VARCHAR",
  1218. "77BD85E5-9D0D-4096-8427-CBA306FC9C6A": "VARCHAR",
  1219. "11D1FB71-A587-4217-89BA-611B8A1F83E0": "STRING",
  1220. "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1": "TEXT",
  1221. "797A1496-D649-4261-89B4-544132EC3F36": "String",
  1222. "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "String",
  1223. "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "String",
  1224. "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30": "string",
  1225. "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2": "string"
  1226. },
  1227. {
  1228. "defKey": "double",
  1229. "defName": "小数",
  1230. "id": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E",
  1231. "29D1CE08-4C35-4D2D-AAA9-23D93305B52E": "DECIMAL",
  1232. "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542": "DECIMAL",
  1233. "BFC87171-C74F-494A-B7C2-76B9C55FACC9": "DECIMAL",
  1234. "DFBEC1DD-AA84-456E-BBF3-C95DD0DB2022": "NUMERIC",
  1235. "89504F5D-94BF-4C9E-8B2E-44F37305FED5": "DECIMAL",
  1236. "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307": "DECIMAL",
  1237. "592C7013-143D-4E7B-AF64-0D7BF1E28230": "NUMERIC",
  1238. "77BD85E5-9D0D-4096-8427-CBA306FC9C6A": "NUMERIC",
  1239. "11D1FB71-A587-4217-89BA-611B8A1F83E0": "DOUBLE",
  1240. "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1": "REAL",
  1241. "797A1496-D649-4261-89B4-544132EC3F36": "Double",
  1242. "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "Double",
  1243. "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "Double",
  1244. "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30": "float",
  1245. "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2": "double"
  1246. },
  1247. {
  1248. "defKey": "int",
  1249. "defName": "整数",
  1250. "id": "1D764C4A-6F9F-421E-B11A-6F3E23B51811",
  1251. "29D1CE08-4C35-4D2D-AAA9-23D93305B52E": "INT",
  1252. "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542": "INT",
  1253. "BFC87171-C74F-494A-B7C2-76B9C55FACC9": "INT",
  1254. "DFBEC1DD-AA84-456E-BBF3-C95DD0DB2022": "INTEGER",
  1255. "89504F5D-94BF-4C9E-8B2E-44F37305FED5": "INT",
  1256. "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307": "INTEGER",
  1257. "592C7013-143D-4E7B-AF64-0D7BF1E28230": "INTEGER",
  1258. "77BD85E5-9D0D-4096-8427-CBA306FC9C6A": "INT4",
  1259. "11D1FB71-A587-4217-89BA-611B8A1F83E0": "INT",
  1260. "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1": "INTEGER",
  1261. "797A1496-D649-4261-89B4-544132EC3F36": "Integer",
  1262. "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "Integer",
  1263. "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "Integer",
  1264. "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30": "float",
  1265. "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2": "int"
  1266. },
  1267. {
  1268. "defKey": "date",
  1269. "defName": "日期",
  1270. "id": "89D69E81-EA34-42EE-9FA2-93B8BD27E098",
  1271. "29D1CE08-4C35-4D2D-AAA9-23D93305B52E": "DATETIME",
  1272. "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542": "DATE",
  1273. "BFC87171-C74F-494A-B7C2-76B9C55FACC9": "DATETIME",
  1274. "DFBEC1DD-AA84-456E-BBF3-C95DD0DB2022": "TIMESTAMP",
  1275. "89504F5D-94BF-4C9E-8B2E-44F37305FED5": "DATE",
  1276. "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307": "DATE",
  1277. "592C7013-143D-4E7B-AF64-0D7BF1E28230": "DATE",
  1278. "77BD85E5-9D0D-4096-8427-CBA306FC9C6A": "DATE",
  1279. "11D1FB71-A587-4217-89BA-611B8A1F83E0": "DATETIME",
  1280. "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1": "NUMERIC",
  1281. "797A1496-D649-4261-89B4-544132EC3F36": "Date",
  1282. "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "Date",
  1283. "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "Date",
  1284. "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30": "date",
  1285. "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2": "timestamp"
  1286. },
  1287. {
  1288. "defKey": "bytes",
  1289. "defName": "二进制",
  1290. "id": "D516E75B-90F5-4741-B9B3-A186A263F04C",
  1291. "29D1CE08-4C35-4D2D-AAA9-23D93305B52E": "BLOB",
  1292. "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542": "BLOB",
  1293. "BFC87171-C74F-494A-B7C2-76B9C55FACC9": "VARBINARY",
  1294. "DFBEC1DD-AA84-456E-BBF3-C95DD0DB2022": "BYTEA",
  1295. "89504F5D-94BF-4C9E-8B2E-44F37305FED5": "BLOB",
  1296. "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307": "BLOB",
  1297. "592C7013-143D-4E7B-AF64-0D7BF1E28230": "BYTEA",
  1298. "77BD85E5-9D0D-4096-8427-CBA306FC9C6A": "BYTEA",
  1299. "11D1FB71-A587-4217-89BA-611B8A1F83E0": "BINARY",
  1300. "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1": "NONE",
  1301. "797A1496-D649-4261-89B4-544132EC3F36": "byte[]",
  1302. "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "byte[]",
  1303. "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "byte[]",
  1304. "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30": "binary",
  1305. "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2": "binary"
  1306. },
  1307. {
  1308. "defKey": "largeText",
  1309. "defName": "大文本",
  1310. "id": "B17BDED3-085F-40E1-9019-3B79CF2BF075",
  1311. "29D1CE08-4C35-4D2D-AAA9-23D93305B52E": "TEXT",
  1312. "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542": "CLOB",
  1313. "BFC87171-C74F-494A-B7C2-76B9C55FACC9": "TEXT",
  1314. "DFBEC1DD-AA84-456E-BBF3-C95DD0DB2022": "TEXT",
  1315. "89504F5D-94BF-4C9E-8B2E-44F37305FED5": "CLOB",
  1316. "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307": "CLOB",
  1317. "592C7013-143D-4E7B-AF64-0D7BF1E28230": "TEXT",
  1318. "77BD85E5-9D0D-4096-8427-CBA306FC9C6A": "TEXT",
  1319. "11D1FB71-A587-4217-89BA-611B8A1F83E0": "STRING",
  1320. "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1": "TEXT",
  1321. "797A1496-D649-4261-89B4-544132EC3F36": "String",
  1322. "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "String",
  1323. "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "String",
  1324. "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30": "string",
  1325. "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2": "string"
  1326. },
  1327. {
  1328. "defKey": "TINYINT",
  1329. "defName": "小整数",
  1330. "id": "5543E485-BCB3-4EDF-B4AD-C420AD36AE40",
  1331. "29D1CE08-4C35-4D2D-AAA9-23D93305B52E": "TINYINT"
  1332. }
  1333. ]
  1334. },
  1335. "domains": [
  1336. {
  1337. "defKey": "DefaultString",
  1338. "defName": "默认字串",
  1339. "applyFor": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
  1340. "len": 255,
  1341. "scale": "",
  1342. "uiHint": "",
  1343. "id": "9092C4E0-1A54-4859-ABBB-5B62DBC27573"
  1344. },
  1345. {
  1346. "defKey": "IdOrKey",
  1347. "defName": "主键标识",
  1348. "applyFor": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
  1349. "len": 32,
  1350. "scale": "",
  1351. "uiHint": "",
  1352. "id": "16120F75-6AA7-4483-868D-F07F511BB081"
  1353. },
  1354. {
  1355. "defKey": "Name",
  1356. "defName": "名称",
  1357. "applyFor": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
  1358. "len": 90,
  1359. "scale": "",
  1360. "uiHint": "",
  1361. "id": "54611CCC-CA4B-42E1-9F32-4944C85B85A6"
  1362. },
  1363. {
  1364. "defKey": "Int",
  1365. "defName": "整数",
  1366. "applyFor": "1D764C4A-6F9F-421E-B11A-6F3E23B51811",
  1367. "len": "",
  1368. "scale": "",
  1369. "uiHint": "",
  1370. "id": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E"
  1371. },
  1372. {
  1373. "defKey": "Double",
  1374. "defName": "小数",
  1375. "applyFor": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E",
  1376. "len": 24,
  1377. "scale": 6,
  1378. "uiHint": "",
  1379. "id": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4"
  1380. },
  1381. {
  1382. "defKey": "Money",
  1383. "defName": "金额",
  1384. "applyFor": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E",
  1385. "len": 24,
  1386. "scale": 6,
  1387. "uiHint": "",
  1388. "id": "C3B1681B-99F9-4818-9E80-DE1652A51D85"
  1389. },
  1390. {
  1391. "defKey": "DateTime",
  1392. "defName": "日期时间",
  1393. "applyFor": "89D69E81-EA34-42EE-9FA2-93B8BD27E098",
  1394. "len": "",
  1395. "scale": "",
  1396. "uiHint": "",
  1397. "id": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC"
  1398. },
  1399. {
  1400. "defKey": "YesNo",
  1401. "defName": "是否",
  1402. "applyFor": "5543E485-BCB3-4EDF-B4AD-C420AD36AE40",
  1403. "len": "1",
  1404. "scale": "",
  1405. "uiHint": "",
  1406. "id": "6F7C1C5C-D159-41E6-BF9D-54DEEFA79AFF"
  1407. },
  1408. {
  1409. "defKey": "Dict",
  1410. "defName": "数据字典",
  1411. "applyFor": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
  1412. "len": "32",
  1413. "scale": "",
  1414. "uiHint": "",
  1415. "id": "73FD2BAD-2358-4336-B96D-45DC897BD792"
  1416. },
  1417. {
  1418. "defKey": "DescText",
  1419. "defName": "描述文本",
  1420. "applyFor": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
  1421. "len": "900",
  1422. "scale": "",
  1423. "uiHint": "",
  1424. "id": "3E948CEC-3070-472C-AF92-F3CA11EC9D15"
  1425. }
  1426. ],
  1427. "diagrams": [],
  1428. "standardFields": [
  1429. {
  1430. "defKey": "personInfo",
  1431. "defName": "个人基本信息要素",
  1432. "fields": [
  1433. {
  1434. "defKey": "ID_CARD_NO",
  1435. "defName": "身份证号",
  1436. "comment": "",
  1437. "type": "VARCHAR",
  1438. "len": "60",
  1439. "scale": "",
  1440. "primaryKey": false,
  1441. "notNull": false,
  1442. "autoIncrement": false,
  1443. "defaultValue": "",
  1444. "hideInGraph": false,
  1445. "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
  1446. "refDict": "",
  1447. "uiHint": "",
  1448. "id": "A64A91C8-A41F-4113-92FB-7563D7EF054D"
  1449. },
  1450. {
  1451. "defKey": "MOBILE_PHONE",
  1452. "defName": "手机号",
  1453. "comment": "",
  1454. "type": "VARCHAR",
  1455. "len": "60",
  1456. "scale": "",
  1457. "primaryKey": false,
  1458. "notNull": false,
  1459. "autoIncrement": false,
  1460. "defaultValue": "",
  1461. "hideInGraph": false,
  1462. "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
  1463. "refDict": "",
  1464. "uiHint": "",
  1465. "id": "479DA2AB-1974-411A-A81E-92FB939E75EB"
  1466. },
  1467. {
  1468. "defKey": "GENDER",
  1469. "defName": "性别",
  1470. "comment": "",
  1471. "type": "VARCHAR",
  1472. "len": "32",
  1473. "scale": "",
  1474. "primaryKey": false,
  1475. "notNull": false,
  1476. "autoIncrement": false,
  1477. "defaultValue": "",
  1478. "hideInGraph": false,
  1479. "domain": "73FD2BAD-2358-4336-B96D-45DC897BD792",
  1480. "refDict": "BF9E20E0-80D3-486D-BD58-5FADCF3E4A1D",
  1481. "uiHint": "",
  1482. "id": "48473E29-6594-4912-AADE-C8AB44FCA3E9"
  1483. },
  1484. {
  1485. "defKey": "BIRTH",
  1486. "defName": "出生日期",
  1487. "comment": "",
  1488. "type": "DATETIME",
  1489. "len": "",
  1490. "scale": "",
  1491. "primaryKey": false,
  1492. "notNull": false,
  1493. "autoIncrement": false,
  1494. "defaultValue": "",
  1495. "hideInGraph": false,
  1496. "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
  1497. "refDict": "",
  1498. "uiHint": "",
  1499. "id": "2BD3D2EE-2411-49A6-983D-84B81057312F"
  1500. },
  1501. {
  1502. "defKey": "AVATAR",
  1503. "defName": "头像",
  1504. "comment": "",
  1505. "type": "VARCHAR",
  1506. "len": "60",
  1507. "scale": "",
  1508. "primaryKey": false,
  1509. "notNull": false,
  1510. "autoIncrement": false,
  1511. "defaultValue": "",
  1512. "hideInGraph": false,
  1513. "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
  1514. "refDict": "",
  1515. "uiHint": "",
  1516. "id": "FDD67CEE-4B52-4BD1-A1A3-9C5EBC6037E6"
  1517. },
  1518. {
  1519. "defKey": "HEIGHT",
  1520. "defName": "身高",
  1521. "comment": "",
  1522. "type": "INT",
  1523. "len": "",
  1524. "scale": "",
  1525. "primaryKey": false,
  1526. "notNull": false,
  1527. "autoIncrement": false,
  1528. "defaultValue": "",
  1529. "hideInGraph": false,
  1530. "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E",
  1531. "refDict": "",
  1532. "uiHint": "",
  1533. "id": "CAAA0E79-41A1-4758-B481-D171168C4D68"
  1534. },
  1535. {
  1536. "defKey": "WEIGHT",
  1537. "defName": "体重",
  1538. "comment": "",
  1539. "type": "INT",
  1540. "len": "",
  1541. "scale": "",
  1542. "primaryKey": false,
  1543. "notNull": false,
  1544. "autoIncrement": false,
  1545. "defaultValue": "",
  1546. "hideInGraph": false,
  1547. "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E",
  1548. "refDict": "",
  1549. "uiHint": "",
  1550. "id": "575482CE-64A6-4CB9-99DC-8E126D190AAA"
  1551. },
  1552. {
  1553. "defKey": "NATION",
  1554. "defName": "名族",
  1555. "comment": "",
  1556. "type": "VARCHAR",
  1557. "len": "32",
  1558. "scale": "",
  1559. "primaryKey": false,
  1560. "notNull": false,
  1561. "autoIncrement": false,
  1562. "defaultValue": "",
  1563. "hideInGraph": false,
  1564. "domain": "73FD2BAD-2358-4336-B96D-45DC897BD792",
  1565. "refDict": "115EDEFC-0323-410E-81AB-CCAB8879837A",
  1566. "uiHint": "",
  1567. "id": "15B0D75D-0B97-4985-A816-D0EAFA90446B"
  1568. },
  1569. {
  1570. "defKey": "POLITICAL",
  1571. "defName": "政治面貌",
  1572. "comment": "",
  1573. "type": "VARCHAR",
  1574. "len": "32",
  1575. "scale": "",
  1576. "primaryKey": false,
  1577. "notNull": false,
  1578. "autoIncrement": false,
  1579. "defaultValue": "",
  1580. "hideInGraph": false,
  1581. "domain": "73FD2BAD-2358-4336-B96D-45DC897BD792",
  1582. "refDict": "06EED564-BBA9-4747-8D73-AF809A330CB8",
  1583. "uiHint": "",
  1584. "id": "F458E86D-84D6-45A1-9DD3-51E6C8170D7F"
  1585. },
  1586. {
  1587. "defKey": "MARITAL",
  1588. "defName": "婚姻状况",
  1589. "comment": "",
  1590. "type": "VARCHAR",
  1591. "len": "32",
  1592. "scale": "",
  1593. "primaryKey": false,
  1594. "notNull": false,
  1595. "autoIncrement": false,
  1596. "defaultValue": "",
  1597. "hideInGraph": false,
  1598. "domain": "73FD2BAD-2358-4336-B96D-45DC897BD792",
  1599. "refDict": "EA1587B7-3954-437A-BFE0-FCB0453BCABA",
  1600. "uiHint": "",
  1601. "id": "7275E578-6893-4922-AC69-95B261BFBD61"
  1602. },
  1603. {
  1604. "defKey": "DOMICILE_PLACE_PROVINCE",
  1605. "defName": "籍贯(省)",
  1606. "comment": "",
  1607. "type": "VARCHAR",
  1608. "len": "60",
  1609. "scale": "",
  1610. "primaryKey": false,
  1611. "notNull": false,
  1612. "autoIncrement": false,
  1613. "defaultValue": "",
  1614. "hideInGraph": false,
  1615. "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
  1616. "refDict": "",
  1617. "uiHint": "",
  1618. "id": "F04BF130-3EC1-4E02-9DED-3214CA88E352"
  1619. },
  1620. {
  1621. "defKey": "DOMICILE_PLACE_CITY",
  1622. "defName": "籍贯(市)",
  1623. "comment": "",
  1624. "type": "VARCHAR",
  1625. "len": "32",
  1626. "scale": "",
  1627. "primaryKey": false,
  1628. "notNull": false,
  1629. "autoIncrement": false,
  1630. "defaultValue": "",
  1631. "hideInGraph": false,
  1632. "domain": "73FD2BAD-2358-4336-B96D-45DC897BD792",
  1633. "refDict": "",
  1634. "uiHint": "",
  1635. "id": "B97F5BC2-33DE-4857-9DB8-ECFD02C9040C"
  1636. },
  1637. {
  1638. "defKey": "DOMICILE_PLACE_ADDRESS",
  1639. "defName": "户籍地址",
  1640. "comment": "",
  1641. "type": "VARCHAR",
  1642. "len": "60",
  1643. "scale": "",
  1644. "primaryKey": false,
  1645. "notNull": false,
  1646. "autoIncrement": false,
  1647. "defaultValue": "",
  1648. "hideInGraph": false,
  1649. "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
  1650. "refDict": "",
  1651. "uiHint": "",
  1652. "id": "812ADF1D-8C03-40CA-B030-E539838FB889"
  1653. }
  1654. ],
  1655. "id": "F30202B9-4B5D-4CE7-87CE-B3890C84D3F2"
  1656. }
  1657. ],
  1658. "dbConn": []
  1659. }