List<String> tableNms = new ArrayList<String>();
Map<String, DivCtDtl> colNms = new LinkedHashMap<String, DivCtDtl>();
//排序的條件明細把它放到一個總集合,之後要填條件內容值($param)
List<DivCtItm> ctItmList = new ArrayList<DivCtItm>();
for(DivRlDtl rlDtl : rlDtls){
DivCtItm ctItm = conditionMntService.findByDivCtItmNo(rlDtl.getDivCtNo());
if(ctItm.getDivCtDtls()!=null && ctItm.getDivCtDtls().size()>conditionMaxCount){
conditionMaxCount = ctItm.getDivCtDtls().size();
}
//排序的條件明細
List<DivCtDtl> ctDtls = conditionMntService.findCtDtlsByCtNoAndSort(ctItm.getDivCtNo());
//算出有幾種因子(因子和條件為1to1)
for(DivCtDtl ctDtl : ctDtls){
if(ctDtl.getDivFtDtl()!=null && ctDtl.getDivFtDtl().getDivFtItm()!=null){
DivFtItm ftItm = ctDtl.getDivFtDtl().getDivFtItm();
String tableNm = ftItm.getTableNm();
String colNm = ftItm.getColumnNm();
//每一種因子只會出現在CONDITION欄位一次
if(!tableNms.contains(tableNm)){
tableNms.add(tableNm);
}
if(!colNms.containsKey(colNm)){
colNms.put(colNm, ctDtl);
}
}
}
ctItmList.add(ctItm);
}//算完rule detail的內容
//開始寫RuleTable第二行(抬頭)
int i = 0, j = 0 ;
Map<String, Integer> colSortNo = new HashMap<String, Integer>();
for(String key : colNms.keySet()){
DivCtDtl ctDtl = colNms.get(key);
//CONDITOIN宣告欄位
sheet1.addCell(new Label(1+j, 10, DroolsConstants.CONDITION_COL, setCellFmt));
//資料型別宣告
sheet1.addCell(new Label(1+j, 11, "beanClz:"+tableNms.get(0), setCellFmt));
//這一行要擺 物件.屬性 + "比較運算元" + param/$1,$2
String operand = "";
if(ctDtl.getDivFtDtl()!=null){
DivFtDtl ftDtl = ctDtl.getDivFtDtl();
if(!CapString.isEmpty(ftDtl.getRange1()) && !CapString.isEmpty(ftDtl.getRange2())){
operand = "$1<"+key+"&&"+key+"<=$2";
}else{
operand = key+"==$param";
}
}
sheet1.addCell(new Label(1+j, 12, operand, setCellFmt));
sheet1.addCell(new Label(1+j, 13, key, blueCellFmt));
colSortNo.put(key, 1+j);
i++;
j++;
}
//Bean 宣告合併欄位
sheet1.mergeCells(1, 11, j, 11);
//宣告完CONDITION欄位,在宣告ACTIVITION-GROUP&NO-LOOP&PRIORITY
int actGpColNo = 1+j;
sheet1.addCell(new Label(actGpColNo, 10, DroolsConstants.ACTIVATION_GROUP, setCellFmt));
sheet1.addCell(new Label(actGpColNo, 11, "", setCellFmt));
sheet1.addCell(new Label(actGpColNo, 12, "", setCellFmt));
sheet1.addCell(new Label(actGpColNo, 13, "activation group", blueCellFmt));
int noLpColNo = actGpColNo+1;
sheet1.addCell(new Label(noLpColNo, 10, DroolsConstants.NO_LOOP, setCellFmt));
sheet1.addCell(new Label(noLpColNo, 11, "", setCellFmt));
sheet1.addCell(new Label(noLpColNo, 12, "", setCellFmt));
sheet1.addCell(new Label(noLpColNo, 13, "no loop", blueCellFmt));
int priColNo = noLpColNo+1;
sheet1.addCell(new Label(priColNo, 10, DroolsConstants.PRIORITY, setCellFmt));
sheet1.addCell(new Label(priColNo, 11, "", setCellFmt));
sheet1.addCell(new Label(priColNo, 12, "", setCellFmt));
sheet1.addCell(new Label(priColNo, 13, "priority", blueCellFmt));
//最後宣告ACTION
int actColNo1 = priColNo+1;
sheet1.addCell(new Label(actColNo1, 10, DroolsConstants.ACTION_COL, setCellFmt));
sheet1.addCell(new Label(actColNo1, 11, "", setCellFmt));
sheet1.addCell(new Label(actColNo1, 12, "beanClz.setGrpUppId(\"$param\");", setCellFmt));
sheet1.addCell(new Label(actColNo1, 13, "", yellowCellFmt));
int actColNo2 = actColNo1+1;
sheet1.addCell(new Label(actColNo2, 10, DroolsConstants.ACTION_COL, setCellFmt));
sheet1.addCell(new Label(actColNo2, 11, "", setCellFmt));
sheet1.addCell(new Label(actColNo2, 12, "beanClz.setDocStatus(\"$param\");", setCellFmt));
sheet1.addCell(new Label(actColNo2, 13, "", yellowCellFmt));
int actColNo3 = actColNo2+1;
sheet1.addCell(new Label(actColNo3, 10, DroolsConstants.ACTION_COL, setCellFmt));
sheet1.addCell(new Label(actColNo3, 11, "", setCellFmt));
sheet1.addCell(new Label(actColNo3, 12, "System.out.println(\"$param\"+ \" CASEINFO IS "
+ "\" +beanClz.getCasNo()+\" ** 分組結果 = "
+ "\" +beanClz.getGrpUppId() );", setCellFmt));
sheet1.addCell(new Label(actColNo3, 13, "", yellowCellFmt));
sheet1.addCell(new Label(0, 13, "Base rules", greenCellFmt));
/*
* 將總明細資料一筆一筆拆開來,將condition-->factor的值域填到Excel
*/
if(!ctItmList.isEmpty()){
int rowNo = 14, count = 0;
for(DivCtItm ctItm : ctItmList){
if(ctItm.getDivCtDtls()!=null){
//CtItm list對應到自己的CtDtl,所以一筆CtItm就是一行Rule Row
for(DivCtDtl ctDtl : ctItm.getDivCtDtls()){
ctItm = ctDtl.getDivCtItm();
//設定Action動作
sheet1.addCell(new Label(actColNo1, rowNo, ctItm.getDivCtAction(), bodyCellFmt));
sheet1.addCell(new Label(actColNo2, rowNo, ctItm.getDivCtSetting(), bodyCellFmt));
sheet1.addCell(new Label(actColNo3, rowNo, "Test Condition::"+ctItm.getDivCtNm(), bodyCellFmt));
DivFtDtl ftDtl = ctDtl.getDivFtDtl();
String colNm = ftDtl.getDivFtItm().getColumnNm();
//取得要放到第幾個cell
Integer colNo = colSortNo.get(colNm);