tuchuang_共享文件_图片_取消_删除
🌳 api_deal_sharefile.cc 函数调用树
ApiDealsharefile() # 共享文件操作接口主入口
├── QueryParseKeyValue() # 解析URL中的cmd参数
├── decodeDealsharefileJson() # 解析请求JSON
│ ├── jsonReader.parse() # JSON字符串解析
│ ├── root["user"].asString() # 提取用户名
│ ├── root["md5"].asString() # 提取文件MD5
│ └── root["filename"].asString() # 提取文件名
├── 根据cmd分发到不同处理逻辑
│ ├── cmd = "cancel" → 取消分享文件
│ │ └── handleCancelShareFile() # 处理取消分享
│ │ ├── CDBManager::getInstance() # 获取数据库管理器
│ │ ├── GetDBConn("tuchuang_master") # 获取主库连接
│ │ ├── CacheManager::getInstance() # 获取缓存管理器
│ │ ├── GetCacheConn("ranking_list") # 获取Redis连接
│ │ ├── sprintf(fileid, "%s%s") # 生成文件唯一标识
│ │ ├── 更新用户文件共享状态
│ │ │ ├── sprintf(sql_cmd, "update user_file_list set shared_status = 0...")
│ │ │ └── db_conn->ExecuteUpdate() # 执行更新
│ │ ├── 删除分享记录
│ │ │ ├── sprintf(sql_cmd, "delete from share_file_list...")
│ │ │ └── db_conn->ExecuteDrop() # 执行删除
│ │ ├── 清理Redis缓存
│ │ │ ├── cache_conn->ZsetZrem(FILE_PUBLIC_ZSET, fileid) # 删除有序集合
│ │ │ └── cache_conn->Hdel(FILE_NAME_HASH, fileid) # 删除哈希映射
│ │ └── 返回处理结果
│ ├── cmd = "save" → 转存文件
│ │ └── handleSaveFile() # 处理文件转存
│ │ ├── CDBManager::getInstance() # 获取数据库管理器
│ │ ├── GetDBConn("tuchuang_master") # 获取主库连接
│ │ ├── 检查文件是否已存在
│ │ │ ├── sprintf(sql_cmd, "select * from user_file_list...")
│ │ │ └── CheckwhetherHaveRecord() # 检查记录是否存在
│ │ ├── 查询文件引用计数
│ │ │ ├── sprintf(sql_cmd, "select count from file_info...")
│ │ │ └── GetResultOneCount() # 获取当前计数
│ │ ├── 更新文件引用计数
│ │ │ ├── sprintf(sql_cmd, "update file_info set count = %d...")
│ │ │ └── db_conn->ExecuteUpdate() # 执行更新
│ │ ├── 生成创建时间
│ │ │ ├── gettimeofday() # 获取当前时间
│ │ │ ├── localtime() # 转换为本地时间
│ │ │ └── strftime() # 格式化时间字符串
│ │ ├── 插入用户文件记录
│ │ │ ├── sprintf(sql_cmd, "insert into user_file_list...")
│ │ │ └── db_conn->ExecuteCreate() # 执行插入
│ │ └── 返回处理结果
│ └── cmd = "pv" → 共享文件下载计数
│ └── handlePvFile() # 处理共享文件下载计数
│ ├── CDBManager::getInstance() # 获取数据库管理器
│ ├── GetDBConn("tuchuang_master") # 获取主库连接
│ ├── CacheManager::getInstance() # 获取缓存管理器
│ ├── GetCacheConn("ranking_list") # 获取Redis连接
│ ├── sprintf(fileid, "%s%s") # 生成文件唯一标识
│ ├── 查询共享文件PV值
│ │ ├── sprintf(sql_cmd, "select pv from share_file_list...")
│ │ ├── ExecuteQuery() # 执行查询
│ │ │ └── result_set->GetInt("pv")
│ │ └── delete result_set # 释放结果集
│ ├── 更新MySQL PV值
│ │ ├── sprintf(sql_cmd, "update share_file_list set pv = %d...")
│ │ └── db_conn->ExecuteUpdate() # 执行更新
│ ├── 检查Redis中是否存在
│ │ └── cache_conn->ZsetExit(FILE_PUBLIC_ZSET, fileid)
│ ├── 根据Redis状态处理
│ │ ├── 情况1: Redis中不存在
│ │ │ ├── cache_conn->ZsetAdd() # 添加有序集合
│ │ │ └── cache_conn->Hset() # 添加哈希映射
│ │ ├── 情况2: Redis中存在
│ │ │ └── cache_conn->ZsetIncr() # 增加PV值
│ │ └── 情况3: Redis操作出错
│ └── 返回处理结果
├── encodeDealsharefileJson() # 封装响应JSON
│ ├── root["code"] = ret # 设置状态码
│ └── writer.write(root) # JSON序列化
└── 返回处理结果
api_dealfile.cc 函数调用树
ApiDealfile() # 文件操作接口主入口
├── QueryParseKeyValue() # 解析URL中的cmd参数
├── 根据cmd分发到不同处理逻辑
│ ├── cmd = "share" → 分享文件
│ │ ├── decodeDealfileJson() # 解析分享请求JSON
│ │ │ ├── jsonReader.parse() # JSON字符串解析
│ │ │ ├── root["user"].asString() # 提取用户名
│ │ │ ├── root["token"].asString() # 提取Token
│ │ │ ├── root["md5"].asString() # 提取文件MD5
│ │ │ └── root["filename"].asString() # 提取文件名
│ │ ├── handleShareFile() # 处理文件分享
│ │ │ ├── CDBManager::getInstance() # 获取数据库管理器
│ │ │ ├── GetDBConn("tuchuang_master") # 获取主库连接
│ │ │ ├── CacheManager::getInstance() # 获取缓存管理器
│ │ │ ├── GetCacheConn("ranking_list") # 获取Redis连接
│ │ │ ├── sprintf(fileid, "%s%s") # 生成文件唯一标识
│ │ │ ├── Redis检查文件是否已分享
│ │ │ │ └── cache_conn->ZsetExit(FILE_PUBLIC_ZSET, fileid)
│ │ │ ├── MySQL检查文件是否已分享
│ │ │ │ ├── sprintf(sql_cmd, "select * from share_file_list...")
│ │ │ │ └── CheckwhetherHaveRecord() # 检查记录是否存在
│ │ │ ├── 更新用户文件共享状态
│ │ │ │ ├── sprintf(sql_cmd, "update user_file_list set shared_status = 1...")
│ │ │ │ └── db_conn->ExecuteUpdate() # 执行更新
│ │ │ ├── 插入分享记录
│ │ │ │ ├── time() & localtime() # 获取当前时间
│ │ │ │ ├── strftime() # 格式化时间
│ │ │ │ ├── sprintf(sql_cmd, "insert into share_file_list...")
│ │ │ │ └── db_conn->ExecuteCreate() # 执行插入
│ │ │ └── 更新Redis缓存
│ │ │ ├── cache_conn->ZsetAdd(FILE_PUBLIC_ZSET, 0, fileid)
│ │ │ └── cache_conn->Hset(FILE_NAME_HASH, fileid, filename)
│ │ └── encodeDealfileJson() # 封装分享响应
│ │ ├── root["code"] = ret # 设置状态码
│ │ └── writer.write(root) # JSON序列化
│ ├── cmd = "del" → 删除文件
│ │ ├── decodeDealfileJson() # 解析删除请求JSON
│ │ └── handleDeleteFile() # 处理文件删除
│ │ ├── CDBManager::getInstance() # 获取数据库管理器
│ │ ├── GetDBConn("tuchuang_master") # 获取主库连接
│ │ ├── CacheManager::getInstance() # 获取缓存管理器
│ │ ├── GetCacheConn("ranking_list") # 获取Redis连接
│ │ ├── 检查文件分享状态
│ │ │ ├── sprintf(sql_cmd, "select shared_status from user_file_list...")
│ │ │ └── GetResultOneStatus() # 获取分享状态
│ │ ├── 如果已分享 → 清理分享数据
│ │ │ ├── sprintf(fileid, "%s%s") # 生成文件标识
│ │ │ ├── cache_conn->ZsetZrem(FILE_PUBLIC_ZSET, fileid) # Redis删除
│ │ │ ├── cache_conn->Hdel(FILE_NAME_HASH, fileid) # Redis删除映射
│ │ │ ├── sprintf(sql_cmd, "delete from share_file_list...")
│ │ │ └── db_conn->ExecuteDrop() # 删除分享记录
│ │ ├── 删除用户文件记录
│ │ │ ├── sprintf(sql_cmd, "delete from user_file_list...")
│ │ │ └── db_conn->ExecuteDrop() # 执行删除
│ │ ├── 更新文件引用计数
│ │ │ ├── sprintf(sql_cmd, "select count from file_info...")
│ │ │ ├── GetResultOneCount() # 获取当前计数
│ │ │ ├── count -= 1 # 计数减1
│ │ │ ├── sprintf(sql_cmd, "update file_info set count=%d...")
│ │ │ └── db_conn->ExecuteUpdate() # 执行更新
│ │ ├── 如果引用计数为0 → 彻底删除
│ │ │ ├── sprintf(sql_cmd, "select file_id from file_info...")
│ │ │ ├── ExecuteQuery() # 查询文件ID
│ │ │ │ └── result_set->GetString("file_id")
│ │ │ ├── sprintf(sql_cmd, "delete from file_info...")
│ │ │ ├── db_conn->ExecuteDrop() # 删除文件信息
│ │ │ └── RemoveFileFromFastDfs() # 删除物理文件
│ │ └── 返回删除结果
│ │ └── encodeDealfileJson() # 封装删除响应
│ └── cmd = "pv" → 下载计数处理
│ ├── decodeDealfileJson() # 解析PV请求JSON
│ └── handlePvFile() # 处理下载计数
│ ├── CDBManager::getInstance() # 获取数据库管理器
│ ├── GetDBConn("tuchuang_master") # 获取主库连接
│ ├── 查询当前PV值
│ │ ├── sprintf(sql_cmd, "select pv from user_file_list...")
│ │ ├── ExecuteQuery() # 执行查询
│ │ │ └── result_set->GetInt("pv")
│ │ └── delete result_set # 释放结果集
│ ├── 更新PV值
│ │ ├── sprintf(sql_cmd, "update user_file_list set pv = %d...")
│ │ └── db_conn->ExecuteUpdate() # 执行更新
│ └── 返回处理结果
│ └── encodeDealfileJson() # 封装PV响应
└── 返回处理结果
🌳 api_sharefiles.cc 函数调用树
ApiSharefiles() # 共享文件接口主入口
├── QueryParseKeyValue() # 解析URL中的cmd参数
├── 根据cmd分发到不同处理逻辑
│ ├── cmd = "count" → 获取共享文件总数
│ │ ├── handleGetSharefilesCount() # 处理文件总数查询
│ │ │ ├── CDBManager::getInstance() # 获取数据库管理器
│ │ │ ├── GetDBConn("tuchuang_slave") # 获取从库连接
│ │ │ ├── ExecuteQuery() # 执行SQL查询
│ │ │ │ └── "select count(*) from share_file_list"
│ │ │ ├── result_set->Next() # 遍历查询结果
│ │ │ ├── GetInt("count(*)") # 获取总数
│ │ │ └── delete result_set # 释放结果集
│ │ └── encodeSharefilesJson() # 封装总数响应
│ │ ├── root["code"] = ret # 设置状态码
│ │ ├── root["total"] = total # 设置文件总数
│ │ └── writer.write(root) # JSON序列化
│ ├── cmd = "normal" → 获取共享文件列表
│ │ ├── decodeShareFileslistJson() # 解析分页参数
│ │ │ ├── jsonReader.parse() # JSON解析
│ │ │ ├── root["start"].asInt() # 提取起始位置
│ │ │ └── root["count"].asInt() # 提取数量
│ │ └── handleGetShareFilelist() # 处理文件列表
│ │ ├── handleGetSharefilesCount() # 先获取总数
│ │ ├── FormatString() # 格式化SQL
│ │ ├── ExecuteQuery() # 执行联合查询
│ │ │ └── "select share_file_list.*, file_info.url..."
│ │ ├── 遍历查询结果集
│ │ │ ├── result_set->Next() # 遍历记录
│ │ │ ├── GetString("user") # 获取用户名
│ │ │ ├── GetString("md5") # 获取MD5
│ │ │ ├── GetString("file_name") # 获取文件名
│ │ │ ├── GetInt("pv") # 获取下载量
│ │ │ ├── GetString("create_time") # 获取创建时间
│ │ │ ├── GetString("url") # 获取文件URL
│ │ │ ├── GetInt("size") # 获取文件大小
│ │ │ └── GetString("type") # 获取文件类型
│ │ ├── 构建JSON文件数组
│ │ │ ├── files[file_index] = file # 添加文件对象
│ │ │ └── file_index++ # 索引递增
│ │ ├── root["total"] = total # 设置总数
│ │ ├── root["count"] = file_index # 设置返回数量
│ │ ├── root["files"] = files # 设置文件数组
│ │ └── root.toStyledString() # JSON序列化
│ └── cmd = "pvdesc" → 获取下载排行榜
│ ├── decodeShareFileslistJson() # 解析分页参数
│ └── handleGetRankingFilelist() # 处理排行榜
│ ├── handleGetSharefilesCount() # 获取MySQL文件总数
│ ├── cache_conn->ZsetZcard() # 获取Redis文件总数
│ ├── 检查MySQL和Redis数据一致性
│ │ └── 如果不一致 → 重新同步
│ │ ├── cache_conn->Del() # 清空Redis数据
│ │ ├── ExecuteQuery() # 查询MySQL数据
│ │ │ └── "select md5, file_name, pv from share_file_list..."
│ │ ├── 遍历MySQL结果集
│ │ │ ├── pCResultSet->Next() # 遍历记录
│ │ │ ├── GetString("md5") # 获取MD5
│ │ │ ├── GetString("file_name") # 获取文件名
│ │ │ └── GetInt("pv") # 获取PV值
│ │ ├── cache_conn->ZsetAdd() # 添加到有序集合
│ │ └── cache_conn->Hset() # 添加到哈希表
│ ├── cache_conn->ZsetZrevrange() # 降序获取排行榜
│ ├── 遍历Redis返回的成员
│ │ ├── cache_conn->Hget() # 获取文件名
│ │ ├── cache_conn->ZsetGetScore() # 获取PV值
│ │ └── 构建JSON文件对象
│ ├── root["code"] = ret # 设置状态码
│ ├── root["total"] = sql_num # 设置总数
│ ├── root["count"] = file_count # 设置返回数量
│ ├── root["files"] = files # 设置文件数组
│ └── root.toStyledString() # JSON序列化
└── 返回处理结果