1 药品目录导入
1.1 导入流程
将线下编辑好的excel导入系统中,从客户端导入服务端。
第一步:线下编辑导入文件
根据提前定义好的导入文件规则去定义,根据导入模块编写导入文件。
第二步:登陆系统,执行导入
将本地的文件上传到服务端
第三步:服务端程序解析导入文件内容
读文件过程。
1.2 HSSF读excel文件
支持97-03版本的excel。
使用HSSF读文件步骤:
第一步:创建一个workbook
//文件输入流
InputStream is = new FileInputStream("d:/test11.xls");
//创建hssf的workbook,将文件流传入workbook
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
第二步:读sheet
//得到workbook某个的sheet,numSheet是sheet 的序号,序号从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,将链接提供给用户下载。
 
                   
                   
                   
                   
                             
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   1325
					1325
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            