From 12714c71c7737e21c3268b44a39f8f02befc5cb5 Mon Sep 17 00:00:00 2001
From: gdg <764716047@qq.com>
Date: 星期一, 18 一月 2021 09:55:45 +0800
Subject: [PATCH] 模块:仓库库存管理 修改:订单入库流程 提出:秦老师

---
 src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java |  134 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 134 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
index 66f3b49..98a63eb 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
@@ -1,5 +1,7 @@
 package com.nanometer.smartlab.service;
 
+import java.math.BigInteger;
+import java.sql.Timestamp;
 import java.util.*;
 
 import javax.annotation.Resource;
@@ -806,5 +808,137 @@
 		return opeReagentStatusDao.selectReagentCodesByReId(reagentId);
 	}
 
+	@Override
+	/**
+	* @Description: 订单入库时 的更新试剂状态和更新试剂流向
+	*/
+	@Transactional
+	public void orderInputWarehouseReagentStatusAndUseFlow
+			(OpeApplyReserve opeApplyReserve,String userId,List<String> reagentCodeList,OpeOrder opeOrder) {
+
+
+		for (String reagentCode : reagentCodeList) {
+
+			//1.新增试剂状态:在仓库有
+			OpeReagentStatus ors = new OpeReagentStatus();
+			ors.setId(IDUtils.uuid());
+			//状态和用户
+			ors.setStatus(ArrivalStatus.WAREHOUSE);
+			ors.setUserId(userId);
+			//入库场所
+			ors.setHouseId(opeApplyReserve.getHouseId());
+			ors.setContainerId(opeApplyReserve.getContainerId());
+			//试剂编码 id和批号
+			ors.setReagentCode(reagentCode);
+			ors.setReagentId(opeApplyReserve.getReagent().getId());
+			ors.setArticleNumber(opeApplyReserve.getArticleNumber());
+			//订单和申购单
+			ors.setApplyCode(opeApplyReserve.getApplyCode());
+			ors.setOrderCode(opeOrder.getOrderCode());
+			opeReagentStatusDao.insertOpeReagentStatus2(ors);
+
+			//2.更新试剂流向
+			OpeUseFlow ouf = new OpeUseFlow();
+			ouf.setId(IDUtils.uuid());
+			//持有者
+			ouf.setUserId(userId);
+			//在仓库状态
+			ouf.setStatus(ArrivalStatus.WAREHOUSE);
+			//操作状态->仓库入库
+			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);
+			ouf.setOperateState(baseMetaList.get(0).getId());
+			//地点
+			ouf.setHouseId(opeApplyReserve.getHouseId());
+			ouf.setContainerId(opeApplyReserve.getContainerId());
+			//试剂条码
+			ouf.setReagentCode(reagentCode);
+			//创建时间
+			ouf.setCreateTime(new Timestamp(new Date().getTime()));
+			opeUseFlowDao.insertOpeUseFlow(ouf);
+
+		}
+
+
+
+
+
+	}
+
+	/**
+	* @Description: 校验条码在试剂状态中是否存在
+	*/
+	@Override
+	public List<String> checkReagentCode(String startReagentCode2, String endReagentCode2,Integer arrivalNum) throws BusinessException {
+		if (startReagentCode2 == null || startReagentCode2.length() < 1) {
+			return null;
+		}
+
+		if (endReagentCode2 == null || endReagentCode2.length() < 1) {
+			return null;
+		}
+
+
+
+		List<String> codeList= new ArrayList<>();
+		//1.做24位的字母判断否则就是纯数字
+		if (startReagentCode2.matches(".*[A-F]+.*")) {
+			//长度为24并且后5位随机码得是数字
+			if (startReagentCode2.length() == 24 &&
+					endReagentCode2.length() == 24 &&
+					startReagentCode2.substring(startReagentCode2.length()-5).matches("/d{5}")) {
+				//24位指定编码生成
+				Integer randomStart = Integer.valueOf(startReagentCode2.substring(startReagentCode2.length() - 5));
+				Integer randomEnd = Integer.valueOf(endReagentCode2.substring(endReagentCode2.length() - 5));
+				String regentPrefix = startReagentCode2.substring(0, startReagentCode2.length() - 5);
+				String regentPrefix2 = endReagentCode2.substring(0, endReagentCode2.length() - 5);
+				//如果距离不是 到货数量或者非后5位得前缀有问题,则说明输入有问题
+				if (randomEnd - randomStart + 1 != arrivalNum||!regentPrefix2.equals(regentPrefix)) {
+					throw new BusinessException(ExceptionEnumCode.PARAM_EXIST,"试剂的开始结束条码有问题");
+				}
+				for (int random = randomStart; random < randomEnd; random++) {
+					String random5 = String.format("%0" + 5 + "d", random);
+					String reagentCode = regentPrefix + random5;
+					OpeReagentStatus opeReagentStatus = this.getOpeReagentStatusByReagentCode(reagentCode);
+					if (opeReagentStatus != null) {
+						throw new BusinessException(ExceptionEnumCode.PARAM_EXIST,
+								MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_EXIST.getCode(), "试剂条码", reagentCode));
+					}else{
+						codeList.add(reagentCode);
+					}
+				}
+				return codeList;
+			}else{
+				throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_INVALID,"输入的试剂条码不合法");
+			}
+		}
+
+		//2.纯数字编码列表生成
+		BigInteger reagentCode= new BigInteger(startReagentCode2);
+		BigInteger endReagentCode = new BigInteger(endReagentCode2);
+		//条码得距离 如果和到货数量不等 则输入有问题
+		if (!endReagentCode.subtract(reagentCode).add(BigInteger.ONE).equals(new BigInteger(String.valueOf(arrivalNum)))) {
+			throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_INVALID,"试剂的开始结束条码有问题");
+		}
+
+
+		while (reagentCode.compareTo(endReagentCode) <= 0) {
+
+			String reagentCodeStr =  String.format("%0" + startReagentCode2.length() + "d", reagentCode);
+			OpeReagentStatus opeReagentStatus = this.getOpeReagentStatusByReagentCode(reagentCodeStr);
+			if (opeReagentStatus != null) {
+				throw new BusinessException(ExceptionEnumCode.PARAM_EXIST,
+						MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_EXIST.getCode(), "试剂条码", reagentCodeStr));
+			}else{
+				codeList.add(reagentCodeStr);
+			}
+			reagentCode = reagentCode.add(BigInteger.ONE);
+		}
+
+		return codeList;
+	}
+
 
 }

--
Gitblit v1.9.2