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 }