實習任務——對查詢結果進行篩選過濾

將查詢到的信息進行篩選過濾

首先此次的任務是根據查詢條件將數據庫的內容進行查詢,可是因爲新增長了幾個條件,在數據庫中並無這個條件,因此增長了難度。
首先行政區中加入了深海,近海,特殊海域,須要在下拉框中加入這三個條件。
而後後邊的所屬礦權人和項目狀態在數據庫中也沒有存,也須要本身寫下拉列表。
java

初始化所屬礦權人下拉樹代碼:sql

private ComboList initComboList1(ComboList combo1){
        ComboList com1=combo1;
        InternalList list=com1.getList();
        
        ListItem items=new ListItem(list);
        items.setText("所有");
        items.setData("所有");
        
        ListItem items1=new ListItem(list);
        items1.setText("中石油");
        items1.setData(1);

        ListItem items2=new ListItem(list);
        items2.setText("中石化");
        items2.setData("2");
        
        ListItem items3=new ListItem(list);
        items3.setText("中海油");
        items3.setData("3");
        
        ListItem items4=new ListItem(list);
        items4.setText("中聯煤");
        items4.setData("4");
        
        ListItem items5=new ListItem(list);
        items5.setText("延長油礦");
        items5.setData("5");
        
        ListItem items6=new ListItem(list);
        items6.setText("地方油田");
        items6.setData("6");
        
        ListItem items7=new ListItem(list);
        items7.setText("地方企業");
        items7.setData("9");
        
        com1.setSelection(0);
        return com1;
    }

初始化項目狀態和上面大同小異,不列出來了。
最後是初始化行政區,初始化行政區首先寫一個初始化下拉樹的方法。
因爲原表中不存在三個海域,因此須要本身手動添加,設置他們的stdcode和stdname。數據庫

public class YQComboListHelper {
    public static String XINGZHENGQUHUA="DIC_ADMINISTRATIVE_DIVISIONS";
    public static List<FBaseDataObject> getBaseDataYQList(Context context,String tableName){
        List<FBaseDataObject> list = BaseDataCenter.getObjectList(context, tableName);
        
        
        if("DIC_ADMINISTRATIVE_DIVISIONS".equals(tableName)){
            String name=context.getLogin().getUser().getName();
            Pattern pattern = Pattern.compile("^[0-9]{6}$");
            Matcher isNum = pattern.matcher(name);
            if (isNum.matches()  && name.equals("100000")) {
                List<FBaseDataObject> ranks =new ArrayList<FBaseDataObject>();
                GUID unitGuid = ContextManager.getContext().getLogin().getUserCurrentOrg();
//              String unitCode = BaseDataCenter.findObject(ContextManager.getContext(), "MD_ORG", unitGuid).getStdCode();
                String code = "0000";
            
                for(FBaseDataObject f:list){
                    if(f.getStdCode().endsWith(code) && !f.getStdCode().equals(100000) && !f.getStdCode().equals("710000") && !f.getStdCode().equals("810000") && !f.getStdCode().equals("820000")){
                        ranks.add(f);
                    }
                }
                
                TableDefine define = BaseDataCenter.getObjectList(context, tableName).get(0).getTable().getTable();
                ITable tab = new Table(define);
                //新增油氣項目  海域類別節點(原MD_org表中無此類數據)
                BaseDataObjectImpl hysh1 = new BaseDataObjectImpl(tab);
                hysh1.setStdCode("800001");
                hysh1.setStdName("特殊海域");
                ranks.add(hysh1);
                BaseDataObjectImpl hyjh2 = new BaseDataObjectImpl(tab);
                hyjh2.setStdCode("800002");
                hyjh2.setStdName("深海");
                ranks.add(hyjh2);
                BaseDataObjectImpl tshy3 = new BaseDataObjectImpl(tab);
                tshy3.setStdCode("800003");
                tshy3.setStdName("近海");
                ranks.add(tshy3);
                //三類海域類別
                return ranks;
            }
            else if(isNum.matches() && name.substring(2, 6).equals("0000") && !name.equals("100000") )
            {
                List<FBaseDataObject> ranks =new ArrayList<FBaseDataObject>();
                GUID unitGuid = ContextManager.getContext().getLogin().getUserCurrentOrg();
//              String unitCode = BaseDataCenter.findObject(ContextManager.getContext(), "MD_ORG", unitGuid).getStdCode();
            
                for(FBaseDataObject f:list){
                    if( f.getStdCode().equals(name)){
                        ranks.add(f);
                    }
                }
                
                
                return ranks;
            }
                
        }
        return list;
    }
    /*根據STDCODE獲取對應基礎數據對象*/
    public static FBaseDataObject getBaseDataByCode(Context context,String tableName,String stdCode){
        FBaseDataObject data = BaseDataCenter.findObject(context, tableName, stdCode);
        return data;
    }
    /**
     * 獲取下拉列表中選中的選項的值
     * @param comboList
     * @return String類型
     */
    public static String selectComboListData(ComboList comboList){
        ListItem[] item = comboList.getList().getSelection();
        if(item!=null && item.length>0){
            String result = (String)item[0].getData(); 
            if(result!=null)
                return result; 
        }
        return null;
    }
    
    /**
     * 獲取下拉列表選中的顯示內容
     * @param comboList
     * @return
     */
    public static String selectComboListText(ComboList comboList){
        ListItem[] item = comboList.getList().getSelection(); 
        if(item!=null && item.length>0)
            return item[0].getText();
        return null;
    }
    
    
    
    /**
     * 根據數組內容,把數組內容轉換爲下拉列表
     * @param list      下拉控件
     * @param values    數組
     * @param includeDefault    是否包含默認下拉值
     * @param context
     * @return
     */
    public static void initComboList(ComboList list,String[][] values,boolean includeDefault){
        InternalList iList = list.getList();
        for (int i = 0; i < values.length; i++) {
            ListItem item = new ListItem(iList);
            item.setID(values[i][0]);
            item.setData(values[i][0]);
            item.setText(values[i][1]);
        }
    }
    
    /**
     * 根據基礎數據內容初始化一個下拉列表
     * @param comboList
     * @param list
     * @param includeDefault
     * @return
     */
    public static void initComboList(ComboList comboList,List<FBaseDataObject> list,boolean includeDefault){
        InternalList iList = comboList.getList();
        for(FBaseDataObject obj :list){
            ListItem item = new ListItem(iList);
            item.setID(obj.getStdCode());
            item.setData(obj.getStdCode());
            item.setText(obj.getStdName());
        }
    }
    /**
     * 修改數據表格的屬性,把屬性修改成下拉列表形式
     * @param grid
     * @param comboList 下拉列表(包含初始化值)
     * @return
     */
    public static GridCellEditor getGridComboList(Grid grid,final ComboList comboList,final int index){
        return new GridCellEditor(grid) {
            @Override
            protected Control createControl(Grid grid) {
                comboList.setSelection(index);
                return comboList;
            }
            @Override
            public int getFace(){
                return JWT.GRID_EDITOR_FACE_LIST;
            }
        };
    }
    
    
    public static GridCellEditor getGridComboTree(Grid grid,final ComboTree tree){
        return new GridCellEditor(grid) {
            
            @Override
            protected Control createControl(Grid grid) {
                return tree;
            }
        };
    }

    public static void initComboList(ComboList list, String[] value) {
        InternalList iList = list.getList();
        for (int i = 0; i < value.length; i++) {
            ListItem item = new ListItem(iList);
            item.setID(String.valueOf(i));
            item.setData(value[i]);
            item.setText(value[i]);
        }
    }
    
    /*行政區劃列表*/
    public static List<FBaseDataObject> getxzqhList(Context context){
        return getBaseDataYQList(context, XINGZHENGQUHUA);
    }
}

而後再調用這個方法數組

private void initSearchs() {
        // TODO Auto-generated method stub
        //行政區劃
        List<FBaseDataObject> xzqh_list = YQComboListHelper.getxzqhList(getContext());
        YQComboTreeUtils.initComboTree(controls.cbt_1.getTree(),xzqh_list,false,getContext());
        controls.cbt_1.setPanelWidth(100);
    }

而後下拉樹就設置好了,而後須要按照這幾個查詢條件進行查詢,將下拉樹選中的信息傳入到sql方法中,用sql語句進行查詢。
剛開始查詢一直出錯,由於最開始寫的代碼是這樣的ide

private void flushGrid() {
        // TODO Auto-generated method stub
        xmlist=service.getYQPerambulateLicence(controls.cbt_1.getText(),controls.cbl_2.getList().getSelection()[0].getData(),controls.txt_1.getText(),controls.cbl_1.getList().getSelection()[0].getText());
        controls.lbl_8.setText(xmlist.size()+"");
    }

後邊兩個下拉樹能夠查詢到數據,由於這個是本身手動設置的,而後第一個下拉樹,傳進去的是行政區的recid,可是因爲三個海域是本身添加的,只有stdcode和stdname,沒有recid,因此會出現空指針,查詢出錯。ui

因此後來這樣寫指針

private void flushGrid() {
        // TODO Auto-generated method stub
        xmlist=service.getYQPerambulateLicence(stdcode,controls.cbl_2.getList().getSelection()[0].getData(),controls.txt_1.getText(),controls.cbl_1.getList().getSelection()[0].getText());
        controls.lbl_8.setText(xmlist.size()+"");
        
    }
    
    /**
     * 查詢按鈕
     * @param mouseEvent
     */
    protected void on_lbl_5_Click(MouseEvent mouseEvent) {
        // TODO Auto-generated method stub
        if(controls.cbt_1.getText() != null &&  !"".equals(controls.cbt_1.getText()) &&!"null".equals(controls.cbt_1.getText()) )
        {
            stdcode=BaseDataCenter.findObjectbyObjectID(getContext(), "DIC_ADMINISTRATIVE_DIVISIONS", GUID.valueOf(controls.cbt_1.getText())).getStdCode();
            stdcode=stdcode.substring(0, 2);
        }
        else if(controls.cbt_1.getText() != null && !"".equals(controls.cbt_1.getText()))
        {
            TreeItem[] rootItem = controls.cbt_1.getTree().getSelection();
            stdcode = ((String) rootItem[0].getData()).substring(5, 6);
//          stdcode=((BaseDataObjectImpl)controls.cbt_1.getControl().getData()).getStdCode()==null?null:((BaseDataObjectImpl)controls.cbt_1.getData()).getStdCode().substring(5, 6);
            
        }
        else
        {
            stdcode=null;
        }
        flushGrid();
        paginateRender();
    }

首先因爲除三個海域其餘行政區recid都有值,因此能夠直接傳recid所對應的stdcode值,
對於這三個海域,首先查找這棵樹的節點上的數據,而後直接獲得它的stdcode值。
最後就能夠根據傳過去的值在sql語句中進行查詢。code

相關文章
相關標籤/搜索