From d4fa337e3f5ff273c3acc4d2b7a46a8a5b482ae8 Mon Sep 17 00:00:00 2001 From: wolter Date: Tue, 27 Aug 2024 15:45:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=B0=83=E6=95=B4=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93Id=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/data/app.go | 2 + app/data/merchant.go | 54 +++++++++++++++++++ app/data/merchat.go | 52 ------------------ app/data/order_callback_log.go | 2 + app/data/order_request_log.go | 2 + app/data/order_third_pay_log.go | 2 + app/data/orders.go | 2 + app/data/pay_channel.go | 2 + .../order_callback_log.go | 2 +- app/third/paymentService/payment_service.go | 6 +-- app/utils/snowflake/snow_flake.go | 27 ++++++++++ app/utils/snowflake/snow_flake_test.go | 11 ++++ bootstrap/bootstrap.go | 7 +++ 13 files changed, 115 insertions(+), 56 deletions(-) delete mode 100644 app/data/merchat.go create mode 100644 app/utils/snowflake/snow_flake.go create mode 100644 app/utils/snowflake/snow_flake_test.go diff --git a/app/data/app.go b/app/data/app.go index 475d0ce..abb09bd 100644 --- a/app/data/app.go +++ b/app/data/app.go @@ -3,6 +3,7 @@ package data import ( "PaymentCenter/app/http/entities" "PaymentCenter/app/models/appmodel" + "PaymentCenter/app/utils/snowflake" "database/sql" "xorm.io/builder" "xorm.io/xorm" @@ -27,6 +28,7 @@ func (m *AppRepo) AppList(conn builder.Cond, pageFilter entities.PageRequest, ap } func (m *AppRepo) AppInsertOne(app *appmodel.App) (int64, error) { + app.Id = snowflake.GetID() return m.repo.InsertOne(app) } diff --git a/app/data/merchant.go b/app/data/merchant.go index 0ad59c2..5732e89 100644 --- a/app/data/merchant.go +++ b/app/data/merchant.go @@ -1 +1,55 @@ package data + +import ( + "PaymentCenter/app/http/entities" + "PaymentCenter/app/models/merchantmodel" + "PaymentCenter/app/utils/snowflake" + "database/sql" + + "xorm.io/builder" + "xorm.io/xorm" +) + +type MerchantRepo struct { + repo xorm.Interface +} + +func NewMerchantRepo(repo xorm.Interface) *MerchantRepo { + return &MerchantRepo{ + repo: repo, + } +} + +func (m *MerchantRepo) MerchantList(conn builder.Cond, pageFilter entities.PageRequest, merchantList *[]merchantmodel.Merchant) (int64, error) { + repo := m.repo.Where(conn) + if pageFilter.Page > 0 { + repo = repo.Limit(pageFilter.PageSize, pageFilter.PageSize*(pageFilter.Page-1)) + } + return repo.Desc("create_time").FindAndCount(merchantList) +} + +func (m *MerchantRepo) MerchantInsertOne(merchant *merchantmodel.Merchant) (int64, error) { + merchant.Id = snowflake.GetID() + return m.repo.InsertOne(merchant) +} + +func (m *MerchantRepo) MerchantDelete(merchant *merchantmodel.Merchant, conn builder.Cond) (int64, error) { + return m.repo.Where(conn).Delete(merchant) +} + +// columns 参数为要更新的字段 +func (m *MerchantRepo) MerchantUpdate(merchant *merchantmodel.Merchant, conn builder.Cond, columns ...string) (int64, error) { + return m.repo.Where(conn).MustCols(columns...).Update(merchant) +} + +func (m *MerchantRepo) MerchantDetail(merchant *merchantmodel.Merchant, conn builder.Cond) (bool, error) { + return m.repo.Where(conn).Get(merchant) +} + +func (m *MerchantRepo) MerchantFindOne(merchant *merchantmodel.Merchant, conn builder.Cond, columns ...string) (*merchantmodel.Merchant, error) { + has, err := m.repo.Where(conn).Get(merchant) + if !has { + return nil, sql.ErrNoRows + } + return merchant, err +} diff --git a/app/data/merchat.go b/app/data/merchat.go deleted file mode 100644 index 3b85a0b..0000000 --- a/app/data/merchat.go +++ /dev/null @@ -1,52 +0,0 @@ -package data - -import ( - "PaymentCenter/app/http/entities" - "PaymentCenter/app/models/merchantmodel" - "database/sql" - "xorm.io/builder" - "xorm.io/xorm" -) - -type MerchantRepo struct { - repo xorm.Interface -} - -func NewMerchantRepo(repo xorm.Interface) *MerchantRepo { - return &MerchantRepo{ - repo: repo, - } -} - -func (m *MerchantRepo) MerchantList(conn builder.Cond, pageFilter entities.PageRequest, merchantList *[]merchantmodel.Merchant) (int64, error) { - repo := m.repo.Where(conn) - if pageFilter.Page > 0 { - repo = repo.Limit(pageFilter.PageSize, pageFilter.PageSize*(pageFilter.Page-1)) - } - return repo.Desc("create_time").FindAndCount(merchantList) -} - -func (m *MerchantRepo) MerchantInsertOne(merchant *merchantmodel.Merchant) (int64, error) { - return m.repo.InsertOne(merchant) -} - -func (m *MerchantRepo) MerchantDelete(merchant *merchantmodel.Merchant, conn builder.Cond) (int64, error) { - return m.repo.Where(conn).Delete(merchant) -} - -// columns 参数为要更新的字段 -func (m *MerchantRepo) MerchantUpdate(merchant *merchantmodel.Merchant, conn builder.Cond, columns ...string) (int64, error) { - return m.repo.Where(conn).MustCols(columns...).Update(merchant) -} - -func (m *MerchantRepo) MerchantDetail(merchant *merchantmodel.Merchant, conn builder.Cond) (bool, error) { - return m.repo.Where(conn).Get(merchant) -} - -func (m *MerchantRepo) MerchantFindOne(merchant *merchantmodel.Merchant, conn builder.Cond, columns ...string) (*merchantmodel.Merchant, error) { - has, err := m.repo.Where(conn).Get(merchant) - if !has { - return nil, sql.ErrNoRows - } - return merchant, err -} diff --git a/app/data/order_callback_log.go b/app/data/order_callback_log.go index e8fa2f2..f90e530 100644 --- a/app/data/order_callback_log.go +++ b/app/data/order_callback_log.go @@ -3,6 +3,7 @@ package data import ( "PaymentCenter/app/http/entities" "PaymentCenter/app/models/ordercallbacklogmodel" + "PaymentCenter/app/utils/snowflake" "xorm.io/builder" "xorm.io/xorm" ) @@ -26,6 +27,7 @@ func (m *OrderCallbackLogRepo) OrderCallbackLogList(conn builder.Cond, pageFilte } func (m *OrderCallbackLogRepo) OrderCallbackLogInsertOne(orderLog *ordercallbacklogmodel.OrderCallbackLog) (int64, error) { + orderLog.Id = snowflake.GetID() return m.repo.InsertOne(orderLog) } diff --git a/app/data/order_request_log.go b/app/data/order_request_log.go index 0fc2126..fade6cf 100644 --- a/app/data/order_request_log.go +++ b/app/data/order_request_log.go @@ -3,6 +3,7 @@ package data import ( "PaymentCenter/app/http/entities" "PaymentCenter/app/models/orderrequestlogmodel" + "PaymentCenter/app/utils/snowflake" "xorm.io/builder" "xorm.io/xorm" ) @@ -26,6 +27,7 @@ func (m *OrderRequestLogRepo) OrderRequestLogList(conn builder.Cond, pageFilter } func (m *OrderRequestLogRepo) OrderRequestLogInsertOne(orderLog *orderrequestlogmodel.OrderRequestLog) (int64, error) { + orderLog.Id = snowflake.GetID() return m.repo.InsertOne(orderLog) } diff --git a/app/data/order_third_pay_log.go b/app/data/order_third_pay_log.go index bbce93e..9e18ad6 100644 --- a/app/data/order_third_pay_log.go +++ b/app/data/order_third_pay_log.go @@ -3,6 +3,7 @@ package data import ( "PaymentCenter/app/http/entities" "PaymentCenter/app/models/orderthirdpaylogmodel" + "PaymentCenter/app/utils/snowflake" "xorm.io/builder" "xorm.io/xorm" ) @@ -26,6 +27,7 @@ func (m *OrderThirdPayLogRepo) OrderThirdPayLogList(conn builder.Cond, pageFilte } func (m *OrderThirdPayLogRepo) OrderThirdPayLogInsertOne(orderLog *orderthirdpaylogmodel.OrderThirdPayLog) (int64, error) { + orderLog.Id = snowflake.GetID() return m.repo.InsertOne(orderLog) } diff --git a/app/data/orders.go b/app/data/orders.go index d5923aa..981d6f2 100644 --- a/app/data/orders.go +++ b/app/data/orders.go @@ -3,6 +3,7 @@ package data import ( "PaymentCenter/app/http/entities" "PaymentCenter/app/models/ordersmodel" + "PaymentCenter/app/utils/snowflake" "database/sql" "xorm.io/builder" "xorm.io/xorm" @@ -27,6 +28,7 @@ func (m *OrderRepo) OrderList(conn builder.Cond, pageFilter entities.PageRequest } func (m *OrderRepo) OrderInsertOne(order *ordersmodel.Orders) (int64, error) { + order.Id = snowflake.GetID() return m.repo.InsertOne(order) } diff --git a/app/data/pay_channel.go b/app/data/pay_channel.go index b6438c8..2783fde 100644 --- a/app/data/pay_channel.go +++ b/app/data/pay_channel.go @@ -3,6 +3,7 @@ package data import ( "PaymentCenter/app/http/entities" "PaymentCenter/app/models/paychannelmodel" + "PaymentCenter/app/utils/snowflake" "database/sql" "xorm.io/builder" "xorm.io/xorm" @@ -27,6 +28,7 @@ func (m *PayChannelRepo) PayChannelList(conn builder.Cond, pageFilter entities.P } func (m *PayChannelRepo) PayChannelInsertOne(payChannel *paychannelmodel.PayChannel) (int64, error) { + payChannel.Id = snowflake.GetID() return m.repo.InsertOne(payChannel) } diff --git a/app/models/ordercallbacklogmodel/order_callback_log.go b/app/models/ordercallbacklogmodel/order_callback_log.go index c736749..6b3f686 100644 --- a/app/models/ordercallbacklogmodel/order_callback_log.go +++ b/app/models/ordercallbacklogmodel/order_callback_log.go @@ -13,7 +13,7 @@ var ( // 实体 type OrderCallbackLog struct { - Id int64 `xorm:"'id' bigint(20) pk autoincr"` + Id int64 OrderId int64 `xorm:"'order_id' bigint(20)"` MerchantRequest string `xorm:"'merchant_request' JSON"` Status int `xorm:"'status' int(11)"` diff --git a/app/third/paymentService/payment_service.go b/app/third/paymentService/payment_service.go index dced275..93e0db3 100644 --- a/app/third/paymentService/payment_service.go +++ b/app/third/paymentService/payment_service.go @@ -8,7 +8,6 @@ import ( "PaymentCenter/app/third/paymentService/payCommon" "context" "encoding/json" - "fmt" "strconv" ) @@ -85,10 +84,11 @@ func PaymentService(c context.Context, payOrderRequest PayOrderRequest) PayOrder // 记录日志 go func() { orderId := payOrderRequest.OrderId - payCallback := fmt.Sprintf("{%s}", info) + payCallback, _ := json.Marshal(info) + //payCallback := fmt.Sprintf("{%s}", info) payParam, _ := json.Marshal(payOrderRequest) merchantCallback, _ := json.Marshal(payOrderResponse) - SaveLog(orderId, common.THIRD_ORDER_TYPE_PAY, payCallback, string(payParam), string(merchantCallback), logStatus) + SaveLog(orderId, common.THIRD_ORDER_TYPE_PAY, string(payCallback), string(payParam), string(merchantCallback), logStatus) }() return payOrderResponse } diff --git a/app/utils/snowflake/snow_flake.go b/app/utils/snowflake/snow_flake.go new file mode 100644 index 0000000..1e214e5 --- /dev/null +++ b/app/utils/snowflake/snow_flake.go @@ -0,0 +1,27 @@ +package snowflake + +import ( + sf "github.com/go-pay/util/snowflake" + "sync" +) + +var once sync.Once +var snowflake *sf.Node + +func InitSnowflake(workerID int64) (err error) { + // 创建雪花ID生成器 + if snowflake == nil { + once.Do(func() { + snowflake, err = sf.NewNode(workerID) + }) + } + + return err +} + +func GetID() int64 { + if snowflake == nil { + return 0 + } + return snowflake.Generate().Int64() +} diff --git a/app/utils/snowflake/snow_flake_test.go b/app/utils/snowflake/snow_flake_test.go new file mode 100644 index 0000000..f130a63 --- /dev/null +++ b/app/utils/snowflake/snow_flake_test.go @@ -0,0 +1,11 @@ +package snowflake + +import "testing" + +func TestInitSnowflake(t *testing.T) { + err := InitSnowflake(1) + if err != nil { + t.Error(err) + } + t.Log(GetID()) +} diff --git a/bootstrap/bootstrap.go b/bootstrap/bootstrap.go index ef9286c..264b2df 100644 --- a/bootstrap/bootstrap.go +++ b/bootstrap/bootstrap.go @@ -3,6 +3,7 @@ package bootstrap import ( "PaymentCenter/app/jobs" "PaymentCenter/app/jobs/basejob" + "PaymentCenter/app/utils/snowflake" "PaymentCenter/config" "github.com/qit-team/snow-core/db" "github.com/qit-team/snow-core/kernel/close" @@ -74,6 +75,12 @@ func Bootstrap(conf *config.Config) (err error) { // //utils.Log(nil, "nacos err", err) + // 目前使用单机,后续分布式需要改 + err = snowflake.InitSnowflake(1) + if err != nil { + return err + } + //注册job register,为了非job模式的消息入队调用 basejob.SetJobRegister(jobs.RegisterWorker) return nil