diff --git a/app/constants/common/common.go b/app/constants/common/common.go index 328530c..c961f93 100644 --- a/app/constants/common/common.go +++ b/app/constants/common/common.go @@ -3,7 +3,7 @@ package common const ( TOKEN_PRE = "player_token_" TOKEN_Admin = "Admin_token_" - ADMIN_V1 = "/pay/admin/api/v1 + ADMIN_V1 = "/pay/admin/api/v1" FRONT_V1 = "/api/v1" // 支付渠道枚举,1微信JSAPI,2微信H5,3微信app,4微信Native,5微信小程序,6支付宝网页&移动应用,7支付宝小程序,8支付宝JSAPI diff --git a/app/http/entities/backend/app.go b/app/http/entities/backend/app.go index 11c0cf1..9956684 100644 --- a/app/http/entities/backend/app.go +++ b/app/http/entities/backend/app.go @@ -16,8 +16,8 @@ type AppResponse struct { MerchantId int64 `json:"merchant_id"` AppName string `json:"app_name"` AppRemark string `json:"app_remark"` - Status int `json:"status"` - KeyType int `json:"key_type"` + Status int32 `json:"status"` + KeyType int32 `json:"key_type"` PublicKey string `json:"public_key"` PrivateKey string `json:"private_key"` MerchantPublicKey string `json:"merchant_public_key"` @@ -45,8 +45,8 @@ type AppCreateRequest struct { MerchantId int64 `json:"merchant_id" validate:"required" label:"商户ID"` AppName string `json:"app_name" validate:"required" label:"应用名称"` AppRemark string `json:"app_remark" label:"应用备注"` - Status int `json:"status" validate:"oneof=0 1 2" label:"应用状态"` - KeyType int `json:"key_type" validate:"required" label:"应用密钥类型"` + Status int32 `json:"status" validate:"oneof=0 1 2" label:"应用状态"` + KeyType int32 `json:"key_type" validate:"required" label:"应用密钥类型"` PublicKey string `json:"public_key" validate:"required" label:"应用公钥"` PrivateKey string `json:"private_key" validate:"required" label:"应用私钥"` MerchantPublicKey string `json:"merchant_public_key" label:"商户公钥"` @@ -72,8 +72,8 @@ type AppUpdateRequest struct { Id int64 `json:"id" validate:"required" label:"应用ID"` AppName string `json:"app_name" label:"应用名称"` AppRemark string `json:"app_remark" label:"应用备注"` - Status int `json:"status" label:"应用状态"` - KeyType int `json:"key_type" label:"应用密钥类型"` + Status int32 `json:"status" label:"应用状态"` + KeyType int32 `json:"key_type" label:"应用密钥类型"` PublicKey string `json:"public_key" label:"应用公钥"` PrivateKey string `json:"private_key" label:"应用私钥"` MerchantPublicKey string `json:"merchant_public_key" label:"商户公钥"` diff --git a/app/http/routes/route.go b/app/http/routes/route.go index f4366f9..e0dc7ff 100644 --- a/app/http/routes/route.go +++ b/app/http/routes/route.go @@ -4,14 +4,15 @@ package routes * 配置路由 */ import ( - "PaymentCenter/app/constants/common" "PaymentCenter/app/http/controllers" - "PaymentCenter/app/http/controllers/front" "PaymentCenter/app/http/controllers/backend" + "PaymentCenter/app/http/controllers/front" "PaymentCenter/app/http/middlewares" "PaymentCenter/app/http/trace" "PaymentCenter/app/utils/metric" "PaymentCenter/config" + ginSwagger "github.com/swaggo/gin-swagger" + "github.com/swaggo/gin-swagger/swaggerFiles" "github.com/gin-gonic/gin" "github.com/qit-team/snow-core/http/middleware" @@ -45,8 +46,6 @@ func RegisterRoute(router *gin.Engine) { router.NoRoute(controllers.Error404) //router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) - v1 := router.Group(common.FRONT_V1, middlewares.ValidateRequest()) - { v1 := router.Group("/v1") { @@ -59,8 +58,6 @@ func RegisterRoute(router *gin.Engine) { } router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) - pay := v1.Group("pay", middlewares.ValidatePayRequest()) - pay.POST("web", backend.MerchantList) // 商户列表 - } - + pay := v1.Group("pay", middlewares.ValidatePayRequest()) + pay.POST("web", backend.MerchantList) // 商户列表 } diff --git a/app/services/app.go b/app/services/app.go index 9b1211c..a161494 100644 --- a/app/services/app.go +++ b/app/services/app.go @@ -65,15 +65,7 @@ func AppUpdate(app *appmodel.App) (code int) { } else { _, err = repo.AppUpdate(app, conn) } - if !has { - return errorcode.MerchantNotFound - } - - // 拼接查询条件 - uconn := builder.NewCond() - uconn = uconn.And(builder.Eq{"Id": App.Id}) - _, err = repo.AppUpdate(App, uconn, "app_remark") - + code = handErr(err) return } diff --git a/app/utils/mq/mqs/kafka.go b/app/utils/mq/mqs/kafka.go index 5208608..249a8b6 100644 --- a/app/utils/mq/mqs/kafka.go +++ b/app/utils/mq/mqs/kafka.go @@ -1,89 +1,89 @@ package mq -import ( - "PaymentCenter/app/utils" - "PaymentCenter/config" - "context" - "encoding/json" - "fmt" - "github.com/Shopify/sarama" - "github.com/qit-team/snow-core/redis" - - "strconv" - "sync" -) - -type KafkaMq struct { -} - -// 同步 -func (n KafkaMq) Produce(name string, log interface{}, delayTime int, args ...interface{}) error { - kafConfig := sarama.NewConfig() - kafConfig.Producer.RequiredAcks = sarama.WaitForAll // 发送完数据需要leader和follow都确认 - kafConfig.Producer.Partitioner = sarama.NewRandomPartitioner // 新选出一个partition - kafConfig.Producer.Return.Successes = true // 成功交付的消息将在success channel返回 - - // 构造一个消息 - msg := &sarama.ProducerMessage{} - msg.Topic = name - var data, _ = json.Marshal(log) - msg.Value = sarama.StringEncoder(string(data)) - // 连接kafka - client, err := sarama.NewSyncProducer(config.GetConf().KafkaUrl, kafConfig) - if err != nil { - fmt.Println("producer closed, err:", err) - return nil - } - defer client.Close() - // 发送消息 - pid, offset, err := client.SendMessage(msg) - if err != nil { - utils.Log(nil, "send msg failed, err:", err, pid, offset) - return nil - } - return nil -} - -func (n KafkaMq) Consume(name string, hand interface{}) { - consumer, err := sarama.NewConsumer(config.GetConf().KafkaUrl, nil) - if err != nil { - utils.Log(nil, "kafka comsume", err.Error()) - return - } - partitionList, err := consumer.Partitions(name) // 根据topic取到所有的分区 - if err != nil { - utils.Log(nil, "kafka comsume", err.Error()) - return - } - //utils.Log(nil,"kafka comsume",name,partitionList) - for partition := range partitionList { // 遍历所有的分区 - // 针对每个分区创建一个对应的分区消费者 - var offsetReDis, _ = redis.GetRedis().Incr(context.Background(), "kafka_consume:"+strconv.Itoa(int(partition))).Result() //保证多消费者不重复消费 - var offset int64 = sarama.OffsetNewest - if offsetReDis > 0 { - //offset = int64(offsetReDis) - } - pc, err := consumer.ConsumePartition(name, int32(partition), offset) - //utils.Log(nil,"partion",int32(partition)) - if err != nil { - fmt.Printf("failed to start consumer for partition %d,err:%v\n", partition, err) - return - } - defer pc.AsyncClose() - var wg sync.WaitGroup - wg.Add(1) - // 异步从每个分区消费信息 - go func(sarama.PartitionConsumer) { - for msg := range pc.Messages() { - defer wg.Done() - var handler = hand.(func(tag uint64, ch interface{}, msg []byte)) - handler(0, nil, msg.Value) - //utils.Log(nil,"hand msg",string(msg.Value),msg.Offset) - } - }(pc) - wg.Wait() - } -} -func (n KafkaMq) DelyConsume(name string, hand interface{}) { - -} +// +//import ( +// "PaymentCenter/app/utils" +// "PaymentCenter/config" +// "context" +// "fmt" +// "github.com/Shopify/sarama" +// "github.com/qit-team/snow-core/redis" +// +// "strconv" +// "sync" +//) +// +//type KafkaMq struct { +//} +// +//// 同步 +//func (n KafkaMq) Produce(name string, log interface{}, delayTime int, args ...interface{}) error { +// //kafConfig := sarama.NewConfig() +// //kafConfig.Producer.RequiredAcks = sarama.WaitForAll // 发送完数据需要leader和follow都确认 +// //kafConfig.Producer.Partitioner = sarama.NewRandomPartitioner // 新选出一个partition +// //kafConfig.Producer.Return.Successes = true // 成功交付的消息将在success channel返回 +// // +// //// 构造一个消息 +// //msg := &sarama.ProducerMessage{} +// //msg.Topic = name +// //var data, _ = json.Marshal(log) +// //msg.Value = sarama.StringEncoder(string(data)) +// //// 连接kafka +// //client, err := sarama.NewSyncProducer(config.GetConf().KafkaUrl, kafConfig) +// //if err != nil { +// // fmt.Println("producer closed, err:", err) +// // return nil +// //} +// //defer client.Close() +// //// 发送消息 +// //pid, offset, err := client.SendMessage(msg) +// //if err != nil { +// // utils.Log(nil, "send msg failed, err:", err, pid, offset) +// // return nil +// //} +// return nil +//} +// +//func (n KafkaMq) Consume(name string, hand interface{}) { +// consumer, err := sarama.NewConsumer(config.GetConf().KafkaUrl, nil) +// if err != nil { +// utils.Log(nil, "kafka comsume", err.Error()) +// return +// } +// partitionList, err := consumer.Partitions(name) // 根据topic取到所有的分区 +// if err != nil { +// utils.Log(nil, "kafka comsume", err.Error()) +// return +// } +// //utils.Log(nil,"kafka comsume",name,partitionList) +// for partition := range partitionList { // 遍历所有的分区 +// // 针对每个分区创建一个对应的分区消费者 +// var offsetReDis, _ = redis.GetRedis().Incr(context.Background(), "kafka_consume:"+strconv.Itoa(int(partition))).Result() //保证多消费者不重复消费 +// var offset int64 = sarama.OffsetNewest +// if offsetReDis > 0 { +// //offset = int64(offsetReDis) +// } +// pc, err := consumer.ConsumePartition(name, int32(partition), offset) +// //utils.Log(nil,"partion",int32(partition)) +// if err != nil { +// fmt.Printf("failed to start consumer for partition %d,err:%v\n", partition, err) +// return +// } +// defer pc.AsyncClose() +// var wg sync.WaitGroup +// wg.Add(1) +// // 异步从每个分区消费信息 +// go func(sarama.PartitionConsumer) { +// for msg := range pc.Messages() { +// defer wg.Done() +// var handler = hand.(func(tag uint64, ch interface{}, msg []byte)) +// handler(0, nil, msg.Value) +// //utils.Log(nil,"hand msg",string(msg.Value),msg.Offset) +// } +// }(pc) +// wg.Wait() +// } +//} +//func (n KafkaMq) DelyConsume(name string, hand interface{}) { +// +//} diff --git a/go.mod b/go.mod index cc9e3a3..fdcd3e0 100644 --- a/go.mod +++ b/go.mod @@ -117,17 +117,12 @@ require ( go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.21.0 // indirect + golang.org/x/arch v0.6.0 // indirect golang.org/x/crypto v0.25.0 // indirect golang.org/x/net v0.25.0 // indirect golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect - golang.org/x/arch v0.6.0 // indirect - golang.org/x/crypto v0.17.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.1.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect