From d6c65a4e3d1ca7d9a7bd6806c99fee035d0a44eb Mon Sep 17 00:00:00 2001
From: 李宇 <986321569@qq.com>
Date: 星期三, 27 一月 2021 16:54:34 +0800
Subject: [PATCH] 合并

---
 src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java |  326 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 308 insertions(+), 18 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..c26f32f 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
@@ -7,6 +7,7 @@
 import javax.annotation.Resource;
 
 import com.nanometer.smartlab.dao.OpeApplyDao;
+import com.nanometer.smartlab.dao.OpeReagentStatusDao;
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
 import com.nanometer.smartlab.exception.AlarmCode;
@@ -55,6 +56,10 @@
 
     @Resource(name="opeApplyDao")
 	private OpeApplyDao opeApplyDao;
+	@Resource
+	private OpeReagentStatusDao opeReagentStatusDao;
+	@Resource
+	private OpeLaboratoryReserveService opeLaboratoryReserveService;
 
 	@Transactional(propagation = Propagation.REQUIRED)
 	public List<OpeWarehouseReserve> getOpeWarehouseReserveList(String reagentId, String supplierId, Integer first,
@@ -165,6 +170,17 @@
 					MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
 		}
 	}
+
+	@Override
+	public List<OpeWarehouseReserve> getOpeWarehouseReserveList(String reagentId, String articleNumber,String warehouseId) {
+		Map<String, String> 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 {
@@ -208,7 +224,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public void claimForPerson(List<OpeApplyReserve> selectedListForPerson,String userId,String projectNum){
+	public void claimForPerson(List<OpeApplyReserve> selectedListForPerson,String userId,String projectNum,String laboratoryId,String laboratoryContainerId){
 		try{
 			for(OpeApplyReserve app:selectedListForPerson){
 				List<String> reagentCodes = app.getReagentCode();
@@ -219,9 +235,23 @@
 						opeReagentStatus.setUserId(userId);
 						opeReagentStatus.setProjectNum(projectNum);
 						//boolean flag = this.opeReagentStatusService.updateReagentStatus(opeReagentStatus);
-						this.opeReagentStatusService.updateReagentStatus(opeReagentStatus);
+						this.opeReagentStatusService.updateReagentStatus3(opeReagentStatus);
 						ss.add(opeReagentStatus);
+						//更新试剂状态和
+						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);
 					/*HashSet<String> set=new HashSet<>();//存放批号
 					for(int i=0;i<ss.size();i++){
 						set.add(ss.get(i).getArticleNumber());
@@ -420,6 +450,135 @@
 		}
 	}
 
+	public void reagentDStore4(List<OpeApply> reagentDStoreList, String loginUserId){
+		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);
+					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);
+					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.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);
+
+					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);
+				}
+			}
+
+		}
+	}
+	public void reagentDStore3(List<OpeApply> reagentDStoreList, String 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);
+					opeReagentStatus.setHouseId(opeApply.getHouseId());
+					opeReagentStatus.setContainerId(opeApply.getContainerId());
+					opeReagentStatus.setUserId(loginUserId);
+					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE);
+					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);
+
+					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);
+				}
+			}
+
+		}
+	}
 	@Override
 	public List<OpeWarehouseReserve> selectByReId(String id) {
 		return this.opeWarehouseReserveDao.selectByReId(id);
@@ -437,25 +596,155 @@
 	@Transactional
     public void insertOpeWarehouseReserve2(OpeApplyReserve opeApplyReserve, OpeOrder oo) {
 
-		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.opeWarehouseReserveService
+				.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());
+			opeWarehouseReserveDao.insertOpeWarehouseReserve2(ope);
+		}else {
+			ope.setReserve(ope.getReserve() + opeApplyReserve.getArrivalNum());
+			this.opeWarehouseReserveService.updateOpeWarehouseReserve(ope);
+		}
+
+
+
 
     }
 
-    @Transactional(propagation = Propagation.REQUIRED)
+	@Override
+	public List<OpeWarehouseReserve> selectWarehouseByReagentIdAndArticleNumber(String id,String articleNumber,boolean flag) {
+		Map<String, String> 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(String id,String articleNumber,String warehouseId) {
+		Map<String, String> 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(String id, Integer useNum) {
+		opeWarehouseReserveDao.updateBtReserve(id, useNum);
+	}
+
+	@Override
+	public void btWarehouseReserveReduce(List<OpeApplyReserve> opeList,String userId) {
+		if (opeList.size() < 1) {
+			return;
+		}
+		for (OpeApplyReserve oar : opeList) {
+			String reagentId = oar.getReagent().getId();
+			List<String> reagentCodes = new ArrayList<>(oar.getReagentCode());
+			//开始库存扣除
+			List<OpeWarehouseReserve> cacheUpdateList = oar.getCacheUpdateList();
+			for (OpeWarehouseReserve owr : cacheUpdateList) {
+				//1.根据仓库id和试剂id搜索不同批号的试剂库存
+				List<OpeWarehouseReserve> reserveList = opeWarehouseReserveService
+						.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);
+							opeUseFlow.setUserId(userId);
+							//仓库地点
+							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);
+
+							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());
+							this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
+							reagentCodes.remove(0);
+						}
+
+					}
+
+					
+					//更新库存
+					opeWarehouseReserveService.updateBtReserve(warehouseReserve.getId(),usedNum);
+					if (numLeave < 1) {
+						break;
+					}
+			}
+
+
+
+		}
+		}
+	}
+
+	@Transactional(propagation = Propagation.REQUIRED)
 	public void reagentDStore(List<OpeApply> reagentDStoreList, String loginUserId) {
 
 		if (reagentDStoreList == null) {
@@ -537,6 +826,7 @@
                 opeWarehouseReserve.setArticleNumber(opeApply.getArticleNumber());
                 opeWarehouseReserve.setReserve(0);
                 opeWarehouseReserve.setWarehouseId(opeApply.getHouseId());
+                opeWarehouseReserve.setContainerId(opeApply.getContainerId());
             }
             opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() + opeApply.getArrivalNum());
             if (StringUtils.isBlank(opeWarehouseReserve.getId())) {

--
Gitblit v1.9.2