rollback_zone_exit_status

This commit is contained in:
lwl0608 2024-07-19 11:02:34 +08:00
parent f01f9a3ecb
commit 9c2ba123a2
7 changed files with 112 additions and 9 deletions

View File

@ -142,7 +142,7 @@ type OpManualUnlockWechatParam struct {
Oid2 string `json:"oid2"` // oid2
}
type OpRollbackZoneRefundStatusParam struct {
type OpRollbackZoneExitStatusParam struct {
Userid int64 `json:"userid"`
StreamerUserid int64 `json:"streamer_userid"`
}

View File

@ -318,7 +318,7 @@ func Init(r *gin.Engine) {
opVasPayGroup.POST("wxpay_callback_manual", middleware.JSONParamValidator(vasproto.WxpayCallbackManualParam{}), WxpayCallbackManual)
opVasPayGroup.POST("zone_refund_list", middleware.JSONParamValidator(zoneproto.OpZoneRefundListParam{}), OpZoneRefundList)
opVasPayGroup.POST("manual_unlock_wechat", middleware.JSONParamValidator(zoneproto.OpManualUnlockWechatParam{}), OpManualUnlockWechat)
opVasPayGroup.POST("rollback_zone_exit_status", middleware.JSONParamValidator(zoneproto.OpRollbackZoneRefundStatusParam{}), OpManualUnlockWechat)
opVasPayGroup.POST("rollback_zone_exit_status", middleware.JSONParamValidator(zoneproto.OpRollbackZoneExitStatusParam{}), OpRollbackZoneAdmissionExitStatus)
// 慧用工
extHvyogoGroup := r.Group("/ext/hvyogo")

View File

@ -76,9 +76,9 @@ func OpManualUnlockWechat(ctx *gin.Context) {
ReplyOk(ctx, nil)
}
func OpRollbackZoneRefundStatus(ctx *gin.Context) {
req := ctx.MustGet("client_req").(*zoneproto.OpRollbackZoneRefundStatusParam)
ec, err := service.DefaultService.OpRollbackZoneRefundStatus(ctx, req)
func OpRollbackZoneAdmissionExitStatus(ctx *gin.Context) {
req := ctx.MustGet("client_req").(*zoneproto.OpRollbackZoneExitStatusParam)
ec, err := service.DefaultService.OpRollbackZoneAdmissionExitStatus(ctx, req)
if ec != errcode.ErrCodeVasSrvOk {
logger.Error("RefundOrder fail, req: %v, ec: %v", util.ToJson(req), ec)
if err != nil {

View File

@ -590,3 +590,20 @@ func (m *Mysql) GetZoneMemberCountGroupByZoneMemberType(ctx *gin.Context, tx *sq
}
return
}
// 回滚空间退出状态
func (m *Mysql) RollbackZoneAdmissionExitStatus(ctx *gin.Context, tx *sqlx.Tx, orderCt, id int64) error {
var err error
sqlStr := "update " + TableVasZoneUnlock + " set admission_ct=?, admission_until=?, admission_unlock_type=? where id=?"
args := []any{orderCt, -1, dbstruct.ZoneUnlockTypePay, id}
if tx != nil {
_, err = tx.ExecContext(ctx, sqlStr, args...)
} else {
db := m.getDBVas()
_, err = db.ExecContext(ctx, sqlStr, args...)
}
if err != nil {
return err
}
return err
}

View File

@ -1289,3 +1289,8 @@ func (v *Vas) ZoneGetIncomePage(ctx *gin.Context, mid int64) (*vasproto.IncomePa
}
return data, nil
}
// 获取动态解锁记录
func (v *Vas) RollbackZoneAdmissionExitStatus(ctx *gin.Context, ct, id int64) (err error) {
return v.store.RollbackZoneAdmissionExitStatus(ctx, nil, ct, id)
}

View File

@ -1176,14 +1176,59 @@ func (s *Service) VasIncomePage(ctx *gin.Context, req *vasproto.IncomePageReq) (
return
}
func (s *Service) OpRollbackZoneRefundStatus(ctx *gin.Context, req *zoneproto.OpRollbackZoneRefundStatusParam) (ec errcode.ErrCode, err error) {
func (s *Service) OpRollbackZoneAdmissionExitStatus(ctx *gin.Context, req *zoneproto.OpRollbackZoneExitStatusParam) (ec errcode.ErrCode, err error) {
// 获取用户mid
userAcnt, _ := _DefaultAccount.OpListByUserId(ctx, &accountproto.OpListByUserIdReq{UserId: goproto.Int64(req.Userid)})
err = _DefaultVas.SuperfanUnlockContact(ctx, nil, req.Mid, req.StreamerMid, req.Oid2)
ec, err = errs.DealVasErr(err)
// 获取主播mid
streamerAcnt, _ := _DefaultAccount.OpListByUserId(ctx, &accountproto.OpListByUserIdReq{UserId: goproto.Int64(req.StreamerUserid)})
// 获取主播空间id
zone, _ := _DefaultZone.GetByMid(ctx, streamerAcnt.GetMid())
var (
uMid = userAcnt.GetMid()
sMid = streamerAcnt.GetMid()
zid = zone.GetId()
)
zuMap, err := _DefaultVas.GetZoneUnlockMapByMidZids(ctx, uMid, []int64{zid})
if err != nil {
logger.Error("OneStepUnlockContact fail, req: %v, err: %v", util.ToJson(req), err)
logger.Error("GetZoneUnlockMapByMidZids fail, mid: %v, sMid: %v, zid: %v, err: %v", uMid, sMid, zid, err)
return
}
zu := zuMap[zid]
if zu == nil {
err = fmt.Errorf("invalid zu, mid: %v, sMid: %v, zid: %v", uMid, sMid, zid)
logger.Error("%v", err)
return
}
// 检查是否主动退出
if zu.GetAdmissionUnlockType() != dbstruct.ZoneUnlockTypeExit {
err = fmt.Errorf("invalid AdmissionUnlockType")
logger.Error("%v, mid: %v, sMid: %v, zid: %v, zu: %v", err, uMid, sMid, zid, util.ToJson(zu))
return
}
// 检查订单状态
orderId := zu.GetAdmissionOrderId()
order, err := _DefaultVas.GetOrderById(ctx, nil, orderId)
if err != nil {
logger.Error("GetOrderById fail, mid: %v, sMid: %v, zid: %v, orderId: %v, err: %v", uMid, sMid, zid, orderId, err)
return
}
if !util.InInt32Slice([]int32{dbstruct.VasOrderStatusPaySuccess, dbstruct.VasOrderStatusFinish}, order.GetOrderStatus()) {
err = fmt.Errorf("invalid orderStatus")
logger.Error("%v, mid: %v, sMid: %v, zid: %v, order: %v", err, uMid, sMid, zid, util.ToJson(order))
return
}
// 回滚
err = _DefaultVas.RollbackZoneAdmissionExitStatus(ctx, order.GetUt(), zu.GetId())
if err != nil {
logger.Error("RollbackZoneAdmissionExitStatus fail, mid: %v, sMid: %v, zid: %v, zu: %v, err: %v", uMid, sMid, zid, util.ToJson(zu), err)
return
}
logger.Info("RollbackZoneAdmissionExitStatus success, uid: %v, suid: %v, mid: %v, sMid: %v, zid: %v", req.Userid, req.StreamerUserid, uMid, sMid, zid)
return
}

View File

@ -217,3 +217,39 @@ func SortParam(argList []*message.JsonParamEntry) string {
}
return strings.Join(args, "&")
}
func InInt64Slice(slice []int64, item int64) bool {
for _, s := range slice {
if s == item {
return true
}
}
return false
}
func InInt32Slice(slice []int32, item int32) bool {
for _, s := range slice {
if s == item {
return true
}
}
return false
}
func InIntSlice(slice []int, item int) bool {
for _, s := range slice {
if s == item {
return true
}
}
return false
}
func InStrSlice(slice []string, item string) bool {
for _, s := range slice {
if s == item {
return true
}
}
return false
}