不同层次组织机构数据分析共享(原)

场景:集团式架构公司体系,因业务原因各子公司间数据相互独立,集团主管部门可对子公司进行数据监管、统计、分析;
解决办法:采用部门编码权限方式(纯模型,各位看官勿笑,如有好的解决方式请提供)
1、业务数据增加数据维护人员信息。
2、部门增加权限编码,大致方式(父:0001、子一:00010001、子二:00010002)。
3、数据访问根据当前用户所在部门 like 数据维护人员所在部门进行比较。
4、关于父子权限编码问题,涉及部门固有组织形式,所以不采用企业内部编码,对此自己通过后台维护处理。
5、目前采用Oracle中的触发器解决部门权限编码问题。

附两段脚本,分别是Oracle和SQLServer的(俺的新系统框架跨数据库平台哟!):
ORACLE版:

ContractedBlock.gif ExpandedBlockStart.gif Code
CREATE OR REPLACE TRIGGER TR_TS_DEPARTMENT_BIU
  BEFORE 
INSERT ON TS_DEPARTMENT
  
FOR EACH ROW
DECLARE
  P_CHILDCOUNT      
INT;
  P_PARENTRIGHTCODE 
VARCHAR(126);
BEGIN
  
--父部门权限号
  SELECT NVL(RIGHTCODE, '')
    
INTO P_PARENTRIGHTCODE
    
FROM TS_DEPARTMENT
   
WHERE DEPARTMENTID = :NEW.PARENTDEPARTMENTID;

  
--当前部门权限号
  SELECT COUNT(1)
    
INTO P_CHILDCOUNT
    
FROM TS_DEPARTMENT
   
WHERE PARENTDEPARTMENTID = :NEW.PARENTDEPARTMENTID;

  :NEW.RIGHTCODE :
= P_PARENTRIGHTCODE ||
                    LPAD(TO_CHAR(P_CHILDCOUNT), 
3'0');
END;

SQLServer版:

 

ContractedBlock.gif ExpandedBlockStart.gif Code
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER TRIGGER [TR_TS_DEPARTMENT_BIU] ON [dbo].[TS_DEPARTMENT]
  instead 
of INSERT
  
as
DECLARE
       
@P_CHILDCOUNT        int,
       
@P_PARENTRIGHTCODE   varchar(126),
       
@DEPARTMENTID        char(20),
       
@PARENTDEPARTMENTID    char(20),
       
@DEPARTMENTCODE      varchar(128),
       
@DEPARTMENTNAME      varchar(128),
       
@ZIPCODE             varchar(32),
       
@TEL1                varchar(32),
       
@TEL2                varchar(32),
       
@FAX                  varchar(32),
       
@EMAIL                varchar(64),
       
@ADDRESS              varchar(128),
       
@STOPFLAG             char(1),
       
@PROPERTY             varchar(128),
       
@RIGHTCODE            varchar(126),
       
@LASTUPDATEUSER       char(20),
       
@LASTUPDATETIME       datetime,
       
@REMARKS              varchar(128);
BEGIN
  
--父部门权限号
  SELECT @DEPARTMENTID = DEPARTMENTID,
         
@PARENTDEPARTMENTID =PARENTDEPARTMENTID,
         
@DEPARTMENTCODE = DEPARTMENTCODE,
         
@DEPARTMENTNAME = DEPARTMENTNAME,
         
@ZIPCODE  = ZIPCODE,
         
@TEL1 = TEL1,
         
@TEL2 = TEL2,
         
@FAX = FAX,
         
@EMAIL = EMAIL,
         
@ADDRESS = ADDRESS,
         
@STOPFLAG =STOPFLAG,
         
@PROPERTY = PROPERTY,
         
@RIGHTCODE =RIGHTCODE,
         
@LASTUPDATEUSER = LASTUPDATEUSER,
         
@LASTUPDATETIME = LASTUPDATETIME,
         
@REMARKS = REMARKS
  
FROM inserted;
  
  
--父部门权限号
  SELECT @P_CHILDCOUNT = COUNT(1),
         
@P_PARENTRIGHTCODE = RIGHTCODE
    
FROM TS_DEPARTMENT
   
WHERE TS_DEPARTMENT.PARENTDEPARTMENTID = @PARENTDEPARTMENTID
   
group by RIGHTCODE;
  
--当前部门权限号
  select @RIGHTCODE = @P_PARENTRIGHTCODE + dbo.LPAD(convert(varchar(128),@P_CHILDCOUNT), 3'0');
  
  
INSERT INTO TS_DEPARTMENT
     
VALUES
           (
@DEPARTMENTID,
           
@PARENTDEPARTMENTID,
           
@DEPARTMENTCODE,
           
@DEPARTMENTNAME,
           
@ZIPCODE,
           
@TEL1,
           
@TEL2,
           
@FAX,
           
@EMAIL,
           
@ADDRESS,
           
@STOPFLAG,
           
@PROPERTY,
           
@RIGHTCODE,
           
@LASTUPDATEUSER,
           
@LASTUPDATETIME,
           
@REMARKS);   
END;

 

转载于:https://www.cnblogs.com/spymaster/archive/2009/06/17/1504774.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值