123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- package unicom
- import (
- "context"
- "fmt"
- "time"
- "go-common/app/interface/main/app-wall/conf"
- "go-common/app/interface/main/app-wall/model/unicom"
- "go-common/library/cache/memcache"
- "go-common/library/ecode"
- log "go-common/library/log"
- )
- const (
- _initIPUnicomKey = "ipunicom_%v_%v"
- )
- // loadUnicomIP load unicom ip
- func (s *Service) loadUnicomIP() {
- unicomIP, err := s.dao.IPSync(context.TODO())
- if err != nil {
- log.Error("s.dao.IPSync error(%v)", err)
- return
- }
- s.unicomIpCache = unicomIP
- tmp := map[string]*unicom.UnicomIP{}
- for _, u := range s.unicomIpCache {
- key := fmt.Sprintf(_initIPUnicomKey, u.Ipbegin, u.Ipend)
- tmp[key] = u
- }
- s.unicomIpSQLCache = tmp
- log.Info("loadUnicomIPCache success")
- }
- // loadIPlimit ip limit
- func (s *Service) loadIPlimit(c *conf.Config) {
- hosts := make(map[string]struct{}, len(c.IPLimit.Addrs))
- for k, v := range c.IPLimit.Addrs {
- for _, ipStr := range v {
- key := fmt.Sprintf(_initIPlimitKey, k, ipStr)
- if _, ok := hosts[key]; !ok {
- hosts[key] = struct{}{}
- }
- }
- }
- s.operationIPlimit = hosts
- log.Info("load operationIPlimit success")
- }
- // loadUnicomIPOrder load unciom ip order update
- func (s *Service) loadUnicomIPOrder(now time.Time) {
- unicomIP, err := s.dao.UnicomIP(context.TODO(), now)
- if err != nil {
- log.Error("s.dao.UnicomIP(%v)", err)
- return
- }
- if len(unicomIP) == 0 {
- log.Info("unicom ip orders is null")
- return
- }
- tx, err := s.dao.BeginTran(context.TODO())
- if err != nil {
- log.Error("s.dao.BeginTran error(%v)", err)
- return
- }
- for _, uip := range unicomIP {
- key := fmt.Sprintf(_initIPUnicomKey, uip.Ipbegin, uip.Ipend)
- if _, ok := s.unicomIpSQLCache[key]; ok {
- delete(s.unicomIpSQLCache, key)
- continue
- }
- var (
- result int64
- )
- if result, err = s.dao.InUnicomIPSync(tx, uip, time.Now()); err != nil || result == 0 {
- tx.Rollback()
- log.Error("s.dao.InUnicomIPSync error(%v)", err)
- return
- }
- }
- for _, uold := range s.unicomIpSQLCache {
- var (
- result int64
- )
- if result, err = s.dao.UpUnicomIP(tx, uold.Ipbegin, uold.Ipend, 0, time.Now()); err != nil || result == 0 {
- tx.Rollback()
- log.Error("s.dao.UpUnicomIP error(%v)", err)
- return
- }
- }
- if err = tx.Commit(); err != nil {
- log.Error("tx.Commit error(%v)", err)
- return
- }
- log.Info("update unicom ip success")
- }
- func (s *Service) loadUnicomPacks() {
- pack, err := s.dao.UserPacks(context.TODO())
- if err != nil {
- log.Error("s.dao.UserPacks error(%v)", err)
- return
- }
- s.unicomPackCache = pack
- }
- func (s *Service) loadUnicomFlow() {
- var (
- list map[string]*unicom.UnicomUserFlow
- err error
- )
- if list, err = s.dao.UserFlowListCache(context.TODO()); err != nil {
- log.Error("load unicom s.dao.UserFlowListCache error(%v)", err)
- return
- }
- for key, u := range list {
- var (
- c = context.TODO()
- requestNo int64
- orderstatus string
- msg string
- )
- if err = s.dao.UserFlowCache(c, key); err != nil {
- if err == memcache.ErrNotFound {
- if err = s.returnPoints(c, u); err != nil {
- if err != ecode.NothingFound {
- log.Error("load unicom s.returnPoints error(%v)", err)
- continue
- }
- err = nil
- }
- log.Info("load unicom userbind timeout flow(%v)", u)
- } else {
- log.Error("load unicom s.dao.UserFlowCache error(%v)", err)
- continue
- }
- } else {
- if requestNo, err = s.seqdao.SeqID(c); err != nil {
- log.Error("load unicom s.seqdao.SeqID error(%v)", err)
- continue
- }
- if orderstatus, msg, err = s.dao.FlowQry(c, u.Phone, requestNo, u.Outorderid, u.Orderid, time.Now()); err != nil {
- log.Error("load unicom s.dao.FlowQry error(%v) msg(%s)", err, msg)
- continue
- }
- log.Info("load unicom userbind flow(%v) orderstatus(%s)", u, orderstatus)
- if orderstatus == "00" {
- continue
- } else if orderstatus != "01" {
- if err = s.returnPoints(c, u); err != nil {
- if err != ecode.NothingFound {
- log.Error("load unicom s.returnPoints error(%v)", err)
- continue
- }
- err = nil
- }
- }
- }
- delete(list, key)
- if err = s.dao.DeleteUserFlowCache(c, key); err != nil {
- log.Error("load unicom s.dao.DeleteUserFlowCache error(%v)", err)
- continue
- }
- }
- if err = s.dao.AddUserFlowListCache(context.TODO(), list); err != nil {
- log.Error("load unicom s.dao.AddUserFlowListCache error(%v)", err)
- return
- }
- log.Info("load unicom flow success")
- }
- // returnPoints retutn user integral and flow
- func (s *Service) returnPoints(c context.Context, u *unicom.UnicomUserFlow) (err error) {
- var (
- userbind *unicom.UserBind
- result int64
- )
- if userbind, err = s.unicomBindInfo(c, u.Mid); err != nil {
- return
- }
- ub := &unicom.UserBind{}
- *ub = *userbind
- ub.Flow = ub.Flow + u.Flow
- ub.Integral = ub.Integral + u.Integral
- if err = s.dao.AddUserBindCache(c, ub.Mid, ub); err != nil {
- log.Error("unicom s.dao.AddUserBindCache error(%v)", err)
- return
- }
- if result, err = s.dao.UpUserIntegral(c, ub); err != nil || result == 0 {
- log.Error("unicom s.dao.UpUserIntegral error(%v) or result==0", err)
- return
- }
- var packInt int
- if u.Integral > 0 {
- packInt = u.Integral
- } else {
- packInt = u.Flow
- }
- log.Info("unicom_pack(%v) mid(%v)", u.Desc+",领取失败并返还", userbind.Mid)
- s.unicomPackInfoc(userbind.Usermob, u.Desc+",领取失败并返还", u.Orderid, userbind.Phone, packInt, 0, userbind.Mid, time.Now())
- return
- }
|