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.
106 lines
3.0 KiB
106 lines
3.0 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"encoding/json" |
|
"strconv" |
|
"time" |
|
|
|
"go-common/app/job/main/credit/model" |
|
blkmdl "go-common/app/service/main/member/model/block" |
|
"go-common/library/log" |
|
xtime "go-common/library/time" |
|
) |
|
|
|
// InvalidJury invalid juryer. |
|
func (s *Service) InvalidJury(c context.Context, nwMsg []byte, oldMsg []byte) (err error) { |
|
mr := &model.BlockedInfo{} |
|
if err = json.Unmarshal(nwMsg, mr); err != nil { |
|
log.Error("json.Unmarshal(%s) error(%v)", string(nwMsg), err) |
|
return |
|
} |
|
if err = s.dao.InvalidJury(c, model.JuryBlocked, mr.UID); err != nil { |
|
log.Error("s.dao.InvalidJury(%d %d) error(%v)", model.JuryBlocked, mr.UID, err) |
|
} |
|
return |
|
} |
|
|
|
// UnBlockAccount unblock account. |
|
func (s *Service) UnBlockAccount(c context.Context, nwMsg []byte, oldMsg []byte) (err error) { |
|
nMR := &model.BlockedInfo{} |
|
if err = json.Unmarshal(nwMsg, nMR); err != nil { |
|
log.Error("json.Unmarshal(%s) error(%v)", string(nwMsg), err) |
|
return |
|
} |
|
oMR := &model.BlockedInfo{} |
|
if err = json.Unmarshal(oldMsg, oMR); err != nil { |
|
log.Error("json.Unmarshal(%s) error(%v)", string(oldMsg), err) |
|
return |
|
} |
|
if int8(oMR.Status) != model.StatusOpen { |
|
return |
|
} |
|
if int8(nMR.Status) != model.StatusClose { |
|
return |
|
} |
|
var id int64 |
|
if id, err = s.dao.BlockedInfoID(c, nMR.UID); err != nil { |
|
log.Error("s.dao.BlockedInfoID(%+v) error(%v)", oMR, err) |
|
return |
|
} |
|
if id != nMR.ID { |
|
log.Warn("databus id(%d) do uid(%d) unblocked info(%d) not right!", nMR.ID, nMR.UID, id) |
|
return |
|
} |
|
if err = s.dao.UnBlockAccount(c, oMR); err != nil { |
|
log.Error("s.dao.UnBlockAccount(%+v) error(%v)", oMR, err) |
|
} |
|
return |
|
} |
|
|
|
// CheckBlock check user block state |
|
func (s *Service) CheckBlock(c context.Context, mid int64) (ok bool, err error) { |
|
var block *blkmdl.RPCResInfo |
|
if block, err = s.memRPC.BlockInfo(c, &blkmdl.RPCArgInfo{MID: mid}); err != nil { |
|
log.Error("s.memRPC.BlockInfo(%d) error(%+v)", err) |
|
return |
|
} |
|
status := int8(block.BlockStatus) |
|
if status == model.BlockStatusOn { |
|
log.Warn("mid(%d) in blocked", mid) |
|
return |
|
} |
|
if status == model.BlockStatusForever { |
|
log.Warn("mid(%d) in blocked forever", mid) |
|
return |
|
} |
|
ok = true |
|
return |
|
} |
|
|
|
// NotifyBlockAnswer notify block answer status |
|
func (s *Service) NotifyBlockAnswer(c context.Context, nwMsg []byte) (err error) { |
|
mr := &model.BlockLabourAnswerLog{} |
|
if err = json.Unmarshal(nwMsg, mr); err != nil { |
|
log.Error("json.Unmarshal(%s) error(%v)", string(nwMsg), err) |
|
return |
|
} |
|
if mr.Score < 100 { |
|
log.Warn("mid(%d) answer score(%d) lt 100", mr.Score, mr.Score) |
|
return |
|
} |
|
var ts time.Time |
|
if ts, err = time.ParseInLocation(model.TimeFormatSec, mr.CTime, time.Local); err != nil { |
|
log.Error("time.ParseInLocation(%s) error(%v)", mr.CTime, err) |
|
return |
|
} |
|
key := strconv.FormatInt(mr.MID, 10) |
|
msg := &model.LabourAnswer{MID: mr.MID, MTime: xtime.Time(ts.Unix())} |
|
if err = s.labourSub.Send(c, key, msg); err != nil { |
|
log.Error("PubLabour.Pub(%s, %+v) error (%v)", key, msg, err) |
|
} |
|
if err = s.dao.DelAnswerStateCache(c, mr.MID); err != nil { |
|
log.Error("DelAnswerStateCache(%d) error (%v)", mr.MID, err) |
|
} |
|
return |
|
}
|
|
|