您的位置:首页 > 其它

yycg之药品目录导出(二)+系统参数配置

2015-11-05 22:49 323 查看

1.1     实现药品目录导出

1.1.1     需求:

药品目录导出功能,使用人:监督单位、医院、供货商

 

药品目录添加/导入/删除:监督单位

 

操作步骤:

 


1.1.2     分析导出方法

 

分析一个技术,需要进行技术预研,确定使用XSSF导出excel文件。

 

确定采用自动刷新:

SXSSFWorkbook wb = new SXSSFWorkbook(XXXX);(自动刷新)

XXXX:保持内存中有XXXX条记录,超过部分写入磁盘

 

 

对XSSF导出excel进行封装,写一个封装类,方便开发使用

 

ExcelExportSXXSSF.java

 

工具类的使用方法:使用util工程的ExcelExportSXXSSF类执行导出:

测试代码如下:

 

//导出文件存放的路径,并且是虚拟目录指向的路径
      StringfilePath =
"d:/upload/linshi/";
      //导出文件的前缀
      StringfilePrefix="ypxx";
      //-1表示关闭自动刷新,手动控制写磁盘的时机,其它数据表示多少数据在内存保存,超过的则写入磁盘
      int flushRows=100;
     
      //定义导出数据的title
      List<String>fieldNames=newArrayList<String>();
      fieldNames.add("流水号");
      fieldNames.add("通用名");
      fieldNames.add("价格");
     
      //告诉导出类数据list中对象的属性,让ExcelExportSXXSSF通过反射获取对象的值
      List<String>fieldCodes=newArrayList<String>();
      fieldCodes.add("bm");//药品流水号
      fieldCodes.add("mc");//通用名
      fieldCodes.add("price");//价格
     
     
     
      //注意:fieldCodes和fieldNames个数必须相同且属性和title顺序一一对应,这样title和内容才一一对应
     
     
      //开始导出,执行一些workbook及sheet等对象的初始创建
      ExcelExportSXXSSFexcelExportSXXSSF = ExcelExportSXXSSF.start(filePath,
"/upload/",filePrefix, fieldNames, fieldCodes, flushRows);
     
      //准备导出的数据,将数据存入list,且list中对象的字段名称必须是刚才传入ExcelExportSXXSSF的名称
      List<Ypxx>list = newArrayList<Ypxx>();
     
      Ypxxypxx1 = newYpxx("001","青霉素",
5);
      Ypxxypxx2 = newYpxx("002","感冒胶囊",
2.5f);
      list.add(ypxx1);
      list.add(ypxx2);
     
      //执行导出
      excelExportSXXSSF.writeDatasByObject(list);
      //输出文件,返回下载文件的http地址
      Stringwebpath = excelExportSXXSSF.exportFile();
     
      System.out.println(webpath);

 

操作步骤:

1、  将导出的文件的标题封装在List<String>

2、  将导出的数据对象的字段封装在List<String>,注意:字段和标题必须对象

3、  准备好导出文件存储的物理路径(服务器的物理路径)

4、  准备导出文件浏览的虚拟路径,此路径在tomcat配置虚拟目录

5、  调用ExcelExportSXXSSF的start方法开始导出

6、  调用 excelExportSXXSSF.writeDatasByObject方法将list数据传入,这时开始导出数据

7、  调用excelExportSXXSSF.exportFile();向磁盘写入文件

8、  通过excelExportSXXSSF.getFileAllPath()得导出文件的浏览地址

 

 

1.1.3     药品目录导出实现

 

l  Dao:

根据查询条件查询药品目录信息,确定查询内容:

 

ID 流水号   通用名  剂型  规格  转换系数   生产企业   商品名称   中标价  交易状态

 

 

使用逆向工程生成ypxx的mapper及po

指定列生成的java类型。将中标价格的类型转换为float

<table
schema=""
tableName="ypxx">
        
<!-- 指定字段生成类型 -->
         <columnOverride
column="zbjg"
javaType="java.lang.Float"/>
      </table>

 

自定义mapper 

创建YpxxMapperCustom.xml文件

Sql:

selectid,
       bm,
       mc,
       jx,
       gg,
       zhxs,
       scqymc,
       spmc,
       zbjg,
       jyzt,
       (select info
         
from dictinfo
        
where dictinfo.dictcode = ypxx.jyzt
          
and dictinfo.typecode =
'003') jyztmc
  from ypxx
where ypxx.bm=''(抽取sql
代码)

 

主查询表:ypxx

关联查询表:通过数据字典明细表查询交易状态对应的名称

 

public
interface
YpxxMapperCustom {
   //药品目录查询
   public List<YpxxCustom>findYpxxList(YpxxQueryVo ypxxQueryVo)
         throws Exception;
}

 

l  Service  

接口和mapper 一样

接口功能:药品目录查询

接口参数:查询条件

   //查询药品目录
   @Override
   public List<YpxxCustom>findYpxxList(YpxxQueryVo ypxxQueryVo)
         throws Exception {
 
      return
ypxxMapperCustom.findYpxxList(ypxxQueryVo);
   }
 

 

l  action

 

两个方法

导出页面展示;

//导出药品页面展示
   @RequestMapping("/exportYpxx")
   public String exportYpxx(Modelmodel)throwsException{
     
      //药品状态
      List<Dictinfo>jyztlist =systemConfigService.findDictinfoByType("003");
      //药品类别
      List<Dictinfo>yplblist =systemConfigService.findDictinfoByType("001");
     
      model.addAttribute("jyztlist",jyztlist);
      model.addAttribute("yplblist",yplblist);
     
      return
"/business/ypml/exportYpxx";
   }

导出功能提交:

调用封装类方法导出excel。

//导出数据提交
  
@RequestMapping("/exportYpxxSubmit")
   public
@ResponseBody SubmitResultInfoexportYpxxSubmit(YpxxQueryVo ypxxQueryVo)throws Exception{
      //
调用封装类执行导出
 
           
// 导出文件存放的路径,并且是虚拟目录指向的路径
           
//String filePath = "D:/java/tomcat/upload/temp/";
           
//改为从系统参数配置表获取参数值
            StringfilePath =
systemConfigService.findBasicinfoById("00301").getValue();
           
// 导出文件的前缀
            StringfilePrefix =
"ypxx";
           
// -1表示关闭自动刷新,手动控制写磁盘的时机,其它数据表示多少数据在内存保存,超过的则写入磁盘
            int flushRows = 100;
 
           
// 定义导出数据的title
            List<String>fieldNames =
newArrayList<String>();
            fieldNames.add("流水号");
            fieldNames.add("通用名");
            fieldNames.add("剂型");
            fieldNames.add("规格");
            fieldNames.add("转换系数");
            fieldNames.add("生产企业");
            fieldNames.add("商品名称");
            fieldNames.add("中标价格");
            fieldNames.add("交易状态");
 
           
// 告诉导出类数据list中对象的属性,让ExcelExportSXXSSF通过反射获取对象的值
            List<String>fieldCodes =
newArrayList<String>();
            fieldCodes.add("bm");//
药品流水号
            fieldCodes.add("mc");//
通用名
            fieldCodes.add("jx");
            fieldCodes.add("gg");
            fieldCodes.add("zhxs");
            fieldCodes.add("scqymc");
            fieldCodes.add("spmc");
            fieldCodes.add("zbjg");
            fieldCodes.add("jyztmc");
 
           
// 上边的代码可以优化为,将title和title对应的
pojo的属性,使用map存储
           
// ....
 
           
// 注意:fieldCodes和fieldNames个数必须相同且属性和title顺序一一对应,这样title和内容才一一对应
 
           
// 开始导出,执行一些workbook及sheet等对象的初始创建
            ExcelExportSXXSSFexcelExportSXXSSF = ExcelExportSXXSSF.start(filePath,
                  
"/pic/",filePrefix, fieldNames, fieldCodes, flushRows);
 
           
// 导出的数据通过service取出
            List<YpxxCustom>list =
ypxxService.findYpxxList(ypxxQueryVo);
 
           
// 执行导出
            excelExportSXXSSF.writeDatasByObject(list);
           
// 输出文件,返回下载文件的http地址,已经包括虚拟目录
            Stringwebpath = excelExportSXXSSF.exportFile();
 
            System.out.println(webpath);
 
            return ResultUtil.createSubmitResult(ResultUtil.createSuccess(
                   Config.MESSAGE, 313,
new Object[] {
                         list.size(),
                         webpath//下载地址
                   }));
   }
  

 

 

 

l  虚拟目录创建

 


虚拟目录:web请求路径

目标:将excel导出文件写到服务器的某个目录,用户通过客户端远程下载服务器上该目录的内容。

 

客户端从远程服务器上下载导出excel文件。

 

虚拟目录创建: 参考我的博客 :http://blog.csdn.net/u012373815/article/details/47206439

 

l  调试

在applicationContext-business-service.xml 注入service

<!--
药品目录 -->
<bean
id="ypxxService" 
class="yycg.business.service.impl.YpxxServiceImpl" 
>

 

Business下的mapper无法扫描到,修改applicationContext-base-dao.xml扫描器配置:

 <bean
class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <!--
配置扫描包路径,如果扫描多个包路径,中间使用半角逗号分隔也可以使用通配符  **-->
  <property
name="basePackage"
value="yycg.**.dao.mapper"/>
   <!--
配置SqlSessionFactory -->
   <property
name="sqlSessionFactoryBeanName"
value="sqlSessionFactory"/>
</bean>
 

2      系统参数配置

 

系统参数是什么?

 系统运行参数,一个系统运行所需要设置参数值。

 

由管理员登陆系统后台进行设置,



 

系统参数保存数据库BASICINFO

 

使用时,只需要根据BASICINFO表的id查询参数值。

 

在程序代码中,通过SystemConfigService,查询系统参数

   /**
    *
根据id获取系统配置信息
    */
   @Override
   public BasicinfofindBasicinfoById(String id)
throws Exception {
      return
basicinfoMapper.selectByPrimaryKey(id);
   }

 

 

使用方法:

//
导出文件存放的路径,并且是虚拟目录指向的路径
           
//String filePath = "D:/java/tomcat/upload/temp/";
           
//改为从系统参数配置表获取参数值
            String filePath =
systemConfigService.findBasicinfoById("00301").getValue();

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  导出excel