Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,57 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = [
"cpm_test.go",
"dao_test.go",
],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/web-show/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"cpm.go",
"dao.go",
"mysql.go",
],
importpath = "go-common/app/interface/main/web-show/dao/ad",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/web-show/conf:go_default_library",
"//app/interface/main/web-show/model/resource:go_default_library",
"//library/database/sql:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/stat/prom:go_default_library",
"//library/xstr:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,40 @@
package ad
import (
"context"
"fmt"
"net/url"
"strconv"
ad "go-common/app/interface/main/web-show/model/resource"
"go-common/library/log"
"go-common/library/xstr"
)
// Cpms get ads from cpm platform
func (d *Dao) Cpms(c context.Context, mid int64, ids []int64, sid, ip, country, province, city, buvid string) (advert *ad.Ad, err error) {
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("sid", sid)
params.Set("buvid", buvid)
params.Set("resource", xstr.JoinInts(ids))
params.Set("ip", ip)
params.Set("country", country)
params.Set("province", province)
params.Set("city", city)
var res struct {
Code int `json:"code"`
Data *ad.Ad `json:"data"`
}
if err = d.httpClient.Get(c, d.cpmURL, "", params, &res); err != nil {
log.Error("cpm url(%s) error(%v)", d.cpmURL+"?"+params.Encode(), err)
return
}
if res.Code != 0 {
err = fmt.Errorf("cpm api failed(%d)", res.Code)
log.Error("url(%s) res code(%d) or res.data(%v)", d.cpmURL+"?"+params.Encode(), res.Code, res.Data)
return
}
advert = res.Data
return
}

View File

@@ -0,0 +1,18 @@
package ad
import (
"context"
"testing"
. "github.com/smartystreets/goconvey/convey"
)
func TestDao_Cpms(t *testing.T) {
Convey("test Cpms", t, WithDao(func(d *Dao) {
mid := int64(5187977)
ids := []int64{121, 21, 12}
data, err := d.Cpms(context.TODO(), mid, ids, "", "", "", "", "", "")
So(err, ShouldBeNil)
Printf("%+v", data)
}))
}

View File

@@ -0,0 +1,52 @@
package ad
import (
"context"
"go-common/app/interface/main/web-show/conf"
xsql "go-common/library/database/sql"
"go-common/library/log"
httpx "go-common/library/net/http/blademaster"
"go-common/library/stat/prom"
)
// Dao define db struct
type Dao struct {
cpt *xsql.DB
// sql
selAdsStmt *xsql.Stmt
// cpt
httpClient *httpx.Client
cpmURL string
}
const (
_cpmURL = "/bce/api/bce/pc"
)
// PromError err
func PromError(name string, format string, args ...interface{}) {
prom.BusinessErrCount.Incr(name)
log.Error(format, args...)
}
// New init mysql db
func New(c *conf.Config) (dao *Dao) {
dao = &Dao{
cpt: xsql.NewMySQL(c.MySQL.Cpt),
httpClient: httpx.NewClient(c.HTTPClient),
cpmURL: c.Host.Ad + _cpmURL,
}
dao.selAdsStmt = dao.cpt.Prepared(_selAds)
return
}
// Close close the resource.
func (dao *Dao) Close() {
dao.cpt.Close()
}
// Ping ping mysql
func (dao *Dao) Ping(c context.Context) error {
return dao.cpt.Ping(c)
}

View File

@@ -0,0 +1,22 @@
package ad
import (
"flag"
"path/filepath"
"go-common/app/interface/main/web-show/conf"
)
var d *Dao
func WithDao(f func(d *Dao)) func() {
return func() {
dir, _ := filepath.Abs("../cmd/web-show-test.toml")
flag.Set("conf", dir)
conf.Init()
if d == nil {
d = New(conf.Conf)
}
f(d)
}
}

View File

@@ -0,0 +1,34 @@
package ad
import (
"context"
"time"
"go-common/app/interface/main/web-show/model/resource"
"go-common/library/log"
)
const (
_selAds = `SELECT sch.id,sch.resource_id,so.title,so.pic,so.spic,so.url,so.atype FROM schedule as sch INNER JOIN order_applied as o ON sch.applied_id = o.id
INNER JOIN material as so ON so.id= o.material_id WHERE sch.stime<? AND sch.etime>? AND o.state =3`
)
// Ads return ads info
func (dao *Dao) Ads(c context.Context) (ads []*resource.Assignment, err error) {
rows, err := dao.selAdsStmt.Query(c, time.Now(), time.Now())
if err != nil {
log.Error("dao.selAdsStmt() err(%v)", err)
return
}
defer rows.Close()
ads = make([]*resource.Assignment, 0)
for rows.Next() {
ad := &resource.Assignment{}
if err = rows.Scan(&ad.ID, &ad.ResID, &ad.Name, &ad.Pic, &ad.LitPic, &ad.URL, &ad.Atype); err != nil {
PromError("mysql.Ads", "rows.scan err(%v)", err)
return
}
ads = append(ads, ad)
}
return
}