56,679
社区成员
发帖
与我相关
我的任务
分享
DROP PROCEDURE IF EXISTS p_test ;
CREATE PROCEDURE p_test(
scompanycode VARCHAR(8),
iuserid VARCHAR(11),
idepartmentid VARCHAR(50),
nowdate VARCHAR(50)
)
BEGIN
DECLARE userid INT;-- 用户ID
DECLARE deptid INT;-- 部门ID
DECLARE countFlag INT;
DECLARE lst VARCHAR(1000);
SET lst = '$';
SET @countFlag = 0;
SET userid = CAST(iuserid AS DECIMAL(8,0)); -- 赋值
WHILE idepartmentid IS NOT NULL DO
SET deptid =CAST(idepartmentid AS DECIMAL(8,0));
SET lst = CONCAT(lst, ',', deptid);
IF deptid = -1 THEN
SET idepartmentid = NULL;
ELSEIF deptid = -3 OR deptid = -2 THEN
SET idepartmentid = '-1';
ELSE
IF deptid > 0 THEN -- 员工
SELECT iparentdepartmentid INTO idepartmentid
FROM tdepartment d WHERE d.idepartmentid = idepartmentid;
IF idepartmentid = '-1' THEN
SET idepartmentid = '-3';
END IF;
ELSE -- 来宾
SELECT iguestclassifyparentid INTO idepartmentid
FROM tguestclassify g WHERE g.iguestclassifyid = ABS(idepartmentid);
IF idepartmentid <> '-2' THEN
SET idepartmentid = CONCAT('-',idepartmentid);
END IF;
END IF;
END WHILE;
IF iuserid IS NOT NULL THEN
SELECT DISTINCT @countFlag:=@countFlag + 1 AS po ,tt.iuserid, tt.idepartmentid,
tt.spolicyaction,tt.ipriority,tt.dstartdate,tt.denddate,tt.ilogrecord,
t.sweekday sweekday,t.stimeperiod stimeperiod,tp.spromptinfo spromptinfo,
tw.iwarnlevel iwarnlevel,tw.swarnname swarnname
FROM tcheckportpolicy tt
LEFT JOIN tperiod t ON t.iperiodid=tt.sstarttime
LEFT JOIN tpromptinfo tp ON tp.ipromptinfoid=tt.sendtime
LEFT JOIN twarnlevel tw ON tw.iwarnlevelid = tt.iwarnlevelid
WHERE tt.istate = 0
AND tt.isornotcheckport = 1
AND DATE_FORMAT(tt.dstartdate,'%Y-%m-%d') <= DATE_FORMAT(nowdate,'%Y-%m-%d')
AND DATE_FORMAT(tt.denddate,'%Y-%m-%d') >=DATE_FORMAT(nowdate,'%Y-%m-%d')
AND tt.scompanycode= scompanycode
AND tt.iuserid= userid OR FIND_IN_SET(tt.idepartmentid, lst)
ORDER BY tt.ipriority DESC;
SET iuserid = NULL;
ELSE
SELECT DISTINCT @countFlag:=@countFlag + 1 AS po ,tt.iuserid, tt.idepartmentid,
tt.spolicyaction,tt.ipriority,tt.dstartdate,tt.denddate,tt.ilogrecord,
t.sweekday sweekday,t.stimeperiod stimeperiod,tp.spromptinfo spromptinfo,
tw.iwarnlevel iwarnlevel,tw.swarnname swarnname
FROM tcheckportpolicy tt
LEFT JOIN tperiod t ON t.iperiodid=tt.sstarttime
LEFT JOIN tpromptinfo tp ON tp.ipromptinfoid=tt.sendtime
LEFT JOIN twarnlevel tw ON tw.iwarnlevelid = tt.iwarnlevelid
WHERE tt.istate = 0
AND tt.isornotcheckport = 1
AND DATE_FORMAT(tt.dstartdate,'%Y-%m-%d') <= DATE_FORMAT(nowdate,'%Y-%m-%d')
AND DATE_FORMAT(tt.denddate,'%Y-%m-%d') >=DATE_FORMAT(nowdate,'%Y-%m-%d')
AND tt.scompanycode= scompanycode
AND FIND_IN_SET(tt.idepartmentid, lst)
ORDER BY tt.ipriority DESC;
END IF;
END