532 lines
12 KiB
Go
532 lines
12 KiB
Go
|
package http
|
|||
|
|
|||
|
import (
|
|||
|
"bytes"
|
|||
|
"context"
|
|||
|
"encoding/csv"
|
|||
|
"fmt"
|
|||
|
"strconv"
|
|||
|
"strings"
|
|||
|
"time"
|
|||
|
|
|||
|
"go-common/app/service/main/up/model"
|
|||
|
"go-common/app/service/main/up/service"
|
|||
|
"go-common/library/ecode"
|
|||
|
"go-common/library/log"
|
|||
|
bm "go-common/library/net/http/blademaster"
|
|||
|
"go-common/library/net/metadata"
|
|||
|
|
|||
|
"github.com/siddontang/go-mysql/mysql"
|
|||
|
)
|
|||
|
|
|||
|
func register(ctx *bm.Context) {
|
|||
|
param := ctx.Request.Form
|
|||
|
midStr := param.Get("mid")
|
|||
|
fromStr := param.Get("from")
|
|||
|
isAuthorStr := param.Get("is_author")
|
|||
|
// check params
|
|||
|
mid, err := strconv.ParseInt(midStr, 10, 64)
|
|||
|
if err != nil {
|
|||
|
log.Error("strconv.ParseInt(%s) error(%v)", midStr, err)
|
|||
|
ctx.JSON(nil, ecode.RequestErr)
|
|||
|
return
|
|||
|
}
|
|||
|
if mid <= 0 {
|
|||
|
log.Error("register error mid (%d)", mid)
|
|||
|
ctx.JSON(nil, ecode.RequestErr)
|
|||
|
return
|
|||
|
}
|
|||
|
from, err := strconv.Atoi(fromStr)
|
|||
|
if err != nil {
|
|||
|
log.Error("strconv.ParseInt(%s) error(%v)", fromStr, err)
|
|||
|
ctx.JSON(nil, ecode.RequestErr)
|
|||
|
return
|
|||
|
}
|
|||
|
isAuthor, err := strconv.Atoi(isAuthorStr)
|
|||
|
if err != nil {
|
|||
|
log.Error("strconv.ParseInt(%s) error(%v)", isAuthorStr, err)
|
|||
|
ctx.JSON(nil, ecode.RequestErr)
|
|||
|
return
|
|||
|
}
|
|||
|
result := 0
|
|||
|
row, err := Svc.Edit(ctx, mid, isAuthor, uint8(from))
|
|||
|
if err != nil {
|
|||
|
ctx.JSON(nil, err)
|
|||
|
return
|
|||
|
}
|
|||
|
if row > 0 {
|
|||
|
result = 1
|
|||
|
}
|
|||
|
ctx.JSON(map[string]interface{}{
|
|||
|
"result": result,
|
|||
|
}, nil)
|
|||
|
}
|
|||
|
|
|||
|
func info(ctx *bm.Context) {
|
|||
|
param := ctx.Request.Form
|
|||
|
midStr := param.Get("mid")
|
|||
|
fromStr := param.Get("from")
|
|||
|
// check params
|
|||
|
mid, err := strconv.ParseInt(midStr, 10, 64)
|
|||
|
if err != nil {
|
|||
|
log.Error("strconv.ParseInt(%s) error(%v)", midStr, err)
|
|||
|
ctx.JSON(nil, ecode.RequestErr)
|
|||
|
return
|
|||
|
}
|
|||
|
if mid <= 0 {
|
|||
|
log.Error("info error mid (%d)", mid)
|
|||
|
ctx.JSON(nil, ecode.RequestErr)
|
|||
|
return
|
|||
|
}
|
|||
|
from, err := strconv.Atoi(fromStr)
|
|||
|
if err != nil {
|
|||
|
log.Error("strconv.ParseInt(%s) error(%v)", fromStr, err)
|
|||
|
ctx.JSON(nil, ecode.RequestErr)
|
|||
|
return
|
|||
|
}
|
|||
|
isAuthor, err := Svc.Info(ctx, mid, uint8(from))
|
|||
|
if err != nil {
|
|||
|
ctx.JSON(nil, err)
|
|||
|
return
|
|||
|
}
|
|||
|
ctx.JSON(map[string]interface{}{
|
|||
|
"is_author": isAuthor,
|
|||
|
}, nil)
|
|||
|
}
|
|||
|
|
|||
|
func all(ctx *bm.Context) {
|
|||
|
param := ctx.Request.Form
|
|||
|
midStr := param.Get("mid")
|
|||
|
ip := metadata.String(ctx, metadata.RemoteIP)
|
|||
|
// check params
|
|||
|
mid, err := strconv.ParseInt(midStr, 10, 64)
|
|||
|
if err != nil {
|
|||
|
log.Error("strconv.ParseInt(%s) error(%v)", midStr, err)
|
|||
|
ctx.JSON(nil, ecode.RequestErr)
|
|||
|
return
|
|||
|
}
|
|||
|
if mid <= 0 {
|
|||
|
log.Error("up all error mid (%d)", mid)
|
|||
|
ctx.JSON(nil, ecode.RequestErr)
|
|||
|
return
|
|||
|
}
|
|||
|
identifyAll, err := Svc.IdentifyAll(ctx, mid, ip)
|
|||
|
if err != nil {
|
|||
|
ctx.JSON(nil, err)
|
|||
|
return
|
|||
|
}
|
|||
|
ctx.JSON(map[string]interface{}{
|
|||
|
"identify": identifyAll,
|
|||
|
}, nil)
|
|||
|
}
|
|||
|
|
|||
|
// flows get specialUps list
|
|||
|
func specialUps(c *bm.Context) {
|
|||
|
var res interface{}
|
|||
|
params := c.Request.Form
|
|||
|
groupStr := params.Get("group_id")
|
|||
|
var err error
|
|||
|
// check params
|
|||
|
//default all groups
|
|||
|
groupID := int64(0)
|
|||
|
if groupStr != "" {
|
|||
|
groupID, err = strconv.ParseInt(groupStr, 10, 64)
|
|||
|
if err != nil {
|
|||
|
log.Error("strconv.ParseInt(groupStr(%s)) error(%v)", groupStr, err)
|
|||
|
err = ecode.RequestErr
|
|||
|
c.JSON(res, err)
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
res = Svc.UpsByGroup(c, groupID)
|
|||
|
c.JSON(res, err)
|
|||
|
}
|
|||
|
|
|||
|
func specialDel(c *bm.Context) {
|
|||
|
var res interface{}
|
|||
|
var err error
|
|||
|
var r = new(struct {
|
|||
|
Ids string `form:"ids" validate:"required"`
|
|||
|
})
|
|||
|
if err = c.Bind(r); err != nil {
|
|||
|
log.Error("params error, err=%v", err)
|
|||
|
err = ecode.RequestErr
|
|||
|
c.JSON(res, err)
|
|||
|
return
|
|||
|
}
|
|||
|
var idstr = strings.Split(r.Ids, ",")
|
|||
|
for _, s := range idstr {
|
|||
|
var affectedRow int64
|
|||
|
var id, e = strconv.ParseInt(s, 10, 64)
|
|||
|
err = e
|
|||
|
if err != nil {
|
|||
|
log.Error("id is not integer, id=%s", s)
|
|||
|
continue
|
|||
|
}
|
|||
|
affectedRow, err = Svc.SpecialDel(c, id)
|
|||
|
log.Info("delete special up, id=%d, affected=%d, err=%v", id, affectedRow, err)
|
|||
|
}
|
|||
|
c.JSON(res, err)
|
|||
|
}
|
|||
|
|
|||
|
func specialAdd(c *bm.Context) {
|
|||
|
var res interface{}
|
|||
|
var err error
|
|||
|
var errMsg string
|
|||
|
var r = new(struct {
|
|||
|
GroupIds string `form:"group_ids" validate:"required"` // 支持多个group id,用,分隔
|
|||
|
MidStr string `form:"mids" validate:"required"` // 支持多个mid,用,分隔
|
|||
|
Note string `form:"note" default:""`
|
|||
|
})
|
|||
|
switch {
|
|||
|
default:
|
|||
|
if err = c.Bind(r); err != nil {
|
|||
|
log.Error("params error, err=%v", err)
|
|||
|
err = ecode.RequestErr
|
|||
|
errMsg = "params error"
|
|||
|
break
|
|||
|
}
|
|||
|
var groupIds = strings.Split(r.GroupIds, ",")
|
|||
|
// 检查是否有特殊权限
|
|||
|
for _, groupIDStr := range groupIds {
|
|||
|
var groupID, _ = strconv.ParseInt(groupIDStr, 10, 64)
|
|||
|
var e = Svc.SpecialGroupPermit(c, groupID)
|
|||
|
if e != nil {
|
|||
|
err = e
|
|||
|
break
|
|||
|
}
|
|||
|
}
|
|||
|
var midStrArray = strings.Split(r.MidStr, ",")
|
|||
|
if len(midStrArray) == 0 {
|
|||
|
log.Error("params error, no mid got, mid=%s", r.MidStr)
|
|||
|
err = ecode.RequestErr
|
|||
|
errMsg = "params error, no mid got"
|
|||
|
break
|
|||
|
}
|
|||
|
var mids []int64
|
|||
|
for _, v := range midStrArray {
|
|||
|
mid, e := strconv.ParseInt(v, 10, 64)
|
|||
|
if e != nil {
|
|||
|
continue
|
|||
|
}
|
|||
|
mids = append(mids, int64(mid))
|
|||
|
}
|
|||
|
if len(mids) == 0 {
|
|||
|
log.Error("params error, wrong mid got, mid=%s", r.MidStr)
|
|||
|
err = ecode.RequestErr
|
|||
|
errMsg = "params error, wrong mid got"
|
|||
|
break
|
|||
|
}
|
|||
|
|
|||
|
uidtemp, ok := c.Get("uid")
|
|||
|
var uid int64
|
|||
|
if ok {
|
|||
|
uid = uidtemp.(int64)
|
|||
|
}
|
|||
|
|
|||
|
if len(groupIds) == 0 {
|
|||
|
log.Error("params error, no group id got, groupid=%s", r.GroupIds)
|
|||
|
err = ecode.RequestErr
|
|||
|
errMsg = "params error, wrong mid got"
|
|||
|
break
|
|||
|
}
|
|||
|
var uname, _ = bmGetStringOrDefault(c, "username", "unkown")
|
|||
|
for _, groupIDStr := range groupIds {
|
|||
|
var groupID, err2 = strconv.ParseInt(groupIDStr, 10, 64)
|
|||
|
if err2 != nil {
|
|||
|
log.Warn("group id convert fail, group id=%s", groupIDStr)
|
|||
|
continue
|
|||
|
}
|
|||
|
var data = &model.UpSpecial{
|
|||
|
GroupID: groupID,
|
|||
|
Note: r.Note,
|
|||
|
UID: uid,
|
|||
|
}
|
|||
|
go func() {
|
|||
|
const step = 100
|
|||
|
for start := 0; start < len(mids); start += step {
|
|||
|
var end = start + step
|
|||
|
if end > len(mids) {
|
|||
|
end = len(mids)
|
|||
|
}
|
|||
|
_, err = Svc.SpecialAdd(context.Background(), uname, data, mids[start:end]...)
|
|||
|
if err != nil {
|
|||
|
log.Error("add special fail, mid=%s, err=%v", r.MidStr, err)
|
|||
|
errMsg = "server error"
|
|||
|
return
|
|||
|
}
|
|||
|
log.Info("add special, id=%v, group id=%d", mids, groupID)
|
|||
|
}
|
|||
|
|
|||
|
}()
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
if err != nil {
|
|||
|
service.BmHTTPErrorWithMsg(c, err, errMsg)
|
|||
|
} else {
|
|||
|
c.JSON(res, err)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
func specialEdit(c *bm.Context) {
|
|||
|
var res interface{}
|
|||
|
var err error
|
|||
|
var errMsg string
|
|||
|
var r = new(struct {
|
|||
|
GroupID int64 `form:"group_id" validate:"required"`
|
|||
|
Mid int64 `form:"mid"`
|
|||
|
ID int64 `form:"id" validate:"required"`
|
|||
|
Note string `form:"note" default:""`
|
|||
|
})
|
|||
|
switch {
|
|||
|
default:
|
|||
|
if err = c.Bind(r); err != nil {
|
|||
|
log.Error("request argument bind fail, err=%v", err)
|
|||
|
errMsg = fmt.Sprintf("wrong argument, %s", err.Error())
|
|||
|
err = ecode.RequestErr
|
|||
|
break
|
|||
|
}
|
|||
|
// 检查是否有特殊权限
|
|||
|
err = Svc.SpecialGroupPermit(c, r.GroupID)
|
|||
|
if err != nil {
|
|||
|
break
|
|||
|
}
|
|||
|
|
|||
|
uidtemp, ok := c.Get("uid")
|
|||
|
var uid int64
|
|||
|
if ok {
|
|||
|
uid = uidtemp.(int64)
|
|||
|
}
|
|||
|
var data = &model.UpSpecial{
|
|||
|
GroupID: r.GroupID,
|
|||
|
Note: r.Note,
|
|||
|
UID: uid,
|
|||
|
ID: r.ID,
|
|||
|
}
|
|||
|
|
|||
|
_, err = Svc.SpecialEdit(c, data, r.ID)
|
|||
|
if err != nil {
|
|||
|
log.Error("fail edit ups, err=%v, info=%v", err, data)
|
|||
|
errMsg = err.Error()
|
|||
|
break
|
|||
|
}
|
|||
|
log.Info("edit ups successful, info=%v", data)
|
|||
|
}
|
|||
|
if err != nil {
|
|||
|
service.BmHTTPErrorWithMsg(c, err, errMsg)
|
|||
|
} else {
|
|||
|
c.JSON(res, err)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 支持更多的条件类型
|
|||
|
func specialGet(c *bm.Context) {
|
|||
|
var data interface{}
|
|||
|
var err error
|
|||
|
var errMsg string
|
|||
|
var r = new(model.GetSpecialArg)
|
|||
|
var ups []*model.UpSpecialWithName
|
|||
|
switch {
|
|||
|
default:
|
|||
|
if err = c.Bind(r); err != nil {
|
|||
|
log.Error("request argument bind fail, err=%v", err)
|
|||
|
errMsg = fmt.Sprintf("wrong argument, %s", err.Error())
|
|||
|
err = ecode.RequestErr
|
|||
|
break
|
|||
|
}
|
|||
|
|
|||
|
if r.Pn == 0 {
|
|||
|
r.Pn = 1
|
|||
|
}
|
|||
|
if r.Ps == 0 {
|
|||
|
r.Ps = 20
|
|||
|
}
|
|||
|
if r.Ps > 100 {
|
|||
|
r.Ps = 100
|
|||
|
}
|
|||
|
if r.Ps < 5 {
|
|||
|
r.Ps = 5
|
|||
|
}
|
|||
|
uidtemp, ok := c.Get("uid")
|
|||
|
var uid int64
|
|||
|
if ok {
|
|||
|
uid, _ = uidtemp.(int64)
|
|||
|
}
|
|||
|
|
|||
|
var total int
|
|||
|
ups, total, err = Svc.SpecialGet(c, r)
|
|||
|
if err != nil {
|
|||
|
log.Error("fail to get special, err=%v, arg=%+v", err, r)
|
|||
|
errMsg = err.Error()
|
|||
|
err = ecode.ServerErr
|
|||
|
break
|
|||
|
}
|
|||
|
log.Info("get special successful, arg=%+v, result count=%d", len(ups), uid)
|
|||
|
data = model.UpsPage{
|
|||
|
Items: ups,
|
|||
|
Pager: &model.Pager{Num: r.Pn, Size: r.Ps, Total: total},
|
|||
|
}
|
|||
|
}
|
|||
|
if err != nil {
|
|||
|
service.BmHTTPErrorWithMsg(c, err, errMsg)
|
|||
|
} else {
|
|||
|
|
|||
|
if r.Export == "csv" {
|
|||
|
c.Writer.Header().Set("Content-Type", "application/csv")
|
|||
|
c.Writer.Header().Set("Content-Disposition", fmt.Sprintf("attachment;filename=\"up_special_%s.csv\"", time.Now().Format(mysql.TimeFormat)))
|
|||
|
|
|||
|
var buf = &bytes.Buffer{}
|
|||
|
var csvWriter = csv.NewWriter(buf)
|
|||
|
csvWriter.Write((&model.UpSpecialWithName{}).GetTitleFields())
|
|||
|
for _, v := range ups {
|
|||
|
csvWriter.Write(v.ToStringFields())
|
|||
|
}
|
|||
|
csvWriter.Flush()
|
|||
|
c.Writer.Write(buf.Bytes())
|
|||
|
} else {
|
|||
|
c.JSON(data, err)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
func specialGetByMid(c *bm.Context) {
|
|||
|
var data interface{}
|
|||
|
var err error
|
|||
|
var errMsg string
|
|||
|
var r = new(model.GetSpecialByMidArg)
|
|||
|
switch {
|
|||
|
default:
|
|||
|
if err = c.Bind(r); err != nil {
|
|||
|
log.Error("request argument bind fail, err=%v", err)
|
|||
|
errMsg = fmt.Sprintf("wrong argument, %s", err.Error())
|
|||
|
err = ecode.RequestErr
|
|||
|
break
|
|||
|
}
|
|||
|
|
|||
|
uidtemp, ok := c.Get("uid")
|
|||
|
var uid int64
|
|||
|
if ok {
|
|||
|
uid = uidtemp.(int64)
|
|||
|
}
|
|||
|
var ups []*model.UpSpecial
|
|||
|
ups, err = Svc.SpecialGetByMid(c, r)
|
|||
|
if err != nil {
|
|||
|
log.Error("fail to get special, err=%v, arg=%+v", err, r)
|
|||
|
errMsg = err.Error()
|
|||
|
err = ecode.ServerErr
|
|||
|
break
|
|||
|
}
|
|||
|
log.Info("get special successful, arg=%+v, result count=%d", len(ups), uid)
|
|||
|
data = ups
|
|||
|
}
|
|||
|
if err != nil {
|
|||
|
service.BmHTTPErrorWithMsg(c, err, errMsg)
|
|||
|
} else {
|
|||
|
c.JSON(data, err)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
func listUp(c *bm.Context) {
|
|||
|
var (
|
|||
|
mids []int64
|
|||
|
newLastID int64
|
|||
|
err error
|
|||
|
errMsg string
|
|||
|
arg = new(model.ListUpBaseArg)
|
|||
|
)
|
|||
|
switch {
|
|||
|
default:
|
|||
|
if err = c.Bind(arg); err != nil {
|
|||
|
log.Error("request argument bind fail, err=%v", err)
|
|||
|
errMsg = err.Error()
|
|||
|
err = ecode.RequestErr
|
|||
|
break
|
|||
|
}
|
|||
|
if !arg.Validate() {
|
|||
|
errMsg, err = "illegal argument", ecode.RequestErr
|
|||
|
break
|
|||
|
}
|
|||
|
if arg.Size == 0 {
|
|||
|
arg.Size = 100
|
|||
|
}
|
|||
|
|
|||
|
mids, newLastID, err = Svc.ListUpBase(c, arg.Size, arg.LastID, arg.Activity)
|
|||
|
|
|||
|
if err != nil {
|
|||
|
log.Error("fail to get special, err=%v, arg=%v", err, arg)
|
|||
|
errMsg = err.Error()
|
|||
|
err = ecode.ServerErr
|
|||
|
break
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if err != nil {
|
|||
|
service.BmHTTPErrorWithMsg(c, err, errMsg)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
c.JSON(map[string]interface{}{
|
|||
|
"result": mids,
|
|||
|
"last_id": newLastID,
|
|||
|
}, nil)
|
|||
|
}
|
|||
|
|
|||
|
func active(ctx *bm.Context) {
|
|||
|
var (
|
|||
|
err error
|
|||
|
errMsg string
|
|||
|
req = new(model.UpInfoActiveReq)
|
|||
|
)
|
|||
|
|
|||
|
if err = ctx.Bind(req); err != nil {
|
|||
|
log.Error("request param error: req: %+v, err: %+v", req, err)
|
|||
|
return
|
|||
|
}
|
|||
|
if req.Mid <= 0 {
|
|||
|
log.Error("param error mid: %d", req.Mid)
|
|||
|
ctx.JSON(nil, ecode.RequestErr)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
log.Info("req: %+v", req)
|
|||
|
res, err := Svc.GetUpInfoActive(ctx, req)
|
|||
|
if err != nil {
|
|||
|
log.Error("Svc.GetUpInfoActive error: %+v", err)
|
|||
|
service.BmHTTPErrorWithMsg(ctx, err, errMsg)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
ctx.JSON(res, nil)
|
|||
|
}
|
|||
|
|
|||
|
func actives(ctx *bm.Context) {
|
|||
|
var (
|
|||
|
err error
|
|||
|
errMsg string
|
|||
|
req = new(model.UpsInfoActiveReq)
|
|||
|
)
|
|||
|
|
|||
|
if err = ctx.Bind(req); err != nil {
|
|||
|
log.Error("request param error: req: %+v, err: %+v", req, err)
|
|||
|
return
|
|||
|
}
|
|||
|
if len(req.Mids) <= 0 {
|
|||
|
log.Error("param error mids: %+v", req.Mids)
|
|||
|
ctx.JSON(nil, ecode.RequestErr)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
log.Info("req: %+v", req)
|
|||
|
res, err := Svc.GetUpsInfoActive(ctx, req)
|
|||
|
if err != nil {
|
|||
|
log.Error("Svc.GetUpsInfoActive error: %+v", err)
|
|||
|
service.BmHTTPErrorWithMsg(ctx, err, errMsg)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
ctx.JSON(res, nil)
|
|||
|
}
|