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

1.1     实现药品目录导出

1.1.1     需求:

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

 

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

 

操作步骤:

 yycg之药品目录导出(二)+系统参数配置_第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");//价格

     

     

     

      //注意:fieldCodesfieldNames个数必须相同且属性和title顺序一一对应,这样title和内容才一一对应

     

     

      //开始导出,执行一些workbooksheet等对象的初始创建

      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 interfaceYpxxMapperCustom {

   //药品目录查询

   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");

 

            // 上边的代码可以优化为,将titletitle对应的 pojo的属性,使用map存储

            // ....

 

            // 注意:fieldCodesfieldNames个数必须相同且属性和title顺序一一对应,这样title和内容才一一对应

 

            // 开始导出,执行一些workbooksheet等对象的初始创建

            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  虚拟目录创建

 yycg之药品目录导出(二)+系统参数配置_第2张图片

虚拟目录: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      系统参数配置

 

系统参数是什么?

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

 

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

yycg之药品目录导出(二)+系统参数配置_第3张图片

 

系统参数保存数据库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)