• 快意报表存储过程标准写法


    create or replace procedure callbackAgentOutBound_proc(
    temp_e_startDate varchar2,--执行开始时间
    temp_e_endDate varchar2,--执行结束时间
    temp_s_startDate varchar2,--分配开始时间
    temp_s_endDate varchar2,--分配结束时间
    temp_act varchar2,--活动(ID,可多选)
    temp_org varchar2,--营业部(编号,可多选)
    temp_userId varchar2,--坐席(编号,可多选)
    p_user_id varchar2, --登录用户
    temp_user_org varchar2, --座席部门
    act_group varchar2, --分组类别<0默认人员分组,1活动分组>
    report_cur_type out report_cur.report_cursor_type)
    as
    /**********************************************************/
    /*功能:座席回访记录汇总表 */
    /*版本:4.0.0.0 */
    /*关联版本: */
    /*创建人:wangkx */
    /*创建时间:2012-07-30 */
    /*
    主要表:asv_tsk_detail_agent,
    涉及其他表:act_list,tsys_user,asv_tsk_execute,
    数据库:pms_1024,
    服务器IP:192.168.72.35
    V4.0.0.1 2013-05-09 modify wangxn: 系统出基线包
    V4.0.0.4 2013-03-25 modify liusm: [M201401160047]增加数据权限
    V4.0.0.5 2014-07-18 modify lumin11193: 将任务状态,外呼状态修改成可扩展
    V4.0.3.7 2016-09-28 modify huwy18730: 增加查询条件(act_group为1按活动分组,act_group为0按座席分组,默认0)
    */

    sqlCall varchar2(16000);
    e_startDate varchar2(50);
    e_endDate varchar2(50);
    s_startDate varchar2(50);
    s_endDate varchar2(50);
    userId varchar2(2000);
    act varchar(2000);
    e_betweenTime varchar2(1000):= ' ';
    s_betweenTime varchar2(1000):=' ';
    str_split varchar2(5) := ',';
    act_condition varchar2(4000):=' ';
    org_condition varchar2(10000):=' ';
    userorg_condition varchar2(10000):=' ';
    user_condition varchar2(10000):=' ';
    tableA varchar2(8000):=' ';
    tableB varchar2(8000):=' ';
    tableC varchar2(8000):=' ';
    v_param_value varchar2(30000) := ' ';

    v_user_auth_str varchar2(1000) := '';
    v_cust_auth_str varchar2(1000) := '';
    v_auth_sqlB varchar2(1000) := '';
    v_auth_sqlA varchar2(1000) := '';
    v_auth_sqlC varchar2(1000) := '';

    /******************************************************/
    begin
    --记录传入参数
    v_param_value := '@temp_user_org='||nvl(temp_user_org,'')||'@p_user_id='||nvl(p_user_id,'') ||'@temp_e_startDate=' || nvl(temp_e_startDate,'') || '@temp_e_endDate=' || nvl(temp_e_endDate,'') || '@temp_s_startDate=' || nvl(temp_s_startDate,'')
    || '@temp_s_endDate=' || nvl(temp_s_endDate,'') || '@temp_act=' || nvl(temp_act,'') || '@temp_org=' || nvl(temp_org,'')|| '@temp_userId=' || nvl(temp_userId,'')||'@act_group='||nvl(act_group,'');
    LOG_RP_PROC(v_param_value,'','','callbackAgentOutBound_V4.0.2.3','callbackAgentOutBound_proc: 座席回访记录汇总-表输入参数');

    --按活动分组需要显示活动名称
    if act_group='1' then
    tableA := 'select '''' user_name,a.act_id,a.act_name,
    nvl((select dic.dict_item_name from tsys_dict_item dic where dic.dict_entry_code = ''ASV_ACT_RESULT'' and dic.dict_item_code = atda.asv_act_result),''未执行'')status,
    count(1) cou,
    ''act_result'' act_result
    from asv_tsk_detail_agent atda,act_list a where atda.act_id = a.act_id ';

    tableB := 'select '''' user_name,aa.act_id,aa.act_name,
    (select dic.dict_item_name from tsys_dict_item dic where dic.dict_entry_code = ''ASV_TSK_STATUS'' and dic.dict_item_code = atdas.asv_tsk_status) status,
    count(1) cou,
    ''tsk_status'' act_result
    from asv_tsk_detail_agent atdas,act_list aa where atdas.act_id = aa.act_id ';

    tableC :='select '''' user_name,ac.act_id,ac.act_name,
    atdac.asv_tsk_status status,
    count(1) cou,
    ''be_overdue'' act_result
    from asv_tsk_detail_agent atdac, act_list ac, act_part_member apm
    where atdac.act_id = ac.act_id
    and atdac.act_tsk_id = apm.act_auto_id(+)
    and apm.hope_end_time != 0 and trim(apm.hope_end_time) is not null
    and ((rpad(apm.hope_end_time, 14, 9) < rpad(atdac.act_tsk_execute_dt, 14, 0) )
    or (atdac.act_tsk_execute_dt = 0 and to_number(to_char(sysdate,''yyyyMMddhhmiss'')) > rpad(apm.hope_end_time, 14, 9))
    ) ';
    else
    tableA := 'select atda.act_tsk_execute_id,'''' as act_id,'''' as act_name,
    nvl((select dic.dict_item_name from tsys_dict_item dic where dic.dict_entry_code = ''ASV_ACT_RESULT'' and dic.dict_item_code = atda.asv_act_result),''未执行'')status,
    count(1) cou,
    ''act_result'' act_result
    from asv_tsk_detail_agent atda,act_list a where atda.act_id = a.act_id ';

    tableB := 'select atdas.act_tsk_execute_id,'''' as act_id,'''' as act_name,
    (select dic.dict_item_name from tsys_dict_item dic where dic.dict_entry_code = ''ASV_TSK_STATUS'' and dic.dict_item_code = atdas.asv_tsk_status) status,
    count(1) cou,
    ''tsk_status'' act_result
    from asv_tsk_detail_agent atdas,act_list aa where atdas.act_id = aa.act_id ';

    tableC :='select atdac.act_tsk_execute_id,'''' as act_id,'''' as act_name,
    atdac.asv_tsk_status status,
    count(1) cou,
    ''be_overdue'' act_result
    from asv_tsk_detail_agent atdac, act_list ac, act_part_member apm
    where atdac.act_id = ac.act_id
    and atdac.act_tsk_id = apm.act_auto_id(+)
    and apm.hope_end_time != 0 and trim(apm.hope_end_time) is not null
    and ((rpad(apm.hope_end_time, 14, 9) < rpad(atdac.act_tsk_execute_dt, 14, 0) )
    or (atdac.act_tsk_execute_dt = 0 and to_number(to_char(sysdate,''yyyyMMddhhmiss'')) > rpad(apm.hope_end_time, 14, 9))
    ) ';
    end if;

    --执行时间 表字段:asv_tsk_detail_agent.act_tsk_execute_dt
    if temp_e_startDate is not null then
    e_startDate :=to_char(to_date(temp_e_startDate,'yyyy-mm-dd'),'yyyymmdd');
    tableA:=tableA||' and atda.act_tsk_execute_dt >= to_number('''|| RPad( e_startDate, 12,'0') ||''')';
    tableB:=tableB||' and atdas.act_tsk_execute_dt >= to_number('''|| RPad( e_startDate, 12,'0') ||''')';
    tableC:=tableC||' and atdac.act_tsk_execute_dt >= to_number('''|| RPad( e_startDate, 12,'0') ||''')';
    end if;

    if temp_e_endDate is not null then
    e_endDate := to_char(to_date(temp_e_endDate,'yyyy-mm-dd'),'yyyymmdd');
    tableA:=tableA||' and atda.act_tsk_execute_dt <= to_number('''|| RPad(e_endDate,12,'9') || ''')';
    tableB:=tableB||' and atdas.act_tsk_execute_dt <= to_number('''|| RPad(e_endDate,12,'9') || ''')';
    tableC:=tableC||' and atdac.act_tsk_execute_dt <= to_number('''|| RPad(e_endDate,12,'9') || ''')';
    end if;

    --分配时间 表字段:asv_tsk_detail_agent.act_tsk_distribution_dt
    if temp_s_startDate is not null then
    s_startDate := to_char(to_date(temp_s_startDate,'yyyy-mm-dd'),'yyyymmdd');
    tableA:=tableA||' and atda.act_tsk_distribution_dt >= to_number('''|| RPad( s_startDate, 12,'0') ||''')';
    tableB:=tableB||' and atdas.act_tsk_distribution_dt >= to_number('''|| RPad( s_startDate, 12,'0') ||''')';
    tableC:=tableC||' and atdac.act_tsk_distribution_dt >= to_number('''|| RPad( s_startDate, 12,'0') ||''')';
    end if;

    if temp_s_endDate is not null then
    s_endDate := to_char(to_date(temp_s_endDate,'yyyy-mm-dd'),'yyyymmdd');
    tableA:=tableA||' and atda.act_tsk_distribution_dt <= to_number('''||RPad(s_endDate,12,'9') || ''')';
    tableB:=tableB||' and atdas.act_tsk_distribution_dt <= to_number('''||RPad(s_endDate,12,'9') || ''')';
    tableC:=tableC||' and atdac.act_tsk_distribution_dt <= to_number('''||RPad(s_endDate,12,'9') || ''')';
    end if;


    --营业部
    if temp_org is null then
    org_condition:=' ';
    else
    tableA:=tableA||' and atda.act_customer_depart in ('''|| replace(temp_org,',',''',''') || ''')';
    tableB:=tableB||' and atdas.act_customer_depart in ('''|| replace(temp_org,',',''',''') || ''')';
    tableC:=tableC||' and atdac.act_customer_depart in ('''|| replace(temp_org,',',''',''') || ''')';
    end if;
    --活动
    if temp_act is null then
    act_condition:=' ';
    else
    tableA:=tableA||' and atda.act_id in('||temp_act || ')';
    tableB:=tableB||' and atdas.act_id in('||temp_act || ')';
    tableC:=tableC||' and atdac.act_id in('||temp_act || ')';
    end if;

    --座席
    if temp_userId is null then
    user_condition:=' ';
    else
    userId := trim(both ',' from temp_userId);
    tableA:=tableA||' and atda.act_tsk_execute_id in('''|| replace(userId,',',''',''') || ''')';
    tableB:=tableB||' and atdas.act_tsk_execute_id in('''|| replace(userId,',',''',''') || ''')';
    tableC:=tableC||' and atdac.act_tsk_execute_id in('''|| replace(userId,',',''',''') || ''')';
    end if;
    --座席部门
    if temp_user_org is null then
    userorg_condition:=' ';
    else
    userorg_condition := 'select user_id from tsys_user where org_id in ('''|| replace(temp_user_org,',',''',''') || ''')';
    tableA:=tableA||' and atda.act_tsk_execute_id in('||userorg_condition||')';
    tableB:=tableB||' and atdas.act_tsk_execute_id in('||userorg_condition||')';
    tableC:=tableC||' and atdac.act_tsk_execute_id in('||userorg_condition||')';
    end if;

    -- 数据权限
    v_user_auth_str := pkg_sys_dataright.fn_sys_getAuthUsers(p_user_id,'ASV');
    if v_user_auth_str <> 'ALL_RIGHT' then
    --v_auth_sqlA := ' and (a.act_create_id in ( ' || v_user_auth_str || ' ) or ( a.act_id in ( select act_id from act_execute_department where dep_code = ( select org_id from tsys_user where user_id = ''' || p_user_id || ''' ) ) ) )';
    --v_auth_sqlB := ' and (aa.act_create_id in ( ' || v_user_auth_str || ' ) or ( aa.act_id in ( select act_id from act_execute_department where dep_code = ( select org_id from tsys_user where user_id = ''' || p_user_id || ''' ) ) ) )';
    v_auth_sqlA := ' and atda.act_tsk_execute_id in (' ||v_user_auth_str || ')';
    v_auth_sqlB := ' and atdas.act_tsk_execute_id in (' ||v_user_auth_str || ')';
    v_auth_sqlC := ' and atdac.act_tsk_execute_id in (' ||v_user_auth_str || ')';
    end if;

    v_cust_auth_str := pkg_sys_dataright.fn_sys_getAuthBranchs(p_user_id,'CM_CUSTOMER');

    if v_cust_auth_str <> 'ALL_RIGHT' then
    v_auth_sqlA := v_auth_sqlA || ' and atda.act_customer_depart in (' || v_cust_auth_str || ')';
    v_auth_sqlB := v_auth_sqlB || ' and atdas.act_customer_depart in (' || v_cust_auth_str || ')';
    v_auth_sqlC := v_auth_sqlC || ' and atdac.act_customer_depart in (' || v_cust_auth_str || ')';
    end if;

    tableA := tableA || v_auth_sqlA;
    tableB := tableB || v_auth_sqlB;
    tableC := tableC || v_auth_sqlC;

    --增加分组(act_group为1时,分组条件增加按活动分组)
    if act_group='1' then
    tableA := tableA||' group by a.act_id,a.act_name, atda.asv_act_result';
    tableB := tableB||' group by aa.act_id,aa.act_name, atdas.asv_tsk_status';
    tableC := tableC||' group by atdac.act_tsk_execute_id,ac.act_id,ac.act_name, atdac.asv_tsk_status';
    else
    tableA := tableA||' group by atda.act_tsk_execute_id, atda.asv_act_result';
    tableB := tableB||' group by atdas.act_tsk_execute_id, atdas.asv_tsk_status';
    tableC := tableC||' group by atdac.act_tsk_execute_id, atdac.asv_tsk_status';
    end if;
    /*********************************************************************************************************************/

    sqlCall:=tableA || ' union all ' ||tableB || ' union all ' || tableC;

    if act_group='0' then
    sqlCall:=' select u.user_name||''[''||u.user_id||'']'' as user_name, t.* from ' ||
    '(select * from ('||sqlCall||') ) t, tsys_user u ' ||
    'where t.act_tsk_execute_id = u.user_id';
    end if;

    -- 调用公共读写日志过程
    LOG_RP_PROC(tableA,'','','V4.0.3.7tableA','座席回访记录汇总表A');
    LOG_RP_PROC(tableB,'','','V4.0.3.7tableB','座席回访记录汇总表B');
    LOG_RP_PROC(tableC,'','','V4.0.3.7tableC','座席回访记录汇总表C');
    LOG_RP_PROC(sqlCall,'','','V4.0.3.7table','座席回访记录汇总表');
    open report_cur_type for sqlCall;
    end callbackAgentOutBound_proc;
    /

  • 相关阅读:
    【Android
    【Android
    【Android
    【Android
    压测工具Siege
    压测工具Webbench
    Varnish与Squid的对比
    大牛的法宝[转]
    告别平庸的10种简单方法
    一个优秀的研发团队应该具备什么特征[转]
  • 原文地址:https://www.cnblogs.com/jungege/p/5983840.html
Copyright © 2020-2023  润新知