123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- package mobile
- import (
- "context"
- "time"
- "go-common/app/interface/main/app-wall/model"
- "go-common/app/interface/main/app-wall/model/mobile"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- const (
- _mobileKey = "mobile"
- )
- // InOrdersSync insert OrdersSync
- func (s *Service) InOrdersSync(c context.Context, ip string, u *mobile.MobileXML, now time.Time) (err error) {
- if !s.iplimit(_mobileKey, ip) {
- err = ecode.AccessDenied
- return
- }
- var result int64
- if result, err = s.dao.InOrdersSync(c, u); err != nil || result == 0 {
- log.Error("mobile_s.dao.OrdersSync (%v) error(%v) or result==0", u, err)
- }
- return
- }
- // FlowSync update OrdersSync
- func (s *Service) FlowSync(c context.Context, u *mobile.MobileXML, ip string) (err error) {
- if !s.iplimit(_mobileKey, ip) {
- err = ecode.AccessDenied
- return
- }
- var result int64
- if result, err = s.dao.FlowSync(c, u); err != nil || result == 0 {
- log.Error("mobile_s.dao.OrdersSync(%v) error(%v) or result==0", u, err)
- }
- return
- }
- // Activation
- func (s *Service) Activation(c context.Context, usermob string, now time.Time) (msg string, err error) {
- rows := s.mobileInfo(c, usermob, now)
- res, ok := rows[usermob]
- if !ok {
- err = ecode.NothingFound
- msg = "该卡号尚未开通哔哩哔哩专属免流服务"
- return
- }
- for _, u := range res {
- if u.Actionid == 1 || (u.Actionid == 2 && now.Unix() <= int64(u.Expiretime)) {
- return
- }
- }
- err = ecode.NotModified
- msg = "该卡号哔哩哔哩专属免流服务已退订且已过期"
- return
- }
- // Activation
- func (s *Service) MobileState(c context.Context, usermob string, now time.Time) (res *mobile.Mobile) {
- data := s.mobileInfo(c, usermob, now)
- res = s.userState(data, usermob, now)
- return
- }
- // UserFlowState
- func (s *Service) UserMobileState(c context.Context, usermob string, now time.Time) (res *mobile.Mobile) {
- data := s.mobileInfo(c, usermob, now)
- if rows, ok := data[usermob]; ok {
- for _, res = range rows {
- if res.Actionid == 1 || (res.Actionid == 2 && now.Unix() <= int64(res.Expiretime)) {
- res.MobileType = 2
- return
- }
- }
- res = &mobile.Mobile{MobileType: 1}
- }
- res = &mobile.Mobile{MobileType: 1}
- return
- }
- // userState
- func (s *Service) userState(user map[string][]*mobile.Mobile, usermob string, now time.Time) (res *mobile.Mobile) {
- if rows, ok := user[usermob]; !ok {
- res = &mobile.Mobile{MobileType: 1}
- } else {
- for _, res = range rows {
- if res.Actionid == 2 && now.Unix() <= int64(res.Expiretime) {
- res.MobileType = 4
- break
- } else if res.Actionid == 1 {
- res.MobileType = 2
- break
- }
- }
- if res.MobileType == 0 {
- res.MobileType = 3
- }
- }
- log.Info("mobile_state_type:%v mobile_state_usermob:%v", res.MobileType, usermob)
- return
- }
- // mobileInfo
- func (s *Service) mobileInfo(c context.Context, usermob string, now time.Time) (res map[string][]*mobile.Mobile) {
- var (
- err error
- m []*mobile.Mobile
- tmps []*mobile.Mobile
- row = map[string][]*mobile.Mobile{}
- )
- res = map[string][]*mobile.Mobile{}
- if m, err = s.dao.MobileCache(c, usermob); err == nil && len(m) > 0 {
- row[usermob] = m
- s.pHit.Incr("mobile_cache")
- } else {
- row, err = s.dao.OrdersUserFlow(c, usermob, now)
- if err != nil {
- log.Error("mobile_s.dao.OrdersUserFlow error(%v)", err)
- return
- }
- s.pMiss.Incr("mobile_cache")
- if user, ok := row[usermob]; ok && len(user) > 0 {
- if err = s.dao.AddMobileCache(c, usermob, user); err != nil {
- log.Error("s.dao.AddMobileCache error(%v)", err)
- return
- }
- }
- }
- if ms, ok := row[usermob]; ok && len(ms) > 0 {
- for _, m := range ms {
- tmp := &mobile.Mobile{}
- *tmp = *m
- tmp.Productid = ""
- tmps = append(tmps, tmp)
- }
- res[usermob] = tmps
- }
- return
- }
- // IsMobileIP is mobile ip
- func (s *Service) IsMobileIP(ipUint uint32, ipStr, usermob string) (res *mobile.MobileUserIP) {
- res = &mobile.MobileUserIP{
- IPStr: ipStr,
- IsValide: false,
- }
- if !model.IsIPv4(ipStr) {
- return
- }
- for _, u := range s.mobileIpCache {
- if u.IPStartUint <= ipUint && u.IPEndUint >= ipUint {
- res.IsValide = true
- return
- }
- }
- log.Error("mobile_user_ip:%v mobile_ip_usermob:%v", ipStr, usermob)
- return
- }
- // mobileIp ip limit
- func (s *Service) iplimit(k, ip string) bool {
- return true
- }
|