kongzy
2024-07-01 47a751cb301d05276ae5d75145d57b2d090fe4e1
src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
@@ -9,13 +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;
@@ -61,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)
@@ -74,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>();
@@ -97,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 + "%");
         }
@@ -120,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);
@@ -141,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);
@@ -161,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>();
@@ -185,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);
@@ -207,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);
@@ -230,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);
@@ -254,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>();
@@ -273,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);
@@ -293,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);
//         // 不是管理员时,加入部门
@@ -306,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);
@@ -321,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());
@@ -337,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);
            }
         }
@@ -354,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) {
@@ -372,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 {
@@ -387,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,
@@ -397,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;
@@ -451,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);
@@ -475,45 +559,45 @@
   }
   @Override
   @Transactional(propagation = Propagation.REQUIRED)
   public boolean updateReagentStatus3(OpeReagentStatus opeReagentStatus) {
   public boolean updateReagentStatus3(List<String> reagentCodes,Long userId,Long projectId,Long laboratoryId,Long laboratoryContainerId,String receiptNumber) {
      try {
         //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));
         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);
         }
         //设置 试剂状态->领用待入库
         opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
         int row = this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
         if (row == 0) {
            return false;
         }
         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());
         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());
         this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
         return true;
      } catch (DuplicateKeyException ex) {
         logger.warn(ex.getMessage(), ex);
@@ -526,13 +610,19 @@
         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) {
   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(
@@ -540,7 +630,7 @@
            opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() - 1);
            this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
         }
         opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
         opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
         int row = this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
         if (row == 0) {
            return false;
@@ -553,12 +643,9 @@
         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) {
@@ -575,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,
@@ -586,7 +672,6 @@
      }
   }
   @Transactional(propagation = Propagation.REQUIRED)
   public OpeReagentStatus getOpeReagentStatusByReagentCode2(OpeReagentStatus opeReagentStatus) {
      try {
         OpeReagentStatus status = this.opeReagentStatusDao.getOpeReagentStatusByReagentCode(opeReagentStatus.getReagentCode());
@@ -599,7 +684,6 @@
      }
   }
   @Transactional(propagation = Propagation.REQUIRED)
   public OpeReagentStatus getOpeReagentStatusByReagentCode(String reagentCode) {
      try {
         OpeReagentStatus status = this.opeReagentStatusDao.getOpeReagentStatusByReagentCode(reagentCode);
@@ -613,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);
@@ -622,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);
@@ -657,6 +741,7 @@
         opeUseFlow.setUserId(opeReagentStatus.getUserId());
         opeUseFlow.setPlace(opeReagentStatus.getPlace());
         opeUseFlow.setRemainder(opeReagentStatus.getRemainder());
         opeUseFlow.setOperateState(OperateStatus.LABORATORYIN.getKey());
         // 接口应新追加操作状态和试剂状态两个参数。
         this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
@@ -676,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);
@@ -696,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);
         }
@@ -721,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);
   }
@@ -806,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);
@@ -828,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);
@@ -840,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);
@@ -853,7 +934,7 @@
   }
   @Override
   public List<String> getReagentCodes(String reagentId) {
   public List<String> getReagentCodes(Long reagentId) {
      return opeReagentStatusDao.selectReagentCodesByReId(reagentId);
   }
@@ -863,16 +944,16 @@
   */
   @Transactional
   public void orderInputWarehouseReagentStatusAndUseFlow
         (OpeApplyReserve opeApplyReserve,String userId,List<String> reagentCodeList,OpeOrder opeOrder) {
         (OpeApplyReserve opeApplyReserve,Long userId,List<String> reagentCodeList,OpeOrder opeOrder) {
      for (String reagentCode : reagentCodeList) {
         //1.新增试剂状态:在仓库有
         OpeReagentStatus ors = new OpeReagentStatus();
         ors.setId(IDUtils.uuid());
   //      ors.setId(IDUtils.uuid());
         //状态和用户
         ors.setStatus(ArrivalStatus.WAREHOUSE);
         ors.setStatus(ArrivalStatus.WAREHOUSE.getKey());
         ors.setUserId(userId);
         //入库场所
         ors.setHouseId(opeApplyReserve.getHouseId());
@@ -888,17 +969,13 @@
         //2.更新试剂流向
         OpeUseFlow ouf = new OpeUseFlow();
         ouf.setId(IDUtils.uuid());
      //   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.setStatus(ArrivalStatus.WAREHOUSE.getKey());
         ouf.setOperateState(OperateStatus.WAREHOUSEIN.getKey());
         //地点
         ouf.setHouseId(opeApplyReserve.getHouseId());
         ouf.setContainerId(opeApplyReserve.getContainerId());
@@ -1041,12 +1118,12 @@
   }
   @Override
   public void updateOpeReagentStatus(OpeReagentStatus opeReagentStatus) {
      opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
   public int updateOpeReagentStatus(OpeReagentStatus opeReagentStatus) {
      return opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
   }
   @Override
   public int getReagentNumInWarehouse(String id, String articleNumber, String warehouseId) {
   public int getReagentNumInWarehouse(Long id, String articleNumber, Long warehouseId) {
      Map<String, Object> params = new HashMap<>();
      params.put("reagentId", id);
      params.put("articleNumber", articleNumber);
@@ -1055,4 +1132,54 @@
   }
   /**
    * @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);
    }
}