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.
178 lines
5.0 KiB
178 lines
5.0 KiB
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 |
|
}
|
|
|