Browse Source

新增 下载实体类方法

YaolongHan 4 years ago
parent
commit
e4f0b49144
3 changed files with 203 additions and 74 deletions
  1. 145 74
      docs/.vuepress/components/TableDesig.vue
  2. 57 0
      docs/Property.kt
  3. 1 0
      package.json

+ 145 - 74
docs/.vuepress/components/TableDesig.vue

@@ -1,86 +1,157 @@
 <template>
+  <div>
+    <el-button style="margin-top:10px" @click="genEntrty">生成实体类</el-button>
+    <el-button style="margin-top:10px" @click="genControler">生成接口类</el-button>
     <el-table
-            :data="tableData"
-            :header-cell-style="headerStyle"
-            border
-            stripe
-            fit
-            style="width: 100%;margin-top: 25px;">
-        <el-table-column
-                fixed
-                prop="ColumnName"
-                label="字段名"
-                width="150">
-        </el-table-column>
-        <el-table-column
-                prop="Description"
-                min-width="200"
-                label="说明">
-        </el-table-column>
-        <el-table-column
-                prop="ColumnType"
-                min-width="120"
-                label="类型">
-        </el-table-column>
-        <el-table-column
-                prop="CharMaxLength"
-                min-width="60"
-                label="长度">
-        </el-table-column>
-        <el-table-column
-                prop="Nullable"
-                align="center"
-                label="不是 null">
-        </el-table-column>
-        <el-table-column
-                prop="Default"
-                min-width="260"
-                label="默认值">
-        </el-table-column>
+      :data="tableData"
+      :header-cell-style="headerStyle"
+      border
+      stripe
+      fit
+      style="width: 100%;margin-top: 25px;"
+    >
+      <el-table-column fixed prop="ColumnName" label="字段名" width="150"></el-table-column>
+      <el-table-column prop="Description" min-width="200" label="说明"></el-table-column>
+      <el-table-column prop="ColumnType" min-width="120" label="类型"></el-table-column>
+      <el-table-column prop="CharMaxLength" min-width="60" label="长度"></el-table-column>
+      <el-table-column prop="Nullable" align="center" label="不是 null"></el-table-column>
+      <el-table-column prop="Default" min-width="260" label="默认值"></el-table-column>
     </el-table>
+  </div>
 </template>
 
 <script>
-    import Vue from "vue";
-    import ElementUI from "element-ui";
-    import Axios from "axios";
-    import "element-ui/lib/theme-chalk/index.css";
-    import Opt from "../opt"
+import Vue from "vue";
+import ElementUI from "element-ui";
+import Axios from "axios";
+import "element-ui/lib/theme-chalk/index.css";
+import Opt from "../opt";
+import { SStringBuilder } from "@persagy-web/base";
+Vue.use(ElementUI);
 
-    Vue.use(ElementUI);
+export default {
+  data: function() {
+    return {
+      tableData: [],
+      headerStyle: {
+        backgroundColor: "#e1e4e5",
+        color: "#2b2b2b",
+        lineHeight: "30px"
+      } // 列表样式
+    };
+  },
+  components: {},
+  created: function() {
+    this.getData();
+  },
+  mounted: function() {
+    // alert(this.schema);
+  },
+  props: ["sys", "schema", "table"],
+  computed: {},
+  methods: {
+    getData() {
+      Axios.get(
+        `${Opt.databaseDoc[this.sys]}/--database-doc--/column-list?schema=${
+          this.schema
+        }&table=${this.table}`,
+        {}
+      ).then(res => {
+        this.tableData = res.data;
+      });
+    },
+    //生成实体类
+    genEntrty() {
+      let strBuild = new SStringBuilder();
+      strBuild.append(
+        `package cn.sagacloud.server.datacenter.models.entities
 
-    export default{
-        data: function () {
-            return {
-                tableData: [],
-                headerStyle: {
-                    backgroundColor: '#e1e4e5',
-                    color: '#2b2b2b',
-                    lineHeight: '30px'
-                }, // 列表样式
-            };
-        },
-        components: {},
-        created: function () {
-            this.getData()
-        },
-        mounted: function () {
-            // alert(this.schema);
-        },
-        props: ["sys", "schema", "table"],
-        computed: {},
-        methods: {
-            getData(){
-                Axios.get(`${Opt.databaseDoc[this.sys]}/--database-doc--/column-list?schema=${this.schema}&table=${this.table}`,{}).then(res=>{
-                    this.tableData = res.data;
-                })
-            }
-        },
-    }
+import cn.sagacloud.server.datacenter.models.entities.base.BaseInfo
+import cn.sagacloud.server.datacenter.models.entities.task.SchemeUtils
+import com.alibaba.fastjson.annotation.JSONField
+import com.sybotan.service.models.annotations.SCascade
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 资产信息实体类
+ *
+ * @author  自动生成
+ */
+@ApiModel(description = "资产信息实体类")
+@Table(name = "${this.schema}.${this.table}")
+open class ${this.toHump(this.table)} : BaseInfo(),Comparator<${this.toHump(this.table)}> {
+`
+      );
+      this.tableData.forEach(element => {
+        strBuild.append(`    /** ${element.Description} */`);
+        if (element.Nullable == "YES") {
+          strBuild.append(
+            `    @ApiModelProperty(value = "${element.Description}")`
+          );
+        } else {
+          strBuild.append(
+            `    @ApiModelProperty(value = "${element.Description}", required = true)`
+          );
+        }
+        strBuild.append(`    @Column(name = "${element.ColumnName}")`);
+        strBuild.append(`    var ${this.toHump(element.ColumnName)}: ${this.typeToName(element.ColumnType)}? = null\n`);
+      });
+
+      strBuild.append(`} // Class ${this.toHump(this.table)}`);
+      this.download(`${this.toHump(this.table)}.kt`,strBuild.toString())
+    },
+    //生成接口类
+    genControler() {
+      this.tableData;
+    },
+    // 数据包类型到实体类的转换
+    typeToName(name) {
+     const obj = {
+        varchar: "String",
+        char: "String",
+        timestamptz: "Date",
+        timestamp: "Date",
+        text: "String",
+        bool: "Boolean",
+        int4: "Int",
+        date: "Date",
+        int2: "Int",
+        json: "HashMap<String, Any?>",
+        jsonb:"HashMap<String, Any?>"
+      };
+      if (name) {
+        return obj[name] ? obj[name] : "String";
+      } else {
+        return "String";
+      }
+    },
+    //转驼峰
+    toHump(name){
+      return name
+    },
+    // 下载文件
+  download(filename, text) {
+  var element = document.createElement('a');
+  element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
+  element.setAttribute('download', filename);
+
+  element.style.display = 'none';
+  document.body.appendChild(element);
+
+  element.click();
+
+  document.body.removeChild(element);
+}
+  }
+};
 </script>
 
 <style scoped>
-    /deep/ table{
-        margin: 0;
-    }
+/deep/ table {
+  margin: 0;
+}
 </style>

+ 57 - 0
docs/Property.kt

@@ -0,0 +1,57 @@
+package cn.sagacloud.server.datacenter.models.entities
+
+import cn.sagacloud.server.datacenter.models.entities.base.BaseInfo
+import cn.sagacloud.server.datacenter.models.entities.task.SchemeUtils
+import com.alibaba.fastjson.annotation.JSONField
+import com.sybotan.service.models.annotations.SCascade
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
+import javax.persistence.Column
+import javax.persistence.Id
+import javax.persistence.Table
+
+/**
+ * 资产信息实体类
+ *
+ * @author  自动生成
+ */
+@ApiModel(description = "资产信息实体类")
+@Table(name = "dict.class_def")
+open class class_def : BaseInfo(),Comparator<class_def> {
+
+    /** 分类code */
+    @ApiModelProperty(value = "分类code", required = true)
+    @Column(name = "id")
+    var id: String? = null
+
+    /** 名称 */
+    @ApiModelProperty(value = "名称", required = true)
+    @Column(name = "name")
+    var name: String? = null
+
+    /** 父类指针 */
+    @ApiModelProperty(value = "父类指针", required = true)
+    @Column(name = "parent_id")
+    var parent_id: String? = null
+
+    /** 更新时间 */
+    @ApiModelProperty(value = "更新时间")
+    @Column(name = "last_update")
+    var last_update: Date? = null
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间")
+    @Column(name = "create_time")
+    var create_time: Date? = null
+
+    /** 标志 1为专业 2为系统 3为设备 4为部件 */
+    @ApiModelProperty(value = "标志 1为专业 2为系统 3为设备 4为部件")
+    @Column(name = "sign")
+    var sign: String? = null
+
+    /** 对应物理世界对象标志 */
+    @ApiModelProperty(value = "对应物理世界对象标志")
+    @Column(name = "type_platform")
+    var type_platform: String? = null
+
+} // Class Property

+ 1 - 0
package.json

@@ -12,6 +12,7 @@
     "publish": "node publish.js"
   },
   "dependencies": {
+    "@persagy-web/base": "2.2.1",
     "axios": "^0.18.1",
     "element-ui": "^2.12.0",
     "vue": "^2.6.10",