From 47a751cb301d05276ae5d75145d57b2d090fe4e1 Mon Sep 17 00:00:00 2001
From: kongzy <kongzy>
Date: 星期一, 01 七月 2024 10:58:35 +0800
Subject: [PATCH] change

---
 src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java | 1849 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 1,419 insertions(+), 430 deletions(-)

diff --git a/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java b/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java
index e9cc241..a16737d 100644
--- a/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java
@@ -1,14 +1,11 @@
 package com.nanometer.smartlab.controller;
 
-import com.nanometer.smartlab.dao.OpeApplyDao;
-import com.nanometer.smartlab.dao.OpeReagentStatusDao;
-import com.nanometer.smartlab.dao.OpeWarehouseReserveDao;
+import com.nanometer.smartlab.dao.*;
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.dto.ApplyListDto;
-import com.nanometer.smartlab.entity.enumtype.ArrivalStatus;
-import com.nanometer.smartlab.entity.enumtype.SeeFlag;
-import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import com.nanometer.smartlab.entity.enumtype.*;
 import com.nanometer.smartlab.exception.BusinessException;
+import com.nanometer.smartlab.exception.ExceptionEnumCode;
 import com.nanometer.smartlab.service.*;
 import com.nanometer.smartlab.util.*;
 import org.apache.commons.lang.StringUtils;
@@ -18,13 +15,16 @@
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.primefaces.context.RequestContext;
 import org.primefaces.event.SelectEvent;
+import org.primefaces.event.TabChangeEvent;
 import org.primefaces.model.LazyDataModel;
 import org.primefaces.model.SortOrder;
 import org.primefaces.model.StreamedContent;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.PropertySource;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import javax.faces.context.ExternalContext;
@@ -36,6 +36,8 @@
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.net.URLEncoder;
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
@@ -43,8 +45,8 @@
 /**
  * Created by cmower on 17/11/20.
  */
-@Controller
 @PropertySource(value = "WEB-INF/config.properties",encoding = "utf-8")
+@Controller
 @Scope("session")
 public class WarehouseStockMngController extends BaseController {
 
@@ -54,6 +56,8 @@
 
     @Resource
     private OpeApplyService opeApplyService;
+	@Resource
+	private SysProjectDao sysProjectDao;
 
 	@Resource
 	private OpeWarehouseReserveService opeWarehouseReserveService;
@@ -65,6 +69,10 @@
 	private SysUserService sysUserService;
 	@Resource
 	private SysSupplierService sysSupplierService;
+	@Resource
+	private OpeOrderService opeOrderService;
+	@Resource
+	private BaseMetaDao baseMetaDao;
 
 	@Resource
 	private MenuController menuController;
@@ -82,6 +90,8 @@
 
     @Resource(name = "opeReagentStatusDao")
 	OpeReagentStatusDao opeReagentStatusDao;
+	@Resource
+	OpeUseFlowService opeUseFlowService;
 
     @Resource
 	OpeWarehouseReserveDao opeWarehouseReserveDao;
@@ -89,7 +99,7 @@
 	OpeApplyDao opeApplyDao;
 
     @Resource
-	OpeLaboratoryReserveService opeLaboratoryReserveService;
+	OpeLaboratoryReserveDao opeLaboratoryReserveDao;
 	/**
 	 * 数据源
 	 */
@@ -113,6 +123,20 @@
 	 * 打开条形码对话框用
 	 */
 	private List<OpeReagentStatus> reagentStatusSelectListForPerson;
+	/**
+	 *打开条形码对话框用
+	 */
+	private Map<Long,Map<Long,OpeWarehouseReserve>> warehouseReserveUseTmp=new HashMap<>();
+	/**
+	 * 打开条形码对话框用
+	 */
+	private List<OpeWarehouseReserve> warehouseReserveList = new ArrayList<>();
+
+	/**
+	 * 打开条形码对话框用
+	 */
+	private OpeWarehouseReserve opeWarehouseReserve = new OpeWarehouseReserve();
+
 
 	public List<OpeReagentStatus> getReagentStatusSelectListForPerson() {
 		return reagentStatusSelectListForPerson;
@@ -122,31 +146,38 @@
 		this.reagentStatusSelectListForPerson = reagentStatusSelectListForPerson;
 	}
 
-	private String reagentId;
-	private String reagentLogId;
+	private String reagentName;
+	private Long reagentLogId;
 
 	private String userName;
+	private Integer tabValue = 0;
 
 	private List<SysReagent> reagentSelectList;
 	private List<String> showCodes;
-	private String userId;
-	private String projectNum;
-	private String userLogId;
+	private Long userId;
+	private Long projectId;
+	private Long userLogId;
 	private String reagentCode;
 	private Integer useNum;
 	private String startReagentCode;
 	private String endReagentCode;
 	private String startReagentCodeForPerson;
 	private String endReagentCodeForPerson;
+	private String warehouseName;
 
 	private Integer editFlag;
+	private Integer isAllApply = 0;
 	private StreamedContent file;
 	@Value("${pdf.export.file.path}")
 	private String pdfExportFilePath;
 	@Value("${institute.name}")
 	String instituteName;
 
+	private boolean isExpired;
+
 	private Hashtable printTable;
+	@Autowired
+	private AccountInAndOutService accountInAndOutService;
 
 	public Hashtable getPrintTable() {
 		return printTable;
@@ -186,10 +217,13 @@
 
 	private List<SysUser> userSelectList;
 	private List<SysUser> applyUserSelectList;
-	private String supplierId;
+	private Long supplierId;
 	private List<SysSupplier> supplierSelectList;
 	//private boolean flag = false;
-
+	//领用单号
+	private String receiptNumber;
+	//备注
+	private String note;
 	// 试剂库
     private LazyDataModel<SysReagent> reagentDataModel;
 	// 直接入库试剂List
@@ -202,18 +236,22 @@
     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;
     private List<BaseMeta> warehouseContainerPlaceList;
-    private Map<String, String> warehouseNameMap;
-    private Map<String, SysWarehouseContainer> warehouseContainerMap;
-    private Map<String, List<SysWarehouseContainer>> warehouseIdContainerMap;
+    private Map<Long, String> warehouseNameMap;
+    private Map<Long, SysWarehouseContainer> warehouseContainerMap;
+    private Map<Long, List<SysWarehouseContainer>> warehouseIdContainerMap;
 
-    private String laboratoryId;
-    private String oriLaboratoryId;
+    private Long laboratoryId;
+    private Long oriLaboratoryId;
     private List<SysLaboratory> laboratory;
-    private String laboratoryContainerId;
+    private Long laboratoryContainerId;
     private List<SysLaboratoryContainer> laboratoryContainers;
 
 	/**
@@ -229,7 +267,22 @@
 	 * 选中的list
 	 */
 	private List<OpeApplyReserve> selectedListForPerson;
-
+	private List<OpeApplyReserve> selectedTmpOrderList;
+	private List<OpeApplyReserve> trulySelectedOrderList;
+	/**
+	* 入库车
+	*/
+	private List<OpeApplyReserve> selectedInputStorageTmpOrderList;
+	private List<OpeApplyReserve> trulyInputStorageTmpSelectedOrderList;
+	/**
+	 * 订单入库变量
+	 */
+	//到货时间
+	private Timestamp arrivalTime;
+	//收货人
+	private Long consigneeId;
+	//OpeApply
+	private List<OpeApplyReserve> opeApplyList;
 	/**
 	 * 条形码对话框中选择的条形码集合
 	 */
@@ -259,7 +312,14 @@
 		this.initUserSelectList();
 	}
 
-
+	/**
+	 * 获取已领用数量
+	 * @param applyCode
+	 * @return
+	 */
+	public Integer getUsedCount(String applyCode){
+		return this.opeReagentStatusDao.getReagentStatusCountByApplyCode(applyCode);
+	}
 
 
 
@@ -269,15 +329,15 @@
 		this.initUserSelectList();
 
         this.warehouseList = this.sysWarehouseService.getSysWarehouseList(null, null, null, null);
-        this.warehouseNameMap = new HashMap<String, String>();
+        this.warehouseNameMap = new HashMap<Long, String>();
         if (this.warehouseList != null && this.warehouseList.size() > 0) {
             for (SysWarehouse house : this.warehouseList) {
                 this.warehouseNameMap.put(house.getId(), house.getName());
             }
         }
 
-        this.warehouseContainerMap = new HashMap<String, SysWarehouseContainer>();
-        this.warehouseIdContainerMap = new HashMap<String, List<SysWarehouseContainer>>();
+        this.warehouseContainerMap = new HashMap<Long, SysWarehouseContainer>();
+        this.warehouseIdContainerMap = new HashMap<Long, List<SysWarehouseContainer>>();
         List<SysWarehouseContainer> warehouseContainerList = this.sysWarehouseContainerService.getSysWarehouseContainerList(null, null, null, null, null);
         if (warehouseContainerList != null && warehouseContainerList.size() > 0) {
             for (SysWarehouseContainer container : warehouseContainerList) {
@@ -294,6 +354,33 @@
         this.onWarehouseSelectChange(null);
 	}
 
+	public void initInputWarehouse() {
+		logger.info("WarehouseStockMngController initInputWarehouse start");
+		this.warehouseList = this.sysWarehouseService.getSysWarehouseList(null, null, null, null);
+		this.warehouseNameMap = new HashMap<Long, String>();
+		if (this.warehouseList != null && this.warehouseList.size() > 0) {
+			for (SysWarehouse house : this.warehouseList) {
+				this.warehouseNameMap.put(house.getId(), house.getName());
+			}
+		}
+		this.warehouseContainerMap = new HashMap<Long, SysWarehouseContainer>();
+		this.warehouseIdContainerMap = new HashMap<Long, List<SysWarehouseContainer>>();
+		List<SysWarehouseContainer> warehouseContainerList = this.sysWarehouseContainerService.getSysWarehouseContainerList(null, null, null, null, null);
+		if (warehouseContainerList != null && warehouseContainerList.size() > 0) {
+			for (SysWarehouseContainer container : warehouseContainerList) {
+				warehouseContainerMap.put(container.getId(), container);
+
+				if (!warehouseIdContainerMap.containsKey(container.getWarehouseId())
+						|| warehouseIdContainerMap.get(container.getWarehouseId()) == null) {
+					warehouseIdContainerMap.put(container.getWarehouseId(), new ArrayList<SysWarehouseContainer>());
+				}
+				warehouseIdContainerMap.get(container.getWarehouseId()).add(container);
+			}
+		}
+
+		this.onWarehouseSelectChange(null);
+	}
+
 	private void initReagentSelectList() {
 		logger.info("WarehouseStockMngController initReagentSelectList start");
 		this.setReagentSelectList(this.sysReagentService.getSysReagentList(null, null, null, null,null, null));
@@ -301,7 +388,7 @@
 
 	private void initUserSelectList() {
 		logger.info("WarehouseStockMngController initUserSelectList start");
-		this.setUserSelectList(this.sysUserService.getSysUserList(null, null, null, null, null));
+		this.setUserSelectList(this.sysUserService.getSysUserList(null, null, null, null, null,null,null));
 		/**if(sysUserService.getSysUser(userId) == null)
 		{
 			this.laboratory = this.sysLaboratoryService.getSysLaboratoryListByDep(this.getUserDepartment());
@@ -317,11 +404,11 @@
 	private void initReagentStatusSelectList() {
 		logger.info("WarehouseStockMngController initReagentStatusSelectList start");
 		if (selectedOpeWarehouseReserve != null) {
-			String reagentId = selectedOpeWarehouseReserve.getReagentId();
+			Long reagentId = selectedOpeWarehouseReserve.getReagentId();
 			String articleNumber = selectedOpeWarehouseReserve.getArticleNumber();
 
-			this.setReagentStatusSelectList(opeReagentStatusService.getOpeReagentStatusList(reagentId, articleNumber,
-					ArrivalStatus.WAREHOUSE.getKey(), reagentCode, null, null, null));
+			this.setReagentStatusSelectList(opeReagentStatusService.getOpeReagentStatusList22(reagentId, articleNumber,
+					ArrivalStatus.WAREHOUSE.getKey(), reagentCode, null, null,null, null));
 
 //			System.out.print("this.getReagentStatusSelectList().size(): " + this.reagentStatusSelectList.size());
 //			System.out.print("this.getReagentStatusSelectList().get(0): " + this.reagentStatusSelectList.get(0).getReagentCode());
@@ -334,13 +421,10 @@
 	private void initReagentStatusSelectListForPerson() {
 		logger.info("WarehouseStockMngController initReagentStatusSelectListForPerson start");
 		if (selectedOpeApplyReserve != null) {
-			String reagentId = selectedOpeApplyReserve.getReagent().getId();
+			Long reagentId = selectedOpeApplyReserve.getReagent().getId();
 			String articleNumber = selectedOpeApplyReserve.getArticleNumber();
-			System.out.println(reagentId);
-			System.out.println(articleNumber);
-			System.out.println(reagentCode);
-			this.setReagentStatusSelectListForPerson(opeReagentStatusService.getOpeReagentStatusList(reagentId, articleNumber,
-					ArrivalStatus.WAREHOUSE.getKey(), reagentCode, null, null, null));
+			this.setReagentStatusSelectListForPerson(opeReagentStatusService.getOpeReagentStatusList22(reagentId, articleNumber,
+					ArrivalStatus.WAREHOUSE.getKey(), reagentCode, null, selectedOpeApplyReserve.getApplyCode(),null, null));
 
 		}
 	}
@@ -350,7 +434,8 @@
 		System.out.println(getUser().getSeeFlag().getKey());
 		//SysUser u=sysUserService.getSysUser(getUserId());
 		//System.out.println(u);
-		if (getUser().getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()) {
+		if (getUser().getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()
+				&& getUser().getSeeFlag().getKey() != SeeFlag.LEADING.getKey()) {
 			editFlag=0;
 		}else{
 			editFlag=1;
@@ -387,10 +472,92 @@
 		}
 	}
 
+	public void addOrder() {
+		logger.info("WarehouseStockMngController onUseBtnClick start");
+		if (this.selectedListForPerson == null || this.selectedListForPerson.size() == 0) {
+			FacesUtils.warn("请选择数据。");
+			return;
+		}
+		if (selectedTmpOrderList !=null && selectedTmpOrderList.size()>0){
+			ArrayList<OpeApplyReserve> tmp = new ArrayList<>();
+			selectedListForPerson.forEach(opeApplyReserve -> {
+				AtomicBoolean flag = new AtomicBoolean(false);
+				selectedTmpOrderList.forEach(opeApplyReserve1 -> {
+					if (opeApplyReserve.getId().equals(opeApplyReserve1.getId())){
+						flag.set(true);
+					}
+
+				});
+				if(!flag.get()) {
+					tmp.add(opeApplyReserve);
+				}
+			});
+			selectedTmpOrderList.addAll(tmp);
+		}else{
+			selectedTmpOrderList = new ArrayList<>();
+			selectedTmpOrderList.addAll(selectedListForPerson);
+		}
+	}
+
+	public void addInputStorageOrder() {
+		if (this.selectedListForPerson == null || this.selectedListForPerson.size() == 0) {
+			FacesUtils.warn("请选择数据。");
+			return;
+		}
+		//1.判断非状态为确认的申购单不能入库
+		for (OpeApplyReserve opeApplyReserve : this.selectedListForPerson) {
+			if (opeApplyReserve.getStatus() != ApplyStatus.SUPPLIER_CONFIRM && opeApplyReserve.getStatus() != ApplyStatus.UNCOMPLETED) {
+				FacesUtils.warn("非已确认的数据不能入库。");
+				return;
+			}
+		}
+		//2.加入暂存
+		if (selectedInputStorageTmpOrderList !=null && selectedInputStorageTmpOrderList.size()>0){
+			ArrayList<OpeApplyReserve> tmp = new ArrayList<>();
+			selectedListForPerson.forEach(opeApplyReserve -> {
+				AtomicBoolean flag = new AtomicBoolean(false);
+				selectedInputStorageTmpOrderList.forEach(opeApplyReserve1 -> {
+					if (opeApplyReserve.getId().equals(opeApplyReserve1.getId())){
+						flag.set(true);
+					}
+
+				});
+				if(!flag.get()) {
+					tmp.add(opeApplyReserve);
+				}
+			});
+			selectedInputStorageTmpOrderList.addAll(tmp);
+		}else{
+			selectedInputStorageTmpOrderList = new ArrayList<>();
+			selectedInputStorageTmpOrderList.addAll(selectedListForPerson);
+		}
+	}
+
 
 	public void  clear(){
 		selectedTmpList = null;
 	}
+
+	public void  clearOrderTmp(){
+		selectedTmpOrderList = null;
+	}
+
+	public void hideOrderTmp() {
+		//清空
+		selectedTmpOrderList = null;
+		//隐藏
+		RequestContext.getCurrentInstance().execute("document.getElementById('showTabOrder').style.display='none'");
+	}
+
+	public void  clearInputStorageTmp(){
+		selectedInputStorageTmpOrderList = null;
+	}
+
+	public void hideInputStorageTmp(){
+        selectedInputStorageTmpOrderList = null;
+
+        RequestContext.getCurrentInstance().execute("document.getElementById('putInStorage').style.display='none'");
+    }
 
 	public void cancel(){
 		if (trulySelectedList == null || trulySelectedList.size()<=0){
@@ -403,19 +570,78 @@
 			return;
 		}
 
-			ArrayList<Integer> indexs = new ArrayList<>();
-		for (int i =0;i<trulySelectedList.size();i++){
-			for (int j = 0; j < selectedTmpList.size(); j++) {
-				if(trulySelectedList.get(i).getId().equals(selectedTmpList.get(j).getId()))
-				{
-					indexs.add(i);
+			ArrayList<Object> indexs = new ArrayList<>();
+        for (OpeWarehouseReserve warehouseReserve : trulySelectedList) {
+            for (OpeWarehouseReserve opeWarehouseReserve : selectedTmpList) {
+                if (warehouseReserve.getId().equals(opeWarehouseReserve.getId())) {
+                    indexs.add(warehouseReserve);
+                }
+            }
+        }
+
+		if (indexs.size()>0){
+			indexs.forEach(obj -> {
+				selectedTmpList.remove(obj);
+			});
+		}
+
+	}
+
+	public void hide(){
+		selectedTmpList = null;
+		RequestContext.getCurrentInstance().execute("document.getElementById('showTab').style.display='none'");
+	}
+	public void cancelOrderTmp(){
+		if (trulySelectedOrderList == null || trulySelectedOrderList.size()<=0){
+			FacesUtils.info("至少选择一个");
+			return;
+		}
+
+		if (selectedTmpOrderList == null || selectedTmpOrderList.size()<=0){
+			FacesUtils.info("至少选择一个");
+			return;
+		}
+
+		ArrayList<Object> indexs = new ArrayList<>();
+        for (OpeApplyReserve opeApplyReserve : trulySelectedOrderList) {
+            for (OpeApplyReserve applyReserve : selectedTmpOrderList) {
+                if (opeApplyReserve.getId().equals(applyReserve.getId())) {
+                    indexs.add(opeApplyReserve);
+                }
+            }
+        }
+
+		if (indexs.size()>0){
+			indexs.forEach(obj -> {
+				selectedTmpOrderList.remove(obj);
+			});
+		}
+
+	}
+
+	public void cancelInputStorageTmp(){
+		if (trulyInputStorageTmpSelectedOrderList == null || trulyInputStorageTmpSelectedOrderList.size()<=0){
+			FacesUtils.info("至少选择一个");
+			return;
+		}
+
+		if (selectedInputStorageTmpOrderList == null || selectedInputStorageTmpOrderList.size()<=0){
+			FacesUtils.info("至少选择一个");
+			return;
+		}
+
+		ArrayList<Object> indexs = new ArrayList<>();
+		for (OpeApplyReserve opeApplyReserve : trulyInputStorageTmpSelectedOrderList) {
+			for (OpeApplyReserve applyReserve : selectedInputStorageTmpOrderList) {
+				if (opeApplyReserve.getId().equals(applyReserve.getId())) {
+					indexs.add(opeApplyReserve);
 				}
 			}
 		}
 
 		if (indexs.size()>0){
-			indexs.forEach(index -> {
-				selectedTmpList.remove(selectedTmpList.get(index));
+			indexs.forEach(obj -> {
+				selectedInputStorageTmpOrderList.remove(obj);
 			});
 		}
 
@@ -426,10 +652,55 @@
 			FacesUtils.info("至少选择一个");
 			return;
 		}
-
+		this.userId = getUser().getId();
 		this.menuController.goToPage(Constants.PAGE_WAREHOUSE_REAGENT_USE_NEW, Constants.PAGE_WAREHOUSE_STOCK_MNG);
 	}
 //
+	public void onUseBtnClickOrderTmp(){
+		warehouseReserveUseTmp = new HashMap<>();
+		opeWarehouseReserve = new OpeWarehouseReserve();
+		if (selectedTmpOrderList == null || selectedTmpOrderList.size()<=0){
+			FacesUtils.info("至少选择一个");
+			return;
+		}
+
+
+		//相同的试剂不能再多选
+		Set<Long> checkTable = new HashSet<>();
+		for (OpeApplyReserve oar : selectedTmpOrderList) {
+			Long reagentId = oar.getReagent().getId();
+			if (!checkTable.contains(reagentId)) {
+				checkTable.add(reagentId);
+			}else{
+				FacesUtils.info("相同试剂不能重复选择");
+				return;
+			}
+		}
+		checkTable = null;
+		//
+		this.userId = selectedTmpOrderList.get(0).getApplyUserId();
+		SysUser sysUser = sysUserService.getSysUser(this.userId);
+		if (sysUser == null){
+			FacesUtils.info("申领人不存在");
+			return;
+		}
+		this.menuController.goToPage(Constants.PAGE_WAREHOUSE_REAGENT_USE_NEW_PERSON, Constants.PAGE_WAREHOUSE_STOCK_MNG);
+	}
+
+	public void onUseBtnClickInputStorageTmp(){
+		if (selectedInputStorageTmpOrderList == null || selectedInputStorageTmpOrderList.size()<=0){
+			FacesUtils.info("至少选择一个");
+			return;
+		}
+		opeApplyList = new ArrayList<>();
+		selectedInputStorageTmpOrderList.forEach(opeApplyReserve -> {
+			OpeApplyReserve applyDetail = opeApplyService.getOpeApplyDetail(opeApplyReserve.getId());
+			opeApplyList.add(applyDetail);
+
+		});
+		//跳转编辑页面
+		this.menuController.goToPage(Constants.PAGE_ORDER_INPUT_WAREHOUSE, Constants.PAGE_WAREHOUSE_STOCK_MNG);
+	}
 
 	public void onUseBtnClickForPerson() {
 		logger.info("WarehouseStockMngController onUseBtnClickForPerson start");
@@ -471,9 +742,161 @@
 
 		// 根据选择的试剂获取对应的条形码
 		initReagentStatusSelectListForPerson();
+		//初始化试剂库存所在仓库仓库
+		this.warehouseReserveList = opeWarehouseReserveService.selectWarehouseByReagentIdAndArticleNumber(selectedOpeApplyReserve.getReagent().getId(),selectedOpeApplyReserve.getArticleNumber(),true);
+		//初始化第一个库存
+		if (warehouseReserveList.size()>0)
+			selectChangeReserve(warehouseReserveList.get(0).getWarehouseId());
+		//初始化条形码,通过applyReserve保存的条码显示对应试剂的条码
+		for (OpeApplyReserve oar : selectedTmpOrderList) {
+			if (oar.getReagent().getId().equals(opeWarehouseReserve.getReagentId())) {
+				this.endReagentCodeForPerson = oar.getEndReagentCode2();
+				this.startReagentCodeForPerson = oar.getStartReagentCode2();
+			}
+		}
+		if (warehouseReserveUseTmp.get(selectedOpeApplyReserve.getReagent().getId()) == null) {
+			//初始化库中领用和大小,
+			reagentCodeSelectedList = selectedOpeApplyReserve.getReagentCodes();
+			useNum = selectedOpeApplyReserve.getReagentCodes() == null?0: selectedOpeApplyReserve.getReagentCodes().size();
+			this.endReagentCodeForPerson = null;
+			this.startReagentCodeForPerson = null;
+		}
 
 		RequestContext.getCurrentInstance().execute("PF('reagentCodeDialogForPerson').show()");
 	}
+	/**
+	* 变换库存
+	*/
+	public void selectChangeReserve(Long  id) {
+		if (warehouseReserveList.size() > 0) {
+			warehouseReserveList.forEach(owr -> {
+				if (owr.getWarehouseId().equals(id)){
+					opeWarehouseReserve.setId(owr.getId());
+					opeWarehouseReserve.setWarehouseId(id);
+					opeWarehouseReserve.setWarehouseName(owr.getWarehouseName());
+					opeWarehouseReserve.setReserve(owr.getReserve());
+					opeWarehouseReserve.setReagentId(owr.getReagentId());
+				}
+			});
+		}
+	}
+
+	/**
+	* 补贴条码->添加x仓库的n个试剂
+	*/
+	public void add2() {
+
+		//0.判断该批次是否再仓库有库存
+		if (opeWarehouseReserve.getId() == null) {
+			FacesUtils.warn("没有库存");
+			return;
+		}
+		//1.判断领取数量
+		if (useNum > opeWarehouseReserve.getReserve()) {
+			FacesUtils.warn("领用数量不能超过库存");
+			return;
+		}
+		//2.加入Map
+		OpeWarehouseReserve owr = new OpeWarehouseReserve();
+		owr.setId(opeWarehouseReserve.getId());
+		owr.setWarehouseId(opeWarehouseReserve.getWarehouseId());
+		owr.setWarehouseName(opeWarehouseReserve.getWarehouseName());
+		owr.setReserve(opeWarehouseReserve.getReserve());
+		owr.setReagentId(opeWarehouseReserve.getReagentId());
+		owr.setUseNum(useNum);
+		if (warehouseReserveUseTmp.get(owr.getReagentId()) == null) {
+			Map<Long, OpeWarehouseReserve> tmp = new HashMap<>();
+			tmp.put(owr.getWarehouseId(), owr);
+			warehouseReserveUseTmp.put(owr.getReagentId(), tmp);
+		}else{
+			warehouseReserveUseTmp.get(owr.getReagentId()).put(owr.getWarehouseId(), owr);
+		}
+		//变换条码
+		btCodeChange();
+	}
+
+	/**
+	* 取消一个仓库领取
+	*/
+	public void remove2(OpeWarehouseReserve owr) {
+		if (warehouseReserveUseTmp.get(owr.getReagentId()).size() > 0) {
+			warehouseReserveUseTmp.get(owr.getReagentId()).remove(owr.getWarehouseId());
+			//变换条码
+			btCodeChange();
+		}
+	}
+
+	/**
+	*  获取暂存表单
+	*/
+	public List<OpeWarehouseReserve> getDataTmp() {
+
+		List<OpeWarehouseReserve> list = new ArrayList<>();
+
+
+		Map<Long, OpeWarehouseReserve> dataMap = warehouseReserveUseTmp.
+				get(opeWarehouseReserve.getReagentId());
+		if (dataMap ==null) {
+			return list;
+		}
+		Set<Map.Entry<Long, OpeWarehouseReserve>> entries = dataMap.entrySet();
+		for (Map.Entry<Long, OpeWarehouseReserve> e : entries) {
+			list.add(e.getValue());
+		}
+		return list;
+	}
+	/**
+	* @Description: 补贴结束条码的生成
+	*/
+	public void btCodeChange(){
+		//1.获取补贴试剂总数
+		List<OpeWarehouseReserve> dataTmp = getDataTmp();
+		int distance =  dataTmp.stream().mapToInt(item -> item.getUseNum() == null ? 0 : item.getUseNum()).sum();
+
+		//1.如果开始条码为空,距离为0
+		if (StringUtils.isBlank(startReagentCodeForPerson)
+				|| distance < 1) {
+			return;
+		}
+		//2如果开始条码不为空
+		//2.0如果包含字母不等于24位的直接不管
+		if (startReagentCodeForPerson.matches(".*\\D+.*")) {
+			if (startReagentCodeForPerson.length() ==24 &&
+                    startReagentCodeForPerson.matches(".*([A-F]|\\d)+.*") &&
+                    startReagentCodeForPerson.substring(startReagentCodeForPerson.length() - 5).matches("\\d{5}")){
+				//2.2长度为24位编码的
+				BigInteger arrNum = BigInteger.valueOf(distance);
+				//后5位随机码
+				String randomCode = startReagentCodeForPerson.substring(startReagentCodeForPerson.length() - 5);
+				String reagentCodePrefix = startReagentCodeForPerson.substring(0,startReagentCodeForPerson.length() - 5);
+
+				BigInteger startReagentCodeSuffix = new BigInteger(randomCode);
+				BigInteger endReagentCodeSuffix = startReagentCodeSuffix.add(arrNum).subtract((new BigInteger("1")));
+				String reagentCodeSuffix= autoGenericCode(randomCode, endReagentCodeSuffix);
+				endReagentCodeForPerson = (reagentCodePrefix + reagentCodeSuffix);
+			}else{
+				endReagentCodeForPerson = ("");
+			}
+		}else{
+
+			BigInteger startReagentCode = new BigInteger(startReagentCodeForPerson);
+			//2.1长度不为24位编码
+			//数据1
+			BigInteger arrNum = BigInteger.valueOf(distance);
+			BigInteger code1 = startReagentCode.add(arrNum).subtract(BigInteger.ONE);
+			endReagentCodeForPerson = (autoGenericCode(startReagentCodeForPerson, code1));
+		}
+		//把数据放入applyReserve
+		for (OpeApplyReserve oar : selectedTmpOrderList) {
+			if (oar.getReagent().getId().equals(this.opeWarehouseReserve.getReagentId())) {
+				oar.setEndReagentCode2(endReagentCodeForPerson);
+				oar.setStartReagentCode2(startReagentCodeForPerson);
+			}
+		}
+	}
+
+
+
 
 	public void onYesBtnClickForPerson() {
 		try {
@@ -496,8 +919,11 @@
 				}
 			}
 			// 将当前选择条形码保存到库存中
-			for (OpeApplyReserve opeApplyReserve : this.selectedListForPerson) {
+			for (OpeApplyReserve opeApplyReserve : this.selectedTmpOrderList) {
 				if (opeApplyReserve.getId().equals(this.selectedOpeApplyReserve.getId())) {
+					//list OpeWarehouseReserve
+					//getReserve 总数小于 useNum 报错
+
 					OpeWarehouseReserve wa=opeWarehouseReserveService.getOpeWarehouseReserve(opeApplyReserve.getReagent().getId(),opeApplyReserve.getArticleNumber());
 					if(this.useNum > wa.getReserve())
 					{
@@ -507,12 +933,18 @@
 					opeApplyReserve.setSelectNum(useNum);
 					if(this.reagentCodeSelectedList != null)
 					{
-						opeApplyReserve.setReagentCode(this.reagentCodeSelectedList);
+						opeApplyReserve.setReagentCodes(this.reagentCodeSelectedList);
 					}
 					opeApplyReserve.setFlag(1);
+					//删除前面部分的补贴条码领用显示
+					warehouseReserveUseTmp.remove(opeApplyReserve.getReagent().getId());
+					endReagentCodeForPerson = null;
+					startReagentCodeForPerson = null;
 					break;
 				}
 			}
+
+
 
 			//FacesUtils.info("选择条形码个数为" + this.reagentCodeSelectedList.size());
 			RequestContext.getCurrentInstance().execute("PF('reagentCodeDialogForPerson').hide()");
@@ -524,94 +956,43 @@
 
 	public void onYesBtnClickForPerson2() {
 		try {
-			//if (this.reagentCodeSelectedList == null || this.reagentCodeSelectedList.size() == 0) {
-			//FacesUtils.warn("请选择条形码。");
-			//return;
-			//}
 
-			if(this.useNum == null || this.useNum <= 0)
-			{
-				FacesUtils.warn("请输入大于0的领用数量!");
+			//1.获取补贴试剂总数,判断数量
+			List<OpeWarehouseReserve> dataTmp = getDataTmp();
+			//distance为领用总数
+			int distance = dataTmp.stream().mapToInt(item -> item.getUseNum() == null ? 0 : item.getUseNum()).sum();
+			if (distance < 1) {
+				FacesUtils.warn("请领取试剂");
 				return;
 			}
-			System.out.println("====onYesBtnClick======");
-			BigDecimal startReagentCode2 = new BigDecimal(startReagentCodeForPerson);
-			BigDecimal endReagentCode2 = new BigDecimal(endReagentCodeForPerson);
-			// 检查条形码结束要大于条形码开始
-			if (endReagentCode2.compareTo(startReagentCode2) == -1) {
-				FacesUtils.warn("条形码开始必须小于条形码结束。");
+			//2.申购单已经领用的数量+当前准备领用的数量不能超过 单子的申请数量
+			if (selectedOpeApplyReserve.getNum() < selectedOpeApplyReserve.getUsed() + distance) {
+				FacesUtils.warn("当前领用数量超过订单的申请数量");
 				return;
 			}
-			// 检查条形码和到货数量是否匹配
-			if (endReagentCode2.subtract(startReagentCode2).intValue() != (useNum - 1)) {
-				FacesUtils.warn("条形码数量和领用数量不一致。");
-				return;
-			}
-
-			BigInteger startReagentCode3=new BigInteger(startReagentCodeForPerson);
-			BigInteger endReagentCode3=new BigInteger(endReagentCodeForPerson);
-			int len = startReagentCodeForPerson.length() - String.valueOf(startReagentCode3).length();
-			String temp = "";
-			for (int i = 0; i < len; i++) {
-				temp += "0";
-			}
-			String str="";
-			for (BigInteger i = startReagentCode3; i.compareTo(endReagentCode3) < 1; i = i.add(BigInteger.ONE)) {
-				String code = temp + String.valueOf(i);
-				OpeReagentStatus status=this.opeReagentStatusService.getOpeReagentStatusByReagentCode(code);
-				if(status==null){
-
-				}else{
-					if(status.getStatus()==ArrivalStatus.WAREHOUSE){
-
-					}else{
-						str+=code+",";
-					}
-				}
-			}
-			if(str!=null && !str.equals("")){
-				FacesUtils.info("条形码"+str.substring(0,str.length()-1)+"已被领用");
-				return;
-			}
-
+			List<String> codeList = opeReagentStatusService
+					.checkReagentCode(startReagentCodeForPerson, endReagentCodeForPerson, distance);
 
 
 			// 将当前选择条形码保存到库存中
-			List<String> codeList=new ArrayList<>();
-			for (OpeApplyReserve opeApplyReserve : this.selectedListForPerson) {
+			for (OpeApplyReserve opeApplyReserve : this.selectedTmpOrderList) {
 				if (opeApplyReserve.getId().equals(this.selectedOpeApplyReserve.getId())) {
-					OpeWarehouseReserve wa=opeWarehouseReserveService.getOpeWarehouseReserve(opeApplyReserve.getReagent().getId(),opeApplyReserve.getArticleNumber());
-					if(wa==null){
-						wa=new OpeWarehouseReserve();
-						wa.setReserve(0);
-					}
-					if(this.useNum > wa.getReserve())
-					{
-						FacesUtils.warn("库存不够,请确认或申购!");
-						return;
-					}
-					opeApplyReserve.setSelectNum(useNum);
-					opeApplyReserve.setStartReagentCode(startReagentCode2);
-					opeApplyReserve.setEndReagentCode(endReagentCode2);
-					opeApplyReserve.setStartReagentCode2(temp+startReagentCode2.toString());
-					opeApplyReserve.setEndReagentCode2(temp+endReagentCode2.toString());
-					for (BigInteger i = new BigInteger(startReagentCodeForPerson); i.compareTo(new BigInteger(endReagentCodeForPerson)) < 1; i = i.add(BigInteger.ONE)) {
-						codeList.add(i.toString());
-					}
-					/*for(int i=Integer.parseInt(startReagentCodeForPerson);i<=Integer.parseInt(endReagentCodeForPerson);i++){
-						codeList.add(Integer.toString(i));
-					}*/
-					if(codeList != null)
-					{
-						opeApplyReserve.setReagentCode(codeList);
-					}
+					opeApplyReserve.setSelectNum(distance);
+					opeApplyReserve.setStartReagentCode2(this.startReagentCodeForPerson);
+					opeApplyReserve.setEndReagentCode2(this.endReagentCodeForPerson);
+					opeApplyReserve.setReagentCodes(codeList);
+					opeApplyReserve.setCacheUpdateList(getDataTmp());
 					opeApplyReserve.setFlag(0);
+					reagentCodeSelectedList = null;
 					break;
 				}
 			}
 
 			//FacesUtils.info("选择条形码个数为" + codeList.size());
 			RequestContext.getCurrentInstance().execute("PF('reagentCodeDialogForPerson').hide()");
+		} catch (BusinessException e) {
+			logger.error("操作失败。", e);
+			FacesUtils.warn(e.getMessage());
 		} catch (Exception e) {
 			logger.error("操作失败。", e);
 			FacesUtils.warn("操作失败。");
@@ -619,72 +1000,25 @@
 	}
 
 	public void onYesBtnClick2(){
-		try{
-			if(this.useNum == null || this.useNum <= 0)
-			{
+		try {
+			if (this.useNum == null || this.useNum <= 0) {
 				FacesUtils.warn("请输入大于0的领用数量!");
 				return;
 			}
-			BigDecimal startReagentCode2 = new BigDecimal(startReagentCode);
-			BigDecimal endReagentCode2 = new BigDecimal(endReagentCode);
-			// 检查条形码结束要大于条形码开始
-			if (endReagentCode2.compareTo(startReagentCode2) == -1) {
-				FacesUtils.warn("条形码开始必须小于条形码结束。");
-				return;
-			}
-			// 检查条形码和到货数量是否匹配
-			if (endReagentCode2.subtract(startReagentCode2).intValue() != (useNum - 1)) {
-				FacesUtils.warn("条形码数量和领用数量不一致。");
-				return;
-			}
-			BigInteger startReagentCode3=new BigInteger(startReagentCode);
-			BigInteger endReagentCode3=new BigInteger(endReagentCode);
-			int len = startReagentCode.length() - String.valueOf(startReagentCode3).length();
+			List<String> codeList = opeReagentStatusService
+					.checkReagentCode(startReagentCode, endReagentCode, useNum);
 
-			String temp = "";
-			for (int i = 0; i < len; i++) {
-				temp += "0";
-			}
-			String str="";
-			for (BigInteger i = startReagentCode3; i.compareTo(endReagentCode3) < 1; i = i.add(BigInteger.ONE)) {
-				String code = temp + String.valueOf(i);
-				OpeReagentStatus status=this.opeReagentStatusService.getOpeReagentStatusByReagentCode(code);
-				if(status==null){
-
-				}else{
-					if(status.getStatus()==ArrivalStatus.WAREHOUSE){
-
-					}else{
-						str+=code+",";
-					}
-				}
-			}
-			if(str!=null && !str.equals("")){
-				FacesUtils.info("条形码"+str.substring(0,str.length()-1)+"已被领用");
-				return;
-			}
-
-			List<String> codeList=new ArrayList<>();
-			for (OpeWarehouseReserve opeWarehouseReserve : this.selectedList) {
+			for (OpeWarehouseReserve opeWarehouseReserve : this.selectedTmpList) {
 				if (opeWarehouseReserve.getId().equals(this.selectedOpeWarehouseReserve.getId())) {
-					if(this.useNum > opeWarehouseReserve.getReserve())
-					{
+					if (this.useNum > opeWarehouseReserve.getReserve()) {
 						FacesUtils.warn("库存不够,请确认或申购!");
 						return;
 					}
 					opeWarehouseReserve.setSelectNum(useNum);
-					opeWarehouseReserve.setStartReagentCode(startReagentCode2);
-					opeWarehouseReserve.setEndReagentCode(endReagentCode2);
-					opeWarehouseReserve.setStartReagentCode2(temp+startReagentCode2.toString());
-					opeWarehouseReserve.setEndReagentCode2(temp+endReagentCode2.toString());
-					for (BigInteger i = new BigInteger(startReagentCode); i.compareTo(new BigInteger(endReagentCode)) < 1; i = i.add(BigInteger.ONE)) {
-						codeList.add(i.toString());
-					}
-					/*for(int i=Integer.parseInt(startReagentCode);i<=Integer.parseInt(endReagentCode);i++){
-						codeList.add(Integer.toString(i));
-					}*/
-					if(codeList != null)
-					{
+					opeWarehouseReserve.setStartReagentCode2(startReagentCode);
+					opeWarehouseReserve.setEndReagentCode2(endReagentCode);
+
+					if (codeList != null) {
 						opeWarehouseReserve.setReagentCodes(codeList);
 					}
 					opeWarehouseReserve.setFlag(0);
@@ -694,10 +1028,13 @@
 			}
 			//FacesUtils.info("选择条形码个数为" + codeList.size());
 			RequestContext.getCurrentInstance().execute("PF('reagentCodeDialog').hide()");
-			} catch (Exception e) {
-				logger.error("操作失败。", e);
-				FacesUtils.warn("操作失败。");
-			}
+		} catch (BusinessException e) {
+			logger.error(e.getMessage());
+			FacesUtils.warn(e.getMessage());
+		} catch (Exception e) {
+			logger.error("操作失败。", e);
+			FacesUtils.warn("操作失败。");
+		}
 	}
 
 	public void onYesBtnClick() {
@@ -713,7 +1050,7 @@
 
 			System.out.println("====onYesBtnClick======");
 			// 将当前选择条形码保存到库存中
-			for (OpeWarehouseReserve opeWarehouseReserve : this.selectedList) {
+			for (OpeWarehouseReserve opeWarehouseReserve : this.selectedTmpList) {
 				if (opeWarehouseReserve.getId().equals(this.selectedOpeWarehouseReserve.getId())) {
 					if(this.useNum > opeWarehouseReserve.getReserve())
 					{
@@ -737,11 +1074,28 @@
 		}
 	}
 
+	public void onTabChange(TabChangeEvent event) {
+		if ("firstTab".equals(event.getTab().getId())) {
+			tabValue = 0;
+		}else{
+			tabValue = 1;
+		}
+	}
+
+
 	public void onCancelBtnClick() {
+		this.selectedTmpOrderList = null;
+		this.selectedTmpList = null;
+		this.selectedInputStorageTmpOrderList = null;
+		this.endReagentCodeForPerson = null;
+		this.startReagentCodeForPerson = null;
+		this.laboratoryId = null;
+		this.useNum = null;
 		this.menuController.backToPage();
 	}
 
 	public void onClose(){
+		this.selectedTmpOrderList = null;
 		this.selectedTmpList = null;
 		this.menuController.backToPage();
 	}
@@ -754,7 +1108,7 @@
 
 	public void onSaveBtnClickForPerson(){
 		try {
-			if (this.selectedListForPerson == null || this.selectedListForPerson.size() == 0) {
+			if (this.selectedTmpOrderList == null || this.selectedTmpOrderList.size() == 0) {
 				FacesUtils.warn("请选择申领试剂。");
 				return;
 			}
@@ -763,45 +1117,49 @@
 				FacesUtils.warn("请选择申领人。");
 				return;
 			}
+
 			List<OpeApplyReserve> list=new ArrayList<>();
 			List<OpeApplyReserve> list2=new ArrayList<>();
 			//int size = 0;
-			for(OpeApplyReserve app:this.selectedListForPerson){
+			for(OpeApplyReserve app:this.selectedTmpOrderList){
+				if (app.getFlag() == null) {
+					FacesUtils.warn("请选择。");
+					return;
+				}
 				if(app.getFlag()==1){
 					list.add(app);
 				}else {
 					list2.add(app);
 				}
-
 			}
+
+			//1.1判断库存
+			checkReserve(list);
+			checkReserve(list2);
+			//1.2判断提交的条码是否重复(只有补贴条码需要判断)
+			checkReagentCode(list2);
+			String receiptNum = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
+			//库中领取
 			if(list.size()>0&&list!=null){
+				//扣库存 对象中的reagentCode存的是id
+
 				for(OpeApplyReserve app:list){
-					List<String> reagentCode=app.getReagentCode();
-					if(reagentCode!=null && reagentCode.size()>0){
-						for(String opeReagentStatusId:reagentCode){
-							OpeReagentStatus opeReagentStatus=this.opeReagentStatusService.getOpeReagentStatus(opeReagentStatusId);
+					List<String> reagentCodes=app.getReagentCodes();
+					if(reagentCodes!=null && reagentCodes.size()>0){
+						for(String reagentCode:reagentCodes){
+							OpeReagentStatus opeReagentStatus=this.opeReagentStatusService.getOpeReagentStatusByCode(reagentCode);
 							if (!this.opeReagentStatusService.isAllowWarehouseUse(opeReagentStatus)) {
 								FacesUtils.warn("只能申领在仓库的试剂。");
 								return;
-							}else {
-								opeReagentStatus.setHouseId(laboratoryId);
-								opeReagentStatus.setContainerId(laboratoryContainerId);
-								this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
-								OpeLaboratoryReserve lr=new OpeLaboratoryReserve();
-								lr.setReagentId(app.getReagent().getId());
-								lr.setHouseId(laboratoryId);
-								lr.setContainerId(laboratoryContainerId);
-								lr.setReserve(app.getSelectNum());
-								lr.setUserId(userId);
-								lr.setValidFlag(ValidFlag.VALID);
-								this.opeLaboratoryReserveService.insert(lr);
 							}
 						}
 					}
 				}
 
-				this.opeWarehouseReserveService.claimForPerson(list, userId,projectNum);
+				this.opeWarehouseReserveService.claimForPerson(list, userId,projectId,laboratoryId,laboratoryContainerId,receiptNum);
 			}
+
+			//补贴条码
 			if(list2.size()>0&&list!=null){
 				List<OpeApply> opeList=new ArrayList<>();
 				for(int i=0;i<list2.size();i++){
@@ -812,6 +1170,8 @@
 					opeApply.setReagent(list2.get(i).getReagent());
 					opeApply.setStartReagentCode(list2.get(i).getStartReagentCode2());
 					opeApply.setEndReagentCode(list2.get(i).getEndReagentCode2());
+					opeApply.setReagentCodeList(list2.get(i).getReagentCodes());
+					opeApply.setId(list2.get(i).getId());
 					opeList.add(opeApply);
 					OpeLaboratoryReserve lr=new OpeLaboratoryReserve();
 					lr.setReagentId(list2.get(i).getReagent().getId());
@@ -820,23 +1180,195 @@
 					lr.setReserve(list2.get(i).getSelectNum());
 					lr.setUserId(userId);
 					lr.setValidFlag(ValidFlag.VALID);
-					this.opeLaboratoryReserveService.insert(lr);
+					this.opeLaboratoryReserveDao.insertOpeLaboratoryReserve(lr);
 				}
-				this.opeWarehouseReserveService.reagentDStore2(opeList,userId);
+				this.opeWarehouseReserveService.reagentDStore3(opeList,userId);
+
+				//扣库存
+				opeWarehouseReserveService.btWarehouseReserveReduce(list2);
 			}
+
 			for(int i=0;i<list2.size();i++){
 				OpeWarehouseReserve opeWarehouseReserve=new OpeWarehouseReserve();
-
 				OpeApplyReserve re=new OpeApplyReserve();
 				re.setUsed(list2.get(i).getSelectNum()+list2.get(i).getUsed());
 				re.setId(list2.get(i).getId());
 				opeApplyDao.updateOpeApplyUsed(re);//修改已领数量
 			}
+
+			//更新申购单状态
+			for (OpeApplyReserve oar : selectedTmpOrderList) {
+				//确认
+				if (oar.getStatus() == ApplyStatus.SUPPLIER_CONFIRM) {
+					//领用完 就改成已经入库
+					if (oar.getNum() == oar.getUsed() + oar.getSelectNum()) {
+						opeApplyService.updateOpeApplyInfo(ApplyStatus.STORAGE,null,null, oar.getId(),null);
+						//2.2更改订单状态
+						OpeOrder oo = opeOrderService.getOrder(oar.getId());
+						List<OpeApply> oas = opeOrderService.getOpeApplyListByOrder(oo.getId());
+						assert oas.size() > 0;
+						//子订单是否全部入库,是则父单为已入库,否则未完成
+						boolean flag = oas.stream().allMatch(oa -> oa.getStatus() == ApplyStatus.STORAGE);
+						oo.setArrivalTime(arrivalTime);
+						if (flag){
+							oo.setStatus(ApplyStatus.STORAGE);
+							opeOrderService.updateOpeOrderStatus(oo);
+						}else{
+							oo.setStatus(ApplyStatus.UNCOMPLETED);
+							opeOrderService.updateOpeOrder(oo);
+						}
+					}
+				}
+			}
+
 			FacesUtils.info("申领成功。");
-			this.menuController.goToPage(Constants.PAGE_WAREHOUSE_STOCK_MNG, Constants.PAGE_WAREHOUSE_REAGENT_USE_NEW);
-		} catch (Exception e) {
+			//领用单生成
+			printTable = null;
+			printTable = new Hashtable();
+			int sum = 0;
+			List<ApplyListDto> applyList = new ArrayList<>();
+			SysUser applyPersonInfo = sysUserService.getUser(userId);
+			if (applyPersonInfo == null) {
+				FacesUtils.warn("申领人不存在或者申领人部门被删除。");
+				return;
+			}
+			printTable.put("head", instituteName);
+			printTable.put("title", "领用单");
+			printTable.put("applyPerson", applyPersonInfo.getName());
+			printTable.put("department", applyPersonInfo.getDepartmentName());
+			printTable.put("date", Utils.now("yyyy-MM-dd"));
+
+			printTable.put("receiptNumber", receiptNum);
+			if (StringUtils.isNotBlank(applyPersonInfo.getPhone())){
+				printTable.put("phone", applyPersonInfo.getPhone());
+			}
+			if (applyPersonInfo.getProjectId()!=null){
+				SysProject sysProject=this.sysProjectDao.getSysProject(applyPersonInfo.getProjectId());
+				if(sysProject!=null){
+					printTable.put("project", sysProject.getProjectName());
+				}
+			}
+			SysLaboratory lab = sysLaboratoryService.getSysLaboratory(laboratoryId);
+			printTable.put("lab", lab.getName());
+			this.receiptNumber = receiptNum;
+			for (OpeApplyReserve oar : selectedTmpOrderList) {
+				ApplyListDto lis = new ApplyListDto();
+				Map reagentDetail = sysReagentService.getReagentDetail(oar.getReagent().getId());
+				lis.setNum(String.valueOf(oar.getSelectNum())); //数量
+				lis.setMainMetering(String.format("%s%s", reagentDetail.get("main_metering"), reagentDetail.get("unit")));
+				lis.setControlProducts((String) reagentDetail.get("controlProducts"));
+				lis.setProductName((String) reagentDetail.get("name"));
+				lis.setReagentFormat((String) reagentDetail.get("reagentFormat"));
+				lis.setProductCode((String)reagentDetail.get("productCode"));
+				lis.setMemo((String)reagentDetail.get("memo"));
+				applyList.add(lis);
+				sum += oar.getSelectNum();
+			}
+			applyList.add(new ApplyListDto("合计", "", "", "", "", String.valueOf(sum), ""));
+			printTable.put("applyList", applyList);
+			//返回
+//			onCancelBtnClick();
+			RequestContext.getCurrentInstance().execute("PF('printDialog').show()");
+		} catch (BusinessException e){
+			logger.info(e.getMessage());
+			FacesUtils.warn(e.getMessage());
+		}
+		catch (Exception e) {
 			logger.error("操作失败。", e);
 			FacesUtils.warn("操作失败。");
+		}
+	}
+
+	public void receiptNumberChange( ){
+	}
+
+	/**
+	 * 点击打印  关联所有流向和领用单号e
+	 */
+	public void associatedFlowReceiptNumber() {
+		try {
+			opeUseFlowService.updateReceiptNumberByCode(selectedTmpOrderList, receiptNumber, note);
+			//弹出打印窗口
+			RequestContext.getCurrentInstance().execute("document.getElementById('indirectPrint').click()");
+		} catch (Exception e) {
+			logger.info(e.getMessage());
+		}
+
+	}
+
+	/**
+	 * 点击打印  关联所有流向和领用单号e
+	 */
+
+
+	public void associatedFlowReceiptNumber2() {
+		try {
+			opeUseFlowService.updateReceiptNumberByCode2(selectedTmpList, receiptNumber,note);
+			//弹出打印窗口
+			RequestContext.getCurrentInstance().execute("document.getElementById('indirectPrint').click()");
+		} catch (Exception e) {
+			logger.info(e.getMessage());
+		}
+
+	}
+
+
+	public void closeDialog() {
+		try {
+			opeUseFlowService.updateReceiptNumberByCode(selectedTmpOrderList, receiptNumber,note);
+			onCancelBtnClick();
+		} catch (Exception e) {
+			logger.info(e.getMessage());
+		}
+
+	}
+
+	public void closeDialog2() {
+		try {
+			opeUseFlowService.updateReceiptNumberByCode2(selectedTmpList, receiptNumber,note);
+			onCancelBtnClick();
+		} catch (Exception e) {
+			logger.info(e.getMessage());
+		}
+
+	}
+
+
+	private void checkReserve(List<OpeApplyReserve> list) {
+		if (list == null || list.size() < 1) {
+			return;
+		}
+		for (OpeApplyReserve oar : list) {
+
+			boolean flag = (oar.getFlag() != 1);
+			List<OpeWarehouseReserve> owr = opeWarehouseReserveService
+					.selectWarehouseByReagentIdAndArticleNumber(oar.getReagent().getId(), oar.getArticleNumber(),flag);
+			int sum = owr.stream().mapToInt(item -> item.getReserve() == null ? 0 : item.getReserve()).sum();
+			//剩余库存不足领取数量
+			if (sum < oar.getSelectNum()) {
+				throw new BusinessException(ExceptionEnumCode.APPLY_NUM_OVER, "库存已经不够");
+			}
+		}
+	}
+
+	private void checkReagentCode(List<OpeApplyReserve> list){
+		if (list == null || list.size() < 1) {
+			return;
+		}
+		Set<String> checkSet = new HashSet<>();
+		for (OpeApplyReserve oar : list) {
+			List<String> codeList = opeReagentStatusService
+					.checkReagentCode(oar.getStartReagentCode2(), oar.getEndReagentCode2(), oar.getSelectNum());
+			oar.setReagentCodes(codeList);
+			if (codeList != null && codeList.size() > 0) {
+				for (String code:codeList) {
+					if (!checkSet.contains(code)) {
+						checkSet.add(code);
+					}else{
+						throw new BusinessException(ExceptionEnumCode.PARAM_EXIST, "当前订单条码重复,"+code);
+					}
+				}
+			}
 		}
 	}
 
@@ -968,9 +1500,11 @@
 		}
 
 	}
+
+
 	public  void  onSaveBtnClick() {
 		try {
-			if (this.selectedList == null || this.selectedList.size() == 0) {
+			if (this.selectedTmpList == null || this.selectedTmpList.size() == 0) {
 				FacesUtils.warn("请选择申领试剂。");
 				return;
 			}
@@ -983,54 +1517,45 @@
 			printTable = null;
 			printTable = new Hashtable();
 			List<ApplyListDto> applyList = new ArrayList<>();
-			Map applyPersonInfo = sysUserService.getUser(userId);
+			SysUser applyPersonInfo = sysUserService.getUser(userId);
+			if (applyPersonInfo == null) {
+				FacesUtils.warn("申领人不存在或者申领人部门被删除。");
+				return;
+			}
 			printTable.put("head", instituteName);
 			printTable.put("title", "领用单");
-			printTable.put("applyPerson", applyPersonInfo.get("name"));
-			printTable.put("department", applyPersonInfo.get("meta_value"));
+			printTable.put("applyPerson", applyPersonInfo.getName());
+			printTable.put("department", applyPersonInfo.getDepartmentName());
 			printTable.put("date", Utils.now("yyyy-MM-dd"));
-			printTable.put("phone", applyPersonInfo.get("phone"));
+			if (StringUtils.isNotBlank(applyPersonInfo.getPhone())){
+				printTable.put("phone", applyPersonInfo.getPhone());
+			}
+			if (applyPersonInfo.getProjectId()!=null){
+				SysProject sysProject=this.sysProjectDao.getSysProject(applyPersonInfo.getProjectId());
+				if(sysProject!=null){
+					printTable.put("project", sysProject.getProjectName());
+				}
+			}
+			SysLaboratory lab = sysLaboratoryService.getSysLaboratorySimpleInfo(laboratoryId);
+			String receiptNum = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
+			printTable.put("receiptNumber", receiptNum);
+			printTable.put("lab", lab.getName());
+			this.receiptNumber = receiptNum;
 
 			//int size = 0;
 			int sum = 0;
 			List<OpeWarehouseReserve> list=new ArrayList<>();
-			List<OpeWarehouseReserve> list2=new ArrayList<>();
-			for (OpeWarehouseReserve selectWarehouseReserve : this.selectedList) {
-				if(selectWarehouseReserve.getFlag()==1){
-					list.add(selectWarehouseReserve);
-				}else{
-					list2.add(selectWarehouseReserve);
-				}
+			for (OpeWarehouseReserve selectWarehouseReserve : this.selectedTmpList) {
+				list.add(selectWarehouseReserve);
 			}
+
 			if(list.size()>0&&list!=null){
 				for (OpeWarehouseReserve selectWarehouseReserve : list) {
-					List<String> reagentCodes = selectWarehouseReserve.getReagentCodes();
-					if (reagentCodes != null && reagentCodes.size() > 0)
-						for (String opeReagentStatusId : reagentCodes) {
-							OpeReagentStatus opeReagentStatus = this.opeReagentStatusService
-									.getOpeReagentStatus(opeReagentStatusId);
-							if (!this.opeReagentStatusService.isAllowWarehouseUse(opeReagentStatus)) {
-								FacesUtils.warn("只能申领在仓库的试剂。");
-								return;
-							}else {
-								opeReagentStatus.setHouseId(laboratoryId);
-								opeReagentStatus.setContainerId(laboratoryContainerId);
-								this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);//更新试剂状态表
-								OpeLaboratoryReserve lr=new OpeLaboratoryReserve();
-								lr.setReagentId(selectWarehouseReserve.getReagentId());
-								lr.setHouseId(laboratoryId);
-								lr.setContainerId(laboratoryContainerId);
-								lr.setReserve(selectWarehouseReserve.getSelectNum());
-								lr.setUserId(userId);
-								lr.setValidFlag(ValidFlag.VALID);
-								this.opeLaboratoryReserveService.insert(lr);
-							}
-							//else {
-							//size++;
-							//}
-						}
-					ApplyListDto lis = new ApplyListDto();
 					Map reagentDetail = sysReagentService.getReagentDetail(selectWarehouseReserve.getReagentId());
+					if (reagentDetail == null) {
+						throw new Exception("试剂有误,请联系管理员");
+					}
+					ApplyListDto lis = new ApplyListDto();
 					lis.setNum(String.valueOf(selectWarehouseReserve.getSelectNum())); //数量
 					lis.setMainMetering(String.format("%s%s", reagentDetail.get("main_metering"), reagentDetail.get("unit")));
 					lis.setControlProducts((String) reagentDetail.get("controlProducts"));
@@ -1042,58 +1567,10 @@
 					sum += selectWarehouseReserve.getSelectNum();
 				}
 
-				//if (size == 0) {
-				//FacesUtils.warn("未选择一个条形码。");
-				//return;
-				//}
-				this.opeWarehouseReserveService.claim(list, userId,projectNum);
+				this.opeWarehouseReserveService.claim(list, userId,projectId,laboratoryId,laboratoryContainerId,receiptNum);
 			}
-			if(list2.size()>0&&list2!=null){
-				List<OpeApply> opeList=new ArrayList<>();
-				//this.opeApplyService.getOpeApplyList(null,null,null,null,null)
-				for(int i=0;i<list2.size();i++){
-					OpeApply opeApply=new OpeApply();
-					opeApply.setArticleNumber(list2.get(i).getArticleNumber());
-					opeApply.setHouseId(laboratoryId);
-					opeApply.setContainerId(laboratoryContainerId);
-					opeApply.setReagent(this.sysReagentService.getSysReagent(list2.get(i).getReagentId()));
-					opeApply.setStartReagentCode(list2.get(i).getStartReagentCode2());
-					opeApply.setEndReagentCode(list2.get(i).getEndReagentCode2());
-					opeList.add(opeApply);
-					OpeLaboratoryReserve lr=new OpeLaboratoryReserve();
-					lr.setReagentId(list2.get(i).getReagentId());
-					lr.setHouseId(laboratoryId);
-					lr.setContainerId(laboratoryContainerId);
-					lr.setReserve(list2.get(i).getSelectNum());
-					lr.setUserId(userId);
-					lr.setValidFlag(ValidFlag.VALID);
-					this.opeLaboratoryReserveService.insert(lr);
-					//opeList.add(this.opeApplyService.getOpeApply(list2.get(i).getId()));
-					ApplyListDto lis = new ApplyListDto();
-					Map reagentDetail = sysReagentService.getReagentDetail(list2.get(i).getReagentId());
-
-					lis.setNum(String.valueOf(list2.get(i).getSelectNum())); //数量
-					lis.setMainMetering(String.format("%s%s", reagentDetail.get("main_metering"), reagentDetail.get("unit")));
-					lis.setControlProducts((String) reagentDetail.get("controlProducts"));
-					lis.setProductName((String) reagentDetail.get("name"));
-					lis.setReagentFormat((String) reagentDetail.get("reagentFormat"));
-					lis.setProductCode((String)reagentDetail.get("productCode"));
-					lis.setMemo((String)reagentDetail.get("memo"));
-					applyList.add(lis);
-
-					sum += list2.get(i).getSelectNum();
-				}
-				this.opeWarehouseReserveService.reagentDStore2(opeList,userId);
-				for(int i=0;i<list2.size();i++){
-					list2.get(i).setReserve(list2.get(i).getReserve()-list2.get(i).getSelectNum());
-					opeWarehouseReserveDao.updateOpeWarehouseReserve(list2.get(i));
-				}
 
 
-				//opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve()-opeWarehouseReserve.getSelectNum());
-				//opeWarehouseReserveDao.updateOpeWarehouseReserve(opeWarehouseReserve);
-				//this.opeWarehouseReserveService.claim(list2, userId,projectNum);
-			}
 
 			//领用票最后一行
 			applyList.add(new ApplyListDto("合计", "", "", "", "", String.valueOf(sum), ""));
@@ -1102,10 +1579,71 @@
 			FacesUtils.info("申领成功。");
 			RequestContext.getCurrentInstance().execute("PF('printDialog').show()");
 //            this.menuController.goToPage(Constants.PAGE_WAREHOUSE_STOCK_MNG, Constants.PAGE_WAREHOUSE_REAGENT_USE_NEW);
+		} catch (BusinessException e) {
+			logger.error(e.getMessage(), e);
+			FacesUtils.warn(e.getMessage());
+
 		} catch (Exception e) {
 			logger.error(e.getMessage(), e);
 			FacesUtils.warn("操作失败。");
 		}
+	}
+	/**
+	* @Description: 订单入库保存
+	*/
+	public void onSaveInputWarehouseClick(){
+		try{
+		    //0.0输入校验
+            for (OpeApplyReserve opeApplyReserve : opeApplyList) {
+                if (StringUtils.isBlank(opeApplyReserve.getArticleNumber())) {
+                    throw new BusinessException(ExceptionEnumCode.PARAM_EXIST, opeApplyReserve.getReagent().getName() + ":批号不能为空");
+                }
+                SysReagent sysReagent = sysReagentService.getSysReagent(opeApplyReserve.getReagent().getId());
+				if (sysReagent == null){
+					throw new BusinessException(ExceptionEnumCode.PARAM_EXIST, opeApplyReserve.getReagent().getName() + ":被删除");
+				}
+            }
+
+			//用来检验提交表单得试剂条码是否重复
+			Map<String,Boolean> checkTable= new HashMap<>();
+			if (opeApplyList != null && opeApplyList.size() > 0) {
+				for (OpeApplyReserve opeApplyReserve:opeApplyList) {
+					//0.1获取该申购单的订单
+					OpeOrder oo = opeOrderService.getOrder(opeApplyReserve.getId());
+					if (oo == null) {
+						throw new BusinessException(ExceptionEnumCode.ORDER_ERROR,"订单不存在");
+					}
+					//0.2检查条码->得到试剂条码列表
+					List<String> codeList = opeReagentStatusService
+							.checkReagentCode(opeApplyReserve.getStartReagentCode2(), opeApplyReserve.getEndReagentCode2(), opeApplyReserve.getArrivalNum());
+					if (codeList != null && codeList.size() > 0) {
+						for (String code:codeList) {
+							if (checkTable.get(code) == null) {
+								checkTable.put(code, true);
+							}else{
+								throw new BusinessException(ExceptionEnumCode.PARAM_EXIST, "当前订单条码重复,"+code);
+							}
+						}
+					}
+				}
+
+
+				checkTable = null;
+				opeApplyService.orderInputWarehouse(opeApplyList,consigneeId,arrivalTime);
+			}
+
+			FacesUtils.info("入库完成");
+			//返回
+			this.onCancelBtnClick();
+		}catch (BusinessException e){
+			e.printStackTrace();
+			FacesUtils.warn(e.getMessage());
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			FacesUtils.warn("系统异常,操作失败");
+		}
+
 	}
 
 	@SuppressWarnings("serial")
@@ -1118,31 +1656,34 @@
 						Map<String, Object> filters) {
 					List<OpeWarehouseReserve> list = null;
 					try {
-						int count = opeWarehouseReserveService.getOpeWarehouseReserveTotalCountByName(reagentId, supplierId);
+						int count = opeWarehouseReserveService.getOpeWarehouseReserveTotalCountByName(reagentName, supplierId,productSn,warehouseName);
 						this.setRowCount(count);
 						if (count > 0) {
-							list = opeWarehouseReserveService.getOpeWarehouseReserveListByName(reagentId, supplierId, first,
-									pageSize);
+							list = opeWarehouseReserveService.getOpeWarehouseReserveListByName(reagentName, supplierId, first,
+									pageSize,productSn,warehouseName);
 						}
 					} catch (Exception e) {
 						logger.error(e);
 					}
+					selectedList = null;
+					selectedTmpList=null;
 					return list;
 				}
 
 				@Override
 				public OpeWarehouseReserve getRowData(String rowKey) {
-					Iterator<OpeWarehouseReserve> iterator = this.iterator();
-					if (iterator != null) {
-						OpeWarehouseReserve su = null;
-						while (iterator.hasNext()) {
-							su = iterator.next();
-							if (rowKey.equals(su.getId())) {
-								return su;
-							}
-						}
-					}
-					return null;
+//					Iterator<OpeWarehouseReserve> iterator = this.iterator();
+//					if (iterator != null) {
+//						OpeWarehouseReserve su = null;
+//						while (iterator.hasNext()) {
+//							su = iterator.next();
+//							if (rowKey.equals(su.getId())) {
+//								return su;
+//							}
+//						}
+//					}
+					Long id=Long.valueOf(rowKey);
+					return opeWarehouseReserveService.getRowData(id);
 				}
 			};
 		}
@@ -1159,8 +1700,8 @@
 						Map<String, Object> filters) {
 					List<OpeApplyReserve> list = null;
 					SysUser loginUser = getUser();
-					String id="";
-					if(loginUser.getSeeFlag()==SeeFlag.MANAGE){
+					Long id=null;
+					if(loginUser.getSeeFlag()==SeeFlag.MANAGE||loginUser.getSeeFlag() ==SeeFlag.LEADING){
 
 					}else {
 						//userName=loginUser.getName();
@@ -1168,32 +1709,34 @@
 					}
 
 					try {
-
-						int count = opeApplyService.getOpeApplyReserveTotalCountByNameFor(id,reagentId, userName);
+						int count = opeApplyService.getOpeApplyReserveTotalCountByNameFor(id, null, userName, productSn, applyCode, status, isAllApply,isExpired);
 						this.setRowCount(count);
 						if (count > 0) {
-							list = opeApplyService.getOpeApplyReserveListByNameFor(id,reagentId, userName, first,
-									pageSize);
+							list = opeApplyService.getOpeApplyReserveListByNameFor(id, null, userName, first,
+									pageSize, productSn, applyCode, status, isAllApply,isExpired);
 						}
 					} catch (Exception e) {
 						logger.error(e);
 					}
+					selectedListForPerson = null;
+					selectedTmpOrderList=null;
 					return list;
 				}
 
 				@Override
 				public OpeApplyReserve getRowData(String rowKey) {
-					Iterator<OpeApplyReserve> iterator = this.iterator();
-					if (iterator != null) {
-						OpeApplyReserve su = null;
-						while (iterator.hasNext()) {
-							su = iterator.next();
-							if (rowKey.equals(su.getId())) {
-								return su;
-							}
-						}
-					}
-					return null;
+//					Iterator<OpeApplyReserve> iterator = this.iterator();
+//					if (iterator != null) {
+//						OpeApplyReserve su = null;
+//						while (iterator.hasNext()) {
+//							su = iterator.next();
+//							if (rowKey.equals(su.getId())) {
+//								return su;
+//							}
+//						}
+//					}
+					Long id=Long.valueOf(rowKey);
+					return opeApplyService.getOpeApplyReserveListByNameForRowData(id);
 				}
 			};
 		}
@@ -1242,6 +1785,132 @@
 		}
 		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();
+			Long id=null;
+			if(loginUser.getSeeFlag()==SeeFlag.MANAGE||loginUser.getSeeFlag() == SeeFlag.LEADING){
+
+			}else {
+				//userName=loginUser.getName();
+				id=loginUser.getId();
+			}
+			if(selectedListForPerson!=null&&selectedListForPerson.size()>0){
+				realDataList=selectedListForPerson;
+			}else {
+				realDataList = opeApplyService.getOpeApplyReserveListByNameFor(id,null, userName, null,
+						null,productSn,applyCode,status,isAllApply,isExpired);
+			}
+			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("课题组负责人");
+			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())+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).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().getProductHome()== null ? "":  String.valueOf(dataList.get(i).getReagent().getProductHome()));
+			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).getProjectName()== null ? "": String.valueOf(dataList.get(i).getProjectName()));
+			dataRow.createCell(15).setCellValue(dataList.get(i).getProjectManage()== null ? "": String.valueOf(dataList.get(i).getProjectManage()));
+			dataRow.createCell(16).setCellValue(dataList.get(i).getArrivalTime()== null ? "": String.valueOf(dataList.get(i).getArrivalTime()));
+		}
+		return hssfWorkbook;
+	}
+
 	public void onExportFileBtnClickNew(){
 		ServletOutputStream out = null;
 		InputStream is = null;
@@ -1268,11 +1937,12 @@
 			if(selectedList!=null&&selectedList.size()>0){
 				realDataList=selectedList;
 			}else {
-				realDataList = opeWarehouseReserveService.getOpeWarehouseReserveListByName(reagentId, supplierId, null,
-						null);
+				realDataList = opeWarehouseReserveService.getOpeWarehouseReserveListByName(reagentName, supplierId, null,
+						null,productSn,warehouseName);
 			}
 				List<String> headerList = new ArrayList<>();
 				headerList.add("试剂名称");
+				headerList.add("产品编号");
 				headerList.add("cas");
 				headerList.add("厂家");
 				headerList.add("供应商");
@@ -1321,10 +1991,17 @@
 		}
 	}
 
+
+	public void onExportOutAndIn(){
+		FacesContext currentInstance = FacesContext.getCurrentInstance();
+		currentInstance.responseComplete();
+		ExternalContext etx = currentInstance.getExternalContext();
+		HttpServletResponse resp = (HttpServletResponse) etx.getResponse();
+		accountInAndOutService.exportExcel(resp);
+	}
+
 	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);
@@ -1334,15 +2011,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().getProductHome()== null ? "":  String.valueOf(dataList.get(i).getReagent().getProductHome()));
+			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(dataList.get(i).getReagent().getReagentFormat()));
+			dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+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;
@@ -1393,7 +2071,7 @@
             return;
         }
 
-        List<String> selectedIds = new ArrayList<String>();
+        List<Long> selectedIds = new ArrayList<Long>();
 
         for (OpeApply oa : this.reagentDStoreSelectedList) {
         	selectedIds.add(oa.getReagent().getId());
@@ -1461,7 +2139,7 @@
     public void onSaveBtnClickNew() {
 
         if (this.reagentDStore.getReagent() == null
-                || StringUtils.isBlank(this.reagentDStore.getReagent().getId())) {
+                || this.reagentDStore.getReagent().getId()==null) {
             FacesUtils.warn("请选择入库试剂。");
     		RequestContext.getCurrentInstance().execute("PF('reagentDStoreDialog').hide()");
             return;
@@ -1488,17 +2166,17 @@
         }*/
 
         // 检查仓库名
-        if (StringUtils.isBlank(this.reagentDStore.getHouseId())) {
+        if (this.reagentDStore.getHouseId()==null) {
             FacesUtils.warn("仓库名不能为空。");
             return;
         }
         // 检查货柜名
-        if (StringUtils.isBlank(this.reagentDStore.getContainerId())) {
+        if (this.reagentDStore.getContainerId()==null) {
             FacesUtils.warn("货柜名不能为空。");
             return;
         }
         // 检查货柜位置
-        if (StringUtils.isBlank(this.reagentDStore.getPlaceId())) {
+        if (this.reagentDStore.getPlace()==null) {
             FacesUtils.warn("货柜位置不能为空。");
             return;
         }
@@ -1525,7 +2203,7 @@
                                 && apply.getEndReagentCode().equals(this.reagentDStore.getEndReagentCode())).count() > 0) {
                     FacesUtils.warn("该试剂已被增加!");
                 }else {
-                    this.reagentDStore.setId(IDUtils.uuid());
+                 //   this.reagentDStore.setId(IDUtils.uuid());
                     this.reagentDStoreList.add(this.reagentDStore);
                     FacesUtils.info("增加成功。");
                 }
@@ -1541,7 +2219,7 @@
                                 && apply.getEndReagentCode().equals(this.reagentDStore.getEndReagentCode())).count() > 0) {
                     FacesUtils.warn("该试剂已被增加!");
                 }else {
-                    this.reagentDStore.setId(IDUtils.uuid());
+                  //  this.reagentDStore.setId(IDUtils.uuid());
                     this.reagentDStoreList.add(this.reagentDStore);
                     FacesUtils.info("增加成功。");
                 }
@@ -1558,36 +2236,42 @@
         this.reagentDStore.setReagent((SysReagent)event.getObject());
 
     	this.reagentDStoreEditFlag = Constants.ACTION_ADD;
+		onWarehouseSelectChange(null);
     	RequestContext.getCurrentInstance().execute("PF('reagentDStoreDialog').show()");
     }
 
-    public void onWarehouseSelectChange(String warehouseId) {
+    public void onWarehouseSelectChange(Long warehouseId) {
         this.warehouseContainerList = null;
         this.warehouseContainerPlaceList = null;
         this.changeWarehouseContainerList(warehouseId);
         this.changeWarehouseContainerPlaceList(null);
     }
 
-    private void changeWarehouseContainerList(String warehouseId) {
-        if (StringUtils.isBlank(warehouseId)) {
+	public void onWarehouseContainerSelectChange(Long warehouseContainerId) {
+		this.warehouseContainerPlaceList = null;
+		this.changeWarehouseContainerPlaceList(warehouseContainerId);
+	}
+
+    private void changeWarehouseContainerList(Long warehouseId) {
+        if (warehouseId==null) {
             if (this.warehouseList != null && this.warehouseList.size() > 0) {
                 warehouseId = this.warehouseList.get(0).getId();
             }
         }
 
-        if (StringUtils.isNotBlank(warehouseId)) {
+        if (warehouseId!=null) {
             this.warehouseContainerList = warehouseIdContainerMap.get(warehouseId);
         }
     }
 
-    private void changeWarehouseContainerPlaceList(String warehouseContainerId) {
-        if (StringUtils.isBlank(warehouseContainerId)) {
+    private void changeWarehouseContainerPlaceList(Long warehouseContainerId) {
+        if (warehouseContainerId==null) {
             if (this.warehouseContainerList != null && this.warehouseContainerList.size() > 0) {
                 warehouseContainerId = this.warehouseContainerList.get(0).getId();
             }
         }
 
-        if (StringUtils.isNotBlank(warehouseContainerId)) {
+        if (warehouseContainerId!=null) {
             SysWarehouseContainer container = this.warehouseContainerMap.get(warehouseContainerId);
             BaseMeta baseMeta = null;
             if (container != null
@@ -1597,26 +2281,36 @@
         }
     }
 
-    public String formatWarehouseName(String id) {
-        if (StringUtils.isNotBlank(id)
-                && this.warehouseNameMap != null) {
-            return warehouseNameMap.get(id);
-        }
-
-        return "";
+    public String formatWarehouseName(Long id) {
+		if(id==null){
+			return "";
+		}
+		String name=warehouseNameMap.get(id);
+		if(StringUtils.isBlank(name)){
+			SysWarehouse warehouse=this.sysWarehouseService.getSysWarehouse(id);
+			if(warehouse!=null){
+				warehouseNameMap.put(warehouse.getId(),warehouse.getName());
+				name=warehouse.getName();
+			}
+		}
+		return name;
     }
-    public String formatWarehouseContainerName(String id) {
-        if (StringUtils.isNotBlank(id)
-                && this.warehouseContainerMap != null) {
-            if (this.warehouseContainerMap.get(id) != null) {
-                return this.warehouseContainerMap.get(id).getContainerCode();
-            }
-        }
-
-        return "";
+    public String formatWarehouseContainerName(Long id) {
+		if(id==null){
+			return "";
+		}
+		String containerCode=this.warehouseContainerMap.get(id).getContainerCode();
+		if(StringUtils.isBlank(containerCode)){
+			SysWarehouseContainer sysWarehouseContainer = this.sysWarehouseContainerService.getSysWarehouseContainer(id);
+			if(sysWarehouseContainer!=null){
+				this.warehouseContainerMap.put(sysWarehouseContainer.getId(),sysWarehouseContainer);
+				containerCode=sysWarehouseContainer.getContainerCode();
+			}
+		}
+		return containerCode;
     }
-    public String formatWarehouseContainerPlaceName(String id) {
-        if (StringUtils.isNotBlank(id)) {
+    public String formatWarehouseContainerPlaceName(Long id) {
+        if (id!=null) {
             return this.baseMetaService.getBaseMetaValue(id);
         }
 
@@ -1638,12 +2332,12 @@
 		this.reagentSelectList = reagentSelectList;
 	}
 
-	public String getReagentId() {
-		return reagentId;
+	public String getReagentName() {
+		return reagentName;
 	}
 
-	public void setReagentId(String reagentId) {
-		this.reagentId = reagentId;
+	public void setReagentName(String reagentName) {
+		this.reagentName = reagentName;
 	}
 
 	public List<SysUser> getUserSelectList() {
@@ -1653,7 +2347,7 @@
 		return userSelectList;
 	}
 
-	public SysUser getSelectedUserById(String userId) {
+	public SysUser getSelectedUserById(Long userId) {
 		return userSelectList.stream().filter(u->u.getId().equals(userId)).findFirst().get();
 	}
 
@@ -1668,28 +2362,28 @@
 		this.userSelectList = userSelectList;
 	}
 
-	public String getUserId() {
+	public Long getUserId() {
 		return userId;
 	}
 
-	public void setUserId(String userId) {
+	public void setUserId(Long userId) {
 		this.userId = userId;
 	}
 
 
-	public String getProjectNum() {
-		return projectNum;
+	public Long getProjectId() {
+		return projectId;
 	}
 
-	public void setProjectNum(String projectNum) {
-		this.projectNum = projectNum;
+	public void setProjectId(Long projectId) {
+		this.projectId = projectId;
 	}
 
-	public String getSupplierId() {
+	public Long getSupplierId() {
 		return supplierId;
 	}
 
-	public void setSupplierId(String supplierId) {
+	public void setSupplierId(Long supplierId) {
 		this.supplierId = supplierId;
 	}
 
@@ -1737,19 +2431,19 @@
 		this.reagentCodeSelectedList = reagentCodeSelectedList;
 	}
 
-	public String getReagentLogId() {
+	public Long getReagentLogId() {
 		return reagentLogId;
 	}
 
-	public void setReagentLogId(String reagentLogId) {
+	public void setReagentLogId(Long reagentLogId) {
 		this.reagentLogId = reagentLogId;
 	}
 
-	public String getUserLogId() {
+	public Long getUserLogId() {
 		return userLogId;
 	}
 
-	public void setUserLogId(String userLogId) {
+	public void setUserLogId(Long userLogId) {
 		this.userLogId = userLogId;
 	}
 
@@ -1778,27 +2472,45 @@
     }
 
 	public void handleEvent2(){
-		System.out.println("===============================");
 			if(useNum!=null && useNum>0){
 				if(startReagentCode!=null && !startReagentCode.equals("")){
+				if (startReagentCode.matches(".*\\D+.*")) {
+								if (startReagentCode.length() ==24 &&
+					                    startReagentCode.matches(".*([A-F]|\\d)+.*") &&
+					                    startReagentCode.substring(startReagentCode.length() - 5).matches("\\d{5}")){
 
-					BigDecimal start=new BigDecimal(startReagentCode.trim());
-					String str=startReagentCode;
-					String up="";
-					int len = startReagentCode.length() - String.valueOf(start).length();
-					String temp = "";
-					for (int i = 0; i < len; i++) {
-						temp += "0";
+							//2.2长度为24位编码的
+							BigInteger arrNum = BigInteger.valueOf((long)useNum);
+							//后5位随机码
+							String randomCode = startReagentCode.substring(startReagentCode.length() - 5);
+							String reagentCodePrefix = startReagentCode.substring(0,startReagentCode.length() - 5);
+
+							BigInteger startReagentCodeSuffix = new BigInteger(randomCode);
+							BigInteger endReagentCodeSuffix = startReagentCodeSuffix.add(arrNum).subtract((new BigInteger("1")));
+							String reagentCodeSuffix= autoGenericCode(randomCode, endReagentCodeSuffix);
+							endReagentCode= (reagentCodePrefix + reagentCodeSuffix);
+						}else{
+							endReagentCode = ("");
+						}
+					}else{
+
+						BigInteger startReagentCode2 = new BigInteger(startReagentCode);
+						//2.1长度不为24位编码
+						//数据1
+						BigInteger arrNum = BigInteger.valueOf((long)useNum);
+						BigInteger code1 = startReagentCode2.add(arrNum).subtract(BigInteger.ONE);
+						endReagentCode=(autoGenericCode(startReagentCode, code1));
 					}
-					BigDecimal end = start.add(new BigDecimal(useNum-1));
-					endReagentCode=temp+end.toString();
-					//endReagentCode=Integer.toString(useNum-1+Integer.parseInt(startReagentCode));
 				}else{
 					FacesUtils.info("请输入条形码开始");
 				}
 			}else {
 				FacesUtils.info("请输入领用数量");
 			}
+	}
+
+	public void clearStartAndEndCode(){
+		endReagentCode = "";
 	}
 
 	public void handleEventForPerson(){
@@ -1855,7 +2567,7 @@
 				list.add(sysUser);
 				applyUserSelectList = list;
 			} else {
-				applyUserSelectList = this.sysUserService.getSysUserList(null, null, null, null, null);
+				applyUserSelectList = this.sysUserService.getSysUserList(null, null, null, null, null,null,null);
 			}
 		}
 		return applyUserSelectList;
@@ -1880,10 +2592,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.getSysReagentTotalCount(applyNewReagentName, applyNewCas, null,null);
+                        int count = sysReagentService.getSysReagentTotalCountNew(applyNewReagentName, applyNewCas, null,null,productSn);
                         this.setRowCount(count);
                         if (count > 0) {
-                            list = sysReagentService.getSysReagentList(applyNewReagentName, applyNewCas, null,null, first, pageSize);
+                            list = sysReagentService.getSysReagentListNew(applyNewReagentName, applyNewCas, null,null, first, pageSize,productSn);
                         }
                     } catch (Exception e) {
                         logger.error(e);
@@ -1893,17 +2605,18 @@
 
                 @Override
                 public SysReagent getRowData(String rowKey) {
-                    Iterator<SysReagent> iterator = this.iterator();
-                    if (iterator != null) {
-                        SysReagent sr = null;
-                        while (iterator.hasNext()) {
-                            sr = iterator.next();
-                            if (rowKey.equals(sr.getId())) {
-                                return sr;
-                            }
-                        }
-                    }
-                    return null;
+//                    Iterator<SysReagent> iterator = this.iterator();
+//                    if (iterator != null) {
+//                        SysReagent sr = null;
+//                        while (iterator.hasNext()) {
+//                            sr = iterator.next();
+//                            if (rowKey.equals(sr.getId())) {
+//                                return sr;
+//                            }
+//                        }
+//                    }
+					Long id=Long.valueOf(rowKey);
+                    return sysReagentService.getSysReagentListNewRowData(id);
                 }
             };
         }
@@ -1980,41 +2693,47 @@
 		this.useNum = useNum;
 	}
 
-	public String getOriLaboratoryId() {
+	public Long getOriLaboratoryId() {
 		return oriLaboratoryId;
 	}
 
-	public void setOriLaboratoryId(String oriLaboratoryId) {
+	public void setOriLaboratoryId(Long oriLaboratoryId) {
 		this.oriLaboratoryId = oriLaboratoryId;
 	}
 
 	public void resetLaboratory(){
 		laboratory = null;
+		laboratoryId = null;
 		laboratoryContainers = null;
 		//getLaboratory();
 		//getLaboratoryContainers();
 	}
 
+//	public void setContainerId(){
+//	}
 	public void resetLaboratoryContainers() {
 		laboratoryContainers = null;
 		//getLaboratoryContainers();
 	}
 	public List<SysLaboratory> getLaboratory() {
-		if(userId != null && userId.trim().length() > 0)
+ 		if(userId != null)
 		{
-			this.laboratory = this.sysLaboratoryService.getSysLaboratoryListByDep(sysUserService.getSysUser(userId).getDepartment());
+
+			//Todo 修改申领人的实验室显示信息
+			this.laboratory = this.sysLaboratoryService.getSysLaboratoryListByUserId(userId);
 			if(this.laboratory != null && this.laboratory.size() > 0)
 			{
 				//flag =true;
-				//if(laboratoryId != null && laboratoryId.trim().length() > 0)
-				//{
-				//	this.oriLaboratoryId = this.laboratoryId;
-				//}else
-				//{
-				//	this.oriLaboratoryId = this.laboratory.get(0).getId();
-				//}
-				this.laboratoryId=this.laboratory.get(0).getId();
-				this.laboratoryContainers = this.sysLaboratoryContainerService.getSysLaboratoryContainerList(this.laboratory.get(0).getId());
+				if(laboratoryId != null)
+				{
+					this.oriLaboratoryId = this.laboratoryId;
+				}else
+				{
+					this.laboratoryId = this.laboratory.get(0).getId();
+				}
+
+//				this.laboratoryId = this.laboratory.get(0).getId();
+				this.laboratoryContainers = this.sysLaboratoryContainerService.getSysLaboratoryContainerList(laboratoryId);
 			}else {
 				this.oriLaboratoryId = null;
 				this.laboratoryContainers = null;
@@ -2033,7 +2752,7 @@
 	}
 
 	public List<SysLaboratoryContainer> getLaboratoryContainers() {
-		if(laboratoryId != null && laboratoryId.trim().length() > 0)
+ 		if(laboratoryId != null)
 		{
 			this.laboratoryContainers = this.sysLaboratoryContainerService.getSysLaboratoryContainerList(laboratoryId);
 		}
@@ -2044,19 +2763,20 @@
 		this.laboratoryContainers = laboratoryContainers;
 	}
 
-	public String getLaboratoryId() {
+	public Long getLaboratoryId() {
 		return laboratoryId;
 	}
 
-	public void setLaboratoryId(String laboratoryId) {
+	public void setLaboratoryId(Long laboratoryId) {
 		this.laboratoryId = laboratoryId;
 	}
 
-	public String getLaboratoryContainerId() {
+	public Long getLaboratoryContainerId() {
+
 		return laboratoryContainerId;
 	}
 
-	public void setLaboratoryContainerId(String laboratoryContainerId) {
+	public void setLaboratoryContainerId(Long laboratoryContainerId) {
 		this.laboratoryContainerId = laboratoryContainerId;
 	}
 
@@ -2120,4 +2840,273 @@
 	public void setShowCodes(List<String> showCodes) {
 		this.showCodes = showCodes;
 	}
+
+	public List<OpeApplyReserve> getSelectedTmpOrderList() {
+		return selectedTmpOrderList;
+	}
+
+	public void setSelectedTmpOrderList(List<OpeApplyReserve> selectedTmpOrderList) {
+		this.selectedTmpOrderList = selectedTmpOrderList;
+	}
+
+	public List<OpeApplyReserve> getTrulySelectedOrderList() {
+		return trulySelectedOrderList;
+	}
+
+	public void setTrulySelectedOrderList(List<OpeApplyReserve> trulySelectedOrderList) {
+		this.trulySelectedOrderList = trulySelectedOrderList;
+	}
+
+
+	public Integer getTabValue() {
+		return tabValue;
+	}
+
+	public void setTabValue(Integer tabValue) {
+		this.tabValue = tabValue;
+	}
+
+
+	public List<OpeApplyReserve> getSelectedInputStorageTmpOrderList() {
+		return selectedInputStorageTmpOrderList;
+	}
+
+	public void setSelectedInputStorageTmpOrderList(List<OpeApplyReserve> selectedInputStorageTmpOrderList) {
+		this.selectedInputStorageTmpOrderList = selectedInputStorageTmpOrderList;
+	}
+
+	public List<OpeApplyReserve> getTrulyInputStorageTmpSelectedOrderList() {
+		return trulyInputStorageTmpSelectedOrderList;
+	}
+
+	public void setTrulyInputStorageTmpSelectedOrderList(List<OpeApplyReserve> trulyInputStorageTmpSelectedOrderList) {
+		this.trulyInputStorageTmpSelectedOrderList = trulyInputStorageTmpSelectedOrderList;
+	}
+
+	public Timestamp getArrivalTime() {
+		return arrivalTime;
+	}
+
+	public void setArrivalTime(Timestamp arrivalTime) {
+		this.arrivalTime = arrivalTime;
+	}
+
+	public Long getConsigneeId() {
+		return consigneeId;
+	}
+
+	public void setConsigneeId(Long consigneeId) {
+		this.consigneeId = consigneeId;
+	}
+
+	public List getConsignee() {
+		List<SysUser> dataList = this.sysUserService.getSysUserList(null, null, null, null, null,null,null);
+		//将admin置于首位
+		for (int i = 0; i < dataList.size(); i++) {
+			if ("admin".equals(dataList.get(i).getAccount())){
+				dataList.add(0, dataList.remove(i));
+			}
+		}
+		return dataList;
+	}
+
+	public List<OpeApplyReserve> getOpeApplyList() {
+		return opeApplyList;
+	}
+
+	public void setOpeApplyList(List<OpeApplyReserve> opeApplyList) {
+		this.opeApplyList = opeApplyList;
+	}
+
+
+	public void setArrival(OpeApplyReserve oar) {
+		//强制-》全到货
+		oar.setArrivalNum(oar.getNum());
+	}
+
+	public void reagentStartCodeChange(OpeApplyReserve oar) {
+		//先输入条形码,到货数量帮填
+		oar.setArrivalNum(oar.getNum());
+		String startReagentCode2 = oar.getStartReagentCode2();
+		String endReagentCode2 = oar.getEndReagentCode2();
+		//1.如果开始条码为空,条码就为空,或者没有到货
+		if (StringUtils.isBlank(startReagentCode2)
+				|| oar.getArrivalNum() == null || oar.getArrivalNum() < 1) {
+
+			oar.setStartReagentCode2("");
+			oar.setEndReagentCode2("");
+			return;
+		}
+		//2如果开始条码不为空
+		//2.0如果包含字母不等于24位的直接不管
+
+		if (startReagentCode2.matches(".*\\D+.*")) {
+			if (startReagentCode2.length() ==24 &&
+					startReagentCode2.matches(".*([A-F]|\\d)+.*") &&
+					startReagentCode2.substring(startReagentCode2.length() - 5).matches("\\d{5}")){
+				//2.2长度为24位编码的
+				BigInteger arrNum = BigInteger.valueOf(oar.getArrivalNum().longValue());
+				//后5位随机码
+				String randomCode = startReagentCode2.substring(startReagentCode2.length() - 5);
+				String reagentCodePrefix = startReagentCode2.substring(0,startReagentCode2.length() - 5);
+
+				BigInteger startReagentCodeSuffix = new BigInteger(randomCode);
+				BigInteger endReagentCodeSuffix = startReagentCodeSuffix.add(arrNum).subtract((new BigInteger("1")));
+				String reagentCodeSuffix= autoGenericCode(randomCode, endReagentCodeSuffix);
+				oar.setEndReagentCode2(reagentCodePrefix + reagentCodeSuffix);
+			}else{
+				oar.setEndReagentCode2("");
+			}
+		}else{
+
+			BigInteger startReagentCode = new BigInteger(startReagentCode2);
+			//2.1长度不为24位编码
+				//数据1
+			BigInteger arrNum = BigInteger.valueOf(oar.getArrivalNum().longValue());
+			BigInteger code1 = startReagentCode.add(arrNum).subtract(BigInteger.ONE);
+			oar.setEndReagentCode2(autoGenericCode(startReagentCode2, code1));
+			}
+	}
+
+
+
+
+	private String autoGenericCode(String code, BigInteger code1) {
+		String result = "";
+		//补充位数
+		result = String.format("%0" + code.length() + "d", code1);
+
+		return result;
+	}
+
+
+
+	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;
+	}
+
+
+
+
+	public List<OpeWarehouseReserve> getWarehouseReserveList() {
+		return warehouseReserveList;
+	}
+
+	public void setWarehouseReserveList(List<OpeWarehouseReserve> warehouseReserveList) {
+		this.warehouseReserveList = warehouseReserveList;
+	}
+
+	public OpeWarehouseReserve getOpeWarehouseReserve() {
+		return opeWarehouseReserve;
+	}
+
+	public void setOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve) {
+		this.opeWarehouseReserve = opeWarehouseReserve;
+	}
+
+	public String getReceiptNumber() {
+		return receiptNumber;
+	}
+
+	public void setReceiptNumber(String receiptNumber) {
+		this.receiptNumber = receiptNumber;
+	}
+
+	public String getWarehouseName() {
+		return warehouseName;
+	}
+
+	public void setWarehouseName(String warehouseName) {
+		this.warehouseName = warehouseName;
+	}
+
+	public Integer getIsAllApply() {
+		return isAllApply;
+	}
+
+	public void setIsAllApply(Integer isAllApply) {
+		this.isAllApply = isAllApply;
+	}
+
+	public boolean getIsExpired() {
+		return isExpired;
+	}
+
+	public void setIsExpired(boolean isExpired) {
+		this.isExpired = isExpired;
+	}
+
+	//过期处理
+	public void expireOrder() {
+		//1.判断当前订单是否是已入库的状态
+		if (this.selectedListForPerson.size() < 1) {
+			FacesUtils.warn("请选择数据。");
+			return;
+		}
+		ArrayList<Long> ids = new ArrayList<>();
+		for (OpeApplyReserve oa : this.selectedListForPerson) {
+			ids.add(oa.getId());
+			if (oa.getStatus() != ApplyStatus.SUPPLIER_CONFIRM) {
+				FacesUtils.warn("只能让已确认状态的单子过期。");
+				return;
+			}
+		}
+
+		opeApplyService.updateOpeApplyStatus(ApplyStatus.EXPIRED, null, ids);
+		FacesUtils.warn("操作成功。");
+
+
+	}
+
+	public void recoverOrder(){
+		if (this.selectedListForPerson.size() < 1) {
+			FacesUtils.warn("请选择数据。");
+			return;
+		}
+		ArrayList<Long> ids = new ArrayList<>();
+		for (OpeApplyReserve oa : this.selectedListForPerson) {
+			ids.add(oa.getId());
+			if (oa.getStatus() != ApplyStatus.EXPIRED) {
+				FacesUtils.warn("只能让过期单子恢复确认。");
+				return;
+			}
+		}
+		opeApplyService.updateOpeApplyStatus(ApplyStatus.SUPPLIER_CONFIRM, null, ids);
+		FacesUtils.warn("操作成功。");
+	}
+
+    public String getNote() {
+        return note;
+    }
+
+    public void setNote(String note) {
+        this.note = note;
+    }
 }

--
Gitblit v1.9.2