存儲過程--1

PROCEDURE SP_M_PUB_POLICYREN


(I_DATA_START_TIME DATE /*數據開始日期*/,
 I_DATA_END_TIME   DATE /*數據結束日期*/,
 I_ORG_ID          VARCHAR2 /*機構代碼*/,
 O_RESULT_FLAG     OUT VARCHAR2 /*過程執行結果返回給調度 9 成功 2 失敗*/,
 O_RESULT_MSG      OUT VARCHAR2 /*過程執行結果信息返回給調度*/) IS
  V_DTE_RUN_BEGIN_DT DATE; /*程序每一步驟運行開始*/
  V_DTE_RUN_END_DT   DATE; /*程序每一步驟運行結束時間*/
  V_INT_STEP         NUMBER; /*程序執行步驟*/
  /*步驟描述信息*/
  V_VAR_STEP_DESC VARCHAR2(1000);
  /*步驟所執行的DML類型*/
  V_VAR_STEP_DML_TYPE VARCHAR2(10);
  /*受影響行數*/
  V_INT_ROW_CNT INTEGER := 0;
  /*過程名稱*/
  V_VAR_PROC_NAME VARCHAR2(70) := 'PKG_MID_PUB.SP_M_PUB_POLICYREN';
BEGIN
  V_INT_STEP          := 1; /*第一步驟*/
  V_VAR_STEP_DESC     := '1.0:續期保單中間表處理';
  V_VAR_STEP_DML_TYPE := 'MERGE'; /*操作類型*/
  /*編寫業務表處理邏輯模塊BEGINING.......*/
  /*DML開始運行時間*/
  V_DTE_RUN_BEGIN_DT := SYSDATE;
  /*執行相應的SQL語句*/


  SP_TRUNCATE_TBL_MID('TRUNCATE TABLE MID_DATA.M_PUB_POLICYREN',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_AGENT_CODE',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_BILL_DATE',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
/*  SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_IS_PAID_CODE',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);*/
/*  SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_LBT_S_CD',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);*/
  SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_ORGAN_ID',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_PRD_CD',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
/*  SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_SLS_CHNL_CD',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_SUB_CHNL_CD',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);*/
  SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_PLY_ID',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  SP_TRUNCATE_TBL_MID('DROP INDEX IDX_MPP_DATE_ORIGINAL',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  SP_TRUNCATE_TBL_MID('ALTER TABLE MID_DATA.M_PUB_POLICYREN DROP CONSTRAINT PK_M_PUB_POLICYREN',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  /*DML開始運行時間*/
  V_DTE_RUN_BEGIN_DT := SYSDATE;
  /*執行相應的SQL語句*/
  INSERT /*+APPEND*/
  INTO MID_DATA.M_PUB_POLICYREN B1
  /*-------------續期應收信息-------------*/
    WITH TMP_ARAP AS
     (SELECT B.ITEM_ID,
             B.POLICY_ID,
             B.PRODUCT_ID,
             B.POLICY_PERIOD,
             NVL(E.ACCOUNT_ID, B.ACCOUNT_ID) ACCOUNT_ID,
             B.BILL_DATE,
             B.FEE_STATUS,
             B.FINISH_TIME,
             B.POLICY_YEAR,
             B.FEE_AMOUNT
        FROM (SELECT A.ITEM_ID,
                     A.POLICY_ID,
                     A.PRODUCT_ID,
                     A.POLICY_PERIOD,
                     A.ACCOUNT_ID,
                     A.LIST_ID,
                     TRUNC(A.BILL_DATE) AS BILL_DATE,
                     A.FEE_STATUS,
                     TRUNC(A.FINISH_TIME) AS FINISH_TIME,
                     A.POLICY_YEAR,
                     A.FEE_AMOUNT
                     /*處理A_FIN_PREM_ARAP_INDIV表數據重複問題*/,
                     RANK() OVER(PARTITION BY A.ITEM_ID, A.POLICY_PERIOD ORDER BY A.LIST_ID DESC) RK
                FROM A_FIN_PREM_ARAP_INDIV A
               WHERE A.SERVICE_ID = 3
                 AND A.FEE_TYPE = 41) B,
             (SELECT C.CR_FEE_ID, MAX(D.ACCOUNT_ID) AS ACCOUNT_ID
                FROM A_FIN_CASH_INDIV D, A_FIN_OFFSET_DETAIL C
               WHERE D.FEE_TYPE = 11
                 AND C.DR_FEE_ID = D.FEE_ID
                    --AND C.CR_FEE_ID = A.LIST_ID
                 AND C.CR_TABLE = 4
                 AND C.DR_TABLE = 1
               GROUP BY C.CR_FEE_ID) E
       WHERE B.LIST_ID = E.CR_FEE_ID(+)
         AND B.RK = 1),
    /*-------------續期應收信息  自墊前一刻應收保費--------------*/
    TMP_ARAP_INIT AS
     (SELECT ITEM_ID, FEE_AMOUNT, DUE_TIME, POLICY_YEAR, POLICY_PERIOD
        FROM (SELECT T.ITEM_ID,
                     T.FEE_AMOUNT,
                     T.DUE_TIME,
                     T.POLICY_YEAR,
                     T.POLICY_PERIOD,
                     RANK() OVER(PARTITION BY T.ITEM_ID, T.POLICY_PERIOD ORDER BY T.LIST_ID) RK
                FROM A_FIN_PREM_ARAP_INDIV T
               WHERE T.FEE_STATUS = 2) C
       WHERE EXISTS (SELECT 1
                FROM A_FIN_PREM_ARAP_INDIV A, A_FIN_PREM_ARAP_INDIV B
               WHERE A.SERVICE_ID = 14
                 AND A.FEE_TYPE = 33
                 AND A.FEE_STATUS = 1
                 AND A.CHANGE_ID = B.CHANGE_ID
                 AND B.SERVICE_ID = 3
                 AND B.DUE_TIME = C.DUE_TIME)
         AND C.RK = 1),
    TMP_ARAP2 AS
     (SELECT DISTINCT T1.POLICY_ID,
                      T1.PRODUCT_ID,
                      T1.BILL_DATE,
                      T4.TRANSFER_DATE AS FINISH_TIME /*最近轉賬日期*/,
                      CASE
                        WHEN T4.STATUS = 'Y' AND T4.TEXT_STATUS = 4 THEN
                         '轉賬成功'
                        WHEN T4.STATUS = 'N' AND T4.TEXT_STATUS = 4 THEN
                         '轉賬失敗'
                        WHEN T4.STATUS = 'N' AND T4.TEXT_STATUS = 2 THEN
                         '轉賬中'
                      END AS FEE_STATUS /*轉賬狀態*/,
                      (CASE
                        WHEN T4.STATUS = 'N' AND T4.TEXT_STATUS = 4 THEN
                         (SELECT MAX(NVL(A1.BACK_MESSAGE,
                                         A1.OTHER_REJECTION_REASON1)) KEEP(DENSE_RANK LAST ORDER BY A1.TRANSFER_DATE, A1.INSERTED_TIMESTAMP)
                            FROM (SELECT CASE
                                           WHEN T.UNSUCCESS_ID = 5630 THEN
                                            '客戶賬號號碼或者賬號姓名不正確'
                                           ELSE
                                            T.OTHER_REJECTION_REASON
                                         END AS OTHER_REJECTION_REASON1,
                                         T.*
                                    FROM A_FIN_BANK_TEXT_DETAIL_INDIV T) A1
                           WHERE A1.MASTER_CHG_ID = T1.CHANGE_ID
                             AND A1.STATUS = 'N'
                             AND A1.COLLECT_PAY = '1'
                             AND A1.TEXT_STATUS = '4')
                        ELSE
                         ''
                      END) AS FAIL_TRANS_REASON /*轉賬失敗原因*/,
                      NVL(T2.TRANS_FAIL_NUM, 0) AS TRANS_FAIL_NUM /*轉賬失敗次數*/
                      /*,NVL((SELECT TRANS_FAIL_NUM
                         FROM (SELECT T.POLICY_ID
                                     ,T.MASTER_CHG_ID
                                     ,COUNT(1) AS TRANS_FAIL_NUM
                                 FROM A_FIN_BANK_TEXT_DETAIL_INDIV T
                                WHERE T.COLLECT_PAY = 1
                                  AND T.TEXT_STATUS = 4
                                  AND T.STATUS = 'N'
                                  AND T.BUSINESS_SOURCE <> 3
                                GROUP BY T.POLICY_ID
                                        ,T.MASTER_CHG_ID) A
                        WHERE T1.POLICY_ID = A.POLICY_ID(+)
                          AND T1.CHANGE_ID = A.MASTER_CHG_ID(+))
                      ,0) TRANS_FAIL_NUM_1*/
                      /*,(CASE
                        WHEN ((T2.SUSPEND_IND = 'Y' AND T2.SUSPEND_SOURCE_TYPE = 2) OR
                             (T2.SUSPEND_IND = 'Y' AND T2.SUSPEND_SOURCE_TYPE = 1 AND T2.TRANS_FAIL_NUM = 6)) THEN
                         '是'
                        ELSE
                         '否'
                      END) AS IS_FROZEN \*是否凍結*\*/,
                      (CASE
                        WHEN ((T2.FROM_DATE IS NULL AND T2.SUSPEND_IND = 'Y') OR
                             (T2.FROM_DATE IS NOT NULL AND
                             T2.TRANS_FAIL_NUM = 6 AND T2.SUSPEND_IND = 'Y')) THEN
                         '是'
                        ELSE
                         '否'
                      END) AS IS_FROZEN /*是否凍結*/,
                      (CASE
                        WHEN T3.STATUS = 2 THEN
                         '待發放'
                        WHEN T3.STATUS = 4 THEN
                         '已回銷'
                        ELSE
                         ''
                      END) AS RENEWAL_DOC_STATUS
        FROM (SELECT A.POLICY_ID,
                     A.PRODUCT_ID,
                     A.FEE_STATUS,
                     A.FINISH_TIME,
                     A.CHANGE_ID,
                     A.BILL_DATE,
                     A.DUE_TIME
              -- ,ROW_NUMBER() OVER(PARTITION BY A.POLICY_ID, A.PRODUCT_ID, A.BILL_DATE ORDER BY A.FINISH_TIME DESC) AS RK
                FROM A_FIN_PREM_ARAP_INDIV A, A_EVT_POLICY_CHANGE B
               WHERE B.SERVICE_ID = 3
                 AND A.POLICY_CHG_ID = B.POLICY_CHG_ID
                 AND A.FEE_TYPE = 41) T1,
             (SELECT *
                FROM A_EVT_TRANSFER_SUSPEND T
               WHERE T.COLLECT_PAY = 1
                 AND T.SUSPEND_TYPE = 2) T2,
             (SELECT T.POLICY_ID, TRUNC(T.DUE_DATE) AS DUE_DATE, T.STATUS
                FROM A_EVT_DOCUMENT T
               WHERE T.TEMPLATE_ID = 1031) T3
             
            ,
             (SELECT POLICY_ID,
                     STATUS,
                     TEXT_STATUS,
                     TRANSFER_DATE,
                     DUE_TIME,
                     MASTER_CHG_ID
                FROM (SELECT RANK() OVER(PARTITION BY T.POLICY_ID, T.DUE_TIME ORDER BY T.TRANSFER_DATE DESC, T.INSERTED_TIMESTAMP DESC) RK,
                             T.POLICY_ID,
                             T.STATUS,
                             T.TEXT_STATUS,
                             TRUNC(T.TRANSFER_DATE) AS TRANSFER_DATE,
                             T.DUE_TIME,
                             T.MASTER_CHG_ID
                        FROM A_FIN_BANK_TEXT_DETAIL_INDIV T
                       WHERE T.COLLECT_PAY = 1
                         AND T.TEXT_STATUS <> 5
                         AND T.BUSINESS_SOURCE <> 3)
               WHERE RK = 1) T4
      
       WHERE T1.POLICY_ID = T4.POLICY_ID
         AND T1.CHANGE_ID = T4.MASTER_CHG_ID and t1.due_time = t4.DUE_TIME
         AND T1.POLICY_ID = T2.POLICY_ID(+)
         AND T1.DUE_TIME = T2.DUE_DATE(+) and t1.change_id=t2.master_change_id(+)
         AND T4.POLICY_ID = T3.POLICY_ID(+)
         AND T4.DUE_TIME = T3.DUE_DATE(+)),
    --離職單人員的相關信息
    
    TMP AS
     (SELECT T.POLICY_ID,
             A.AGENT_ID,
             A.AGENT_CODE,
             C.FIRST_NAME,
             NVL(NVL(C.MOBILE, C.OFFICE_TEL), C.HOME_TEL) MOBILE,
             A.AGENT_STATUS,
             D.LV3_CHANNEL_ORG_NAME,
             D.LV3_LEADER_NAME,
             D.LV2_CHANNEL_ORG_NAME,
             D.LV2_LEADER_NAME,
             D.LV1_CHANNEL_ORG_NAME,
             D.LV1_LEADER_NAME
        FROM A_PTY_POLICY_PRODUCER_ROLE T,
             A_ORG_AGENT                A,
             A_PTY_INDIV_CUST           C,
             D_CHANNEL_ORG              D
       WHERE T.PRODUCER_ID = A.AGENT_ID
         AND A.AGENT_ID = C.CUSTOMER_ID
         AND A.AGENT_CODE = D.AGENT_CODE
         AND T.ACTIVE_INDI = 'Y'
         AND T.PRODUCER_ROLE = 1
         AND D.END_DATE = DATE '9999-12-31')
    /*-------------續期保單信息-------------*/
    SELECT TT.POLICY_ID,
           TT.ITEM_ID,
           TT.POLICY_CODE,
           TT.ORGAN_ID,
           TT.LV3_ORGAN_NAME,
           TT.PRODUCT_ID,
           TT.PRODUCT_CODE,
           TT.PRODUCT_ABBR_NAME,
           TT.POLICY_YEAR,
           TT.POLICY_PERIOD,
           TT.ISSUE_DATE,
           TT.VALIDATE_DATE,
           TT.BILL_DATE,
           TT.PAID_DATE,
           TT.NEXT_ISSUE_DATE,
           TT.INVALID_DATE,
           TT.LIABILITY_STATE_CODE,
           TT.LIABILITY_STATE_NAME,
           TT.IS_PAID_CODE,
           TT.IS_PAID_NAME,
           TT.TOTAL_PREM_AF,
           TT.DUE_PREM,
           TT.DUE_PREM_HL,
           TT.DUE_PREM_SCJ,
           TT.HOLDER_NAME,
           TT.INSURED_NAME,
           TT.ROP_APPLICABLE,
           TT.HOLDER_MOBILE,
           TT.BILL_BANK_NAME,
           TT.ACCO_NAME,
           TT.BANK_ACCOUNT,
           TT.SALES_CHANNEL_CODE,
           TT.SALES_CHANNEL_NAME,
           TT.SUBMIT_CHANNEL_CODE,
           TT.SUBMIT_CHANNEL_NAME,
           TT.AGENT_NAME,
           TT.AGENT_CODE,
           TT.LV2_CHANNEL_ORG_NAME,
           TT.LV3_CHANNEL_ORG_CODE,
           TT.LV3_CHANNEL_ORG_NAME,
           TT.AGENT_MOBILE,
           TT.IS_ORPHAN_PLY,
           TT.LV1_BANK_CODE,
           TT.LV1_BANK_NAME,
           TT.LV4_BANK_NAME,
           TT.LV6_BANK_NAME,
           TT.SELL_TELLER_NAME,
           TT.RENEWAL_FEE_STATUS,
           TT.INVALID_DAY,
           TT.REINSTATE_DATE,
           TT.CHARGE_MODE_CODE,
           TT.CHARGE_MODE_NAME,
           TT.CHARGE_PERIOD_CODE,
           TT.CHARGE_PERIOD_NAME,
           TT.COVERAGE_PERIOD_CODE,
           TT.COVERAGE_PERIOD_NAME,
           TT.COVERAGE_YEAR,
           TT.CHARGE_YEAR,
           TT.AMOUNT,
           TT.INS_TYPE,
           TT.ETL_UPDATE_TIME,
           B1.FINISH_TIME /*最近轉賬日期*/,
           B1.FEE_STATUS /*轉賬狀態*/,
           B1.FAIL_TRANS_REASON /*轉賬失敗原因*/,
           B1.TRANS_FAIL_NUM /*轉賬失敗次數*/,
           B1.RENEWAL_DOC_STATUS /*續期函件*/,
           B1.IS_FROZEN /*是否凍結*/,
           TT.AGENT_STATUS_CODE,
           TT.AGENT_STATUS_NAME,
           TT.REN_FEE_TYPE,
           TT.SURRENDER_DATE /*退保日期*/,
           TT.RENEW_DECISION /*自動續保標誌:1 表示自動續保,0 表示非自動續保*/,
           TT.VALIDATE_DATE_ORIGINAL /*原始生效日期*/,
           TT.DUE_PREM_PRE_APL /*自墊前一個應繳保費*/,
           TT.IS_PERMIT_APL,
           TT.APL_STATUS,
           DECODE(TT.IS_ORPHAN_PLY, 'Y', C.AGENT_CODE, TT.AGENT_CODE) CUR_AGENT_CODE,
           DECODE(TT.IS_ORPHAN_PLY, 'Y', C.FIRST_NAME, TT.AGENT_NAME) CUR_AGENT_NAME,
           DECODE(TT.IS_ORPHAN_PLY, 'Y', C.MOBILE, TT.AGENT_MOBILE) CUR_AGENT_PHONE,
           DECODE(TT.IS_ORPHAN_PLY,
                  'Y',
                  DECODE(C.AGENT_STATUS, '1', '離職', '在職'),
                  '在職') CUR_AGENT_STATUS,
           DECODE(TT.IS_ORPHAN_PLY,
                  'Y',
                  C.LV3_CHANNEL_ORG_NAME,
                  D.LV3_CHANNEL_ORG_NAME) CUR_AGENT_LV3_CHANNEL_ORG_NAME,
           DECODE(TT.IS_ORPHAN_PLY,
                  'Y',
                  C.LV3_LEADER_NAME,
                  D.LV3_LEADER_NAME) CUR_AGENT_LV3_LEADER_NAME,
           DECODE(TT.IS_ORPHAN_PLY,
                  'Y',
                  C.LV2_CHANNEL_ORG_NAME,
                  D.LV2_CHANNEL_ORG_NAME) CUR_AGENT_LV2_CHANNEL_ORG_NAME,
           DECODE(TT.IS_ORPHAN_PLY,
                  'Y',
                  C.LV2_LEADER_NAME,
                  D.LV2_LEADER_NAME) CUR_AGENT_LV2_LEADER_NAME,
           DECODE(TT.IS_ORPHAN_PLY,
                  'Y',
                  C.LV1_CHANNEL_ORG_NAME,
                  D.LV1_CHANNEL_ORG_NAME) CUR_AGENT_LV1_CHANNEL_ORG_NAME,
           DECODE(TT.IS_ORPHAN_PLY,
                  'Y',
                  C.LV1_LEADER_NAME,
                  D.LV1_LEADER_NAME) CUR_AGENT_LV1_LEADER_NAME,
                  LIABILITY_STATE_CAUSE_CODE,
                  LIABILITY_STATE_CAUSE_NAME
      FROM (SELECT T1.POLICY_ID /*保單ID*/,
                   T1.ITEM_ID /*保單責任ID*/,
                   T1.POLICY_CODE /*保單號*/,
                   T1.ORGAN_ID /*機構代碼*/,
                   T1.LV3_ORGAN_NAME /*機構名稱*/,
                   T1.PRODUCT_ID /*險種ID*/,
                   T1.PRODUCT_CODE /*險種代碼*/,
                   T1.PRODUCT_ABBR_NAME /*險種名稱*/,
                   NVL(T2.POLICY_YEAR, 1) AS POLICY_YEAR /*繳費年*/,
                   NVL(T2.POLICY_PERIOD, 1) AS POLICY_PERIOD /*繳費期*/,
                   T1.ISSUE_DATE /*承保日期*/,
                   T1.VALIDATE_DATE /*生效日期*/,
                   T2.BILL_DATE /*應收日期*/,
                   (CASE
                     WHEN T14.ITEM_ID IS NULL THEN
                      (CASE
                        WHEN T11.ITEM_ID IS NULL THEN
                         DECODE(T2.FEE_STATUS, 1, T2.FINISH_TIME)
                        ELSE
                         T11.FINISH_TIME
                      END)
                     ELSE
                      (CASE
                        WHEN T14.FINISH_TIME IS NOT NULL THEN
                         T14.FINISH_TIME
                        ELSE
                         NULL
                      END)
                   END) AS PAID_DATE /*實收日期*/,
                   (CASE
                     WHEN T11.ITEM_ID IS NULL THEN
                      T6.DUE_DATE
                     WHEN T11.ITEM_ID IS NOT NULL AND
                          T1.CHARGE_MODE_CODE = '1' THEN
                      ADD_MONTHS(T2.BILL_DATE, 12)
                     WHEN T11.ITEM_ID IS NOT NULL AND
                          T1.CHARGE_MODE_CODE = '4' THEN
                      ADD_MONTHS(T2.BILL_DATE, 1)
                   END) AS NEXT_ISSUE_DATE /*下期應收日期*/,
                   (CASE
                     WHEN T1.LIABILITY_STATE_CODE = 2 AND T2.FEE_STATUS <> 1 THEN
                      T1.INVALID_DATE
                     ELSE
                      NULL
                   END) AS INVALID_DATE /*停效日期*/,
                   T1.LIABILITY_STATE_CODE /*保單狀態代碼*/,
                   T1.LIABILITY_STATE_NAME /*保單狀態*/,
                   (CASE
                     WHEN T14.ITEM_ID IS NULL THEN
                      (CASE
                        WHEN T11.ITEM_ID IS NULL THEN
                         DECODE(T2.FEE_STATUS, 1, 'Y', 'N')
                        ELSE
                         'Y'
                      END)
                     ELSE
                      (CASE
                        WHEN T14.FINISH_TIME IS NOT NULL THEN
                         'Y'
                        ELSE
                         'N'
                      END)
                   END) AS IS_PAID_CODE /*交費狀態代碼*/,
                   (CASE
                     WHEN T14.ITEM_ID IS NULL THEN
                      (CASE
                        WHEN T11.ITEM_ID IS NULL THEN
                         DECODE(T2.FEE_STATUS, 1, '已交', '應交')
                        ELSE
                         '已交'
                      END)
                     ELSE
                      (CASE
                        WHEN T14.FINISH_TIME IS NOT NULL THEN
                         '已交'
                        ELSE
                         '應交'
                      END)
                   END) AS IS_PAID_NAME /*交費狀態*/,
                   NVL(T9.TOTAL_PREM_AF, 0) AS TOTAL_PREM_AF /*首期保費*/,
                   NVL(T2.FEE_AMOUNT, 0) AS DUE_PREM /*應收保費*/
                   ------------------------------------------------------------------------------
                   --對於已自墊的保單,“應收保費”字段顯示自墊前一刻的續期保費
                  ,
                   CASE
                     WHEN T14.ITEM_ID IS NOT NULL THEN
                      NVL(TT.FEE_AMOUNT, 0)
                     ELSE
                      NVL(T2.FEE_AMOUNT, 0)
                   END AS DUE_PREM_PRE_APL
                   ---------------------------------------------------------------------------------
                  ,
                   NVL(T12.FEE_AMOUNT, 0) AS DUE_PREM_HL /*紅利抵交保費*/,
                   0 AS DUE_PREM_SCJ /*生存金抵交保費*/,
                   T1.HOLDER_NAME /*投保人*/,
                   T1.INSURED_NAME /*被保人*/,
                   T1.ROP_APPLICABLE /*自保件標誌*/,
                   T5.MOBILE || '/' || T5.OFFICE_TEL || '/' || T5.HOME_TEL AS HOLDER_MOBILE /*客戶電話*/,
                   T4.BANK_NAME AS BILL_BANK_NAME /*開戶銀行*/,
                   T3.ACCO_NAME /*繳費戶名*/,
                   T3.BANK_ACCOUNT /*繳費賬號*/,
                   T1.SALES_CHANNEL_CODE /*銷售渠道代碼*/,
                   T1.SALES_CHANNEL_NAME /*銷售渠道*/,
                   T1.SUBMIT_CHANNEL_CODE /*出單渠道代碼*/,
                   T1.SUBMIT_CHANNEL_NAME /*出單渠道*/,
                   T1.AGENT_NAME /*銷售人員*/,
                   T1.AGENT_CODE /*銷售人員代碼*/,
                   T1.LV2_CHANNEL_ORG_NAME /*營業部門*/,
                   T1.LV3_CHANNEL_ORG_CODE /*營業部代碼*/,
                   T1.LV3_CHANNEL_ORG_NAME /*營業部名稱*/,
                   T1.LV1_CHANNEL_ORG_NAME /*營業區名稱*/,
                   T7.MOBILE || '/' || T7.OFFICE_TEL || '/' || T7.HOME_TEL AS AGENT_MOBILE /*銷售人員電話*/,
                   DECODE(T8.AGENT_STATUS, 1, 'Y', 'N') AS IS_ORPHAN_PLY /*孤兒單標誌:Y/N*/,
                   T1.LV1_BANK_CODE /*總行代碼*/,
                   T1.LV1_BANK_NAME /*總行名稱*/,
                   T1.LV4_BANK_NAME /*支行名稱*/,
                   T1.LV6_BANK_NAME /*網點名稱*/,
                   T1.SELL_TELLER_NAME /*銀行銷售人員*/,
                   (CASE
                     WHEN T14.ITEM_ID IS NULL THEN
                      (CASE
                        WHEN T11.ITEM_ID IS NOT NULL THEN
                         '超期已交'
                        WHEN T2.FEE_STATUS = 1 AND
                             TO_CHAR(T2.FINISH_TIME, 'yyyymm') =
                             TO_CHAR(T2.BILL_DATE, 'yyyymm') THEN
                         '應交已交'
                        WHEN T2.FEE_STATUS = 1 AND
                             TO_CHAR(T2.FINISH_TIME, 'yyyymm') =
                             TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 1), 'yyyymm') THEN
                         '寬一已交'
                        WHEN T2.FEE_STATUS = 1 AND
                             TO_CHAR(T2.FINISH_TIME, 'yyyymm') =
                             TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
                         '寬末已交'
                        WHEN T2.FEE_STATUS = 1 AND
                             TO_CHAR(T2.FINISH_TIME, 'yyyymm') >
                             TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
                         '超期已交'
                        WHEN T2.FEE_STATUS <> 1 AND
                             TO_CHAR(SYSDATE, 'yyyymm') =
                             TO_CHAR(T2.BILL_DATE, 'yyyymm') THEN
                         '應交未交'
                        WHEN T2.FEE_STATUS <> 1 AND
                             TO_CHAR(SYSDATE, 'yyyymm') =
                             TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 1), 'yyyymm') THEN
                         '寬一未交'
                        WHEN T2.FEE_STATUS <> 1 AND
                             TO_CHAR(SYSDATE, 'yyyymm') =
                             TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
                         '寬末未交'
                        WHEN T2.FEE_STATUS <> 1 AND
                             TO_CHAR(SYSDATE, 'yyyymm') >
                             TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
                         '超期未交'
                        ELSE
                         NULL
                      END)
                     ELSE
                      (CASE
                        WHEN T14.FINISH_TIME IS NOT NULL THEN
                         '自墊還款'
                        WHEN T14.FINISH_TIME IS NULL AND
                             TO_CHAR(SYSDATE, 'yyyymm') =
                             TO_CHAR(T2.BILL_DATE, 'yyyymm') THEN
                         '應交未交'
                        WHEN T14.FINISH_TIME IS NULL AND
                             TO_CHAR(SYSDATE, 'yyyymm') =
                             TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 1), 'yyyymm') THEN
                         '寬一未交'
                        WHEN T14.FINISH_TIME IS NULL AND
                             TO_CHAR(SYSDATE, 'yyyymm') =
                             TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
                         '寬末未交'
                        WHEN T14.FINISH_TIME IS NULL AND
                             TO_CHAR(SYSDATE, 'yyyymm') >
                             TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
                         '超期未交'
                        ELSE
                         NULL
                      END)
                   END) AS RENEWAL_FEE_STATUS /*續期指標狀態*/,
                   (CASE
                     WHEN T1.LIABILITY_STATE_CODE = 2 AND T2.FEE_STATUS <> 1 THEN
                      TRUNC(SYSDATE) - T1.INVALID_DATE
                     ELSE
                      NULL
                   END) AS INVALID_DAY /*保單停效天數*/,
                   T11.FINISH_TIME AS REINSTATE_DATE /*最近復效時間*/,
                   T1.CHARGE_MODE_CODE /*繳費頻次代碼(繳費方式)*/,
                   T1.CHARGE_MODE_NAME /*繳費頻次名稱(繳費方式)*/,
                   T1.CHARGE_PERIOD_CODE /*繳費年期類型代碼*/,
                   T1.CHARGE_PERIOD_NAME /*繳費年期類型名稱*/,
                   T1.COVERAGE_PERIOD_CODE /*保障年期類型代碼*/,
                   T1.COVERAGE_PERIOD_NAME /*保障年期類型名稱*/,
                   T1.COVERAGE_YEAR /*保險期間(年)*/,
                   T1.CHARGE_YEAR /*交費期限(年)*/,
                   T1.AMOUNT /*保額*/,
                   T1.INS_TYPE /* 是否主險:Y主險,N附加險*/,
                   SYSDATE AS ETL_UPDATE_TIME /*ETL時間*/,
                   nvl(T13.AGENT_STATUS, ta.agent_status) AS AGENT_STATUS_CODE /*人員狀態代碼*/,
                   (SELECT TAS.DESCRIPTION
                         FROM A_COD_BACM_ORG_STATUS TAS
                        WHERE TAS.AGT_ORG_STATUS_CODE = T13.AGENT_STATUS) AS AGENT_STATUS_NAME /*人員狀態名稱*/,
                   (CASE
                     WHEN T11.ITEM_ID IS NOT NULL THEN
                      2
                     WHEN T14.ITEM_ID IS NOT NULL THEN
                      4
                     ELSE
                      1
                   END) AS REN_FEE_TYPE,
                   T1.SURRENDER_DATE /*退保日期*/,
                   T9.RENEW_DECISION /*自動續保標誌:1 表示自動續保,0 表示非自動續保*/,
                   T9.VALIDATE_DATE_ORIGINAL /*原始生效日期*/,
                   CASE
                     WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' THEN
                      '是'
                     WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '1' THEN
                      '否'
                     ELSE
                      ''
                   END AS IS_PERMIT_APL /*是否同意自墊*/,
                   CASE
                     WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' AND
                          T14.ITEM_ID IS NULL THEN
                      '未自墊'
                     WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' AND
                          T14.ITEM_ID IS NOT NULL AND T14.ITEM_ID_PAY IS NULL THEN
                      '已自墊'
                     WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' AND
                          T14.ITEM_ID IS NOT NULL AND
                          T14.ITEM_ID_PAY IS NOT NULL THEN
                      '已還款'
                     ELSE
                      ''
                   END AS APL_STATUS /*墊交狀態*/
                   ,
                   t1.LIABILITY_STATE_CAUSE_CODE,
                   t1.LIABILITY_STATE_CAUSE_NAME
              FROM M_PUB_POLICYPREM_T1 T1,
                   TMP_ARAP T2,
                   TMP_ARAP_INIT TT,
                   A_PTY_BANK_ACCOUNT T3,
                   A_ORG_BANK T4,
                   A_PTY_INDIV_CUST T5 /*取投保人信息*/,
                   A_AGT_POLICY_EXTEND T6,
                   A_PTY_INDIV_CUST T7 /*取代理人信息*/,
                   A_ORG_AGENT T8,
                   (SELECT T.ITEM_ID,
                           T.RENEW_DECISION,
                           T.TOTAL_PREM_AF,
                           CASE
                             WHEN T.RENEW_DECISION = '1' THEN
                              (SELECT A.VALIDATE_DATE
                                 FROM A_AGT_POLICY_PRD_INDIV A
                                WHERE A.ITEM_ID = T.MASTER_ID)
                             ELSE
                              NVL(T.INITIAL_VALI_DATE, T.VALIDATE_DATE)
                           END AS VALIDATE_DATE_ORIGINAL
                      FROM A_AGT_POLICY_PRD_INDIV T) T9,
                   (SELECT ITEM_ID,
                           POLICY_YEAR,
                           POLICY_PERIOD,
                           FEE_AMOUNT,
                           TRUNC(BILL_DATE) AS BILL_DATE /*應繳日期*/,
                           TRUNC(FINISH_TIME) AS FINISH_TIME /*實收日期*/
                      FROM A_FIN_PREM_ARAP_INDIV
                     WHERE SERVICE_ID = 194
                       AND FEE_TYPE = 41
                       AND FEE_STATUS = 1) T11 /*復效保單數據*/,
                   (SELECT A.ITEM_ID,
                           A.POLICY_PERIOD,
                           SUM(A.FEE_AMOUNT) AS FEE_AMOUNT
                      FROM A_FIN_PREM_ARAP_INDIV A
                     WHERE A.SERVICE_ID = 521
                       AND A.FEE_TYPE = 905
                     GROUP BY A.ITEM_ID, A.POLICY_PERIOD) T12 /*紅利抵交保費*/,
                   A_ORG_BANK_AGT_OTHER T13,
                   a_org_agent ta,
                   (SELECT A3.ITEM_ID,
                           A1.FINISH_TIME,
                           A1.ITEM_ID AS ITEM_ID_PAY,
                           A1.FEE_AMOUNT,
                           A3.POLICY_PERIOD
                      FROM (SELECT A.ITEM_ID,
                                   A.POLICY_CHG_ID,
                                   B.PRE_POLICY_CHG,
                                   TRUNC(A.FINISH_TIME) FINISH_TIME,
                                   A.POLICY_PERIOD,
                                   SUM(A.FEE_AMOUNT) AS FEE_AMOUNT
                              FROM A_FIN_PREM_ARAP_INDIV A,
                                   A_EVT_POLICY_CHANGE   B
                             WHERE A.POLICY_CHG_ID = B.POLICY_CHG_ID
                               AND B.SERVICE_ID = 302
                               AND B.POLICY_CHG_STATUS = 2
                               AND A.FEE_STATUS = 1
                             GROUP BY A.ITEM_ID,
                                      A.POLICY_CHG_ID,
                                      B.PRE_POLICY_CHG,
                                      TRUNC(A.FINISH_TIME),
                                      A.POLICY_PERIOD) A1 /*自墊清償*/,
                           (SELECT T.ITEM_ID,
                                   T.POLICY_CHG_ID,
                                   SUM(T.FEE_AMOUNT),
                                   T.POLICY_PERIOD
                              FROM A_FIN_PREM_ARAP_INDIV T
                             WHERE T.SERVICE_ID = 3
                               AND T.FEE_TYPE = 41
                               AND T.FINISH_TIME IS NOT NULL
                               AND EXISTS
                             (SELECT 1
                  FROM A_FIN_PREM_ARAP_INDIV A, A_EVT_POLICY_CHANGE B
                 WHERE A.POLICY_CHG_ID = B.POLICY_CHG_ID 
                   and b.SERVICE_ID = 14
                   and b.policy_chg_status = 2
                   AND A.FEE_TYPE = 33
                   AND A.FEE_STATUS = 1
                   AND T.POLICY_CHG_ID = A.POLICY_CHG_ID)
                               AND T.FEE_AMOUNT > 0 GROUP BY T.ITEM_ID,
                                   T.POLICY_CHG_ID,
                                   T.POLICY_PERIOD) A3 /*自動保費墊交*/
                     WHERE A3.ITEM_ID = A1.ITEM_ID(+)
                       AND A3.POLICY_CHG_ID = A1.PRE_POLICY_CHG(+)) T14 /*自動保費墊交*/,
                   A_AGT_POLICY_PRD_INDIV T15,
                   A_PRD_INFO T16
             WHERE T1.ITEM_ID = T2.ITEM_ID(+)
               AND T2.ITEM_ID = TT.ITEM_ID(+)
               AND T2.POLICY_PERIOD = TT.POLICY_PERIOD(+)
               AND T1.IS_REVERSE = 'N'
               AND T1.CHARGE_MODE_CODE <> '5' /*期繳*/
               AND T1.LIABILITY_STATE_CODE NOT IN ('0', '31', '33') --剔除待生效、契撤、銀保通當日退保(這些單不可能產生續期)
               AND T2.ACCOUNT_ID = T3.ACCOUNT_ID(+)
               AND T3.BANK_CODE = T4.BANK_CODE(+)
               AND T1.HOLDER_ID = T5.CUSTOMER_ID(+)
               AND T1.ITEM_ID = T6.ITEM_ID(+)
               AND T1.AGENT_ID = T7.CUSTOMER_ID(+)
               AND T1.AGENT_ID = T8.AGENT_ID(+)
               AND T1.ITEM_ID = T9.ITEM_ID(+)
               AND T2.ITEM_ID = T11.ITEM_ID(+)
               AND T2.BILL_DATE = T11.BILL_DATE(+)
               AND T2.ITEM_ID = T12.ITEM_ID(+)
               AND T2.POLICY_PERIOD = T12.POLICY_PERIOD(+)
               AND T2.ITEM_ID = T14.ITEM_ID(+)
               AND T2.POLICY_PERIOD = T14.POLICY_PERIOD(+)
               AND T1.AGENT_ID = T13.AGENT_ID(+)
               AND T1.AGENT_ID = Ta.AGENT_ID(+)
               AND T1.POLICY_ID = T15.POLICY_ID
               AND T1.PRODUCT_ID = T15.PRODUCT_ID
               AND T15.PRODUCT_ID = T16.PRODUCT_ID
               AND T13.IS_VALID(+) = 'Y') TT,
           TMP_ARAP2 B1,
           TMP C,
           (SELECT T.AGENT_CODE,
                   T.LV1_CHANNEL_ORG_NAME,
                   T.LV1_LEADER_NAME,
                   T.LV2_CHANNEL_ORG_NAME,
                   T.LV2_LEADER_NAME,
                   T.LV3_CHANNEL_ORG_NAME,
                   T.LV3_LEADER_NAME
              FROM D_CHANNEL_ORG T
             WHERE T.END_DATE = DATE '9999-12-31') D
     WHERE TT.POLICY_ID = B1.POLICY_ID(+)
       AND TT.PRODUCT_ID = B1.PRODUCT_ID(+)
       AND TT.BILL_DATE = B1.BILL_DATE(+)
       AND TT.AGENT_CODE = D.AGENT_CODE(+)
       AND TT.POLICY_ID = C.POLICY_ID(+);


  /*獲取受影響行數*/
  V_INT_ROW_CNT := SQL%ROWCOUNT;
  COMMIT; ---提交DML操作


  ------------------------------修改主險是自墊保費,附加險也調整成自墊保費---------------------------------------------
  UPDATE MID_DATA.M_PUB_POLICYREN T
     SET T.REN_FEE_TYPE = 4
   WHERE EXISTS (SELECT 1
            FROM MID_DATA.M_PUB_POLICYREN S
           WHERE S.REN_FEE_TYPE = 4
             AND S.INS_TYPE = 'Y'
             AND S.POLICY_CODE = T.POLICY_CODE)
     AND T.INS_TYPE = 'N';
  COMMIT; ---提交DML操作
  /*DML運行結束時間*/
  V_DTE_RUN_END_DT := SYSDATE;
  SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_AGENT_CODE on MID_DATA.M_PUB_POLICYREN (AGENT_CODE)',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_BILL_DATE on MID_DATA.M_PUB_POLICYREN (BILL_DATE)',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
/*  SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_IS_PAID_CODE on MID_DATA.M_PUB_POLICYREN (IS_PAID_CODE)',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);*/
/*  SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_LBT_S_CD on MID_DATA.M_PUB_POLICYREN (LIABILITY_STATE_CODE)',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);*/
  SP_TRUNCATE_TBL_MID('create bitmap index IDX_M_PUB_PRN_ORGAN_ID on MID_DATA.M_PUB_POLICYREN (ORGAN_ID)',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  SP_TRUNCATE_TBL_MID('create bitmap index IDX_M_PUB_PRN_PRD_CD on MID_DATA.M_PUB_POLICYREN (PRODUCT_CODE)',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
/*  SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_SLS_CHNL_CD on MID_DATA.M_PUB_POLICYREN (SALES_CHANNEL_CODE)',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_SUB_CHNL_CD on MID_DATA.M_PUB_POLICYREN (SUBMIT_CHANNEL_CODE)',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);*/
  SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_PLY_ID on MID_DATA.M_PUB_POLICYREN (POLICY_ID)',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  SP_TRUNCATE_TBL_MID('create index IDX_MPP_DATE_ORIGINAL on MID_DATA.M_PUB_POLICYREN (VALIDATE_DATE_ORIGINAL)',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);
  SP_TRUNCATE_TBL_MID('alter table MID_DATA.M_PUB_POLICYREN add constraint PK_M_PUB_POLICYREN primary key (ITEM_ID, POLICY_PERIOD)',
                      O_RESULT_FLAG,
                      O_RESULT_MSG);


  /*記錄成功的日誌信息*/
  PKG_PUBLIC.SP_ETL_LOAD_DML_LOG(V_INT_STEP,
                                 I_DATA_START_TIME /*數據開始日期*/,
                                 I_DATA_END_TIME /*數據結束日期*/,
                                 I_ORG_ID /*機構代碼*/,
                                 V_VAR_PROC_NAME /*存儲過程名稱*/,
                                 V_VAR_STEP_DESC /*操作步驟描述*/,
                                 V_VAR_STEP_DML_TYPE /*操作類型*/,
                                 V_INT_ROW_CNT /*受影響行數*/,
                                 V_VAR_CST_SUCCESS /*執行結果*/,
                                 V_DTE_RUN_BEGIN_DT /*運行開始時間*/,
                                 V_DTE_RUN_END_DT /*運行結束時間*/,
                                 '' /*運行結果詳細信息*/);


  /*整個過程執行成功*/
  O_RESULT_FLAG := V_VAR_CST_RESULT_SUCC;
  /*整個過程運行結果描述信息*/
  O_RESULT_MSG := '';


  /*異常處理部分*/
EXCEPTION
  WHEN OTHERS THEN
    ---回滾DML操作
    ROLLBACK;
    /*記錄異常信息*/
    O_RESULT_FLAG := V_VAR_CST_RESULT_FAIL; ----失敗
    O_RESULT_MSG  := SQLERRM;
    ---記錄異常日誌信息
    PKG_PUBLIC.SP_ETL_LOAD_DML_LOG(V_INT_STEP,
                                   I_DATA_START_TIME /*數據開始日期*/,
                                   I_DATA_END_TIME /*數據結束日期*/,
                                   I_ORG_ID /*機構代碼*/,
                                   V_VAR_PROC_NAME /*存儲過程名稱*/,
                                   V_VAR_STEP_DESC /*操作步驟描述*/,
                                   V_VAR_STEP_DML_TYPE /*操作步驟類型*/,
                                   V_INT_ROW_CNT /*返回的受影響行數*/,
                                   V_VAR_CST_FAIL /*運行結果 0 失敗; 1 成功*/,
                                   V_DTE_RUN_BEGIN_DT /*運行開始時間*/,
                                   V_DTE_RUN_END_DT /*運行結束時間*/,
                                   O_RESULT_MSG /*運行結果詳細信息*/);
END SP_M_PUB_POLICYREN;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章