You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
721 lines
19 KiB
721 lines
19 KiB
package http |
|
|
|
import ( |
|
"encoding/json" |
|
"fmt" |
|
"net/http" |
|
"strconv" |
|
"strings" |
|
"time" |
|
|
|
"go-common/app/admin/main/reply/conf" |
|
"go-common/app/admin/main/reply/model" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
"go-common/library/net/http/blademaster/binding" |
|
"go-common/library/net/ip" |
|
) |
|
|
|
func replyExport(c *bm.Context) { |
|
var ( |
|
err error |
|
startTime time.Time |
|
endTime time.Time |
|
) |
|
v := new(struct { |
|
Oid int64 `form:"oid" validate:"required"` |
|
Type int8 `form:"type" validate:"required"` |
|
StartTime string `form:"start_time"` |
|
EndTime string `form:"end_time"` |
|
States []int64 `form:"states,split"` |
|
Mid int64 `form:"uid"` |
|
}) |
|
err = c.Bind(v) |
|
if err != nil { |
|
return |
|
} |
|
if v.StartTime == "" { |
|
startTime = time.Now().AddDate(0, -3, 0) |
|
v.StartTime = startTime.Format("2006-01-02") |
|
} else { |
|
if startTime, err = time.Parse("2006-01-02", v.StartTime); err != nil { |
|
log.Warn("time.Parse(%s) error(%v)", v.StartTime, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
if v.EndTime == "" { |
|
endTime = time.Now() |
|
v.EndTime = endTime.Format("2006-01-02") |
|
} else { |
|
if endTime, err = time.Parse("2006-01-02", v.EndTime); err != nil { |
|
log.Warn("time.Parse(%s) error(%v)", v.EndTime, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
states := strings.Trim(strings.Join(strings.Split(fmt.Sprint(v.States), " "), ","), "[]") |
|
data, err := rpSvc.ExportReply(c, v.Oid, v.Mid, v.Type, states, startTime, endTime) |
|
if err != nil { |
|
log.Error("Svc.ExportReply(%d,%d,%d,%s,%v,%v) error(%v)", v.Oid, v.Mid, v.Type, states, startTime, endTime, err) |
|
c.Render(http.StatusInternalServerError, model.CSV{ |
|
Data: nil, |
|
Title: "", |
|
}) |
|
return |
|
} |
|
c.Render(http.StatusOK, model.CSV{ |
|
Data: data, |
|
Title: v.StartTime + "至" + v.EndTime, |
|
}) |
|
return |
|
} |
|
|
|
func replySearch(c *bm.Context) { |
|
var ( |
|
err error |
|
typ, startTime, endTime int64 |
|
page = int64(conf.Conf.Reply.PageNum) |
|
pageSize = int64(conf.Conf.Reply.PageSize) |
|
sp = &model.SearchParams{} |
|
) |
|
params := c.Request.Form |
|
typeStr := params.Get("type") |
|
oidStr := params.Get("oid") |
|
uidStr := params.Get("uid") |
|
adminIDStr := params.Get("adminid") |
|
startTimeStr := params.Get("start_time") |
|
endTimeStr := params.Get("end_time") |
|
ipStr := params.Get("ip") |
|
pageStr := params.Get("page") |
|
pageSizeStr := params.Get("pagesize") |
|
// parse params |
|
if typ, err = strconv.ParseInt(typeStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(type:%s) error(%v)", typeStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if oidStr != "" { |
|
if sp.Oid, err = strconv.ParseInt(oidStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(oid:%s) error(%v)", oidStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
if uidStr != "" { |
|
if sp.UID, err = strconv.ParseInt(uidStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(uid:%s) error(%v)", uidStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
if adminIDStr != "" { |
|
if sp.AdminID, err = strconv.ParseInt(adminIDStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(adminid:%s) error(%v)", adminIDStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
if startTimeStr != "" { |
|
if startTime, err = strconv.ParseInt(startTimeStr, 10, 64); err == nil { |
|
sp.Begin = time.Unix(startTime, 0) |
|
} else { |
|
var t time.Time |
|
t, err = time.Parse("2006-01-02", startTimeStr) |
|
if err == nil { |
|
sp.Begin = t |
|
} else { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
} |
|
if endTimeStr != "" { |
|
if endTime, err = strconv.ParseInt(endTimeStr, 10, 64); err == nil { |
|
sp.End = time.Unix(endTime, 0) |
|
} else { |
|
var t time.Time |
|
t, err = time.Parse("2006-01-02", endTimeStr) |
|
if err == nil { |
|
sp.End = t |
|
} else { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
} else if startTimeStr != "" { |
|
sp.End = time.Now() |
|
} |
|
if ipStr != "" { |
|
if sp.IP, err = strconv.ParseInt(ipStr, 10, 64); err != nil { |
|
sp.IP = int64(ip.InetAtoN(ipStr)) |
|
} |
|
} |
|
if pageStr != "" { |
|
if page, err = strconv.ParseInt(pageStr, 10, 64); err != nil || page < 1 { |
|
log.Warn("strconv.ParseInt(page:%s) error(%v)", pageStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
if pageSizeStr != "" { |
|
if pageSize, err = strconv.ParseInt(pageSizeStr, 10, 64); err != nil || pageSize < int64(1) || pageSize > int64(conf.Conf.Reply.PageSize) { |
|
log.Warn("strconv.ParseInt(pagesize:%s) error(%v)", pageSizeStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
sp.Type = int32(typ) |
|
sp.TypeIds = params.Get("typeids") |
|
sp.Keyword = params.Get("keyword") |
|
sp.KeywordHigh = params.Get("keyword_high") |
|
sp.Uname = params.Get("nickname") |
|
sp.States = params.Get("states") |
|
sp.Sort = params.Get("sort") |
|
sp.Order = params.Get("order") |
|
sp.Attr = params.Get("attr") |
|
sp.AdminName = params.Get("adminname") |
|
sp.Sort, sp.Order = sp.Order, sp.Sort |
|
if sp.Sort == "" { |
|
sp.Sort = "desc" |
|
} |
|
if sp.Order == "" { |
|
sp.Order = "ctime" |
|
} |
|
rs, err := rpSvc.ReplySearch(c, sp, page, pageSize) |
|
if err != nil { |
|
log.Error("svc.ReplySearch(%v,%d,%d) error(%v)", sp, page, pageSize, err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
res := map[string]interface{}{} |
|
res["data"] = rs |
|
c.JSONMap(res, nil) |
|
return |
|
} |
|
|
|
func updateReplyConfig(c *bm.Context) { |
|
var ( |
|
err error |
|
typ, oid, showEntry, showAdmin, adminID int64 |
|
operator string |
|
config = &model.Config{} |
|
bs []byte |
|
) |
|
params := c.Request.Form |
|
typeStr := params.Get("type") |
|
oidStr := params.Get("oid") |
|
adminIDStr := params.Get("adminid") |
|
operator = params.Get("operator") |
|
showEntityStr := params.Get("showentry") |
|
showAdminStr := params.Get("showadmin") |
|
if oid, err = strconv.ParseInt(oidStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(oid:%s) error(%v)", oidStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if typ, err = strconv.ParseInt(typeStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(type:%s) error(%v)", typeStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if showEntry, err = strconv.ParseInt(showEntityStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(showEntry:%s) error(%v)", showEntityStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if showAdmin, err = strconv.ParseInt(showAdminStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(showAdmin:%s) error(%v)", showAdminStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
adminID, _ = strconv.ParseInt(adminIDStr, 10, 64) |
|
if uid, ok := c.Get("uid"); ok { |
|
adminID = uid.(int64) |
|
} |
|
config.Oid = oid |
|
config.Type = int32(typ) |
|
config.Category = 1 |
|
config.AdminID = adminID |
|
config.Operator = operator |
|
configValue := map[string]int64{ |
|
"showentry": showEntry, |
|
"showadmin": showAdmin, |
|
} |
|
config.ShowEntry = int32(showEntry) |
|
config.ShowAdmin = int32(showAdmin) |
|
if bs, err = json.Marshal(configValue); err == nil { |
|
config.Config = string(bs) |
|
} |
|
if _, err = rpSvc.AddReplyConfig(c, config); err != nil { |
|
log.Error("svc.AddReplyConfig(%v) error(%v)", config, err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(nil, nil) |
|
} |
|
|
|
func renewReplyConfig(c *bm.Context) { |
|
var ( |
|
err error |
|
id int64 |
|
) |
|
|
|
params := c.Request.Form |
|
idStr := params.Get("id") |
|
if id, err = strconv.ParseInt(idStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(type:%s) error(%v)", idStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if _, err = rpSvc.RenewReplyConfig(c, id); err != nil { |
|
log.Error("svc.RenewReplyConfig(%d) error(%v)", id, err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(nil, nil) |
|
} |
|
|
|
func paginateReplyConfig(c *bm.Context) { |
|
var ( |
|
err error |
|
oid, typ, category int64 |
|
page = int64(conf.Conf.Reply.PageNum) |
|
pageSize = int64(conf.Conf.Reply.PageSize) |
|
) |
|
|
|
params := c.Request.Form |
|
typeStr := params.Get("type") |
|
categoryStr := params.Get("category") |
|
oidStr := params.Get("oid") |
|
operator := params.Get("operator") |
|
pageStr := params.Get("pn") |
|
pageSizeStr := params.Get("ps") |
|
if oid, err = strconv.ParseInt(oidStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(oid:%s) error(%v)", oidStr, err) |
|
} |
|
if typ, err = strconv.ParseInt(typeStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(type:%s) error(%v)", typeStr, err) |
|
} |
|
if category, err = strconv.ParseInt(categoryStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(category:%s) error(%v)", categoryStr, err) |
|
} |
|
if pageStr != "" { |
|
if page, err = strconv.ParseInt(pageStr, 10, 64); err != nil || page < 1 { |
|
log.Warn("strconv.ParseInt(page:%s) error(%v)", pageStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
if pageSizeStr != "" { |
|
if pageSize, err = strconv.ParseInt(pageSizeStr, 10, 64); err != nil || pageSize < 1 || pageSize > int64(conf.Conf.Reply.PageSize) { |
|
log.Warn("strconv.ParseInt(pagesize:%s) error(%v)", pageSizeStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
configs, totalCount, pages, err := rpSvc.PaginateReplyConfig(c, int32(typ), int32(category), oid, operator, int(page-1)*int(pageSize), int(pageSize)) |
|
if err != nil { |
|
log.Error("svc.PaginateReplyConfig(%d,%d,%d,%v,%d,%d) error(%v)", int32(typ), 1, oid, operator, int(page), int(pageSize), err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
data := map[string]interface{}{ |
|
"page": page, |
|
"pagesize": pageSize, |
|
"pagecount": pages, |
|
"total": totalCount, |
|
"order": "default", |
|
"result": configs, |
|
} |
|
c.JSONMap(data, nil) |
|
return |
|
} |
|
|
|
func loadReplyConfig(c *bm.Context) { |
|
var ( |
|
err error |
|
oid, typ, category int64 |
|
) |
|
|
|
params := c.Request.Form |
|
typeStr := params.Get("type") |
|
categoryStr := params.Get("category") |
|
oidStr := params.Get("oid") |
|
if oid, err = strconv.ParseInt(oidStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(oid:%s) error(%v)", oidStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if typ, err = strconv.ParseInt(typeStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(type:%s) error(%v)", typeStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if category, err = strconv.ParseInt(categoryStr, 10, 64); err != nil { |
|
log.Warn("strconv.ParseInt(category:%s) error(%v)", categoryStr, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
config, err := rpSvc.LoadReplyConfig(c, int32(typ), int32(category), oid) |
|
if err != nil { |
|
log.Error("Svc.LoadReplyConfig(%d,%d,%d) error(%v)", int32(typ), 1, oid, err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(config, nil) |
|
return |
|
} |
|
|
|
// adminPassReply pass reply normal. |
|
func adminPassReply(c *bm.Context) { |
|
v := new(struct { |
|
RpID []int64 `form:"rpid,split" validate:"required"` |
|
Oid []int64 `form:"oid,split" validate:"required"` |
|
Type int32 `form:"type" validate:"required"` |
|
AdminID int64 `form:"adid"` |
|
Remark string `form:"remark"` |
|
}) |
|
var err error |
|
err = c.Bind(v) |
|
if err != nil { |
|
return |
|
} |
|
if len(v.Oid) != len(v.RpID) { |
|
log.Warn("len(v.Oid) != len(v.RpID),%d != %d", len(v.Oid), len(v.RpID)) |
|
c.JSON(nil, ecode.RequestErr) |
|
} |
|
adid := v.AdminID |
|
if uid, ok := c.Get("uid"); ok { |
|
adid = uid.(int64) |
|
} |
|
var adName string |
|
if uname, ok := c.Get("username"); ok { |
|
adName = uname.(string) |
|
} |
|
err = rpSvc.AdminPassReply(c, adid, adName, v.Oid, v.RpID, v.Type, v.Remark) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
|
|
// adminRecoverReply recover reply normal. |
|
func adminRecoverReply(c *bm.Context) { |
|
v := new(struct { |
|
RpID int64 `form:"rpid" validate:"required"` |
|
Oid int64 `form:"oid" validate:"required"` |
|
Type int32 `form:"type" validate:"required"` |
|
AdminID int64 `form:"adid"` |
|
Remark string `form:"remark"` |
|
}) |
|
var err error |
|
err = c.Bind(v) |
|
if err != nil { |
|
return |
|
} |
|
adid := v.AdminID |
|
if uid, ok := c.Get("uid"); ok { |
|
adid = uid.(int64) |
|
} |
|
var adName string |
|
if uname, ok := c.Get("username"); ok { |
|
adName = uname.(string) |
|
} |
|
err = rpSvc.AdminRecoverReply(c, adid, adName, v.Oid, v.RpID, v.Type, v.Remark) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
|
|
// adminEditReply edit reply normal. |
|
func adminEditReply(c *bm.Context) { |
|
v := new(struct { |
|
RpID int64 `form:"rpid" validate:"required"` |
|
Oid int64 `form:"oid" validate:"required"` |
|
Type int32 `form:"type" validate:"required"` |
|
AdminID int64 `form:"adid"` |
|
Message string `form:"message"` |
|
Remark string `form:"remark"` |
|
}) |
|
var err error |
|
err = c.Bind(v) |
|
if err != nil { |
|
return |
|
} |
|
adid := v.AdminID |
|
if uid, ok := c.Get("uid"); ok { |
|
adid = uid.(int64) |
|
} |
|
var adName string |
|
if uname, ok := c.Get("username"); ok { |
|
adName = uname.(string) |
|
} |
|
err = rpSvc.AdminEditReply(c, adid, adName, v.Oid, v.RpID, v.Type, v.Message, v.Remark) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
|
|
// Compose compose struct |
|
type Compose struct { |
|
RpIDs []int64 |
|
Oids []int64 |
|
} |
|
|
|
// adminDelReply del reply normal. |
|
func adminDelReply(c *bm.Context) { |
|
v := new(struct { |
|
RpID []int64 `form:"rpid,split" validate:"required"` |
|
Oid []int64 `form:"oid,split" validate:"required"` |
|
Type []int32 `form:"type,split" validate:"required"` |
|
AdminID int64 `form:"adid"` |
|
Remark string `form:"remark"` |
|
Moral int32 `form:"moral"` |
|
Notify bool `form:"notify"` |
|
FTime int64 `form:"ftime"` |
|
AdName string `form:"adname"` |
|
Reason int32 `form:"reason"` |
|
FReason int32 `form:"freason"` |
|
}) |
|
var err error |
|
err = c.Bind(v) |
|
if err != nil { |
|
return |
|
} |
|
if len(v.RpID) == 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if len(v.RpID) != len(v.Oid) || len(v.RpID) != len(v.Type) { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
tMap := make(map[int32]*Compose) |
|
for i, tp := range v.Type { |
|
if c, ok := tMap[tp]; ok { |
|
c.Oids = append(c.Oids, v.Oid[i]) |
|
c.RpIDs = append(c.RpIDs, v.RpID[i]) |
|
} else { |
|
c = &Compose{ |
|
Oids: []int64{v.Oid[i]}, |
|
RpIDs: []int64{v.RpID[i]}, |
|
} |
|
tMap[tp] = c |
|
} |
|
} |
|
if uid, ok := c.Get("uid"); ok { |
|
v.AdminID = uid.(int64) |
|
} |
|
if uname, ok := c.Get("username"); ok { |
|
v.AdName = uname.(string) |
|
} |
|
for tp, com := range tMap { |
|
err = rpSvc.AdminDeleteReply(c, v.AdminID, com.Oids, com.RpIDs, v.FTime, tp, v.Moral, v.Notify, v.AdName, v.Remark, v.Reason, v.FReason) |
|
if !ecode.NothingFound.Equal(err) { |
|
err = nil |
|
} |
|
} |
|
c.JSON(nil, err) |
|
return |
|
} |
|
|
|
// callbackDelReply del reply normal. |
|
func callbackDelReply(c *bm.Context) { |
|
v := new(struct { |
|
Actor struct { |
|
AdminID int64 `json:"admin_id"` |
|
AdminName string `json:"admin_name"` |
|
} `json:"actor"` |
|
CTime int64 `json:"ctime"` |
|
Object struct { |
|
TagID int32 `json:"tag_id"` |
|
DecreaseMoral int32 `json:"decrease_moral"` |
|
BlockReasonID int32 `json:"block_reason_id"` |
|
BlockDay int64 `json:"block_day"` |
|
Reason string `json:"reason"` |
|
DisposeMode int32 `json:"dispose_mode"` |
|
State int32 `json:"state"` |
|
RID int32 `json:"rid"` |
|
} `json:"object"` |
|
Target []struct { |
|
OID int64 `json:"oid"` |
|
FID int32 `json:"fid"` |
|
EID int64 `json:"eid"` |
|
State int32 `json:"state"` |
|
} `json:"targets"` |
|
}) |
|
var err error |
|
err = c.BindWith(v, binding.JSON) |
|
if err != nil { |
|
return |
|
} |
|
log.Info("callbackDelReply V:%+v", *v) |
|
if v.Object.State == 2 { |
|
for _, t := range v.Target { |
|
rpSvc.ReportIgnore(c, []int64{t.OID}, []int64{t.EID}, v.Actor.AdminID, v.Actor.AdminName, t.FID, v.Object.RID, v.Object.Reason, false) |
|
} |
|
} else if v.Object.State == 1 { |
|
for _, t := range v.Target { |
|
err = rpSvc.CallbackDeleteReply(c, v.Actor.AdminID, t.OID, t.EID, v.Object.BlockDay, t.FID, v.Object.DecreaseMoral, v.Actor.AdminName, v.Object.Reason, v.Object.TagID, v.Object.BlockReasonID) |
|
} |
|
} else if v.Object.State == 10 { |
|
for _, t := range v.Target { |
|
rpSvc.ReportStateSet(c, []int64{t.OID}, []int64{t.EID}, v.Actor.AdminID, v.Actor.AdminName, t.FID, 8, v.Object.Reason, false) |
|
} |
|
} else { |
|
log.Warn("callbackDelReply RequestErr(%d,%d)", v.Object.State, v.Object.DisposeMode) |
|
} |
|
|
|
c.JSON(nil, err) |
|
return |
|
} |
|
|
|
// adminTopReply top reply normal. |
|
func adminTopReply(c *bm.Context) { |
|
v := new(struct { |
|
RpID int64 `form:"rpid" validate:"required"` |
|
Oid int64 `form:"oid" validate:"required"` |
|
Type int32 `form:"type" validate:"required"` |
|
AdminID int64 `form:"adid"` |
|
Action uint32 `form:"action"` |
|
}) |
|
var err error |
|
err = c.Bind(v) |
|
if err != nil { |
|
return |
|
} |
|
adid := v.AdminID |
|
if uid, ok := c.Get("uid"); ok { |
|
adid = uid.(int64) |
|
} |
|
var adName string |
|
if uname, ok := c.Get("username"); ok { |
|
adName = uname.(string) |
|
} |
|
err = rpSvc.AddTop(c, adid, adName, v.Oid, v.RpID, v.Type, v.Action) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
|
|
// adminTopReplyLog get reply top log. |
|
func adminTopReplyLog(c *bm.Context) { |
|
v := new(struct { |
|
Oid int64 `form:"oid" ` |
|
Type int32 `form:"type" ` |
|
StartTime string `form:"start_time"` |
|
EndTime string `form:"end_time"` |
|
Page int64 `form:"pn"` |
|
PageSize int64 `form:"ps"` |
|
Order string `form:"order"` |
|
Sort string `form:"sort"` |
|
}) |
|
var err error |
|
err = c.Bind(v) |
|
if err != nil { |
|
return |
|
} |
|
|
|
sp := model.LogSearchParam{ |
|
Oid: v.Oid, |
|
Type: v.Type, |
|
CtimeFrom: v.StartTime, |
|
CtimeTo: v.EndTime, |
|
Pn: v.Page, |
|
Ps: v.PageSize, |
|
Order: v.Order, |
|
Sort: v.Sort, |
|
} |
|
data, err := rpSvc.ReplyTopLog(c, sp) |
|
res := map[string]interface{}{} |
|
res["data"] = data |
|
c.JSONMap(res, err) |
|
|
|
return |
|
} |
|
|
|
// adminMarkAsSpam make a reply as spam |
|
func adminMarkAsSpam(c *bm.Context) { |
|
v := new(struct { |
|
RpIDs []int64 `form:"rpid,split" validate:"required"` |
|
Oids []int64 `form:"oid,split" validate:"required"` |
|
AdminID int64 `form:"adid"` |
|
Remark string `form:"remark"` |
|
}) |
|
var err error |
|
err = c.Bind(v) |
|
if err != nil { |
|
return |
|
} |
|
adid := v.AdminID |
|
if uid, ok := c.Get("uid"); ok { |
|
adid = uid.(int64) |
|
} |
|
var adName string |
|
if uname, ok := c.Get("username"); ok { |
|
adName = uname.(string) |
|
} |
|
err = rpSvc.MarkAsSpam(c, v.Oids, v.RpIDs, adid, adName, v.Remark) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
|
|
// adminMarkAsSpam make a reply as spam |
|
func adminReplyList(c *bm.Context) { |
|
v := new(struct { |
|
RpIDs []int64 `form:"eids,split" validate:"required"` |
|
Oids []int64 `form:"oids,split" validate:"required"` |
|
IDs []int64 `form:"ids,split" validate:"required"` |
|
}) |
|
var err error |
|
err = c.Bind(v) |
|
if err != nil { |
|
return |
|
} |
|
res := make(map[int64]*model.ReplyEx) |
|
|
|
if len(v.RpIDs) == len(v.IDs) && len(v.IDs) == len(v.Oids) && len(v.RpIDs) > 0 { |
|
for i := range v.IDs { |
|
ex := &model.ReplyEx{} |
|
ex.ID = v.RpIDs[i] |
|
ex.Oid = v.Oids[i] |
|
res[v.IDs[i]] = ex |
|
} |
|
var rpMap map[int64]*model.ReplyEx |
|
rpMap, err = rpSvc.ReplyList(c, v.Oids, v.RpIDs) |
|
for k, data := range res { |
|
res[k] = rpMap[data.ID] |
|
} |
|
} else { |
|
log.Error("adminReplyList request invalid(%v)", v) |
|
err = ecode.RequestErr |
|
} |
|
|
|
c.JSON(res, err) |
|
return |
|
} |
|
|
|
func topChildReply(c *bm.Context) { |
|
v := new(struct { |
|
Root int64 `form:"root" validate:"required"` |
|
Child int64 `form:"child" validate:"required"` |
|
Oid int64 `form:"oid" validate:"required"` |
|
}) |
|
if err := c.Bind(v); err != nil { |
|
return |
|
} |
|
c.JSON(nil, rpSvc.TopChildReply(c, v.Root, v.Child, v.Oid)) |
|
} |
|
|
|
func foldReply(c *bm.Context) { |
|
v := new(struct { |
|
Oids []int64 `form:"oids,split" validate:"required"` |
|
RpIDs []int64 `form:"rpids,split" validate:"required"` |
|
Types []int64 `form:"types,split" validate:"required"` |
|
}) |
|
if err := c.Bind(v); err != nil { |
|
return |
|
} |
|
if len(v.Oids) != len(v.RpIDs) || len(v.Oids) != len(v.Types) { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
c.JSON(nil, rpSvc.FoldReplies(c, v.Oids, v.Types, v.RpIDs)) |
|
}
|
|
|