package com.nanometer.smartlab.service; import com.nanometer.smartlab.dao.SysLaboratoryDao; import com.nanometer.smartlab.dao.SysUserDao; import com.nanometer.smartlab.entity.SysLaboratory; import com.nanometer.smartlab.entity.SysUser; import com.nanometer.smartlab.entity.dto.LaboratoryVo; 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("sysLaboratoryService") public class SysLaboratoryServiceImpl implements SysLaboratoryService { private static Logger logger = Logger.getLogger(SysLaboratoryService.class); @Resource(name = "sysLaboratoryDao") SysLaboratoryDao sysLaboratoryDao; @Resource SysUserDao sysUserDao; @Transactional(propagation = Propagation.REQUIRED) public List getSysLaboratoryList(String type, String name,String project,Integer first, Integer pageSize) { try { Map params = new HashMap(); if (StringUtils.isNotBlank(type)) { params.put("type", type); } if (StringUtils.isNotBlank(name)) { params.put("name", "%" + name + "%"); } params.put("project", project); params.put("first", first); params.put("pageSize", pageSize); return this.sysLaboratoryDao.getSysLaboratoryList(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 getSysLaboratoryList(Integer pageNum, Integer pageSize, String name) { 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("name","%"+name+"%"); } params.put("first", (pageNum-1)*pageSize); params.put("pageSize", pageSize); CommonPage commonPage=new CommonPage(); commonPage.setPageNum(pageNum); commonPage.setPageSize(pageSize); Long total=new Long(sysLaboratoryDao.getSysLaboratoryTotalCount(params)); commonPage.setTotal(total); commonPage.setTotalPage(CommonPage.getTotalPage(total,pageSize)); List sysReagents=sysLaboratoryDao.getSysLaboratorySimpleInfoList(params); commonPage.setList(sysReagents); return commonPage; } @Transactional(propagation = Propagation.REQUIRED) public int getSysLaboratoryTotalCount(String type, String name,String project) { try { Map params = new HashMap(); if (StringUtils.isNotBlank(type)) { params.put("type", type); } if (StringUtils.isNotBlank(name)) { params.put("name", "%" + name + "%"); } params.put("project", project); return this.sysLaboratoryDao.getSysLaboratoryTotalCount(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 SysLaboratory getSysLaboratory(String id) { try { return this.sysLaboratoryDao.getSysLaboratory(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 SysLaboratory insertSysLaboratory(SysLaboratory sysLaboratory) { try { if (sysLaboratory.getId() == null) { sysLaboratory.setId(IDUtils.uuid()); } this.sysLaboratoryDao.insertSysLaboratory(sysLaboratory); return sysLaboratory; } 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 updateSysLaboratory(SysLaboratory sysLaboratory) { try { int row = this.sysLaboratoryDao.updateSysLaboratory(sysLaboratory); 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 deleteSysLaboratory(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.sysLaboratoryDao.deleteSysLaboratorys(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); } } public List getAllSysLaboratoryList() { try { return this.sysLaboratoryDao.getAllSysLaboratoryList(); } 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 boolean isSysLaboratoryExist(String barCode, String editId) { try { Map params = new HashMap(); params.put("barCode", barCode); params.put("editId", editId); int count = this.sysLaboratoryDao.getSysLaboratoryTotalCount(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); } } @Transactional(propagation = Propagation.REQUIRED) public SysLaboratory getSysLaboratoryByBarCode(String barCode) { try { Map params = new HashMap(); params.put("barCode", barCode); List list = this.sysLaboratoryDao.getSysLaboratoryList(params); if (list != null && list.size() > 0) { return list.get(0); } return null; } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public void insertSysReagentList(List sysLaboratoryList) { try { for (SysLaboratory sysLaboratory :sysLaboratoryList ) { SysLaboratory sysLaboratoryTmpl = new SysLaboratory(); sysLaboratoryTmpl = sysLaboratoryDao.getSysLaboratoryByBarCodeForExport(sysLaboratory.getBarCode()); if(sysLaboratoryTmpl!=null){ sysLaboratory.setId(sysLaboratoryTmpl.getId()); this.sysLaboratoryDao.updateLabExport(sysLaboratory); }else{ if (sysLaboratoryTmpl == null) { sysLaboratory.setId(IDUtils.uuid()); } this.sysLaboratoryDao.insertSysLaboratory(sysLaboratory); } } } 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 public void exportLab2Excel(List list) throws Exception { Map map = new LinkedHashMap<>(); map.put("type", "类型"); map.put("name", "名称"); map.put("infoCode", "状态码"); map.put("barCode", "地址码"); map.put("location", "地址"); map.put("department", "部门"); map.put("project", "课题组"); ExcelUtils.export2Excel(list,"实验室信息",map); } @Override public List exportLabList(String type, String name,String project) { Map params = new HashMap<>(); params.put("type", type); params.put("name", name); params.put("project", project); return sysLaboratoryDao.exportLabList(params); } @Override public List getLaboratoryByProject(String project) { return sysLaboratoryDao.getLaboratoryByProject(project); } @Override public List getSysLaboratoryListByUserId(String userId) { //1.根据用户的课题组获取实验室,没有就按照部门 SysUser user = sysUserDao.getSysUser(userId); Map params = new HashMap<>(); if (StringUtils.isNotBlank(user.getProject())){ params.put("project", user.getProject()); List list = sysLaboratoryDao.getSysLaboratoryList(params); if (list.size() < 1) { return this.getSysLaboratoryListByDep(user.getDepartment()); }else { return list; } }else { return this.getSysLaboratoryListByDep(user.getDepartment()); } } @Override public List getPersonInChargeByProjects(String projectStr) { List result = new ArrayList<>(); String[] projectSplit = projectStr.split(","); for (int i = 0; i < projectSplit.length; i++) { String project = projectSplit[i]; if (StringUtils.isBlank(project)) continue; List tail = sysLaboratoryDao.getPersonInCharge(project); result.addAll(tail); } return result; } @Override @Transactional(propagation = Propagation.REQUIRED) public List getSysLaboratoryListByDep(String depId) { try { Map params = new HashMap(); if (StringUtils.isNotBlank(depId)) { params.put("department", depId); } return this.sysLaboratoryDao.getSysLaboratoryList(params); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } }