| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- package typeManage
- import (
- "errors"
- "fmt"
- "gorm.io/gorm"
- "log-server/global"
- "log-server/model/common/request"
- "log-server/model/typeManage"
- )
- type LoginTypeService struct {}
- //创建登录类型
- func (l *LoginTypeService) CreateLoginType(login typeManage.LoginType) (err error) {
- //查找是否有同名登录名称
- err = global.GVA_DB.Table("login_type").Where("login_name = ?", login.LoginName).First(&typeManage.LoginType{}).Error
- if !errors.Is(err, gorm.ErrRecordNotFound){
- //找到同名登录名称
- return errors.New("已存在相同登录方式,请勿重复添加")
- }
- return global.GVA_DB.Table("login_type").Omit("create_time", "update_time").Create(&login).Error
- }
- //单个删除
- func (l *LoginTypeService) DeleteLoginType(login typeManage.LoginType) (err error) {
- //单个删除的时候实例化一个实体
- //为什么实例化一个实体,推测是以求保险
- //先用这个实体接收合适的id值所对应的记录,再直接删除这个实体,防止误操作
- var entity typeManage.LoginType
- //查询是否有这条记录存在
- err = global.GVA_DB.Table("login_type").Where("id = ?", login.Id).First(&entity).Error
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return err
- }
- return global.GVA_DB.Table("login_type").Delete(&entity).Error
- }
- //批量删除
- func (l *LoginTypeService) DeleteLoginTypesByIds(ids request.IdsReq) (err error) {
- err = global.GVA_DB.Table("login_type").Delete(&[]typeManage.LoginType{}, "id in ?", ids.Ids).Error
- return err
- }
- //更改登录类型
- func (l *LoginTypeService) UpdateLoginType(login typeManage.LoginType) (err error) {
- err = global.GVA_DB.Table("login_type").Where("id != ? and login_name = ?", login.Id, login.LoginName).First(&typeManage.LoginType{}).Error
- if !errors.Is(err, gorm.ErrRecordNotFound) {
- return errors.New("已存在同名登录方式,修改失败")
- }
- return global.GVA_DB.Table("login_type").Updates(&login).Error
- }
- //通过id查询单个登录类型
- func (l *LoginTypeService) GetLoginTypeById(id int) (loginType typeManage.LoginType, err error) {
- err = global.GVA_DB.Table("login_type").Where("id = ?", id).First(&loginType).Error
- return
- }
- //条件查询
- func (l *LoginTypeService) GetLoginType(loginType typeManage.LoginType, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
- //先求offset和limit
- limit := info.PageSize
- offset := (info.Page - 1) * info.PageSize
- //先更新游戏数量的值
- global.GVA_DB.Exec("update `login_type` lt set game_counts = (SELECT COUNT(gl.login_type) FROM game_list gl WHERE lt.login_name = gl.login_type);")
- //确定操作的model
- db := global.GVA_DB.Table("login_type").Model(&typeManage.LoginType{})
- var loginList []typeManage.LoginType
- //先过滤(查询条件)再排序
- if loginType.LoginName != "" {
- db.Where("login_name like ?", "%"+loginType.LoginName+"%")
- }
- //记录总数
- if err = db.Count(&total).Error;err != nil {
- //没有复合条件,直接返回
- return loginList, total, err
- } else {
- //如果有符合条件的,先分页,再排序
- db.Limit(limit).Offset(offset)
- if order != "" {
- //传入排序字段,为避免sql注入,需要一个数组
- var orderStr string
- orderMap := make(map[string]bool, 5)
- orderMap["login_name"] = true
- orderMap["display_sequence"] = true
- orderMap["game_counts"] = true
- orderMap["create_time"] = true
- orderMap["update_time"] = true
- //传入字符串在合法范围内
- if orderMap[order] {
- if desc {
- orderStr = order + " desc"
- } else {
- orderStr = order
- }
- } else {
- //传入排序字段非法
- err = fmt.Errorf("传入非法字段 %v", order)
- return loginList, total, err
- }
- err = db.Order(orderStr).Find(&loginList).Error
- } else {
- //未传入排序字段,默认按登录名称降序
- err = db.Order("login_name desc").Find(&loginList).Error
- }
- }
- return loginList, total, err
- }
|