123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- 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)
- }
|