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("结束") }