package app import ( "fmt" "git.echol.cn/loser/logger/log" "github.com/gin-gonic/gin" "github.com/medivhzhan/weapp/v3" msg "github.com/medivhzhan/weapp/v3/subscribemessage" "miniapp/api" "miniapp/model/app" "miniapp/model/app/request" "miniapp/model/app/response" r "miniapp/model/common/response" "miniapp/utils" "strconv" "strings" ) type UserApi struct { } // GetUser 获取当前登录用户信息 func (u *UserApi) GetUser(ctx *gin.Context) { // 取出当前登录用户 var ue app.User if api.GetUser(ctx, &ue, false, true); ctx.IsAborted() { return } // 转换为VO var v response.UserVO v.ParseOrdinary(ue) r.OkWithData(v, ctx) } // BindingWeChat 绑定微信 func (u *UserApi) BindingWeChat(ctx *gin.Context) { var p request.BindingWeChat if err := ctx.ShouldBind(&p); err != nil { r.FailWithMessage("参数错误"+err.Error(), ctx) return } // 取出当前登录用户 var loginUser app.User if api.GetUser(ctx, &loginUser, true, true); ctx.IsAborted() { return } // 解析出UnionId和OpenId unionId, openId, _, err := utils.WeChatUtils().GetWechatUnionId(p.Code) if err != nil { log.Errorf("获取微信UnionId失败:%s", err.Error()) r.FailWithMessage("系统错误,请稍后再试", ctx) return } // 解析成功,修改用户信息 loginUser.WechatUnionId = &unionId loginUser.WechatOpenId = &openId if err = userService.UpdateUserInfo(&loginUser); err != nil { log.Errorf("修改用户信息失败:%s", err.Error()) r.FailWithMessage("系统错误,请稍后再试", ctx) return } r.Ok(ctx) } // UpdateUser 修改用户信息 func (u *UserApi) UpdateUser(ctx *gin.Context) { var p request.ChangeUserInfo if err := ctx.ShouldBind(&p); err != nil { r.FailWithMessage("参数错误: "+err.Error(), ctx) return } // 获取当前登录用户 var loginUser app.User if api.GetUser(ctx, &loginUser, false, true); ctx.IsAborted() { return } // 修改资料 if p.Nickname != "" { loginUser.Nickname = p.Nickname } if p.Avatar != "" && strings.HasPrefix(p.Avatar, "http") { loginUser.Avatar = p.Avatar } if p.Phone != "" { loginUser.Phone = p.Phone } if p.SurgeryTime != "" { //t, _ := time.Parse("2006-01-02", p.SurgeryTime) //format := t.UTC().Format("2006-01-02") loginUser.SurgeryTime = p.SurgeryTime } loginUser.IsSurgery = p.IsSurgery loginUser.HospitalId = p.HospitalId // 修改数据 if err := userService.UpdateUserInfo(&loginUser); err != nil { log.Errorf("修改用户信息失败:%s", err.Error()) r.FailWithMessage("修改用户信息失败"+err.Error(), ctx) return } // 操作成功,更新头像和昵称 r.Ok(ctx) } // UpdateUserHospital 修改用户医院信息 func (u *UserApi) UpdateUserHospital(ctx *gin.Context) { var p request.ChangeUserHospital if err := ctx.ShouldBind(&p); err != nil { r.FailWithMessage("参数错误: "+err.Error(), ctx) return } // 修改数据 if err := userService.UpdateUserHospital(&p); err != nil { log.Errorf("修改用户信息失败:%s", err.Error()) r.FailWithMessage("修改用户信息失败"+err.Error(), ctx) return } // 操作成功,更新头像和昵称 r.Ok(ctx) } // GetInfo 获取用户信息 func (u *UserApi) GetInfo(ctx *gin.Context) { //id := ctx.Param("id") //if id == "" { // global.GVA_LOG.Error("参数错误") // r.FailWithMessage("参数错误", ctx) // return //} var ue app.User if api.GetUser(ctx, &ue, false, true); ctx.IsAborted() { return } // 获取用户信息 userInfo, err := userService.GetUserInfo(strconv.Itoa(int(ue.ID))) if err != nil { log.Errorf("获取用户信息失败:%s", err.Error()) r.FailWithMessage("获取用户信息失败"+err.Error(), ctx) return } r.OkWithData(userInfo, ctx) } // SendMedicineRemind 发送用药提醒消息 func (u *UserApi) SendMedicineRemind(ctx *gin.Context) { var req utils.SendRequest if err := ctx.ShouldBind(&req); err != nil { r.FailWithMessage("参数错误: "+err.Error(), ctx) return } //app-id: wxaaf66dbb5c3983b3 //app-secret: 0abba24dbff43febba1e551651f693b4 //template-id: PgxoZOOSDgBcmIGd_EVLDnYUmL3eu6NQTAZCsHQeuWY sdk := weapp.NewClient("wxaaf66dbb5c3983b3", "0abba24dbff43febba1e551651f693b4") msgData := msg.SendRequest{ ToUser: "o9Fq_6_cYKvOWnyUM3McC11hWsTI", TemplateID: "PgxoZOOSDgBcmIGd_EVLDnYUmL3eu6NQTAZCsHQeuWY", Page: "page/index/todo", MiniprogramState: msg.MiniprogramStateTrial, Data: msg.SendData{ "thing1": msg.SendValue{Value: "眼药水"}, "time2": msg.SendValue{Value: "20:00"}, "short_thing17": msg.SendValue{Value: "一天4次"}, "time15": msg.SendValue{Value: "2024-03-20 20:00"}, }, } send, err := sdk.NewSubscribeMessage().Send(&msgData) if err != nil { return } err = send.GetResponseError() if err != nil { fmt.Printf("微信返回错误: %#v", err) return } fmt.Printf("返回结果: %#v", send) r.Ok(ctx) }