package com.example.expense.expensereport.web.servlet;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import DBstep.iMsgServer2000;
import com.example.expense.entity.ExpenseReport;
import com.example.expense.expensereport.service.ExpenseReportManager;
import com.norteksoft.product.util.ContextUtils;
public class WebPdf extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String METHOD_POST = "post";
private static final String LOAD_FILE = "LOADFILE";
private Log log = LogFactory.getLog(getClass());
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
DBstep.iMsgServer2000 msgServer = new DBstep.iMsgServer2000();
try {
if(METHOD_POST.equalsIgnoreCase(request.getMethod())) {
msgServer.Load(request);
processInfo(msgServer);
}else{
addErrorMsg(msgServer, "请使用Post方法");
}
} catch (Exception e) {
log.debug(e);
addErrorMsg(msgServer, "文件打开错误, 请联系管理员.");
}
msgServer.Send(response);
}
private void processInfo(iMsgServer2000 msgServer) throws IOException {
if ("DBSTEP".equalsIgnoreCase(msgServer.GetMsgByName("DBSTEP"))) { // 如果是合法的信息包
Long recordId = Long.parseLong(msgServer.GetMsgByName("RECORDID"));
String optionMessage = msgServer.GetMsgByName("OPTION");
if (LOAD_FILE.equalsIgnoreCase(optionMessage)) { // 查看文件
msgServer.MsgTextClear();
msgServer.MsgFileBody(loadFile(recordId)); // 将文件信息打包
msgServer.SetMsgByName("STATUS", "打开成功!"); // 设置状态信息
msgServer.MsgError(""); // 清除错误信息
}
}else{
addErrorMsg(msgServer, "客户端发送数据包错误!");
}
}
private byte[] loadFile(Long recordId) throws IOException{
ExpenseReportManager expenseReportManager = (ExpenseReportManager) ContextUtils.getBean("expenseReportManager");
ExpenseReport expenseReport = expenseReportManager.getExpenseReport(recordId);
return FileUtils.readFileToByteArray(new File(expenseReport.getFilePath()));
}
private void addErrorMsg(DBstep.iMsgServer2000 msgServer, String msg){
msgServer.MsgError(msg);
msgServer.MsgTextClear();
msgServer.MsgFileClear();
}
}