diff --git a/app/api/admin/controller/tenant/instance.go b/app/api/admin/controller/tenant/instance.go index 000261d..5ab24c8 100644 --- a/app/api/admin/controller/tenant/instance.go +++ b/app/api/admin/controller/tenant/instance.go @@ -45,6 +45,12 @@ type ( } ) +func (c *Instance) checkIsExist(iModel model2.IModel, where ...*model2.ModelWhere) (bool, error) { + var count int64 + err := model2.Count(iModel, &count, where...) + return count > 0, err +} + // Index 首页列表信息 func (c *Instance) Index(name string, page, pageSize int) (*controller.ReturnPages, error) { mSysTenant := model.NewSysTenant() @@ -110,6 +116,8 @@ func (c *Instance) Select() (map[string]*InstanceSelectInfo, error) { func (c *Instance) Form(params *InstanceParams) error { mSysTenant := model.NewSysTenant() + isExist := false + if params.ID > 0 { mSysTenant.ID = params.ID @@ -122,7 +130,12 @@ func (c *Instance) Form(params *InstanceParams) error { } if mSysTenant.Province != params.Area.Province || mSysTenant.City != params.Area.City { - // TODO:查询区域是否存在租户平台 + if isExist, err = c.checkIsExist(mSysTenant.SysTenant, model2.NewWhere("province", params.Area.Province), + model2.NewWhere("city", params.Area.City)); err != nil { + return err + } else if isExist { + return errors.New("操作错误,该区域下已存在平台信息") + } } } mSysTenant.Name = params.Name @@ -137,10 +150,21 @@ func (c *Instance) Form(params *InstanceParams) error { if mSysTenant.ID > 0 { return model2.Updates(mSysTenant.SysTenant, mSysTenant.SysTenant) } + if !utils.ValidateUrl(params.Domain) { + return errors.New("操作错误,域名地址信息错误") + } mSysTenant.Key = utils.GetRandomString(12) mSysTenant.Domain = params.Domain - if err := model2.Create(mSysTenant.SysTenant); err != nil { + var err error + + if isExist, err = c.checkIsExist(mSysTenant.SysTenant, model2.NewWhere("province", params.Area.Province), + model2.NewWhere("city", params.Area.City)); err != nil { + return err + } else if isExist { + return errors.New("操作错误,该区域下已存在平台信息") + } + if err = model2.Create(mSysTenant.SysTenant); err != nil { return err } _session := session.NewTenant() diff --git a/app/api/enterprise/api/activity.go b/app/api/enterprise/api/activity.go index 3d009d8..d188854 100644 --- a/app/api/enterprise/api/activity.go +++ b/app/api/enterprise/api/activity.go @@ -18,8 +18,7 @@ func (*Activity) Applys(c *gin.Context) { api.APIFailure(err.(error))(c) return } - data, err := activity.NewApply()(api.GetSession()(c).(*session.Enterprise), api.GetTenantID()(c).(string)). - List(form.Title, form.Page, form.PageSize) + data, err := activity.NewApply()(api.GetSession()(c).(*session.Enterprise)).Instance(form.Title, form.Page, form.PageSize) api.APIResponse(err, data)(c) } @@ -39,11 +38,10 @@ func (*Activity) ApplyLaunch(c *gin.Context) { api.APIFailure(err.(error))(c) return } - err := activity.NewApply()(api.GetSession()(c).(*session.Enterprise), api.GetTenantID()(c).(string)). - Launch(&activity.ApplyLaunchParams{ - Mode: form.Mode, MaxNUmber: form.MaxNumber, Title: form.Title, Amount: form.Amount, Content: form.Content, - BeginAt: form.BeginAt, FinishAt: form.FinishAt, JoinDeadline: form.JoinDeadline, - }) + err := activity.NewApply()(api.GetSession()(c).(*session.Enterprise)).Launch(&activity.ApplyLaunchParams{ + Mode: form.Mode, MaxNUmber: form.MaxNumber, Title: form.Title, Amount: form.Amount, Content: form.Content, + BeginAt: form.BeginAt, FinishAt: form.FinishAt, JoinDeadline: form.JoinDeadline, + }) api.APIResponse(err)(c) } @@ -54,8 +52,7 @@ func (*Activity) ApplyRevoke(c *gin.Context) { api.APIFailure(err.(error))(c) return } - err := activity.NewApply()(api.GetSession()(c).(*session.Enterprise), api.GetTenantID()(c).(string)). - Revoke(form.Convert()) + err := activity.NewApply()(api.GetSession()(c).(*session.Enterprise)).Revoke(form.Convert()) api.APIResponse(err)(c) } @@ -66,8 +63,7 @@ func (*Activity) ApplyDelete(c *gin.Context) { api.APIFailure(err.(error))(c) return } - err := activity.NewApply()(api.GetSession()(c).(*session.Enterprise), api.GetTenantID()(c).(string)). - Delete(form.Convert()) + err := activity.NewApply()(api.GetSession()(c).(*session.Enterprise)).Delete(form.Convert()) api.APIResponse(err)(c) } @@ -81,8 +77,7 @@ func (*Activity) Joins(c *gin.Context) { api.APIFailure(err.(error))(c) return } - data, err := activity.NewInstance()(api.GetSession()(c).(*session.Enterprise), api.GetTenantID()(c).(string)). - Joins(form.Title, form.Status, form.Page, form.PageSize) + data, err := activity.NewInstance()(api.GetSession()(c).(*session.Enterprise)).Joins(form.Title, form.Status, form.Page, form.PageSize) api.APIResponse(err, data)(c) } @@ -93,7 +88,6 @@ func (*Activity) JoinDelete(c *gin.Context) { api.APIFailure(err.(error))(c) return } - err := activity.NewInstance()(api.GetSession()(c).(*session.Enterprise), api.GetTenantID()(c).(string)). - JoinDelete(form.Convert()) + err := activity.NewInstance()(api.GetSession()(c).(*session.Enterprise)).JoinDelete(form.Convert()) api.APIResponse(err)(c) } diff --git a/app/api/enterprise/controller/activity/apply.go b/app/api/enterprise/controller/activity/apply.go index 575c962..67448d3 100644 --- a/app/api/enterprise/controller/activity/apply.go +++ b/app/api/enterprise/controller/activity/apply.go @@ -12,10 +12,9 @@ import ( type Apply struct { *session.Enterprise - local string } -type ApplyHandle func(session *session.Enterprise, local string) *Apply +type ApplyHandle func(session *session.Enterprise) *Apply type ( // ApplyLaunchParams 参数信息 @@ -28,18 +27,18 @@ type ( ) // List 列表信息 -func (c *Apply) List(title string, page, pageSize int) (*controller.ReturnPages, error) { +func (c *Apply) Instance(title string, page, pageSize int) (*controller.ReturnPages, error) { mActivityApply := model.NewActivityApply() out := make([]*model2.ActivityApply, 0) where := []*model2.ModelWhereOrder{ &model2.ModelWhereOrder{ - Where: model2.NewWhere("local", c.local), + Where: model2.NewWhere("uid", c.UID), Order: model2.NewOrder("id", model2.OrderModeToDesc), }, &model2.ModelWhereOrder{ - Where: model2.NewWhere("identity_uid", c.IdentityUID), + Where: model2.NewWhere("identity", c.SelectIdentity), }, } if title != "" { @@ -79,7 +78,7 @@ func (c *Apply) Revoke(id uint64) error { mActivityApply := model.NewActivityApply() mActivityApply.ID = id - isExist, err := model2.FirstField(mActivityApply.ActivityApply, []string{"id", "identity_uid", "status"}) + isExist, err := model2.FirstField(mActivityApply.ActivityApply, []string{"id", "uid", "status"}) if err != nil { return err @@ -88,7 +87,7 @@ func (c *Apply) Revoke(id uint64) error { } else if mActivityApply.Status != model2.ActivityApplyStatusForProcessing { return errors.New("操作错误,当前活动状态易发生变化,不可撤销") } else if mActivityApply.UID != c.UID { - return errors.New("无权限操作") + return errors.New("操作错误,无权限操作") } return model2.Updates(mActivityApply.ActivityApply, map[string]interface{}{ "status": model2.ActivityApplyStatusForRevoke, "updated_at": time.Now(), @@ -100,23 +99,20 @@ func (c *Apply) Delete(id uint64) error { mActivityApply := model.NewActivityApply() mActivityApply.ID = id - isExist, err := model2.FirstField(mActivityApply.ActivityApply, []string{"id", "identity_uid"}) + isExist, err := model2.FirstField(mActivityApply.ActivityApply, []string{"id", "uid"}) if err != nil { return err } else if !isExist { return errors.New("操作错误,活动信息不存在或已被删除") } else if mActivityApply.UID != c.IdentityUID { - return errors.New("无权限操作") + return errors.New("操作错误,无权限操作") } return model2.Delete(mActivityApply.ActivityApply) } func NewApply() ApplyHandle { - return func(session *session.Enterprise, local string) *Apply { - return &Apply{ - Enterprise: session, - local: local, - } + return func(session *session.Enterprise) *Apply { + return &Apply{session} } } diff --git a/app/api/enterprise/controller/activity/instance.go b/app/api/enterprise/controller/activity/instance.go index 81ec4b2..8bd2217 100644 --- a/app/api/enterprise/controller/activity/instance.go +++ b/app/api/enterprise/controller/activity/instance.go @@ -10,10 +10,9 @@ import ( type Instance struct { *session.Enterprise - local string } -type InstanceHandle func(session *session.Enterprise, local string) *Instance +type InstanceHandle func(session *session.Enterprise) *Instance type InstanceForJoin struct { *model.ActivityInstanceJoinInfo @@ -25,9 +24,8 @@ func (c *Instance) Joins(title string, status, page, pageSize int) (*controller. mActivityInstance := model.NewActivityInstance() where := []*model2.ModelWhere{ - model2.NewWhere("a.local", c.local), - model2.NewWhere("a.identity", c.Identity), - model2.NewWhere("j.m_uid", c.UID), + model2.NewWhere("j.identity", c.SelectIdentity), + model2.NewWhere("j.uid", c.UID), } if title != "" { @@ -73,7 +71,7 @@ func (c *Instance) JoinDelete(id uint64) error { } func NewInstance() InstanceHandle { - return func(session *session.Enterprise, local string) *Instance { - return &Instance{Enterprise: session, local: local} + return func(session *session.Enterprise) *Instance { + return &Instance{Enterprise: session} } } diff --git a/app/api/website/api/activity.go b/app/api/website/api/activity.go index 678bd6f..054f860 100644 --- a/app/api/website/api/activity.go +++ b/app/api/website/api/activity.go @@ -18,7 +18,7 @@ func (*Activity) Instance(c *gin.Context) { api.APIFailure(err.(error))(c) return } - data, err := controller.NewActivity()(nil, "").Instance(form.Title, form.Mode, form.Page, form.PageSize) + data, err := controller.NewActivity()(getSession(c)).Instance(form.Title, form.Mode, form.Page, form.PageSize) api.APIResponse(err, data)(c) } @@ -30,7 +30,7 @@ func (*Activity) Detail(c *gin.Context) { api.APIFailure(err.(error))(c) return } - data, err := controller.NewActivity()(nil, "").Detail(form.Convert()) + data, err := controller.NewActivity()(getSession(c)).Detail(form.Convert()) api.APIResponse(err, data)(c) } @@ -42,6 +42,6 @@ func (*Activity) Join(c *gin.Context) { api.APIFailure(err.(error))(c) return } - err := controller.NewActivity()(nil, "").Join(form.Convert()) + err := controller.NewActivity()(getSession(c)).Join(form.Convert()) api.APIResponse(err)(c) } diff --git a/app/api/website/controller/activity.go b/app/api/website/controller/activity.go index 35a11c8..5c1c275 100644 --- a/app/api/website/controller/activity.go +++ b/app/api/website/controller/activity.go @@ -12,10 +12,9 @@ import ( type Activity struct { *session.Enterprise - local string } -type ActivityHandle func(session *session.Enterprise, local string) *Activity +type ActivityHandle func(session *session.Enterprise) *Activity type ( // ActivityInfo 活动信息 @@ -38,11 +37,6 @@ func (c *Activity) Instance(title string, mode, page, pageSize int) (*controller var count int64 - var identityUID uint64 - - if c.Enterprise != nil { - identityUID = c.IdentityUID - } where := make([]*model2.ModelWhere, 0) if title != "" { @@ -51,7 +45,7 @@ func (c *Activity) Instance(title string, mode, page, pageSize int) (*controller if mode > 0 { where = append(where, model2.NewWhere("a.mode", mode)) } - out, err := mActivityInstance.Activity(identityUID, page, pageSize, &count) + out, err := mActivityInstance.Activity(c.UID, c.SelectIdentity, page, pageSize, &count) if err != nil { return nil, err @@ -61,9 +55,7 @@ func (c *Activity) Instance(title string, mode, page, pageSize int) (*controller for _, v := range out { list = append(list, &ActivityInfo{ - ID: v.GetEncodeID(), - ActivityInstanceInfo: v, - JoinStatus: v.JoinID > 0, + ID: v.GetEncodeID(), ActivityInstanceInfo: v, JoinStatus: v.JoinID > 0, }) } return &controller.ReturnPages{Data: list, Count: count}, nil @@ -73,12 +65,7 @@ func (c *Activity) Instance(title string, mode, page, pageSize int) (*controller func (c *Activity) Detail(id uint64) (*ActivityDetail, error) { mActivityInstance := model.NewActivityInstance() - var identityUID uint64 - - if c.Enterprise != nil { - identityUID = c.IdentityUID - } - out, err := mActivityInstance.Detail(id, identityUID) + out, err := mActivityInstance.Detail(id, c.UID, c.SelectIdentity) if err != nil { return nil, err @@ -107,10 +94,14 @@ func (c *Activity) Join(id uint64) error { if !mActivityInstance.IsCanJoin() { return errors.New("操作错误,当前活动信息不可报名") } + if c.SelectIdentity <= 0 { + return errors.New("操作错误,当前未选择任何身份信息") + } // 查看当前活动是否报名 var count int64 - if err = model2.Count(model.NewActivityJoin().ActivityJoin, &count, model2.NewWhere("identity_id", c.IdentityUID), + if err = model2.Count(model.NewActivityJoin().ActivityJoin, &count, model2.NewWhere("id", c.UID), + model2.NewWhere("identity", c.SelectIdentity), model2.NewWhere("activity_id", id), model2.NewWhere("status", model2.ActivityJoinStatusForSuccess)); err != nil { return err } @@ -118,16 +109,13 @@ func (c *Activity) Join(id uint64) error { return errors.New("操作错误,不可重复报名") } if mActivityInstance.Amount <= 0 { - service.Publish(config.EventForActivityJoinProduce, c.IdentityUID, c.UID) + service.Publish(config.EventForActivityJoinProduce, id, c.UID, c.SelectIdentity) } return nil } func NewActivity() ActivityHandle { - return func(session *session.Enterprise, local string) *Activity { - return &Activity{ - Enterprise: session, - local: local, - } + return func(session *session.Enterprise) *Activity { + return &Activity{session} } } diff --git a/app/api/website/model/activity_instance.go b/app/api/website/model/activity_instance.go index b48cc7d..72d0e77 100644 --- a/app/api/website/model/activity_instance.go +++ b/app/api/website/model/activity_instance.go @@ -29,14 +29,14 @@ type ( ) // Activity 活动信息 -func (m *ActivityInstance) Activity(uid uint64, page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*ActivityInstanceInfo, error) { +func (m *ActivityInstance) Activity(uid uint64, identity, page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*ActivityInstanceInfo, error) { mActivityJoin := model.NewActivityJoin() db := orm.GetDB().Table(m.TableName()+" AS a"). Select("a.id", "a.title", "a.image", "a.begin_at", "a.finish_at", "a.join_deadline", "IFNULL(u.id, 0) AS join_id", "j.count AS join_count"). - Joins(fmt.Sprintf("LEFT JOIN %s u ON a.id = u.activity_id AND u.identity_uid = %d AND u.status = %d AND u.is_deleted = %d", - mActivityJoin.TableName(), uid, model.ActivityJoinStatusForSuccess, model.DeleteStatusForNot)). + Joins(fmt.Sprintf("LEFT JOIN %s u ON a.id = u.activity_id AND u.uid = %d AND u.identity = %d AND u.status = %d AND u.is_deleted = %d", + mActivityJoin.TableName(), uid, identity, model.ActivityJoinStatusForSuccess, model.DeleteStatusForNot)). Joins(fmt.Sprintf("LEFT JOIN (SELECT activity_id, COUNT(id) AS count FROM %s WHERE status = %d AND is_deleted = %d GROUP BY activity_id) AS j ON a.id = j.activity_id", mActivityJoin.TableName(), model.ActivityJoinStatusForSuccess, model.DeleteStatusForNot)). Where("a.status = ?", model.ActivityInstanceStatusForShow). @@ -59,14 +59,14 @@ func (m *ActivityInstance) Activity(uid uint64, page, pageSize int, count *int64 } // Detail 详细信息 -func (m *ActivityInstance) Detail(id, uid uint64) (*ActivityInstanceDetail, error) { +func (m *ActivityInstance) Detail(id, uid uint64, identity int) (*ActivityInstanceDetail, error) { mActivityJoin := model.NewActivityJoin() db := orm.GetDB().Table(m.TableName()+" AS a"). Select("a.id", "a.title", "a.image", "a.begin_at", "a.finish_at", "a.join_deadline", "IFNULL(u.id, 0) AS join_id", "j.count AS join_count"). - Joins(fmt.Sprintf("LEFT JOIN %s u ON a.id = u.activity_id AND u.identity_uid = %d AND u.status = %d AND u.is_deleted = %d", - mActivityJoin.TableName(), uid, model.ActivityJoinStatusForSuccess, model.DeleteStatusForNot)). + Joins(fmt.Sprintf("LEFT JOIN %s u ON a.id = u.activity_id AND u.uid = %d AND u.identity = %d AND u.status = %d AND u.is_deleted = %d", + mActivityJoin.TableName(), uid, identity, model.ActivityJoinStatusForSuccess, model.DeleteStatusForNot)). Joins(fmt.Sprintf("LEFT JOIN (SELECT activity_id, COUNT(id) AS count FROM %s WHERE status = %d AND is_deleted = %d GROUP BY activity_id) AS j ON a.id = j.activity_id", mActivityJoin.TableName(), model.ActivityJoinStatusForSuccess, model.DeleteStatusForNot)). Where("a.id = ?", id) diff --git a/app/event/activity.go b/app/event/activity.go index b2a662f..17ed6bc 100644 --- a/app/event/activity.go +++ b/app/event/activity.go @@ -6,8 +6,9 @@ type ActivityJoin struct{} func (*ActivityJoin) Handle(arg ...interface{}) { _ = model.Create(&model.ActivityJoin{ - //IdentityUID: arg[0].(uint64), - ActivityID: arg[1].(uint64), + ActivityID: arg[0].(uint64), + UID: arg[1].(uint64), + Identity: arg[2].(int), Status: model.ActivityJoinStatusForSuccess, }) } diff --git a/app/session/enterprise.go b/app/session/enterprise.go index 259d07a..de830e3 100644 --- a/app/session/enterprise.go +++ b/app/session/enterprise.go @@ -18,7 +18,7 @@ type Enterprise struct { VipStatus bool `json:"vip_status"` // VIP状态 VipDeadline time.Time `json:"vip_deadline"` // VIP过期时间 Currency float64 `json:"currency"` // 货币-创新币 - Identity int `json:"identity"` // 总身份信息 + Identity int `json:"identity"` // 身份合集信息 SelectIdentity int `json:"select_identity"` // 选中身份信息 } diff --git a/utils/regexp.go b/utils/regexp.go index 84d1821..6519806 100644 --- a/utils/regexp.go +++ b/utils/regexp.go @@ -14,8 +14,9 @@ func ValidateEmail(email string) bool { return reg.MatchString(email) } -func ValidateUrl(url string) { - //reg := regexp.MustCompile("^([hH][tT]{2}[pP]:|||[hH][tT]{2}[pP][sS]:|www\.)(([A-Za-z0-9-~]+)\.)+([A-Za-z0-9-~\/])+$") +func ValidateUrl(obj string) bool { + reg := regexp.MustCompile("^(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]") + return reg.MatchString(obj) } func ValidateIDCard(obj string) bool { diff --git a/utils/regexp_test.go b/utils/regexp_test.go index eac85c2..3829cff 100644 --- a/utils/regexp_test.go +++ b/utils/regexp_test.go @@ -45,9 +45,13 @@ func TestValidateCompile(t *testing.T) { //status := ValidateCompile(src, compile) //t.Log(status) - src := "htt2ps:2134" + //src := "htt2ps:2134" + //t.Log(src) + //compile := "^(http|https):" + //status := ValidateCompile(src, compile) + //t.Log(status) + src := "http://213213213213" t.Log(src) - compile := "^(http|https):" - status := ValidateCompile(src, compile) + status := ValidateUrl(src) t.Log(status) }