- --市案件审批--for 修复一单多派执行异常的情况,使用游标遍历执行
- PROCEDURE PROC_CASEAPPLY(P_CASENUM VARCHAR2,
- P_APPLYTYPE NUMBER,
- P_ISAPPROVE NUMBER,
- P_DAYS NUMBER,
- P_REPCONTENT VARCHAR2,
- P_RETURNVALUE OUT NUMBER) IS
- V_CASEID NUMBER;
- V_RECUSERID NUMBER;
- V_TACHEID NUMBER;
- V_ROLETYPE NUMBER;
- BEGIN
-
- --获取需更新的案件信息,因存在一单多派的情况,所以需遍历查询到的案件
- declare--定义游标
- cursor case_cursor is select 案件记录号 from 投诉业务表 where 市案件公文号 = P_CASENUM and 环节号 in (95, 96);
- begin
- for curcase in case_cursor loop--遍历游标
- V_CASEID := curcase.案件记录号;
-
-
- /*SELECT 案件记录号
- INTO V_CASEID
- FROM 投诉业务表
- WHERE 市案件公文号 = P_CASENUM
- AND 环节号 IN (95, 96);*/
-
- SELECT 申请部门人员
- INTO V_RECUSERID
- FROM 案件申请表
- WHERE 案件记录号 = V_CASEID
- AND 是否最新 = 1
- AND 申请类型 = P_APPLYTYPE;
-
- SELECT ROLETYPE
- INTO V_ROLETYPE
- FROM TABBASEPERSON
- WHERE CHVID = V_RECUSERID;
-
- --退回
- IF P_APPLYTYPE = 1 THEN
- IF P_ISAPPROVE = 0 THEN
- --驳回
-
- UPDATE 案件申请表
- SET 是否驳回 = 1, 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT
- WHERE 案件记录号 = V_CASEID
- AND 申请类型 = 1
- AND 是否最新 = 1;
- UPDATE 投诉业务表 SET 环节号 = 98 WHERE 案件记录号 = V_CASEID;
- V_TACHEID := 98;
- ELSE
- --批准
- /*世道要变了,不能删除市级批准退回的案件。 yy 2015年3月19日10:29:08
- DELETE FROM 投诉业务表 WHERE 案件记录号 = V_CASEID;
- DELETE FROM TABDOCSTEP WHERE CASEID = V_CASEID;
- DELETE FROM 案件申请表 WHERE 案件记录号 = V_CASEID;
- */
- /*103:市批准退回*/
- UPDATE 投诉业务表 T
- SET T.环节号 = 103
- WHERE T.市案件公文号 = P_CASENUM; --T.案件记录号 = V_CASEID;
- V_TACHEID := 103;
-
- UPDATE 案件申请表
- SET 是否批准 = 1, 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT
- WHERE 案件记录号 = V_CASEID
- AND 申请类型 = 1
- AND 是否最新 = 1;
-
- --转移结案表
- PKG_TACHERUN.PRO_TRANSFORM(V_CASEID,
- '投诉业务表',
- '案件记录号',
- '案件公文号,实际完成时间,规定完成时间,派单员,环节号,主办部门人员,主办部门,主办发送标志,主办签收标志');
-
- END IF;
- ELSE
- --延期
- IF P_ISAPPROVE = 0 THEN
- --驳回
- UPDATE 案件申请表
- SET 是否驳回 = 1, 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT
- WHERE 案件记录号 = V_CASEID
- AND 申请类型 = 2
- AND 答复时间 IS NULL;
- --AND 是否最新 = 1;
- IF V_ROLETYPE = 29 THEN
- UPDATE 投诉业务表 SET 环节号 = 117 WHERE 案件记录号 = V_CASEID;
- V_TACHEID := 117;
- ELSIF V_ROLETYPE = 28 THEN
- UPDATE 投诉业务表 SET 环节号 = 18 WHERE 案件记录号 = V_CASEID;
- V_TACHEID := 18;
- END IF;
-
- ELSE
- UPDATE 案件申请表
- SET 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT, 是否批准 = 1
- WHERE 案件记录号 = V_CASEID
- AND 申请类型 = 2
- --AND 是否最新 = 1;
- AND 答复时间 IS NULL;
-
- IF V_ROLETYPE = 28 THEN
- UPDATE 投诉业务表 SET 环节号 = 17 WHERE 案件记录号 = V_CASEID;
- V_TACHEID := 17;
-
- ELSIF V_ROLETYPE = 29 THEN
- UPDATE 投诉业务表 SET 环节号 = 116 WHERE 案件记录号 = V_CASEID;
- V_TACHEID := 116;
- END IF;
-
- UPDATE 投诉业务表
- SET 办理时间 = 办理时间 + P_DAYS * 1440,
- 规定完成时间 = 规定完成时间 + P_DAYS,
- 市办理时限 = 市办理时限 + P_DAYS * 1440,
- 市规定完成时间 = 市规定完成时间 + P_DAYS
- WHERE 市案件公文号 = P_CASENUM;
- END IF;
- END IF;
-
- --更新环节表数据
- UPDATE TABDOCSTEP
- SET STATE = 3, ISNEWEST = 0, SENDDATE = SYSDATE
- WHERE ISNEWEST = 1
- AND RECID = PKG_CONSTANT.USERIDCITY
- AND CASEID = V_CASEID;
- --添加环节表数据
- INSERT INTO TABDOCSTEP
- (STEPID, CASEID, SENDID, RECID, TACHEID)
- VALUES
- (SEQ_TABDOCSTEP.NEXTVAL,
- V_CASEID,
- PKG_CONSTANT.USERIDCITY,
- V_RECUSERID,
- V_TACHEID);
-
-
- end loop;
- end;
-
-
- P_RETURNVALUE := 1;
- COMMIT;
- EXCEPTION
- WHEN OTHERS THEN
- DBMS_OUTPUT.PUT_LINE(SQLCODE);
- DBMS_OUTPUT.PUT_LINE(SQLERRM);
- P_RETURNVALUE := 0;
- ROLLBACK;
- END;
-