@@ -0,0 +1,149 @@
|
||||
package check
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"91porn-server/common/daichong"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/common/pageopt"
|
||||
"91porn-server/common/stderr"
|
||||
"91porn-server/models/commod"
|
||||
"91porn-server/models/v/rchgordmod"
|
||||
"91porn-server/skd/skdg"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
var pageSize int64 = 20
|
||||
|
||||
// 通知第三方代充订单结果
|
||||
func DaiChongOrderCallBack() {
|
||||
log.Info("DaiChongOrderCallBack start")
|
||||
sort := rchgordmod.Sort{{Key: "createdAt", Value: 1}}
|
||||
daichongType := string(rchgordmod.Rech_DaiChong)
|
||||
matList := []pageopt.Matcher{
|
||||
(&rchgordmod.RechargeTypeMatch{RechargeType: &daichongType}).New(),
|
||||
(&rchgordmod.NotifyStatusMatch{NotifyStatus: []int{rchgordmod.Notify_DEFAULT, rchgordmod.Notify_FAILURE}}).New(),
|
||||
(&rchgordmod.StatusInMatch{Status: []int{rchgordmod.SUCCESS, rchgordmod.FAILURE}}).New(),
|
||||
}
|
||||
var pageNumber int64 = 1 //从第一页开始
|
||||
for {
|
||||
var skip = (pageNumber - 1) * pageSize
|
||||
//订单列表
|
||||
rchgorderList, err := rchgordmod.List(sort, &skip, &pageSize, matList...)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if len(rchgorderList) == 0 {
|
||||
log.Info("DaiChongOrderCallBack end")
|
||||
return
|
||||
}
|
||||
for _, v := range rchgorderList {
|
||||
if oid, err := primitive.ObjectIDFromHex(v.OID); err == nil {
|
||||
if !oid.IsZero() {
|
||||
continue
|
||||
}
|
||||
}
|
||||
handOrderBack(v)
|
||||
}
|
||||
pageNumber++
|
||||
}
|
||||
}
|
||||
|
||||
// 将超时支付的订单设置为失败订单,并通知给对方
|
||||
func HandleProcessingOrder() {
|
||||
log.Info("HandleProcessingOrder start")
|
||||
//创建时间小于三天前的订单
|
||||
threeDayBefore := time.Now().AddDate(0, 0, -3)
|
||||
processing := rchgordmod.Processing
|
||||
sort := rchgordmod.Sort{{Key: "createdAt", Value: 1}}
|
||||
daichongType := string(rchgordmod.Rech_DaiChong)
|
||||
matList := []pageopt.Matcher{
|
||||
(&rchgordmod.RechargeTypeMatch{RechargeType: &daichongType}).New(),
|
||||
(&rchgordmod.CreatedAtLTMatch{LT: &threeDayBefore}).New(),
|
||||
(&rchgordmod.StatusMatch{Status: &processing}).New(),
|
||||
}
|
||||
var pageNumber int64 = 1 //从第一页开始
|
||||
for {
|
||||
var skip = (pageNumber - 1) * pageSize
|
||||
//订单列表
|
||||
rchgorderList, err := rchgordmod.List(sort, &skip, &pageSize, matList...)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if len(rchgorderList) == 0 {
|
||||
log.Info("HandleProcessingOrder end")
|
||||
return
|
||||
}
|
||||
for _, v := range rchgorderList {
|
||||
v.Status = rchgordmod.FAILURE
|
||||
v.StatusDesc = rchgordmod.Status(rchgordmod.FAILURE).Desc()
|
||||
v.Remark = "该订单超时三天未处理,失败"
|
||||
v.FailureAt = time.Now()
|
||||
handOrderBack(v)
|
||||
}
|
||||
pageNumber++
|
||||
}
|
||||
}
|
||||
|
||||
func handOrderBack(v *rchgordmod.RechargeOrder) {
|
||||
var orderStatus int
|
||||
switch v.Status {
|
||||
case rchgordmod.SUCCESS:
|
||||
orderStatus = daichong.Success
|
||||
case rchgordmod.FAILURE:
|
||||
orderStatus = daichong.Failed
|
||||
}
|
||||
if orderStatus == 0 {
|
||||
return
|
||||
}
|
||||
var timestamp = v.NotifyTime
|
||||
if v.NotifyTime == 0 {
|
||||
timestamp = time.Now().UTC().Unix()
|
||||
}
|
||||
resp, code := orderCallBack(daichong.OrderCallSign{
|
||||
OrderId: v.OID,
|
||||
Time: timestamp,
|
||||
Status: orderStatus,
|
||||
})
|
||||
selector := rchgordmod.ReplaceEditSelector{
|
||||
Status: &v.Status,
|
||||
StatusDesc: &v.StatusDesc,
|
||||
Remark: &v.Remark,
|
||||
FailureAt: &v.FailureAt,
|
||||
SuccessAt: &v.SuccessAt,
|
||||
}
|
||||
if code == stderr.Success {
|
||||
notifySuccess := rchgordmod.Notify_SUCCESS
|
||||
selector.NotifyStatus = ¬ifySuccess
|
||||
log.Info("daichong order call back send http request successfully",
|
||||
log.Any("orderStatus", orderStatus),
|
||||
log.Any("orderId", v.OID),
|
||||
log.Any("time", time.Now().Format(time.RFC3339)))
|
||||
} else {
|
||||
notifyFailure := rchgordmod.FAILURE
|
||||
selector.NotifyStatus = ¬ifyFailure
|
||||
log.Warn("daichong order call back send http request failed", log.Any("responseCode", code), log.Any("msg", resp.Msg))
|
||||
}
|
||||
_ = rchgordmod.UpdateBaseOnOid(nil, v.OID, selector)
|
||||
}
|
||||
|
||||
// 上分通知 将订单的处理结果通知给代充平台
|
||||
func orderCallBack(req daichong.OrderCallSign) (commod.Resp, stderr.Code) {
|
||||
sign, err := daichong.Convert2Sign(req, skdg.Conf.DaiChong.AppSecret)
|
||||
if err != nil {
|
||||
log.Warn("create sign data wrong", log.Any("warn", err))
|
||||
return commod.Resp{}, stderr.Failure
|
||||
}
|
||||
orderReq := daichong.CommonReq{
|
||||
AppId: skdg.Conf.DaiChong.AppID,
|
||||
Data: sign,
|
||||
}
|
||||
resp, err := daichong.OrderCallBack(context.TODO(), orderReq, skdg.Conf.DaiChong.Domain)
|
||||
if err != nil {
|
||||
log.Warn("GetOrderInfo send http wrong", log.Any("warn", err))
|
||||
return commod.Resp{}, stderr.Failure
|
||||
}
|
||||
return resp, resp.Code
|
||||
}
|
||||
Reference in New Issue
Block a user