package controllers import ( "encoding/json" "eta/eta_mini_api/models" "eta/eta_mini_api/models/request" "eta/eta_mini_api/models/response" "eta/eta_mini_api/services" "eta/eta_mini_api/utils" "fmt" "strconv" "time" ) type UserController struct { BaseCommonController } type UserAuthController struct { BaseAuthController } // @Title 用户登录接口 // @Description 用户登录 // @Param request body models.LoginReq true "type json string" // @Success 200 {object} models.LoginResp // @router /login [post] func (this *UserAuthController) Login() { br := new(models.BaseResponse).Init() defer func() { if err := recover(); err != nil { fmt.Println(err) } this.Data["json"] = br this.ServeJSON() }() user := this.User var req request.LoginReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析失败" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } switch req.LoginType { case 1: if req.Phone == "" { br.Msg = "请输入手机号" br.ErrMsg = "请输入手机号" return } if req.SmsCode == "" { br.Msg = "请输入验证码" br.ErrMsg = "请输入验证码" return } phone := req.AreaCode + req.Phone item, err := models.GetMsgCode(phone, req.SmsCode) if err != nil { if err.Error() == utils.ErrNoRow() { br.Msg = "验证码错误,请重新输入" br.ErrMsg = "校验验证码失败,Err:" + err.Error() return } else { br.Msg = "验证码错误,请重新输入" br.ErrMsg = "校验验证码失败,Err:" + err.Error() return } } if item == nil { br.Msg = "验证码错误,请重新输入" return } case 2: if req.Email == "" { br.Msg = "请输入手机号" br.ErrMsg = "请输入手机号" return } if req.SmsCode == "" { br.Msg = "请输入验证码" br.ErrMsg = "请输入验证码" return } item, err := models.GetMsgCode(req.Email, req.SmsCode) if err != nil { if err.Error() == utils.ErrNoRow() { br.Msg = "验证码错误,请重新输入" br.ErrMsg = "校验验证码失败,Err:" + err.Error() return } else { br.Msg = "验证码错误,请重新输入" br.ErrMsg = "校验验证码失败,Err:" + err.Error() return } } if item == nil { br.Msg = "验证码错误,请重新输入" return } } _, errMsg, err := services.BindWxUser(user.UnionId, user.OpenId, req.Phone, req.Email, req.AreaCode) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "登录失败,系统处理中,请稍后重试" if errMsg != `` { br.Msg = errMsg } br.ErrMsg = "登录失败:" + err.Error() return } br.Msg = "登录成功" br.Success = true br.Ret = 200 } // @Title 获取短信/邮箱验证码 // @Description 用户登录 // @Param request body models.LoginReq true "type json string" // @Success 200 {object} models.LoginResp // @router /getVerifyCode [post] func (this *UserController) GetVerifyCode() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() var req request.VerifyCodeReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.VerifyType != 1 && req.VerifyType != 2 { br.Msg = "验证方式有误" br.ErrMsg = fmt.Sprintf("验证方式异常<%d>", req.VerifyType) } code := utils.GetRandDigit(6) fmt.Println(code) switch req.VerifyType { case 1: if req.AreaCode == "" { br.Msg = "请选择区号" return } if req.Phone == "" { br.Msg = "请输入手机号" return } if req.AreaCode == utils.TelAreaCodeHome && !utils.ValidateMobileFormatat(req.Phone) { br.Msg = "您的手机号输入有误, 请检查" return } var ok bool if req.AreaCode == "86" { ok = services.SendSmsCode(req.Phone, code) } else { ok = services.SendSmsCodeGj(req.Phone, code, req.AreaCode) } if !ok { br.ErrMsg = "短信验证码发送失败" return } else { item := new(models.MsgCode) item.OpenId = "" item.Code = code item.Mobile = req.AreaCode + req.Phone item.ExpiredIn = time.Now().Add(15 * time.Minute).Unix() item.CreateTime = time.Now() err = item.Insert() if err != nil { br.Msg = "发送失败" br.ErrMsg = "发送失败,Err:" + err.Error() return } br.Msg = "发送成功" } case 2: if req.Email == "" { br.Msg = "请输入邮箱" } if !utils.ValidateEmailFormatat(req.Email) { br.Msg = "您的邮箱格式输入有误, 请检查" return } date := time.Now() content := "尊敬的用户:
本次请求的验证码为:" + code + "(为了保障您账号的安全性,请在15分钟内完成验证。)
东吴期货研究团队
" + fmt.Sprintf("%d年%02d月%02d日", date.Year(), date.Month(), date.Day()) title := "东吴期货登录验证" result, err := utils.SendEmailByDw(title, content, req.Email) if err != nil { br.Msg = "发送失败" br.ErrMsg = "发送失败,Err:" + err.Error() return } if result { item := new(models.MsgCode) item.OpenId = "" item.Code = code item.Mobile = req.Email item.ExpiredIn = time.Now().Add(15 * time.Minute).Unix() item.CreateTime = time.Now() err = item.Insert() if err != nil { br.Msg = "发送失败" br.ErrMsg = "发送失败,Err:" + err.Error() return } br.Msg = "发送成功" } else { br.Msg = "发送失败" } } br.Ret = 200 br.Success = true br.Msg = "发送成功" } // @Title 新增报告浏览记录 // @Description 新增报告浏览记录接口 // @Param request body models.ReportRecordReq true "type json string" // @Success 200 新增成功 // @router /addReportRecord [post] func (this *UserAuthController) AddReportRecord() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } var req request.ReportRecordReq if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.ReportId <= 0 { br.Msg = "参数错误" br.ErrMsg = "参数错误,报告id小于等于0" return } items, err := models.GetChartPermissionChapterMappingByReportId(req.ReportId) if err != nil { br.Msg = "添加阅读记录失败" br.ErrMsg = "获取研报品种错误,Err:" + err.Error() return } chartPermissionList, err := services.GetChartPermissionAllList() if err != nil { br.Msg = "添加阅读记录失败" br.ErrMsg = "获取研报品种列表失败,Err:" + err.Error() return } chartMap := make(map[int]*services.ChartPermission) for _, permission := range chartPermissionList.Data { chartMap[permission.ChartPermissionId] = permission } curTime := time.Now() insertIds := make([]int64, 0) if len(req.RecordId) <= 0 { // 如果不存在就新增一条记录 for _, item := range items { curPermission := chartMap[item.ChartPermissionId] userReadRecord := &models.UserReadRecord{ UserId: user.UserId, ReportId: req.ReportId, ReportTitle: req.ReportTitle, ChartPermissionId1: chartMap[curPermission.ParentId].ChartPermissionId, ChartPermissionId2: curPermission.ChartPermissionId, ChartPermissionName: curPermission.PermissionName, ClassifyId1: req.ClassifyIdFirst, ClassifyName1: req.ClassifyNameFirst, ClassifyId2: req.ClassifyIdSecond, ClassifyName2: req.ClassifyNameSecond, AreaCode: user.AreaCode, Phone: user.Phone, Email: user.Email, RealName: user.RealName, CompanyName: user.Company, Timestamp: int(curTime.Unix()), CreateTime: curTime, } insertId, _ := userReadRecord.Insert() insertIds = append(insertIds, insertId) } } else { // 如果存在就计算停留时间 recordIds := make([]string, 0) for _, v := range req.RecordId { recordIds = append(recordIds, strconv.Itoa(v)) } userRecordList, err := models.GetUserReadRecordListByRcordIds(recordIds) if err != nil { br.Msg = "更新阅读记录失败" br.ErrMsg = "更新阅读记录失败,Err:" + err.Error() return } if len(userRecordList) == 0 { br.Msg = "更新阅读记录不存在" return } stayTime := curTime.Unix() - int64(userRecordList[0].Timestamp) stayTimeStr := utils.SecondsToHMS(stayTime) err = models.UpdateUserReadRecordByRecordIds(recordIds, int(curTime.Unix()), int(stayTime), stayTimeStr) if err != nil { br.Msg = "更新阅读记录失败" br.ErrMsg = "更新阅读记录失败,Err:" + err.Error() return } } resp := new(response.UserReadRecordResp) resp.RecordIds = insertIds br.Msg = "添加阅读记录成功" br.Ret = 200 br.Success = true br.Data = resp } // AreaCodeList // @Title 手机号区号列表 // @Description 手机号区号列表 // @Success 200 Ret=200 获取成功 // @router /area_code/list [get] func (this *UserController) AreaCodeList() { br := new(models.BaseResponse).Init() defer func() { if br.ErrMsg == "" { br.IsSendEmail = false } this.Data["json"] = br this.ServeJSON() }() resp := make([]response.AreaCodeListResp, 0) confValue, e := models.GetConfigDetailByCode(models.ConfAreaCodeListKey) if e != nil { br.Msg = "获取失败" br.ErrMsg = "获取手机号区号配置失败, Err: " + e.Error() return } if confValue == "" { br.Msg = "获取失败" br.ErrMsg = "手机号区号配置为空" return } if e := json.Unmarshal([]byte(confValue), &resp); e != nil { br.Msg = "获取失败" br.ErrMsg = "手机号区号配置有误" return } br.Data = resp br.Ret = 200 br.Success = true br.Msg = "获取成功" }