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,50 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"blocked.go",
"common.go",
"export.go",
"http.go",
"jury.go",
"labour.go",
"upload.go",
],
importpath = "go-common/app/admin/main/credit/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/credit/conf:go_default_library",
"//app/admin/main/credit/model:go_default_library",
"//app/admin/main/credit/model/blocked:go_default_library",
"//app/admin/main/credit/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/net/metadata:go_default_library",
"//library/time:go_default_library",
"//library/xstr:go_default_library",
"//vendor/github.com/jinzhu/gorm: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,467 @@
package http
import (
"context"
"fmt"
"time"
"go-common/app/admin/main/credit/model"
"go-common/app/admin/main/credit/model/blocked"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
xtime "go-common/library/time"
"go-common/library/xstr"
)
// infos get info list.
func infos(c *bm.Context) {
v := new(blocked.ArgBlockedSearch)
err := c.Bind(v)
if err != nil {
return
}
info, pager, err := creSvc.Infos(c, v)
if err != nil {
log.Error("creSvc.Infos(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
if len(info) == 0 {
httpData(c, nil, pager)
return
}
httpData(c, info, pager)
}
// infoByID get info by id.
func infoByID(c *bm.Context) {
var err error
v := new(struct {
ID int64 `form:"id" validate:"required"`
})
if err = c.Bind(v); err != nil {
return
}
item := &blocked.Info{}
if err = creSvc.ReadDB.Where("id = ?", v.ID).Find(item).Error; err != nil {
if err != ecode.NothingFound {
log.Error("creSvc.infoByID error(%v)", err)
httpCode(c, err)
return
}
httpData(c, nil, nil)
return
}
if item != nil {
info, err := creSvc.UserInfo(c, item.UID)
if err != nil {
log.Error("creSvc.UserInfo error(%v)", err)
err = nil
}
if info != nil {
item.UName = info.Info.Name
}
item.ReasonTypeDesc = blocked.ReasonTypeDesc(item.ReasonType)
item.BlockedDaysDesc = blocked.BDaysDesc(item.BlockedDays, item.MoralNum, item.PunishType, item.BlockedForever)
item.PublishStatusDesc = blocked.PStatusDesc[item.PublishStatus]
item.OriginTypeDesc = blocked.OriginTypeDesc[item.OriginType]
item.BlockedTypeDesc = blocked.BTypeDesc[item.BlockedType]
}
httpData(c, item, nil)
}
// upInfo update info.
func upInfo(c *bm.Context) {
var err error
v := new(blocked.ArgUpInfo)
if err = c.Bind(v); err != nil {
return
}
item := &blocked.Info{}
if err = creSvc.ReadDB.Where("id = ?", v.ID).Find(item).Error; err != nil {
log.Error("http.blcokedInfoByID(%d) error(%v)", v.ID, err)
httpCode(c, err)
return
}
var data map[string]interface{}
switch {
case item.PublishStatus == blocked.StatusClose && v.Status == blocked.StatusOpen:
data = map[string]interface{}{
"origin_content_modify": v.Content,
"publish_status": v.Status,
"oper_id": v.OID,
"publish_time": xtime.Time(time.Now().Unix()),
}
default:
data = map[string]interface{}{
"origin_content_modify": v.Content,
"publish_status": v.Status,
"oper_id": v.OID,
}
}
if err = creSvc.DB.Model(&blocked.Info{}).Where("id = ?", v.ID).Updates(data).Error; err != nil {
log.Error("s.dao.UpInfo(%v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_upInfo:%+v", v)
var multiple []interface{}
single := map[string]interface{}{
"id": item.ID,
"oper_id": v.OID,
"status": item.Status,
"publish_status": v.Status,
}
multiple = append(multiple, single)
creSvc.AddNotify(func() {
creSvc.Search.SearchUpdate(context.TODO(), blocked.BusinessBlockedInfo, blocked.TableBlockedInfo, multiple)
})
httpCode(c, nil)
}
func delInfo(c *bm.Context) {
var err error
v := new(struct {
IDS []int64 `form:"ids,split" validate:"min=1,max=100"`
OID int64 `form:"op_id" validate:"required"`
Status int8 `form:"status" default:"1"`
})
if err = c.Bind(v); err != nil {
return
}
items := []*blocked.Info{}
if err = creSvc.ReadDB.Where("id IN (?)", v.IDS).Find(&items).Error; err != nil {
log.Error("http.blcokedInfoByIDs(%s) error(%v)", xstr.JoinInts(v.IDS), err)
httpCode(c, err)
return
}
if err = creSvc.DB.Model(&blocked.Info{}).Where("id IN (?)", v.IDS).Updates(map[string]interface{}{"status": v.Status, "oper_id": v.OID}).Error; err != nil {
log.Error("s.dao.delInfo(%v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_delInfo:%+v", v)
var multiple []interface{}
for _, item := range items {
single := map[string]interface{}{
"id": item.ID,
"oper_id": v.OID,
"status": v.Status,
"publish_status": item.PublishStatus,
}
multiple = append(multiple, single)
}
creSvc.AddNotify(func() {
creSvc.Search.SearchUpdate(context.TODO(), blocked.BusinessBlockedInfo, blocked.TableBlockedInfo, multiple)
})
httpCode(c, nil)
}
// upInfoStatus update info publish_status.
func upInfoStatus(c *bm.Context) {
var err error
v := new(blocked.ArgUpStatus)
if err = c.Bind(v); err != nil {
return
}
items := []*blocked.Info{}
if err = creSvc.ReadDB.Where("id IN (?)", v.IDS).Find(&items).Error; err != nil {
log.Error("http.blcokedInfoByIDs(%s) error(%v)", xstr.JoinInts(v.IDS), err)
httpCode(c, err)
return
}
if err = creSvc.DB.Model(&blocked.Info{}).Where("id IN (?)", v.IDS).Updates(
map[string]interface{}{
"oper_id": v.OID,
"publish_status": v.Status,
"publish_time": xtime.Time(time.Now().Unix()),
}).Error; err != nil {
log.Error("creSvc.upInfoStatus(%v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_upInfoStatus:%+v", v)
var multiple []interface{}
for _, item := range items {
single := map[string]interface{}{
"id": item.ID,
"oper_id": v.OID,
"status": item.Status,
"publish_status": v.Status,
}
multiple = append(multiple, single)
}
creSvc.AddNotify(func() {
creSvc.Search.SearchUpdate(context.TODO(), blocked.BusinessBlockedInfo, blocked.TableBlockedInfo, multiple)
})
httpCode(c, nil)
}
// infosEx export info data.
func infosEx(c *bm.Context) {
v := new(blocked.ArgBlockedSearch)
if err := c.Bind(v); err != nil {
return
}
list, err := creSvc.InfosEx(c, v)
if err != nil {
log.Error("creSvc.InfosEx error(%v)", err)
httpCode(c, err)
return
}
re, err := blocked.DealInfo(list)
if err != nil {
log.Error("blocked.DealInfo error(%v)", err)
httpCode(c, err)
return
}
outBuf(c, creSvc.FormatCSV(re), fmt.Sprintf("%s-%s", time.Now().Format(model.TimeFormatDay), "blocked-info"))
}
func publishs(c *bm.Context) {
v := new(blocked.ArgPublishSearch)
if err := c.Bind(v); err != nil {
return
}
publish, pager, err := creSvc.Publishs(c, v)
if err != nil {
log.Error("creSvc.Publishs(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
if len(publish) == 0 {
httpData(c, nil, pager)
return
}
httpData(c, publish, pager)
}
// publishByID get publish by id.
func publishByID(c *bm.Context) {
var err error
v := new(struct {
ID int64 `form:"id" validate:"required"`
})
if err = c.Bind(v); err != nil {
return
}
item := &blocked.Publish{}
if err = creSvc.ReadDB.Where("id = ?", v.ID).Find(item).Error; err != nil {
if err != ecode.NothingFound {
log.Error("creSvc.publishByID error(%v)", err)
httpCode(c, err)
return
}
httpData(c, nil, nil)
return
}
if item != nil {
item.PublishTypeDesc = blocked.PTypeDesc[item.Type]
item.PublishStatusDesc = blocked.PStatusDesc[item.PublishStatus]
item.StickStatusDesc = blocked.SStatusDesc[item.StickStatus]
}
httpData(c, item, nil)
}
func addPublish(c *bm.Context) {
var err error
v := new(blocked.ArgPublish)
if err = c.Bind(v); err != nil {
return
}
publish := &blocked.Publish{
Title: v.Title,
SubTitle: v.SubTitle,
PublishStatus: v.PublishStatus,
StickStatus: v.StickStatus,
Content: v.Content,
URL: v.URL,
Type: v.PType,
OPID: v.OID,
ShowTime: xtime.Time(time.Now().Unix()),
}
if v.ShowTime != "" {
var tm time.Time
tm, err = time.ParseInLocation(model.TimeFormatSec, v.ShowTime, time.Local)
if err == nil {
publish.ShowTime = xtime.Time(tm.Unix())
}
}
if err = creSvc.DB.Create(publish).Error; err != nil {
log.Error("creSvc.AddPublish(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_addPublish:%+v", v)
httpCode(c, nil)
}
func upPublish(c *bm.Context) {
var err error
v := new(blocked.ArgPublish)
if err = c.Bind(v); err != nil {
return
}
item := &blocked.Publish{}
if err = creSvc.ReadDB.Where("id = ?", v.ID).Find(item).Error; err != nil {
log.Error("http.publishByID(%d) error(%v)", v.ID, err)
httpCode(c, err)
return
}
var showTime xtime.Time
tm, err := time.ParseInLocation(model.TimeFormatSec, v.ShowTime, time.Local)
if err == nil {
showTime = xtime.Time(tm.Unix())
}
if err = creSvc.DB.Model(&blocked.Publish{}).Where("id = ?", v.ID).
Updates(
map[string]interface{}{
"title": v.Title,
"sub_title": v.SubTitle,
"publish_status": v.PublishStatus,
"stick_status": v.StickStatus,
"content": v.Content,
"url": v.URL,
"ptype": v.PType,
"show_time": showTime,
"oper_id": v.OID,
}).Error; err != nil {
log.Error("creSvc.UpPublish(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_upPublish:%+v", v)
var multiple []interface{}
single := map[string]interface{}{
"id": v.ID,
"title": v.Title,
"sub_title": v.SubTitle,
"oper_id": v.OID,
"ptype": v.PType,
"show_time": showTime.Time().Format(model.TimeFormatSec),
"status": item.Status,
}
multiple = append(multiple, single)
creSvc.AddNotify(func() {
creSvc.Search.SearchUpdate(context.TODO(), blocked.BusinessBlockedPublish, blocked.TableBlockedPublish, multiple)
})
httpCode(c, nil)
}
func delPublish(c *bm.Context) {
var err error
v := new(struct {
IDS []int64 `form:"ids,split" validate:"required"`
Status int8 `form:"status" default:"1"`
OID int64 `form:"op_id" validate:"required"`
})
if err = c.Bind(v); err != nil {
return
}
if err = creSvc.DB.Model(&blocked.Publish{}).Where(v.IDS).Updates(map[string]interface{}{"status": v.Status, "oper_id": v.OID}).Error; err != nil {
httpCode(c, err)
return
}
log.Info("business_delPublish:%+v", v)
var multiple []interface{}
for _, id := range v.IDS {
single := map[string]interface{}{
"id": id,
"oper_id": v.OID,
"status": v.Status,
}
multiple = append(multiple, single)
}
creSvc.AddNotify(func() {
creSvc.Search.SearchUpdate(context.TODO(), blocked.BusinessBlockedPublish, blocked.TableBlockedPublish, multiple)
})
httpCode(c, nil)
}
func notices(c *bm.Context) {
var (
err error
order = "id"
sort = "DESC"
)
v := new(struct {
PN int `form:"pn" default:"1"`
PS int `form:"ps" default:"20"`
})
if err = c.Bind(v); err != nil {
return
}
count := int(0)
items := []*blocked.Notice{}
pager := &blocked.Pager{
Total: count,
PN: v.PN,
PS: v.PS,
Order: order,
Sort: sort,
}
if err = creSvc.ReadDB.Offset((v.PN - 1) * v.PS).Limit(v.PS).Order(fmt.Sprintf("%s %s", order, sort)).Find(&items).Error; err != nil {
if err != ecode.NothingFound {
log.Error("creSvc.notices error(%v)", err)
httpData(c, nil, nil)
return
}
httpData(c, nil, pager)
return
}
if err = creSvc.ReadDB.Model(&blocked.Notice{}).Count(&count).Error; err != nil {
if err != ecode.NothingFound {
log.Error("creSvc.notices count error(%v)", err)
httpData(c, nil, nil)
return
}
httpData(c, nil, pager)
return
}
pager.Total = count
for _, v := range items {
v.StatusDesc = blocked.NoticeStateDesc[v.Status]
v.OPName = creSvc.Managers[v.OperID]
}
httpData(c, items, pager)
}
func addNotice(c *bm.Context) {
var err error
v := new(struct {
Content string `form:"content" validate:"required"`
URL string `form:"url" validate:"required"`
OID int64 `form:"op_id" validate:"required"`
})
if err = c.Bind(v); err != nil {
return
}
if err = creSvc.DB.Model(&blocked.Notice{}).Create(&blocked.Notice{Content: v.Content, URL: v.URL, OperID: v.OID}).Error; err != nil {
log.Error("creSvc.addNotice(%v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_addNotice:%+v", v)
httpCode(c, nil)
}
func upNoticeStatus(c *bm.Context) {
var err error
v := new(struct {
ID int `form:"id" validate:"required"`
Status int8 `form:"status" validate:"min=0,max=1"`
OID int `form:"op_id" validate:"required"`
})
if err = c.Bind(v); err != nil {
return
}
if err = creSvc.DB.Model(&blocked.Notice{}).Where("id=?", v.ID).Updates(map[string]interface{}{"status": v.Status, "oper_id": v.OID}).Error; err != nil {
log.Error("creSvc.upNoticeStatus(%v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_upNoticeStatus:%+v", v)
httpCode(c, nil)
}

View File

@@ -0,0 +1,29 @@
package http
import (
"go-common/app/admin/main/credit/model/blocked"
bm "go-common/library/net/http/blademaster"
)
func httpData(c *bm.Context, data interface{}, pager *blocked.Pager) {
res := make(map[string]interface{})
if data == nil {
data = struct{}{}
}
if pager == nil {
pager = &blocked.Pager{}
}
res["data"] = data
res["pager"] = &blocked.Pager{
Total: pager.Total,
PN: pager.PN,
PS: pager.PS,
Order: pager.Order,
Sort: pager.Sort,
}
c.JSONMap(res, nil)
}
func httpCode(c *bm.Context, err error) {
c.JSON(nil, err)
}

View File

@@ -0,0 +1,14 @@
package http
import (
"fmt"
bm "go-common/library/net/http/blademaster"
)
func outBuf(c *bm.Context, buf []byte, name string) {
c.Writer.Header().Set("Content-Type", "application/csv")
c.Writer.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s.csv", name))
c.Writer.Write(buf)
}

View File

@@ -0,0 +1,124 @@
package http
import (
"net/http"
"go-common/app/admin/main/credit/conf"
"go-common/app/admin/main/credit/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/permit"
)
var (
authSvc *permit.Permit
creSvc *service.Service
)
// Init http server
func Init(c *conf.Config) {
initService(c)
engine := bm.DefaultServer(c.BM)
innerRouter(engine)
// init internal server
if err := engine.Start(); err != nil {
log.Error("engine.Start error(%v)", err)
panic(err)
}
}
// initService init service
func initService(c *conf.Config) {
creSvc = service.New(c)
authSvc = permit.New(c.Auth)
}
// innerRouter
func innerRouter(e *bm.Engine) {
// ping monitor
e.Ping(ping)
// internal api
bg := e.Group("/x/admin/credit/blocked")
{
// info
bg.GET("/info", authSvc.Permit("BLACK_HOUSE_BLOCKED_INFO"), infos) // 封禁列表
bg.GET("/info/id", authSvc.Permit("BLACK_HOUSE_BLOCKED_INFO_ID"), infoByID) // 封禁信息详情
bg.POST("/info/up", authSvc.Permit("BLACK_HOUSE_BLOCKED_INFO_UP"), upInfo) // 编辑封禁列表
bg.POST("/info/del", authSvc.Permit("BLACK_HOUSE_BLOCKED_INFO_DEL"), delInfo) // 删除封禁列表
bg.POST("/info/status/up", authSvc.Permit("BLACK_HOUSE_BLOCKED_INFO_STATUS_UP"), upInfoStatus) // 更新封禁列表状态
bg.GET("/info.so", authSvc.Permit("BLACK_HOUSE_BLOCKED_INFO_SO"), infosEx) // 封禁列表导出
// publish
bg.GET("/publish", authSvc.Permit("BLACK_HOUSE_BLOCKED_PUBLISH"), publishs) // 公告列表
bg.GET("/publish/id", authSvc.Permit("BLACK_HOUSE_BLOCKED_PUBLISH_ID"), publishByID) // 公告信息详情
bg.POST("/publish/add", authSvc.Permit("BLACK_HOUSE_BLOCKED_PUBLISH_ADD"), addPublish) // 增加公告
bg.POST("/publish/up", authSvc.Permit("BLACK_HOUSE_BLOCKED_PUBLISH_UP"), upPublish) // 更新公告
bg.POST("/publish/del", authSvc.Permit("BLACK_HOUSE_BLOCKED_PUBLISH_DEL"), delPublish) // 删除公告
// notice
bg.GET("/notice", authSvc.Permit("BLACK_HOUSE_BLOCKED_NOTICE"), notices) // 通知列表
bg.POST("/notice/add", authSvc.Permit("BLACK_HOUSE_BLOCKED_NOTICE_ADD"), addNotice) // 增加通知
bg.POST("/notice/status/up", authSvc.Permit("BLACK_HOUSE_BLOCKED_NOTICE_STATUS_UP"), upNoticeStatus) // 更新通知
}
jg := e.Group("/x/admin/credit/jury")
{
// case
jg.GET("/case", authSvc.Permit("BLACK_HOUSE_JURY_CASE"), cases) // 案件列表
jg.GET("/case/id", authSvc.Permit("BLACK_HOUSE_JURY_CASE_ID"), caseByID) // 案件信息详情
jg.GET("/case/reason", authSvc.Permit("BLACK_HOUSE_JURY_CASE_REASON"), reasons) // 案件举报理由
jg.POST("/case/add", authSvc.Permit("BLACK_HOUSE_JURY_CASE_ADD"), addCase)
jg.POST("/case/up", authSvc.Permit("BLACK_HOUSE_JURY_CASE_UP"), upCase)
jg.POST("/case/vote/add", authSvc.Permit("BLACK_HOUSE_JURY_CASE_VOTE_ADD"), addCaseVote)
jg.POST("/case/status/up", authSvc.Permit("BLACK_HOUSE_JURY_CASE_STATUS_UP"), upCaseStatus)
jg.POST("/case/type/add", authSvc.Permit("BLACK_HOUSE_JURY_CASE_TYPE_ADD"), addCaseType) // 添加众裁稿件
jg.GET("/case/auto/conf", authSvc.Permit("BLACK_HOUSE_JURY_CASE_AUTO_CONF"), autoCaseConfig)
jg.POST("/case/auto/conf/set", authSvc.Permit("BLACK_HOUSE_JURY_CASE_AUTO_CONF_SET"), setAutoCaseConfig)
// opinions
jg.GET("/opinion", authSvc.Permit("BLACK_HOUSE_JURY_OPINION"), opinions) // 观点列表
jg.GET("/opinion/id", authSvc.Permit("BLACK_HOUSE_JURY_OPINION_ID"), opinionByID) // 观点信息详情
jg.POST("/opinion/del", authSvc.Permit("BLACK_HOUSE_JURY_OPINION_DEL"), delOpinions)
// users
jg.GET("/users", authSvc.Permit("BLACK_HOUSE_JURY_USERS"), users) // 委员列表
jg.GET("/user/id", authSvc.Permit("BLACK_HOUSE_JURY_USER_ID"), userByID) // 委员信息详情
jg.POST("/user/add", authSvc.Permit("BLACK_HOUSE_JURY_USER_ADD"), userAdd) // 新增委员
jg.POST("/users/status/up", authSvc.Permit("BLACK_HOUSE_JURY_USERS_STATUS_UP"), upUserStatus)
jg.POST("/users/blackwhite", authSvc.Permit("BLACK_HOUSE_JURY_USERS_BLACKWHITE"), blackWhite)
jg.GET("/users.so", authSvc.Permit("BLACK_HOUSE_JURY_USERS_SO"), usersEx)
// kpi
jg.GET("/kpi", authSvc.Permit("BLACK_HOUSE_JURY_KPI"), kpis)
jg.GET("/kpi/point", authSvc.Permit("BLACK_HOUSE_JURY_KPI_POINT"), kpiPoints)
jg.GET("/kpi.so", authSvc.Permit("BLACK_HOUSE_JURY_KPI_SO"), kpisEx)
// config
jg.GET("/config", authSvc.Permit("BLACK_HOUSE_JURY_CONFIG"), caseConf)
jg.POST("/config/set", authSvc.Permit("BLACK_HOUSE_JURY_CONFIG_SET"), setCaseConf)
jg.GET("/votenum/conf", authSvc.Permit("BLACK_HOUSE_VOTENUM_CONFIG"), votenumConf)
jg.POST("/votenum/conf/set", authSvc.Permit("BLACK_HOUSE_VOTENUM_CONFIG_SET"), setVotenumConf)
}
ug := e.Group("/x/admin/credit/upload")
{
ug.POST("", upload)
ug.POST("/coins", annualCoins)
}
lg := e.Group("/x/admin/credit/labour")
{
/*
lg.GET("/quest", question)
lg.POST("/quest/statistics", statQuestion)
*/
lg.POST("/quest/oper", operQuestion)
lg.POST("/quest/del", delQuestion)
}
ig := e.Group("/x/admin/credit/jury")
{
// appeal webhook for internal .
ig.POST("/webhook", webHook)
}
}
// ping check server ok.
func ping(c *bm.Context) {
err := creSvc.Ping(c)
if err != nil {
log.Error("credit admin ping error")
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}

View File

@@ -0,0 +1,844 @@
package http
import (
"context"
"encoding/json"
"fmt"
"io/ioutil"
"math"
"sort"
"strconv"
"time"
"go-common/app/admin/main/credit/model"
"go-common/app/admin/main/credit/model/blocked"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
xtime "go-common/library/time"
"go-common/library/xstr"
"github.com/jinzhu/gorm"
)
func users(c *bm.Context) {
v := new(blocked.ArgJurySearch)
if err := c.Bind(v); err != nil {
return
}
list, pager, err := creSvc.Jurys(c, v)
if err != nil {
log.Error("creSvc.Jurys error(%v)", err)
httpCode(c, err)
return
}
if len(list) == 0 {
httpData(c, nil, pager)
return
}
httpData(c, list, pager)
}
func userAdd(c *bm.Context) {
var err error
v := new(blocked.ArgAddJurys)
if err = c.Bind(v); err != nil {
return
}
if err = creSvc.AddJury(c, v); err != nil {
httpCode(c, err)
return
}
log.Info("business_userAdd:%+v", v)
httpCode(c, nil)
}
// userByID get user by id.
func userByID(c *bm.Context) {
var err error
v := new(struct {
MID int64 `form:"mid" validate:"required"`
})
if err = c.Bind(v); err != nil {
return
}
item := &blocked.Jury{}
if err = creSvc.ReadDB.Where("mid = ?", v.MID).Find(item).Error; err != nil {
if err != ecode.NothingFound {
log.Error("creSvc.userByID error(%v)", err)
httpCode(c, err)
return
}
httpData(c, nil, nil)
return
}
if item != nil {
if item.VoteTotal > 0 {
item.VoteRadio = strconv.FormatFloat(float64(item.VoteRight)/float64(item.VoteTotal)*100, 'f', 2, 64)
} else {
item.VoteRadio = "-1"
}
item.StatusDesc = blocked.JuryerStatus[item.Status]
item.BlackDesc = blocked.JuryerStyle[item.Black]
}
httpData(c, item, nil)
}
func upUserStatus(c *bm.Context) {
v := new(struct {
MIDS []int64 `form:"mids,split" validate:"min=1,max=100"`
Status int8 `form:"status" validate:"min=1,max=2" default:"2"`
OID int64 `form:"op_id" validate:"required"`
})
if err := c.Bind(v); err != nil {
return
}
items := []*blocked.Jury{}
if err := creSvc.ReadDB.Where("mid IN (?)", v.MIDS).Find(&items).Error; err != nil {
log.Error("creSvc.juryByMIDs(%s) error(%v)", xstr.JoinInts(v.MIDS), err)
httpCode(c, err)
return
}
now := time.Now()
if err := creSvc.DB.Model(&blocked.Jury{}).Where("mid IN(?)", v.MIDS).Updates(map[string]interface{}{"status": v.Status, "expired": now, "oper_id": v.OID}).Error; err != nil {
httpCode(c, err)
return
}
log.Info("business_upUserStatus:%+v", v)
mids := make(map[int64]*blocked.Jury, len(v.MIDS))
for _, v := range items {
mids[v.UID] = v
}
var multiple []interface{}
for _, mid := range v.MIDS {
single := map[string]interface{}{
"id": mids[mid].ID,
"oper_id": v.OID,
"status": v.Status,
"expired": now.Format(model.TimeFormatSec),
"black": mids[mid].Black,
}
multiple = append(multiple, single)
}
creSvc.AddNotify(func() {
creSvc.Search.SearchUpdate(context.TODO(), blocked.BusinessBlockedJury, blocked.TableBlockedJury, multiple)
})
httpCode(c, nil)
}
func blackWhite(c *bm.Context) {
var err error
v := new(struct {
MIDS []int64 `form:"mids,split" validate:"min=1,max=100"`
Status int8 `form:"status" validate:"min=1,max=2"`
Black int8 `form:"black"`
ReMark string `form:"remark"`
OID int64 `form:"op_id" validate:"required"`
})
if err = c.Bind(v); err != nil {
return
}
items := []*blocked.Jury{}
if err = creSvc.ReadDB.Where("mid IN (?)", v.MIDS).Find(&items).Error; err != nil {
log.Error("creSvc.juryByMIDs(%s) error(%v)", xstr.JoinInts(v.MIDS), err)
httpCode(c, err)
return
}
mids := make(map[int64]*blocked.Jury, len(v.MIDS))
for _, v := range items {
mids[v.UID] = v
}
now := time.Now()
var multiple []interface{}
switch {
case v.Black == blocked.JuryBlack && v.Status == blocked.JuryStatusOn:
err = creSvc.DB.Model(&blocked.Jury{}).Where("mid IN(?)", v.MIDS).Updates(
map[string]interface{}{
"status": blocked.JuryStatusDown,
"black": blocked.JuryBlack,
"oper_id": v.OID,
"expired": time.Now().Unix(),
"remark": v.ReMark,
}).Error
for _, mid := range v.MIDS {
single := map[string]interface{}{
"id": mids[mid].ID,
"oper_id": v.OID,
"status": v.Status,
"expired": now.Format(model.TimeFormatSec),
"black": blocked.JuryBlack,
}
multiple = append(multiple, single)
}
case v.Black == blocked.JuryWhite && v.Status == blocked.JuryStatusOn:
err = creSvc.DB.Model(&blocked.Jury{}).Where("mid IN(?)", v.MIDS).Updates(
map[string]interface{}{
"black": blocked.JuryWhite,
"oper_id": v.OID,
"remark": v.ReMark,
}).Error
for _, mid := range v.MIDS {
single := map[string]interface{}{
"id": mids[mid].ID,
"oper_id": v.OID,
"black": blocked.JuryWhite,
}
multiple = append(multiple, single)
}
case (v.Black == blocked.JuryBlack && v.Status == blocked.JuryStatusDown) || (v.Black == blocked.JuryWhite && v.Status == blocked.JuryStatusDown):
err = creSvc.DB.Model(&blocked.Jury{}).Where("mid IN(?)", v.MIDS).Updates(
map[string]interface{}{
"black": blocked.JuryNormal,
"oper_id": v.OID,
"remark": v.ReMark,
}).Error
for _, mid := range v.MIDS {
single := map[string]interface{}{
"id": mids[mid].ID,
"oper_id": v.OID,
"black": blocked.JuryNormal,
}
multiple = append(multiple, single)
}
}
if err != nil {
log.Error("blackWhite creSvc.DB error(%v)", err)
httpCode(c, err)
return
}
log.Info("business_blackWhite:%+v", v)
creSvc.AddNotify(func() {
creSvc.Search.SearchUpdate(context.TODO(), blocked.BusinessBlockedJury, blocked.TableBlockedJury, multiple)
})
httpCode(c, nil)
}
func usersEx(c *bm.Context) {
v := new(blocked.ArgJurySearch)
if err := c.Bind(v); err != nil {
return
}
list, err := creSvc.JurysEx(c, v)
if err != nil {
log.Error("creSvc.InfosEx error(%v)", err)
httpCode(c, err)
return
}
re, err := blocked.DealJury(list)
if err != nil {
log.Error("blocked.DealInfo error(%v)", err)
httpCode(c, err)
return
}
outBuf(c, creSvc.FormatCSV(re), fmt.Sprintf("%s-%s", time.Now().Format(model.TimeFormatDay), "juryer"))
}
func cases(c *bm.Context) {
v := new(blocked.ArgCaseSearch)
if err := c.Bind(v); err != nil {
return
}
list, pager, err := creSvc.Cases(c, v)
if err != nil {
log.Error("creSvc.Publishs(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
if len(list) == 0 {
httpData(c, nil, pager)
return
}
httpData(c, list, pager)
}
// caseByID get case by id.
func caseByID(c *bm.Context) {
var err error
v := new(struct {
ID int64 `form:"id" validate:"required"`
})
if err = c.Bind(v); err != nil {
return
}
item := &blocked.Case{}
if err = creSvc.ReadDB.Where("id = ?", v.ID).Find(item).Error; err != nil {
if err != ecode.NothingFound {
log.Error("creSvc.caseByID error(%v)", err)
httpCode(c, err)
return
}
httpData(c, nil, nil)
return
}
if item != nil {
item.CaseTypeDesc = blocked.CaseTypeDesc[item.CaseType]
item.StatusDesc = blocked.StatusDesc[item.Status]
item.OriginTypeDesc = blocked.OriginTypeDesc[item.OriginType]
item.ReasonTypeDesc = blocked.ReasonTypeDesc(item.ReasonType)
item.PunishDesc = blocked.PunishDesc[item.PunishResult]
item.VoteTotal = blocked.VoteTotal(item.VoteRule, item.VoteBreak, item.VoteDelete)
if item.VoteRule > 0 || item.VoteBreak > 0 || item.VoteDelete > 0 {
item.BlockedPercent = blocked.BreakPercent(item.VoteRule, item.VoteBreak, item.VoteDelete)
item.DeletePercent = blocked.DeletePercent(item.VoteRule, item.VoteBreak, item.VoteDelete)
item.RulePercent = blocked.RulePercent(item.VoteRule, item.VoteBreak, item.VoteDelete)
}
}
httpData(c, item, nil)
}
// reasons get all case reason.
func reasons(c *bm.Context) {
cr, err := creSvc.CaseReason(c)
if err != nil {
log.Error("creSvc.CaseReason error(%v)", err)
httpCode(c, err)
return
}
httpData(c, cr, nil)
}
func addCase(c *bm.Context) {
var err error
v := new(blocked.ArgCase)
if err = c.Bind(v); err != nil {
return
}
defTime, _ := time.ParseInLocation(model.TimeFormatSec, blocked.DefaultTime, time.Local)
if err = creSvc.DB.Create(
&blocked.Case{
MID: v.UID,
OriginType: v.Otype,
ReasonType: v.ReasonType,
PunishResult: v.PunishResult,
BlockedDays: v.BlockedDays,
OriginTitle: v.OriginTitle,
OriginContent: v.OriginContent,
OriginURL: v.OriginURL,
OPID: v.OID,
RelationID: v.RelationID,
Status: blocked.CaseStatusGrantStop,
StartTime: xtime.Time(defTime.Unix()),
EndTime: xtime.Time(defTime.Unix()),
}).Error; err != nil {
log.Error("creSvc.addCase(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_addCase:%+v", v)
httpCode(c, nil)
}
func upCase(c *bm.Context) {
var err error
v := new(blocked.ArgCase)
if err = c.Bind(v); err != nil {
return
}
item := &blocked.Case{}
if err = creSvc.ReadDB.Where("id = ?", v.ID).Find(item).Error; err != nil {
log.Error("creSvc.caseByID(%d) error(%v)", v.ID, err)
httpCode(c, err)
return
}
if err = creSvc.DB.Model(blocked.Case{}).Where("id = ?", v.ID).Updates(
map[string]interface{}{
"mid": v.UID,
"origin_type": v.Otype,
"reason_type": v.ReasonType,
"punish_result": v.PunishResult,
"blocked_days": v.BlockedDays,
"origin_title": v.OriginTitle,
"origin_content": v.OriginContent,
"origin_url": v.OriginURL,
"relation_id": v.RelationID,
"oper_id": v.OID,
}).Error; err != nil {
log.Error("creSvc.upCase(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_upCase:%+v", v)
var multiple []interface{}
single := map[string]interface{}{
"id": v.ID,
"oper_id": v.OID,
"origin_type": v.Otype,
"mid": v.UID,
"case_type": item.CaseType,
}
multiple = append(multiple, single)
creSvc.AddNotify(func() {
creSvc.Search.SearchUpdate(context.TODO(), blocked.BusinessBlockedCase, blocked.TableBlockedCase, multiple)
})
httpCode(c, nil)
}
func addCaseVote(c *bm.Context) {
var err error
v := new(struct {
ID int64 `form:"id" validate:"required"`
OPID int64 `form:"op_id" validate:"required"`
VoteRule int64 `form:"vote_rule" default:"0"`
VoteBreak int64 `form:"vote_break" default:"0"`
VoteDelete int64 `form:"vote_delete" default:"0"`
})
if err = c.Bind(v); err != nil {
return
}
item := &blocked.Case{}
if err = creSvc.ReadDB.Where("id = ?", v.ID).Find(item).Error; err != nil {
log.Error("creSvc.caseByID(%d) error(%v)", v.ID, err)
httpCode(c, err)
return
}
if (v.VoteBreak < 0 && (float64(item.VoteBreak)-math.Abs(float64(v.VoteBreak))) < 0) ||
(v.VoteRule < 0 && (float64(item.VoteRule)-math.Abs(float64(v.VoteRule))) < 0) ||
(v.VoteDelete < 0 && (float64(item.VoteDelete)-math.Abs(float64(v.VoteDelete))) < 0) {
httpCode(c, ecode.RequestErr)
return
}
if err = creSvc.DB.Model(&blocked.Case{}).Where("id = ?", v.ID).UpdateColumns(
map[string]interface{}{
"vote_rule": gorm.Expr("vote_rule + ?", v.VoteRule),
"vote_break": gorm.Expr("vote_break + ?", v.VoteBreak),
"vote_delete": gorm.Expr("vote_delete + ?", v.VoteDelete),
"oper_id": v.OPID,
}).Error; err != nil {
log.Error("creSvc.addCaseVote(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_addCaseVote:%+v", v)
httpCode(c, nil)
}
func upCaseStatus(c *bm.Context) {
var err error
v := new(blocked.ArgUpStatus)
if err = c.Bind(v); err != nil {
return
}
if err = creSvc.UpCaseStatus(c, v); err != nil {
log.Error("creSvc.UpCaseStatus(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_upCaseStatus:%+v", v)
httpCode(c, nil)
}
func addCaseType(c *bm.Context) {
var err error
v := new(struct {
IDS []int64 `form:"ids,split" validate:"min=1,max=200"`
Type int8 `form:"type" validate:"min=0,max=1"`
OID int64 `form:"op_id" validate:"required"`
})
if err = c.Bind(v); err != nil {
return
}
if err = creSvc.DB.Model(blocked.Case{}).Where("id IN(?)", v.IDS).Updates(
map[string]interface{}{
"case_type": v.Type,
"oper_id": v.OID,
}).Error; err != nil {
log.Error("creSvc.addCaseType(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_addCaseType:%+v", v)
var multiple []interface{}
for _, id := range v.IDS {
single := map[string]interface{}{
"id": id,
"oper_id": v.OID,
"case_type": v.Type,
}
multiple = append(multiple, single)
}
creSvc.AddNotify(func() {
creSvc.Search.SearchUpdate(context.TODO(), blocked.BusinessBlockedCase, blocked.TableBlockedCase, multiple)
})
httpCode(c, nil)
}
func opinions(c *bm.Context) {
v := new(blocked.ArgOpinionSearch)
if err := c.Bind(v); err != nil {
return
}
list, pager, err := creSvc.Opinions(c, v)
if err != nil {
log.Error("creSvc.Opinions(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
if len(list) == 0 {
httpData(c, nil, pager)
return
}
httpData(c, list, pager)
}
// opinionByID get opinion by id.
func opinionByID(c *bm.Context) {
var err error
v := new(struct {
ID int64 `form:"id" validate:"required"`
})
if err = c.Bind(v); err != nil {
return
}
item := &blocked.Opinion{}
if err = creSvc.ReadDB.Where("id = ?", v.ID).Find(item).Error; err != nil {
if err != ecode.NothingFound {
log.Error("creSvc.opinionByID error(%v)", err)
httpCode(c, err)
return
}
httpData(c, nil, nil)
return
}
if item != nil {
item.AttrDesc = blocked.AttrDesc[item.Attr]
item.VoteDesc = blocked.VoteDesc[item.Vote]
item.VoteStateDesc = blocked.VoteStateDesc[item.State]
}
httpData(c, item, nil)
}
func delOpinions(c *bm.Context) {
var err error
v := new(struct {
IDS []int64 `form:"ids,split" validate:"min=1,max=20"`
OID int64 `form:"op_id" validate:"required"`
Status int8 `form:"status" validate:"min=0,max=1" default:"1"`
Send int8 `form:"send" validate:"min=0,max=1"`
})
if err = c.Bind(v); err != nil {
return
}
v.IDS = model.ArrayUnique(v.IDS)
if len(v.IDS) == 0 {
return
}
if err = creSvc.DB.Model(&blocked.Opinion{}).Where("id IN (?)", v.IDS).Updates(map[string]interface{}{"state": v.Status, "oper_id": v.OID}).Error; err != nil {
log.Error("creSvc.delOpinions(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_delOpinions:%+v", v)
var multiple []interface{}
for _, id := range v.IDS {
single := map[string]interface{}{
"id": id,
"oper_id": v.OID,
"state": v.Status,
}
multiple = append(multiple, single)
}
creSvc.AddNotify(func() {
creSvc.Search.SearchUpdate(context.TODO(), blocked.BusinessBlockedOpinion, blocked.TableBlockedOpinion, multiple)
})
if v.Send == blocked.NeedSendMsg {
items := []*blocked.Opinion{}
if err = creSvc.ReadDB.Where("id IN (?)", v.IDS).Find(&items).Error; err != nil {
log.Error("creSvc.opinionByIDs(%s) error(%v)", xstr.JoinInts(v.IDS), err)
err = nil
return
}
for _, v := range items {
msg := &blocked.SysMsg{
Type: blocked.MsgTypeDelOpinion,
MID: v.MID,
CID: v.CID,
CaseContent: v.Content,
RemoteIP: metadata.String(c, metadata.RemoteIP),
}
creSvc.MsgCh <- msg
}
}
httpCode(c, nil)
}
func kpis(c *bm.Context) {
var (
err error
start, end time.Time
order = "id"
sort = "DESC"
)
v := new(blocked.ArgKpiSearch)
if err = c.Bind(v); err != nil {
return
}
if v.Start == "" {
if start, err = time.ParseInLocation(model.TimeFormatDay, time.Now().AddDate(0, -1, 0).Format(model.TimeFormatDay), time.Local); err != nil {
log.Error("time.ParseInLocation(%s) error(%v)", time.Now().AddDate(0, -1, 0).Format(model.TimeFormatDay), err)
}
} else {
if start, err = time.ParseInLocation(model.TimeFormatSec, v.Start, time.Local); err != nil {
log.Error("time.ParseInLocation(%s) error(%v)", v.Start, err)
}
}
if v.End == "" {
if end, err = time.ParseInLocation(model.TimeFormatDay, time.Now().Format(model.TimeFormatDay), time.Local); err != nil {
log.Error("time.ParseInLocation(%s) error(%v)", time.Now().Format(model.TimeFormatDay), err)
}
} else {
if end, err = time.ParseInLocation(model.TimeFormatSec, v.End, time.Local); err != nil {
log.Error("time.ParseInLocation(%s) error(%v)", v.End, err)
}
}
count := int(0)
items := []*blocked.KPI{}
pager := &blocked.Pager{
Total: count,
PN: v.PN,
PS: v.PS,
Order: order,
Sort: sort,
}
if v.UID > 0 {
err = creSvc.ReadDB.Where("mid=? and day BETWEEN ? AND ? ", v.UID, start, end).Offset((v.PN - 1) * v.PS).Limit(v.PS).Order(fmt.Sprintf("%s %s", order, sort)).Find(&items).Error
creSvc.ReadDB.Model(&blocked.KPI{}).Where("mid=? and day BETWEEN ? AND ? ", v.UID, start, end).Count(&count)
} else {
err = creSvc.ReadDB.Where("day BETWEEN ? AND ? ", start, end).Offset((v.PN - 1) * v.PS).Limit(v.PS).Order(fmt.Sprintf("%s %s", order, sort)).Find(&items).Error
creSvc.ReadDB.Model(&blocked.KPI{}).Where("day BETWEEN ? AND ? ", start, end).Count(&count)
}
if err != nil {
if err != ecode.NothingFound {
log.Error("creSvc.kpis error(%v)", err)
httpCode(c, err)
return
}
httpData(c, nil, pager)
return
}
pager.Total = count
httpData(c, items, pager)
}
func kpiPoints(c *bm.Context) {
v := new(blocked.ArgKpiPointSearch)
if err := c.Bind(v); err != nil {
return
}
list, pager, err := creSvc.KPIPoint(c, v)
if err != nil {
log.Error("creSvc.KPIPoint(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
if len(list) == 0 {
httpData(c, nil, pager)
return
}
httpData(c, list, pager)
}
func kpisEx(c *bm.Context) {
var (
err error
start, end time.Time
items, list []*blocked.KPI
)
v := new(blocked.ArgKpiSearch)
if err = c.Bind(v); err != nil {
return
}
if v.Start == "" {
if start, err = time.ParseInLocation(model.TimeFormatDay, time.Now().AddDate(0, -1, 0).Format(model.TimeFormatDay), time.Local); err != nil {
log.Error("time.ParseInLocation(%s) error(%v)", time.Now().AddDate(0, -1, 0).Format(model.TimeFormatDay), err)
}
} else {
if start, err = time.ParseInLocation(model.TimeFormatSec, v.Start, time.Local); err != nil {
log.Error("time.ParseInLocation(%s) error(%v)", v.Start, err)
}
}
if v.End == "" {
if end, err = time.ParseInLocation(model.TimeFormatDay, time.Now().Format(model.TimeFormatDay), time.Local); err != nil {
log.Error("time.ParseInLocation(%s) error(%v)", time.Now().Format(model.TimeFormatDay), err)
}
} else {
if end, err = time.ParseInLocation(model.TimeFormatSec, v.End, time.Local); err != nil {
log.Error("time.ParseInLocation(%s) error(%v)", v.End, err)
}
}
ps, pn, loop, count := int64(500), int64(1), int64(0), int64(0)
if v.UID > 0 {
err = creSvc.ReadDB.Model(&blocked.KPI{}).Where("mid=? and day BETWEEN ? AND ?", v.UID, start, end).Count(&count).Error
} else {
err = creSvc.ReadDB.Model(&blocked.KPI{}).Where("day BETWEEN ? AND ?", start, end).Count(&count).Error
}
if err != nil {
log.Error("creSvc.kpis count error(%v)", err)
httpCode(c, err)
return
}
if count < 1 {
return
}
items = make([]*blocked.KPI, 0, count)
list = make([]*blocked.KPI, 0, count)
loop = (count / ps) + 1
for pn = 1; pn <= loop; pn++ {
if v.UID > 0 {
err = creSvc.ReadDB.Where("mid=? and day BETWEEN ? AND ?", v.UID, start, end).Offset((pn - 1) * ps).Limit(ps).Order("id DESC").Find(&items).Error
} else {
err = creSvc.ReadDB.Where("day BETWEEN ? AND ?", start, end).Offset((pn - 1) * ps).Limit(ps).Order("id DESC").Find(&items).Error
}
if err != nil {
log.Error("creSvc.kpis error(%v)", err)
httpCode(c, err)
return
}
list = append(list, items...)
}
sort.Slice(list, func(i int, j int) bool {
return list[i].ID < list[j].ID
})
re, err := blocked.DealKPI(list)
if err != nil {
httpCode(c, err)
return
}
outBuf(c, creSvc.FormatCSV(re), fmt.Sprintf("%s-%s", time.Now().Format(model.TimeFormatDay), "kpi"))
}
func caseConf(c *bm.Context) {
cc, err := creSvc.CaseConf(c)
if err != nil {
log.Error("caseConfig error(%v)", err)
httpCode(c, err)
return
}
httpData(c, cc, nil)
}
func setCaseConf(c *bm.Context) {
var err error
v := new(blocked.ArgCaseConf)
if err = c.Bind(v); err != nil {
return
}
if err = creSvc.SetCaseConf(c, v); err != nil {
log.Error("creSvc.SetCaseConf(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_setCaseConf:%+v", v)
httpCode(c, nil)
}
func autoCaseConfig(c *bm.Context) {
var err error
v := new(struct {
Platform int8 `form:"platform"`
})
if err = c.Bind(v); err != nil {
return
}
item := &blocked.AutoCase{}
if err = creSvc.ReadDB.Where("platform=?", v.Platform).Find(&item).Error; err != nil {
if err != ecode.NothingFound {
log.Error("http.autoCaseConfig error(%v)", err)
httpCode(c, err)
return
}
httpData(c, nil, nil)
return
}
if item.ReasonStr != "" {
if item.Reasons, err = xstr.SplitInts(item.ReasonStr); err != nil {
log.Error("xstr.SplitInts(%s) err(%v)", item.ReasonStr, err)
httpCode(c, err)
return
}
}
httpData(c, item, nil)
}
func setAutoCaseConfig(c *bm.Context) {
var err error
v := new(blocked.ArgAutoCaseConf)
if err = c.Bind(v); err != nil {
return
}
item := &blocked.AutoCase{}
creSvc.ReadDB.Where("id = ?", v.ID).Find(item)
var autoCase *blocked.AutoCase
if item != nil && item.ID != 0 {
autoCase = &blocked.AutoCase{
ID: item.ID,
Platform: item.Platform,
Likes: v.Likes,
ReasonStr: xstr.JoinInts(v.Reasons),
ReportScore: v.ReportScore,
OPID: v.OID,
CTime: item.CTime,
}
} else {
autoCase = &blocked.AutoCase{
Platform: v.Platform,
Likes: v.Likes,
ReasonStr: xstr.JoinInts(v.Reasons),
ReportScore: v.ReportScore,
OPID: v.OID,
}
}
if err = creSvc.DB.Save(&autoCase).Error; err != nil {
log.Error("http.setAutoCaseConfig error(%v)", err)
httpCode(c, err)
return
}
log.Info("business_setAutoCaseConfig:%+v", v)
httpCode(c, nil)
}
func votenumConf(c *bm.Context) {
content, err := creSvc.VotenumConf(c)
if err != nil {
log.Error("caseConfig error(%v)", err)
httpCode(c, err)
return
}
vc := blocked.VoteNum{}
if err = json.Unmarshal([]byte(content), &vc); err != nil {
log.Error("votenumConf_Unmarshal err:%+v", err)
httpCode(c, err)
return
}
httpData(c, vc, nil)
}
func setVotenumConf(c *bm.Context) {
var err error
v := new(blocked.ArgVoteNum)
if err = c.Bind(v); err != nil {
return
}
if err = creSvc.SetVotenumConf(c, v); err != nil {
log.Error("creSvc.setVotenumConf(%+v) error(%v)", v, err)
httpCode(c, err)
return
}
log.Info("business_SetVotenumConf:%+v", v)
httpCode(c, nil)
}
func webHook(c *bm.Context) {
body, err := ioutil.ReadAll(c.Request.Body)
if err != nil {
log.Error("read body fail error(%v)", err)
httpCode(c, ecode.RequestErr)
return
}
if err = creSvc.WebHook(c, body); err != nil {
log.Error("creSvc.WebHook error(%v)", err)
httpCode(c, err)
return
}
httpCode(c, nil)
}

View File

@@ -0,0 +1,38 @@
package http
import (
"go-common/app/admin/main/credit/model/blocked"
bm "go-common/library/net/http/blademaster"
)
func operQuestion(c *bm.Context) {
v := new(struct {
IDS []int64 `form:"ids,split" validate:"min=1,max=20"`
Status int8 `form:"status" validate:"min=0,max=1" default:"1"`
OID int `form:"oper_id" validate:"required"`
})
if err := c.Bind(v); err != nil {
return
}
if err := creSvc.DB.Model(&blocked.LabourQuestion{}).Where(v.IDS).Updates(map[string]interface{}{"status": v.Status, "oper_id": v.OID}).Error; err != nil {
httpCode(c, err)
return
}
httpCode(c, nil)
}
func delQuestion(c *bm.Context) {
v := new(struct {
IDS []int64 `form:"ids,split" validate:"min=1,max=20"`
Status int8 `form:"status" validate:"min=0,max=1" default:"1"`
OID int `form:"oper_id" validate:"required"`
})
if err := c.Bind(v); err != nil {
return
}
if err := creSvc.DB.Model(&blocked.LabourQuestion{}).Where(v.IDS).Updates(map[string]interface{}{"isdel": v.Status, "oper_id": v.OID}).Error; err != nil {
httpCode(c, err)
return
}
httpCode(c, nil)
}

View File

@@ -0,0 +1,74 @@
package http
import (
"context"
"crypto/md5"
"encoding/csv"
"fmt"
"net/http"
"net/url"
"regexp"
"time"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func upload(c *bm.Context) {
imageFile, imageHeader, err := c.Request.FormFile("file")
if err != nil {
log.Error("upload err(%v)", err)
httpCode(c, err)
return
}
defer imageFile.Close()
//读取前512个字节用于判断文件类型
firstImageBytes := make([]byte, 512)
_, err = imageFile.Read(firstImageBytes)
if err != nil {
log.Error("imageFile.Read error(%v)", err)
httpCode(c, err)
return
}
md5Checksum := md5.Sum(firstImageBytes)
extensionMatcher := regexp.MustCompile(`\\.\\w+$`)
imageName := extensionMatcher.ReplaceAllString(imageHeader.Filename, "")
filetype := http.DetectContentType(firstImageBytes)
var extension string
switch filetype {
case "image/jpeg", "image/jpg":
extension = "jpg"
case "image/gif":
extension = "gif"
case "image/png":
extension = "png"
case "application/pdf":
extension = "pdf"
default:
log.Warn("unknown filetype(%s) ", filetype)
return
}
imageName = url.PathEscape(imageName)
//重新格式化文件名
uploadFilePath := fmt.Sprintf("%x-%v.%v", md5Checksum, imageName, extension)
local, err := creSvc.Upload(c, uploadFilePath, extension, time.Now().Unix(), imageFile)
if err != nil {
log.Error("creSvc.Upload error(%v)", err)
httpCode(c, err)
return
}
httpData(c, local, nil)
}
func annualCoins(c *bm.Context) {
file, _, err := c.Request.FormFile("file")
if err != nil {
log.Error("upload err(%v)", err)
httpCode(c, err)
return
}
defer file.Close()
reader := csv.NewReader(file)
fmids := creSvc.AnnualCoins(context.Background(), reader)
httpData(c, fmids, nil)
}