wkyuer 4 달 전
부모
커밋
7155e035ff
8개의 변경된 파일663개의 추가작업 그리고 2개의 파일을 삭제
  1. 14 2
      go.mod
  2. 16 0
      go.sum
  3. 10 0
      run/orderFlush/config.yaml
  4. 274 0
      run/orderFlush/main.go
  5. 160 0
      run/orderFlush/other.go
  6. 43 0
      run/orderFlush/product/course.go
  7. 31 0
      run/orderFlush/product/dataexport.go
  8. 115 0
      run/orderFlush/product/vip.go

+ 14 - 2
go.mod

@@ -5,11 +5,14 @@ go 1.18
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240226084952-7e7b38ef8a66
 	github.com/PuerkitoBio/goquery v1.9.1
+	github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible
 	github.com/go-sql-driver/mysql v1.7.1
 	github.com/gogf/gf/contrib/drivers/clickhouse/v2 v2.6.3
 	github.com/gogf/gf/contrib/drivers/mysql/v2 v2.6.4
 	github.com/gogf/gf/v2 v2.6.4
+	github.com/google/uuid v1.3.0
 	github.com/mozillazg/go-pinyin v0.20.0
+	github.com/olivere/elastic/v7 v7.0.22
 	golang.org/x/net v0.21.0
 )
 
@@ -23,12 +26,14 @@ require (
 	github.com/fsnotify/fsnotify v1.7.0 // indirect
 	github.com/go-logr/logr v1.2.4 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
-	github.com/google/uuid v1.3.0 // indirect
+	github.com/go-stack/stack v1.8.0 // indirect
+	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.1 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
+	github.com/klauspost/compress v1.13.6 // indirect
 	github.com/kr/pretty v0.3.1 // indirect
 	github.com/magiconair/properties v1.8.6 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
@@ -37,17 +42,24 @@ require (
 	github.com/mattn/go-runewidth v0.0.15 // indirect
 	github.com/olekukonko/tablewriter v0.0.5 // indirect
 	github.com/olivere/elastic v6.2.37+incompatible // indirect
-	github.com/olivere/elastic/v7 v7.0.22 // indirect
 	github.com/paulmach/orb v0.7.1 // indirect
 	github.com/pierrec/lz4/v4 v4.1.14 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
 	github.com/rivo/uniseg v0.4.4 // indirect
 	github.com/shopspring/decimal v1.3.1 // indirect
+	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
+	github.com/xdg-go/scram v1.0.2 // indirect
+	github.com/xdg-go/stringprep v1.0.2 // indirect
+	github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
+	go.mongodb.org/mongo-driver v1.9.1 // indirect
 	go.opentelemetry.io/otel v1.14.0 // indirect
 	go.opentelemetry.io/otel/sdk v1.14.0 // indirect
 	go.opentelemetry.io/otel/trace v1.14.0 // indirect
+	golang.org/x/crypto v0.19.0 // indirect
+	golang.org/x/sync v0.1.0 // indirect
 	golang.org/x/sys v0.17.0 // indirect
 	golang.org/x/text v0.14.0 // indirect
+	golang.org/x/time v0.8.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect

+ 16 - 0
go.sum

@@ -19,6 +19,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible h1:8psS8a+wKfiLt1iVDX79F7Y6wUM49Lcha2FMXt4UM8g=
+github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
 github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
 github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
 github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
@@ -85,6 +87,7 @@ 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.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
 github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
+github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/gogf/gf/contrib/drivers/clickhouse/v2 v2.6.3 h1:N/j+fLdxaqJY4rvVzQdWjXczraUPJT+3TjMiFuKiSVo=
@@ -114,6 +117,7 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
 github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
 github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
 github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -158,6 +162,7 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
 github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -262,13 +267,18 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
+github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
 github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk=
 github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
+github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
 github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
+github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w=
 github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
+github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc=
 github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
 github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g=
+github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
 github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -278,6 +288,7 @@ github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQ
 go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
 go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
 go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY=
+go.mongodb.org/mongo-driver v1.9.1 h1:m078y9v7sBItkt1aaoe2YlvWEXcD263e1a4E1fBrJ1c=
 go.mongodb.org/mongo-driver v1.9.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY=
 go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
 go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk=
@@ -304,6 +315,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
 golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
 golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
+golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -351,6 +364,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -400,6 +414,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
+golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=

+ 10 - 0
run/orderFlush/config.yaml

@@ -0,0 +1,10 @@
+database:
+  default:
+    link: "mysql:jianyu:Topnet123@tcp(172.20.45.129:4000)/jianyu"
+    debug: true
+  jianyu2:
+    link: "mysql:jianyu:Topnet123@tcp(172.20.45.129:4000)/jianyu2"
+    debug: true
+  base:
+    link: "mysql:jianyu:Topnet123@tcp(172.20.45.129:4000)/base_service"
+    debug: false

+ 274 - 0
run/orderFlush/main.go

@@ -0,0 +1,274 @@
+package main
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"context"
+	_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/util/gconv"
+	"strings"
+	"workScript/run/orderFlush/product"
+)
+
+func main() {
+	//FlushReturnPlan(context.Background())
+	//FlushReturnTransfer(context.Background())
+	FlushSale(context.Background())
+}
+func FlushOrder(ctx context.Context) error {
+	res, err := g.DB().Query(ctx, "SELECT * FROM dataexport_order order by id asc")
+	if err != nil {
+		return err
+	}
+	var arr []g.Map
+	for i, m := range res.List() {
+		if i%1000 == 0 {
+			g.Log().Info(ctx, "FlushOrder 进度 %d/%d", i, res.Len())
+		}
+		var (
+			productType        = gconv.String(m["product_type"])
+			orderCode          = gconv.String(m["order_code"])
+			user_phone         = gconv.String(m["user_phone"])
+			user_id            = gconv.String(m["user_id"])
+			order_status       = gconv.Int(m["order_status"])
+			buy_subject        = gconv.Int(m["buy_subject"])
+			vip_type           = gconv.Int(m["vip_type"])
+			original_price     = gconv.Int(m["original_price"])
+			order_money        = gconv.Int(m["order_money"])
+			pay_money          = gconv.Int(m["pay_money"])
+			vip_starttime      = gconv.String(m["vip_starttime"])
+			vip_endtime        = gconv.String(m["vip_endtime"])
+			is_backstage_order = gconv.Int(m["is_backstage_order"])
+			filter             = gconv.String(m["filter"])
+			buy_count          = gconv.Int(m["buy_count"])
+		)
+		var (
+			newData = g.Map{
+				"order_code":        orderCode,
+				"product_type":      productType,
+				"phone":             user_phone,
+				"filter":            filter,
+				"user_id":           user_id,
+				"service_type":      vip_type,
+				"is_master":         1,
+				"service_starttime": vip_starttime,
+				"service_endtime":   vip_endtime,
+			}
+			product_code    string
+			newFilterMap    g.Map
+			is_service_open int
+			service_type    int
+		)
+
+		if is_backstage_order == 1 {
+			newData["original_price"] = order_money
+			newData["final_price"] = pay_money
+		} else {
+			newData["original_price"] = original_price
+			newData["final_price"] = order_money
+		}
+		if order_status == 1 {
+			is_service_open = 1
+			if vip_starttime != "" {
+				if strings.Index(vip_starttime, "2099") > -1 {
+					is_service_open = 0
+				}
+			}
+		}
+
+		switch productType {
+		case "VIP订阅":
+			newFilterMap, product_code, err = product.GetVipFilter(filter, buy_count, buy_subject)
+			if err != nil {
+				g.Log().Error(ctx, "格式化超级订阅订单%s 异常%v", orderCode, err.Error())
+			}
+			service_type = vip_type + 1
+		case "历史数据", "结构化数据":
+			var (
+				data_spec    = gconv.String(m["data_spec"])
+				download_url = gconv.String(m["download_url"])
+				filter_id    = gconv.String(m["filter_id"])
+				data_count   = gconv.Int(m["data_count"])
+			)
+			if productType == "历史数据" {
+				product_code = "lssj001"
+			} else {
+				product_code = "jghsj001"
+			}
+			newFilterMap, product_code, err = product.GetDataExportFilter(data_spec, filter_id, download_url, data_count, is_backstage_order)
+			if err != nil {
+				g.Log().Error(ctx, "格式化历史数据订单%s 异常%v", orderCode, err.Error())
+			}
+		case "剑鱼币":
+			product_code = "jyb001"
+			if filterMap := gconv.Map(filter); filterMap != nil && len(filterMap) > 0 {
+				newFilterMap = g.Map{
+					"num":    filterMap["score"],
+					"source": "pc",
+				}
+			}
+		case "数据流量包":
+			if filterMap := gconv.Map(filter); filterMap != nil && len(filterMap) > 0 {
+				pType := gconv.Int(filterMap["pType"])
+				product_code = common.If(pType == 1, "sjllb002", "sjllb001").(string)
+				newFilterMap = g.Map{
+					"num":   filterMap["pNum"],
+					"pType": pType,
+				}
+			}
+		case "省份订阅包":
+			service_type = vip_type + 1
+			product_code = "sfdyb001"
+			if filterMap := gconv.Map(filter); filterMap != nil && len(filterMap) > 0 {
+				var (
+					unit   = gconv.Int(filterMap["cycleunit"])
+					num    = gconv.Int(filterMap["num"])
+					OldNum = gconv.Int(filterMap["OldNum"])
+				)
+				newFilterMap = g.Map{
+					"buy_cycle":      1,
+					"buyerAreaCount": num - OldNum,
+					"finalAreaCount": num,
+					"buy_type": func() int {
+						switch unit { //1月 2季 3年
+						case 1:
+							return 2
+						case 2:
+							return 4
+						default:
+							return unit
+						}
+					}(), //购买周期 类型 1天 2月 3年 4季度
+				}
+			}
+		case "附件下载包":
+			product_code = "fjxzb001"
+			if filterMap := gconv.Map(filter); filterMap != nil && len(filterMap) > 0 {
+				num := gconv.Int(filterMap["num"])
+				newFilterMap = g.Map{
+					"num": num,
+				}
+			}
+		case "采购单位画像包":
+			product_code = "cgdwhxb001"
+			if filterMap := gconv.Map(filter); filterMap != nil && len(filterMap) > 0 {
+				num := gconv.Int(filterMap["num"])
+
+				newFilterMap = g.Map{
+					"num": num,
+				}
+			}
+		case "剑鱼文库会员":
+			service_type = vip_type + 1
+			product_code = "jywkhy001"
+			if filterMap := gconv.Map(filter); filterMap != nil && len(filterMap) > 0 {
+				cycleunit := gconv.Int(filterMap["cycleunit"])
+				cyclecount := gconv.Int(filterMap["cyclecount"])
+
+				newFilterMap = g.Map{
+					"buy_cycle": cyclecount,
+					"buy_type": func() int {
+						switch cycleunit { //(1:年 2:月 3:天 4:季)
+						case 1:
+							return 3
+						case 3:
+							return 1
+						default:
+							return cycleunit
+						}
+					}(),
+				}
+			}
+		case "企业中标分析报告下载包", "业主采购分析报告下载包", "市场分析定制报告下载包":
+			if filterMap := gconv.Map(filter); filterMap != nil && len(filterMap) > 0 {
+				switch gconv.Int(filterMap["pType"]) {
+				case 1:
+					product_code = "zbqyxzb001"
+				case 2:
+					product_code = "yzcgxzb001"
+				case 3:
+					product_code = "scfxxzb001"
+				}
+				newFilterMap = g.Map{
+					"num": filterMap["pNum"],
+				}
+			}
+		case "中标必听课", "数据报告", "招投标课程":
+			newFilterMap = gconv.Map(filter)
+		case "企业商机管理", "打赏", "数据文件", "3A信用认证", "ISO体系认证", "权益码", "课程分销", "标书制作", "线下课程培训":
+			if filterMap := gconv.Map(filter); filterMap != nil && len(filterMap) > 0 {
+				if productType == "企业商机管理" && is_backstage_order == 0 {
+					newFilterMap = filterMap
+				} else {
+					newFilterMap = g.Map{
+						"remark": filterMap["remark"],
+					}
+				}
+			}
+		case "广告":
+			if filterMap := gconv.Map(filter); filterMap != nil && len(filterMap) > 0 {
+				newFilterMap = g.Map{
+					"remark":   filterMap["remark"],
+					"adSource": filterMap["adSource"],
+				}
+			}
+		case "招标文件解读":
+			if filterMap := gconv.Map(filter); filterMap != nil && len(filterMap) > 0 {
+				newFilterMap = g.Map{
+					"count": filterMap["count"],
+				}
+			}
+		default:
+			newFilterMap = gconv.Map(filter)
+		}
+		if product_code == "" {
+			product_code = codeMapping[productType]
+		}
+		newData["filter"] = gconv.String(newFilterMap)
+		newData["product_code"] = product_code
+		newData["is_service_open"] = is_service_open
+		newData["service_type"] = service_type
+
+		arr = append(arr, newData)
+
+		if len(arr) > 500 {
+			SaveToDB(ctx, arr)
+			arr = []g.Map{}
+		}
+	}
+	if len(arr) > 0 {
+		SaveToDB(ctx, arr)
+	}
+	g.Log().Info(ctx, "FlushOrder 已完成")
+	return nil
+}
+
+var codeMapping = map[string]string{
+	"结构化数据":   "jghsj001",
+	"3A信用认证":  "3axyrz001",
+	"人脉管理":    "rmgl001",
+	"阳光采购":    "ygcg001",
+	"企业商机管理":  "qysjgl001",
+	"医械通":     "xyt001",
+	"物业数字化营销": "wyszhyx001",
+	"运营商专版":   "yyszb001",
+	"ISO体系认证": "iostxrz001",
+	"广告":      "gg001",
+	"打赏":      "ds001",
+	"数据文件":    "sjwn001",
+	"权益码":     "qym001",
+	"标书制作":    "bszz001",
+	"线下课程培训":  "xskcpx001",
+	"课程分销":    "kcfx001",
+	"中标必听课":   "zbbtk001",
+	"数据报告":    "sjbg001",
+}
+
+func SaveToDB(ctx context.Context, data []g.Map) error {
+	_, err := g.DB().Save(ctx, "jy_order_detail", data, 100)
+	if err != nil {
+		g.Log().Error(ctx, "批量插入异常 %s", err.Error())
+		return err
+	}
+	return nil
+}

+ 160 - 0
run/orderFlush/other.go

@@ -0,0 +1,160 @@
+package main
+
+import (
+	"context"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/util/gconv"
+)
+
+func FlushEntNicheOrderId(ctx context.Context) error {
+	res, err := g.DB().Query(ctx, "SELECT id,order_id FROM entniche_order")
+	if err != nil {
+		return err
+	}
+	for _, re := range res {
+		var (
+			id       = gconv.Int(re["id"])
+			order_id = gconv.Int(re["order_id"])
+		)
+		res, err := g.DB().GetOne(ctx, "SELECT o.id FROM dataexport_order d inner join jy_order_detail o on (d.order_code = o.order_code) WHERE d.id=?", order_id)
+		if err != nil {
+			g.Log().Error(ctx, "更新商机管理order异常,获取订单信息异常", id)
+			continue
+		}
+		orderDetailId := gconv.Int(res.Map()["id"])
+		if orderDetailId <= 0 {
+			g.Log().Error(ctx, "更新商机管理order异常,订单明细表异常", id)
+			continue
+		}
+		_, err = g.DB().Update(ctx, "entniche_order", g.Map{
+			"order_detail_id": orderDetailId,
+		}, "id=?", id)
+		if err != nil {
+			g.Log().Error(ctx, "更新商机管理order异常,订单明细表异常", id)
+		}
+	}
+	return nil
+}
+
+// FlushReturnPlan 回款计划
+func FlushReturnPlan(ctx context.Context) error {
+	res, err := g.DB().Query(ctx, "SELECT filter,order_code FROM dataexport_order WHERE `filter`  LIKE '%paybackList%'")
+	if err != nil {
+		return err
+	}
+	var insert []g.Map
+	for _, re := range res {
+		var (
+			filter     = gconv.Map(re["filter"])
+			orderCode  = gconv.String(re["order_code"])
+			paybackNum = gconv.Int(filter["paybackNum"])
+
+			paybackWorkDayNum = gconv.Int(filter["paybackWorkDayNum"])
+			paybackExpectDate = gconv.String(filter["paybackExpectDate"])
+			paybackList       = filter["paybackList"]
+		)
+		t := g.Map{
+			"order_code":  orderCode,
+			"state":       1,
+			"day_num":     paybackNum,
+			"create_time": "2025-05-01 00:00:00",
+		}
+		if paybackNum == 1 {
+			if paybackExpectDate != "" {
+				t["expect_time"] = paybackExpectDate
+			}
+			t["day_num"] = paybackWorkDayNum
+		} else {
+			t["plantList"] = paybackList
+		}
+		insert = append(insert, t)
+	}
+	r, err := g.DB("jianyu2").Insert(ctx, "return_money_plant", insert, 100)
+	if err != nil {
+		return err
+	}
+	num, _ := r.RowsAffected()
+	g.Log().Info(ctx, "共插入%d个回款计划数据", num)
+	return nil
+}
+
+// FlushReturnTransfer 对公转账
+func FlushReturnTransfer(ctx context.Context) error {
+	//res, err := g.DB().Query(ctx, "SELECT filter,order_code,course_status FROM dataexport_order WHERE `filter`  LIKE '%transferV%'")
+	res, err := g.DB().Query(ctx, "SELECT filter,order_code,course_status FROM dataexport_order WHERE course_status!=0")
+	if err != nil {
+		return err
+	}
+	var insert []g.Map
+	for _, re := range res {
+		var (
+			filter       = gconv.Map(re["filter"])
+			orderCode    = gconv.String(re["order_code"])
+			courseStatus = gconv.Int(re["course_status"])
+
+			transferV      = gconv.String(filter["transferV"])
+			transferVTime  = gconv.String(filter["transferVTime"])
+			originalAmount = filter["originalAmount"]
+		)
+		t := g.Map{
+			"order_code":   orderCode,
+			"state":        courseStatus,
+			"price":        originalAmount,
+			"voucher":      transferV,
+			"audit_person": "",
+		}
+		if transferVTime != "" {
+			t["create_time"] = transferVTime
+		}
+		insert = append(insert, t)
+
+	}
+	r, err := g.DB("jianyu2").Insert(ctx, "jy_order_transfer", insert, 100)
+	if err != nil {
+		return err
+	}
+	num, _ := r.RowsAffected()
+	g.Log().Info(ctx, "对公转账共插入%d个回款计划数据", num)
+	return nil
+}
+
+// FlushSale 业绩变更表刷新
+func FlushSale(ctx context.Context) error {
+	//查询管理后台id和entUserId关联关系
+	var t = map[int]int{}
+	res, err := g.DB().Query(ctx, `SELECT
+			e.id as adminId,
+			u.id as entUserId,
+			u.name as userName,
+			u.phone as phone
+		FROM
+			jianyu.entniche_user u
+			INNER JOIN cadmin.admin_user e
+			on
+			( u.phone = e.phone  ) 
+		WHERE
+			 u.ent_id = ?`, g.Cfg().MustGet(ctx, "powerEntId", 25917).Int64())
+	if err != nil {
+		return err
+	}
+	for _, m := range res.List() {
+		t[gconv.Int(m["adminId"])] = gconv.Int(m["entUserId"])
+	}
+
+	res2, err := g.DB("jianyu2").Query(ctx, "SELECT saler_Id,count(1) as total FROM order_sale_record group by saler_Id HAVING saler_Id!=-1")
+	if err != nil {
+		return err
+	}
+	for _, m := range res2.List() {
+		saler_Id := gconv.Int(m["saler_Id"])
+		if entUserId, ok := t[saler_Id]; ok && entUserId > 0 {
+			_, err := g.DB("jianyu2").Update(ctx, "order_sale_record", g.Map{
+				"ent_userId": entUserId,
+			}, "saler_Id=?", saler_Id)
+			if err != nil {
+				g.Log().Error(ctx, "更新业绩变更异常 %d %d", saler_Id, entUserId)
+			}
+		}
+	}
+	return nil
+}

+ 43 - 0
run/orderFlush/product/course.go

@@ -0,0 +1,43 @@
+package product
+
+import (
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/util/gconv"
+)
+
+func GetCourseFilter(filter string) (g.Map, string, error) {
+	if filterMap := gconv.Map(filter); filterMap != nil && len(filterMap) > 0 {
+		detail := map[string]interface{}{
+			"_id":          _id,
+			"s_fileUrl":    (*data)["s_fileUrl"],
+			"s_picUrl":     (*data)["s_picUrl"],
+			"s_courseDate": (*data)["s_courseDate"],
+			"l_endtime":    (*data)["l_endtime"],
+			"i_price":      price,
+			"phone":        order_phone,
+			"courseType":   "中标必听课",
+			"i_exist":      (*data)["i_exist"],
+			"i_num":        (*data)["i_num"],
+			"i_drawer":     (*data)["i_drawer"],
+			"s_name":       (*data)["s_name"],           //此处传课程展示的信息;比如课程名称 结束时间 图片之类的("_id"课程mgo库id),
+			"source":       qu.ObjToString(m["source"]), //订单来源
+		}
+		g.Map{
+			"_id":          filterMap["_id"],
+			"s_fileUrl":    filterMap["s_fileUrl"],
+			"s_picUrl":     filterMap["s_picUrl"],
+			"s_courseDate": filterMap["s_courseDate"],
+			"l_endtime":    filterMap["l_endtime"],
+			"i_price":      price,
+			"phone":        order_phone,
+			"courseType":   "中标必听课",
+			"i_exist":      filterMap["i_exist"],
+			"i_num":        filterMap["i_num"],
+			"i_drawer":     filterMap["i_drawer"],
+			"s_name":       filterMap["s_name"],         //此处传课程展示的信息;比如课程名称 结束时间 图片之类的("_id"课程mgo库id),
+			"source":       qu.ObjToString(m["source"]), //订单来源
+		}
+	}
+
+	return nil, "", nil
+}

+ 31 - 0
run/orderFlush/product/dataexport.go

@@ -0,0 +1,31 @@
+package product
+
+import "github.com/gogf/gf/v2/frame/g"
+
+func GetDataExportFilter(data_spec, filter_id, download_url string, data_count, is_backstage_order int) (g.Map, string, error) {
+	var (
+		pType        int
+		newFilterMap g.Map
+	)
+	switch data_spec {
+	case "标准字段包":
+		pType = 1
+	case "高级字段包":
+		pType = 2
+	case "自定义字段包":
+		pType = 3
+	}
+	if is_backstage_order == 1 {
+		newFilterMap = g.Map{
+			"pType": pType,
+			"pNum":  data_count,
+		}
+	} else {
+		newFilterMap = g.Map{
+			"searchId": filter_id,
+			"pType":    pType,
+			"fileUrl":  download_url,
+		}
+	}
+	return newFilterMap, "", nil
+}

+ 115 - 0
run/orderFlush/product/vip.go

@@ -0,0 +1,115 @@
+package product
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"fmt"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/util/gconv"
+)
+
+// 超级订阅时间单位转换
+// 原(1:年 2:月 3:天 4:季)
+// 目标: 1天 2月 3年 4季度
+func vipUnitConvert(u int) int {
+	if u == 1 {
+		return 3
+	}
+	if u == 3 {
+		return 1
+	}
+	return u
+}
+
+type (
+	//线上订单
+	VipSimpleMsg struct {
+		OldBuyset       *SubvipBuySet `json:"buyset"`                      //旧购买详情
+		NewBuyset       *SubvipBuySet `json:"newBuyset"`                   //新购买详情
+		Cyclecount      int           `json:"cyclecount"`                  //日期数量(订单详情展示使用)
+		Cycleunit       int           `json:"cycleunit"`                   //日期单位(订单详情展示使用)
+		GiveCycle       int           `json:"give_cycle,omitempty"`        //赠送周期
+		GiveType        int           `json:"give_type,omitempty"`         //赠送周期 类型 1天 2月
+		SellerGiveCycle int           `json:"seller_give_cycle,omitempty"` //赠送周期(销售创建订单赠送)
+		SellerGiveType  int           `json:"seller_give_type,omitempty"`  //赠送周期 类型 1天 2月(销售创建订单赠送)
+	}
+	SubvipBuySet struct {
+		Upgrade         int   `json:"upgrade"`         //是否是升级版;1是 其他不是
+		AreaCount       int   `json:"areacount"`       //-1 全国  >0 省份数量
+		NewCitys        []int `json:"newcitys"`        //城市数量(新)
+		BuyerclassCount int   `json:"buyerclasscount"` //行业数
+	}
+
+	//// 订单简单信息
+	//VipSimpleMsg struct {
+	//	Area                  *map[string]interface{}  `json:"area"`                    //选择地区
+	//	Industry              []string                 `json:"industry"`                //选择行业
+	//	Cyclecount            int                      `json:"cyclecount"`              //日期数量(订单详情展示使用)
+	//	Cycleunit             int                      `json:"cycleunit"`               //日期单位(订单详情展示使用)
+	//	Buyset                *SubvipBuySet            `json:"buyset"`                  //旧购买详情
+	//	NewBuyset             *SubvipBuySet            `json:"newBuyset"`               //新购买详情
+	//	SubscriptionAreaCount int                      `json:"subscription_area_count"` //新购买详情
+	//	UpgradeSubtotail      []map[string]interface{} `json:"upgradeSubtotail"`        //升级清单(订单详情计价清单展示使用)
+	//	OrderType             int                      `json:"ordertype"`               //1,3,5   类型 1:订单 2:续费 3:立即升级 4:下月升级 5:即将到期(可升降级续费)6:升级订单未生效再次升级
+	//	DisWord               string                   `json:"disWord"`                 //分销系统 口令
+	//	ContractStatus        int                      `json:"contractStatus"`          //合同状态
+	//	Source                string                   `json:"source"`                  //
+	//	Badge                 string                   `json:"badge"`                   //
+	//	Remark                string                   `json:"remark"`                  //备注字段
+	//	AuditType             string                   `json:"audit_Type"`              // 审核类型
+	//	PaybackNum            string                   `json:"paybackNum"`              // 回款次数
+	//	PaybackList           string                   `json:"paybackList"`             // 回款次数列表
+	//	PaybackWorkDayNum     int                      `json:"paybackWorkDayNum"`       // 回款所需工作日
+	//	PaybackExpectDate     string                   `json:"paybackExpectDate"`       // 回款预计时间
+	//	PaybackOpenServer     bool                     `json:"paybackOpenServer"`       // 回款后开通服务
+	//	ZeroOrderType         string                   `json:"zeroOrderType"`           // 回款后开通服务
+	//	OriginalAmount        int                      `json:"originalAmount"`          //原始金额
+	//	OriginalCommission    int                      `json:"originalCommission"`      //原始佣金
+	//	OriginalProcedures    int                      `json:"originalProcedures"`      //原始手续费
+	//	RecordPayType         string                   `json:"recordPayType"`
+	//}
+	//
+	//// 购买内容
+	//SubvipBuySet struct {
+	//	Upgrade         int   `json:"upgrade"`         //是否是升级版;1是 其他不是
+	//	AreaCount       int   `json:"areacount"`       //-1 全国  >0 省份数量
+	//	NewCitys        []int `json:"newcitys"`        //城市数量(新)
+	//	BuyerclassCount int   `json:"buyerclasscount"` //行业数
+	//}
+)
+
+func getVipProductCode(areaCount int) string {
+	if areaCount != -1 {
+		return fmt.Sprintf("cjdy%03d", areaCount)
+	}
+	return "cjdy016"
+}
+
+func GetVipFilter(filter string, buy_count, buy_subject int) (g.Map, string, error) {
+	var f VipSimpleMsg
+	if err := gconv.Struct(filter, &f); err != nil {
+		return nil, "", err
+	}
+	var (
+		t, c int
+	)
+	if f.SellerGiveType > 0 && f.SellerGiveCycle > 0 {
+		t, c = f.SellerGiveType, f.SellerGiveCycle
+	}
+	if f.GiveCycle > 0 && f.SellerGiveType > 0 {
+		t, c = f.SellerGiveType, f.GiveCycle
+	}
+	rData := g.Map{
+		"buyAccountCount":   f.NewBuyset.AreaCount - f.OldBuyset.AreaCount,
+		"buy_cycle":         f.Cyclecount,
+		"buy_type":          vipUnitConvert(f.Cycleunit), // 类型 1天 2月 3年 4季度
+		"finalAccountCount": 1,
+		"finalAreaCount":    f.NewBuyset.AreaCount,
+		"seller_give_type":  t,
+		"seller_give_cycle": c,
+	}
+
+	if buy_subject == 2 { //企业版
+		rData["buyAccountCount"] = common.If(buy_count > 0, buy_count, 1)
+	}
+	return rData, getVipProductCode(f.NewBuyset.AreaCount), nil
+}