family.go 4.8 KB
Newer Older
chenweijian's avatar
chenweijian committed
1 2 3 4 5
package groupPower_m

import (
	"git.hilo.cn/hilo-common/domain"
	"gorm.io/gorm"
chenweijian's avatar
chenweijian committed
6
	"hilo-group/_const/enum/groupPower_e"
chenweijian's avatar
chenweijian committed
7
	"hilo-group/common"
chenweijian's avatar
chenweijian committed
8
	"hilo-group/common/utime"
chenweijian's avatar
chenweijian committed
9 10
	"hilo-group/myerr"
	"hilo-group/myerr/bizerr"
chenweijian's avatar
chenweijian committed
11 12 13
	"time"
)

hujiebin's avatar
hujiebin committed
14 15 16 17 18 19
//type GroupPowerGrade struct {
//	GroupPowerId uint64    `json:"group_power_id"`
//	Exp          int64     `json:"exp"`
//	Grade        int32     `json:"grade"`
//	ExpireAt     time.Time `json:"expire_at"`
//}
chenweijian's avatar
chenweijian committed
20

chenweijian's avatar
chenweijian committed
21
type GroupPowerQuitLog struct {
chenweijian's avatar
chenweijian committed
22 23 24 25 26
	Id           uint64    `json:"id"`
	UserId       uint64    `json:"user_id"`
	MgrId        uint64    `json:"mgr_id"`
	CreatedTime  time.Time `json:"created_time"`
	GroupPowerId uint64    `json:"group_power_id"`
chenweijian's avatar
chenweijian committed
27 28
}

chenweijian's avatar
chenweijian committed
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
func (this *GroupPower) Get(model *domain.Model) (*GroupPower, error) {
	group := new(GroupPower)
	err := model.Db.Where(this).First(&group).Error
	if err != nil {
		if err == gorm.ErrRecordNotFound {
			return nil, nil
		}
		return nil, err
	}
	grade := new(GroupPowerGrade)
	err = model.Db.Model(&GroupPowerGrade{}).Where("group_power_id=? and expire_at > ?", this.ID, time.Now().Format(utime.Layout)).First(&grade).Error
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, err
	}
	return group, nil
}

chenweijian's avatar
chenweijian committed
46
func (gpu *GroupPowerUser) GetBy(model *domain.Model, pageSize, pageIndex int) ([]*GroupPowerUser, int64, int, bool, error) {
chenweijian's avatar
chenweijian committed
47
	rows := make([]*GroupPowerUser, 0)
chenweijian's avatar
chenweijian committed
48
	db := model.Db.Model(GroupPowerUser{}).Where(gpu).Order("field(`role`, 2, 3, 1)")
chenweijian's avatar
chenweijian committed
49 50
	var count int64
	err := db.Count(&count).Error
chenweijian's avatar
chenweijian committed
51
	if err != nil {
chenweijian's avatar
chenweijian committed
52
		return nil, 0, 0, false, err
chenweijian's avatar
chenweijian committed
53
	}
chenweijian's avatar
chenweijian committed
54
	err = db.Limit(pageSize).Offset(pageIndex).Find(&rows).Error
chenweijian's avatar
chenweijian committed
55
	if err != nil {
chenweijian's avatar
chenweijian committed
56
		return nil, 0, 0, false, err
chenweijian's avatar
chenweijian committed
57
	}
chenweijian's avatar
chenweijian committed
58
	nextPageIndex, hasNextPage := common.PageNext(count, pageIndex, pageSize)
chenweijian's avatar
chenweijian committed
59
	return rows, count, nextPageIndex, hasNextPage, nil
chenweijian's avatar
chenweijian committed
60
}
chenweijian's avatar
chenweijian committed
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

func (gpu *GroupPowerUser) GetGroupPowerUser(model *domain.Model) (*GroupPowerUser, error) {
	rows := make([]*GroupPowerUser, 0)
	err := model.Db.Where(gpu).Find(&rows).Error
	if err != nil {
		return nil, err
	}
	if len(rows) == 0 {
		return nil, nil
	}
	return rows[0], nil
}

func (gpu *GroupPowerUser) Create(db *gorm.DB) error {
	return db.Create(gpu).Error
}
chenweijian's avatar
chenweijian committed
77 78 79 80 81 82 83

func QuitFamily(model *domain.Model, userId, mgrId, familyId uint64) error {
	err := model.Db.Exec("delete from group_power_user where group_power_id = ? and user_id = ?", familyId, userId).Error
	if err != nil {
		return err
	}
	// log
chenweijian's avatar
chenweijian committed
84
	log := &GroupPowerQuitLog{UserId: userId, MgrId: mgrId, GroupPowerId: familyId, CreatedTime: time.Now()}
chenweijian's avatar
chenweijian committed
85 86
	return model.Db.Create(log).Error
}
chenweijian's avatar
chenweijian committed
87 88 89 90 91 92 93 94 95

func GroupPowerQuitList(model *domain.Model, familyId uint64, pageSize, pageIndex int) ([]*GroupPowerQuitLog, int, bool, error) {
	rows := make([]*GroupPowerQuitLog, 0)
	db := model.Db.Model(GroupPowerQuitLog{}).Where("group_power_id = ?", familyId).Order("created_time desc")
	var count int64
	err := db.Count(&count).Error
	if err != nil {
		return nil, 0, false, err
	}
chenweijian's avatar
chenweijian committed
96
	err = db.Limit(pageSize).Offset(pageIndex).Find(&rows).Error
chenweijian's avatar
chenweijian committed
97 98 99 100 101 102
	if err != nil {
		return nil, 0, false, err
	}
	nextIdx, hasNext := common.PageNext(count, pageIndex, pageSize)
	return rows, nextIdx, hasNext, nil
}
chenweijian's avatar
chenweijian committed
103 104 105 106 107 108 109 110

func UpdateFamilyAdmin(model *domain.Model, userId, familyId uint64, role groupPower_e.GroupPowerUserRole) error {
	err := model.Db.Exec("update group_power_user set role = ? where group_power_id = ? and user_id = ?", role, familyId, userId).Error
	if err != nil {
		return err
	}
	return nil
}
chenweijian's avatar
chenweijian committed
111 112 113 114 115

func UpdateFamily(model *domain.Model, familyId uint64, name, nameplate, declaration, icon string) error {
	if familyId == 0 || (name == "" && nameplate == "" && declaration == "" && icon == "") {
		return nil
	}
chenweijian's avatar
chenweijian committed
116 117 118 119 120 121 122 123 124 125 126 127
	// 修改铭牌
	if nameplate != "" {
		sql := "UPDATE `group_power` a left join (SELECT ? `id` FROM group_power WHERE nameplate = ?) b on a.id = b.id SET a.`nameplate`=? where a.id=? and b.id is null;"
		result := model.Db.Exec(sql, familyId, nameplate, nameplate, familyId)
		if result.Error != nil {
			return myerr.WrapErr(result.Error)
		}
		if result.RowsAffected <= 0 {
			return myerr.WrapErr(bizerr.GroupPowerHaveChangeInfo)
		}
		return nil
	}
chenweijian's avatar
chenweijian committed
128 129 130 131 132 133 134 135 136 137 138
	db := model.Db.Model(GroupPower{})
	updateMap := make(map[string]interface{})
	if name != "" {
		updateMap["name"] = name
	}
	if declaration != "" {
		updateMap["declaration"] = declaration
	}
	if icon != "" {
		updateMap["icon"] = icon
	}
chenweijian's avatar
chenweijian committed
139
	result := db.Where("group_power.id = ?", familyId).Updates(updateMap).Limit(1)
chenweijian's avatar
chenweijian committed
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
	if result.Error != nil {
		return myerr.WrapErr(result.Error)
	}
	if result.RowsAffected <= 0 {
		return myerr.WrapErr(bizerr.GroupPowerHaveChangeInfo)
	}

	return nil
}

func IsExistsNameplate(model *domain.Model, nameplate string) bool {
	var count int64
	err := model.Db.Model(GroupPower{}).Where("nameplate = ?", nameplate).Count(&count).Error
	if err != nil {
		model.Log.Errorf("IsExistsNameplate err:%v, nameplate:%s", err, nameplate)
		return false
	}
	if count > 0 {
		return true
	}
	return false
}