Initial commit

This commit is contained in:
Donny
2019-04-22 20:46:32 +08:00
commit 49ab8aadd1
25441 changed files with 4055000 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"consumer.go",
"http.go",
"prehandler.go",
"qa_video.go",
"report.go",
"review.go",
"task.go",
"weight.go",
],
importpath = "go-common/app/admin/main/videoup-task/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/videoup-task/conf:go_default_library",
"//app/admin/main/videoup-task/model:go_default_library",
"//app/admin/main/videoup-task/service:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/binding:go_default_library",
"//library/net/http/blademaster/middleware/permit:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//library/net/http/blademaster/render: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,79 @@
package http
import (
"net/http"
"strconv"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/render"
)
// 登录管理
func on(c *bm.Context) {
uid, uname := getUIDName(c)
err := srv.HandsUp(c, uid, uname)
if err != nil {
data := map[string]interface{}{
"code": ecode.RequestErr,
"message": err.Error(),
}
c.Render(http.StatusOK, render.MapJSON(data))
return
}
c.JSON(nil, nil)
}
// 踢出
func forceoff(c *bm.Context) {
uidS := c.Request.Form.Get("uid")
uid, _ := strconv.ParseInt(uidS, 10, 64)
if uid == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
adminuid, _ := getUIDName(c)
err := srv.HandsOff(c, adminuid, uid)
if err != nil {
data := map[string]interface{}{
"code": ecode.RequestErr,
"message": err.Error(),
}
c.Render(http.StatusOK, render.MapJSON(data))
return
}
c.JSON(nil, nil)
}
func off(c *bm.Context) {
adminuid, _ := getUIDName(c)
err := srv.HandsOff(c, adminuid, 0)
if err != nil {
data := map[string]interface{}{
"code": ecode.RequestErr,
"message": err.Error(),
}
c.Render(http.StatusOK, render.MapJSON(data))
return
}
c.JSON(nil, nil)
}
func online(c *bm.Context) {
c.JSON(srv.Online(c))
}
func inoutlist(c *bm.Context) {
v := new(struct {
Unames string `form:"unames" default:""`
Bt string `form:"bt" default:""`
Et string `form:"et" default:""`
})
if err := c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(srv.InOutList(c, v.Unames, v.Bt, v.Et))
}

View File

@@ -0,0 +1,119 @@
package http
import (
http2 "net/http"
"go-common/app/admin/main/videoup-task/conf"
"go-common/app/admin/main/videoup-task/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 (
srv *service.Service
permSrv *permit.Permit
vfySvc *verify.Verify
)
//Init init http
func Init(conf *conf.Config, s *service.Service) {
srv = s
permSrv = permit.New(conf.Auth)
vfySvc = verify.New(nil)
engine := bm.DefaultServer(conf.BM)
innerRoute(engine)
if err := engine.Start(); err != nil {
log.Error("engine.Start error(%v)", err)
panic(err)
}
}
func innerRoute(engine *bm.Engine) {
engine.Ping(ping)
g := engine.Group("/x/admin/vt")
{
v := g.Group("/video", permSrv.Permit("TASK_QA_VIDEO"))
{
v.GET("/list", list)
v.GET("/detail", detail)
v.POST("/submit", submit)
}
t := g.Group("/task", permSrv.Permit(""))
{
w := t.Group("/", permSrv.Permit("TASKWEIGHT"))
{
w.GET("/weightconfig/maxweight", maxweight)
w.POST("/weightconfig/add", addwtconf)
w.POST("/weightconfig/del", delwtconf)
w.GET("/weightconfig/list", listwtconf)
w.GET("/weightlog/list", listwtlog)
w.GET("/wcv/show", show)
w.POST("/wcv/set", set)
}
r := t.Group("/review")
{
r.GET("/config/list", listreviews)
r.POST("/config/add", addreview)
r.POST("/config/edit", editreview)
r.POST("/config/delete", delreview)
}
c := t.Group("consumer")
{
c.GET("/on", checkgroup(), on)
c.GET("/off", checkgroup(), off) //自己退出
c.POST("/forceoff", forceoff) //强制踢出
}
t.GET("/online", permSrv.Permit("ONLINE"), online)
t.GET("/inoutlist", inoutlist)
t.POST("/delay", checkowner(), delay)
t.POST("/free", taskfree)
}
}
g = engine.Group("/vt", vfySvc.Verify)
{
v := g.Group("/video")
{
v.POST("/add", add)
v.POST("/uputime", upTaskUTime)
}
g.GET("/report/memberstats", memberStats)
r := g.Group("review")
{
r.POST("/check", checkReview)
}
t := g.Group("task")
{
t.GET("/tooks", taskTooks)
t.GET("/next", next)
t.GET("/list", listTask)
t.GET("/info", info)
}
}
}
func ping(ctx *bm.Context) {
if srv.Ping(ctx) != nil {
ctx.AbortWithStatus(http2.StatusServiceUnavailable)
ctx.Done()
}
}
func getUIDName(ctx *bm.Context) (uid int64, username string) {
if uidi, _ := ctx.Get("uid"); uidi != nil {
uid = uidi.(int64)
}
if name, _ := ctx.Get("username"); name != nil {
username = name.(string)
}
return
}

View File

@@ -0,0 +1,50 @@
package http
import (
"net/http"
"strconv"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/render"
)
func checkgroup() bm.HandlerFunc {
return func(ctx *bm.Context) {
uid, _ := getUIDName(ctx)
role, err := srv.CheckGroup(ctx, uid)
if err != nil || role == 0 {
data := map[string]interface{}{
"code": ecode.RequestErr,
"message": "权限错误",
}
ctx.Render(http.StatusOK, render.MapJSON(data))
ctx.Abort()
return
}
}
}
// 校验任务操作权限
func checkowner() bm.HandlerFunc {
return func(ctx *bm.Context) {
tidS := ctx.Request.Form.Get("task_id")
tid, err := strconv.Atoi(tidS)
if err != nil {
ctx.JSON(nil, ecode.RequestErr)
ctx.Abort()
return
}
uid, _ := getUIDName(ctx)
if err := srv.CheckOwner(ctx, int64(tid), uid); err != nil {
data := map[string]interface{}{
"code": ecode.RequestErr,
"message": err.Error(),
}
ctx.Render(http.StatusOK, render.MapJSON(data))
ctx.Abort()
return
}
}
}

View File

@@ -0,0 +1,110 @@
package http
import (
"strconv"
"time"
"go-common/app/admin/main/videoup-task/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/binding"
)
func list(ctx *bm.Context) {
params := new(model.ListParams)
if err := ctx.Bind(params); err != nil {
ctx.JSON(nil, ecode.RequestErr)
return
}
if params.Limit > 0 && (params.Limit <= (params.Pn-1)*params.Ps || params.Seed == "") {
ctx.JSON(nil, ecode.RequestErr)
return
}
//params 默认值
tformat := "2006-01-02 15:04:05"
if params.CTimeFrom == "" && params.CTimeTo == "" {
params.CTimeFrom = time.Now().AddDate(0, 0, -7).Format(tformat)
params.CTimeTo = time.Now().Format(tformat)
}
if params.FTimeFrom != "" || params.FTimeTo != "" {
params.State = model.QAStateFinish
}
if params.State != 0 && params.State != model.QAStateFinish {
params.State = model.QAStateWait
}
list, err := srv.GetVideoList(ctx, params)
ctx.JSON(list, err)
}
func detail(ctx *bm.Context) {
idStr := ctx.Request.FormValue("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
ctx.JSON(nil, ecode.RequestErr)
return
}
//任务详情
detail, err := srv.GetDetail(ctx, id)
ctx.JSON(detail, err)
}
func add(ctx *bm.Context) {
//veri params
params := new(model.AddVideoParams)
if err := ctx.BindWith(params, binding.JSON); err != nil {
ctx.JSON(nil, ecode.RequestErr)
return
}
//insert
taskID, err := srv.AddQATaskVideo(ctx, params)
if err != nil {
ctx.JSON(nil, err)
return
}
if taskID <= 0 {
ctx.JSON(nil, ecode.RequestErr)
return
}
ctx.JSON(taskID, nil)
}
func submit(ctx *bm.Context) {
uid, username := getUIDName(ctx)
params := new(model.QASubmitParams)
if err := ctx.Bind(params); err != nil {
ctx.JSON(nil, ecode.RequestErr)
return
}
if _, exist := model.QAAuditStatus[params.AuditStatus]; !exist {
ctx.JSON(nil, ecode.RequestErr)
return
}
if params.AuditStatus == model.VideoStatusRecycle && (params.TagID <= 0 || params.Reason == "") {
ctx.JSON(nil, ecode.RequestErr)
return
}
ctx.JSON(nil, srv.QAVideoSubmit(ctx, username, uid, params))
}
func upTaskUTime(ctx *bm.Context) {
params := new(struct {
TaskID int64 `form:"task_id" validate:"required,gt=0"`
AID int64 `form:"aid" validate:"required,gt=0"`
CID int64 `form:"cid" validate:"required,gt=0"`
UTime int64 `form:"utime"`
})
if err := ctx.Bind(params); err != nil {
log.Error("upTaskUTime ctx.Bind error(%v) params(%+v)", err, ctx.Request.PostForm)
ctx.JSON(nil, ecode.RequestErr)
return
}
ctx.JSON(nil, srv.UpVideoUTime(ctx, params.AID, params.CID, params.TaskID, params.UTime))
}

View File

@@ -0,0 +1,42 @@
package http
import (
"time"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func memberStats(c *bm.Context) {
c.JSON(srv.GetStats(c))
}
func taskTooks(c *bm.Context) {
req := c.Request
params := req.Form
stimeStr := params.Get("stime")
etimeStr := params.Get("etime")
if stimeStr == "" {
stimeStr = time.Now().Format("2006-01-02") + " 00:00:00"
}
if etimeStr == "" {
etimeStr = time.Now().Format("2006-01-02 15:04:05")
}
local, _ := time.LoadLocation("Local")
stime, err := time.ParseInLocation("2006-01-02 15:04:05", stimeStr, local)
if stime.Unix() < 1 || err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
etime, err := time.ParseInLocation("2006-01-02 15:04:05", etimeStr, local)
if etime.Unix() < 1 || err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
tooks, err := srv.TaskTooksByHalfHour(c, stime, etime)
if err != nil {
c.JSON(nil, err)
return
}
c.JSON(tooks, nil)
}

View File

@@ -0,0 +1,80 @@
package http
import (
"go-common/app/admin/main/videoup-task/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"strconv"
)
func checkReview(c *bm.Context) {
sf := &model.SubmitForm{}
if err := c.Bind(sf); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if ok, err := srv.CheckReview(c, sf); err != nil {
c.JSON(nil, err)
} else {
c.JSON(ok, nil)
}
}
// list
func listreviews(c *bm.Context) {
v := &model.ListParser{}
if err := c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
rcs, count, err := srv.ListReviewConfs(c, v.Unames, v.Bt, v.Et, v.Sort, v.Pn, v.Ps)
if err != nil {
c.JSON(nil, err)
return
}
c.JSONMap(map[string]interface{}{
"data": rcs,
"pager": &model.Pager{Pn: int(v.Pn), Ps: int(v.Ps), Sum: count},
}, nil)
}
func addreview(c *bm.Context) {
uid, uname := getUIDName(c)
trc := &model.ReviewConf{}
if err := c.Bind(trc); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
trc.UID = uid
trc.Uname = uname
c.JSON(nil, srv.AddReviewConf(c, trc))
}
func editreview(c *bm.Context) {
uid, uname := getUIDName(c)
trc := &model.ReviewConf{}
if err := c.Bind(trc); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
trc.UID = uid
trc.Uname = uname
c.JSON(nil, srv.EditReviewConf(c, trc))
}
func delreview(c *bm.Context) {
idStr := c.Request.Form.Get("id")
id, err := strconv.Atoi(idStr)
if err != nil || id == 0 {
c.JSON(nil, ecode.RequestErr)
}
c.JSON(nil, srv.DelReviewConf(c, id))
}

View File

@@ -0,0 +1,100 @@
package http
import (
"strconv"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
// 任务管理
func delay(c *bm.Context) {
v := new(struct {
Taskid int64 `form:"task_id" validate:"required"`
Reason string `form:"reason"`
})
if err := c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
uid, _ := getUIDName(c)
c.JSON(nil, srv.Delay(c, v.Taskid, uid, v.Reason))
}
func taskfree(c *bm.Context) {
var uid, rows int64
uid, _ = getUIDName(c)
rows = srv.Free(c, uid)
log.Info("释放任务(uid=%d,rows=%d)", uid, rows)
c.JSON(nil, nil)
}
func next(c *bm.Context) {
uidS := c.Request.Form.Get("uid")
uid, err := strconv.Atoi(uidS)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
task, err := srv.Next(c, int64(uid))
if err != nil {
log.Error("srv.Next(uid=%d) error(%v)", uid, err)
c.JSON(nil, err)
return
}
c.JSON(task, nil)
}
func listTask(c *bm.Context) {
v := new(struct {
UID int64 `form:"uid" default:"0"`
IsLeader int8 `form:"isleader" default:"0"`
Lt int8 `form:"listtype" default:"0"`
Pn int `form:"page" default:"1"`
Ps int `form:"pagesize" default:"20"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
tasks, err := srv.List(c, v.UID, v.Pn, v.Ps, v.Lt, v.IsLeader)
if err != nil {
log.Error("srv.List(uid=%d,page=%d, pagesize=%d, listtype=%d, isleader=%d) error(%v)",
v.UID, v.Pn, v.Ps, v.Lt, v.IsLeader, err)
c.JSON(nil, err)
return
}
c.JSON(tasks, nil)
}
// info 返回任务信息,复审信息
func info(c *bm.Context) {
var tid int
if tid, _ = strconv.Atoi(c.Request.Form.Get("taskid")); tid == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
task, err := srv.Info(c, int64(tid))
if err != nil {
c.JSON(nil, err)
return
}
form, err := srv.ReviewForm(c, int64(tid))
if err != nil {
c.JSON(nil, err)
return
}
c.JSONMap(map[string]interface{}{
"task": task,
"review": form,
}, nil)
}

View File

@@ -0,0 +1,99 @@
package http
import (
"net/http"
"strconv"
"go-common/app/admin/main/videoup-task/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/render"
)
// 权重管理
func addwtconf(c *bm.Context) {
var err error
cfg := &model.WeightConf{}
if err = c.Bind(cfg); err != nil {
log.Error("addwtconf error(%v)", err)
c.JSON(nil, ecode.RequestErr)
return
}
uid, uname := getUIDName(c)
err = srv.AddWeightConf(c, cfg, uid, uname)
if err != nil {
data := map[string]interface{}{
"code": ecode.RequestErr,
"message": err.Error(),
}
c.Render(http.StatusOK, render.MapJSON(data))
return
}
c.JSON(nil, nil)
}
func delwtconf(c *bm.Context) {
var err error
ids := c.Request.Form.Get("id")
id, err := strconv.Atoi(ids)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(srv.DelWeightConf(c, int64(id)), nil)
}
func listwtconf(c *bm.Context) {
v := new(model.Confs)
if err := c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(srv.ListWeightConf(c, v))
}
func maxweight(c *bm.Context) {
c.JSON(srv.MaxWeight(c))
}
func listwtlog(c *bm.Context) {
v := new(struct {
Taskid int64 `form:"taskid" validate:"required"`
Pn int `form:"page" default:"1"`
Ps int `form:"ps" default:"20"`
})
if err := c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
cfg, count, err := srv.ListWeightLogs(c, v.Taskid, v.Pn)
if err != nil {
c.JSON(nil, err)
return
}
data := make(map[string]interface{})
data["data"] = cfg
data["pager"] = map[string]int{
"current_page": v.Pn,
"total_items": int(count),
"page_size": 20,
}
c.JSONMap(data, err)
}
func show(c *bm.Context) {
c.JSON(srv.ShowWeightVC(c))
}
func set(c *bm.Context) {
v := new(model.WeightVC)
if err := c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, srv.SetWeightVC(c, v))
}