Selaa lähdekoodia

保存etl配置测试通过

qdy 2 kuukautta sitten
commit
e926b83b7f
10 muutettua tiedostoa jossa 687 lisäystä ja 0 poistoa
  1. 1
    0
      .gitignore
  2. 25
    0
      gct.sh
  3. 49
    0
      go.mod
  4. 240
    0
      go.sum
  5. 31
    0
      internal/model/etl_config.go
  6. 22
    0
      internal/model/tenant_config.go
  7. 38
    0
      internal/service/save_service.go
  8. 136
    0
      main.go
  9. 76
    0
      test/my_ETL_test.go
  10. 69
    0
      test/my_Tenant_test.go

+ 1
- 0
.gitignore Näytä tiedosto

@@ -0,0 +1 @@
1
+logs/

+ 25
- 0
gct.sh Näytä tiedosto

@@ -0,0 +1,25 @@
1
+#!/bin/bash
2
+
3
+# 使用命令行参数,如果没有提供则使用默认值
4
+COMMIT_MSG="${1:-初始提交}"
5
+TAG_VERSION="${2:-v0.1.0}"
6
+
7
+echo "提交信息: $COMMIT_MSG"
8
+echo "标签版本: $TAG_VERSION"
9
+
10
+# 提交和推送
11
+git add .
12
+git commit -m "$COMMIT_MSG"
13
+git push -u origin master
14
+
15
+# 创建标签(关键修改在这里)
16
+# 方法1:使用注释标签(推荐,不会打开编辑器)
17
+git tag -a "$TAG_VERSION" -m "Release $TAG_VERSION"
18
+
19
+# 或者方法2:如果你需要GPG签名,使用这个
20
+# GIT_EDITOR=true git tag -s "$TAG_VERSION" -m "Release $TAG_VERSION"
21
+
22
+# 推送标签
23
+git push origin "$TAG_VERSION"
24
+
25
+echo "完成!"

+ 49
- 0
go.mod Näytä tiedosto

@@ -0,0 +1,49 @@
1
+module git.x2erp.com/qdy/go-svc-core
2
+
3
+go 1.25.4
4
+
5
+require (
6
+	git.x2erp.com/qdy/go-base v0.1.13-20251231-1
7
+	git.x2erp.com/qdy/go-db v0.1.13-20251231-1
8
+)
9
+
10
+require (
11
+	filippo.io/edwards25519 v1.1.0 // indirect
12
+	github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect
13
+	github.com/fatih/color v1.9.0 // indirect
14
+	github.com/go-sql-driver/mysql v1.9.3 // indirect
15
+	github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
16
+	github.com/golang-sql/sqlexp v0.1.0 // indirect
17
+	github.com/golang/snappy v0.0.4 // indirect
18
+	github.com/google/uuid v1.6.0 // indirect
19
+	github.com/hashicorp/consul/api v1.9.0 // indirect
20
+	github.com/hashicorp/go-cleanhttp v0.5.1 // indirect
21
+	github.com/hashicorp/go-hclog v0.12.0 // indirect
22
+	github.com/hashicorp/go-immutable-radix v1.0.0 // indirect
23
+	github.com/hashicorp/go-rootcerts v1.0.2 // indirect
24
+	github.com/hashicorp/golang-lru v0.5.3 // indirect
25
+	github.com/hashicorp/serf v0.9.5 // indirect
26
+	github.com/jmoiron/sqlx v1.4.0 // indirect
27
+	github.com/klauspost/compress v1.16.7 // indirect
28
+	github.com/lib/pq v1.10.9 // indirect
29
+	github.com/mattn/go-colorable v0.1.8 // indirect
30
+	github.com/mattn/go-isatty v0.0.20 // indirect
31
+	github.com/microsoft/go-mssqldb v1.9.4 // indirect
32
+	github.com/mitchellh/go-homedir v1.1.0 // indirect
33
+	github.com/mitchellh/mapstructure v1.3.3 // indirect
34
+	github.com/montanaflynn/stats v0.7.1 // indirect
35
+	github.com/sijms/go-ora/v2 v2.9.0 // indirect
36
+	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
37
+	github.com/xdg-go/scram v1.1.2 // indirect
38
+	github.com/xdg-go/stringprep v1.0.4 // indirect
39
+	github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
40
+	go.mongodb.org/mongo-driver v1.17.6 // indirect
41
+	go.uber.org/multierr v1.10.0 // indirect
42
+	go.uber.org/zap v1.27.1 // indirect
43
+	golang.org/x/crypto v0.45.0 // indirect
44
+	golang.org/x/sync v0.18.0 // indirect
45
+	golang.org/x/sys v0.38.0 // indirect
46
+	golang.org/x/text v0.31.0 // indirect
47
+	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
48
+	gopkg.in/yaml.v2 v2.4.0 // indirect
49
+)

+ 240
- 0
go.sum Näytä tiedosto

@@ -0,0 +1,240 @@
1
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
2
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
3
+git.x2erp.com/qdy/go-base v0.1.13-20251231-1 h1:lalbX9ZF8oFv2f5OV7Uxc85UGD5lb1M45YS3uSrBCJk=
4
+git.x2erp.com/qdy/go-base v0.1.13-20251231-1/go.mod h1:bhbWJO4/dxNNjXjie1E0G41pvKEEm2dPnRXRzYnV9tU=
5
+git.x2erp.com/qdy/go-db v0.1.13-20251231-1 h1:SLLUS0DObzgETrZ5nJ1iuniLrlSuSjl23NsV7KJ2NM4=
6
+git.x2erp.com/qdy/go-db v0.1.13-20251231-1/go.mod h1:/qiVSMGawmZMhfGOch9OFCA/QN+6xZOkUB6FdEcaC98=
7
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U=
8
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM=
9
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 h1:B+blDbyVIG3WaikNxPnhPiJ1MThR03b3vKGtER95TP4=
10
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1/go.mod h1:JdM5psgjfBf5fo2uWOZhflPWyDBZ/O/CNAH9CtsuZE4=
11
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4=
12
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA=
13
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.1 h1:Wgf5rZba3YZqeTNJPtvqZoBu1sBN/L4sry+u2U3Y75w=
14
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.1/go.mod h1:xxCBG/f/4Vbmh2XQJBsOmNdxWUY5j/s27jujKPbQf14=
15
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 h1:bFWuoEKg+gImo7pvkiQEFAc8ocibADgXeiLAxWhWmkI=
16
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1/go.mod h1:Vih/3yc6yac2JzU4hzpaDupBJP0Flaia9rXXrU8xyww=
17
+github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs=
18
+github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
19
+github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
20
+github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=
21
+github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
22
+github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
23
+github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
24
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
25
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
26
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
27
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
28
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
29
+github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=
30
+github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
31
+github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
32
+github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo=
33
+github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
34
+github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
35
+github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
36
+github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
37
+github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
38
+github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
39
+github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
40
+github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
41
+github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
42
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
43
+github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
44
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
45
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
46
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
47
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
48
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
49
+github.com/hashicorp/consul/api v1.9.0 h1:T6dKIWcaihG2c21YUi0BMAHbJanVXiYuz+mPgqxY3N4=
50
+github.com/hashicorp/consul/api v1.9.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
51
+github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU=
52
+github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
53
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
54
+github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
55
+github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
56
+github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM=
57
+github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
58
+github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM=
59
+github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
60
+github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0=
61
+github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
62
+github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4=
63
+github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
64
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
65
+github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
66
+github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
67
+github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
68
+github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
69
+github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
70
+github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs=
71
+github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
72
+github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
73
+github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
74
+github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
75
+github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
76
+github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
77
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
78
+github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk=
79
+github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
80
+github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
81
+github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY=
82
+github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g=
83
+github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
84
+github.com/hashicorp/serf v0.9.5 h1:EBWvyu9tcRszt3Bxp3KNssBMP1KuHWyO51lz9+786iM=
85
+github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
86
+github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
87
+github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY=
88
+github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
89
+github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
90
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
91
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
92
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
93
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
94
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
95
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
96
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
97
+github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
98
+github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
99
+github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
100
+github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
101
+github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
102
+github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
103
+github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
104
+github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
105
+github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
106
+github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
107
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
108
+github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
109
+github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
110
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
111
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
112
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
113
+github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
114
+github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
115
+github.com/microsoft/go-mssqldb v1.9.4 h1:sHrj3GcdgkxytZ09aZ3+ys72pMeyEXJowT44j74pNgs=
116
+github.com/microsoft/go-mssqldb v1.9.4/go.mod h1:GBbW9ASTiDC+mpgWDGKdm3FnFLTUsLYN3iFL90lQ+PA=
117
+github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
118
+github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
119
+github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA=
120
+github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
121
+github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
122
+github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
123
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
124
+github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0=
125
+github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
126
+github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
127
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
128
+github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8=
129
+github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
130
+github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE=
131
+github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
132
+github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs=
133
+github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
134
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
135
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
136
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
137
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
138
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
139
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
140
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
141
+github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
142
+github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
143
+github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
144
+github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
145
+github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
146
+github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
147
+github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
148
+github.com/sijms/go-ora/v2 v2.9.0 h1:+iQbUeTeCOFMb5BsOMgUhV8KWyrv9yjKpcK4x7+MFrg=
149
+github.com/sijms/go-ora/v2 v2.9.0/go.mod h1:QgFInVi3ZWyqAiJwzBQA+nbKYKH77tdp1PYoCqhR2dU=
150
+github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
151
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
152
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
153
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
154
+github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
155
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
156
+github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
157
+github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
158
+github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
159
+github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
160
+github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
161
+github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
162
+github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM=
163
+github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI=
164
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
165
+go.mongodb.org/mongo-driver v1.17.6 h1:87JUG1wZfWsr6rIz3ZmpH90rL5tea7O3IHuSwHUpsss=
166
+go.mongodb.org/mongo-driver v1.17.6/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
167
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
168
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
169
+go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
170
+go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
171
+go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc=
172
+go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
173
+golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
174
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
175
+golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
176
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
177
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
178
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
179
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
180
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
181
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
182
+golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
183
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
184
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
185
+golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
186
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
187
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
188
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
189
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
190
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
191
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
192
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
193
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
194
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
195
+golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
196
+golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
197
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
198
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
199
+golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
200
+golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
201
+golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
202
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
203
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
204
+golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
205
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
206
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
207
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
208
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
209
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
210
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
211
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
212
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
213
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
214
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
215
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
216
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
217
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
218
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
219
+golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
220
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
221
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
222
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
223
+golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
224
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
225
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
226
+golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ=
227
+golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ=
228
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
229
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
230
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
231
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
232
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
233
+gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
234
+gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
235
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
236
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
237
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
238
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
239
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
240
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

+ 31
- 0
internal/model/etl_config.go Näytä tiedosto

@@ -0,0 +1,31 @@
1
+package model
2
+
3
+import (
4
+	"fmt"
5
+
6
+	"git.x2erp.com/qdy/go-base/ctx"
7
+	"git.x2erp.com/qdy/go-base/model/bson"
8
+)
9
+
10
+// 租户配置信息
11
+type ETLConfig struct {
12
+	bson.BsonStringModel `bson:",inline"`
13
+	AgentDatabaseId      string `bson:"agent_database_id,omitempty"`
14
+	AgentChangeCountSQL  string `bson:"agent_change_count_sql,omitempty"`
15
+	AgentChangeQuerySQL  string `bson:"agent_change_query_sql,omitempty"`
16
+	AgentFullCountSQL    string `bson:"agent_full_count_sql,omitempty"`
17
+	AgentFullQuerySQL    string `bson:"agent_full_query_sql,omitempty"`
18
+	DorisDatabaseName    string `bson:"doris_database_name,omitempty"`
19
+	DorisTabelNsme       string `bson:"doris_tabel_nsme,omitempty"`
20
+}
21
+
22
+// 构造函数,设置默认值
23
+func NewETLConfig(ctx *ctx.RequestContext, agentDatabaseId, dorisDatabaseName, dorisTableName string) *ETLConfig {
24
+	id := fmt.Sprintf("%s.%s.%s", ctx.TenantID, dorisDatabaseName, dorisTableName)
25
+	return &ETLConfig{
26
+		BsonStringModel:   bson.NewStringIDModelWithID(ctx, id),
27
+		AgentDatabaseId:   agentDatabaseId,
28
+		DorisDatabaseName: dorisDatabaseName,
29
+		DorisTabelNsme:    dorisTableName,
30
+	}
31
+}

+ 22
- 0
internal/model/tenant_config.go Näytä tiedosto

@@ -0,0 +1,22 @@
1
+package model
2
+
3
+import (
4
+	"git.x2erp.com/qdy/go-base/ctx"
5
+	"git.x2erp.com/qdy/go-base/model/bson"
6
+)
7
+
8
+// 租户配置信息
9
+type TenantConfig struct {
10
+	bson.BsonStringModel `bson:",inline"`
11
+	AgentUrl             string `bson:"agent_url,omitempty"`
12
+	AgentConcurrency     int    `bson:"agent_concurrency,omitempty"`
13
+}
14
+
15
+// 构造函数,设置默认值
16
+func NewTenantConfig(ctx *ctx.RequestContext, tenantId string, url string, concurrency int) *TenantConfig {
17
+	return &TenantConfig{
18
+		BsonStringModel:  bson.NewStringIDModelWithID(ctx, tenantId),
19
+		AgentConcurrency: concurrency,
20
+		AgentUrl:         url,
21
+	}
22
+}

+ 38
- 0
internal/service/save_service.go Näytä tiedosto

@@ -0,0 +1,38 @@
1
+package service
2
+
3
+import (
4
+	"encoding/json"
5
+
6
+	"git.x2erp.com/qdy/go-base/ctx"
7
+	"git.x2erp.com/qdy/go-base/logger"
8
+	"git.x2erp.com/qdy/go-base/model/response"
9
+
10
+	"git.x2erp.com/qdy/go-db/factory/mongodb"
11
+	"git.x2erp.com/qdy/go-svc-core/internal/model"
12
+)
13
+
14
+// SaveETLConfig 保存抽数工具配置
15
+func SaveETLConfig(req model.ETLConfig, mongoDBFactory *mongodb.MongoDBFactory, reqCtx *ctx.RequestContext) (*response.QueryResult[interface{}], error) {
16
+
17
+	if logger.IsDebug() {
18
+		jsonBytes, _ := json.Marshal(req)
19
+		logger.DebugC(reqCtx, "ETLConfig data: %s", string(jsonBytes))
20
+	}
21
+
22
+	queryResult, err := mongoDBFactory.InsertOne("etl_configs", req)
23
+
24
+	return queryResult, err
25
+}
26
+
27
+// SaveTenantConfig 保存租户配置
28
+func SaveTenantConfig(req model.TenantConfig, mongoDBFactory *mongodb.MongoDBFactory, reqCtx *ctx.RequestContext) (*response.QueryResult[interface{}], error) {
29
+
30
+	if logger.IsDebug() {
31
+		jsonBytes, _ := json.Marshal(req)
32
+		logger.DebugC(reqCtx, "TenantConfig data: %s", string(jsonBytes))
33
+	}
34
+
35
+	queryResult, err := mongoDBFactory.InsertOne("tenant_configs", req)
36
+
37
+	return queryResult, err
38
+}

+ 136
- 0
main.go Näytä tiedosto

@@ -0,0 +1,136 @@
1
+package main
2
+
3
+import (
4
+	"git.x2erp.com/qdy/go-db/factory/mongodb"
5
+	"git.x2erp.com/qdy/go-svc-core/internal/model"
6
+	"git.x2erp.com/qdy/go-svc-core/internal/service"
7
+
8
+	"git.x2erp.com/qdy/go-base/config"
9
+	"git.x2erp.com/qdy/go-base/consul"
10
+	"git.x2erp.com/qdy/go-base/container"
11
+	"git.x2erp.com/qdy/go-base/ctx"
12
+	"git.x2erp.com/qdy/go-base/logger"
13
+	"git.x2erp.com/qdy/go-base/middleware"
14
+	"git.x2erp.com/qdy/go-base/model/response"
15
+	"git.x2erp.com/qdy/go-base/webx"
16
+	"git.x2erp.com/qdy/go-base/webx/health"
17
+	"git.x2erp.com/qdy/go-base/webx/router"
18
+)
19
+
20
+var (
21
+	appName    = "svc-core"
22
+	appVersion = "1"
23
+)
24
+
25
+func main() {
26
+	//0.日志
27
+	//logger.InitBootLog()
28
+	logBootFactory := logger.InitBootLog()
29
+
30
+	//1.获取配置文件
31
+	cfg := config.GetConfig()
32
+	cfg.SetAppName(appName)
33
+	cfg.SetAppVersion(appVersion)
34
+
35
+	//2.创建关闭容器
36
+	ctr := container.NewContainer(cfg)
37
+
38
+	//注册日志,实现自动关闭
39
+	container.Reg(ctr, logBootFactory)
40
+
41
+	//3.创建数据库工厂--如果需求
42
+	//dbFactory := container.Create(ctr, database.CreateDBFactory)
43
+
44
+	// 赋值认证中间件参数
45
+	middleware.JWTAuthMiddlewareInit(cfg)
46
+
47
+	//测试数据库连接
48
+	//dbFactory.TestConnection()
49
+
50
+	// 创建mongodb
51
+	mongoDBFactory := container.Create(ctr, mongodb.CreateFactory)
52
+	mongoDBFactory.TestConnection()
53
+
54
+	//得到webservice服务工厂
55
+	webxFactory := webx.GetWebServiceFactory()
56
+
57
+	//建立hhtpService服务
58
+	webServcie, _ := webxFactory.CreateService(cfg.GetServiceConfig())
59
+
60
+	//建立路由-api
61
+	routerService := router.NewWebService(webServcie.GetRouter())
62
+
63
+	//注册路由--api
64
+	registerDefaultRouter(routerService, mongoDBFactory)
65
+
66
+	// 注册健康检查-api
67
+	health.RegisterConsulHealthCheck(routerService)
68
+
69
+	//启动服务
70
+	webServcie.Run()
71
+
72
+	//启用运行日志
73
+	container.Create(ctr, logger.InitRuntimeLogger)
74
+
75
+	//注册到注册中心
76
+	container.Create(ctr, consul.Register)
77
+	//等待关闭
78
+	webServcie.WaitForServiceShutdown(ctr)
79
+}
80
+
81
+func registerDefaultRouter(ws *router.RouterService, mongoDBFactory *mongodb.MongoDBFactory) {
82
+	// // GET示例:路径参数绑定
83
+	// ws.GET("/api/users/{id}",
84
+	// 	func(id string, reqCtx *ctx.RequestContext) (UserResponse, error) {
85
+
86
+	// 		log.Print("ctx TenantID:", reqCtx.TenantID)
87
+	// 		// id 自动从路径绑定
88
+	// 		// 注意:webx版本没有自动注入dbFactory
89
+	// 		return getUser(id, dbFactory) // 需要修改getUser函数以获取dbFactory
90
+	// 	},
91
+	// ).Use(middleware.JWTAuthMiddleware).Register()
92
+
93
+	ws.POST("/api/tenant/config",
94
+		func(req model.TenantConfig, reqCtx *ctx.RequestContext) (*response.QueryResult[interface{}], error) {
95
+
96
+			return service.SaveTenantConfig(req, mongoDBFactory, reqCtx)
97
+		},
98
+	).Use(middleware.JWTAuthMiddleware).Register()
99
+
100
+	ws.POST("/api/etl/config",
101
+		func(req model.ETLConfig, reqCtx *ctx.RequestContext) (*response.QueryResult[interface{}], error) {
102
+
103
+			return service.SaveETLConfig(req, mongoDBFactory, reqCtx)
104
+		},
105
+	).Use(middleware.JWTAuthMiddleware).Register()
106
+
107
+}
108
+
109
+// getSQLWithPagination 生成带分页的SQL语句(参数模式)
110
+// 返回SQL语句和参数映射
111
+func GetSQLWithPaginationSQL(startRow, endRow int) (string, []interface{}) {
112
+	sql := `SELECT
113
+    CLOTHING_ID,
114
+    CLOTHING_YEAR,
115
+    CLOTHING_NAME
116
+
117
+   FROM (
118
+    SELECT a.*, ROWNUM as rn
119
+    FROM (
120
+        SELECT *
121
+        FROM X6_STOCK_DEV.A3_CLOTHING 
122
+     
123
+        ORDER BY CLOTHING_ID
124
+    ) a
125
+    WHERE ROWNUM <= :1
126
+)
127
+WHERE rn > :2`
128
+
129
+	// 创建参数映射
130
+	params := []interface{}{
131
+		endRow,
132
+		startRow - 1, // WHERE rn > :start_row 所以是startRow-1
133
+	}
134
+
135
+	return sql, params
136
+}

+ 76
- 0
test/my_ETL_test.go Näytä tiedosto

@@ -0,0 +1,76 @@
1
+package test
2
+
3
+import (
4
+	"bytes"
5
+	"encoding/json"
6
+	"fmt"
7
+	"io"
8
+	"net/http"
9
+	"testing"
10
+
11
+	"git.x2erp.com/qdy/go-base/config"
12
+	"git.x2erp.com/qdy/go-base/ctx"
13
+	"git.x2erp.com/qdy/go-svc-core/internal/model"
14
+)
15
+
16
+func TestETLConfigAPI_Simple(t *testing.T) {
17
+	fmt.Println("=== 简单POST测试 ===")
18
+
19
+	// 1. 创建测试数据(赋值)
20
+	etlConfig := model.NewETLConfig(ctx.GetContextTest(), config.AgentDBArchivesId, config.DorisDatabaseName, "a_sku")
21
+
22
+	sql := `SELECT CLOTHING_ID,CLOTHING_YEAR,CLOTHING_NAME FROM ( SELECT a.*, ROWNUM as rn FROM ( 
23
+		SELECT CLOTHING_ID,CLOTHING_YEAR,CLOTHING_NAME
24
+        FROM X6_STOCK_DEV.A3_CLOTHING 
25
+        ORDER BY CLOTHING_ID
26
+   		 ) a
27
+   		 WHERE ROWNUM <= :1
28
+	) WHERE rn > :2`
29
+
30
+	etlConfig.AgentFullQuerySQL = sql
31
+
32
+	fmt.Printf("测试数据: %v\n", etlConfig)
33
+
34
+	// 2. 转换为JSON
35
+	jsonData, err := json.Marshal(etlConfig)
36
+	if err != nil {
37
+		fmt.Printf("JSON转换错误: %v\n", err)
38
+		return
39
+	}
40
+
41
+	fmt.Printf("JSON数据: %s\n", string(jsonData))
42
+
43
+	// 3. 创建POST请求
44
+	url := "http://localhost:9010/api/etl/config" // 你的服务端口
45
+
46
+	// 创建请求
47
+	req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
48
+	if err != nil {
49
+		fmt.Printf("创建请求失败: %v\n", err)
50
+		return
51
+	}
52
+
53
+	// 设置请求头
54
+	req.Header.Set("Content-Type", "application/json")
55
+	req.Header.Set("Authorization", "Bearer 123") // 这里放你的真实token
56
+
57
+	// 创建HTTP客户端并发送请求
58
+	client := &http.Client{}
59
+	resp, err := client.Do(req)
60
+	if err != nil {
61
+		fmt.Printf("POST请求失败: %v\n", err)
62
+		return
63
+	}
64
+	defer resp.Body.Close()
65
+
66
+	// 4. 读取响应
67
+	body, err := io.ReadAll(resp.Body)
68
+	if err != nil {
69
+		fmt.Printf("读取响应失败: %v\n", err)
70
+		return
71
+	}
72
+
73
+	// 5. 打印结果
74
+	fmt.Printf("状态码: %d\n", resp.StatusCode)
75
+	fmt.Printf("响应: %s\n", string(body))
76
+}

+ 69
- 0
test/my_Tenant_test.go Näytä tiedosto

@@ -0,0 +1,69 @@
1
+package test
2
+
3
+import (
4
+	"bytes"
5
+	"encoding/json"
6
+	"fmt"
7
+	"io"
8
+	"net/http"
9
+	"testing"
10
+
11
+	"git.x2erp.com/qdy/go-svc-core/internal/model"
12
+)
13
+
14
+func TestTenantConfigAPI_Simple(t *testing.T) {
15
+	fmt.Println("=== 简单POST测试 ===")
16
+
17
+	// 1. 创建测试数据(赋值)
18
+	config := model.TenantConfig{
19
+		//ID:               "zhx-1",
20
+		AgentUrl:         "http://localhost:8090/api",
21
+		AgentConcurrency: 50,
22
+	}
23
+	config.ID = "zhx-2"
24
+
25
+	fmt.Printf("测试数据: %v\n", config)
26
+
27
+	// 2. 转换为JSON
28
+	jsonData, err := json.Marshal(config)
29
+	if err != nil {
30
+		fmt.Printf("JSON转换错误: %v\n", err)
31
+		return
32
+	}
33
+
34
+	fmt.Printf("JSON数据: %s\n", string(jsonData))
35
+
36
+	// 3. 创建POST请求
37
+	url := "http://localhost:9090/api/tenant/config" // 你的服务端口
38
+
39
+	// 创建请求
40
+	req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
41
+	if err != nil {
42
+		fmt.Printf("创建请求失败: %v\n", err)
43
+		return
44
+	}
45
+
46
+	// 设置请求头
47
+	req.Header.Set("Content-Type", "application/json")
48
+	req.Header.Set("Authorization", "Bearer aaa") // 这里放你的真实token
49
+
50
+	// 创建HTTP客户端并发送请求
51
+	client := &http.Client{}
52
+	resp, err := client.Do(req)
53
+	if err != nil {
54
+		fmt.Printf("POST请求失败: %v\n", err)
55
+		return
56
+	}
57
+	defer resp.Body.Close()
58
+
59
+	// 4. 读取响应
60
+	body, err := io.ReadAll(resp.Body)
61
+	if err != nil {
62
+		fmt.Printf("读取响应失败: %v\n", err)
63
+		return
64
+	}
65
+
66
+	// 5. 打印结果
67
+	fmt.Printf("状态码: %d\n", resp.StatusCode)
68
+	fmt.Printf("响应: %s\n", string(body))
69
+}

Loading…
Peruuta
Tallenna