123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480 |
- package http
- import (
- "io/ioutil"
- "mime/multipart"
- "path"
- "strconv"
- "strings"
- "sync"
- "time"
- "unicode/utf8"
- "go-common/app/interface/main/feedback/conf"
- "go-common/app/interface/main/feedback/model"
- "go-common/library/ecode"
- "go-common/library/log"
- bm "go-common/library/net/http/blademaster"
- "go-common/library/sync/errgroup"
- )
- const (
- _timeFromat = "2006-01-02 15:04:05"
- )
- // addReply
- func addReply(c *bm.Context) {
- header := c.Request.Header
- params := c.Request.Form
- // params
- buvid := header.Get("Buvid")
- system := params.Get("system")
- version := params.Get("version")
- midStr := params.Get("mid")
- content := params.Get("content")
- imgURL := params.Get("img_url")
- logURL := params.Get("log_url")
- device := params.Get("device")
- channel := params.Get("channel")
- entrance := params.Get("entrance")
- netState := params.Get("net_state")
- netOperator := params.Get("net_operator")
- agencyArea := params.Get("agency_area")
- platform := params.Get("platform")
- browser := params.Get("browser")
- qq := params.Get("qq")
- mobiApp := params.Get("mobi_app")
- email := params.Get("email")
- tagStr := params.Get("tag_id")
- // check params
- if buvid == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- if system == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- if version == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- var (
- mid int64
- err error
- )
- if midStr != "" {
- if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- }
- if content == "" && imgURL == "" && logURL == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- tagID, _ := strconv.ParseInt(tagStr, 10, 64)
- c.JSON(feedbackSvr.AddReply(c, mid, tagID, buvid, system, version, mobiApp, filtered(content), imgURL, logURL, device, channel, entrance, netState, netOperator, agencyArea, platform, browser, qq, email, time.Now()))
- }
- func addWebReply(c *bm.Context) {
- params := c.Request.Form
- // system := params.Get("system")
- version := params.Get("version")
- midStr := params.Get("mid")
- sidStr := params.Get("session_id")
- content := params.Get("content")
- imgURL := params.Get("img_url")
- logURL := params.Get("log_url")
- // device := params.Get("device")
- buvid := params.Get("buvid")
- // channel := params.Get("channel")
- netState := params.Get("net_state")
- netOperator := params.Get("net_operator")
- agencyArea := params.Get("agency_area")
- platform := params.Get("platform")
- browser := params.Get("browser")
- qq := params.Get("qq")
- email := params.Get("email")
- tagStr := params.Get("tag_id")
- aidStr := params.Get("aid")
- var (
- mid int64
- sid int64
- err error
- )
- if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- if content == "" && imgURL == "" && logURL == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- sid, _ = strconv.ParseInt(sidStr, 10, 64)
- tagID, _ := strconv.ParseInt(tagStr, 10, 64)
- if platform == "" {
- platform = "ugc"
- }
- c.JSON(feedbackSvr.AddWebReply(c, mid, sid, tagID, aidStr, filtered(content), imgURL, netState, netOperator, agencyArea, platform, version, buvid, browser, qq, email, time.Now()))
- }
- //replys
- func replys(c *bm.Context) {
- header := c.Request.Header
- params := c.Request.Form
- buvid := header.Get("Buvid")
- system := params.Get("system")
- version := params.Get("version")
- midStr := params.Get("mid")
- platform := params.Get("platform")
- mobiApp := params.Get("mobi_app")
- device := params.Get("device")
- pnStr := params.Get("pn")
- psStr := params.Get("ps")
- entrance := params.Get("entrance")
- // check params
- if system == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- if version == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- var (
- mid int64
- err error
- )
- if midStr != "" {
- if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- }
- if mid == 0 && buvid == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- pn, err := strconv.Atoi(pnStr)
- if err != nil || pn < 1 {
- pn = 1
- }
- ps, err := strconv.Atoi(psStr)
- if err != nil || ps < 1 || ps > conf.Conf.Feedback.ReplysNum {
- ps = conf.Conf.Feedback.ReplysNum
- }
- rs, isEndReply, err := feedbackSvr.Replys(c, buvid, platform, mobiApp, device, system, version, entrance, mid, pn, ps)
- if err != nil {
- c.JSON(nil, err)
- return
- }
- res := map[string]interface{}{
- "data": rs,
- "is_end_reply": isEndReply,
- }
- c.JSONMap(res, err)
- }
- func sessions(c *bm.Context) {
- params := c.Request.Form
- tagid := params.Get("tag_id")
- platform := params.Get("platform")
- stateStr := params.Get("state")
- midStr := params.Get("mid")
- start := params.Get("start")
- end := params.Get("end")
- pnStr := params.Get("pn")
- psStr := params.Get("ps")
- mid, err := strconv.ParseInt(midStr, 10, 64)
- if err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- var (
- etime time.Time
- )
- if start == "" {
- start = "00-00-00 00:00:00"
- }
- stime, _ := time.Parse(_timeFromat, start)
- etime, _ = time.Parse(_timeFromat, end)
- if end == "" {
- etime = time.Now()
- }
- pn, err := strconv.Atoi(pnStr)
- if err != nil || pn < 1 {
- pn = 1
- }
- ps, err := strconv.Atoi(psStr)
- if err != nil || ps < 0 || ps > 10 {
- ps = 10
- }
- total, sessions, err := feedbackSvr.Sessions(c, mid, stateStr, tagid, platform, stime, etime, ps, pn)
- if err != nil {
- c.JSON(nil, err)
- return
- }
- res := map[string]interface{}{
- "data": sessions,
- "total": total,
- }
- c.JSONMap(res, err)
- }
- func sessionsClose(c *bm.Context) {
- params := c.Request.Form
- sidStr := params.Get("session_id")
- sid, err := strconv.ParseInt(sidStr, 10, 64)
- if err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- c.JSON(nil, feedbackSvr.UpdateSessionState(c, 3, sid))
- }
- func replyTag(c *bm.Context) {
- params := c.Request.Form
- tp := params.Get("type") // NOTE: player
- platform := params.Get("platform")
- c.JSON(model.Tags[tp][platform], nil)
- }
- func ugcTag(c *bm.Context) {
- params := c.Request.Form
- tp := params.Get("type")
- platform := params.Get("platform")
- mold, err := strconv.Atoi(tp)
- if err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- midStr := params.Get("mid")
- mid, err := strconv.ParseInt(midStr, 10, 64)
- if err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- c.JSON(feedbackSvr.Tags(c, mid, mold, platform))
- }
- func webReply(c *bm.Context) {
- params := c.Request.Form
- sidStr := params.Get("session_id")
- sid, err := strconv.ParseInt(sidStr, 10, 64)
- if err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- midStr := params.Get("mid")
- mid, err := strconv.ParseInt(midStr, 10, 64)
- if err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- c.JSON(feedbackSvr.WebReplys(c, sid, mid))
- }
- func filtered(content string) string {
- v := make([]rune, 0, len(content))
- for _, c := range content {
- if c != utf8.RuneError {
- v = append(v, c)
- }
- }
- return string(v)
- }
- func playerCheck(c *bm.Context) {
- var (
- params = c.Request.Form
- header = c.Request.Header
- platform, ipChangeTimes int
- mid, checkTime, aid, connectSpeed, ioSpeed int64
- region, school string
- err error
- )
- platformStr := params.Get("platform")
- if platform = model.FormPlatForm(platformStr); platform == 0 {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- if region = params.Get("region"); region == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- if school = params.Get("school"); school == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- midStr := params.Get("mid")
- if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- checkTimeStr := params.Get("check_time")
- if checkTime, err = strconv.ParseInt(checkTimeStr, 10, 64); err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- aid, _ = strconv.ParseInt(params.Get("aid"), 10, 64)
- ipChangeTimesStr := params.Get("ip_change_times")
- if ipChangeTimes, err = strconv.Atoi(ipChangeTimesStr); err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- connectSpeedStr := params.Get("connect_speed")
- if connectSpeed, err = strconv.ParseInt(connectSpeedStr, 10, 64); err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- ioSpeedStr := params.Get("io_speed")
- if ioSpeed, err = strconv.ParseInt(ioSpeedStr, 10, 64); err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- c.JSON(nil, feedbackSvr.PlayerCheck(c, platform, ipChangeTimes, mid, checkTime, aid, connectSpeed, ioSpeed, region, school, header.Get("X-Cache-Server-Addr")))
- }
- // addReplyH5 add from H5
- func addReplyH5(c *bm.Context) {
- c.Request.ParseMultipartForm(model.MaxUploadSize)
- header := c.Request.Header
- params := c.Request.MultipartForm
- buvid := header.Get("Buvid")
- var system, version, midStr, content, logURL, device, channel, entrance, netState, netOperator, agencyArea, platform, browser, qq, mobiApp, email, tagStr string
- // params
- if len(params.Value["system"]) > 0 {
- system = params.Value["system"][0]
- }
- if len(params.Value["version"]) > 0 {
- version = params.Value["version"][0]
- }
- if len(params.Value["mid"]) > 0 {
- midStr = params.Value["mid"][0]
- }
- if len(params.Value["content"]) > 0 {
- content = params.Value["content"][0]
- }
- if len(params.Value["log_url"]) > 0 {
- logURL = params.Value["log_url"][0]
- }
- if len(params.Value["device"]) > 0 {
- device = params.Value["device"][0]
- }
- if len(params.Value["channel"]) > 0 {
- channel = params.Value["channel"][0]
- }
- if len(params.Value["entrance"]) > 0 {
- entrance = params.Value["entrance"][0]
- }
- if len(params.Value["net_state"]) > 0 {
- netState = params.Value["net_state"][0]
- }
- if len(params.Value["net_operator"]) > 0 {
- netOperator = params.Value["net_operator"][0]
- }
- if len(params.Value["agency_area"]) > 0 {
- agencyArea = params.Value["agency_area"][0]
- }
- if len(params.Value["platform"]) > 0 {
- platform = params.Value["platform"][0]
- }
- if len(params.Value["browser"]) > 0 {
- browser = params.Value["browser"][0]
- }
- if len(params.Value["qq"]) > 0 {
- qq = params.Value["qq"][0]
- }
- if len(params.Value["mobi_app"]) > 0 {
- mobiApp = params.Value["mobi_app"][0]
- }
- if len(params.Value["email"]) > 0 {
- email = params.Value["email"][0]
- }
- if len(params.Value["buvid"]) > 0 && buvid == "" {
- buvid = params.Value["buvid"][0]
- }
- if len(params.Value["tag_id"]) > 0 {
- tagStr = params.Value["tag_id"][0]
- }
- // check params
- if buvid == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- if system == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- if version == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- var (
- mid int64
- err error
- )
- if midStr != "" {
- if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- }
- imgs := c.Request.MultipartForm.File["imgs"]
- var (
- imgURL string
- urls []string
- mutex = sync.Mutex{}
- )
- g, ctx := errgroup.WithContext(c)
- for k, fh := range imgs {
- if k == conf.Conf.Feedback.ImgLimit {
- break
- }
- var (
- img multipart.File
- url string
- fileName string
- fileTpye string
- body []byte
- )
- if img, err = fh.Open(); err != nil {
- log.Error("H5 addReply Open %s failed", fh.Filename)
- err = nil
- continue
- }
- defer img.Close()
- fileName = fh.Filename
- fileTpye = strings.TrimPrefix(path.Ext(fileName), ".")
- if body, err = ioutil.ReadAll(img); err != nil {
- log.Error("H5 addReply ioutil.ReadAll %s failed", fh.Filename)
- err = nil
- continue
- }
- g.Go(func() (err error) {
- if url, err = feedbackSvr.Upload(ctx, "", fileTpye, time.Now(), body); err != nil {
- log.Error("H5 addReply Upload %s failed", fh.Filename)
- err = nil
- return
- }
- mutex.Lock()
- urls = append(urls, url)
- mutex.Unlock()
- return
- })
- }
- if err = g.Wait(); err != nil {
- log.Error("%+v", err)
- return
- }
- if len(urls) > 0 {
- imgURL = strings.Join(urls, ";")
- }
- if content == "" && imgURL == "" && logURL == "" {
- c.JSON(nil, ecode.RequestErr)
- return
- }
- tagID, _ := strconv.ParseInt(tagStr, 10, 64)
- c.JSON(feedbackSvr.AddReply(c, mid, tagID, buvid, system, version, mobiApp, filtered(content), imgURL, logURL, device, channel, entrance, netState, netOperator, agencyArea, platform, browser, qq, email, time.Now()))
- }
|