✨ Init
This commit is contained in:
		
							
								
								
									
										104
									
								
								service/app/base.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								service/app/base.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"gorm.io/gorm"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// 分页组件
 | 
			
		||||
func Page(current, size int) func(db *gorm.DB) *gorm.DB {
 | 
			
		||||
	return func(db *gorm.DB) *gorm.DB {
 | 
			
		||||
		if current == 0 {
 | 
			
		||||
			current = 1
 | 
			
		||||
		}
 | 
			
		||||
		if size < 1 {
 | 
			
		||||
			size = 10
 | 
			
		||||
		}
 | 
			
		||||
		// 计算偏移量
 | 
			
		||||
		offset := (current - 1) * size
 | 
			
		||||
		// 返回组装结果
 | 
			
		||||
		return db.Offset(offset).Limit(size)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// @title updateSortBefore
 | 
			
		||||
// @description 更新之前处理序号
 | 
			
		||||
// @param tx *gorm.DB "已开启的事务对象"
 | 
			
		||||
// @param model any "模型对象"
 | 
			
		||||
// @return error "错误信息"
 | 
			
		||||
func updateSortBefore(tx *gorm.DB, tableName, id string, sort int, param string) (err error) {
 | 
			
		||||
	// 查出原来的排序号
 | 
			
		||||
	var oldSort int
 | 
			
		||||
	err = tx.Table(tableName).Select("sort").Where("id = ?", id).Scan(&oldSort).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("查询老数据失败: %v", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 如果相等,啥都不干
 | 
			
		||||
	if oldSort == sort {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	// 处理排序
 | 
			
		||||
	// 如果老的排序号小于新的,(老, 新]之间的排序号都要-1
 | 
			
		||||
	// 如果老的大于新的,[老, 新)排序号-1
 | 
			
		||||
	if oldSort < sort {
 | 
			
		||||
		// 老的小于新的,[老, 新) + 1
 | 
			
		||||
		sel := tx.Table(tableName).
 | 
			
		||||
			Where("sort <= ? AND sort > ?", sort, oldSort).
 | 
			
		||||
			Where("deleted_at IS NULL")
 | 
			
		||||
		if param != "" {
 | 
			
		||||
			sel.Where(param) // 自定义条件
 | 
			
		||||
		}
 | 
			
		||||
		err = sel.Update("sort", gorm.Expr("sort - 1")).Error
 | 
			
		||||
	} else {
 | 
			
		||||
		// 老的大于新的,[新, 老) + 1
 | 
			
		||||
		sel := tx.Table(tableName).
 | 
			
		||||
			Where("sort >= ? AND sort < ?", sort, oldSort).
 | 
			
		||||
			Where("deleted_at IS NULL")
 | 
			
		||||
		if param != "" {
 | 
			
		||||
			sel.Where(param) // 自定义条件
 | 
			
		||||
		}
 | 
			
		||||
		err = sel.Update("sort", gorm.Expr("sort + 1")).Error
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// @title createSortBefore
 | 
			
		||||
// @description 新建之前处理序号
 | 
			
		||||
// @param tx *gorm.DB "已开启的事务对象"
 | 
			
		||||
// @param model any "模型对象"
 | 
			
		||||
// @return error "错误信息"
 | 
			
		||||
func createSortBefore(tx *gorm.DB, tableName string, sort int, param string) (err error) {
 | 
			
		||||
	// 处理排序,如果没有传,就会是在最前面
 | 
			
		||||
	sel := tx.Table(tableName).Where("sort >= ?", sort).
 | 
			
		||||
		Where("deleted_at IS NULL")
 | 
			
		||||
	if param != "" {
 | 
			
		||||
		sel.Where(param)
 | 
			
		||||
	}
 | 
			
		||||
	err = sel.Update("sort", gorm.Expr("sort + 1")).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("处理前置排序失败:%v", zap.Error(err))
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// @title dealSortAfter
 | 
			
		||||
// @description 处理序号之后
 | 
			
		||||
// @param tx *gorm.DB "已开启的事务对象"
 | 
			
		||||
// @param modelName string "表名"
 | 
			
		||||
// @return error "错误信息"
 | 
			
		||||
func dealSortAfter(tx *gorm.DB, modelName, param string) (err error) {
 | 
			
		||||
	// 保存成功,刷新排序
 | 
			
		||||
	if param != "" {
 | 
			
		||||
		param += " AND "
 | 
			
		||||
	}
 | 
			
		||||
	sql := fmt.Sprintf("UPDATE %s a, (SELECT (@i := @i + 1) i, id FROM %s WHERE %s deleted_at IS NULL order by sort ASC) i, "+
 | 
			
		||||
		"(SELECT @i := 0) ir SET a.sort = i.i, updated_at=now() WHERE a.id = i.id", modelName, modelName, param)
 | 
			
		||||
	err = tx.Exec(sql).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("刷新排序失败: %v", zap.Error(err))
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										9
									
								
								service/app/enter.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								service/app/enter.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
type ServiceGroup struct {
 | 
			
		||||
	Oauth2ClientService
 | 
			
		||||
	UserService
 | 
			
		||||
	FavoriteService
 | 
			
		||||
	VisionService
 | 
			
		||||
	TodesService
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								service/app/favorite.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								service/app/favorite.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/app"
 | 
			
		||||
	"miniapp/model/app/request"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type FavoriteService struct{}
 | 
			
		||||
 | 
			
		||||
// GetFavoriteList 获取收藏列表
 | 
			
		||||
func (f *FavoriteService) GetFavoriteList(p request.GetFavoriteList) (err error, list []app.Favorite, total int64) {
 | 
			
		||||
	limit := p.PageSize
 | 
			
		||||
	offset := p.PageSize * (p.Page - 1)
 | 
			
		||||
	db := global.GVA_DB.Model(&app.Favorite{}).Where("user_id = ?", p.UserId)
 | 
			
		||||
	err = db.Count(&total).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = db.Limit(limit).Offset(offset).Find(&list).Error
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateFavorite 创建收藏
 | 
			
		||||
func (f *FavoriteService) CreateFavorite(favorite *app.Favorite) (err error) {
 | 
			
		||||
	err = global.GVA_DB.Create(&favorite).Error
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteFavorite 删除收藏
 | 
			
		||||
func (f *FavoriteService) DeleteFavorite(favorite *app.Favorite) (err error) {
 | 
			
		||||
	err = global.GVA_DB.Delete(&favorite).Error
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								service/app/oauth2_client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								service/app/oauth2_client.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/app"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Oauth2ClientService struct{}
 | 
			
		||||
 | 
			
		||||
// FinAll 查询所有客户端
 | 
			
		||||
func (o *Oauth2ClientService) FinAll(clients *[]app.OAuth2Client) error {
 | 
			
		||||
	return global.GVA_DB.Find(&clients).Error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindOne 查询某一个
 | 
			
		||||
func (o *Oauth2ClientService) FindOne(c *app.OAuth2Client) error {
 | 
			
		||||
	return global.GVA_DB.Take(&c, c).Error
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								service/app/todes.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								service/app/todes.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type TodesService struct{}
 | 
			
		||||
 | 
			
		||||
func (t TodesService) GetUserTodos(userId uint) (list []common.UserTodo, err error) {
 | 
			
		||||
	err = global.GVA_DB.Where("user_id = ?", userId).Find(&list).Error
 | 
			
		||||
	return
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t TodesService) UpdateTodoById(c *common.UserTodo) error {
 | 
			
		||||
 | 
			
		||||
	return global.GVA_DB.Table("t_user_todo").Where("id = ?", c.ID).Update("is_finish", c.IsFinish).Error
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										156
									
								
								service/app/user.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								service/app/user.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,156 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"github.com/duke-git/lancet/v2/datetime"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"gorm.io/gorm"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/app"
 | 
			
		||||
	"miniapp/model/app/request"
 | 
			
		||||
	"miniapp/model/app/response"
 | 
			
		||||
	"miniapp/model/common"
 | 
			
		||||
	"miniapp/model/types"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UserService struct{}
 | 
			
		||||
 | 
			
		||||
func (UserService) GetUser(user *app.User) (err error) {
 | 
			
		||||
	return global.GVA_DB.Take(&user, user).Error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (UserService) GetOrCreate(user *app.User) (err error) {
 | 
			
		||||
	//err = global.GVA_DB.Take(&user, user).Error
 | 
			
		||||
	err = global.GVA_DB.Model(&user).Where("phone = ?", user.Phone).First(&user).Error
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 如果是没查询到记录,则创建用户
 | 
			
		||||
	if err == gorm.ErrRecordNotFound {
 | 
			
		||||
		// 用户不存在,创建用户
 | 
			
		||||
		if err = global.GVA_DB.Create(&user).Error; err != nil {
 | 
			
		||||
			global.GVA_LOG.Error("账号创建失败: %v", zap.Error(err))
 | 
			
		||||
			err = errors.New("登录失败")
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CheckUnionIdIsExist 检查UnionId和OpenId是否存在
 | 
			
		||||
func (UserService) CheckUnionIdIsExist(unionId, openId string) bool {
 | 
			
		||||
	var count int64
 | 
			
		||||
	err := global.GVA_DB.Model(&app.User{}).Where("wechat_union_id = ? and wechat_open_id = ?", unionId, openId).Count(&count).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	return count > 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateUserInfo 更新普通用户信息
 | 
			
		||||
func (UserService) UpdateUserInfo(e *app.User) (err error) {
 | 
			
		||||
	return global.GVA_DB.Updates(&e).Error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetAverageUserList 查询普通用户列表
 | 
			
		||||
func (UserService) GetAverageUserList(p request.GetUserList) (records []response.UserItem, count int64, err error) {
 | 
			
		||||
	tx := global.GVA_DB.Scopes(Page(p.Page, p.PageSize)).
 | 
			
		||||
		Table("`t_user` AS tu").
 | 
			
		||||
		Select("tu.id AS id,tu.avatar AS avatar,tu.phone AS phone,tu.nickname AS nickname,tu.sex AS sex,tu.created_at AS created_at,tu.last_login_at AS last_login_at,tu.`status` AS `status`").
 | 
			
		||||
		Order("tu.last_login_at DESC")
 | 
			
		||||
 | 
			
		||||
	if p.Phone != "" {
 | 
			
		||||
		tx = tx.Where("tu.phone LIKE ?", "%"+p.Phone+"%")
 | 
			
		||||
	}
 | 
			
		||||
	//加一个姓名的模糊查询
 | 
			
		||||
	if p.Name != "" {
 | 
			
		||||
		tx = tx.Where("tu.nickname LIKE ?", "&"+p.Name+"%")
 | 
			
		||||
	}
 | 
			
		||||
	if p.Status != "" {
 | 
			
		||||
		tx = tx.Where("tu.`status` = ?", p.Status)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if p.StartAt != "" || p.EndAt != "" {
 | 
			
		||||
		start := time.Date(2021, 1, 1, 0, 0, 0, 0, time.Local)
 | 
			
		||||
		end := time.Now()
 | 
			
		||||
		// 处理数据
 | 
			
		||||
		if p.StartAt != "" {
 | 
			
		||||
			st, err := datetime.FormatStrToTime(p.StartAt, "yyyy-mm-dd")
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				global.GVA_LOG.Error("解析开始时间异常")
 | 
			
		||||
				return nil, 0, errors.New("解析开始时间异常")
 | 
			
		||||
			}
 | 
			
		||||
			start = datetime.BeginOfDay(st)
 | 
			
		||||
		}
 | 
			
		||||
		if p.EndAt != "" {
 | 
			
		||||
			et, err := datetime.FormatStrToTime(p.EndAt, "yyyy-mm-dd")
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				global.GVA_LOG.Error("解析结束时间异常")
 | 
			
		||||
				return nil, 0, errors.New("解析结束时间异常")
 | 
			
		||||
			}
 | 
			
		||||
			end = datetime.EndOfDay(et)
 | 
			
		||||
		}
 | 
			
		||||
		// 处理查询条件
 | 
			
		||||
		tx.Where("tor.pay_at BETWEEN ? AND ?", start, end)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = tx.Offset(-1).Limit(-1).Count(&count).Find(&records).Error
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (UserService) UpdateLastLoginInfo(username int) {
 | 
			
		||||
	now := time.Now().Local()
 | 
			
		||||
 | 
			
		||||
	global.GVA_DB.Model(&app.User{}).
 | 
			
		||||
		Where("id = ?", username).
 | 
			
		||||
		Updates(app.User{LastLoginAt: (*types.DateTime)(&now)})
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateUserHospital 更新用户医院信息
 | 
			
		||||
func (UserService) UpdateUserHospital(r *request.ChangeUserHospital) (err error) {
 | 
			
		||||
 | 
			
		||||
	err = global.GVA_DB.Delete(&common.UserTodo{}, "user_id = ?", r.UserId).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("清除用户Todo列表失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var hospital common.Hospital
 | 
			
		||||
	err = global.GVA_DB.Where("id = ?", r.HospitalId).Preload("Todos").First(&hospital).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取医院信息失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if hospital.Todos != nil {
 | 
			
		||||
		var userTodos []common.UserTodo
 | 
			
		||||
		for _, todo := range hospital.Todos {
 | 
			
		||||
			userTodos = append(userTodos, common.UserTodo{
 | 
			
		||||
				Content:  todo.Content,
 | 
			
		||||
				UserId:   r.UserId,
 | 
			
		||||
				IsFinish: 0,
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
		err = global.GVA_DB.Create(&userTodos).Error
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			global.GVA_LOG.Error("创建用户Todo列表失败", zap.Error(err))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s UserService) GetUserInfo(id string) (user response.UserVO, err error) {
 | 
			
		||||
	var u app.User
 | 
			
		||||
	err = global.GVA_DB.Where("id = ?", id).First(&u).Error
 | 
			
		||||
	user.ParseOrdinary(u)
 | 
			
		||||
 | 
			
		||||
	if u.IsSurgery == 1 {
 | 
			
		||||
		user.TimeNote = "距离下次复查时间还剩:"
 | 
			
		||||
	} else {
 | 
			
		||||
		user.TimeNote = "距离手术时间还剩:"
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								service/app/vision.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								service/app/vision.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/app"
 | 
			
		||||
	"miniapp/model/app/request"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type VisionService struct{}
 | 
			
		||||
 | 
			
		||||
func (s *VisionService) GetVisionList(p request.VisionListRequest) (list *[]app.Vision, total int64, err error) {
 | 
			
		||||
	limit := p.PageSize
 | 
			
		||||
	offset := p.PageSize * (p.Page - 1)
 | 
			
		||||
	db := global.GVA_DB.Model(&app.Vision{}).Where("user_id = ?", p.UserId)
 | 
			
		||||
	err = db.Count(&total).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = db.Limit(limit).Offset(offset).Find(&list).Error
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *VisionService) CreateVision(vision *app.Vision) (err error) {
 | 
			
		||||
	err = global.GVA_DB.Create(&vision).Error
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user