/**
     * 明細のリスト項目取得する。
     * 
     * Time:2012/11/02
     * @param String kokyakuId (ログイン者のお客様ID)                        
     * @param String nahinSaki (画面.納品先)                        
     * @param String hacyuSingiIraiKbv(画面.発注審議依頼)                         
     * @param String hacyuTetudukiKbv(画面.発注手続)                         
     * @param String hacyuKakuninKbv(画面.発注確認)                         
     * @param String hininKbv(画面.否認)                         
     * @param String hacyuDateFm (画面.発注日開始)                        
     * @param String hacyuDateTo (画面.発注日終了)    
     * @author CAOHL
     * @return TH_HACHU_EXTList 発注明細データ
     */
    @SuppressWarnings("unchecked")
    public List<TH_HACHU_M_EXT> getMeisai(String kokyakuID
            ,String nahinSaki
            ,String hacyuSingiIraiKbv
            ,String hacyuTetudukiKbv
            ,String hacyuKakuninKbv
            ,String hininKbv
            ,String hacyuDateFm
            ,String hacyuDateTo) {
        
        // HQL文
        String hql="select t1.HACHU_CDV \"hachu_Cdv\", " + //発注番号
                "t1.JYOKYO_FLG \"jyokyo_Flg\", " +   //状況フラグ
                "t1.SHONIN_KBV \"shonin_Kbv\", " +   //審議区分
                "to_char(t1.HACHU_YMD,'YYYY/MM/DD') \"hachu_Ymd\", " +   //発注日
                "t2.LINE_NON \"line_Non\", " +             //行番号
                "t2.SURYO_NUM \"suryo_Num\", " +           //注文数(数量)
                "to_char(t2.NOHIN_YMD,'YYYY/MM/DD') \"nohin_Ymd\", " +   //見込納期
                "t3.TANTO_NMV \"shingi_Nmv\", " +         //審議者名
                "t4.KAISHA_NMV \"kaisha_Nmv\", " +         //納品先--会社名
                "t4.BUSHO_NMV \"busho_Nmv\", " +           //納品先--部署名
                "t4.KTANTO_NMV \"ktanto_Nmv\", " +         //納品先--担当者
                "m1.SHOHIN_NMV \"shohin_Nmv\", " +         //商品名
                "m1.MAKER_NMV \"maker_Nmv\", " +           //メーカー
                "m1.KATA_NOV \"kata_Nov\", " +             //型番
                "m1.TEIKA_KIN \"teika_Kin\", " +           //定価
                "m1.HACHUTANI_NMV \"hachutani_Nmv\", " +   //注文数(発注受注単位)
                "m1.TEIKA_KIN * t2.SURYO_NUM AS \"subTotal\", " +  //小計(*)
                "m1.BIKO_NMV \"biko_Nmv\" ";               //備考
        
        // HQL文にFrom条件を追加
        StringBuffer hqlStr = new StringBuffer();
        hqlStr.append(" from TH_HACHU t1, TH_HACHU_M t2,TH_IDJYOHO t3, M_SHOHIN m1, TH_CHOKUSOU t4 where");
        hqlStr.append(" t1.HACHU_CDV = t2.HACHU_CDV");
        hqlStr.append(" and t1.KOKYAKU_ID=t4.KOKYAKU_ID ");
        hqlStr.append(" and t1.SHINGI_ID=t3.KOKYAKU_ID(+) ");
        hqlStr.append(" and t1.NOHINTO_CDVS= t4.SITEN_CDV");
        hqlStr.append(" and t2.SHOHIN_CDV = m1.SHOHIN_CDV");
        hqlStr.append(" and t1.CANCEL_FLG = '0'");
        hqlStr.append(" and t1.KARI_FLG = '0'");
        hqlStr.append(" and t2.TORIKESHI_FLG ='0'");

        hqlStr.append(" and t1.KOKYAKU_ID = :kokyaku_id");
        
        hqlStr.append(" and (t1.NOHINTO_CDVS = :nahinSaki or :nahinSaki is null) ");

        hqlStr.append(" and (");
        if("true".equals(hacyuSingiIraiKbv)
                ||"true".equals(hacyuTetudukiKbv)
                ||"true".equals(hacyuKakuninKbv)
                ||"true".equals(hininKbv)){
            boolean orFlag = false;
            //hacyuSingiIraiKbvが発注審議依頼チェックボックスをクリックした場合
            if("true".equals(hacyuSingiIraiKbv)){
                hqlStr.append(" (t1.JYOKYO_FLG = '0'");
                hqlStr.append(" and t1.SHONIN_KBV = '0')");
                orFlag = true;
            }
            //hacyuTetudukiKbvが発注処理チェックボックスをクリックした場合
            if("true".equals(hacyuTetudukiKbv)){
                if(orFlag){
                    hqlStr.append(" or ");
                }
                orFlag = true;
                hqlStr.append("  ((T1.JYOKYO_FLG= '0' ");
                hqlStr.append(" and T1.SHONIN_KBV='1') ");
                hqlStr.append(" OR (T1.JYOKYO_FLG= '0' ");            
                hqlStr.append(" and T1.SHONIN_KBV='9')) ");
            }
            
            //hacyuKakuninKbvが発注確定チェックボックスをクリックした場合
            if("true".equals(hacyuKakuninKbv)){
                if(orFlag){
                    hqlStr.append(" or ");
                }
                orFlag = true;
                hqlStr.append("  T1.JYOKYO_FLG IN ( '1','2' ) ");
            }
            //hininKbvが否認チェックボックスをクリックした場合
            if("true".equals(hininKbv)){
                if(orFlag){
                    hqlStr.append(" or ");
                }
                orFlag = true;
                hqlStr.append(" (t1.JYOKYO_FLG = '0'");
                hqlStr.append(" and t1.SHONIN_KBV = '2') ");
            }

        }else{

            hqlStr.append(" 1=0");
            
        }
        hqlStr.append(" )");
        hqlStr.append(" and (to_date(T1.HACHU_YMD) >=to_date(:hacyuDateFm) or :hacyuDateFm is null) ");
        hqlStr.append(" and (to_date(T1.HACHU_YMD) <=to_date(:hacyuDateTo) or :hacyuDateTo is null) ");
        
        hqlStr.append(" order by t1.hachu_Cdv,t2.LINE_NON");
        
        // 抽出結果のデータリストをリターン
        String sql = hql + hqlStr;    
        return this.getHibernateTemplate().getSessionFactory()
                .getCurrentSession().createSQLQuery(sql.toString())
                .setString("kokyaku_id", kokyakuID)
                .setString("nahinSaki", nahinSaki)
                .setString("hacyuDateFm", hacyuDateFm)
                .setString("hacyuDateTo", hacyuDateTo)
                .setResultTransformer(Transformers.aliasToBean(TH_HACHU_M_EXT.class))
                .list();
    }