java用模板来解析数据库,Java根据word模板生成word文档之后台解析和实现及部分代码(二)...

上一节贴出了web应用访问生成报告的action和service层的关键2个方法。并提到了调用了httpclient方法去执行报告服务器上的方法,从而返回数据流。下面主要是看报告服务器上的方法是怎么样的?

首先还是要说明一下,我们的web服务器都是linux环境,而之所以要用到httpclient和单独的报告服务器就是解决jacob不支持linux服务器的问题,所以将生成word报告的工作交给了报告服务器去做,这样无形也减轻了web应用服务器的压力,下面从httpclient·反问开始:

如:httpclient·的url如下:

String url = "http://" + this.getRepIpUrl() + "/infoDisposal/creatdocrep.action?docType=" + docType + "&projectId=" + projectId + "&userId=" + userId + "&workgroupId=" + workgroupId + "&evtcaseInstId=" + evtcaseInstId;

注:这里可以使用https也是可以的,看项目需要怎么配置

然后我跟着这个地址找到了报告服务器上的类和方法:

找到了creatDocRep.action

其方法如下:

/**

* 获取文件流对象

* @param inputPath

* @return InputStream 文件流对象

* @throws Exception

*/

public InputStream getInputStream(){

InputStream inputStream = null;

Map paramMap = new HashMap();

//获取模版类型

String docType = Struts2Utils.getParameter("docType");

Integer docType_i = 0;

if(CommonUtils.isNotNull(docType)){

docType_i = Integer.parseInt(docType);

}

//获取用户id

String userId = Struts2Utils.getParameter("userId");

//MAP对象参数

String projectId = Struts2Utils.getParameter("projectId");

//获取参数MAP

paramMap.put("project_id", projectId);

//获取组组编号参数

String workgroupId = Struts2Utils.getParameter("workgroupId");

if(CommonUtils.isNotNull(workgroupId) && !workgroupId.equals("null")){

paramMap.put("workgroupId", workgroupId);

}

//获取评估用例实例ID参数

String evtcaseInstId = Struts2Utils.getParameter("evtcaseInstId");

if(CommonUtils.isNotNull(evtcaseInstId)){

paramMap.put("evtcase_inst_id", evtcaseInstId);

}

if(CommonUtils.isNotNull(userId)){

paramMap.put("userId", userId);

}

//获取模版路径

String xmlTempUrl = xmlPathDef.getXmlPath(docType);

//设置打开word模版路径

String docPath = "";

//取得对应的模版路径

TTemplIdx templIdx = templIdxService.findFileByType(Integer.parseInt(XmlPathDef.TEMPL_IDX_1),Integer.parseInt(docType));

if(templIdx != null){

docPath = xmlPathDef.getPath(XmlPathDef.getBasePath() + templIdx.getTemplFileName());

try {

String outPath = infoSystemDescService.showWordRp(xmlTempUrl, docType_i, paramMap, docPath);

if(CommonUtils.isNotNull(outPath)){

inputStream = ServletActionContext.getServletContext().getResourceAsStream(xmlPathDef.getRealRepPath(outPath,projectId,docType,workgroupId));

}

} catch (Exception e) {

logger.error("没有创建成功");

e.printStackTrace();

}

}

return inputStream;

}

主要是调用了service层的方法,这里主要也是传入了相关的参数和取得了word报告模板路径,创建word文档,然后返回流文件。

然后再看service层方法:

/**

* 生成报告(doc文档)

* @param xmlTempUrl 模版路径

* @param docType 要生成的报告类型

* @param paramMap 报告参数

* @param webName 要展示的报告名称

* @param filename 报告文件名称

* @param docId 报告文件主键

* @param version 报告文件版本

* @param docPath 报告路径

* @param outRepPath 报告生成的路径

* @return

* @throws Exception

*/

public String showWordRp(String xmlTempUrl,Integer docType,Map paramMap,String docPath) throws Exception {

boolean boo= true;

String outRepPath = "";

try {

Long projectId = 0l;

Long workgroupId =0l;

String evtcaseInstId ="";

String userId ="";

Set> sets = paramMap.entrySet();

Iterator> it = sets.iterator();

while (it.hasNext()) {

Map.Entry entry = (Map.Entry) it.next();

String key = entry.getKey();

if(key.equals("project_id")){

projectId = Long.parseLong(entry.getValue().toString());

}else if(key.equals("workgroupId")){

workgroupId = Long.parseLong(entry.getValue().toString());

}else if(key.equals("evtcase_inst_id")){

evtcaseInstId = entry.getValue();

}else if(key.equals("userId")){

userId = entry.getValue();

}

}

//获取Web项目名称

//String webName = XmlPathDef.getWebName();

//获取文档表的最大主键值

String docId = this.getMaxDocId(docType, workgroupId.toString(),projectId.toString());

//获取最大版本

String version = this.getMaxVersion(userId, docType, projectId, workgroupId.toString(), evtcaseInstId);

//获取生成后的文档名称

String filename = this.getFileName(docType, projectId,docId,version);

//获取生成后的文档路径

outRepPath = xmlPathDef.getPath(xmlPathDef.getCreatWordPath(userId, docType.toString(), projectId.toString(),workgroupId.toString()) + filename);

//取得标签所对应的所有Map值

HashMap map = this.getAllData(xmlTempUrl, paramMap,docType.toString());

//省去了相关的业务操作..............

try {

System.out.println(" **************************报告类型为 ---> docType: "+ docType);

Export2WordService export2WordService = new Export2WordService();

//System.out.println("*************** 开始调用 export2Word 方法 ********** 执行到InfoSystemDescService类 ");

boo = export2WordService.export2Word(docPath,outRepPath,map,docType.toString(),tbmap,tbvalue,testMap0,projectId,collect_feedback_auditValueMap,sccDatas,contentMap,sccContentMap,proEvtType);

//System.out.println("*************** 调用 export2Word 完毕方法 开始去向数据库中添加数据 ********** 执行到InfoSystemDescService类 ");

if(boo){//说明创建报告成功,然后保存到数据库

if(CommonUtils.isNotNull(docId)){

//生成后的word文档对象

TProjDoc doc = new TProjDoc();

//设置需要保存的参数

doc.setDocId(docId);

doc.setDispName(repName);

doc.setFilename(filename);

doc.setPath(xmlPathDef.getRealRepPath(outRepPath,projectId.toString(),docType.toString(),workgroupId.toString()));//对应数据库中的相对路径

doc.setType(docType);

doc.setVersion(Integer.parseInt(version));

doc.setCreateTime(new Timestamp(System.currentTimeMillis()));

doc.setSuffix(Short.parseShort("2"));

TProject proj = new TProject();

proj.setProjectId(projectId);

doc.setTProject(proj);

doc.setUserId(userId);

doc.setWorkgroupId(workgroupId);

doc.setEvtcaseInstId(evtcaseInstId);

projDocDao.save(doc);

}

}else{

//如果没有创建成功就删除原来的文件

File file = new File(outRepPath);

file.delete();

}

} catch (Exception e) {

logger.error("创建 Word.Application 失败!" + e.getMessage());

}

} catch (Exception e) {

logger.error("创建报告失败!" + e.getMessage());

e.printStackTrace();

}

return outRepPath;

}

这里主要:

1.调用工具类来解析XML定义文档,并获取到数据集Map

2.调用jacob的封装类,根据相关的数据集生成word报告

3,一旦word穿件成功,就往数据库中写入一条记录

(未完待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值