zoukankan      html  css  js  c++  java
  • 用户离职后网盘数据交接的实现

    企业给用户开通了mobox私域网盘,用户在单位上班一段时间后离职。而这个用户已经上传的网盘数据,需要有新人接手,为此,系统提供了一个网盘数据交接的脚本。运行脚本后,重启 netdiskwebs 服务,来生效这个操作

    -- 个人网盘用户A 所有网盘数据都转至 用户B 根目录下的一个目录中(此目录自动创建,名称:转自【用户A】_YYYYmmdd)
    BEGIN
    Declare @strUserLogin1 as nvarchar(32)
    Declare @strUserLogin2 as nvarchar(32)
    Declare @strUserName1 as nvarchar(64)
    Declare @strUserName2 as nvarchar(64)
    Declare @nUserIndex1 as int
    Declare @nUserIndex2 as int
    Declare @strTabIndex1 as nchar(1)
    Declare @strTabIndex2 as nchar(1)
    Declare @strCatalogID as nvarchar(36)
    Declare @strCatalogName as nvarchar(64)
    Declare @strSQL as nvarchar(1024)
    Declare @strOwner as nvarchar(32)
    Declare @strOwnerName as nvarchar(64)
    Declare @nNDIndex as int
    Declare @strDate as nvarchar(8)

    -- 指定用户A 与 用户B 的登录名,最好小写
    Set @strUserLogin1 = N'用户A'
    Set @strUserLogin2 = N'用户B'

    Set @nUserIndex1 = -1
    Set @nUserIndex2 = -1
    -- 申请游标,得到用户个人网盘信息
    Declare userindex_cursor cursor for (SELECT Lower( CN_S_OWNER_ID ), CN_S_OWNER_NAME, CN_N_NDX FROM OI_ND_USER WHERE CN_S_OWNER_ID IN ( @strUserLogin1, @strUserLogin2 ) )
    -- 打开游标
    Open userindex_cursor

    -- 开始循环游标变量
    Fetch Next From userindex_cursor into @strOwner, @strOwnerName, @nNDIndex
    -- FETCH 后的游标状态
    While @@FETCH_STATUS = 0
    Begin
    If @strOwner = @strUserLogin1
    Begin
    Set @nUserIndex1 = @nNDIndex
    Set @strUserName1 = @strOwnerName
    End
    Else
    Begin
    Set @nUserIndex2 = @nNDIndex
    Set @strUserName2 = @strOwnerName
    End

    -- 转到下一个游标
    Fetch Next From userindex_cursor into @strOwner, @strOwnerName, @nNDIndex
    End

    -- 关闭游标
    Close userindex_cursor
    -- 释放游标
    Deallocate userindex_cursor

    -- 判断用户索引
    If @nUserIndex1 = -1 Or @nUserIndex2 = -1
    Begin
    Print N'指定的用户不存在'
    Return
    End

    -- 生成表索引
    Set @strTabIndex1 = Str( @nUserIndex1, 1 )
    Set @strTabIndex2 = Str( @nUserIndex2, 1 )

    -- 在用户B根目录下创建存放转移数据的目录:转自【用户A】_YYYYmmdd
    Print N'创建转移数据的目录'
    Set @strCatalogID = NewID()
    Set @strDate = Left( Convert( char(8), GetDate(), 112 ), 8 )
    Set @strCatalogName = '转自【' + @strUserName1 + '】_' + @strDate
    Set @strSQL = N'INSERT INTO OI_ND_CATALOG ( CN_S_ID, CN_S_NAME, CN_N_DOC_LIST_TYPE, CN_N_SHARE, CN_S_CREATOR_ID, CN_S_CREATOR, CN_T_CREATE, CN_N_ORDER, CN_S_PARENTID ) ' +
    N'VALUES ( ''' + @strCatalogID + ''', ''' + @strCatalogName + ''', 0, 0, ''' + @strUserLogin2 + ''', ''' + @strUserName2 + ''', GetDate(), 0, '''' )'
    EXEC( @strSQL )

    -- 索引值相同,直接替换
    If @nUserIndex1 = @nUserIndex2
    Begin
    Print N'用户索引相同'
    -- 个人文档表
    Print N'个人文档表'
    Set @strSQL = N'UPDATE OI_ND_DOC_' + @strTabIndex1 + N' SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )

    -- 根级目录文档
    Print N'根级目录文档'
    Set @strSQL = N'UPDATE OI_ND_CATALOG_HLINK_' + @strTabIndex1 + N' SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CATALOG_ID = ''' + @strCatalogID + N''' WHERE (CN_S_CATALOG_ID IS NULL OR CN_S_CATALOG_ID = '''') AND CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )
    -- 子级目录文档
    Print N'子级目录文档'
    Set @strSQL = N'UPDATE OI_ND_CATATLOG_HLINK_' + @strTabIndex1 + N' SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )
    End
    -- 索引值不同,数据记录迁移(记录复制至 B用户索引表,删除A用户索引表记录)
    Else
    Begin
    Print N'用户索引不相同'
    -- 个人文档表,复制
    Print N'个人文档表,复制'
    Set @strSQL = N'INSERT INTO OI_ND_DOC_' + @strTabIndex2 + N' ( CN_S_ID, CN_S_FILE_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_T_FILE_DATETIME, CN_S_FILE_MD5, CN_S_FILE_SERVER, CN_G_FILE_ID, CN_G_PDF_FILE_ID, CN_G_FLASH_FILE_ID, CN_G_THUMB_IMAGE_ID, CN_S_THUMB_URL, ' +
    N'CN_S_CREATOR_ID, CN_S_CREATOR, CN_T_CREATE, CN_S_VERSION, CN_S_TAGS_NAME, CN_N_SHARE, CN_N_MOD, CN_S_NOTE, CN_S_SYS_NOTE ) ' +
    N'SELECT CN_S_ID, CN_S_FILE_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_T_FILE_DATETIME, CN_S_FILE_MD5, CN_S_FILE_SERVER, CN_G_FILE_ID, CN_G_PDF_FILE_ID, CN_G_FLASH_FILE_ID, CN_G_THUMB_IMAGE_ID, CN_S_THUMB_URL, ' +
    N'''' + @strUserLogin2 + N''', ''' + @strUserName2 + N''', CN_T_CREATE, CN_S_VERSION, CN_S_TAGS_NAME, CN_N_SHARE, CN_N_MOD, CN_S_NOTE, CN_S_SYS_NOTE ' +
    N'FROM OI_ND_DOC_' + @strTabIndex1 +
    N' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )
    -- 删除
    Print N'个人文档表,删除'
    Set @strSQL = N'DELETE OI_ND_DOC_' + @strTabIndex1 + N' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )

    -- 根级目录文档,复制
    Print N'根级目录文档,复制'
    Set @strSQL = N'INSERT INTO OI_ND_CATALOG_HLINK_' + @strTabIndex2 + N' ( CN_S_CREATOR_ID, CN_S_CATALOG_ID, CN_S_OBJ_ID, CN_S_DISPLAY_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_S_THUMB_URL, CN_T_FILE_DATETIME, CN_S_EXTATTR, CN_N_SHARE, CN_T_LINK, CN_S_TAGS ) ' +
    N'SELECT ''' + @strUserLogin2 + N''', ''' + @strCatalogID + N''', CN_S_OBJ_ID, CN_S_DISPLAY_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_S_THUMB_URL, CN_T_FILE_DATETIME, CN_S_EXTATTR, CN_N_SHARE, CN_T_LINK, CN_S_TAGS ' +
    N'FROM OI_ND_CATALOG_HLINK_' + @strTabIndex1 +
    N' WHERE (CN_S_CATALOG_ID IS NULL OR CN_S_CATALOG_ID = '''') AND CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )
    -- 删除
    Print N'根级目录文档,删除'
    Set @strSQL = N'DELETE OI_ND_CATALOG_HLINK_' + @strTabIndex1 + N' WHERE (CN_S_CATALOG_ID IS NULL OR CN_S_CATALOG_ID = '''') AND CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )

    -- 子级目录文档,复制
    Print N'子级目录文档,复制'
    Set @strSQL = N'INSERT INTO OI_ND_CATALOG_HLINK_' + @strTabIndex2 + N' ( CN_S_CREATOR_ID, CN_S_CATALOG_ID, CN_S_OBJ_ID, CN_S_DISPLAY_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_S_THUMB_URL, CN_T_FILE_DATETIME, CN_S_EXTATTR, CN_N_SHARE, CN_T_LINK, CN_S_TAGS ) ' +
    N'SELECT ''' + @strUserLogin2 + N''', CN_S_CATALOG_ID, CN_S_OBJ_ID, CN_S_DISPLAY_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_S_THUMB_URL, CN_T_FILE_DATETIME, CN_S_EXTATTR, CN_N_SHARE, CN_T_LINK, CN_S_TAGS ' +
    N'FROM OI_ND_CATALOG_HLINK_' + @strTabIndex1 +
    N' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )
    -- 删除
    Print N'子级目录文档,删除'
    Set @strSQL = N'DELETE OI_ND_CATALOG_HLINK_' + @strTabIndex1 + N' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )
    End

    -- 未分表的数据表,直接替换
    -- 回收站,原根目录文档
    Print N'回收站,原根目录文档'
    Set @strSQL = N'UPDATE OI_ND_DOC_DELETE SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''', CN_S_DELETED_BY_ID = ''' + @strUserLogin2 + N''', CN_S_DELETED_BY = ''' + @strUserName2 + N''', CN_G_CATALOG_ID = ''' + @strCatalogID + N''' ' +
    N'WHERE (CN_G_CATALOG_ID IS NULL OR CN_G_CATALOG_ID = '''') AND CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )
    -- 回收站,其它目录文档
    Print N'回收站,其它目录文档'
    Set @strSQL = N'UPDATE OI_ND_DOC_DELETE SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''', CN_S_DELETED_BY_ID = ''' + @strUserLogin2 + N''', CN_S_DELETED_BY = ''' + @strUserName2 + N''' ' +
    N'WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )

    -- 历史表
    Print N'历史表'
    Set @strSQL = N'UPDATE OI_ND_DOC_HISTORY SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''', CN_S_OPERATOR_ID = ''' + @strUserLogin2 + N''', CN_S_OPERATOR = ''' + @strUserName2 + N''' ' +
    N'WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )

    -- 根级目录
    Print N'根级目录'
    Set @strSQL = N'UPDATE OI_ND_CATALOG SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''', CN_S_PARENTID = ''' + @strCatalogID + N''' ' +
    N'WHERE (CN_S_PARENTID IS NULL OR CN_S_PARENTID = '''') AND CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )
    -- 子级目录
    Print N'子级目录'
    Set @strSQL = N'UPDATE OI_ND_CATALOG SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''' ' +
    N'WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )

    -- 共享出去信息替换
    Print N'共享出去信息替换'
    Set @strSQL = N'UPDATE OI_ND_SHARE_OUT SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )

    -- 删除共享进来 A -> B,B -> A 记录
    Print N'删除共享进来 A -> B,B -> A 记录'
    Set @strSQL = N'DELETE OI_ND_SHARE_IN WHERE (CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''' AND CN_S_SHARER_ID = ''' + @strUserLogin2 + N''') OR (CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''' AND CN_S_SHARER_ID = ''' + @strUserLogin1 + N''')'
    EXEC( @strSQL )
    -- 共享进来信息替换
    Print N'共享进来信息替换'
    Set @strSQL = N'UPDATE OI_ND_SHARE_IN SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
    EXEC( @strSQL )
    END
    GO

  • 相关阅读:
    安装Joomla!3
    keepalived + lvs
    systemd 服务介绍
    lvs 进阶 第二章
    lvs 初始 第一章
    iptables 最终 第四章
    bind 笔记
    iptables 扩展匹配 第三章
    iptables 认识 第二章
    iptables 初见 第一章
  • 原文地址:https://www.cnblogs.com/mobox/p/14975603.html
Copyright © 2011-2022 走看看