027医疗项目-模块二:药品目录的导入导出-导入功能的Action的编写
前一篇文章我们写了Service层,这篇文章我们写一下Action层。
实现的功能:
1:我们先下载模板:然后按照模板里面的规则,插入数据。比如存在d盘。
我们之前在写导入功能的时候,已经写过了YpxxAction。我们继续在这个Ation中写。
思路:
我们要在Action中完成这么几个方法:
1:导入页面的显示方法:我们总是要有一个方法是能显示出导入功能页面的。
2:导入提交的方法:
将文件上传到服务器(实现文件的上传)
调用HSSF事件驱动封装类(Raed那个工具类),导入药品。
接下来我们具体讲一下怎么代码怎么实现:
首先我们要实现文件上传的话就要去用Springmvc的上传功能,在springmvc.xml中去配置。
如下:

我们之前写好了Service 我们在Action中要用这个Service的话,要先把这个类注入到Spring 容器中。所以我们修改applicationContext-base-service.xml代码:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd "> <!-- 用户管理 --> <bean id="userService" class="yycg.bae.service.impl.userServiceimpl"/>
<bean id="systemConfigService" class="yycg.bae.service.impl.SystemConfigServiceImpl"/>
<bean id="YpxxService" class="yycg.business.service.impl.YpxxServiceImpl"/> <!-- 这个是在药品导入数据库的action中注入的 -->
<bean id="HxlsOptRowsInterface" class="yycg.business.service.impl.YpxxImportServiceImpl"/>
</beans>
然后我们看Action的代码:
package yycg.business.action; import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; import yycg.base.pojo.po.Dictinfo;
import yycg.base.process.context.Config;
import yycg.base.process.result.ResultUtil;
import yycg.base.process.result.SubmitResultInfo;
import yycg.base.service.SystemConfigService;
import yycg.business.pojo.vo.YpxxCustom;
import yycg.business.pojo.vo.YpxxQueryVo;
import yycg.business.service.YpxxService;
import yycg.util.ExcelExportSXXSSF;
import yycg.util.HxlsOptRowsInterface;
import yycg.util.HxlsRead;
import yycg.util.UUIDBuild;
import yycg.util.Ypxx; @Controller
@RequestMapping("/ypml")
public class YpxxAction { @Autowired
YpxxService ypxxService;
@Autowired
private SystemConfigService systemConfigService;
@Autowired
private HxlsOptRowsInterface ypxximportserviceimpl; //导出页面的展示 @RequestMapping("/exportYpxx")
public String exPortYpxx(Model model) throws Exception
{
/**
* 这些数据查出来后填充到查询页面上。
*/
List<Dictinfo> yplblist=systemConfigService.findDictinfoByType("001");
model.addAttribute("yplblist", yplblist); List<Dictinfo> jyztlist=systemConfigService.findDictinfoByType("003");
model.addAttribute("jyztlist", jyztlist); return "/business/ypml/exportYpxx";
} //导出提交
@RequestMapping("/exportYpxxSubmit")
public @ResponseBody SubmitResultInfo exPortYpxxsubmit(YpxxQueryVo ypxxQueryVo)throws Exception
{
//查询到数据
List<YpxxCustom> list=ypxxService.findYpxxList(ypxxQueryVo); /** 导出文件存放物理路径
* @param fileWebPath
* 导出文件web下载路径
* @param filePrefix
* 导出文件名的前缀
* @param flushRows
* 存放在内存的数据量
* @param fieldNames
* 导出文件列标题
* @param fieldCodes
* 导出数据对象的字段名称
* @param flushRows*/
//导出文件存放的路径,并且是虚拟目录指向的路径
String filePath = "d:/upload/linshi/";
//导出文件的前缀
String filePrefix="ypxx";
//-1表示关闭自动刷新,手动控制写磁盘的时机,其它数据表示多少数据在内存保存,超过的则写入磁盘
int flushRows=100; //指导导出数据的title
List<String> fieldNames=new ArrayList<String>();
fieldNames.add("流水号");
fieldNames.add("通用名");
fieldNames.add("剂型");
fieldNames.add("规格");
fieldNames.add("转换系数 ");
fieldNames.add("生产企业");
fieldNames.add("商品名称");
fieldNames.add("中标价");
fieldNames.add("交易状态"); //告诉导出类数据list中对象的属性,让ExcelExportSXXSSF通过反射获取对象的值
List<String> fieldCodes=new ArrayList<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"); //注意:fieldCodes和fieldNames个数必须相同且属性和title顺序一一对应,这样title和内容才一一对应 //开始导出,执行一些workbook及sheet等对象的初始创建,以及表格建在哪里
//"/upload/"本来是服务器的磁盘目录,但是我们是一台机器做开发,所以见建立一个虚拟目录。
ExcelExportSXXSSF excelExportSXXSSF = ExcelExportSXXSSF.start(filePath, "/upload/", filePrefix, fieldNames, fieldCodes, flushRows); //准备导出的数据,将数据存入list,且list中对象的字段名称必须是刚才传入ExcelExportSXXSSF的名称 //执行导出,把数据导入到excel表
excelExportSXXSSF.writeDatasByObject(list); /*
* new Object[]{list.size(),excelExportSXXSSF.exportFile()}参数:一共导出的数据数量,.exportFile()导出文件。
*/
return ResultUtil.createSubmitResult(ResultUtil.createSuccess(Config.MESSAGE, 313, new Object[]{list.size(),excelExportSXXSSF.exportFile()})); }
//载入导入页面
@RequestMapping("/importypxx")
public String importypxx()throws Exception
{ return "/business/ypml/importypxx";
}
//提交按钮(导入数据库)
@RequestMapping("/importypxxsubmit")
public @ResponseBody SubmitResultInfo importypxxsubmit(@RequestParam MultipartFile ypxximportfile) throws Exception
{ String fileName_OriginalString=ypxximportfile.getOriginalFilename();
String fileName_new=UUIDBuild.getUUID()+fileName_OriginalString.substring(fileName_OriginalString.indexOf("."));
File targetFile=new File("d:/upload/"+fileName_new);
//如果这个路径不存在就创建这个路径
if(!targetFile.exists())
{ targetFile.mkdirs(); }
//将文件导入到磁盘
ypxximportfile.transferTo(targetFile); //得到物理的路径 String filepath=targetFile.getAbsolutePath();
//将导入的service对象设置到HxlsRead中
HxlsRead hxlsRead=new HxlsRead(filepath, 1, ypxximportserviceimpl);
hxlsRead.process(); return ResultUtil.createSubmitResult(ResultUtil.createSuccess(Config.MESSAGE, 906, null));
} }
027医疗项目-模块二:药品目录的导入导出-导入功能的Action的编写的更多相关文章
- 023医疗项目-模块二:药品目录的导入导出-从数据库中查出数据用XSSF导出excel并存放在虚拟目录最后下载(包括调试)
我们要实现的效果: 进入到这个页面后,输入要查询的条件,查询出药品表的数据,然后按下导出按钮 ,就会在服务器的一个目录下生成一个药品表的excel表格. 点击"导出"之后 ...
- 021医疗项目-模块二:药品目录的导入导出-介绍poi类
我们使用的是.10版本 Apache POI - the Java API for Microsoft Documents,Apache POI 是用Java编写的免费开源的跨平台的 Java API ...
- 022医疗项目-模块二:药品目录的导入导出-对XSSF导出excel类进行封装
资源全部来源于传智播客. 好的架构师写的程序,就算给刚入门的新手看,新手一看就知道怎么去用.所以我们要对XSSF导出excel类进行封装.这是架构师的工作,但我们也要知道. 我们写一个封装类: 这个类 ...
- 026医疗项目-模块二:药品目录的导入导出-导入功能的Service的编写
这个导入功能要实现的效果是: 思路是: 因为我们最后是在Action层中调用的HxlsRead工具,这个工具传入的就是我们要实现的上一篇文章说到的实现了HxlsOptRowsInterface接口的类 ...
- 025医疗项目-模块二:药品目录的导入导出-HSSF导入类的封装
上一篇文章提过,HSSF的用户模式会导致读取海量数据时很慢,所以我们采用的是事件驱动模式.这个模式类似于xml的sax解析.需要实现一个接口,HSSFListener接口. 原理:根据excel底层存 ...
- 024医疗项目-模块二:药品目录的导入导出-HSSF导入类的学习
我们之前学习了怎么把数据的数据导出来保存到Excle中,这篇文章我们学习怎么Excel数据导出然后插入到数据库中. 我们先学习HSSF怎么用来导出数据. 看官方教程步骤如下: 第一步: 创建一个wor ...
- 010医疗项目-模块一:用户添加的实现(Dao,Service,Action,增加页面调试,提交页面调试)
要实现的效果:
- 044医疗项目-模块四:采购单模块—采购单保存(Dao,Service,Action三层)
我们上上一篇文章(042医疗项目-模块四:采购单模块-采购单明细添加查询,并且把数据添加到数据库中)做的工作是把数据插入到了数据库,我们这篇文章做的是042医疗项目-模块四:采购单模块-采购单明细添加 ...
- 035医疗项目-模块三:药品供应商目录模块——供货商药品目录(批量)添加药品的功能---------Service
这篇文章我们重点介绍Service层.因为Dao层就是用Gysypml逆向生成的Mapper就可以了.所以这里重点讲解Service层. 业务逻辑如下: 1:我们从前端页面传入有两个值:1:userg ...
随机推荐
- MYSQL使用正则表达式过滤数据
一.正则与LIKE的区别 Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符.字符串.例如:select * from wp_posts where post_name REGEXP ...
- Mybatis学习记录(七)----Mybatis查询缓存
1. 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sql ...
- C语言泛型编程--抽象数据类型
一.数据类型: 在任何编程语言中,数据类型作为一个整体,ANSI-C包含的类型为:int.double.char……,程序员很少满意语言本身提供的数据类型,一个简单的办法就是构造类似:array.st ...
- Mac下安装Django
用到一个Python写的后台服务,需要用到Django,参考Django安装文档,配置过程如下: 1.下载一个用来安装和管理Python包的工具“pip”; 2.下载完成后,运行安装脚本,注意需要管理 ...
- android 进程间通信数据(二)------parcel的实现
Serialize是java原生就自带的东西,我们可以看到android的源码 所以看看android是如何实现parcel的,这对我们自己代码设计有什么启发. Parcel: 在android中,p ...
- Effective Java 44 Write doc comments for all exposed API elements
Principle You must precede every exported class, interface, constructor, method, and field declarati ...
- HDU 3374 String Problem (KMP+最大最小表示)
KMP,在有循环节的前提下: 循环节 t = len-next[len], 个数num = len/(len-next[len]);个人理解,如果有循环节,循环节长度必定小于等于len/2, 换句话说 ...
- 【开学季】自学嵌入式开发|四核开发板|4412开发板|ARM+Android+linux技术
淘宝店铺:迅为开发板http://arm-board.taobao.com 网站:http://www.topeetboard.com QQ咨询:2551456065 电话咨询:010-5895758 ...
- Geoserver发布Oracle数据
在Geoserver安装包中,默认是不能发布Oracle数据库里的数据的,只能发布postgis.shp等数据,详细如截图: 如果想发布oracle数据,得安装相应版本的关于oracle数据源的插件, ...
- selenium之ExpectedConditions类
API中对于该类的介绍:Canned ExpectedConditions which are generally useful within webdriver tests.很笼统,大概意思就是在w ...