From 61de83f769642ff7da3d7f32b39c5014167a2950 Mon Sep 17 00:00:00 2001
From: 李宇 <986321569@qq.com>
Date: 星期五, 15 一月 2021 17:34:48 +0800
Subject: [PATCH] 修改试剂库、库存查询,登录超时,导出订单领取

---
 src/main/java/com/nanometer/smartlab/service/OpeApplyService.java                |    4 
 src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml              |   12 
 src/main/webapp/WEB-INF/ehcache.xml                                              |   97 +++++++++
 src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml                         |   60 +++++
 src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml                       |    7 
 src/main/webapp/reagent_mng.xhtml                                                |   11 
 src/main/java/com/nanometer/smartlab/service/SysUserService.java                 |    2 
 src/main/webapp/WEB-INF/spring-shiro.xml                                         |   18 +
 src/main/webapp/warehouse_stock_mng.xhtml                                        |   33 +++
 src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java            |   10 
 src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java             |    3 
 src/main/webapp/WEB-INF/spring-ehcache.xml                                       |   20 ++
 src/main/java/com/nanometer/smartlab/entity/enumtype/ApplyStatusVo.java          |   39 +++
 src/main/java/com/nanometer/smartlab/service/SysReagentService.java              |    4 
 src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java        |   13 +
 src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml                          |   12 
 src/main/java/com/nanometer/smartlab/api/ApiAction.java                          |    7 
 src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java                 |   19 +
 src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java     |    4 
 src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java |  198 +++++++++++++++++-
 src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java |    8 
 src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java          |    6 
 src/main/webapp/warehouse_reagent_direct_store.xhtml                             |    7 
 23 files changed, 534 insertions(+), 60 deletions(-)

diff --git a/src/main/java/com/nanometer/smartlab/api/ApiAction.java b/src/main/java/com/nanometer/smartlab/api/ApiAction.java
index 91c0c46..9f38637 100644
--- a/src/main/java/com/nanometer/smartlab/api/ApiAction.java
+++ b/src/main/java/com/nanometer/smartlab/api/ApiAction.java
@@ -1400,6 +1400,7 @@
                 lr.setValidFlag(ValidFlag.VALID);
                 opeLaboratoryReserveService.insert(lr);
 
+                opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
                 opeReagentStatus.setUserId(reagentReceiving.getApplyUserId());
                 opeReagentStatus.setHouseId(reagentReceiving.getLabId());
                 opeReagentStatus.setContainerId(reagentReceiving.getLabContainerId());
@@ -1439,7 +1440,7 @@
                 return  ResponseModel.getErrInstance("账户名为空");
             }
 
-            HazardousWasteUser sysUser = sysUserService.getUserByAccount(account);
+            HazardousWasteUser sysUser = sysUserService.getUserByAccount(account,null);
             if (sysUser == null){
                 return  ResponseModel.getErrInstance("账户名不存在");
             }else{
@@ -1540,8 +1541,8 @@
             hazardousWaste.setTid(sdf.format(new Date()));
             hazardousWaste.setCreateTime(new Date());
             hazardousWaste.setStatus("待确认");
-            HazardousWasteUser sysUser = sysUserService.getUserByAccount(hazardousWaste.getApplyPerson());
-            hazardousWaste.setUnit( sysUser.getCompany());
+            HazardousWasteUser sysUser = sysUserService.getUserByAccount(null,hazardousWaste.getApplyPerson());
+            hazardousWaste.setUnit(sysUser.getCompany());
             if (hazardousWaste.getAcid()== null){
                 hazardousWaste.setAcid(new BigDecimal(0));
             }
diff --git a/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java b/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java
index fd71861..54fcbcd 100644
--- a/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java
@@ -67,6 +67,7 @@
     private String cas;
     private List<SysSupplier> supplierSelectList;
     private List<Type> typeList;
+    private String productSn;
 
     public List<Type> getTypeList() {
         if (this.typeList == null) {
@@ -798,10 +799,10 @@
                 public List<SysReagent> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
                     List<SysReagent> list = null;
                     try {
-                        int count = sysReagentService.getSysReagentTotalCountNew(name, cas, supplierId,getType());
+                        int count = sysReagentService.getSysReagentTotalCountNew(name, cas, supplierId,getType(),productSn);
                         this.setRowCount(count);
                         if (count > 0) {
-                            list = sysReagentService.getSysReagentListNew(name, cas, supplierId,getType(), first, pageSize);
+                            list = sysReagentService.getSysReagentListNew(name, cas, supplierId,getType(), first, pageSize,productSn);
                         }
                     } catch (Exception e) {
                         logger.error(e);
@@ -897,4 +898,12 @@
     public void setDangerousFlagSelectList(List<DangerousFlag> dangerousFlagSelectList) {
         this.dangerousFlagSelectList = dangerousFlagSelectList;
     }
+
+    public String getProductSn() {
+        return productSn;
+    }
+
+    public void setProductSn(String productSn) {
+        this.productSn = productSn;
+    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java b/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java
index 04cd748..c27e87d 100644
--- a/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java
@@ -5,6 +5,7 @@
 import com.nanometer.smartlab.dao.OpeWarehouseReserveDao;
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.dto.ApplyListDto;
+import com.nanometer.smartlab.entity.enumtype.ApplyStatusVo;
 import com.nanometer.smartlab.entity.enumtype.ArrivalStatus;
 import com.nanometer.smartlab.entity.enumtype.SeeFlag;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
@@ -204,6 +205,10 @@
     private OpeApply reagentDStore;
     private String applyNewReagentName;
     private String applyNewCas;
+    private String productSn;
+	private String applyCode;
+	private Integer status;
+	private List<ApplyStatusVo> statusSelectList;
 
     private List<SysWarehouse> warehouseList;
     private List<SysWarehouseContainer> warehouseContainerList;
@@ -1204,11 +1209,11 @@
 						Map<String, Object> filters) {
 					List<OpeWarehouseReserve> list = null;
 					try {
-						int count = opeWarehouseReserveService.getOpeWarehouseReserveTotalCountByName(reagentId, supplierId);
+						int count = opeWarehouseReserveService.getOpeWarehouseReserveTotalCountByName(reagentId, supplierId,productSn);
 						this.setRowCount(count);
 						if (count > 0) {
 							list = opeWarehouseReserveService.getOpeWarehouseReserveListByName(reagentId, supplierId, first,
-									pageSize);
+									pageSize,productSn);
 						}
 					} catch (Exception e) {
 						logger.error(e);
@@ -1254,12 +1259,11 @@
 					}
 
 					try {
-
-						int count = opeApplyService.getOpeApplyReserveTotalCountByNameFor(id,reagentId, userName);
+						int count = opeApplyService.getOpeApplyReserveTotalCountByNameFor(id,reagentId, userName,productSn,applyCode,status);
 						this.setRowCount(count);
 						if (count > 0) {
 							list = opeApplyService.getOpeApplyReserveListByNameFor(id,reagentId, userName, first,
-									pageSize);
+									pageSize,productSn,applyCode,status);
 						}
 					} catch (Exception e) {
 						logger.error(e);
@@ -1328,6 +1332,130 @@
 		}
 		return reagentStatusDataModel;
 	}
+
+	public void onExportFileBtnClickOrder(){
+		ServletOutputStream out = null;
+		InputStream is = null;
+		try {
+			FacesContext ctx = FacesContext.getCurrentInstance();
+			ctx.responseComplete();
+			String contentType = "application/x-download";
+			HttpServletResponse response = (HttpServletResponse) ctx
+					.getExternalContext().getResponse();
+			response.setContentType(contentType);
+			StringBuffer contentDisposition = new StringBuffer();
+			contentDisposition.append("attachment;");
+			contentDisposition.append("filename=\"");
+			contentDisposition.append("订单领取导出.xls");
+			contentDisposition.append("\"");
+			response.setHeader(
+					"Content-Disposition",
+					new String(contentDisposition.toString().getBytes(
+							System.getProperty("file.encoding")), "ISO8859-1"));
+			out = response.getOutputStream();
+			Map<String, Integer> tempMap = new HashMap<String,Integer>();
+			List<OpeApplyReserve> realDataList = new ArrayList<>();
+			//map=null;
+			SysUser loginUser = getUser();
+			String id="";
+			if(loginUser.getSeeFlag()==SeeFlag.MANAGE){
+
+			}else {
+				//userName=loginUser.getName();
+				id=loginUser.getId();
+			}
+			if(selectedListForPerson!=null&&selectedListForPerson.size()>0){
+				realDataList=selectedListForPerson;
+			}else {
+				realDataList = opeApplyService.getOpeApplyReserveListByNameFor(id,reagentId, userName, null,
+						null,productSn,applyCode,status);
+			}
+			List<String> headerList = new ArrayList<>();
+			headerList.add("申购编号");
+			headerList.add("产品编号");
+			headerList.add("试剂名称");
+			headerList.add("管制品");
+			headerList.add("规格型号");
+			headerList.add("包装");
+			headerList.add("价格");
+			headerList.add("CAS");
+			headerList.add("危险性质");
+			headerList.add("厂家");
+			headerList.add("申请数量");
+			headerList.add("已领用数量");
+			headerList.add("申领人");
+			headerList.add("订单状态");
+			headerList.add("课题组");
+			headerList.add("课题组负责人");
+			HSSFWorkbook hssfWorkbook =exportExcelOrder(headerList, realDataList);
+			hssfWorkbook.write(out);
+			out.flush();
+			ctx.responseComplete();
+
+		}catch (Exception e) {
+			if(is!=null){
+				try {
+					is.close();
+				} catch (IOException e1) {
+					e1.printStackTrace();
+				}
+			}
+			if(out!=null){
+				try {
+					out.close();
+				} catch (IOException e1) {
+					e1.printStackTrace();
+				}
+			}
+			e.printStackTrace();
+		}finally {
+			if (is != null) {
+				try {
+					is.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+			if (out != null) {
+				try {
+					out.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+	}
+
+	public  HSSFWorkbook exportExcelOrder(List<String> headerList, List<OpeApplyReserve> dataList){
+		HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
+		Integer total = null;
+		HSSFSheet sheet = hssfWorkbook.createSheet("订单领取导出");
+		HSSFRow titlerRow = sheet.createRow(0);
+		for(int i = 0; i < headerList.size(); i++) {
+			titlerRow.createCell(i).setCellValue(headerList.get(i));
+		}
+		for (int i = 0; i < dataList.size(); i++) {
+			HSSFRow dataRow = sheet.createRow(i + 1);
+			dataRow.createCell(0).setCellValue(dataList.get(i).getApplyCode()== null ? "": String.valueOf(dataList.get(i).getApplyCode()));
+			dataRow.createCell(1).setCellValue(dataList.get(i).getReagent().getProductSn()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductSn()));
+			dataRow.createCell(2).setCellValue(dataList.get(i).getReagent().getName()== null ? "": String.valueOf(dataList.get(i).getReagent().getName()));
+			dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getControlProducts()== null ? "": String.valueOf(dataList.get(i).getReagent().getControlProducts()));
+			dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentFormat()));
+			dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering()));
+			dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getPrice()== null ? "": String.valueOf(dataList.get(i).getReagent().getPrice()));
+			dataRow.createCell(7).setCellValue(dataList.get(i).getReagent().getCas()== null ? "": String.valueOf(dataList.get(i).getReagent().getCas()));
+			dataRow.createCell(8).setCellValue(dataList.get(i).getReagent().getReagentCharacter()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentCharacter()));
+			dataRow.createCell(9).setCellValue(dataList.get(i).getReagent().getProductHomeName()== null ? "":  String.valueOf(dataList.get(i).getReagent().getProductHomeName()));
+			dataRow.createCell(10).setCellValue(dataList.get(i).getNum()== null ? "": String.valueOf(dataList.get(i).getNum()));
+			dataRow.createCell(11).setCellValue(dataList.get(i).getUsed()== null ? "": String.valueOf(dataList.get(i).getUsed()));
+			dataRow.createCell(12).setCellValue(dataList.get(i).getApplyUserId()== null ? "": String.valueOf(dataList.get(i).getApplyUserId()));
+			dataRow.createCell(13).setCellValue(dataList.get(i).getStatus()== null ? "": String.valueOf(dataList.get(i).getStatus().getText()));
+			dataRow.createCell(14).setCellValue(dataList.get(i).getProject()== null ? "": String.valueOf(dataList.get(i).getProject()));
+			dataRow.createCell(15).setCellValue(dataList.get(i).getProjectManage()== null ? "": String.valueOf(dataList.get(i).getProjectManage()));
+		}
+		return hssfWorkbook;
+	}
+
 	public void onExportFileBtnClickNew(){
 		ServletOutputStream out = null;
 		InputStream is = null;
@@ -1355,10 +1483,11 @@
 				realDataList=selectedList;
 			}else {
 				realDataList = opeWarehouseReserveService.getOpeWarehouseReserveListByName(reagentId, supplierId, null,
-						null);
+						null,productSn);
 			}
 				List<String> headerList = new ArrayList<>();
 				headerList.add("试剂名称");
+				headerList.add("产品编号");
 				headerList.add("cas");
 				headerList.add("厂家");
 				headerList.add("供应商");
@@ -1409,8 +1538,6 @@
 
 	public  HSSFWorkbook exportExcelNew(List<String> headerList, List<OpeWarehouseReserve> dataList) {
 		HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
-
-
 		Integer total = null;
 		HSSFSheet sheet = hssfWorkbook.createSheet("仓库库存");
 		HSSFRow titlerRow = sheet.createRow(0);
@@ -1420,15 +1547,16 @@
 		for (int i = 0; i < dataList.size(); i++) {
 			HSSFRow dataRow = sheet.createRow(i + 1);
 			dataRow.createCell(0).setCellValue(dataList.get(i).getReagent().getName()== null ? "": String.valueOf(dataList.get(i).getReagent().getName()));
-			dataRow.createCell(1).setCellValue(dataList.get(i).getReagent().getCas()== null ? "": String.valueOf(dataList.get(i).getReagent().getCas()));
-			dataRow.createCell(2).setCellValue(dataList.get(i).getReagent().getProductHomeName()== null ? "":  String.valueOf(dataList.get(i).getReagent().getProductHomeName()));
-			dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getSupplierName()== null ? "": String.valueOf(dataList.get(i).getReagent().getSupplierName()));
-			dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentFormat())));
-			dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentUnit()));
-			dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getPrice()== null ? "": String.valueOf(dataList.get(i).getReagent().getPrice()));
-			dataRow.createCell(7).setCellValue(dataList.get(i).getArticleNumber()== null ? "": String.valueOf(dataList.get(i).getArticleNumber()));
-			dataRow.createCell(8).setCellValue(dataList.get(i).getReserve()== null ? "": String.valueOf(dataList.get(i).getReserve()));
-			dataRow.createCell(9).setCellValue(dataList.get(i).getWarehouseName()== null ? "": String.valueOf(dataList.get(i).getWarehouseName()));
+			dataRow.createCell(1).setCellValue(dataList.get(i).getReagent().getProductSn()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductSn()));
+			dataRow.createCell(2).setCellValue(dataList.get(i).getReagent().getCas()== null ? "": String.valueOf(dataList.get(i).getReagent().getCas()));
+			dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getProductHomeName()== null ? "":  String.valueOf(dataList.get(i).getReagent().getProductHomeName()));
+			dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getSupplierName()== null ? "": String.valueOf(dataList.get(i).getReagent().getSupplierName()));
+			dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentFormat())));
+			dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentUnit()));
+			dataRow.createCell(7).setCellValue(dataList.get(i).getReagent().getPrice()== null ? "": String.valueOf(dataList.get(i).getReagent().getPrice()));
+			dataRow.createCell(8).setCellValue(dataList.get(i).getArticleNumber()== null ? "": String.valueOf(dataList.get(i).getArticleNumber()));
+			dataRow.createCell(9).setCellValue(dataList.get(i).getReserve()== null ? "": String.valueOf(dataList.get(i).getReserve()));
+			dataRow.createCell(10).setCellValue(dataList.get(i).getWarehouseName()== null ? "": String.valueOf(dataList.get(i).getWarehouseName()));
 
 		}
 		return hssfWorkbook;
@@ -1966,10 +2094,10 @@
                 public List<SysReagent> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
                     List<SysReagent> list = null;
                     try {
-                        int count = sysReagentService.getSysReagentTotalCountNew(applyNewReagentName, applyNewCas, null,null);
+                        int count = sysReagentService.getSysReagentTotalCountNew(applyNewReagentName, applyNewCas, null,null,productSn);
                         this.setRowCount(count);
                         if (count > 0) {
-                            list = sysReagentService.getSysReagentListNew(applyNewReagentName, applyNewCas, null,null, first, pageSize);
+                            list = sysReagentService.getSysReagentListNew(applyNewReagentName, applyNewCas, null,null, first, pageSize,productSn);
                         }
                     } catch (Exception e) {
                         logger.error(e);
@@ -2231,4 +2359,36 @@
 	public void setTabValue(Integer tabValue) {
 		this.tabValue = tabValue;
 	}
+
+	public void setProductSn(String productSn) {
+		this.productSn = productSn;
+	}
+
+	public String getProductSn() {
+		return productSn;
+	}
+
+	public String getApplyCode() {
+		return applyCode;
+	}
+
+	public void setApplyCode(String applyCode) {
+		this.applyCode = applyCode;
+	}
+
+	public Integer getStatus() {
+		return status;
+	}
+
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public List<ApplyStatusVo> getStatusSelectList() {
+		if (this.statusSelectList == null) {
+			this.statusSelectList = Arrays.asList(ApplyStatusVo.values());
+		}
+		return statusSelectList;
+	}
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
index 77ceb4b..1fb781b 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
@@ -62,6 +62,8 @@
     <result property="used" column="used"></result>
        <result property="status" column="status" typeHandler="com.nanometer.smartlab.entity.handler.ApplyStatusHandler"></result>
     <result property="applyUserId" column="apply_user_id"></result>
+    <result property="projectManage" column="projectManage"/>
+    <result property="project" column="project"/>
     <association property="reagent" javaType="com.nanometer.smartlab.entity.SysReagent">
       <id property="id" column="reagent_id"></id>
       <result property="name" column="reagentName"></result>
@@ -322,6 +324,12 @@
         <if test="status != null and status != ''">
             and oa.status =#{status}
         </if>
+        <if test="productSn != null and productSn != ''">
+            and sr.product_sn like concat('%',#{productSn},'%')
+        </if>
+        <if test="applyCode != null and applyCode != ''">
+            and oa.apply_code = #{applyCode}
+        </if>
 	</sql>
 
 	<select id="getOpeApplyReserveTotalCount" parameterType="java.util.Map"
@@ -336,10 +344,21 @@
     <select id="getOpeApplyReserveTotalCountFor" parameterType="java.util.Map"
             resultType="int">
         select count(1)
+        from
+        (select count(1)
         from ope_apply as oa
-        <include refid="getOpeApplyReserveList_queryJoins1" />
+        LEFT JOIN sys_reagent sr ON sr.id = oa.reagent_id
+        LEFT JOIN sys_user su ON su.id = oa.apply_user_id
+        LEFT JOIN base_meta AS bm2 ON sr.control_products = bm2.id
+        LEFT JOIN base_meta AS bm3 ON sr.reagent_format = bm3.id
+        LEFT JOIN base_meta AS bm4 ON sr.reagent_character = bm4.id
+        LEFT JOIN base_meta AS bm1 ON sr.product_home = bm1.id
+        LEFT JOIN sys_project as project on project.project = su.project
+        LEFT JOIN sys_user as su1 on su1.id = project.sys_user_id
         where oa.valid_flag = 1 and (oa.status=4 or oa.status=6)
         <include refid="getOpeApplyReserveList_queryWhereSql" />
+        GROUP BY oa.id
+        )as oaa
     </select>
 
 	<select id="getOpeApplyReserveList" parameterType="java.util.Map"
@@ -350,7 +369,7 @@
 		<include refid="getOpeApplyReserveList_queryJoins2" />
 		where oa.valid_flag = 1
 		<include refid="getOpeApplyReserveList_queryWhereSql" />
-
+        GROUP BY oa.id
 		order by oa.update_time desc
 		<if test="first != null and pageSize != null">
 			limit #{first}, #{pageSize}
@@ -359,13 +378,40 @@
 
     <select id="getOpeApplyReserveListFor" parameterType="java.util.Map"
             resultMap="OpeApplyReserve">
-        <include refid="getOpeApplyReserveList_queryColumns" />
-        from ope_apply as oa
-        <include refid="getOpeApplyReserveList_queryJoins1" />
-        <include refid="getOpeApplyReserveList_queryJoins2" />
+        SELECT
+        oa.id,
+        oa.apply_code,
+        sr.id reagent_id,
+        oa. STATUS,
+        sr.product_sn reagentProductSn,
+        sr.`name` reagentName,
+        bm2.meta_value controlProducts,
+        bm3.meta_value reagentFormat,
+        sr.main_metering reagentMainMetering,
+        sr.price reagentPrice,
+        sr.cas reagentCas,
+        oa.article_number articleNumber,
+        bm4.meta_value reagentCharacter,
+        bm1.meta_value productHome,
+        sr.dangerous_flag,
+        oa.num,
+        oa.used,
+        su.`name` apply_user_id,
+        su.project,
+        su1.`name` as projectManage
+        FROM
+        ope_apply AS oa
+        LEFT JOIN sys_reagent sr ON sr.id = oa.reagent_id
+        LEFT JOIN sys_user su ON su.id = oa.apply_user_id
+        LEFT JOIN base_meta AS bm2 ON sr.control_products = bm2.id
+        LEFT JOIN base_meta AS bm3 ON sr.reagent_format = bm3.id
+        LEFT JOIN base_meta AS bm4 ON sr.reagent_character = bm4.id
+        LEFT JOIN base_meta AS bm1 ON sr.product_home = bm1.id
+        LEFT JOIN sys_project as project on project.project = su.project
+        LEFT JOIN sys_user as su1 on su1.id = project.sys_user_id
         where oa.valid_flag = 1 and (oa.status=4 or oa.status=6)
         <include refid="getOpeApplyReserveList_queryWhereSql" />
-
+        GROUP BY oa.id
         order by oa.update_time desc
         <if test="first != null and pageSize != null">
             limit #{first}, #{pageSize}
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml
index 6c81389..0f32736 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml
@@ -29,7 +29,8 @@
 	    <result property="updateTime" column="update_time"></result>
 	    <result property="supplierName" column="supplierName"></result>
 	    <result property="productHome" column="product_home"></result>
-    		<result property="productHomeName" column="productHomeName"></result>
+        <result property="productHomeName" column="productHomeName"></result>
+        <result property="productSn" column="product_sn"/>
     </association>
   </resultMap>
 
@@ -49,9 +50,12 @@
     <if test="reagentName != null and reagentName != ''">
       and sr.name like concat('%',#{reagentName},'%')
     </if>
-      <if test="warehouseId != null and warehouseId != ''">
-          and oa.warehouseId=#{warehouseId}
-      </if>
+    <if test="warehouseId != null and warehouseId != ''">
+        and oa.warehouseId=#{warehouseId}
+    </if>
+    <if test="productSn != null and productSn != ''">
+        and sr.product_sn like concat('%',#{productSn},'%')
+    </if>
   </sql>
 
   <sql id="queryColumns">
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml
index 4c1cb24..4fc53ba 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml
@@ -261,6 +261,9 @@
     <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 sr.create_time desc
     <if test="first != null and pageSize != null">
       limit #{first}, #{pageSize}
@@ -321,7 +324,9 @@
     <if test="type != null">
       and sr.type = #{type}
     </if>
-
+    <if test="productSn != null and productSn != ''">
+      and sr.product_sn like concat("%", #{productSn} ,"%")
+    </if>
   </select>
 
   <select id="getReagentUnitByReagentId" parameterType="java.lang.String" resultType="java.lang.String">
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml
index 64b16c6..8bb1b6b 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml
@@ -218,7 +218,7 @@
 	WHERE su.valid_flag = 1
 	and sl.valid_flag = 1
 	and slc.valid_flag = 1
-
+    ORDER BY su.`name` asc
     </select>
 
     <select id="getUserListByProject" parameterType="java.util.Map" resultMap="SysUser">
@@ -244,9 +244,15 @@
     FROM sys_user AS su
     LEFT JOIN base_meta bm ON su.department = bm.id
     LEFT JOIN base_meta com on com.id = su.company
-    WHERE
+    <where>
         su.valid_flag = 1
-    AND su.account = #{account}
+        <if test="account != null and account !=''">
+            AND su.account = #{account}
+        </if>
+        <if test="name != null and name !=''">
+            AND su.name = #{name}
+        </if>
+    </where>
     </select>
     <select id="getUserByProject" resultType="com.nanometer.smartlab.entity.dto.LaboratoryVo$LaboratoryUser">
     SELECT
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java b/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java
index fdd6a05..2262797 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java
@@ -32,6 +32,9 @@
     private Integer flag;
 	private ApplyStatus status;
 
+	private String project;
+	private String projectManage;
+
 	public ApplyStatus getStatus() {
 		return status;
 	}
@@ -165,4 +168,20 @@
 	public void setSelectNum(Integer selectNum) {
 		this.selectNum = selectNum;
 	}
+
+	public String getProject() {
+		return project;
+	}
+
+	public void setProject(String project) {
+		this.project = project;
+	}
+
+	public String getProjectManage() {
+		return projectManage;
+	}
+
+	public void setProjectManage(String projectManage) {
+		this.projectManage = projectManage;
+	}
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/enumtype/ApplyStatusVo.java b/src/main/java/com/nanometer/smartlab/entity/enumtype/ApplyStatusVo.java
new file mode 100644
index 0000000..d9f2f18
--- /dev/null
+++ b/src/main/java/com/nanometer/smartlab/entity/enumtype/ApplyStatusVo.java
@@ -0,0 +1,39 @@
+package com.nanometer.smartlab.entity.enumtype;
+
+import java.util.HashMap;
+
+public enum ApplyStatusVo {
+    STORAGE(4, "已入库"),SUPPLIER_CONFIRM(6,"已确认");
+    private int key;
+
+    private String text;
+
+    private ApplyStatusVo(int key, String text) {
+        this.key = key;
+        this.text = text;
+    }
+
+    public int getKey() {
+        return key;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    private static HashMap<Integer,ApplyStatusVo> map = new HashMap<Integer,ApplyStatusVo>();
+    static {
+        for(ApplyStatusVo d : ApplyStatusVo.values()){
+            map.put(d.key, d);
+        }
+    }
+
+    public static ApplyStatusVo parse(Integer index) {
+        if(map.containsKey(index)){
+            return map.get(index);
+        }
+        return null;
+    }
+
+
+}
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
index b10d0ad..5217844 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
@@ -53,9 +53,9 @@
 	int getOpeApplyReserveTotalCountByName(String id,String reagentName, String personName);
 	List<OpeApplyReserve> getOpeApplyReserveListByName(String id,String reagentName, String personName, Integer first,
 			Integer pageSize);
-    int getOpeApplyReserveTotalCountByNameFor(String id,String reagentName, String personName);
+    int getOpeApplyReserveTotalCountByNameFor(String id,String reagentName, String personName,String productSn,String applyCode,Integer status);
     List<OpeApplyReserve> getOpeApplyReserveListByNameFor(String id,String reagentName, String personName, Integer first,
-                                                       Integer pageSize);
+                                                       Integer pageSize,String productSn,String applyCode,Integer status);
 	public boolean updaetOpeApplyPrice(BigDecimal applyPrice,String id);
 	public boolean updaetOpeApplyStockFlag(int stockFlag,String id);
 	public boolean cancelApply(ApplyStatus status,String id);
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
index 1f61365..ce73ec8 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
@@ -519,12 +519,15 @@
 	}
 
     @Override
-    public int getOpeApplyReserveTotalCountByNameFor(String id,String reagentName, String personName) {
+    public int getOpeApplyReserveTotalCountByNameFor(String id,String reagentName, String personName,String productSn,String applyCode,Integer status) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("reagentName", reagentName);
             params.put("personName", personName);
             params.put("userId",id);
+            params.put("productSn",productSn);
+            params.put("applyCode",applyCode);
+            params.put("status",status);
             return this.opeApplyDao.getOpeApplyReserveTotalCountFor(params);
         } catch (DataAccessException e) {
             logger.error(e.getMessage(), e);
@@ -534,7 +537,7 @@
     }
     @Override
     public List<OpeApplyReserve> getOpeApplyReserveListByNameFor(String id,String reagentName, String personName, Integer first,
-                                                              Integer pageSize) {
+                                                              Integer pageSize,String productSn,String applyCode,Integer status) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("reagentName", reagentName);
@@ -542,6 +545,9 @@
             params.put("userId",id);
             params.put("first", first);
             params.put("pageSize", pageSize);
+            params.put("productSn",productSn);
+            params.put("applyCode",applyCode);
+            params.put("status",status);
             return this.opeApplyDao.getOpeApplyReserveListFor(params);
         } catch (DataAccessException e) {
             logger.error(e.getMessage(), e);
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java
index fbcacba..36737c4 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java
@@ -15,8 +15,8 @@
                                                          Integer pageSize);
 	int getOpeWarehouseReserveTotalCount(String reagentId, String supplierId);
 	List<OpeWarehouseReserve> getOpeWarehouseReserveListByName(String reagentId, String supplierId, Integer first,
-			Integer pageSize);
-	int getOpeWarehouseReserveTotalCountByName(String reagentId, String supplierId);
+			Integer pageSize,String productSn);
+	int getOpeWarehouseReserveTotalCountByName(String reagentId, String supplierId,String productSn);
 	OpeWarehouseReserve getOpeWarehouseReserve(String reagentId, String articleNumber);
 	OpeWarehouseReserve getOpeWarehouseReserve2(String reagentId, String articleNumber,String warehouseId);
 	OpeWarehouseReserve getOpeWarehouseReserveBy(String reagentId, String articleNumber);
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
index 9086784..f20a9dd 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
@@ -88,13 +88,14 @@
 
 	@Transactional(propagation = Propagation.REQUIRED)
 	public List<OpeWarehouseReserve> getOpeWarehouseReserveListByName(String reagentId, String supplierId, Integer first,
-			Integer pageSize) {
+			Integer pageSize,String productSn) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentName", reagentId);
 			params.put("supplierId", supplierId);
 			params.put("first", first);
 			params.put("pageSize", pageSize);
+			params.put("productSn", productSn);
 			return this.opeWarehouseReserveDao.getOpeWarehouseReserveList(params);
 		} catch (DataAccessException e) {
 			logger.error(e.getMessage(), e);
@@ -104,11 +105,12 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public int getOpeWarehouseReserveTotalCountByName(String reagentId, String supplierId) {
+	public int getOpeWarehouseReserveTotalCountByName(String reagentId, String supplierId,String productSn) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentName", reagentId);
 			params.put("supplierId", supplierId);
+			params.put("productSn", productSn);
 			return this.opeWarehouseReserveDao.getOpeWarehouseReserveTotalCount(params);
 		} catch (DataAccessException e) {
 			logger.error(e.getMessage(), e);
@@ -325,7 +327,7 @@
 			for (int i = 0; i < len; i++) {
 				temp += "0";
 			}
-			for (BigInteger i = startReagentCode; i.compareTo(endReagentCode) < 1; i = i.add(BigInteger.ONE)) {
+ 			for (BigInteger i = startReagentCode; i.compareTo(endReagentCode) < 1; i = i.add(BigInteger.ONE)) {
 				reagentCode = temp + String.valueOf(i);
 				if (this.opeReagentStatusService.isOpeReagentStatusExist(reagentCode)) {//条码存在
 					//throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_EXIST, "入库试剂:" + opeApply.getReagent().getName() + "的试剂条形码[" + reagentCode + "]已存在。");
diff --git a/src/main/java/com/nanometer/smartlab/service/SysReagentService.java b/src/main/java/com/nanometer/smartlab/service/SysReagentService.java
index b51db5b..775a88f 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysReagentService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysReagentService.java
@@ -20,12 +20,12 @@
     public int insertSysReagentList(List<SysReagent> sysReagentList);
     public int insertSysReagentList2(List<SysReagent> sysReagentList);
 
-    int getSysReagentTotalCountNew(String name, String cas, String supplierId, Integer type);
+    int getSysReagentTotalCountNew(String name, String cas, String supplierId, Integer type,String productSn);
     public List<SysReagent> query();
 
     Map getReagentDetail(String id);
 
-    public List<SysReagent> getSysReagentListNew(String name, String cas, String supplierId, Integer type, Integer first, Integer pageSize);
+    public List<SysReagent> getSysReagentListNew(String name, String cas, String supplierId, Integer type, Integer first, Integer pageSize,String productSn);
 
     int favorCount(SysUser user, String name, String cas, String supplierId, String productSn,Integer favorFlag);
 
diff --git a/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java
index b78f7bc..ad0eac0 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java
@@ -61,7 +61,7 @@
         }
     }
 
-    public List<SysReagent> getSysReagentListNew(String name, String cas, String supplierId,Integer type, Integer first, Integer pageSize) {
+    public List<SysReagent> getSysReagentListNew(String name, String cas, String supplierId,Integer type, Integer first, Integer pageSize,String productSn) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("name", name);
@@ -70,6 +70,7 @@
             params.put("type", type);
             params.put("first", first);
             params.put("pageSize", pageSize);
+            params.put("productSn", productSn);
             return this.sysReagentDao.getSysReagentListNew(params);
         } catch (DataAccessException e) {
             logger.error(e.getMessage(), e);
@@ -176,13 +177,14 @@
     }
 
 
-    public int getSysReagentTotalCountNew(String name, String cas, String supplierId,Integer type) {
+    public int getSysReagentTotalCountNew(String name, String cas, String supplierId,Integer type,String productSn) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("name", name);
             params.put("cas", cas);
             params.put("type", type);
             params.put("supplierId", supplierId);
+            params.put("productSn", productSn);
             return this.sysReagentDao.getSysReagentTotalCountNew(params);
         } catch (DataAccessException e) {
             logger.error(e.getMessage(), e);
diff --git a/src/main/java/com/nanometer/smartlab/service/SysUserService.java b/src/main/java/com/nanometer/smartlab/service/SysUserService.java
index 89e4772..a613193 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysUserService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysUserService.java
@@ -41,7 +41,7 @@
 
     List<SysUserDto> getUserInfo();
 
-    HazardousWasteUser getUserByAccount(String account);
+    HazardousWasteUser getUserByAccount(String account,String name);
 
     List<LaboratoryVo.LaboratoryUser> getUserByProject(String project);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java
index 449dc3d..b3c0881 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java
@@ -353,9 +353,10 @@
     }
 
     @Override
-    public HazardousWasteUser getUserByAccount(String account) {
+    public HazardousWasteUser getUserByAccount(String account,String name) {
         Map<String, String> params = new HashMap<>();
         params.put("account", account);
+        params.put("name", name);
         return sysUserDao.getUserByAccount(params);
     }
 
diff --git a/src/main/webapp/WEB-INF/ehcache.xml b/src/main/webapp/WEB-INF/ehcache.xml
new file mode 100644
index 0000000..5fed98f
--- /dev/null
+++ b/src/main/webapp/WEB-INF/ehcache.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ehcache updateCheck="false" dynamicConfig="false">
+    <diskStore path="java.io.tmpdir"/>
+
+   <cache name="authorizationCache"
+           maxEntriesLocalHeap="2000"
+           eternal="false"
+           timeToIdleSeconds="43200"
+           timeToLiveSeconds="43200"
+           overflowToDisk="false"
+           statistics="true">
+    </cache>
+
+    <cache name="authenticationCache"
+           maxEntriesLocalHeap="2000"
+           eternal="false"
+           timeToIdleSeconds="43200"
+           timeToLiveSeconds="43200"
+           overflowToDisk="false"
+           statistics="true">
+    </cache>
+
+    <cache name="activeSessionCache"
+           maxEntriesLocalHeap="2000"
+           eternal="false"
+           timeToIdleSeconds="43200"
+           timeToLiveSeconds="43200"
+           overflowToDisk="false"
+           statistics="true">
+    </cache>
+
+    <!-- 缓存5min -->
+    <cache name="fivMin"
+           maxElementsInMemory="10000"
+           maxElementsOnDisk="100000"
+           eternal="false"
+           timeToIdleSeconds="300"
+           timeToLiveSeconds="300"
+           overflowToDisk="false"
+           diskPersistent="false" />
+
+    <!-- 缓存半小时 -->
+    <cache name="halfHour"
+        maxElementsInMemory="10000"
+        maxElementsOnDisk="100000"
+        eternal="false"
+        timeToIdleSeconds="1800"
+        timeToLiveSeconds="1800"
+        overflowToDisk="false"
+        diskPersistent="false" />
+
+    <!-- 缓存一小时 -->
+    <cache name="hour"
+        maxElementsInMemory="10000"
+        maxElementsOnDisk="100000"
+        eternal="false"
+        timeToIdleSeconds="3600"
+        timeToLiveSeconds="3600"
+        overflowToDisk="false"
+        diskPersistent="false" />
+
+    <!-- 缓存一天 -->
+    <cache name="oneDay"
+        maxElementsInMemory="10000"
+        maxElementsOnDisk="100000"
+        eternal="false"
+        timeToIdleSeconds="43200"
+        timeToLiveSeconds="43200"
+        overflowToDisk="false"
+        diskPersistent="false" />
+
+    <!--
+        name:缓存名称。
+        maxElementsInMemory:缓存最大个数。
+        eternal:对象是否永久有效,一但设置了,timeout将不起作用。
+        timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
+        timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
+        overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
+        diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
+        maxElementsOnDisk:硬盘最大缓存个数。
+        diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
+        diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
+        memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
+        clearOnFlush:内存数量最大时是否清除。
+    -->
+    <defaultCache name="defaultCache"
+        maxElementsInMemory="10000"
+        eternal="false"
+        timeToIdleSeconds="120"
+        timeToLiveSeconds="120"
+        overflowToDisk="false"
+        maxElementsOnDisk="100000"
+        diskPersistent="false"
+        diskExpiryThreadIntervalSeconds="120"
+        memoryStoreEvictionPolicy="LRU"/>
+
+</ehcache>
diff --git a/src/main/webapp/WEB-INF/spring-ehcache.xml b/src/main/webapp/WEB-INF/spring-ehcache.xml
new file mode 100644
index 0000000..269286e
--- /dev/null
+++ b/src/main/webapp/WEB-INF/spring-ehcache.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:cache="http://www.springframework.org/schema/cache"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+       http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.springframework.org/schema/cache
+       http://www.springframework.org/schema/cache/spring-cache.xsd">
+    <!-- Spring提供的基于的Ehcache实现的缓存管理器 -->
+
+    <!-- 如果有多个ehcacheManager要在bean加上p:shared="true" -->
+
+    <bean id="cacheManager1" class="org.springframework.cache.ehcache.EhCacheCacheManager">
+        <property name="cacheManager" ref="ehcacheManager"/>
+        <property name="transactionAware" value="true"/>
+    </bean>
+
+    <!-- cache注解,和spring-redis.xml中的只能使用一个 -->
+    <cache:annotation-driven cache-manager="cacheManager1" proxy-target-class="true"/>
+</beans>
diff --git a/src/main/webapp/WEB-INF/spring-shiro.xml b/src/main/webapp/WEB-INF/spring-shiro.xml
index 7d0d169..65070e9 100644
--- a/src/main/webapp/WEB-INF/spring-shiro.xml
+++ b/src/main/webapp/WEB-INF/spring-shiro.xml
@@ -60,7 +60,14 @@
     </bean>
 
     <!-- Cache Manager -->
-    <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"></bean>
+    <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
+        <property name="cacheManager" ref="ehcacheManager"/>
+    </bean>
+
+    <!-- 如果有多个ehcacheManager要在bean加上p:shared="true" -->
+    <bean id="ehcacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
+        <property name="configLocation" value="WEB-INF/ehcache.xml"/>
+    </bean>
 
     <!--session manager-->
     <bean id="sessionManager"
@@ -77,6 +84,13 @@
     <!--自定义 Realm-->
     <bean id="authorizationRealm" class="com.nanometer.smartlab.realm.AuthorizationRealm">
         <property name="credentialsMatcher" ref="md5Matcher"/>
+
+        <!-- 启用身份验证缓存,即缓存AuthenticationInfo信息,默认false -->
+        <property name="authenticationCachingEnabled" value="true"/>
+        <!-- 缓存AuthenticationInfo信息的缓存名称 -->
+        <property name="authenticationCacheName" value="authenticationCache"/>
+        <!-- 缓存AuthorizationInfo信息的缓存名称 -->
+        <property name="authorizationCacheName" value="authorizationCache"/>
     </bean>
 
     <!-- Security Manager -->
@@ -95,4 +109,4 @@
         <property name="securityManager" ref="securityManager"/>
     </bean>
 
-</beans>
\ No newline at end of file
+</beans>
diff --git a/src/main/webapp/reagent_mng.xhtml b/src/main/webapp/reagent_mng.xhtml
index 225a220..93964e3 100644
--- a/src/main/webapp/reagent_mng.xhtml
+++ b/src/main/webapp/reagent_mng.xhtml
@@ -15,7 +15,7 @@
         <p:panel styleClass="center-header">
             <p:outputLabel styleClass="title" value="试剂管理"></p:outputLabel>
 
-            <p:panelGrid styleClass="filter" columns="9">
+            <p:panelGrid styleClass="filter" columns="12">
                 <p:outputLabel value="名称:"></p:outputLabel>
                 <p:inputText value="#{reagentMngController.name}"></p:inputText>
                 <p:outputLabel value="CAS:"></p:outputLabel>
@@ -31,6 +31,10 @@
                     <f:selectItems value="#{reagentMngController.typeList}" var="item"
                                    itemLabel="#{item.text}" itemValue="#{item.key}"></f:selectItems>
                 </p:selectOneMenu>
+
+                <p:outputLabel value="产品编号:"></p:outputLabel>
+                <p:inputText value="#{reagentMngController.productSn}"></p:inputText>
+
                 <p:commandLink styleClass="search" process="@form" update="@form"></p:commandLink>
             </p:panelGrid>
         </p:panel>
@@ -52,7 +56,7 @@
                     <p:confirm header="确认" message="确认操作?"></p:confirm>
                 </p:commandButton>
 				<p:commandButton value="试剂导入" styleClass="import-btn" onclick="importReagent()"
-            ></p:commandButton>
+                ></p:commandButton>
                 <p:commandButton value="耗材导入" styleClass="import-btn" onclick="importReagent2()"
                 ></p:commandButton>
                 <script>
@@ -86,6 +90,9 @@
                 <p:column headerText="名称">
                     <h:outputText value="#{row.name}"></h:outputText>
                 </p:column>
+                <p:column headerText="产品编号">
+                    <h:outputText value="#{row.productSn}"></h:outputText>
+                </p:column>
                 <p:column headerText="CAS">
                     <h:outputText value="#{row.cas}"></h:outputText>
                 </p:column>
diff --git a/src/main/webapp/warehouse_reagent_direct_store.xhtml b/src/main/webapp/warehouse_reagent_direct_store.xhtml
index d22440c..03b9bd3 100644
--- a/src/main/webapp/warehouse_reagent_direct_store.xhtml
+++ b/src/main/webapp/warehouse_reagent_direct_store.xhtml
@@ -51,6 +51,10 @@
 	                    <h:outputText value="#{row.reagent!=null?row.reagent.name:''}"></h:outputText>
 	                </p:column>
 
+					<p:column headerText="产品编号">
+						<h:outputText value="#{row.reagent.productSn}"/>
+					</p:column>
+
 	                <p:column headerText="CAS" width="80">
 	                    <h:outputText value="#{row.reagent!=null?row.reagent.cas:''}"></h:outputText>
 	                </p:column>
@@ -199,6 +203,9 @@
                         <p:column headerText="试剂名称">
                             <h:outputText value="#{row.name}"></h:outputText>
                         </p:column>
+						<p:column headerText="产品编号">
+							<h:outputText value="#{row.productSn}"/>
+						</p:column>
                         <p:column headerText="CAS">
                             <h:outputText value="#{row.cas}"></h:outputText>
                         </p:column>
diff --git a/src/main/webapp/warehouse_stock_mng.xhtml b/src/main/webapp/warehouse_stock_mng.xhtml
index a97ef7d..f2adcf3 100644
--- a/src/main/webapp/warehouse_stock_mng.xhtml
+++ b/src/main/webapp/warehouse_stock_mng.xhtml
@@ -37,6 +37,10 @@
 								<h:outputText value="#{row.reagent.name}"/>
 							</p:column>
 
+							<p:column headerText="产品编号">
+								<h:outputText value="#{row.reagent.productSn}"/>
+							</p:column>
+
 							<p:column headerText="CAS">
 								<h:outputText value="#{row.reagent.cas}"/>
 							</p:column>
@@ -75,7 +79,7 @@
 			<br/>
 			<h:form id="warehouseStockMngForm">
 				<p:panel styleClass="center-header">
-					<p:panelGrid styleClass="filter" columns="5">
+					<p:panelGrid styleClass="filter" columns="7">
 
 						<p:outputLabel value="试剂名称:"></p:outputLabel>
 						<p:inputText value="#{warehouseStockMngController.reagentId}"></p:inputText>
@@ -86,6 +90,9 @@
 							<f:selectItems value="#{warehouseStockMngController.supplierSelectList}"
 										   var="item" itemLabel="#{item.name}" itemValue="#{item.id}"></f:selectItems>
 						</p:selectOneMenu>
+
+						<p:outputLabel value="产品编号:"></p:outputLabel>
+						<p:inputText value="#{warehouseStockMngController.productSn}"></p:inputText>
 
 						<p:commandLink styleClass="search" process="@form" update="@form"></p:commandLink>
 					</p:panelGrid>
@@ -131,6 +138,10 @@
 						<p:column selectionMode="multiple" style="width: 30px;text-align: center;" />
 						<p:column headerText="试剂名称">
 							<h:outputText value="#{row.reagent.name}"></h:outputText>
+						</p:column>
+
+						<p:column headerText="产品编号">
+							<h:outputText value="#{row.reagent.productSn}"/>
 						</p:column>
 
 						<p:column headerText="CAS">
@@ -245,12 +256,22 @@
 			</div>
 			<h:form id="warehouseStockMngFormForPerson">
 				<p:panel styleClass="center-header" style="border-bottom:none;">
-					<p:panelGrid styleClass="filter" columns="5">
+					<p:panelGrid styleClass="filter" columns="12">
 
 						<p:outputLabel value="试剂名称:"></p:outputLabel>
 						<p:inputText value="#{warehouseStockMngController.reagentId}"></p:inputText>
 						<p:outputLabel value="申领人:"></p:outputLabel>
 						<p:inputText value="#{warehouseStockMngController.userName}"></p:inputText>
+						<p:outputLabel value="申购编号:"></p:outputLabel>
+						<p:inputText value="#{warehouseStockMngController.applyCode}"></p:inputText>
+						<p:outputLabel value="产品编号:"></p:outputLabel>
+						<p:inputText value="#{warehouseStockMngController.productSn}"></p:inputText>
+						<p:outputLabel value="状态:"></p:outputLabel>
+						<p:selectOneMenu value="#{warehouseStockMngController.status}">
+							<f:selectItem itemLabel="全部" noSelectionOption="true"></f:selectItem>
+							<f:selectItems value="#{warehouseStockMngController.statusSelectList}" var="item"
+										   itemLabel="#{item.text}" itemValue="#{item.key}"></f:selectItems>
+						</p:selectOneMenu>
 
 						<p:commandLink styleClass="search" process="@form" update="@form"></p:commandLink>
 					</p:panelGrid>
@@ -266,6 +287,8 @@
 										 oncomplete="$('#showTabOrder').css('display','block');"
 										 update="@(.tmpOrder)"
 						></p:commandButton>
+						<p:commandButton update=":centerRootPanel" actionListener="#{warehouseStockMngController.onExportFileBtnClickOrder}"
+										 ajax="false" value="导出" styleClass="new-btn" />
 					</p:panelGrid>
 
 					<p:dataTable id="warehouseStockMngDataTableForPerson" styleClass="data-table"
@@ -331,6 +354,12 @@
 						<p:column headerText="订单状态">
 							<h:outputText value="#{row.status!=null?row.status.text:''}"></h:outputText>
 						</p:column>
+						<p:column headerText="课题组">
+							<h:outputText value="#{row.project}" />
+						</p:column>
+						<p:column headerText="课题组负责人">
+							<h:outputText value="#{row.projectManage}" />
+						</p:column>
 					</p:dataTable>
 				</p:panel>
 			</h:form>

--
Gitblit v1.9.2