150 lines
4.3 KiB
Go
150 lines
4.3 KiB
Go
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
|
|
}
|