Merge pull request 'feat-IRONFANS-70' (#260) from feat-IRONFANS-70 into test
Reviewed-on: http://121.41.31.146:3000/wishpal_ironfan/service/pulls/260
This commit is contained in:
commit
3ece8f7504
|
@ -78,9 +78,11 @@ type ApiListExtByMidReq struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type ApiListExtByMidData struct {
|
type ApiListExtByMidData struct {
|
||||||
StreamerExt *ApiListExtVO `json:"streamer_ext"`
|
StreamerExt *ApiListExtVO `json:"streamer_ext"`
|
||||||
WechatLockType int32 `json:"wechat_lock_type"` // 微信解锁类型
|
WechatLockType int32 `json:"wechat_lock_type"` // 微信解锁类型
|
||||||
IsUnlockWechat int32 `json:"is_unlock_wechat"` // 是否解锁微信
|
IsUnlockWechat int32 `json:"is_unlock_wechat"` // 是否解锁微信
|
||||||
|
WechatOrderId string `json:"wechat_order_id"` // 微信订单id
|
||||||
|
WechatOrderStatus int32 `json:"wechat_order_status"` // 微信订单状态
|
||||||
}
|
}
|
||||||
|
|
||||||
type ApiListExtByMidResp struct {
|
type ApiListExtByMidResp struct {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package proto
|
||||||
import (
|
import (
|
||||||
"service/api/base"
|
"service/api/base"
|
||||||
"service/dbstruct"
|
"service/dbstruct"
|
||||||
|
"service/library/payclients/wxpaycli"
|
||||||
)
|
)
|
||||||
|
|
||||||
// op 创建
|
// op 创建
|
||||||
|
@ -92,9 +93,10 @@ type ApiListByMidReq struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type ApiListByMidData struct {
|
type ApiListByMidData struct {
|
||||||
List []*ApiZoneVO `json:"list"`
|
List []*ApiZoneVO `json:"list"`
|
||||||
Offset int `json:"offset"`
|
Offset int `json:"offset"`
|
||||||
More int `json:"more"`
|
More int `json:"more"`
|
||||||
|
RefundEnable int `json:"refund_enable"` // 1: 能退款,0: 不能退款
|
||||||
}
|
}
|
||||||
|
|
||||||
type ApiListByMidResp struct {
|
type ApiListByMidResp struct {
|
||||||
|
@ -138,3 +140,77 @@ type OpListByMidResp struct {
|
||||||
base.BaseResponse
|
base.BaseResponse
|
||||||
Data *OpListByMidData `json:"data"`
|
Data *OpListByMidData `json:"data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 空间收银台
|
||||||
|
type ZoneGetCashierReq struct {
|
||||||
|
Zid int64 `json:"zid"` // 空间id
|
||||||
|
MomentId int64 `json:"moment_id"` // 动态id
|
||||||
|
ProductId string `json:"product_id"` // 商品id,ProductIdH5Zone*
|
||||||
|
}
|
||||||
|
|
||||||
|
type ZoneGetCashierData struct {
|
||||||
|
Name string `json:"name"` // 商品名
|
||||||
|
Price int64 `json:"price"` // 价格,单位: 分
|
||||||
|
Validity string `json:"validity"` // 有效期,直接展示就行,"30天"、"永久"
|
||||||
|
IsSuperfanshipGiveWechat int `json:"is_superfanship_give_wechat"` // 是否开启超粉空间赠送微信 0: 不赠送, 1: 赠送
|
||||||
|
}
|
||||||
|
|
||||||
|
type ZoneGetCashierResp struct {
|
||||||
|
base.BaseResponse
|
||||||
|
Data *ZoneGetCashierData `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// 空间创建订单
|
||||||
|
type ZoneCreateOrderReq struct {
|
||||||
|
base.BaseRequest
|
||||||
|
Zid int64 `json:"zid"` // 空间id
|
||||||
|
MomentId int64 `json:"moment_id"` // 动态id
|
||||||
|
ProductId string `json:"product_id"` // 商品id,ProductIdH5Zone*
|
||||||
|
PayType string `json:"pay_type"` // 支付方式
|
||||||
|
From string `json:"from"` // 来源
|
||||||
|
WechatAuthCode string `json:"wechat_auth_code"` // 微信auth_code
|
||||||
|
}
|
||||||
|
|
||||||
|
type ZoneCreateOrderData struct {
|
||||||
|
OrderId string `json:"order_id"` // 订单id
|
||||||
|
AlipayParamStr string `json:"alipay_param_str"` // 支付宝 app支付参数
|
||||||
|
AlipayH5ParamStr string `json:"alipay_h5_param_str"` // 支付宝 h5支付参数
|
||||||
|
WxpayNativeParamStr string `json:"wxpay_native_param_str"` // 微信支付 native支付参数
|
||||||
|
WxpayJsapiParamObj wxpaycli.JsapiPayResp `json:"wxpay_jsapi_param_obj"` // 微信支付 jsapi支付参数
|
||||||
|
WxpayH5ParamStr string `json:"wxpay_h5_param_str"` // 微信支付 h5支付参数
|
||||||
|
}
|
||||||
|
|
||||||
|
type ZoneCreateOrderResp struct {
|
||||||
|
base.BaseResponse
|
||||||
|
Data *ZoneCreateOrderData `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// 空间退款页面
|
||||||
|
type ZoneRefundPageReq struct {
|
||||||
|
Zid int64 `json:"zid"` // 空间id
|
||||||
|
}
|
||||||
|
|
||||||
|
type ZoneRefundPageData struct {
|
||||||
|
Price int64 `json:"price"` // 退款价格,单位:分
|
||||||
|
Name string `json:"name"` // 退款商品名
|
||||||
|
}
|
||||||
|
|
||||||
|
type ZoneRefundPageResp struct {
|
||||||
|
base.BaseResponse
|
||||||
|
Data *ZoneRefundPageData `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// 空间退款
|
||||||
|
type ZoneRefundReq struct {
|
||||||
|
Zid int64 `json:"zid"` // 空间id
|
||||||
|
ContactName string `json:"contact_name"` // 联系人
|
||||||
|
ContactPhone string `json:"contact_phone"` // 联系电话
|
||||||
|
Note string `json:"note"` // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
type ZoneRefundData struct{}
|
||||||
|
|
||||||
|
type ZoneRefundResp struct {
|
||||||
|
base.BaseResponse
|
||||||
|
Data *ZoneRefundData `json:"data"`
|
||||||
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ type ApiZoneMomentVO struct {
|
||||||
IsSuperfanshipUnlocked int64 `json:"is_superfanship_unlocked"`
|
IsSuperfanshipUnlocked int64 `json:"is_superfanship_unlocked"`
|
||||||
IsZoneMomentUnlocked int64 `json:"is_zone_moment_unlocked"`
|
IsZoneMomentUnlocked int64 `json:"is_zone_moment_unlocked"`
|
||||||
Expenditure int64 `json:"expenditure"`
|
Expenditure int64 `json:"expenditure"`
|
||||||
|
BuyerCnt int64 `json:"buyer_cnt"` // 动态购买人数
|
||||||
}
|
}
|
||||||
|
|
||||||
func (vo *ApiZoneMomentVO) CopyZoneMoment(zonemoment *dbstruct.ZoneMoment) {
|
func (vo *ApiZoneMomentVO) CopyZoneMoment(zonemoment *dbstruct.ZoneMoment) {
|
||||||
|
|
|
@ -3823,6 +3823,19 @@ func (m *Mongo) GetZoneById(ctx *gin.Context, id int64) (*dbstruct.Zone, error)
|
||||||
return zone, err
|
return zone, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Mongo) RecordZoneStatisticsById(ctx *gin.Context, id int64, zoneMomentCount int64, imageCount int64, videoCount int64) error {
|
||||||
|
col := m.getColZone()
|
||||||
|
up := qmgo.M{
|
||||||
|
"$inc": qmgo.M{
|
||||||
|
"zone_moment_count": zoneMomentCount,
|
||||||
|
"image_count": imageCount,
|
||||||
|
"video_count": videoCount,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
err := col.UpdateId(ctx, id, up)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// 私密圈动态相关
|
// 私密圈动态相关
|
||||||
func (m *Mongo) CreateZoneMoment(ctx *gin.Context, zonemoment *dbstruct.ZoneMoment) error {
|
func (m *Mongo) CreateZoneMoment(ctx *gin.Context, zonemoment *dbstruct.ZoneMoment) error {
|
||||||
col := m.getColZoneMoment()
|
col := m.getColZoneMoment()
|
||||||
|
|
|
@ -2272,6 +2272,17 @@ func (s *Service) ApiCreateZoneMoment(ctx *gin.Context, req *zonemomentproto.Api
|
||||||
func (s *Service) ApiUpdateZoneMoment(ctx *gin.Context, req *zonemomentproto.ApiUpdateReq) (ec errcode.ErrCode) {
|
func (s *Service) ApiUpdateZoneMoment(ctx *gin.Context, req *zonemomentproto.ApiUpdateReq) (ec errcode.ErrCode) {
|
||||||
ec = errcode.ErrCodeZoneMomentSrvOk
|
ec = errcode.ErrCodeZoneMomentSrvOk
|
||||||
|
|
||||||
|
zonemoment, err := _DefaultZoneMoment.GetById(ctx, util.DerefInt64(req.Id))
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("_DefaultZoneMoment GetById fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
|
ec = errcode.ErrCodeZoneMomentSrvFail
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if zonemoment == nil {
|
||||||
|
ec = errcode.ErrCodeZoneMomentNotExist
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 抹消审核信息,回退到初始
|
// 抹消审核信息,回退到初始
|
||||||
isReauditRequired := false
|
isReauditRequired := false
|
||||||
if req.ZoneMoment.MediaComp != nil && util.DerefInt64(req.ZoneMoment.MType) == consts.MediaTypeImg {
|
if req.ZoneMoment.MediaComp != nil && util.DerefInt64(req.ZoneMoment.MType) == consts.MediaTypeImg {
|
||||||
|
@ -2292,7 +2303,7 @@ func (s *Service) ApiUpdateZoneMoment(ctx *gin.Context, req *zonemomentproto.Api
|
||||||
req.ZoneMoment.ManuallyReviewOperator = goproto.Int64(0) // 信息抹除
|
req.ZoneMoment.ManuallyReviewOperator = goproto.Int64(0) // 信息抹除
|
||||||
}
|
}
|
||||||
|
|
||||||
err := _DefaultZoneMoment.OpUpdate(ctx, &zonemomentproto.OpUpdateReq{
|
err = _DefaultZoneMoment.OpUpdate(ctx, &zonemomentproto.OpUpdateReq{
|
||||||
BaseRequest: req.BaseRequest,
|
BaseRequest: req.BaseRequest,
|
||||||
ZoneMoment: req.ZoneMoment,
|
ZoneMoment: req.ZoneMoment,
|
||||||
})
|
})
|
||||||
|
@ -2307,6 +2318,19 @@ func (s *Service) ApiUpdateZoneMoment(ctx *gin.Context, req *zonemomentproto.Api
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 回退空间内统计总数
|
||||||
|
if isReauditRequired {
|
||||||
|
id := util.DerefInt64(req.ZoneMoment.Id)
|
||||||
|
mediaCountInc := len(zonemoment.MediaComp.GetImageIds())
|
||||||
|
videoCountInc := len(zonemoment.MediaComp.GetVideoIds())
|
||||||
|
err := _DefaultZone.RecordStatisticsById(ctx, id, -1, -int64(mediaCountInc), -int64(videoCountInc))
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("RecordStatisticsById fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
|
ec = errcode.ErrCodeZoneSrvFail
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 添加审核任务
|
// 添加审核任务
|
||||||
imageaudittasks := s.CreateZoneMomentImageAudit(ctx, req.ZoneMoment)
|
imageaudittasks := s.CreateZoneMomentImageAudit(ctx, req.ZoneMoment)
|
||||||
textaudittasks := s.CreateZoneMomentTextAudit(ctx, req.ZoneMoment)
|
textaudittasks := s.CreateZoneMomentTextAudit(ctx, req.ZoneMoment)
|
||||||
|
|
|
@ -108,6 +108,15 @@ func (p *Zone) OpUpdateByIdAndLastZoneMomentCt(ctx *gin.Context, req *zoneproto.
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Zone) RecordStatisticsById(ctx *gin.Context, id int64, zoneMomentCount int64, imageCount int64, videoCount int64) error {
|
||||||
|
err := p.store.RecordZoneStatisticsById(ctx, id, zoneMomentCount, imageCount, videoCount)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("RecordZoneStatisticsById fail, err: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (p *Zone) GetById(ctx *gin.Context, id int64) (*dbstruct.Zone, error) {
|
func (p *Zone) GetById(ctx *gin.Context, id int64) (*dbstruct.Zone, error) {
|
||||||
zone, err := p.store.GetZoneById(ctx, id)
|
zone, err := p.store.GetZoneById(ctx, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -3292,6 +3292,16 @@ func (s *Service) OpDeleteZoneMoment(ctx *gin.Context, req *zonemomentproto.OpDe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 回退空间内统计总数
|
||||||
|
id := util.DerefInt64(req.Id)
|
||||||
|
mediaCountInc := len(zonemoment.MediaComp.GetImageIds())
|
||||||
|
videoCountInc := len(zonemoment.MediaComp.GetVideoIds())
|
||||||
|
err = _DefaultZone.RecordStatisticsById(ctx, id, -1, -int64(mediaCountInc), -int64(videoCountInc))
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("RecordStatisticsById fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
|
ec = errcode.ErrCodeZoneSrvFail
|
||||||
|
return
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3360,6 +3370,28 @@ func (s *Service) OpReviewZoneMoment(ctx *gin.Context, req *zonemomentproto.OpRe
|
||||||
ec = errcode.ErrCodeZoneMomentSrvFail
|
ec = errcode.ErrCodeZoneMomentSrvFail
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 增加空间内统计总数
|
||||||
|
for _, id := range req.ZoneMomentIds {
|
||||||
|
zonemoment, err := _DefaultZoneMoment.GetById(ctx, id)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("_DefaultZoneMoment GetById fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
|
ec = errcode.ErrCodeZoneMomentSrvFail
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if zonemoment == nil {
|
||||||
|
ec = errcode.ErrCodeZoneMomentNotExist
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mediaCountInc := len(zonemoment.MediaComp.GetImageIds())
|
||||||
|
videoCountInc := len(zonemoment.MediaComp.GetVideoIds())
|
||||||
|
err = _DefaultZone.RecordStatisticsById(ctx, id, 1, int64(mediaCountInc), int64(videoCountInc))
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("RecordStatisticsById fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
|
ec = errcode.ErrCodeZoneSrvFail
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
|
@ -20,6 +20,11 @@ const (
|
||||||
|
|
||||||
ProductIdMembership = "membership" // 会员
|
ProductIdMembership = "membership" // 会员
|
||||||
ProductIdH5Membership = "h5_membership" // 会员
|
ProductIdH5Membership = "h5_membership" // 会员
|
||||||
|
|
||||||
|
ProductIdH5ZoneMoment = "h5_zone_moment" // 空间动态
|
||||||
|
ProductIdH5ZoneAdmission = "h5_zone_admission" // 空间普通会员
|
||||||
|
ProductIdH5ZoneIronfanship = "h5_zone_ironfanship" // 空间铁粉
|
||||||
|
ProductIdH5ZoneSuperfanship = "h5_zone_superfanship" // 空间超粉
|
||||||
)
|
)
|
||||||
|
|
||||||
// 商品类型
|
// 商品类型
|
||||||
|
|
|
@ -891,3 +891,34 @@ func (p *UserVasMembershipUnlock) GetOrderId() string {
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
ZoneMemberTypeNormal = 1 // 普通会员
|
||||||
|
ZoneMemberTypeIronfan = 2 // 铁粉
|
||||||
|
ZoneMemberTypeSuperfan = 3 // 超粉
|
||||||
|
)
|
||||||
|
|
||||||
|
// 用户解锁空间详情
|
||||||
|
type ZoneUnlock struct {
|
||||||
|
Id *int64 `json:"id"`
|
||||||
|
Mid *int64 `json:"mid"` // 用户mid
|
||||||
|
Zid *int64 `json:"zid"` // 空间id
|
||||||
|
Consume *int64 `json:"consume"` // 空间总消费
|
||||||
|
AdmissionCt *int64 `json:"admission_ct"` // 普通会员开通时间
|
||||||
|
AdmissionUntil *int64 `json:"admission_until"` // 普通会员到期时间,时间戳,-1: 永久
|
||||||
|
AdmissionOrderId *string `json:"admission_order_id"` // 普通会员订单
|
||||||
|
IronfanshipCt *int64 `json:"ironfanship_ct"` // 铁粉开通时间id
|
||||||
|
IronfanshipUntil *int64 `json:"ironfanship_until"` // 铁粉到期时间,时间戳,-1:永久
|
||||||
|
IronfanshipOrderId *string `json:"ironfanship_order_id"` // 铁粉订单
|
||||||
|
SuperfanCt *int64 `json:"superfan_ct"` // 超粉开通时间id
|
||||||
|
SuperfanshipUntil *int64 `json:"superfanship_until"` // 超粉到期时间,时间戳,-1:永久
|
||||||
|
SuperfanshipOrderId *string `json:"superfanship_order_id"` // 超粉订单id
|
||||||
|
}
|
||||||
|
|
||||||
|
// 空间成员列表
|
||||||
|
type ZoneMember struct {
|
||||||
|
Zid *int64 `json:"zid" bson:"zid"` // 空间id
|
||||||
|
Mid *int64 `json:"mid" bson:"mid"` // 用户id
|
||||||
|
MemberType *int32 `json:"member_type" bson:"member_type"` // 空间成员类型 ZoneMemberType*
|
||||||
|
Ct *int64 `json:"ct" bson:"ct"` // 成为成员的时间
|
||||||
|
}
|
||||||
|
|
|
@ -5,7 +5,38 @@ type Zone struct {
|
||||||
Mid *int64 `json:"mid" bson:"mid"` // 用户表id
|
Mid *int64 `json:"mid" bson:"mid"` // 用户表id
|
||||||
Profile *string `json:"profile" bson:"profile"` // 空间简介
|
Profile *string `json:"profile" bson:"profile"` // 空间简介
|
||||||
LastZoneMomentCt *int64 `json:"last_zone_moment_ct" bson:"last_zone_moment_ct"` // 最后空间动态创建时间
|
LastZoneMomentCt *int64 `json:"last_zone_moment_ct" bson:"last_zone_moment_ct"` // 最后空间动态创建时间
|
||||||
|
ZoneMomentCount *int64 `json:"zone_moment_count" bson:"zone_moment_count"` // 空间内动态总数
|
||||||
|
ImageCount *int64 `json:"image_count" bson:"image_count"` // 空间内图片总数
|
||||||
|
VideoCount *int64 `json:"video_count" bson:"video_count"` // 空间内视频总数
|
||||||
Ct *int64 `json:"ct" bson:"ct"` // 创建时间
|
Ct *int64 `json:"ct" bson:"ct"` // 创建时间
|
||||||
Ut *int64 `json:"ut" bson:"ut"` // 更新时间
|
Ut *int64 `json:"ut" bson:"ut"` // 更新时间
|
||||||
DelFlag *int64 `json:"del_flag" bson:"del_flag"` // 删除标记
|
DelFlag *int64 `json:"del_flag" bson:"del_flag"` // 删除标记
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
SuperfanshipValidPeriodEternal = 0 // 永久生效
|
||||||
|
SuperfanshipValidPeriodMonth = 1 // 30d
|
||||||
|
SuperfanshipValidPeriodSeason = 2 // 90d
|
||||||
|
SuperfanshipValidPeriodHalfYear = 3 // 180d
|
||||||
|
SuperfanshipValidPeriodYear = 4 // 366d
|
||||||
|
)
|
||||||
|
|
||||||
|
// 空间增值相关,空间价格等
|
||||||
|
type ZoneVas struct {
|
||||||
|
Zid int64 `json:"zid" bson:"_id"`
|
||||||
|
Mid int64 `json:"mid" bson:"mid"` // 主播mid
|
||||||
|
AdmissionPrice int64 `json:"admission_price" bson:"admission_price"` // 空间解锁价格, 单位: 分
|
||||||
|
IronfanshipPrice int64 `json:"ironfanship_price" bson:"ironfanship_price"` // 铁粉解锁价格, 单位: 分
|
||||||
|
IsSuperfanshipEnabled int `json:"is_superfanship_enabled" bson:"is_superfanship_enabled"` // 是否开启超粉空间 0: 关闭, 1: 开启
|
||||||
|
SuperfanshipPrice int64 `json:"superfanship_price" bson:"superfanship_price"` // 超粉价格, 单位: 分
|
||||||
|
SuperfanshipValidPeriod int `json:"superfanship_valid_period" bson:"superfanship_valid_period"` // 超粉有效期类型, SuperfanshipValidPeriod*
|
||||||
|
IsSuperfanshipGiveWechat int `json:"is_superfanship_give_wechat" bson:"is_superfanship_give_wechat"` // 是否开启超粉空间赠送微信 0: 不赠送, 1: 赠送
|
||||||
|
}
|
||||||
|
|
||||||
|
// 空间动态价格
|
||||||
|
type ZoneMomentPrice struct {
|
||||||
|
Id int64 `json:"id" bson:"_id"` // 动态id
|
||||||
|
Zid int64 `json:"zid" bson:"zid"` // 空间id
|
||||||
|
Mid int64 `json:"mid" bson:"mid"` // 主播mid
|
||||||
|
Price int64 `json:"price" bson:"price"` // 动态价格,单位:分
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue