You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
4.0 KiB
160 lines
4.0 KiB
package service |
|
|
|
import ( |
|
"context" |
|
|
|
"go-common/app/admin/main/dm/model" |
|
accountApi "go-common/app/service/main/account/api" |
|
"go-common/app/service/main/archive/api" |
|
arcMdl "go-common/app/service/main/archive/model/archive" |
|
|
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
) |
|
|
|
// MaskState get mask state |
|
func (s *Service) MaskState(c context.Context, tp int32, oid int64) (open, mobile, web int32, err error) { |
|
sub, err := s.dao.Subject(c, tp, oid) |
|
if err != nil { |
|
return |
|
} |
|
if sub == nil { |
|
err = ecode.ArchiveNotExist |
|
return |
|
} |
|
return sub.AttrVal(model.AttrSubMaskOpen), sub.AttrVal(model.AttrSubMblMaskReady), sub.AttrVal(model.AttrSubWebMaskReady), err |
|
} |
|
|
|
// UpdateMaskState update mask state |
|
func (s *Service) UpdateMaskState(c context.Context, tp int32, oid int64, plat int8, state int32) (err error) { |
|
var ( |
|
archive3 *api.Arc |
|
err1 error |
|
duration int64 |
|
typeID int32 |
|
) |
|
sub, err := s.dao.Subject(c, tp, oid) |
|
if err != nil { |
|
return |
|
} |
|
if sub == nil { |
|
err = ecode.ArchiveNotExist |
|
return |
|
} |
|
if archive3, err1 = s.arcRPC.Archive3(c, &arcMdl.ArgAid2{Aid: sub.Pid}); err1 == nil && archive3 != nil { |
|
duration = archive3.Duration |
|
typeID = archive3.TypeID |
|
} |
|
if state == model.AttrYes { |
|
switch plat { |
|
case model.MaskPlatMbl: |
|
if sub.AttrVal(model.AttrSubMblMaskReady) == model.AttrNo { |
|
if err = s.dao.GenerateMask(c, oid, sub.Mid, plat, 0, sub.Pid, duration, typeID); err != nil { |
|
return |
|
} |
|
} |
|
case model.MaskPlatWeb: |
|
if sub.AttrVal(model.AttrSubWebMaskReady) == model.AttrNo { |
|
if err = s.dao.GenerateMask(c, oid, sub.Mid, plat, 0, sub.Pid, duration, typeID); err != nil { |
|
return |
|
} |
|
} |
|
default: |
|
if sub.AttrVal(model.AttrSubMblMaskReady) == model.AttrNo || sub.AttrVal(model.AttrSubWebMaskReady) == model.AttrNo { |
|
if err = s.dao.GenerateMask(c, oid, sub.Mid, plat, 0, sub.Pid, duration, typeID); err != nil { |
|
return |
|
} |
|
} |
|
} |
|
} |
|
sub.AttrSet(state, model.AttrSubMaskOpen) |
|
_, err = s.dao.UpSubjectAttr(c, tp, oid, sub.Attr) |
|
return |
|
} |
|
|
|
// GenerateMask generate mask |
|
func (s *Service) GenerateMask(c context.Context, tp int32, oid int64, plat int8) (err error) { |
|
var ( |
|
archive3 *api.Arc |
|
err1 error |
|
duration int64 |
|
typeID int32 |
|
) |
|
sub, err := s.dao.Subject(c, tp, oid) |
|
if err != nil { |
|
return |
|
} |
|
if sub == nil { |
|
err = ecode.ArchiveNotExist |
|
return |
|
} |
|
if archive3, err1 = s.arcRPC.Archive3(c, &arcMdl.ArgAid2{Aid: sub.Pid}); err1 == nil && archive3 != nil { |
|
duration = archive3.Duration |
|
typeID = archive3.TypeID |
|
} |
|
err = s.dao.GenerateMask(c, oid, sub.Mid, plat, 1, sub.Pid, duration, typeID) |
|
return |
|
} |
|
|
|
// MaskUps get mask up infos. |
|
func (s *Service) MaskUps(c context.Context, pn, ps int64) (res *model.MaskUpRes, err error) { |
|
|
|
MaskUps, total, err := s.dao.MaskUps(c, pn, ps) |
|
if err != nil { |
|
return |
|
} |
|
mids := make([]int64, 0, len(MaskUps)) |
|
for _, up := range MaskUps { |
|
mids = append(mids, up.Mid) |
|
} |
|
arg := &accountApi.MidsReq{Mids: mids} |
|
uInfos, err := s.accountRPC.Infos3(c, arg) |
|
if err != nil { |
|
log.Error("s.accRPC.Infos3(%v) error(%v)", mids, err) |
|
return |
|
} |
|
for _, up := range MaskUps { |
|
if info, ok := uInfos.GetInfos()[up.Mid]; ok { |
|
up.Name = info.Name |
|
} |
|
} |
|
res = &model.MaskUpRes{ |
|
Result: MaskUps, |
|
Page: &model.PageInfo{ |
|
Num: pn, |
|
Size: ps, |
|
Total: total, |
|
}, |
|
} |
|
return |
|
} |
|
|
|
// MaskUpOpen add mask up |
|
func (s *Service) MaskUpOpen(c context.Context, mids []int64, state int32, comment string) (err error) { |
|
midMap := make(map[int64]struct{}) |
|
ids := make([]int64, 0, len(mids)) |
|
for _, mid := range mids { |
|
if _, ok := midMap[mid]; !ok { |
|
midMap[mid] = struct{}{} |
|
ids = append(ids, mid) |
|
} |
|
} |
|
// 验证mids |
|
arg := &accountApi.MidsReq{Mids: ids} |
|
uInfos, err := s.accountRPC.Infos3(c, arg) |
|
if err != nil { |
|
log.Error("s.accRPC.Infos3(%v) error(%v)", ids, err) |
|
return |
|
} |
|
if len(uInfos.GetInfos()) < len(ids) { |
|
err = ecode.AccountInexistence |
|
log.Error("s.MaskUpOpen length diff(%d,%d)", len(ids), len(uInfos.GetInfos())) |
|
return |
|
} |
|
for _, id := range ids { |
|
if _, err = s.dao.MaskUpOpen(c, id, state, comment); err != nil { |
|
return |
|
} |
|
} |
|
return |
|
}
|
|
|