Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+149
View File
@@ -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 = &notifySuccess
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 = &notifyFailure
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
}