医药采购之药品目录导入

1      药品目录导入

1.1     导入流程

将线下编辑好的excel导入系统中,从客户端导入服务端。

 

第一步:线下编辑导入文件

   根据提前定义好的导入文件规则去定义,根据导入模块编写导入文件。

  

第二步:登陆系统,执行导入

   将本地的文件上传到服务端

第三步:服务端程序解析导入文件内容

   读文件过程。

 

1.2     HSSF读excel文件

支持97-03版本的excel。

 

使用HSSF读文件步骤:

 

第一步:创建一个workbook

//文件输入流

        InputStream is = new FileInputStream("d:/test11.xls");

        //创建hssfworkbook,将文件流传入workbook

       HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

 

第二步:读sheet

//得到workbook某个sheetnumSheetsheet 的序号,序号从0开始

HSSFSheet hssfSheet =hssfWorkbook.getSheetAt(numSheet);

 

第三步:读sheet中的行

//读取每一行数据 ,rowNum指定行下标0开始

HSSFRow hssfRow = hssfSheet.getRow(rowNum);

 

第四步:读单元格的数据

//读取一行中某个单元格内容,cellNum指定单元格的下标,从0开始

HSSFCell cell = hssfRow.getCell(cellNum);

//调用单元格的get方法

cell.getStringCellValue()

 

 

通过读大数据文件,导致内存溢出

 

 

 

优点:读取少数据,读取速度很快

 

缺点:读取大数据量,读取速度很慢,可能导致内存溢出

 

内存溢出原因,将流中的数据全部加载到内存,进行输出。

 

上边的读方式是用户驱动模式,由用户指定想获取数据。

 

1.3     HSSF事件驱动模式

 

 

事件驱动式,类似xml的sax解析。

 

需要实现HSSFListener接口。

 

原理:根据excel底层存储(07以版本采用xml存储,以下版本采用二进制)标签决定事件出发点。

目标:在解析完一行(row)数据时进行触发。

 

 

优点:读取大数据时,不会导致内存溢出

缺点:用户在解析数据时比较困难。读取数据时速度不快的,因为读取数据的同时根据每个标签进行事件触发。

 

 

 

1.4     HSSF事件驱动读取文件封装类

 

 

使用数据导入封装类方法:

 

第一步:实现HxlsOptRowsInterface(service)

根据具体业务需求,实现此接口

 

第二步:文件上传的action

 

第三步:在action调用工具类

使用HxlsRead工具类执行数据导入,需要上传文件

1      药品目录 导入功能开发

监督单位,卫生局,进行药品目录导入。

从省级平台导入的药品中标目录为什么进行修改、添加?

  因为省平台的药品目录 数据量很大,市平台不需要这么多数据,进行调整。

 

1.1     需求

用户线下按照导入文件模版编写excel文件(03 版本),将药品目录导入系统中。

需要自己定义一个导入模板

 

第一步:进入导入页面

内容包括:导入说明

 

1.2     实现

 

1.2.1     dao

向药品目录插入记录。


1.2.2     service

接口功能:药品目录导入

接口参数:要实现HxlsOptRowsInterface

实现:

校验导入的数据

校验通过调用dao插入操作。

 

 

//药品信息导入

public classYpxxImportServiceImpl implements HxlsOptRowsInterface {

 

   @Autowired YpxxMapper ypxxMapper;

  

   @Override

   public String optRows(int sheetIndex, int curRow,List<String> rowlist)

         throws Exception {

     

      try {

               

      //解析需要导入的数据。数据为一行数据下标从0开始

      //按照模版解析

      Stringmc=rowlist.get(0);//通用名

      Stringjx=rowlist.get(1);//剂型

      Stringgg=rowlist.get(2);//规格

      Stringzhxs=rowlist.get(3);//转换系数

      Stringzbjg=rowlist.get(4);//中标价格

      Stringscqymc=rowlist.get(5);//生产企业

      Stringspmc=rowlist.get(6);//商品名

      Stringjyzt=rowlist.get(7);//交易状态

      //进行校验

      //校验中标价格合法性

      //校验交易状态的合法性

      if(jyzt==null||(!jyzt.equals("1")&&!jyzt.equals("2")))

      {

         return "交易状态输入值不对,请输入1:正常,2:暂停";

      }

      //添加唯一校验

      //校验通用名、剂型、规格、转换系数、生产企业、商品名

      //思路:根据通用名、剂型、规格、转换系数、生产企业、商品名,查询,如果查询到记录,说明存在重复记录

      //.....

     

      //构建信息

      Ypxxypxx = newYpxx();

      ypxx.setId(UUIDBuild.getUUID());

      ypxx.setMc(mc);

      ypxx.setJx(jx);

      ypxx.setGg(gg);

      ypxx.setZhxs(zhxs);

      ypxx.setScqymc(scqymc);

      ypxx.setSpmc(spmc);

      ypxx.setZbjg(Float.parseFloat(zbjg));

      ypxx.setJyzt(jyzt);

      //调用mapper插入

      ypxxMapper.insert(ypxx);

      }catch(Exception e) {

         e.printStackTrace();

         return "导入失败!";

      }

      return "success";

   }

 

}

 

在applicationContext-business-service.xml配置

 

<!-- 供应商药品目录 -->

<bean id="ypmlService"class="yycg.business.service.impl.YpmlServiceImpl"/>

action

包括两个方法:

导入页面显示方法

  

导入提交方法:

   将文件上传到服务器(实现文件上传)

   调用HSSF事件驱动封装类,导入药品目录

  

  

要通过springmvc进行文件上传,需要在springmvc.xml配置文件上传的参数解析器。

<!-- 文件上传 -->

    <bean id="multipartResolver"

    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

       <!-- 设置上传文件的最大尺寸为5MB -->

       <property name="maxUploadSize">

           <value>5242880</value>

       </property>

    </bean>

 

1.2.3     页面

 

导入页面:

导入模版下载、

导入说明文字

导入文件上传选择组件

 

   <TABLE class="toptablegrid" border=1 cellSpacing=1 cellPadding=4

                   align=center>

                   <TBODY>

                     

                      <TR>

                         <TD height=30 align=right>导入说明:</TD>

                         <TD >

                         1、导入文件为Excel 97-2003版本,文件扩展名为.xls,如果使用高版本的Excel请另存为Excel 97-2003版本。

                         <br>2、点击 <a class="blue"href="${baseurl}template/ypxx_template.xls"><u>药品信息模板</u></a> 下载,并按照说明录入药品信息。

                         <br>3、导入文件内容填写完毕请在下方选择导入文件,点击 导入按钮。

                         </TD>

                      </TR>

                      <TR>

                         <TD height=30 align=right>选择导入文件</TD>

                         <TD class=category>

                         <input type="file"name="ypxximportfile" />            

                         </TD>

                      </TR>

                      <TR>

                        

                         <TD colspan=2  align=center class=category>

                            <a id="submitbtn"href="#" onclick="ypxximportsubmit()">导入</a>

                            <a id="closebtn"href="#" onclick="parent.closemodalwindow()">关闭</a>

                         </TD>

                      </TR>

                   </TBODY>

                </TABLE>

 

1.2.4     药品导入调试

 

导入结果中有导入成功数量、导入失败数量,导入失败原因。

 

导入失败原因如何展示给用户:

包括失败原因和具体失败记录。

 

为了方便用户对失败的记录重新修改后提交,在导入结果中,提示“导出失败记录的链接”,用户点击此链接导出失败记录(excel文件,符合excel导入模版),在失败记录文件最后一列为“失败原因”,显示具体失败原因。

对于失败记录处理:

第一步:用户下载失败记录文件(excel文件,符合excel导入模版),内容都是失败记录

第二步:用户参数此文件中失败原因列的内容,修改记录

第三步:将修改后失败记录文件,重新导入。

 

实现:

在导入action中,获取导入失败记录及导入失败原因。

在导入action中,将失败记录及失败原因导出一个excel,将链接提供给用户下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值