sys_user.go 7.33 KB
Newer Older
haoyanbin's avatar
1  
haoyanbin committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
package service

import (
	"errors"
	"gin-vue-admin/global"
	"gin-vue-admin/model"
	"gin-vue-admin/model/request"
	"gin-vue-admin/utils"
	uuid "github.com/satori/go.uuid"
	"gorm.io/gorm"
	"strconv"
)

//@author: [piexlmax](https://github.com/piexlmax)
//@function: Register
//@description: 运营端注册
//@param: u model.SysUser
//@return: err error, userInter model.SysUser

func Register(u model.SysUser) (err error, userInter model.SysUser) {
	var user model.SysUser
	if !errors.Is(global.GVA_DB.Where("mobile = ?", u.Mobile).First(&user).Error, gorm.ErrRecordNotFound) { // 判断用户名是否注册
		return errors.New("用户名已注册"), userInter
	}
	// 否则 附加uuid 密码md5简单加密 注册
	u.Password = utils.MD5V([]byte(u.Password))
	u.UUID = uuid.NewV4()
	u.IsManager = 1
	err = global.GVA_DB.Create(&u).Error
	return err, u
}

//@author: [piexlmax](https://github.com/piexlmax)
//@function: Login
//@description: 用户登录
//@param: u *model.SysUser
//@return: err error, userInter *model.SysUser

func Login(u *model.SysUser) (err error, userInter *model.SysUser) {
	var user model.SysUser
	u.Password = utils.MD5V([]byte(u.Password))
	err = global.GVA_DB.Where("mobile = ? AND password = ? AND is_manager=1", u.Mobile, u.Password).Preload("Authority").First(&user).Error
	return err, &user
}

//@author: [piexlmax](https://github.com/piexlmax)
//@function: ChangePassword
//@description: 修改用户密码
//@param: u *model.SysUser, newPassword string
//@return: err error, userInter *model.SysUser

func ChangePassword(u *model.SysUser, newPassword string) (err error, userInter *model.SysUser) {
	var user model.SysUser
	u.Password = utils.MD5V([]byte(u.Password))
	err = global.GVA_DB.Where("mobile = ? AND password = ?", u.Mobile, u.Password).First(&user).Update("password", utils.MD5V([]byte(newPassword))).Error
	return err, u
}

//@author: [piexlmax](https://github.com/piexlmax)
//@function: GetUserInfoList
//@description: 分页获取数据
//@param: info request.PageInfo
//@return: err error, list interface{}, total int64

func GetUserInfoList(info request.PageInfo) (err error, list interface{}, total int64) {
	limit := info.PageSize
	offset := info.PageSize * (info.Page - 1)
	db := global.GVA_DB.Model(&model.SysUser{})
	var userList []model.SysUser
	err = db.Count(&total).Error
	err = db.Where("is_manager=1").Limit(limit).Offset(offset).Preload("Authority").Find(&userList).Error
	return err, userList, total
}

//@author: [piexlmax](https://github.com/piexlmax)
//@function: SetUserAuthority
//@description: 设置一个用户的权限
//@param: uuid uuid.UUID, authorityId string
//@return: err error

func SetUserAuthority(uuid uuid.UUID, authorityId string) (err error) {
	err = global.GVA_DB.Where("uuid = ?", uuid).First(&model.SysUser{}).Update("authority_id", authorityId).Error
	return err
}

//@author: [piexlmax](https://github.com/piexlmax)
//@function: DeleteUser
//@description: 删除用户
//@param: id float64
//@return: err error

func DeleteUser(id float64) (err error) {
	var user model.SysUser
	err = global.GVA_DB.Where("id = ?", id).Delete(&user).Error
	return err
}

//@author: [piexlmax](https://github.com/piexlmax)
//@function: SetUserInfo
//@description: 设置用户信息
//@param: reqUser model.SysUser
//@return: err error, user model.SysUser

func SetUserInfo(reqUser model.SysUser) (err error, user model.SysUser) {
	err = global.GVA_DB.Updates(&reqUser).Error
	return err, reqUser
}

//@author: [SliverHorn](https://github.com/SliverHorn)
//@function: FindUserById
//@description: 通过id获取用户信息
//@param: id int
//@return: err error, user *model.SysUser

func FindUserById(id int) (err error, user *model.SysUser) {
	var u model.SysUser
	err = global.GVA_DB.Where("`id` = ?", id).First(&u).Error
	return err, &u
}

//@author: [SliverHorn](https://github.com/SliverHorn)
//@function: FindUserByUuid
//@description: 通过uuid获取用户信息
//@param: uuid string
//@return: err error, user *model.SysUser

func FindUserByUuid(uuid string) (err error, user *model.SysUser) {
	var u model.SysUser
	if err = global.GVA_DB.Where("`uuid` = ?", uuid).First(&u).Error; err != nil {
		return errors.New("用户不存在"), &u
	}
	return nil, &u
}

func GetMobileUserList(req request.GetMobileUserListReq) (err error, list []request.GetMobileUserListReply, total int64) {
	pagesize := 10
	page := 1
	if req.PageSize != 0 {
		pagesize = req.PageSize
	}
	if req.Page != 0 {
		page = req.Page
	}
	currentpage := pagesize * (page - 1)

	table := " sys_users as su " +
		" left join sys_user_authe as sua on su.id = sua.user_id and sua.delflag=0 " +
		" LEFT JOIN region as r on sua.hospital_province=r.region_id " +
		" LEFT JOIN region as r2 on sua.hospital_city=r2.region_id " +
		" LEFT JOIN region as r3 on sua.hospital_county=r3.region_id " +
		" LEFT JOIN vip_user as vu on su.id=vu.user_id "
	field := " su.id, su.mobile, su.created_at, su.nick_name, sua.name, sua.phone, sua.working_years" +
		", sua.working_place, sua.position, r.region_name as province_name, r2.region_name as city_name" +
		", r3.region_name as county_name, sua.hospital_address, vu.update_time, vu.maturity_time" +
		", vu.vip_level "
	conditions := " AND su.deleted_at is null "
	orderby := " su.created_at desc, su.id desc"

	if req.Mobile != "" {
		conditions += " AND su.mobile like '%" + req.Mobile + "%' "
	}

	if req.StartCreatedAt != "" {
		conditions += " AND su.created_at >'" + req.StartCreatedAt + "'"
	}

	if req.EndCreatedAt != "" {
		conditions += " AND su.created_at <='" + utils.REndDate(req.EndCreatedAt) + "'"
	}

	if req.IsManager != "" {
		conditions += " AND su.is_manager = " + req.IsManager
	}

	if req.AuthorityId != "" {
		conditions += " AND su.authority_id = " + req.AuthorityId
	}

	if req.UserType != "" {
		conditions += " AND su.user_type = " + req.UserType
	}

	data := []request.GetMobileUserListReply{}

	//@@总条数,总页数
	var totalItem int64 = 0

	sqlStr := "SELECT count(su.id) as totalItem FROM " + table + " where 1=1 " + conditions
	global.GVA_DB.Raw(sqlStr).Count(&totalItem) //获取总条数

	//table += " left join (select thumb_cos_path, studyuid from study_image_store group by studyuid)as si on rm.studyuid=si.studyuid "
	//field += ", thumb_cos_path "
	sqlStr2 := "SELECT " + field +
		" FROM " + table +
		" where 1>0 " + conditions +
		" ORDER BY " + orderby +
		" LIMIT " + strconv.Itoa(currentpage) + "," + strconv.Itoa(pagesize)

	global.GVA_DB.Raw(sqlStr2).Scan(&data)

	return err, data, totalItem
}

func GetMobileUserInfo(id string) (error, *request.GetMobileUserListReply) {

	table := " sys_users as su " +
		" left join sys_user_authe as sua on su.id = sua.user_id and sua.delflag=0 " +
		" LEFT JOIN region as r on sua.hospital_province=r.region_id " +
		" LEFT JOIN region as r2 on sua.hospital_city=r2.region_id " +
		" LEFT JOIN region as r3 on sua.hospital_county=r3.region_id " +
		" LEFT JOIN vip_user as vu on su.id=vu.user_id "
	field := " su.id, su.mobile, su.created_at, sua.name, sua.phone, sua.working_years" +
		", sua.working_place, sua.position, r.region_name as province_name, r2.region_name as city_name" +
		", r3.region_name as county_name, sua.hospital_address, vu.update_time, vu.maturity_time" +
		", vu.vip_level "
	conditions := " AND su.id = " + id

	data := new(request.GetMobileUserListReply)

	sqlStr2 := "SELECT " + field +
		" FROM " + table +
		" where 1>0 " + conditions

	global.GVA_DB.Raw(sqlStr2).Find(&data)

	return nil, data
}