Ver código fonte

同步组织架构

kobe6258 7 meses atrás
pai
commit
ee3e2926a1

+ 2 - 2
config/config.go

@@ -121,8 +121,8 @@ type HTFutures struct {
 	APIAuth           bool   `mapstructure:"api-auth" json:"api-auth" yaml:"api-auth" description:"海通SSO登录签名认证"`
 	PrivateKeyPemPath string `mapstructure:"private-key-pem-path" json:"private-key-pem-path" yaml:"private-key-pem-path" description:"私钥文件目录"`
 	SSOAuthHost       string `mapstructure:"sso-auth-host" json:"sso-auth-host" yaml:"sso-auth-host" description:"用户认证平台地址"`
-	//UserSyncAuthUserName  string `mapstructure:"user-sync-auth-user-name" json:"user-sync-auth-user-name" yaml:"user-sync-auth-user-name" description:"用户统一身份的鉴权username"`
-	//UserSyncAuthPwd       string `mapstructure:"user-sync-auth-pwd" json:"user-sync-auth-pwd" yaml:"user-sync-auth-pwd" description:"用户统一身份的鉴权password"`
+	OaDBDns           string `mapstructure:"oa-db-dns" json:"oa-db-dns" yaml:"oa-db-dns" description:"OA数据库连接地址"`
+	EnableTask        bool   `mapstructure:"enable-task" json:"enable-task" yaml:"enable-task" description:"启动任务"`
 	//UserKey               string `mapstructure:"user-key" json:"user-key" yaml:"user-key" description:"统一平台秘钥"`
 	//DefaultRoleId         int    `mapstructure:"default-role-id" json:"default-role-id" yaml:"default-role-id" description:"默认的角色id"`
 	//IndexSyncHost         string `mapstructure:"index-sync-host" json:"index-sync-host" yaml:"index-sync-host" description:"指标同步平台地址"`

+ 8 - 1
core/run_server.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_bridge/init_serve"
 	"eta/eta_bridge/rpc/sso"
 	_ "eta/eta_bridge/rpc/sso"
+	HTtask "eta/eta_bridge/task/htfutures"
 	"flag"
 	"fmt"
 	"google.golang.org/grpc"
@@ -27,7 +28,13 @@ func RunServe() {
 
 	// 初始化mysql数据库
 	init_serve.Mysql()
-
+	//初始化海通的相关逻辑
+	if global.CONFIG.HTFutures.OaDBDns != "" {
+		init_serve.DMDataBase()
+	}
+	if global.CONFIG.HTFutures.EnableTask {
+		HTtask.StartCronJob()
+	}
 	if global.CONFIG.OracleJY.Account != "" {
 		//初始化oracle
 		init_serve.OracleJy()

+ 1 - 0
global/global.go

@@ -22,6 +22,7 @@ var (
 	//Redis         *redis.Client //redis链接
 	OracleJy *sql.DB //嘉悦物产数据库连接
 
+	OaDbHT *gorm.DB
 	//Rc *cache.Cache //redis缓存
 	Rc utils.RedisClient //redis缓存
 	Re error             //redis错误

+ 17 - 10
go.mod

@@ -6,15 +6,16 @@ require (
 	github.com/astaxie/beego v1.12.3
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/fsnotify/fsnotify v1.7.0
-	github.com/gin-gonic/gin v1.9.1
+	github.com/gin-gonic/gin v1.10.0
 	github.com/go-mysql-org/go-mysql v1.7.0
 	github.com/go-playground/locales v0.14.1
 	github.com/go-playground/universal-translator v0.18.1
-	github.com/go-playground/validator/v10 v10.14.0
+	github.com/go-playground/validator/v10 v10.20.0
 	github.com/go-redis/redis/v8 v8.11.5
-	github.com/go-sql-driver/mysql v1.7.0
+	github.com/go-sql-driver/mysql v1.8.1
 	github.com/godror/godror v0.40.3
 	github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
+	github.com/jinzhu/gorm v1.9.16
 	github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
 	github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
 	github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63
@@ -31,16 +32,21 @@ require (
 )
 
 require (
+	filippo.io/edwards25519 v1.1.0 // indirect
 	github.com/BurntSushi/toml v0.3.1 // indirect
 	github.com/KyleBanks/depth v1.2.1 // indirect
 	github.com/PuerkitoBio/purell v1.1.1 // indirect
 	github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
+	github.com/beego/beego/v2 v2.3.1 // indirect
 	github.com/benbjohnson/clock v1.1.0 // indirect
-	github.com/bytedance/sonic v1.9.1 // indirect
+	github.com/bytedance/sonic v1.11.6 // indirect
+	github.com/bytedance/sonic/loader v0.1.1 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
 	github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
+	github.com/cloudwego/base64x v0.1.4 // indirect
+	github.com/cloudwego/iasm v0.2.0 // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
-	github.com/gabriel-vasile/mimetype v1.4.2 // indirect
+	github.com/gabriel-vasile/mimetype v1.4.3 // indirect
 	github.com/gin-contrib/sse v0.1.0 // indirect
 	github.com/go-logfmt/logfmt v0.6.0 // indirect
 	github.com/go-openapi/jsonpointer v0.19.5 // indirect
@@ -49,6 +55,7 @@ require (
 	github.com/go-openapi/swag v0.19.15 // indirect
 	github.com/goccy/go-json v0.10.2 // indirect
 	github.com/godror/knownpb v0.1.1 // indirect
+	github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db // indirect
 	github.com/google/uuid v1.6.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
@@ -56,12 +63,12 @@ require (
 	github.com/jonboulle/clockwork v0.4.0 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/klauspost/cpuid/v2 v2.2.4 // indirect
-	github.com/leodido/go-urn v1.2.4 // indirect
+	github.com/klauspost/cpuid/v2 v2.2.7 // indirect
+	github.com/leodido/go-urn v1.4.0 // indirect
 	github.com/lestrrat-go/strftime v1.0.6 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.6 // indirect
-	github.com/mattn/go-isatty v0.0.19 // indirect
+	github.com/mattn/go-isatty v0.0.20 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
@@ -81,11 +88,11 @@ require (
 	github.com/spf13/pflag v1.0.5 // indirect
 	github.com/subosito/gotenv v1.6.0 // indirect
 	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
-	github.com/ugorji/go/codec v1.2.11 // indirect
+	github.com/ugorji/go/codec v1.2.12 // indirect
 	go.uber.org/atomic v1.9.0 // indirect
 	go.uber.org/multierr v1.9.0 // indirect
 	go.uber.org/zap v1.21.0 // indirect
-	golang.org/x/arch v0.3.0 // indirect
+	golang.org/x/arch v0.8.0 // indirect
 	golang.org/x/crypto v0.26.0 // indirect
 	golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
 	golang.org/x/net v0.28.0 // indirect

+ 55 - 0
go.sum

@@ -1,8 +1,11 @@
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
 github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
 github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
+github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
 github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
 github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
@@ -13,8 +16,11 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
 github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
+github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
 github.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ=
 github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA=
+github.com/beego/beego/v2 v2.3.1 h1:7MUKMpJYzOXtCUsTEoXOxsDV/UcHw6CPbaWMlthVNsc=
+github.com/beego/beego/v2 v2.3.1/go.mod h1:5cqHsOHJIxkq44tBpRvtDe59GuVRVv/9/tyVDxd5ce4=
 github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ=
 github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU=
 github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
@@ -26,6 +32,10 @@ github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6
 github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
 github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
 github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
+github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
+github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
+github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=
+github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
 github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
@@ -34,6 +44,10 @@ github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F
 github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
 github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
+github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
+github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
+github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
+github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
 github.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d/go.mod h1:TWI8EKQMs5u5jLKW/tsb9VwauIrMIxQG1r5fMsswK5U=
 github.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c=
 github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs=
@@ -46,6 +60,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM=
+github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
@@ -53,6 +69,8 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cu
 github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
 github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI=
 github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
+github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
+github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
 github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
 github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
@@ -60,11 +78,15 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos
 github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
 github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
 github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
+github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
+github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
 github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw=
 github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
 github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
 github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
 github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
+github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
+github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
 github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
@@ -92,6 +114,8 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn
 github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
 github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js=
 github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
+github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8=
+github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
 github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
 github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
 github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
@@ -99,6 +123,8 @@ github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LB
 github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
 github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
+github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
+github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
 github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
@@ -107,6 +133,8 @@ github.com/godror/godror v0.40.3/go.mod h1:/ITLUvKT2lTItLwW/okueC5j0Ykn8LbPmVBy5
 github.com/godror/knownpb v0.1.1 h1:A4J7jdx7jWBhJm18NntafzSC//iZDHkDi1+juwQ5pTI=
 github.com/godror/knownpb v0.1.1/go.mod h1:4nRFbQo1dDuwKnblRXDxrfCFYeT4hjg3GjMqef58eRE=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
+github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -119,6 +147,7 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W
 github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
 github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -134,8 +163,11 @@ github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uG
 github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o=
+github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs=
 github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
 github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
 github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
 github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
 github.com/jmoiron/sqlx v1.3.3/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ=
@@ -151,6 +183,9 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
 github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
 github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
 github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
+github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
+github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
+github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -164,6 +199,8 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ=
 github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
 github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
+github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
+github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
 github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
 github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
 github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
@@ -171,8 +208,11 @@ github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECae
 github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ=
 github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
 github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
 github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
+github.com/lib/pq v1.10.5 h1:J+gdV2cUmX7ZqL2B0lFcW0m+egaHC2V3lpO8nWxyYiQ=
 github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
 github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
@@ -181,7 +221,11 @@ github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA
 github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
 github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
 github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
+github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
 github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
@@ -306,6 +350,8 @@ github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2
 github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
 github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
 github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
+github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
+github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
 github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
 github.com/ylywyn/jpush-api-go-client v0.0.0-20190906031852-8c4466c6e369/go.mod h1:Nv7wKD2/bCdKUFNKcJRa99a+1+aSLlCRJFriFYdjz/I=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -331,9 +377,13 @@ go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
 golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
 golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
 golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
+golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
+golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
@@ -350,12 +400,15 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
 golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
@@ -383,6 +436,7 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -482,4 +536,5 @@ modernc.org/sortutil v1.0.0/go.mod h1:1QO0q8IlIlmjBIwm6t/7sof874+xCfZouyqZMLIAtx
 modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
 modernc.org/strutil v1.1.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
 modernc.org/y v1.0.1/go.mod h1:Ho86I+LVHEI+LYXoUKlmOMAM1JTXOCfj8qi1T8PsClE=
+nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=

+ 50 - 0
init_serve/dm_database.go

@@ -0,0 +1,50 @@
+package init_serve
+
+import (
+	_ "dm"
+	dm "dmgorm2"
+	"eta/eta_bridge/global"
+	"fmt"
+	"gorm.io/gorm"
+	"gorm.io/gorm/logger"
+	"io"
+	"log"
+	"os"
+	"time"
+)
+
+type Product struct {
+	gorm.Model
+	Code  string
+	Price uint
+}
+
+func DMDataBase() {
+	mysqlConf := global.CONFIG.Mysql
+	if len(mysqlConf.List) <= 0 {
+		global.LOG.Error("mysql链接未配置")
+		panic(fmt.Errorf("mysql链接未配置"))
+	}
+
+	//开启日志
+	logWriter := io.MultiWriter(global.MYSQL_LOG) //binlog日志,记录到文件中去
+	if global.CONFIG.Mysql.Stdout {
+		logWriter = io.MultiWriter(global.MYSQL_LOG, os.Stdout)
+	}
+	newLogger := logger.New(log.New(logWriter, "\r\n", log.LstdFlags), logger.Config{
+		SlowThreshold:             200 * time.Millisecond, //慢sql :200ms
+		LogLevel:                  logger.Info,            //记录的日志类型,info代表所有信息都记录
+		IgnoreRecordNotFoundError: true,                   //是否忽略找不到数据错误信息(只是日志记录记录成err还是普通的输出的区别,并不影响业务代码中的:找不到数据行error)
+		Colorful:                  true,                   //是否颜色输出
+	})
+	htConfig := global.CONFIG.HTFutures
+	db, err := gorm.Open(dm.Open(htConfig.OaDBDns), &gorm.Config{
+		Logger: newLogger,
+	})
+	if err != nil {
+		global.LOG.Errorf("海通OA数据库 启动异常,数据库:", ";Err:", err)
+		panic(fmt.Errorf("海通OA数据库 启动异常,数据库:", "Err:%s", err))
+	}
+	global.OaDbHT = db
+	fmt.Println("ht oa database init end")
+}

+ 1 - 1
logic/xiangyu/auth.go

@@ -25,7 +25,7 @@ func LoginEta(code string) (resp response.LoginResp, err error, errMsg string) {
 	}
 
 	//// 获取eta用户信息
-	//adminInfo, err := eta.GetSysUserByOutId(tokenResp.Uid)
+	//adminInfo, err := wx_crm.GetSysUserByOutId(tokenResp.Uid)
 	//if err != nil {
 	//	return
 	//}

+ 24 - 0
models/ht/oa/hrm_department.go

@@ -0,0 +1,24 @@
+package oa
+
+import "eta/eta_bridge/global"
+
+type HrmDepartment struct {
+	ID              int    `grom:"column:id"`
+	DEPARTMENTNAME  string `grom:"column:subcompanyname"`
+	SUBCOMPANYID1   int    `grom:"column:companyid"`
+	SUPDEPID        int    `grom:"column:supsbucomiD"`
+	TLEVEL          int    `grom:"column:TLEVEL"`
+	SHOWORDEROFTREE int    `gorm:"column:SHOWORDEROFTREE"`
+}
+
+func (h *HrmDepartment) TableName() string {
+	return "ECOLOGY_TARGET.HRMDEPARTMENT"
+}
+func GetDepartMentList() (list []HrmDepartment, err error) {
+	err = global.OaDbHT.Select("ID,DEPARTMENTNAME,SUBCOMPANYID1,SUPDEPID,TLEVEL,SHOWORDEROFTREE").Where("CANCELED IS NULL").Find(&list).Error
+	if err != nil {
+		global.FILE_LOG.Error("获取子公司列表失败")
+	}
+
+	return
+}

+ 27 - 0
models/ht/oa/hrm_resource.go

@@ -0,0 +1,27 @@
+package oa
+
+import "eta/eta_bridge/global"
+
+type HrmResource struct {
+	ID            int    `gorm:"column:ID"`
+	LOGINID       string `gorm:"column:LOGINID"`
+	WORKCODE      string `gorm:"column:WORKCODE"`
+	LASTNAME      string `gorm:"column:LASTNAME"`
+	DEPARTMENTID  int    `gorm:"column:DEPARTMENTID"`
+	SUBCOMPANYID1 int    `gorm:"column:SUBCOMPANYID1"`
+	SECLEVEL      int    `gorm:"column:SECLEVEL"`
+	EMAIL         string `gorm:"column:EMAIL"`
+	MOBILE        string `gorm:"column:MOBILE"`
+}
+
+func (h *HrmResource) TableName() string {
+	return "ECOLOGY_TARGET.HRMRESOURCE"
+}
+func GetEmployeeList() (list []HrmResource, err error) {
+	err = global.OaDbHT.Select("ID,LOGINID,WORKCODE,LASTNAME,DEPARTMENTID,SUBCOMPANYID1,SECLEVEL,EMAIL,MOBILE").Where("STATUS = 0").Find(&list).Error
+	if err != nil {
+		global.FILE_LOG.Error("获取员工信息列表失败")
+	}
+
+	return
+}

+ 24 - 0
models/ht/oa/hrm_sub_company.go

@@ -0,0 +1,24 @@
+package oa
+
+import "eta/eta_bridge/global"
+
+type HrmSubCompany struct {
+	ID              int    `grom:"column:id"`
+	SUBCOMPANYNAME  string `grom:"column:subcompanyname"`
+	COMPANYID       int    `grom:"column:companyid"`
+	SUPSUBCOMID     int    `grom:"column:supsbucomiD"`
+	TLEVEL          int    `grom:"column:TLEVEL"`
+	SHOWORDEROFTREE int    `gorm:"column:SHOWORDEROFTREE"`
+}
+
+func (h *HrmSubCompany) TableName() string {
+	return "ECOLOGY_TARGET.HRMSUBCOMPANY"
+}
+func GetSubCompanyList() (list []HrmSubCompany, err error) {
+	err = global.OaDbHT.Select("id  ,subcompanyname ,companyid ,supsubcomid ,tlevel ,SHOWORDEROFTREE").Where("CANCELED IS NULL").Find(&list).Error
+	if err != nil {
+		global.FILE_LOG.Error("获取子公司列表失败")
+	}
+
+	return
+}

+ 47 - 0
models/ht/wx_crm/sys_department.go

@@ -0,0 +1,47 @@
+package wx_crm
+
+import (
+	"eta/eta_bridge/global"
+	"gorm.io/gorm/clause"
+)
+
+type DepartmentType string
+
+const (
+	SubCompany DepartmentType = "sub"
+	Department DepartmentType = "department"
+)
+
+type SysDepartment struct {
+	SysDepartmentId   int            `gorm:"primaryKey;column:sys_department_id;type:int(11);not null" json:"department_id"`
+	SysDepartmentName string         `gorm:"unique;column:sys_department_name;type:varchar(255);default:''" json:"department_name"` // 部门名称
+	OutId             int            `gorm:"column:out_id;type:int(11);not null" json:"out_id"`
+	Type              DepartmentType `gorm:"column:type;type:varchar(50);not null" json:"type"`
+	Sort              int            `gorm:"column:sort;type:int(10);not null;default:0" json:"sort"` // 排序
+	Level             int            `gorm:"column:level" json:"level"`                               // 外部id
+	ParentId          int            `gorm:"column:parent_id;type:int(11);not null" json:"parent_id"`
+}
+
+func (m *SysDepartment) TableName() string {
+	return "sys_department"
+}
+
+func BatchInsertOrUpdate(departments []SysDepartment) (err error) {
+	db := global.MYSQL["ht_crm"]
+	OnConflictFunc := clause.OnConflict{
+		Columns:   []clause.Column{{Name: "out_id"}, {Name: "type"}},
+		DoUpdates: clause.AssignmentColumns([]string{"sys_department_name", "level", "sort", "parent_id"}),
+	}
+	// 执行批量插入或更新操作
+	err = db.Clauses(OnConflictFunc).Create(&departments).Error
+	return
+}
+
+func GetDepartmentList() (list []SysDepartment, err error) {
+	db := global.MYSQL["ht_crm"]
+	err = db.Select("*").Find(&list).Error
+	if err != nil {
+		global.FILE_LOG.Error("获取CRM部门列表失败", err.Error())
+	}
+	return
+}

+ 45 - 0
models/ht/wx_crm/sys_user.go

@@ -0,0 +1,45 @@
+package wx_crm
+
+import (
+	"eta/eta_bridge/global"
+	"gorm.io/gorm/clause"
+	"time"
+)
+
+type SysUser struct {
+	SysUserId        int       `orm:"pk" description:"系统用户id"`
+	SysUserName      string    `description:"账号"`
+	SysRealName      string    `description:"姓名"`
+	Password         string    `description:"密码"`
+	Email            string    `description:"邮箱"`
+	Phone            string    `description:"手机号"`
+	AreaCode         string    `description:"手机区号"`
+	SysRoleId        int       `description:"角色id"`
+	SysRoleName      string    `description:"角色名称"`
+	SysDepartmentId  int       `description:"所属部门id"`
+	SysDepartmentId1 int       `description:"所属部门一级id"`
+	SysDepartmentId2 int       `description:"所属部门二级id"`
+	SysDepartmentId3 int       `description:"所属部门三级id"`
+	SysDepartmentId4 int       `description:"所属部门四级id"`
+	Province         string    `description:"省"`
+	City             string    `description:"市"`
+	PositionName     string    `description:"职位名称"`
+	PositionCode     int       `description:"职位编码"`
+	IsEnabled        bool      `description:"是否启用"`
+	CreateTime       time.Time `description:"创建时间"`
+	ModifyTime       time.Time `description:"更新时间"`
+}
+
+func (s *SysUser) TableName() string {
+	return "sys_user"
+}
+func BatchInsertOrUpdateUser(users []SysUser) (err error) {
+	db := global.MYSQL["ht_crm"]
+	OnConflictFunc := clause.OnConflict{
+		Columns:   []clause.Column{{Name: "sys_user_name"}},
+		DoUpdates: clause.AssignmentColumns([]string{"sys_real_name", "email", "phone", "position_name", "position_code", "sys_department_id", "sys_department_id1", "sys_department_id2", "sys_department_id3", "sys_department_id4"}),
+	}
+	// 执行批量插入或更新操作
+	err = db.Clauses(OnConflictFunc).Create(&users).Error
+	return
+}

+ 3 - 3
services/session.go

@@ -24,12 +24,12 @@ func CreateEtaSession(sysUser *eta.Admin) (login response.LoginResp, session *et
 	account := utils.MD5(sysUser.AdminName)
 	//// 获取用户未过期的session, 避免过于频繁生成token
 	//expired := time.Now().AddDate(0, 0, 1).Format(utils.FormatDateTime)
-	//session, _ = eta.GetUserUnexpiredSysSession(sysUser.AdminName, expired)
+	//session, _ = wx_crm.GetUserUnexpiredSysSession(sysUser.AdminName, expired)
 	//if session != nil && session.AccessToken != "" {
 	//	token = session.AccessToken
 	//} else {
 	//	token = utils.GenToken(account)
-	//	session = new(eta.SysSession)
+	//	session = new(wx_crm.SysSession)
 	//	session.UserName = sysUser.AdminName
 	//	session.SysUserId = sysUser.AdminId
 	//	session.ExpiredTime = time.Now().AddDate(0, 0, 90)
@@ -37,7 +37,7 @@ func CreateEtaSession(sysUser *eta.Admin) (login response.LoginResp, session *et
 	//	session.CreatedTime = time.Now()
 	//	session.LastUpdatedTime = time.Now()
 	//	session.AccessToken = token
-	//	if e := eta.AddSysSession(session); e != nil {
+	//	if e := wx_crm.AddSysSession(session); e != nil {
 	//		errMsg = "新增session失败, err: "
 	//		err = errors.New("新增session失败, err: " + e.Error())
 	//		return

+ 186 - 0
task/htfutures/sync_staff_task.go

@@ -0,0 +1,186 @@
+package HTtask
+
+import (
+	"errors"
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/models/ht/oa"
+	"eta/eta_bridge/models/ht/wx_crm"
+	"fmt"
+	"github.com/robfig/cron/v3"
+)
+
+func StartCronJob() {
+	// 创建一个新的 cron 实例
+	c := cron.New(cron.WithSeconds())
+	// 添加定时任务
+	_, err := c.AddFunc("*/5 * * * * *", func() {
+		syncCrmOAInfo()
+	})
+
+	if err != nil {
+		fmt.Println("添加定时任务失败:", err)
+		return
+	}
+
+	// 启动定时任务
+	c.Start()
+
+	// 在程序结束时停止定时任务
+	go func() {
+		<-make(chan struct{})
+		c.Stop()
+	}()
+}
+
+func SyncETA() {
+	//list, err := oa.GetSubCompanyList()
+	//if err != nil {
+	//	return
+	//}
+	//var SysDepartmentList []eta.SysDepartment
+	//for _, item := range list {
+	//	sysDepartment := eta.SysDepartment{
+	//		DepartmentName: item.Subcompanyname,
+	//		OutID:          item.Companyid,
+	//	}
+	//	SysDepartmentList = append(SysDepartmentList, sysDepartment)
+	//}
+}
+
+func syncCrmOAInfo() {
+	//先同步分公司列表
+	subCompanylist, err := oa.GetSubCompanyList()
+	if err != nil {
+		global.FILE_LOG.Error("获取海通OA子公司数据失败:", err.Error())
+	}
+	var sysSubCompanyList []wx_crm.SysDepartment
+	for _, item := range subCompanylist {
+		sysDepartment := wx_crm.SysDepartment{
+			SysDepartmentName: item.SUBCOMPANYNAME,
+			Sort:              item.SHOWORDEROFTREE,
+			Level:             item.TLEVEL,
+			OutId:             item.ID,
+			Type:              wx_crm.SubCompany,
+			ParentId:          item.SUPSUBCOMID,
+		}
+		sysSubCompanyList = append(sysSubCompanyList, sysDepartment)
+	}
+	err = wx_crm.BatchInsertOrUpdate(sysSubCompanyList)
+	if err != nil {
+		global.FILE_LOG.Error("同步海通OA子公司数据失败:", err.Error())
+		return
+	}
+	//同步部门信息
+	DepartmentList, err := oa.GetDepartMentList()
+	if err != nil {
+		global.FILE_LOG.Error("获取海通部门数据失败:", err.Error())
+	}
+	var sysDepartmentList []wx_crm.SysDepartment
+	for _, item := range DepartmentList {
+		sysDepartment := wx_crm.SysDepartment{
+			SysDepartmentName: item.DEPARTMENTNAME,
+			Sort:              item.SHOWORDEROFTREE,
+			Level:             item.TLEVEL,
+			OutId:             item.ID,
+			Type:              wx_crm.Department,
+			ParentId:          item.SUPDEPID,
+		}
+		if sysDepartment.Level == 2 && sysDepartment.ParentId == 0 {
+			sysDepartment.ParentId = item.SUBCOMPANYID1
+		}
+		sysDepartmentList = append(sysDepartmentList, sysDepartment)
+	}
+	err = wx_crm.BatchInsertOrUpdate(sysDepartmentList)
+	if err != nil {
+		global.FILE_LOG.Error("同步海通OA子公司数据失败:", err.Error())
+		return
+	}
+	//同步员工信息
+	staffList, err := oa.GetEmployeeList()
+	if err != nil {
+		global.FILE_LOG.Error("获取海通OA员工数据失败:", err.Error())
+	}
+	var Employee []wx_crm.SysUser
+	for _, item := range staffList {
+		idList, departmentErr := GetEmployeeDepartmentList(item.DEPARTMENTID)
+		if departmentErr != nil {
+			global.FILE_LOG.Error("获取员工部门组织架构失败:", departmentErr.Error(), "跳过同步员工", item.WORKCODE)
+			continue
+		}
+		fillSize := 4 - len(idList)
+		var departments []int
+		if fillSize > 0 {
+			for i := 0; i < fillSize; i++ {
+				departments = append(departments, 0)
+			}
+		}
+		sysUser := wx_crm.SysUser{
+			SysUserName:      item.LOGINID,
+			SysRealName:      item.LASTNAME,
+			Email:            item.EMAIL,
+			Phone:            item.MOBILE,
+			AreaCode:         "86",
+			SysRoleId:        63,
+			SysRoleName:      "普通用户",
+			SysDepartmentId:  item.DEPARTMENTID,
+			SysDepartmentId1: departments[3],
+			SysDepartmentId2: departments[2],
+			SysDepartmentId3: departments[1],
+			SysDepartmentId4: departments[0],
+			PositionCode:     item.SECLEVEL,
+			IsEnabled:        true,
+		}
+		Employee = append(Employee, sysUser)
+	}
+	err = wx_crm.BatchInsertOrUpdateUser(Employee)
+	if err != nil {
+		global.FILE_LOG.Error("同步海通OA员工数据失败:", err.Error())
+		return
+	}
+}
+
+func GetEmployeeDepartmentList(departmentId int) (departmentIdList []int, err error) {
+	departmentList, err := wx_crm.GetDepartmentList()
+	if err != nil {
+		global.FILE_LOG.Error("获取部门信息失败", err.Error())
+		return
+	}
+	var currentDepartment wx_crm.SysDepartment
+	found := false
+	for _, item := range departmentList {
+		if item.OutId == departmentId {
+			currentDepartment = item
+			found = true
+			break
+		}
+	}
+	if found {
+		departmentIdList = append(departmentIdList, currentDepartment.OutId)
+		subList := DepartmentList(currentDepartment.ParentId, departmentList, currentDepartment.Level-1)
+		departmentIdList = append(departmentIdList, subList...)
+	} else {
+		err = errors.New("当前部门id不存在")
+	}
+	return
+}
+
+func DepartmentList(departmentId int, departmentList []wx_crm.SysDepartment, level int) (departmentIdList []int) {
+	if level == 0 || departmentId == 0 {
+		return
+	}
+	for _, item := range departmentList {
+		if item.OutId == departmentId {
+			if level > 1 && item.Type == wx_crm.SubCompany {
+				continue
+			}
+			if level == 1 && item.Type == wx_crm.Department {
+				continue
+			}
+			departmentIdList = append(departmentIdList, item.OutId)
+			subSubDepartments := DepartmentList(item.ParentId, departmentList, item.Level-1)
+			departmentIdList = append(departmentIdList, subSubDepartments...)
+
+		}
+	}
+	return departmentIdList
+}

+ 2 - 2
utils/constants.go

@@ -98,5 +98,5 @@ const (
 	BusinessCodeRelease = "E2023080900" // 弘则ETA
 )
 
-const CACHE_MYSQL_MASTER_FILENAME = "eta:mysql:binlog:filename"
-const CACHE_MYSQL_MASTER_POSITION = "eta:mysql:binlog:position"
+const CACHE_MYSQL_MASTER_FILENAME = "wx_crm:mysql:binlog:filename"
+const CACHE_MYSQL_MASTER_POSITION = "wx_crm:mysql:binlog:position"