package infmtctrl import ( "encoding/json" "sort" "time" "91porn-server/common" "91porn-server/common/constant" "91porn-server/common/stderr" "91porn-server/models/commod" "91porn-server/models/l/operatorlgmod" "91porn-server/models/v/noticefmtmod" "91porn-server/web/service/infmtser" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson/primitive" ) type Sender = noticefmtmod.Sender type Receiver = noticefmtmod.Receiver type NoticeType = noticefmtmod.NoticeType type UIDSlice = noticefmtmod.UIDSlice type TimeUnit = noticefmtmod.TimeUnit type TimeSlice = noticefmtmod.TimeSlice type ObjectID = primitive.ObjectID type RegularNotice = noticefmtmod.RegularNotice type PlanNotice = noticefmtmod.PlanNotice type SpecifyNotice = noticefmtmod.SpecifyNotice type MailNotice = noticefmtmod.MailNotice type AfterRegistNotice = noticefmtmod.AfterRegistNotice // NoticeList doc // @Summary 通知列表 // @Description 通知列表 // @Tags web-Notice // @Accept mpfd,json // @Produce json,html // @Param noticeCode query string false "通知码" // @Param title query string false "标题" // @Param noticeType query string false "通知类型" // @Param sender query string false "发送者" // @Param receiver query string false "接受者" // @Param enable query bool false "开关" // @Param pageNumber query int true "当前页" // @Param pageSize query int true "每页条数" // @Success 200 {string} json "{"msg": "操作成功", "date": { "total":10, "list":[] }}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /web/infmt/notice/list [get] func NoticeList(c *gin.Context) { type Query struct { NoticeCode *string `form:"noticeCode" json:"noticeCode" binding:""` //通知码 唯一标记不同的通知计划,可代替_id,方便复制数据 Title *string `form:"title" json:"title" binding:""` //标题 NoticeType *NoticeType `form:"noticeType" json:"noticeType" binding:""` //通知类型 Sender *Sender `form:"sender" json:"sender" binding:""` //发送者 Receiver *Receiver `form:"receiver" json:"receiver" binding:""` //接受者 Enable *bool `form:"enable" json:"enable" binding:""` //开关 } var arg struct { commod.Page Query } if err := c.ShouldBind(&arg); err != nil { common.ServeJSON(c, stderr.ErrParamError, "infmtctrl NoticeList arg error "+err.Error()) return } titleMatch := infmtser.TitleMatch{Title: arg.Title} noticeCodeMatch := infmtser.NoticeCodeMatch{NoticeCode: arg.NoticeCode} noticeTypeMatch := infmtser.NoticeTypeMatch{NoticeType: arg.NoticeType} senderMatch := infmtser.SenderMatch{Sender: arg.Sender} receiverMatch := infmtser.ReceiverMatch{Receiver: arg.Receiver} enableMatch := infmtser.EnableMatch{Enable: arg.Enable} skip := int64((arg.PageNumber - 1) * arg.PageSize) limit := int64(arg.PageSize) page, err := infmtser.NoticePages(skip, limit, titleMatch, noticeCodeMatch, noticeTypeMatch, senderMatch, receiverMatch, enableMatch) if err != nil { common.ServeJSON(c, stderr.Failure, "web infmtctrl NoticeList error: "+err.Error()) return } common.ServeJSON(c, stderr.Success, page) } // NoticeUpdate doc // @Summary 编辑通知 // @Description 编辑通知 // @Tags web-Notice // @Accept mpfd,json // @Produce json,html // @Param ID formData string true "id" // @Param title query string false "标题" // @Param sender query string false "发送者" // @Param receiver query string false "接受者" // @Param enable query bool false "开关" // @Param uidList query array false "用户列表" // @Param content query string false "内容" // @Param remark query string false "备注" // @Param noticeType query string false "通知类型" // @Param startAt query string false "开始时间" // @Param timeUnit query string false "单位 分钟/小时/天/周" // @Param timeCount query int false "量" // @Param endAt query string false "结束时间" // @Param planCount query int false "执行次数" // @Param specifyTimeList query array false "指定执行时间数组" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /web/infmt/notice/update [post] func NoticeUpdate(c *gin.Context) { manager, err := common.GetAdminAct(c) if err != nil { common.ServeJSON(c, stderr.AdminIDErr, err.Error()) return } type NoticeFMT struct { StartAt *time.Time `form:"startAt" json:"startAt" binding:""` //开始时间 TimeUnit *TimeUnit `form:"timeUnit" json:"timeUnit" binding:""` //单位 分钟/小时/天/周 TimeCount *int64 `form:"timeCount" json:"timeCount" binding:""` //量 EndAt *time.Time `form:"endAt" json:"endAt" binding:""` //结束时间 PlanCount *int64 `form:"planCount" json:"planCount" binding:""` //执行次数 SpecifyTimeList TimeSlice `form:"specifyTimeList" json:"specifyTimeList" binding:""` //指定执行时间数组 } type Update struct { Title *string `form:"title" json:"title" binding:""` //标题 Sender *Sender `form:"sender" json:"sender" binding:""` //发送者 Receiver *Receiver `form:"receiver" json:"receiver" binding:""` //接受者 Enable *bool `form:"enable" json:"enable" binding:""` //开关 UIDList UIDSlice `form:"uidList" json:"uidList" binding:""` //用户列表 Content *string `form:"content" json:"content" binding:""` //内容 Remark *string `form:"remark" json:"remark" binding:""` //备注 NoticeType *NoticeType `form:"noticeType" json:"noticeType" binding:""` //通知类型 NoticeFMT } var arg struct { ID ObjectID `form:"id" json:"id" binding:"required"` Update } if err = c.ShouldBind(&arg); err != nil { common.ServeJSON(c, stderr.ErrParamError, "web infmtctrl NoticeUpdate arg error "+err.Error()) return } updateDoc := noticefmtmod.UpdateDoc{ Sender: arg.Sender, Receiver: arg.Receiver, UIDList: arg.UIDList, Title: arg.Title, Content: arg.Content, Enable: arg.Enable, Remark: arg.Remark, NoticeType: arg.NoticeType, } if arg.NoticeType != nil { switch *arg.NoticeType { case noticefmtmod.RegularNoticeType: updateDoc.RegularNotice = RegularNotice{ StartAt: arg.StartAt, TimeUnit: arg.TimeUnit, TimeCount: arg.TimeCount, } case noticefmtmod.PlanNoticeType: updateDoc.PlanNotice = PlanNotice{ StartAt: arg.StartAt, EndAt: arg.EndAt, PlanCount: arg.PlanCount, } case noticefmtmod.SpecifyNoticeType: updateDoc.SpecifyNotice = SpecifyNotice{ SpecifyTimeList: arg.SpecifyTimeList, } case noticefmtmod.AfterRegistNoticeType: updateDoc.AfterRegistNotice = AfterRegistNotice{ TimeUnit: arg.TimeUnit, TimeCount: arg.TimeCount, } } } if err = noticefmtmod.UpdateOne(arg.ID, updateDoc); err != nil { common.ServeJSON(c, stderr.ErrDbUpdateError, "web infmtctrl NoticeUpdate error: "+err.Error()) return } log, _ := json.Marshal(arg) _ = operatorlgmod.RecordOperation(manager, constant.UserManageList, constant.Modify, string(log), c.Request.URL.RequestURI()) common.ServeJSON(c, stderr.Success, "") } // NoticeAdd doc // @Summary 添加通知 // @Description 添加通知 // @Tags web-Notice // @Accept mpfd,json // @Produce json,html // @Param noticeType query string true "通知类型" // @Param title query string true "标题" // @Param sender query string true "发送者" // @Param receiver query string true "接受者" // @Param enable query bool true "开关" // @Param uidList query array false "用户列表" // @Param content query string false "内容" // @Param remark query string false "备注" // @Param startAt query string false "开始时间" // @Param timeUnit query string false "单位 分钟/小时/天/周" // @Param timeCount query int false "量" // @Param endAt query string false "结束时间" // @Param planCount query int false "执行次数" // @Param specifyTimeList query array false "指定执行时间数组" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /web/infmt/notice/add [post] func NoticeAdd(c *gin.Context) { manager, err := common.GetAdminAct(c) if err != nil { common.ServeJSON(c, stderr.AdminIDErr, err.Error()) return } type NoticeFMT struct { StartAt *time.Time `form:"startAt" json:"startAt" binding:""` //开始时间 TimeUnit *TimeUnit `form:"timeUnit" json:"timeUnit" binding:""` //单位 分钟/小时/天/周 TimeCount *int64 `form:"timeCount" json:"timeCount" binding:""` //量 EndAt *time.Time `form:"endAt" json:"endAt" binding:""` //结束时间 PlanCount *int64 `form:"planCount" json:"planCount" binding:""` //执行次数 SpecifyTimeList TimeSlice `form:"specifyTimeList" json:"specifyTimeList" binding:""` //指定执行时间数组 } type Insert struct { NoticeType NoticeType `form:"noticeType" json:"noticeType" binding:"required"` //通知类型 Title string `form:"title" json:"title" binding:"required"` //标题 Sender Sender `form:"sender" json:"sender" binding:"required"` //发送者 Receiver Receiver `form:"receiver" json:"receiver" binding:"required"` //接受者 Enable *bool `form:"enable" json:"enable" binding:"required"` //开关 UIDList UIDSlice `form:"uidList" json:"uidList" binding:""` //用户列表 Content *string `form:"content" json:"content" binding:""` //内容 Remark *string `form:"remark" json:"remark" binding:""` //备注 NoticeFMT } var arg struct { Insert } if err = c.ShouldBind(&arg); err != nil { common.ServeJSON(c, stderr.ErrParamError, "web infmtctrl NoticeAdd arg error "+err.Error()) return } insertDoc := noticefmtmod.InsertDoc{ Sender: arg.Sender, Receiver: arg.Receiver, UIDList: arg.UIDList, Title: arg.Title, NoticeType: arg.NoticeType, Enable: *arg.Enable, } insertDoc.NoticeCode = common.UUID() if arg.Content != nil { insertDoc.Content = *arg.Content } if arg.Remark != nil { insertDoc.Remark = *arg.Remark } switch arg.NoticeType { case noticefmtmod.RegularNoticeType: insertDoc.RegularNotice = RegularNotice{ StartAt: arg.StartAt, TimeUnit: arg.TimeUnit, TimeCount: arg.TimeCount, } case noticefmtmod.PlanNoticeType: insertDoc.PlanNotice = PlanNotice{ StartAt: arg.StartAt, EndAt: arg.EndAt, PlanCount: arg.PlanCount, } case noticefmtmod.SpecifyNoticeType: insertDoc.SpecifyNotice = SpecifyNotice{ SpecifyTimeList: arg.SpecifyTimeList, } case noticefmtmod.AfterRegistNoticeType: insertDoc.AfterRegistNotice = AfterRegistNotice{ TimeUnit: arg.TimeUnit, TimeCount: arg.TimeCount, } } sort.Sort(insertDoc.UIDList) if err = noticefmtmod.InsertOne(insertDoc); err != nil { common.ServeJSON(c, stderr.ErrDbInsertError, "web infmtctrl NoticeAdd InsertOne error: "+err.Error()) return } log, _ := json.Marshal(arg) _ = operatorlgmod.RecordOperation(manager, constant.UserManageList, constant.Add, string(log), c.Request.URL.RequestURI()) common.ServeJSON(c, stderr.Success, "") } // NoticeDel doc // @Summary 删除通知 // @Description 删除通知 // @Tags web-Notice // @Accept mpfd,json // @Produce json,html // @Param ID formData string true "id" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /web/infmt/notice/delete [delete] func NoticeDel(c *gin.Context) { manager, err := common.GetAdminAct(c) if err != nil { common.ServeJSON(c, stderr.AdminIDErr, err.Error()) return } var arg struct { ID ObjectID `form:"id" json:"id" binding:"required"` } if err = c.ShouldBind(&arg); err != nil { common.ServeJSON(c, stderr.ErrParamError, "web infmtctrl NoticeDel arg error "+err.Error()) return } if err = noticefmtmod.DeleteOne(arg.ID); err != nil { common.ServeJSON(c, stderr.ErrDbDeleteError, "web infmtctrl NoticeDel DeleteOne error: "+err.Error()) return } log, _ := json.Marshal(arg) _ = operatorlgmod.RecordOperation(manager, constant.UserManageList, constant.Delete, string(log), c.Request.URL.RequestURI()) common.ServeJSON(c, stderr.Success, "") } // MailList doc // @Summary 邮件通知列表 // @Description 邮件通知列表 // @Tags web-Mail // @Accept mpfd,json // @Produce json,html // @Param noticeCode query string false "通知码" // @Param title query string false "标题" // @Param receiver query string false "接受者" // @Param pageNumber query int true "当前页" // @Param pageSize query int true "每页条数" // @Success 200 {string} json "{"msg": "操作成功", "date": { "total":10, "list":[] }}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /web/infmt/mail/list [get] func MailList(c *gin.Context) { type Query struct { NoticeCode *string `form:"noticeCode" json:"noticeCode" binding:""` //通知码 唯一标记不同的通知计划,可代替_id,方便复制数据 Title *string `form:"title" json:"title" binding:""` //标题 Receiver *Receiver `form:"receiver" json:"receiver" binding:""` //接受者 } var arg struct { commod.Page Query } if err := c.ShouldBind(&arg); err != nil { common.ServeJSON(c, stderr.ErrParamError, "infmtctrl MailList arg error "+err.Error()) return } titleMatch := infmtser.TitleMatch{Title: arg.Title} noticeCodeMatch := infmtser.NoticeCodeMatch{NoticeCode: arg.NoticeCode} receiverMatch := infmtser.ReceiverMatch{Receiver: arg.Receiver} skip := int64((arg.PageNumber - 1) * arg.PageSize) limit := int64(arg.PageSize) page, err := infmtser.MailPages(skip, limit, titleMatch, noticeCodeMatch, receiverMatch) if err != nil { common.ServeJSON(c, stderr.Failure, "web infmtctrl MailList error: "+err.Error()) return } common.ServeJSON(c, stderr.Success, page) } // MailAdd doc // @Summary 添加邮件 // @Description 添加邮件 // @Tags web-Mail // @Accept mpfd,json // @Produce json,html // @Param title query string true "标题" // @Param receiver query string true "接受者" // @Param content query string true "内容" // @Param uidList query array false "用户列表" // @Param remark query string false "备注" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /web/infmt/mail/add [post] func MailAdd(c *gin.Context) { manager, err := common.GetAdminAct(c) if err != nil { common.ServeJSON(c, stderr.AdminIDErr, err.Error()) return } type Insert struct { Title string `form:"title" json:"title" binding:"required"` //标题 Receiver Receiver `form:"receiver" json:"receiver" binding:"required"` //接受者 Content string `form:"content" json:"content" binding:"required"` //内容 UIDList UIDSlice `form:"uidList" json:"uidList" binding:""` //用户列表 Remark *string `form:"remark" json:"remark" binding:""` //备注 } var arg struct { Insert } if err = c.ShouldBind(&arg); err != nil { common.ServeJSON(c, stderr.ErrParamError, "web infmtctrl NoticeAdd arg error "+err.Error()) return } sendAt := time.Now() insertDoc := noticefmtmod.InsertDoc{ NoticeCode: common.UUID(), NoticeType: noticefmtmod.MailNoticeType, Sender: noticefmtmod.System, Enable: true, Receiver: arg.Receiver, UIDList: arg.UIDList, Title: arg.Title, Content: arg.Content, MailNotice: MailNotice{SendAt: &sendAt}, } if arg.Remark != nil { insertDoc.Remark = *arg.Remark } if err = noticefmtmod.InsertOne(insertDoc); err != nil { common.ServeJSON(c, stderr.ErrDbInsertError, "web infmtctrl MailAdd InsertOne error: "+err.Error()) return } log, _ := json.Marshal(arg) _ = operatorlgmod.RecordOperation(manager, constant.UserManageList, constant.Add, string(log), c.Request.URL.RequestURI()) common.ServeJSON(c, stderr.Success, "") } // MailDel doc // @Summary 删除邮件通知 // @Description 删除邮件通知 // @Tags web-Mail // @Accept mpfd,json // @Produce json,html // @Param ID formData string true "id" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /web/infmt/mail/delete [delete] func MailDel(c *gin.Context) { manager, err := common.GetAdminAct(c) if err != nil { common.ServeJSON(c, stderr.AdminIDErr, err.Error()) return } var arg struct { ID ObjectID `form:"id" json:"id" binding:"required"` } if err = c.ShouldBind(&arg); err != nil { common.ServeJSON(c, stderr.ErrParamError, "web infmtctrl MailDel arg error "+err.Error()) return } if err = noticefmtmod.DeleteOne(arg.ID); err != nil { common.ServeJSON(c, stderr.ErrDbDeleteError, "web infmtctrl MailDel DeleteOne error: "+err.Error()) return } log, _ := json.Marshal(arg) _ = operatorlgmod.RecordOperation(manager, constant.UserManageList, constant.Delete, string(log), c.Request.URL.RequestURI()) common.ServeJSON(c, stderr.Success, "") }