| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- package daytask
- import (
- "app/commons/model/entity"
- "github.com/gin-gonic/gin"
- "golang.org/x/crypto/bcrypt"
- )
- // UserInfo 用户信息
- func (s *Server) UserInfo(c *gin.Context) {
- ctx := s.FromContext(c)
- db := s.DB()
- userId := ctx.UserId()
- user := &entity.DtUser{}
- if err := db.Where("id = ?", userId).First(user).Error; err != nil {
- ctx.Fail("user_not_found")
- return
- }
- // 获取用户等级
- level := &entity.DtUserLevel{}
- db.Where("id = ?", user.LevelId).First(level)
- ctx.OK(gin.H{
- "user": user,
- "level": level,
- })
- }
- // UserUpdate 更新用户信息
- func (s *Server) UserUpdate(c *gin.Context) {
- ctx := s.FromContext(c)
- db := s.DB()
- userId := ctx.UserId()
- type UpdateRequest struct {
- Nickname string `json:"nickname"`
- Avatar string `json:"avatar"`
- Gender *int8 `json:"gender"`
- Age *int `json:"age"`
- Region string `json:"region"`
- RealName string `json:"realName"`
- IdCard string `json:"idCard"`
- }
- var req UpdateRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- ctx.Fail("invalid_params")
- return
- }
- updates := make(map[string]interface{})
- if req.Nickname != "" {
- updates["nickname"] = req.Nickname
- }
- if req.Avatar != "" {
- updates["avatar"] = req.Avatar
- }
- if req.Gender != nil {
- updates["gender"] = *req.Gender
- }
- if req.Age != nil {
- updates["age"] = *req.Age
- }
- if req.Region != "" {
- updates["region"] = req.Region
- }
- // 实名信息只能设置一次
- user := &entity.DtUser{}
- db.Where("id = ?", userId).First(user)
- if req.RealName != "" && user.RealName == "" {
- updates["real_name"] = req.RealName
- }
- if req.IdCard != "" && user.IdCard == "" {
- updates["id_card"] = req.IdCard
- updates["is_real_name"] = 1
- }
- if len(updates) > 0 {
- db.Model(&entity.DtUser{}).Where("id = ?", userId).Updates(updates)
- }
- ctx.OK(nil)
- }
- // UserPassword 修改密码
- func (s *Server) UserPassword(c *gin.Context) {
- ctx := s.FromContext(c)
- db := s.DB()
- userId := ctx.UserId()
- type PasswordRequest struct {
- OldPassword string `json:"oldPassword" binding:"required"`
- NewPassword string `json:"newPassword" binding:"required,min=6"`
- }
- var req PasswordRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- ctx.Fail("invalid_params")
- return
- }
- user := &entity.DtUser{}
- if err := db.Where("id = ?", userId).First(user).Error; err != nil {
- ctx.Fail("user_not_found")
- return
- }
- // 验证旧密码
- if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(req.OldPassword)); err != nil {
- ctx.Fail("old_password_error")
- return
- }
- // 加密新密码
- hashedPassword, err := bcrypt.GenerateFromPassword([]byte(req.NewPassword), bcrypt.DefaultCost)
- if err != nil {
- ctx.Fail("system_error")
- return
- }
- db.Model(&entity.DtUser{}).Where("id = ?", userId).Update("password", string(hashedPassword))
- ctx.OK(nil)
- }
- // UserAvatar 修改头像
- func (s *Server) UserAvatar(c *gin.Context) {
- ctx := s.FromContext(c)
- db := s.DB()
- userId := ctx.UserId()
- type AvatarRequest struct {
- Avatar string `json:"avatar" binding:"required"`
- }
- var req AvatarRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- ctx.Fail("invalid_params")
- return
- }
- db.Model(&entity.DtUser{}).Where("id = ?", userId).Update("avatar", req.Avatar)
- ctx.OK(nil)
- }
- // PaymentList 收款账户列表
- func (s *Server) PaymentList(c *gin.Context) {
- ctx := s.FromContext(c)
- db := s.DB()
- userId := ctx.UserId()
- payments := make([]*entity.DtUserPayment, 0)
- db.Model(&entity.DtUserPayment{}).
- Where("user_id = ? AND status = ?", userId, 1).
- Order("is_default DESC, id DESC").
- Find(&payments)
- ctx.OK(payments)
- }
- // PaymentAdd 添加收款账户
- func (s *Server) PaymentAdd(c *gin.Context) {
- ctx := s.FromContext(c)
- db := s.DB()
- userId := ctx.UserId()
- type PaymentRequest struct {
- Type string `json:"type" binding:"required"`
- Name string `json:"name"`
- Account string `json:"account" binding:"required"`
- BankName string `json:"bankName"`
- BankBranch string `json:"bankBranch"`
- Qrcode string `json:"qrcode"`
- }
- var req PaymentRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- ctx.Fail("invalid_params")
- return
- }
- // 检查是否已存在相同类型的账户
- var count int64
- db.Model(&entity.DtUserPayment{}).
- Where("user_id = ? AND type = ? AND account = ?", userId, req.Type, req.Account).
- Count(&count)
- if count > 0 {
- ctx.Fail("payment_exists")
- return
- }
- // 检查是否有默认账户
- var defaultCount int64
- db.Model(&entity.DtUserPayment{}).
- Where("user_id = ? AND is_default = ?", userId, 1).
- Count(&defaultCount)
- payment := &entity.DtUserPayment{
- UserId: userId,
- Type: req.Type,
- Name: req.Name,
- Account: req.Account,
- BankName: req.BankName,
- BankBranch: req.BankBranch,
- Qrcode: req.Qrcode,
- IsDefault: 0,
- Status: 1,
- }
- // 如果没有默认账户,设为默认
- if defaultCount == 0 {
- payment.IsDefault = 1
- }
- db.Create(payment)
- ctx.OK(payment)
- }
- // PaymentDelete 删除收款账户
- func (s *Server) PaymentDelete(c *gin.Context) {
- ctx := s.FromContext(c)
- db := s.DB()
- userId := ctx.UserId()
- type DeleteRequest struct {
- Id int64 `json:"id" binding:"required"`
- }
- var req DeleteRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- ctx.Fail("invalid_params")
- return
- }
- db.Where("id = ? AND user_id = ?", req.Id, userId).Delete(&entity.DtUserPayment{})
- ctx.OK(nil)
- }
- // PaymentDefault 设置默认账户
- func (s *Server) PaymentDefault(c *gin.Context) {
- ctx := s.FromContext(c)
- db := s.DB()
- userId := ctx.UserId()
- type DefaultRequest struct {
- Id int64 `json:"id" binding:"required"`
- }
- var req DefaultRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- ctx.Fail("invalid_params")
- return
- }
- // 取消其他默认
- db.Model(&entity.DtUserPayment{}).
- Where("user_id = ?", userId).
- Update("is_default", 0)
- // 设置新默认
- db.Model(&entity.DtUserPayment{}).
- Where("id = ? AND user_id = ?", req.Id, userId).
- Update("is_default", 1)
- ctx.OK(nil)
- }
- // SocialList 社交账号列表
- func (s *Server) SocialList(c *gin.Context) {
- ctx := s.FromContext(c)
- db := s.DB()
- userId := ctx.UserId()
- socials := make([]*entity.DtUserSocial, 0)
- db.Model(&entity.DtUserSocial{}).
- Where("user_id = ?", userId).
- Find(&socials)
- ctx.OK(socials)
- }
- // SocialBind 绑定社交账号
- func (s *Server) SocialBind(c *gin.Context) {
- ctx := s.FromContext(c)
- db := s.DB()
- userId := ctx.UserId()
- type BindRequest struct {
- Platform string `json:"platform" binding:"required"`
- Account string `json:"account" binding:"required"`
- Nickname string `json:"nickname"`
- }
- var req BindRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- ctx.Fail("invalid_params")
- return
- }
- // 检查是否已绑定
- var existing entity.DtUserSocial
- err := db.Where("user_id = ? AND platform = ?", userId, req.Platform).First(&existing).Error
- if err == nil {
- // 更新
- db.Model(&entity.DtUserSocial{}).
- Where("id = ?", existing.Id).
- Updates(map[string]interface{}{
- "account": req.Account,
- "nickname": req.Nickname,
- })
- } else {
- // 新增
- social := &entity.DtUserSocial{
- UserId: userId,
- Platform: req.Platform,
- Account: req.Account,
- Nickname: req.Nickname,
- Extra: "{}",
- Status: 1,
- }
- db.Create(social)
- }
- ctx.OK(nil)
- }
|