123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- package service
- import (
- "context"
- "sort"
- "encoding/json"
- "go-common/app/interface/main/dm2/model"
- "go-common/library/log"
- )
- const (
- _subtitleLanFileName = "subtitle_lan.json"
- )
- // SubtitleLanOp .
- func (s *Service) SubtitleLanOp(c context.Context, code uint8, lan, docZh, docEn string, isDelete bool) (err error) {
- var (
- subtitleLans []*model.SubtitleLan
- subtitleLan *model.SubtitleLan
- bs []byte
- )
- subtitleLan = &model.SubtitleLan{
- Code: int64(code),
- Lan: lan,
- DocZh: docZh,
- DocEn: docEn,
- IsDelete: isDelete,
- }
- if err = s.dao.SubtitleLanAdd(c, subtitleLan); err != nil {
- log.Error("params(subtitleLan:%+v).error(%v)", subtitleLan, err)
- return
- }
- if subtitleLans, err = s.dao.SubtitleLans(c); err != nil {
- log.Error("SubtitleLans.error(%v)", err)
- return
- }
- if bs, err = json.Marshal(subtitleLans); err != nil {
- log.Error("json.Marshal.params(subtitleLan:%+v).error(%v)", subtitleLan, err)
- return
- }
- // reload bfs
- if _, err = s.dao.UploadBfs(c, _subtitleLanFileName, bs); err != nil {
- log.Error("UploadBfs.params.error(%v)", err)
- return
- }
- return
- }
- func (s *Service) isSubtitleLanLock(c context.Context, oid int64, tp int32, lan string) (subtitle *model.Subtitle, err error) {
- var (
- vss []*model.VideoSubtitle
- subtitleID int64
- )
- if vss, err = s.getVideoSubtitles(c, oid, tp); err != nil {
- log.Error("params(oid:%v, tp:%v) error(%v)", oid, tp, err)
- return
- }
- for _, vs := range vss {
- if vs.Lan == lan {
- subtitleID = vs.ID
- break
- }
- }
- if subtitleID > 0 {
- if subtitle, err = s.getSubtitle(c, oid, subtitleID); err != nil {
- log.Error("params(oid:%v, subtitleID:%v) error(%v)", oid, subtitleID, err)
- return
- }
- }
- return
- }
- // SubtitleLans .
- func (s *Service) SubtitleLans(c context.Context, oid int64, tp int32, mid int64) (lans []*model.Language, err error) {
- var (
- vss []*model.VideoSubtitle
- res *model.SearchSubtitleResult
- _searchStatus = []int64{int64(model.SubtitleStatusDraft), int64(model.SubtitleStatusToAudit), int64(model.SubtitleStatusAuditBack), int64(model.SubtitleStatusCheckToAudit)}
- subtitleIds []int64
- subtitles []*model.Subtitle
- subtitlesM map[int64]*model.Subtitle
- mapLans map[string]*model.Language
- _maxPageSize = 200
- subtitleMap map[string][]*model.Subtitle
- lan *model.Language
- ok bool
- )
- mapLans = make(map[string]*model.Language)
- if vss, err = s.getVideoSubtitles(c, oid, tp); err != nil {
- log.Error("params(oid:%v,tp:%v).error(%v)", oid, tp, err)
- return
- }
- if res, err = s.dao.SearchSubtitles(c, 1, int32(_maxPageSize), mid, nil, 0, oid, tp, _searchStatus); err == nil {
- if res != nil {
- for _, result := range res.Results {
- subtitleIds = append(subtitleIds, result.ID)
- }
- }
- } else {
- log.Error("SearchSubtitles.params(mid:%v,oid:%v),error(%v)", mid, oid, err)
- err = nil
- }
- for _, vs := range vss {
- mapLans[vs.Lan] = &model.Language{
- Lan: vs.Lan,
- LanDoc: vs.LanDoc,
- Pub: &model.LanguagePub{
- SubtitleID: vs.ID,
- IsLock: vs.IsLock,
- IsPub: true,
- },
- }
- }
- if len(subtitleIds) > 0 {
- if subtitlesM, err = s.getSubtitles(c, oid, subtitleIds); err != nil {
- log.Error("params(oid:%v,subtitleDraftIds:%v).error(%v)", oid, subtitleIds, err)
- return
- }
- subtitleMap = make(map[string][]*model.Subtitle)
- for _, subtitle := range subtitlesM {
- tlan, tlanDoc := s.subtitleLans.GetByID(int64(subtitle.Lan))
- if lan, ok = mapLans[tlan]; !ok {
- lan = &model.Language{
- Lan: tlan,
- LanDoc: tlanDoc,
- }
- mapLans[tlan] = lan
- }
- switch subtitle.Status {
- case model.SubtitleStatusDraft:
- lan.Draft = &model.LanguageID{
- SubtitleID: subtitle.ID,
- }
- case model.SubtitleStatusToAudit:
- lan.Audit = &model.LanguageID{
- SubtitleID: subtitle.ID,
- }
- case model.SubtitleStatusAuditBack:
- subtitleMap[tlan] = append(subtitleMap[tlan], subtitle)
- }
- }
- for _, subtitles = range subtitleMap {
- if len(subtitles) > 0 {
- sort.Slice(subtitles, func(i, j int) bool {
- return subtitles[i].PubTime > subtitles[j].PubTime
- })
- tlan, tlanDoc := s.subtitleLans.GetByID(int64(subtitles[0].Lan))
- if lan, ok = mapLans[tlan]; !ok {
- lan = &model.Language{
- Lan: tlan,
- LanDoc: tlanDoc,
- }
- mapLans[tlan] = lan
- }
- lan.AuditBack = &model.LanguageID{
- SubtitleID: subtitles[0].ID,
- }
- }
- }
- }
- lans = make([]*model.Language, 0, len(mapLans))
- for _, mapLan := range mapLans {
- lans = append(lans, mapLan)
- }
- return
- }
|