Files
2022-01-20 09:43:26 +08:00

261 lines
7.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package activity
import (
"SciencesServer/app/api/admin/model"
"SciencesServer/app/basic/config"
"SciencesServer/app/basic/controller"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
"SciencesServer/serve/orm"
"SciencesServer/utils"
"errors"
"gorm.io/gorm"
"strings"
"time"
)
type Instance struct {
*session.Admin
}
type InstanceHandle func(session *session.Admin) *Instance
type (
// InstanceInfo 活动信息
InstanceInfo struct {
ID string `json:"id"`
*model.ActivityInstanceInfo
Area string `json:"area"`
Industry string `json:"industry"`
}
// InstanceDetailInfo 活动详细信息
InstanceDetailInfo struct {
ID string `json:"id"`
TenantID string `json:"tenant_id"`
*model2.ActivityInstance
Industrys []string `json:"industrys"`
}
// InstanceParams 活动参数信息
InstanceParams struct {
ID, ApplyID, TenantID uint64
Title, Contact, ContactMobile, Image, Description, Content string
BeginAt, FinishAt, JoinDeadline string
config.Area
Industrys []string
Amount float64
MaxNumber, NotifyCrowd, IsHome, Sort, Status int
}
// InstanceJoinInfo 活动报名信息
InstanceJoinInfo struct {
ID string `json:"id"`
*model.ActivityJoinInfo
}
)
// notify 执行通知
func (c *Instance) notify() {
}
// Index 活动信息
func (c *Instance) Index(tenantID uint64, title, contact, contactMobile string, page, pageSize int) (*controller.ReturnPages, error) {
mActivityInstance := model.NewActivityInstance()
where := make([]*model2.ModelWhere, 0)
if c.TenantID > 0 {
where = append(where, model2.NewWhere("a.tenant_id", c.TenantID))
}
if tenantID > 0 {
where = append(where, model2.NewWhere("a.tenant_id", tenantID))
}
if title != "" {
where = append(where, model2.NewWhereLike("a.title", title))
}
if contact != "" {
where = append(where, model2.NewWhereLike("a.contact", title))
}
if contactMobile != "" {
where = append(where, model2.NewWhereLike("a.contact_mobile", title))
}
var count int64
out, err := mActivityInstance.Activity(page, pageSize, &count, where...)
if err != nil {
return nil, err
}
list := make([]*InstanceInfo, 0)
for _, v := range out {
_industry := make([]string, 0)
for _, v := range v.GetIndustryAttribute() {
_industry = append(_industry, config.GetIndustryInfo(v, "-", "/").Value)
}
list = append(list, &InstanceInfo{
ID: v.GetEncodeID(),
ActivityInstanceInfo: v,
Area: v.FormatBasic(),
Industry: strings.Join(_industry, ""),
})
}
return &controller.ReturnPages{Data: list, Count: count}, nil
}
// Detail 详细信息
func (c *Instance) Detail(id uint64) (*InstanceDetailInfo, error) {
mActivityInstance := model.NewActivityInstance()
mActivityInstance.ID = id
isExist, err := model2.First(mActivityInstance.ActivityInstance)
if err != nil {
return nil, err
} else if !isExist {
return nil, errors.New("操作错误,活动信息不存在或已被删除")
}
return &InstanceDetailInfo{
ID: mActivityInstance.GetEncodeID(),
TenantID: mActivityInstance.GetEncodeTenantID(),
ActivityInstance: mActivityInstance.ActivityInstance,
Industrys: mActivityInstance.GetIndustryAttribute(),
}, nil
}
// Form 数据操作
func (c *Instance) Form(params *InstanceParams) error {
mActivityInstance := model.NewActivityInstance()
if params.ID > 0 {
mActivityInstance.ID = params.ID
isExist, err := model2.FirstField(mActivityInstance.ActivityInstance, []string{"id", "tenant_id", "created_at"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,活动信息不存在或已被删除")
}
if c.TenantID > 0 && mActivityInstance.TenantID != c.TenantID {
return errors.New("操作错误,无权限操作")
}
}
mActivityInstance.Title = params.Title
mActivityInstance.Contact = params.Contact
mActivityInstance.ContactMobile = params.ContactMobile
mActivityInstance.BeginAt = utils.DateTimeToTime(params.BeginAt)
mActivityInstance.FinishAt = utils.DateTimeToTime(params.FinishAt)
mActivityInstance.JoinDeadline = utils.DateTimeToTime(params.JoinDeadline)
mActivityInstance.Area = model2.Area{
Province: params.Province, City: params.City, District: params.District, Address: params.Address,
}
mActivityInstance.Image.Image = params.Image
mActivityInstance.SetIndustryAttribute(params.Industrys)
mActivityInstance.Amount = params.Amount
mActivityInstance.MaxNumber = params.MaxNumber
mActivityInstance.NotifyCrowd = params.NotifyCrowd
mActivityInstance.IsHome = params.IsHome
mActivityInstance.Sort = params.Sort
mActivityInstance.Description = params.Description
mActivityInstance.Content = params.Content
mActivityInstance.Status = model2.ActivityInstanceStatus(params.Status)
if mActivityInstance.ID > 0 {
if c.TenantID <= 0 {
mActivityInstance.TenantID = params.TenantID
}
return model2.Updates(mActivityInstance.ActivityInstance, mActivityInstance.ActivityInstance)
}
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
mActivityInstance.TenantID = params.TenantID
if c.TenantID > 0 {
mActivityInstance.TenantID = c.TenantID
}
err := model2.Create(mActivityInstance.ActivityInstance)
if err != nil {
return err
}
if params.ApplyID > 0 {
mActivityApply := model.NewActivityApply()
mActivityApply.ID = params.ApplyID
isExist := false
if isExist, err = model2.FirstField(mActivityApply.ActivityApply, []string{"id", "tenant_id", "status"}); err != nil {
return err
} else if !isExist {
return errors.New("操作错误,活动申请信息不存在或已被删除")
}
if c.TenantID > 0 && mActivityApply.TenantID != c.TenantID {
return errors.New("操作错误,无权限操作")
}
if mActivityApply.Status != model2.ActivityApplyStatusForProcessing {
return errors.New("操作错误,活动申请信息状态发生变化,不可处理")
}
if err = model2.Updates(mActivityApply.ActivityApply, map[string]interface{}{
"status": model2.ActivityApplyStatusForProcessed, "updated_at": time.Now(),
}, tx); err != nil {
return err
}
mActivityApplyLog := model.NewActivityApplyLog()
mActivityApplyLog.ApplyID = mActivityApply.ID
mActivityApplyLog.Remark = "创建活动"
return model2.Create(mActivityApplyLog.ActivityApplyLog, tx)
}
return nil
})
}
// Delete 删除操作
func (c *Instance) Delete(id uint64) error {
mActivityInstance := model.NewActivityInstance()
mActivityInstance.ID = id
isExist, err := model2.FirstField(mActivityInstance.ActivityInstance, []string{"id", "tenant_id"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,活动信息不存在或已被删除")
}
if c.TenantID > 0 && c.TenantID != mActivityInstance.TenantID {
return errors.New("操作错误,无权限操作")
}
return model2.Delete(mActivityInstance.ActivityInstance)
}
func (c *Instance) Joins(activityID uint64, name string, page, pageSize int) (*controller.ReturnPages, error) {
mActivityJoin := model.NewActivityJoin()
where := []*model2.ModelWhere{model2.NewWhere("j.activity_id", activityID)}
if name != "" {
where = append(where, model2.NewWhereLike("u_i.name", name))
}
var count int64
out, err := mActivityJoin.Join(page, pageSize, &count, where...)
if err != nil {
return nil, err
}
list := make([]*InstanceJoinInfo, 0)
for _, v := range out {
list = append(list, &InstanceJoinInfo{
ID: v.GetEncodeID(),
ActivityJoinInfo: v,
})
}
return &controller.ReturnPages{Data: list, Count: count}, nil
}
func NewInstance() InstanceHandle {
return func(session *session.Admin) *Instance {
return &Instance{session}
}
}