package dbstruct import ( "errors" "service/library/wishjson" ) // 图片 const ( ImageStatusResizeInit = 0 ImageStatusResizeDone = 100 ImageStatusResizeFail = 101 ) // 视频 const ( VideoStatusResizeInit = 0 VideoStatusResizeDone = 100 VideoStatusResizeFail = 101 ) type Image struct { Id int64 `json:"id" bson:"_id"` // 图片id Ct int64 `json:"ct" bson:"ct"` // 创建时间 Ut int64 `json:"ut" bson:"ut"` // 更新时间 SrcId string `json:"src_id" bson:"src_id"` // 源id SizeSrc int64 `json:"size_src" bson:"size_src"` // 原图片大小 SrcId720 string `json:"src_id_720" bson:"src_id_720"` // 720P图片 Size720 int64 `json:"size_720" bson:"size_720"` // 720P图片大小 SrcId1080 string `json:"src_id_1080" bson:"src_id_1080"` // 1080P图片 Size1080 int64 `json:"size_1080" bson:"size_1080"` // 1080P图片大小 SrcId1440 string `json:"src_id_1440" bson:"src_id_1440"` // 1440P图片 Size1440 int64 `json:"size_1440" bson:"size_1440"` // 1440P图片大小 Status int `json:"status" bson:"status"` // 状态 ResizeT int64 `json:"resize_t" bson:"resize_t"` // 压缩时间 MD5 string `json:"md5" bson:"md5"` // 视频md5 W int64 `json:"w" bson:"w"` // 宽 H int64 `json:"h" bson:"h"` // 高 Fmt string `json:"fmt" bson:"fmt"` // 图片格式 } func (i *Image) SelectMinSizeOssId() string { if i == nil { return "" } if len(i.SrcId720) > 0 && i.Size720 < i.SizeSrc { return i.SrcId720 } return i.SrcId } type ToCImage struct { Id int64 `json:"id"` // 图片id W int64 `json:"w"` // 宽 H int64 `json:"h"` // 高 Fmt string `json:"fmt"` // 图片格式 Urls []string `json:"urls"` // 图片展示地址 } // 视频 type Video struct { Id int64 `json:"id" bson:"_id"` // 视频id Ct int64 `json:"ct" bson:"ct"` // 创建时间 Ut int64 `json:"ut" bson:"ut"` // 更新时间 SrcId string `json:"src_id" bson:"src_id"` // 源id SizeSrc int64 `json:"size_src" bson:"size_src"` // 原视频大小 SrcId720 string `json:"src_id_720" bson:"src_id_720"` // 720P视频 Size720 int64 `json:"size_720" bson:"size_720"` // 720P视频大小 SrcIdH264 string `json:"src_id_h264" bson:"src_id_h264"` // 原视频h264 mp4 SizeH264 int64 `json:"size_h264" bson:"size_h264"` // 原视频h264 mp4大小 Status int `json:"status" bson:"status"` // 状态 ResizeT int64 `json:"resize_t" bson:"resize_t"` // 压缩时间 CoverSrcId string `json:"cover_src_id" bson:"cover_src_id"` // cover srcId CoverId int64 `json:"cover_id" bson:"cover_id"` // 封面id MD5 string `json:"md5" bson:"md5"` // 视频md5 Dur int64 `json:"dur" bson:"dur"` // 视频时长 Fmt string `json:"fmt" bson:"fmt"` } var SrcVidMap = map[int64]bool{ 130337: true, 130333: true, 130319: true, 127635: true, 126370: true, 126360: true, 123141: true, 123091: true, 120215: true, 120194: true, 120186: true, 120184: true, 118368: true, 118124: true, 117231: true, 117209: true, 113009: true, 112996: true, 111162: true, 110511: true, 109734: true, 108184: true, 107836: true, 106902: true, 104865: true, 104863: true, 103998: true, 103996: true, 103982: true, 103752: true, 100327: true, 100315: true, 99188: true, 97052: true, 97044: true, 95953: true, 95934: true, 95063: true, 94282: true, 93427: true, 92073: true, 91566: true, 91546: true, 90964: true, 90962: true, 128309: true, 124206: true, 109374: true, 108582: true, 108580: true, 102579: true, 209021: true, 200984: true, 188866: true, 186515: true, 184010: true, 165414: true, 161427: true, 156552: true, 156548: true, 154151: true, 154133: true, 153913: true, 152884: true, 152882: true, 144588: true, 141899: true, 141229: true, 138228: true, 138217: true, 138215: true, 138053: true, 137916: true, 135941: true, 135939: true, 135908: true, 133284: true, 132867: true, 131827: true, 131178: true, 130967: true, 129863: true, 128209: true, 128205: true, 125196: true, 125170: true, 125164: true, 125158: true, 125099: true, 124980: true, 124978: true, } func (i *Video) SelectMinSizeOssId() string { if SrcVidMap[i.Id] { return i.SrcId } if i == nil { return "" } if i.Status == VideoStatusResizeDone && len(i.SrcId720) > 0 && i.Size720 < i.SizeSrc { return i.SrcId720 } return i.SrcId } func (i *Video) MustSelectMinSizeOssId() string { if i == nil { return "" } if i.Status == VideoStatusResizeDone && len(i.SrcId720) > 0 && i.Size720 < i.SizeSrc { return i.SrcId720 } return i.SrcId } type ToCVideo struct { Id int64 `json:"id"` // 视频id Dur int64 `json:"dur"` // 视频时 CoverUrls []string `json:"cover_urls"` // 视频封面地址 CoverW int64 `json:"cover_w"` // 封面宽 CoverH int64 `json:"cover_h"` // 封面高 CoverFmt string `json:"cover_fmt"` // 封面图片格式 Urls []string `json:"urls"` // 视频地址 } func NewImageFromJson(item any) (img *Image, err error) { j := wishjson.New(item) img = &Image{ SrcId: j.Get("src_id").MustPhpString(), MD5: j.Get("md5").MustPhpString(), W: j.Get("w").MustPhpInt(), H: j.Get("h").MustPhpInt(), Fmt: j.Get("fmt").MustPhpString(), } if img.SrcId == "" { err = errors.New("invalid image object with null src_id") return } if img.MD5 == "" { err = errors.New("invalid image object with null md5") return } if img.W == 0 { err = errors.New("invalid image object with zero-width") return } if img.H == 0 { err = errors.New("invalid image object with zero-height") return } if img.Fmt == "" { err = errors.New("invalid image object with null fmt") return } return } func NewVideoFromJson(item any) (vid *Video, err error) { j := wishjson.New(item) vid = &Video{ SrcId: j.Get("src_id").MustPhpString(), CoverSrcId: j.Get("cover_src_id").MustPhpString(), CoverId: j.Get("cover_id").MustPhpInt(), MD5: j.Get("md5").MustPhpString(), Dur: j.Get("dur").MustPhpInt(), Fmt: j.Get("fmt").MustPhpString(), } if vid.SrcId == "" { err = errors.New("invalid video object with null src_id") return } if vid.CoverId == 0 { err = errors.New("invalid video object with zero cover_id") return } if vid.MD5 == "" { err = errors.New("invalid video object with null md5") return } //if vid.Dur == 0 { // err = errors.New("invalid video object with zero dur") // return //} if vid.Fmt == "" { err = errors.New("invalid video object with null fmt") return } return }