From e997eee6b747c343e432783111371aca0bd89306 Mon Sep 17 00:00:00 2001
From: 李宇 <986321569@qq.com>
Date: Tue, 29 Jun 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