###### tags: `STS`
# 全部風險事件STS407W
------------------------------
```
風險事件選案按下[執行]後
1.[步驟1&步驟2]參數將儲存於 BBI_RMS_TASK_SEL_CASE_PARAM
2.[步驟3]使用者所選擇的[風險事件]會記錄於 BBI_RMS_TASK_SEL_EVENT_PARAMS
3.[系統資料區]選案選出結果紀錄在 BBI_RMS_TASK_SEL_CASE_LIST
```
---
<font color="red">1.[步驟1&步驟2]參數將儲存於 BBI_RMS_TASK_SEL_CASE_PARAM</font>
```
這支程式RiskEventScoreModelParameter會去繼承TaskParameter interface
(中華提到未來會提供interface應該指的是這個)
寫參數的方式大概如下圖
```
圖1(將前端參數等等..放到RiskEventScoreModelParameter)

圖2(RiskEventScoreModelParameter實作介面)

圖3 (TaskParameter interface)

<font color="red">2.[步驟3]使用者所選擇的[風險事件]會記錄於BBI_RMS_TASK_SEL_EVENT_PARAMS</font>
```
TaskScheduleServiceImpl實作 TaskScheduleService-> createTask
PS.TaskScheduleService管理及排程所有 Task 的服務由中華開發
舊程式寫法如下
```

<font color="red">(待更新)3.[系統資料區]選案選出結果紀錄在 BBI_RMS_TASK_SEL_CASE_LIST</font>
```
(STS-23H-407W)第18頁的系統資料區欄位應該有錯誤,前面那些欄位是401W的
全部風險風險事件資料區欄位(舊系統)顯示如下:
(01)序號
(02)統一編號
(03)稅籍編號
(04)機關代號
(05)公司名稱
(06)派案編號
(07)風險總分
(08)風險排名
(09)試查
<<下面共用欄位401~406皆會顯示>>
(10)應稅銷售額合計數
(11)進貨及費用金額合計(44欄)
(12)加值率(BRM302W)
(13)實繳稅額合計數
(14)累計留抵稅額 acuDtnCrTax
(15)最近一年營所申報書類別 taxRtnTp
(16)最近一年純益率 netPfRate
(17)最近一年期末存貨 pdEInvn
```
```java
//資料區欄位邏輯(對應舊程式)
SelectCaseServiceImpl.queryBusinessList
```
```sql
select bgm.BAN, --(02)統一編號
bgm.BAN_NM, --(05)公司名稱
tr.RISK_EVENT_NO,--風險事件
tr.BL_YM as B_DATE, -- 風險事件起始時間
bgm.VAT_LOSN, --(03)稅籍編號
bgm.BAN_ADDR_HSN_CD||substr(bgm.VAT_LOSN,1,2) --(04)機關代號
from JMD_BGMT001 bgm join BBI_RDB_VAT_TPR_RISK_VAL tr
on bgm.BAN=tr.IDN_BAN join BBI_RMS_SEL_CASE_TEMP sct
on sct.BAN=tr.IDN_BAN
```
```sql
SELECT /* USE_HASH(A B C D E)*/ A.BAN,
B.TXL_S_AMT_TOT, --(10)應稅銷售額合計數
B.PE_AMT_TOT, --(11)進貨及費用金額合計(44欄)
B.SALE_AMT_RATE, --(12)加值率(BRM302W)
B.ACT_PAID_TAX, --(13)實繳稅額合計數
C.ACU_DTN_CR_TAX, --(14)累計留抵稅額
D.TAX_RTN_TP, --FLAG1 (15)最近一年營所申報書類別
D.NET_PF_RATE, --FLAG1 (16)最近一年純益率
E.PD_E_INVN, --FLAG1 (17)最近一年期末存貨
F.TAX_RTN_TP_L, --FLAG2 (15)最近一年營所申報書類別
F.NET_PF_RATE_L, --FLAG2 (16)最近一年純益率
G.PD_E_INVN_L --FLAG2 (17)最近一年期末存貨
FROM AP_BI.BBI_RMS_SEL_CASE_TEMP A
LEFT JOIN
(SELECT BAN,
SUM(TXL_S_AMT_TOT) AS TXL_S_AMT_TOT,
SUM(PE_AMT_TOT) AS PE_AMT_TOT,
SUM(ACT_PAID_TAX) AS ACT_PAID_TAX,
(SUM(CASE
WHEN NVL(JMD_BRMT001.SALE_AMT_TOTAL,'0') =0
OR (NVL(JMD_BRMT001.PE_PRS_T_AMT,'0') NVL(JMD_BRMT001.IM_XMP_PRS_AMT,'0')) =0
OR (NVL(JMD_BRMT001.SALE_AMT_TOTAL,'0')- NVL(JMD_BRMT001.PE_PRS_T_AMT,'0')
- NVL(JMD_BRMT001.IM_XMP_PRS_AMT,'0'))=0
THEN 0
WHEN NVL(JMD_BRMT001.SALE_AMT_TOTAL,'0') =0
AND NVL(JMD_BRMT001.PE_PRS_T_AMT,'0') NVL(JMD_BRMT001.IM_XMP_PRS_AMT,'0') <> 0
THEN 100
ELSE ((JMD_BRMT001.SALE_AMT_TOTAL-JMD_BRMT001.PE_PRS_T_AMT-JMD_BRMT001.IM_XMP_PRS_AMT)
/ JMD_BRMT001.SALE_AMT_TOTAL)*100
//END )) / COUNT(BAN) AS SALE_AMT_RATE
END )) / DECODE(COUNT(BAN),0,NULLIF(COUNT(BAN),0),COUNT(BAN)) AS SALE_AMT_RATE
//測試 END )) / DECODE(0,0,NULLIF(0,0),COUNT(BAN)) AS SALE_AMT_RATE
FROM AP_JMD.JMD_BRMT001 WHERE BL_YM BETWEEN ? AND ?
GROUP BY BAN
) B ON A.BAN = B.BAN
LEFT JOIN
(SELECT BAN,
ACU_DTN_CR_TAX AS ACU_DTN_CR_TAX
FROM AP_JMD.JMD_BRMT060 WHERE ACU_DTN_CR_TAX IS NOT NULL
) C ON A.BAN = C.BAN
LEFT JOIN
(SELECT BAN,
TAX_RTN_TP AS TAX_RTN_TP,
NET_PF_RATE AS NET_PF_RATE
FROM AP_JMD.JMD_PRCT001 WHERE TO_CHAR(DATA_YR,'YYYY') = ?
) D ON A.BAN = D.BAN
LEFT JOIN
(SELECT BAN,
SUM(PD_E_INVN) AS PD_E_INVN
FROM AP_JMD.JMD_PRCT003 WHERE TO_CHAR(DATA_YR,'YYYY') = ? AND PD_E_INVN IS NOT NULL
GROUP BY BAN
) E ON A.BAN = E.BAN
LEFT JOIN
(SELECT BAN,
TAX_RTN_TP AS TAX_RTN_TP_L,
NET_PF_RATE AS NET_PF_RATE_L
FROM AP_JMD.JMD_PRCT001 WHERE TO_CHAR(DATA_YR,'YYYY') = ?
) F ON A.BAN = F.BAN
LEFT JOIN
(SELECT BAN,
SUM(PD_E_INVN) AS PD_E_INVN_L
FROM AP_JMD.JMD_PRCT003 WHERE TO_CHAR(DATA_YR,'YYYY') = ? AND PD_E_INVN IS NOT NULL
GROUP BY BAN
) G ON A.BAN = G.BAN
WHERE A.SEL_BATCH_NO_TEMP = ? ;
```