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<SysLaboratoryContainer> getSysLaboratoryContainerList(String laboratoryType, String laboratoryName,
|
String laboratoryId,String project,String controllerName, Integer first, Integer pageSize) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
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<SysLaboratoryContainer> 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<String, Object> 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<SysLaboratoryContainer> sysReagents=sysLaboratoryContainerDao.getSysLaboratoryContainerSimpleInfoList(params);
|
commonPage.setList(sysReagents);
|
return commonPage;
|
|
}
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
public List<SysLaboratoryContainer> 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<String, Object> params = new HashMap<String, Object>();
|
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<SysLaboratoryContainer> sysLaboratoryContainerList) {
|
try {
|
if (sysLaboratoryContainerList == null || sysLaboratoryContainerList.size() == 0) {
|
return false;
|
}
|
|
List<String> ids = new ArrayList<String>();
|
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<String, Object> params = new HashMap<String, Object>();
|
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<SysLaboratoryContainer> getSysLaboratoryContainerInfoList(String startTime, String endTime){
|
Map<String, String> params = ImmutableBiMap.of("startTime",startTime,"endTime",endTime);
|
return sysLaboratoryContainerDao.getSysLaboratoryContainerInfoList(params);
|
}
|
|
@Override
|
public void insertSysReagentList(List<SysLaboratoryContainer> 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<String, Object> params = new HashMap<String, Object>();
|
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<Map> 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<Map> exportExcelList(String laboratoryType, String laboratoryName,String project,String controllerName) {
|
Map<String, String> 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<Map> list) throws Exception {
|
Map<String, String> 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<String> selectProjectsByContainerCode(String containerCode) {
|
List<String> projects = sysLaboratoryContainerDao.selectProjectsByContainerCode(containerCode);
|
if (projects.size() > 0){
|
List<String> 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<SysLaboratory> sysLaboratoryList) {
|
try {
|
if (sysLaboratoryList == null || sysLaboratoryList.size() == 0) {
|
return false;
|
}
|
|
List<String> ids = new ArrayList<String>();
|
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);
|
}
|
}
|
|
}
|