| | |
| | | package com.nanometer.smartlab.service; |
| | | |
| | | import java.math.BigInteger; |
| | | import java.sql.Timestamp; |
| | | import java.util.*; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | 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; |
| | | } |
| | | |
| | | @Override |
| | | public void updateOpeReagentStatus(OpeReagentStatus opeReagentStatus) { |
| | | opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus); |
| | | } |
| | | |
| | | |
| | | } |