Sfoglia il codice sorgente

Merge branch 'feature/v4.8.83' of https://jygit.jydev.jianyu360.cn/qmx/jy into dev/v4.8.83_wmh

wenmenghao321 1 anno fa
parent
commit
fe1ddc99cb

+ 1 - 1
src/config.yaml

@@ -11,5 +11,5 @@ publicserviceKey: "publicservice.rpc"
 
 database:
   clickhouse:
-    link: "clickhouse:jianyu_appl:Cli3#fkh4ouSe@tcp(cc-2zelp3xmkmsrtjhgp.public.clickhouse.ads.aliyuncs.com:9000)/jyseo?dial_timeout=2000ms&max_execution_time=60"
+    link: "clickhouse:jianyu_appl:Cli3#fkh4ouSe@tcp(cc-2zelp3xmkmsrtjhgp.public.clickhouse.ads.aliyuncs.com:9000)/jyseo_test?dial_timeout=2000ms&max_execution_time=60"
     debug: true

+ 5 - 0
src/dataService.json

@@ -0,0 +1,5 @@
+{
+  "purchasingData": ["DR", "物业管理", "信息系统", "数字档案", "服务器", "工程监理", "无人机网络安全"],
+  "area": ["广东","河南","北京","江苏","湖北","山东","河北","四川","陕西"],
+  "industry": ["信息技术","服务采购","行政办公","弱电安防","建筑工程","水利水电","医疗卫生","交通工程","机械设备"]
+}

+ 13 - 3
src/go.mod

@@ -5,9 +5,9 @@ go 1.19
 require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88
 	app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4
-	app.yhyue.com/moapp/jypkg v1.1.2
+	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
+	app.yhyue.com/moapp/jypkg v1.1.3
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e
-	github.com/ClickHouse/clickhouse-go v1.5.4
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/bwmarrin/snowflake v0.3.0
 	github.com/fsnotify/fsnotify v1.7.0
@@ -33,7 +33,6 @@ require (
 	github.com/cenkalti/backoff/v4 v4.2.1 // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 	github.com/clbanning/mxj/v2 v2.7.0 // indirect
-	github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect
 	github.com/coreos/go-semver v0.3.1 // indirect
 	github.com/coreos/go-systemd/v22 v22.5.0 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
@@ -60,6 +59,7 @@ require (
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect
+	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/howeyc/fsnotify v0.9.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.1 // indirect
@@ -72,6 +72,7 @@ require (
 	github.com/mattn/go-isatty v0.0.20 // indirect
 	github.com/mattn/go-runewidth v0.0.15 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.4 // 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
 	github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
@@ -92,7 +93,14 @@ require (
 	github.com/prometheus/procfs v0.9.0 // indirect
 	github.com/rivo/uniseg v0.4.4 // indirect
 	github.com/shopspring/decimal v1.3.1 // indirect
+	github.com/sirupsen/logrus v1.8.3 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
+	github.com/spf13/afero v1.9.3 // indirect
+	github.com/spf13/cast v1.5.0 // indirect
+	github.com/spf13/jwalterweatherman v1.1.0 // indirect
+	github.com/spf13/pflag v1.0.5 // indirect
+	github.com/spf13/viper v1.15.0 // indirect
+	github.com/subosito/gotenv v1.4.2 // indirect
 	github.com/tealeg/xlsx v1.0.5 // indirect
 	github.com/thinxer/go-word2vec v0.0.0-20150917053916-5c19ec7379ed // indirect
 	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
@@ -133,6 +141,8 @@ require (
 	google.golang.org/protobuf v1.31.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
+	gopkg.in/ini.v1 v1.67.0 // indirect
+	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect

+ 77 - 6
src/go.sum

@@ -7,8 +7,10 @@ app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHu
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
 app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4 h1:qfqQL2GJV3N31DFMz6ZNHQk1NYJjk+Y7h1tZwmuzaaE=
 app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
-app.yhyue.com/moapp/jypkg v1.1.2 h1:R4fayhufbUpQ0QDDkCtIPZHC7J+GbDjkGKtzF4fzi0s=
-app.yhyue.com/moapp/jypkg v1.1.2/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
+app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
+app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
+app.yhyue.com/moapp/jypkg v1.1.3 h1:py1imaq0SQvoU77zKhUJp4CC9oOg2Cb+EAHfY9Ylek0=
+app.yhyue.com/moapp/jypkg v1.1.3/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
@@ -25,6 +27,7 @@ cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7h
 cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
 cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
 cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
 cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
 cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
 cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
@@ -35,6 +38,9 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV
 cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
 cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
 cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
+cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
+cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
+cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
 cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
 cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
 cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
@@ -52,6 +58,7 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
 cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
 cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
 cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
+cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 gitea.com/xorm/xorm v0.7.9/go.mod h1:XiVxrMMIhFkwSkh96BW7PACl7UhLtx2iJIHMdmjh5sQ=
 github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
@@ -67,7 +74,6 @@ github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0
 github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/ClickHouse/clickhouse-go v1.4.3/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
-github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0=
 github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
 github.com/ClickHouse/clickhouse-go/v2 v2.2.0 h1:dj00TDKY+xwuTJdbpspCSmTLFyWzRJerTHwaBxut1C0=
 github.com/ClickHouse/clickhouse-go/v2 v2.2.0/go.mod h1:8f2XZUi7XoeU+uPIytSi1cvx8fmJxi7vIgqpvYTF1+o=
@@ -114,7 +120,6 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
 github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA=
 github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
-github.com/bkaradzic/go-lz4 v1.0.0 h1:RXc4wYsyz985CkXXeX04y4VnZFGG8Rd43pRaHsOXAKk=
 github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4=
 github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw=
 github.com/bos-hieu/mongostore v0.0.2/go.mod h1:8AbbVmDEb0yqJsBrWxZIAZOxIfv/tsP8CDtdHduZHGg=
@@ -137,9 +142,9 @@ github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn
 github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
 github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
 github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
 github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
 github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
@@ -188,6 +193,7 @@ github.com/emicklei/proto v1.9.0/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
@@ -207,6 +213,7 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8
 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
 github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o=
 github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
+github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
@@ -378,6 +385,7 @@ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
 github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
+github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
@@ -385,6 +393,9 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf
 github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
 github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
 github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -396,6 +407,7 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
 github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
+github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
 github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
 github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
 github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
@@ -424,6 +436,8 @@ github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplb
 github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+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/howeyc/fsnotify v0.9.0 h1:0gtV5JmOKH4A8SsFxG2BczSeXWWPvcMT0euZt5gDAxY=
 github.com/howeyc/fsnotify v0.9.0/go.mod h1:41HzSPxBGeFRQKEEwgh49TRw/nKBsYZ2cF1OzPjSJsA=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
@@ -522,6 +536,7 @@ github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9
 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.2/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=
+github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
 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=
 github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
@@ -586,6 +601,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zk
 github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
 github.com/memcachier/mc v2.0.1+incompatible/go.mod h1:7bkvFE61leUBvXz+yxsOnGBQSZpBSPIMUQSmmSHvuXc=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/mkevac/debugcharts v0.0.0-20191222103121-ae1c48aa8615/go.mod h1:Ad7oeElCZqA1Ufj0U9/liOF4BtVepxRcTvr2ey7zTvM=
 github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -656,7 +673,6 @@ github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNc
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pierrec/lz4 v2.5.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
-github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM=
 github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
 github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc=
@@ -665,6 +681,7 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
@@ -739,6 +756,8 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
 github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/sirupsen/logrus v1.8.3 h1:DBBfY8eMYazKEJHb3JKpSPfpgd2mBCoNFlQx6C5fftU=
+github.com/sirupsen/logrus v1.8.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
 github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
 github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
 github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak=
@@ -747,12 +766,20 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO
 github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
 github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk=
+github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
+github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
+github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
 github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
+github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
 github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU=
+github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA=
 github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -773,6 +800,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
 github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
+github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
 github.com/tal-tech/go-zero v1.1.5/go.mod h1:LbN0C7/rbl2+LUWTSUYx5leXmgedeMWjt1jc3/8/zFA=
 github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
 github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
@@ -930,7 +959,9 @@ golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPh
 golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
 golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
 golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
+golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
 golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
 golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
@@ -956,6 +987,7 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl
 golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
 golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
 golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
@@ -965,6 +997,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
 golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1002,6 +1036,9 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R
 golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 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=
 golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
@@ -1019,6 +1056,10 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g=
@@ -1087,11 +1128,15 @@ golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/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=
+golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1109,6 +1154,7 @@ golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220429233432-b5fbb4746d32/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
@@ -1192,8 +1238,15 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
 golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
 golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
 golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
+golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
 golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
@@ -1221,6 +1274,9 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M
 google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
 google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
 google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
+google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
+google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
+google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -1262,7 +1318,14 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc
 google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
 google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
@@ -1283,7 +1346,11 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa
 google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
 google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
 google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
 google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
+google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
+google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
 google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
@@ -1332,6 +1399,10 @@ gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaD
 gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
+gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=

+ 9 - 9
src/index.yaml

@@ -10,11 +10,11 @@ topMenu:
       - name: 招标信用
         href: /list/stype/ZBYG.html
       - name: 采购意向
-        href:
+        href: /list/stype/CGYX.html
       - name: 企业直采
-        href:
+        href: /list/stype/QYZC.html
       - name: 政府采购
-        href:
+        href: /list/stype/ZFCG.html
   - title: 项目专区
     child:
       - name: 拟在建项目
@@ -68,7 +68,7 @@ topMenu:
       - name: 企业认证
         href: /swordfish/frontPage/enterpriseCertificatio/free/index
       - name: 展会报名
-        href: /exhibition/list/pc/index.html
+        href: /exhibition/list/pc/index.htmlSDq1d
       - name: 商务合作
         href:
       - name: 合作招募
@@ -78,12 +78,12 @@ topMenu:
   - title: 企业服务
     child:
       - name: 营销管理
-        href:
+        href: /front/entServerTransfer/yxgl
       - name: 医械通
-        href: http://clpages.cn/yxtsjgwyxy
+        href: /front/entServerTransfer/yxt
       - name: 客户管理
-        href:
+        href: /front/entServerTransfer/khgl
       - name: 年终报告
-        href:
+        href: /front/entServerTransfer/nzbg
       - name: 招标项目管理
-        href:
+        href: /front/entServerTransfer/tbxmgl

+ 8 - 0
src/jfw/config/config.go

@@ -29,6 +29,7 @@ var (
 	Middleground         *middleground.Middleground
 	HotWinnerConfig      HotConfig
 	HotBuyerConfig       HotConfig
+	ServiceArea          DataService
 	IpList               *ipmatch.WhiteIp
 	IpInitLock           sync.RWMutex //锁
 )
@@ -44,11 +45,18 @@ type entnichePcConf struct {
 	PrivateDataPhone string `json:"privateDataPhone"`
 }
 
+type DataService struct {
+	PurchasingData []string `json:"purchasingData"`
+	Area           []string `json:"area"`
+	Industry       []string `json:"industry"`
+}
+
 func init() {
 	g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("config.yaml")
 	util.ReadConfig(&Sysconfig)
 	util.ReadConfig("./export.json", &ExportConfig)
 	IpInit()
+	util.ReadConfig("./dataService.json", &ServiceArea)
 	//ClickhouseInit()
 	//log.Println("sysconfig:", Sysconfig)
 	WeixinConfig, _ = Sysconfig["wxJianyu"].(map[string]interface{})

+ 17 - 1
src/jfw/front/classificationTag.go

@@ -55,6 +55,22 @@ func RegionAndInformationAndTender() map[string]interface{} {
 	return data
 }
 
+func GetHotIndustry() []map[string][]map[string]interface{} {
+	if bytes, err := redis.GetBytes(RedisNameNew, "pcIndexHotIndustry"); err == nil && bytes != nil {
+		rData := []map[string][]map[string]interface{}{}
+		if err := json.Unmarshal(*bytes, &rData); err != nil {
+			log.Printf("[MANAGER-ERR]pcIndexHotIndustry  GetData Error %v \n", err)
+			return nil
+		}
+		return rData
+	}
+	keysMap := getkeysMap() //热门行业
+	if bytes, err := json.Marshal(keysMap); err == nil && bytes != nil {
+		_ = redis.PutBytes(RedisNameNew, "pcIndexHotIndustry", &bytes, 2*60*60)
+	}
+	return keysMap
+}
+
 // 最新更新的200中标企业
 func GetWinnerInfo() (data []*BuyerList) {
 	// 取缓存
@@ -461,7 +477,7 @@ func NewIndexbids(session *httpsession.Session, r *http.Request) []map[string]in
 		data.Count = total
 	*/
 	// p397 收回查看拟建权限
-	_, _, lists := bidsearch.GetPcBidSearchData("", "", "", "", "招标预告,招标公告,招标结果,招标信用信息", "", "", "", "", "", "", "", "", 1, false, nil, bidSearch_field_1, "", false, false, "", 10, "")
+	_, _, lists := bidsearch.GetPcBidSearchData("", "", "", "", "招标预告,招标公告,招标结果,招标信用信息", "", "", "", "", "", "", "", "", 1, false, nil, bidSearch_field_1, "", false, false, "", 8, "")
 	if lists != nil {
 		for _, v1 := range *lists {
 			v1["_id"] = encrypt.CommonEncodeArticle("content", v1["_id"].(string))

+ 9 - 1
src/jfw/front/dataExport.go

@@ -96,6 +96,15 @@ func (d *DataExport) ToSieve() error {
 }
 
 func (d *DataExport) SieveData() {
+	sessVal := d.Session().GetMultiple()
+	if util.ObjToString(sessVal["userId"]) == "" {
+		d.ServeJson(map[string]interface{}{
+			"error_code": -1,
+			"error_msg":  "请登录",
+		})
+		return
+	}
+
 	dataType := d.GetString("dataType")
 	publishtime := d.GetString("publishtime")
 	area := d.GetString("area")
@@ -257,7 +266,6 @@ func (d *DataExport) SieveData() {
 		"comeintime":  time.Now().Unix(),
 		"comeinfrom":  "exportPage",
 	}
-	sessVal := d.Session().GetMultiple()
 	if sessVal["s_m_openid"] != nil {
 		sieveCondition["s_openid"] = util.ObjToString(sessVal["s_m_openid"])
 	}

+ 231 - 0
src/jfw/front/dataServiceArea.go

@@ -0,0 +1,231 @@
+package front
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	elastic "app.yhyue.com/moapp/jybase/es"
+	"app.yhyue.com/moapp/jybase/redis"
+	"app.yhyue.com/moapp/jypkg/public"
+	"encoding/json"
+	"fmt"
+	"jy/src/jfw/config"
+	"strings"
+	"time"
+)
+
+type subzone struct {
+	industry, province string
+}
+
+var (
+	industryMap map[string][]string
+)
+
+type ServiceRes struct {
+	industry []industryRes
+}
+
+type industryRes struct {
+	name  string
+	areas []areaRes
+}
+type areaRes struct {
+	name string
+	data []map[string]interface{}
+}
+
+func init() {
+	IndustryInit()
+	BiddingTrendInit()
+}
+
+// HotIndustryAndRegion 热门行业/地区年度招标趋势
+func HomeBiddingTrends() ServiceRes {
+	var sRes ServiceRes
+	for _, industry := range config.ServiceArea.Industry {
+		var ind industryRes
+		ind.name = industry
+		for _, area := range config.ServiceArea.Area {
+			var aRes areaRes
+			aRes.name = area
+			redisData, _ := redis.Get(RedisNameNew, fmt.Sprintf("biddingTrend_%s_%s", industry, area)).([]interface{})
+			if redisData != nil && len(redisData) > 0 {
+				aRes.data = common.ObjArrToMapArr(redisData)
+			}
+			ind.areas = append(ind.areas, aRes)
+		}
+		sRes.industry = append(sRes.industry, ind)
+	}
+	return sRes
+}
+
+type marketBuckets struct {
+	ProjectCount struct {
+		DocCount int `json:"doc_count"`
+	} `json:"project_count"`
+}
+
+func getQuarter(st int64) int {
+	currentTime := time.Unix(st, 0)
+	// 获取当前月份
+	currentMonth := int(currentTime.Month())
+	// 获取当前月份所属的季度
+	return (currentMonth-1)/3 + 1
+}
+
+func BiddingTrend(st int64, et int64) {
+	currentQuarter := getQuarter(st)
+	for _, industry := range config.ServiceArea.Industry {
+		ds := subzone{
+			industry: industry,
+		}
+		for _, area := range config.ServiceArea.Area {
+			ds.province = area
+			res, _, _ := elastic.GetAggs("projectset", "projectset", GetCommonQuerySql(st, et, area, industry))
+			if res != nil {
+				thisRow := marketBuckets{}
+				for name, object := range res {
+					bArr, err := object.MarshalJSON()
+					if len(bArr) == 0 || err != nil {
+						break
+					}
+					if name == "project_count" {
+						_ = json.Unmarshal(bArr, &thisRow.ProjectCount)
+						quarterData := map[string]interface{}{
+							"name":  fmt.Sprintf("%d-第%d季度", time.Now().Year(), currentQuarter),
+							"count": thisRow.ProjectCount.DocCount,
+						}
+						var redisDataArr []map[string]interface{}
+						redisData, _ := redis.Get(RedisNameNew, fmt.Sprintf("biddingTrend_%s_%s", industry, area)).([]interface{})
+						if redisData != nil && len(redisData) > 0 {
+							redisDataArr = common.ObjArrToMapArr(redisData)
+							if len(redisDataArr) == 4 {
+								redisDataArr = append(redisDataArr[1:], quarterData)
+								redis.Put(RedisNameNew, fmt.Sprintf("biddingTrend_%s_%s", industry, area), redisDataArr, 24*3600*120)
+								continue
+							}
+						}
+						redisDataArr = append(redisDataArr, quarterData)
+						redis.Put(RedisNameNew, fmt.Sprintf("biddingTrend_%s_%s", industry, area), redisDataArr, 24*3600*120)
+					}
+				}
+			}
+		}
+	}
+}
+
+func IndustryInit() {
+	industryMap = make(map[string][]string)
+	for _, industry := range config.ServiceArea.Industry {
+		industryData := public.BaseMysql.SelectBySql(fmt.Sprintf(`SELECT CONCAT(b.name, '_', a.name) as name
+FROM global_common_data.code_bidscope a
+LEFT JOIN (
+    SELECT code, name
+    FROM global_common_data.code_bidscope
+    WHERE name = '%s'
+) b ON a.pcode = b.code
+WHERE b.code IS NOT NULL;`, industry))
+		var names []string
+		for _, v := range *industryData {
+			names = append(names, common.InterfaceToStr(v["name"]))
+
+		}
+		industryMap[industry] = names
+	}
+
+}
+
+func BiddingTrendInit() {
+	for _, industry := range config.ServiceArea.Industry {
+		ds := subzone{
+			industry: industry,
+		}
+		for _, area := range config.ServiceArea.Area {
+			ds.province = area
+			ok, err := redis.Exists(RedisNameNew, fmt.Sprintf("biddingTrend_%s_%s", industry, area))
+			if ok && err == nil {
+				continue
+			}
+			eQuarter := Quarter()
+			sQuarter := eQuarter.AddDate(-1, 0, 0)
+			var redisDataArr []map[string]interface{}
+			for sQuarter.Before(eQuarter) {
+				currentQuarter := getQuarter(sQuarter.Unix())
+				res, _, _ := elastic.GetAggs("projectset", "projectset", GetCommonQuerySql(sQuarter.Unix(), sQuarter.AddDate(0, 3, 0).Unix(), area, industry))
+				if res != nil {
+					thisRow := marketBuckets{}
+					for name, object := range res {
+						bArr, err := object.MarshalJSON()
+						if len(bArr) == 0 || err != nil {
+							break
+						}
+						if name == "project_count" {
+							_ = json.Unmarshal(bArr, &thisRow.ProjectCount)
+							quarterData := map[string]interface{}{
+								"name":  fmt.Sprintf("%d-第%d季度", sQuarter.Year(), currentQuarter),
+								"count": thisRow.ProjectCount.DocCount,
+							}
+							redisDataArr = append(redisDataArr, quarterData)
+						}
+					}
+				}
+				sQuarter = sQuarter.AddDate(0, 3, 0)
+			}
+			redis.Put(RedisNameNew, fmt.Sprintf("biddingTrend_%s_%s", industry, area), redisDataArr, 24*3600*120)
+		}
+	}
+}
+
+func Quarter() time.Time {
+	currentTime := time.Now()
+
+	// 获取当前季度
+	currentQuarter := (currentTime.Month()-1)/3 + 1
+
+	// 计算当前季度的开始时间
+	startMonth := (currentQuarter-1)*3 + 1
+	quarterStart := time.Date(currentTime.Year(), startMonth, 1, 0, 0, 0, 0, currentTime.Location())
+	return quarterStart
+}
+
+const (
+	PSearch_DecMust = `"bidstatus": ["中标","成交","合同","单一"]`
+	query_bool_must = `{"terms": {%s}}`
+)
+
+// GetCommonQuerySql 公共筛选
+func GetCommonQuerySql(st, et int64, area, industry string) string {
+	var musts, bools []string
+	//时间
+	musts = append(musts, fmt.Sprintf(`{"range":{"jgtime":{"gte":%d,"lte":%d}}}`, st, et))
+	//地区
+	if area != "" {
+		musts = append(musts, fmt.Sprintf(`{"terms":{"area":["%s"]}}`, area))
+	}
+	//行业
+	if len(industryMap[industry]) > 0 {
+		musts = append(musts, fmt.Sprintf(`{"terms":{"subscopeclass":["%s"]}}`, strings.Join(industryMap[industry], `","`)))
+	}
+
+	//分析报告中标状态限制
+	musts = append(musts, fmt.Sprintf(query_bool_must, PSearch_DecMust))
+	aa := fmt.Sprintf(`{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match": %d}},"aggs":{"project_count": {"filter": {"match_all":{}}}},"size":0}`, strings.Join(musts, ","), strings.Join(bools, ","), common.If(len(bools) > 0, 1, 0).(int))
+	fmt.Println(aa)
+	return fmt.Sprintf(`{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match": %d}},"aggs":{"project_count": {"filter": {"match_all":{}}}},"size":0}`, strings.Join(musts, ","), strings.Join(bools, ","), common.If(len(bools) > 0, 1, 0).(int))
+}
+
+func PurchasingData() []string {
+	redisData, _ := redis.Get(RedisNameNew, "hotPurchasingData").([]interface{})
+	if len(redisData) > 0 {
+		return common.ObjArrToStringArr(redisData)
+	}
+	var keyWords []string
+	data := public.BaseMysql.SelectBySql("SELECT keyword FROM data_supermarket GROUP BY keyword")
+	if data != nil && len(*data) > 0 {
+		for _, m := range *data {
+			keyWords = append(keyWords, common.InterfaceToStr(m["keyword"]))
+		}
+		redis.Put(RedisNameNew, "hotPurchasingData", keyWords, 24*3600)
+	}
+
+	return keyWords
+}

+ 201 - 1
src/jfw/front/index.go

@@ -1,23 +1,223 @@
 package front
 
 import (
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jybase/redis"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/bidsearch"
+	"app.yhyue.com/moapp/jypkg/public"
 	"context"
+	"fmt"
 	"github.com/gogf/gf/v2/frame/g"
+	"jy/src/jfw/config"
+	"jy/src/jfw/jyutil"
+	"jy/src/jfw/site/jySchool"
+	"math/rand"
+	"time"
 )
 
 type NewIndex struct {
 	*xweb.Action
-	newIndex xweb.Mapper `xweb:"/"` //首页改版
+	newIndex          xweb.Mapper `xweb:"/"`                             //首页改版
+	entServerTransfer xweb.Mapper `xweb:"/front/entServerTransfer/(.*)"` //企业服务中转
 }
 
+var entServerTransferMap map[string]map[bool]string
+
 func init() {
 	xweb.AddAction(&NewIndex{})
+	entServerTransferMap = map[string]map[bool]string{
+		"yxgl": map[bool]string{ //【营销管理】根据code判断是否有权限 bi_yx
+			true:  fmt.Sprintf("/page_workDesktop/work-bench/page?link=%s/succbi/crm_system/app/crm.app/sales_clues.spg", config.Sysconfig["webdomain"].(string)),
+			false: "",
+		},
+		"yxt": map[bool]string{ //【医械通】根据code判断是否有权限  lyh_yl_yldy
+			true:  "/page_workDesktop/work-bench/app/big/medical/Credentials",
+			false: "http://clpages.cn/yxtsjgwyxy",
+		},
+		"khgl": map[bool]string{ //【客户管理】根据code判断是否有权限 bi_yx
+			true:  fmt.Sprintf("/page_workDesktop/work-bench/page?link=%s/succbi/crm_system/app/crm.app/sales_clues.spg", config.Sysconfig["webdomain"].(string)),
+			false: "",
+		},
+		"tbxmgl": map[bool]string{ //【投标项目管理】根据code判断是否有权限 cb_zy_code
+			true:  "/big/attend_bidding/mine",
+			false: "",
+		},
+		"nzbg": map[bool]string{ //【年终报告】根据code判断是否有权限
+			true:  fmt.Sprintf("/page_workDesktop/work-bench/page?link=%s/succbi/nzbg/app/nzbg.app/nzbg_entrance_pc.spg", config.Sysconfig["webdomain"].(string)),
+			false: "",
+		},
+	}
 }
 
 // NewIndex 新版首页改版
 func (nIndex *NewIndex) NewIndex() error {
+	//招标公告
+	nIndex.T["newbids"] = map[string]interface{}{
+		"biddingList": NewIndexbids(nIndex.Session(), nIndex.Request),
+		"more":        fmt.Sprintf("%s%s", config.Sysconfig["webdomain"].(string), "/list/stype/ZBGG.html"),
+	}
+	//推荐标讯专区
+	rangeInfoType := []int{1, 2, 3, 4}
+	//recommendBid
+	for _, v := range rangeInfoType { //1招标预告 2 中标成交 3采购意向 4 拟建项目
+		nIndex.T[fmt.Sprintf("recommendBid_%d", v)] = GetRecommendBidZone(v, 8)
+	}
+	//项目分包
+
+	//项目专区
+
+	//热门行业
+	nIndex.T["hotIndustry"] = GetHotIndustry()
+	//热门中标企业
+	nIndex.T["hotWinner"] = NewHotEnt(true)
+	//热门采购单位
+	nIndex.T["hotBuyers"] = NewHotEnt(false)
+	//供应商
+	nIndex.T["supplyEnt"] = GetBidInfoPublishEnt()
+	//招投标攻略
+	nIndex.T["strategyList"] = GetStrategyList()
+	//剑鱼课堂
+	nIndex.T["jySchool"] = jyutil.Course(6, 3)
 	//顶部菜单
 	nIndex.T["topMenu"] = g.Cfg("index").MustGet(context.Background(), "topMenu").Maps()
 	return nIndex.Render("/pc/newIndex.html", &nIndex.T)
 }
+
+func (nIndex *NewIndex) EntServerTransfer(code string) {
+	toUrl := func() string {
+		sessVal := nIndex.Session().GetMultiple()
+		accountId := common.Int64All(sessVal["accountId"])
+		if accountId <= 0 { //未登录
+			return entServerTransferMap[code][false]
+		}
+		if code == "nzbg" {
+			return entServerTransferMap[code][true]
+		}
+		entAccountId := common.Int64All(sessVal["entAccountId"])
+		entId := common.Int64All(sessVal["entId"])
+		entUserId := common.Int64All(sessVal["entUserId"])
+		res := config.Middleground.ResourceCenter.Haspowers(accountId, entAccountId, entId, entUserId)
+		powerPass := false
+		switch code {
+		case "yxgl", "khgl":
+			for _, pCode := range res.Powers {
+				if pCode == "bi_yx" {
+					powerPass = true
+					break
+				}
+			}
+		case "yxt":
+			for _, pCode := range res.Powers {
+				if pCode == "lyh_yl_yldy" {
+					powerPass = true
+					break
+				}
+			}
+		case "tbxmgl":
+			for _, pCode := range res.Powers {
+				if pCode == "cb_zy_code" {
+					powerPass = true
+					break
+				}
+			}
+		}
+		return entServerTransferMap[code][powerPass]
+	}()
+	_ = nIndex.Redirect(toUrl)
+}
+
+// 推荐标讯专区
+func GetRecommendBidZone(typ int, pageSize int) (list []map[string]interface{}) {
+	if typ == 0 {
+		typ = 1
+	}
+	rediskey := fmt.Sprintf("pcindex_RecommendBidZone_%d", typ)
+	subtype := ""
+	switch typ {
+	case 1:
+		//招标预告
+		subtype = "预告"
+	case 2:
+		//招标中标成交
+		subtype = "中标,成交"
+	case 3:
+		//采购意向
+		subtype = "采购意向"
+	case 4:
+		//项目分包
+		subtype = "拟建"
+	}
+	if l, ok := redis.Get("newother", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
+		list = common.ObjArrToMapArr(l)
+	} else {
+		_, _, lists := bidsearch.GetPcBidSearchData("", "", "", "", subtype, "", "", "", "", "", "", "", "", 1, false, nil, bidSearch_field_1, "", false, false, "", pageSize, "")
+		if lists != nil && len(*lists) > 5 {
+			*lists = (*lists)[0:8]
+			for _, v := range *lists {
+				// v["_id"] = EncodeArticleId2ByCheck(v["_id"].(string))
+				v["_id"] = encrypt.CommonEncodeArticle("indexcontent", v["_id"].(string))
+				delete(v, "toptype")
+				delete(v, "s_subscopeclass")
+				tmpdate := v["publishtime"]
+				v["publishtime"] = time.Unix(common.Int64All(tmpdate.(float64)), 0).Format("2006-01-02")
+				if v["budget"] != nil {
+					v["budget"] = ConversionMoeny(v["budget"])
+				} else if v["bidamount"] != nil {
+					v["budget"] = ConversionMoeny(v["bidamount"])
+				}
+			}
+
+			list = *lists
+			redis.Put("other", rediskey, list, 2*60*60)
+		}
+	}
+	return list
+}
+
+// GetStrategyList 招投标攻略
+func GetStrategyList() (strategyList []map[string]interface{}) {
+	if l, ok := redis.Get("newother", "pcIndexStrategyList").([]interface{}); ok && l != nil && len(l) > 0 {
+		strategyList = common.ObjArrToMapArr(l)
+	} else {
+		for _, item := range jySchool.GuidelineColumn().SeedData {
+			if res := jySchool.Guideline(item.Code, 15); res != nil && len(*res) > 0 {
+				strategyList = append(strategyList, map[string]interface{}{
+					"name": item.Name,
+					"code": item.Code,
+					"list": res,
+				})
+			}
+		}
+	}
+	return strategyList
+}
+
+func GetIndexProjectList(typ int) []map[string]interface{} {
+
+	/*res, err := g.DB().GetOne(ctx, fmt.Sprintf(`SELECT col.bid_id FROM jyseo.%s col   WHERE col.seo_id = '%s'`, consts.TableName, seoId))
+	  if err != nil || res.IsEmpty() {
+	  	return nil
+	  }*/
+	return nil
+}
+
+// 优秀供应商
+func GetBidInfoPublishEnt() (res []map[string]interface{}) {
+	if l, ok := redis.Get("newother", "pcIndexBidInfoPublishEnt").([]interface{}); ok && l != nil && len(l) > 0 {
+		res = common.ObjArrToMapArr(l)
+	} else {
+		data := public.Mysql.Find("entniche_info", map[string]interface{}{"auth_status": 1}, "id,name", "auth_time DESC", -1, -1)
+		if data != nil && len(*data) > 0 {
+			if len(*data) > 60 {
+				r := rand.Intn(len(*data) - 60)
+				res = (*data)[r : r+60]
+			} else {
+				res = *data
+			}
+			redis.Put("newother", "pcIndexBidInfoPublishEnt", res, 3600*24*7)
+		}
+	}
+	return res
+}

+ 58 - 142
src/jfw/front/nzjProject.go

@@ -11,11 +11,11 @@ import (
 	"app.yhyue.com/moapp/jypkg/public"
 	"encoding/json"
 	"fmt"
-	"github.com/mozillazg/go-pinyin"
 	"jy/src/jfw/config"
 	"math/rand"
 	"sort"
 	"strings"
+	"sync"
 	"time"
 )
 
@@ -403,8 +403,8 @@ func NewHotEnt(isWinner bool) (data []map[string]interface{}) {
 				}
 				for _, v := range *portraitRecord {
 					if winnerMap[common.InterfaceToStr(v["ent_Id"])] != nil {
-						v["ent_Id"] = encrypt.EncodeArticleId2ByCheck(common.InterfaceToStr(v["ent_Id"]))
 						v["ent_name"] = winnerMap[common.InterfaceToStr(v["ent_Id"])]
+						v["ent_Id"] = encrypt.EncodeArticleId2ByCheck(common.InterfaceToStr(v["ent_Id"]))
 					}
 				}
 			}
@@ -459,6 +459,7 @@ func NewHotEnt(isWinner bool) (data []map[string]interface{}) {
 					v["city"] = vs["city"]
 					v["buyerclass"] = vs["buyerclass"]
 				}
+				fmt.Println("buyer", common.InterfaceToStr(v["ent_Id"]))
 				v["count"] = buyerCountMap[common.InterfaceToStr(v["ent_Id"])]
 			}
 		}
@@ -473,154 +474,69 @@ func NewHotEnt(isWinner bool) (data []map[string]interface{}) {
 	return
 }
 
-// "last_years_count", "last_one_years_count", "last_two_years_count", "last_three_years_count"
-type Aggregations struct {
-	TopCities struct {
-		Buckets []struct {
-			Key            string `json:"key"`
-			LastYearsCount struct {
-				DocCount int `json:"doc_count"`
-			} `json:"last_years_count"`
-			LastOneYearCount struct {
-				DocCount int `json:"doc_count"`
-			} `json:"last_one_years_count"`
-			LastTwoYearsCount struct {
-				DocCount int `json:"doc_count"`
-			} `json:"last_two_years_count"`
-			LastThreeYearsCount struct {
-				DocCount int `json:"doc_count"`
-			} `json:"last_three_years_count"`
-		} `json:"buckets"`
-	} `json:"top_cities"`
-}
-
-// HotIndustryAndRegion 热门行业/地区年度招标趋势
-func HotIndustryAndRegion(ind string) (dataArr []map[string]interface{}) {
-	redisKey := fmt.Sprintf("hotIndustryAndRegion_%s", ind)
-	redisData, _ := redis.Get("newother", redisKey).([]interface{})
-	if redisData != nil && len(redisData) > 0 {
-		dataArr = common.ObjArrToMapArr(redisData)
-		return
-	}
-
-	var thisRow Aggregations
-	var industrys, _ = config.Seoconfig["industry"].(map[string]interface{})
-	var names, _ = industrys[hanLetter(ind)].(map[string]interface{})
-	if len(names) == 0 {
+// 中标喜报
+func WinnerGladTidings() (entBidArr []map[string]interface{}) {
+	redisKey := "winnerGladTidings"
+	data, _ := redis.Get(RedisNameNew, redisKey).([]interface{})
+	if len(data) > 0 {
+		entBidArr = common.ObjArrToMapArr(data)
 		return
 	}
-	var subscopeclass []string
-	for _, v := range strings.Split(common.InterfaceToStr(names["NAME"]), ",") {
-		subscopeclass = append(subscopeclass, fmt.Sprintf(`"%s"`, v))
-	}
-	rangeTime, st, et := HotTimeFmt()
-	esHotQuery := fmt.Sprintf(`{
-  "size": 0,"query": {"bool": {"must": [{"range": {"firsttime": {"gte": %d,"lte": %d}}},{"terms": {"subscopeclass": [%s]}}]}},
-  "aggs": {"top_cities": {"terms": {"field": "area","size": %d},"aggs": {%s}}}}`, st, et, strings.Join(subscopeclass, ","), common.IntAll(config.Seoconfig["top_cities"]), strings.Join(rangeTime, ","))
-	res, _, _ := elastic.GetAggs("projectset", "projectset", esHotQuery)
-	if res != nil && len(res) > 0 {
-		for name, object := range res {
-			bArr, err := object.MarshalJSON()
-			if len(bArr) == 0 || err != nil {
-				break
-			}
-			if name == "top_cities" {
-				_ = json.Unmarshal(bArr, &thisRow.TopCities)
-			}
-		}
-		tm := time.Now()
-		for _, bucket := range thisRow.TopCities.Buckets {
-			data := make(map[string]interface{})
-			data["area"] = bucket.Key
-			var yearArr []map[string]interface{}
-			year3 := map[string]interface{}{ //3年前
-				"year":  tm.AddDate(-3, 0, 0).Year(),
-				"count": bucket.LastThreeYearsCount.DocCount,
-			}
-			yearArr = append(yearArr, year3)
-
-			year2 := map[string]interface{}{ //2年前
-				"year":  tm.AddDate(-2, 0, 0).Year(),
-				"count": bucket.LastTwoYearsCount.DocCount,
-			}
-			yearArr = append(yearArr, year2)
-
-			year1 := map[string]interface{}{ //1年前
-				"year":  tm.AddDate(-1, 0, 0).Year(),
-				"count": bucket.LastOneYearCount.DocCount,
-			}
-			yearArr = append(yearArr, year1)
-
-			if bucket.LastYearsCount.DocCount > 0 { //今年
-				year := map[string]interface{}{
-					"year":  tm.Year(),
-					"count": bucket.LastYearsCount.DocCount,
+	entName := public.Mysql.SelectBySql(fmt.Sprintf(`SELECT a.name,b.min_vip_starttime,b.max_vip_endtime
+FROM
+	entniche_info a
+	INNER JOIN ( SELECT ent_id, MIN(vip_starttime) AS min_vip_starttime, MAX(vip_endtime) AS max_vip_endtime
+FROM dataexport_order
+WHERE order_status = 1 AND product_type = '大会员' AND vip_endtime > '%s' AND ent_id > 0
+GROUP BY ent_id) b on a.id = b.ent_id
+WHERE
+	a.NAME NOT LIKE %s `, time.Now().Format("2006-01-02 15:04:05"), "'%测试%'"))
+	if entName != nil && len(*entName) > 0 {
+		pool := make(chan bool, 10)
+		wait := &sync.WaitGroup{}
+		var lock sync.Mutex
+		for _, v := range *entName {
+			eName := common.InterfaceToStr(v["name"])
+			vipStarttime := common.InterfaceToStr(v["min_vip_starttime"])
+			vipEndtime := common.InterfaceToStr(v["max_vip_endtime"])
+			pool <- true
+			wait.Add(1)
+			go func(name, sta, end string) {
+				defer func() {
+					wait.Done()
+					<-pool
+				}()
+				//es查询
+				list := getEsEntBid(name, sta, end)
+				if list != nil {
+					lock.Lock()
+					entBidArr = append(entBidArr, list)
+					lock.Unlock()
 				}
-				yearArr = append(yearArr, year)
-			}
-			data["yearArr"] = yearArr
-			dataArr = append(dataArr, data)
+			}(eName, vipStarttime, vipEndtime)
+		}
+		wait.Wait()
+		if len(entBidArr) > 0 {
+			redis.Put(RedisNameNew, redisKey, entBidArr, 24*3600*7)
 		}
-		redis.Put("newother", redisKey, dataArr, 3600*24*7)
-		return
 	}
-	return
+	return entBidArr
 }
 
-func hanLetter(han string) string {
-	// 创建拼音转换器
-	p := pinyin.NewArgs()
-
-	// 设置拼音转换器的样式
-	p.Style = pinyin.Initials
-
-	// 转换汉字为拼音
-	pinyinStr := pinyin.Pinyin(han, p)
-
-	// 提取首字母并转为大写
-	var initials []string
-	for _, p1 := range pinyinStr {
-		initials = append(initials, strings.ToUpper(string(p1[0])))
+func getEsEntBid(names, sta, end string) map[string]interface{} {
+	sTime, err := time.Parse("2006-01-02 15:04:05", sta)
+	if err != nil {
+		fmt.Println("日期时间解析错误:", err)
+		return nil
 	}
-	return strings.Join(initials, "")
-}
-
-func HotTimeFmt() (rangeTime []string, sta, ent int64) {
-	staTime := time.Now().AddDate(-3, 0, 0)
-	sta = time.Date(staTime.Year(), time.January, 1, 0, 0, 0, 0, staTime.Location()).Unix()
-	ent = time.Date(time.Now().Year(), time.January, 1, 0, 0, 0, 0, time.Now().Location()).Unix()
-
-	timeArr := []string{"last_years_count", "last_one_years_count", "last_two_years_count", "last_three_years_count"}
-	tm := time.Now()
-	for i := 1; i <= 3; i++ {
-		st := tm.AddDate(-i, 0, 0)
-		yearStart := time.Date(st.Year(), time.January, 1, 0, 0, 0, 0, st.Location()).Unix()
-		// 计算年尾时间戳
-		yearEnd := time.Date(st.Year(), time.December, 31, 23, 59, 59, 0, st.Location()).Unix()
-		rangeTime = append(rangeTime, fmt.Sprintf(`"%s": {
-          "filter": {
-            "range": {
-              "firsttime": {
-                "gte": %d,
-                "lte": %d
-              }
-            }
-          }
-        },`, timeArr[i], yearStart, yearEnd))
+	eTime, err := time.Parse("2006-01-02 15:04:05", end)
+	if err != nil {
+		fmt.Println("日期时间解析错误:", err)
+		return nil
 	}
-	if time.Now().Month() > time.June { // 统计今年数据
-		ent = time.Now().Unix()
-		yearStart := time.Date(tm.Year(), time.January, 1, 0, 0, 0, 0, tm.Location()).Unix()
-		// 计算年尾时间戳
-		rangeTime = append(rangeTime, fmt.Sprintf(`"%s": {
-          "filter": {
-            "range": {
-              "firsttime": {
-                "gte": %d,
-              }
-            }
-          }
-        },`, timeArr[0], yearStart))
+	list := elastic.Get("bidding", "bidding", fmt.Sprintf(`{"query": {"bool": {"must": [{"range":{"publishtime":{"gte":%d,"lte":%d}}},{"terms": {"s_winner": ["%s"]}},{"terms": {"subtype": ["中标","成交"]}}],"minimum_should_match": 0}},"_source": ["_id"],  "sort": [{"publishtime": "desc"}],"size": 1}`, sTime.Unix(), eTime.Unix(), names))
+	if list != nil && len(*list) > 0 {
+		return map[string]interface{}{names: encrypt.EncodeArticleId2ByCheck(common.InterfaceToStr((*list)[0]["_id"]))}
 	}
-	return
+	return nil
 }

+ 1 - 1
src/jfw/jyutil/sessionkeep.go

@@ -104,7 +104,7 @@ func (sk *SessionKeep) Do() bool {
 					http.Redirect(sk.W, sk.R, "/notin/page", 302)
 					return false
 				}
-			} else if strings.HasPrefix(rqu, "/front/dataExport") || strings.HasPrefix(rqu, "/front/dataPack") {
+			} else if (rqu != "/front/dataExport/toSieve" && rqu != "/front/dataExport/sieveData" && strings.HasPrefix(rqu, "/front/dataExport")) || strings.HasPrefix(rqu, "/front/dataPack") {
 				//数据预览图片导出,需要去掉session拦截
 				sk.SetSession["referer"] = sk.R.RequestURI
 				http.Redirect(sk.W, sk.R, "/notin/page", 302)

+ 1 - 1
src/jfw/modules/app/src/go.mod

@@ -5,7 +5,7 @@ go 1.18
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.1.2
+	app.yhyue.com/moapp/jypkg v1.1.3
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/gogf/gf/v2 v2.3.1

+ 2 - 2
src/jfw/modules/app/src/go.sum

@@ -9,8 +9,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40 h1:/FcBvpf/KW8g6GB
 app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.1.2 h1:R4fayhufbUpQ0QDDkCtIPZHC7J+GbDjkGKtzF4fzi0s=
-app.yhyue.com/moapp/jypkg v1.1.2/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
+app.yhyue.com/moapp/jypkg v1.1.3 h1:py1imaq0SQvoU77zKhUJp4CC9oOg2Cb+EAHfY9Ylek0=
+app.yhyue.com/moapp/jypkg v1.1.3/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=

+ 1 - 1
src/jfw/modules/bigmember/src/go.mod

@@ -5,7 +5,7 @@ go 1.19
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.1.2
+	app.yhyue.com/moapp/jypkg v1.1.3
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e
 	github.com/donnie4w/go-logger v0.0.0-20230316073421-36a48f87a69a
 	github.com/gogf/gf/v2 v2.4.2

+ 2 - 2
src/jfw/modules/bigmember/src/go.sum

@@ -9,8 +9,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf h1:/Tk5haITmGc5c3/
 app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.1.2 h1:R4fayhufbUpQ0QDDkCtIPZHC7J+GbDjkGKtzF4fzi0s=
-app.yhyue.com/moapp/jypkg v1.1.2/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
+app.yhyue.com/moapp/jypkg v1.1.3 h1:py1imaq0SQvoU77zKhUJp4CC9oOg2Cb+EAHfY9Ylek0=
+app.yhyue.com/moapp/jypkg v1.1.3/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=

+ 1 - 1
src/jfw/modules/publicapply/src/go.mod

@@ -5,7 +5,7 @@ go 1.18
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.1.2
+	app.yhyue.com/moapp/jypkg v1.1.3
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4

+ 2 - 2
src/jfw/modules/publicapply/src/go.sum

@@ -9,8 +9,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4 h1:qfqQL2GJV3N31DF
 app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.1.2 h1:R4fayhufbUpQ0QDDkCtIPZHC7J+GbDjkGKtzF4fzi0s=
-app.yhyue.com/moapp/jypkg v1.1.2/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
+app.yhyue.com/moapp/jypkg v1.1.3 h1:py1imaq0SQvoU77zKhUJp4CC9oOg2Cb+EAHfY9Ylek0=
+app.yhyue.com/moapp/jypkg v1.1.3/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=

+ 11 - 16
src/jfw/modules/publicapply/src/subscribePush/entity/keyWords.go

@@ -76,7 +76,6 @@ func (this *KeyWordsSet) UpdateKeyWords() map[string]interface{} {
 	return map[string]interface{}{"flag": true, "msg": ""}
 }
 
-//
 func directSubKWSFree(types string, keys string, session *httpsession.Session) map[string]interface{} {
 	userId := qutil.ObjToString(session.Get("userId"))
 	var repleat = false
@@ -160,7 +159,7 @@ func directSubKWSFree(types string, keys string, session *httpsession.Session) m
 	return map[string]interface{}{"flag": flag}
 }
 
-//免费用户删除关键词
+// 免费用户删除关键词
 func DeleteKeyWordsFree(types, deletekey string, session *httpsession.Session) map[string]interface{} {
 	//免费用户只有一个分类
 	var index = "0"
@@ -194,7 +193,7 @@ func DeleteKeyWordsFree(types, deletekey string, session *httpsession.Session) m
 	return map[string]interface{}{"flag": flag, "msg": ""}
 }
 
-//免费用户修改 保存关键词
+// 免费用户修改 保存关键词
 func AddKeyWordsFree(types, userId, classIndex, className, keywordsIndex, keywordName, keywordCount string, notKeyword, appendKeyword []string, matchWay int, session *httpsession.Session) map[string]interface{} {
 	flag := true
 	data := config.Compatible.Select(userId, `{"`+types+`":1}`)
@@ -286,7 +285,7 @@ func AddKeyWordsFree(types, userId, classIndex, className, keywordsIndex, keywor
 	return map[string]interface{}{"flag": flag, "msg": ""}
 }
 
-//保存/修改关键词
+// 保存/修改关键词
 func AddKeyWords(types, userId, classIndex, className, keywordsIndex, keywordName, keywordCount string, notKeyword, appendKeyword []string, matchWay int, session *httpsession.Session) map[string]interface{} {
 	flag := true
 	positionType := qutil.Int64All(session.Get("positionType"))
@@ -370,7 +369,7 @@ func AddKeyWords(types, userId, classIndex, className, keywordsIndex, keywordNam
 	return map[string]interface{}{"flag": flag, "msg": ""}
 }
 
-//删除关键词可以批量
+// 删除关键词可以批量
 func DeleteKeyWords(types, deletekey, userId string, session *httpsession.Session) map[string]interface{} {
 	flag := true
 	dMap, err := util.JsonToMap(deletekey)
@@ -417,7 +416,7 @@ func DeleteKeyWords(types, deletekey, userId string, session *httpsession.Sessio
 	return map[string]interface{}{"flag": flag, "msg": ""}
 }
 
-//删除分类【可以批量删除】
+// 删除分类【可以批量删除】
 func DeleteClass(types, classIndex, userId string, session *httpsession.Session) map[string]interface{} {
 	flag := true
 	items, saveData := []interface{}{}, map[string]interface{}{}
@@ -446,7 +445,7 @@ func DeleteClass(types, classIndex, userId string, session *httpsession.Session)
 	return map[string]interface{}{"flag": flag, "msg": ""}
 }
 
-//创建分类名
+// 创建分类名
 func AddClass(types, classIndex, className, userId string, session *httpsession.Session) map[string]interface{} {
 	flag := true
 	saveData := map[string]interface{}{}
@@ -491,7 +490,7 @@ func AddClass(types, classIndex, className, userId string, session *httpsession.
 
 }
 
-//关键词判重
+// 关键词判重
 func KeyWordsRepeat(obj map[string]interface{}, aitems []interface{}) bool {
 	// 录入的关键词
 	key, _ := obj["key"].([]string)
@@ -594,21 +593,18 @@ func (this *UpdateOther) UpdateOther() map[string]interface{} {
 	return map[string]interface{}{"flag": flag, "msg": ""}
 }
 
-//
 func UpdateProjectMatch(types string, pmindex int) map[string]interface{} {
 	return map[string]interface{}{
 		types + ".i_projectmatch": pmindex,
 	}
 }
 
-//
 func UpdateSaveSeniorset(types string, matchtype int) map[string]interface{} {
 	return map[string]interface{}{
 		types + ".i_matchway": matchtype,
 	}
 }
 
-//
 func UpdateInfoType(types string, infotype string) map[string]interface{} {
 	if infotype != "" {
 		return map[string]interface{}{
@@ -621,14 +617,13 @@ func UpdateInfoType(types string, infotype string) map[string]interface{} {
 	}
 }
 
-//
 func UpdateOtherBuyerClass(types string, other int) map[string]interface{} {
 	return map[string]interface{}{
 		types + ".i_matchbuyerclass_other": other,
 	}
 }
 
-//UpdateKeyTip 关键词升级提示
+// UpdateKeyTip 关键词升级提示
 func UpdateKeyTip(types string) map[string]interface{} {
 	return map[string]interface{}{
 		types + ".b_keytip": true,
@@ -710,7 +705,7 @@ func directSubKWS(updateItems string, keys string, userId string, session *https
 	return map[string]interface{}{"flag": flag}
 }
 
-//订阅设置记录
+// 订阅设置记录
 func SetLog(userid, types string, power int64, session *httpsession.Session) {
 	if power == 1 {
 		query := map[string]interface{}{
@@ -723,14 +718,14 @@ func SetLog(userid, types string, power int64, session *httpsession.Session) {
 			(*res)["userid"] = userid
 			(*res)["type"] = types
 			(*res)["createtime"] = time.Now().Unix()
-			db.Mgo_Log.Save("ovipjy_log", res)
+			go db.Mgo_Log.Save("ovipjy_log", res)
 		}
 	} else {
 		if data := config.Compatible.Select(userid, `{"o_vipjy":1,"o_member_jy":1,"o_jy":1}`); len(*data) > 0 && data != nil {
 			(*data)["userid"] = userid
 			(*data)["type"] = types
 			(*data)["createtime"] = time.Now().Unix()
-			db.Mgo_Log.Save("ovipjy_log", data)
+			go db.Mgo_Log.Save("ovipjy_log", data)
 		}
 	}
 }

+ 1 - 1
src/jfw/modules/subscribepay/src/go.mod

@@ -5,7 +5,7 @@ go 1.20
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.1.2
+	app.yhyue.com/moapp/jypkg v1.1.3
 	bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230225061813-384daf716c9d
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67

+ 2 - 2
src/jfw/modules/subscribepay/src/go.sum

@@ -9,8 +9,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b h1:Wtytm2QqQWtBV+s
 app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.1.2 h1:R4fayhufbUpQ0QDDkCtIPZHC7J+GbDjkGKtzF4fzi0s=
-app.yhyue.com/moapp/jypkg v1.1.2/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
+app.yhyue.com/moapp/jypkg v1.1.3 h1:py1imaq0SQvoU77zKhUJp4CC9oOg2Cb+EAHfY9Ylek0=
+app.yhyue.com/moapp/jypkg v1.1.3/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=

+ 4 - 4
src/jfw/modules/weixin/src/go.mod

@@ -5,8 +5,8 @@ go 1.18
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.0.4-0.20231109032304-2da6db20132a
-	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
+	app.yhyue.com/moapp/jypkg v1.1.3
+	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/gogf/gf/v2 v2.3.1
 	go.mongodb.org/mongo-driver v1.11.6
@@ -17,8 +17,8 @@ require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547 // indirect
 	app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae // indirect
 	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a // indirect
-	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 // indirect
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d // indirect
+	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 // indirect
 	github.com/BurntSushi/toml v1.1.0 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/cenkalti/backoff/v4 v4.2.1 // indirect

+ 8 - 8
src/jfw/modules/weixin/src/go.sum

@@ -9,18 +9,18 @@ app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b h1:Wtytm2QqQWtBV+s
 app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.0.4-0.20231109032304-2da6db20132a h1:mUqyzXj24uoi9gE9P+EVoiMi/deUHH2+0jbTnwLhOZ0=
-app.yhyue.com/moapp/jypkg v1.0.4-0.20231109032304-2da6db20132a/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
+app.yhyue.com/moapp/jypkg v1.1.3 h1:py1imaq0SQvoU77zKhUJp4CC9oOg2Cb+EAHfY9Ylek0=
+app.yhyue.com/moapp/jypkg v1.1.3/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e/go.mod h1:7Xhygw0KBuL4h0G76FnFg4otQcA9bmOO0c8M0FCjAyQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a h1:JX2jEMrbdLzXfVC/nTUvdFOkqNj5DUxkJFjl3XE1gyg=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
-bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 h1:G6PHMWAHfYEuY6kbl7OM/KnCQf1Xa54mdhuP7JzK8/I=
-bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14 h1:L/0RrgU+l8nMS7YO2JizszaX3lAo0gqzg2Bqmu0So0s=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14/go.mod h1:03M9BWIGHy7BbGxLvjt8V9zZzEZDWhN6BuHVfVcDFbQ=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d h1:x17+SAYxlBChNWn2IS2eDWZlhZrxtgEWjlb1JF0946E=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
+bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 h1:14Yxzutsej7LQe3jnN61wuRX9qjAZ4FtdWMA27ewQ3w=
+bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e h1:bncHHkJLqiDW1ZN6MVe+3bj3i0LxWgFkfqge6Gk7lB4=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e/go.mod h1:+6ZjaqpCr+ih1GYOh6ZhoDri9ZjiuxxSHvR7ovvhLx0=
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=

+ 6 - 1
src/jfw/timetask/timetask.go

@@ -5,7 +5,8 @@ import (
 	"app.yhyue.com/moapp/jypkg/public"
 	"fmt"
 	"jy/src/jfw/config"
-	"jy/src/jfw/nodemgr"
+    "jy/src/jfw/front"
+    "jy/src/jfw/nodemgr"
 	"log"
 	"math"
 	"time"
@@ -57,6 +58,10 @@ func updateHotKeys() {
 			public.BaseMysql.SelectBySql(fmt.Sprintf(`DELETE FROM anonymous_identity WHERE creation_time < %d and refer = '' AND fid IS NULL LIMIT 2000;`, tm))
 		}
 	})
+
+    c.AddFunc("0 0 1 1,4,7,10 * *", func() {
+        front.BiddingTrend(time.Now().AddDate(0,-3,0).Unix(),time.Now().Unix())
+    })
 	c.Start()
 	defer c.Stop()
 	chan bool(nil) <- true

+ 336 - 79
src/web/templates/pc/newIndex.html

@@ -3,67 +3,100 @@
 <head>
   <meta charset="UTF-8">
   <title>新版剑鱼首页</title>
+  <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/css/swiper.min.css?v={{Msg "seo" "version"}}'>
   <style>
-  .border{
-    margin: 2px;
-    border: 1px solid #eee;
-  }
-  .line-1{
-    display: flex;
-    flex-direction: row;
-  }
-  .line-1>div{
-    margin: 3px;
-  }
-  .line-1 .title{
-    text-align: center;
-    background: #52BED1;
-    color: #fff;
-  }
-  .line-1 .detail a{
-    text-decoration: none;
-    color: #000;
-    cursor: pointer;
-    white-space: nowrap
-  }
-
-  .line-2{
-    height: 100px;
-    width: 100%;
-    text-align: center;
-    line-height: 100px;
-    background: #159BD5;
-  }
-  .line-3{
-    height: 60px;
-    width: 100%;
-    line-height: 60px;
-    text-align: center;
-  }
-  .group{
-    display: flex;
-    flex-direction: row;
-  }
-  .group .main{
-    flex: 3;
-  }
-  .group .right{
-    flex: 1;
-  }
-  .line-4{
-    display: flex;
-    flex-direction: row;
-    height: 260px;
-  }
-  .biddingDiv{
-    flex: 2;
-  }
-  .adScroll{
-    flex: 3;
-  }
-  .line-5{
-    height: 460px;
-  }
+    .border {
+      margin: 2px;
+      border: 1px solid #eee;
+    }
+
+    .line-1 {
+      display: flex;
+      flex-direction: row;
+    }
+
+    .line-1 > div {
+      margin: 3px;
+    }
+
+    .line-1 .title {
+      text-align: center;
+      background: #52BED1;
+      color: #fff;
+    }
+
+    .line-1 .detail a {
+      text-decoration: none;
+      color: #000;
+      cursor: pointer;
+      white-space: nowrap
+    }
+
+    .line-2 {
+      height: 100px;
+      width: 100%;
+      text-align: center;
+      line-height: 100px;
+      background: #159BD5;
+    }
+
+    .line-3 {
+      height: 60px;
+      width: 100%;
+      line-height: 60px;
+      text-align: center;
+    }
+
+    .group {
+      display: flex;
+      flex-direction: row;
+    }
+
+    .group .main {
+      flex: 3;
+    }
+
+    .group .right {
+      flex: 1;
+    }
+
+    .line-4 {
+      display: flex;
+      flex-direction: row;
+      height: 260px;
+    }
+
+    .biddingDiv {
+      flex: 2;
+    }
+
+    .adScroll {
+      flex: 3;
+    }
+
+    .line-5 {
+      height: 460px;
+    }
+
+    .ellipsis {
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+      text-align: justify
+    }
+
+    .line-6 {
+      height: 100px;
+      width: 99.5%;
+      text-align: center;
+      line-height: 100px;
+      background: #159BD5;
+    }
+
+    .line-7 {
+      height: 530px;
+    }
+
   </style>
 </head>
 <body>
@@ -71,52 +104,276 @@
   {{$global:=.T}}
   <div class="line-1 ">
     {{range $v:= $global.topMenu}}
-      <div>
-        <div class="title">{{$v.title}}</div>
-        <div class="detail">
-          {{range $item:= $v.child}}
-            <a href="{{$item.href}}">{{$item.name}}</a>
-          {{end}}
-        </div>
+    <div>
+      <div class="title">{{$v.title}}</div>
+      <div class="detail">
+        {{range $item:= $v.child}}
+        <a href="{{$item.href}}">{{$item.name}}</a>
+        {{end}}
       </div>
+    </div>
     {{end}}
   </div>
   <div class="line-2 border">
-    12广告位
+    <!--    12广告位-->
+    {{range $k,$v:=Ad "new-pc-index-top-ad" -1 .Host}}
+    <div class="school-in-header">
+      <img src="{{$v.S_pic}}" alt="" style="width: 1115px;height: 100px;">
+    </div>
+    {{end}}
   </div>
   <div class="line-3 border">
-    13消息
+    <!-- 消息展示 -->
+    <div class="list-msg">
+      <div class="no-read" style="width: 100px;float:left;">99+条未读</div>
+      <url style="list-style: none;float:left;">
+        <li style="display: inline;">消息111</li>
+        <li style="display: inline;">消息2</li>
+      </url>
+    </div>
   </div>
   <div class="group">
     <div class="main">
-        <div class="line-4">
-          <div class="biddingDiv border">招标公告</div>
-          <div class="adScroll border">轮播图</div>
+      <div class="line-4">
+        <div class="biddingDiv border" style="font-size: 12px;">
+          招标公告
+          <a href="{{.T.newbids.more}}" style="float: right">更多</a>
+          <ul>
+            {{range $k,$v := .T.newbids.biddingList}}
+            <li>
+              <span>{{$v.title}}</span>
+              <span>{{$v.publishtime}}</span>
+            </li>
+            {{end}}
+          </ul>
         </div>
-        <div class="line-5 border">
-          17标讯专区
+        <div class="adScroll border">轮播图
+          <!--轮播图  有数据,不会样式 -->
+          <div class="swiper-wrapper">
+            <!--{{range $k,$v:=Ad "new-pc-index-carousel" -1 .Host}}
+            <a class="swiper-slide"
+               {{if $v.S_link }}href="{{$v.S_link}}"{{end}}
+               {{if eq $v.O_extend.Linktype "abroad" }} target="_blank" {{else}} target="_self" {{end}}
+            >
+            <img class="img-banner" data-theme="{{$v.O_extend.Theme}}" src='{{$v.S_pic}}' alt="{{$v.S_remark}}">
+            </a>
+            {{end}}-->
+          </div>
         </div>
-        <div class="line-5 border">
-          18项目专区
+      </div>
+      <div class="line-5 border" style="font-size: 14px;">
+        <p>17标讯专区</p>
+        <div class="bidAdvance" style="width: 400px;float: left;">
+          招标预告
+          <a href="" style="float: right">更多</a>
+          <ul>
+            {{range $k,$v := .T.recommendBid_1}}
+            <li class="ellipsis">
+              <span>{{$v.title}}</span>
+              <span>{{$v.publishtime}}</span>
+            </li>
+            {{end}}
+          </ul>
         </div>
+
+        <div class="bidAdvance" style="width: 400px;float: right;">
+          中标成交
+          <a href="" style="float: right">更多</a>
+          <ul>
+            {{range $k,$v := .T.recommendBid_2}}
+            <li class="ellipsis">
+              <span>{{$v.title}}</span>
+              <span>{{$v.publishtime}}</span>
+            </li>
+            {{end}}
+          </ul>
+        </div>
+
+        <div class="bidAdvance" style="width: 400px;float: left">
+          采购意向
+          <a href="" style="float: right">更多</a>
+          <ul>
+            {{range $k,$v := .T.recommendBid_3}}
+            <li class="ellipsis">
+              <span>{{$v.title}}</span>
+              <span>{{$v.publishtime}}</span>
+            </li>
+            {{end}}
+          </ul>
+        </div>
+
+        <div class="bidAdvance" style="width: 400px;float: right">
+          项目分包
+          <a href="" style="float: right">更多</a>
+          <ul>
+            {{range $k,$v := .T.recommendBid_4}}
+            <li class="ellipsis">
+              <span>{{$v.title}}</span>
+              <span>{{$v.publishtime}}</span>
+            </li>
+            {{end}}
+          </ul>
+        </div>
+      </div>
+      <div class="line-5 border">
+        18项目专区
+      </div>
+      <div class="line-6 border">
+        21广告位
+        <!--{{range $k,$v:=Ad "new-pc-index-middle-carousel" -1 .Host}}
+        <div class="school-in-header">
+          <img src="{{$v.S_pic}}" alt=""  style="width: 830px;height: 100px;">
+        </div>
+        {{end}}-->
+      </div>
+      <div class="line-7 border">
+        <p>22机构专区</p>
+        <div style="display: flex;">
+          <div class="winner-ent" style="width: 250px;font-size: 14px;">
+            热门中标企业
+            <ul>
+              {{range $k,$v := .T.hotWinner}}
+              <li class="">{{$v.ent_name}}</li>
+              {{end}}
+            </ul>
+          </div>
+          <div class="buyer" style="font-size: 10px;">
+            热门采购单位
+            <ul>
+              {{range $k,$v := .T.hotBuyers}}
+              <li class="">
+                <p>{{$v.ent_Id}} <span>采购标讯{{$v.count}}条</span></p>
+                <apan>所在地:{{$v.city}}</apan>&nbsp;&nbsp;&nbsp;&nbsp;<span>采购单位类型:{{$v.buyerclass}}</span>
+              </li>
+              {{end}}
+            </ul>
+          </div>
+        </div>
+      </div>
+      <div style="height: 100px;background: #0CA1F5;display: flex;">
+        <!--        23号广告位-->
+        {{range $k,$v:=Ad "new-pc-index-twenty-three" -1 .Host}}
+        <div class="school-in-header">
+          <img src="{{$v.S_pic}}" alt="" style="width: 420px;height: 100px;">
+        </div>
+        {{end}}
+      </div>
+      <div style="height: 300px;background: #00D7B0;display: flex;">
+        <div style="width: 220px;margin-left: 20px;">
+          24企业服务专区
+          <h4>营销</h4>
+          <p>实现用户在平台上完成咨询,销售线索、销售机会,客服的权限跟踪处理。</p>
+          <button>专属资讯</button>
+          <br>
+          <button>机构管理</button>
+          <br>
+          <button>任务管理</button>
+        </div>
+        <div>
+          {{range $k,$v:=Ad "new-pc-index-ent-service" -1 .Host}}
+          <div class="school-in-header">
+            <img src="{{$v.S_pic}}" alt="" style="width: 600px;height: 300px;">
+          </div>
+          {{end}}
+        </div>
+
+      </div>
     </div>
-    <div  class="right">
+    <div class="right">
       <div class="border" style="height: 200px">
         16登录注册
       </div>
       <div class="border" style="height: 200px">
         19会员中标喜报
       </div>
-      <div class="border" style="height: 400px">
+      <div class="border" style="height: 500px">
         20热门行业
+        {{range $k,$v := .T.hotIndustry}}
+        {{range $ke,$va := $v}}
+        <div style="font-size: 12px;display: flex;">
+          <p>{{$ke}}</p>
+          <ul style="font-size: 10px;flex: 1;margin: 15px 0 0 0;padding: 0;">
+            {{range $kk,$vv := $va}}
+            {{if le $kk 4}}
+            <li style="list-style-type: none;float: left;display: inline-block;margin-right: 5px;">
+              <a href="{{$vv.url}}">{{$vv.key}}</a>
+            </li>
+            {{end}}
+            {{end}}
+          </ul>
+        </div>
+        {{end}}
+        {{end}}
       </div>
-      <div class="border" style="height: 200px">
+      <div class="border" style="height: 300px;font-size: 13px;">
         25优秀供应商
+        <ul>
+          {{range $k,$v := .T.supplyEnt}}
+          {{if le $k 14}}
+          <li style="list-style: none;">{{$v.name}}</li>
+          {{end}}
+          {{end}}
+        </ul>
       </div>
     </div>
   </div>
+  <div class="line-10 border" style="height: 300px;background: #0A9AEA;">
+    26数据服务专区
+  </div>
+  <div style="height: 400px;display: flex;flex-wrap:wrap;">
+    {{range $k,$v:=Ad "new-pc-index-twenty-seven" -1 .Host}}
+    <div class="school-in-header" style="width: 33.3%">
+      <img src="{{$v.S_pic}}" alt="" style="height: 200px;">
+    </div>
+    {{end}}
+  </div>
+  <div class="strategy-school border" style="height: 400px;display: flex;">
+    <div class="strategy" style="width: 75%">
+      {{$thisCode := "zbcg"}}
+      {{range $k,$v := .T.strategyList}}
+      {{if eq $k 1 }}
+      <div class="school_classify jyxt">
+        <a {{if eq $v.code $thisCode}} class="classify_tabs is-active" {{else}} class="classify_tabs" {{end}}
+           href="/jySchool/{{$v.code}}/index.html">
+          {{$v.name}}
+        </a>
+        <ul>
+          {{range $kk,$vv := $v.list}}
+          <li><span>{{$vv.s_title}}</span> <span>{{$vv.l_createdate}}</span></li>
+          {{end}}
+        </ul>
+      </div>
+      {{end}}
+      {{end}}
+    </div>
+    <div class="school" style="width: 25%">
+      <p>剑鱼学堂</p>
+      <ul>
+        {{range $k,$v := .T.jySchool}}
+        <li>{{$v.s_name}}</li>
+        {{end}}
+      </ul>
+    </div>
+  </div>
+  <div class="line-11 border" style="height: 100px;display: flex;flex-wrap:wrap;">
+    {{range $k,$v:=Ad "new-pc-index-bottom-ad" -1 .Host}}
+    <div class="" style="">
+      <img src="{{$v.S_pic}}" alt="" style="height: 100px;width: 184px;">
+    </div>
+    {{end}}
+  </div>
+
 
 
 </content>
 </body>
+<script src='{{Msg "seo" "cdn"}}/js/pc-message-new.js?v={{Msg "seo" "version"}}'></script>
+<script>
+  // tab点击切换
+  $('.school_classify .classify_tabs').click(function () {
+    $(this).addClass('is-active')
+    $(this).siblings().removeClass('is-active')
+  })
+
+</script>
 </html>