`
yangkcd120606
  • 浏览: 1200 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

利用Ibatis和apache poi实现报表输出

阅读更多
    最近半个月,有空做了个报表程序,主要功能是从DB2数据库中,抽取数据,然后按照Excel模板的格式,将数据写进去。在该Excel模板中,事先画好了各种报表图(饼图,柱状图等)。只要数据写入了Excel相应的表格内,这些图形就会自动利用数据,显示出相应的样子。
    整个程序按照MVC的模式,和Facade模式来搭建的开发框架。
    View层,采用的是J2SE的AWT和SWING.
    类GenReportClient,在该类中有一系列的write方法,比如:writeTotalSummary().用于将调用业务层得到的数据,输出到Excel里。该Excel文件是事先定义好的Excel模板的一份拷贝。
    还有,为了显示程序处理状态,而加了一个类ProcessStatusClient,该类是继承于JFrame的一个窗体。用户通过这个窗体可以看到程序处理中状态。
    还有一个Animation类,该类是一个线程类,用于在类ProcessStatusClient中动态显示窗体title.
    控制层是:在类ProcessStatusClient中定义的匿名内部类,该类实现了ActionListener接口,用于响应用户的按钮点击。该类中的actionPerformed()方法就是实现控制的。
    业务逻辑层:ReportBusinessLogic接口,报表产生的业务逻辑接口,主要就是取数据用。实现类是ReportBusinessLogicImpl。
    数据访问层:ReportDBAccess接口,获取所有帐号各种类型操作和总操作数量的接口。实现类是ReportDBAccessImpl。具体实现是依赖Ibatis的sqlMapClient来查询DB,获取业务数据。

View层代码:
package com.ibm.report.client;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import com.ibm.report.blogic.ReportBusinessLogic;
import com.ibm.report.blogic.ReportBusinessLogicImpl;
import com.ibm.report.dto.OpenTicketRespTimeByAccount;
import com.ibm.report.dto.OperationsDaily;
import com.ibm.report.dto.OperationsDailyByAccount;
import com.ibm.report.dto.TotalOperations;
import com.ibm.report.util.Reportcommon;

/******************************************************************************
* 报表客户端应用
*
* @author 杨康
* @version 1.0<BR/>
* <BR/>
*          作成 : 2013/05/15
******************************************************************************/
public final class GenReportClient extends JFrame {

/** serialVersionUID */
private static final long serialVersionUID = 5098446118589698610L;

/** 报表生成业务逻辑接口 */
private ReportBusinessLogic rbl;

/** 报表文件物理路径 */
private String filePath;

/** 面板 */
private JPanel panel;

/** 标签:统计开始日时 */
private JLabel labelStartDatetime;

/** 标签:统计终了日时 */
private JLabel labelEndDatetime;

/** 标签:后台执行指示器 */
private JLabel labelMessage;

/** 入力框: 统计开始日时 */
private JTextField textStartDatetime;

/** 入力框:统计终了日时 */
private JTextField textEndDatetime;

/** 按钮:确定 */
private JButton btnConfirm;

/** 按钮:关闭 */
private JButton btnExit;

/** 网格袋布局器 */
private GridBagLayout gl;

/** 网格袋布局约束 */
private GridBagConstraints gbc;

/** 处理结果报告 */
private StringBuilder resultMessage = new StringBuilder("Result:\n\r");

/***************************************************************************
* 构造器方法
*
* @param templateFilePath
*            模板文件路径
* @param reportFilePath
*            报告文件路径
**************************************************************************/
public GenReportClient(final String templateFilePath,
final String reportFilePath) {
// // 取得当前程序所在磁盘路径
// final String currentpath = getClass().getResource("").toString();
//
// // 报表模板文件路径
// final String oldFilePath = currentpath.substring(6).replace("/", "\\")
// + "Ticketing report.xls";

// 设定报表生成业务逻辑实例
this.rbl = new ReportBusinessLogicImpl();

// 初始化布局实例变量
this.gl = new GridBagLayout();
this.gbc = new GridBagConstraints();

// 初始化面板变量
this.panel = new JPanel();
this.panel.setLayout(gl);
this.getContentPane().add(this.panel);

// 初期化标签
this.labelStartDatetime = new JLabel("Start Datetime");
this.labelEndDatetime = new JLabel("End Datetime");
this.labelMessage = new JLabel("     ");

// 初期化入力框
this.textStartDatetime = new JTextField(23);
this.textEndDatetime = new JTextField(23);

// 初期化按钮
this.btnConfirm = new JButton("Confirm");
this.btnExit = new JButton("Exit");

// 给确认按钮追加监听器
this.btnConfirm.addActionListener(new ActionListener() {

/***************************************************************************
* 用户点击确认按钮的事件处理逻辑
*
* @param event
*            用户操作生成的事情对象
*
**************************************************************************/
@Override
public void actionPerformed(ActionEvent event) {

// 报表处理开始
long starttime = System.currentTimeMillis();

System.out
.println("#####################################################");
System.out
.println("# background is executing, please wait for amoment! #");
System.out
.println("#####################################################");

// 打开显示正在处理状态显示框口
ProcessStatusClient psClient = new ProcessStatusClient();

// 正在出力报表中
setVisible("OFF");

// 置空信息标签
labelMessage.setText("   ");

// 存储报表统计的开始日时的变量
String start_datetime = null;

// 存储报表统计的终了日时的变量
String end_datetime = null;

// 用户点击了确认按钮的场合
if (btnConfirm == event.getSource()) {
// 拿到用户输入的报表统计的开始日时情报
start_datetime = textStartDatetime.getText();
// 拿到用户输入的报表统计的终了日时情报
end_datetime = textEndDatetime.getText();

// 用户没有输入报表统计的开始日时的场合
if (start_datetime == null || "".equals(start_datetime)) {
// 通知用户必须输入报表统计的开始日时
labelMessage.setText("please input start datetime!");
setVisible("ON");
psClient.dispose();
psClient = null;
return;
}

// 默认从开始日的凌晨开始
start_datetime += " 00:00:00.000";

// 用户没有输入报表统计的终了日时的场合
if (end_datetime == null || "".equals(end_datetime)) {
// 通知用户必须输入报表统计的终了日时
labelMessage.setText("please input end datetime!");
setVisible("ON");
psClient.dispose();
psClient = null;
return;
}

// 默认从终了日的晚上11点59分59秒999毫秒结束
end_datetime += " 23:59:59.999";

// Check统计开始日
if (!Reportcommon.checkDateString(start_datetime)) {
// 通知用户必须输入报表正确的日期
labelMessage
.setText("please input efficacious start datetime!");
setVisible("ON");
psClient.dispose();
psClient = null;
return;
}

// Check统计终了日
if (!Reportcommon.checkDateString(end_datetime)) {
// 通知用户必须输入报表正确的日期
labelMessage
.setText("please input efficacious end datetime!");
setVisible("ON");
psClient.dispose();
psClient = null;
return;
}

// Check统计开始日与统计终了日的关系
if (!Reportcommon.checkStartYMAndEndYM(start_datetime,
end_datetime)) {
// 通知用户必须输入正确开始日与统计终了日
labelMessage
.setText("start datetime's year and month must equal the end datetime's");
setVisible("ON");
psClient.dispose();
psClient = null;
return;
}

if (!Reportcommon.CompareStartDateAndEndDate(
start_datetime, end_datetime)) {
// 通知用户必须输入正确开始日与统计终了日
labelMessage
.setText("the start datetime must less Or equal the end datetime");
setVisible("ON");
psClient.dispose();
psClient = null;
return;
}

// 新生成的报表文件路径
filePath = Reportcommon.genNewXlsFileName(reportFilePath,
textStartDatetime.getText(),
textEndDatetime.getText());

// 拷贝模板到新路径
Reportcommon.copyFile(templateFilePath, filePath);

// 调用业务接口得出所有帐号的总的操作数量一览情报
List<TotalOperations> totaloperlst = rbl
.getTotalOperations(start_datetime, end_datetime);

// 调用业务接口得出所有帐号的失败操作数量一览情报
List<TotalOperations> failedoperlst = rbl
.getFailedOperations(start_datetime, end_datetime);

// 调用业务接口得出所有帐号的各自总开票操作数量一览情报
List<TotalOperations> totalopenlst = rbl
.getTotalOpenOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自开票失败操作数量一览情报
List<TotalOperations> failedopenlst = rbl
.getFailedOpenOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自更新票操作数量一览情报
List<TotalOperations> totalupdatelst = rbl
.getTotalUpdateOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自更新票失败操作数量一览情报
List<TotalOperations> failedupdatelst = rbl
.getFailedUpdateOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自添加附件操作数量一览情报
List<TotalOperations> totalattachlst = rbl
.getTotalAttachmentOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自添加附件失败操作数量一览情报
List<TotalOperations> failedattachlst = rbl
.getFailedAttachmentOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自取票一览操作数量一览情报
List<TotalOperations> totallistlst = rbl
.getTotalListOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自取票一览操作失败数量一览情报
List<TotalOperations> failedlistlst = rbl
.getFailedListOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自查看票详细操作数量一览情报
List<TotalOperations> totalviewlst = rbl
.getTotalViewOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自查看票详细失败操作数量一览情报
List<TotalOperations> failedviewlst = rbl
.getFailedViewOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自再次打开票操作数量一览情报
List<TotalOperations> totalreopenlst = rbl
.getTotalReopenOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自再次打开票操作失败数量一览情报
List<TotalOperations> failedreopenlst = rbl
.getFailedReopenOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自关票操作数量一览情报
List<TotalOperations> totalcloselst = rbl
.getTotalCloseOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自关票操作失败数量一览情报
List<TotalOperations> failedcloselst = rbl
.getFailedCloseOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自聊天操作数量一览情报
List<TotalOperations> totalchatlst = rbl
.getTotalChatOperations(start_datetime,
end_datetime);

// 调用业务接口得出所有帐号的各自聊天失败操作数量一览情报
List<TotalOperations> failedchatlst = rbl
.getFailedChatOperations(start_datetime,
end_datetime);

// 调用业务接口得出按天统计总操作数量一览情报
List<OperationsDaily> totaldailyoplst = rbl
.getTotalDailyOperations(start_datetime,
end_datetime);

// 调用业务接口得出按天统计失败操作数量一览情报
List<OperationsDaily> faileddailyoplst = rbl
.getFailedDailyOperations(start_datetime,
end_datetime);

// 调用业务接口得出按天统计开票操作数量一览情报
List<OperationsDaily> totaldailyopenlst = rbl
.getTotalDailyOpen(start_datetime, end_datetime);

// 调用业务接口得出按天统计开票失败操作数量一览情报
List<OperationsDaily> faileddailyopenlst = rbl
.getFailedDailyOpen(start_datetime, end_datetime);

// 调用业务接口得出按天统计各个帐号总操作数量一览情报
List<OperationsDailyByAccount> totaldailyaccoplst = rbl
.getTotalDailyByAccountOperations(start_datetime,
end_datetime);

// 调用业务接口得出按天统计各个帐号失败操作数量一览情报
List<OperationsDailyByAccount> faileddailyaccoplst = rbl
.getFailedDailyByAccountOperations(start_datetime,
end_datetime);

// 调用业务接口得出按天统计各个帐号开票操作数量一览情报
List<OperationsDailyByAccount> totaldailyaccopenlst = rbl
.getTotalDailyByAccountOpen(start_datetime,
end_datetime);

// 调用业务接口得出按天统计各个帐号开票失败操作数量一览情报
List<OperationsDailyByAccount> faileddailyaccopenlst = rbl
.getFailedDailyByAccountOpen(start_datetime,
end_datetime);

// 调用业务接口得出各个帐号开票操作响应时间一览情报
List<OpenTicketRespTimeByAccount> openTikRespTimLst = rbl
.getOpenTicketRespTime(start_datetime, end_datetime);

// 调用业务接口得出各个帐号开票操作响应时间小于等于5秒一览情报
List<TotalOperations> lessEqual5SecOperLst = rbl
.getLessEqual5SecOpers(start_datetime, end_datetime);

// 调用业务接口得出各个帐号开票操作响应时间大于5秒小于等于15秒一览情报
List<TotalOperations> larger5AndLessEqual15SecOperLst = rbl
.getLarger5SecAndLessEqual15SecOpers(
start_datetime, end_datetime);

// 调用业务接口得出各个帐号开票操作响应时间大于15秒小于等于30秒一览情报
List<TotalOperations> larger15AndLessEqual30SecOperLst = rbl
.getLarger15SecAndLessEqual30SecOpers(
start_datetime, end_datetime);

// 调用业务接口得出各个帐号开票操作响应时间大于130秒一览情报
List<TotalOperations> larger30SecOperLst = rbl
.getLarger30SecOpers(start_datetime, end_datetime);

try {

for (int i = 0; i < 4; i++) {
// 1,输出各个用户的各自的操作总数量
writeTotalSummary(totaloperlst, i, 1,
"total operations");

// 2,输出各个用户的各自的失败操作总数量
writeTotalSummary(failedoperlst, i, 3,
"failed operations");

// 3,输出各个用户的各自的总开票操作数量
writeTotalSummary(totalopenlst, i, 4, "total open");

// 4,输出各个用户的各自的开票失败操作数量
writeTotalSummary(failedopenlst, i, 13,
"failed open");

// 5,输出各个用户的各自的更新票操作数量
writeTotalSummary(totalupdatelst, i, 5,
"total update");

// 6,输出各个用户的各自的更新票失败操作数量
writeTotalSummary(failedupdatelst, i, 14,
"failed update");

// 7,输出各个用户的各自的追加附件操作数量
writeTotalSummary(totalattachlst, i, 6,
"total attachment");

// 8,输出各个用户的各自的追加附件失败操作数量
writeTotalSummary(failedattachlst, i, 15,
"failed attachment");

// 9,输出各个用户的各自的取票一览操作数量
writeTotalSummary(totallistlst, i, 7, "total list");

// 10,输出各个用户的各自的取票一览失败操作数量
writeTotalSummary(failedlistlst, i, 16,
"failed list");

// 11,输出各个用户的各自的查看票详细情报操作数量
writeTotalSummary(totalviewlst, i, 8, "total view");

// 12,输出各个用户的各自的查看票详细失败情报操作数量
writeTotalSummary(failedviewlst, i, 17,
"failed view");

// 13,输出各个用户的各自的再次打开票操作数量
writeTotalSummary(totalreopenlst, i, 9,
"total reopen");

// 14,输出各个用户的各自的再次打开票操作失败数量
writeTotalSummary(failedreopenlst, i, 18,
"failed reopen");

// 15,输出各个用户的各自的关票操作数量
writeTotalSummary(totalcloselst, i, 10,
"total close");

// 16,输出各个用户的各自的关票操作失败数量
writeTotalSummary(failedcloselst, i, 19,
"failed close");

// 17,输出各个用户的各自的聊天操作的数量
writeTotalSummary(totalchatlst, i, 11,
"total chat script");

// 18,输出各个用户的各自的聊天操作失败的数量
writeTotalSummary(failedchatlst, i, 20,
"failed chat script");
}
// 19, 输出按天统计总操作数量
writeDailySummary(totaldailyoplst, 1,
"daily total operations");

// 20, 输出按天统计失败操作数量
writeDailySummary(faileddailyoplst, 2,
"daily failed operations");

// 21, 输出按天统计开票操作数量
writeDailySummary(totaldailyopenlst, 3,
"daily total open");

// 22, 输出按天统计开票失败操作数量
writeDailySummary(faileddailyopenlst, 4,
"daily failed open");

// 23, 输出按天统计的各个帐号总操作数量
writeDailySummary(totaldailyaccoplst, new int[] { 5, 9,
13 }, "daily total account operations");

// 24, 输出按天统计的各个帐号失败操作数量
writeDailySummary(faileddailyaccoplst, new int[] { 6,
10, 14 }, "daily failed account operations");

// 25, 输出按天统计的各个帐号开票操作数量
writeDailySummary(totaldailyaccopenlst, new int[] { 7,
11, 15 }, "daily total open account operations");

// 26, 输出按天统计的各个帐号开票失败数量
writeDailySummary(faileddailyaccopenlst, new int[] { 8,
12, 16 },
"daily failed open account operations");

// 27, 输出bcbsma的开票相应时间一览情报
writeResponseTime(
getOpenRespTimeListPerAccount(
openTikRespTimLst, "bcbsma"), "bcbsma");

// 28, 输出dow的开票相应时间一览情报
writeResponseTime(
getOpenRespTimeListPerAccount(
openTikRespTimLst, "dow"), "dow");

// 29, 输出millercoors的开票相应时间一览情报
writeResponseTime(
getOpenRespTimeListPerAccount(
openTikRespTimLst, "millercoors"),
"millercoors");

// 30, 输出各个帐号开票操作响应时间小于等于5秒的情报
writeResponseTimePieChart(lessEqual5SecOperLst, 1,
"less equal 5 seconds open operations");

// 31, 输出各个帐号开票操作响应时间大于5秒小于等于15秒的情报
writeResponseTimePieChart(
larger5AndLessEqual15SecOperLst, 2,
"larger 5 and lessequal 15 second open operations");

// 32, 输出各个帐号开票操作响应时间大于15秒小于等于30秒的情报
writeResponseTimePieChart(
larger15AndLessEqual30SecOperLst, 3,
"larger 15 and lessequal 30 second open operations");

// 33, 输出各个帐号开票操作响应时间大于30秒的情报
writeResponseTimePieChart(larger30SecOperLst, 4,
"larger 30 second open operations");

} catch (Exception e) {
// 输出异常情报
System.out.println(e.getLocalizedMessage());
// 通知用户程序异常终了
System.out
.println("program over with exception or error!");
return;
}
}

// 报表处理结束
psClient.setHasFinished(true);
// 设定显示正在处理状态显示框口标题
psClient.setTitle("Process Finished");

// 报表处理结束
long endtime = System.currentTimeMillis();

// 设定系统处理总时间信息
psClient.setLabelMessage("you have used:"
+ String.valueOf((endtime - starttime) / 1000)
+ " seconds to finish output report!");

// 显示处理结果给用户的对话框
Object[] options = { "OK" };
JOptionPane.showOptionDialog(null, resultMessage.toString(),
"Information", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE, null, options, options[0]);

// 通知用户报表出力正常结束
labelMessage.setText(" ");
// 清空结果情报
resultMessage = new StringBuilder("Result:\n\r");

}

});

// 为退出按钮添加监听器
this.btnExit.addActionListener(new ActionListener() {

/***************************************************************************
* 用户点击退出按钮的事件处理逻辑
*
* @param event
*            用户操作生成的事情对象
*
**************************************************************************/
@Override
public void actionPerformed(ActionEvent arg0) {
// 如果用户点击了关闭按钮,就退出程序。
if (arg0.getSource() == btnExit) {
System.exit(0);
}
}
});

// 为该Frame添加控件
this.gbc.anchor = GridBagConstraints.NORTHWEST;
this.gbc.gridx = 1;
this.gbc.gridy = 5;
this.gl.setConstraints(this.labelStartDatetime, this.gbc);
this.panel.add(this.labelStartDatetime);

this.gbc.anchor = GridBagConstraints.NORTHWEST;
this.gbc.gridx = 4;
this.gbc.gridy = 5;
this.gl.setConstraints(this.textStartDatetime, this.gbc);
this.panel.add(this.textStartDatetime);

this.gbc.anchor = GridBagConstraints.NORTHWEST;
this.gbc.gridx = 1;
this.gbc.gridy = 8;
this.gl.setConstraints(this.labelEndDatetime, this.gbc);
this.panel.add(this.labelEndDatetime);

this.gbc.anchor = GridBagConstraints.NORTHWEST;
this.gbc.gridx = 4;
this.gbc.gridy = 8;
this.gl.setConstraints(this.textEndDatetime, this.gbc);
this.panel.add(this.textEndDatetime);

this.gbc.anchor = GridBagConstraints.NORTHWEST;
this.gbc.gridx = 1;
this.gbc.gridy = 11;
this.gl.setConstraints(this.btnConfirm, this.gbc);
this.panel.add(this.btnConfirm);

this.gbc.anchor = GridBagConstraints.NORTHWEST;
this.gbc.gridx = 4;
this.gbc.gridy = 11;
this.gl.setConstraints(this.btnExit, this.gbc);
this.panel.add(this.btnExit);

this.gbc.anchor = GridBagConstraints.NORTHWEST;
this.gbc.gridx = 4;
this.gbc.gridy = 14;
this.gl.setConstraints(this.labelMessage, this.gbc);
this.panel.add(this.labelMessage);

this.setTitle("Report Generation Program");
this.setVisible(true);
this.setSize(600, 500);
this.setLocationRelativeTo(null);
}

/***************************************************************************
* 输出各个用户的各自的各种类型操作和总操作的数量
*
* @param totaloperlst
*            操作数量的列表
* @param _sheetIndex
*            工作片索引
* @param _rowIndex
*            行索引
* @param name
*            当前统计的操作名
* @exception Exception
*                异常
**************************************************************************/
public void writeTotalSummary(List<TotalOperations> totaloperlst,
int _sheetIndex, int _rowIndex, String name) throws Exception {
// DB里没有数据的场合,直接返回
if (totaloperlst == null || totaloperlst.size() == 0) {
return;
}
// 申明文件输入流对象,读取报表文件
FileInputStream fis = new FileInputStream(this.filePath);

// Excel工作薄
HSSFWorkbook wb = null;

// POI的文件系统
POIFSFileSystem fs = null;

// 设置要读取的文件路径
fs = new POIFSFileSystem(fis);
// HSSFWorkbook相当于一个excel文件,HSSFWorkbook是解析excel2007之前的版本(xls)
// 之后版本使用XSSFWorkbook(xlsx)
wb = new HSSFWorkbook(fs);
// 获得sheet工作簿
HSSFSheet sheet = wb.getSheetAt(_sheetIndex);

// 获得行
HSSFRow row = sheet.getRow(_rowIndex);

// 小计
double sum = 0.0;
// 获得行中的列,即单元格
for (int j = 1; j < 5; j++) {
HSSFCell cell = row.getCell(j);

// 设置单元格的数据格式为数字
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
String cellvalue = "0";

// 第一个单元格(dow)
if (j == 1) {
for (TotalOperations totaloper : totaloperlst) {
if ("dow".equals(totaloper.getAccount())) {
cellvalue = totaloper.getTotalOperations();
sum += Double.parseDouble(cellvalue);
break;
}
}
// 第二个单元格(millercoors)
} else if (j == 2) {
for (TotalOperations totaloper : totaloperlst) {
if ("millercoors".equals(totaloper.getAccount())) {
cellvalue = totaloper.getTotalOperations();
sum += Double.parseDouble(cellvalue);
break;
}
}
// 第三个单元格(bcbama)
} else if (j == 3) {
for (TotalOperations totaloper : totaloperlst) {
if ("bcbsma".equals(totaloper.getAccount())) {
cellvalue = totaloper.getTotalOperations();
sum += Double.parseDouble(cellvalue);
break;
}
}
// 第四个单元格(总计)
} else if (j == 4) {
cellvalue = String.valueOf(sum);
}
// 设置该当单元格的数值
cell.setCellValue(Double.parseDouble(cellvalue));
}

// 将信息输出到工作薄
FileOutputStream fos = new FileOutputStream(this.filePath);
wb.write(fos);

if (_sheetIndex == 0) {
System.out.println(name + " write successful!");
this.resultMessage.append(name).append(" write successful!")
.append("\n");
}

fis.close();
fos.close();

fis = null;
fos = null;

}

/***************************************************************************
* 输出各个用户的各自的各个响应时间段里操作的数量
*
* @param totaloperlst
*            操作数量的列表
* @param _rowIndex
*            行索引
* @param timeQuantum
*            当前统计时间段名
* @exception Exception
*                异常
**************************************************************************/
public void writeResponseTimePieChart(List<TotalOperations> totaloperlst,
int _rowIndex, String timeQuantum) throws Exception {
// DB里没有数据的场合,直接返回
if (totaloperlst == null || totaloperlst.size() == 0) {
return;
}
// 申明文件输入流对象,读取报表文件
FileInputStream fis = new FileInputStream(this.filePath);

// Excel工作薄
HSSFWorkbook wb = null;

// POI的文件系统
POIFSFileSystem fs = null;

// 设置要读取的文件路径
fs = new POIFSFileSystem(fis);
// HSSFWorkbook相当于一个excel文件,HSSFWorkbook是解析excel2007之前的版本(xls)
// 之后版本使用XSSFWorkbook(xlsx)
wb = new HSSFWorkbook(fs);
// 获得sheet工作簿
HSSFSheet sheet = wb.getSheetAt(6);

// 获得行
HSSFRow row = sheet.getRow(_rowIndex);

for (int i = 1; i < 4; i++) {
HSSFCell cell = row.getCell(i);

// 设置单元格的数据格式为数字
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
String cellvalue = "0";

// 第一个单元格(dow)
if (i == 1) {
for (TotalOperations totaloper : totaloperlst) {
if ("dow".equals(totaloper.getAccount())) {
cellvalue = totaloper.getTotalOperations();
break;
}
}
// 第二个单元格(millercoors)
} else if (i == 2) {
for (TotalOperations totaloper : totaloperlst) {
if ("millercoors".equals(totaloper.getAccount())) {
cellvalue = totaloper.getTotalOperations();
break;
}
}
// 第三个单元格(bcbama)
} else if (i == 3) {
for (TotalOperations totaloper : totaloperlst) {
if ("bcbsma".equals(totaloper.getAccount())) {
cellvalue = totaloper.getTotalOperations();
break;
}
}

}
// 设置该当单元格的数值
cell.setCellValue(Double.parseDouble(cellvalue));
}

// 将信息输出到工作薄
FileOutputStream fos = new FileOutputStream(this.filePath);
wb.write(fos);

System.out.println(timeQuantum + " write successful!");
this.resultMessage.append(timeQuantum).append(" write successful!")
.append("\n");

fis.close();
fos.close();

fis = null;
fos = null;
}

/***************************************************************************
* 输出按天统计的开票操作和总操作的数量
*
* @param totaloperlst
*            操作数量的列表
* @param _cloumnIndex
*            列索引
* @param name
*            当前统计的操作名
* @exception Exception
*                异常
**************************************************************************/
public void writeDailySummary(List<OperationsDaily> totaloperlst,
int _columnIndex, String name) throws Exception {
// DB里没有数据的场合,直接返回
if (totaloperlst == null || totaloperlst.size() == 0) {
return;
}
// 申明文件输入流对象,读取报表文件
FileInputStream fis = new FileInputStream(this.filePath);

// Excel工作薄
HSSFWorkbook wb = null;

// POI的文件系统
POIFSFileSystem fs = null;

// 设置要读取的文件路径
fs = new POIFSFileSystem(fis);
// HSSFWorkbook相当于一个excel文件,HSSFWorkbook是解析excel2007之前的版本(xls)
// 之后版本使用XSSFWorkbook(xlsx)
wb = new HSSFWorkbook(fs);
// 获得sheet工作簿
HSSFSheet sheet = wb.getSheetAt(4);

for (int i = 1; i < 32; i++) {
// 获得行
HSSFRow row = sheet.getRow(i);
// 获取单元格
HSSFCell cell = row.getCell(_columnIndex);
// 设置单元格的数据格式为数字
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
String cellvalue = "0";

// 得到日操作数量
cellvalue = getDailyOperations(i, totaloperlst);

// 设置该当单元格的数值
cell.setCellValue(Double.parseDouble(cellvalue));
}

// 将信息输出到工作薄
FileOutputStream fos = new FileOutputStream(this.filePath);
wb.write(fos);

System.out.println(name + " write successful!");
this.resultMessage.append(name).append(" write successful!")
.append("\n");

fis.close();
fos.close();

fis = null;
fos = null;
}

/***************************************************************************
* 输出按天统计的各个帐号开票操作和总操作的数量
*
* @param totaloperlst
*            操作数量的列表
* @param _cloumnIndex
*            列索引数组
* @param name
*            当前统计各个帐号操作名
* @exception Exception
*                异常
**************************************************************************/
public void writeDailySummary(List<OperationsDailyByAccount> totaloperlst,
int[] _columnIndexs, String name) throws Exception {
// DB里没有数据的场合,直接返回
if (totaloperlst == null || totaloperlst.size() == 0) {
return;
}
// 申明文件输入流对象,读取报表文件
FileInputStream fis = new FileInputStream(this.filePath);

// Excel工作薄
HSSFWorkbook wb = null;

// POI的文件系统
POIFSFileSystem fs = null;

// 设置要读取的文件路径
fs = new POIFSFileSystem(fis);
// HSSFWorkbook相当于一个excel文件,HSSFWorkbook是解析excel2007之前的版本(xls)
// 之后版本使用XSSFWorkbook(xlsx)
wb = new HSSFWorkbook(fs);
// 获得sheet工作簿
HSSFSheet sheet = wb.getSheetAt(4);

// 统计每个月每天的操作数
for (int i = 1; i < 32; i++) {
// 获得行
HSSFRow row = sheet.getRow(i);

// 获取单元格
for (int column : _columnIndexs) {
HSSFCell cell = row.getCell(column);

// 设置单元格的数据格式为数字
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
String cellvalue = "0";

// 得到日操作数量
// dow的场合
if (column == 5 || column == 6 || column == 7 || column == {
cellvalue = getDailyOperations(i, "dow", totaloperlst);

// millercoors的场合
} else if (column == 9 || column == 10 || column == 11
|| column == 12) {
cellvalue = getDailyOperations(i, "millercoors",
totaloperlst);

// bcbsma的场合
} else if (column == 13 || column == 14 || column == 15
|| column == 16) {
cellvalue = getDailyOperations(i, "bcbsma", totaloperlst);
}

// 设置该当单元格的数值
cell.setCellValue(Double.parseDouble(cellvalue));
}

}

// 将信息输出到工作薄
FileOutputStream fos = new FileOutputStream(this.filePath);
wb.write(fos);

System.out.println(name + " write successful!");
this.resultMessage.append(name).append(" write successful!")
.append("\n");

fis.close();
fos.close();

fis = null;
fos = null;
}

/***************************************************************************
* 输出帐号开票操作响应时间
*
* @param totaloperlst
*            指定帐号操作响应时间的列表
* @param account
*            当前统计各个帐号操作名
* @exception Exception
*                异常
**************************************************************************/
public void writeResponseTime(
List<OpenTicketRespTimeByAccount> totaloperlst, String account)
throws Exception {
// DB里没有数据的场合,直接返回
if (totaloperlst == null || totaloperlst.size() == 0) {
return;
}

// 申明文件输入流对象,读取报表文件
FileInputStream fis = new FileInputStream(this.filePath);

// Excel工作薄
HSSFWorkbook wb = null;

// POI的文件系统
POIFSFileSystem fs = null;

// 设置要读取的文件路径
fs = new POIFSFileSystem(fis);
// HSSFWorkbook相当于一个excel文件,HSSFWorkbook是解析excel2007之前的版本(xls)
// 之后版本使用XSSFWorkbook(xlsx)
wb = new HSSFWorkbook(fs);
// 获得sheet工作簿
HSSFSheet sheet = wb.getSheetAt(5);

// 定义总记录数
int records = 0;

records = totaloperlst.size();

for (int i = 4; i < (records + 4); i++) {
OpenTicketRespTimeByAccount openRespTimeByAccount = totaloperlst
.get(i - 4);

// 获得行
HSSFRow row = sheet.getRow(i);

HSSFCell ticketNoCell = null;
HSSFCell respTimeCell = null;

// 获取单元格
if ("bcbsma".equals(account)) {
ticketNoCell = row.getCell(0);
respTimeCell = row.getCell(1);
} else if ("dow".equals(account)) {
ticketNoCell = row.getCell(3);
respTimeCell = row.getCell(4);
} else if ("millercoors".equals(account)) {
ticketNoCell = row.getCell(6);
respTimeCell = row.getCell(7);
}

// 设置单元格的数据格式为数字
ticketNoCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
respTimeCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);

ticketNoCell.setCellValue(openRespTimeByAccount.getTicketNo());
respTimeCell.setCellValue(Double.parseDouble(openRespTimeByAccount
.getResponseTime()));
}

// 将信息输出到工作薄
FileOutputStream fos = new FileOutputStream(this.filePath);
wb.write(fos);

System.out.println(account
+ " open ticket response time write successful!");
this.resultMessage.append(account)
.append(" open ticket response time write successful!")
.append("\n");

fis.close();
fos.close();

fis = null;
fos = null;

}

/***************************************************************************
* 设定客户端窗口的可视性
*
* @param key
*            框口可视的开关字符(ON:可视, OFF:不可视)
**************************************************************************/
public void setVisible(String key) {
if ("ON".equals(key)) {
this.setVisible(true);
} else if ("OFF".equals(key)) {
this.setVisible(false);
}
}

/***************************************************************************
* 得到指定日的操作数量
*
* @param dateNum
*            日期数字
* @param totaloperlst
*            操作数量对象列表
* @return 日操作数
**************************************************************************/
private String getDailyOperations(int dateNum,
List<OperationsDaily> totaloperlst) {
String retDailyOpsStr = "0";

String dateNumStr = String.valueOf(dateNum);

if (dateNumStr.length() == 1) {
dateNumStr = "0" + dateNumStr;
}

if (totaloperlst == null || totaloperlst.size() == 0) {
return retDailyOpsStr;
}

for (OperationsDaily opdaily : totaloperlst) {
String dateStr = opdaily.getDayofmonth().substring(8);
if (dateStr.equals(dateNumStr)) {
retDailyOpsStr = opdaily.getTotalOperations();
break;
}
}
return retDailyOpsStr;
}

/***************************************************************************
* 得到指定日的操作数量
*
* @param dateNum
*            日期数字
* @param account
*            帐号名称
* @param totaloperlst
*            操作数量对象列表
* @return 日操作数
**************************************************************************/
private String getDailyOperations(int dateNum, String account,
List<OperationsDailyByAccount> totaloperlst) {
String retDailyOpsStr = "0";

String dateNumStr = String.valueOf(dateNum);

if (dateNumStr.length() == 1) {
dateNumStr = "0" + dateNumStr;
}

if (account == null || "".equals(account)) {
return "";
}

if (totaloperlst == null || totaloperlst.size() == 0) {
return retDailyOpsStr;
}

for (OperationsDailyByAccount opDailyAccount : totaloperlst) {
String dateStr = opDailyAccount.getDayofmonth().substring(8);
if (dateStr.equals(dateNumStr)
&& account.equals(opDailyAccount.getAccount())) {
retDailyOpsStr = opDailyAccount.getTotalOperations();
break;
}
}
return retDailyOpsStr;
}

/***************************************************************************
* 根据给定帐号,得出相应的开票响应时间情报列表
*
* @param totaloperlst
*            总开票响应时间情报列表
* @param account
*            帐号名
* @return 相应的开票响应时间情报列表
**************************************************************************/
public List<OpenTicketRespTimeByAccount> getOpenRespTimeListPerAccount(
List<OpenTicketRespTimeByAccount> totaloperlst, String account) {
List<OpenTicketRespTimeByAccount> openResTimLst = new ArrayList<OpenTicketRespTimeByAccount>();

for (OpenTicketRespTimeByAccount openRespTim : totaloperlst) {
if (account.equals(openRespTim.getAccount())) {
openResTimLst.add(openRespTim);
}
}

return openResTimLst;
}

/***************************************************************************
* 客户端入口
*
* @param args
**************************************************************************/
public static void main(String[] args) {
new GenReportClient(args[0], args[1])
.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

package com.ibm.report.client;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/******************************************************************************
* 显示报表处理状态中用的窗体
*
* @author 杨康
* @version 1.0<BR/>
* <BR/>
*          作成 : 2013/05/15
******************************************************************************/
public class ProcessStatusClient extends JFrame {

    /** serialVersionUID */
    private static final long serialVersionUID = -3634410219839238173L;

    /** 标签:后台执行指示器 */
    private JLabel labelMessage = new JLabel("process finished!");

    /** 面板 */
    private JPanel panel = new JPanel();

    /** 网格袋布局器 */
    private GridBagLayout gl = new GridBagLayout();

    /** 网格袋布局约束 */
    private GridBagConstraints gbc = new GridBagConstraints();

    /** 处理完成标志 */
    private boolean hasFinished = false;

    /***************************************************************************
     * 设定处理完成标志
     *
     * @param isfinish
     *            完成情况
     **************************************************************************/
    public void setHasFinished(boolean isfinish) {
        this.hasFinished = isfinish;
    }

    /***************************************************************************
     * 设定后台执行指示器
     *
     * @param msg
     *            信息字符串
     **************************************************************************/
    public void setLabelMessage(String msg) {
        this.labelMessage.setText(msg);
    }

    /***************************************************************************
     *
     **************************************************************************/
    public ProcessStatusClient() {
        /** 显示动画的线程 */
        Thread animationThread = new Thread(new Animation(labelMessage));

        this.panel.setLayout(gl);
        this.getContentPane().add(this.panel);

        // 为该Frame添加控件
        this.gbc.anchor = GridBagConstraints.NORTHWEST;
        this.gbc.gridx = 1;
        this.gbc.gridy = 5;
        this.gl.setConstraints(this.labelMessage, this.gbc);
        this.panel.add(this.labelMessage);

        // 设置框口属性

        this.setSize(400, 300);
        this.setTitle("Processing...");
        this.setVisible(true);
        this.setResizable(false);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        animationThread.start();

    }

    /******************************************************************************
     * 实现动画显示的类
     *
     * @author 杨康
     * @version 1.0<BR/>
     * <BR/>
     *          作成 : 2013/05/15
     ******************************************************************************/
    public class Animation implements Runnable {

        /** 动画显示内容 */
        private String[] animationContents = { "processing", "processing->",
                "processing->->", "processing->->->", "processing->->->->",
                "processing->->->->->", "processing->->->->->->",
                "processing->->->->->->->" };

        /** 指示变量 */
        private int counter = 0;

        /** 指示标签 */
        private JLabel label;

        public Animation(JLabel label) {
            this.label = label;
        }

        /***************************************************************************
         * 线程体:每隔1秒,显示相应的消息给用户
         **************************************************************************/
        @Override
        public void run() {
            while (!hasFinished) {
                displayContents(label);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    label.setText("Thread interrupted");
                }
            }

        }

        /***************************************************************************
         * 动态显示消息标签和窗体标题信息
         *
         * @param label
         *            消息标签
         **************************************************************************/
        public void displayContents(JLabel label) {
            // 设置消息标签的显示值
            label.setText(animationContents[counter]);
            // 设置窗口标题
            setTitle(animationContents[counter]);
            counter++;
            if (counter >= {
                counter = 0;
            }
        }

    }
}

业务逻辑层接口代码:
package com.ibm.report.blogic;

import java.util.List;

import com.ibm.report.dto.OpenTicketRespTimeByAccount;
import com.ibm.report.dto.OperationsDaily;
import com.ibm.report.dto.OperationsDailyByAccount;
import com.ibm.report.dto.TotalOperations;

/******************************************************************************
* 报表产生的业务逻辑接口
*
* @author 杨康
* @version 1.0<BR/>
* <BR/>
*          作成 : 2013/05/15
******************************************************************************/
public interface ReportBusinessLogic {

/***************************************************************************
* 得到所有帐号的所有操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 总操作数量的列表
**************************************************************************/
public List<TotalOperations> getTotalOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的失败操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 失败操作数量的列表
**************************************************************************/
public List<TotalOperations> getFailedOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的总开票操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 总开票操作数量的列表
**************************************************************************/
public List<TotalOperations> getTotalOpenOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的开票失败操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 开票失败操作数量的列表
**************************************************************************/
public List<TotalOperations> getFailedOpenOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的更新票操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 更新票操作数量的列表
**************************************************************************/
public List<TotalOperations> getTotalUpdateOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的更新票操作失败的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 更新票操作失败数量的列表
**************************************************************************/
public List<TotalOperations> getFailedUpdateOperations(
String startDatetime, String endDatetime);

/***************************************************************************
* 得到所有帐号的添加附件的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 添加附件操作数量的列表
**************************************************************************/
public List<TotalOperations> getTotalAttachmentOperations(
String startDatetime, String endDatetime);

/***************************************************************************
* 得到所有帐号的添加附件失敗的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 添加附件操作失敗数量的列表
**************************************************************************/
public List<TotalOperations> getFailedAttachmentOperations(
String startDatetime, String endDatetime);

/***************************************************************************
* 得到所有帐号的取票一览操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 取票一览操作数量的列表
**************************************************************************/
public List<TotalOperations> getTotalListOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的取票一览失败操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 取票一览失败操作数量的列表
**************************************************************************/
public List<TotalOperations> getFailedListOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的查看票详细操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 查看票详细操作数量的列表
**************************************************************************/
public List<TotalOperations> getTotalViewOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的查看票详细失败操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 查看票详细失败操作数量的列表
**************************************************************************/
public List<TotalOperations> getFailedViewOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的再次打开票操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 再次打开票操作数量的列表
**************************************************************************/
public List<TotalOperations> getTotalReopenOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的再次打开票操作失败的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 再次打开票操作失败数量的列表
**************************************************************************/
public List<TotalOperations> getFailedReopenOperations(
String startDatetime, String endDatetime);

/***************************************************************************
* 得到所有帐号的关票操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 关票操作数量的列表
**************************************************************************/
public List<TotalOperations> getTotalCloseOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的关票操作失败的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 关票操作失败数量的列表
**************************************************************************/
public List<TotalOperations> getFailedCloseOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的聊天操作的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 聊天操作数量的列表
**************************************************************************/
public List<TotalOperations> getTotalChatOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 得到所有帐号的聊天操作失败的数量情报
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 聊天操作数量失败的列表
**************************************************************************/
public List<TotalOperations> getFailedChatOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 按天统计总操作数量
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 按天统计总操作数量的列表
**************************************************************************/
public List<OperationsDaily> getTotalDailyOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 按天统计失败操作数量
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 按天统计失败操作数量的列表
**************************************************************************/
public List<OperationsDaily> getFailedDailyOperations(String startDatetime,
String endDatetime);

/***************************************************************************
* 按天统计总开票操作数量
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 按天统计总开票操作数量的列表
**************************************************************************/
public List<OperationsDaily> getTotalDailyOpen(String startDatetime,
String endDatetime);

/***************************************************************************
* 按天统计开票失败操作数量
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 按天统计开票失败操作数量的列表
**************************************************************************/
public List<OperationsDaily> getFailedDailyOpen(String startDatetime,
String endDatetime);

/***************************************************************************
* 按天统计每个帐号总操作数量
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 按天统计每个帐号总操作数量的列表
**************************************************************************/
public List<OperationsDailyByAccount> getTotalDailyByAccountOperations(
String startDatetime, String endDatetime);

/***************************************************************************
* 按天统计每个帐号失败操作数量
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 按天统计每个帐号失败操作数量的列表
**************************************************************************/
public List<OperationsDailyByAccount> getFailedDailyByAccountOperations(
String startDatetime, String endDatetime);

/***************************************************************************
* 按天统计每个帐号开票操作数量
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 按天统计每个帐号开票操作数量的列表
**************************************************************************/
public List<OperationsDailyByAccount> getTotalDailyByAccountOpen(
String startDatetime, String endDatetime);

/***************************************************************************
* 按天统计每个帐号开票失败操作数量
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 按天统计每个帐号开票失败操作数量的列表
**************************************************************************/
public List<OperationsDailyByAccount> getFailedDailyByAccountOpen(
String startDatetime, String endDatetime);

/***************************************************************************
* 统计各个帐号开票操作响应时间
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 统计各个帐号开票操作响应时间的列表
**************************************************************************/
public List<OpenTicketRespTimeByAccount> getOpenTicketRespTime(
String startDatetime, String endDatetime);

/***************************************************************************
* 统计各个帐号开票操作响应时间小于等于5秒的操作数
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 统计各个帐号开票操作响应时间小于等于5秒操作数的列表
**************************************************************************/
public List<TotalOperations> getLessEqual5SecOpers(String startDatetime,
String endDatetime);

/***************************************************************************
* 统计各个帐号开票操作响应时间大于5秒小于等于15秒的操作数
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 统计各个帐号开票操作响应时间大于5秒小于等于15秒操作数的列表
**************************************************************************/
public List<TotalOperations> getLarger5SecAndLessEqual15SecOpers(
String startDatetime, String endDatetime);

/***************************************************************************
* 统计各个帐号开票操作响应时间大于15秒小于等于30秒的操作数
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 统计各个帐号开票操作响应时间大于15秒小于等于30秒操作数的列表
**************************************************************************/
public List<TotalOperations> getLarger15SecAndLessEqual30SecOpers(
String startDatetime, String endDatetime);

/***************************************************************************
* 统计各个帐号开票操作响应时间大于30秒的操作数
*
* @param startDatetime
*            报表统计开始日
* @param endDatetime
*            报表统计终了日
* @return 统计各个帐号开票操作响应时间大于30秒操作数的列表
**************************************************************************/
public List<TotalOperations> getLarger30SecOpers(String startDatetime,
String endDatetime);
}


业务逻辑层接口实现类代码:
package com.ibm.report.blogic;

import java.util.List;

import com.ibm.report.dao.ReportDBAccess;
import com.ibm.report.dao.ReportDBAccessImpl;
import com.ibm.report.dto.InputParam;
import com.ibm.report.dto.OpenTicketRespTimeByAccount;
import com.ibm.report.dto.OperationsDaily;
import com.ibm.report.dto.OperationsDailyByAccount;
import com.ibm.report.dto.TotalOperations;

/******************************************************************************
* 报表产生的业务逻辑接口的实装类
*
* @author 杨康
* @version 1.0<BR/>
* <BR/>
*          作成 : 2013/05/15
******************************************************************************/
public class ReportBusinessLogicImpl implements ReportBusinessLogic {

    /** 定义获取所有帐号各种类型操作和总操作数量的接口 */
    private ReportDBAccess dbaccess = new ReportDBAccessImpl();

    /***************************************************************************
     * 得到所有帐号的所有操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 总操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getTotalOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到总操作数量的列表数据
        return dbaccess.getTotalOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的失败操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 失败操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getFailedOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到失败操作数量的列表数据
        return dbaccess.getFailedOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的总开票操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 总开票操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getTotalOpenOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到总开票操作数量的列表数据
        return dbaccess.getTotalOpenOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的开票失败操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 开票失败操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getFailedOpenOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到总开票操作数量的列表数据
        return dbaccess.getFailedOpenOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的更新票操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 更新票操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getTotalUpdateOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到更新票操作数量的列表数据
        return dbaccess.getTotalUpdateOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的更新票操作失败的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 更新票操作失败数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getFailedUpdateOperations(
            String startDatetime, String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到更新票操作失败数量的列表数据
        return dbaccess.getFailedUpdateOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的添加附件的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 添加附件操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getTotalAttachmentOperations(
            String startDatetime, String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到添加附件操作数量的列表数据
        return dbaccess.getTotalAttachmentOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的添加附件失敗的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 添加附件操作失敗数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getFailedAttachmentOperations(
            String startDatetime, String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到添加附件失败操作数量的列表数据
        return dbaccess.getFailedAttachmentOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的取票一览操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 取票一览操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getTotalListOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到取票一览操作数量的列表数据
        return dbaccess.getTotalListOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的取票一览失败操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 取票一览失败操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getFailedListOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到取票一览失败操作数量的列表数据
        return dbaccess.getFailedListOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的查看票详细操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 查看票详细操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getTotalViewOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到查看票详细情报操作数量的列表数据
        return dbaccess.getTotalViewOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的查看票详细失败操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 查看票详细失败操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getFailedViewOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到查看票详细情报失败操作数量的列表数据
        return dbaccess.getFailedViewOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的再次打开票操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 再次打开票操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getTotalReopenOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到再次打开票操作数量的列表数据
        return dbaccess.getTotalReopenOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的再次打开票操作失败的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 再次打开票操作失败数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getFailedReopenOperations(
            String startDatetime, String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到再次打开票失败操作数量的列表数据
        return dbaccess.getFailedReopenOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的关票操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 关票操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getTotalCloseOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到关票操作数量的列表数据
        return dbaccess.getTotalCloseOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的关票操作失败的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 关票操作失败数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getFailedCloseOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到关票操作失败数量的列表数据
        return dbaccess.getFailedCloseOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的聊天操作的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 聊天操作数量的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getTotalChatOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到聊天操作数量的列表数据
        return dbaccess.getTotalChatScriptOperations(input);
    }

    /***************************************************************************
     * 得到所有帐号的聊天操作失败的数量情报
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 聊天操作数量失败的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getFailedChatOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到聊天操作失败数量的列表数据
        return dbaccess.getFailedChatScriptOperations(input);
    }

    /***************************************************************************
     * 按天统计总操作数量
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 按天统计总操作数量的列表
     **************************************************************************/
    @Override
    public List<OperationsDaily> getTotalDailyOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到按天统计总操作数量的列表
        return dbaccess.getTotalDailyOperations(input);
    }

    /***************************************************************************
     * 按天统计失败操作数量
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 按天统计失败操作数量的列表
     **************************************************************************/
    @Override
    public List<OperationsDaily> getFailedDailyOperations(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到按天统计失败操作数量的列表
        return dbaccess.getFailedDailyOperations(input);
    }

    /***************************************************************************
     * 按天统计总开票操作数量
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 按天统计总开票操作数量的列表
     **************************************************************************/
    @Override
    public List<OperationsDaily> getTotalDailyOpen(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到按天统计开票操作数量的列表
        return dbaccess.getTotalDailyOpen(input);
    }

    /***************************************************************************
     * 按天统计开票失败操作数量
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 按天统计开票失败操作数量的列表
     **************************************************************************/
    @Override
    public List<OperationsDaily> getFailedDailyOpen(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到按天统计开票失败操作数量的列表
        return dbaccess.getFailedDailyOpen(input);
    }

    /***************************************************************************
     * 按天统计每个帐号总操作数量
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 按天统计每个帐号总操作数量的列表
     **************************************************************************/
    @Override
    public List<OperationsDailyByAccount> getTotalDailyByAccountOperations(
            String startDatetime, String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到按天每个统计总操作数量的列表
        return dbaccess.getTotalDailyByAccountOperations(input);
    }

    /***************************************************************************
     * 按天统计每个帐号失败操作数量
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 按天统计每个帐号失败操作数量的列表
     **************************************************************************/
    @Override
    public List<OperationsDailyByAccount> getFailedDailyByAccountOperations(
            String startDatetime, String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到按天每个帐户统计失败操作数量的列表
        return dbaccess.getFailedDailyByAccountOperations(input);
    }

    /***************************************************************************
     * 按天统计每个帐号开票操作数量
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 按天统计每个帐号开票操作数量的列表
     **************************************************************************/
    @Override
    public List<OperationsDailyByAccount> getTotalDailyByAccountOpen(
            String startDatetime, String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到按天每个帐户统计开票操作数量的列表
        return dbaccess.getTotalDailyByAccountOpen(input);
    }

    /***************************************************************************
     * 按天统计每个帐号开票失败操作数量
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 按天统计每个帐号开票失败操作数量的列表
     **************************************************************************/
    @Override
    public List<OperationsDailyByAccount> getFailedDailyByAccountOpen(
            String startDatetime, String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到按天每个帐户统计开票失败操作数量的列表
        return dbaccess.getFailedDailyByAccountOpen(input);
    }

    /***************************************************************************
     * 统计各个帐号开票操作响应时间
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 统计各个帐号开票操作响应时间的列表
     **************************************************************************/
    @Override
    public List<OpenTicketRespTimeByAccount> getOpenTicketRespTime(
            String startDatetime, String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到各个帐号开票操作响应时间的列表
        return dbaccess.getOpenResponseTime(input);
    }

    /***************************************************************************
     * 统计各个帐号开票操作响应时间小于等于5秒的操作数
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 统计各个帐号开票操作响应时间小于等于5秒操作数的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getLessEqual5SecOpers(String startDatetime,
            String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到各个帐号开票操作响应时间小于等于5秒操作数的列表
        return dbaccess.getLessEqual5SecOpers(input);
    }

    /***************************************************************************
     * 统计各个帐号开票操作响应时间大于5秒小于等于15秒的操作数
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 统计各个帐号开票操作响应时间大于5秒小于等于15秒操作数的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getLarger5SecAndLessEqual15SecOpers(
            String startDatetime, String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到各个帐号开票操作响应时间大于5秒小于等于15秒操作数的列表
        return dbaccess.getLarger5SecAndLessEqual15SecOpers(input);
    }

    /***************************************************************************
     * 统计各个帐号开票操作响应时间大于15秒小于等于30秒的操作数
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 统计各个帐号开票操作响应时间大于15秒小于等于30秒操作数的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getLarger15SecAndLessEqual30SecOpers(
            String startDatetime, String endDatetime) {
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到各个帐号开票操作响应时间大于15秒小于等于30秒操作数的列表
        return dbaccess.getLarger15SecAndLessEqual30SecOpers(input);
    }

    /***************************************************************************
     * 统计各个帐号开票操作响应时间大于30秒的操作数
     *
     * @param startDatetime
     *            报表统计开始日
     * @param endDatetime
     *            报表统计终了日
     * @return 统计各个帐号开票操作响应时间大于30秒操作数的列表
     **************************************************************************/
    @Override
    public List<TotalOperations> getLarger30SecOpers(String startDatetime,
            String endDatetime) {
   
        // 用户输入参数对象
        InputParam input = new InputParam();
        input.setStartDatetime(startDatetime);
        input.setEndDatetime(endDatetime);

        // 调用数据访问层,得到各个帐号开票操作响应时间大于30秒操作数的列表
        return dbaccess.getLarger30SecOpers(input);
    }

}

数据访问层接口:
package com.ibm.report.dao;

import java.util.List;

import com.ibm.report.dto.InputParam;
import com.ibm.report.dto.OpenTicketRespTimeByAccount;
import com.ibm.report.dto.OperationsDaily;
import com.ibm.report.dto.OperationsDailyByAccount;
import com.ibm.report.dto.TotalOperations;

/******************************************************************************
* 获取所有帐号各种类型操作和总操作数量的接口
*
* @author 杨康
* @version 1.0<BR/>
* <BR/>
*          作成 : 2013/05/15
******************************************************************************/
public interface ReportDBAccess {

    /***************************************************************************
     * 获取各个Account的各自的总的操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 总操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getTotalOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的失败的操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 总失败操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getFailedOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的总开票的操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 总开票操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getTotalOpenOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的开票失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 开票失败操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getFailedOpenOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的总更新票操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 总更新票操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getTotalUpdateOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的更新票失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 更新票失败操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getFailedUpdateOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的添加附件操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 添加附件操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getTotalAttachmentOperations(
            InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的添加附件失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 添加附件失败操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getFailedAttachmentOperations(
            InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的取票一览操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 取票一览操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getTotalListOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的取票一览失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 取票一览操作失败数量的列表
     **************************************************************************/
    public List<TotalOperations> getFailedListOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的察看票详细情报操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 察看票详细操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getTotalViewOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的察看票详细情报失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 察看票详细失败操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getFailedViewOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的票再次打开操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 票再次打开操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getTotalReopenOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的票再次打开失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 票再次打开操作失败数量的列表
     **************************************************************************/
    public List<TotalOperations> getFailedReopenOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的关票操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 关票操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getTotalCloseOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的关票操作失败数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 关票操作失败数量的列表
     **************************************************************************/
    public List<TotalOperations> getFailedCloseOperations(InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的聊天操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 聊天操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getTotalChatScriptOperations(
            InputParam inputparam);

    /***************************************************************************
     * 获取各个Account的各自的聊天操作失败数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 聊天操作失败数量的列表
     **************************************************************************/
    public List<TotalOperations> getFailedChatScriptOperations(
            InputParam inputparam);

    /***************************************************************************
     * 按天统计总操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计总操作数量的列表
     **************************************************************************/
    public List<OperationsDaily> getTotalDailyOperations(InputParam inputparam);

    /***************************************************************************
     * 按天统计失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计失败数量的列表
     **************************************************************************/
    public List<OperationsDaily> getFailedDailyOperations(InputParam inputparam);

    /***************************************************************************
     * 按天统计总开票操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计总开票操作数量的列表
     **************************************************************************/
    public List<OperationsDaily> getTotalDailyOpen(InputParam inputparam);

    /***************************************************************************
     * 按天统计开票失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计开票失败操作数量的列表
     **************************************************************************/
    public List<OperationsDaily> getFailedDailyOpen(InputParam inputparam);

    /***************************************************************************
     * 按天统计各个帐号的总操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计各个帐号的总操作数量的列表
     **************************************************************************/
    public List<OperationsDailyByAccount> getTotalDailyByAccountOperations(
            InputParam inputparam);

    /***************************************************************************
     * 按天统计各个帐号的失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计各个帐号的失败操作数量的列表
     **************************************************************************/
    public List<OperationsDailyByAccount> getFailedDailyByAccountOperations(
            InputParam inputparam);

    /***************************************************************************
     * 按天统计各个帐号的开票操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计各个帐号的开票操作数量的列表
     **************************************************************************/
    public List<OperationsDailyByAccount> getTotalDailyByAccountOpen(
            InputParam inputparam);

    /***************************************************************************
     * 按天统计各个帐号的开票失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计各个帐号的开票失败操作数量的列表
     **************************************************************************/
    public List<OperationsDailyByAccount> getFailedDailyByAccountOpen(
            InputParam inputparam);

    /***************************************************************************
     * 统计各个帐号开票操作响应时间
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 统计各个帐号开票操作响应时间的列表
     **************************************************************************/
    public List<OpenTicketRespTimeByAccount> getOpenResponseTime(
            InputParam inputparam);

    /***************************************************************************
     * 统计各个帐号开票操作响应时间小于等于5秒的操作数
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 开票操作响应时间小于等于5秒操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getLessEqual5SecOpers(InputParam inputparam);

    /***************************************************************************
     * 统计各个帐号开票操作响应时间大于5秒小于等于15秒的操作数
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 开票操作响应时间大于5秒小于等于15秒操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getLarger5SecAndLessEqual15SecOpers(
            InputParam inputparam);

    /***************************************************************************
     * 统计各个帐号开票操作响应时间大于15秒小于等于30秒的操作数
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 开票操作响应时间大于15秒小于等于30秒操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getLarger15SecAndLessEqual30SecOpers(
            InputParam inputparam);

    /***************************************************************************
     * 统计各个帐号开票操作响应时间大于30秒的操作数
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 开票操作响应时间大于30秒操作数量的列表
     **************************************************************************/
    public List<TotalOperations> getLarger30SecOpers(InputParam inputparam);
}

数据访问层接口的实现类:
package com.ibm.report.dao;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibm.report.dto.InputParam;
import com.ibm.report.dto.OpenTicketRespTimeByAccount;
import com.ibm.report.dto.OperationsDaily;
import com.ibm.report.dto.OperationsDailyByAccount;
import com.ibm.report.dto.TotalOperations;

/******************************************************************************
* 获取所有帐号各种类型操作和总操作数量的接口的实现类
*
* @author 杨康
* @version 1.0<BR/>
* <BR/>
*          作成 : 2013/05/15
******************************************************************************/
public class ReportDBAccessImpl implements ReportDBAccess {

    /** ibatis的SQL映射客户端对象 */
    private static SqlMapClient sqlMapClient = null;

    /** 读取ibatis配置信息,并初始化SQL映射客户端对象 */
    static {
        try {
            Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");

            sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);

            reader.close();
            System.out.println("database connection successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /***************************************************************************
     * 获取各个Account的各自的总的操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 总操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getTotalOperations(InputParam inputparam) {
        List<TotalOperations> totalOperLst = null;
        try {
            totalOperLst = sqlMapClient.queryForList("total_operations",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return totalOperLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的失败的操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 总失败操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getFailedOperations(InputParam inputparam) {
        List<TotalOperations> failedOperLst = null;
        try {
            failedOperLst = sqlMapClient.queryForList("failed_operations",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return failedOperLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的总开票的操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 总开票操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getTotalOpenOperations(InputParam inputparam) {
        List<TotalOperations> totalOpenLst = null;
        try {
            totalOpenLst = sqlMapClient.queryForList("total_open", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return totalOpenLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的开票失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 开票失败操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getFailedOpenOperations(InputParam inputparam) {
        List<TotalOperations> failedOpenLst = null;
        try {
            failedOpenLst = sqlMapClient
                    .queryForList("failed_open", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return failedOpenLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的总更新票操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 总更新票操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getTotalUpdateOperations(InputParam inputparam) {
        List<TotalOperations> totalUpdateLst = null;
        try {
            totalUpdateLst = sqlMapClient.queryForList("total_update",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return totalUpdateLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的更新票失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 更新票失败操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getFailedUpdateOperations(InputParam inputparam) {
        List<TotalOperations> failedUpdateLst = null;
        try {
            failedUpdateLst = sqlMapClient.queryForList("failed_update",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return failedUpdateLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的添加附件操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 添加附件操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getTotalAttachmentOperations(
            InputParam inputparam) {
        List<TotalOperations> totalAttachmentLst = null;
        try {
            totalAttachmentLst = sqlMapClient.queryForList("total_attachment",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return totalAttachmentLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的添加附件失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 添加附件失败操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getFailedAttachmentOperations(
            InputParam inputparam) {
        List<TotalOperations> failedAttachmentLst = null;
        try {
            failedAttachmentLst = sqlMapClient.queryForList(
                    "failed_attachment", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return failedAttachmentLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的取票一览操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 取票一览操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getTotalListOperations(InputParam inputparam) {
        List<TotalOperations> totalGetTicketLst = null;
        try {
            totalGetTicketLst = sqlMapClient.queryForList("total_list",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return totalGetTicketLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的取票一览失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 取票一览操作失败数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getFailedListOperations(InputParam inputparam) {
        List<TotalOperations> failedGetTicketLst = null;
        try {
            failedGetTicketLst = sqlMapClient.queryForList("failed_list",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return failedGetTicketLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的察看票详细情报操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 察看票详细操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getTotalViewOperations(InputParam inputparam) {
        List<TotalOperations> totalViewLst = null;
        try {
            totalViewLst = sqlMapClient.queryForList("total_view", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return totalViewLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的察看票详细情报失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 察看票详细失败操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getFailedViewOperations(InputParam inputparam) {
        List<TotalOperations> failedViewLst = null;
        try {
            failedViewLst = sqlMapClient
                    .queryForList("failed_view", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return failedViewLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的票再次打开操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 票再次打开操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getTotalReopenOperations(InputParam inputparam) {
        List<TotalOperations> totalReopenLst = null;
        try {
            totalReopenLst = sqlMapClient.queryForList("total_reopen",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return totalReopenLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的票再次打开失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 票再次打开操作失败数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getFailedReopenOperations(InputParam inputparam) {
        List<TotalOperations> failedReopenLst = null;
        try {
            failedReopenLst = sqlMapClient.queryForList("failed_reopen",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return failedReopenLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的关票操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 关票操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getTotalCloseOperations(InputParam inputparam) {
        List<TotalOperations> totalCloseLst = null;
        try {
            totalCloseLst = sqlMapClient
                    .queryForList("total_close", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return totalCloseLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的关票操作失败数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 关票操作失败数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getFailedCloseOperations(InputParam inputparam) {
        List<TotalOperations> failedCloseLst = null;
        try {
            failedCloseLst = sqlMapClient.queryForList("failed_close",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return failedCloseLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的聊天操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 聊天操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getTotalChatScriptOperations(
            InputParam inputparam) {
        List<TotalOperations> totalchatLst = null;
        try {
            totalchatLst = sqlMapClient.queryForList("total_chat_script",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return totalchatLst;
    }

    /***************************************************************************
     * 获取各个Account的各自的聊天操作失败数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 聊天操作失败数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getFailedChatScriptOperations(
            InputParam inputparam) {
        List<TotalOperations> failedchatLst = null;
        try {
            failedchatLst = sqlMapClient.queryForList("failed_chat_script",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return failedchatLst;
    }

    /***************************************************************************
     * 按天统计总操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计总操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<OperationsDaily> getTotalDailyOperations(InputParam inputparam) {
        List<OperationsDaily> totalDailyOperLst = null;
        try {
            totalDailyOperLst = sqlMapClient.queryForList(
                    "total_operations_daily", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<OperationsDaily>();
        }
        return totalDailyOperLst;
    }

    /***************************************************************************
     * 按天统计失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计失败数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<OperationsDaily> getFailedDailyOperations(InputParam inputparam) {
        List<OperationsDaily> failedDailyOperLst = null;
        try {
            failedDailyOperLst = sqlMapClient.queryForList(
                    "failed_operations_daily", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<OperationsDaily>();
        }
        return failedDailyOperLst;
    }

    /***************************************************************************
     * 按天统计总开票操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计总开票操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<OperationsDaily> getTotalDailyOpen(InputParam inputparam) {
        List<OperationsDaily> totalOpenDailyLst = null;
        try {
            totalOpenDailyLst = sqlMapClient.queryForList("total_open_daily",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<OperationsDaily>();
        }
        return totalOpenDailyLst;
    }

    /***************************************************************************
     * 按天统计开票失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计开票失败操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<OperationsDaily> getFailedDailyOpen(InputParam inputparam) {
        List<OperationsDaily> failedOpenDailyLst = null;
        try {
            failedOpenDailyLst = sqlMapClient.queryForList("failed_open_daily",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<OperationsDaily>();
        }
        return failedOpenDailyLst;
    }

    /***************************************************************************
     * 按天统计各个帐号的总操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计各个帐号的总操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<OperationsDailyByAccount> getTotalDailyByAccountOperations(
            InputParam inputparam) {
        List<OperationsDailyByAccount> totalDailyByAccOperLst = null;
        try {
            totalDailyByAccOperLst = sqlMapClient.queryForList(
                    "total_operations_daily_account", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<OperationsDailyByAccount>();
        }
        return totalDailyByAccOperLst;
    }

    /***************************************************************************
     * 按天统计各个帐号的失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计各个帐号的失败操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<OperationsDailyByAccount> getFailedDailyByAccountOperations(
            InputParam inputparam) {
        List<OperationsDailyByAccount> failedDailyByAccOperLst = null;
        try {
            failedDailyByAccOperLst = sqlMapClient.queryForList(
                    "failed_operations_daily_account", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<OperationsDailyByAccount>();
        }
        return failedDailyByAccOperLst;
    }

    /***************************************************************************
     * 按天统计各个帐号的开票操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计各个帐号的开票操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<OperationsDailyByAccount> getTotalDailyByAccountOpen(
            InputParam inputparam) {
        List<OperationsDailyByAccount> totalDailyByAccOpenLst = null;
        try {
            totalDailyByAccOpenLst = sqlMapClient.queryForList(
                    "total_open_daily_account", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<OperationsDailyByAccount>();
        }
        return totalDailyByAccOpenLst;
    }

    /***************************************************************************
     * 按天统计各个帐号的开票失败操作数量
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 按天统计各个帐号的开票失败操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<OperationsDailyByAccount> getFailedDailyByAccountOpen(
            InputParam inputparam) {
        List<OperationsDailyByAccount> failedDailyByAccOpenLst = null;
        try {
            failedDailyByAccOpenLst = sqlMapClient.queryForList(
                    "failed_open_daily_account", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<OperationsDailyByAccount>();
        }
        return failedDailyByAccOpenLst;
    }

    /***************************************************************************
     * 统计各个帐号开票操作响应时间
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 统计各个帐号开票操作响应时间的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<OpenTicketRespTimeByAccount> getOpenResponseTime(
            InputParam inputparam) {
        List<OpenTicketRespTimeByAccount> openRespTimeLst = null;
        try {
            openRespTimeLst = sqlMapClient.queryForList(
                    "response_time_for_open", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<OpenTicketRespTimeByAccount>();
        }
        return openRespTimeLst;
    }

    /***************************************************************************
     * 统计各个帐号开票操作响应时间小于等于5秒的操作数
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 开票操作响应时间小于等于5秒操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getLessEqual5SecOpers(InputParam inputparam) {
        List<TotalOperations> lessEqual5SecOperLst = null;
        try {
            lessEqual5SecOperLst = sqlMapClient.queryForList(
                    "less_equal_5_sec", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return lessEqual5SecOperLst;
    }

    /***************************************************************************
     * 统计各个帐号开票操作响应时间大于5秒小于等于15秒的操作数
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 开票操作响应时间大于5秒小于等于15秒操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getLarger5SecAndLessEqual15SecOpers(
            InputParam inputparam) {
        List<TotalOperations> larger5lessEqual15SecOperLst = null;
        try {
            larger5lessEqual15SecOperLst = sqlMapClient.queryForList(
                    "larger_5_less_equal_15_sec", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return larger5lessEqual15SecOperLst;
    }

    /***************************************************************************
     * 统计各个帐号开票操作响应时间大于15秒小于等于30秒的操作数
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 开票操作响应时间大于15秒小于等于30秒操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getLarger15SecAndLessEqual30SecOpers(
            InputParam inputparam) {
        List<TotalOperations> larger15lessEqual30SecOperLst = null;
        try {
            larger15lessEqual30SecOperLst = sqlMapClient.queryForList(
                    "larger_15_less_equal_30_sec", inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return larger15lessEqual30SecOperLst;
    }

    /***************************************************************************
     * 统计各个帐号开票操作响应时间大于30秒的操作数
     *
     * @param inputparam
     *            输入参数(统计的开始日和终了日)
     * @return 开票操作响应时间大于30秒操作数量的列表
     **************************************************************************/
    @SuppressWarnings("unchecked")
    @Override
    public List<TotalOperations> getLarger30SecOpers(InputParam inputparam) {
        List<TotalOperations> larger30SecOperLst = null;
        try {
            larger30SecOperLst = sqlMapClient.queryForList("larger_30_sec",
                    inputparam);
        } catch (SQLException e) {
            System.out.println("database query failure:" + e.getMessage());
            return new ArrayList<TotalOperations>();
        }
        return larger30SecOperLst;
    }

}



   
分享到:
评论

相关推荐

    基于struts2 spring ibatis poi开发的导出Excel实例

    本实例将详细介绍如何利用Struts2、Spring和iBatis框架,结合Apache POI库来实现这一功能。 1. **Struts2框架**: Struts2是一款强大的MVC(模型-视图-控制器)框架,用于构建可维护性高、结构清晰的Java Web应用...

    Spring集成struts2、ibatis、dwr、poi实现的demo

    使用Spring集成struts2、ibatis、poi实现的增删改查功能,包括采用jquery实现的无刷新查询机分页、dwr实现的两级联动、以及采用poi动态将数据库数据导出成excel,本demo采用mysql数据库,附有建表sql,项目导入...

    利用ibatis 生成代码

    ### 利用ibatis框架生成代码:自动化与效率提升 ...通过细致的配置和合理的规划,利用ibatis框架生成代码能够显著提升开发效率,减少错误,并使团队能够将更多精力投入到业务逻辑的创新和优化上。

    打log4j日志-ibatis的sql输出

    在默认情况下,Ibatis并不会自动打印执行的SQL语句,但通过配置,我们可以使Ibatis在运行时输出SQL,这对于调试和性能分析非常有帮助。 要启用Ibatis的SQL日志记录,你需要在Ibatis的配置文件(通常为`mybatis-...

    ibatis 框架原理实现

    这个自己编写的Ibatis框架实现,虽然可能在功能上与官方版本有所差异,但基本原理和核心思想是一致的,即通过XML配置文件解耦SQL和Java代码,提供灵活的SQL映射和参数映射,以及方便的结果集映射,以此简化数据库...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    源码中的`org.apache.ibatis.plugin.Interceptor`和`org.apache.ibatis.plugin.Plugin`定义了插件的基本接口和实现方式。 八、动态SQL iBatis的动态SQL功能是其一大亮点,它允许在映射文件中编写条件语句,大大提高...

    ibatis与存储过程(带输出参数的应用)

    在IT行业中,数据库操作...总结来说,Ibatis支持与存储过程的集成,包括带输出参数的存储过程,这为开发者提供了更多的灵活性和效率。在实际开发中,正确理解和运用这一特性,可以有效地优化数据库操作,提升应用性能。

    Ibatis和Spring整合例子,实现增删改查功能

    Ibatis和Spring整合例子,实现增删改查功能.

    为 Ibatis 2.3.4 构建增强的 Apache Ibator 实体类生成工具

    Ibator is a code generator for iBATIS. Ibator will introspect a database table (or many tables) and will generate iBATIS artifacts that can be used to access the table(s). This abates some of the ...

    WAS上log4j日志不能输出(ibatis)sql语句解决办法[借鉴].pdf

    WAS 上 log4j 日志不能...解决 WAS 上 log4j 日志不能输出(ibatis)sql 语句的问题需要改变 WAS 的默认 LogFactory 实现类,使其使用 log4j 框架下的 LogFactory 实现类,并且需要正确配置 log4j.properties 文件。

    ibatis-core-3.0.jar org.apache.ibatis.annotations.Param

    `org.apache.ibatis.annotations.Param`是MyBatis中的一个重要注解,用于处理方法参数映射。 `@Param`注解主要用于SQL查询中的动态参数绑定,尤其是在动态SQL语句中。在MyBatis的映射文件或者Mapper接口中,当我们...

    ibatis实现数据的操作

    本篇文章将详细讲解如何利用Ibatis实现数据的连接、增加、查询、删除和修改(CRUD)操作,以及.xml文件在SQL映射中的作用。 首先,Ibatis是一个轻量级的Java ORM(对象关系映射)框架,它的核心理念是将SQL语句与...

    ibatis实现分页技术

    本篇将详细讲解如何利用Ibatis实现分页技术。 一、Ibatis简介 Ibatis是由Clinton Begin创建的一个SQL映射框架,它允许开发者将SQL语句直接写在配置文件中,通过Java接口与数据库进行交互,从而避免了传统的JDBC代码...

    ibatis实现原理解析

    4. 参数映射和结果映射:Ibatis支持动态参数和复杂的结果集映射,使得能够处理多种类型的输入参数和输出结果。 二、Ibatis的工作流程 1. 创建SqlSessionFactory:首先,通过SqlSessionFactoryBuilder,使用配置...

    ibatis总配置和映射配置.txt

    此文本主要是关于ibatis总配置和映射配置和一些需要主要的细节。

    Ibatis和Mybatis实例源码

    同时,通过对源码的分析,开发者可以更好地利用这两个框架提供的功能,例如:利用Mybatis的注解简化开发,或者使用Ibatis的动态SQL提高查询效率。 在实践中,IbatisExer和MybatisExer这两个项目提供了一系列的示例...

    ibatis 开发指南 和 iBATIS-SqlMaps两本图书

    《iBATIS-SqlMaps》则可能更侧重于实战和案例分析,通过具体的项目场景来展示如何设计和实施iBATIS解决方案,以及如何利用iBATIS实现更高效的数据操作。 两本书结合阅读,开发者可以从理论到实践全面掌握iBATIS框架...

    spring+ibatis+jsp集成实现数据库查询分页

    5. **使用JSP进行分页**:在JSP页面上,我们可以利用EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)库来实现分页。设置每页显示的记录数,计算总页数,以及处理上一页和下一页的链接。 ...

    修改ibatis源代码实现物理分页

    因此,我们需要通过修改Ibatis的源代码来实现物理分页,以提高查询效率。 物理分页是直接在数据库层面进行分页,避免了将所有数据加载到内存中的问题。下面我们将详细探讨如何在Ibatis中实现物理分页。 首先,了解...

Global site tag (gtag.js) - Google Analytics