mask.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package service
  2. import (
  3. "context"
  4. "go-common/app/admin/main/dm/model"
  5. accountApi "go-common/app/service/main/account/api"
  6. "go-common/app/service/main/archive/api"
  7. arcMdl "go-common/app/service/main/archive/model/archive"
  8. "go-common/library/ecode"
  9. "go-common/library/log"
  10. )
  11. // MaskState get mask state
  12. func (s *Service) MaskState(c context.Context, tp int32, oid int64) (open, mobile, web int32, err error) {
  13. sub, err := s.dao.Subject(c, tp, oid)
  14. if err != nil {
  15. return
  16. }
  17. if sub == nil {
  18. err = ecode.ArchiveNotExist
  19. return
  20. }
  21. return sub.AttrVal(model.AttrSubMaskOpen), sub.AttrVal(model.AttrSubMblMaskReady), sub.AttrVal(model.AttrSubWebMaskReady), err
  22. }
  23. // UpdateMaskState update mask state
  24. func (s *Service) UpdateMaskState(c context.Context, tp int32, oid int64, plat int8, state int32) (err error) {
  25. var (
  26. archive3 *api.Arc
  27. err1 error
  28. duration int64
  29. typeID int32
  30. )
  31. sub, err := s.dao.Subject(c, tp, oid)
  32. if err != nil {
  33. return
  34. }
  35. if sub == nil {
  36. err = ecode.ArchiveNotExist
  37. return
  38. }
  39. if archive3, err1 = s.arcRPC.Archive3(c, &arcMdl.ArgAid2{Aid: sub.Pid}); err1 == nil && archive3 != nil {
  40. duration = archive3.Duration
  41. typeID = archive3.TypeID
  42. }
  43. if state == model.AttrYes {
  44. switch plat {
  45. case model.MaskPlatMbl:
  46. if sub.AttrVal(model.AttrSubMblMaskReady) == model.AttrNo {
  47. if err = s.dao.GenerateMask(c, oid, sub.Mid, plat, 0, sub.Pid, duration, typeID); err != nil {
  48. return
  49. }
  50. }
  51. case model.MaskPlatWeb:
  52. if sub.AttrVal(model.AttrSubWebMaskReady) == model.AttrNo {
  53. if err = s.dao.GenerateMask(c, oid, sub.Mid, plat, 0, sub.Pid, duration, typeID); err != nil {
  54. return
  55. }
  56. }
  57. default:
  58. if sub.AttrVal(model.AttrSubMblMaskReady) == model.AttrNo || sub.AttrVal(model.AttrSubWebMaskReady) == model.AttrNo {
  59. if err = s.dao.GenerateMask(c, oid, sub.Mid, plat, 0, sub.Pid, duration, typeID); err != nil {
  60. return
  61. }
  62. }
  63. }
  64. }
  65. sub.AttrSet(state, model.AttrSubMaskOpen)
  66. _, err = s.dao.UpSubjectAttr(c, tp, oid, sub.Attr)
  67. return
  68. }
  69. // GenerateMask generate mask
  70. func (s *Service) GenerateMask(c context.Context, tp int32, oid int64, plat int8) (err error) {
  71. var (
  72. archive3 *api.Arc
  73. err1 error
  74. duration int64
  75. typeID int32
  76. )
  77. sub, err := s.dao.Subject(c, tp, oid)
  78. if err != nil {
  79. return
  80. }
  81. if sub == nil {
  82. err = ecode.ArchiveNotExist
  83. return
  84. }
  85. if archive3, err1 = s.arcRPC.Archive3(c, &arcMdl.ArgAid2{Aid: sub.Pid}); err1 == nil && archive3 != nil {
  86. duration = archive3.Duration
  87. typeID = archive3.TypeID
  88. }
  89. err = s.dao.GenerateMask(c, oid, sub.Mid, plat, 1, sub.Pid, duration, typeID)
  90. return
  91. }
  92. // MaskUps get mask up infos.
  93. func (s *Service) MaskUps(c context.Context, pn, ps int64) (res *model.MaskUpRes, err error) {
  94. MaskUps, total, err := s.dao.MaskUps(c, pn, ps)
  95. if err != nil {
  96. return
  97. }
  98. mids := make([]int64, 0, len(MaskUps))
  99. for _, up := range MaskUps {
  100. mids = append(mids, up.Mid)
  101. }
  102. arg := &accountApi.MidsReq{Mids: mids}
  103. uInfos, err := s.accountRPC.Infos3(c, arg)
  104. if err != nil {
  105. log.Error("s.accRPC.Infos3(%v) error(%v)", mids, err)
  106. return
  107. }
  108. for _, up := range MaskUps {
  109. if info, ok := uInfos.GetInfos()[up.Mid]; ok {
  110. up.Name = info.Name
  111. }
  112. }
  113. res = &model.MaskUpRes{
  114. Result: MaskUps,
  115. Page: &model.PageInfo{
  116. Num: pn,
  117. Size: ps,
  118. Total: total,
  119. },
  120. }
  121. return
  122. }
  123. // MaskUpOpen add mask up
  124. func (s *Service) MaskUpOpen(c context.Context, mids []int64, state int32, comment string) (err error) {
  125. midMap := make(map[int64]struct{})
  126. ids := make([]int64, 0, len(mids))
  127. for _, mid := range mids {
  128. if _, ok := midMap[mid]; !ok {
  129. midMap[mid] = struct{}{}
  130. ids = append(ids, mid)
  131. }
  132. }
  133. // 验证mids
  134. arg := &accountApi.MidsReq{Mids: ids}
  135. uInfos, err := s.accountRPC.Infos3(c, arg)
  136. if err != nil {
  137. log.Error("s.accRPC.Infos3(%v) error(%v)", ids, err)
  138. return
  139. }
  140. if len(uInfos.GetInfos()) < len(ids) {
  141. err = ecode.AccountInexistence
  142. log.Error("s.MaskUpOpen length diff(%d,%d)", len(ids), len(uInfos.GetInfos()))
  143. return
  144. }
  145. for _, id := range ids {
  146. if _, err = s.dao.MaskUpOpen(c, id, state, comment); err != nil {
  147. return
  148. }
  149. }
  150. return
  151. }