go-common/app/interface/main/creative/dao/elec/dao.go
2019-04-22 18:49:16 +08:00

179 lines
5.0 KiB
Go

package elec
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/creative/conf"
"go-common/app/interface/main/creative/model/elec"
"go-common/library/ecode"
"go-common/library/log"
httpx "go-common/library/net/http/blademaster"
"go-common/library/xstr"
)
const (
_userStatURL = "/internal/member/info"
_arcStatURL = "/internal/member/show"
_elecRelationURI = "/api/query.elec.relation.do"
)
// Dao define
type Dao struct {
c *conf.Config
// http
client *httpx.Client
// uri
userStatURI string
arcStatURI string
elecRelationURI string
// user
userInfoURL string
userJoinURL string
userExitURL string
// arc
arcOpenURL string
arcCloseURL string
notifyURL string
// status
getStatusURL string
setStatusURL string
// rank
recentRankURL string
currentRankURL string
totalRankURL string
// money
dailyBillURL string
balanceURL string
// recent elec for app
recentElecURL string
// elec remark
remarkListURL string
remarkDetailURL string
remarkURL string
}
// New init dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
c: c,
client: httpx.NewClient(c.HTTPClient.Slow),
userStatURI: c.Host.Elec + _userStatURL,
arcStatURI: c.Host.Elec + _arcStatURL,
elecRelationURI: c.Host.Elec + _elecRelationURI,
// api elec.
userInfoURL: c.Host.Elec + _userInfoURI,
userJoinURL: c.Host.Elec + _userJoinURI,
userExitURL: c.Host.Elec + _userExitURI,
arcOpenURL: c.Host.Elec + _arcOpenURI,
arcCloseURL: c.Host.Elec + _arcCloseURI,
notifyURL: c.Host.Elec + _notifyURI,
getStatusURL: c.Host.Elec + _getStatusURI,
setStatusURL: c.Host.Elec + _setStatusURI,
recentRankURL: c.Host.Elec + _recentRankURI,
currentRankURL: c.Host.Elec + _currentRankURI,
totalRankURL: c.Host.Elec + _totalRankURI,
dailyBillURL: c.Host.Elec + _dailyBillURI,
balanceURL: c.Host.Elec + _balanceURI,
recentElecURL: c.Host.Elec + _recentElecURI,
remarkListURL: c.Host.Elec + _remarkListURI,
remarkDetailURL: c.Host.Elec + _remarkDetailURI,
remarkURL: c.Host.Elec + _remarkURI,
}
return
}
// UserState get user elec state.
func (d *Dao) UserState(c context.Context, mid int64, ip string) (data *elec.UserState, err error) {
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data struct {
Mid int `json:"mid"`
State int `json:"state"`
Reason string `json:"reason"`
Count int `json:"count"`
CTime string `json:"ctime"`
} `json:"data"`
}
if err = d.client.Get(c, d.userInfoURL, ip, params, &res); err != nil {
log.Error("elec url(%s) response(%v) error(%v)", d.userInfoURL+"?"+params.Encode(), res, err)
err = ecode.CreativeElecErr
return
}
log.Info("UserState d.userInfoURL url(%s), code(%d)", d.userInfoURL+"?"+params.Encode(), res.Code)
if res.Code != 0 {
log.Error("elec url(%s) res(%v)", d.userInfoURL, res)
err = ecode.CreativeElecErr
return
}
data = &elec.UserState{
Mid: strconv.Itoa(res.Data.Mid),
State: strconv.Itoa(res.Data.State),
Count: strconv.Itoa(res.Data.Count),
CTime: res.Data.CTime,
Reason: res.Data.Reason,
}
return
}
// ArchiveState get arc elec state.
func (d *Dao) ArchiveState(c context.Context, aid, mid int64, ip string) (data *elec.ArcState, err error) {
params := url.Values{}
params.Set("upmid", strconv.FormatInt(mid, 10))
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("aid", strconv.FormatInt(aid, 10))
params.Set("nolist", "1")
var res struct {
Code int `json:"code"`
Data *elec.ArcState `json:"data"`
}
if err = d.client.Get(c, d.arcStatURI, ip, params, &res); err != nil {
log.Error("elec url(%s) response(%v) error(%v)", d.arcStatURI+"?"+params.Encode(), res, err)
err = ecode.CreativeElecErr
return
}
log.Info("ArchiveState d.arcStatURI url(%s), code(%d)", d.arcStatURI+"?"+params.Encode(), res.Code)
if res.Code != 0 {
log.Error("elec url(%s) res(%v)", d.arcStatURI, res)
err = ecode.CreativeElecErr
return
}
data = res.Data
return
}
// ElecRelation check if multi user charged.
func (d *Dao) ElecRelation(c context.Context, mid int64, mids []int64, ip string) (chargeMap map[int64]int, err error) {
params := url.Values{}
params.Set("act", "appkey")
params.Set("type", "json")
params.Set("up_mid", strconv.Itoa(int(mid)))
params.Set("mids", xstr.JoinInts(mids))
var res struct {
Code int `json:"code"`
Data *elec.EleRelation `json:"data"`
}
if err = d.client.Get(c, d.elecRelationURI, ip, params, &res); err != nil {
log.Error("elec url(%s) response(%v) error(%v)", d.elecRelationURI+"?"+params.Encode(), res, err)
err = ecode.CreativeElecErr
return
}
if res.Code != 0 {
log.Error("elec url(%s) res(%v)", d.elecRelationURI, res)
err = ecode.CreativeElecErr
return
}
chargeMap = map[int64]int{}
for _, v := range res.Data.RetList {
if !v.IsElec {
chargeMap[v.Mid] = 0
} else {
chargeMap[v.Mid] = 1
}
}
return
}