人员是否可见权限控制函数
FUNCTION PERSON_MATCH
(
I_LOG_TYPE VARCHAR2, --日志类型RM9075
I_OP_USER IN VARCHAR2, --用户
I_CUS_TYPE VARCHAR2, --客户类型
I_COMP_NO VARCHAR2, --公司编号
I_FLAG VARCHAR2 --是否参与验证Y参与验证 否则不参与验证
)RETURN VARCHAR2
/**********************************************************************************
[功能描述] 查询人员的查看权限是否受限制
[修改日期] 2018-7-16
[返回代码]
Y代表不受限 ,N代表受限
**********************************************************************************/
AS
V_LOG_TYPE CUST.EMP_OPERA_LIMIT_CONFIG.LOG_TYPE%TYPE; --日志类型
V_OP_USER RQ_MNG.USER_PASS.EMP_NO%TYPE; --操作人
V_CUS_TYPE CUST.EMP_OPERA_LIMIT_CONFIG.CUS_TYPE%TYPE; --客户类型
V_COMP_NO CUST.EMP_OPERA_LIMIT_CONFIG.COMP_NO%TYPE;
V_FLAG VARCHAR2(1);
V_IS_EXISTS NUMBER;
BEGIN
V_LOG_TYPE := I_LOG_TYPE;
V_OP_USER := UPPER(I_OP_USER);
V_CUS_TYPE := I_CUS_TYPE;
V_COMP_NO := I_COMP_NO;
V_FLAG := I_FLAG;
IF V_FLAG = 'Y' THEN
SELECT COUNT(1) INTO V_IS_EXISTS
FROM CUST.EMP_OPERA_LIMIT_CONFIG
WHERE LOG_TYPE = V_LOG_TYPE
AND CUS_TYPE = V_CUS_TYPE
AND COMP_NO = V_COMP_NO
AND EMP_NO = V_OP_USER;
IF V_IS_EXISTS > 0 THEN
RETURN 'Y';
ELSE
RETURN 'N';
END IF;
ELSE
RETURN 'Y';
END IF;
END PERSON_MATCH;
--函数的应用之处。。。。。。。。。。。。。。。获取数据处限制条件。。。。。。。。
--获取客户类型,如果客户获取不到类型(没有跟进人,被分配到池),默认能够查看
BEGIN
SELECT
MC.IF_STAR
INTO
V_IF_STAR
FROM CUST.MY_CUST MC
WHERE MC.CUS_NO = V_CUS_NO;
--如果失去客户类型,默认可见,不参与验证
EXCEPTION WHEN OTHERS THEN
V_IN_VISABLE := 'N';
END;
--公司参数开关是否开启,开启表示参与验证,否则不参与
BEGIN
SELECT
CP.F_VALUE
INTO
V_F_VALUE
FROM RQ_MNG.COMP_PARAMETER CP
WHERE CP.FCS_TYPE = 'EMP_VIEW'
ANDCP.COMP_NO = V_ROW_EMPLOYEE.COMP_NO;
EXCEPTION WHEN OTHERS THEN
R_CODE := 'E05';
R_MSG := '公司参数,是否参与业务限制(跟进,计划,通话)未找到!';
GOTO END_EXE;
END;
--获取数据
BEGIN
OPEN R_DATA FOR
SELECT * FROM ( SELECT T1.*,ROWNUM RN
FROM (SELECT CF.CREATE_TIME CREATE_TIME, -- 跟进时间
RQ_MNG.GET_USER_NAME(CF.EMP_NO) EMP_NAME, -- 跟进人
RQ_MNG.DIC.GET_DIC_NAME('RM','RM0028',CF.FR_WAY) FR_WAY_VAL,--跟进方式(中文)
CF.FR_CMT FR_CMT, -- 跟进内容
COUNT(1) OVER() R_PAGESUM
FROM CUST.C_FOLLOW_RECORD CF
WHERE CF.CUS_NO = V_CUS_NO
ANDCF.COMP_NO = V_ROW_EMPLOYEE.COMP_NO
--默认看自己对客户的跟进
OR CF.EMP_NO = V_OP_USER
AND (
--如果失去客户类型,默认能够查看
'Y' =
( SELECT CUST.M_CUST_LIMIT_CONFIG.PERSON_MATCH(
'1', --日志类型 RM9075 1 跟进记录
V_OP_USER, --用户
V_IF_STAR, --客户类型
V_ROW_EMPLOYEE.COMP_NO, --公司编号
V_IN_VISABLE --是否参与验证 Y 参与 N 不参与
) FROM DUAL )
OR
--总开关是否开启,开启参与限制,关闭,不参与限制
'N' = V_F_VALUE
)
ORDER BY CF.CREATE_TIME DESC) T1
WHERE ROWNUM <= V_ROWCOUNT * V_PAGENUM)T2
WHERE T2.RN > V_ROWCOUNT * (V_PAGENUM - 1);
EXCEPTION WHEN OTHERS THEN
R_CODE := 'E00';
R_MSG := '操作失败! ' || SQLERRM;
GOTO END_EXE;
END;
R_CODE := 'S00';
R_MSG := '操作成功!';