前一篇文章我们写了Service层,这篇文章我们写一下Action层。
实现的功能:
1:我们先下载模板:然后按照模板里面的规则,插入数据。比如存在d盘。
2:然后浏览找到那个文件,上传上去。 然后把excel中数据都插入到数据库。 ---------------------------------------------------------------------------------------------------我们之前在写导入功能的时候,已经写过了YpxxAction。我们继续在这个Ation中写。
思路:
我们要在Action中完成这么几个方法:
1:导入页面的显示方法:我们总是要有一个方法是能显示出导入功能页面的。
2:导入提交的方法:
将文件上传到服务器(实现文件的上传)
调用HSSF事件驱动封装类(Raed那个工具类),导入药品。
接下来我们具体讲一下怎么代码怎么实现:
首先我们要实现文件上传的话就要去用Springmvc的上传功能,在l中去配置。
如下:
我们之前写好了Service 我们在Action中要用这个Service的话,要先把这个类注入到Spring 容器中。所以我们修改l代码:
<beans xmlns=""xmlns:xsi="" xmlns:mvc=""xmlns:context=""xmlns:aop="" xmlns:tx=""xsi:schemaLocation=" .1.xsd .1.xsd .1.xsd .1.xsd .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.t.Config; import yycg.sult.ResultUtil; import yycg.sult.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 {@AutowiredYpxxService ypxxService;@Autowiredprivate SystemConfigService systemConfigService;
@Autowiredprivate 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;//指导导出数据的titleList<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(),portFile()}参数:一共导出的数据数量,.exportFile()导出文件。*/ateSuccess(Config.MESSAGE, 313, new Object[]{list.size(),portFile()}));}//载入导入页面@RequestMapping("/importypxx")public String importypxx()throws Exception{return "/business/ypml/importypxx";}//提交按钮(导入数据库)@RequestMapping("/importypxxsubmit")public @ResponseBody SubmitResultInfo importypxxsubmit(@RequestParam MultipartFile ypxximportfile) throws Exception{String fileName_OriginalStringOriginalFilename();String fileName_newUUID()+fileName_OriginalString.substring(fileName_OriginalString.indexOf("."));File targetFile=new File("d:/upload/"+fileName_new);//如果这个路径不存在就创建这个路径if(!ists()){targetFile.mkdirs();}//将文件导入到磁盘 ansferTo(targetFile);//得到物理的路径 String filepathAbsolutePath();//将导入的service对象设置到HxlsRead中HxlsRead hxlsRead=new HxlsRead(filepath, 1, ypxximportserviceimpl);hxlsRead.process();ateSuccess(Config.MESSAGE, 906, null));}}
本文发布于:2024-02-04 17:39:02,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170712800657889.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |