李宇
2021-04-07 fcdb56cf78b63f5b1455bbfab0c2bd7934b0aca5
src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
@@ -13,6 +13,7 @@
import com.nanometer.smartlab.entity.enumtype.ValidFlag;
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;
@@ -41,9 +42,10 @@
   @Resource(name = "opeReagentStatusDao")
   OpeReagentStatusDao opeReagentStatusDao;
   @Lazy
   @Resource
   private OpeWarehouseReserveService opeWarehouseReserveService;
   @Lazy
   @Resource
   private OpeUseFlowService opeUseFlowService;
   @Resource
@@ -474,45 +476,48 @@
   }
   @Override
   @Transactional(propagation = Propagation.REQUIRED)
   public boolean updateReagentStatus3(OpeReagentStatus opeReagentStatus) {
   public boolean updateReagentStatus3(List<String> reagentCodes,String userId,String projectNum,String laboratoryId,String laboratoryContainerId) {
      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 opeReagentStatusId : reagentCodes) {
            OpeReagentStatus opeReagentStatus = this.getOpeReagentStatus(opeReagentStatusId);
            opeReagentStatus.setUserId(userId);
            opeReagentStatus.setProjectNum(projectNum);
            //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);
            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());
            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);
         }
         //设置 试剂状态->领用待入库
         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);
@@ -525,6 +530,9 @@
         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);
      }
   }
@@ -574,7 +582,6 @@
      }
   }
   @Transactional(propagation = Propagation.REQUIRED)
   public OpeReagentStatus getOpeReagentStatus(String id) {
      try {
         return this.opeReagentStatusDao.getOpeReagentStatus(id);
@@ -585,7 +592,6 @@
      }
   }
   @Transactional(propagation = Propagation.REQUIRED)
   public OpeReagentStatus getOpeReagentStatusByReagentCode2(OpeReagentStatus opeReagentStatus) {
      try {
         OpeReagentStatus status = this.opeReagentStatusDao.getOpeReagentStatusByReagentCode(opeReagentStatus.getReagentCode());
@@ -598,7 +604,6 @@
      }
   }
   @Transactional(propagation = Propagation.REQUIRED)
   public OpeReagentStatus getOpeReagentStatusByReagentCode(String reagentCode) {
      try {
         OpeReagentStatus status = this.opeReagentStatusDao.getOpeReagentStatusByReagentCode(reagentCode);
@@ -1040,8 +1045,8 @@
   }
   @Override
   public void updateOpeReagentStatus(OpeReagentStatus opeReagentStatus) {
      opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
   public int updateOpeReagentStatus(OpeReagentStatus opeReagentStatus) {
      return opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
   }
   @Override