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,45 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"csv.go",
"http.go",
"stat.go",
"task.go",
"task_log.go",
],
importpath = "go-common/app/admin/main/laser/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/laser/conf:go_default_library",
"//app/admin/main/laser/model:go_default_library",
"//app/admin/main/laser/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/middleware/permit:go_default_library",
"//library/xstr:go_default_library",
"//vendor/github.com/pkg/errors: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,47 @@
package http
import (
"fmt"
"net/http"
"github.com/pkg/errors"
)
// CSVContentType
var (
CSVContentType = []string{"application/csv"}
_ Render = CSV{}
)
// Render http response render.
type Render interface {
Render(http.ResponseWriter) error
WriteContentType(w http.ResponseWriter)
}
// CSV str.
type CSV struct {
Content []byte
Title string
}
// WriteContentType fn
func (j CSV) WriteContentType(w http.ResponseWriter) {
writeContentType(w, CSVContentType, j.Title)
}
func writeContentType(w http.ResponseWriter, value []string, title string) {
header := w.Header()
if val := header["Content-Type"]; len(val) == 0 {
header["Content-Type"] = value
}
header["Content-Disposition"] = append(header["Content-Disposition"], fmt.Sprintf("attachment; filename=\"%s\".csv", title))
}
// Render (JSON) writes data with json ContentType.
func (j CSV) Render(w http.ResponseWriter) (err error) {
if _, err = w.Write(j.Content); err != nil {
err = errors.WithStack(err)
}
return
}

View File

@ -0,0 +1,76 @@
package http
import (
"net/http"
"go-common/app/admin/main/laser/conf"
"go-common/app/admin/main/laser/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/permit"
)
var (
svc *service.Service
authSrc *permit.Permit
)
// Init http server
func Init(c *conf.Config) {
svc = service.New(c)
authSrc = permit.New(c.Auth)
engine := bm.DefaultServer(c.BM)
initRouter(engine)
if err := engine.Start(); err != nil {
log.Error("engine.Start error(%v)", err)
panic(err)
}
}
func initRouter(e *bm.Engine) {
e.Ping(ping)
laser := e.Group("/x/admin/laser", authSrc.Verify())
{
task := laser.Group("/task")
{
task.POST("/add", addTask)
task.GET("/list", queryTask)
task.POST("/edit", updateTask)
task.POST("/delete", deleteTask)
}
taskLog := laser.Group("/task_log")
{
taskLog.GET("/list", queryTaskLog)
}
recheck := laser.Group("/archive/stat")
{
recheck.GET("/panel", recheckPanel)
recheck.GET("/user", recheckUser)
recheck.GET("/123_recheck", recheck123)
}
cargo := laser.Group("/archive/cargo")
{
cargo.GET("/audit/csv", auditCargoCsv)
cargo.GET("/auditors", auditorCargo)
}
tag := laser.Group("/archive/tag")
{
tag.GET("/recheck", tagRecheck)
}
video := laser.Group("/video/stat")
{
video.GET("/random_video", randomVideo)
video.GET("/random_video/csv", csvRandomVideo)
video.GET("/fixed_video", fixedVideo)
video.GET("/fixed_video/csv", csvFixedVideo)
}
}
}
// ping check server ok.
func ping(c *bm.Context) {
if err := svc.Ping(c); err != nil {
log.Error("laser-admin service ping error")
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}

View File

@ -0,0 +1,275 @@
package http
import (
"fmt"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/xstr"
"net/http"
"sort"
"time"
)
func recheckPanel(c *bm.Context) {
v := new(struct {
TypeIDStr string `form:"type_id"`
StartDate int64 `form:"start_date"`
EndDate int64 `form:"end_date"`
UName string `form:"uname"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
var typeIDS []int64
if typeIDS, err = xstr.SplitInts(v.TypeIDStr); err != nil {
c.JSON(nil, err)
return
}
recheckViews, err := svc.ArchiveRecheck(c, typeIDS, v.UName, v.StartDate, v.EndDate)
if err != nil {
c.JSON(nil, err)
return
}
sort.Slice(recheckViews, func(i, j int) bool {
return recheckViews[i].Date > recheckViews[j].Date
})
c.JSON(recheckViews, nil)
}
func recheckUser(c *bm.Context) {
v := new(struct {
TypeIDStr string `form:"type_id"`
StartDate int64 `form:"start_date"`
EndDate int64 `form:"end_date"`
UName string `form:"uname"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
var typeIDS []int64
if typeIDS, err = xstr.SplitInts(v.TypeIDStr); err != nil {
c.JSON(nil, err)
return
}
recheckViews, err := svc.UserRecheck(c, typeIDS, v.UName, v.StartDate, v.EndDate)
if err != nil {
c.JSON(nil, err)
return
}
sort.Slice(recheckViews, func(i, j int) bool {
return recheckViews[i].Date > recheckViews[j].Date
})
c.JSON(recheckViews, nil)
}
func auditCargoCsv(c *bm.Context) {
v := new(struct {
StartDate int64 `form:"stime"`
EndDate int64 `form:"etime"`
Uname string `form:"uname"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
content, err := svc.CsvAuditCargo(c, v.StartDate, v.EndDate, v.Uname)
if err != nil {
c.JSON(nil, err)
return
}
c.Render(http.StatusOK, CSV{
Content: content,
Title: fmt.Sprintf("%s~%s-%s", time.Unix(v.StartDate, 0).Format("2006/01/02_15"), time.Unix(v.EndDate, 0).Format("2006/01/02_15"), v.Uname),
})
}
func auditorCargo(c *bm.Context) {
v := new(struct {
StartDate int64 `form:"stime"`
EndDate int64 `form:"etime"`
Uname string `form:"uname"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
wrappers, _, err := svc.AuditorCargoList(c, v.StartDate, v.EndDate, v.Uname)
if err != nil {
c.JSON(nil, err)
return
}
sort.Slice(wrappers, func(i, j int) bool {
return wrappers[i].Date > wrappers[j].Date
})
c.JSON(wrappers, nil)
}
func tagRecheck(c *bm.Context) {
v := new(struct {
Uname string `form:"uname"`
StartDate int64 `form:"stime"`
EndDate int64 `form:"etime"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
tagViews, err := svc.TagRecheck(c, v.StartDate, v.EndDate, v.Uname)
if err != nil {
c.JSON(nil, err)
return
}
sort.Slice(tagViews, func(i, j int) bool {
return tagViews[i].Date > tagViews[j].Date
})
c.JSON(tagViews, nil)
}
func recheck123(c *bm.Context) {
v := new(struct {
StartDate int64 `form:"stime"`
EndDate int64 `form:"etime"`
TypeIDStr string `form:"type_id"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
var typeIDS []int64
if typeIDS, err = xstr.SplitInts(v.TypeIDStr); err != nil {
c.JSON(nil, err)
return
}
recheckViews, err := svc.Recheck123(c, v.StartDate, v.EndDate, typeIDS)
if err != nil {
c.JSON(nil, err)
return
}
sort.Slice(recheckViews, func(i, j int) bool {
return recheckViews[i].Date > recheckViews[j].Date
})
c.JSON(recheckViews, nil)
}
func randomVideo(c *bm.Context) {
v := new(struct {
StartDate int64 `form:"stime"`
EndDate int64 `form:"etime"`
TypeIDStr string `form:"type_id"`
Uname string `form:"uname"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
var typeIDS []int64
if typeIDS, err = xstr.SplitInts(v.TypeIDStr); err != nil {
c.JSON(nil, err)
return
}
statViewExts, _, err := svc.RandomVideo(c, v.StartDate, v.EndDate, typeIDS, v.Uname)
if err != nil {
c.JSON(nil, err)
return
}
sort.Slice(statViewExts, func(i, j int) bool {
return statViewExts[i].Date > statViewExts[j].Date
})
c.JSON(statViewExts, nil)
}
func fixedVideo(c *bm.Context) {
v := new(struct {
StartDate int64 `form:"stime"`
EndDate int64 `form:"etime"`
TypeIDStr string `form:"type_id"`
Uname string `form:"uname"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
var typeIDS []int64
if typeIDS, err = xstr.SplitInts(v.TypeIDStr); err != nil {
c.JSON(nil, err)
return
}
statViewExts, _, err := svc.FixedVideo(c, v.StartDate, v.EndDate, typeIDS, v.Uname)
if err != nil {
c.JSON(nil, err)
return
}
sort.Slice(statViewExts, func(i, j int) bool {
return statViewExts[i].Date > statViewExts[j].Date
})
c.JSON(statViewExts, nil)
}
func csvFixedVideo(c *bm.Context) {
v := new(struct {
StartDate int64 `form:"stime"`
EndDate int64 `form:"etime"`
Uname string `form:"uname"`
TypeIDStr string `form:"type_id"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
var typeIDS []int64
if typeIDS, err = xstr.SplitInts(v.TypeIDStr); err != nil {
c.JSON(nil, err)
return
}
content, err := svc.CsvFixedVideoAudit(c, v.StartDate, v.EndDate, v.Uname, typeIDS)
if err != nil {
c.JSON(nil, err)
return
}
c.Render(http.StatusOK, CSV{
Content: content,
Title: fmt.Sprintf("%s_%s~%s-%s", "(定时发布)视频审核操作数据", time.Unix(v.StartDate, 0).Format("2006-01-02"), time.Unix(v.EndDate, 0).Format("2006-01-02"), v.Uname),
})
}
func csvRandomVideo(c *bm.Context) {
v := new(struct {
StartDate int64 `form:"stime"`
EndDate int64 `form:"etime"`
Uname string `form:"uname"`
TypeIDStr string `form:"type_id"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
var typeIDS []int64
if typeIDS, err = xstr.SplitInts(v.TypeIDStr); err != nil {
c.JSON(nil, err)
return
}
content, err := svc.CsvRandomVideoAudit(c, v.StartDate, v.EndDate, v.Uname, typeIDS)
if err != nil {
c.JSON(nil, err)
return
}
c.Render(http.StatusOK, CSV{
Content: content,
Title: fmt.Sprintf("%s_%s~%s-%s", "(非定时)视频审核操作数据", time.Unix(v.StartDate, 0).Format("2006-01-02"), time.Unix(v.EndDate, 0).Format("2006-01-02"), v.Uname),
})
}

View File

@ -0,0 +1,179 @@
package http
import (
"regexp"
"strconv"
"go-common/app/admin/main/laser/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
const (
emailRegex = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"
)
func addTask(c *bm.Context) {
req := c.Request
v := new(struct {
MID int64 `form:"mid" validate:"required"`
LogDate int64 `form:"log_date" validate:"required"`
ContactEmail string `form:"contact_email" validate:"required"`
Platform int `form:"platform" validate:"required"`
SourceType int `form:"source_type" validate:"required"`
})
err := c.Bind(v)
if err != nil {
return
}
if v.LogDate <= 0 || v.MID <= 0 || !checkEmail(v.ContactEmail) || v.Platform <= 0 || v.SourceType <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
userCookie, err := req.Cookie("username")
if err != nil {
c.JSON(nil, err)
return
}
username := userCookie.Value
uidCookie, err := req.Cookie("uid")
var adminID int64
if err != nil {
adminID = 0
} else {
adminID, err = strconv.ParseInt(uidCookie.Value, 10, 64)
if err != nil {
c.JSON(nil, err)
return
}
}
err = svc.AddTask(c, v.MID, username, adminID, v.LogDate, v.ContactEmail, v.Platform, v.SourceType)
if err != nil {
log.Error("svc.AddTask() error(%v)", err)
}
c.JSON(nil, err)
}
func checkEmail(emailAddr string) (match bool) {
if emailAddr == "" {
return false
}
match, err := regexp.MatchString(emailRegex, emailAddr)
if err != nil {
return false
}
return match
}
func deleteTask(c *bm.Context) {
req := c.Request
v := new(struct {
TaskID int64 `form:"task_id"`
})
err := c.Bind(v)
if err != nil {
return
}
uidCookie, err := req.Cookie("uid")
var adminID int64
if err != nil {
adminID = 0
} else {
adminID, err = strconv.ParseInt(uidCookie.Value, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
userCookie, err := req.Cookie("username")
if err != nil {
c.JSON(nil, ecode.Unauthorized)
return
}
username := userCookie.Value
if err = svc.DeleteTask(c, v.TaskID, username, adminID); err != nil {
log.Error("svc.DeleteTask() error(%v)", err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
func queryTask(c *bm.Context) {
v := new(struct {
Mid int64 `form:"mid"`
LogDateStart int64 `form:"log_date_start"`
LogDateEnd int64 `form:"log_date_end"`
SourceType int `form:"source_type"`
Platform int `form:"platform"`
State int `form:"state"`
SortBy string `form:"sort"`
PageNo int `form:"page_no"`
PageSize int `form:"page_size"`
})
err := c.Bind(v)
if err != nil {
return
}
tasks, count, err := svc.QueryTask(c, v.Mid, v.LogDateStart, v.LogDateEnd, v.SourceType, v.Platform, v.State, v.SortBy, v.PageNo, v.PageSize)
if err != nil {
log.Error("svc.QueryTask() error(%v)", err)
c.JSON(nil, err)
return
}
pager := &model.TaskPager{
PageSize: v.PageSize,
PageNo: v.PageNo,
Total: count,
Items: tasks,
}
c.JSON(pager, nil)
}
func updateTask(c *bm.Context) {
req := c.Request
v := new(struct {
TaskID int64 `form:"task_id" validate:"required"`
MID int64 `form:"mid" validate:"required"`
LogDate int64 `form:"log_date" validate:"required"`
ContactEmail string `form:"contact_email" validate:"required"`
SourceType int `form:"source_type" validate:"required"`
Platform int `form:"platform" validate:"required"`
})
err := c.Bind(v)
if err != nil {
return
}
if v.ContactEmail != "" && !checkEmail(v.ContactEmail) {
c.JSON(nil, ecode.RequestErr)
return
}
uidCookie, err := req.Cookie("uid")
var adminID int64
if err != nil {
adminID = 0
} else {
adminID, err = strconv.ParseInt(uidCookie.Value, 10, 64)
if err != nil {
c.JSON(nil, err)
return
}
}
userCookie, err := req.Cookie("username")
if err != nil {
c.JSON(nil, err)
return
}
username := userCookie.Value
err = svc.UpdateTask(c, username, adminID, v.TaskID, v.MID, v.LogDate, v.ContactEmail, v.SourceType, v.Platform)
if err != nil {
log.Error("svc.UpdateTask() error(%v)", err)
}
c.JSON(nil, err)
}

View File

@ -0,0 +1,39 @@
package http
import (
"go-common/app/admin/main/laser/model"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/net/http/blademaster"
)
func queryTaskLog(c *blademaster.Context) {
v := new(struct {
MID int64 `form:"mid"`
TaskID int64 `form:"task_id"`
Platform int `form:"platform"`
TaskState int `form:"task_state"`
Sortby string `form:"sort"`
PageNo int `form:"page_no"`
PageSize int `form:"page_size"`
})
err := c.Bind(v)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
logs, count, err := svc.QueryTaskLog(c, v.MID, v.TaskID, v.Platform, v.TaskState, v.Sortby, v.PageNo, v.PageSize)
if err != nil {
log.Error("svc.QueryTaskLog() error(%v)", err)
c.JSON(nil, err)
return
}
pager := &model.TaskLogPager{
PageNo: v.PageNo,
PageSize: v.PageSize,
Items: logs,
Total: count,
}
c.JSON(pager, nil)
}