468 lines
12 KiB
Go
468 lines
12 KiB
Go
|
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)
|
||
|
}
|