001/*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016package org.opengion.hayabusa.report2;
017
018import java.io.File;
019import java.util.function.Supplier;                                                             // 8.0.3.0 (2021/12/17)
020// import java.util.List;                                                                               // 8.0.3.0 (2021/12/17)【保留】
021
022import org.opengion.fukurou.util.FileUtil;
023import org.opengion.fukurou.util.StringUtil;
024import org.opengion.fukurou.util.ZipArchive;                                    // 6.0.0.0 (2014/04/11) ZIP API変更
025// import static org.opengion.fukurou.system.HybsConst.CR ;             // 6.1.0.0 (2014/12/26)
026import static org.opengion.fukurou.system.HybsConst.FS ;                // 8.0.3.0 (2021/12/17)
027
028import org.opengion.hayabusa.common.HybsSystem;
029import org.opengion.hayabusa.common.HybsSystemException;
030// import org.opengion.hayabusa.report.CSVPrintRequest;                 // 5.9.0.0 (2015/09/04) 8.0.1.0 (2021/10/29) 保留
031import org.opengion.hayabusa.io.HybsFileOperationFactory;               // 8.0.1.0 (2021/10/29) ExecThread → ExecProcess
032//import org.opengion.hayabusa.report.ExcelInsert;                              // 7.4.4.0 (2021/06/30) Delete
033//import org.opengion.hayabusa.report.ProgramRun;                               // 7.4.4.0 (2021/06/30) Delete
034//import org.opengion.hayabusa.report.RFIDPrintRequest;                 // 7.4.4.0 (2021/06/30) Delete
035// import static org.opengion.fukurou.system.HybsConst.FS;              // 6.1.0.0 (2014/12/26) refactoring // 8.0.0.0 (2021/07/31) Delete
036
037/**
038 * 帳票要求に設定された実行方法により、各種出力、Excel取り込み処理を行います。
039 * 1.出力
040 *  雛形ファイルを一時ディレクトリに展開した後、帳票データを埋め込み、最後にOpenOffice.orgの
041 *  プロセスを利用して出力を行います。
042 *  対応している出力方法は、印刷、PDF出力、Excel出力です。
043 *  一時ディレクトリは、システムリソースのREPORT_FILE_URLで定義されたディレクトリです。
044 *  これが定義されていない場合は、システムリソースのFILE_URLで定義されたディレクト以下の/REPORTに
045 *  展開されます。
046 *  一時ファイルは、処理が正常に終了した場合、削除されます。(ODS出力のみにした場合は、出力直前の
047 *  ODSファイルは残ります)
048 *  処理でエラーが発生した場合は、一時ファイルはデバッグのため、削除されません。
049 * 2.取り込み
050 *  旧帳票システムの取り込み処理及びその後のPG起動を行います。
051 *
052 * 実行方法により、出力、入力を行います。
053 *
054 * @og.group 帳票システム
055 *
056 * @version  4.0
057 * @author   Hiroki.Nakamura
058 * @since    JDK1.6
059 */
060public class ExecProcess {
061
062        /** 帳票処理キュー */
063        private final ExecQueue queue;
064
065        /** 出力タイプ */
066        private final String type;
067
068        private final long start = System.currentTimeMillis();          // 6.3.9.1 (2015/11/27) 修飾子を、なし → private に変更。
069        private final boolean debug;            // 4.3.0.0 (2008/07/15) デバッグの追加
070
071        private final String outTemp ;          // 8.0.1.0 (2021/10/29)
072
073//      /* 8.0.3.0 (2021/12/17) ods→xlsx変換時のシート毎の行数 */
074//      【保留】private List<Integer> sheetRows  ;
075
076        /**
077         * コンストラクタ
078         *
079         * @og.rev 4.3.0.0 (2008/07/15)引数にdebugを追加
080         *
081         * @param qu            ExecQueueオブジェクト
082         * @param debugFlag デバッグフラグ[true/false]
083         */
084        public ExecProcess( final ExecQueue qu , final boolean debugFlag ) {
085                queue = qu;
086                type  = qu.getOutputType();
087                debug = debugFlag;
088
089                // 8.0.1.0 (2021/10/29)
090                outTemp = HybsSystem.url2dir( StringUtil.nval( HybsSystem.sys( "REPORT_FILE_URL" ) ,HybsSystem.sys( "FILE_URL" ) + "REPORT/" ) )
091//                      + queue.getSystemId() + File.separator + queue.getListId() + File.separator + queue.getYkno();
092                        + queue.getTempKey();           // 8.0.3.0 (2021/12/17)
093        }
094
095        /**
096         * 帳票処理プロセスを実行します。
097         *
098         * @og.rev 4.3.0.0 (2008/07/15) debugの追加
099         * @og.rev 4.3.3.4 (2008/11/01) ODS出力追加
100         * @og.rev 5.1.2.0 (2010/01/01) 256シートを超えた場合の対応
101         * @og.rev 8.0.1.0 (2021/10/29) CSV出力対応(ユリニタ帳票)は、一旦保留にします。
102         * @og.rev 8.0.1.0 (2021/10/29) OUT_ODS_XLSX (Excel2007形式) 評価用
103         */
104        public void process() {
105                // 処理開始
106//              addDebugMsg( "[INFO]EXEC-TIME:START=" + start );
107                addDebugMsg( () -> "[INFO]EXEC-TIME:START=" );  // 8.0.3.0 (2021/12/17)
108
109                // 5.1.2.0 (2010/01/01) 基本的には1回で終了。256シートを超える場合のみ内部でfalseを立てる(2回目を処理させる)
110                queue.setEnd( true );
111
112                /*
113                 * ======================================================================
114                 * = 出力処理
115                 * ======================================================================
116                 */
117                // パース
118//              if( ExecQueue.OUT_ODS_ONLY.equals( type )
119//                              || ExecQueue.OUT_ODS_PRINT.equals( type ) || ExecQueue.OUT_ODS_PDF.equals( type ) || ExecQueue.OUT_ODS_EXCEL.equals( type )
120//                              || ExecQueue.OUT_ODS_PRINT_PDF.equals( type ) || ExecQueue.OUT_ODS_ODS.equals( type ) ) {
121//                      parse();
122//              }
123
124                // 8.0.1.0 (2021/10/29) パース CSV出力を保留にしたので、印刷のみ以外はパースする。
125                if( !ExecQueue.OUT_PRINT_ONLY.equals( type ) ) {
126                        parse();
127                }
128
129                // 印刷
130                if( ExecQueue.OUT_PRINT_ONLY.equals( type ) || ExecQueue.OUT_ODS_PRINT.equals( type ) ) {
131                        output( "PRINT" );
132                }
133                // PDF出力
134                else if( ExecQueue.OUT_ODS_PDF.equals( type ) ) {
135                        output( "PDF" );
136                }
137                // EXCEL出力
138                else if( ExecQueue.OUT_ODS_EXCEL.equals( type ) ) {
139                        output( "EXCEL" );
140                }
141                // 8.0.1.0 (2021/10/29) Excel2007出力
142                else if( ExecQueue.OUT_ODS_XLSX.equals( type ) ) {
143                        output( "XLSX" );
144                }
145                // 印刷 + PDF出力
146                else if( ExecQueue.OUT_ODS_PRINT_PDF.equals( type ) ) {
147                        output( "PRINT", "PDF" );
148                }
149                // 4.3.3.4 (2008/11/01) 追加 ODS出力
150                else if( ExecQueue.OUT_ODS_ODS.equals( type ) ) {
151                        output( "ODS" );
152                }
153
154        //      /*
155        //       * ======================================================================
156        //       * = 取込処理
157        //       * @og.rev 7.4.4.0 (2021/06/30) openGionV8事前準備(EXCEL取込廃止)
158        //       * ======================================================================
159        //       */
160                // 取込 7.4.4.0 (2021/06/30) Delete
161        //      if( ExecQueue.IN_INPUT_ONLY.equals( type ) || ExecQueue.IN_INPUT_EXEC.equals( type ) ) {
162        //              input();
163        //      }
164
165                // PG起動 7.4.4.0 (2021/06/30) Delete
166        //      if( ExecQueue.IN_EXEC_ONLY.equals( type ) || ExecQueue.IN_INPUT_EXEC.equals( type ) ) {
167        //              pgexec();
168        //      }
169
170        //      /*
171        //       * ======================================================================
172        //       * = RFID出力処理
173        //       * @og.rev 7.4.4.0 (2021/06/30) openGionV8事前準備(RFID出力廃止)
174        //       * ======================================================================
175        //       */
176                // RFID出力 7.4.4.0 (2021/06/30) Delete
177        //      if( ExecQueue.RFID_PRINT.equals( type ) || ExecQueue.RFID_ALLPRINT.equals( type )
178        //                      || ExecQueue.RFID_ALLERASE.equals( type ) || ExecQueue.RFID_SEQERASE.equals( type ) ) {
179        //              rfid();
180        //      }
181
182        //      // 8.0.1.0 (2021/10/29) CSV出力対応(ユリニタ帳票)は、一旦保留にします。
183        //      /*
184        //       * ======================================================================
185        //       * = CSV出力処理(ユニリタ 帳票形式のCSV)
186        //       * 5.9.4.2 (2016/01/13) Excel2追加
187        //       * ======================================================================
188        //       */
189        //      if( ExecQueue.CSV_PRINT.equals( type ) || ExecQueue.CSV_PRINT_EXCEL.equals( type )
190        //                      || ExecQueue.CSV_PRINT_PDF.equals( type ) || ExecQueue.CSV_PRINT_EXCEL2.equals( type ) ) {
191        //              csv();
192        //      }
193
194//              addDebugMsg( "[INFO]EXEC-TIME:END=" + System.currentTimeMillis() );
195                addDebugMsg( () -> "[INFO]EXEC-TIME:END="  );   // 8.0.3.0 (2021/12/17)
196        }
197
198        /**
199         * 雛形ファイルを解析し、帳票データを挿入します。
200         *
201         * 雛形ファイルは、クラウド設定されていてもローカルから取得します。
202         *
203         * @og.rev 6.0.0.0 (2014/04/11) ZIP API変更
204         */
205        private void parse() {
206                final File templateFile = new File( queue.getTemplateName() + ".ods" );         // 6.0.0.0 (2014/04/11) ZIP API変更
207
208//              final String tmp =
209//                      HybsSystem.url2dir( StringUtil.nval( HybsSystem.sys( "REPORT_FILE_URL" ) ,HybsSystem.sys( "FILE_URL" ) + "REPORT/" ) )
210//                      + queue.getSystemId() + File.separator + queue.getListId() + File.separator + queue.getYkno();
211//              final String tmpdir = tmp + File.separator;
212//              final String tmpdir = outTemp + File.separator;                                 // 8.0.1.0 (2021/10/29)
213                final String tmpdir = outTemp + FS;                                                             // 8.0.3.0 (2021/12/17)
214//              final File tmpdirFile = new File( tmp + File.separator );               // 6.0.0.0 (2014/04/11) ZIP API変更
215                final File tmpdirFile = new File( tmpdir );                                             // 8.0.1.0 (2021/10/29)
216//              final File tmpodsFile = new File( tmp + ".ods" );                               // 6.0.0.0 (2014/04/11) ZIP API変更
217                final File tmpodsFile = new File( outTemp + ".ods" );                   // 8.0.1.0 (2021/10/29)
218
219                // 一時ファイルを削除(エラー発生時の前のファイルを削除)
220                FileUtil.deleteFiles( tmpdirFile );                                             // 6.0.0.0 (2014/04/11) ZIP API変更
221
222                // 雛形ODSをテンポラリフォルダに解凍
223                ZipArchive.unCompress( tmpdirFile, templateFile );              // 6.0.0.0 (2014/04/11) ZIP API変更
224//              addDebugMsg( "[INFO]EXEC-TIME:UNCOMP=" + ( System.currentTimeMillis() - start ) );
225                addDebugMsg( () -> "[INFO]EXEC-TIME:UNCOMP=" ); // 8.0.3.0 (2021/12/17)
226
227                // DBTableModelのセット
228                queue.setData();
229//              addDebugMsg( "[INFO]EXEC-TIME:DATA=" + ( System.currentTimeMillis() - start ) );
230                addDebugMsg( () -> "[INFO]EXEC-TIME:DATA=" );   // 8.0.3.0 (2021/12/17)
231
232                // content.xml,meta.xmlのパース
233                final OdsContentParser contentParser = new OdsContentParser( queue, tmpdir );
234                contentParser.exec();
235        //      【保留】 sheetRows = contentParser.getSheetRowsList();      // 8.0.3.0 (2021/12/17)
236//              addDebugMsg( "[INFO]EXEC-TIME:PARSE=" + ( System.currentTimeMillis() - start ) );
237                addDebugMsg( () -> "[INFO]EXEC-TIME:PARSE=" );  // 8.0.3.0 (2021/12/17)
238
239                // 雛形ODSを再圧縮
240                ZipArchive.compress( tmpdirFile, tmpodsFile );                  // 6.0.0.0 (2014/04/11) ZIP API変更
241//              addDebugMsg( "[INFO]EXEC-TIME:COMP=" + ( System.currentTimeMillis() - start ) );
242                addDebugMsg( () -> "[INFO]EXEC-TIME:COMP=" );   // 8.0.3.0 (2021/12/17)
243
244                // 一時ファイルを削除
245                FileUtil.deleteFiles( tmpdirFile );                                             // 6.0.0.0 (2014/04/11) ZIP API変更
246//              addDebugMsg( "[INFO]EXEC-TIME:DELETE=" + ( System.currentTimeMillis() - start ) );
247                addDebugMsg( () -> "[INFO]EXEC-TIME:DELETE=" ); // 8.0.3.0 (2021/12/17)
248        }
249
250        /**
251         * 出力処理を行います。
252         *
253         * @og.rev 4.2.3.1 (2008/06/04) 中間ファイルの存在チェックを追加
254         * @og.rev 4.3.0.0 (2008/07/18) プリント時のプリンタ名チェック追加
255         * @og.rev 4.3.0.0 (2008/07/18) 出力ファイル名を指定していない場合に要求番号にする
256         * @og.rev 4.3.3.4 (2008/11/01) ODS出力追加
257         * @og.rev 5.1.2.0 (2010/01/01) 例外発生時にCalcオブジェクトをCloseしていないバグを修正
258         * @og.rev 5.1.6.0 (2010/05/01) 変換クラスの大幅見直しによる修正(元のコードも削除します)
259         * @og.rev 8.0.1.0 (2021/10/29) ローカルファイルとクラウドファイル間の移動は、ExecProcess#output(String...) で行う。
260         * @og.rev 8.0.1.0 (2021/10/29) OUT_ODS_XLSX (Excel2007形式) 評価用
261         * @og.rev 8.0.3.0 (2021/12/17) ods→xlsx変換時のシート毎の行数
262         * @og.rev 8.5.4.2 (2024/01/12) PMD 7.0.0 ExceptionAsFlowControl 対応
263         *
264         * @param types PRINT や PDF を表す文字列
265         */
266        private void output( final String... types ) {
267//              final String tmpods =
268//                      HybsSystem.url2dir( StringUtil.nval( HybsSystem.sys( "REPORT_FILE_URL" ) ,HybsSystem.sys( "FILE_URL" ) + "REPORT/" ) )
269//                      + queue.getSystemId() + File.separator + queue.getListId() + File.separator + queue.getYkno() + ".ods";
270
271                final String tmpods = outTemp + ".ods";
272                // 4.2.3.1 (2008/06/04) 中間ファイルの存在チェック
273                if( ! new File( tmpods ).exists() ){
274                        queue.addMsg( "中間ファイルが存在しません。" + tmpods );
275                        throw new HybsSystemException();
276                }
277
278                // 8.5.4.2 (2024/01/12) PMD 7.0.0 ExceptionAsFlowControl 対応
279                String errMsg = null;
280
281                // 変換クラスの生成
282                final DocConverter_OOO dc = new DocConverter_OOO( tmpods );
283                try {
284                        // 起動
285                        dc.open();
286//                      addDebugMsg( "[INFO]EXEC-TIME:OPEN=" + ( System.currentTimeMillis() - start ) );
287                        addDebugMsg( () -> "[INFO]EXEC-TIME:OPEN=" );   // 8.0.3.0 (2021/12/17)
288
289//                      for( int i=0; i<types.length; i++ ) {
290                        for( final String type : types ) {
291//                              if( "PRINT".equals( types[i] ) ) {
292                                if( "PRINT".equals( type ) ) {
293                                        // 4.3.0.0 (2008/07/18) プリント時のプリンタ名チェック
294                                        // 8.5.4.2 (2024/01/12) PMD 7.0.0 ExceptionAsFlowControl 対応
295                                        final String printName = queue.getPrinterName();
296//                                      if( queue.getPrinterName() == null || queue.getPrinterName().isEmpty() ){
297                                        if( printName == null || printName.isEmpty() ){
298                                                // 8.5.4.2 (2024/01/12) PMD 7.0.0 ExceptionAsFlowControl 対応
299//                                              queue.addMsg( "出力先マスタが正しく設定されていません。" );
300//                                              throw new Exception();
301                                                errMsg = "出力先マスタが正しく設定されていません。 type=" + type;
302                                                queue.addMsg( errMsg );
303                                                break;
304                                        }
305//                                      dc.print( queue.getPrinterName() );
306                                        dc.print( printName );
307                                }
308                                else {
309                                        // 8.0.1.0 (2021/10/29) クラウドコピーをここで行う。
310                                        final String outFilename = queue.getOutputName();
311//                                      if( "PDF".equals( types[i] ) ) {
312                                        if( "PDF".equals( type ) ) {
313                                                dc.pdf( outFilename, queue.getPdfPasswd() );
314                                        }
315        //                              【保留】
316        //                              else if( "XLSX".equals( type ) ) {                              // 8.0.3.0 (2021/12/17)
317        //                                      dc.xlsx( outFilename,sheetRows );
318        //                              }
319                                        else {
320                                                dc.auto( outFilename );                                         // 8.0.1.0 (2021/10/29)
321                                        }
322        //                              else if( "EXCEL".equals( types[i] ) ) {
323        //                                      dc.xls( outFilename );
324        //                              }
325        //                              // 8.0.1.0 (2021/10/29) Excel2007出力
326        //                              else if( "XLSX".equals( types[i] ) ) {
327        //                                      dc.xlsx( outFilename );
328        //                              }
329        //                              // 4.3.3.4 (2008/11/01) 追加
330        //                              else if( "ODS".equals( types[i] ) ) {
331        //                                      dc.ods( outFilename );
332        //                              }
333                                        HybsFileOperationFactory.local2cloud( false, () -> new File( outFilename ) );   // false:システム定義のクラウド設定に従う。
334                                }
335//                              else if( "PDF".equals( types[i] ) ) {
336//                                      dc.pdf( queue.getOutputName(), queue.getPdfPasswd() );
337//                              }
338//                              else if( "EXCEL".equals( types[i] ) ) {
339//                                      dc.xls( queue.getOutputName() );
340//                              }
341//                              // 4.3.3.4 (2008/11/01) 追加
342//                              else if( "ODS".equals( types[i] ) ) {
343//                                      dc.ods( queue.getOutputName() );
344//                              }
345//                              addDebugMsg( "[INFO]EXEC-TIME:EXEC["+types[i]+"]=" + ( System.currentTimeMillis() - start ) );
346                                addDebugMsg( () -> "[INFO]EXEC-TIME:EXEC["+type+"]=" ); // 8.0.3.0 (2021/12/17)
347                        }
348
349                        // Calcを閉じる
350                        dc.close();
351//                      addDebugMsg( "[INFO]EXEC-TIME:RELEASE=" + ( System.currentTimeMillis() - start ) );
352                        addDebugMsg( () -> "[INFO]EXEC-TIME:RELEASE=" );        // 8.0.3.0 (2021/12/17)
353                }
354                catch( final Throwable th ) {
355                        // Calcを閉じる(エラー発生時)
356                        dc.close( true );
357//                      queue.addMsg( "[INFO]EXEC-TIME:ERROR=" + ( System.currentTimeMillis() - start ) );
358                        addDebugMsg( () -> "[INFO]EXEC-TIME:ERROR=" );
359                        throw new HybsSystemException( th );
360                }
361
362                // 8.5.4.2 (2024/01/12) PMD 7.0.0 ExceptionAsFlowControl 対応
363                if( errMsg != null ) {
364                        throw new HybsSystemException( errMsg );
365                }
366
367                // 一時ファイルの削除
368                FileUtil.deleteFiles( new File( tmpods ) );
369//              addDebugMsg( "[INFO]EXEC-TIME:DELETE=" + ( System.currentTimeMillis() - start ) );
370                addDebugMsg( () -> "[INFO]EXEC-TIME:DELETE=" ); // 8.0.3.0 (2021/12/17)
371        }
372
373        // /**
374        // * 取込処理を行います。
375        // *
376        // * @og.rev 4.3.0.0 (2008/07/15) debugの追加
377        // * @og.rev 7.4.4.0 (2021/06/30) openGionV8事前準備(EXCEL取込廃止)
378        // */
379        // 7.4.4.0 (2021/06/30) Delete
380        // private void input() {
381        //      boolean flag = false;
382
383        //      // エクセル入力の基底となるパス
384        //      final String excelinUrl = HybsSystem.url2dir( StringUtil.nval( HybsSystem.sys( "EXCEL_IN_FILE_URL" ), HybsSystem.sys( "FILE_URL" ) + "EXCELIN/" ) );
385        //      final String excelinDir = excelinUrl + queue.getSystemId() + FS + queue.getListId();
386
387        //      final ExcelInsert ei = new ExcelInsert( queue.getSystemId(), queue.getYkno(), queue.getListId(), excelinDir, false );
388        //      flag = ei.execute();
389        //      if( !flag ) {
390        //              queue.addMsg( ei.getErrMsg() );
391        //              queue.addMsg( "取り込み処理に失敗しました" );
392        //              throw new HybsSystemException();
393        //      }
394        //      addDebugMsg( "[INFO]EXEC-TIME:INPUT=" + ( System.currentTimeMillis() - start ) );
395        // }
396
397        // /**
398        // * Excel取込後のPG起動処理を行います。
399        // *
400        // * @og.rev 4.3.0.0 (2008/07/15) debugの追加
401        // * @og.rev 7.4.4.0 (2021/06/30) openGionV8事前準備(EXCEL取込廃止)
402        // */
403        // 7.4.4.0 (2021/06/30) Delete
404        // private void pgexec() {
405        //      boolean flag = false;
406
407        //      final ProgramRun pr = new ProgramRun( queue.getSystemId(), queue.getYkno(), queue.getListId(), false );
408        //      flag = pr.execute();
409        //      if( !flag ) {
410        //              queue.addMsg( "取り込み後のPG起動に失敗しました" );
411        //              queue.addMsg( pr.getErrMsg() );
412        //              throw new HybsSystemException();
413        //      }
414        //      addDebugMsg( "[INFO]EXEC-TIME:PGEXEC=" + ( System.currentTimeMillis() - start ) );
415        // }
416
417        // /**
418        // * RFID出力処理を行います。
419        // *
420        // * @og.rev 4.3.0.0 (2008/07/15) debugの追加
421        // * @og.rev 4.3.3.0 (2008/10/01) 板金RFID対応
422        // * @og.rev 5.4.3.9 (2012/01/25) 雛形ファイル名
423        // * @og.rev 7.4.4.0 (2021/06/30) openGionV8事前準備(RFID出力廃止)
424        // */
425        // 7.4.4.0 (2021/06/30) Delete
426        // private void rfid() {
427        //      boolean flag = false;
428
429        //      // RFIDPrintRequest rpr = new RFIDPrintRequest( queue.getSystemId(), queue.getYkno(), queue.getListId(), queue.getLang(), type, queue.getPrinterName(), false );
430        //      // 4.3.3.0 (2008/10/01) 板金RFID対応。
431        //      // 5.4.3.9 (2012/01/25) 雛形ファイル名を渡す
432        //      final RFIDPrintRequest rpr = new RFIDPrintRequest( queue.getSystemId(), queue.getYkno(), queue.getListId(), queue.getLang(), type, queue.getPrtId()
433        //                                                                                               ,queue.getPrgDir(), queue.getPrgFile(), queue.getOutputName(),queue.getTemplateName(), false );
434        //      flag = rpr.initialDataSet();
435        //      if( flag ) {
436        //              flag = rpr.execute();
437        //      }
438        //      if( !flag ) {
439        //              queue.addMsg( "RFID出力処理に失敗しました" );
440        //              queue.addMsg( rpr.getErrMsg() );
441        //              throw new HybsSystemException();
442        //      }
443        //      addDebugMsg( "[INFO]EXEC-TIME:RFID=" + ( System.currentTimeMillis() - start ) );
444        // }
445
446        //      /**
447        //       * CSV出力処理を行います。
448        //       *
449        //       * @og.rev 5.9.0.0 (2015/09/04)
450        //       * @og.rev 5.9.2.2 (2015/11/22) grpid,demgrp
451        //       * @og.rev 5.9.2.3 (2015/11/27) 件数対応
452        //       * @og.rev 8.0.1.0 (2021/10/29) CSV出力対応(ユリニタ帳票)は、一旦保留にします。
453        //       */
454        //      private void csv() {
455        //              boolean flag = false;
456        //
457        //              final CSVPrintRequest rpr = new CSVPrintRequest( queue.getSystemId(), queue.getYkno(), queue.getListId(), queue.getLang(), type, queue.getPrtId()
458        //                                                      ,queue.getPrgDir(), queue.getPrgFile(), queue.getOutputName(), queue.getTemplateName(), queue.getGrpId(), queue.getDmnGrp(), debug );
459        //              flag = rpr.initialDataSet();
460        //              if( flag ) {
461        //                      flag = rpr.execute();
462        //              }
463        //              if( !flag ) {
464        //                      queue.addMsg( "CSV出力処理に失敗しました" );
465        //                      queue.addMsg( rpr.getErrMsg() );
466        //                      throw new HybsSystemException();
467        //              }
468        //              queue.setExecRowCnt( rpr.getBodyCount() ); // 5.9.2.3 (2015/11/27)
469        //
470        //              addDebugMsg( "[INFO]EXEC-TIME:CSV=" + ( System.currentTimeMillis() - start ) );
471        //      }
472
473        /**
474         * デバッグ用のメッセージを出力します。
475         *
476         * @param       msg     メッセージ
477         */
478//      private void addDebugMsg( final String msg ) {
479        private void addDebugMsg( final Supplier<String> msg ) {
480                if( debug ){
481//                      queue.addMsg( msg + CR );
482                        queue.addMsg( msg.get() + ( System.currentTimeMillis() - start )  );    // 8.0.3.0 (2021/12/17)
483                }
484        }
485}