You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

212 lines
6.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package FileRelateDao
import (
"dsSzxy/Utils/CommonUtil"
"dsSzxy/Utils/ConfigUtil"
"dsSzxy/Utils/DbUtil"
"dsSzxy/Utils/SqlKit"
"dsSzxy/models"
"errors"
"fmt"
"github.com/xormplus/builder"
"net/url"
"time"
)
var db = DbUtil.Engine
/**
功能:生成下载地址带中文名
*/
func GetFileDownLoadUrl(key string, originName string) string {
infix := "?response-content-disposition=attachment%3BfileName%2A%3DUTF-8%27%27"
downloadUrl := ConfigUtil.MinioDownloadPrefix + ConfigUtil.MinioBucket + "/" + key + infix + url.QueryEscape(url.QueryEscape(originName))
return downloadUrl
}
//文件记录
func FileRecord(fileName string, indentityId int32, personId int32, targetGroupId int32, tIdentityId int32, tPersonId int32, systemId int32, fileSize int32, extName string) {
var model models.TZhxyFile
model.FileId = CommonUtil.GetUUID()
model.FileName = fileName
model.FileSize = fileSize
model.BaseId = "-1"
model.BUse = 1
model.ExtName = extName
model.SystemId = systemId
model.TargetGroupId = targetGroupId
model.TargetIdentityId = tIdentityId
model.TargetPersonId = tPersonId
model.SourceIndentityId = indentityId
model.SourcePersonId = personId
model.RecordTime = time.Now()
c, err := GetFileTypeByExtName(extName)
if err == nil {
model.TypeId = int32(c)
} else {
model.TypeId = 0
}
_, err = db.Insert(model)
if err != nil {
fmt.Println(err)
return
}
}
//修改文件名称
func FileUpdate(fileId string, fileName string) {
var myBuilder = builder.Dialect(builder.MYSQL).Update(builder.Eq{"file_name": fileName}).
From(`t_zhxy_file`).Where(builder.Eq{"file_id": fileId})
sql, _ := myBuilder.ToBoundSQL()
_, err := db.SQL(sql).Execute()
if err != nil {
fmt.Println(err.Error())
}
}
//复制文件记录
func FileCopy(fileId string, sIdentityId int32, sPersonId int32, tIdentityId int32, tPersonId int32, tGroudpId int32) (bool, error) {
//1、查询这个文件原来是谁的
modelArray := make([]models.TZhxyFile, 0)
err := db.Where("file_id = ?", fileId).Limit(1, 1).Find(&modelArray)
if err != nil {
fmt.Println("在检索时发生错误:", err.Error())
return false, err
}
//2、拷贝一份
if len(modelArray) == 0 {
return false, errors.New("没有找到指定的file_id")
}
model := modelArray[0]
model.FileId = CommonUtil.GetUUID()
model.SourceIndentityId = sIdentityId
model.SourcePersonId = sPersonId
model.TargetIdentityId = tIdentityId
model.TargetPersonId = tPersonId
model.TargetGroupId = tGroudpId
model.RecordTime = time.Now()
_, err = db.Insert(model)
if err != nil {
fmt.Println(err.Error())
return false, errors.New("写入数据库时发生错误")
}
return true, nil
}
/**
功能获取文件扩展名对应的类型ID
*/
func GetFileTypeByExtName(extName string) (int64, error) {
var myBuilder = builder.Dialect(builder.MYSQL).Select(`type_id`).
From(`t_zhxy_file_type_ext`).Where(builder.Eq{"ext_name": extName})
sql, _ := myBuilder.ToBoundSQL()
res, _ := db.SQL(sql).Query().List()
if len(res) == 0 {
return 0, nil
}
return res[0]["type_id"].(int64), nil
}
//增加云盘结点
func AddNode(identityId int32, personId int32, parentNodeId string, nodeName string) (bool, error) {
var model models.TZhxyClouddiskTree
model.NodeId = CommonUtil.GetUUID()
model.NodeName = nodeName
model.IdentityId = identityId
model.PersonId = personId
model.ParentId = parentNodeId
_, err := db.Insert(model)
if err != nil {
return false, err
} else {
return true, nil
}
}
//更新云盘结点名称
func UpdateNode(nodeId string, nodeName string) (bool, error) {
sql := `update t_zhxy_clouddisk_tree set node_name=? where node_id=?`
_, err := db.SQL(sql, nodeName, nodeId).Execute()
if err != nil {
return false, err
}
return true, nil
}
//删除云盘结点
func DelNode(nodeId string) (bool, error) {
sql := `delete from t_zhxy_clouddisk_tree where node_id=?`
_, err := db.SQL(sql, nodeId).Execute()
if err != nil {
return false, err
}
return true, nil
}
//增加云盘结点文件
func AddNodeFile(nodeId string, fileId string) (bool, error) {
var model models.TZhxyClouddiskTreeFile
model.FileId = fileId
model.NodeId = nodeId
_, err := db.Insert(model)
if err != nil {
return false, err
}
return true, nil
}
//删除云盘结点文件
func DelNodeFile(nodeId string, fileId string) (bool, error) {
sql := `delete from t_zhxy_clouddisk_tree_file where node_id=? and file_id=?`
_, err := db.SQL(sql, nodeId, fileId).Execute()
if err != nil {
return false, err
}
return true, nil
}
//获取指定树型结构下的子目录(同步)
func GetSyncTree(identityId int32, personId int32) (bool, error) {
sql := `select node_id,node_name,parent_id,identity_id,person_id from t_zhxy_clouddisk_tree where identity_id=? and person_id=?`
_, err := db.SQL(sql, identityId, personId).Execute()
if err != nil {
return false, err
}
return true, nil
}
//获取指定树型结构下的子目录(异步)
func GetAsyncTree(identityId int32, personId int32, parentId string) (bool, error) {
sql := `select node_id,node_name,parent_id,identity_id,person_id from t_zhxy_clouddisk_tree where identity_id=? and person_id=? and parent_id=?`
_, err := db.SQL(sql, identityId, personId, parentId).Execute()
if err != nil {
return false, err
}
return true, nil
}
//获取指定树形结构下的文件列表
func GetFileList(identityId int32, personId int32, nodeId string, limit int, offset int) (int32, []map[string]interface{}) {
var myBuilder = builder.Dialect(builder.MYSQL).Select("t1.*,t2.file_name,t2.file_size").
From(`t_zhxy_clouddisk_tree_file as t1`).
InnerJoin("t_zhxy_file as t2", "t1.file_id=t2.file_id").
Where(builder.Eq{"t2.b_use": 1}).
And(builder.Eq{"t1.identity_id": identityId}).
And(builder.Eq{"t1.person_id": personId}).
And(builder.Eq{"t1.node_id": nodeId}).OrderBy("t1.record_time desc")
//获取拼接完成的SQL语句
sql, err := myBuilder.Limit(limit, offset).ToBoundSQL()
if err != nil {
fmt.Println(err.Error())
}
c, err := SqlKit.Count(sql)
if err != nil {
fmt.Println(err.Error())
}
list, err := db.SQL(sql).Query().List()
if err != nil {
fmt.Println(err.Error())
}
return c, list
}