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/service/OpeWarehouseReserveServiceImpl.java |  521 +++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 411 insertions(+), 110 deletions(-)

diff --git a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
index 5a3b5b5..4628a07 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
@@ -6,15 +6,17 @@
 
 import javax.annotation.Resource;
 
-import com.nanometer.smartlab.dao.OpeApplyDao;
+import com.nanometer.smartlab.dao.*;
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
 import com.nanometer.smartlab.exception.AlarmCode;
 import com.nanometer.smartlab.exception.AlarmException;
+import com.nanometer.smartlab.util.FacesUtils;
 import com.nanometer.smartlab.util.IDUtils;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.dao.DataAccessException;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.dao.DuplicateKeyException;
@@ -22,8 +24,6 @@
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.nanometer.smartlab.dao.BaseMetaDao;
-import com.nanometer.smartlab.dao.OpeWarehouseReserveDao;
 import com.nanometer.smartlab.entity.enumtype.ArrivalStatus;
 import com.nanometer.smartlab.entity.enumtype.OperateStatus;
 import com.nanometer.smartlab.entity.enumtype.StoreType;
@@ -45,19 +45,25 @@
 	@Resource
 	private OpeReagentStatusService opeReagentStatusService;
 
+	@Lazy
     @Resource
     private OpeUseFlowService opeUseFlowService;
-    @Resource
-    private OpeWarehouseReserveService opeWarehouseReserveService;
 
     @Resource(name="baseMetaDao")
     private BaseMetaDao baseMetaDao;
 
     @Resource(name="opeApplyDao")
 	private OpeApplyDao opeApplyDao;
+	@Resource
+	private OpeReagentStatusDao opeReagentStatusDao;
+	@Resource
+	private OpeLaboratoryReserveService opeLaboratoryReserveService;
+
+	@Resource
+	private OpeLaboratoryReserveDao opeLaboratoryReserveDao;
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public List<OpeWarehouseReserve> getOpeWarehouseReserveList(String reagentId, String supplierId, Integer first,
+	public List<OpeWarehouseReserve> getOpeWarehouseReserveList(Long reagentId, Long supplierId, Integer first,
 			Integer pageSize) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
@@ -74,7 +80,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public int getOpeWarehouseReserveTotalCount(String reagentId, String supplierId) {
+	public int getOpeWarehouseReserveTotalCount(Long reagentId, Long supplierId) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentId", reagentId);
@@ -88,15 +94,16 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public List<OpeWarehouseReserve> getOpeWarehouseReserveListByName(String reagentId, String supplierId, Integer first,
-			Integer pageSize,String productSn) {
+	public List<OpeWarehouseReserve> getOpeWarehouseReserveListByName(String reagentName, Long supplierId, Integer first,
+			Integer pageSize,String productSn,String warehouseName) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
-			params.put("reagentName", reagentId);
+			params.put("reagentName", reagentName);
 			params.put("supplierId", supplierId);
 			params.put("first", first);
 			params.put("pageSize", pageSize);
 			params.put("productSn", productSn);
+			params.put("warehouseName", warehouseName);
 			return this.opeWarehouseReserveDao.getOpeWarehouseReserveList(params);
 		} catch (DataAccessException e) {
 			logger.error(e.getMessage(), e);
@@ -106,12 +113,13 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public int getOpeWarehouseReserveTotalCountByName(String reagentId, String supplierId,String productSn) {
+	public int getOpeWarehouseReserveTotalCountByName(String reagentName, Long supplierId,String productSn,String warehouseName) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
-			params.put("reagentName", reagentId);
+			params.put("reagentName", reagentName);
 			params.put("supplierId", supplierId);
 			params.put("productSn", productSn);
+			params.put("warehouseName", warehouseName);
 			return this.opeWarehouseReserveDao.getOpeWarehouseReserveTotalCount(params);
 		} catch (DataAccessException e) {
 			logger.error(e.getMessage(), e);
@@ -121,7 +129,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public OpeWarehouseReserve getOpeWarehouseReserveBy(String reagentId, String articleNumber){
+	public OpeWarehouseReserve getOpeWarehouseReserveBy(Long reagentId, String articleNumber){
 		OpeWarehouseReserve ope=new OpeWarehouseReserve();
 		ope.setReagentId(reagentId);
 		ope.setArticleNumber(articleNumber);
@@ -129,7 +137,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public OpeWarehouseReserve getOpeWarehouseReserve(String reagentId, String articleNumber) {
+	public OpeWarehouseReserve getOpeWarehouseReserve(Long reagentId, String articleNumber) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentId", reagentId);
@@ -147,7 +155,7 @@
 		}
 	}
 	@Transactional(propagation = Propagation.REQUIRED)
-	public OpeWarehouseReserve getOpeWarehouseReserve2(String reagentId, String articleNumber,String warehouseId) {
+	public OpeWarehouseReserve getOpeWarehouseReserve2(Long reagentId, String articleNumber,Long warehouseId) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentId", reagentId);
@@ -165,12 +173,23 @@
 					MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
 		}
 	}
+
+	@Override
+	public List<OpeWarehouseReserve> getOpeWarehouseReserveList(Long reagentId, String articleNumber,Long warehouseId) {
+		Map<String, Object> params = new HashMap<>();
+		params.put("reagentId", reagentId);
+		params.put("warehouseId", warehouseId);
+		params.put("articleNumber", articleNumber);
+
+		return this.opeWarehouseReserveDao.getOpeWarehouseReserveList2(params);
+	}
+
 	@Transactional(propagation = Propagation.REQUIRED)
 	public OpeWarehouseReserve insertOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve) {
 		try {
-			if (opeWarehouseReserve.getId() == null) {
-				opeWarehouseReserve.setId(IDUtils.uuid());
-			}
+//			if (opeWarehouseReserve.getId() == null) {
+//				opeWarehouseReserve.setId(IDUtils.uuid());
+//			}
 			this.opeWarehouseReserveDao.insertOpeWarehouseReserve(opeWarehouseReserve);
 			return opeWarehouseReserve;
 		} catch (DuplicateKeyException ex) {
@@ -187,7 +206,7 @@
 		}
 	}
 
-	@Transactional(propagation = Propagation.REQUIRED)
+	@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
 	public boolean updateOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve) {
 		try {
 			int row = this.opeWarehouseReserveDao.updateOpeWarehouseReserve(opeWarehouseReserve);
@@ -207,21 +226,23 @@
 		}
 	}
 
-	@Transactional(propagation = Propagation.REQUIRED)
-	public void claimForPerson(List<OpeApplyReserve> selectedListForPerson,String userId,String projectNum){
+	@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
+	public void claimForPerson(List<OpeApplyReserve> selectedListForPerson,Long userId,Long projectId,Long laboratoryId,Long laboratoryContainerId,String receiptNumber){
 		try{
 			for(OpeApplyReserve app:selectedListForPerson){
-				List<String> reagentCodes = app.getReagentCode();
+				List<String> reagentCodes = app.getReagentCodes();
 				if (reagentCodes != null && reagentCodes.size() > 0) {
-					List<OpeReagentStatus> ss=new ArrayList<>();
-					for (String opeReagentStatusId : reagentCodes) {
-						OpeReagentStatus opeReagentStatus = this.opeReagentStatusService.getOpeReagentStatus(opeReagentStatusId);
-						opeReagentStatus.setUserId(userId);
-						opeReagentStatus.setProjectNum(projectNum);
-						//boolean flag = this.opeReagentStatusService.updateReagentStatus(opeReagentStatus);
-						this.opeReagentStatusService.updateReagentStatus(opeReagentStatus);
-						ss.add(opeReagentStatus);
-					}
+					this.opeReagentStatusService.updateReagentStatus3(reagentCodes,userId,projectId,laboratoryId,laboratoryContainerId,receiptNumber);
+
+					//更新是现实库存
+					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);
 					/*HashSet<String> set=new HashSet<>();//存放批号
 					for(int i=0;i<ss.size();i++){
 						set.add(ss.get(i).getArticleNumber());
@@ -263,47 +284,70 @@
 			logger.error(ex.getMessage(), ex);
 			throw new BusinessException(ExceptionEnumCode.DB_ERR,
 					MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
+		}catch(Exception e){
+			e.printStackTrace();
+			throw new RuntimeException(e);
 		}
 	}
 
 	// 仓库领用
-	@Transactional(propagation = Propagation.REQUIRED)
-	public void claim(List<OpeWarehouseReserve> selectedList, String userId,String projectNum) {
-		try {
-			for (OpeWarehouseReserve opeWarehouseReserve : selectedList) {
-				List<String> reagentCodes = opeWarehouseReserve.getReagentCodes();
-				if (reagentCodes != null && reagentCodes.size() > 0) {
-					for (String opeReagentStatusId : reagentCodes) {
-						OpeReagentStatus opeReagentStatus = this.opeReagentStatusService
-								.getOpeReagentStatus(opeReagentStatusId);
-						opeReagentStatus.setUserId(userId);
-						opeReagentStatus.setProjectNum(projectNum);
-						//boolean flag = this.opeReagentStatusService.updateReagentStatus(opeReagentStatus);
-						this.opeReagentStatusService.updateReagentStatus(opeReagentStatus);
-						//if (flag) {
-							//opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() - 1);
-							//opeWarehouseReserve.setSelectNum(0);
-						//}
+	@Transactional(propagation = Propagation.REQUIRED,rollbackFor = RuntimeException.class)
+	public void claim(List<OpeWarehouseReserve> selectedList, Long userId,Long projectId,Long laboratoryId,Long laboratoryContainerId,String receiptNumber) {
+		for (OpeWarehouseReserve opeWarehouseReserve : selectedList) {
+			List<OpeLaboratoryReserve>lrList=new ArrayList<>();
+			List<Long> reagentStatusIds=new ArrayList<>();
+			List<String> reagentCodes = opeWarehouseReserve.getReagentCodes();
+			List<OpeUseFlow> opeUseFlowList=new ArrayList<>();
+			if (reagentCodes != null && !reagentCodes.isEmpty()) {
+				for (String reagentCode : reagentCodes) {
+					OpeReagentStatus opeReagentStatus = this.opeReagentStatusService
+							.getOpeReagentStatusByCode(reagentCode);
+					if (!this.opeReagentStatusService.isAllowWarehouseUse(opeReagentStatus)) {
+						throw new BusinessException(ExceptionEnumCode.SYS_ERR,"只能申领在仓库的试剂");
 					}
+
+					opeReagentStatus.setUserId(userId);
+					opeReagentStatus.setProjectId(projectId);
+				//	this.opeReagentStatusService.updateReagentStatus(opeReagentStatus,receiptNumber);
+					reagentStatusIds.add(opeReagentStatus.getId());
+					OpeLaboratoryReserve lr = new OpeLaboratoryReserve();
+					lr.setReagentId(opeWarehouseReserve.getReagentId());
+					lr.setHouseId(laboratoryId);
+					lr.setContainerId(laboratoryContainerId);
+					lr.setReserve(opeWarehouseReserve.getSelectNum());
+					lr.setUserId(userId);
+					lr.setValidFlag(ValidFlag.VALID);
+					lrList.add(lr);
+
+					OpeUseFlow opeUseFlow = new OpeUseFlow();
+					opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode());
+					opeUseFlow.setStatus(opeReagentStatus.getStatus());
+					opeUseFlow.setHouseId(opeReagentStatus.getHouseId());
+					opeUseFlow.setContainerId(opeReagentStatus.getContainerId());
+					opeUseFlow.setUserId(opeReagentStatus.getUserId());
+					opeUseFlow.setPlace(opeReagentStatus.getPlace());
+					opeUseFlow.setRemainder(opeReagentStatus.getRemainder());
+					opeUseFlow.setReceiptNumber(receiptNumber);
+					opeUseFlow.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
+					opeUseFlowList.add(opeUseFlow);
 				}
-				opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve()-opeWarehouseReserve.getSelectNum());
-				opeWarehouseReserveDao.updateOpeWarehouseReserve(opeWarehouseReserve);
 			}
-		} catch (DuplicateKeyException ex) {
-			logger.warn(ex.getMessage(), ex);
-			throw new AlarmException(AlarmCode.DATA_DUPLICATE,
-					MessageUtil.getMessage(AlarmCode.DATA_DUPLICATE.getCode()));
-		} catch (DataIntegrityViolationException ex) {
-			logger.warn(ex.getMessage(), ex);
-			throw new AlarmException(AlarmCode.DATA_CONFICT, MessageUtil.getMessage(AlarmCode.DATA_CONFICT.getCode()));
-		} catch (DataAccessException ex) {
-			logger.error(ex.getMessage(), ex);
-			throw new BusinessException(ExceptionEnumCode.DB_ERR,
-					MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
+			if(reagentStatusIds.size()>0){
+				this.opeReagentStatusDao.batchUpdateReagentStatusByIds(reagentStatusIds,laboratoryId,laboratoryContainerId,ArrivalStatus.NOREGISTER.getKey());
+			}
+			if(lrList.size()>0){
+				this.opeLaboratoryReserveDao.batchInsert(lrList);
+			}
+			if(opeUseFlowList.size()>0){
+				this.opeUseFlowService.batchInsertOpeUseFlow(opeUseFlowList);
+			}
+			opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve()-opeWarehouseReserve.getSelectNum());
+			opeWarehouseReserveDao.updateOpeWarehouseReserve(opeWarehouseReserve);
 		}
+
 	}
 
-	public void reagentDStore2(List<OpeApply> reagentDStoreList, String loginUserId){
+	public void reagentDStore2(List<OpeApply> reagentDStoreList, Long loginUserId){
 		if (reagentDStoreList == null) {
 			return;
 		}
@@ -339,7 +383,7 @@
 					//opeReagentStatus.setReagentId(opeApply.getReagent().getId());
 					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
 					opeReagentStatus.setReagentCode(reagentCode);
-					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
 					opeReagentStatus.setHouseId(opeApply.getHouseId());
 					opeReagentStatus.setContainerId(opeApply.getContainerId());
 					opeReagentStatus.setUserId(loginUserId);
@@ -371,13 +415,13 @@
 					opeReagentStatus.setReagentId(opeApply.getReagent().getId());
 					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
 					opeReagentStatus.setReagentCode(reagentCode);
-					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
 					opeReagentStatus.setHouseId(opeApply.getHouseId());
 					opeReagentStatus.setContainerId(opeApply.getContainerId());
 					opeReagentStatus.setUserId(loginUserId);
 					//opeReagentStatus.setPlace(opeApply.getPlaceId());
 					//opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering()!=null?(new BigDecimal(opeApply.getReagent().getMainMetering())):new BigDecimal(0));
-					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE);
+					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE.getKey());
 					this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus);
 
 					// 试剂使用情况入库insert
@@ -389,13 +433,9 @@
 					opeUseFlow.setUserId(opeReagentStatus.getUserId());
 					opeUseFlow.setPlace(opeReagentStatus.getPlace());
 					opeUseFlow.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
-					opeUseFlow.setStoreType(StoreType.DIRECTSTORE);
+					opeUseFlow.setStoreType(StoreType.DIRECTSTORE.getKey());
 
-					Map<String, String> metaMap = new HashMap<>();
-					metaMap.put("groupId", "operate_status");
-					metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
-					List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-					opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+					opeUseFlow.setOperateState(OperateStatus.WAREHOUSEIN.getKey());
 					this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
 					// 试剂使用情况领用insert
 					OpeUseFlow ouf=new OpeUseFlow();
@@ -406,13 +446,9 @@
 					ouf.setUserId(opeReagentStatus.getUserId());
 					ouf.setPlace(opeReagentStatus.getPlace());
 					ouf.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
-					ouf.setStoreType(StoreType.DIRECTSTORE);
+					ouf.setStoreType(StoreType.DIRECTSTORE.getKey());
 
-					Map<String, String> metaMap2 = new HashMap<>();
-					metaMap2.put("groupId", "operate_status");
-					metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-					List<BaseMeta> baseMetaList2 = baseMetaDao.getBaseMetaList(metaMap2);
-					ouf.setOperateState(baseMetaList2.get(0).getId());
+					ouf.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
 					this.opeUseFlowService.insertOpeUseFlow(ouf);
 				}
 			}
@@ -420,13 +456,135 @@
 		}
 	}
 
+	public void reagentDStore4(List<OpeApply> reagentDStoreList, Long loginUserId,String receiptNumber){
+		if (reagentDStoreList == null) {
+			return;
+		}
+		OpeReagentStatus opeReagentStatus = null;
+		for (OpeApply opeApply : reagentDStoreList) {
+			List<String> codeList = opeApply.getReagentCodeList();
+			for (String reagentCode:codeList) {
+				if (this.opeReagentStatusService.isOpeReagentStatusExist(reagentCode)) {//条码存在
+					//throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_EXIST, "入库试剂:" + opeApply.getReagent().getName() + "的试剂条形码[" + reagentCode + "]已存在。");
+					// 试剂最新状态update
+					opeReagentStatus=this.opeReagentStatusService.getOpeReagentStatusByReagentCode(reagentCode);
+					//opeReagentStatus = new OpeReagentStatus();
+					//opeReagentStatus.setId(id);
+					//opeReagentStatus.setReagentId(opeApply.getReagent().getId());
+					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
+					opeReagentStatus.setReagentCode(reagentCode);
+					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
+					opeReagentStatus.setHouseId(opeApply.getHouseId());
+					opeReagentStatus.setContainerId(opeApply.getContainerId());
+					opeReagentStatus.setUserId(loginUserId);
+					//opeReagentStatus.setPlace(opeApply.getPlaceId());
+					//opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering()!=null?(new BigDecimal(opeApply.getReagent().getMainMetering())):new BigDecimal(0));
+					//opeReagentStatus.setStoreType(StoreType.DIRECTSTORE);
+					this.opeReagentStatusService.updateReagentStatus2(opeReagentStatus);
+
+					// 试剂使用情况领用insert
+					/*OpeUseFlow ouf=new OpeUseFlow();
+					ouf.setReagentCode(opeReagentStatus.getReagentCode());
+					ouf.setStatus(opeReagentStatus.getStatus());
+					ouf.setHouseId(opeReagentStatus.getHouseId());
+					ouf.setContainerId(opeReagentStatus.getContainerId());
+					ouf.setUserId(opeReagentStatus.getUserId());
+					ouf.setPlace(opeReagentStatus.getPlace());
+					ouf.setRemainder(opeApply.getReagent().getMainMetering()!=null?(new BigDecimal(opeApply.getReagent().getMainMetering())):new BigDecimal(0));
+					ouf.setStoreType(StoreType.DIRECTSTORE);
+
+					Map<String, String> metaMap2 = new HashMap<>();
+					metaMap2.put("groupId", "operate_status");
+					metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+					List<BaseMeta> baseMetaList2 = baseMetaDao.getBaseMetaList(metaMap2);
+					ouf.setOperateState(baseMetaList2.get(0).getId());
+					this.opeUseFlowService.insertOpeUseFlow(ouf);*/
+				}else{//条码不存在
+					// 试剂最新状态insert
+					opeReagentStatus = new OpeReagentStatus();
+					opeReagentStatus.setReagentId(opeApply.getReagent().getId());
+					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
+					opeReagentStatus.setReagentCode(reagentCode);
+					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
+					opeReagentStatus.setHouseId(opeApply.getHouseId());
+					opeReagentStatus.setContainerId(opeApply.getContainerId());
+					opeReagentStatus.setUserId(loginUserId);
+					//opeReagentStatus.setPlace(opeApply.getPlaceId());
+					//opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering()!=null?(new BigDecimal(opeApply.getReagent().getMainMetering())):new BigDecimal(0));
+					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE.getKey());
+					this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus);
+
+
+					// 试剂使用情况领用insert
+					OpeUseFlow ouf=new OpeUseFlow();
+					ouf.setReagentCode(opeReagentStatus.getReagentCode());
+					ouf.setStatus(opeReagentStatus.getStatus());
+					ouf.setHouseId(opeReagentStatus.getHouseId());
+					ouf.setContainerId(opeReagentStatus.getContainerId());
+					ouf.setUserId(opeReagentStatus.getUserId());
+					ouf.setPlace(opeReagentStatus.getPlace());
+					ouf.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
+					ouf.setStoreType(StoreType.DIRECTSTORE.getKey());
+
+					ouf.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
+					ouf.setReceiptNumber(receiptNumber);
+					this.opeUseFlowService.insertOpeUseFlow(ouf);
+				}
+			}
+
+		}
+	}
+	public void reagentDStore3(List<OpeApply> reagentDStoreList, Long loginUserId){
+		if (reagentDStoreList == null) {
+			return;
+		}
+		for (OpeApply opeApply : reagentDStoreList) {
+
+			for (String reagentCode:opeApply.getReagentCodeList()) {
+				if (this.opeReagentStatusService.isOpeReagentStatusExist(reagentCode)) {
+					//条码存在
+					throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_EXIST, "入库试剂:" + opeApply.getReagent().getName() + "的试剂条形码[" + reagentCode + "]已存在。");
+
+				}else{
+					//条码不存在
+					// 试剂状态insert
+					OpeReagentStatus opeReagentStatus = new OpeReagentStatus();
+					opeReagentStatus.setReagentId(opeApply.getReagent().getId());
+					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
+					opeReagentStatus.setReagentCode(reagentCode);
+					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
+					opeReagentStatus.setHouseId(opeApply.getHouseId());
+					opeReagentStatus.setContainerId(opeApply.getContainerId());
+					opeReagentStatus.setUserId(loginUserId);
+					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE.getKey());
+					this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus);
+
+
+					// 试剂使用情况领用insert
+					OpeUseFlow ouf=new OpeUseFlow();
+					ouf.setReagentCode(opeReagentStatus.getReagentCode());
+					ouf.setStatus(opeReagentStatus.getStatus());
+					ouf.setHouseId(opeReagentStatus.getHouseId());
+					ouf.setContainerId(opeReagentStatus.getContainerId());
+					ouf.setUserId(opeReagentStatus.getUserId());
+					ouf.setPlace(opeReagentStatus.getPlace());
+					ouf.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
+					ouf.setStoreType(StoreType.DIRECTSTORE.getKey());
+
+					ouf.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
+					this.opeUseFlowService.insertOpeUseFlow(ouf);
+				}
+			}
+
+		}
+	}
 	@Override
-	public List<OpeWarehouseReserve> selectByReId(String id) {
+	public List<OpeWarehouseReserve> selectByReId(Long id) {
 		return this.opeWarehouseReserveDao.selectByReId(id);
 	}
 
 	@Override
-	public void updateByReId(String newReId, String oldReId) {
+	public void updateByReId(Long newReId, Long oldReId) {
 		Map<String, Object> params=new HashMap();
 		params.put("newReId",newReId);
 		params.put("oldReId",oldReId);
@@ -435,28 +593,173 @@
 
     @Override
 	@Transactional
-    public void insertOpeWarehouseReserve2(OpeApplyReserve opeApplyReserve, OpeOrder oo) {
+    public void insertOpeWarehouseReserve2(OpeApplyReserve opeApplyReserve, OpeOrder oo,Long consigneeId) {
 
-		OpeWarehouseReserve ope = new OpeWarehouseReserve();
-		//库存为到货数量
-		ope.setReserve(opeApplyReserve.getArrivalNum());
-		//仓库
-		ope.setWarehouseId(opeApplyReserve.getHouseId());
-		//试剂
-		ope.setReagentId(opeApplyReserve.getReagent().getId());
-		//订单编号
-		ope.setOrderCode(oo.getOrderCode());
-		// 申购编号
-		ope.setApplyCode(opeApplyReserve.getApplyCode());
-		//批号
-		ope.setArticleNumber(opeApplyReserve.getArticleNumber());
-		ope.setId(IDUtils.uuid());
-		opeWarehouseReserveDao.insertOpeWarehouseReserve2(ope);
+		OpeWarehouseReserve ope = this.getOpeWarehouseReserve2(opeApplyReserve.getReagent().getId(), opeApplyReserve.getArticleNumber(),opeApplyReserve.getHouseId());
+		if (ope == null) {
+
+			ope = new OpeWarehouseReserve();
+			//库存为到货数量
+			ope.setReserve(opeApplyReserve.getArrivalNum());
+			//仓库
+			ope.setWarehouseId(opeApplyReserve.getHouseId());
+			//仓库的货柜号
+			ope.setContainerId(opeApplyReserve.getContainerId());
+			//试剂
+			ope.setReagentId(opeApplyReserve.getReagent().getId());
+			//订单编号
+			ope.setOrderCode(oo.getOrderCode());
+			// 申购编号
+			ope.setApplyCode(opeApplyReserve.getApplyCode());
+			//批号
+			ope.setArticleNumber(opeApplyReserve.getArticleNumber());
+			//ope.setId(IDUtils.uuid());
+			//新增收货人 保存在仓库库存表
+			ope.setUserId(consigneeId);
+			opeWarehouseReserveDao.insertOpeWarehouseReserve2(ope);
+		}else {
+			ope.setReserve(ope.getReserve() + opeApplyReserve.getArrivalNum());
+			this.updateOpeWarehouseReserve(ope);
+		}
+
+
+
 
     }
 
-    @Transactional(propagation = Propagation.REQUIRED)
-	public void reagentDStore(List<OpeApply> reagentDStoreList, String loginUserId) {
+	@Override
+	public List<OpeWarehouseReserve> selectWarehouseByReagentIdAndArticleNumber(Long id,String articleNumber,boolean flag) {
+		Map<String, Object> params = new HashMap<>();
+		params.put("reagentId", id);
+		params.put("articleNumber", articleNumber);
+		List<OpeWarehouseReserve> reserveList = opeWarehouseReserveDao.selectWarehouseByReagentIdAndArticleNumber(params);
+		//减去 每个仓库中的试剂有条码的个数
+		//count(reagent_id,warehouseId,1)
+		if (reserveList.size() > 0) {
+			for (OpeWarehouseReserve owr : reserveList) {
+				//根据批次号 仓库名和试剂 得到在仓库有条码的试剂总数
+				if (flag) {
+					int numOfReagentHasCode = opeReagentStatusService.getReagentNumInWarehouse(id, articleNumber, owr.getWarehouseId());
+					//仓库显示 可以补贴条码的试剂总数
+					owr.setReserve(owr.getReserve()-numOfReagentHasCode);
+				}
+			}
+		}
+		return reserveList;
+	}
+	/**
+	* 补贴扣库存去除有条码的数据
+	*/
+	public List<OpeWarehouseReserve> selectWarehouseByRidAndArticleNumberAndWarehouse(Long id,String articleNumber,Long warehouseId) {
+		Map<String, Object> params = new HashMap<>();
+		params.put("reagentId", id);
+		params.put("articleNumber", articleNumber);
+		params.put("warehouseId", warehouseId);
+		List<OpeWarehouseReserve> reserveList = opeWarehouseReserveDao.selectWarehouseByRidAndArtiNumberAndWid(params);
+		//减去 每个仓库中的试剂有条码的个数
+		//count(reagent_id,warehouseId,1)
+		if (reserveList.size() > 0) {
+			for (OpeWarehouseReserve owr : reserveList) {
+				//根据批次号 仓库名和试剂 得到在仓库有条码的试剂总数
+				int numOfReagentHasCode = opeReagentStatusService.getReagentNumInWarehouse(id, owr.getArticleNumber(), owr.getWarehouseId());
+				//仓库显示 可以补贴条码的试剂总数
+				owr.setReserve(owr.getReserve()-numOfReagentHasCode);
+			}
+		}
+		return reserveList;
+	}
+
+	@Override
+	public void updateBtReserve(Long id, Integer useNum) {
+		opeWarehouseReserveDao.updateBtReserve(id, useNum);
+	}
+
+    @Override
+    public int countByReagentId(Long id) {
+		int num = 0;
+		if (opeWarehouseReserveDao.countByReagentId(id) != null) {
+			num = opeWarehouseReserveDao.countByReagentId(id);
+		}
+		return num;
+    }
+
+    @Override
+    public OpeWarehouseReserve getRowData(Long rowKey) {
+        return opeWarehouseReserveDao.getRowData(rowKey);
+    }
+
+    @Override
+	public void btWarehouseReserveReduce(List<OpeApplyReserve> opeList) {
+		if (opeList.size() < 1) {
+			return;
+		}
+		for (OpeApplyReserve oar : opeList) {
+			Long reagentId = oar.getReagent().getId();
+			List<String> reagentCodes = new ArrayList<>(oar.getReagentCodes());
+			//开始库存扣除
+			List<OpeWarehouseReserve> cacheUpdateList = oar.getCacheUpdateList();
+			for (OpeWarehouseReserve owr : cacheUpdateList) {
+				//1.根据仓库id和试剂id搜索不同批号的试剂库存
+				List<OpeWarehouseReserve> reserveList = this
+						.selectWarehouseByRidAndArticleNumberAndWarehouse(reagentId, owr.getArticleNumber(), owr.getWarehouseId());
+				Integer numLeave = owr.getUseNum();
+
+				for (OpeWarehouseReserve warehouseReserve:reserveList){
+					//库存大于剩余领用-》直接扣完
+					int usedNum = 0;
+					if (warehouseReserve.getReserve() > numLeave) {
+					//	warehouseReserve.setReserve(warehouseReserve.getReserve() - numLeave);
+						usedNum = numLeave;
+						numLeave = 0;
+					} else {
+						numLeave = numLeave - warehouseReserve.getReserve();
+					//	warehouseReserve.setReserve(0);
+						usedNum =  warehouseReserve.getReserve();
+					}
+
+					//更新流向,加入一条
+					if (usedNum > 0) {
+						for (int i = 0; i < usedNum; i++) {
+							// 试剂使用情况入库insert TODO 流向需要当时的时间和地点
+							OpeUseFlow opeUseFlow = new OpeUseFlow();
+							opeUseFlow.setReagentCode(reagentCodes.get(0));
+							opeUseFlow.setStatus(ArrivalStatus.WAREHOUSE.getKey());
+							opeUseFlow.setUserId(warehouseReserve.getUserId());
+							//仓库地点
+							opeUseFlow.setHouseId(warehouseReserve.getWarehouseId());
+							opeUseFlow.setContainerId(warehouseReserve.getContainerId());
+							opeUseFlow.setRemainder(oar.getReagent().getMainMetering()!=null?oar.getReagent().getMainMetering():new BigDecimal(0));
+							//入库时间
+							opeUseFlow.setCreateTime(warehouseReserve.getUpdateTime());
+							opeUseFlow.setStoreType(StoreType.DIRECTSTORE.getKey());
+
+							opeUseFlow.setOperateState(OperateStatus.WAREHOUSEIN.getKey());
+							this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
+							//更新试剂状态表 :批号
+							opeReagentStatusDao.updateArticleNumberByRCode(reagentCodes.get(0),warehouseReserve.getArticleNumber());
+
+							reagentCodes.remove(0);
+
+						}
+
+					}
+
+
+					//更新库存
+					this.updateBtReserve(warehouseReserve.getId(),usedNum);
+					if (numLeave < 1) {
+						break;
+					}
+			}
+
+
+
+		}
+		}
+	}
+
+	@Transactional(propagation = Propagation.REQUIRED)
+	public void reagentDStore(List<OpeApply> reagentDStoreList, Long loginUserId) {
 
 		if (reagentDStoreList == null) {
             return;
@@ -497,13 +800,13 @@
 					opeReagentStatus.setReagentId(opeApply.getReagent().getId());
 					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
 					opeReagentStatus.setReagentCode(reagentCode);
-					opeReagentStatus.setStatus(ArrivalStatus.WAREHOUSE);
+					opeReagentStatus.setStatus(ArrivalStatus.WAREHOUSE.getKey());
 					opeReagentStatus.setHouseId(opeApply.getHouseId());
 					opeReagentStatus.setContainerId(opeApply.getContainerId());
 					opeReagentStatus.setUserId(loginUserId);
-					opeReagentStatus.setPlace(opeApply.getPlaceId());
+					opeReagentStatus.setPlace(opeApply.getPlace());
 					opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering()!=null?(opeApply.getReagent().getMainMetering()):new BigDecimal(0));
-					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE);
+					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE.getKey());
 					this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus);
 
 					// 试剂使用情况insert
@@ -515,13 +818,9 @@
 					opeUseFlow.setUserId(opeReagentStatus.getUserId());
 					opeUseFlow.setPlace(opeReagentStatus.getPlace());
 					opeUseFlow.setRemainder(opeApply.getReagent().getMainMetering()!=null?(opeApply.getReagent().getMainMetering()):new BigDecimal(0));
-					opeUseFlow.setStoreType(StoreType.DIRECTSTORE);
+					opeUseFlow.setStoreType(StoreType.DIRECTSTORE.getKey());
 
-					Map<String, String> metaMap = new HashMap<>();
-					metaMap.put("groupId", "operate_status");
-					metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
-					List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-					opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+					opeUseFlow.setOperateState(OperateStatus.WAREHOUSEIN.getKey());
 
 
 					this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
@@ -530,19 +829,21 @@
 
 
             // 仓库库存update
-            opeWarehouseReserve = this.opeWarehouseReserveService.getOpeWarehouseReserve2(opeApply.getReagent().getId(), opeApply.getArticleNumber(),opeApply.getHouseId());
+            opeWarehouseReserve = this.getOpeWarehouseReserve2(opeApply.getReagent().getId(), opeApply.getArticleNumber(),opeApply.getHouseId());
             if (opeWarehouseReserve == null) {
                 opeWarehouseReserve = new OpeWarehouseReserve();
                 opeWarehouseReserve.setReagentId(opeApply.getReagent().getId());
                 opeWarehouseReserve.setArticleNumber(opeApply.getArticleNumber());
                 opeWarehouseReserve.setReserve(0);
                 opeWarehouseReserve.setWarehouseId(opeApply.getHouseId());
+                opeWarehouseReserve.setContainerId(opeApply.getContainerId());
+                opeWarehouseReserve.setUserId(loginUserId);
             }
             opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() + opeApply.getArrivalNum());
-            if (StringUtils.isBlank(opeWarehouseReserve.getId())) {
-                this.opeWarehouseReserveService.insertOpeWarehouseReserve(opeWarehouseReserve);
+            if (opeWarehouseReserve.getId()!=null) {
+                this.insertOpeWarehouseReserve(opeWarehouseReserve);
             } else {
-                this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
+                this.updateOpeWarehouseReserve(opeWarehouseReserve);
             }
         }
 	}

--
Gitblit v1.9.2