case-api/api/controller/Public.go

414 lines
7.0 KiB
Go

package controller
import (
"case-api/api/dao"
"case-api/api/dto"
"case-api/api/requests"
"case-api/api/responses"
"case-api/api/service"
"case-api/global"
"case-api/utils"
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"strconv"
)
type Public struct{}
// Login 登陆
func (b *Public) Login(c *gin.Context) {
publicRequest := requests.PublicRequest{}
req := publicRequest.Login
if err := c.ShouldBind(&req); err != nil {
c.JSON(http.StatusOK, gin.H{
"message": utils.Translate(err),
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
c.JSON(http.StatusOK, gin.H{
"message": utils.Translate(err),
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
if req.UserIden == "" && req.UnionId == "" && req.Token == "" {
c.JSON(http.StatusOK, gin.H{
"message": "缺少参数",
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
// 检测平台
platformDao := dao.PlatformDao{}
maps := make(map[string]interface{})
maps["platform_key"] = req.PlatformKey
platform, err := platformDao.GetPlatform(maps)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"message": "非法平台",
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
// 检测状态
if platform.PlatformStatus == 2 {
c.JSON(http.StatusOK, gin.H{
"message": "非法平台",
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
// 验证参数
if req.Source == 3 {
if req.ProjectId == "" {
c.JSON(http.StatusOK, gin.H{
"message": "缺少参数:项目标识",
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
if req.MobileEncryption == "" {
c.JSON(http.StatusOK, gin.H{
"message": "缺少参数:手机号",
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
if req.DoctorName == "" {
c.JSON(http.StatusOK, gin.H{
"message": "缺少参数:医生名称",
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
if req.HospitalName == "" {
c.JSON(http.StatusOK, gin.H{
"message": "缺少参数:医院名称",
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
if req.DepartmentName == "" {
c.JSON(http.StatusOK, gin.H{
"message": "缺少参数:科室名称",
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
if req.Address == "" {
c.JSON(http.StatusOK, gin.H{
"message": "缺少参数:地址",
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
if req.UserIden == "" {
c.JSON(http.StatusOK, gin.H{
"message": "缺少参数:用户唯一标识",
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// 获取用户数据-不存在时注册
userService := service.UserService{}
user, err := userService.GetUserInfo(tx, req)
if err != nil {
tx.Rollback()
if req.Source == 2 {
c.JSON(http.StatusOK, gin.H{
"message": "登录失败",
"code": -2,
"data": gin.H{
"source": req.Source,
},
})
return
} else {
c.JSON(http.StatusOK, gin.H{
"message": "登录失败",
"code": -2,
"data": gin.H{
"source": req.Source,
},
})
return
}
}
// 下发token
token := &utils.Token{
UserId: fmt.Sprintf("%d", user.UserId),
PlatformId: fmt.Sprintf("%d", platform.PlatformId),
}
// 生成jwt
jwt, err := token.NewJWT()
if err != nil || jwt == "" {
tx.Rollback()
c.JSON(http.StatusOK, gin.H{
"message": "登陆失败",
"code": -1,
"data": gin.H{
"source": req.Source,
},
})
return
}
g := dto.UserLoginDto(user)
g.LoadToken(jwt)
tx.Commit()
responses.OkWithData(g, c)
}
// LoginProgram Login 登陆-小程序
func (b *Public) LoginProgram(c *gin.Context) {
publicRequest := requests.PublicRequest{}
req := publicRequest.LoginProgram
if err := c.ShouldBind(&req); err != nil {
c.JSON(http.StatusOK, gin.H{
"message": "登录失败",
"code": -2,
"data": gin.H{
"source": 2,
},
})
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
c.JSON(http.StatusOK, gin.H{
"message": "登录失败",
"code": -2,
"data": gin.H{
"source": 2,
},
})
return
}
// 解析token
t, err := utils.ParseJwt(req.Token)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"message": "登录失败",
"code": -2,
"data": gin.H{
"source": 2,
},
})
return
}
// 转换类型
userId, err := strconv.ParseInt(t.UserId, 10, 64)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"message": "登录失败",
"code": -2,
"data": gin.H{
"source": 2,
},
})
return
}
// 获取用户信息
userDao := dao.UserDao{}
maps := make(map[string]interface{})
maps["user_id"] = userId
user, _ := userDao.GetUser(maps)
if user == nil {
c.JSON(http.StatusOK, gin.H{
"message": "登录失败",
"code": -2,
"data": gin.H{
"source": 2,
},
})
return
}
var platformId int
if user.RegisterSource == 2 {
platformId = 1
} else if user.RegisterSource == 3 {
platformId = 2
}
if platformId == 0 {
c.JSON(http.StatusOK, gin.H{
"message": "登录失败",
"code": -2,
"data": gin.H{
"source": 2,
},
})
return
}
// 下发token
token := &utils.Token{
UserId: fmt.Sprintf("%d", user.UserId),
PlatformId: fmt.Sprintf("%d", platformId),
}
// 生成jwt
jwt, err := token.NewJWT()
if err != nil || jwt == "" {
c.JSON(http.StatusOK, gin.H{
"message": "登陆失败",
"code": -1,
"data": gin.H{
"source": 2,
},
})
return
}
g := dto.UserLoginDto(user)
g.LoadToken(jwt)
responses.OkWithData(g, c)
}
func (b *Public) T(c *gin.Context) {
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
//// 获取用户信息
//userDao := dao.UserDao{}
//user, err := userDao.GetUserById(1)
//if err != nil {
// tx.Rollback()
// fmt.Println(err)
// return
//}
//
//userService := service.UserService{}
//err = userService.ReportUserScore(tx, 1, 1, 2, 1, user)
//if err != nil {
// tx.Rollback()
// fmt.Println(err)
// return
//}
// 获取用户信息
userDao := dao.UserDao{}
user, err := userDao.GetUserById(1)
if err != nil {
tx.Rollback()
fmt.Println(err)
return
}
caseUserDao := dao.CaseUserDao{}
caseUser, err := caseUserDao.GetCaseUserById(1877273809162080256)
if err != nil {
tx.Rollback()
fmt.Println(err)
return
}
userService := service.UserService{}
// 上报用户答题数据
err = userService.ReportCaseUserAnswer(1, 2, user, caseUser)
if err != nil {
// 失败不返回,只记录日志。
fmt.Println(err)
}
fmt.Println("结束")
}