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 }