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;
|
|
public List<SysLaboratory> getSysLaboratoryList(String type, String name,String project,Integer first, Integer pageSize) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
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<SysLaboratory> 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<String, Object> 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<SysLaboratory> sysReagents=sysLaboratoryDao.getSysLaboratorySimpleInfoList(params);
|
commonPage.setList(sysReagents);
|
return commonPage;
|
}
|
|
|
public int getSysLaboratoryTotalCount(String type, String name,String project) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
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);
|
}
|
}
|
|
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);
|
}
|
}
|
|
public SysLaboratory getSysLaboratorySimpleInfo(String id) {
|
try {
|
return this.sysLaboratoryDao.getSysLaboratorySimpleInfo(id);
|
} catch (DataAccessException e) {
|
logger.error(e.getMessage(), e);
|
throw new BusinessException(ExceptionEnumCode.DB_ERR,
|
MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
|
}
|
}
|
|
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);
|
}
|
}
|
|
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);
|
}
|
}
|
|
|
public boolean deleteSysLaboratory(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.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<SysLaboratory> 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);
|
}
|
}
|
|
|
public boolean isSysLaboratoryExist(String barCode, String editId) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
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);
|
}
|
}
|
|
|
public SysLaboratory getSysLaboratoryByBarCode(String barCode) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
params.put("barCode", barCode);
|
|
List<SysLaboratory> 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<SysLaboratory> 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<Map> list) throws Exception {
|
|
Map<String, String> 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<Map> exportLabList(String type, String name,String project) {
|
Map<String,String> params = new HashMap<>();
|
params.put("type", type);
|
params.put("name", name);
|
params.put("project", project);
|
return sysLaboratoryDao.exportLabList(params);
|
}
|
|
@Override
|
public List<LaboratoryVo.Laboratory> getLaboratoryByProject(String project) {
|
return sysLaboratoryDao.getLaboratoryByProject(project);
|
}
|
|
@Override
|
public List<SysLaboratory> getSysLaboratoryListByUserId(String userId) {
|
//1.根据用户的课题组获取实验室,没有就按照部门
|
SysUser user = sysUserDao.getSysUser(userId);
|
Map<String,Object> params = new HashMap<>();
|
if (StringUtils.isNotBlank(user.getProject())){
|
params.put("project", user.getProject());
|
List<SysLaboratory> 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<Map> getPersonInChargeByProjects(String projectStr) {
|
List<Map> 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<Map> tail = sysLaboratoryDao.getPersonInCharge(project);
|
result.addAll(tail);
|
}
|
return result;
|
}
|
|
@Override
|
public List<SysLaboratory> getSysLaboratoryListByDep(String depId) {
|
try {
|
Map<String, Object> params = new HashMap<String, Object>();
|
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);
|
}
|
}
|
}
|