地区排名脚本 一千三百多行代码

CREATE OR REPLACE PACKAGE BODY QMS_RPT_AREA AS
  /******************************************************************************
     NAME:       QMS_RPT_AREA
     PURPOSE:  对网点,省 ,市进行维修数量排名

     REVISIONS:
     Ver        Date        Author           Description
     ---------  ----------  ---------------  ------------------------------------
     1.0        2015/8/18      chenli       1. Created this package.
  ******************************************************************************/

  /******************************************************************************
     NAME:
     PURPOSE:   按网点统计维修率
  ******************************************************************************/
  FUNCTION branch_Slice(ReportId        VARCHAR2,
                        evaluate_id     VARCHAR2,
                        p_slice_id      varchar2,
                        Slice_Date_From DATE,
                        Slice_Date_To   DATE,
                        ORGID           varchar2) RETURN VARCHAR2 IS
    Slice_Date_FromTemp VARCHAR2(200);
    SQLSTR              VARCHAR2(18000);

  BEGIN

    Slice_Date_FromTemp := to_char(Slice_Date_From, ‘yyyy/mm/dd‘);

    if ORGID = ‘1‘ then
      SQLSTR := ‘insert into qms_rpt_area_rank_detail(ID,Province_Region_ID,Province_Region_Name ,maintain_count,report_type,org_id,maintain_date,evaluate_id,branch_id,branch_name) SELECT
 sys_guid(),  

 SUBSTR( (SELECT UU.REGION_ID FROM UNITS UU WHERE UU.UNIT_ID=G.unit_id),1,3),
 (SELECT RT.REG_NAME FROM REGION_TYPE RT WHERE RT.REGION_ID=SUBSTR( (SELECT UU.REGION_ID FROM UNITS UU WHERE UU.UNIT_ID=G.unit_id),1,3)) AS REGION_NAME, 

 G.maintainCount,
 1,
 1,
 to_date(‘‘‘ || Slice_Date_FromTemp || ‘‘‘,‘‘yyyy/mm/dd‘‘),
 ‘‘‘ || evaluate_id || ‘‘‘,
 G.unit_id,
 (select un.unit_name from units un where un.unit_id=  G.unit_id)

 FROM

 ( SELECT count(1) as maintainCount, s.unit_id

FROM  vw_rpt_css_service_rec_mdkt s ,units u where

    s.unit_id in(select r.unit_id from qms_rpt_area_rank r where r.evaluate_id=‘‘‘ ||
                evaluate_id || ‘‘‘)
 and s.unit_id=u.unit_id(+)
{WHERE}
 group by s.unit_id )
  G; ‘;
    elsif ORGID = ‘2‘ then
      SQLSTR := ‘insert into qms_rpt_area_rank_detail(ID,Province_Region_ID,Province_Region_Name ,maintain_count,report_type,org_id,maintain_date,evaluate_id,branch_id,branch_name) SELECT
 sys_guid(),  

 SUBSTR( (SELECT UU.REGION_ID FROM UNITS UU WHERE UU.UNIT_ID=G.unit_id),1,3),
 (SELECT RT.REG_NAME FROM REGION_TYPE RT WHERE RT.REGION_ID=SUBSTR( (SELECT UU.REGION_ID FROM UNITS UU WHERE UU.UNIT_ID=G.unit_id),1,3)) AS REGION_NAME, 

 G.maintainCount,
 1,
 1,
 to_date(‘‘‘ || Slice_Date_FromTemp || ‘‘‘,‘‘yyyy/mm/dd‘‘),
 ‘‘‘ || evaluate_id || ‘‘‘,
 G.unit_id,
 (select un.unit_name from units un where un.unit_id=  G.unit_id)

 FROM

 ( SELECT count(1) as maintainCount, s.unit_id

FROM  css_service_rec s ,units u where 1=1 and

    s.unit_id in(select r.unit_id from qms_rpt_area_rank r where r.evaluate_id=‘‘‘ ||
                evaluate_id || ‘‘‘)
 and s.unit_id=u.unit_id(+)
{WHERE}
 group by s.unit_id  )
  G; ‘;
    end if;

    return SQLSTR;
  END branch_Slice;
  /******************************************************************************
     NAME:
     PURPOSE:   按省统计维修率
  ******************************************************************************/
  FUNCTION PROVINCE_SLICE(ReportId        VARCHAR2,
                          p_slice_id      varchar2,
                          evaluate_id     varchar2,
                          Slice_Date_From DATE,
                          Slice_Date_TO   DATE,
                          ORGID           varchar2) RETURN VARCHAR2 IS
    SQLSTR              VARCHAR2(18000);
    Slice_Date_FromTemp VARCHAR2(200);
  BEGIN

    Slice_Date_FromTemp := to_char(Slice_Date_From, ‘yyyy/mm/dd‘);

    if ORGID = ‘1‘ then

      SQLSTR := ‘insert into qms_rpt_area_rank_detail(ID,Province_Region_ID,Province_Region_Name,maintain_count,report_type,maintain_date,evaluate_id) SELECT
 sys_guid(),  G.provinceId,G.provineName ,G.maintainCount,2,to_date(‘‘‘ ||
                Slice_Date_FromTemp || ‘‘‘,‘‘yyyy/mm/dd‘‘),‘‘‘ ||
                evaluate_id || ‘‘‘
 FROM( SELECT count(1) as maintainCount ,substr(r.region_id,1,3) as provinceId,
 (select t.reg_name from region_type t where t.region_id=substr(r.region_id,1,3)) as provineName
FROM  vw_rpt_css_service_rec_mdkt  s,region_type r where   substr(s.region_code,1,3)=r.region_id
 and substr(r.region_id,1,3) in( select eva.provinceid from QMS_RPT_AREA_RANK eva where eva.evaluate_id=‘‘‘ ||
                evaluate_id || ‘‘‘)
 {WHERE}
 group  by substr(r.region_id,1,3))  G;  ‘;
    elsif ORGID = ‘2‘ then
      SQLSTR := ‘insert into qms_rpt_area_rank_detail(ID,Province_Region_ID,Province_Region_Name,maintain_count,report_type,maintain_date,evaluate_id) SELECT
 sys_guid(),  G.provinceId,G.provineName ,G.maintainCount,2,to_date(‘‘‘ ||
                Slice_Date_FromTemp || ‘‘‘,‘‘yyyy/mm/dd‘‘),‘‘‘ ||
                evaluate_id || ‘‘‘
 FROM( SELECT count(1) as maintainCount ,substr(u.region_id,1,3) as provinceId,
 (select t.reg_name from region_type t where t.region_id=substr(u.region_id,1,3)) as provineName
FROM  css_service_rec  s,region_type r  , units u
  where
  s.unit_id = u.unit_id
  and substr(u.region_id, 1, 3) = r.region_id
 and substr(u.region_id,1,3) in( select eva.provinceid from QMS_RPT_AREA_RANK eva where eva.evaluate_id=‘‘‘ ||
                evaluate_id || ‘‘‘)
 {WHERE}
 group by substr(u.region_id,1,3))  G;  ‘;
    end if;
    return SQLSTR;
  END PROVINCE_SLICE;
  /******************************************************************************
     NAME:
     PURPOSE:   按市统计维修率
  ******************************************************************************/
  FUNCTION CITY_SLICE(ReportId        VARCHAR2,
                      p_slice_id      varchar2,
                      evaluate_id     varchar2,
                      Slice_Date_From DATE,
                      Slice_Date_To   DATE,
                      ORGID           varchar2) RETURN VARCHAR2 IS

    SQLSTR              VARCHAR2(18000);
    Slice_Date_FromTemp VARCHAR2(200);
  BEGIN
    Slice_Date_FromTemp := to_char(Slice_Date_From, ‘yyyy/mm/dd‘);
    if ORGID = ‘1‘ then
      SQLSTR := ‘
 insert into qms_rpt_area_rank_detail(ID,Province_Region_ID,Province_Region_Name ,city_region_id,city_region_name,maintain_count,report_type,org_id,maintain_date,evaluate_id) SELECT
 sys_guid(),
substr(g.cityId,1,3),
 (select t.reg_name from region_type t where t.region_id=substr(g.cityId,1,3)),
 G.cityId,
 G.cityName ,

 G.maintainCount,
 3,
 1,
  to_date(‘‘‘ || Slice_Date_FromTemp || ‘‘‘,‘‘yyyy/mm/dd‘‘),
 ‘‘‘ || evaluate_id || ‘‘‘
 FROM 

 ( SELECT count(1) as maintainCount ,
 substr(r.region_id,1,5) as cityId,
 (select t.reg_name from region_type t where t.region_id=substr(r.region_id,1,5)) as cityName

FROM  vw_rpt_css_service_rec_mdkt  s,region_type r where  substr(s.region_code,1,5)=r.region_id
 and substr(r.region_id,1,5) in (select rnk.cityid from qms_rpt_area_rank rnk where rnk.evaluate_id=‘‘‘ ||
                evaluate_id || ‘‘‘)
 {WHERE}
 group by substr(r.region_id,1,5))  G;‘;
    elsif ORGID = ‘2‘ then

      SQLSTR := ‘
 insert into qms_rpt_area_rank_detail(ID,Province_Region_ID,Province_Region_Name ,city_region_id,city_region_name,maintain_count,report_type,org_id,maintain_date,evaluate_id) SELECT
 sys_guid(),
substr(g.cityId,1,3),
 (select t.reg_name from region_type t where t.region_id=substr(g.cityId,1,3)),
 G.cityId,
 G.cityName ,

 G.maintainCount,
 3,
 1,
  to_date(‘‘‘ || Slice_Date_FromTemp || ‘‘‘,‘‘yyyy/mm/dd‘‘),
 ‘‘‘ || evaluate_id || ‘‘‘
 FROM 

 ( SELECT count(1) as maintainCount ,
 substr(u.region_id,1,5) as cityId,
 (select t.reg_name from region_type t where t.region_id=substr(u.region_id,1,5)) as cityName

FROM  css_service_rec  s,units u, region_type r
  where
  s.unit_id = u.unit_id
 and substr(u.region_id, 1, 5) = r.region_id
 and substr(u.region_id,1,5) in (select rnk.cityid from qms_rpt_area_rank rnk where rnk.evaluate_id=‘‘‘ ||
                evaluate_id || ‘‘‘)
 {WHERE}
 group by (substr(u.region_id,1,5)))  G;‘;
    end if;

    return SQLSTR;
  END CITY_SLICE;

  /******************************************************************************
     NAME:
     PURPOSE:   用于获取各个网点的维修率排名
  ******************************************************************************/
  FUNCTION GetBranchRankSQL(PRODUCE_CATEGORY_PRA VARCHAR2,
                            EVALUATE_PRA         VARCHAR2,
                            RANKCOUNT            NUMBER,
                            ORGID                VARCHAR2) RETURN VARCHAR2 IS
    SQLSTR VARCHAR2(8000);

  BEGIN

    if ORGID = ‘1‘ then
      SQLSTR := ‘ insert into  qms_rpt_area_rank (ID,EVALUATE_ID,PROVINCEID,PROVINCENAME,MAINTAINCOUNT,REPORT_TYPE,PRODUCT_CATEGORY,UNIT_ID,UNIT_NAME,AVERAGE,RATE )
select  sys_guid(),‘‘‘ || EVALUATE_PRA ||
                ‘‘‘ ,  substr(plcaeTbl.region_id,0,3) as ProviceCode,(select  r.reg_name  from REGION_TYPE r  where r.region_id= substr(plcaeTbl.region_id,0,3)) as province  , plcaeTbl.nums,   ‘‘1‘‘,     ‘‘‘ ||
                PRODUCE_CATEGORY_PRA || ‘‘‘, plcaeTbl.unit_id ,  plcaeTbl.unit_name,  0,  0
 from (select
  u.unit_name,
  u.region_name,
  u.region_id,
  tbl.nums,
  tbl.unit_id
  from units u  ,
  ( select * from ( select  s.unit_id, count(1)  as nums from  vw_rpt_css_service_rec_mdkt s
                           where 1=1  {WHERE}    group by rollup(s.unit_id)
  order by nums desc)
    where rownum<=‘ || RANKCOUNT ||
                ‘  )  tbl where  tbl.unit_id=u.unit_id(+)  order by tbl.nums desc)  plcaeTbl;
                update qms_rpt_area_rank  r set r.RECODCOUNT=( select (select count(1) from (
 select count(1)
    from css_service_rec s
                           where s.sorg_id=‘‘MDKT‘‘
   {WHERE}
     group by (s.unit_id)))   from dual ) where r.evaluate_id=‘‘‘ ||
                EVALUATE_PRA || ‘‘‘ and r.UNIT_ID is null; ‘;

    elsif ORGID = ‘2‘ then

      SQLSTR := ‘insert into  qms_rpt_area_rank (ID,EVALUATE_ID,PROVINCEID,PROVINCENAME,MAINTAINCOUNT,REPORT_TYPE,PRODUCT_CATEGORY,UNIT_ID,UNIT_NAME,AVERAGE,RATE )
select
        sys_guid(),‘‘‘ || EVALUATE_PRA || ‘‘‘
        ,
        substr(plcaeTbl.region_id,0,3) as ProviceCode,
       (select  r.reg_name  from REGION_TYPE r  where r.region_id= substr(plcaeTbl.region_id,0,3)) as province  ,
       plcaeTbl.nums,   ‘‘1‘‘,     ‘‘‘ ||
                PRODUCE_CATEGORY_PRA ||
                ‘‘‘, plcaeTbl.unit_id ,  plcaeTbl.unit_name,  0,  0
 from (select
  u.unit_name,
  u.region_name,
  u.region_id,
  tbl.nums,
  tbl.unit_id
  from units u  , ( select * from (
 select  s.unit_id, count(1)  as nums
    from css_service_rec s where 1=1
            {WHERE}
    group by rollup(s.unit_id)

  order by nums desc) where rownum<=‘ || RANKCOUNT ||
                ‘  )  tbl where  tbl.unit_id=u.unit_id(+)  order by tbl.nums desc)  plcaeTbl;
                update qms_rpt_area_rank  r set r.RECODCOUNT=( select (select count(1) from (
 select count(1)
    from css_service_rec s where 1=1
   {WHERE}
    group by (s.unit_id)))  from dual ) where r.evaluate_id=‘‘‘ ||
                EVALUATE_PRA || ‘‘‘ and r.UNIT_ID is null; ‘;
    end if;

    return SQLSTR;
  END GetBranchRankSQL;

  /******************************************************************************
     NAME:
     PURPOSE:   用于获取各个省的维修率排名
  ******************************************************************************/
  FUNCTION GetProvinceRankSQL(PRODUCE_CATEGORY_PRA VARCHAR2,
                              EVALUATE_PRA         VARCHAR2,
                              RANKCOUNT            NUMBER,
                              ORGID                VARCHAR2) RETURN VARCHAR2 IS
    SQLSTR VARCHAR2(18000);
  BEGIN

    if (ORGID = ‘1‘) then

      SQLSTR := ‘insert into  qms_rpt_area_rank (ID,EVALUATE_ID,PROVINCEID,PROVINCENAME,MAINTAINCOUNT,REPORT_TYPE,PRODUCT_CATEGORY,AVERAGE,RATE )
select
 sys_guid(),
 ‘‘‘ || EVALUATE_PRA || ‘‘‘,
 provinceMaintain.provinceID,

(select R.REG_NAME from region_type  r where r.region_id=  provinceMaintain. provinceID ) as provinceName,
provinceMaintain. matainCount,
 2,
 ‘‘‘ || PRODUCE_CATEGORY_PRA || ‘‘‘,
 0,
 0
    from
  (select * from (
select substr(r.region_id,1,3) as provinceID , count(1) as matainCount
 from vw_rpt_css_service_rec_mdkt s,region_type r where   substr(s.region_code,1,3)=r.region_id
  {WHERE}
  group by rollup (substr(r.region_id,1,3)) order by matainCount desc) tbl where rownum<=‘ ||
                RANKCOUNT ||
                ‘)  provinceMaintain;
                update qms_rpt_area_rank  r set r.RECODCOUNT=( select (select count(1) from (
 select count(1)
    from VW_RPT_CSS_SERVICE_REC_MDKT s  , region_type r where   substr(s.region_code,1,3)=r.region_id
    {WHERE}

    group by substr(r.region_id,1,3)))  from dual ) where r.evaluate_id=‘‘‘ ||
                EVALUATE_PRA || ‘‘‘ and r.PROVINCEID is null;‘;

    elsif ORGID = ‘2‘ then

      SQLSTR := ‘insert into  qms_rpt_area_rank (ID,EVALUATE_ID,PROVINCEID,PROVINCENAME,MAINTAINCOUNT,REPORT_TYPE,PRODUCT_CATEGORY,AVERAGE,RATE )
select
 sys_guid(),
 ‘‘‘ || EVALUATE_PRA || ‘‘‘,
 provinceMaintain.provinceID,

(select R.REG_NAME from region_type  r where r.region_id=  provinceMaintain. provinceID ) as provinceName,
provinceMaintain. matainCount,
 2,
 ‘‘‘ || PRODUCE_CATEGORY_PRA || ‘‘‘,
 0,
 0
    from
  (select * from (
select substr(u.region_id,1,3) as provinceID , count(1) as matainCount
 from css_service_rec s,  region_type r , units u
  where
  s.unit_id = u.unit_id
   and substr(u.region_id, 1, 5) = r.region_id
  {WHERE}
  group by   rollup (substr(u.region_id,1,3)) order by matainCount desc) tbl where rownum<=‘ ||
                RANKCOUNT ||
                ‘)  provinceMaintain;
                 update qms_rpt_area_rank  r set r.RECODCOUNT=( select (select count(1) from (
 select count(1)
    from css_service_rec s  , region_type r , units u where   s.unit_id = u.unit_id
   and substr(u.region_id, 1, 3) = r.region_id
    {WHERE}

    group by substr(u.region_id, 1, 3)))  from dual ) where r.evaluate_id=‘‘‘ ||
                EVALUATE_PRA || ‘‘‘ and r.PROVINCEID is null;‘;
    end if;

    return SQLSTR;
  END GetProvinceRankSQL;

  /******************************************************************************
     NAME:
     PURPOSE:   用于获取各个市的维修率排名
  ******************************************************************************/
  FUNCTION GETCityRankSQL(PRODUCE_CATEGORY_PRA VARCHAR2,
                          EVALUATE_PRA         VARCHAR2,
                          RANKCOUNT            NUMBER,
                          ORGID                VARCHAR2) RETURN VARCHAR2 IS

    SQLSTR VARCHAR2(18000);
  BEGIN

    if ORGID = ‘1‘ then

      SQLSTR := ‘insert into qms_rpt_area_rank(Id,EVALUATE_ID,PROVINCEID,PROVINCENAME,CITYID,CITYNAME,MAINTAINCOUNT,REPORT_TYPE ,PRODUCT_CATEGORY ,AVERAGE,RATE)
select sys_guid(),
‘‘‘ || EVALUATE_PRA || ‘‘‘,
substr(cityMaintain.cityID,1,3),
(select r.REG_NAME from region_type r where r.region_id=substr(cityMaintain.cityID,1,3)) as provinceName,
cityMaintain.cityID,
(select R.REG_NAME from region_type r where r.region_id=cityMaintain .cityID) as cityName,cityMaintain.maintainCount,
3,
‘‘‘ || PRODUCE_CATEGORY_PRA || ‘‘‘,
0,
0 from(select * from ( select substr(r.region_id,1,5) as cityID,count(1) as maintainCount from vw_rpt_css_service_rec_mdkt s, region_type r
where substr(s.region_code,1,5)=r.region_id
{WHERE}
group by  rollup (substr(r.region_id, 1, 5)) order by maintainCount desc)tbl where rownum<=‘ ||
                RANKCOUNT ||
                ‘) cityMaintain;
                update qms_rpt_area_rank  r set r.RECODCOUNT=(select (select count(1) from (
 select count(1)
    from VW_RPT_CSS_SERVICE_REC_MDKT s  ,  region_type r where  substr(s.region_code,1,5)=r.region_id
   {WHERE}

    group by substr(r.region_id, 1, 5))) from dual ) where r.evaluate_id=‘‘‘ ||
                EVALUATE_PRA || ‘‘‘ and r.CITYID is null ;‘;
    elsif ORGID = ‘2‘ then

      SQLSTR := ‘insert into qms_rpt_area_rank(Id,EVALUATE_ID,PROVINCEID,PROVINCENAME,CITYID,CITYNAME,MAINTAINCOUNT,REPORT_TYPE ,PRODUCT_CATEGORY ,AVERAGE,RATE)
select sys_guid(),
‘‘‘ || EVALUATE_PRA || ‘‘‘,
substr(cityMaintain.cityID,1,3),
(select r.REG_NAME from region_type r where r.region_id=substr(cityMaintain.cityID,1,3)) as provinceName,
cityMaintain.cityID,
(select R.REG_NAME from region_type r where r.region_id=cityMaintain .cityID) as cityName,cityMaintain.maintainCount,
3,
‘‘‘ || PRODUCE_CATEGORY_PRA || ‘‘‘,
0,
0 from(select * from ( select substr(u.region_id,1,5) as cityID,count(1) as maintainCount from css_service_rec s,  region_type r,units u
where   s.unit_id = u.unit_id
   and substr(u.region_id, 1, 5) = r.region_id
{WHERE}
group by  rollup  (substr(u.region_id, 1, 5)) order by maintainCount desc)tbl where rownum<=‘ ||
                RANKCOUNT ||
                ‘) cityMaintain;
                update qms_rpt_area_rank  r set r.RECODCOUNT=( select (select count(1) from(
 select count(1)
    from css_service_rec s ,  region_type r , units u where  s.unit_id = u.unit_id
   and substr(u.region_id, 1, 5) = r.region_id
   {WHERE}

    group by substr(u.region_id, 1, 5))) from dual) where r.evaluate_id=‘‘‘ ||
                EVALUATE_PRA || ‘‘‘ and r.CITYID is null ; ‘;
    end if;
    return SQLSTR;
  END GETCityRankSQL;

  FUNCTION GET_CONDITION_RANK(p_evaluateno_id IN VARCHAR2) RETURN CLOB IS
    V_WHERE CLOB;
    CURSOR c IS
      SELECT parameter_key, parameter_value
        FROM qms_calculate_criteria t
       WHERE qms_report_request_log_id = p_evaluateno_id

         AND t.parameter_key <> ‘MADE_ID‘;
    c_row               c%rowtype;
    is_exist            number;
    str_slice_date_from varchar2(50);
    str_slice_date_to   varchar2(50);

    produceFrom  varchar2(50);
    produceTO    varchar2(50);
    mountFrom    varchar2(50);
    mountTO      varchar2(50);
    moutainFrom  varchar2(50);
    moutainTO    varchar2(50);
    PRODUCT_TYPE varchar2(50);
    ORGID        varchar(50); --1、家用空调,2、厨房电器 

  BEGIN

    ORGID := qms_rpt_utl.get_criteria_by_key(p_evaluateno_id, ‘ORGID‘);
    open c;
    fetch c
      into c_row;
    while c%found loop
      IF c_row.PARAMETER_KEY = ‘FIRST_PRODUCE_DATE_FROM‘ THEN
        produceFrom := c_row.parameter_value;
        if ORGID = ‘1‘ then
          --如果是家用空调
          V_WHERE := V_WHERE || ‘ AND s.PRODUCE_DATE >=‘ || ‘to_date(‘‘‘ ||
                     produceFrom || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
        elsif ORGID = ‘2‘ THEN
          --如果是厨房电器 生产时间是存放在安装时间字段
          V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE >=‘ || ‘to_date(‘‘‘ ||
                     produceFrom || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
        end if;
      ELSIF c_row.PARAMETER_KEY = ‘FIRST_PRODUCE_DATE_TO‘ THEN
        produceTO := c_row.parameter_value;
        if ORGID = ‘1‘ then
          --如果是家用空调
          V_WHERE := V_WHERE || ‘ AND s.PRODUCE_DATE <=‘ || ‘to_date(‘‘‘ ||
                     produceTO || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
        elsif ORGID = ‘2‘ THEN
          --如果是厨房电器 生产时间是存放在安装时间字段
          V_WHERE := V_WHERE || ‘ AND s.FAULT_DATE <=‘ || ‘to_date(‘‘‘ ||
                     produceTO || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
        end if;
      ELSIF c_row.PARAMETER_KEY = ‘FIRST_MOUNT_DATE_FROM‘ THEN
        mountFrom := c_row.parameter_value;
        if ORGID = ‘1‘ then
          --如果是家用空调  

          V_WHERE := V_WHERE || ‘ AND s.FAULT_DATE>=‘ || ‘to_date(‘‘‘ ||
                     mountFrom || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
        elsif ORGID = ‘2‘ THEN
          --如果是厨房电器
          dbms_output.put_line(‘‘);
          /*   V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE>=‘ || ‘to_date(‘‘‘ ||
          mountFrom || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;*/
        END IF;
      ELSIF c_row.PARAMETER_KEY = ‘FIRST_MOUNT_DATE_TO‘ THEN
        mountTO := c_row.parameter_value;
        if ORGID = ‘1‘ then
          --如果是家用空调
          V_WHERE := V_WHERE || ‘ AND s.FAULT_DATE<=‘ || ‘to_date(‘‘‘ ||
                     mountTO || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
        elsif ORGID = ‘2‘ THEN
          --如果是厨房电器
          dbms_output.put_line(‘‘);
          /* V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE<=‘ || ‘to_date(‘‘‘ ||
          mountTO || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;*/
        END IF;

      ELSIF c_row.PARAMETER_KEY = ‘FIRST_MAINT_DATE_FROM‘ THEN
        moutainFrom := c_row.parameter_value;
        V_WHERE     := V_WHERE || ‘ AND S.MAINT_DATE>=‘ || ‘to_date(‘‘‘ ||
                       moutainFrom || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;

      ELSIF c_row.PARAMETER_KEY = ‘FIRST_MAINT_DATE_TO‘ THEN
        moutainTO := c_row.parameter_value;
        V_WHERE   := V_WHERE || ‘ AND S.MAINT_DATE<=‘ || ‘to_date(‘‘‘ ||
                     moutainTO || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;

      ELSIF c_row.PARAMETER_KEY = ‘ORGID‘ THEN
        if c_row.PARAMETER_VALUE = ‘1‘ THEN
          --如果是家用空调事业部

          --如果是未选择品类
          IF (qms_rpt_utl.get_criteria_by_key(p_evaluateno_id,
                                              ‘PRODUCT_MODE_ID‘) = ‘NONE‘) THEN

            --  V_WHERE := V_WHERE || ‘ AND S.sorg_id=‘‘MDKT‘‘‘;
            dbms_output.put_line(‘‘);
          ELSE
            V_WHERE := V_WHERE ||
                       ‘ AND S.prod_id in
       (SELECT P.PROD_ID
          FROM qms.product p, qms_product_mode_detail pd
         where p.product_mode_id = pd.mode_id
                     and pd.mode_id =  (select pm.id from qms_product_mode  pm where pm.mode_code= qms_rpt_utl.get_criteria_by_key(‘‘‘ ||
                       p_evaluateno_id || ‘‘‘,‘‘PRODUCT_MODE_ID‘‘)))‘;

          END IF;
        elsif c_row.PARAMETER_VALUE = ‘2‘ THEN
          --如果是厨房电器事业部
          V_WHERE := V_WHERE ||
                     ‘ AND S.PROD_TYPE=   qms_rpt_utl.get_criteria_by_key(‘‘‘ ||
                     p_evaluateno_id || ‘‘‘,‘‘PRODUCT_MODE_ID‘‘)‘;
        end if;

      end if;
      fetch c
        into c_row;
    end loop;

    RETURN V_WHERE;

  END GET_CONDITION_RANK;

  /******************************************************************************
     NAME:
     PURPOSE:   根据条件获取排名
  ******************************************************************************/
  FUNCTION CAL_RANK(Report_Id VARCHAR2, v_date_lt_str VARCHAR2)
    RETURN VARCHAR2 IS

    CHART_RANK      number;
    DATE_RANK       number;
    COLUMN_MODEL    varchar2(10);
    PRODUCT_MODE_ID VARCHAR2(20);
    v_EVALUATE_NO   varchar2(32);
    v_sql           varchar2(4000);
    SORG_ID         varchar2(50);
    str             varchar2(50);
    cursor1         INTEGER;

  BEGIN
    select EVALUATE_NO
      into v_EVALUATE_NO
      from qms_report_request_log2 t
     where t.id = Report_Id;
    dbms_output.put_line(v_EVALUATE_NO);

    CHART_RANK := qms_rpt_utl.get_criteria_by_key(Report_Id, ‘CHART_RANK‘);
    DATE_RANK  := qms_rpt_utl.get_criteria_by_key(Report_Id, ‘DATE_RANK‘);
    SORG_ID    := qms_rpt_utl.get_criteria_by_key(Report_Id, ‘ORGID‘);

    IF SORG_ID = 2 THEN
      PRODUCT_MODE_ID := qms_rpt_utl.get_criteria_by_key(Report_Id,
                                                         ‘PRODUCT_MODE_ID‘);
    ELSIF SORG_ID = 1 THEN
      PRODUCT_MODE_ID := ‘‘;
    END IF;

    IF CHART_RANK < DATE_RANK THEN
      CHART_RANK := DATE_RANK;
    END IF;

    CHART_RANK   := CHART_RANK + 1; --加一的目的是其它一条记录为受影响为总维修数
    COLUMN_MODEL := qms_rpt_utl.get_criteria_by_key(Report_Id,
                                                    ‘COLUMN_MODEL‘);

    if COLUMN_MODEL = ‘1‘ then
      v_sql := PKG_RPT_UTL.GET_MERGE_CONDITION_SQL(GetBranchRankSQL(PRODUCT_MODE_ID,
                                                                    v_EVALUATE_NO,
                                                                    CHART_RANK,
                                                                    SORG_ID),
                                                   GET_CONDITION_RANK(Report_Id));
    ELSIF COLUMN_MODEL = ‘2‘ then
      v_sql := PKG_RPT_UTL.GET_MERGE_CONDITION_SQL(GetProvinceRankSQL(PRODUCT_MODE_ID,
                                                                      v_EVALUATE_NO,
                                                                      CHART_RANK,
                                                                      SORG_ID),
                                                   GET_CONDITION_RANK(Report_Id));
    ELSIF COLUMN_MODEL = ‘3‘ then
      v_sql := PKG_RPT_UTL.GET_MERGE_CONDITION_SQL(GETCityRankSQL(PRODUCT_MODE_ID,
                                                                  v_EVALUATE_NO,
                                                                  CHART_RANK,
                                                                  SORG_ID),
                                                   GET_CONDITION_RANK(Report_Id));
    end if;
  /*
    insert into SQLTEXT_TEST (text, Name) values (v_sql, ‘66666‘);
    COMMIT;*/

    -- qms_rpt_operating_station_pub.log(Report_Id,‘qms_rpt_area.cal_rank‘,‘cal_rank_executing‘,v_sql);
    EXECUTE IMMEDIATE ‘begin  ‘ || v_sql || ‘ end;‘;
    --   qms_rpt_operating_station_pub.log(Report_Id,‘qms_rpt_area.cal_rank‘,‘cal_rank_executed‘,v_sql);
    COMMIT;

    /*  cursor1 := dbms_sql.open_cursor;
    dbms_sql.parse(cursor1, v_sql, dbms_sql.v);
    dbms_sql.close_cursor(cursor1);*/

    --补充计算 比率 平均值
    RETURN v_sql;
  END CAL_RANK;

  FUNCTION GET_CONDITION(report_ID       IN VARCHAR2,
                         Slice_Date_From DATE,
                         Slice_Date_To   DATE,
                         GroupType       VARCHAR2) RETURN CLOB IS
    V_WHERE CLOB;
    CURSOR c IS
      SELECT parameter_key, parameter_value
        FROM qms_calculate_criteria t
       WHERE qms_report_request_log_id = report_ID;

    c_row               c%rowtype;
    is_exist            number;
    str_slice_date_from varchar2(50);
    str_slice_date_to   varchar2(50);
    GROUP_TYPE          varchar2(50); --分组类型
    ORGID               varchar2(50);
  BEGIN

    --只求当天的安装数目,在汇总的时候,进行安装数,维修数进行汇总
    str_slice_date_from := to_char(Slice_Date_To, ‘yyyy-mm-dd‘); --00 :00:00秒开始
    str_slice_date_to   := to_char(Slice_Date_To, ‘yyyy-mm-dd hh24:mi:ss‘); --23:59:59秒开始
    ORGID               := qms_rpt_utl.get_criteria_by_key(report_ID,
                                                           ‘ORGID‘);
    open c;
    fetch c
      into c_row;
    --求明细数据时不需要给出生产及安装时间 2015/9/6

    while c%found loop

      if GroupType = ‘MAINT_DATE‘ THEN

        IF c_row.PARAMETER_KEY = ‘FIRST_PRODUCE_DATE_FROM‘ THEN

          if ORGID = ‘1‘ then
            --如果是家用空调
            V_WHERE := V_WHERE || ‘ AND s.PRODUCE_DATE >=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          elsif ORGID = ‘2‘ THEN
            --如果是厨房电器 生产时间是存放在安装时间字段
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE >=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          end if;
        ELSIF c_row.PARAMETER_KEY = ‘FIRST_PRODUCE_DATE_TO‘ THEN

          if ORGID = ‘1‘ then
            --如果是家用空调   

            V_WHERE := V_WHERE || ‘ AND s.PRODUCE_DATE <=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          elsif ORGID = ‘2‘ THEN
            --如果是厨房电器 生产时间是存放在安装时间字段
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE <=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          end if;
        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MOUNT_DATE_FROM‘ THEN
          if ORGID = ‘1‘ then
            --如果是家用空调
            V_WHERE := V_WHERE || ‘ AND s.FAULT_DATE>=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          elsif ORGID = ‘2‘ THEN
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE>=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          END IF;
        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MOUNT_DATE_TO‘ THEN
          if ORGID = ‘1‘ then
            --如果是家用空调
            V_WHERE := V_WHERE || ‘ AND s.FAULT_DATE<=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          elsif ORGID = ‘2‘ THEN
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE<=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          END IF;

        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MAINT_DATE_FROM‘ THEN

          V_WHERE := V_WHERE || ‘ AND S.MAINT_DATE>=‘ || ‘to_date(‘‘‘ ||
                     str_slice_date_from || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;

        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MAINT_DATE_TO‘ THEN
          V_WHERE := V_WHERE || ‘ AND S.MAINT_DATE>=‘ || ‘to_date(‘‘‘ ||
                     str_slice_date_to || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
        end if;

      elsif GroupType = ‘FAULT_DATE‘ THEN

        IF c_row.PARAMETER_KEY = ‘FIRST_PRODUCE_DATE_FROM‘ THEN

          if ORGID = ‘1‘ then
            --如果是家用空调
            V_WHERE := V_WHERE || ‘ AND s.PRODUCE_DATE >=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          elsif ORGID = ‘2‘ THEN
            --如果是厨房电器 生产时间是存放在安装时间字段
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE >=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          end if;
        ELSIF c_row.PARAMETER_KEY = ‘FIRST_PRODUCE_DATE_TO‘ THEN

          if ORGID = ‘1‘ then
            --如果是家用空调
            V_WHERE := V_WHERE || ‘ AND s.PRODUCE_DATE <=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          elsif ORGID = ‘2‘ THEN
            --如果是厨房电器 生产时间是存放在安装时间字段
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE <=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          end if;
        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MOUNT_DATE_FROM‘ THEN

          if ORGID = ‘1‘ then
            V_WHERE := V_WHERE || ‘ AND s.FAULT_DATE>=‘ || ‘to_date(‘‘‘ ||
                       str_slice_date_from ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;

          elsif ORGID = ‘2‘ THEN
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE>=‘ || ‘to_date(‘‘‘ ||
                       str_slice_date_from ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          END IF;

        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MOUNT_DATE_TO‘ THEN
          if ORGID = ‘1‘ then
            V_WHERE := V_WHERE || ‘ AND s.FAULT_DATE<=‘ || ‘to_date(‘‘‘ ||
                       str_slice_date_to || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          elsif ORGID = ‘2‘ THEN
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE<=‘ || ‘to_date(‘‘‘ ||
                       str_slice_date_to || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          END IF;

        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MAINT_DATE_FROM‘ THEN

          V_WHERE := V_WHERE || ‘ AND S.MAINT_DATE>=‘ || ‘to_date(‘‘‘ ||
                     c_row.parameter_value ||
                     ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;

        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MAINT_DATE_TO‘ THEN

          V_WHERE := V_WHERE || ‘ AND S.MAINT_DATE<=‘ || ‘to_date(‘‘‘ ||
                     c_row.parameter_value ||
                     ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
        end if;

      elsif GroupType = ‘PRODUCE_DATE‘ THEN

        IF c_row.PARAMETER_KEY = ‘FIRST_PRODUCE_DATE_FROM‘ THEN

          if ORGID = ‘1‘ then
            --如果是家用空调
            V_WHERE := V_WHERE || ‘ AND s.PRODUCE_DATE >=‘ || ‘to_date(‘‘‘ ||
                       str_slice_date_from ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          elsif ORGID = ‘2‘ THEN
            --如果是厨房电器 生产时间是存放在安装时间字段
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE >=‘ || ‘to_date(‘‘‘ ||
                       str_slice_date_from ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          end if;
        ELSIF c_row.PARAMETER_KEY = ‘FIRST_PRODUCE_DATE_TO‘ THEN

          if ORGID = ‘1‘ then
            --如果是家用空调
            V_WHERE := V_WHERE || ‘ AND s.PRODUCE_DATE <=‘ || ‘to_date(‘‘‘ ||
                       str_slice_date_to || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          elsif ORGID = ‘2‘ THEN
            --如果是厨房电器 生产时间是存放在安装时间字段
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE <=‘ || ‘to_date(‘‘‘ ||
                       str_slice_date_to || ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          end if;
        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MOUNT_DATE_FROM‘ THEN
          if ORGID = ‘1‘ then
            V_WHERE := V_WHERE || ‘ AND s.FAULT_DATE>=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          elsif ORGID = ‘2‘ THEN
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE>=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          end if;
        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MOUNT_DATE_TO‘ THEN
          if ORGID = ‘1‘ then
            V_WHERE := V_WHERE || ‘ AND s.FAULT_DATE<=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          elsif ORGID = ‘2‘ THEN
            V_WHERE := V_WHERE || ‘ AND S.FAULT_DATE<=‘ || ‘to_date(‘‘‘ ||
                       c_row.parameter_value ||
                       ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
          END IF;

        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MAINT_DATE_FROM‘ THEN

          V_WHERE := V_WHERE || ‘ AND S.MAINT_DATE>=‘ || ‘to_date(‘‘‘ ||
                     c_row.parameter_value ||
                     ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;

        ELSIF c_row.PARAMETER_KEY = ‘FIRST_MAINT_DATE_TO‘ THEN

          V_WHERE := V_WHERE || ‘ AND S.MAINT_DATE<=‘ || ‘to_date(‘‘‘ ||
                     c_row.parameter_value ||
                     ‘‘‘,‘‘yyyy-mm-dd hh24:mi:ss‘‘)‘;
        end if;

      end if;

      if c_row.PARAMETER_KEY = ‘ORGID‘ THEN
        if c_row.PARAMETER_VALUE = ‘1‘ THEN
          --如果是家用空调事业部

          --如果是未选择品类
          IF (qms_rpt_utl.get_criteria_by_key(report_ID, ‘PRODUCT_MODE_ID‘) =
             ‘NONE‘) THEN
            dbms_output.put_line(‘‘);
          ELSE
            V_WHERE := V_WHERE ||
                       ‘ AND S.prod_id in
       (SELECT P.PROD_ID
          FROM qms.product p, qms_product_mode_detail pd
         where p.product_mode_id = pd.mode_id
           and pd.mode_id =  (select pm.id from qms_product_mode  pm where pm.mode_code= qms_rpt_utl.get_criteria_by_key(‘‘‘ ||
                       report_ID || ‘‘‘,‘‘PRODUCT_MODE_ID‘‘)))‘;

          END IF;
        elsif c_row.PARAMETER_VALUE = ‘2‘ THEN
          --如果是厨房电器事业部
          V_WHERE := V_WHERE ||
                     ‘ AND S.PROD_TYPE= qms_rpt_utl.get_criteria_by_key(‘‘‘ ||
                     report_ID || ‘‘‘,‘‘PRODUCT_MODE_ID‘‘)‘;
        end if;
      end if;
      fetch c
        into c_row;
    end loop;

    RETURN V_WHERE;

  END GET_CONDITION;

  PROCEDURE slicing_cal_moretime(p_report_id            VARCHAR2,
                                 p_slicing_time_by_name ARRAY_TYPE,
                                 p_prefix               VARCHAR2 DEFAULT ‘‘) IS
    DATE_IS_INCOMPLETE EXCEPTION;
    DATE_IS_Begin      EXCEPTION;

    PRAGMA EXCEPTION_INIT(DATE_IS_INCOMPLETE, -21167);
    DATE_IS_NULL EXCEPTION;
    PRAGMA EXCEPTION_INIT(DATE_IS_NULL, -21168);
    v_fault_date         DATE; --起始时间
    v_fault_date_from    DATE;
    v_fault_date_to      DATE;
    v_temp_date_from     DATE;
    v_temp_date_to       DATE;
    v_days               NUMBER;
    v_days2              NUMBER;
    v_times              NUMBER := 0;
    v_guid               VARCHAR2(32);
    v_total_days         NUMBER := 0;
    v_criteria_slice_row qms_calculate_criteria_slice2%ROWTYPE;
    vv_temp_date         VARCHAR2(20);
    x_ret_msg            VARCHAR(4000);
    v_date_name          VARCHAR(80);
    v_slice_interval     NUMBER := g_slice_interval;
    CURSOR cur_c IS
      SELECT *
        FROM qms_report_request_log2
       WHERE id = p_report_id
         AND progress_status = ‘S‘;

  BEGIN
    FOR cur IN cur_c LOOP
      BEGIN
        FOR I IN 1 .. p_slicing_time_by_name.COUNT() LOOP
          v_fault_date_from := NULL;
          v_fault_date_to   := NULL;

          v_fault_date_from := TO_DATE(qms_rpt_utl.get_criteria_by_key(cur.id,
                                                                       p_prefix || ‘_‘ ||
                                                                       p_slicing_time_by_name(I) || ‘_‘ ||
                                                                       g_start_date_suffix),
                                       g_date_format);
          v_fault_date_to   := TO_DATE(qms_rpt_utl.get_criteria_by_key(cur.id,
                                                                       p_prefix || ‘_‘ ||
                                                                       p_slicing_time_by_name(I) || ‘_‘ ||
                                                                       g_end_date_suffix),
                                       g_date_format);
          IF v_fault_date_from IS NULL OR v_fault_date_to IS NULL THEN
            RAISE DATE_IS_INCOMPLETE; --日期不完整抛异常
            EXIT;
          END IF;
          IF v_fault_date_from IS NOT NULL AND v_fault_date_to IS NOT NULL THEN
            v_date_name := p_slicing_time_by_name(I);
            EXIT; --日期完整,往下执行分片
          END IF;

        END LOOP;

        IF to_char(v_fault_date_to, ‘mm/dd‘) = ‘01/01‘ THEN
          RAISE DATE_IS_Begin; --第一年的第一天不做统计。chenli 2015/9/2
        END IF;

        IF v_fault_date_from IS NULL OR v_fault_date_to IS NULL THEN
          RAISE DATE_IS_NULL; --必填日期空,抛异常
        END IF;

        ---下面执行分片
        qms_rpt_utl.calc_day_interval(p_begin_date   => v_fault_date_from,
                                      p_end_date     => v_fault_date_to,
                                      p_interval     => v_slice_interval,
                                      x_day_interval => v_days,
                                      x_trunc        => v_times);

        v_temp_date_from := v_fault_date_from;
        v_fault_date     := v_fault_date_from;

        FOR i IN 1 .. v_times LOOP
          SELECT v_temp_date_from INTO v_temp_date_to FROM DUAL;

          IF (v_temp_date_to > v_fault_date_to) THEN
            v_temp_date_to := v_fault_date_to;
          END IF;

          SELECT SYS_GUID() INTO v_guid FROM DUAL;

          SELECT ROUND(TO_NUMBER(v_temp_date_to - v_fault_date))
            INTO v_days2
            FROM DUAL;

          --切片按日期分段查询,格式化日期格式-----------------------------------
          vv_temp_date     := TO_CHAR(v_temp_date_from, ‘yyyy/MM/DD‘) ||
                              ‘ 00:00:00‘;
          v_temp_date_from := TO_DATE(vv_temp_date, g_date_format);

          vv_temp_date   := TO_CHAR(v_temp_date_to, ‘yyyy/MM/DD‘) ||
                            ‘ 23:59:59‘;
          v_temp_date_to := TO_DATE(vv_temp_date, g_date_format);

          IF v_days2 >= 0 THEN
            v_criteria_slice_row.id                        := v_guid; --主键值
            v_criteria_slice_row.qms_report_request_log_id := cur.id; --主报表编号
            v_criteria_slice_row.slice_date_from           := v_temp_date_from; --开始时间
            v_criteria_slice_row.slice_date_to             := v_temp_date_to; --结束时间
            v_criteria_slice_row.progress_status           := ‘I‘; --状态
            v_criteria_slice_row.progress_cur_qty          := 0; --
            v_criteria_slice_row.progress_total_qty        := v_days2 + 1; --总数
            v_criteria_slice_row.status                    := ‘1‘; --是否删除
            v_criteria_slice_row.datetime_created          := SYSDATE; --创建时间
            v_criteria_slice_row.SLICE_GROUP               := v_date_name; --切分的字段

            SELECT seq_report.NEXTVAL
              INTO v_criteria_slice_row.report_sequence --序号
              FROM DUAL;

            INSERT INTO qms_calculate_criteria_slice2
            VALUES v_criteria_slice_row;

            v_total_days := v_total_days +
                            v_criteria_slice_row.progress_total_qty;
          END IF;

          v_temp_date_from := v_temp_date_to + 1;
        END LOOP;
        UPDATE qms_report_request_log2
           SET progress_status    = ‘R‘,
               progress_total_qty = v_total_days,
               PROGRESS_DESC      = ‘计算中‘
         WHERE id = cur.id;

        COMMIT;
      EXCEPTION
        WHEN DATE_IS_INCOMPLETE THEN
          UPDATE qms_report_request_log2
             SET progress_status = ‘E‘, progress_desc = ‘日期不完整‘
           WHERE id = cur.id;
          COMMIT;
          EXIT;
        WHEN DATE_IS_NULL THEN
          UPDATE qms_report_request_log2
             SET progress_status = ‘E‘, progress_desc = ‘必填日期不能为空‘
           WHERE id = cur.id;
          COMMIT;
          EXIT;
        WHEN DATE_IS_Begin THEN
          UPDATE qms_report_request_log2
             SET progress_status = ‘E‘,
                 progress_desc   = ‘1月1日当天不做统计‘
           WHERE id = cur.id;
          COMMIT;
          EXIT;
        WHEN OTHERS THEN
          x_ret_msg := SQLERRM;
          UPDATE qms_report_request_log2
             SET progress_status = ‘E‘, progress_desc = x_ret_msg
           WHERE id = cur.id;
          COMMIT;
          EXIT;
      END;
    END LOOP;
    COMMIT;
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;

  /******************************************************************************
     NAME:       slicing_cal
     PURPOSE:  切片
  ******************************************************************************/
  PROCEDURE slicing_cal(p_report_id VARCHAR2) IS

    v_date_lt_str varchar2(80);
    v_date_lt     ARRAY_TYPE;
    v_sql         varchar2(8000);
    b             varchar2(50);
  BEGIN

    IF length(qms_rpt_utl.get_criteria_by_key(p_report_id,
                                              ‘FIRST_PRODUCE_DATE_FROM‘)) > 0 THEN
      v_date_lt := ARRAY_TYPE(‘PRODUCE_DATE‘); --使用生产时间做切片 

    elsif length(qms_rpt_utl.get_criteria_by_key(p_report_id,
                                                 ‘FIRST_MAINT_DATE_FROM‘)) > 0 THEN
      v_date_lt := ARRAY_TYPE(‘MAINT_DATE‘); --使用维修时间做切片 

    elsif length(qms_rpt_utl.get_criteria_by_key(p_report_id,
                                                 ‘FIRST_MOUNT_DATE_FROM‘)) > 0 THEN
      v_date_lt := ARRAY_TYPE(‘FAULT_DATE‘); --使用安装时间做切片 

    end if;

    v_sql := CAL_RANK(p_report_id, v_date_lt_str); --求出排名 

    -- qms_rpt_operating_station_pub.log(p_report_id,‘slicing_cal_moretime‘,‘cal_rank_executing‘,g_current_year_group_type);
    slicing_cal_moretime(p_report_id, v_date_lt, g_current_year_group_type);
    -- qms_rpt_operating_station_pub.log(p_report_id,‘slicing_cal_moretime‘,‘cal_rank_executing‘,g_current_year_group_type);

  END;

  /******************************************************************************
     NAME:       sliced_data_cal
     PURPOSE:  报表切片后的片段计算
  ******************************************************************************/
  PROCEDURE sliced_data_cal(p_slice_id VARCHAR2) IS
    v_criteria_slice_row qms_calculate_criteria_slice2%ROWTYPE;
    v_sql                VARCHAR2(18000);
    COLUMN_MODEL         VARCHAR2(50);
    v_EVALUATE_NO        varchar2(50);
    sliceType            varchar2(20);
    ORG_ID               varchar2(20);
  BEGIN
    SELECT *
      INTO v_criteria_slice_row
      FROM QMS_CALCULATE_CRITERIA_SLICE2 T
     WHERE T.ID = p_slice_id;
    sliceType := v_criteria_slice_row.SLICE_GROUP;

    --branch_Slice(ReportId VARCHAR2,evaluate_id VARCHAR2, p_slice_id varchar2,
    --   Slice_Date_From DATE,Slice_Date_To DATE) RETURN VARCHAR2 IS

    select EVALUATE_NO
      into v_EVALUATE_NO
      from qms_report_request_log2 t
     where t.id = v_criteria_slice_row.qms_report_request_log_id;
    dbms_output.put_line(v_EVALUATE_NO);

    COLUMN_MODEL := qms_rpt_utl.get_criteria_by_key(v_criteria_slice_row.qms_report_request_log_id,
                                                    ‘COLUMN_MODEL‘); --获取列模式,根据模式计算单位维修率
    ORG_ID       := qms_rpt_utl.get_criteria_by_key(v_criteria_slice_row.qms_report_request_log_id,
                                                    ‘ORGID‘);

    if COLUMN_MODEL = 1 then
      v_sql := PKG_RPT_UTL.GET_MERGE_CONDITION_SQL(branch_Slice(v_criteria_slice_row.qms_report_request_log_id,
                                                                v_EVALUATE_NO,
                                                                p_slice_id,
                                                                v_criteria_slice_row.slice_date_from,
                                                                v_criteria_slice_row.slice_date_to,
                                                                ORG_ID),
                                                   GET_CONDITION(v_criteria_slice_row.qms_report_request_log_id,
                                                                 v_criteria_slice_row.slice_date_from,
                                                                 v_criteria_slice_row.slice_date_to,
                                                                 sliceType));
    elsif COLUMN_MODEL = 2 then

      v_sql := PKG_RPT_UTL.GET_MERGE_CONDITION_SQL(province_Slice(v_criteria_slice_row.qms_report_request_log_id,
                                                                  p_slice_id,
                                                                  v_EVALUATE_NO,
                                                                  v_criteria_slice_row.slice_date_from,
                                                                  v_criteria_slice_row.slice_date_to,
                                                                  ORG_ID),
                                                   GET_CONDITION(v_criteria_slice_row.qms_report_request_log_id,
                                                                 v_criteria_slice_row.slice_date_from,
                                                                 v_criteria_slice_row.slice_date_to,
                                                                 sliceType));
    elsif COLUMN_MODEL = 3 then

      v_sql := PKG_RPT_UTL.GET_MERGE_CONDITION_SQL(city_Slice(v_criteria_slice_row.qms_report_request_log_id,
                                                              p_slice_id,
                                                              v_EVALUATE_NO,
                                                              v_criteria_slice_row.slice_date_from,
                                                              v_criteria_slice_row.slice_date_to,
                                                              ORG_ID),
                                                   GET_CONDITION(v_criteria_slice_row.qms_report_request_log_id,
                                                                 v_criteria_slice_row.slice_date_from,
                                                                 v_criteria_slice_row.slice_date_to,
                                                                 sliceType));
    END IF;
  /*
    insert into SQLTEXT_TEST (text, Name) values (v_sql, ‘666888‘);
    commit;
  */
   /*  delete QMS_CALCULATE_CRITERIA_SLICE2 t where t.id = p_slice_id;
    commit;*/

    EXECUTE IMMEDIATE ‘begin ‘ || v_sql || ‘end;‘;
    COMMIT;
    ---更新状态
    UPDATE qms_calculate_criteria_slice2
       SET progress_status = ‘D‘, progress_desc = ‘完成.‘
     WHERE id = p_slice_id;

    COMMIT;
  END;

  /******************************************************************************
     NAME:       total_data_cal
     PURPOSE:  报表切片后的总体计算
  ******************************************************************************/

  PROCEDURE total_data_cal(p_report_id VARCHAR2) IS

    v_EVALUATE_NO varchar2(32);
    sliceType     varchar2(20);
    provinceCount number; --省的总个数
    cityCount     number; --市的总个数
    unitsCount    number; --网点的总个数

    provinceMianitainTotal number; --省维修总数
    cityMaintainTotal      number; --市维修总数
    unitsMaintainTotal     number; --网点网总数
    str                    varchar(20);
    recordCount            number;

  begin
   delete QMS_CALCULATE_CRITERIA_SLICE2 t
     where t.qms_report_request_log_id = p_report_id;
    commit;
    sliceType := qms_rpt_utl.get_criteria_by_key(p_report_id,
                                                 ‘COLUMN_MODEL‘); --获取列模式,根据模式计算单位维修率
    select EVALUATE_NO
      into v_EVALUATE_NO
      from qms_report_request_log2 t
     where t.id = p_report_id;
    dbms_output.put_line(v_EVALUATE_NO);

    select count(1)
      into recordCount
      from QMS_RPT_AREA_RANK r
     where r.evaluate_id = v_EVALUATE_NO;

    if recordCount = 0 then
      UPDATE qms_report_request_log2 T
         SET progress_status        = ‘D‘,
             progress_desc          = ‘完成.‘,
             TOTAL_RECORDS          = 0,
             DATETIME_CALC_FINISHED = SYSDATE
       WHERE id = p_report_id;
      COMMIT;
      return;
    end if;
    IF sliceType = 1 then

      select t.recodcount
        into unitsCount
        from QMS_RPT_AREA_RANK t
       where t.unit_name is null
         and t.unit_id is null
         and t.evaluate_id = v_EVALUATE_NO;

      select t.maintaincount
        into unitsMaintainTotal
        from QMS_RPT_AREA_RANK t
       where t.unit_name is null
         and t.unit_id is null
         and t.evaluate_id = v_EVALUATE_NO;
      dbms_output.put_line(unitsCount);
      dbms_output.put_line(unitsMaintainTotal);

      --更新网点排名平均数及占比

      update qms_rpt_area_rank r
         set r.average = decode(unitsMaintainTotal / unitsCount,
                                0,
                                ‘0.00‘,
                                trim(to_char(unitsMaintainTotal / unitsCount,
                                             ‘9999999.99‘))),
             r.rate    = decode(r.maintaincount / unitsMaintainTotal,
                                0,
                                ‘0.00‘,
                                trim(to_char(r.maintaincount /
                                             unitsMaintainTotal,
                                             ‘9999999.9999‘))) * 100
       where r.evaluate_id = v_EVALUATE_NO
         and r.unit_id is not null;
      --更新网点详细排名平均数及占比

      --  str := updateBranch(v_EVALUATE_NO, unitsCount);

    elsif sliceType = 2 then

      select t.recodcount
        into provinceCount
        from QMS_RPT_AREA_RANK t
       where t.provinceid is null
         and t.provincename is null
         and t.evaluate_id = v_EVALUATE_NO;

      select t.maintaincount
        into provinceMianitainTotal
        from QMS_RPT_AREA_RANK t
       where t.provinceid is null
         and t.provincename is null
         and t.evaluate_id = v_EVALUATE_NO;
      dbms_output.put_line(provinceCount);
      dbms_output.put_line(provinceMianitainTotal);
      --更新省排名平均数及占比

      update qms_rpt_area_rank r
         set r.average = decode(provinceMianitainTotal / provinceCount,
                                0,
                                ‘0.00‘,
                                trim(to_char(provinceMianitainTotal /
                                             provinceCount,
                                             ‘9999999.99‘))),
             r.rate    = decode(r.maintaincount / provinceMianitainTotal,
                                0,
                                ‘0.00‘,
                                trim(to_char(r.maintaincount /
                                             provinceMianitainTotal,
                                             ‘9999999.9999‘))) * 100
       where r.evaluate_id = v_EVALUATE_NO
         and r.provinceid is not null;
      --更新详细省排名平均数及占比

      -- str := updateProvince(v_EVALUATE_NO, unitsCount);

    elsif sliceType = 3 then

      select t.recodcount
        into cityCount
        from QMS_RPT_AREA_RANK t
       where t.cityid is null
         and t.cityname is null
         and t.evaluate_id = v_EVALUATE_NO;

      select t.maintaincount
        into cityMaintainTotal
        from QMS_RPT_AREA_RANK t
       where t.cityid is null
         and t.cityname is null
         and t.evaluate_id = v_EVALUATE_NO;

      dbms_output.put_line(cityCount);
      dbms_output.put_line(cityMaintainTotal);

      --更新市排名平均数及占比
      update qms_rpt_area_rank r
         set r.average = decode(cityMaintainTotal / cityCount,
                                0,
                                ‘0.00‘,
                                trim(to_char(cityMaintainTotal / cityCount,
                                             ‘9999999.99‘))),
             r.rate    = decode(r.maintaincount / cityMaintainTotal,
                                0,
                                ‘0.00‘,
                                trim(to_char(r.maintaincount /
                                             cityMaintainTotal,
                                             ‘9999999.9999‘))) * 100
       where r.evaluate_id = v_EVALUATE_NO
         and r.cityid is not null;
      --更新市详细排名平均数及占比
      --str := updateCity(v_EVALUATE_NO, cityCount);
    end if;
    UPDATE qms_report_request_log2 T
       SET progress_status        = ‘D‘,
           progress_desc          = ‘完成.‘,
           TOTAL_RECORDS          = 1,
           DATETIME_CALC_FINISHED = SYSDATE
     WHERE id = p_report_id;
    COMMIT;
  end;

END;

  

时间: 2024-11-05 02:20:58

地区排名脚本 一千三百多行代码的相关文章

老男孩教育每日一题:2017年3月9日-请解释下面Shell脚本中if开头的整行代码的意思及应用场景吗?

请解释下面Shell脚本中 if开头的整行代码的意思,你见过它的应用场景么? if(kill -0 $pid 2>/dev/du11) then     echo"oldboy" else    echo"oldgirl" fi 面试题:请解释if (kill -0 $pid 2>/dev/null)代码的意思? if(kill -0 $pid 2>/dev/null)     then        echo "oldboy"

管家婆千方百剂2008升级到千方百计II 脚本执行错误 请检查第69行

如果你在使用管家婆过程中遇到下列问题: 千方百剂2008升级到千方百计II 脚本执行错误,请检查第69行 千方百剂2008升级到千方百计II 脚本执行错误,请检查第125行 千方百剂2008升级到千方百计II 脚本执行错误,请检查第127行 一.安装问题 ①安装失败②升级失败③下载不了最新安装包④更换服务器⑤管家婆安装在云端上加密狗共享及数据库同步备份解决方案 二.登录问题 ①silverlight插件安装出现错误代码②输了用户名和密码无法登录③无法显示账套④登录密码忘记⑤后台密码丢失⑥想用手机

中文数字转换成阿拉伯数字(一千二百三十四万五千六百七十八--&gt;12345678)

昨天老大问我又没有写过中文数字转换成阿拉伯数字,我说没有,我说那应该简单啊,就是将中文对应的数字换成阿拉伯数字就好了啊,比如一就换成1,二就换成2…十换成10.可是那么问题来了…… 一十二呢…不能是1102吧…这不就坑爹了吗?一百万呢………所有我苦苦思索,花费了我差不多半天的时间,终于写出了下面的程序. 1 public static void main(String[] args){ 2 3 Map<Character, String> numberMap = new HashMap<

第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字段的类型以及相关属性elasticsearch会根据json源数据的基础类型猜测你想要的字段映射,将输入的数据转换成可搜索的索引项,mapping就是我们自己定义的字段数据类型,同时告诉elasticsearch如何索引数据以及是否可以被搜索 作用:会让索引建立的更加细致和完善 类型:静态映射和动态

Android应用之《宋词三百首》(一)

今天我们通过一个实际的案例来综合运用一下Android技术中各方面的知识,模仿<宋词三百首>写一个应用,代码里面所有的资源均来自互联网,仅用于学习,请勿作商业用途. (1)第一步新建Android工程,修改应用图标,将72x72的app icon拷贝到drawable-hdpi文件夹下,将96x96的app icon拷贝到drawable-xhdpi文件夹下,然后修改AndroidManifest.xml文件里的内容如下: <application android:icon="

第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页

第三百八十九节,Django+Xadmin打造上线标准的在线教育平台-列表筛选结合分页 根据用户的筛选条件来结合分页 实现原理就是,当用户点击一个筛选条件时,通过get请求方式传参将筛选的id或者值,传入逻辑处理就行数据库条件查询,将查询条件值在返回html页面判断是否是选中样式,最后将所有需要关联的筛选请求加上彼此逻辑处理传回来的查询条件值 html请求传参 黄色背景为请求传参 红色背景为逻辑处理传过来的查询条件判断样式 <div class="wp butler_list_box li

三百六十度全景图如何拍摄?

三百六十度全景图如何拍摄?随着全景技术的发展,全景拍摄也成为了一种十分新潮的摄影方式.全景摄影也有很多学问,而且随着全景照片的用途越来越多,拍摄全景的设备也越来越多.今天我们就介绍几种十分另类的360全景图拍摄方法,这些酷雷曼360全景图拍摄方法让你大开眼界. 工具/原料 相机 鱼眼镜头 云台 三角支架 方法/步骤 1 吊锤辅助360全景图拍摄方法 吊线保证拍摄时相机以节点旋转,使用吊线进行全景拍摄线不要太长,50CM以内比较容易控制,有时也到一米多在胸口位置进行拍摄,重锤容易晃动,很难对准.吊

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装 当前环境python3.5 ,windows10系统 Linux系统安装 在线安装,会自动安装scrapy模块以及相关依赖模块 pip install Scrapy 手动源码安装,比较麻烦要自己手动安装scrapy模块以及依赖模块 安装以下模块 1.lxml-3.8.0.tar.gz (XML处理库) 2.Twisted-17.5.0.tar.bz2 (用Python编写的异步网络框架) 3.Scrapy-1.4.0.tar.gz

Android应用之《宋词三百首》(二)

接上回,上回我们讲到MainActivity里面将所有的宋词标题和作者显示到界面的ListView中去,我们接下来的工作是通过点击ListView的Item跳转到ContentActivity里面去显示单个宋词的所有内容,跳转代码例如以下: // 为ListView的Item设置点击监听器 mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterVi