package com.nanometer.smartlab.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.Maps; import com.nanometer.smartlab.dao.SysLaboratoryContainerDao; import com.nanometer.smartlab.dao.SysLaboratoryDao; import com.nanometer.smartlab.entity.SysLaboratory; import com.nanometer.smartlab.entity.SysLaboratoryContainer; import com.nanometer.smartlab.entity.SysWarehouse; import com.nanometer.smartlab.util.Constants; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.nanometer.smartlab.dao.SysWarehouseContainerDao; import com.nanometer.smartlab.entity.SysWarehouseContainer; import com.nanometer.smartlab.exception.AlarmCode; import com.nanometer.smartlab.exception.AlarmException; import com.nanometer.smartlab.exception.BusinessException; import com.nanometer.smartlab.exception.ExceptionEnumCode; import com.nanometer.smartlab.util.IDUtils; import com.nanometer.smartlab.util.MessageUtil; /** * Created by cmower on 17/11/20. */ @Service("sysWarehouseContainerService") public class SysWarehouseContainerServiceImpl implements SysWarehouseContainerService { private static Logger logger = Logger.getLogger(SysWarehouseContainerService.class); @Resource(name = "sysWarehouseContainerDao") SysWarehouseContainerDao sysWarehouseContainerDao; @Resource SysLaboratoryContainerDao sysLaboratoryContainerDao; @Resource SysLaboratoryDao sysLaboratoryDao; @Resource BaseMetaService baseMetaService; @Resource SysWarehouseService sysWarehouseService; @Transactional(propagation = Propagation.REQUIRED) public List getSysWarehouseContainerList(String warehouseType, String warehouseName, Long warehouseId, Integer first, Integer pageSize) { try { Map params = new HashMap(); if (StringUtils.isNotBlank(warehouseType)) { params.put("warehouseType", warehouseType); } if (StringUtils.isNotBlank(warehouseName)) { params.put("warehouseName", "%" + warehouseName + "%"); } if (warehouseId!=null) { params.put("warehouseId", warehouseId); } params.put("first", first); params.put("pageSize", pageSize); return this.sysWarehouseContainerDao.getSysWarehouseContainerList(params); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Transactional(propagation = Propagation.REQUIRED) public List getSysWarehouseContainerList(Long warehouseId){ return getSysWarehouseContainerList(null,null,warehouseId,null,null); } @Transactional(propagation = Propagation.REQUIRED) public int getSysWarehouseContainerTotalCount(String warehouseType, String warehouseName) { try { Map params = new HashMap(); if (StringUtils.isNotBlank(warehouseType)) { params.put("warehouseType", warehouseType); } if (StringUtils.isNotBlank(warehouseName)) { params.put("warehouseName", "%" + warehouseName + "%"); } return this.sysWarehouseContainerDao.getSysWarehouseContainerTotalCount(params); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Transactional(propagation = Propagation.REQUIRED) public SysWarehouseContainer getSysWarehouseContainer(Long id) { try { return this.sysWarehouseContainerDao.getSysWarehouseContainer(id); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Transactional(propagation = Propagation.REQUIRED) public SysWarehouseContainer insertSysWarehouseContainer(SysWarehouseContainer sysWarehouseContainer) { try { // if (sysWarehouseContainer.getId() == null) { // sysWarehouseContainer.setId(IDUtils.uuid()); // } this.sysWarehouseContainerDao.insertSysWarehouseContainer(sysWarehouseContainer); return sysWarehouseContainer; } 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); } } @Transactional(propagation = Propagation.REQUIRED) public boolean updateSysWarehouseContainer(SysWarehouseContainer sysWarehouseContainer) { try { int row = this.sysWarehouseContainerDao.updateSysWarehouseContainer(sysWarehouseContainer); if (row == 0) { return false; } 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); } } @Transactional(propagation = Propagation.REQUIRED) public boolean deleteSysWarehouseContainer(List sysWarehouseContainerList) { try { if (sysWarehouseContainerList == null || sysWarehouseContainerList.size() == 0) { return false; } List ids = new ArrayList(); for (SysWarehouseContainer sysWarehouseContainer : sysWarehouseContainerList) { ids.add(sysWarehouseContainer.getId()); } int row = this.sysWarehouseContainerDao.deleteSysWarehouseContainers(ids); if (row == 0) { return false; } return true; } 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); } } @Transactional(propagation = Propagation.REQUIRED) public boolean isSysWarehouseContainerExist(String containerCode, Long editId) { try { Map params = new HashMap(); params.put("containerCode", containerCode); params.put("editId", editId); int count = this.sysWarehouseContainerDao.getSysWarehouseContainerTotalCount(params); return count > 0; } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override @Transactional(readOnly = true) public List getSysWarehouseContainerInfoList(String startTime, String endTime){ Map params = ImmutableBiMap.of("startTime",startTime,"endTime",endTime); return sysWarehouseContainerDao.getSysWarehouseContainerInfoList(params); } @Override @Transactional(propagation = Propagation.REQUIRED) public SysWarehouseContainer getSysWarehouseContainerByContainerCode(String containerCode) { try { return this.sysWarehouseContainerDao.getSysWarehouseContainerByContainerCode(containerCode); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override @Transactional public void insertSysWarehouseContainer2(SysWarehouseContainer sysWarehouseContainer) { //0.新建自己 this.insertSysWarehouseContainer(sysWarehouseContainer); SysWarehouse sysWarehouse = sysWarehouseService.getSysWarehouse(sysWarehouseContainer.getWarehouseId()); //1.新建实验室 SysLaboratory sl = new SysLaboratory(); //sl.setId(IDUtils.uuid()); sl.setType(baseMetaService.getBaseMetaList(Constants.BASE_META_GROUP_LABORATORY_TYPE).get(0).getId()); //判断是否已经存在该名称实验室 SysLaboratory sysLaboratory = sysLaboratoryDao.getSysLaboratoryByName(sysWarehouse.getName()); if (sysLaboratory == null) { //新建实验室 sl.setName(sysWarehouse.getName()); sl.setInfoCode(sysWarehouse.getInfoCode()); sl.setBarCode(sysWarehouse.getBarCode()); sl.setLocation1(sysWarehouse.getLocation1()); sl.setLocation2(sysWarehouse.getLocation2()); sl.setDepartment(sysWarehouse.getDepartment()); sysLaboratoryDao.insertSysLaboratory(sl); }else{ sl.setId(sysLaboratory.getId()); } //新建临时存储库 Map params = new HashMap<>(); params.put("containerCode", sysWarehouseContainer.getContainerCode()); int count = sysLaboratoryContainerDao.getSysLaboratoryContainerTotalCount(params); //判断是否已经存在该条码柜子 if (count < 1) { SysLaboratoryContainer slc = new SysLaboratoryContainer(); // slc.setId(IDUtils.uuid()); // (#{id}, #{laboratoryId}, #{type}, #{containerCode}, #{infoCode}, #{structure}, // #{name}, 1, #{characterLeft}, #{characterRight}, now(), now(), #{controllerCode},#{project}) slc.setLaboratoryId(sl.getId()); slc.setType(sysWarehouseContainer.getType()); slc.setContainerCode(sysWarehouseContainer.getContainerCode()); slc.setInfoCode(sysWarehouseContainer.getInfoCode()); slc.setStructure(sysWarehouseContainer.getStructure()); slc.setName(sysWarehouseContainer.getName()); slc.setCharacterLeft(sysWarehouseContainer.getCharacterLeft()); slc.setCharacterRight(sysWarehouseContainer.getCharacterRight()); slc.setControllerCode(sysWarehouseContainer.getControllerCode()); sysLaboratoryContainerDao.insertSysLaboratoryContainer(slc); } } @Override @Transactional public void updateSysWarehouseContainer2(SysWarehouseContainer sysWarehouseContainer) { //1.更新自己 this.updateSysWarehouseContainer(sysWarehouseContainer); //2.更新实验室临时货柜 by ContainerCode SysLaboratoryContainer sysLaboratoryContainer = sysLaboratoryContainerDao.getSysLaboratoryContainerByContainerCode(sysWarehouseContainer.getContainerCode()); sysLaboratoryContainer.setName(sysWarehouseContainer.getName()); sysLaboratoryContainer.setInfoCode(sysWarehouseContainer.getInfoCode()); sysLaboratoryContainer.setControllerCode(sysWarehouseContainer.getControllerCode()); sysLaboratoryContainer.setStructure(sysWarehouseContainer.getStructure()); sysLaboratoryContainer.setCharacterRight(sysWarehouseContainer.getCharacterRight()); sysLaboratoryContainer.setCharacterLeft(sysWarehouseContainer.getCharacterLeft()); sysLaboratoryContainerDao.updateSysLaboratoryContainer(sysLaboratoryContainer); } @Override @Transactional public void deleteSysWarehouseContainer2(List selectedList) { //1.删除自己 this.deleteSysWarehouseContainer(selectedList); List ids = new ArrayList<>(); for (SysWarehouseContainer swc : selectedList) { SysLaboratoryContainer slc = sysLaboratoryContainerDao.getSysLaboratoryContainerByContainerCode(swc.getContainerCode()); if (slc != null) { ids.add(slc.getId()); } } //2.删除实验室临时存储柜 if (ids.size() > 0){ sysLaboratoryContainerDao.deleteSysLaboratoryContainers(ids); } } }