master
huanghai 5 years ago
parent 6795567912
commit b399be8c03

@ -6,6 +6,7 @@ type TAppBase struct {
AppName string `xorm:"not null comment('系统名称') VARCHAR(100)"`
AccessKey string `xorm:"not null comment('AK') CHAR(20)"`
SecretKey string `xorm:"not null comment('SK') CHAR(26)"`
AppToken string `xorm:"default 'NULL' comment('系统票据') CHAR(100)"`
AppUrl string `xorm:"default 'NULL' comment('系统集成页面调用地址') VARCHAR(1024)"`
AppIcon string `xorm:"default 'NULL' comment('系统图标的路径') VARCHAR(1024)"`
RedirectUri string `xorm:"default 'NULL' comment('统一认证回调地址') VARCHAR(1024)"`

@ -12,7 +12,7 @@ type TBaseOrganizationLog struct {
MainSchoolType int32 `xorm:"not null default 1 comment('主校类型1普通校2主校3分校') INT(11)"`
MainSchoolId string `xorm:"not null default '''' comment('如果是分校所属主校的ID,如果是主校是自己的ID如果是分校是主校ID如果是普通校也是自己的ID') CHAR(36)"`
Xxbxlxm string `xorm:"not null default '''' comment('学校办学类型(学校专有属性)有字典') CHAR(3)"`
Szdcxlxm string `xorm:"not null default '''' comment('学校城乡类型(学校专有属性)有字典') CHAR(2)"`
Szdcxlxm string `xorm:"not null default '''' comment('学校城乡类型(学校专有属性)有字典') CHAR(3)"`
Xxjbzm string `xorm:"not null default '''' comment('学校举办者(学校专有属性)有字典') CHAR(3)"`
Fzr string `xorm:"not null default '''' comment('机构负责人ID*一个单位只能有一个负责人)') CHAR(36)"`
Fddbr string `xorm:"not null default '''' comment('机构法定代表人') VARCHAR(50)"`

@ -2,7 +2,7 @@ package models
type TBaseTeacherPosition struct {
Id string `xorm:"not null pk comment('主键') CHAR(36)"`
PersonId string `xorm:"not null default '''' comment('人员ID') index(person_id) CHAR(18)"`
PersonId string `xorm:"not null default '''' comment('人员ID') index(person_id) CHAR(36)"`
BureauId string `xorm:"not null comment('所在单位ID') index(person_id) CHAR(36)"`
PositionId string `xorm:"not null default ''0'' comment('职务ID') CHAR(36)"`
BUse int32 `xorm:"not null default 1 comment('是否可用 1可用 -2不可用') index(person_id) TINYINT(1)"`

@ -8,7 +8,7 @@ type TDataexDataaccess struct {
Id string `xorm:"not null pk comment('ID') VARCHAR(36)"`
DatasourceId string `xorm:"not null comment('数据源ID') index VARCHAR(36)"`
DatasourceCode string `xorm:"default 'NULL' VARCHAR(255)"`
ConsumeSystemid string `xorm:"not null comment('数据使用系统ID') index VARCHAR(36)"`
ConsumeSystemid string `xorm:"default 'NULL' comment('数据使用系统ID') index CHAR(36)"`
QueryFlag int32 `xorm:"not null default 1 comment('可查【1-1否】') INT(11)"`
SetFlag int32 `xorm:"not null default -1 comment('可修改【1-1否】') INT(11)"`
ConsumeType int32 `xorm:"not null comment('使用数据范围【1本机构2本机构以及下属机构-1不限制】') INT(11)"`

@ -8,10 +8,11 @@ type TDataexError struct {
Id string `xorm:"not null pk comment('ID') VARCHAR(36)"`
SystemId string `xorm:"not null comment('数据提供系统ID【输入参数】') VARCHAR(36)"`
DatasourceId string `xorm:"not null comment('数据源ID【输入参数】') VARCHAR(36)"`
OrgId string `xorm:"not null comment('数据机构ID【输入参数】') VARCHAR(36)"`
DataId string `xorm:"not null comment('数据ID【输入参数】') VARCHAR(36)"`
OrgId string `xorm:"default 'NULL' comment('数据机构ID【输入参数】') VARCHAR(36)"`
DataId string `xorm:"default 'NULL' comment('数据ID【输入参数】') VARCHAR(36)"`
DataContent string `xorm:"default 'NULL' comment('数据内容【Json格式输入参数】') LONGTEXT"`
FileUri string `xorm:"default 'NULL' comment('文件地址【文件交换】') VARCHAR(500)"`
ErrorInfo string `xorm:"default 'NULL' comment('错误信息说明') VARCHAR(5000)"`
ChangeTime time.Time `xorm:"default 'NULL' comment('最近修改时间') DATETIME"`
DeleteTime time.Time `xorm:"default 'NULL' comment('删除时间') DATETIME"`
EnableFlag int32 `xorm:"not null default 1 comment('启用标志【默认11启用-1禁用】') INT(11)"`

@ -7,6 +7,7 @@ import (
type TDataexJyt2012 struct {
Id string `xorm:"not null pk comment('ID') VARCHAR(36)"`
DicName string `xorm:"not null comment('字典/字典项名称') VARCHAR(100)"`
DicValue string `xorm:"not null VARCHAR(100)"`
DicType int32 `xorm:"not null default 1 comment('字典类型【1国标数据、关联数据源2国标字典、关联元数据】') INT(11)"`
DicInfo string `xorm:"default ''NULL'' comment('字典相信说明') VARCHAR(500)"`
RootFlag int32 `xorm:"not null default -1 comment('是否是字典【1-1否】') INT(11)"`

@ -0,0 +1,6 @@
package models
type TDwTable struct {
TableId int32 `xorm:"not null pk autoincr INT(255)"`
TableName string `xorm:"not null VARCHAR(255)"`
}

@ -0,0 +1,13 @@
package models
type TDwTableField struct {
Id int32 `xorm:"not null pk autoincr INT(11)"`
TableId int32 `xorm:"not null comment('哪张表') index INT(11)"`
FieldName string `xorm:"not null comment('字段名称') VARCHAR(255)"`
DataType string `xorm:"not null comment('数据类型') VARCHAR(255)"`
FieldLength int32 `xorm:"not null comment('字段长度') INT(11)"`
DecimalPointLength int32 `xorm:"not null default 0 comment('小数点后长度') INT(11)"`
Comment string `xorm:"default 'NULL' comment('描述') VARCHAR(255)"`
IsPk int32 `xorm:"not null default 0 comment('是否为主键') INT(255)"`
IsNull int32 `xorm:"not null comment('是否可为空') INT(255)"`
}

@ -3,10 +3,12 @@ package main
import (
"dsSupport/Utils/CommonUtil"
"dsSupport/Utils/DbUtil"
"dsSupport/Utils/PgUtil"
"fmt"
)
var db = DbUtil.Engine
var pgDb = PgUtil.Engine
func main() {
//1、读取每一张需要创建的表
@ -17,7 +19,9 @@ func main() {
tableId := list[i]["table_id"].(int64)
tableName := list[i]["table_name"].(string)
createTableSql := `DROP TABLE IF EXISTS "public"."` + tableName + `";` + "\r\n"
createTableSql += `CREATE TABLE "public"."` + tableName + `" (` + "\r\n"
pgDb.SQL(createTableSql).Execute()
createTableSql = `CREATE TABLE "public"."` + tableName + `" (` + "\r\n"
//2、根据表名获取相应的创建表的信息
sql = `select * from t_dw_table_field where table_id=?`
list2, _ := db.SQL(sql, tableId).Query().List()
@ -35,20 +39,16 @@ func main() {
if isNull == 0 {
c += " NOT NULL,"
} else {
if i2 < len(list2)-1 {
c += ","
}
}
createTableSql += `"` + fieldName + `" ` + c + "\r\n"
}
createTableSql=createTableSql[0:len(createTableSql)-3]
createTableSql += `);` + "\r\n"
//添加生成字段描述信息
for i2 := range list2 {
fieldName := list2[i2]["field_name"].(string)
comment := list2[i2]["comment"]
if comment != nil && len(comment.(string)) > 0 {
createTableSql += `COMMENT ON COLUMN "public"."` + tableName + `"."` + fieldName + `" IS '` + comment.(string) + `';` + "\r\n"
}
_, err := pgDb.SQL(createTableSql).Execute()
if err != nil {
fmt.Println(createTableSql)
panic(err.Error())
}
//主键有哪些
var pks = ""
@ -62,9 +62,12 @@ func main() {
//去掉最后一个逗号
pks = pks[0 : len(pks)-1]
//添加主键描述
createTableSql += `-- 设置主键` + "\r\n"
createTableSql += `ALTER TABLE "public"."` + tableName + `" ADD CONSTRAINT "` + tableName + `_dw_pkey" PRIMARY KEY ("` + pks + `");` + "\r\n"
createTableSql = `ALTER TABLE "public"."` + tableName + `" ADD CONSTRAINT "` + tableName + `_dw_pkey" PRIMARY KEY ("` + pks + `");` + "\r\n"
_, err = pgDb.SQL(createTableSql).Execute()
if err != nil {
panic(err.Error())
}
fmt.Println(createTableSql)
fmt.Println("恭喜,数据仓库中相应表格创建完毕!")
}
}

@ -1,110 +0,0 @@
package main
import (
"context"
"dsSupport/Utils/GpUtil"
"encoding/json"
"fmt"
"github.com/olivere/elastic/v7"
"github.com/tidwall/gjson"
"log"
"os"
"time"
)
// 深度分页
// https://www.cnblogs.com/hello-shf/p/11543453.html
var client elastic.Client
var db = GpUtil.Engine
func main() {
var host = "http://10.10.14.188:9200/"
esClient, err := elastic.NewClient(
elastic.SetURL(host),
elastic.SetSniff(false),
elastic.SetHealthcheckInterval(10*time.Second),
elastic.SetGzip(true),
elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)),
//elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)),
)
if err != nil {
panic(err)
}
//要同步的索引名称,也就是表名称
indexName := "org_school"
//取所有
CTX := context.Background()
result, err := esClient.Scroll().Index(indexName).Size(10).Do(CTX)
if err != nil {
panic(err)
}
//第一次的结果集
for i := range result.Hits.Hits {
resByte, _ := json.Marshal(result.Hits.Hits[i].Source)
resStr := string(resByte)
value := gjson.Get(resStr, "data_content")
//判断表是不是已存在
//如果是第一次的话而且表不存在的情况下,重新创建表结构
m := make(map[string]interface{})
json.Unmarshal([]byte(value.String()), &m)
if len(m) > 0 && i == 0 {
CreateTable(indexName, m)
}
}
//继续用的 scoll_id
scrollId := result.ScrollId
//第一次命中的个数
var nowCount = int64(len(result.Hits.Hits))
//总的命中个数
allCount := result.TotalHits()
//开始循环
for {
//如果还有数据没有获取
if allCount > nowCount {
result, err = esClient.Scroll().ScrollId(scrollId).Do(CTX)
scrollId = result.ScrollId
nowCount += int64(len(result.Hits.Hits))
for i := range result.Hits.Hits {
resByte, _ := json.Marshal(result.Hits.Hits[i].Source)
jsonStr := string(resByte)
m := make(map[string]interface{})
json.Unmarshal([]byte(jsonStr), &m)
for k, v := range m {
fmt.Printf("%v: %v\n", k, v)
}
}
} else {
//没有数据了
break
}
}
}
/**
INDEX
*/
func CreateTable(tableName string, m map[string]interface{}) {
createTableSql := `CREATE TABLE "public"."` + tableName + `" (` + "\r\n"
var c = ""
for k, v := range m {
switch v.(type) {
case float64:
c = "float8"
case string:
c = "varchar(128) " + ` COLLATE "pg_catalog"."default"`
}
createTableSql += `"` + k + `" ` + c + ",\r\n"
}
createTableSql = createTableSql[0 : len(createTableSql)-3]
createTableSql += "\r\n" + `);` + "\r\n"
//创建表
db.SQL(createTableSql).Execute()
fmt.Println("成功创建表:"+tableName+"~")
}

@ -2,7 +2,7 @@ package main
import (
"context"
"dsSupport/Utils/GpUtil"
"dsSupport/Utils/PgUtil"
"encoding/csv"
"encoding/json"
"fmt"
@ -17,7 +17,7 @@ import (
// https://www.cnblogs.com/hello-shf/p/11543453.html
var client elastic.Client
var db = GpUtil.Engine
var db = PgUtil.Engine
func main() {
var host = "http://10.10.14.188:9200/"
@ -90,9 +90,9 @@ func SaveToCsv(csvFileName string, _map []map[string]interface{}) {
// 写入UTF-8 BOM防止中文乱码
file.WriteString("\xEF\xBB\xBF")
w := csv.NewWriter(file)
for i := range _map {
_map[i]
}
//for i := range _map {
// //_map[i]
//}
w.Write([]string{"开发者名称", "开发者邮箱", "应用名称"})
// 写文件需要flush不然缓存满了后面的就写不进去了只会写一部分
w.Flush()

@ -0,0 +1,89 @@
package main
import (
"context"
"dsSupport/Utils/DbUtil"
"dsSupport/models"
"encoding/json"
"fmt"
"github.com/olivere/elastic/v7"
"github.com/tidwall/gjson"
"log"
"os"
"time"
)
// 深度分页
// https://www.cnblogs.com/hello-shf/p/11543453.html
var client elastic.Client
var db = DbUtil.Engine
func main() {
var host = "http://10.10.14.188:9200/"
esClient, err := elastic.NewClient(
elastic.SetURL(host),
elastic.SetSniff(false),
elastic.SetHealthcheckInterval(10*time.Second),
elastic.SetGzip(true),
elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)),
elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)),
)
if err != nil {
panic(err)
}
//要同步的索引名称,也就是表名称
indexName := "org_school"
//取所有
CTX := context.Background()
result, err := esClient.Scroll().Index(indexName).Size(10).Do(CTX)
if err != nil {
panic(err)
}
//第一次的结果集
for i := range result.Hits.Hits {
resByte, _ := json.Marshal(result.Hits.Hits[i].Source)
resStr := string(resByte)
value := gjson.Get(resStr, "data_content")
//如果是第一次的话而且表不存在的情况下,重新创建表结构
m := make(map[string]interface{})
json.Unmarshal([]byte(value.String()), &m)
if len(m) > 0 && i == 0 {
addFieldData(indexName, m)
break
}
}
}
/**
INDEX
*/
func addFieldData(tableName string, m map[string]interface{}) {
//换算table_id
sql := `select table_id from t_dw_table where table_name=?`
list, _ := db.SQL(sql, tableName).Query().List()
tableId := list[0]["table_id"].(int64)
//先删除后插入
sql = `delete from t_dw_table_field where table_id=?`
db.SQL(sql, tableId).Execute()
//准备插入
for k, v := range m {
model := new(models.TDwTableField)
model.TableId = int32(tableId)
model.FieldName = k
switch v.(type) {
case float64:
model.DataType = "int"
model.FieldLength = 4
model.DecimalPointLength = 0
case string:
model.DataType = "varchar"
model.FieldLength = 128
model.DecimalPointLength = 0
}
db.Insert(model)
}
fmt.Println("完成现有Es Mapping的结构反向初始化工作将手工修改表t_dw_table_field中数据尤其是主键一定要设置啊")
}

@ -1,4 +1,4 @@
package GpUtil
package PgUtil
import (
"dsSupport/Const/ErrorConst"

@ -27,7 +27,7 @@ require (
github.com/swaggo/gin-swagger v1.2.0
github.com/syndtr/goleveldb v1.0.0 // indirect
github.com/tealeg/xlsx v1.0.5 // indirect
github.com/tidwall/gjson v1.6.1 // indirect
github.com/tidwall/gjson v1.6.1
github.com/xormplus/builder v0.0.0-20200331055651-240ff40009be
github.com/xormplus/core v0.0.0-20200308074340-f3bce19d5f31
github.com/xormplus/xorm v0.0.0-20200731130200-6811f3bde592

@ -0,0 +1,6 @@
package models
type TDwTable struct {
TableId int32 `xorm:"not null pk autoincr INT(255)"`
TableName string `xorm:"not null VARCHAR(255)"`
}

@ -0,0 +1,13 @@
package models
type TDwTableField struct {
Id int32 `xorm:"not null pk autoincr INT(11)"`
TableId int32 `xorm:"not null comment('哪张表') index INT(11)"`
FieldName string `xorm:"not null comment('字段名称') VARCHAR(255)"`
DataType string `xorm:"not null comment('数据类型') VARCHAR(255)"`
FieldLength int32 `xorm:"not null comment('字段长度') INT(11)"`
DecimalPointLength int32 `xorm:"not null default 0 comment('小数点后长度') INT(11)"`
Comment string `xorm:"default 'NULL' comment('描述') VARCHAR(255)"`
IsPk int32 `xorm:"not null default 0 comment('是否为主键') INT(255)"`
IsNull int32 `xorm:"not null comment('是否可为空') INT(255)"`
}
Loading…
Cancel
Save