Ver código fonte

修改system模块2

longan 2 anos atrás
pai
commit
a95c887ef7

+ 17 - 0
app/system/controller/user.go

@@ -171,3 +171,20 @@ func (c *user) Grant(ctx *gin.Context) {
 func (c *user) IsExist(user dao.User) bool {
 	return service.UserService.IsExist(user)
 }
+
+func (c *user) PutFile(ctx *gin.Context) {
+	file, err := ctx.FormFile("file")
+	if err != nil {
+		ctx.JSON(http.StatusOK, common.FailResponse(err.Error(), nil))
+		return
+	}
+	value, _ := ctx.Get(middleware.Authorization)
+	claims := value.(*middleware.Claims)
+
+	link := service.UserService.UpAvatar(claims.TenantId, claims.UserId, file)
+	if link == nil {
+		ctx.JSON(http.StatusOK, common.FailResponse("图片上传失败", nil))
+	} else {
+		ctx.JSON(http.StatusOK, common.SuccessResponse(common.Success, link))
+	}
+}

+ 2 - 2
app/system/dao/operationHisDao.go

@@ -29,7 +29,6 @@ func (c OperationHistory) GetHistories(offset, limit int) ([]OperationHistory, i
 	var list []OperationHistory
 	var counts int64
 	db := Db.Debug().Model(&c)
-	db.Count(&counts)
 
 	if c.OperationType > 0 {
 		db = db.Where("operation_type = ?", c.OperationType)
@@ -42,6 +41,7 @@ func (c OperationHistory) GetHistories(offset, limit int) ([]OperationHistory, i
 	}
 
 	err := db.Order("handle_time DESC").Offset(offset).Limit(limit).Find(&list).Error
-
+	db1 := Db.Debug().Model(&c)
+	db1.Count(&counts)
 	return list, counts, err
 }

+ 2 - 2
app/system/dao/role.go

@@ -27,7 +27,6 @@ func (c Role) GetRoles(offset, limit int) ([]Role, int, error) {
 	var Roles []Role
 	var counts int64
 	db := Db.Debug().Model(&c)
-	db.Count(&counts)
 
 	if c.RoleName != "" {
 		db = db.Where("role_name like ?", "%"+c.RoleName+"%")
@@ -39,7 +38,8 @@ func (c Role) GetRoles(offset, limit int) ([]Role, int, error) {
 		db = db.Where("tenant_id like ?", "%"+c.TenantId+"%")
 	}
 	err := db.Where("is_deleted = 0").Offset(offset).Limit(limit).Find(&Roles).Error
-
+	db1 := Db.Debug().Model(&c)
+	db1.Debug().Where("is_deleted = 0").Count(&counts)
 	return Roles, int(counts), err
 }
 

+ 11 - 5
app/system/dao/user.go

@@ -37,7 +37,7 @@ func (ji *JsonInt64) UnmarshalJSON() {
 
 }
 
-func (User) TableName() string {
+func (*User) TableName() string {
 	return "user"
 }
 
@@ -53,11 +53,10 @@ func (c *User) GetUserByPwd() error {
 	return Db.Debug().Model(&c).Where("tenant_id = ? and account = ? and password = ? and is_deleted = 0", c.TenantId, c.Account, c.Password).First(&c).Error
 }
 
-func (c User) GetUsers(offset, limit int) ([]User, int64, error) {
+func (c *User) GetUsers(offset, limit int) ([]User, int64, error) {
 	var users []User
 	var counts int64
 	db := Db.Debug().Model(&c)
-	db.Count(&counts)
 
 	if c.Account != "" {
 		db = db.Where("account like ?", "%"+c.Account+"%")
@@ -66,7 +65,8 @@ func (c User) GetUsers(offset, limit int) ([]User, int64, error) {
 		db = db.Where("real_name like ?", "%"+c.RealName+"%")
 	}
 	err := db.Where("is_deleted = 0").Offset(offset).Limit(limit).Find(&users).Error
-
+	db1 := Db.Debug().Model(&c)
+	db1.Debug().Where("is_deleted = 0").Count(&counts)
 	return users, counts, err
 }
 
@@ -97,10 +97,16 @@ func (c *User) UpdateRoles(userIds []string, roleIds string) error {
 	return err
 }
 
-// IsExist : true为存在,false不存在
+// IsExist :account是否已存在 true为存在,false不存在
 func (c *User) IsExist() bool {
 	var s string
 	r := Db.Debug().Model(&c).Select("account").Where("account = ?", c.Account).First(&s).Error
 	fmt.Printf("ERROR:%v\n account:%v\n return:%v\n", r, s, s != "")
 	return s != ""
 }
+
+// GetAvatar 查 avatar
+func (c *User) GetAvatar() {
+	tx := Db.Debug().Model(&c)
+	tx.Select("avatar").Where("tenant_id = ?", c.TenantId).Find(&c)
+}

+ 5 - 0
app/system/model/user.go

@@ -31,6 +31,11 @@ type ReqUserGrant struct {
 	RoleIds string `json:"roleIds"`
 }
 
+type Link struct {
+	Id   int    `json:"id"`
+	Link string `json:"link"`
+}
+
 const DefaultPwd = "10470c3b4b1fed12c3baac014be15fac67c6e815" //123456
 
 const GrantInvalid = "ID或角色ID无效!"

+ 49 - 0
app/system/service/userService.go

@@ -6,9 +6,13 @@ import (
 	"io"
 	"iot_manager_service/app/system/dao"
 	"iot_manager_service/app/system/model"
+	"iot_manager_service/config"
 	"iot_manager_service/util/cache"
 	"iot_manager_service/util/common"
 	"iot_manager_service/util/logger"
+	"iot_manager_service/util/minio"
+	"mime/multipart"
+	"strings"
 	"time"
 )
 
@@ -181,3 +185,48 @@ func (s *userService) GetUserName(tenantId int, id int64) string {
 func (s *userService) IsExist(user dao.User) bool {
 	return user.IsExist()
 }
+
+// UpAvatar  上传头像
+func (s *userService) UpAvatar(tenantId int, userId int64, fileHeader *multipart.FileHeader) *model.Link {
+	//检查是否已有头像,成功上传后将其删除
+	dao := &dao.User{TenantId: tenantId, ID: userId}
+	dao.GetAvatar()
+	oldAvatar := dao.Avatar
+
+	file, err := fileHeader.Open()
+	//文件校验
+	if err != nil {
+		logger.Logger.Errorf("UploadFile fileHeader.Open fail, err = %s", err.Error())
+		return nil
+	}
+	fileNameArray := strings.Split(fileHeader.Filename, ".")
+	if len(fileNameArray) < 2 {
+		return nil
+	}
+	//上传
+	bucket := fmt.Sprintf("picture-%d", tenantId)
+	objectName := "user/" + common.RandomString2(16) + "_" + common.RandomString2(6) + "." + fileNameArray[len(fileNameArray)-1]
+	err = minio.PutFile(minio.FileObject{
+		Bucket:     bucket,
+		ObjectName: objectName,
+		ObjectSize: fileHeader.Size,
+		Reader:     file,
+	})
+	if err != nil {
+		logger.Logger.Errorf("UploadFile PutFile fail, err = %s", err.Error())
+		return nil
+	}
+	//从minio删除旧的
+	if oldAvatar != "" {
+		old := strings.Split(oldAvatar, "user/")
+		oldName := "user/" + old[1]
+		minio.DeleteObject(bucket, oldName)
+	}
+	//新的保存到数据库
+	url := config.Instance().Minio.Link + "/" + bucket + "/" + objectName
+	dao.Avatar = url
+	dao.Update()
+	fmt.Printf("\n=====user:%+v\n", dao)
+	var link = model.Link{Link: url}
+	return &link
+}

+ 5 - 0
router/router.go

@@ -488,6 +488,11 @@ func InitRouter(engine *gin.Engine) {
 			securityRewindGroup.POST("rewind-text", security.Rewind.RewindText)
 		}
 	}
+	//租户用户oss
+	personalOSS := engine.Group("/api/blade-resource/oss/endpoint")
+	{
+		personalOSS.POST("/put-file", system.User.PutFile)
+	}
 
 	// 媒体素材
 	multimediaGroup := engine.Group("/api/longchi/multimedia/library")

+ 17 - 3
util/minio/minio.go

@@ -17,7 +17,7 @@ type FileObject struct {
 	Reader     io.Reader
 }
 
-var minioClient *minio.Client
+var MinioClient *minio.Client
 
 func InitMinio() {
 	cfg := config.Instance()
@@ -29,12 +29,21 @@ func InitMinio() {
 	if err != nil {
 		panic(fmt.Sprintf("InitMinio err = %s", err.Error()))
 	}
-	minioClient = client
+	MinioClient = client
 }
 
 func PutFile(fileObject FileObject) error {
 	ctx := context.Background()
-	_, err := minioClient.PutObject(ctx, fileObject.Bucket, fileObject.ObjectName, fileObject.Reader, fileObject.ObjectSize,
+	//桶是否存在
+	exists, _ := MinioClient.BucketExists(ctx, fileObject.Bucket)
+	if !exists {
+		opts := minio.MakeBucketOptions{
+			Region: "cn-north-1",
+		}
+		//MinioClient.SetBucketPolicy(ctx, fileObject.Bucket, policy.BucketPolicyReadOnly)
+		MinioClient.MakeBucket(ctx, fileObject.Bucket, opts)
+	}
+	_, err := MinioClient.PutObject(ctx, fileObject.Bucket, fileObject.ObjectName, fileObject.Reader, fileObject.ObjectSize,
 		minio.PutObjectOptions{})
 	if err != nil {
 		logger.Logger.Errorf("PutObject fail, err = %s", err.Error())
@@ -42,3 +51,8 @@ func PutFile(fileObject FileObject) error {
 	}
 	return nil
 }
+
+func DeleteObject(bucket, objName string) {
+	ops := minio.RemoveObjectOptions{}
+	MinioClient.RemoveObject(context.Background(), bucket, objName, ops)
+}