package com.nanometer.smartlab.service; import com.google.common.collect.ImmutableBiMap; import com.nanometer.smartlab.dao.SysLaboratoryContainerDao; import com.nanometer.smartlab.entity.SysLaboratory; import com.nanometer.smartlab.entity.SysLaboratoryContainer; 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.model.CommonPage; import com.nanometer.smartlab.util.ExcelUtils; import com.nanometer.smartlab.util.IDUtils; import com.nanometer.smartlab.util.MessageUtil; 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 javax.annotation.Resource; import java.util.*; /** * Created by cmower on 17/11/20. */ @Service("sysLaboratoryContainerService") public class SysLaboratoryContainerServiceImpl implements SysLaboratoryContainerService { private static Logger logger = Logger.getLogger(SysLaboratoryContainerService.class); @Resource(name = "sysLaboratoryContainerDao") SysLaboratoryContainerDao sysLaboratoryContainerDao; @Transactional(propagation = Propagation.REQUIRED) public List getSysLaboratoryContainerList(String laboratoryType, String laboratoryName, String laboratoryId,String project,String controllerName, Integer first, Integer pageSize) { try { Map params = new HashMap(); if (StringUtils.isNotBlank(laboratoryType)) { params.put("laboratoryType", laboratoryType); } if (StringUtils.isNotBlank(laboratoryName)) { params.put("laboratoryName", "%" + laboratoryName + "%"); } if (StringUtils.isNotBlank(laboratoryId)) { params.put("laboratoryId", laboratoryId); } params.put("project", project); params.put("controllerName", controllerName); params.put("first", first); params.put("pageSize", pageSize); return this.sysLaboratoryContainerDao.getSysLaboratoryContainerList(params); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public CommonPage getSysLaboratoryContainerList(Integer pageNum, Integer pageSize, String name, String controllerName) { if(pageNum==null||pageNum<1){ pageNum=1; } if(pageSize==null||pageSize<1){ pageSize=10; } if(pageSize>50){ pageSize=50; } Map params = new HashMap<>(); if (StringUtils.isNotBlank(name)) { params.put("laboratoryName","%" + name+ "%"); } if (StringUtils.isNotBlank(controllerName)) { params.put("controllerName", "%" + controllerName + "%"); } params.put("first", (pageNum-1)*pageSize); params.put("pageSize", pageSize); CommonPage commonPage=new CommonPage(); commonPage.setPageNum(pageNum); commonPage.setPageSize(pageSize); Long total=new Long(sysLaboratoryContainerDao.getSysLaboratoryContainerTotalCount(params)); commonPage.setTotal(total); commonPage.setTotalPage(CommonPage.getTotalPage(total,pageSize)); List sysReagents=sysLaboratoryContainerDao.getSysLaboratoryContainerSimpleInfoList(params); commonPage.setList(sysReagents); return commonPage; } @Transactional(propagation = Propagation.REQUIRED) public List getSysLaboratoryContainerList( String laboratoryId) { return getSysLaboratoryContainerList(null,null,laboratoryId,null,null,null,null); } @Transactional(propagation = Propagation.REQUIRED) public int getSysLaboratoryContainerTotalCount(String laboratoryType, String laboratoryName, String laboratoryId,String project,String controllerName) { try { Map params = new HashMap(); if (StringUtils.isNotBlank(laboratoryType)) { params.put("laboratoryType", laboratoryType); } if (StringUtils.isNotBlank(laboratoryName)) { params.put("laboratoryName", "%" + laboratoryName + "%"); } if (StringUtils.isNotBlank(laboratoryId)) { params.put("laboratoryId", laboratoryId); } params.put("project", project); params.put("controllerName", controllerName); return this.sysLaboratoryContainerDao.getSysLaboratoryContainerTotalCount(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 SysLaboratoryContainer getSysLaboratoryContainer(String id) { try { return this.sysLaboratoryContainerDao.getSysLaboratoryContainer(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 SysLaboratoryContainer getSysLaboratoryContainerByContainerCode(String containerCode) { try { return this.sysLaboratoryContainerDao.getSysLaboratoryContainerByContainerCode(containerCode); } 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 SysLaboratoryContainer insertSysLaboratoryContainer(SysLaboratoryContainer sysLaboratoryContainer) { try { if (sysLaboratoryContainer.getId() == null) { sysLaboratoryContainer.setId(IDUtils.uuid()); } this.sysLaboratoryContainerDao.insertSysLaboratoryContainer(sysLaboratoryContainer); this.sysLaboratoryContainerDao.updateSLContainerUser(sysLaboratoryContainer); return sysLaboratoryContainer; } 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 updateSysLaboratoryContainer(SysLaboratoryContainer sysLaboratoryContainer) { try { int row = this.sysLaboratoryContainerDao.updateSysLaboratoryContainer(sysLaboratoryContainer); this.sysLaboratoryContainerDao.updateSLContainerUser(sysLaboratoryContainer); return row != 0; } 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 deleteSysLaboratoryContainer(List sysLaboratoryContainerList) { try { if (sysLaboratoryContainerList == null || sysLaboratoryContainerList.size() == 0) { return false; } List ids = new ArrayList(); for (SysLaboratoryContainer sysLaboratoryContainer : sysLaboratoryContainerList) { ids.add(sysLaboratoryContainer.getId()); this.sysLaboratoryContainerDao.updateSLContainerUser(sysLaboratoryContainer); } int row = this.sysLaboratoryContainerDao.deleteSysLaboratoryContainers(ids); return row != 0; } 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 isSysLaboratoryContainerExist(String containerCode, String editId) { try { Map params = new HashMap(); params.put("containerCode", containerCode); params.put("editId", editId); int count = this.sysLaboratoryContainerDao.getSysLaboratoryContainerExist(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 getSysLaboratoryContainerInfoList(String startTime, String endTime){ Map params = ImmutableBiMap.of("startTime",startTime,"endTime",endTime); return sysLaboratoryContainerDao.getSysLaboratoryContainerInfoList(params); } @Override public void insertSysReagentList(List list) { for (SysLaboratoryContainer container :list ) { SysLaboratoryContainer containermpl = new SysLaboratoryContainer(); containermpl = sysLaboratoryContainerDao.getSysLaboratoryContainerByContainerCode(container.getContainerCode()); if(containermpl!=null){ container.setId(containermpl.getId()); this.sysLaboratoryContainerDao.updateSysLaboratoryContainer(container); }else{ if (containermpl == null) { container.setId(IDUtils.uuid()); } this.sysLaboratoryContainerDao.insertSysLaboratoryContainer(container); } } } @Transactional(propagation = Propagation.REQUIRED) public void updateInfo(Float temp,Float humidity,Float voc1,String containerId,String flag) { try { Map params = new HashMap(); params.put("temp", temp); params.put("humidity", humidity); params.put("voc1", voc1); params.put("containerId", containerId); params.put("flag", flag); this.sysLaboratoryContainerDao.updateInfo(params); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public List getContainerPersonInCharge(String containerCode) { try { return sysLaboratoryContainerDao.getContainerPersonInCharge(containerCode); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public Map selectLocationByContainerCode(String containerCode) { try { return sysLaboratoryContainerDao.selectLocationByContainerCode(containerCode); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public List exportExcelList(String laboratoryType, String laboratoryName,String project,String controllerName) { Map params = new HashMap<>(); params.put("type", laboratoryType); params.put("name", laboratoryName); params.put("project", project); params.put("controllerName", controllerName); return sysLaboratoryContainerDao.exportExcelList(params); } @Override public void export2Excel(List list) throws Exception { Map map = new LinkedHashMap<>(); map.put("labType", "实验室类型"); map.put("labName", "实验室名称"); map.put("controlName", "主控名称"); map.put("containerCode", "临时存储库条码"); map.put("containerType", "临时存储库类型"); map.put("infoCode", "临时存储库状态码"); map.put("structure", "临时存储库结构"); map.put("name", "临时存储库名称"); map.put("project", "课题组"); ExcelUtils.export2Excel(list,"实验室临时存储库管理",map); } @Override public List selectProjectsByContainerCode(String containerCode) { List projects = sysLaboratoryContainerDao.selectProjectsByContainerCode(containerCode); if (projects.size() > 0){ List projectList = new ArrayList<>(); for (String project : projects){ if (StringUtils.isNotBlank(project)){ projectList.addAll(Arrays.asList(project.split(","))); } } return projectList; } return null; } @Override public boolean delBySlcIds(List sysLaboratoryList) { try { if (sysLaboratoryList == null || sysLaboratoryList.size() == 0) { return false; } List ids = new ArrayList(); for (SysLaboratory sysLaboratory : sysLaboratoryList) { ids.add(sysLaboratory.getId()); } int row = this.sysLaboratoryContainerDao.delSlcIds(ids); return row != 0; } 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); } } }