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/OpeReagentStatusServiceImpl.java | 593 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 484 insertions(+), 109 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..a621b4b 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; @@ -7,12 +9,16 @@ import com.google.common.collect.ImmutableMap; import com.nanometer.smartlab.dao.*; import com.nanometer.smartlab.entity.*; +import com.nanometer.smartlab.entity.dto.PersonUseDetail; import com.nanometer.smartlab.entity.enumtype.ValidFlag; +import com.nanometer.smartlab.util.ExcelUtils; 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; +import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -38,9 +44,10 @@ @Resource(name = "opeReagentStatusDao") OpeReagentStatusDao opeReagentStatusDao; - + @Lazy @Resource private OpeWarehouseReserveService opeWarehouseReserveService; + @Lazy @Resource private OpeUseFlowService opeUseFlowService; @Resource @@ -57,9 +64,11 @@ private OpeUseFlowDao opeUseFlowDao; @Resource private OpeWarehouseReserveDao opeWarehouseReserveDao; + @Resource + private BaseRoleService baseRoleService; - @Resource(name="baseMetaDao") - BaseMetaDao baseMetaDao; + @Resource(name = "baseMetaDao") + BaseMetaDao baseMetaDao; /* * (non-Javadoc) @@ -70,8 +79,8 @@ * java.lang.Integer) */ @Transactional(propagation = Propagation.REQUIRED) - public List<OpeReagentStatus> getOpeReagentStatusList(String reagentId, String articleNumber, Integer status, - String reagentCode, String userId, Integer first, Integer pageSize) { + public List<OpeReagentStatus> getOpeReagentStatusList(Long reagentId, String articleNumber, Integer status, + String reagentCode, Long userId, Integer first, Integer pageSize) { try { Map<String, Object> params = new HashMap<String, Object>(); @@ -93,15 +102,58 @@ } @Transactional(propagation = Propagation.REQUIRED) - public List<OpeReagentStatus> getOpeReagentStatusListForLab(String name, String articleNumber, Integer status, - String reagentCode, String userId, Integer first, Integer pageSize) { + public List<OpeReagentStatus> getOpeReagentStatusList22(Long reagentId, String articleNumber, Integer status, + String reagentCode, Long userId,String applyCode, Integer first, Integer pageSize) { + try { + Map<String, Object> params = new HashMap<String, Object>(); + + params.put("reagentId", reagentId); + params.put("articleNumber", articleNumber); + params.put("status", status); + addParamByUserId(userId, params); + if (StringUtils.isNotBlank(reagentCode)) { + params.put("reagentCode", "%" + reagentCode + "%"); + } + params.put("first", first); + params.put("pageSize", pageSize); + if (StringUtils.isNotBlank(applyCode)) { + params.put("applyCode", applyCode); + } + return this.opeReagentStatusDao.getOpeReagentStatusList22(params); + } catch (DataAccessException e) { + logger.error(e.getMessage(), e); + throw new BusinessException(ExceptionEnumCode.DB_ERR, + MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); + } + } + + @Override + public Integer getReagentStatusCountByApplyCode(String applyCode) { + return this.opeReagentStatusDao.getReagentStatusCountByApplyCode(applyCode); + } + + @Transactional(propagation = Propagation.REQUIRED) + public List<OpeReagentStatus> getOpeReagentStatusListForLab(Long reagentId, String name, String articleNumber, Integer status, + String reagentCode, Long userId, String labName, Integer first, Integer pageSize) { try { Map<String, Object> params = new HashMap<String, Object>(); params.put("name", "%" + name + "%"); params.put("articleNumber", articleNumber); params.put("status", status); - addParamByUserId(userId, params); + params.put("labName", labName); +// addParamByUserId(userId, params); + if (userId != null) { + SysUser sysUser = sysUserService.getSysUser(userId); + BaseRole baseRole = baseRoleService.getBaseRole(sysUser.getRoleId()); + //不是系统管理员 根据用户的课题组判断可视(用户所在课题组是否 在实验室的课题组下) + if (!"系统管理员".equals(baseRole.getName())) { + if (sysUser.getProjectId() != null) { + return null; + } + params.put("project", sysUser.getProjectId()); + } + } if (StringUtils.isNotBlank(reagentCode)) { params.put("reagentCode", "%" + reagentCode + "%"); } @@ -116,18 +168,35 @@ } @Transactional(propagation = Propagation.REQUIRED) - public int getOpeReagentStatusTotalCountForLab(String name, String articleNumber, Integer status, String reagentCode, - String userId) { + public int getOpeReagentStatusTotalCountForLab(Long reagentId, String name, String articleNumber, Integer status, String reagentCode, + Long userId, String labName) { try { Map<String, Object> params = new HashMap<String, Object>(); - params.put("name", "%" + name + "%"); + if(StringUtils.isNotBlank(name)){ + params.put("name", "%" + name + "%"); + } - addParamByUserId(userId, params); + +// addParamByUserId(userId, params); params.put("articleNumber", articleNumber); + if (userId != null) { + SysUser sysUser = sysUserService.getSysUser(userId); + BaseRole baseRole = baseRoleService.getBaseRole(sysUser.getRoleId()); + //不是系统管理员 根据用户的课题组判断可视(用户所在课题组是否 在实验室的课题组下) + if (!"系统管理员".equals(baseRole.getName())) { + if (sysUser.getProjectId() == null) { + return 0; + } + params.put("project", sysUser.getProjectId()); + } + } if (StringUtils.isNotBlank(reagentCode)) { params.put("reagentCode", "%" + reagentCode + "%"); } params.put("status", status); + if(StringUtils.isNotBlank(labName)){ + params.put("labName", labName); + } return this.opeReagentStatusDao.getOpeReagentStatusTotalCountForLab(params); } catch (DataAccessException e) { logger.error(e.getMessage(), e); @@ -137,8 +206,8 @@ } @Transactional(propagation = Propagation.REQUIRED) - public int getOpeReagentStatusTotalCount(String reagentId, String articleNumber, Integer status, String reagentCode, - String userId) { + public int getOpeReagentStatusTotalCount(Long reagentId, String articleNumber, Integer status, String reagentCode, + Long userId) { try { Map<String, Object> params = new HashMap<String, Object>(); params.put("reagentId", reagentId); @@ -157,9 +226,10 @@ } } + @Override @Transactional(propagation = Propagation.REQUIRED) - public List<OpeReagentStatus> getOpeReagentStatusListByName(String reagentId, String articleNumber, Integer status, - String reagentCode, String userId, Integer first, Integer pageSize) { + public List<OpeReagentStatus> getOpeReagentStatusListByName(Long reagentId, String articleNumber, Integer status, + String reagentCode, Long userId, Integer first, Integer pageSize) { try { Map<String, Object> params = new HashMap<String, Object>(); @@ -181,8 +251,8 @@ } @Transactional(propagation = Propagation.REQUIRED) - public int getOpeReagentStatusTotalCountByName(String reagentId, String articleNumber, Integer status, String reagentCode, - String userId) { + public int getOpeReagentStatusTotalCountByName(Long reagentId, String articleNumber, Integer status, String reagentCode, + Long userId) { try { Map<String, Object> params = new HashMap<String, Object>(); params.put("reagentName", reagentId); @@ -203,8 +273,8 @@ @Override - public int getPersonReagentStatusTotalCountByName(String reagentId, String articleNumber, String reagentCode, - String userId,String applyPerson,Date startTime,Date endTime) { + public int getPersonReagentStatusTotalCountByName(Long reagentId, String articleNumber, String reagentCode, + Long userId, String applyPerson, Date startTime, Date endTime) { try { Map<String, Object> params = new HashMap<String, Object>(); params.put("reagentName", reagentId); @@ -226,8 +296,8 @@ } @Override - public List<OpeReagentStatus> getPersonReagentStatusListByName(String reagentId, String articleNumber, - String reagentCode, String userId,String applyPerson,Date startTime,Date endTime, Integer first, Integer pageSize) { + public List<OpeReagentStatus> getPersonReagentStatusListByName(Long reagentId, String articleNumber, + String reagentCode, Long userId, String applyPerson, Date startTime, Date endTime, Integer first, Integer pageSize) { try { Map<String, Object> params = new HashMap<String, Object>(); params.put("reagentName", reagentId); @@ -250,8 +320,8 @@ } @Transactional(propagation = Propagation.REQUIRED) - public List<OpeReagentStatus> getLogOpeReagentStatusList(String reagentId, Integer status, String userId, - String loginId, Integer first, Integer pageSize) { + public List<OpeReagentStatus> getLogOpeReagentStatusList(Long reagentId, Integer status, Long userId, + Long loginId, Integer first, Integer pageSize) { try { Map<String, Object> params = new HashMap<String, Object>(); @@ -269,7 +339,7 @@ } @Transactional(propagation = Propagation.REQUIRED) - public int getLogOpeReagentStatusTotalCount(String reagentId, Integer status, String userId, String loginId) { + public int getLogOpeReagentStatusTotalCount(Long reagentId, Integer status, Long userId, Long loginId) { try { Map<String, Object> params = new HashMap<String, Object>(); params.put("reagentId", reagentId); @@ -289,10 +359,10 @@ * @param userId * @param params */ - private void addParamByUserId(String userId, Map<String, Object> params) { + private void addParamByUserId(Long userId, Map<String, Object> params) { // 领用操作对话框的userid为空 // 只有实验室管理时userid才不为空 - if (StringUtils.isNotBlank(userId)) { + if (userId != null) { SysUser sysUser = sysUserService.getSysUser(userId); // // 不是管理员时,加入部门 @@ -302,7 +372,8 @@ // 不是管理员时,加入userid //if (sysUser.getSeeFlag().getKey() == SeeFlag.MANAGE.getKey()||sysUser.getSeeFlag().getKey() == SeeFlag.LEADING.getKey()) { - if (sysUser.getSeeFlag().getKey() == SeeFlag.MANAGE.getKey()) { + if (sysUser.getSeeFlag().getKey() == SeeFlag.MANAGE.getKey() + && sysUser.getSeeFlag().getKey() != SeeFlag.LEADING.getKey()) { } else { params.put("userId", userId); @@ -317,13 +388,13 @@ * @param loginId * @param params */ - private void addParamByLoginId(String userId, String loginId, Map<String, Object> params) { - if (StringUtils.isNotBlank(loginId)) { + private void addParamByLoginId(Long userId, Long loginId, Map<String, Object> params) { + if (loginId != null) { SysUser sysUser = sysUserService.getSysUser(loginId); // 负责人,需要把部门的userid传递到SQL if (sysUser.getSeeFlag().getKey() == SeeFlag.LEADING.getKey()) { - List<String> departmentUserIds = new ArrayList<String>(); + List<Long> departmentUserIds = new ArrayList<Long>(); List<SysUser> departmentUsers = sysUserService.getSeeUserList(sysUser.getDepartment()); for (SysUser departmentUser : departmentUsers) { departmentUserIds.add(departmentUser.getId()); @@ -333,14 +404,14 @@ params.put("departmentUserIds", departmentUserIds); } - if (StringUtils.isNotBlank(userId)) { + if (userId != null) { params.put("userId", userId); } } else if (sysUser.getSeeFlag().getKey() == SeeFlag.NORMAL.getKey()) {// 管理员,部门的userid和个人id都不需要 params.put("userId", userId); } else { - if (StringUtils.isNotBlank(userId)) { + if (userId != null) { params.put("userId", userId); } } @@ -350,7 +421,7 @@ @Transactional(propagation = Propagation.REQUIRED) public OpeReagentStatus insertOpeReagentStatus(OpeReagentStatus opeReagentStatus) { try { - opeReagentStatus.setId(IDUtils.uuid()); + //opeReagentStatus.setId(IDUtils.uuid()); this.opeReagentStatusDao.insertOpeReagentStatus(opeReagentStatus); return opeReagentStatus; } catch (DuplicateKeyException ex) { @@ -368,6 +439,26 @@ } @Override + public int batchInsertOpeReagentStatus(List<OpeReagentStatus> OpeReagentStatusList) { + try { + return this.opeReagentStatusDao.batchInsertOpeReagentStatus(OpeReagentStatusList); + } 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); + } + } + + + + @Override @Transactional(propagation = Propagation.REQUIRED) public boolean isOpeReagentStatusExist(String reagentCode) { try { @@ -383,9 +474,9 @@ @Override @Transactional(propagation = Propagation.REQUIRED) - public OpeReagentStatus getOpeReagentStatusByCode(String reagentCode){ + public OpeReagentStatus getOpeReagentStatusById(Long id){ try { - return this.opeReagentStatusDao.getOpeReagentStatusByReagentCode(reagentCode); + return this.opeReagentStatusDao.getOpeReagentStatusById(id); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, @@ -393,17 +484,18 @@ } } + @Override public boolean isAllowWarehouseUse(OpeReagentStatus opeReagentStatus) { return opeReagentStatus != null && opeReagentStatus.getStatus() != null - && opeReagentStatus.getStatus().getKey() == ArrivalStatus.WAREHOUSE.getKey(); + && opeReagentStatus.getStatus() == ArrivalStatus.WAREHOUSE.getKey(); } - public boolean isAllowWarehouseUseByIds(List<String> list) { + public boolean isAllowWarehouseUseByIds(List<Long> list) { boolean flag = true; if (list != null && list.size() > 0) { - for (String opeReagentStatusId : list) { - OpeReagentStatus opeReagentStatus = getOpeReagentStatus(opeReagentStatusId); + for (Long opeReagentStatusId : list) { + OpeReagentStatus opeReagentStatus = getOpeReagentStatusById(opeReagentStatusId); if (!isAllowWarehouseUse(opeReagentStatus)) { flag = false; break; @@ -447,11 +539,7 @@ opeUseFlow.setPlace(opeReagentStatus.getPlace()); opeUseFlow.setRemainder(opeReagentStatus.getRemainder()); - Map<String, String> metaMap = new HashMap<>(); - metaMap.put("groupId", "operate_status"); - metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey())); - List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap); - opeUseFlow.setOperateState(baseMetaList.get(0).getId()); + opeUseFlow.setOperateState(OperateStatus.WAREHOUSEOUT.getKey()); this.opeUseFlowService.insertOpeUseFlow(opeUseFlow); @@ -470,10 +558,71 @@ } } - @Transactional(propagation = Propagation.REQUIRED) - public boolean updateReagentStatus(OpeReagentStatus opeReagentStatus) { + @Override + public boolean updateReagentStatus3(List<String> reagentCodes,Long userId,Long projectId,Long laboratoryId,Long laboratoryContainerId,String receiptNumber) { try { + for (String reagentCode : reagentCodes) { + OpeReagentStatus opeReagentStatus = this.getOpeReagentStatusByCode(reagentCode); + opeReagentStatus.setUserId(userId); + opeReagentStatus.setProjectId(projectId); + //1.判断->试剂状态是否为在仓库 + if (isAllowWarehouseUse(opeReagentStatus)) { + //1.1获得 试剂的库存选择批次 + List<OpeWarehouseReserve> owrList = this.opeWarehouseReserveService + .getOpeWarehouseReserveList(opeReagentStatus.getReagent().getId(), opeReagentStatus.getArticleNumber(), opeReagentStatus.getHouseId()); + //在同一个仓库有相同批次的试剂,根据时间早的,个数少的先扣除库存 + owrList.get(0).setReserve(owrList.get(0).getReserve() - 1); + this.opeWarehouseReserveService.updateOpeWarehouseReserve(owrList.get(0)); + } + //设置 试剂状态->领用待入库 + opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey()); + opeReagentStatus.setHouseId(laboratoryId); + opeReagentStatus.setContainerId(laboratoryContainerId); + int row = this.updateOpeReagentStatus(opeReagentStatus); + if (row == 0) { + return false; + } + + OpeUseFlow opeUseFlow = new OpeUseFlow(); + opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode()); + opeUseFlow.setStatus(opeReagentStatus.getStatus()); + opeUseFlow.setHouseId(laboratoryId); + opeUseFlow.setContainerId(laboratoryContainerId); + opeUseFlow.setUserId(opeReagentStatus.getUserId()); + opeUseFlow.setPlace(opeReagentStatus.getPlace()); + opeUseFlow.setRemainder(opeReagentStatus.getRemainder()); + opeUseFlow.setReceiptNumber(receiptNumber); + + opeUseFlow.setOperateState(OperateStatus.WAREHOUSEOUT.getKey()); + + this.opeUseFlowService.insertOpeUseFlow(opeUseFlow); + } + return true; + } 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); + }catch(Exception e){ + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + @Transactional(propagation = Propagation.REQUIRED) + public boolean updateReagentStatus(OpeReagentStatus opeReagentStatus,String receiptNumber) { + try { + if(StringUtils.isBlank(receiptNumber)){ + throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, + MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "领用单号为空")); + } if (isAllowWarehouseUse(opeReagentStatus)) { // 减少库存 OpeWarehouseReserve opeWarehouseReserve = this.opeWarehouseReserveService.getOpeWarehouseReserve( @@ -481,17 +630,11 @@ opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() - 1); this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve); } - - opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER); - -// opeReagentStatus.setHouseId(null); -// opeReagentStatus.setContainerId(null); + opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey()); int row = this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus); - if (row == 0) { return false; } - OpeUseFlow opeUseFlow = new OpeUseFlow(); opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode()); opeUseFlow.setStatus(opeReagentStatus.getStatus()); @@ -500,15 +643,10 @@ opeUseFlow.setUserId(opeReagentStatus.getUserId()); opeUseFlow.setPlace(opeReagentStatus.getPlace()); opeUseFlow.setRemainder(opeReagentStatus.getRemainder()); + opeUseFlow.setReceiptNumber(receiptNumber); - Map<String, String> metaMap = new HashMap<>(); - metaMap.put("groupId", "operate_status"); - metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey())); - List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap); - opeUseFlow.setOperateState(baseMetaList.get(0).getId()); - + opeUseFlow.setOperateState(OperateStatus.WAREHOUSEOUT.getKey()); this.opeUseFlowService.insertOpeUseFlow(opeUseFlow); - return true; } catch (DuplicateKeyException ex) { logger.warn(ex.getMessage(), ex); @@ -524,10 +662,9 @@ } } - @Transactional(propagation = Propagation.REQUIRED) - public OpeReagentStatus getOpeReagentStatus(String id) { + public OpeReagentStatus getOpeReagentStatusByCode(String reagentCode) { try { - return this.opeReagentStatusDao.getOpeReagentStatus(id); + return this.opeReagentStatusDao.getOpeReagentStatusByCode(reagentCode); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, @@ -535,7 +672,6 @@ } } - @Transactional(propagation = Propagation.REQUIRED) public OpeReagentStatus getOpeReagentStatusByReagentCode2(OpeReagentStatus opeReagentStatus) { try { OpeReagentStatus status = this.opeReagentStatusDao.getOpeReagentStatusByReagentCode(opeReagentStatus.getReagentCode()); @@ -548,7 +684,6 @@ } } - @Transactional(propagation = Propagation.REQUIRED) public OpeReagentStatus getOpeReagentStatusByReagentCode(String reagentCode) { try { OpeReagentStatus status = this.opeReagentStatusDao.getOpeReagentStatusByReagentCode(reagentCode); @@ -562,7 +697,7 @@ } @Transactional(propagation = Propagation.REQUIRED) - public void putReagentInLaboratory(String reagentCode, String barCode, String containerCode, SysUser sysUser) { + public void putReagentInLaboratory(String reagentCode, Long labId, Long labContainerId, Long userId) { try { // 检查试剂条码是否存在 OpeReagentStatus opeReagentStatus = this.getOpeReagentStatusByReagentCode(reagentCode); @@ -571,30 +706,30 @@ MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "试剂条码", reagentCode)); } - // 检查地点条码是否存在 - SysLaboratory sysLaboratory = this.sysLaboratoryService.getSysLaboratoryByBarCode(barCode); - if (sysLaboratory == null) { - throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, - MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "地点条码", barCode)); - } +// // 检查地点条码是否存在 +// SysLaboratory sysLaboratory = this.sysLaboratoryService.getSysLaboratoryByBarCode(barCode); +// if (sysLaboratory == null) { +// throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, +// MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "地点条码", barCode)); +// } +// +// // 检查货柜条码是否存在 +// SysLaboratoryContainer sysLaboratoryContainer = this.sysLaboratoryContainerService +// .getSysLaboratoryContainerByContainerCode(containerCode); +// if (sysLaboratoryContainer == null) { +// throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, MessageUtil +// .getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "货柜条码", containerCode)); +// } +// +// // 检查货柜是否属于该地点 +// if (!sysLaboratory.getId().equals(sysLaboratoryContainer.getLaboratoryId())) { +// throw new BusinessException(ExceptionEnumCode.PARAM_ERR, "货柜不属于该地点"); +// } - // 检查货柜条码是否存在 - SysLaboratoryContainer sysLaboratoryContainer = this.sysLaboratoryContainerService - .getSysLaboratoryContainerByContainerCode(containerCode); - if (sysLaboratoryContainer == null) { - throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, MessageUtil - .getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "货柜条码", containerCode)); - } - - // 检查货柜是否属于该地点 - if (!sysLaboratory.getId().equals(sysLaboratoryContainer.getLaboratoryId())) { - throw new BusinessException(ExceptionEnumCode.PARAM_ERR, "货柜不属于该地点"); - } - - opeReagentStatus.setStatus(ArrivalStatus.LABORATORY); - opeReagentStatus.setHouseId(sysLaboratory.getId()); - opeReagentStatus.setContainerId(sysLaboratoryContainer.getId()); - opeReagentStatus.setUserId(sysUser.getId()); + opeReagentStatus.setStatus(ArrivalStatus.LABORATORY.getKey()); + opeReagentStatus.setHouseId(labId); + opeReagentStatus.setContainerId(labContainerId); + opeReagentStatus.setUserId(userId); opeReagentStatus.setPlace(null); this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus); @@ -606,6 +741,7 @@ opeUseFlow.setUserId(opeReagentStatus.getUserId()); opeUseFlow.setPlace(opeReagentStatus.getPlace()); opeUseFlow.setRemainder(opeReagentStatus.getRemainder()); + opeUseFlow.setOperateState(OperateStatus.LABORATORYIN.getKey()); // 接口应新追加操作状态和试剂状态两个参数。 this.opeUseFlowService.insertOpeUseFlow(opeUseFlow); @@ -625,10 +761,10 @@ } @Transactional(propagation = Propagation.REQUIRED) - public boolean store(List<OpeReagentStatus> selectedStoreList, String laboratoryId, String laboratoryContainerId) { + public boolean store(List<OpeReagentStatus> selectedStoreList, Long laboratoryId, Long laboratoryContainerId) { try { for (OpeReagentStatus opeReagentStatus : selectedStoreList) { - opeReagentStatus.setStatus(ArrivalStatus.LABORATORY); + opeReagentStatus.setStatus(ArrivalStatus.LABORATORY.getKey()); opeReagentStatus.setHouseId(laboratoryId); opeReagentStatus.setContainerId(laboratoryContainerId); int row = this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus); @@ -645,11 +781,7 @@ opeUseFlow.setPlace(opeReagentStatus.getPlace()); opeUseFlow.setRemainder(opeReagentStatus.getRemainder()); - Map<String, String> metaMap = new HashMap<>(); - metaMap.put("groupId", "operate_status"); - metaMap.put("metaKey", String.valueOf(OperateStatus.LABORATORYIN.getKey())); - List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap); - opeUseFlow.setOperateState(baseMetaList.get(0).getId()); + opeUseFlow.setOperateState(OperateStatus.LABORATORYIN.getKey()); this.opeUseFlowService.insertOpeUseFlow(opeUseFlow); } @@ -670,7 +802,7 @@ @Override @Transactional(readOnly = true) - public List<OpeReagentStatus> getOpeReagentStatusInfoList(String startTime,String endTime, String containerid, String status){ + public List<OpeReagentStatus> getOpeReagentStatusInfoList(String startTime,String endTime, Long containerid, String status){ Map params = ImmutableMap.of("startTime",startTime,"endTime",endTime,"containerid",containerid,"status",status); return opeReagentStatusDao.getOpeReagentStatusInfoList(params); } @@ -755,15 +887,15 @@ */ @Override @Transactional - public void batchUpdateStatusByCode(List<OpeReagentStatus> list) throws Exception { - if(list == null || list.size() <1){ - throw new Exception("没有选择试剂"); - } + public void batchUpdateStatusByCode(List<PersonUseDetail> applyList) throws Exception { - for (OpeReagentStatus opeReagentStatus : list) { + + + for (PersonUseDetail pu : applyList) { + //变更试剂状态为入库 Map<String, Object> params1 = new HashMap<>(); - String reagentCode = opeReagentStatus.getReagentCode(); + String reagentCode = pu.getReagentCode(); params1.put("code", reagentCode); params1.put("status",ArrivalStatus.WAREHOUSE); opeReagentStatusDao.updateStatusByCode(params1); @@ -777,8 +909,8 @@ //增加数据库存 Map<String, Object> params3 = new HashMap<>(); - String reagentId = opeReagentStatus.getReagentId(); - String articleNumber = opeReagentStatus.getArticleNumber(); + String reagentId = pu.getReagentId(); + String articleNumber = pu.getArticleNumber(); params3.put("reagentId", reagentId); params3.put("articleNumber", articleNumber); opeWarehouseReserveDao.updateCount(params3); @@ -789,12 +921,12 @@ } @Override - public List<OpeReagentStatus> selectByReId(String id) { + public List<OpeReagentStatus> selectByReId(Long id) { return this.opeReagentStatusDao.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); @@ -802,9 +934,252 @@ } @Override - public List<String> getReagentCodes(String reagentId) { + public List<String> getReagentCodes(Long reagentId) { return opeReagentStatusDao.selectReagentCodesByReId(reagentId); } + @Override + /** + * @Description: 订单入库时 的更新试剂状态和更新试剂流向 + */ + @Transactional + public void orderInputWarehouseReagentStatusAndUseFlow + (OpeApplyReserve opeApplyReserve,Long userId,List<String> reagentCodeList,OpeOrder opeOrder) { + + + for (String reagentCode : reagentCodeList) { + + //1.新增试剂状态:在仓库有 + OpeReagentStatus ors = new OpeReagentStatus(); + // ors.setId(IDUtils.uuid()); + //状态和用户 + ors.setStatus(ArrivalStatus.WAREHOUSE.getKey()); + 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.getKey()); + + ouf.setOperateState(OperateStatus.WAREHOUSEIN.getKey()); + //地点 + 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(".*\\D+.*")) { + //长度为24并且后5位随机码得是数字 + if (startReagentCode2.length() == 24 && + endReagentCode2.length() == 24 && + startReagentCode2.matches(".*([A-F]|\\d)+.*") && + 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 List<String> generateReagentCode(String startReagentCode2, String endReagentCode2) { + if (startReagentCode2 == null || startReagentCode2.length() < 1) { + throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_INVALID,"试剂条码不合法"); + } + + if (endReagentCode2 == null || endReagentCode2.length() < 1) { + throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_INVALID,"试剂条码不合法"); + } + + + + List<String> codeList= new ArrayList<>(); + //1.做24位的字母判断否则就是纯数字 + if (startReagentCode2.matches(".*\\D+.*")) { + //长度为24并且后5位随机码得是数字 + if (startReagentCode2.length() == 24 && + endReagentCode2.length() == 24 && + startReagentCode2.matches(".*([A-F]|\\d)+.*") && + 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); + + for (int random = randomStart; random <= randomEnd; random++) { + String random5 = String.format("%0" + 5 + "d", random); + String reagentCode = regentPrefix + random5; + codeList.add(reagentCode); + } + return codeList; + }else{ + throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_INVALID,"试剂条码不合法"); + } + } + + //2.纯数字编码列表生成 + BigInteger reagentCode= new BigInteger(startReagentCode2); + BigInteger endReagentCode = new BigInteger(endReagentCode2); + + while (reagentCode.compareTo(endReagentCode) <= 0) { + String reagentCodeStr = String.format("%0" + startReagentCode2.length() + "d", reagentCode); + codeList.add(reagentCodeStr); + reagentCode = reagentCode.add(BigInteger.ONE); + } + + return codeList; + } + + @Override + public int updateOpeReagentStatus(OpeReagentStatus opeReagentStatus) { + return opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus); + } + + @Override + public int getReagentNumInWarehouse(Long id, String articleNumber, Long warehouseId) { + Map<String, Object> params = new HashMap<>(); + params.put("reagentId", id); + params.put("articleNumber", articleNumber); + params.put("warehouseId", warehouseId); + return opeReagentStatusDao.countReagentByArticleAndWarehouse(params); + } + + + /** + * @Description: 导出 + * @date 2021/4/22 10:33 + */ + @Override + public List<Map> selectExportList(String name, String articleNumber, Integer status, String reagentCode, Long userId,String labName) { + + Map<String, Object> params = new HashMap<>(); + params.put("name", name); + params.put("articleNumber", articleNumber); + params.put("status", status); + params.put("labName", labName); + if (userId!=null) { + SysUser sysUser = sysUserService.getSysUser(userId); + BaseRole baseRole = baseRoleService.getBaseRole(sysUser.getRoleId()); + //不是系统管理员 根据用户的课题组判断可视(用户所在课题组是否 在实验室的课题组下) + if (!"系统管理员".equals(baseRole.getName())) { + if (sysUser.getProjectId()==null) { + return null; + } + params.put("project", sysUser.getProjectId()); + } + } + params.put("reagentCode", reagentCode); + return opeReagentStatusDao.selectExportList(params); + } + + @Override + public void exportLabStock2Excel(List<Map> list) throws Exception { + Map<String, String> map = new LinkedHashMap<>(); + map.put("houseName", "实验室名称"); + map.put("containerCode", "临时存储库条码"); + map.put("reagentName", "试剂名称"); + map.put("reagentCode", "试剂条形码"); + map.put("articleNumber", "批号"); + map.put("cas", "cas"); + map.put("productHome", "厂家"); + map.put("supplierName", "供应商"); + map.put("remainder", "残存量"); + ExcelUtils.export2Excel(list,"实验室库存",map); + } + + @Override + public OpeReagentStatus getStatus(Long reagentId, String reagentCode) { + + + return opeReagentStatusDao.getStatus(reagentId,reagentCode); + } + } -- Gitblit v1.9.2