package com.tenwa.makeContract.util; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import jbo.com.tenwa.entity.comm.officetempalte.BF_TEMPLATE; import com.amarsoft.app.util.XMLDataUtil; import com.amarsoft.are.ARE; import com.amarsoft.are.jbo.BizObject; import com.amarsoft.are.jbo.BizObjectManager; import com.amarsoft.are.jbo.BizObjectQuery; import com.amarsoft.are.jbo.JBOFactory; import com.amarsoft.are.jbo.JBOTransaction; import com.amarsoft.are.log.Log; import com.amarsoft.awe.util.ASResultSet; import com.amarsoft.awe.util.SqlObject; import com.amarsoft.awe.util.Transaction; import com.tenwa.comm.exception.BusinessException; import com.tenwa.officetempalte.service.BaseParamService; import com.tenwa.officetempalte.service.CreateOfficeCallBackService; import com.tenwa.officetempalte.util.FileOperatorUtil; /** * 根据模板创建文件 * 外部调用 createOfficeByTemplateNo方法 * */ public class BqCreateOfficeService { public static Log logger=ARE.getLog(); JBOTransaction tx; Transaction Sqlca =null; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 public BqCreateOfficeService(JBOTransaction tx)throws Exception{ this.tx=tx; Sqlca=Transaction.createTransaction(tx); } /** * 根据模板编号和前台参数创建文件 * @param templateNo 模板编号 * @param model 前台参数 * * */ @SuppressWarnings("unchecked") public void createOfficeByTemplateNo(String templateNo,Mapmodel) throws Exception{ try{ //获取模板配置 BizObject templateConfig=this.getTemplateConfigByNo(templateNo); if(templateConfig==null){ throw new BusinessException("根据模板编号"+templateNo+"没有找到模板"); } //根据模板号和前台参数获取模板参数值 BaseParamService paramSer=new BaseParamService(tx); //模板处理类 Class callback=null; //获取模板处理类 if(templateConfig.getAttribute("callback").getString().length()>0){ try{ callback=(Class) Class.forName(templateConfig.getAttribute("callback").getString()); }catch(Exception e){ throw new BusinessException(templateConfig.getAttribute("templatename").getString()+"模板处理类未找到"); } }else if(templateConfig.getAttribute("templatetype").getString().equals("word")){//word默认模板处理类 callback=(Class) Class.forName("com.tenwa.makeContract.util.BqBaseWordCallBackServiceImpl"); }else if(templateConfig.getAttribute("templatetype").getString().equals("excel")){//excel 默认模板处理类 callback=(Class) Class.forName("com.tenwa.makeContract.util.BqBaseWordCallBackServiceImpl"); }else{ throw new BusinessException(templateConfig.getAttribute("templatename").getString()+"模板处理类未找到"); } //获取模板处理的方法 BqCreateOfficeCallBackService ser=callback.newInstance(); //所有运行前方法 ser.runAllBefore(templateConfig, model, tx); //获取模板创建条件 List> creatParam=this.getCreateTempalteParm(templateConfig, model); if(creatParam==null)//创建条件是空 默认创建一个文件 { Map paramMap=new HashMap(); Map pmap=paramSer.getParamValueByTemplateNo(templateConfig.getAttribute("id").getString(), model); paramMap.putAll(model); paramMap.putAll(pmap); ser.runBefore(templateConfig, paramMap, tx); ser.run(templateConfig, paramMap, tx); ser.runAfter(templateConfig, paramMap, tx); }else{//根据创建条件循环创建多个文件 Map map=new HashMap(); for(int i=0;i pmap=paramSer.getParamValueByTemplateNo(templateConfig.getAttribute("id").getString(), map); //创建条件得到的数据放到参数池里 标签获取数据可从参数池获取 ser.runBefore(templateConfig, map, tx); ser.run(templateConfig, map, tx); ser.runAfter(templateConfig, map, tx); } } }catch(BusinessException e){ e.printStackTrace(); throw e; } } /** * 获取模板配置 * */ public BizObject getTemplateConfigByNo(String templateNo)throws Exception{ BizObjectManager tempalteManger = JBOFactory.getBizObjectManager(BF_TEMPLATE.CLASS_NAME); tx.join(tempalteManger); BizObjectQuery tempalteMangerQuery = tempalteManger.createQuery("id=:id "); tempalteMangerQuery.setParameter("id",templateNo); BizObject tempalte = null; tempalte = tempalteMangerQuery.getSingleResult(true); return tempalte; } /** * 根据模板配置和参数 获取模板创建条件 * @throws Exception * */ public List> getCreateTempalteParm(BizObject templateConfig,Map model) throws Exception{ //获取创建条件 String sql=templateConfig.getAttribute("CreateCondition").getString(); if(null==sql||sql.length()>10) { List> params=new ArrayList>(); if(sql.indexOf(".xml")>0)//创建条件是xml 获取xml中的sql { String xmlPath=ARE.getProperty("PRD_HOME").replace("/WEB-INF", "")+sql; Map xmlfile=XMLDataUtil.readTableInfoFromXmlFile(xmlPath); sql=xmlfile.get("table_sql"); } MapparamMap=new HashMap(); //替换sql参数 sql=FileOperatorUtil.replaceSQLFixedParam(sql,model); paramMap=FileOperatorUtil.getSqlParam(sql, model); sql=sql.replaceAll("[{]", ""); sql=sql.replaceAll("[}]", ""); ASResultSet rs = null; try { SqlObject asql = new SqlObject(sql); if(null!=paramMap && paramMap.keySet().size()>0){ for(String key :paramMap.keySet()){ asql.setParameter(key, paramMap.get(key)); } } rs = Sqlca.getASResultSet(asql); } catch (Exception e1) { throw new BusinessException("加载数据执行"+sql+"时出错"); } while (rs.next()) { Map dataMap=FileOperatorUtil.getASResultSetToMap(rs); params.add(dataMap); } if(params.size()==0) { logger.info("模板"+templateConfig.getAttribute("templatename").getString()+"根据创建条件未生成文档"); } return params; } else { return null; } } }