diff --git a/app/console/command.go b/app/console/command.go index c77f187..fb8e8de 100644 --- a/app/console/command.go +++ b/app/console/command.go @@ -5,9 +5,16 @@ import ( "PaymentCenter/app/data" "PaymentCenter/app/http/entities" "PaymentCenter/app/models/ordersmodel" + "PaymentCenter/app/models/orderthirdpaylogmodel" + "PaymentCenter/app/third/paymentService" + "PaymentCenter/app/third/paymentService/payCommon" "PaymentCenter/app/utils" + "PaymentCenter/config" + "context" + "encoding/json" "github.com/qit-team/snow-core/command" "strconv" + "sync" "time" "xorm.io/builder" ) @@ -25,7 +32,7 @@ func closeOrder() { repo := data.NewOrderRepo(ordersmodel.GetInstance().GetDb()) // 拼接条件 cond := builder.NewCond() - cond = cond.And(builder.Eq{"status": common.ORDER_STATUS_PAYING}, builder.Lt{"create_time": time.Now().Add(-time.Hour)}) + cond = cond.And(builder.Eq{"status": common.ORDER_STATUS_PAYING}, builder.Lt{"create_time": time.Now().Add(-time.Second * time.Duration(config.GetConf().CronConfig.CloseOrderTime))}) order := make([]ordersmodel.Orders, 0) total, err := repo.OrderList(cond, entities.PageRequest{}, &order) @@ -48,31 +55,119 @@ func closeOrder() { utils.Log(nil, "关闭订单,修改订单状态成功", "count="+strconv.Itoa(len(order))) } -// 定时查询支付中的订单, 主动查询订单支付状态 +// 主动查询订单支付状态 func queryOrder() { var now = time.Now().Format(time.DateTime) utils.Log(nil, "主动查询订单支付状态", now) + ctx := context.Background() // 查询未支付的订单 repo := data.NewOrderRepo(ordersmodel.GetInstance().GetDb()) // 拼接条件 cond := builder.NewCond() - cond = cond.And(builder.Eq{"status": common.ORDER_STATUS_PAYING}, builder.Gt{"create_time": time.Now().Add(-time.Second)}) - order := make([]ordersmodel.Orders, 0) - total, err := repo.OrderList(cond, entities.PageRequest{}, &order) + config.GetConf() + cond = cond.And(builder.Eq{"status": common.ORDER_STATUS_PAYING}, builder.Gt{"orders.create_time": time.Now().Add(-time.Second * time.Duration(config.GetConf().CronConfig.QueryOrderTime))}) + order := make([]ordersmodel.OrdersLeftPayChannelList, 0) + err := repo.OrdersLeftPayChannelList(cond, entities.PageRequest{}, &order) if err != nil { utils.Log(nil, "主动查询订单支付状态,查询未付中订单失败", err) return - } else if total > 0 { - // 发起查询上游支付 - for _, v := range order { - go func(order ordersmodel.Orders) { - // 发起查询 - utils.Log(nil, "主动查询订单支付状态,发起查询", order.Id) - // 解析上游结果 + } else if len(order) > 0 { + ch := make(chan struct{}, config.GetConf().CronConfig.ConcurrentNumber) + wg := sync.WaitGroup{} - // 修改订单状态 - }(v) + for index := range order { + ch <- struct{}{} + wg.Add(1) + orderInfo := order[index] + + // 发起查询上游支付 + go func(orderInfo ordersmodel.OrdersLeftPayChannelList) { + defer func() { + <-ch + wg.Done() + }() + + query := paymentService.PayOrderQueryRequest{ + OrderId: orderInfo.Id, + } + switch orderInfo.ChannelType { + case common.PAY_CHANNEL_WECHAT_H5, common.PAY_CHANNEL_WECHAT_JSAPI, common.PAY_CHANNEL_WECHAT_NATIVE, common.PAY_CHANNEL_WECHAT_APP, common.PAY_CHANNEL_WECHAT_MINI: + _ = json.Unmarshal([]byte(orderInfo.ExtJson), &query.Wx) + query.PayChannel = payCommon.PAY_CHANNLE_TYPE_WECHAT + case common.PAY_CHANNEL_ALIPAY_JSAPI, common.PAY_CHANNEL_ALIPAY_WEB, common.PAY_CHANNEL_ALIPAY_MINI: + query.PayChannel = payCommon.PAY_CHANNLE_TYPE_ZFB + _ = json.Unmarshal([]byte(orderInfo.ExtJson), &query.Ali) + } + + // 发起查询 + result := paymentService.PayOrderQuery(ctx, query) + utils.Log(nil, "主动查询订单支付状态,上游返回数据", result) + // 查询成功,校验状态 + var status int + if result.Code == payCommon.PAY_SUCCESS_CODE { + switch result.Result.TradeState { + case "SUCCESS": + // 成功 + status = common.ORDER_STATUS_PAYED + case "REFUND": + // 退款 + + case "NOTPAY": + // 未支付 + return + case "CLOSED": + // 关闭 + status = common.ORDER_STATUS_CLOSE + + } + // 回调通知下游 todo + + // 更新订单状态 todo + orderUpdate := ordersmodel.Orders{ + Id: orderInfo.Id, + Status: status, + } + + session := ordersmodel.GetInstance().GetDb().NewSession() + if err = session.Begin(); err != nil { + utils.Log(nil, "主动查询订单支付状态,更新订单状态失败", err) + return + } + defer func() { + if err != nil { + session.Rollback() + } else { + err = session.Commit() + } + }() + orderLogRepo := data.NewOrderThirdPayLogRepo(session) + orderRepo := data.NewOrderRepo(session) + + conn := builder.NewCond() + conn = conn.And(builder.Eq{"id": orderInfo.Id}) + _, err = orderRepo.OrderUpdate(&orderUpdate, conn) + if err != nil { + utils.Log(nil, "主动查询订单支付状态,更新订单状态失败", err) + return + } + + // 写入日志 + log := orderthirdpaylogmodel.OrderThirdPayLog{ + OrderId: orderInfo.Id, + PayCallback: "", + Status: 0, + MerchantParam: "", + MerchantCallback: "", + } + _, err = orderLogRepo.OrderThirdPayLogInsertOne(&log) + if err != nil { + utils.Log(nil, "主动查询订单支付状态,写入支付日志失败", err) + } + + } + }(orderInfo) } + wg.Wait() } } diff --git a/app/console/kernel.go b/app/console/kernel.go index 7ef72d9..88316d4 100644 --- a/app/console/kernel.go +++ b/app/console/kernel.go @@ -1,6 +1,8 @@ package console import ( + "PaymentCenter/config" + "fmt" "github.com/robfig/cron" ) @@ -9,6 +11,7 @@ import ( * @wiki https://godoc.org/github.com/robfig/cron */ func RegisterSchedule(c *cron.Cron) { + fmt.Println(config.GetConf().CronConfig) //c.AddFunc("0 30 * * * *", test) //c.AddFunc("@hourly", test) //c.AddFunc("@every 10s", test) diff --git a/app/constants/common/common.go b/app/constants/common/common.go index c961f93..6439c26 100644 --- a/app/constants/common/common.go +++ b/app/constants/common/common.go @@ -22,7 +22,7 @@ const ( ADMIN_USER_NAME = "User-Name" ADMIN_USER_INCLUDEUSERS = "Include-Users" - // '订单状态,待支付、支付中、支付成功、支付失败、订单关闭', + // '订单状态,1待支付、2支付中、3支付成功、4支付失败、5订单关闭', ORDER_STATUS_WAITPAY = 1 ORDER_STATUS_PAYING = 2 ORDER_STATUS_PAYED = 3 diff --git a/app/data/order_log.go b/app/data/order_log.go deleted file mode 100644 index 36db815..0000000 --- a/app/data/order_log.go +++ /dev/null @@ -1,39 +0,0 @@ -package data - -import ( - "PaymentCenter/app/http/entities" - "PaymentCenter/app/models/orderlogmodel" - "xorm.io/builder" - "xorm.io/xorm" -) - -type OrderLogRepo struct { - repo xorm.Interface -} - -func NewOrderLogRepo(repo xorm.Interface) *OrderLogRepo { - return &OrderLogRepo{ - repo: repo, - } -} - -func (m *OrderLogRepo) OrderLogList(conn builder.Cond, pageFilter entities.PageRequest, orderLogList *[]orderlogmodel.OrderLog) (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(orderLogList) -} - -func (m *OrderLogRepo) OrderLogInsertOne(orderLog *orderlogmodel.OrderLog) (int64, error) { - return m.repo.InsertOne(orderLog) -} - -func (m *OrderLogRepo) OrderLogDelete(orderLog *orderlogmodel.OrderLog, conn builder.Cond) (int64, error) { - return m.repo.Where(conn).Delete(orderLog) -} - -// columns 参数为要更新的字段 -func (m *OrderLogRepo) OrderLogUpdate(orderLog *orderlogmodel.OrderLog, conn builder.Cond, columns ...string) (int64, error) { - return m.repo.Where(conn).MustCols(columns...).Update(orderLog) -} diff --git a/app/data/order_request_log.go b/app/data/order_request_log.go new file mode 100644 index 0000000..c0c0568 --- /dev/null +++ b/app/data/order_request_log.go @@ -0,0 +1,39 @@ +package data + +import ( + "PaymentCenter/app/http/entities" + "PaymentCenter/app/models/orderrequestlogmodel" + "xorm.io/builder" + "xorm.io/xorm" +) + +type OrderRequestLogRepo struct { + repo xorm.Interface +} + +func NewOrderRequestLogRepo(repo xorm.Interface) *OrderRequestLogRepo { + return &OrderRequestLogRepo{ + repo: repo, + } +} + +func (m *OrderRequestLogRepo) OrderRequestLogList(conn builder.Cond, pageFilter entities.PageRequest, orderLogList *[]orderrequestlogmodel.OrderRequestLog) (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(orderLogList) +} + +func (m *OrderRequestLogRepo) OrderRequestLogInsertOne(orderLog *orderrequestlogmodel.OrderRequestLog) (int64, error) { + return m.repo.InsertOne(orderLog) +} + +func (m *OrderRequestLogRepo) OrderRequestLogDelete(orderLog *orderrequestlogmodel.OrderRequestLog, conn builder.Cond) (int64, error) { + return m.repo.Where(conn).Delete(orderLog) +} + +// columns 参数为要更新的字段 +func (m *OrderRequestLogRepo) OrderRequestLogUpdate(orderLog *orderrequestlogmodel.OrderRequestLog, conn builder.Cond, columns ...string) (int64, error) { + return m.repo.Where(conn).MustCols(columns...).Update(orderLog) +} diff --git a/app/data/order_third_pay_log.go b/app/data/order_third_pay_log.go new file mode 100644 index 0000000..bbce93e --- /dev/null +++ b/app/data/order_third_pay_log.go @@ -0,0 +1,39 @@ +package data + +import ( + "PaymentCenter/app/http/entities" + "PaymentCenter/app/models/orderthirdpaylogmodel" + "xorm.io/builder" + "xorm.io/xorm" +) + +type OrderThirdPayLogRepo struct { + repo xorm.Interface +} + +func NewOrderThirdPayLogRepo(repo xorm.Interface) *OrderThirdPayLogRepo { + return &OrderThirdPayLogRepo{ + repo: repo, + } +} + +func (m *OrderThirdPayLogRepo) OrderThirdPayLogList(conn builder.Cond, pageFilter entities.PageRequest, orderLogList *[]orderthirdpaylogmodel.OrderThirdPayLog) (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(orderLogList) +} + +func (m *OrderThirdPayLogRepo) OrderThirdPayLogInsertOne(orderLog *orderthirdpaylogmodel.OrderThirdPayLog) (int64, error) { + return m.repo.InsertOne(orderLog) +} + +func (m *OrderThirdPayLogRepo) OrderThirdPayLogDelete(orderLog *orderthirdpaylogmodel.OrderThirdPayLog, conn builder.Cond) (int64, error) { + return m.repo.Where(conn).Delete(orderLog) +} + +// columns 参数为要更新的字段 +func (m *OrderThirdPayLogRepo) OrderThirdPayLogUpdate(orderLog *orderthirdpaylogmodel.OrderThirdPayLog, conn builder.Cond, columns ...string) (int64, error) { + return m.repo.Where(conn).MustCols(columns...).Update(orderLog) +} diff --git a/app/data/orders.go b/app/data/orders.go index c9bd442..9bc6c7e 100644 --- a/app/data/orders.go +++ b/app/data/orders.go @@ -49,3 +49,13 @@ func (m *OrderRepo) OrdersBackendList(conn builder.Cond, pageFilter entities.Pag Join("left", "pay_channel", "pay_channel.id = orders.pay_id") return repo.Desc("create_time").FindAndCount(orderList) } + +func (m *OrderRepo) OrdersLeftPayChannelList(conn builder.Cond, pageFilter entities.PageRequest, orderList *[]ordersmodel.OrdersLeftPayChannelList) error { + repo := m.repo.Select(`orders.*,pay_channel.channel_type,pay_channel.app_id ,pay_channel.ext_json`). + Where(conn) + if pageFilter.Page > 0 { + repo = repo.Limit(pageFilter.PageSize, pageFilter.PageSize*(pageFilter.Page-1)) + } + repo = repo.Join("left", "pay_channel", "pay_channel.id = orders.pay_id") + return repo.Find(orderList) +} diff --git a/app/http/controllers/backend/order.go b/app/http/controllers/backend/order.go index 5c577a9..15d82f0 100644 --- a/app/http/controllers/backend/order.go +++ b/app/http/controllers/backend/order.go @@ -5,8 +5,9 @@ import ( "PaymentCenter/app/http/controllers" "PaymentCenter/app/http/entities" "PaymentCenter/app/http/entities/backend" - "PaymentCenter/app/models/orderlogmodel" + "PaymentCenter/app/models/orderrequestlogmodel" "PaymentCenter/app/models/ordersmodel" + "PaymentCenter/app/models/orderthirdpaylogmodel" "PaymentCenter/app/services" "github.com/ahmetb/go-linq/v3" "github.com/gin-gonic/gin" @@ -36,16 +37,22 @@ func OrderList(c *gin.Context) { func OrderLogsList(c *gin.Context) { req, _ := controllers.GetRequest(c).(*backend.OrderLogsListRequest) req.SetDefault() - orderLogList, total, code := services.OrderLogsList(*req) + requestLog, thirdLog, code := services.OrderLogsList(*req) - result := make([]backend.OrderLogResponse, 0, len(orderLogList)) - linq.From(orderLogList).SelectT(func(in orderlogmodel.OrderLog) (out backend.OrderLogResponse) { + requestLogList := make([]backend.OrderRequestLogResponse, 0, len(requestLog)) + linq.From(requestLog).SelectT(func(in orderrequestlogmodel.OrderRequestLog) (out backend.OrderRequestLogResponse) { out.ResponseFromDb(in) return - }).ToSlice(&result) - data := entities.PageRsp{ - Total: total, - Data: result, - } - controllers.HandCodeRes(c, data, code) + }).ToSlice(&requestLogList) + + thirdLogList := make([]backend.OrderThirdLogResponse, 0, len(thirdLog)) + linq.From(thirdLog).SelectT(func(in orderthirdpaylogmodel.OrderThirdPayLog) (out backend.OrderThirdLogResponse) { + out.ResponseFromDb(in) + return + }).ToSlice(&thirdLogList) + + controllers.HandCodeRes(c, gin.H{ + "request_log_list": requestLogList, + "third_log_list": thirdLogList, + }, code) } diff --git a/app/http/entities/backend/order.go b/app/http/entities/backend/order.go index e154ff8..8ff87bd 100644 --- a/app/http/entities/backend/order.go +++ b/app/http/entities/backend/order.go @@ -2,8 +2,9 @@ package backend import ( "PaymentCenter/app/http/entities" - "PaymentCenter/app/models/orderlogmodel" + "PaymentCenter/app/models/orderrequestlogmodel" "PaymentCenter/app/models/ordersmodel" + "PaymentCenter/app/models/orderthirdpaylogmodel" "PaymentCenter/app/utils" "github.com/pkg/errors" @@ -66,9 +67,9 @@ func (o *OrderListRequest) ValidateRequest() (r OrderList, err error) { type OrdersResponse struct { Id int64 `json:"id"` MerchantId int64 `json:"merchant_id"` - PayId int64 `json:"pay_id"` + PayChannelId int64 `json:"pay_channel_id"` AppId int64 `json:"app_id"` - MerchantOrderId string `json:"merchant_order_id"` + OutTreadNo string `json:"out_tread_no"` Status int `json:"status"` OrderType int `json:"order_type"` Amount int `json:"amount"` @@ -87,16 +88,12 @@ type OrdersResponse struct { func (o *OrdersResponse) ResponseFromDb(db ordersmodel.OrdersBackendList) { o.Id = db.Id o.MerchantId = db.MerchantId - o.PayId = db.PayId + o.PayChannelId = db.PayChannelId o.AppId = db.AppId - o.MerchantOrderId = db.MerchantOrderId + o.OutTreadNo = db.OutTreadNo o.Status = db.Status o.OrderType = db.OrderType o.Amount = db.Amount - o.IpAddress = db.IpAddress - o.MerchantRequest = db.MerchantRequest - o.MerchantResponse = db.MerchantResponse - o.OrderResponse = db.OrderResponse o.ExtJson = db.ExtJson o.CreateTime = db.CreateTime.Format("2006-01-02 15:04:05") o.UpdateTime = db.UpdateTime.Format("2006-01-02 15:04:05") @@ -110,17 +107,37 @@ type OrderLogsListRequest struct { entities.PageRequest } -type OrderLogResponse struct { +type OrderRequestLogResponse struct { + Id int64 `json:"id"` + IpAddress string `json:"ip_address"` + OrderId int64 `json:"order_id"` + MerchantRequest string `json:"merchant_request"` + MerchantResponse string `json:"merchant_response"` + CreateTime string `json:"create_time"` + Status int `json:"status"` +} + +func (o *OrderRequestLogResponse) ResponseFromDb(db orderrequestlogmodel.OrderRequestLog) { + o.Id = db.Id + o.OrderId = db.OrderId + o.IpAddress = db.IpAddress + o.Status = db.Status + o.MerchantRequest = db.MerchantRequest + o.MerchantResponse = db.MerchantResponse + o.CreateTime = db.CreateTime.Format("2006-01-02 15:04:05") +} + +type OrderThirdLogResponse struct { Id int64 `json:"id"` OrderId int64 `json:"order_id"` + CreateTime string `json:"create_time"` PayCallback string `json:"pay_callback"` Status int `json:"status"` MerchantParam string `json:"merchant_param"` MerchantCallback string `json:"merchant_callback"` - CreateTime string `json:"create_time"` } -func (o *OrderLogResponse) ResponseFromDb(db orderlogmodel.OrderLog) { +func (o *OrderThirdLogResponse) ResponseFromDb(db orderthirdpaylogmodel.OrderThirdPayLog) { o.Id = db.Id o.OrderId = db.OrderId o.PayCallback = db.PayCallback diff --git a/app/http/entities/backend/pay_channel.go b/app/http/entities/backend/pay_channel.go index e6b3af2..2fe10aa 100644 --- a/app/http/entities/backend/pay_channel.go +++ b/app/http/entities/backend/pay_channel.go @@ -30,7 +30,7 @@ func (p *PayChannelResponse) ResponseFromDb(db paychannelmodel.PayChannel) { p.ExpireTime = db.ExpireTime.Format("2006-01-02 15:04:05") p.CreateTime = db.CreateTime.Format("2006-01-02 15:04:05") - switch p.ChannelType { + switch db.ChannelType { case common.PAY_CHANNEL_WECHAT_H5, common.PAY_CHANNEL_WECHAT_JSAPI, common.PAY_CHANNEL_WECHAT_NATIVE, common.PAY_CHANNEL_WECHAT_APP, common.PAY_CHANNEL_WECHAT_MINI: _ = json.Unmarshal([]byte(db.ExtJson), &p.WechatPayChannel) case common.PAY_CHANNEL_ALIPAY_JSAPI, common.PAY_CHANNEL_ALIPAY_WEB, common.PAY_CHANNEL_ALIPAY_MINI: diff --git a/app/models/appmodel/app.go b/app/models/appmodel/app.go index b1b008a..487f466 100644 --- a/app/models/appmodel/app.go +++ b/app/models/appmodel/app.go @@ -20,13 +20,13 @@ type App struct { Status int32 `xorm:"'status' tinyint(2)"` KeyType int32 `xorm:"'key_type' tinyint(2)"` PublicKey string `xorm:"'public_key' varchar(1024)"` - PrivateKey string `xorm:"'private_key' varchar(1024)"` + PrivateKey string `xorm:"'private_key' TEXT"` MerchantPublicKey string `xorm:"'merchant_public_key' varchar(1024)"` - NotifyUrl string `xorm:"'notify_url' varchar(128)"` - WhiteIp string `xorm:"'white_ip' varchar(128)"` CreateTime time.Time `xorm:"'create_time' datetime created"` UpdateTime time.Time `xorm:"'update_time' timestamp updated"` DeleteTime time.Time `xorm:"'delete_time' timestamp deleted"` + NotifyUrl string `xorm:"'notify_url' varchar(128)"` + WhiteIp string `xorm:"'white_ip' varchar(255)"` } // 表名 diff --git a/app/models/merchantmodel/merchant.go b/app/models/merchantmodel/merchant.go index 5dbb16d..34e816f 100644 --- a/app/models/merchantmodel/merchant.go +++ b/app/models/merchantmodel/merchant.go @@ -18,10 +18,10 @@ type Merchant struct { Contact string `xorm:"'contact' varchar(128)"` Phone string `xorm:"'phone' varchar(11)"` Remark string `xorm:"'remark' varchar(1024)"` - Creator int `xorm:"'creator' int(10)"` CreateTime time.Time `xorm:"'create_time' datetime created"` UpdateTime time.Time `xorm:"'update_time' timestamp updated"` DeleteTime time.Time `xorm:"'delete_time' timestamp deleted"` + Creator int `xorm:"'creator' int(11)"` } // 表名 diff --git a/app/models/orderrequestlogmodel/order_request_log.go b/app/models/orderrequestlogmodel/order_request_log.go new file mode 100644 index 0000000..961b6e6 --- /dev/null +++ b/app/models/orderrequestlogmodel/order_request_log.go @@ -0,0 +1,43 @@ +package orderrequestlogmodel + +import ( + "github.com/qit-team/snow-core/db" + "sync" + "time" +) + +var ( + once sync.Once + m *OrderRequestLogModel +) + +// 实体 +type OrderRequestLog struct { + Id int64 + IpAddress string `xorm:"'ip_address' varchar(16)"` + OrderId int64 `xorm:"'order_id' bigint(20)"` + MerchantRequest string `xorm:"'merchant_request' JSON"` + MerchantResponse string `xorm:"'merchant_response' JSON"` + CreateTime time.Time `xorm:"'create_time' datetime created"` + UpdateTime time.Time `xorm:"'update_time' timestamp updated"` + Status int `xorm:"'status' TINYINT"` +} + +// 表名 +func (m *OrderRequestLog) TableName() string { + return "order_request_log" +} + +// 私有化,防止被外部new +type OrderRequestLogModel struct { + db.Model //组合基础Model,集成基础Model的属性和方法 +} + +// 单例模式 +func GetInstance() *OrderRequestLogModel { + once.Do(func() { + m = new(OrderRequestLogModel) + //m.DiName = "" //设置数据库实例连接,默认db.SingletonMain + }) + return m +} diff --git a/app/models/ordersmodel/orders.go b/app/models/ordersmodel/orders.go index 2d8b1c2..798bddf 100644 --- a/app/models/ordersmodel/orders.go +++ b/app/models/ordersmodel/orders.go @@ -13,29 +13,32 @@ var ( // 实体 type Orders struct { - Id int64 - MerchantId int64 `xorm:"'merchant_id' bigint(20)"` - PayId int64 `xorm:"'pay_id' bigint(20)"` - AppId int64 `xorm:"'app_id' bigint(20)"` - MerchantOrderId string `xorm:"'merchant_order_id' varchar(32)"` - Status int `xorm:"'status' int(11)"` - OrderType int `xorm:"'order_type' int(11)"` - Amount int `xorm:"'amount' int(11)"` - IpAddress string `xorm:"'ip_address' varchar(128)"` - MerchantRequest string `xorm:"'merchant_request' varchar(2048)"` - MerchantResponse string `xorm:"'merchant_response' varchar(255)"` - OrderResponse string `xorm:"'order_response' varchar(255)"` - ExtJson string `xorm:"'ext_json' varchar(1024)"` - CreateTime time.Time `xorm:"'create_time' datetime created"` - UpdateTime time.Time `xorm:"'update_time' timestamp updated"` - DeleteTime time.Time `xorm:"'delete_time' timestamp deleted"` + Id int64 + MerchantId int64 `xorm:"'merchant_id' bigint(20)"` + PayChannelId int64 `xorm:"'pay_channel_id' bigint(20)"` + AppId int64 `xorm:"'app_id' bigint(20)"` + OutTreadNo string `xorm:"'out_tread_no' varchar(50)"` + OrderType int `xorm:"'order_type' TINYINT"` + Amount int `xorm:"'amount' int(11)"` + ExtJson string `xorm:"'ext_json' varchar(1024)"` + CreateTime time.Time `xorm:"'create_time' datetime created"` + UpdateTime time.Time `xorm:"'update_time' timestamp updated"` + Status int `xorm:"'status' TINYINT"` + DeleteTime time.Time `xorm:"'delete_time' timestamp deleted"` } + type OrdersBackendList struct { Orders `xorm:"extends"` MerchantName string `xorm:"'merchant_name' varchar(128)"` PayName string `xorm:"'pay_name' varchar(128)"` AppName string `xorm:"'app_name' varchar(128)"` } +type OrdersLeftPayChannelList struct { + Orders `xorm:"extends"` + ChannelType int `xorm:"'channel_type' int(11)"` + AppId string `xorm:"'app_id' varchar(255)"` + ExtJson string `xorm:"'ext_json' JSON"` +} // 表名 func (m *Orders) TableName() string { diff --git a/app/models/orderlogmodel/order_log.go b/app/models/orderthirdpaylogmodel/order_third_pay_log.go similarity index 67% rename from app/models/orderlogmodel/order_log.go rename to app/models/orderthirdpaylogmodel/order_third_pay_log.go index 1a370b8..4ef23b6 100644 --- a/app/models/orderlogmodel/order_log.go +++ b/app/models/orderthirdpaylogmodel/order_third_pay_log.go @@ -1,4 +1,4 @@ -package orderlogmodel +package orderthirdpaylogmodel import ( "github.com/qit-team/snow-core/db" @@ -8,34 +8,34 @@ import ( var ( once sync.Once - m *OrderLogModel + m *OrderThirdPayLogModel ) // 实体 -type OrderLog struct { +type OrderThirdPayLog struct { Id int64 OrderId int64 `xorm:"'order_id' bigint(20)"` PayCallback string `xorm:"'pay_callback' varchar(255)"` - Status int `xorm:"'status' int(11)"` + Status int `xorm:"'status' TINYINT"` MerchantParam string `xorm:"'merchant_param' varchar(255)"` MerchantCallback string `xorm:"'merchant_callback' varchar(255)"` CreateTime time.Time `xorm:"'create_time' datetime created"` } // 表名 -func (m *OrderLog) TableName() string { - return "order_log" +func (m *OrderThirdPayLog) TableName() string { + return "order_third_pay_log" } // 私有化,防止被外部new -type OrderLogModel struct { +type OrderThirdPayLogModel struct { db.Model //组合基础Model,集成基础Model的属性和方法 } // 单例模式 -func GetInstance() *OrderLogModel { +func GetInstance() *OrderThirdPayLogModel { once.Do(func() { - m = new(OrderLogModel) + m = new(OrderThirdPayLogModel) //m.DiName = "" //设置数据库实例连接,默认db.SingletonMain }) return m diff --git a/app/services/order.go b/app/services/order.go index bfc6d8a..c653105 100644 --- a/app/services/order.go +++ b/app/services/order.go @@ -3,8 +3,9 @@ package services import ( "PaymentCenter/app/data" "PaymentCenter/app/http/entities/backend" - "PaymentCenter/app/models/orderlogmodel" + "PaymentCenter/app/models/orderrequestlogmodel" "PaymentCenter/app/models/ordersmodel" + "PaymentCenter/app/models/orderthirdpaylogmodel" "PaymentCenter/app/models/paychannelmodel" "xorm.io/builder" ) @@ -49,16 +50,25 @@ func OrderList(req backend.OrderList) (result []ordersmodel.OrdersBackendList, t return orderList, count, code } -func OrderLogsList(req backend.OrderLogsListRequest) (result []orderlogmodel.OrderLog, total int64, code int) { - repo := data.NewOrderLogRepo(paychannelmodel.GetInstance().GetDb()) +func OrderLogsList(req backend.OrderLogsListRequest) (requestLog []orderrequestlogmodel.OrderRequestLog, thirdLod []orderthirdpaylogmodel.OrderThirdPayLog, code int) { + requestRepo := data.NewOrderRequestLogRepo(paychannelmodel.GetInstance().GetDb()) + thirdRepo := data.NewOrderThirdPayLogRepo(paychannelmodel.GetInstance().GetDb()) + conn := builder.NewCond() if req.OrderId > 0 { conn = conn.And(builder.Eq{"order_id": req.OrderId}) } - // 调用repo - orderLogList := make([]orderlogmodel.OrderLog, 0) - count, err := repo.OrderLogList(conn, req.PageRequest, &orderLogList) + // 请求日志 + orderLogList := make([]orderrequestlogmodel.OrderRequestLog, 0) + _, err := requestRepo.OrderRequestLogList(conn, req.PageRequest, &orderLogList) + if err != nil { + code = handErr(err) + return + } + // 三方日志 + thirdLogList := make([]orderthirdpaylogmodel.OrderThirdPayLog, 0) + _, err = thirdRepo.OrderThirdPayLogList(conn, req.PageRequest, &thirdLogList) code = handErr(err) - return orderLogList, count, code + return orderLogList, thirdLogList, code } diff --git a/config/config.go b/config/config.go index 9730e69..be54a4e 100644 --- a/config/config.go +++ b/config/config.go @@ -38,6 +38,7 @@ type Config struct { Jwt Jwt `toml:"Jwt"` AliOss AliOss `toml:"AliOss"` AdminGate []string `toml:"AdminGate"` + CronConfig CronConfig `toml:"CronConfig"` } type AliOss struct { @@ -84,6 +85,12 @@ type Nacos struct { Port int64 } +type CronConfig struct { + CloseOrderTime int `toml:"CloseOrderTime"` + QueryOrderTime int `toml:"QueryOrderTime"` + ConcurrentNumber int `toml:"ConcurrentNumber"` +} + func newConfig() *Config { return new(Config) }