問題一
季帳單的金額欄位, 請四捨五入到”元 “, 不要帶出小數位數字
之前季帳單沒有這樣的問題存在, 為什麼交付的新程式會出現這個問題呢?
我們先查詢第一筆記錄:
再保項目 | 弱體等級 | 資料別 | 被保人性別 | 金額 |
Rein. premium | 標準體 | 新件 | 1901.5949 |
看看數據庫中的情況是怎樣的,因為金額“1901.5949”是加總后的結果。
通過下面的SQL語句查詢結果:
條件:1、2006年第二季度,即會計年月為:200604、200605、200606;
2、再保公司為CRC,即為“01”;
3、年度為“2006”,即PREM_YEAR為:2006;
4、資料別為新件,即MONTHLY_FLAG為:N、NC;
5、報表險種群為ICE,即再保類別為“12”
6、弱體等級為標準體,即BODY_FLAG為“1”
SELECT mt.Q_PREMIUM
FROM RIS.MONTHLY_TEMP mt
WHERE 1=1
AND mt.ACCOUNT_YM_DATE in ('200604','200605','200606')
AND mt.RE_COMPANY_CODE='01'
AND mt.PREM_YEAR=2006
AND mt.MONTHLY_FLAG in ('N','NC')
AND mt.REINSURANCE_CLASS='12'
AND mt.BODY_FLAG='1'
;
FROM RIS.MONTHLY_TEMP mt
WHERE 1=1
AND mt.ACCOUNT_YM_DATE in ('200604','200605','200606')
AND mt.RE_COMPANY_CODE='01'
AND mt.PREM_YEAR=2006
AND mt.MONTHLY_FLAG in ('N','NC')
AND mt.REINSURANCE_CLASS='12'
AND mt.BODY_FLAG='1'
;
然后我們將得到的記錄拷貝到Excel檔中,
通過結果下面的SQL同樣可以得到結果:1901.5949
SELECT sum(mt.Q_PREMIUM) Q_PREMIUM
FROM RIS.MONTHLY_TEMP mt
WHERE 1=1
AND mt.ACCOUNT_YM_DATE in ('200604','200605','200606')
AND mt.RE_COMPANY_CODE='01'
AND mt.PREM_YEAR=2006
AND mt.MONTHLY_FLAG in ('N','NC')
AND mt.REINSURANCE_CLASS='12'
AND mt.BODY_FLAG='1'
GROUP BY mt.PREM_YEAR
;
FROM RIS.MONTHLY_TEMP mt
WHERE 1=1
AND mt.ACCOUNT_YM_DATE in ('200604','200605','200606')
AND mt.RE_COMPANY_CODE='01'
AND mt.PREM_YEAR=2006
AND mt.MONTHLY_FLAG in ('N','NC')
AND mt.REINSURANCE_CLASS='12'
AND mt.BODY_FLAG='1'
GROUP BY mt.PREM_YEAR
;
從Excel檔可以看到數據的小數部分沒有處理,而我們的記錄都放在一個Map中,Map的鍵為對象的Id,即SeasonAccountDetailAmountId,而值為SeasonAccountDetailAmount,我們要處理的屬性金額在Map的值中。我們只需遍歷Map,然后處理(四舍五入)值中對象的某個屬性,然后將這個“鍵值對”放到Map中,它會自動覆蓋以前的同Key的記錄。
/**
* 將Map中SeasonAccountDetailAmount對象的amount的值四舍五入
*
* @author XuLin
*
* 2008.01.15
*
* @param detailMap
*/
private void roundingMap(Map detailMap) {// TODO
Map map = (FastHashMap) detailMap;
Iterator it = map.entrySet().iterator();
SeasonAccountDetailAmountId sadaId = null;
SeasonAccountDetailAmount sada = null;
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
sadaId = (SeasonAccountDetailAmountId) entry.getKey();
sada = (SeasonAccountDetailAmount) entry.getValue();
if (sada.getAmount() != null) {
sada.setAmount(Common.roundingBigDecimal(sada.getAmount(),
Constant.MONEY_SCALE));//四舍五入到整數位
seasonAccontDetailCache.put(sadaId, sada);
}
}
}
* 將Map中SeasonAccountDetailAmount對象的amount的值四舍五入
*
* @author XuLin
*
* 2008.01.15
*
* @param detailMap
*/
private void roundingMap(Map detailMap) {// TODO
Map map = (FastHashMap) detailMap;
Iterator it = map.entrySet().iterator();
SeasonAccountDetailAmountId sadaId = null;
SeasonAccountDetailAmount sada = null;
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
sadaId = (SeasonAccountDetailAmountId) entry.getKey();
sada = (SeasonAccountDetailAmount) entry.getValue();
if (sada.getAmount() != null) {
sada.setAmount(Common.roundingBigDecimal(sada.getAmount(),
Constant.MONEY_SCALE));//四舍五入到整數位
seasonAccontDetailCache.put(sadaId, sada);
}
}
}
問題二
新增的季帳單(CRC-2006-384)再保項目-Return Rein. Commission Last Year 一筆金額100,000
為何反應在季帳單PDF上會有兩筆記錄??
Return Rein. Commission Last Year-2006 NTS 空白??
Return Rein. Commission Last Year-2005 NTS 100,000
處理方法:
交給第三方處理,我們的報表做法是我們生成文本格式的txtFile,然后由第三方處理。
出現問題的原因是該“再保險種”的值為,應該不顯示在PDF上,他應該多加一層判斷。