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,68 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["http_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/admin/main/up/conf:go_default_library",
"//vendor/github.com/davecgh/go-spew/spew:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"command.go",
"http.go",
"http_base.go",
"signup.go",
"up_data.go",
"up_trend.go",
"upcrm.go",
"upload.go",
],
importmap = "go-common/app/admin/main/up/http",
importpath = "go-common/app/admin/main/up/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/up/conf:go_default_library",
"//app/admin/main/up/dao/upcrm:go_default_library",
"//app/admin/main/up/model:go_default_library",
"//app/admin/main/up/model/datamodel:go_default_library",
"//app/admin/main/up/model/signmodel:go_default_library",
"//app/admin/main/up/model/upcrmmodel:go_default_library",
"//app/admin/main/up/service:go_default_library",
"//app/admin/main/up/util:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/permit:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//vendor/github.com/siddontang/go-mysql/mysql: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,15 @@
package http
import (
"context"
"go-common/app/admin/main/up/model"
"go-common/library/net/http/blademaster"
)
func commandRefreshUpRank(c *blademaster.Context) {
httpQueryFunc(new(model.CommandCommonArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.CommandRefreshUpRank(context, arg.(*model.CommandCommonArg))
},
"SignCheckTask")(c)
}

View File

@@ -0,0 +1,159 @@
package http
import (
"go-common/app/admin/main/up/conf"
"go-common/app/admin/main/up/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/permit"
"go-common/library/net/http/blademaster/middleware/verify"
)
var (
//Svc service.
Svc *service.Service
authSrc *permit.Permit
idfSvc *verify.Verify
)
// Init init account service.
func Init(c *conf.Config) {
// service
initService(c)
// init internal router
engine := bm.DefaultServer(c.HTTPServer)
setupInnerEngine(engine)
// init internal server
if err := engine.Start(); err != nil {
log.Error("engine.Start error(%v)", err)
panic(err)
}
}
func initService(c *conf.Config) {
idfSvc = verify.New(nil)
Svc = service.New(c)
authSrc = permit.New(c.Auth)
}
// innerRouter
func setupInnerEngine(e *bm.Engine) {
// monitor ping
e.Ping(ping)
e.Register(disRegister)
// base
var adminUpProfit *bm.RouterGroup
var noAdminUpProfit *bm.RouterGroup
var identifyUpProfit *bm.RouterGroup
if conf.Conf.IsTest {
adminUpProfit = e.Group("/allowance/api/x/admin/uper")
} else {
// 现在只要登录,默认放过
adminUpProfit = e.Group("/allowance/api/x/admin/uper", authSrc.Verify(), authSrc.Permit(""))
}
// 因为经常出现-401所以把这些接口的验证去掉
noAdminUpProfit = e.Group("/allowance/api/x/admin/uper")
{
//noAdminUpProfit.GET("/score/query", crmScoreQuery) // 这个接口需要干掉
noAdminUpProfit.GET("/score/query_section", crmScoreQuery)
noAdminUpProfit.GET("/score/query_up", crmScoreQueryUp)
noAdminUpProfit.GET("/score/query_up_history", crmScoreQueryUpHistory)
noAdminUpProfit.GET("/play/query", crmPlayQueryInfo)
noAdminUpProfit.GET("/info/query", crmInfoQueryUp)
noAdminUpProfit.GET("/info/account_info", crmInfoAccountInfo)
noAdminUpProfit.POST("/info/search", crmInfoSearch)
noAdminUpProfit.GET("/creditlog/query", crmCreditLogQueryUp)
noAdminUpProfit.GET("/rank/query_list", crmRankQueryList)
noAdminUpProfit.POST("/file/upload", upload)
noAdminUpProfit.GET("/data/batch_query_data", crmQueryUpInfoWithViewerData)
noAdminUpProfit.GET("/data/fan_summary", dataGetFanSummary)
noAdminUpProfit.GET("/data/fan_relation_history", dataRelationFansHistory)
noAdminUpProfit.GET("/data/up_archive_info", dataGetUpArchiveInfo)
noAdminUpProfit.GET("/data/up_archive_tag_info", dataGetUpArchiveTagInfo)
noAdminUpProfit.GET("/data/up_view_info", dataGetUpViewInfo)
}
if conf.Conf.IsTest {
identifyUpProfit = e.Group("/allowance/api/x/admin/uper")
} else {
identifyUpProfit = e.Group("/allowance/api/x/admin/uper", idfSvc.Verify)
}
{
identifyUpProfit.GET("/service/batch_query_data", crmQueryUpInfoWithViewerData)
identifyUpProfit.GET("/service/data/fan_summary", dataGetFanSummary)
identifyUpProfit.GET("/service/data/fan_relation_history", dataRelationFansHistory)
identifyUpProfit.GET("/service/data/up_archive_info", dataGetUpArchiveInfo)
identifyUpProfit.GET("/service/data/up_archive_tag_info", dataGetUpArchiveTagInfo)
noAdminUpProfit.GET("/test/get_view_base", testGetViewBase)
}
dashboard := noAdminUpProfit.Group("/dashboard")
{
dashboard.GET("/yesterday", yesterday)
dashboard.GET("/trend", trend)
dashboard.GET("/trend/detail", trendDetail)
}
// sign 需要admin验证这里需要admin的名字和id
sign := adminUpProfit.Group("/sign")
{
sign.POST("/add", signAdd)
sign.POST("/update", signUpdate)
sign.POST("/violation/add", violationAdd)
sign.POST("/violation/retract", violationRetract)
sign.GET("/violation/list", violationList)
sign.POST("/absence/add", absenceAdd)
sign.POST("/absence/retract", absenceRetract)
sign.GET("/absence/list", absenceList)
sign.GET("/up/view/check", viewCheck)
sign.GET("/query", signQuery)
sign.GET("/query/id", signQueryID)
sign.GET("/up/aduit/log", signUpAuditLogs)
sign.GET("/country/list", countrys)
sign.GET("/tid/list", tids)
sign.POST("/pay/complete", signPayComplete)
}
signNoAdmin := noAdminUpProfit.Group("/sign")
{
signNoAdmin.GET("/check_exist", signCheckExist)
}
commandNoAdmin := noAdminUpProfit.Group("/command")
{
commandNoAdmin.GET("/refresh_up_rank", commandRefreshUpRank)
}
//{
// admin.GET("/special/get", specialGet)
// admin.GET("/special/get_by_mid", specialGetByMid)
// admin.POST("/special/delete", specialDel)
// admin.POST("/special/add", specialAdd)
// admin.POST("/special/edit", specialEdit)
// admin.GET("/group/get", getGroup)
// admin.POST("/group/add", authSrc.Permit("UPGROUP_ADD"), addGroup)
// admin.POST("/group/update", updateGroup)
// admin.POST("/group/delete", authSrc.Permit("UPGROUP_ADD"), removeGroup)
//}
}
// ping check server ok.
func ping(ctx *bm.Context) {
if err := Svc.Ping(ctx); err != nil {
ctx.Error = err
ctx.AbortWithStatus(503)
}
}
// disRegister check server ok.
func disRegister(ctx *bm.Context) {
ctx.JSON(map[string]interface{}{}, nil)
}

View File

@@ -0,0 +1,88 @@
package http
import (
"context"
"encoding/json"
"fmt"
"go-common/app/admin/main/up/service"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/net/http/blademaster"
"io/ioutil"
)
// service的函数原型
type serviceFunc func(context context.Context, arg interface{}) (res interface{}, err error)
// 由于不支持泛型,写得比较难看
// 很多重复的代码用下面来代替
func httpQueryFunc(arg interface{}, sfunc serviceFunc, description string) (httpFunc func(c *blademaster.Context)) {
httpFunc = func(c *blademaster.Context) {
//var arg = new(upcrmmodel.ScoreQueryUpHistoryArgs)
var res interface{}
var err error
var errMsg string
switch {
default:
if err = c.Bind(arg); err != nil {
log.Error("%s, request argument bind fail, err=%v", description, err)
errMsg = fmt.Sprintf("wrong argument, %s", err.Error())
err = ecode.RequestErr
break
}
var scoreRes, e = sfunc(c, arg)
err = e
if e != nil {
errMsg = err.Error()
log.Error("%s query fail, req=%+v, err=%+v", description, arg, err)
break
}
log.Info("%s query ok, req=%+v, result=%+v", description, arg, scoreRes)
res = scoreRes
}
if err != nil {
service.BmHTTPErrorWithMsg(c, err, errMsg)
} else {
c.JSON(res, err)
}
}
return
}
func httpPostFunc(arg interface{}, sfunc serviceFunc, description string) (httpFunc func(c *blademaster.Context)) {
httpFunc = func(c *blademaster.Context) {
//var arg = new(upcrmmodel.ScoreQueryUpHistoryArgs)
var res interface{}
var err error
var errMsg string
switch {
default:
respBody, _ := ioutil.ReadAll(c.Request.Body)
if err = json.Unmarshal(respBody, arg); err != nil {
log.Error("%s, json unmarshal fail, err=%v", description, err)
errMsg = fmt.Sprintf("wrong argument, %s", err.Error())
err = ecode.RequestErr
break
}
scoreRes, e := sfunc(c, arg)
err = e
if e != nil {
errMsg = err.Error()
log.Error("%s query fail, req=%+v, err=%+v", description, arg, err)
break
}
log.Info("%s query ok, req=%+v, result=%+v", description, arg, scoreRes)
res = scoreRes
}
if err != nil {
service.BmHTTPErrorWithMsg(c, err, errMsg)
} else {
c.JSON(res, err)
}
}
return
}

View File

@@ -0,0 +1,135 @@
package http
import (
"context"
"crypto/md5"
"encoding/hex"
"encoding/json"
"flag"
"io/ioutil"
"net/http"
"net/url"
"path/filepath"
"strconv"
"strings"
"testing"
"time"
"go-common/app/admin/main/up/conf"
"github.com/davecgh/go-spew/spew"
. "github.com/smartystreets/goconvey/convey"
)
func init() {
dir, _ := filepath.Abs("../cmd/up-admin.toml")
flag.Set("conf", dir)
conf.Init()
// Init(conf.Conf)
time.Sleep(time.Second)
}
// Sign fn
func Sign(params url.Values) (sign string) {
secret := params.Get("appsecret")
params.Del("appsecret")
tmp := params.Encode()
if strings.IndexByte(tmp, '+') > -1 {
tmp = strings.Replace(tmp, "+", "%20", -1)
}
mh := md5.Sum([]byte(tmp + secret))
sign = hex.EncodeToString(mh[:])
return
}
var (
err error
req *http.Request
resp *http.Response
HOST = "http://localhost:7441"
URI = "/x/internal/up/register"
infoURI = "/x/internal/up/info"
c = context.Background()
client = &http.Client{
Timeout: time.Duration(time.Second * 2),
}
)
func Test_Up(t *testing.T) {
Convey("register", t, func() {
params := url.Values{}
params.Set("mid", strconv.FormatInt(2089809, 10))
params.Set("from", strconv.FormatInt(0, 10))
params.Set("is_author", strconv.FormatInt(0, 10))
params.Set("appkey", conf.Conf.App.Key)
params.Set("appsecret", conf.Conf.App.Secret)
params.Set("ts", strconv.FormatInt(time.Now().Unix(), 10))
sign := Sign(params)
params.Set("sign", sign)
u, _ := url.ParseRequestURI(HOST)
u.Path = URI
url := u.String()
req, err = http.NewRequest("POST", url, strings.NewReader(params.Encode()))
So(err, ShouldBeNil)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
// timeout
ctx, cancel := context.WithTimeout(c, time.Second*2)
req = req.WithContext(ctx)
defer cancel()
resp, err = client.Do(req)
So(err, ShouldBeNil)
body, err1 := ioutil.ReadAll(resp.Body)
err = err1
So(err, ShouldBeNil)
defer resp.Body.Close()
var result struct {
Code int `json:"code"`
Message string `json:"message"`
Data struct {
Result bool `json:"result"`
} `json:"data"`
}
spew.Dump(string(body))
json.Unmarshal(body, &result)
So(result, ShouldNotBeNil)
So(result.Data.Result, ShouldBeTrue)
})
Convey("info", t, func() {
params := url.Values{}
params.Set("mid", strconv.FormatInt(2089809, 10))
params.Set("from", strconv.FormatInt(1, 10))
params.Set("appkey", conf.Conf.App.Key)
params.Set("appsecret", conf.Conf.App.Secret)
params.Set("ts", strconv.FormatInt(time.Now().Unix(), 10))
sign := Sign(params)
params.Set("sign", sign)
u, _ := url.ParseRequestURI(HOST)
u.Path = infoURI
url := u.String()
reqURL := url + "?" + params.Encode()
req, err = http.NewRequest("GET", reqURL, nil)
So(err, ShouldBeNil)
// timeout
ctx, cancel := context.WithTimeout(c, time.Second*2)
req = req.WithContext(ctx)
defer cancel()
resp, err = client.Do(req)
So(err, ShouldBeNil)
body, err := ioutil.ReadAll(resp.Body)
So(err, ShouldBeNil)
defer resp.Body.Close()
var result struct {
Code int `json:"code"`
Message string `json:"message"`
Data struct {
IsAuthor bool `json:"is_author"`
} `json:"data"`
}
spew.Dump(string(body))
json.Unmarshal(body, &result)
So(result, ShouldNotBeNil)
})
}

View File

@@ -0,0 +1,136 @@
package http
import (
"context"
"go-common/app/admin/main/up/model/signmodel"
"go-common/library/net/http/blademaster"
)
func signUpAuditLogs(c *blademaster.Context) {
httpQueryFunc(new(signmodel.SignOpSearchArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.SignUpAuditLogs(context, arg.(*signmodel.SignOpSearchArg))
},
"SignUpAuditLogs")(c)
}
func signAdd(c *blademaster.Context) {
httpPostFunc(new(signmodel.SignUpArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.SignAdd(context, arg.(*signmodel.SignUpArg))
},
"SignAdd")(c)
}
func signUpdate(c *blademaster.Context) {
httpPostFunc(new(signmodel.SignUpArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.SignUpdate(context, arg.(*signmodel.SignUpArg))
},
"SignUp")(c)
}
func violationAdd(c *blademaster.Context) {
httpPostFunc(new(signmodel.ViolationArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.ViolationAdd(context, arg.(*signmodel.ViolationArg))
},
"ViolationAdd")(c)
}
func violationRetract(c *blademaster.Context) {
httpPostFunc(new(signmodel.IDArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.ViolationRetract(context, arg.(*signmodel.IDArg))
},
"ViolationRetract")(c)
}
func violationList(c *blademaster.Context) {
httpQueryFunc(new(signmodel.PageArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.ViolationList(context, arg.(*signmodel.PageArg))
},
"ViolationList")(c)
}
func absenceAdd(c *blademaster.Context) {
httpPostFunc(new(signmodel.AbsenceArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.AbsenceAdd(context, arg.(*signmodel.AbsenceArg))
},
"AbsenceAdd")(c)
}
func absenceRetract(c *blademaster.Context) {
httpPostFunc(new(signmodel.IDArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.AbsenceRetract(context, arg.(*signmodel.IDArg))
},
"AbsenceRetract")(c)
}
func absenceList(c *blademaster.Context) {
httpQueryFunc(new(signmodel.PageArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.AbsenceList(context, arg.(*signmodel.PageArg))
},
"AbsenceList")(c)
}
func viewCheck(c *blademaster.Context) {
httpQueryFunc(new(signmodel.PowerCheckArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.ViewCheck(context, arg.(*signmodel.PowerCheckArg))
},
"ViewCheck")(c)
}
func signQuery(c *blademaster.Context) {
httpQueryFunc(new(signmodel.SignQueryArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.SignQuery(context, arg.(*signmodel.SignQueryArg))
},
"SignQuery")(c)
}
func signQueryID(c *blademaster.Context) {
httpQueryFunc(new(signmodel.SignIDArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.SignQueryID(context, arg.(*signmodel.SignIDArg))
},
"SignQueryID")(c)
}
func signPayComplete(c *blademaster.Context) {
httpPostFunc(new(signmodel.SignPayCompleteArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.SignPayComplete(context, arg.(*signmodel.SignPayCompleteArg))
},
"SignPayComplete")(c)
}
func signCheckExist(c *blademaster.Context) {
httpQueryFunc(new(signmodel.SignCheckExsitArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.SignCheckExist(context, arg.(*signmodel.SignCheckExsitArg))
},
"SignCheckExist")(c)
}
func countrys(c *blademaster.Context) {
httpQueryFunc(new(signmodel.CommonArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.Countrys(context, arg.(*signmodel.CommonArg))
},
"SignCheckExist")(c)
}
func tids(c *blademaster.Context) {
httpQueryFunc(new(signmodel.CommonArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.Tids(context, arg.(*signmodel.CommonArg))
},
"SignCheckExist")(c)
}

View File

@@ -0,0 +1,47 @@
package http
import (
"context"
"go-common/app/admin/main/up/model/datamodel"
"go-common/library/net/http/blademaster"
)
func dataGetFanSummary(c *blademaster.Context) {
httpQueryFunc(new(datamodel.GetFansSummaryArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.DataService().GetFansSummary(context, arg.(*datamodel.GetFansSummaryArg))
},
"dataGetFanSummary")(c)
}
func dataRelationFansHistory(c *blademaster.Context) {
httpQueryFunc(new(datamodel.GetRelationFansHistoryArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.DataService().GetRelationFansDay(context, arg.(*datamodel.GetRelationFansHistoryArg))
},
"dataRelationFansHistory")(c)
}
func dataGetUpArchiveInfo(c *blademaster.Context) {
httpQueryFunc(new(datamodel.GetUpArchiveInfoArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.DataService().GetUpArchiveInfo(context, arg.(*datamodel.GetUpArchiveInfoArg))
},
"dataGetUpArchiveInfo")(c)
}
func dataGetUpArchiveTagInfo(c *blademaster.Context) {
httpQueryFunc(new(datamodel.GetUpArchiveTagInfoArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.DataService().GetUpArchiveTagInfo(context, arg.(*datamodel.GetUpArchiveTagInfoArg))
},
"dataGetUpArchiveTagInfo")(c)
}
func dataGetUpViewInfo(c *blademaster.Context) {
httpQueryFunc(new(datamodel.GetUpViewInfoArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.DataService().GetUpViewInfo(context, arg.(*datamodel.GetUpViewInfoArg))
},
"dataGetUpViewInfo")(c)
}

View File

@@ -0,0 +1,70 @@
package http
import (
"go-common/app/admin/main/up/util"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"time"
)
func yesterday(c *bm.Context) {
v := new(struct {
Date int64 `form:"date" validate:"required"`
})
if err := c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
res, err := Svc.Crmservice.QueryYesterday(c, time.Unix(v.Date, 0))
if err != nil {
c.JSON(nil, err)
return
}
c.JSON(res, err)
}
func trend(c *bm.Context) {
v := new(struct {
StatType int `form:"stat_type" validate:"required"`
DateType int `form:"date_type" validate:"required"`
})
if err := c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
}
endDate := util.TruncateDate(time.Now())
var days = 7
if v.DateType == 2 {
days = 30
}
data, err := Svc.Crmservice.QueryTrend(c, v.StatType, endDate, days)
if err != nil {
c.JSON(nil, err)
return
}
c.JSON(data, nil)
}
func trendDetail(c *bm.Context) {
v := new(struct {
DateType int `form:"date_type" validate:"required"`
})
if err := c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
endDate := util.TruncateDate(time.Now())
var days = 7
if v.DateType == 2 {
days = 30
}
data, err := Svc.Crmservice.QueryDetail(c, endDate, days)
if err != nil {
c.JSON(nil, err)
return
}
c.JSON(data, nil)
}

View File

@@ -0,0 +1,199 @@
package http
import (
"bytes"
"context"
"encoding/csv"
"fmt"
"github.com/siddontang/go-mysql/mysql"
"go-common/app/admin/main/up/dao/upcrm"
"go-common/app/admin/main/up/model/upcrmmodel"
"go-common/app/admin/main/up/service"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/net/http/blademaster"
"time"
)
func getTitleFields(compareType int) []string {
var compareTitle = ""
switch compareType {
case upcrmmodel.CompareType7day:
compareTitle = "7日前"
case upcrmmodel.CompareType30day:
compareTitle = "30日前"
case upcrmmodel.CompareTypeMonthFirstDay:
compareTitle = "本月1号"
}
return []string{
"分数段",
"昨日",
"占比",
compareTitle,
"占比",
}
}
func getScoreName(scoreType int) string {
var name = "分数"
switch scoreType {
case upcrm.ScoreTypePr:
name = "影响力分"
case upcrm.ScoreTypeQuality:
name = "质量分"
case upcrm.ScoreTypeCredit:
name = "信用分"
}
return name
}
func getScoreQueryContentField(result *upcrmmodel.ScoreQueryResult, index int) []string {
if result == nil {
return nil
}
var fields []string
if index >= len(result.XAxis) {
return nil
}
fields = append(fields, result.XAxis[index])
if index < len(result.YAxis) {
fields = append(fields, fmt.Sprintf("%d", result.YAxis[index].Value))
fields = append(fields, fmt.Sprintf("%0.2f%%", float32(result.YAxis[index].Percent)/100.0))
} else {
fields = append(fields, "-", "-")
}
if index < len(result.CompareAxis) {
fields = append(fields, fmt.Sprintf("%d", result.CompareAxis[index].Value))
fields = append(fields, fmt.Sprintf("%0.2f%%", float32(result.CompareAxis[index].Percent)/100.0))
} else {
fields = append(fields, "-", "-")
}
return fields
}
func crmScoreQuery(c *blademaster.Context) {
var arg = new(upcrmmodel.ScoreQueryArgs)
var res interface{}
var err error
var errMsg string
var scoreRes upcrmmodel.ScoreQueryResult
switch {
default:
if err = c.Bind(arg); err != nil {
log.Error("request argument bind fail, err=%v", err)
errMsg = fmt.Sprintf("wrong argument, %s", err.Error())
err = ecode.RequestErr
break
}
scoreRes, err = Svc.Crmservice.ScoreQuery(c, arg)
if err != nil {
errMsg = err.Error()
log.Error("score query fail, req=%+v, err=%+v", arg, err)
break
}
log.Info("score query ok, req=%+v, result=%+v", arg, scoreRes)
res = scoreRes
}
if err != nil {
service.BmHTTPErrorWithMsg(c, err, errMsg)
} else {
if arg.Export == "csv" {
c.Writer.Header().Set("Content-Type", "application/csv")
c.Writer.Header().Set("Content-Disposition", fmt.Sprintf("attachment;filename=\"%s_%s.csv\"", getScoreName(arg.ScoreType), time.Now().Format(mysql.TimeFormat)))
var buf = &bytes.Buffer{}
var csvWriter = csv.NewWriter(buf)
csvWriter.Write(getTitleFields(arg.CompareType))
for i := 0; i < len(scoreRes.XAxis); i++ {
csvWriter.Write(getScoreQueryContentField(&scoreRes, i))
}
csvWriter.Flush()
c.Writer.Write(buf.Bytes())
} else {
c.JSON(res, err)
}
}
}
func crmScoreQueryUp(c *blademaster.Context) {
httpQueryFunc(new(upcrmmodel.ScoreQueryUpArgs),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.ScoreQueryUp(context, arg.(*upcrmmodel.ScoreQueryUpArgs))
},
"ScoreQueryUp")(c)
}
func crmScoreQueryUpHistory(c *blademaster.Context) {
httpQueryFunc(new(upcrmmodel.ScoreQueryUpHistoryArgs),
// 由于不支持泛型,所以这里只能再包一层
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.ScoreQueryUpHistory(context, arg.(*upcrmmodel.ScoreQueryUpHistoryArgs))
},
"ScoreQueryUpHistory")(c)
}
func crmPlayQueryInfo(c *blademaster.Context) {
httpQueryFunc(new(upcrmmodel.PlayQueryArgs),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.PlayQueryInfo(context, arg.(*upcrmmodel.PlayQueryArgs))
},
"PlayQueryInfo")(c)
}
func crmInfoQueryUp(c *blademaster.Context) {
httpQueryFunc(new(upcrmmodel.InfoQueryArgs),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.UpBaseInfoQuery(context, arg.(*upcrmmodel.InfoQueryArgs))
},
"QueryBaseUpInfo")(c)
}
func crmCreditLogQueryUp(c *blademaster.Context) {
httpQueryFunc(new(upcrmmodel.CreditLogQueryArgs),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.CreditLogQueryUp(context, arg.(*upcrmmodel.CreditLogQueryArgs))
},
"CreditLogQueryUp")(c)
}
func crmRankQueryList(c *blademaster.Context) {
httpQueryFunc(new(upcrmmodel.UpRankQueryArgs),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.UpRankQueryList(context, arg.(*upcrmmodel.UpRankQueryArgs))
},
"UpRankQueryList")(c)
}
func crmInfoAccountInfo(c *blademaster.Context) {
httpQueryFunc(new(upcrmmodel.InfoAccountInfoArgs),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.UpAccountInfo(context, arg.(*upcrmmodel.InfoAccountInfoArgs))
},
"InfoAccountInfo")(c)
}
func crmInfoSearch(c *blademaster.Context) {
httpPostFunc(new(upcrmmodel.InfoSearchArgs),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.UpInfoSearch(context, arg.(*upcrmmodel.InfoSearchArgs))
},
"UpInfoSearch")(c)
}
func testGetViewBase(c *blademaster.Context) {
httpQueryFunc(new(upcrmmodel.TestGetViewBaseArgs),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.TestGetViewBase(context, arg.(*upcrmmodel.TestGetViewBaseArgs))
},
"TestGetViewBase")(c)
}
func crmQueryUpInfoWithViewerData(c *blademaster.Context) {
httpQueryFunc(new(upcrmmodel.UpInfoWithViewerArg),
func(context context.Context, arg interface{}) (res interface{}, err error) {
return Svc.Crmservice.QueryUpInfoWithViewerData(context, arg.(*upcrmmodel.UpInfoWithViewerArg))
},
"QueryUpInfoWithViewerData")(c)
}

View File

@@ -0,0 +1,73 @@
package http
import (
"io/ioutil"
"mime/multipart"
"path"
"strings"
"go-common/app/admin/main/up/conf"
"go-common/app/admin/main/up/service"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/net/http/blademaster"
"regexp"
"time"
)
//由数字、26个英文字母或者下划线组成的字符串
var reg = regexp.MustCompile(`^\w+$`)
// upload
func upload(c *blademaster.Context) {
var (
fileTpye string
file multipart.File
header *multipart.FileHeader
fileName string
body []byte
location string
err error
res interface{}
errMsg string
)
switch {
default:
if file, header, err = c.Request.FormFile("file"); err != nil {
errMsg = err.Error()
err = ecode.RequestErr
log.Error("c.Request().FormFile(\"file\") error(%v)", err)
break
}
defer file.Close()
fileName = header.Filename
fileTpye = strings.TrimPrefix(path.Ext(fileName), ".")
if body, err = ioutil.ReadAll(file); err != nil {
errMsg = err.Error()
err = ecode.RequestErr
log.Error("ioutil.ReadAll(c.Request().Body) error(%v)", err)
break
}
// 如果不符合规则,就不用文件名
if !reg.MatchString(fileName) {
fileName = ""
}
if location, err = Svc.Upload(c, fileName, fileTpye, time.Now(), body, conf.Conf.BfsConf); err != nil {
errMsg = err.Error()
break
}
res = struct {
URL string `json:"url"`
}{
location,
}
}
if err != nil {
service.BmHTTPErrorWithMsg(c, err, errMsg)
} else {
c.JSON(res, err)
}
}