合并代码

This commit is contained in:
Rzy 2024-08-02 18:38:51 +08:00
parent b781a61f21
commit aa1481b923
6 changed files with 101 additions and 117 deletions

View File

@ -3,7 +3,7 @@ package common
const ( const (
TOKEN_PRE = "player_token_" TOKEN_PRE = "player_token_"
TOKEN_Admin = "Admin_token_" TOKEN_Admin = "Admin_token_"
ADMIN_V1 = "/pay/admin/api/v1 ADMIN_V1 = "/pay/admin/api/v1"
FRONT_V1 = "/api/v1" FRONT_V1 = "/api/v1"
// 支付渠道枚举,1微信JSAPI2微信H53微信app4微信Native5微信小程序6支付宝网页&移动应用7支付宝小程序8支付宝JSAPI // 支付渠道枚举,1微信JSAPI2微信H53微信app4微信Native5微信小程序6支付宝网页&移动应用7支付宝小程序8支付宝JSAPI

View File

@ -16,8 +16,8 @@ type AppResponse struct {
MerchantId int64 `json:"merchant_id"` MerchantId int64 `json:"merchant_id"`
AppName string `json:"app_name"` AppName string `json:"app_name"`
AppRemark string `json:"app_remark"` AppRemark string `json:"app_remark"`
Status int `json:"status"` Status int32 `json:"status"`
KeyType int `json:"key_type"` KeyType int32 `json:"key_type"`
PublicKey string `json:"public_key"` PublicKey string `json:"public_key"`
PrivateKey string `json:"private_key"` PrivateKey string `json:"private_key"`
MerchantPublicKey string `json:"merchant_public_key"` MerchantPublicKey string `json:"merchant_public_key"`
@ -45,8 +45,8 @@ type AppCreateRequest struct {
MerchantId int64 `json:"merchant_id" validate:"required" label:"商户ID"` MerchantId int64 `json:"merchant_id" validate:"required" label:"商户ID"`
AppName string `json:"app_name" validate:"required" label:"应用名称"` AppName string `json:"app_name" validate:"required" label:"应用名称"`
AppRemark string `json:"app_remark" label:"应用备注"` AppRemark string `json:"app_remark" label:"应用备注"`
Status int `json:"status" validate:"oneof=0 1 2" label:"应用状态"` Status int32 `json:"status" validate:"oneof=0 1 2" label:"应用状态"`
KeyType int `json:"key_type" validate:"required" label:"应用密钥类型"` KeyType int32 `json:"key_type" validate:"required" label:"应用密钥类型"`
PublicKey string `json:"public_key" validate:"required" label:"应用公钥"` PublicKey string `json:"public_key" validate:"required" label:"应用公钥"`
PrivateKey string `json:"private_key" validate:"required" label:"应用私钥"` PrivateKey string `json:"private_key" validate:"required" label:"应用私钥"`
MerchantPublicKey string `json:"merchant_public_key" label:"商户公钥"` MerchantPublicKey string `json:"merchant_public_key" label:"商户公钥"`
@ -72,8 +72,8 @@ type AppUpdateRequest struct {
Id int64 `json:"id" validate:"required" label:"应用ID"` Id int64 `json:"id" validate:"required" label:"应用ID"`
AppName string `json:"app_name" label:"应用名称"` AppName string `json:"app_name" label:"应用名称"`
AppRemark string `json:"app_remark" label:"应用备注"` AppRemark string `json:"app_remark" label:"应用备注"`
Status int `json:"status" label:"应用状态"` Status int32 `json:"status" label:"应用状态"`
KeyType int `json:"key_type" label:"应用密钥类型"` KeyType int32 `json:"key_type" label:"应用密钥类型"`
PublicKey string `json:"public_key" label:"应用公钥"` PublicKey string `json:"public_key" label:"应用公钥"`
PrivateKey string `json:"private_key" label:"应用私钥"` PrivateKey string `json:"private_key" label:"应用私钥"`
MerchantPublicKey string `json:"merchant_public_key" label:"商户公钥"` MerchantPublicKey string `json:"merchant_public_key" label:"商户公钥"`

View File

@ -4,14 +4,15 @@ package routes
* 配置路由 * 配置路由
*/ */
import ( import (
"PaymentCenter/app/constants/common"
"PaymentCenter/app/http/controllers" "PaymentCenter/app/http/controllers"
"PaymentCenter/app/http/controllers/front"
"PaymentCenter/app/http/controllers/backend" "PaymentCenter/app/http/controllers/backend"
"PaymentCenter/app/http/controllers/front"
"PaymentCenter/app/http/middlewares" "PaymentCenter/app/http/middlewares"
"PaymentCenter/app/http/trace" "PaymentCenter/app/http/trace"
"PaymentCenter/app/utils/metric" "PaymentCenter/app/utils/metric"
"PaymentCenter/config" "PaymentCenter/config"
ginSwagger "github.com/swaggo/gin-swagger"
"github.com/swaggo/gin-swagger/swaggerFiles"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/qit-team/snow-core/http/middleware" "github.com/qit-team/snow-core/http/middleware"
@ -45,8 +46,6 @@ func RegisterRoute(router *gin.Engine) {
router.NoRoute(controllers.Error404) router.NoRoute(controllers.Error404)
//router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) //router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
v1 := router.Group(common.FRONT_V1, middlewares.ValidateRequest())
{
v1 := router.Group("/v1") v1 := router.Group("/v1")
{ {
@ -59,8 +58,6 @@ func RegisterRoute(router *gin.Engine) {
} }
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
pay := v1.Group("pay", middlewares.ValidatePayRequest()) pay := v1.Group("pay", middlewares.ValidatePayRequest())
pay.POST("web", backend.MerchantList) // 商户列表 pay.POST("web", backend.MerchantList) // 商户列表
}
} }

View File

@ -65,15 +65,7 @@ func AppUpdate(app *appmodel.App) (code int) {
} else { } else {
_, err = repo.AppUpdate(app, conn) _, 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) code = handErr(err)
return return
} }

View File

@ -1,89 +1,89 @@
package mq package mq
import ( //
"PaymentCenter/app/utils" //import (
"PaymentCenter/config" // "PaymentCenter/app/utils"
"context" // "PaymentCenter/config"
"encoding/json" // "context"
"fmt" // "fmt"
"github.com/Shopify/sarama" // "github.com/Shopify/sarama"
"github.com/qit-team/snow-core/redis" // "github.com/qit-team/snow-core/redis"
//
"strconv" // "strconv"
"sync" // "sync"
) //)
//
type KafkaMq struct { //type KafkaMq struct {
} //}
//
// 同步 //// 同步
func (n KafkaMq) Produce(name string, log interface{}, delayTime int, args ...interface{}) error { //func (n KafkaMq) Produce(name string, log interface{}, delayTime int, args ...interface{}) error {
kafConfig := sarama.NewConfig() // //kafConfig := sarama.NewConfig()
kafConfig.Producer.RequiredAcks = sarama.WaitForAll // 发送完数据需要leader和follow都确认 // //kafConfig.Producer.RequiredAcks = sarama.WaitForAll // 发送完数据需要leader和follow都确认
kafConfig.Producer.Partitioner = sarama.NewRandomPartitioner // 新选出一个partition // //kafConfig.Producer.Partitioner = sarama.NewRandomPartitioner // 新选出一个partition
kafConfig.Producer.Return.Successes = true // 成功交付的消息将在success channel返回 // //kafConfig.Producer.Return.Successes = true // 成功交付的消息将在success channel返回
// //
// 构造一个消息 // //// 构造一个消息
msg := &sarama.ProducerMessage{} // //msg := &sarama.ProducerMessage{}
msg.Topic = name // //msg.Topic = name
var data, _ = json.Marshal(log) // //var data, _ = json.Marshal(log)
msg.Value = sarama.StringEncoder(string(data)) // //msg.Value = sarama.StringEncoder(string(data))
// 连接kafka // //// 连接kafka
client, err := sarama.NewSyncProducer(config.GetConf().KafkaUrl, kafConfig) // //client, err := sarama.NewSyncProducer(config.GetConf().KafkaUrl, kafConfig)
if err != nil { // //if err != nil {
fmt.Println("producer closed, err:", err) // // fmt.Println("producer closed, err:", err)
return nil // // return nil
} // //}
defer client.Close() // //defer client.Close()
// 发送消息 // //// 发送消息
pid, offset, err := client.SendMessage(msg) // //pid, offset, err := client.SendMessage(msg)
if err != nil { // //if err != nil {
utils.Log(nil, "send msg failed, err:", err, pid, offset) // // utils.Log(nil, "send msg failed, err:", err, pid, offset)
return nil // // return nil
} // //}
return nil // return nil
} //}
//
func (n KafkaMq) Consume(name string, hand interface{}) { //func (n KafkaMq) Consume(name string, hand interface{}) {
consumer, err := sarama.NewConsumer(config.GetConf().KafkaUrl, nil) // consumer, err := sarama.NewConsumer(config.GetConf().KafkaUrl, nil)
if err != nil { // if err != nil {
utils.Log(nil, "kafka comsume", err.Error()) // utils.Log(nil, "kafka comsume", err.Error())
return // return
} // }
partitionList, err := consumer.Partitions(name) // 根据topic取到所有的分区 // partitionList, err := consumer.Partitions(name) // 根据topic取到所有的分区
if err != nil { // if err != nil {
utils.Log(nil, "kafka comsume", err.Error()) // utils.Log(nil, "kafka comsume", err.Error())
return // return
} // }
//utils.Log(nil,"kafka comsume",name,partitionList) // //utils.Log(nil,"kafka comsume",name,partitionList)
for partition := range partitionList { // 遍历所有的分区 // for partition := range partitionList { // 遍历所有的分区
// 针对每个分区创建一个对应的分区消费者 // // 针对每个分区创建一个对应的分区消费者
var offsetReDis, _ = redis.GetRedis().Incr(context.Background(), "kafka_consume:"+strconv.Itoa(int(partition))).Result() //保证多消费者不重复消费 // var offsetReDis, _ = redis.GetRedis().Incr(context.Background(), "kafka_consume:"+strconv.Itoa(int(partition))).Result() //保证多消费者不重复消费
var offset int64 = sarama.OffsetNewest // var offset int64 = sarama.OffsetNewest
if offsetReDis > 0 { // if offsetReDis > 0 {
//offset = int64(offsetReDis) // //offset = int64(offsetReDis)
} // }
pc, err := consumer.ConsumePartition(name, int32(partition), offset) // pc, err := consumer.ConsumePartition(name, int32(partition), offset)
//utils.Log(nil,"partion",int32(partition)) // //utils.Log(nil,"partion",int32(partition))
if err != nil { // if err != nil {
fmt.Printf("failed to start consumer for partition %d,err:%v\n", partition, err) // fmt.Printf("failed to start consumer for partition %d,err:%v\n", partition, err)
return // return
} // }
defer pc.AsyncClose() // defer pc.AsyncClose()
var wg sync.WaitGroup // var wg sync.WaitGroup
wg.Add(1) // wg.Add(1)
// 异步从每个分区消费信息 // // 异步从每个分区消费信息
go func(sarama.PartitionConsumer) { // go func(sarama.PartitionConsumer) {
for msg := range pc.Messages() { // for msg := range pc.Messages() {
defer wg.Done() // defer wg.Done()
var handler = hand.(func(tag uint64, ch interface{}, msg []byte)) // var handler = hand.(func(tag uint64, ch interface{}, msg []byte))
handler(0, nil, msg.Value) // handler(0, nil, msg.Value)
//utils.Log(nil,"hand msg",string(msg.Value),msg.Offset) // //utils.Log(nil,"hand msg",string(msg.Value),msg.Offset)
} // }
}(pc) // }(pc)
wg.Wait() // wg.Wait()
} // }
} //}
func (n KafkaMq) DelyConsume(name string, hand interface{}) { //func (n KafkaMq) DelyConsume(name string, hand interface{}) {
//
} //}

7
go.mod
View File

@ -117,17 +117,12 @@ require (
go.uber.org/atomic v1.9.0 // indirect go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.6.0 // indirect go.uber.org/multierr v1.6.0 // indirect
go.uber.org/zap v1.21.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/crypto v0.25.0 // indirect
golang.org/x/net v0.25.0 // indirect golang.org/x/net v0.25.0 // indirect
golang.org/x/sync v0.7.0 // indirect golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.22.0 // indirect golang.org/x/sys v0.22.0 // indirect
golang.org/x/text v0.16.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/time v0.1.0 // indirect
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect