From e997eee6b747c343e432783111371aca0bd89306 Mon Sep 17 00:00:00 2001 From: 李宇 <986321569@qq.com> Date: 星期二, 29 六月 2021 13:15:24 +0800 Subject: [PATCH] 导出试剂 --- src/main/java/com/nanometer/smartlab/service/SysReagentService.java | 4 src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java | 15 +++ src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml | 43 ++++++++ src/main/webapp/reagent_mng.xhtml | 12 ++ src/main/java/com/nanometer/smartlab/controller/SupplierOrderMngController.java | 76 ++++++++------ src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java | 2 pom.xml | 18 +-- src/main/java/com/nanometer/smartlab/util/ExcelUtils.java | 28 +++-- src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java | 55 ++++++++++ 9 files changed, 193 insertions(+), 60 deletions(-) diff --git a/pom.xml b/pom.xml index 9786c9e..5b57304 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> - <version>1.2</version> + <version>1.1.2</version> </dependency> <dependency> @@ -376,20 +376,18 @@ <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> - <version>4.0.1</version> + <version>4.1.1</version> </dependency> - <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> - <version>3.17</version> + <version>4.1.1</version> </dependency> - - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-compress</artifactId> - <version>1.9</version> - </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-compress</artifactId> + <version>1.20</version> + </dependency> </dependencies> <profiles> diff --git a/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java b/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java index c64d093..b6c37f5 100644 --- a/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java +++ b/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java @@ -7,6 +7,7 @@ import com.nanometer.smartlab.util.Constants; import com.nanometer.smartlab.util.FacesUtils; import com.nanometer.smartlab.util.IDUtils; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; @@ -839,6 +840,20 @@ return dataModel; } + public void export2Excel() { + + List<Map> list = sysReagentService.selectAll(name, cas, supplierId,getType(), productSn); + try{ + boolean isexport = sysReagentService.export2Excel(list,getType()); + if (isexport){ + + } + }catch (Exception e){ + e.printStackTrace(); + FacesUtils.warn("导出失败"); + } + } + public SysReagent getSysReagent() { return sysReagent; } diff --git a/src/main/java/com/nanometer/smartlab/controller/SupplierOrderMngController.java b/src/main/java/com/nanometer/smartlab/controller/SupplierOrderMngController.java index 3469ea5..1477f09 100644 --- a/src/main/java/com/nanometer/smartlab/controller/SupplierOrderMngController.java +++ b/src/main/java/com/nanometer/smartlab/controller/SupplierOrderMngController.java @@ -269,28 +269,21 @@ try { if(allOpeOrder != null && allOpeOrder.size() > 0) { - int count = allOpeOrder.size(); - this.setRowCount(count); - //list = queryByPage(); - list = supplierOpeOrderService.getSupplierOpeOrderList(orderCode,applyCode,status,orderTime,orderEndTime,first,pageSize); - for(int i=0;i<list.size();i++){ - System.out.println(list.get(i)); - /*if(list.get(i).getSecondUserName()!=null&&!list.get(i).getSecondUserName().equals("")){ - String name=list.get(i).getApproveUserName(); - list.get(i).setApproveUserName(list.get(i).getSecondUserName()); - list.get(i).setSecondUserName(name); - }*/ - if(list.get(i).getBeforeApproveUserId()!=null&&!list.get(i).getBeforeApproveUserId().equals("")){ - String name=list.get(i).getApproveUserName(); - list.get(i).setFirst(list.get(i).getFirName()); - list.get(i).setSecond(name); - }else { - list.get(i).setFirst(list.get(i).getApproveUserName()); - list.get(i).setSecond(list.get(i).getSecondUserName()); - } + int count = allOpeOrder.size(); + this.setRowCount(count); + + list = supplierOpeOrderService.getSupplierOpeOrderList(orderCode,applyCode,status,orderTime,orderEndTime,first,pageSize); + for (int i=0;i<list.size();i++) { + if (list.get(i).getBeforeApproveUserId() != null && !list.get(i).getBeforeApproveUserId().equals("")) { + String name = list.get(i).getApproveUserName(); + list.get(i).setFirst(list.get(i).getFirName()); + list.get(i).setSecond(name); + } else { + list.get(i).setFirst(list.get(i).getApproveUserName()); + list.get(i).setSecond(list.get(i).getSecondUserName()); } - for (SupplierOrder supplierOrder:list - ) { + } + for (SupplierOrder supplierOrder:list) { if(supplierOrder.getIds()!=null&&!supplierOrder.getIds().equals("")){ List ids = Arrays.asList(supplierOrder.getIds().split(",")); supplierOrder.setApplyIds(ids); @@ -322,17 +315,36 @@ @Override public SupplierOrder getRowData(String rowKey) { -// Iterator<SupplierOrder> iterator = this.iterator(); -// if (iterator != null) { -// SupplierOrder ss = null; -// while (iterator.hasNext()) { -// ss = iterator.next(); -// if (rowKey.equals(ss.getId())) { -// return ss; -// } -// } -// } - return supplierOpeOrderService.selectById(rowKey); + SupplierOrder supplierOrder = supplierOpeOrderService.selectById(rowKey); + if (supplierOrder.getBeforeApproveUserId() != null && !supplierOrder.getBeforeApproveUserId().equals("")) { + String name = supplierOrder.getApproveUserName(); + supplierOrder.setFirst(supplierOrder.getFirName()); + supplierOrder.setSecond(name); + } else { + supplierOrder.setFirst(supplierOrder.getApproveUserName()); + supplierOrder.setSecond(supplierOrder.getSecondUserName()); + } + + if(supplierOrder.getIds()!=null&&!supplierOrder.getIds().equals("")){ + List ids = Arrays.asList(supplierOrder.getIds().split(",")); + supplierOrder.setApplyIds(ids); + Double a=0.00; + BigDecimal total=BigDecimal.valueOf(a); + for (int j=0;j<ids.size();j++) { + OpeApply app=opeApplyService.getOpeApply(ids.get(j).toString()); + if(app.getStockFlag()!=0){//判断申购试剂是否缺货 + if(app.getApplyPrice()!=null){//判断试剂是否有实际售价 + BigDecimal b=app.getApplyPrice().multiply(BigDecimal.valueOf(app.getNum())); + total=b.add(total); + }else{ + BigDecimal c=app.getReagent().getPrice().multiply(BigDecimal.valueOf(app.getNum())); + total=c.add(total); + } + } + } + supplierOrder.setTotalPrice(total.doubleValue()); + } + return supplierOrder; } }; } diff --git a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java index b64a27d..da75df3 100644 --- a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java +++ b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java @@ -51,4 +51,6 @@ SysReagent getRowData(@Param("id") String rowKey); SysReagent getSysReagentListNewRowData(@Param("id")String rowKey); + + List<Map> selectAll(Map params); } diff --git a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml index 8aa3d68..0c3bb58 100644 --- a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml +++ b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml @@ -549,4 +549,47 @@ left join sys_supplier supplier on supplier.id = sr.supplier_id where sr.id = #{id} </select> + <select id="selectAll" resultType="java.util.Map"> + select + sr.name, + sr.product_sn as productSn, + sr.cas, + sr.price, + sr.per_box as perBox, + sr.safetynum, + + CASE WHEN type = 0 THEN '耗材' WHEN type = 1 THEN '试剂' ELSE '' END AS kind, + ss.meta_value as productHomeName, + bm.meta_value as control_products_name, + supplier.name as supplierName, + bm1.meta_value as reagentType, + bm2.meta_value as reagentCharacter, + bm3.meta_value as reagentFormat, + CONCAT(sr.main_metering,bm4.meta_value) as reagentUnit + from sys_reagent as sr + left join base_meta as ss on sr.product_home = ss.id + left join base_meta bm on bm.id = sr.control_products + left join base_meta bm1 on bm1.id = sr.reagent_type + left join base_meta bm2 on bm2.id = sr.reagent_character + left join base_meta bm3 on bm3.id = sr.reagent_format + left join base_meta bm4 on bm4.id = sr.reagent_unit + left join sys_supplier supplier on supplier.id = sr.supplier_id + where sr.valid_flag = 1 + <if test="cas != null and cas != ''"> + and sr.cas = #{cas} + </if> + <if test="supplierId != null and supplierId != ''"> + and sr.supplier_id = #{supplierId} + </if> + <if test="name != null and name != ''"> + and sr.name like concat("%", #{name} ,"%") + </if> + <if test="type != null"> + and sr.type = #{type} + </if> + <if test="productSn != null and productSn != ''"> + and sr.product_sn like concat("%", #{productSn} ,"%") + </if> + ORDER BY length(sr.name),sr.create_time desc + </select> </mapper> diff --git a/src/main/java/com/nanometer/smartlab/service/SysReagentService.java b/src/main/java/com/nanometer/smartlab/service/SysReagentService.java index 8404eca..251ba7f 100644 --- a/src/main/java/com/nanometer/smartlab/service/SysReagentService.java +++ b/src/main/java/com/nanometer/smartlab/service/SysReagentService.java @@ -52,4 +52,8 @@ SysReagent getRowData(String rowKey); SysReagent getSysReagentListNewRowData(String rowKey); + + boolean export2Excel(List<Map> list, Integer type) throws Exception; + + List<Map> selectAll(String name, String cas, String supplierId, Integer type, String productSn); } diff --git a/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java index 6dca8bf..eb22dbe 100644 --- a/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java +++ b/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java @@ -8,6 +8,7 @@ import com.nanometer.smartlab.exception.AlarmException; import com.nanometer.smartlab.exception.BusinessException; import com.nanometer.smartlab.exception.ExceptionEnumCode; +import com.nanometer.smartlab.util.ExcelUtils; import com.nanometer.smartlab.util.IDUtils; import com.nanometer.smartlab.util.MessageUtil; import org.apache.commons.lang.StringUtils; @@ -21,10 +22,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * Created by johnny on 17/11/29. @@ -192,6 +190,55 @@ return sysReagentDao.getSysReagentListNewRowData(rowKey); } + @Override + public boolean export2Excel(List<Map> list, Integer type) throws Exception { + Map<String,String> map = new LinkedHashMap<>(); + if (type == 0){ + map.put("kind", "种类"); + map.put("name", "名称"); + map.put("productSn", "产品编号"); + map.put("cas", "CAS"); + map.put("reagentType", "试剂类型"); + map.put("reagentCharacter", "危险性质"); + map.put("supplierName", "供应商"); + map.put("productHomeName", "厂家"); + map.put("reagentFormat", "规格"); + map.put("reagentUnit", "包装"); + map.put("price", "含税售价"); + map.put("perBox", "每箱数量"); + ExcelUtils.export2Excel(list,"耗材列表",map); + }else { + map.put("kind", "种类"); + map.put("name", "试剂名称"); + map.put("control_products_name", "管制品"); + map.put("productSn", "产品编号"); + map.put("cas", "CAS"); + map.put("reagentType", "试剂类型"); + map.put("reagentCharacter", "危险性质"); + map.put("supplierName", "供应商"); + map.put("productHomeName", "厂家"); + map.put("reagentFormat", "规格"); + map.put("reagentUnit", "包装"); + map.put("price", "含税售价"); +// map.put("originprice", "原始售价"); + map.put("perBox", "每箱数量"); + map.put("safetynum", "安全库存"); + ExcelUtils.export2Excel(list,"试剂列表",map); + } + return true; + } + + @Override + public List<Map> selectAll(String name, String cas, String supplierId, Integer type, String productSn) { + Map<String, Object> params = new HashMap<String, Object>(); + params.put("name", name); + params.put("cas", cas); + params.put("supplierId", supplierId); + params.put("type", type); + params.put("productSn", productSn); + return sysReagentDao.selectAll(params); + } + @Transactional(propagation = Propagation.REQUIRED) public int getSysReagentTotalCount(String name, String cas, String supplierId,Integer type) { diff --git a/src/main/java/com/nanometer/smartlab/util/ExcelUtils.java b/src/main/java/com/nanometer/smartlab/util/ExcelUtils.java index ba95396..4ba663e 100644 --- a/src/main/java/com/nanometer/smartlab/util/ExcelUtils.java +++ b/src/main/java/com/nanometer/smartlab/util/ExcelUtils.java @@ -3,24 +3,28 @@ import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.xssf.streaming.SXSSFRow; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import javax.faces.context.FacesContext; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class ExcelUtils { - public static HSSFWorkbook exportExcelNew(Map<String, String> map, List<Map> dataList, String name){ - HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); + public static SXSSFWorkbook exportExcelNew(Map<String, String> map, List<Map> dataList, String name){ + SXSSFWorkbook sb = new SXSSFWorkbook(1000); Integer total = null; //sheet名字 - HSSFSheet sheet = hssfWorkbook.createSheet(name); - HSSFRow titlerRow = sheet.createRow(0); + SXSSFSheet sheet = sb.createSheet(name); + SXSSFRow titlerRow = sheet.createRow(0); int k = 0; for(Map.Entry<String, String> entry:map.entrySet()){ @@ -30,7 +34,7 @@ } //数据 for (int i = 0; i < dataList.size(); i++) { - HSSFRow dataRow = sheet.createRow(i + 1); + SXSSFRow dataRow = sheet.createRow(i + 1); int j = 0; for(Map.Entry<String, String> entry:map.entrySet()){ //表头 @@ -41,7 +45,7 @@ - return hssfWorkbook; + return sb; } @@ -50,7 +54,7 @@ throw new Exception("没有数据可以导出"); } - ServletOutputStream out = null; + OutputStream out = null; InputStream is = null; try { FacesContext ctx = FacesContext.getCurrentInstance(); @@ -62,18 +66,18 @@ StringBuffer contentDisposition = new StringBuffer(); contentDisposition.append("attachment;"); contentDisposition.append("filename=\""); - contentDisposition.append(name).append(".xls"); + contentDisposition.append(name).append(".xlsx"); contentDisposition.append("\""); response.setHeader( "Content-Disposition", new String(contentDisposition.toString().getBytes( System.getProperty("file.encoding")), "ISO8859-1")); out = response.getOutputStream(); - HSSFWorkbook hssfWorkbook = ExcelUtils.exportExcelNew(map, list, name); - hssfWorkbook.write(out); -// out.flush(); + SXSSFWorkbook sb = ExcelUtils.exportExcelNew(map, list, name); + sb.write(out); + out.flush(); + sb.dispose();// 释放workbook所占用的所有windows资源 ctx.responseComplete(); - } catch (Exception e) { if (is != null) { try { diff --git a/src/main/webapp/reagent_mng.xhtml b/src/main/webapp/reagent_mng.xhtml index e4c1195..01a8c83 100644 --- a/src/main/webapp/reagent_mng.xhtml +++ b/src/main/webapp/reagent_mng.xhtml @@ -39,7 +39,7 @@ </p:panelGrid> </p:panel> <p:panel styleClass="center-body"> - <p:panelGrid columns="8" styleClass="btn"> + <p:panelGrid columns="9" styleClass="btn"> <p:commandButton value="新建" styleClass="new-btn" process="@this" actionListener="#{reagentMngController.onNewBtnClick}" @@ -66,7 +66,9 @@ <p:commandButton value="耗材导入" styleClass="import-btn" onclick="importReagent2()" ></p:commandButton> <a href="resources/template/耗材导入模板.xlsx" style="display: inline-block;"><img src="resources/images/xlsx.png" width="30px;" alt=""/></a> - <script> + <p:commandButton value="导出" styleClass="new-btn" ajax="false" id="exportButton" widgetVar="exportButton" + actionListener="#{reagentMngController.export2Excel}" /> + <script type="text/javascript"> function importReagent(){ $("#reagentMngForm\\:importReagentBtn_input").click(); } @@ -142,6 +144,9 @@ <p:column headerText="安全库存" rendered="#{reagentMngController.type == 1}"> <h:outputText value="#{row.safetynum}" ></h:outputText> </p:column> + <p:column headerText="管制品" rendered="#{reagentMngController.type == 1}"> + <h:outputText value="#{row.controlProductsName}" ></h:outputText> + </p:column> <!-- <p:column headerText="库存">--> <!-- <h:outputText value="#{row.reserve}"></h:outputText>--> <!-- </p:column>--> @@ -162,6 +167,7 @@ update="@form" auto="true" sizeLimit="5000000" mode="advanced"/> </div> + </h:form> <p:dialog modal="true" header="#{reagentMngController.action==constants.ACTION_ADD?'新建':'修改'}" appendTo="@(body)" @@ -528,5 +534,7 @@ </p:panel> </h:form> </p:dialog> + + </ui:composition> </html> -- Gitblit v1.9.2