WH01243 10 tháng trước cách đây
mục cha
commit
dd3db07b49

+ 9 - 0
common/db/db.go

@@ -2,6 +2,7 @@ package db
 
 import (
 	"database/sql"
+	"github.com/gogf/gf/v2/util/gconv"
 	"log"
 
 	"app.yhyue.com/moapp/jybase/mysql"
@@ -19,7 +20,9 @@ type Mysql struct {
 	MaxIdleConns int     //用于设置闲置的连接数。
 }
 
+var AddressMap map[string]interface{}
 var GateWatMySql *mysql.Mysql
+var Bjgjdsjjys map[string]interface{}
 
 // InitDatabases 初始化数据库
 func InitDatabases() {
@@ -27,10 +30,16 @@ func InitDatabases() {
 	// 初始化mysql数据库
 	var mysqlConf Mysql
 	err := gcfg.Instance().MustGet(initDbCtx, "databases.mysql").Scan(&mysqlConf)
+	AddressMap = gconv.Map(gcfg.Instance().MustGet(initDbCtx, "addressMap", ""))
 	if err != nil {
 		log.Printf("mysql配置异常 %v\n", err)
 		log.Fatal(err)
 	}
+	err = gcfg.Instance().MustGet(initDbCtx, "bjgjdsjjys").Scan(&Bjgjdsjjys)
+	if err != nil {
+		log.Printf("bjgjdsjjys配置异常 %v\n", err)
+		log.Fatal(err)
+	}
 	GateWatMySql = &mysql.Mysql{
 		Address:      mysqlConf.Address,
 		UserName:     mysqlConf.UserName,

+ 33 - 3
core/proxy/middleware/filterFuncs.go

@@ -3,19 +3,35 @@ package middleware
 import (
 	"app.yhyue.com/moapp/jybase/common"
 	log "app.yhyue.com/moapp/jylog"
+	"crypto/sha256"
+	"encoding/hex"
 	"fmt"
 	"github.com/gogf/gf/v2/net/ghttp"
 	"jygit.jydev.jianyu360.cn/dataservice/tripartite_gateway/common/db"
 	. "jygit.jydev.jianyu360.cn/dataservice/tripartite_gateway/common/gatecode"
+	"regexp"
 	"strings"
 )
 
 // filterBefore 前置拦截处理
 // 校验秘钥对不对
 func filterBefore(r *ghttp.Request) error {
-	query := r.URL.Query()
-	if query == nil {
-
+	log.Println(111, r.Header)
+	url_ := r.Request.URL.Path
+	query := r.Request.URL.Query()
+	bidreg := regexp.MustCompile(".*/getAllbid/(.*)")
+	winnerReg := regexp.MustCompile(".*/getWinner")
+	if bidreg.MatchString(url_) || winnerReg.MatchString(url_) {
+		//北京国际大数据交易所
+		/*timestamp := gconv.Int64(r.GetHeader("X-OS-Timestamp"))
+		querySignature := gconv.String(r.GetHeader("X-OS-Signature"))
+		signature := signature(gconv.String(db.Bjgjdsjjys["appKey"]), gconv.String(db.Bjgjdsjjys["appSecret"]), timestamp)
+		if signature == querySignature {
+			return nil
+		} else {
+			return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_FAIL)
+		}*/
+		return nil
 	}
 	appid := common.ObjToString(query["appid"][0])
 	timestamp := r.GetHeader("timestamp")
@@ -37,3 +53,17 @@ func filterBefore(r *ghttp.Request) error {
 	}
 	return nil
 }
+func signature(appId string, appSecret string, timestamp int64) string {
+	fmt.Println("timestamp :", timestamp)
+	strToSignature := fmt.Sprintf("%s&%s&%d", appId, appSecret, timestamp)
+	// 创建一个新的SHA256哈希对象
+	hash := sha256.New()
+	// 写入要加密的数据
+	hash.Write([]byte(strToSignature))
+	// 计算哈希值
+	byteBuffer := hash.Sum(nil)
+	// 将哈希值转换为十六进制字符串
+	signature := hex.EncodeToString(byteBuffer)
+	fmt.Println("signature:", signature)
+	return signature
+}

+ 29 - 2
core/proxy/proxyClient/proxyClient.go

@@ -1,13 +1,17 @@
 package proxyClient
 
 import (
+	"fmt"
 	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
-	"jygit.jydev.jianyu360.cn/dataservice/tripartite_gateway/core/util"
+	"github.com/gogf/gf/v2/util/gconv"
+	"jygit.jydev.jianyu360.cn/dataservice/tripartite_gateway/common/db"
 	"net"
 	"net/http"
 	"net/http/httputil"
 	"net/url"
+	"regexp"
+	"strings"
 	"time"
 )
 
@@ -16,9 +20,23 @@ var transport = &http.Transport{}
 func CreateCustomProxyClient(target *url.URL, errFunc func(http.ResponseWriter, *http.Request, error), change func(resp *http.Response) error) *httputil.ReverseProxy {
 	return &httputil.ReverseProxy{
 		Director: func(req *http.Request) {
+			url_ := req.URL.Path
+			bidReg := regexp.MustCompile(".*/getAllbid/(.*)")
+			winnerReg := regexp.MustCompile(".*/getWinner")
+			if bidReg.MatchString(url_) || winnerReg.MatchString(url_) {
+				urlArr := strings.Split(url_, "/")
+				query := req.URL.Query()
+				startTime, endTime := TimeHandle(query.Get("date"))
+				fmt.Println(query, target.Path)
+				req.URL.Path = target.Path
+				req.Method = "POST"
+				if bidReg.MatchString(url_) {
+					req.URL.RawQuery = fmt.Sprintf("startTime=%d&page=%s&business=%s&endTime=%d", startTime, query.Get("page"), gconv.String(db.AddressMap[urlArr[len(urlArr)-1]]), endTime)
+				}
+			}
 			req.URL.Scheme = target.Scheme
 			req.URL.Host = target.Host
-			req.URL.Path = util.SingleJoiningSlash(target.Path, req.URL.Path)
+
 		},
 		Transport:      transport,
 		ModifyResponse: change,
@@ -40,3 +58,12 @@ func ReLoadClient() {
 		MaxIdleConnsPerHost:   gcfg.Instance().MustGet(gctx.New(), "proxy.maxIdleConnsPerHost", 5).Int(),                                //客户端可以持有的最大空闲连接
 	}
 }
+func TimeHandle(timeStr string) (int64, int64) {
+	// 解析时间字符串
+	specificTime, _ := time.Parse(time.DateOnly, timeStr)
+	// 获取该时间的开始时间(00:00:00)
+	startOfDay := time.Date(specificTime.Year(), specificTime.Month(), specificTime.Day(), 0, 0, 0, 0, specificTime.Location())
+	// 获取该时间的截止时间(23:59:59)
+	endOfDay := time.Date(specificTime.Year(), specificTime.Month(), specificTime.Day(), 23, 59, 59, 999999999, specificTime.Location())
+	return startOfDay.Unix(), endOfDay.Unix()
+}

+ 26 - 1
etc/config.yaml

@@ -7,11 +7,36 @@ databases:
   # mysql配置
   mysql:
     dbName: thirdparty
-    address: 192.168.3.217:4000
+    address: 192.168.3.14:4000
     userName: root
     passWord: =PDT49#80Z!RVv52_z
     maxOpenConns: 5
     maxIdleConns: 5
+bjgjdsjjys:
+  appKey: c3cd36f71984f5554b83583b9fb1c14e
+  appSecret: Qqch6brwMsdsdtKhY8idhbvXNi8khESOns46mq43JAB
+addressMap:
+  "all": ""
+  "nlmy": "农林牧渔"
+  "cky": "采矿业"
+  "zzy": "制造业"
+  "sdmq": "能源化工"
+  "jzy": "建筑业"
+  "pfls": "批发零售"
+  "jtys": "交通"
+  "wlcc": "运输物流"
+  "zscy": "住宿餐饮"
+  "xxjs": "信息技术"
+  "jry": "金融业"
+  "dcy": "住建"
+  "zlfw": "商务"
+  "kxfw": "科技"
+  "slss": "水利"
+  "jmfwy": "民政"
+  "jy": "教育"
+  "yl": "医疗"
+  "wtyly": "文旅"
+