鲜荣彬
Herry
CREATE OR REPLACE PROCEDURE SP_GET_RANK(
       V_ORGAN_ID VARCHAR2,--机构编号
       V_DATE VARCHAR2, --统计时间
       V_PAGEINDEX IN NUMBER,
       V_PAGESIZE IN NUMBER,
       V_PAGECOUNT OUT NUMBER,
       RESULTCURSOR OUT SYS_REFCURSOR
)
AS
  V_ORGANSTR VARCHAR(30000);
  V_PAGEBEGIN NUMBER(10);
  V_PAGEEND NUMBER(10);
 
  
BEGIN

  V_PAGEBEGIN:=(V_PAGEINDEX-1)*V_PAGESIZE+1;
  V_PAGEEND:=V_PAGEINDEX*V_PAGESIZE;
  
  V_ORGANSTR:='
         DECLARE
         V_ORGAN_ID VARCHAR2(50);
         V_DATE VARCHAR2(20);
         V_PAGEBEGIN NUMBER(10);
         V_PAGEEND NUMBER(10);
         V_PAGECOUNT NUMBER(10);
         RESULTCURSOR SYS_REFCURSOR;
         
         BEGIN 
             V_ORGAN_ID:=:V_ORGAN_ID;

             V_DATE:=:V_DATE;

             V_PAGEBEGIN:=:V_PAGEBEGIN;

             V_PAGEEND:=:V_PAGEEND;

             RESULTCURSOR:=:RESULTCURSOR;
         
             OPEN RESULTCURSOR FOR
             SELECT * FROM(
             SELECT 
             ORGAN_ID,
             NAME,
             BASICSCORE,
             ADD_SCORE,
             SUBTRACE_SCORE,
             SCORE,
             JC_RANK,
             ROW_NUMBER() OVER(ORDER BY SCORE DESC)NUM
             FROM(
                 SELECT
                 CODE AS ORGAN_ID,
                 NAME,
                 NVL(BASICSCORE,0)BASICSCORE,
                 NVL(ADD_SCORE,0)ADD_SCORE,
                 NVL(SUBTRACE_SCORE,0)SUBTRACE_SCORE,
                 (NVL(SCORE,0)+NVL(BASICSCORE,0)+40)SCORE,
                 RANK() OVER(ORDER BY (NVL(SCORE,0)+NVL(BASICSCORE,0)+40) DESC)JC_RANK
                 FROM APPRISE_SYS_ORGAN Z1
                 LEFT JOIN(
                           SELECT
                           ORGAN_ID,
                           SUM(CASE WHEN ADDORSUBFLAG=1 THEN GET_SCORE ELSE 0 END)ADD_SCORE,
                           SUM(CASE WHEN ADDORSUBFLAG=0 THEN GET_SCORE ELSE 0 END)SUBTRACE_SCORE,
                           SUM(GET_SCORE)SCORE
                           FROM(
                                   SELECT
                                   ORGAN_ID,
                                   DETAIL_XM_ID,
                                   ADDORSUBFLAG,
                                   --如果分值超过每项最分数则取项目的最高分数
                                   (CASE WHEN ABS(SUM(GET_SCORE))>ABS(MAX(DETIALSCORE)) THEN MAX(DETIALSCORE)*(CASE WHEN ADDORSUBFLAG=0 THEN -1 ELSE 1 END) ELSE SUM(GET_SCORE) END) AS GET_SCORE
                                   FROM(
                                         --人工自动评分
                                         SELECT ID,ORGAN_ID,DETAIL_XM_ID,GET_SCORE,VALID_ENDTIME
                                         FROM APPRISE_GRADE_MANAGE_LOG
                                         WHERE STATISTICALDATE=V_DATE
                                         UNION ALL
                                         --工地数量特殊处理
                                         SELECT ID,ORGAN_ID,DETAIL_XM_ID,GET_SCORE,VALID_ENDTIME
                                         FROM APPRISE_PROJECT_MANAGE
                                         WHERE DETAIL_XM_ID=''0ca08bb5-1891-4653-8d9a-c68c43668214''
                                         AND STATISTICALDATE=V_DATE
                                         UNION ALL
                                         --监测系统得分
                                         SELECT ID,ORGAN_ID,DETAIL_XM_ID,GET_SCORE,VALID_ENDTIME
                                         FROM APPRISE_PROJECT_MANAGE
                                         WHERE DETAIL_XM_ID!=''0ca08bb5-1891-4653-8d9a-c68c43668214''
                                   )T1
                                   INNER JOIN APPRAISESTANDARD_CONTENT T2 ON T1.DETAIL_XM_ID=T2.ID
                                   WHERE VALID_ENDTIME>TO_DATE(V_DATE,''YYYY-MM-DD'')+1
                                   GROUP BY ORGAN_ID,DETAIL_XM_ID,ADDORSUBFLAG
                           )T2
                           GROUP BY ORGAN_ID
                 )Z2 ON Z1.CODE=Z2.ORGAN_ID
                 WHERE Z1.TYPE=10
             )Z3 WHERE 1=1'||
             CASE WHEN V_ORGAN_ID IS NOT NULL THEN ' AND ORGAN_ID=V_ORGAN_ID' ELSE '' END
         ||')Z4 WHERE NUM BETWEEN V_PAGEBEGIN AND V_PAGEEND;
         
         SELECT COUNT(*) INTO V_PAGECOUNT FROM APPRISE_SYS_ORGAN
         WHERE TYPE=10'||
         CASE WHEN V_ORGAN_ID IS NOT NULL THEN ' AND CODE=V_ORGAN_ID  ' ELSE '' END
         ||'; :V_PAGECOUNT:=V_PAGECOUNT;
         END;';
     
         EXECUTE IMMEDIATE V_ORGANSTR USING V_ORGAN_ID,V_DATE,V_PAGEBEGIN,V_PAGEEND,RESULTCURSOR,OUT V_PAGECOUNT;
END;

 

-- Create table
create table APPRISE_PROJECT_MANAGE
(
  ID              VARCHAR2(36) not null,
  ORGAN_ID        VARCHAR2(36),
  DETAIL_XM_ID    VARCHAR2(36),
  GET_SCORE       NUMBER(30,8),
  OPERATEPEOPLE   VARCHAR2(36),
  GRADESTATE      INTEGER,
  GRADECONTEXT    VARCHAR2(500),
  GRADEDATE       DATE,
  ADDSUBFLAG      INTEGER,
  VALID_STARTTIME DATE,
  VALID_ENDTIME   DATE,
  STATISTICALDATE DATE,
  ITEMTYPE        INTEGER
)
tablespace JB_DATA
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
-- Add comments to the columns 
comment on column APPRISE_PROJECT_MANAGE.ID
  is '主键';
comment on column APPRISE_PROJECT_MANAGE.ORGAN_ID
  is '监测单位';
comment on column APPRISE_PROJECT_MANAGE.DETAIL_XM_ID
  is '评分项目';
comment on column APPRISE_PROJECT_MANAGE.GET_SCORE
  is '所得分数';
comment on column APPRISE_PROJECT_MANAGE.OPERATEPEOPLE
  is '评分人';
comment on column APPRISE_PROJECT_MANAGE.GRADESTATE
  is '评分状态';
comment on column APPRISE_PROJECT_MANAGE.GRADECONTEXT
  is '评分内容';
comment on column APPRISE_PROJECT_MANAGE.GRADEDATE
  is '评分时间';
comment on column APPRISE_PROJECT_MANAGE.ADDSUBFLAG
  is '加分/减分标志(1加分,0减分)';
comment on column APPRISE_PROJECT_MANAGE.VALID_STARTTIME
  is '有效开始时间';
comment on column APPRISE_PROJECT_MANAGE.VALID_ENDTIME
  is '有效结束时间';
comment on column APPRISE_PROJECT_MANAGE.STATISTICALDATE
  is '纳入平台统计时间';
comment on column APPRISE_PROJECT_MANAGE.ITEMTYPE
  is '1方案   2 未采集 3异常 4误报 5未及时 6上传频率';
-- Create/Recreate primary, unique and foreign key constraints 
alter table APPRISE_PROJECT_MANAGE
  add constraint FK99 primary key (ID)
  using index 
  tablespace JB_DATA
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
        #region 得到具体项目分数值
        public DataTable GetRankScoreDetailDataTable(string v_organ_id, string StateDate, int? pageIndex, int? pageSize, ref int? recordCount, string ADDSUBFLAG)
        {
            List<OracleParameter> paras = new List<OracleParameter>();

            paras.Add(new OracleParameter("V_ORGAN_ID", v_organ_id));
            paras.Add(new OracleParameter("V_DATE", StateDate));
            paras.Add(new OracleParameter("V_ADDSUBFLAG", Convert.ToInt32(ADDSUBFLAG)));
            paras.Add(new OracleParameter("V_PAGEINDEX", pageIndex));
            paras.Add(new OracleParameter("V_PAGESIZE", pageSize));
            paras.Add(new OracleParameter("V_PAGECOUNT", "0"));
            


            paras[5].DbType = DbType.Int32;
            paras[5].Size = 10;
            paras[5].Direction = ParameterDirection.Output;

            DataTable dt = GetEvaluteData("SP_GET_RANK_DETAIL", paras);
            recordCount = paras[5].Value == null ? 0 : Convert.ToInt32(paras[5].Value);
            return dt;
        }  
        #endregion

        #region 私有方法
        /// <summary>
        ///  调用oracle包,返回DataTable
        /// </summary>
        /// <param name="cmdName"></param>
        /// <param name="paras"></param>
        /// <returns></returns>
        private DataTable GetEvaluteData(string cmdName, List<OracleParameter> paras)
        {
            ArgumentValidation.CheckForInvalidNullNameReference(cmdName, "cmdName");
            DataTable result = null;
            try
            {
                DbCommand dbcmd = dal.DB.GetStoredProcCommand(cmdName);
                OracleParameter pCursor = new OracleParameter("resultcursor", OracleDbType.RefCursor);
                pCursor.Direction = ParameterDirection.Output;


                if (dbcmd != null)
                {
                    if (paras != null)
                    {
                        foreach (OracleParameter p in paras)
                        {
                            dbcmd.Parameters.Add(p);
                        }
                    }
                    dbcmd.Parameters.Add(pCursor);
                    result = dal.DB.ExecuteDataSet(dbcmd).Tables[0];
                }
            }
            catch (OracleException ex)
            {
                throw new HHHException("数据库异常", ex);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return result;
        }
        #endregion

 

posted on 2015-12-22 15:33  Herry彬  阅读(699)  评论(0编辑  收藏  举报